$store = new Auth_OpenID_FileStore('/tmp');
$consumer = new ElggOpenIDConsumer($store);
-$consumer->setProvider('google');
+$consumer->setProvider(get_input('provider'));
$consumer->setReturnURL(elgg_get_site_url() . 'mod/openid_client/return.php');
$html = $consumer->requestAuthentication();
class ElggOpenIDConsumer {
protected $provider;
+ protected $username;
protected $returnURL;
protected $store;
$this->provider = $provider;
}
+ /**
+ * Set the OpenID username
+ *
+ * @param string $username
+ */
+ public function setUsername($username) {
+ $this->username = $username;
+ }
+
/**
* Set the return URL
*
*/
protected function getProviderURL() {
$url = null;
- switch ($this->provider) {
+ $provider = $this->provider;
+ $username = $this->username;
+ switch ($provider) {
case 'google':
$url = 'https://www.google.com/accounts/o8/id';
break;
+ case 'yahoo':
+ $url = 'https://me.yahoo.com/';
+ break;
+ case 'blogger':
+ $url = "http://$username.blogspot.com/";
+ break;
+ case 'wordpress':
+ $url = "";
+ break;
+ case 'aol':
+ $url = "http://openid.aol.com/$username";
+ break;
+ case 'verisign':
+ $url = "http://username.pip.verisignlabs.com/";
+ break;
+ case 'myopenid':
+ $url = 'https://myopenid.com/';
+ break;
+ case 'myspace':
+ $url = 'https://api.myspace.com/openid';
+ break;
default:
+ $params = array(
+ 'provider' => $provider,
+ 'username' => $username,
+ );
+ $url = elgg_trigger_plugin_hook('set', 'openid_client:url', $params);
break;
}
$data = $this->extractUserData($sreg, $ax);
$data['openid_identifier'] = $response->getDisplayIdentifier();
- return data;
+ return $data;
}
/**
$data['email'] = $sreg['email'];
}
if (isset($ax['http://axschema.org/contact/email'])) {
- $data['email'] = $ax['http://axschema.org/contact/email'];
+ $data['email'] = $ax['http://axschema.org/contact/email'][0];
}
// display name
$data['name'] = $sreg['fullname'];
}
if (isset($ax['http://axschema.org/namePerson/first'])) {
- $data['name'] = $ax['http://axschema.org/namePerson/first'];
+ $data['name'] = $ax['http://axschema.org/namePerson/first'][0];
}
if (isset($ax['http://axschema.org/namePerson/last'])) {
- $data['name'] .= ' ' . $ax['http://axschema.org/namePerson/last'];
+ $data['name'] .= ' ' . $ax['http://axschema.org/namePerson/last'][0];
$data['name'] = trim($data['name']);
}
'openid_client:login:header' => 'Log in with',\r
'openid_client:or:header' => 'or',\r
'openid_client:login:instructs' => 'Login in with %s',\r
- 'openid_client:server:google' => 'Google',\r
- 'openid_client:server:yahoo' => 'Yahoo',\r
- 'openid_client:server:blogger' => 'Blogger',\r
- 'openid_client:server:wordpress' => 'Wordpress',\r
+ 'openid_client:provider:google' => 'Google',\r
+ 'openid_client:provider:yahoo' => 'Yahoo',\r
+ 'openid_client:provider:blogger' => 'Blogger',\r
+ 'openid_client:provider:wordpress' => 'Wordpress',\r
\r
'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
);\r
\r
add_translation('en', $english);\r
if (isset($data['username'])) {
$vars['username'] = $data['username'];
} else if (isset($data['email'])) {
- $vars['username'] = array_pop(explode('@', $data['email']));
+ $vars['username'] = array_shift(explode('@', $data['email']));
} else {
$vars['username'] = null;
}
$consumer->setReturnURL($url);\r
$data = $consumer->completeAuthentication();\r
if (!$data || !$data['openid_identifier']) {\r
- // @todo handle error\r
+ register_error(elgg_echo('openid_client:error:bad_response'));\r
+ forward();\r
}\r
\r
// does this user exist\r
// register the new user\r
$result = openid_client_registration_page_handler($data);\r
if (!$result) {\r
- register_error('openid_client:error:bad_register');\r
+ register_error(elgg_echo('openid_client:error:bad_register'));\r
forward();\r
}\r
}\r
$items = elgg_trigger_plugin_hook('register', 'openid_login', null, $items);\r
\r
$priority = 100;\r
- foreach ($items as $type => $servers) {\r
- foreach ($servers as $server) {\r
- $server_name = elgg_echo("openid_client:server:$server");\r
+ foreach ($items as $type => $providers) {\r
+ foreach ($providers as $provider) {\r
+ $provider_name = elgg_echo("openid_client:provider:$provider");\r
$menu[] = ElggMenuItem::factory(array(\r
- 'name' => $server,\r
+ 'name' => $provider,\r
'text' => '<span></span>',\r
- 'title' => elgg_echo('openid_client:login:instructs', array($server_name)),\r
- 'href' => "action/openid_client/login?server=$server",\r
+ 'title' => elgg_echo('openid_client:login:instructs', array($provider_name)),\r
+ 'href' => "action/openid_client/login?provider=$provider",\r
'is_action' => true,\r
'section' => $type,\r
'priority' => $priority,\r