function OpenIDConvertFinish() { global $wgUser, $wgOut; $consumer = OpenIDConsumer(); $response = $consumer->complete($_GET); if (!isset($response)) { $wgOut->errorpage('openiderror', 'openiderrortext'); return; } switch ($response->status) { case Auth_OpenID_CANCEL: // This means the authentication was cancelled. $wgOut->errorpage('openidcancel', 'openidcanceltext'); break; case Auth_OpenID_FAILURE: $wgOut->errorpage('openidfailure', 'openidfailuretext'); break; case Auth_OpenID_SUCCESS: // This means the authentication succeeded. $openid_url = $response->identity_url; if (!isset($openid_url)) { $wgOut->errorpage('openiderror', 'openiderrortext'); return; } # We check again for dupes; this may be normalized or # reformatted by the server. $other = OpenIDGetUser($openid_url); if (isset($other)) { if ($other->getId() == $wgUser->getID()) { $wgOut->errorpage('openiderror', 'openidconvertyourstext'); } else { $wgOut->errorpage('openiderror', 'openidconvertothertext'); } return; } OpenIDSetUserUrl($wgUser, $openid_url); $wgOut->setPageTitle(wfMsg('openidconvertsuccess')); $wgOut->setRobotpolicy('noindex,nofollow'); $wgOut->setArticleRelated(false); $wgOut->addWikiText(wfMsg('openidconvertsuccesstext', $openid_url)); $wgOut->returnToMain(); } }
function OpenIDLogin($openid_url, $finish_page = 'OpenIDFinish') { global $wgUser, $wgTrustRoot, $wgOut; # If it's an interwiki link, expand it $openid_url = OpenIDInterwikiExpand($openid_url); wfDebug("New URL is '{$openid_url}'\n"); # Check if the URL is allowed if (!OpenIDCanLogin($openid_url)) { $wgOut->errorpage('openidpermission', 'openidpermissiontext'); return; } $sk = $wgUser->getSkin(); if (isset($wgTrustRoot)) { $trust_root = $wgTrustRoot; } else { global $wgArticlePath, $wgServer; $root_article = str_replace('$1', '', $wgArticlePath); $trust_root = $wgServer . $root_article; } $consumer = OpenIDConsumer(); if (!$consumer) { $wgOut->errorpage('openiderror', 'openiderrortext'); return; } # Make sure the user has a session! global $wgSessionStarted; if (!$wgSessionStarted) { $wgUser->SetupSession(); } $auth_request = $consumer->begin($openid_url); // Handle failure status return values. if (!$auth_request) { $wgOut->errorpage('openiderror', 'openiderrortext'); return; } # Check the processed URLs, too $endpoint = $auth_request->endpoint; if (isset($endpoint)) { # Check if the URL is allowed if (isset($endpoint->identity_url) && !OpenIDCanLogin($endpoint->identity_url)) { $wgOut->errorpage('openidpermission', 'openidpermissiontext'); return; } if (isset($endpoint->delegate) && !OpenIDCanLogin($endpoint->delegate)) { $wgOut->errorpage('openidpermission', 'openidpermissiontext'); return; } } $auth_request->addExtensionArg('sreg', 'optional', 'nickname,email,fullname,language,timezone'); $process_url = OpenIDFullUrl($finish_page); $redirect_url = $auth_request->redirectURL($trust_root, $process_url); # OK, now go $wgOut->redirect($redirect_url); }