translator = $translator; $this->apiKeyService = $apiKeyService; $this->jwtService = $jwtService; } /** * @param Request $request * @param DelegateInterface $delegate * @return null|Response */ public function process(Request $request, DelegateInterface $delegate) { $authData = $request->getParsedBody(); if (! isset($authData['apiKey'])) { return new JsonResponse([ 'error' => RestUtils::INVALID_ARGUMENT_ERROR, 'message' => $this->translator->translate( 'You have to provide a valid API key under the "apiKey" param name.' ), ], self::STATUS_BAD_REQUEST); } // Authenticate using provided API key $apiKey = $this->apiKeyService->getByKey($authData['apiKey']); if (! isset($apiKey) || ! $apiKey->isValid()) { return new JsonResponse([ 'error' => RestUtils::INVALID_API_KEY_ERROR, 'message' => $this->translator->translate('Provided API key does not exist or is invalid.'), ], self::STATUS_UNAUTHORIZED); } // Generate a JSON Web Token that will be used for authorization in next requests $token = $this->jwtService->create($apiKey); return new JsonResponse(['token' => $token]); } }