public function __invoke(ServerRequestInterface $request, ResponseInterface $response, callable $next)
{
$uri = $request->getUri();
if (strtolower($uri->getScheme()) !== 'https') {
$uri = $uri->withScheme('https')->withPort(443);
if ($this->redirectStatus !== false && (!$this->checkHttpsForward || $request->getHeaderLine('X-Forwarded-Proto') !== 'https' && $request->getHeaderLine('X-Forwarded-Port') !== '443')) {
return $this->getRedirectResponse($request, $uri, $response);
}
$request = $request->withUri($uri);
}
if (!empty($this->maxAge)) {
$response = $response->withHeader(self::HEADER, sprintf('max-age=%d%s', $this->maxAge, $this->includeSubdomains ? ';includeSubDomains' : ''));
}
$response = $next($request, $response);
if (Utils\Helpers::isRedirect($response)) {
return $response->withHeader('Location', str_replace('http://', 'https://', $response->getHeaderLine('Location')));
}
return $response;
}