PluginProbe ʕ •ᴥ•ʔ
Matomo Analytics – Powerful, Privacy-First Insights for WordPress / 5.2.0
Matomo Analytics – Powerful, Privacy-First Insights for WordPress v5.2.0
5.11.1 5.11.0 5.10.2 5.10.1 trunk 1.0.2 1.0.3 1.0.4 1.0.5 1.0.6 1.1.0 1.1.1 1.1.2 1.1.3 1.2.0 1.3.0 1.3.1 1.3.2 4.0.0 4.0.1 4.0.2 4.0.3 4.0.4 4.1.0 4.1.1 4.1.2 4.1.3 4.10.0 4.11.0 4.12.0 4.13.0 4.13.2 4.13.3 4.13.4 4.13.5 4.14.0 4.14.1 4.14.2 4.15.0 4.15.1 4.15.2 4.15.3 4.2.0 4.3.0 4.3.1 4.4.1 4.4.2 4.5.0 4.6.0 5.0.1 5.0.2 5.0.3 5.0.4 5.0.5 5.0.6 5.0.7 5.0.8 5.1.0 5.1.1 5.1.2 5.1.3 5.1.4 5.1.5 5.1.6 5.1.7 5.10.0 5.2.0 5.2.1 5.2.2 5.3.0 5.3.1 5.3.2 5.3.3 5.6.0 5.6.1 5.7.0 5.7.1 5.8.0 5.8.1 5.8.2
matomo / app / vendor / prefixed / symfony / http-foundation / RequestMatcher.php
matomo / app / vendor / prefixed / symfony / http-foundation Last commit date
Exception 2 years ago File 1 year ago RateLimiter 2 years ago Session 1 year ago Test 1 year ago AcceptHeader.php 1 year ago AcceptHeaderItem.php 2 years ago BinaryFileResponse.php 1 year ago Cookie.php 1 year ago ExpressionRequestMatcher.php 2 years ago FileBag.php 1 year ago HeaderBag.php 1 year ago HeaderUtils.php 1 year ago InputBag.php 2 years ago IpUtils.php 1 year ago JsonResponse.php 1 year ago LICENSE 2 years ago ParameterBag.php 1 year ago README.md 2 years ago RedirectResponse.php 2 years ago Request.php 1 year ago RequestMatcher.php 1 year ago RequestMatcherInterface.php 2 years ago RequestStack.php 2 years ago Response.php 1 year ago ResponseHeaderBag.php 1 year ago ServerBag.php 1 year ago StreamedResponse.php 1 year ago UrlHelper.php 2 years ago
RequestMatcher.php
171 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 namespace Matomo\Dependencies\Symfony\Component\HttpFoundation;
12
13 /**
14 * RequestMatcher compares a pre-defined set of checks against a Request instance.
15 *
16 * @author Fabien Potencier <fabien@symfony.com>
17 */
18 class RequestMatcher implements RequestMatcherInterface
19 {
20 /**
21 * @var string|null
22 */
23 private $path;
24 /**
25 * @var string|null
26 */
27 private $host;
28 /**
29 * @var int|null
30 */
31 private $port;
32 /**
33 * @var string[]
34 */
35 private $methods = [];
36 /**
37 * @var string[]
38 */
39 private $ips = [];
40 /**
41 * @var array
42 */
43 private $attributes = [];
44 /**
45 * @var string[]
46 */
47 private $schemes = [];
48 /**
49 * @param string|string[]|null $methods
50 * @param string|string[]|null $ips
51 * @param string|string[]|null $schemes
52 */
53 public function __construct(?string $path = null, ?string $host = null, $methods = null, $ips = null, array $attributes = [], $schemes = null, ?int $port = null)
54 {
55 $this->matchPath($path);
56 $this->matchHost($host);
57 $this->matchMethod($methods);
58 $this->matchIps($ips);
59 $this->matchScheme($schemes);
60 $this->matchPort($port);
61 foreach ($attributes as $k => $v) {
62 $this->matchAttribute($k, $v);
63 }
64 }
65 /**
66 * Adds a check for the HTTP scheme.
67 *
68 * @param string|string[]|null $scheme An HTTP scheme or an array of HTTP schemes
69 */
70 public function matchScheme($scheme)
71 {
72 $this->schemes = null !== $scheme ? array_map('strtolower', (array) $scheme) : [];
73 }
74 /**
75 * Adds a check for the URL host name.
76 */
77 public function matchHost(?string $regexp)
78 {
79 $this->host = $regexp;
80 }
81 /**
82 * Adds a check for the URL port.
83 *
84 * @param int|null $port The port number to connect to
85 */
86 public function matchPort(?int $port)
87 {
88 $this->port = $port;
89 }
90 /**
91 * Adds a check for the URL path info.
92 */
93 public function matchPath(?string $regexp)
94 {
95 $this->path = $regexp;
96 }
97 /**
98 * Adds a check for the client IP.
99 *
100 * @param string $ip A specific IP address or a range specified using IP/netmask like 192.168.1.0/24
101 */
102 public function matchIp(string $ip)
103 {
104 $this->matchIps($ip);
105 }
106 /**
107 * Adds a check for the client IP.
108 *
109 * @param string|string[]|null $ips A specific IP address or a range specified using IP/netmask like 192.168.1.0/24
110 */
111 public function matchIps($ips)
112 {
113 $ips = null !== $ips ? (array) $ips : [];
114 $this->ips = array_reduce($ips, static function (array $ips, string $ip) {
115 return array_merge($ips, preg_split('/\\s*,\\s*/', $ip));
116 }, []);
117 }
118 /**
119 * Adds a check for the HTTP method.
120 *
121 * @param string|string[]|null $method An HTTP method or an array of HTTP methods
122 */
123 public function matchMethod($method)
124 {
125 $this->methods = null !== $method ? array_map('strtoupper', (array) $method) : [];
126 }
127 /**
128 * Adds a check for request attribute.
129 */
130 public function matchAttribute(string $key, string $regexp)
131 {
132 $this->attributes[$key] = $regexp;
133 }
134 /**
135 * {@inheritdoc}
136 */
137 public function matches(Request $request)
138 {
139 if ($this->schemes && !\in_array($request->getScheme(), $this->schemes, \true)) {
140 return \false;
141 }
142 if ($this->methods && !\in_array($request->getMethod(), $this->methods, \true)) {
143 return \false;
144 }
145 foreach ($this->attributes as $key => $pattern) {
146 $requestAttribute = $request->attributes->get($key);
147 if (!\is_string($requestAttribute)) {
148 return \false;
149 }
150 if (!preg_match('{' . $pattern . '}', $requestAttribute)) {
151 return \false;
152 }
153 }
154 if (null !== $this->path && !preg_match('{' . $this->path . '}', rawurldecode($request->getPathInfo()))) {
155 return \false;
156 }
157 if (null !== $this->host && !preg_match('{' . $this->host . '}i', $request->getHost())) {
158 return \false;
159 }
160 if (null !== $this->port && 0 < $this->port && $request->getPort() !== $this->port) {
161 return \false;
162 }
163 if (IpUtils::checkIp($request->getClientIp() ?? '', $this->ips)) {
164 return \true;
165 }
166 // Note to future implementors: add additional checks above the
167 // foreach above or else your check might not be run!
168 return 0 === \count($this->ips);
169 }
170 }
171