Test Setup Failed
Pull Request — master (#21)
by he
06:17
created

CompressContent::handle()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 16
Code Lines 10

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 2
eloc 10
c 1
b 0
f 0
nc 2
nop 2
dl 0
loc 16
rs 9.9332
1
<?php
2
3
namespace App\Http\Middleware;
4
5
use Illuminate\Http\JsonResponse;
6
use Illuminate\Http\Response;
7
8
class CompressContent
9
{
10
    public function handle($request, $next)
11
    {
12
        $response = $next($request);
13
14
        if ($response instanceof JsonResponse) {
15
            $compressedResponse = new Response();
16
            $compressed = $this->compress($response->getContent());
17
            $compressedResponse->setContent($compressed);
18
            $compressedResponse->withHeaders($this->headers());
19
            $compressedResponse->header('Content-Length', strlen($compressed));
20
21
            $this->setZlib();
22
            return $compressedResponse;
23
        }
24
25
        return $response;
26
    }
27
28
    private function setZlib(): void
29
    {
30
        ini_set('zlib.output_compression', 'Off');
31
    }
32
33
    private function headers()
34
    {
35
        return [
36
            'Content-Type' => 'application/x-download',
37
            'Content-Encoding'=> 'gzip',
38
            'Cache-Control' =>  'no-cache, no-store, max-age=0, must-revalidate',
39
            'Pragma' => 'no-cache',
40
        ];
41
    }
42
43
    private function compress($data) {
44
        return gzencode($data);
45
    }
46
}
47