Completed
Pull Request — master (#2)
by René
05:02 queued 02:37
created

Request::getCookie()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 1

Importance

Changes 0
Metric Value
c 0
b 0
f 0
dl 0
loc 4
ccs 2
cts 2
cp 1
rs 10
cc 1
eloc 2
nc 1
nop 0
crap 1
1
<?php
2
declare(strict_types = 1);
3
4
namespace Zortje\MVC\Network;
5
6
use Zortje\MVC\Storage\Cookie\Cookie;
7
8
/**
9
 * Class Request
10
 *
11
 * @package Zortje\MVC\Network
12
 */
13
class Request
14
{
15
16
    /**
17
     * @var string Request method
18
     */
19
    protected $method;
20
21
    /**
22
     * @var string Full URL
23
     */
24
    protected $url;
25
26
    /**
27
     * @var array Request headers
28
     */
29
    protected $headers;
30
31
    /**
32
     * @var Cookie Cookie
33
     */
34
    protected $cookie;
35
36
    /**
37
     * @var array POST data
38
     */
39
    public $post;
40
41
    /**
42
     * Request constructor.
43
     *
44
     * @param array  $server
45
     * @param array  $post
46
     * @param Cookie $cookie
47
     */
48 1
    public function __construct(Cookie $cookie, array $server = [], array $post = [])
49
    {
50 1
        $this->method  = !empty($server['REQUEST_METHOD']) ? $server['REQUEST_METHOD'] : 'GET';
51 1
        $this->url     = $this->createUrlFromServerArray($server, !empty($server['HTTPS']));
52 1
        $this->headers = $this->parseHeaders($server);
53 1
        $this->cookie  = $cookie;
54 1
        $this->post    = $post;
55 1
    }
56
57 2
    public function getMethod(): string
58
    {
59 2
        return $this->method;
60
    }
61
62
    /**
63
     * Get request URL path
64
     *
65
     * @return string URL path
66
     */
67 3
    public function getPath(): string
68
    {
69 3
        $path = parse_url($this->url, PHP_URL_PATH);
70
71 3
        if (is_string($path) === false) {
72 2
            $path = '';
73
        }
74
75 3
        return $path;
76
    }
77
78 2
    public function getAcceptHeader(): string
79
    {
80 2
        return $this->headers['Accept'];
81
    }
82
83 2
    public function getAuthorizationHeader(): string
84
    {
85 2
        return $this->headers['Authorization'];
86
    }
87
88
    /**
89
     * Get cookie
90
     *
91
     * @return Cookie
92
     */
93 2
    public function getCookie(): Cookie
94
    {
95 2
        return $this->cookie;
96
    }
97
98
    /**
99
     * Get request POST data
100
     *
101
     * @return array POST data
102
     */
103 2
    public function getPost(): array
104
    {
105 2
        return $this->post;
106
    }
107
108
    /**
109
     * Create URL from _SERVER array
110
     *
111
     * @param array $server _SERVER array
112
     * @param bool  $secure
113
     *
114
     * @return string URL
115
     */
116 1
    protected function createUrlFromServerArray(array $server, bool $secure = true): string
117
    {
118 1
        $protocol = $secure ? 'https' : 'http';
119 1
        $host     = !empty($server['HTTP_HOST']) ? $server['HTTP_HOST'] : 'www.example.com';
120 1
        $path     = !empty($server['REQUEST_URI']) ? $server['REQUEST_URI'] : '';
121
122 1
        $url = "$protocol://$host$path";
123
124 1
        return rtrim($url, '/');
125
    }
126
127 1
    protected function parseHeaders(array $server): array
128
    {
129
        $headers = [
130 1
            'Accept'        => '',
131
            'Authorization' => ''
132
        ];
133
134 1
        foreach ($server as $header => $value) {
135 1
            if (substr($header, 0, 5) == 'HTTP_') {
136 1
                $header = str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($header, 5)))));
137
138 1
                if (isset($headers[$header])) {
139 1
                    $headers[$header] = $value;
140
                }
141
            }
142
        }
143
144 1
        return $headers;
145
    }
146
}
147