PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 4.16.5.1
GiveWP – Donation Plugin and Fundraising Platform v4.16.5.1
4.16.7.2 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 / RequestMatcher.php
give / vendor / vendor-prefixed / symfony / http-foundation Last commit date
Exception 1 year ago File 1 year ago RateLimiter 1 year ago Session 1 year ago Test 1 year ago AcceptHeader.php 1 year ago AcceptHeaderItem.php 1 year ago BinaryFileResponse.php 1 year ago Cookie.php 1 year ago ExpressionRequestMatcher.php 1 year ago FileBag.php 1 year ago HeaderBag.php 1 year ago HeaderUtils.php 1 year ago InputBag.php 1 year ago IpUtils.php 1 year ago JsonResponse.php 1 year ago LICENSE 1 year ago ParameterBag.php 1 year ago RedirectResponse.php 1 year ago Request.php 9 months ago RequestMatcher.php 1 year ago RequestMatcherInterface.php 1 year ago RequestStack.php 1 year ago Response.php 1 year ago ResponseHeaderBag.php 1 year ago ServerBag.php 1 year ago StreamedResponse.php 1 year ago UrlHelper.php 1 year ago
RequestMatcher.php
197 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
12 namespace Give\Vendors\Symfony\Component\HttpFoundation;
13
14 /**
15 * RequestMatcher compares a pre-defined set of checks against a Request instance.
16 *
17 * @author Fabien Potencier <fabien@symfony.com>
18 */
19 class RequestMatcher implements RequestMatcherInterface
20 {
21 /**
22 * @var string|null
23 */
24 private $path;
25
26 /**
27 * @var string|null
28 */
29 private $host;
30
31 /**
32 * @var int|null
33 */
34 private $port;
35
36 /**
37 * @var string[]
38 */
39 private $methods = [];
40
41 /**
42 * @var string[]
43 */
44 private $ips = [];
45
46 /**
47 * @var array
48 */
49 private $attributes = [];
50
51 /**
52 * @var string[]
53 */
54 private $schemes = [];
55
56 /**
57 * @param string|string[]|null $methods
58 * @param string|string[]|null $ips
59 * @param string|string[]|null $schemes
60 */
61 public function __construct(?string $path = null, ?string $host = null, $methods = null, $ips = null, array $attributes = [], $schemes = null, ?int $port = null)
62 {
63 $this->matchPath($path);
64 $this->matchHost($host);
65 $this->matchMethod($methods);
66 $this->matchIps($ips);
67 $this->matchScheme($schemes);
68 $this->matchPort($port);
69
70 foreach ($attributes as $k => $v) {
71 $this->matchAttribute($k, $v);
72 }
73 }
74
75 /**
76 * Adds a check for the HTTP scheme.
77 *
78 * @param string|string[]|null $scheme An HTTP scheme or an array of HTTP schemes
79 */
80 public function matchScheme($scheme)
81 {
82 $this->schemes = null !== $scheme ? array_map('strtolower', (array) $scheme) : [];
83 }
84
85 /**
86 * Adds a check for the URL host name.
87 */
88 public function matchHost(?string $regexp)
89 {
90 $this->host = $regexp;
91 }
92
93 /**
94 * Adds a check for the URL port.
95 *
96 * @param int|null $port The port number to connect to
97 */
98 public function matchPort(?int $port)
99 {
100 $this->port = $port;
101 }
102
103 /**
104 * Adds a check for the URL path info.
105 */
106 public function matchPath(?string $regexp)
107 {
108 $this->path = $regexp;
109 }
110
111 /**
112 * Adds a check for the client IP.
113 *
114 * @param string $ip A specific IP address or a range specified using IP/netmask like 192.168.1.0/24
115 */
116 public function matchIp(string $ip)
117 {
118 $this->matchIps($ip);
119 }
120
121 /**
122 * Adds a check for the client IP.
123 *
124 * @param string|string[]|null $ips A specific IP address or a range specified using IP/netmask like 192.168.1.0/24
125 */
126 public function matchIps($ips)
127 {
128 $ips = null !== $ips ? (array) $ips : [];
129
130 $this->ips = array_reduce($ips, static function (array $ips, string $ip) {
131 return array_merge($ips, preg_split('/\s*,\s*/', $ip));
132 }, []);
133 }
134
135 /**
136 * Adds a check for the HTTP method.
137 *
138 * @param string|string[]|null $method An HTTP method or an array of HTTP methods
139 */
140 public function matchMethod($method)
141 {
142 $this->methods = null !== $method ? array_map('strtoupper', (array) $method) : [];
143 }
144
145 /**
146 * Adds a check for request attribute.
147 */
148 public function matchAttribute(string $key, string $regexp)
149 {
150 $this->attributes[$key] = $regexp;
151 }
152
153 /**
154 * {@inheritdoc}
155 */
156 public function matches(Request $request)
157 {
158 if ($this->schemes && !\in_array($request->getScheme(), $this->schemes, true)) {
159 return false;
160 }
161
162 if ($this->methods && !\in_array($request->getMethod(), $this->methods, true)) {
163 return false;
164 }
165
166 foreach ($this->attributes as $key => $pattern) {
167 $requestAttribute = $request->attributes->get($key);
168 if (!\is_string($requestAttribute)) {
169 return false;
170 }
171 if (!preg_match('{'.$pattern.'}', $requestAttribute)) {
172 return false;
173 }
174 }
175
176 if (null !== $this->path && !preg_match('{'.$this->path.'}', rawurldecode($request->getPathInfo()))) {
177 return false;
178 }
179
180 if (null !== $this->host && !preg_match('{'.$this->host.'}i', $request->getHost())) {
181 return false;
182 }
183
184 if (null !== $this->port && 0 < $this->port && $request->getPort() !== $this->port) {
185 return false;
186 }
187
188 if (IpUtils::checkIp($request->getClientIp() ?? '', $this->ips)) {
189 return true;
190 }
191
192 // Note to future implementors: add additional checks above the
193 // foreach above or else your check might not be run!
194 return 0 === \count($this->ips);
195 }
196 }
197