diff --git a/src/PhpDebugBarMiddleware.php b/src/PhpDebugBarMiddleware.php index e774dcb..166f42c 100644 --- a/src/PhpDebugBarMiddleware.php +++ b/src/PhpDebugBarMiddleware.php @@ -34,8 +34,8 @@ public function __construct(DebugBarRenderer $debugbarRenderer) /** * @param ServerRequestInterface $request - * @param ResponseInterface $response - * @param callable $next + * @param ResponseInterface $response + * @param callable $next * * @return ResponseInterface */ @@ -47,7 +47,7 @@ public function __invoke(ServerRequestInterface $request, ResponseInterface $res $outResponse = $next($request, $response); - if (!$this->isHtmlAccepted($request)) { + if (!$this->isHtmlAccepted($request) || $this->isRedirect($outResponse)) { return $outResponse; } @@ -64,10 +64,10 @@ public function __invoke(ServerRequestInterface $request, ResponseInterface $res return $outResponse; } - $outResponseBody = Serializer::toString($outResponse); - $template = '
%sResponse:
%s%s'; + $outResponseBody = Serializer::toString($outResponse); + $template = '%s
Response:
%s%s'; $escapedOutResponseBody = htmlspecialchars($outResponseBody); - $result = sprintf($template, $debugBarHead, $escapedOutResponseBody, $debugBarBody); + $result = sprintf($template, $debugBarHead, $escapedOutResponseBody, $debugBarBody); return new HtmlResponse($result); } @@ -91,9 +91,9 @@ private function getStaticFile(UriInterface $uri) return; } - $stream = new Stream($fullPathToFile, 'r'); + $stream = new Stream($fullPathToFile, 'r'); $staticResponse = new Response($stream); - $contentType = $this->getContentTypeByFileName($fullPathToFile); + $contentType = $this->getContentTypeByFileName($fullPathToFile); return $staticResponse->withHeader('Content-type', $contentType); } @@ -108,13 +108,13 @@ private function getContentTypeByFileName($filename) $ext = pathinfo($filename, PATHINFO_EXTENSION); $map = [ - 'css' => 'text/css', - 'js' => 'text/javascript', - 'otf' => 'font/opentype', - 'eot' => 'application/vnd.ms-fontobject', - 'svg' => 'image/svg+xml', - 'ttf' => 'application/font-sfnt', - 'woff' => 'application/font-woff', + 'css' => 'text/css', + 'js' => 'text/javascript', + 'otf' => 'font/opentype', + 'eot' => 'application/vnd.ms-fontobject', + 'svg' => 'image/svg+xml', + 'ttf' => 'application/font-sfnt', + 'woff' => 'application/font-woff', 'woff2' => 'application/font-woff2', ]; @@ -147,8 +147,8 @@ private function isHtmlAccepted(ServerRequestInterface $request) /** * @param MessageInterface $message - * @param string $headerName - * @param string $value + * @param string $headerName + * @param string $value * * @return bool */ @@ -156,4 +156,21 @@ private function hasHeaderContains(MessageInterface $message, $headerName, $valu { return strpos($message->getHeaderLine($headerName), $value) !== false; } + + /** + * Returns a boolean TRUE for if the response has redirect status code. + * + * Five common HTTP status codes indicates a redirection beginning from 301. + * 304 not modified and 305 use proxy are not redirects. + * + * @see https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#3xx_Redirection + * + * @param MessageInterface $message + * + * @return bool + */ + private function isRedirect(ResponseInterface $response) + { + return in_array($response->getStatusCode(), [301, 302, 303, 307, 308]); + } } diff --git a/test/PhpDebugBarMiddlewareTest.php b/test/PhpDebugBarMiddlewareTest.php index f474d81..ac6f0cc 100644 --- a/test/PhpDebugBarMiddlewareTest.php +++ b/test/PhpDebugBarMiddlewareTest.php @@ -23,16 +23,17 @@ class PhpDebugBarMiddlewareTest extends PHPUnit_Framework_TestCase protected function setUp() { $this->debugbarRenderer = $this->getMockBuilder(JavascriptRenderer::class)->disableOriginalConstructor()->getMock(); - $this->middleware = new PhpDebugBarMiddleware($this->debugbarRenderer); + $this->middleware = new PhpDebugBarMiddleware($this->debugbarRenderer); } public function testNotAttachIfNotAccept() { - $request = new ServerRequest(); - $response = new Response(); - $calledOut = false; + $request = new ServerRequest(); + $response = new Response(); + $calledOut = false; $outFunction = function ($request, $response) use (&$calledOut) { $calledOut = true; + return $response; }; @@ -44,12 +45,13 @@ public function testNotAttachIfNotAccept() public function testAttachToNoneHtmlResponse() { - $request = new ServerRequest([], [], null, null, 'php://input', ['Accept' => 'text/html']); + $request = new ServerRequest([], [], null, null, 'php://input', ['Accept' => 'text/html']); $response = new Response(); $response->getBody()->write('ResponseBody'); - $calledOut = false; + $calledOut = false; $outFunction = function ($request, $response) use (&$calledOut) { $calledOut = true; + return $response; }; @@ -65,12 +67,13 @@ public function testAttachToNoneHtmlResponse() public function testAttachToHtmlResponse() { - $request = new ServerRequest([], [], null, null, 'php://input', ['Accept' => 'text/html']); + $request = new ServerRequest([], [], null, null, 'php://input', ['Accept' => 'text/html']); $response = new Response('php://memory', 200, ['Content-Type' => 'text/html']); $response->getBody()->write('ResponseBody'); - $calledOut = false; + $calledOut = false; $outFunction = function ($request, $response) use (&$calledOut) { $calledOut = true; + return $response; }; @@ -86,12 +89,13 @@ public function testAttachToHtmlResponse() public function testAppendsToEndOfHtmlResponse() { - $html = '