function wfSpecialOpenIDFinish($par) { global $wgUser, $wgOut, $wgRequest; # Shouldn't work if you're already logged in. if ($wgUser->getID() != 0) { OpenIDAlreadyLoggedIn(); return; } $consumer = OpenIDConsumer(); switch ($par) { case 'ChooseName': list($response, $sreg) = OpenIDConsumerFetchValues(); if (!isset($response) || $response->status != Auth_OpenID_SUCCESS || !isset($response->identity_url)) { OpenIDConsumerClearValues(); # No messing around, here $wgOut->errorpage('openiderror', 'openiderrortext'); return; } if ($wgRequest->getCheck('wpCancel')) { OpenIDConsumerClearValues(); $wgOut->errorpage('openidcancel', 'openidcanceltext'); return; } $choice = $wgRequest->getText('wpNameChoice'); $nameValue = $wgRequest->getText('wpNameValue'); wfDebug("OpenID: Got form values '{$choice}' and '{$nameValue}'\n"); $name = OpenIDGetName($response, $sreg, $choice, $nameValue); if (!$name || !OpenIDUserNameOK($name)) { OpenIDChooseNameForm($response, $sreg); return; } $user = OpenIDCreateUser($response->identity_url, $sreg, $name); if (!isset($user)) { OpenIDConsumerClearValues(); $wgOut->errorpage('openiderror', 'openiderrortext'); return; } $wgUser = $user; OpenIDConsumerClearValues(); OpenIDFinishLogin($response->identity_url); break; default: # No parameter, returning from a server $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 = $response->identity_url; $sreg = $response->extensionResponse('sreg'); if (!isset($openid)) { $wgOut->errorpage('openiderror', 'openiderrortext'); return; } $user = OpenIDGetUser($openid); if (isset($user)) { OpenIDUpdateUser($user, $sreg); # update from server } else { # For easy names $name = OpenIDCreateName($openid, $sreg); if ($name) { $user = OpenIDCreateUser($openid, $sreg, $name); } else { # For hard names OpenIDConsumerSaveValues($response, $sreg); OpenIDChooseNameForm($response, $sreg); return; } } if (!isset($user)) { $wgOut->errorpage('openiderror', 'openiderrortext'); } else { $wgUser = $user; OpenIDFinishLogin($openid); } } } }
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(); } }