]> gitweb.fluxo.info Git - lorea/elgg.git/commitdiff
added support for OpenID 1.x
authorcash <cash.costello@gmail.com>
Sun, 18 Dec 2011 02:52:20 +0000 (21:52 -0500)
committercash <cash.costello@gmail.com>
Sun, 18 Dec 2011 02:52:20 +0000 (21:52 -0500)
actions/openid_client/login.php
classes/ElggOpenIDConsumer.php
languages/en.php
start.php
views/default/forms/openid_client/login.php [new file with mode: 0644]
views/default/openid_client/js.php [new file with mode: 0644]
views/default/openid_client/login.php

index 74a8de8f68d467d84d7972aed6936e3639d99269..cf991ea0fe31f5cd9df6bfc686d925dfed5899f2 100644 (file)
@@ -5,8 +5,12 @@
 
 elgg_load_library('openid_consumer');
 
+$provider = get_input('openid_provider');
+$username = get_input('openid_username');
+
 $consumer = new ElggOpenIDConsumer($store);
-$consumer->setProvider(get_input('provider'));
+$consumer->setProvider($provider);
+$consumer->setUsername($username);
 $consumer->setReturnURL(elgg_get_site_url() . 'mod/openid_client/return.php');
 
 $html = $consumer->requestAuthentication();
@@ -14,5 +18,7 @@ if ($html) {
        echo $html;
        exit;
 } else {
-       register_error('oops');
+       $provider_name = elgg_echo("openid_client:provider:$provider");
+       register_error(elgg_echo('openid_client:error:no_html', array($provider_name)));
+       forward();
 }
