$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")); // Required fields. exit; } } elseif (isset($query['openid.mode']) || isset($query['openid_mode'])) { $openid_mode = ''; if (isset($query['openid.mode'])) { $openid_mode = $query['openid.mode']; } else { if (isset($query['openid_mode'])) { $openid_mode = $query['openid_mode']; } } if ($openid_mode == 'cancel') { COM_updateSpeedlimit('login'); echo COM_refresh($_CONF['site_url'] . '/users.php?msg=90');
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); } } }