/var/www/html_it_bk/wp-includes/Requests/src/Cookie/Jar.php


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
<?php
/**
 * Cookie holder object
 *
 * @package Requests\Cookies
 */

namespace WpOrg\Requests\Cookie;

use 
ArrayAccess;
use 
ArrayIterator;
use 
IteratorAggregate;
use 
ReturnTypeWillChange;
use 
WpOrg\Requests\Cookie;
use 
WpOrg\Requests\Exception;
use 
WpOrg\Requests\Exception\InvalidArgument;
use 
WpOrg\Requests\HookManager;
use 
WpOrg\Requests\Iri;
use 
WpOrg\Requests\Response;

/**
 * Cookie holder object
 *
 * @package Requests\Cookies
 */
class Jar implements ArrayAccessIteratorAggregate {
    
/**
     * Actual item data
     *
     * @var array
     */
    
protected $cookies = [];

    
/**
     * Create a new jar
     *
     * @param array $cookies Existing cookie values
     *
     * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed argument is not an array.
     */
    
public function __construct($cookies = []) {
        if (
is_array($cookies) === false) {
            throw 
InvalidArgument::create(1'$cookies''array'gettype($cookies));
        }

        
$this->cookies $cookies;
    }

    
/**
     * Normalise cookie data into a \WpOrg\Requests\Cookie
     *
     * @param string|\WpOrg\Requests\Cookie $cookie Cookie header value, possibly pre-parsed (object).
     * @param string                        $key    Optional. The name for this cookie.
     * @return \WpOrg\Requests\Cookie
     */
    
public function normalize_cookie($cookie$key '') {
        if (
$cookie instanceof Cookie) {
            return 
$cookie;
        }

        return 
Cookie::parse($cookie$key);
    }

    
/**
     * Check if the given item exists
     *
     * @param string $offset Item key
     * @return boolean Does the item exist?
     */
    
#[ReturnTypeWillChange]
    public function 
offsetExists($offset) {
        return isset(
$this->cookies[$offset]);
    }

    
/**
     * Get the value for the item
     *
     * @param string $offset Item key
     * @return string|null Item value (null if offsetExists is false)
     */
    
#[ReturnTypeWillChange]
    public function 
offsetGet($offset) {
        if (!isset(
$this->cookies[$offset])) {
            return 
null;
        }

        return 
$this->cookies[$offset];
    }

    
/**
     * Set the given item
     *
     * @param string $offset Item name
     * @param string $value Item value
     *
     * @throws \WpOrg\Requests\Exception On attempting to use dictionary as list (`invalidset`)
     */
    
#[ReturnTypeWillChange]
    public function 
offsetSet($offset$value) {
        if (
$offset === null) {
            throw new 
Exception('Object is a dictionary, not a list''invalidset');
        }

        
$this->cookies[$offset] = $value;
    }

    
/**
     * Unset the given header
     *
     * @param string $offset The key for the item to unset.
     */
    
#[ReturnTypeWillChange]
    public function 
offsetUnset($offset) {
        unset(
$this->cookies[$offset]);
    }

    
/**
     * Get an iterator for the data
     *
     * @return \ArrayIterator
     */
    
#[ReturnTypeWillChange]
    public function 
getIterator() {
        return new 
ArrayIterator($this->cookies);
    }

    
/**
     * Register the cookie handler with the request's hooking system
     *
     * @param \WpOrg\Requests\HookManager $hooks Hooking system
     */
    
public function register(HookManager $hooks) {
        
$hooks->register('requests.before_request', [$this'before_request']);
        
$hooks->register('requests.before_redirect_check', [$this'before_redirect_check']);
    }

    
/**
     * Add Cookie header to a request if we have any
     *
     * As per RFC 6265, cookies are separated by '; '
     *
     * @param string $url
     * @param array $headers
     * @param array $data
     * @param string $type
     * @param array $options
     */
    
public function before_request($url, &$headers, &$data, &$type, &$options) {
        if (!
$url instanceof Iri) {
            
$url = new Iri($url);
        }

        if (!empty(
$this->cookies)) {
            
$cookies = [];
            foreach (
$this->cookies as $key => $cookie) {
                
$cookie $this->normalize_cookie($cookie$key);

                
// Skip expired cookies
                
if ($cookie->is_expired()) {
                    continue;
                }

                if (
$cookie->domain_matches($url->host)) {
                    
$cookies[] = $cookie->format_for_header();
                }
            }

            
$headers['Cookie'] = implode('; '$cookies);
        }
    }

    
/**
     * Parse all cookies from a response and attach them to the response
     *
     * @param \WpOrg\Requests\Response $response Response as received.
     */
    
public function before_redirect_check(Response $response) {
        
$url $response->url;
        if (!
$url instanceof Iri) {
            
$url = new Iri($url);
        }

        
$cookies           Cookie::parse_from_headers($response->headers$url);
        
$this->cookies     array_merge($this->cookies$cookies);
        
$response->cookies $this;
    }
}