/** * Creates new account if username is not taken yet. * Tries to authenticate the user * if username is already taken. * @param string $username login of the user * @param string $password plain text password * @throws \Exception */ public function create($username, $password) { $account = $this->objectManager->getRepository('Application\\Entity\\Account')->findBy(array('username' => $username)); if ($account != null) { return $this->authenticate($username, $password); } try { try { $account = new Account(); $passwordHash = static::hashPassword($password); $email = new EMailAddress(); $person = new Person(); $credentials = new Credentials(); $credentials->setOwner($person); $credentials->setNameFirst($username); $person->addCredential($credentials); $email->setValue($username)->setOwner($person); $person->addEmailAddress($email); $account->setUsername($username)->setPassword($passwordHash); $account->setPerson($person); $this->objectManager->persist($email); $this->objectManager->persist($credentials); $this->objectManager->persist($person); $this->objectManager->persist($account); $this->objectManager->flush(); $success = true; } catch (\Exception $e) { throw new \Exception("Failed to write data to the database.", 500, $e); $success = false; } return $this->authenticate($username, $password); } catch (\Exception $e) { throw new \Exception("Failed to create an account due to unknown internal server error.", 500, $e); } }
/** * @param string $identity * @param string $token * @param array $data (Optional) * @return \Application\Entity\User * @throws InvalidTokenException */ public function signup($identity, $token, array $data = array()) { // validate token $gpUser = $this->_requestUserData($token); if ($gpUser->getUserId() !== $identity) { throw new InvalidTokenException('Invalid identity and token pair'); } // first check existing credentials /** @var \Application\Entity\Credentials $credentials */ $credentials = $this->_getCredentials($identity); if (null !== $credentials) { // only update token and return user $this->updateToken($credentials, $token); return $credentials->getUser(); } $attributes = $gpUser->getAttributes(); $data['email'] = $attributes['payload']['email']; // register new user $credentials = new Credentials(); $credentials->setIdentity($identity)->setToken($token)->setType($this->_credentialType)->setStatus(CredentialsStatus::CONFIRMED); // retrieve or create new user $user = null === $credentials->getUser() ? $this->_findUserByEmailOrCreateNew($data['email']) : $credentials->getUser(); $user = $this->_updateUser($user, $data, false); $user->addCredential($credentials)->setStatus(UserStatus::ACTIVE); return $user; }
/** * @param Credentials $credentials * @return void */ protected function _updateCredentialsLastUsage(Credentials $credentials) { $sm = $this->getServiceLocator(); /** @var \Doctrine\ORM\EntityManager $em */ $em = $sm->get('em'); $credentials->setLastUsedAt(new \DateTime()); $em->persist($credentials); $em->flush($credentials); }
public function create(Person $owner, $nameFirst, $nameLast) { $credentials = new Credentials(); $credentials->setOwner($owner); $credentials->setNameFirst($nameFirst); $credentials->setNameLast($nameLast); $this->objectManager->persist($credentials); $this->objectManager->flush(); return $credentials; }
public function create($data) { var_dump($data); $hydrator = new DoctrineObject($this->objectManager, 'Application\\Entity\\Credentials'); $person = new Person(); $credentials = new Credentials(); $credentials->setOwner($person); $hydrator->hydrate($data, $credentials); $person->addCredential($credentials); $this->objectManager->persist($person); $this->objectManager->flush(); return $person; }
/** * @param string $identity * @param string $token * @param array $data (Optional) * @return \Application\Entity\User * @throws InvalidTokenException */ public function signup($identity, $token, array $data = array()) { // validate token $fbUser = $this->_requestUserData($token); if ($fbUser->getId() !== $identity) { throw new InvalidTokenException('Invalid identity and token pair'); } // first check existing credentials /** @var \Application\Entity\Credentials $credentials */ $credentials = $this->_getCredentials($identity); if (null !== $credentials) { // only update token and return user $this->updateToken($credentials, $token); return $credentials->getUser(); } // register new user $credentials = new Credentials(); $credentials->setIdentity($identity)->setToken($token)->setType($this->_credentialType)->setStatus(CredentialsStatus::CONFIRMED); // retrieve or create new user $user = null === $credentials->getUser() ? $this->_findUserByEmailOrCreateNew($fbUser->getField('email')) : $credentials->getUser(); $user = $this->_updateUser($user, array('email' => $fbUser->getField('email'), 'birthday' => $fbUser->getBirthday(), 'firstname' => $fbUser->getFirstName(), 'lastname' => $fbUser->getLastName(), 'gender' => $fbUser->getGender()), false); $user->addCredential($credentials)->setStatus(UserStatus::ACTIVE); return $user; }
/** * @param Credentials $credentials * @param string $token * @return void */ public function updateToken(Credentials $credentials, $token) { $token = $this->getServiceLocator()->get('ZF\\OAuth2\\Adapter\\PdoAdapter')->getBcrypt()->create($token); $credentials->setToken($token); }