handle($request); return $this->originAccessControl($request, $response); } public function originAccessControl(Request $request, Response $response): Response { $routeContext = RouteContext::fromRequest($request); $routingResults = $routeContext->getRoutingResults(); $methods = $routingResults->getAllowedMethods(); $requestHeaders = $request->getHeaderLine('Access-Control-Request-Headers'); if ($this->testRoute($request)) { // Stunden Minuten Sekunden $accessControlMaxAge = 24 * 60 * 60; $response = $response->withHeader('Access-Control-Allow-Origin', $this->buildOrigin($request)); $response = $response->withHeader('Access-Control-Allow-Methods', implode(',', $methods)); $response = $response->withHeader('Access-Control-Allow-Headers', $requestHeaders); $response = $response->withHeader('Access-Control-Max-Age', (string)$accessControlMaxAge); } return $response; } protected function testRoute(Request $request): bool { $corsAllowOriginRegex = $_ENV['CORS_ALLOW_ORIGIN_REGEX'] ?? '/https?:\/\/.*:.*/'; return preg_match($corsAllowOriginRegex, $this->buildOrigin($request)); } protected function buildOrigin(Request $request): string { return $request->getHeaderLine('Origin'); } }