?? openid.php
字號:
<?php/** * @version $Id: openid.php 10497 2008-07-03 16:36:12Z ircmaxell $ * @package Joomla * @subpackage JFramework * @copyright Copyright (C) 2005 - 2008 Open Source Matters. All rights reserved. * @license GNU/GPL, see LICENSE.php * Joomla! is free software. This version may have been modified pursuant * to the GNU General Public License, and as distributed it includes or * is derivative of works licensed under the GNU General Public License or * other free or open source software licenses. * See COPYRIGHT.php for copyright notices and details. */// Check to ensure this file is included in Joomla!defined('_JEXEC') or die( 'Restricted access' );jimport( 'joomla.plugin.plugin' );/** * OpenID Authentication Plugin * * @author Johan Janssens <johan.janssens@joomla.org> * @package Joomla * @subpackage openID * @since 1.5 */class plgAuthenticationOpenID extends JPlugin{ /** * Constructor * * For php4 compatability we must not use the __constructor as a constructor for plugins * because func_get_args ( void ) returns a copy of all passed arguments NOT references. * This causes problems with cross-referencing necessary for the observer design pattern. * * @param object $subject The object to observe * @param array $config An array that holds the plugin configuration * @since 1.5 */ function plgAuthenticationOpenID(& $subject, $config) { parent::__construct($subject, $config); } /** * This method should handle any authentication and report back to the subject * * @access public * @param array $credentials Array holding the user credentials * @param array $options Array of extra options (return, entry_url) * @param object $response Authentication response object * @return boolean * @since 1.5 */ function onAuthenticate( $credentials, $options, &$response ) { global $mainframe; if ( !defined('Auth_OpenID_RAND_SOURCE') ) { define ("Auth_OpenID_RAND_SOURCE", null); } require_once(JPATH_LIBRARIES.DS.'openid'.DS.'consumer.php'); jimport('joomla.filesystem.folder'); // Access the session data $session =& JFactory::getSession(); // Need to check for bcmath or gmp - if not, use the dumb mode. // TODO: Should dump an error to debug saying we are dumb global $_Auth_OpenID_math_extensions; $ext = Auth_OpenID_detectMathLibrary($_Auth_OpenID_math_extensions); if (!isset($ext['extension']) || !isset($ext['class'])) { define ("Auth_OpenID_NO_MATH_SUPPORT", true); } // Create and/or start using the data store $store_path = JPATH_ROOT . '/tmp/_joomla_openid_store'; if (!JFolder::exists($store_path) && !JFolder::create($store_path)) { $response->type = JAUTHENTICATE_STATUS_FAILURE; $response->error_message = "Could not create the FileStore directory '$store_path'. " . " Please check the effective permissions."; return false; } // Create store object $store = new Auth_OpenID_FileStore($store_path); // Create a consumer object $consumer = new Auth_OpenID_Consumer($store); if (!isset($_SESSION['_openid_consumer_last_token'])) { // Begin the OpenID authentication process. if(!$request = $consumer->begin($credentials['username'])) { $response->type = JAUTHENTICATE_STATUS_FAILURE; $response->error_message = 'Authentication error : could not connect to the openid server'; return false; } // Request simple registration information $request->addExtensionArg('sreg', 'required' , 'email'); $request->addExtensionArg('sreg', 'optional', 'fullname, language, timezone'); //Create the entry url $entry_url = isset($options['entry_url']) ? $options['entry_url'] : JURI::base(); $entry_url = JURI::getInstance($entry_url); unset($options['entry_url']); //We don't need this anymore //Create the url query information $options['return'] = isset($options['return']) ? base64_encode($options['return']) : base64_encode(JURI::base()); $options[JUtility::getToken()] = 1; $process_url = sprintf($entry_url->toString()."&username=%s", $credentials['username']); $process_url .= '&'.JURI::buildQuery($options); $trust_url = $entry_url->toString(array('path', 'host', 'port', 'scheme')); $redirect_url = $request->redirectURL($trust_url, $process_url); $session->set('trust_url', $trust_url); // Redirect the user to the OpenID server for authentication. Store // the token for this authentication so we can verify the response. $mainframe->redirect($redirect_url); return false; } $result = $consumer->complete(JRequest::get('get')); switch ($result->status) { case Auth_OpenID_SUCCESS : { $sreg = $result->extensionResponse('sreg'); $response->status = JAUTHENTICATE_STATUS_SUCCESS; $response->error_message = ''; $response->email = isset($sreg['email']) ? $sreg['email'] : ""; $response->fullname = isset($sreg['fullname']) ? $sreg['fullname'] : ""; $response->language = isset($sreg['language']) ? $sreg['language'] : ""; $response->timezone = isset($sreg['timezone']) ? $sreg['timezone'] : ""; } break; case Auth_OpenID_CANCEL : { $response->status = JAUTHENTICATE_STATUS_CANCEL; $response->error_message = 'Authentication cancelled'; } break; case Auth_OpenID_FAILURE : { $response->status = JAUTHENTICATE_STATUS_FAILURE; $response->error_message = 'Authentication failed'; } break; } }}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -