PluginProbe
Independent Analytics – WordPress Analytics Plugin / 2.8.5
Independent Analytics – WordPress Analytics Plugin v2.8.5
2.15.5 2.15.4 2.15.3 2.15.2 2.15.1 2.15.0 2.14.10 trunk 1.1 1.10 1.10.1 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.17.1 1.17.2 1.17.3 1.17.4 1.18 1.18.1 1.19.0 All 120 releases
independent-analytics / IAWP / Utils / Request.php
Request.php
118 lines 4.0 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace IAWP\Utils;
4
5 use IAWPSCOPED\Illuminate\Support\Str;
6 /** @internal */
7 class Request
8 {
9 public static function get_post_array(string $field) : ?array
10 {
11 if (!\array_key_exists($field, $_POST) || !\is_array($_POST[$field])) {
12 return null;
13 }
14 return \rest_sanitize_array($_POST[$field]);
15 }
16 public static function get_post_string(string $field) : ?string
17 {
18 if (!\array_key_exists($field, $_POST)) {
19 return null;
20 }
21 return \sanitize_text_field($_POST[$field]);
22 }
23 public static function path_relative_to_site_url($url = null)
24 {
25 if (\is_null($url)) {
26 $url = self::url();
27 }
28 $site_url = \site_url();
29 if ($url == $site_url) {
30 return '/';
31 } elseif (\substr($url, 0, \strlen($site_url)) == $site_url) {
32 return \substr($url, \strlen($site_url));
33 } else {
34 return $url;
35 }
36 }
37 public static function ip()
38 {
39 if (\defined('IAWP_TEST_IP')) {
40 return \IAWP_TEST_IP;
41 }
42 $headers = ['HTTP_X_FORWARDED_FOR', 'HTTP_X_FORWARDED', 'HTTP_FORWARDED_FOR', 'HTTP_FORWARDED', 'REMOTE_ADDR', 'HTTP_CF_CONNECTING_IP', 'HTTP_CLIENT_IP', 'HTTP_INCAP_CLIENT_IP', 'HTTP_CF_CONNECTING_IP'];
43 // add_filter('iawp_header_with_ip_address', function () {
44 // return 'CUSTOM_HEADER_NAME';
45 // });
46 $user_defined_header = \apply_filters('iawp_header_with_ip_address', null);
47 if (\is_string($user_defined_header)) {
48 $user_defined_header = \IAWP\Utils\Security::string($user_defined_header);
49 if (Str::of($user_defined_header)->test('/^[a-zA-Z_]+$/')) {
50 \array_unshift($headers, $user_defined_header);
51 }
52 }
53 foreach ($headers as $header) {
54 if (isset($_SERVER[$header])) {
55 return \explode(',', $_SERVER[$header])[0];
56 }
57 }
58 return null;
59 }
60 public static function user_agent()
61 {
62 return $_SERVER['HTTP_USER_AGENT'];
63 }
64 public static function is_ip_address_blocked($blocked_ips)
65 {
66 $visitor_ip = self::ip();
67 if (\in_array($visitor_ip, $blocked_ips)) {
68 return \true;
69 }
70 $wildcard_ips = [];
71 foreach ($blocked_ips as $blocked_ip) {
72 if (\IAWP\Utils\String_Util::str_contains($blocked_ip, '*')) {
73 $wildcard_ips[] = $blocked_ip;
74 }
75 }
76 if (\count($wildcard_ips) == 0) {
77 return \false;
78 }
79 $delimeter = \IAWP\Utils\String_Util::str_contains($visitor_ip, '.') ? '.' : ':';
80 $visitor_parts = \explode($delimeter, $visitor_ip);
81 $goal = \count($visitor_parts);
82 foreach ($wildcard_ips as $blocked_ip) {
83 $blocked_parts = \explode($delimeter, $blocked_ip);
84 $matches = 0;
85 for ($i = 0; $i < \count($visitor_parts); $i++) {
86 if (!\array_key_exists($i, $blocked_parts)) {
87 $matches++;
88 } elseif ($visitor_parts[$i] == $blocked_parts[$i] || $blocked_parts[$i] == '*') {
89 $matches++;
90 continue;
91 } else {
92 break;
93 }
94 }
95 if ($matches == $goal) {
96 return \true;
97 }
98 }
99 return \false;
100 }
101 private static function scheme()
102 {
103 if (!empty($_SERVER['REQUEST_SCHEME']) && $_SERVER['REQUEST_SCHEME'] == 'https' || !empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on' || !empty($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == '443') {
104 return 'https';
105 } else {
106 return 'http';
107 }
108 }
109 private static function url()
110 {
111 if (!empty($_SERVER['HTTP_HOST']) && !empty($_SERVER['REQUEST_URI'])) {
112 return \esc_url_raw(self::scheme() . '://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']);
113 } else {
114 return null;
115 }
116 }
117 }
118