public function complete_openid() { $v = Loader::helper('validation/numbers'); $oa = new OpenIDAuth(); $oa->setReturnURL($this->openIDReturnTo); $oa->complete(); $response = $oa->getResponse(); if ($response->code == OpenIDAuth::E_CANCEL) { $this->error->add(t('OpenID Verification Cancelled')); $this->clearOpenIDSession(); } else { if ($response->code == OpenIDAuth::E_FAILURE) { $this->error->add(t('OpenID Authentication Failed: %s', $response->message)); $this->clearOpenIDSession(); } else { switch ($response->code) { case OpenIDAuth::S_USER_CREATED: case OpenIDAuth::S_USER_AUTHENTICATED: if ($v->integer($response->message)) { User::loginByUserID($response->message); $this->set('uOpenID', $response->openid); $oa->reinstatePreviousRequest(); $this->finishLogin(); } break; case OpenIDAuth::E_REGISTRATION_EMAIL_INCOMPLETE: // we don't have an email address, but the account is valid // valid display identifier comes back in message $_SESSION['uOpenIDRequested'] = $response->message; $_SESSION['uOpenIDError'] = OpenIDAuth::E_REGISTRATION_EMAIL_INCOMPLETE; break; case OpenIDAuth::E_REGISTRATION_EMAIL_EXISTS: // an email address came back with us from the openid server // but that email already exists $_SESSION['uOpenIDRequested'] = $response->openid; $_SESSION['uOpenIDExistingUser'] = $response->user; $_SESSION['uOpenIDError'] = OpenIDAuth::E_REGISTRATION_EMAIL_EXISTS; break; } } } $this->set('oa', $oa); }