diff options
author | Sem <sembrestels@riseup.net> | 2013-11-09 16:25:34 +0100 |
---|---|---|
committer | Sem <sembrestels@riseup.net> | 2013-11-09 16:25:34 +0100 |
commit | 2161e2335c9c650b8e44a56f6c9b0bd37546ae1f (patch) | |
tree | 91bef55b773a7a80b5f6a065411574bdbe9fe522 /mod/openid_client/return.php | |
parent | a9ac4c861335e60373c1e99b61372e6e0d6ac9f4 (diff) | |
parent | 11ea6ae4734a0e722c6ecaaee90e9ab772e8d2cc (diff) | |
download | elgg-2161e2335c9c650b8e44a56f6c9b0bd37546ae1f.tar.gz elgg-2161e2335c9c650b8e44a56f6c9b0bd37546ae1f.tar.bz2 |
Add 'mod/openid_client/' from commit '11ea6ae4734a0e722c6ecaaee90e9ab772e8d2cc'
git-subtree-dir: mod/openid_client
git-subtree-mainline: a9ac4c861335e60373c1e99b61372e6e0d6ac9f4
git-subtree-split: 11ea6ae4734a0e722c6ecaaee90e9ab772e8d2cc
Diffstat (limited to 'mod/openid_client/return.php')
-rw-r--r-- | mod/openid_client/return.php | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/mod/openid_client/return.php b/mod/openid_client/return.php new file mode 100644 index 000000000..3aa728ea6 --- /dev/null +++ b/mod/openid_client/return.php @@ -0,0 +1,69 @@ +<?php
+/**
+ * Callback for return_to url redirection.
+ *
+ * The identity server will redirect back to this handler with the results of
+ * the authentication attempt.
+ *
+ * Note: the Janrain OpenID library is incompatible with Elgg's routing so
+ * this script needs to be directly accessed.
+ */
+
+require_once dirname(dirname(dirname(__FILE__))).'/engine/start.php';
+
+elgg_load_library('openid_consumer');
+elgg_load_library('openid_client');
+
+$persistent = get_input('persistent', false);
+
+// get user data from the response
+$consumer = new ElggOpenIDConsumer($store);
+$url = elgg_get_site_url() . "mod/openid_client/return.php?persistent=$persistent";
+$consumer->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();
+ }
+}
|