Completed
Pull Request — master (#11)
by
unknown
03:30
created

ResponseMerger::setCookies()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 16
Code Lines 12

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 13
CRAP Score 3

Importance

Changes 0
Metric Value
eloc 12
c 0
b 0
f 0
dl 0
loc 16
ccs 13
cts 13
cp 1
rs 9.8666
cc 3
nc 3
nop 2
crap 3
1
<?php
2
3
namespace Pachico\SlimSwoole\Bridge;
4
5
use Slim\App;
6
use Psr\Http\Message\ResponseInterface;
7
use swoole_http_response;
8
use Dflydev\FigCookies\SetCookies;
9
10
class ResponseMerger implements ResponseMergerInterface
11
{
12
    /**
13
     * @var App
14
     */
15
    private $app;
16
17
    /**
18
     * @param App $app
19
     */
20 21
    public function __construct(App $app)
21
    {
22 21
        $this->app = $app;
23 21
    }
24
25
    /**
26
     * @param Response $response
27
     * @param swoole_http_response $swooleResponse
28
     *
29
     * @return swoole_http_response
30
     */
31 21
    public function mergeToSwoole(
32
        ResponseInterface $response,
33
        swoole_http_response $swooleResponse
34
    ): swoole_http_response {
35 21
        $container = $this->app->getContainer();
36
37 21
        $settings = $container->get('settings');
38 21
        if (isset($settings['addContentLengthHeader']) && $settings['addContentLengthHeader'] == true) {
39 3
            $size = $response->getBody()->getSize();
40 3
            if ($size !== null) {
41 3
                $swooleResponse->header('Content-Length', (string) $size);
42
            }
43
        }
44
45 21
        if (!empty($response->getHeaders())) {
46 6
            $this->setCookies($swooleResponse, $response);
47
48 6
            $response = $response->withoutHeader('Set-Cookie');
49
50 6
            foreach ($response->getHeaders() as $key => $headerArray) {
51 3
                $swooleResponse->header($key, implode('; ', $headerArray));
52
            }
53
        }
54
55 21
        $swooleResponse->status($response->getStatusCode());
56
57 21
        if ($response->getBody()->getSize() > 0) {
58 9
            if ($response->getBody()->isSeekable()) {
59 3
                $response->getBody()->rewind();
60
            }
61
62 9
            $swooleResponse->write($response->getBody()->getContents());
63
        }
64
65 21
        return $swooleResponse;
66
    }
67
68 6
    private function setCookies($swooleResponse, $response)
69
    {
70 6
        if (!$response->hasHeader('Set-Cookie')) {
71 3
            return;
72
        }
73
74 3
        $setCookies = SetCookies::fromSetCookieStrings($response->getHeader('Set-Cookie'));
75 3
        foreach ($setCookies->getAll() as $setCookie) {
76 3
            $swooleResponse->cookie(
77 3
                $setCookie->getName(),
78 3
                $setCookie->getValue(),
79 3
                $setCookie->getExpires(),
80 3
                $setCookie->getPath(),
81 3
                $setCookie->getDomain(),
82 3
                $setCookie->getSecure(),
83 3
                $setCookie->getHttpOnly()
84
            );
85
        }
86 3
    }
87
}
88