/** * @param $id * @return Response * @throws InvalidParameter */ public function verify($id) { $email = MapperFactory::getEmailMapper()->getFromId($id); if (!$email) { return Response::error('Invalid email verification', Response::STATUS_NOTFOUND); } $token = $this->request->input('token'); if ($email->getToken() !== $token) { return Response::error('Invalid email verification', Response::STATUS_UNAUTHORIZED); } if ($email->getUser()->getEmail() !== $email->getEmail()) { return Response::error('Invalid email verification: email mismatch', Response::STATUS_INVALID_INPUT); } if ($email->isExpired()) { return Response::error('Invalid email verification: token expired', Response::STATUS_INVALID_INPUT); } $user = $email->getUser(); if (!$user instanceof User) { throw new InvalidParameter("User type mismatch."); } $user->setEmailVerified(true); $mapper = \Neuron\MapperFactory::getUserMapper(); if (!$mapper instanceof \CatLab\Accounts\Mappers\UserMapper) { throw new InvalidParameter("Mapper must be UserMapper instance."); } $mapper->update($user); return $this->module->login($this->request, $user); }
public function sendVerificationEmail(Module $module) { return; $email = new Email(); $email->setEmail($this->getEmail()); $email->setExpires(new DateTime('next week')); $email->setToken(TokenGenerator::getSimplifiedToken(6)); $email->setUser($this); $email->setVerified(false); MapperFactory::getEmailMapper()->create($email); $template = new Template('CatLab/Accounts/mails/verification.phpt'); $template->set('user', $this); $template->set('verify_url', $email->getVerifyURL($module->getRoutePath())); $mail = new Mail(); $mail->setSubject('Email verification'); $mail->setTemplate($template); $mail->getTo()->add($this->getEmail()); $mail->setFrom(Config::get('mailer.from.email')); Mailer::getInstance()->send($mail); }
/** * Return an error (string) or redirect * @param DeligatedUser $deligatedUser * @param $email * @param $password * @return Response|string * @throws ExpectedType */ private function processLogin(DeligatedUser $deligatedUser, $email, $password) { $mapper = \Neuron\MapperFactory::getUserMapper(); ExpectedType::check($mapper, UserMapper::class); $user = $mapper->getFromLogin($email, $password); if ($user) { // Everything okay // Link the deligated user to this user. $deligatedUser->setUser($user); MapperFactory::getDeligatedMapper()->update($deligatedUser); return $this->module->login($this->request, $user); } else { // Check if we have this email address $user = $mapper->getFromEmail($email); if ($user) { return 'PASSWORD_INCORRECT'; } else { return 'USER_NOT_FOUND'; } } }