public function loginAction()
 {
     if (!$this->getRequest()->isPost()) {
         return;
     }
     $loginForm = new LoginForm($this->getRequest()->getPost('loginForm'));
     if (!$loginForm->isValid()) {
         $this->nwFlashMessenger()->addErrorMessage(MessageConstants::ERROR_INVALID_FORM);
         return;
     }
     $loginFormData = $loginForm->getData();
     $authAdapter = $this->getAuthAdapter();
     $authAdapter->setIdentity($loginFormData['email'])->setCredential(NovumWareHelpers::encryptPassword($loginFormData['password']));
     $authenticationResult = $authAdapter->authenticate();
     if (!$authenticationResult->isValid()) {
         $this->nwFlashMessenger()->addErrorMessage('Invalid email / password combination');
         return;
     }
     $memberDataPrefixed = $authAdapter->getResultRowObject();
     $membersMapper = $this->getMembersMapper();
     $memberData = $membersMapper->unprefixDataArray($memberDataPrefixed);
     $memberModel = $membersMapper->createModelFromData($memberData);
     /*@var $memberModel \Registration\Model\MemberModel */
     $this->getAuthSession()->write($memberModel->toArray());
     $this->nwFlashMessenger()->addSuccessMessage('You have successfully logged in');
     if ($memberModel->role == 'admin') {
         return $this->redirect()->toRoute('admin');
     }
     $returnUrl = $this->getReturnUrl();
     if ($returnUrl) {
         return $this->redirect()->toUrl($returnUrl);
     } else {
         return $this->redirect()->toRoute('account');
     }
 }
 /**
  * Create an email verification key and send a verification email.
  *
  * @param \Registration\Model\MemberModel $memberModel
  */
 private function createEmailVerificationEmail(MemberModel $memberModel)
 {
     $memberEmailVerificationsMapper = $this->getMemberEmailVerificationsMapper();
     $memberEmailVerificationModel = $memberEmailVerificationsMapper->createModelFromData();
     $memberEmailVerificationModel->email = $memberModel->email;
     $memberEmailVerificationModel->security_key = NovumWareHelpers::generateKey(32);
     $this->getMemberEmailVerificationsMapper()->insertModel($memberEmailVerificationModel);
     $this->sendEmailVerificationEmail($memberEmailVerificationModel);
 }
 public function testResetPassword()
 {
     $data = array('email' => '*****@*****.**', 'security_key' => 'udKdSEiRgIF3T11q6S5o8MmW07NlAS6P', 'password' => 'newPassword');
     $passwordResetModel = $this->getMockMemberPasswordResetsMapper()->createModelFromData($data);
     $memberModel = $this->getMockMembersMapper()->createModelFromData($data);
     $memberModelEncryptedPassword = $this->getMockMembersMapper()->createModelFromData($data);
     $memberModelEncryptedPassword->password = NovumWareHelpers::encryptPassword($data['password']);
     $this->getMockMemberPasswordResetsMapper()->shouldReceive('fetchOneForEmailAndSecurityKey')->with($data['email'], $data['security_key'])->andReturn($passwordResetModel)->once();
     $this->getMockMembersMapper()->shouldReceive('fetchOneForEmail')->with($data['email'])->andReturn($memberModel)->once();
     $this->getMockMembersMapper()->shouldReceive('updateModel')->with($this->compareModel($memberModelEncryptedPassword))->once();
     $this->getMockMemberPasswordResetsMapper()->shouldReceive('deleteModel')->with($passwordResetModel)->once();
     $returnedProcessResult = $this->forgotPasswordProcess->resetPassword($data['email'], $data['security_key'], $data['password']);
     $this->assertEquals($this->getProcessResultSuccess(), $returnedProcessResult);
 }
 /**
  * @param string $email
  * @param string $securityKey
  * @param string $newPassword
  * @return \NovumWare\Process\ProcessResult
  */
 protected function _resetPassword($email, $securityKey, $newPassword)
 {
     $passwordResetsMapper = $this->getMemberPasswordResetsMapper();
     $passwordResetModel = $passwordResetsMapper->fetchOneForEmailAndSecurityKey($email, $securityKey);
     if (!$passwordResetModel) {
         throw new ProcessException('Could not verify your email address, please return to the email and click the link again');
     }
     $membersMapper = $this->getMembersMapper();
     $memberModel = $membersMapper->fetchOneForEmail($email);
     if (!$memberModel) {
         throw new \Exception("Could not find member with email: {$email}");
     }
     $memberModel->password = NovumWareHelpers::encryptPassword($newPassword);
     $membersMapper->updateModel($memberModel);
     $passwordResetsMapper->deleteModel($passwordResetModel);
 }
 public function testLoginActionValid()
 {
     $dataPost = array('loginForm' => array('email' => '*****@*****.**', 'password' => 'rightPassword'));
     $dataMember = array('status' => StatusConstants::MEMBER_PENDING_EMAIL_VERIFICATION, 'role' => RoleConstants::MEMBER, 'read_terms' => false, 'email' => $dataPost['loginForm']['email'], 'password' => NovumWareHelpers::encryptPassword($dataPost['loginForm']['password']));
     $authenticationResult = Mockery::mock('\\Zend\\Authentication\\Result');
     $tempMemberModel = $this->getMockMembersMapper()->createModelFromData($dataMember);
     $mockResultObject = (object) $this->getMockMembersMapper()->prefixDataArray($tempMemberModel->toArray());
     $expectedWriteData = $tempMemberModel->toArray();
     $this->mockAuthSession->shouldReceive('clear')->once();
     $this->mockAuthAdapter->shouldReceive('setIdentity')->with($dataPost['loginForm']['email'])->once()->andReturn($this->mockAuthAdapter);
     $this->mockAuthAdapter->shouldReceive('setCredential')->with(NovumWareHelpers::encryptPassword($dataPost['loginForm']['password']))->once();
     $this->mockAuthAdapter->shouldReceive('authenticate')->andReturn($authenticationResult)->once();
     $authenticationResult->shouldReceive('isValid')->andReturn(true)->once();
     $this->mockAuthAdapter->shouldReceive('getResultRowObject')->andReturn($mockResultObject)->once();
     $this->mockAuthSession->shouldReceive('write')->with($this->compareArray($expectedWriteData))->once();
     $this->mockFlashMessenger->shouldReceive('addSuccessMessage')->with('You have successfully logged in')->once();
     $this->dispatch('/login', 'POST', $dataPost);
     $this->assertResponseStatusCode(302);
     $this->assertRedirectTo('/account');
 }