. * * @category Plugin * @package Laconica * @author Evan Prodromou * @copyright 2009 Control Yourself, Inc. * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 * @link http://laconi.ca/ */ if (!defined('LACONICA')) { exit(1); } /** * Plugin for OpenID authentication and identity * * This class enables consumer support for OpenID, the distributed authentication * and identity system. * * @category Plugin * @package Laconica * @author Evan Prodromou * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 * @link http://laconi.ca/ * @link http://openid.net/ */ class OpenIDPlugin extends Plugin { /** * Initializer for the plugin. */ function __construct() { parent::__construct(); } /** * Add OpenID-related paths to the router table * * Hook for RouterInitialized event. * * @return boolean hook return */ function onRouterInitialized(&$m) { $m->connect('main/openid', array('action' => 'openidlogin')); $m->connect('settings/openid', array('action' => 'openidsettings')); $m->connect('xrds', array('action' => 'publicxrds')); $m->connect('index.php?action=finishopenidlogin', array('action' => 'finishopenidlogin')); $m->connect('index.php?action=finishaddopenid', array('action' => 'finishaddopenid')); return true; } function onEndLoginGroupNav(&$action) { $action_name = $action->trimmed('action'); $action->menuItem(common_local_url('openidlogin'), _('OpenID'), _('Login or register with OpenID'), $action_name === 'openidlogin'); return true; } function onEndAccountSettingsNav(&$action) { $action_name = $action->trimmed('action'); $action->menuItem(common_local_url('openidsettings'), _('OpenID'), _('Add or remove OpenIDs'), $action_name === 'openidsettings'); return true; } function onAutoload($cls) { switch ($cls) { case 'OpenidloginAction': case 'FinishopenidloginAction': case 'FinishaddopenidAction': case 'XrdsAction': case 'PublicxrdsAction': case 'OpenidsettingsAction': require_once(INSTALLDIR.'/plugins/OpenID/' . strtolower(mb_substr($cls, 0, -6)) . '.php'); return false; case 'User_openid': require_once(INSTALLDIR.'/plugins/OpenID/User_openid.php'); return false; default: return true; } } function onSensitiveAction($action, &$ssl) { switch ($action) { case 'finishopenidlogin': case 'finishaddopenid': $ssl = true; return false; default: return true; } } function onLoginAction($action, &$login) { switch ($action) { case 'openidlogin': case 'finishopenidlogin': $login = true; return false; default: return true; } } /** * We include a element linking to the publicxrds page, for OpenID * client-side authentication. * * @return void */ function onEndHeadChildren($action) { // for client side of OpenID authentication $action->element('meta', array('http-equiv' => 'X-XRDS-Location', 'content' => common_local_url('publicxrds'))); } /** * Redirect to OpenID login if they have an OpenID * * @return boolean whether to continue */ function onRedirectToLogin($action, $user) { if (!empty($user) && User_openid::hasOpenID($user->id)) { common_redirect(common_local_url('openidlogin'), 303); return false; } return true; } }