PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 3.3.1
GiveWP – Donation Plugin and Fundraising Platform v3.3.1
4.16.7.1 4.16.7 4.16.6.1 4.16.6 4.16.5.1 4.16.5 4.16.4 4.16.3 4.16.2 4.16.1 4.16.0 4.15.5 4.15.4 4.15.3 4.15.2 4.15.1 4.15.0 2.3.0 2.3.1 2.3.2 2.30.0 2.31.0 2.31.1 2.32.0 2.33.0 2.33.1 2.33.2 2.33.3 2.33.4 2.33.5 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.4.5 2.4.6 2.4.7 2.5.0 2.5.1 2.5.10 2.5.11 2.5.12 2.5.13 2.5.2 2.5.3 2.5.4 2.5.5 2.5.6 2.5.7 2.5.8 2.5.9 2.6.0 2.6.1 2.6.2 2.6.3 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.8.0 2.8.1 2.9.0 2.9.1 2.9.2 2.9.3 2.9.4 2.9.5 2.9.6 2.9.7 3.0.0 3.0.1 3.0.2 3.0.3 3.0.4 3.1.0 3.1.1 3.1.2 3.10.0 3.11.0 3.12.0 3.12.1 3.12.2 3.12.3 3.13.0 3.14.0 3.14.1 3.14.2 3.15.0 3.15.1 3.16.0 3.16.1 3.16.2 3.16.3 3.16.4 3.16.5 3.17.0 3.17.1 3.17.2 3.18.0 3.19.0 3.19.1 3.19.2 3.19.3 3.19.4 3.2.0 3.2.1 3.2.2 3.20.0 3.21.0 3.21.1 3.22.0 3.22.1 3.22.2 3.3.0 3.3.1 3.4.0 3.4.1 3.4.2 3.5.0 3.5.1 3.6.0 3.6.1 3.6.2 3.7.0 3.8.0 3.9.0 4.0.0 4.1.0 4.1.1 4.10.0 4.10.1 4.11.0 4.12.0 4.13.0 4.13.1 4.13.2 4.14.0 4.14.1 4.14.2 4.14.3 4.14.4 4.14.5 4.14.6 4.2.0 4.2.1 4.3.0 4.3.1 4.3.2 4.4.0 4.5.0 4.6.1 4.7.0 4.7.1 4.8.0 4.8.1 4.9.0 trunk 1.9.0 2.0.0 2.0.1 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.1.7 2.1.8 2.10.0 2.10.1 2.10.2 2.10.3 2.10.4 2.11.0 2.11.1 2.11.2 2.11.3 2.12.0 2.12.1 2.12.2 2.12.3 2.13.0 2.13.1 2.13.2 2.13.3 2.13.4 2.14.0 2.15.0 2.16.0 2.16.1 2.17.0 2.17.1 2.17.3 2.18.0 2.18.1 2.19.1 2.19.2 2.19.3 2.19.4 2.19.5 2.19.6 2.19.7 2.19.8 2.2.0 2.2.1 2.2.2 2.2.3 2.2.4 2.2.5 2.2.6 2.20.0 2.20.1 2.20.2 2.21.0 2.21.1 2.21.2 2.21.3 2.21.4 2.22.0 2.22.1 2.22.2 2.22.3 2.23.0 2.23.1 2.23.2 2.24.0 2.24.1 2.24.2 2.25.0 2.25.1 2.25.2 2.25.3 2.26.0 2.27.0 2.27.1 2.27.2 2.27.3 2.28.0 2.29.0 2.29.1 2.29.2
give / vendor / vendor-prefixed / symfony / http-foundation / Cookie.php
give / vendor / vendor-prefixed / symfony / http-foundation Last commit date
Exception 2 years ago File 2 years ago Session 2 years ago Tests 2 years ago AcceptHeader.php 2 years ago AcceptHeaderItem.php 2 years ago ApacheRequest.php 2 years ago BinaryFileResponse.php 2 years ago Cookie.php 2 years ago ExpressionRequestMatcher.php 2 years ago FileBag.php 2 years ago HeaderBag.php 2 years ago IpUtils.php 2 years ago JsonResponse.php 2 years ago LICENSE 2 years ago ParameterBag.php 2 years ago RedirectResponse.php 2 years ago Request.php 2 years ago RequestMatcher.php 2 years ago RequestMatcherInterface.php 2 years ago RequestStack.php 2 years ago Response.php 2 years ago ResponseHeaderBag.php 2 years ago ServerBag.php 2 years ago StreamedResponse.php 2 years ago
Cookie.php
307 lines
1 <?php
2
3 /*
4 * This file is part of the Symfony package.
5 *
6 * (c) Fabien Potencier <fabien@symfony.com>
7 *
8 * For the full copyright and license information, please view the LICENSE
9 * file that was distributed with this source code.
10 *
11 * Modified by impress-org on 23-January-2024 using Strauss.
12 * @see https://github.com/BrianHenryIE/strauss
13 */
14
15 namespace Give\Vendors\Symfony\Component\HttpFoundation;
16
17 /**
18 * Represents a cookie.
19 *
20 * @author Johannes M. Schmitt <schmittjoh@gmail.com>
21 */
22 class Cookie
23 {
24 const SAMESITE_NONE = 'none';
25 const SAMESITE_LAX = 'lax';
26 const SAMESITE_STRICT = 'strict';
27
28 protected $name;
29 protected $value;
30 protected $domain;
31 protected $expire;
32 protected $path;
33 protected $secure;
34 protected $httpOnly;
35
36 private $raw;
37 private $sameSite;
38
39 private static $reservedCharsList = "=,; \t\r\n\v\f";
40 private static $reservedCharsFrom = ['=', ',', ';', ' ', "\t", "\r", "\n", "\v", "\f"];
41 private static $reservedCharsTo = ['%3D', '%2C', '%3B', '%20', '%09', '%0D', '%0A', '%0B', '%0C'];
42
43 /**
44 * Creates cookie from raw header string.
45 *
46 * @param string $cookie
47 * @param bool $decode
48 *
49 * @return static
50 */
51 public static function fromString($cookie, $decode = false)
52 {
53 $data = [
54 'expires' => 0,
55 'path' => '/',
56 'domain' => null,
57 'secure' => false,
58 'httponly' => false,
59 'raw' => !$decode,
60 'samesite' => null,
61 ];
62 foreach (explode(';', $cookie) as $part) {
63 if (false === strpos($part, '=')) {
64 $key = trim($part);
65 $value = true;
66 } else {
67 list($key, $value) = explode('=', trim($part), 2);
68 $key = trim($key);
69 $value = trim($value);
70 }
71 if (!isset($data['name'])) {
72 $data['name'] = $decode ? urldecode($key) : $key;
73 $data['value'] = true === $value ? null : ($decode ? urldecode($value) : $value);
74 continue;
75 }
76 switch ($key = strtolower($key)) {
77 case 'name':
78 case 'value':
79 break;
80 case 'max-age':
81 $data['expires'] = time() + (int) $value;
82 break;
83 default:
84 $data[$key] = $value;
85 break;
86 }
87 }
88
89 return new static($data['name'], $data['value'], $data['expires'], $data['path'], $data['domain'], $data['secure'], $data['httponly'], $data['raw'], $data['samesite']);
90 }
91
92 /**
93 * @param string $name The name of the cookie
94 * @param string|null $value The value of the cookie
95 * @param int|string|\DateTimeInterface $expire The time the cookie expires
96 * @param string $path The path on the server in which the cookie will be available on
97 * @param string|null $domain The domain that the cookie is available to
98 * @param bool $secure Whether the cookie should only be transmitted over a secure HTTPS connection from the client
99 * @param bool $httpOnly Whether the cookie will be made accessible only through the HTTP protocol
100 * @param bool $raw Whether the cookie value should be sent with no url encoding
101 * @param string|null $sameSite Whether the cookie will be available for cross-site requests
102 *
103 * @throws \InvalidArgumentException
104 */
105 public function __construct($name, $value = null, $expire = 0, $path = '/', $domain = null, $secure = false, $httpOnly = true, $raw = false, $sameSite = null)
106 {
107 // from PHP source code
108 if ($raw && false !== strpbrk($name, self::$reservedCharsList)) {
109 throw new \InvalidArgumentException(sprintf('The cookie name "%s" contains invalid characters.', $name));
110 }
111
112 if (empty($name)) {
113 throw new \InvalidArgumentException('The cookie name cannot be empty.');
114 }
115
116 // convert expiration time to a Unix timestamp
117 if ($expire instanceof \DateTimeInterface) {
118 $expire = $expire->format('U');
119 } elseif (!is_numeric($expire)) {
120 $expire = strtotime($expire);
121
122 if (false === $expire) {
123 throw new \InvalidArgumentException('The cookie expiration time is not valid.');
124 }
125 }
126
127 $this->name = $name;
128 $this->value = $value;
129 $this->domain = $domain;
130 $this->expire = 0 < $expire ? (int) $expire : 0;
131 $this->path = empty($path) ? '/' : $path;
132 $this->secure = (bool) $secure;
133 $this->httpOnly = (bool) $httpOnly;
134 $this->raw = (bool) $raw;
135
136 if (null !== $sameSite) {
137 $sameSite = strtolower($sameSite);
138 }
139
140 if (!\in_array($sameSite, [self::SAMESITE_LAX, self::SAMESITE_STRICT, self::SAMESITE_NONE, null], true)) {
141 throw new \InvalidArgumentException('The "sameSite" parameter value is not valid.');
142 }
143
144 $this->sameSite = $sameSite;
145 }
146
147 /**
148 * Returns the cookie as a string.
149 *
150 * @return string The cookie
151 */
152 public function __toString()
153 {
154 if ($this->isRaw()) {
155 $str = $this->getName();
156 } else {
157 $str = str_replace(self::$reservedCharsFrom, self::$reservedCharsTo, $this->getName());
158 }
159
160 $str .= '=';
161
162 if ('' === (string) $this->getValue()) {
163 $str .= 'deleted; expires='.gmdate('D, d-M-Y H:i:s T', time() - 31536001).'; Max-Age=0';
164 } else {
165 $str .= $this->isRaw() ? $this->getValue() : rawurlencode($this->getValue());
166
167 if (0 !== $this->getExpiresTime()) {
168 $str .= '; expires='.gmdate('D, d-M-Y H:i:s T', $this->getExpiresTime()).'; Max-Age='.$this->getMaxAge();
169 }
170 }
171
172 if ($this->getPath()) {
173 $str .= '; path='.$this->getPath();
174 }
175
176 if ($this->getDomain()) {
177 $str .= '; domain='.$this->getDomain();
178 }
179
180 if (true === $this->isSecure()) {
181 $str .= '; secure';
182 }
183
184 if (true === $this->isHttpOnly()) {
185 $str .= '; httponly';
186 }
187
188 if (null !== $this->getSameSite()) {
189 $str .= '; samesite='.$this->getSameSite();
190 }
191
192 return $str;
193 }
194
195 /**
196 * Gets the name of the cookie.
197 *
198 * @return string
199 */
200 public function getName()
201 {
202 return $this->name;
203 }
204
205 /**
206 * Gets the value of the cookie.
207 *
208 * @return string|null
209 */
210 public function getValue()
211 {
212 return $this->value;
213 }
214
215 /**
216 * Gets the domain that the cookie is available to.
217 *
218 * @return string|null
219 */
220 public function getDomain()
221 {
222 return $this->domain;
223 }
224
225 /**
226 * Gets the time the cookie expires.
227 *
228 * @return int
229 */
230 public function getExpiresTime()
231 {
232 return $this->expire;
233 }
234
235 /**
236 * Gets the max-age attribute.
237 *
238 * @return int
239 */
240 public function getMaxAge()
241 {
242 $maxAge = $this->expire - time();
243
244 return 0 >= $maxAge ? 0 : $maxAge;
245 }
246
247 /**
248 * Gets the path on the server in which the cookie will be available on.
249 *
250 * @return string
251 */
252 public function getPath()
253 {
254 return $this->path;
255 }
256
257 /**
258 * Checks whether the cookie should only be transmitted over a secure HTTPS connection from the client.
259 *
260 * @return bool
261 */
262 public function isSecure()
263 {
264 return $this->secure;
265 }
266
267 /**
268 * Checks whether the cookie will be made accessible only through the HTTP protocol.
269 *
270 * @return bool
271 */
272 public function isHttpOnly()
273 {
274 return $this->httpOnly;
275 }
276
277 /**
278 * Whether this cookie is about to be cleared.
279 *
280 * @return bool
281 */
282 public function isCleared()
283 {
284 return 0 !== $this->expire && $this->expire < time();
285 }
286
287 /**
288 * Checks if the cookie value should be sent with no url encoding.
289 *
290 * @return bool
291 */
292 public function isRaw()
293 {
294 return $this->raw;
295 }
296
297 /**
298 * Gets the SameSite attribute.
299 *
300 * @return string|null
301 */
302 public function getSameSite()
303 {
304 return $this->sameSite;
305 }
306 }
307