コード例 #1
0
 public function testGetRequestByClass()
 {
     $mb = $this->getMockBuilder(AuthenticationRequest::class, 'AuthenticationRequestTest_AuthenticationRequest2');
     $reqs = [$this->getMockForAbstractClass(AuthenticationRequest::class, [], 'AuthenticationRequestTest_AuthenticationRequest1'), $mb->getMockForAbstractClass(), $mb->getMockForAbstractClass(), $this->getMockForAbstractClass(PasswordAuthenticationRequest::class, [], 'AuthenticationRequestTest_PasswordAuthenticationRequest')];
     $this->assertNull(AuthenticationRequest::getRequestByClass($reqs, 'AuthenticationRequestTest_AuthenticationRequest0'));
     $this->assertSame($reqs[0], AuthenticationRequest::getRequestByClass($reqs, 'AuthenticationRequestTest_AuthenticationRequest1'));
     $this->assertNull(AuthenticationRequest::getRequestByClass($reqs, 'AuthenticationRequestTest_AuthenticationRequest2'));
     $this->assertNull(AuthenticationRequest::getRequestByClass($reqs, PasswordAuthenticationRequest::class));
     $this->assertNull(AuthenticationRequest::getRequestByClass($reqs, 'ClassThatDoesNotExist'));
     $this->assertNull(AuthenticationRequest::getRequestByClass($reqs, 'AuthenticationRequestTest_AuthenticationRequest0', true));
     $this->assertSame($reqs[0], AuthenticationRequest::getRequestByClass($reqs, 'AuthenticationRequestTest_AuthenticationRequest1', true));
     $this->assertNull(AuthenticationRequest::getRequestByClass($reqs, 'AuthenticationRequestTest_AuthenticationRequest2', true));
     $this->assertSame($reqs[3], AuthenticationRequest::getRequestByClass($reqs, PasswordAuthenticationRequest::class, true));
     $this->assertNull(AuthenticationRequest::getRequestByClass($reqs, 'ClassThatDoesNotExist', true));
 }
 /**
  * Try to reset the password
  * @param \User $user
  * @param AuthenticationRequest[] $reqs
  * @return AuthenticationResponse
  */
 protected function tryReset(\User $user, array $reqs)
 {
     $data = $this->manager->getAuthenticationSessionData('reset-pass');
     if (!$data) {
         return AuthenticationResponse::newAbstain();
     }
     if (is_array($data)) {
         $data = (object) $data;
     }
     if (!is_object($data)) {
         throw new \UnexpectedValueException('reset-pass is not valid');
     }
     if (!isset($data->msg)) {
         throw new \UnexpectedValueException('reset-pass msg is missing');
     } elseif (!$data->msg instanceof \Message) {
         throw new \UnexpectedValueException('reset-pass msg is not valid');
     } elseif (!isset($data->hard)) {
         throw new \UnexpectedValueException('reset-pass hard is missing');
     } elseif (isset($data->req) && (!$data->req instanceof PasswordAuthenticationRequest || !array_key_exists('retype', $data->req->getFieldInfo()))) {
         throw new \UnexpectedValueException('reset-pass req is not valid');
     }
     if (!$data->hard) {
         $req = ButtonAuthenticationRequest::getRequestByName($reqs, 'skipReset');
         if ($req) {
             $this->manager->removeAuthenticationSessionData('reset-pass');
             return AuthenticationResponse::newPass();
         }
     }
     $needReq = isset($data->req) ? $data->req : new PasswordAuthenticationRequest();
     if (!$needReq->action) {
         $needReq->action = AuthManager::ACTION_CHANGE;
     }
     $needReq->required = $data->hard ? AuthenticationRequest::REQUIRED : AuthenticationRequest::OPTIONAL;
     $needReqs = [$needReq];
     if (!$data->hard) {
         $needReqs[] = new ButtonAuthenticationRequest('skipReset', wfMessage('authprovider-resetpass-skip-label'), wfMessage('authprovider-resetpass-skip-help'));
     }
     $req = AuthenticationRequest::getRequestByClass($reqs, get_class($needReq));
     if (!$req || !array_key_exists('retype', $req->getFieldInfo())) {
         return AuthenticationResponse::newUI($needReqs, $data->msg, 'warning');
     }
     if ($req->password !== $req->retype) {
         return AuthenticationResponse::newUI($needReqs, new \Message('badretype'), 'error');
     }
     $req->username = $user->getName();
     $status = $this->manager->allowsAuthenticationDataChange($req);
     if (!$status->isGood()) {
         return AuthenticationResponse::newUI($needReqs, $status->getMessage(), 'error');
     }
     $this->manager->changeAuthenticationData($req);
     $this->manager->removeAuthenticationSessionData('reset-pass');
     return AuthenticationResponse::newPass();
 }