restTokenService = $restTokenService; $this->translator = $translator; } /** * @param Request $request * @param Response $response * @param callable|null $out * @return null|Response */ public function dispatch(Request $request, Response $response, callable $out = null) { $authData = $request->getParsedBody(); if (! isset($authData['username'], $authData['password'])) { return new JsonResponse([ 'error' => RestUtils::INVALID_ARGUMENT_ERROR, 'message' => $this->translator->translate('You have to provide both "username" and "password"'), ], 400); } try { $token = $this->restTokenService->createToken($authData['username'], $authData['password']); return new JsonResponse(['token' => $token->getToken()]); } catch (AuthenticationException $e) { return new JsonResponse([ 'error' => RestUtils::getRestErrorCodeFromException($e), 'message' => $this->translator->translate('Invalid username and/or password'), ], 401); } } }