//pass $loginname by ref so we can change it ;-) $status = SEC_remoteAuthentication($loginname, $passwd, $service, $uid); // end distributed (3rd party) remote authentication method // begin OpenID remote authentication method } elseif ($_CONF['user_login_method']['openid'] && $_CONF['usersubmission'] == 0 && !$_CONF['disable_new_user_registration'] && (isset($_GET['openid_login']) && $_GET['openid_login'] == '1')) { $query = array_merge($_GET, $_POST); if (isset($query['identity_url']) && $query['identity_url'] != 'http://') { $property = sprintf('%x', crc32($query['identity_url'])); COM_clearSpeedlimit($_CONF['login_speedlimit'], 'openid'); if (COM_checkSpeedlimit('openid', $_CONF['login_attempts'], $property) > 0) { displayLoginErrorAndAbort(82, $LANG12[26], $LANG04[112]); } } require_once $_CONF['path_system'] . 'classes/openidhelper.class.php'; $consumer = new SimpleConsumer(); $handler = new SimpleActionHandler($query, $consumer); if (isset($query['identity_url']) && $query['identity_url'] != 'http://') { $identity_url = $query['identity_url']; $ret = $consumer->find_identity_info($identity_url); if (!$ret) { COM_updateSpeedlimit('login'); $property = sprintf('%x', crc32($query['identity_url'])); COM_updateSpeedlimit('openid', $property); COM_errorLog('Unable to find an OpenID server for the identity URL ' . $identity_url); echo COM_refresh($_CONF['site_url'] . '/users.php?msg=89'); } else { // Found identity server info. list($identity_url, $server_id, $server_url) = $ret; // Redirect the user-agent to the OpenID server // which we are requesting information from. header('Location: ' . $consumer->handle_request($server_id, $server_url, oidUtil::append_args($_CONF['site_url'] . '/users.php', array('openid_login' => '1', 'open_id' => $identity_url)), $_CONF['site_url'], null, "email,nickname,fullname"));
function dispatch() { // generate a dictionary of arguments $query = formArgstoDict(); // create consumer and handler objects $consumer = new SimpleConsumer(); $handler = new SimpleActionHandler($query, $consumer); // extract identity url from arguments. Will be null if absent from query. $identity_url = isset($query['identity_url']) ? $query['identity_url'] : null; if ($identity_url) { $ret = $consumer->find_identity_info($identity_url); if (!$ret) { setAlert(sprintf('Unable to find openid server for identity url %s', $identity_url)); } else { // found identity server info list($identity_url, $server_id, $server_url) = $ret; // build trust root - this examines the script env and builds // based on your running location. In practice this may be static. // You will likely want it to be your entire website, not just // this script. $trust_root = isset($_SERVER['SCRIPT_URI']) ? $_SERVER['SCRIPT_URI'] : 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF']; // build url to application for use in creating return_to $app_url = isset($_SERVER['SCRIPT_URI']) ? $_SERVER['SCRIPT_URI'] : 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF']; // create return_to url from app_url $return_to = $handler->createReturnTo($app_url, $identity_url); // handle the request $redirect_url = $consumer->handle_request($server_id, $server_url, $return_to, $trust_root); // redirect the user-agent to the server my_redirect($redirect_url); } } else { if (isset($query['openid.mode']) || isset($query['openid_mode'])) { // got a request from the server. build a Request object and pass // it off to the consumer object. OpendIDActionHandler handles // the various end cases (see above). $openid = $handler->getOpenID(); $req = new ConsumerRequest($openid, $query, 'GET'); $response = $consumer->handle_response($req); // let our SimpleActionHandler do the work $response->doAction($handler); } } }