setResponseFactory($factory); $this->setLogger($logger); } protected ResponseFactoryInterface $factory; protected LoggerInterface $logger; public function getResponseFactory(): ResponseFactoryInterface { return $this->factory; } public function getLogger(): LoggerInterface { return $this->logger; } public function setResponseFactory(ResponseFactoryInterface $factory): Auth { $this->factory = $factory; return $this; } public function setLogger(LoggerInterface $logger): Auth { $this->logger = $logger; return $this; } public function __invoke(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface { if ($request->getMethod() === 'OPTIONS') { return $handler->handle($request); } try { if ($this->service->validate($request)) { return $handler->handle($request); } } catch (Unauthorized $e) { $response = $this->getResponseFactory()->createResponse($e->getCode()); $response->getBody()->write(json_encode(['error' => $e->getCode(), 'message' => $e->getMessage()])); } $response = $this->getResponseFactory()->createResponse(413); $response->getBody()->write(\Safe\json_encode(['error' => 413, 'message' => 'Incorrect token'])); return $response ->withHeader('Content-Type', 'application/json'); } }