/** * Verify user registration with token and user id * * @param Request $request * @return array */ public function post(Request $request) { $id = $request->attributes->get('id'); $token = Arr::get($this->getContentAsArray($request), 'token'); if (!$token) { return $this->createSimpleResponse(422, 'Token not specified.'); } $conditions = ['user_id' => $id, 'token' => $token, 'token_type_id' => TokenEntity::TYPE_VERIFY_REGISTRATION]; $token = $this->userService->findTokenBy($conditions); if (!$token) { return $this->createNotFoundResponse(); } try { $user = $this->userService->verifyRegistration($token); } catch (OutOfBoundsException $e) { $httpCodes = [UserService::INCORRECT_TOKEN_TYPE => 422, UserService::TOKEN_EXPIRED => 410, UserService::TOKEN_NOT_FOUND => 404]; return $this->createErrorResponse(['token' => ['INVALID']], $httpCodes[$e->getCode()]); } $user = $user->getArrayCopy(); unset($user['password']); return $user; }
/** * Reset password using token and new password * * @param Request $request * @return array */ public function put(Request $request) { $token = Arr::get($this->getContentAsArray($request), 'token'); // Ensure token is valid $token = $this->userService->findTokenBy(['token' => $token, 'token_type_id' => TokenEntity::TYPE_RESET_PASSWORD]); if (!$token) { return $this->createNotFoundResponse(); } if ($token->getExpires() < time()) { return $this->createNotFoundResponse(); } $user = $this->userService->findById($token->getUserId()); if (!$user) { return $this->createNotFoundResponse(); } $password = Arr::get($this->getContentAsArray($request), 'password'); // Ensure user input is valid if (!$password) { return $this->createErrorResponse(['password' => ['EMPTY']], 422); } $this->userService->resetPassword($user, $password); $this->userService->deleteToken($token); return $this->userArrayWithoutPassword($user); }