index 864e47d41848dc5a21d95538be99ab98a0bef3da..3918086ab95964865a6d350cf9364a210ae60dcf 100644 (file)
@@ -142,13 +142,17 @@ class ElggOpenIDConsumer {
                                $url = "http://$username.blogspot.com/";
                                break;
                        case 'wordpress':
-                               $url = "";
+                               // username is actually the blog name
+                               $url = "http://$username.wordpress.com/";
+                               break;
+                       case 'livejournal':
+                               $url = "http://$username.livejournal.com/";
                                break;
                        case 'aol':
-                               $url = "http://openid.aol.com/$username";
+                               $url = "https://openid.aol.com/";
                                break;
                        case 'verisign':
-                               $url = "http://username.pip.verisignlabs.com/";
+                               $url = "https://pip.verisignlabs.com/ ";
                                break;
                        case 'myopenid':
                                $url = 'https://myopenid.com/';
@@ -204,6 +208,8 @@ class ElggOpenIDConsumer {
         * the provider. If JavaScript is not enabled, a plain html form with a
         * continue button is displayed.
         *
+        * This also supports OpenID 1.x but has not been tested as thoroughly.
+        *
         * @return mixed
         */
        protected function getForm() {
@@ -213,7 +219,13 @@ class ElggOpenIDConsumer {
                        return $html;
                } else {
                        // OpenID 1.x
-                       return false;
+                       $redirect_url = $this->request->redirectURL(elgg_get_site_url(), $this->returnURL);
+
+                       if (Auth_OpenID::isFailure($redirect_url)) {
+                               return false;
+                       } else {
+                               forward($redirect_url);
+                       }
                }
        }
 
index 4efb59463fb47a942b54170fdba26b4fef3728d8..8c5beff1b6066c919c6eb016ebf6454cf47dd4b0 100644 (file)
@@ -19,6 +19,7 @@ $english = array(
        'openid_client:success:register' => 'Your account has been created.',\r
        'openid_client:error:bad_register' => 'Unable to create an account. Please contact a site administrator.',\r
        'openid_client:error:bad_response' => 'Bad response from the OpenID server',\r
+       'openid_client:error:no_html' => 'An error occurred trying to contact %s',\r
        'openid_client:warning:username_not_available' => 'The username %s is not available. Please pick another.',\r
        'openid_client:warning:username_valid' => 'The username %s is not valid as this site. Please pick another.',\r
        'openid_client:warning:email_not_available' => 'The email address %s is not available. Please pick another.',\r
index a1defd28022b641fba197d2bf1c65f4fed4e5671..b243d66743ea4766e58b4d8cceda4aca9caf7144 100644 (file)
--- a/start.php
+++ b/start.php
@@ -13,6 +13,7 @@ elgg_register_event_handler('init', 'system', 'openid_client_init');
  */\r
 function openid_client_init() {\r
        elgg_extend_view('css/elgg', 'openid_client/css');\r
+       elgg_extend_view('js/elgg', 'openid_client/js');\r
 \r
        elgg_extend_view('core/account/login_box', 'openid_client/login');\r
        elgg_register_plugin_hook_handler('register', 'menu:openid_login', 'openid_client_setup_menu');\r
@@ -58,24 +59,39 @@ function openid_client_set_subtype($event, $type, $user) {
 function openid_client_setup_menu($hook, $type, $menu, $params) {\r
 \r
        $items = array(\r
-               'large' => array('google', 'yahoo'),\r
-               'small' => array('blogger', 'wordpress'),\r
+               'large' => array(\r
+                       'google' => '',\r
+                       'yahoo' => '',\r
+               ),\r
+               'small' => array(\r
+                       'blogger' => 'toggle',\r
+                       'wordpress' => 'toggle',\r
+               ),\r
        );\r
        $items = elgg_trigger_plugin_hook('register', 'openid_login', null, $items);\r
 \r
        $priority = 100;\r
        foreach ($items as $type => $providers) {\r
-               foreach ($providers as $provider) {\r
+               foreach ($providers as $provider => $toggle) {\r
                        $provider_name = elgg_echo("openid_client:provider:$provider");\r
-                       $menu[] = ElggMenuItem::factory(array(\r
+\r
+                       $options = array(\r
                                'name' => $provider,\r
                                'text' => '<span></span>',\r
                                'title' => elgg_echo('openid_client:login:instructs', array($provider_name)),\r
-                               'href' => "action/openid_client/login?provider=$provider",\r
+                               'href' => "action/openid_client/login?openid_provider=$provider",\r
                                'is_action' => true,\r
                                'section' => $type,\r
                                'priority' => $priority,\r
-                       ));\r
+                       );\r
+\r
+                       if ($toggle) {\r
+                               $options['link_class'] = 'openid-client-toggle';\r
+                               $options['rel'] = $provider;\r
+                       }\r
+\r
+                       $menu[] = ElggMenuItem::factory($options);\r
+\r
                        $priority += 10;\r
                }\r
        }\r
diff --git a/views/default/forms/openid_client/login.php b/views/default/forms/openid_client/login.php
new file mode 100644 (file)
index 0000000..eba6dbe
--- /dev/null
@@ -0,0 +1,13 @@
+<?php
+/**
+ * OpenID login if username or full url required
+ */
+
+echo '<label>';
+echo elgg_echo('username');
+echo '</label>';
+echo elgg_view('input/text', array('name' => 'openid_username', 'class' => 'mbs'));
+
+echo elgg_view('input/hidden', array('name' => 'openid_provider'));
+
+echo elgg_view('input/submit', array('value' => elgg_echo('submit')));
\ No newline at end of file
diff --git a/views/default/openid_client/js.php b/views/default/openid_client/js.php
new file mode 100644 (file)
index 0000000..1755777
--- /dev/null
@@ -0,0 +1,18 @@
+<?php
+/**
+ * OpenID JavaScript
+ */
+
+?>
+
+// OpenID toggle
+elgg.register_hook_handler('init', 'system', function() {
+       $(".openid-client-toggle").click(function(event) {
+               $("#openid-client-login-form").slideDown();
+
+               var provider_input = $("#openid-client-login-form input[name=openid_provider]");
+               provider_input.attr('value', $(this).attr('rel'));
+
+               event.preventDefault();
+       });
+});
index 7e71b8bab44b886ddbdb5937a3081b71e5c0a6f7..30685fe51872d6fa0e2f3a9d3c0a8d5ce29366d4 100644 (file)
@@ -10,3 +10,9 @@ echo elgg_view_menu('openid_login', array(
        'class' => 'elgg-menu-hz',
        'sort_by' => 'priority',
 ));
+
+$form_vars = array(
+       'class' => 'hidden',
+       'id' => 'openid-client-login-form',
+);
+echo elgg_view_form('openid_client/login', $form_vars);