setReturnURL($url); $data = $consumer->completeAuthentication(); if (!$data || !$data['openid_identifier']) { register_error(elgg_echo('openid_client:error:bad_response')); forward(); } // is there an account already associated with this openid $user = null; $users = elgg_get_entities_from_annotations(array( 'type' => 'user', 'annotation_name' => 'openid_identifier', 'annotation_value' => $data['openid_identifier'], )); if ($users) { // there should only be one account $user = $users[0]; } else { $email = elgg_extract('email', $data); if ($email) { $users = get_user_by_email($email); if (count($users)) { register_error(elgg_echo('openid_client:email_register')); forward(); } } } if ($user) { // log in user and maybe update account (admin setting, user prompt?) try { login($user, $persistent); } catch (LoginException $e) { register_error($e->getMessage()); forward(); } system_message(elgg_echo('loginok')); forward(); } else { // register the new user $result = openid_client_registration_page_handler($data); if (!$result) { register_error(elgg_echo('openid_client:error:bad_register')); forward(); } }