~canonical-sysadmins/wordpress/4.8.1

« back to all changes in this revision

Viewing changes to wp-includes/Requests/Cookie/Jar.php

  • Committer: Barry Price
  • Date: 2016-08-17 04:50:12 UTC
  • mfrom: (1.1.18 upstream)
  • Revision ID: barry.price@canonical.com-20160817045012-qfui81zhqnqv2ba9
Merge WP4.6 from upstream

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
<?php
 
2
/**
 
3
 * Cookie holder object
 
4
 *
 
5
 * @package Requests
 
6
 * @subpackage Cookies
 
7
 */
 
8
 
 
9
/**
 
10
 * Cookie holder object
 
11
 *
 
12
 * @package Requests
 
13
 * @subpackage Cookies
 
14
 */
 
15
class Requests_Cookie_Jar implements ArrayAccess, IteratorAggregate {
 
16
        /**
 
17
         * Actual item data
 
18
         *
 
19
         * @var array
 
20
         */
 
21
        protected $cookies = array();
 
22
 
 
23
        /**
 
24
         * Create a new jar
 
25
         *
 
26
         * @param array $cookies Existing cookie values
 
27
         */
 
28
        public function __construct($cookies = array()) {
 
29
                $this->cookies = $cookies;
 
30
        }
 
31
 
 
32
        /**
 
33
         * Normalise cookie data into a Requests_Cookie
 
34
         *
 
35
         * @param string|Requests_Cookie $cookie
 
36
         * @return Requests_Cookie
 
37
         */
 
38
        public function normalize_cookie($cookie, $key = null) {
 
39
                if ($cookie instanceof Requests_Cookie) {
 
40
                        return $cookie;
 
41
                }
 
42
 
 
43
                return Requests_Cookie::parse($cookie, $key);
 
44
        }
 
45
 
 
46
        /**
 
47
         * Normalise cookie data into a Requests_Cookie
 
48
         *
 
49
         * @codeCoverageIgnore
 
50
         * @deprecated Use {@see Requests_Cookie_Jar::normalize_cookie}
 
51
         * @return Requests_Cookie
 
52
         */
 
53
        public function normalizeCookie($cookie, $key = null) {
 
54
                return $this->normalize_cookie($cookie, $key);
 
55
        }
 
56
 
 
57
        /**
 
58
         * Check if the given item exists
 
59
         *
 
60
         * @param string $key Item key
 
61
         * @return boolean Does the item exist?
 
62
         */
 
63
        public function offsetExists($key) {
 
64
                return isset($this->cookies[$key]);
 
65
        }
 
66
 
 
67
        /**
 
68
         * Get the value for the item
 
69
         *
 
70
         * @param string $key Item key
 
71
         * @return string Item value
 
72
         */
 
73
        public function offsetGet($key) {
 
74
                if (!isset($this->cookies[$key])) {
 
75
                        return null;
 
76
                }
 
77
 
 
78
                return $this->cookies[$key];
 
79
        }
 
80
 
 
81
        /**
 
82
         * Set the given item
 
83
         *
 
84
         * @throws Requests_Exception On attempting to use dictionary as list (`invalidset`)
 
85
         *
 
86
         * @param string $key Item name
 
87
         * @param string $value Item value
 
88
         */
 
89
        public function offsetSet($key, $value) {
 
90
                if ($key === null) {
 
91
                        throw new Requests_Exception('Object is a dictionary, not a list', 'invalidset');
 
92
                }
 
93
 
 
94
                $this->cookies[$key] = $value;
 
95
        }
 
96
 
 
97
        /**
 
98
         * Unset the given header
 
99
         *
 
100
         * @param string $key
 
101
         */
 
102
        public function offsetUnset($key) {
 
103
                unset($this->cookies[$key]);
 
104
        }
 
105
 
 
106
        /**
 
107
         * Get an iterator for the data
 
108
         *
 
109
         * @return ArrayIterator
 
110
         */
 
111
        public function getIterator() {
 
112
                return new ArrayIterator($this->cookies);
 
113
        }
 
114
 
 
115
        /**
 
116
         * Register the cookie handler with the request's hooking system
 
117
         *
 
118
         * @param Requests_Hooker $hooks Hooking system
 
119
         */
 
120
        public function register(Requests_Hooker $hooks) {
 
121
                $hooks->register('requests.before_request', array($this, 'before_request'));
 
122
                $hooks->register('requests.before_redirect_check', array($this, 'before_redirect_check'));
 
123
        }
 
124
 
 
125
        /**
 
126
         * Add Cookie header to a request if we have any
 
127
         *
 
128
         * As per RFC 6265, cookies are separated by '; '
 
129
         *
 
130
         * @param string $url
 
131
         * @param array $headers
 
132
         * @param array $data
 
133
         * @param string $type
 
134
         * @param array $options
 
135
         */
 
136
        public function before_request($url, &$headers, &$data, &$type, &$options) {
 
137
                if (!$url instanceof Requests_IRI) {
 
138
                        $url = new Requests_IRI($url);
 
139
                }
 
140
 
 
141
                if (!empty($this->cookies)) {
 
142
                        $cookies = array();
 
143
                        foreach ($this->cookies as $key => $cookie) {
 
144
                                $cookie = $this->normalize_cookie($cookie, $key);
 
145
 
 
146
                                // Skip expired cookies
 
147
                                if ($cookie->is_expired()) {
 
148
                                        continue;
 
149
                                }
 
150
 
 
151
                                if ($cookie->domain_matches($url->host)) {
 
152
                                        $cookies[] = $cookie->format_for_header();
 
153
                                }
 
154
                        }
 
155
 
 
156
                        $headers['Cookie'] = implode('; ', $cookies);
 
157
                }
 
158
        }
 
159
 
 
160
        /**
 
161
         * Parse all cookies from a response and attach them to the response
 
162
         *
 
163
         * @var Requests_Response $response
 
164
         */
 
165
        public function before_redirect_check(Requests_Response &$return) {
 
166
                $url = $return->url;
 
167
                if (!$url instanceof Requests_IRI) {
 
168
                        $url = new Requests_IRI($url);
 
169
                }
 
170
 
 
171
                $cookies = Requests_Cookie::parse_from_headers($return->headers, $url);
 
172
                $this->cookies = array_merge($this->cookies, $cookies);
 
173
                $return->cookies = $this;
 
174
        }
 
175
}
 
 
b'\\ No newline at end of file'