/**
  * 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);
 }