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();
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();
}
$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/';
* 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() {
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);
+ }
}
}
'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
*/\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
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
--- /dev/null
+<?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
--- /dev/null
+<?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();
+ });
+});
'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);