Return the mime type.
public static getMimeType ( Psr\Http\Message\ResponseInterface $response ) : string | ||
$response | Psr\Http\Message\ResponseInterface | |
return | string |
/** * Execute the middleware. * * @param ServerRequestInterface $request * @param ResponseInterface $response * @param callable $next * * @return ResponseInterface */ public function __invoke(ServerRequestInterface $request, ResponseInterface $response, callable $next) { if (!self::hasAttribute($request, ClientIp::KEY)) { throw new RuntimeException('Csrf middleware needs ClientIp executed before'); } if (Utils\Helpers::getMimeType($response) !== 'text/html') { return $next($request, $response); } $tokens =& self::getStorage($request, self::KEY); if (Utils\Helpers::isPost($request) && !$this->validateRequest($request, $tokens)) { return $response->withStatus(403); } $generator = function ($action = null) use($request, &$tokens) { if (empty($action)) { $action = $request->getUri()->getPath(); } return $this->generateTokens($request, $action, $tokens); }; if (!$this->autoInsert) { $request = self::setAttribute($request, self::KEY_GENERATOR, $generator); return $next($request, $response); } $response = $next($request, $response); return $this->insertIntoPostForms($response, function ($match) use($generator) { preg_match('/action=["\']?([^"\'\\s]+)["\']?/i', $match[0], $matches); return $match[0] . $generator(isset($matches[1]) ? $matches[1] : null); }); }
/** * Execute the middleware. * * @param ServerRequestInterface $request * @param ResponseInterface $response * @param callable $next * * @return ResponseInterface */ public function __invoke(ServerRequestInterface $request, ResponseInterface $response, callable $next) { $response = $next($request, $response); if (Utils\Helpers::getMimeType($response) === 'text/html' && !Utils\Helpers::isAjax($request)) { return $this->inject($response, $this->getCode()); } return $response; }
/** * Execute the middleware. * * @param ServerRequestInterface $request * @param ResponseInterface $response * @param callable $next * * @return ResponseInterface */ public function __invoke(ServerRequestInterface $request, ResponseInterface $response, callable $next) { $response = $next($request, $response); $resolver = $this->resolver ?: new Transformers\Minifier(); $transformer = $resolver->resolve(Utils\Helpers::getMimeType($response)); if ($transformer) { return $response->withBody($transformer($response->getBody(), self::createStream())); } return $response; }
/** * Execute the middleware. * * @param RequestInterface $request * @param ResponseInterface $response * @param callable $next * * @return ResponseInterface */ public function __invoke(RequestInterface $request, ResponseInterface $response, callable $next) { $response = $next($request, $response); $cacheControl = $response->getHeaderLine('Cache-Control') ?: ''; if (stripos($cacheControl, 'max-age') === false) { $mime = Utils\Helpers::getMimeType($response); $expires = new DateTimeImmutable(isset($this->expires[$mime]) ? $this->expires[$mime] : $this->expiresDefault); $cacheControl .= ' max-age=' . ($expires->getTimestamp() - time()); return $response->withHeader('Cache-Control', trim($cacheControl))->withHeader('Expires', $expires->format('D, d M Y H:i:s') . ' GMT'); } return $response; }
/** * Execute the middleware. * * @param ServerRequestInterface $request * @param ResponseInterface $response * @param callable $next * * @return ResponseInterface */ public function __invoke(ServerRequestInterface $request, ResponseInterface $response, callable $next) { if (Utils\Helpers::getMimeType($response) !== 'text/html') { return $next($request, $response); } if (Utils\Helpers::isPost($request) && !$this->isValid($request)) { return $response->withStatus(403); } $generator = function () { return '<input type="text" name="' . $this->inputName . '" class="' . $this->inputClass . '">'; }; if (!$this->autoInsert) { $request = self::setAttribute($request, self::KEY_GENERATOR, $generator); return $next($request, $response); } $response = $next($request, $response); return $this->insertIntoPostForms($response, function ($match) use($generator) { return $match[0] . $generator(); }); }
/** * Execute the middleware. * * @param ServerRequestInterface $request * @param ResponseInterface $response * @param callable $next * * @return ResponseInterface */ public function __invoke(ServerRequestInterface $request, ResponseInterface $response, callable $next) { $renderer = $this->debugBar->getJavascriptRenderer(); //Is an asset? $path = $request->getUri()->getPath(); $renderPath = $renderer->getBaseUrl(); if (strpos($path, $renderPath) === 0) { $file = $renderer->getBasePath() . substr($path, strlen($renderPath)); if (file_exists($file)) { return $response->withBody(self::createStream($file, 'r')); } } $response = $next($request, $response); //Fix the render baseUrl $generator = BasePath::getGenerator($request); if ($generator) { $renderer->setBaseUrl($generator($renderer->getBaseUrl())); } $ajax = Utils\Helpers::isAjax($request); //Redirection response if (Utils\Helpers::isRedirect($response)) { if ($this->debugBar->isDataPersisted() || session_status() === PHP_SESSION_ACTIVE) { $this->debugBar->stackData(); } //Html response } elseif (Utils\Helpers::getMimeType($response) === 'text/html') { if (!$ajax) { $response = $this->inject($response, $renderer->renderHead(), 'head'); } $response = $this->inject($response, $renderer->render(!$ajax), 'body'); //Ajax response } elseif ($ajax && $this->captureAjax) { $headers = $this->debugBar->getDataAsHeaders(); foreach ($headers as $name => $value) { $response = $response->withHeader($name, $value); } } return $response; }
/** * Execute the middleware. * * @param ServerRequestInterface $request * @param ResponseInterface $response * @param callable $next * * @return ResponseInterface */ public function __invoke(ServerRequestInterface $request, ResponseInterface $response, callable $next) { switch (Utils\Helpers::getMimeType($response)) { case 'image/jpeg': case 'image/gif': case 'image/png': $key = $this->getCacheKey($request); //Get from the cache if ($cached = $this->getFromCache($key, $response)) { return $cached; } $info = $this->parsePath($request->getUri()->getPath()); if (!$info) { break; } //Removes the transform info in the path list($path, $transform) = $info; $request = $request->withUri($request->getUri()->withPath($path)); $response = $next($request, $response); //Transform if ($response->getStatusCode() === 200 && $response->getBody()->getSize()) { $response = $this->transform($request, $response, $transform); //Save in the cache $this->saveIntoCache($key, $response); } return $response; case 'text/html': $generator = function ($path, $transform) { $info = pathinfo($path); if (!isset($this->sizes[$transform])) { throw new \InvalidArgumentException(sprintf('The image size "%s" is not valid', $transform)); } return Utils\Helpers::joinPath($info['dirname'], $transform . $info['basename']); }; $request = self::setAttribute($request, self::KEY_GENERATOR, $generator); $response = $next($request, $response); if (!empty($this->clientHints)) { return $response->withHeader('Accept-CH', implode(',', $this->clientHints)); } return $response; } return $next($request, $response); }
/** * Default handler. * * @param ServerRequestInterface $request * @param ResponseInterface $response * * @return string */ private function defaultHandler(ServerRequestInterface $request, ResponseInterface $response) { $statusCode = $response->getStatusCode(); $exception = self::getException($request); $message = $exception ? $exception->getMessage() : ''; switch (Utils\Helpers::getMimeType($response)) { case 'text/plain': case 'text/css': case 'text/javascript': return self::errorText($statusCode, $message); case 'image/jpeg': return self::errorImage($statusCode, $message, 'imagejpeg'); case 'image/gif': return self::errorImage($statusCode, $message, 'imagegif'); case 'image/png': return self::errorImage($statusCode, $message, 'imagepng'); case 'image/svg+xml': return self::errorSvg($statusCode, $message); case 'application/json': return self::errorJson($statusCode, $message); case 'text/xml': return self::errorXml($statusCode, $message); default: return self::errorHtml($statusCode, $message); } }