GeoIP Detection - Version 2.7.0

Version Description

  • ADD: The options array of geoip_detect2_get_info_from_ip now has a new parameter for overriding the current source for a single lookup. See API usage examples
  • ADD: New filter geoip_detect2_shortcode_country_select_countries for the country list of [geoip_detect2_countries]
  • ADD: New constant GEOIP_DETECT_IP_EMPTY_CACHE_TIME that can be used to specify a shorter cache time in case temporarily no external IP was found.
  • FIX: Compatibility with CF 4.6 (remove deprecated function call)
  • Maxmind vendor code was updated to the current version (2.4.5).
Download this release

Release Info

Developer benjamin4
Plugin Icon 128x128 GeoIP Detection
Version 2.7.0
Comparing to
See all releases

Code changes from version 2.6.0 to 2.7.0

api-stubs.php CHANGED
@@ -2,9 +2,9 @@
2
  // This file contains dummy method in case the requirements are not met.
3
  // Those functions don't do anything but at least there is no Fatal Error or so.
4
 
5
- function geoip_detect2_get_info_from_ip($ip) { return new stdClass; }
6
- function geoip_detect2_get_info_from_current_ip() { return geoip_detect2_get_info_from_ip(); }
7
- function geoip_detect2_get_reader() { return NULL; }
8
- function geoip_detect2_get_current_source_description() { return ''; }
9
- function geoip_detect2_get_client_ip() {return ''; }
10
- function geoip_detect2_get_external_ip_adress() { return ''; }
2
  // This file contains dummy method in case the requirements are not met.
3
  // Those functions don't do anything but at least there is no Fatal Error or so.
4
 
5
+ function geoip_detect2_get_info_from_ip($ip, $locales = null, $options = array()) { return new stdClass; }
6
+ function geoip_detect2_get_info_from_current_ip($locales = null, $options = array()) { return geoip_detect2_get_info_from_ip(''); }
7
+ function geoip_detect2_get_reader($locales = null, $options = array()) { return NULL; }
8
+ function geoip_detect2_get_current_source_description($source = null) { return ''; }
9
+ function geoip_detect2_get_client_ip() { return ''; }
10
+ function geoip_detect2_get_external_ip_adress($unfiltered = false) { return ''; }
api.php CHANGED
@@ -19,6 +19,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19
  */
20
 
21
  use YellowTree\GeoipDetect\DataSources\DataSourceRegistry;
 
22
  /**
23
  * Get Geo-Information for a specific IP
24
  * @param string $ip IP-Adress (IPv4 or IPv6). 'me' is the current IP of the server.
@@ -26,6 +27,7 @@ use YellowTree\GeoipDetect\DataSources\DataSourceRegistry;
26
  * from most preferred to least preferred. (Default: Site language, en)
27
  * @param array Property names with options.
28
  * @param boolean $skipCache TRUE: Do not use cache for this request. (Default: FALSE)
 
29
  * @param float $timeout Total transaction timeout in seconds (Precision+HostIP.info API only)
30
  * @param int $connectTimeout Initial connection timeout in seconds (Precision API only)
31
  * @return YellowTree\GeoipDetect\DataSources\City GeoInformation. (Actually, this is a subclass of \GeoIp2\Model\City)
@@ -36,6 +38,7 @@ use YellowTree\GeoipDetect\DataSources\DataSourceRegistry;
36
  * @since 2.0.0
37
  * @since 2.4.0 New parameter $skipCache
38
  * @since 2.5.0 Parameter $skipCache has been renamed to $options with 'skipCache' property
 
39
  */
40
  function geoip_detect2_get_info_from_ip($ip, $locales = null, $options = array()) {
41
  _geoip_maybe_disable_pagecache();
@@ -56,7 +59,7 @@ function geoip_detect2_get_info_from_ip($ip, $locales = null, $options = array()
56
 
57
  // Have a look at the cache first
58
  if (!$options['skipCache']) {
59
- $data = _geoip_detect2_get_data_from_cache($ip);
60
  }
61
 
62
  if (!$data) {
@@ -100,12 +103,16 @@ function geoip_detect2_get_info_from_ip($ip, $locales = null, $options = array()
100
  * @param array(string) $locales List of locale codes to use in name property
101
  * from most preferred to least preferred. (Default: Site language, en)
102
  * @param array Property names with options.
103
- * @param boolean $skipCache TRUE: Do not use cache for this request. (Default: FALSE)
 
 
 
104
  * @return YellowTree\GeoipDetect\DataSources\City GeoInformation.
105
  *
106
  * @since 2.0.0
107
  * @since 2.4.0 New parameter $skipCache
108
  * @since 2.5.0 Parameter $skipCache has been renamed to $options with 'skipCache' property
 
109
  */
110
  function geoip_detect2_get_info_from_current_ip($locales = null, $options = array()) {
111
  return geoip_detect2_get_info_from_ip(geoip_detect2_get_client_ip(), $locales, $options);
@@ -119,15 +126,18 @@ function geoip_detect2_get_info_from_current_ip($locales = null, $options = arra
119
  * @param array(string) List of locale codes to use in name property
120
  * from most preferred to least preferred. (Default: Site language, en)
121
  * @param array Property names with options.
 
122
  * @param float $timeout Total transaction timeout in seconds (Precision+HostIP.info API only)
123
- * @param float $connectTimeout Initial connection timeout in seconds (Precision API only)
124
- * @return \YellowTree\GeoipDetect\DataSources\ReaderInterface The reader, ready to do its work. Don't forget to `close()` it afterwards. NULL if file not found (or other problems).
125
  *
126
  * @since 2.0.0
127
  * @since 2.5.0 new parameter $options
 
128
  */
129
  function geoip_detect2_get_reader($locales = null, $options = array()) {
130
  _geoip_maybe_disable_pagecache();
 
 
131
  return _geoip_detect2_get_reader($locales, false, $sourceIdOut, $options);
132
  }
133
 
@@ -143,7 +153,13 @@ function geoip_detect2_get_current_source_description($source = null) {
143
  if (is_object($source) && $source instanceof \YellowTree\GeoipDetect\DataSources\City) {
144
  $source = $source->extra->source;
145
  }
146
- $source = DataSourceRegistry::getInstance()->getSource($source);
 
 
 
 
 
 
147
  if ($source) {
148
  return $source->getShortLabel();
149
  }
@@ -198,7 +214,10 @@ function geoip_detect2_get_client_ip() {
198
  if (!$ip)
199
  $ip = '::1'; // By default, use localhost
200
 
 
201
  $ip = apply_filters('geoip2_detect2_client_ip', $ip, $ip_list);
 
 
202
 
203
  return $ip;
204
  }
@@ -225,7 +244,12 @@ function geoip_detect2_get_external_ip_adress($unfiltered = false) {
225
 
226
  if (!$ip_cache) {
227
  $ip_cache = _geoip_detect_get_external_ip_adress_without_cache();
228
- set_transient('geoip_detect_external_ip', $ip_cache, GEOIP_DETECT_IP_CACHE_TIME);
 
 
 
 
 
229
  }
230
 
231
  $ip_cache = apply_filters('geoip_detect_get_external_ip_adress', $ip_cache);
19
  */
20
 
21
  use YellowTree\GeoipDetect\DataSources\DataSourceRegistry;
22
+
23
  /**
24
  * Get Geo-Information for a specific IP
25
  * @param string $ip IP-Adress (IPv4 or IPv6). 'me' is the current IP of the server.
27
  * from most preferred to least preferred. (Default: Site language, en)
28
  * @param array Property names with options.
29
  * @param boolean $skipCache TRUE: Do not use cache for this request. (Default: FALSE)
30
+ * @param string $source Change the source for this request only. (Valid values: 'auto', 'manual', 'precision', 'header', 'hostinfo')
31
  * @param float $timeout Total transaction timeout in seconds (Precision+HostIP.info API only)
32
  * @param int $connectTimeout Initial connection timeout in seconds (Precision API only)
33
  * @return YellowTree\GeoipDetect\DataSources\City GeoInformation. (Actually, this is a subclass of \GeoIp2\Model\City)
38
  * @since 2.0.0
39
  * @since 2.4.0 New parameter $skipCache
40
  * @since 2.5.0 Parameter $skipCache has been renamed to $options with 'skipCache' property
41
+ * @since 2.7.0 Parameter $options['source'] has been introduced
42
  */
43
  function geoip_detect2_get_info_from_ip($ip, $locales = null, $options = array()) {
44
  _geoip_maybe_disable_pagecache();
59
 
60
  // Have a look at the cache first
61
  if (!$options['skipCache']) {
62
+ $data = _geoip_detect2_get_data_from_cache($ip, $options['source']);
63
  }
64
 
65
  if (!$data) {
103
  * @param array(string) $locales List of locale codes to use in name property
104
  * from most preferred to least preferred. (Default: Site language, en)
105
  * @param array Property names with options.
106
+ * @param boolean $skipCache TRUE: Do not use cache for this request. (Default: FALSE)
107
+ * @param string $source Change the source for this request only. (Valid values: 'auto', 'manual', 'precision', 'header', 'hostinfo')
108
+ * @param float $timeout Total transaction timeout in seconds (Precision+HostIP.info API only)
109
+ * @param int $connectTimeout Initial connection timeout in seconds (Precision API only)
110
  * @return YellowTree\GeoipDetect\DataSources\City GeoInformation.
111
  *
112
  * @since 2.0.0
113
  * @since 2.4.0 New parameter $skipCache
114
  * @since 2.5.0 Parameter $skipCache has been renamed to $options with 'skipCache' property
115
+ * @since 2.7.0 Parameter $options['source'] has been introduced
116
  */
117
  function geoip_detect2_get_info_from_current_ip($locales = null, $options = array()) {
118
  return geoip_detect2_get_info_from_ip(geoip_detect2_get_client_ip(), $locales, $options);
126
  * @param array(string) List of locale codes to use in name property
127
  * from most preferred to least preferred. (Default: Site language, en)
128
  * @param array Property names with options.
129
+ * @param string $source Change the source for this request only. (Valid values: 'auto', 'manual', 'precision', 'header', 'hostinfo')
130
  * @param float $timeout Total transaction timeout in seconds (Precision+HostIP.info API only)
131
+ * @param int $connectTimeout Initial connection timeout in seconds (Precision API only)
 
132
  *
133
  * @since 2.0.0
134
  * @since 2.5.0 new parameter $options
135
+ * @since 2.7.0 Parameter $options['source'] has been introduced
136
  */
137
  function geoip_detect2_get_reader($locales = null, $options = array()) {
138
  _geoip_maybe_disable_pagecache();
139
+ $options = _geoip_detect2_process_options($options);
140
+
141
  return _geoip_detect2_get_reader($locales, false, $sourceIdOut, $options);
142
  }
143
 
153
  if (is_object($source) && $source instanceof \YellowTree\GeoipDetect\DataSources\City) {
154
  $source = $source->extra->source;
155
  }
156
+ $registry = DataSourceRegistry::getInstance();
157
+ if (is_null($source)) {
158
+ $source = $registry->getCurrentSource();
159
+ } else {
160
+ $source = $registry->getSource($source);
161
+ }
162
+
163
  if ($source) {
164
  return $source->getShortLabel();
165
  }
214
  if (!$ip)
215
  $ip = '::1'; // By default, use localhost
216
 
217
+ // @deprecated: this filter was added by mistake
218
  $ip = apply_filters('geoip2_detect2_client_ip', $ip, $ip_list);
219
+ // this is the correct one!
220
+ $ip = apply_filters('geoip_detect2_client_ip', $ip, $ip_list);
221
 
222
  return $ip;
223
  }
244
 
245
  if (!$ip_cache) {
246
  $ip_cache = _geoip_detect_get_external_ip_adress_without_cache();
247
+
248
+ $expiryTime = GEOIP_DETECT_IP_CACHE_TIME;
249
+ if (empty($ip_cache) || $ip_cache === '0.0.0.0')
250
+ $expiryTime = GEOIP_DETECT_IP_EMPTY_CACHE_TIME;
251
+
252
+ set_transient('geoip_detect_external_ip', $ip_cache, $expiryTime);
253
  }
254
 
255
  $ip_cache = apply_filters('geoip_detect_get_external_ip_adress', $ip_cache);
composer.lock CHANGED
@@ -4,21 +4,20 @@
4
  "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
5
  "This file is @generated automatically"
6
  ],
7
- "hash": "8bb448974815061f5600822fb70091b1",
8
  "content-hash": "600b354d911b7fb40bc8e6b398c09245",
9
  "packages": [
10
  {
11
  "name": "composer/ca-bundle",
12
- "version": "1.0.4",
13
  "source": {
14
  "type": "git",
15
  "url": "https://github.com/composer/ca-bundle.git",
16
- "reference": "ec21a59414b99501e723b63fd664aa8ead9c5680"
17
  },
18
  "dist": {
19
  "type": "zip",
20
- "url": "https://api.github.com/repos/composer/ca-bundle/zipball/ec21a59414b99501e723b63fd664aa8ead9c5680",
21
- "reference": "ec21a59414b99501e723b63fd664aa8ead9c5680",
22
  "shasum": ""
23
  },
24
  "require": {
@@ -27,6 +26,7 @@
27
  "php": "^5.3.2 || ^7.0"
28
  },
29
  "require-dev": {
 
30
  "psr/log": "^1.0",
31
  "symfony/process": "^2.5 || ^3.0"
32
  },
@@ -63,20 +63,20 @@
63
  "ssl",
64
  "tls"
65
  ],
66
- "time": "2016-09-04 19:00:06"
67
  },
68
  {
69
  "name": "geoip2/geoip2",
70
- "version": "v2.4.2",
71
  "source": {
72
  "type": "git",
73
  "url": "https://github.com/maxmind/GeoIP2-php.git",
74
- "reference": "24b278b0195d7067e930b844c44faf8fae5bdbc7"
75
  },
76
  "dist": {
77
  "type": "zip",
78
- "url": "https://api.github.com/repos/maxmind/GeoIP2-php/zipball/24b278b0195d7067e930b844c44faf8fae5bdbc7",
79
- "reference": "24b278b0195d7067e930b844c44faf8fae5bdbc7",
80
  "shasum": ""
81
  },
82
  "require": {
@@ -114,20 +114,20 @@
114
  "geolocation",
115
  "maxmind"
116
  ],
117
- "time": "2016-08-17 20:42:55"
118
  },
119
  {
120
  "name": "maxmind-db/reader",
121
- "version": "v1.1.1",
122
  "source": {
123
  "type": "git",
124
  "url": "https://github.com/maxmind/MaxMind-DB-Reader-php.git",
125
- "reference": "8da3b4fcd439779d4b16bba0a4ba98365f78d788"
126
  },
127
  "dist": {
128
  "type": "zip",
129
- "url": "https://api.github.com/repos/maxmind/MaxMind-DB-Reader-php/zipball/8da3b4fcd439779d4b16bba0a4ba98365f78d788",
130
- "reference": "8da3b4fcd439779d4b16bba0a4ba98365f78d788",
131
  "shasum": ""
132
  },
133
  "require": {
@@ -138,10 +138,15 @@
138
  "satooshi/php-coveralls": "1.0.*",
139
  "squizlabs/php_codesniffer": "2.*"
140
  },
 
 
 
 
 
141
  "type": "library",
142
  "autoload": {
143
- "psr-0": {
144
- "MaxMind": "src/"
145
  }
146
  },
147
  "notification-url": "https://packagist.org/downloads/",
@@ -164,7 +169,7 @@
164
  "geolocation",
165
  "maxmind"
166
  ],
167
- "time": "2016-09-15 21:26:50"
168
  },
169
  {
170
  "name": "maxmind/web-service-common",
@@ -208,7 +213,7 @@
208
  ],
209
  "description": "Internal MaxMind Web Service API",
210
  "homepage": "https://github.com/maxmind/mm-web-service-api-php",
211
- "time": "2016-08-18 16:36:52"
212
  }
213
  ],
214
  "packages-dev": [],
4
  "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
5
  "This file is @generated automatically"
6
  ],
 
7
  "content-hash": "600b354d911b7fb40bc8e6b398c09245",
8
  "packages": [
9
  {
10
  "name": "composer/ca-bundle",
11
+ "version": "1.0.7",
12
  "source": {
13
  "type": "git",
14
  "url": "https://github.com/composer/ca-bundle.git",
15
+ "reference": "b17e6153cb7f33c7e44eb59578dc12eee5dc8e12"
16
  },
17
  "dist": {
18
  "type": "zip",
19
+ "url": "https://api.github.com/repos/composer/ca-bundle/zipball/b17e6153cb7f33c7e44eb59578dc12eee5dc8e12",
20
+ "reference": "b17e6153cb7f33c7e44eb59578dc12eee5dc8e12",
21
  "shasum": ""
22
  },
23
  "require": {
26
  "php": "^5.3.2 || ^7.0"
27
  },
28
  "require-dev": {
29
+ "phpunit/phpunit": "^4.5",
30
  "psr/log": "^1.0",
31
  "symfony/process": "^2.5 || ^3.0"
32
  },
63
  "ssl",
64
  "tls"
65
  ],
66
+ "time": "2017-03-06T11:59:08+00:00"
67
  },
68
  {
69
  "name": "geoip2/geoip2",
70
+ "version": "v2.4.5",
71
  "source": {
72
  "type": "git",
73
  "url": "https://github.com/maxmind/GeoIP2-php.git",
74
+ "reference": "b28a0ed0190cd76c878ed7002a5d1bb8c5f4c175"
75
  },
76
  "dist": {
77
  "type": "zip",
78
+ "url": "https://api.github.com/repos/maxmind/GeoIP2-php/zipball/b28a0ed0190cd76c878ed7002a5d1bb8c5f4c175",
79
+ "reference": "b28a0ed0190cd76c878ed7002a5d1bb8c5f4c175",
80
  "shasum": ""
81
  },
82
  "require": {
114
  "geolocation",
115
  "maxmind"
116
  ],
117
+ "time": "2017-01-31T17:28:48+00:00"
118
  },
119
  {
120
  "name": "maxmind-db/reader",
121
+ "version": "v1.1.3",
122
  "source": {
123
  "type": "git",
124
  "url": "https://github.com/maxmind/MaxMind-DB-Reader-php.git",
125
+ "reference": "7eeccf61b078bb23bb07b1a151a7e5db52871e65"
126
  },
127
  "dist": {
128
  "type": "zip",
129
+ "url": "https://api.github.com/repos/maxmind/MaxMind-DB-Reader-php/zipball/7eeccf61b078bb23bb07b1a151a7e5db52871e65",
130
+ "reference": "7eeccf61b078bb23bb07b1a151a7e5db52871e65",
131
  "shasum": ""
132
  },
133
  "require": {
138
  "satooshi/php-coveralls": "1.0.*",
139
  "squizlabs/php_codesniffer": "2.*"
140
  },
141
+ "suggest": {
142
+ "ext-bcmath": "bcmath or gmp is requred for decoding larger integers with the pure PHP decoder",
143
+ "ext-gmp": "bcmath or gmp is requred for decoding larger integers with the pure PHP decoder",
144
+ "ext-maxminddb": "A C-based database decoder that provides significantly faster lookups"
145
+ },
146
  "type": "library",
147
  "autoload": {
148
+ "psr-4": {
149
+ "MaxMind\\Db\\": "src/MaxMind/Db"
150
  }
151
  },
152
  "notification-url": "https://packagist.org/downloads/",
169
  "geolocation",
170
  "maxmind"
171
  ],
172
+ "time": "2017-01-19T23:49:38+00:00"
173
  },
174
  {
175
  "name": "maxmind/web-service-common",
213
  ],
214
  "description": "Internal MaxMind Web Service API",
215
  "homepage": "https://github.com/maxmind/mm-web-service-api-php",
216
+ "time": "2016-08-18T16:36:52+00:00"
217
  }
218
  ],
219
  "packages-dev": [],
data-sources/auto.php CHANGED
@@ -162,7 +162,7 @@ HTML;
162
 
163
  public function deactivate()
164
  {
165
- wp_clear_scheduled_hook('geoipdetectupdate');
166
  }
167
  }
168
 
162
 
163
  public function deactivate()
164
  {
165
+ //wp_clear_scheduled_hook('geoipdetectupdate');
166
  }
167
  }
168
 
data-sources/header.php CHANGED
@@ -29,256 +29,6 @@ class HeaderReader extends \YellowTree\GeoipDetect\DataSources\AbstractReader {
29
  'cloudflare' => 'Cloudflare',
30
  );
31
 
32
- protected $country_names = array
33
- (
34
- 'AF' => 'Afghanistan',
35
- 'AX' => 'Aland Islands',
36
- 'AL' => 'Albania',
37
- 'DZ' => 'Algeria',
38
- 'AS' => 'American Samoa',
39
- 'AD' => 'Andorra',
40
- 'AO' => 'Angola',
41
- 'AI' => 'Anguilla',
42
- 'AQ' => 'Antarctica',
43
- 'AG' => 'Antigua And Barbuda',
44
- 'AR' => 'Argentina',
45
- 'AM' => 'Armenia',
46
- 'AW' => 'Aruba',
47
- 'AU' => 'Australia',
48
- 'AT' => 'Austria',
49
- 'AZ' => 'Azerbaijan',
50
- 'BS' => 'Bahamas',
51
- 'BH' => 'Bahrain',
52
- 'BD' => 'Bangladesh',
53
- 'BB' => 'Barbados',
54
- 'BY' => 'Belarus',
55
- 'BE' => 'Belgium',
56
- 'BZ' => 'Belize',
57
- 'BJ' => 'Benin',
58
- 'BM' => 'Bermuda',
59
- 'BT' => 'Bhutan',
60
- 'BO' => 'Bolivia',
61
- 'BA' => 'Bosnia And Herzegovina',
62
- 'BW' => 'Botswana',
63
- 'BV' => 'Bouvet Island',
64
- 'BR' => 'Brazil',
65
- 'IO' => 'British Indian Ocean Territory',
66
- 'BN' => 'Brunei Darussalam',
67
- 'BG' => 'Bulgaria',
68
- 'BF' => 'Burkina Faso',
69
- 'BI' => 'Burundi',
70
- 'KH' => 'Cambodia',
71
- 'CM' => 'Cameroon',
72
- 'CA' => 'Canada',
73
- 'CV' => 'Cape Verde',
74
- 'KY' => 'Cayman Islands',
75
- 'CF' => 'Central African Republic',
76
- 'TD' => 'Chad',
77
- 'CL' => 'Chile',
78
- 'CN' => 'China',
79
- 'CX' => 'Christmas Island',
80
- 'CC' => 'Cocos (Keeling) Islands',
81
- 'CO' => 'Colombia',
82
- 'KM' => 'Comoros',
83
- 'CG' => 'Congo',
84
- 'CD' => 'Congo, Democratic Republic',
85
- 'CK' => 'Cook Islands',
86
- 'CR' => 'Costa Rica',
87
- 'CI' => 'Cote D\'Ivoire',
88
- 'HR' => 'Croatia',
89
- 'CU' => 'Cuba',
90
- 'CY' => 'Cyprus',
91
- 'CZ' => 'Czech Republic',
92
- 'DK' => 'Denmark',
93
- 'DJ' => 'Djibouti',
94
- 'DM' => 'Dominica',
95
- 'DO' => 'Dominican Republic',
96
- 'EC' => 'Ecuador',
97
- 'EG' => 'Egypt',
98
- 'SV' => 'El Salvador',
99
- 'GQ' => 'Equatorial Guinea',
100
- 'ER' => 'Eritrea',
101
- 'EE' => 'Estonia',
102
- 'ET' => 'Ethiopia',
103
- 'FK' => 'Falkland Islands (Malvinas)',
104
- 'FO' => 'Faroe Islands',
105
- 'FJ' => 'Fiji',
106
- 'FI' => 'Finland',
107
- 'FR' => 'France',
108
- 'GF' => 'French Guiana',
109
- 'PF' => 'French Polynesia',
110
- 'TF' => 'French Southern Territories',
111
- 'GA' => 'Gabon',
112
- 'GM' => 'Gambia',
113
- 'GE' => 'Georgia',
114
- 'DE' => 'Germany',
115
- 'GH' => 'Ghana',
116
- 'GI' => 'Gibraltar',
117
- 'GR' => 'Greece',
118
- 'GL' => 'Greenland',
119
- 'GD' => 'Grenada',
120
- 'GP' => 'Guadeloupe',
121
- 'GU' => 'Guam',
122
- 'GT' => 'Guatemala',
123
- 'GG' => 'Guernsey',
124
- 'GN' => 'Guinea',
125
- 'GW' => 'Guinea-Bissau',
126
- 'GY' => 'Guyana',
127
- 'HT' => 'Haiti',
128
- 'HM' => 'Heard Island & Mcdonald Islands',
129
- 'VA' => 'Holy See (Vatican City State)',
130
- 'HN' => 'Honduras',
131
- 'HK' => 'Hong Kong',
132
- 'HU' => 'Hungary',
133
- 'IS' => 'Iceland',
134
- 'IN' => 'India',
135
- 'ID' => 'Indonesia',
136
- 'IR' => 'Iran, Islamic Republic Of',
137
- 'IQ' => 'Iraq',
138
- 'IE' => 'Ireland',
139
- 'IM' => 'Isle Of Man',
140
- 'IL' => 'Israel',
141
- 'IT' => 'Italy',
142
- 'JM' => 'Jamaica',
143
- 'JP' => 'Japan',
144
- 'JE' => 'Jersey',
145
- 'JO' => 'Jordan',
146
- 'KZ' => 'Kazakhstan',
147
- 'KE' => 'Kenya',
148
- 'KI' => 'Kiribati',
149
- 'KR' => 'Korea',
150
- 'KW' => 'Kuwait',
151
- 'KG' => 'Kyrgyzstan',
152
- 'LA' => 'Lao People\'s Democratic Republic',
153
- 'LV' => 'Latvia',
154
- 'LB' => 'Lebanon',
155
- 'LS' => 'Lesotho',
156
- 'LR' => 'Liberia',
157
- 'LY' => 'Libyan Arab Jamahiriya',
158
- 'LI' => 'Liechtenstein',
159
- 'LT' => 'Lithuania',
160
- 'LU' => 'Luxembourg',
161
- 'MO' => 'Macao',
162
- 'MK' => 'Macedonia',
163
- 'MG' => 'Madagascar',
164
- 'MW' => 'Malawi',
165
- 'MY' => 'Malaysia',
166
- 'MV' => 'Maldives',
167
- 'ML' => 'Mali',
168
- 'MT' => 'Malta',
169
- 'MH' => 'Marshall Islands',
170
- 'MQ' => 'Martinique',
171
- 'MR' => 'Mauritania',
172
- 'MU' => 'Mauritius',
173
- 'YT' => 'Mayotte',
174
- 'MX' => 'Mexico',
175
- 'FM' => 'Micronesia, Federated States Of',
176
- 'MD' => 'Moldova',
177
- 'MC' => 'Monaco',
178
- 'MN' => 'Mongolia',
179
- 'ME' => 'Montenegro',
180
- 'MS' => 'Montserrat',
181
- 'MA' => 'Morocco',
182
- 'MZ' => 'Mozambique',
183
- 'MM' => 'Myanmar',
184
- 'NA' => 'Namibia',
185
- 'NR' => 'Nauru',
186
- 'NP' => 'Nepal',
187
- 'NL' => 'Netherlands',
188
- 'AN' => 'Netherlands Antilles',
189
- 'NC' => 'New Caledonia',
190
- 'NZ' => 'New Zealand',
191
- 'NI' => 'Nicaragua',
192
- 'NE' => 'Niger',
193
- 'NG' => 'Nigeria',
194
- 'NU' => 'Niue',
195
- 'NF' => 'Norfolk Island',
196
- 'MP' => 'Northern Mariana Islands',
197
- 'NO' => 'Norway',
198
- 'OM' => 'Oman',
199
- 'PK' => 'Pakistan',
200
- 'PW' => 'Palau',
201
- 'PS' => 'Palestinian Territory, Occupied',
202
- 'PA' => 'Panama',
203
- 'PG' => 'Papua New Guinea',
204
- 'PY' => 'Paraguay',
205
- 'PE' => 'Peru',
206
- 'PH' => 'Philippines',
207
- 'PN' => 'Pitcairn',
208
- 'PL' => 'Poland',
209
- 'PT' => 'Portugal',
210
- 'PR' => 'Puerto Rico',
211
- 'QA' => 'Qatar',
212
- 'RE' => 'Reunion',
213
- 'RO' => 'Romania',
214
- 'RU' => 'Russian Federation',
215
- 'RW' => 'Rwanda',
216
- 'BL' => 'Saint Barthelemy',
217
- 'SH' => 'Saint Helena',
218
- 'KN' => 'Saint Kitts And Nevis',
219
- 'LC' => 'Saint Lucia',
220
- 'MF' => 'Saint Martin',
221
- 'PM' => 'Saint Pierre And Miquelon',
222
- 'VC' => 'Saint Vincent And Grenadines',
223
- 'WS' => 'Samoa',
224
- 'SM' => 'San Marino',
225
- 'ST' => 'Sao Tome And Principe',
226
- 'SA' => 'Saudi Arabia',
227
- 'SN' => 'Senegal',
228
- 'RS' => 'Serbia',
229
- 'SC' => 'Seychelles',
230
- 'SL' => 'Sierra Leone',
231
- 'SG' => 'Singapore',
232
- 'SK' => 'Slovakia',
233
- 'SI' => 'Slovenia',
234
- 'SB' => 'Solomon Islands',
235
- 'SO' => 'Somalia',
236
- 'ZA' => 'South Africa',
237
- 'GS' => 'South Georgia And Sandwich Isl.',
238
- 'ES' => 'Spain',
239
- 'LK' => 'Sri Lanka',
240
- 'SD' => 'Sudan',
241
- 'SR' => 'Suriname',
242
- 'SJ' => 'Svalbard And Jan Mayen',
243
- 'SZ' => 'Swaziland',
244
- 'SE' => 'Sweden',
245
- 'CH' => 'Switzerland',
246
- 'SY' => 'Syrian Arab Republic',
247
- 'TW' => 'Taiwan',
248
- 'TJ' => 'Tajikistan',
249
- 'TZ' => 'Tanzania',
250
- 'TH' => 'Thailand',
251
- 'TL' => 'Timor-Leste',
252
- 'TG' => 'Togo',
253
- 'TK' => 'Tokelau',
254
- 'TO' => 'Tonga',
255
- 'TT' => 'Trinidad And Tobago',
256
- 'TN' => 'Tunisia',
257
- 'TR' => 'Turkey',
258
- 'TM' => 'Turkmenistan',
259
- 'TC' => 'Turks And Caicos Islands',
260
- 'TV' => 'Tuvalu',
261
- 'UG' => 'Uganda',
262
- 'UA' => 'Ukraine',
263
- 'AE' => 'United Arab Emirates',
264
- 'GB' => 'United Kingdom',
265
- 'US' => 'United States',
266
- 'UM' => 'United States Outlying Islands',
267
- 'UY' => 'Uruguay',
268
- 'UZ' => 'Uzbekistan',
269
- 'VU' => 'Vanuatu',
270
- 'VE' => 'Venezuela',
271
- 'VN' => 'Viet Nam',
272
- 'VG' => 'Virgin Islands, British',
273
- 'VI' => 'Virgin Islands, U.S.',
274
- 'WF' => 'Wallis And Futuna',
275
- 'EH' => 'Western Sahara',
276
- 'YE' => 'Yemen',
277
- 'ZM' => 'Zambia',
278
- 'ZW' => 'Zimbabwe',
279
- );
280
-
281
-
282
  public function country($ip) {
283
 
284
  $r = array();
@@ -302,12 +52,6 @@ class HeaderReader extends \YellowTree\GeoipDetect\DataSources\AbstractReader {
302
 
303
  $r['country']['iso_code'] = strtoupper($isoCode);
304
 
305
- if (isset($this->country_names[ $r['country']['iso_code'] ]))
306
- $country = $this->country_names[ $r['country']['iso_code'] ];
307
-
308
- $r['country']['names'] = array('en' => $country);
309
-
310
-
311
  $r['traits']['ip_address'] = $ip;
312
 
313
  $record = new \GeoIp2\Model\City($r, array('en'));
@@ -326,15 +70,15 @@ class HeaderDataSource extends AbstractDataSource {
326
  public function getStatusInformationHTML() {
327
  $provider = get_option('geoip-detect-header-provider');
328
 
329
- $html = $this->getShortLabel();
330
-
331
  if ($provider == 'cloudflare') {
332
- $html .= '<br><br>';
333
- $html .= sprintf(__('This needs to be enabled in the admin panel: see <a href="%s">Help</a>.', 'geoip-detect'), 'https://support.cloudflare.com/hc/en-us/articles/200168236-What-does-CloudFlare-IP-Geolocation-do-');
334
  } elseif ($provider == 'aws') {
335
- $html .= '<br><br>';
336
- $html .= sprintf(__('This needs to be enabled in the admin panel: see <a href="%s">Help</a>.', 'geoip-detect'), 'https://aws.amazon.com/blogs/aws/enhanced-cloudfront-customization/');
337
  }
 
 
338
  return $html;
339
  }
340
 
@@ -376,7 +120,7 @@ HTML;
376
  if (!isset($labels[$provider]))
377
  $provider = '';
378
 
379
- $html = __('Hosting Provider: ', 'geoip-detect') . $labels[$provider];
380
 
381
  return $html;
382
  }
29
  'cloudflare' => 'Cloudflare',
30
  );
31
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
32
  public function country($ip) {
33
 
34
  $r = array();
52
 
53
  $r['country']['iso_code'] = strtoupper($isoCode);
54
 
 
 
 
 
 
 
55
  $r['traits']['ip_address'] = $ip;
56
 
57
  $record = new \GeoIp2\Model\City($r, array('en'));
70
  public function getStatusInformationHTML() {
71
  $provider = get_option('geoip-detect-header-provider');
72
 
73
+ $html = '';
74
+ $link = '';
75
  if ($provider == 'cloudflare') {
76
+ $link = 'https://support.cloudflare.com/hc/en-us/articles/200168236-What-does-CloudFlare-IP-Geolocation-do-';
 
77
  } elseif ($provider == 'aws') {
78
+ $link = 'https://aws.amazon.com/blogs/aws/enhanced-cloudfront-customization/';
 
79
  }
80
+ if ($link)
81
+ $html = sprintf(__('This needs to be enabled in the admin panel: see <a href="%s">Help</a>.', 'geoip-detect'), $link);
82
  return $html;
83
  }
84
 
120
  if (!isset($labels[$provider]))
121
  $provider = '';
122
 
123
+ $html = __('Hosting Provider:', 'geoip-detect') . ' ' . $labels[$provider];
124
 
125
  return $html;
126
  }
data-sources/hostinfo.php CHANGED
@@ -64,8 +64,9 @@ class Reader implements \YellowTree\GeoipDetect\DataSources\ReaderInterface {
64
  );
65
  // Using @file... to supress errors
66
  // Example output: {"country_name":"UNITED STATES","country_code":"US","city":"Aurora, TX","ip":"12.215.42.19"}
67
- $data = json_decode(@file_get_contents(self::URL . $ip, false, $context));
68
-
 
69
  $hasInfo = false;
70
  if ($data) {
71
  $data = get_object_vars($data);
@@ -99,8 +100,6 @@ class HostInfoDataSource extends AbstractDataSource {
99
  public function getStatusInformationHTML() { return __('You can choose a Maxmind database below.', 'geoip-detect'); }
100
  public function getParameterHTML() { return ''; }
101
 
102
- public function activate() { }
103
-
104
  public function getReader($locales = array('en'), $options = array()) { return new Reader($options); }
105
 
106
  public function isWorking() { return true; }
64
  );
65
  // Using @file... to supress errors
66
  // Example output: {"country_name":"UNITED STATES","country_code":"US","city":"Aurora, TX","ip":"12.215.42.19"}
67
+ $body = @file_get_contents(self::URL . $ip, false, $context);
68
+ $data = json_decode($body);
69
+
70
  $hasInfo = false;
71
  if ($data) {
72
  $data = get_object_vars($data);
100
  public function getStatusInformationHTML() { return __('You can choose a Maxmind database below.', 'geoip-detect'); }
101
  public function getParameterHTML() { return ''; }
102
 
 
 
103
  public function getReader($locales = array('en'), $options = array()) { return new Reader($options); }
104
 
105
  public function isWorking() { return true; }
data-sources/registry.php CHANGED
@@ -51,15 +51,25 @@ class DataSourceRegistry {
51
 
52
  /**
53
  * Returns the currently chosen source.
 
54
  * @return \YellowTree\GeoipDetect\DataSources\AbstractDataSource
55
  */
56
  public function getCurrentSource() {
57
  $currentSource = get_option('geoip-detect-source', self::DEFAULT_SOURCE);
58
- if (isset($this->sources[$currentSource]))
59
- return $this->sources[$currentSource];
 
 
 
 
 
 
 
 
 
60
 
61
  if (WP_DEBUG)
62
- trigger_error('Current source has id "' . $currentSource . '", but no such source was found. Using default source instead.', E_USER_NOTICE);
63
 
64
  if (isset($this->sources[self::DEFAULT_SOURCE]))
65
  return $this->sources[self::DEFAULT_SOURCE];
@@ -68,18 +78,12 @@ class DataSourceRegistry {
68
  }
69
 
70
  /**
71
- * Returns the source known by this id.
72
- * @param string Source id (if empty, use current one)
73
- * @return \YellowTree\GeoipDetect\DataSources\AbstractDataSource
74
  */
75
- public function getSource($id = '') {
76
- if (!$id)
77
- return $this->getCurrentSource();
78
-
79
- if (isset($this->sources[$id]))
80
- return $this->sources[$id];
81
-
82
- return null;
83
  }
84
 
85
  /**
@@ -107,4 +111,10 @@ class DataSourceRegistry {
107
  public function getAllSources() {
108
  return $this->sources;
109
  }
 
 
 
 
 
 
110
  }
51
 
52
  /**
53
  * Returns the currently chosen source.
54
+ * @deprecated Use getSource() instead
55
  * @return \YellowTree\GeoipDetect\DataSources\AbstractDataSource
56
  */
57
  public function getCurrentSource() {
58
  $currentSource = get_option('geoip-detect-source', self::DEFAULT_SOURCE);
59
+ return $this->getSource($currentSource);
60
+ }
61
+
62
+ /**
63
+ * Returns the source known by this id.
64
+ * @param string Source id
65
+ * @return \YellowTree\GeoipDetect\DataSources\AbstractDataSource
66
+ */
67
+ public function getSource($id) {
68
+ if (isset($this->sources[$id]))
69
+ return $this->sources[$id];
70
 
71
  if (WP_DEBUG)
72
+ trigger_error('The source with id "' . $id . '" was requested, but no such source was found. Using default source instead.', E_USER_NOTICE);
73
 
74
  if (isset($this->sources[self::DEFAULT_SOURCE]))
75
  return $this->sources[self::DEFAULT_SOURCE];
78
  }
79
 
80
  /**
81
+ * Check if a source named $id exists.
82
+ * @param string $id
83
+ * @return boolean
84
  */
85
+ public function sourceExists($id) {
86
+ return isset($this->sources[$id]);
 
 
 
 
 
 
87
  }
88
 
89
  /**
111
  public function getAllSources() {
112
  return $this->sources;
113
  }
114
+
115
+ public function isSourceCachable($source) {
116
+ // Don't cache for file access based sources (not worth the effort/time)
117
+ $sources_not_cachable = apply_filters('geoip2_detect_sources_not_cachable', array('auto', 'manual', 'header'));
118
+ return !in_array($source, $sources_not_cachable);
119
+ }
120
  }
geoip-detect-lib.php CHANGED
@@ -38,7 +38,14 @@ function _geoip_detect2_process_options($options) {
38
  $options = array();
39
  $options['skipCache'] = $value;
40
  }
41
-
 
 
 
 
 
 
 
42
  /**
43
  * Filter: geoip_detect2_options
44
  * You can programmatically change the defaults etc.
@@ -49,7 +56,8 @@ function _geoip_detect2_process_options($options) {
49
 
50
 
51
  $defaultOptions = array(
52
- 'skipCache' => false,
 
53
  );
54
  $options = $options + $defaultOptions;
55
 
@@ -78,11 +86,12 @@ function _geoip_detect2_get_reader($locales = null, $skipLocaleFilter = false, &
78
  }
79
 
80
  $reader = null;
81
- $source = DataSourceRegistry::getInstance()->getCurrentSource();
82
  if ($source) {
83
  $reader = $source->getReader($locales, $options);
84
  $sourceId = $source->getId();
85
  }
 
86
  /**
87
  * Filter: geoip_detect2_reader
88
  * You can customize your reader here.
@@ -105,42 +114,42 @@ function _ip_to_s($ip) {
105
  return base64_encode($binary);
106
  }
107
 
108
- function _geoip_detect2_get_data_from_cache($ip) {
109
- // Don't cache for file access based sources (not worth the effort/time)
110
- $sources_not_cachable = apply_filters('geoip2_detect_sources_not_cachable', array('auto', 'manual'));
111
- if (in_array(get_option('geoip-detect-source'), $sources_not_cachable))
112
  return null;
 
113
 
114
  $ip_s = _ip_to_s($ip);
115
- if (!$ip_s)
116
  return null;
 
117
 
118
- $data = get_transient('geoip_detect_c_' . $ip_s);
119
- if (is_array($data) && $data['extra']['source'] != get_option('geoip-detect-source'))
120
- return null;
121
 
122
  return $data;
123
  }
124
 
125
  function _geoip_detect2_add_data_to_cache($data, $ip) {
126
- // Don't cache for file access based sources (not worth the effort/time)
127
- $sources_not_cachable = apply_filters('geoip2_detect_sources_not_cachable', array('auto', 'manual', 'header'));
128
- if (in_array($data['extra']['source'], $sources_not_cachable))
129
- return;
130
 
131
  $data['extra']['cached'] = time();
132
  unset($data['maxmind']['queries_remaining']);
133
 
134
  $ip_s = _ip_to_s($ip);
135
  // Do not cache invalid IPs
136
- if (!$ip_s)
137
  return;
 
138
 
139
  // Do not cache error lookups (they might be temporary)
140
- if (!empty($data['extra']['error']))
141
  return;
 
142
 
143
- set_transient('geoip_detect_c_' . $ip_s, $data, GEOIP_DETECT_READER_CACHE_TIME);
144
  }
145
 
146
  function _geoip_detect2_get_record_from_reader($reader, $ip, &$error) {
@@ -275,7 +284,7 @@ function geoip_detect_is_ip_in_range($ip, $range_start, $range_end) {
275
  }
276
 
277
  /**
278
- * Check if IP is in RFC private IP range
279
  * (for local development)
280
  * @param string $ip IP (IPv4 or IPv6)
281
  * @return boolean TRUE if private
@@ -284,6 +293,8 @@ function geoip_detect_is_public_ip($ip) {
284
  // filver_var only detects 127.0.0.1 as local ...
285
  if (geoip_detect_is_ip_in_range($ip, '127.0.0.0', '127.255.255.255'))
286
  return false;
 
 
287
 
288
  $flags = FILTER_FLAG_IPV4 // IP can be v4 or v6
289
  | FILTER_FLAG_NO_PRIV_RANGE // It may not be in the RFC private range
@@ -312,14 +323,14 @@ function _geoip_detect_get_external_ip_adress_without_cache()
312
  'http://ipecho.net/plain',
313
  'http://v4.ident.me',
314
  'http://bot.whatismyipaddress.com',
315
- 'http://ip.appspot.com',
316
  );
317
 
318
  // Randomizing to avoid querying the same service each time
319
  shuffle($ipservices);
320
  $ipservices = apply_filters('geiop_detect_ipservices', $ipservices);
321
  $ipservices = array_slice($ipservices, 0, 3);
322
-
323
  foreach ($ipservices as $url)
324
  {
325
  $ret = wp_remote_get($url, array('timeout' => defined('WP_TESTS_TITLE') ? 3 : 1));
@@ -332,10 +343,15 @@ function _geoip_detect_get_external_ip_adress_without_cache()
332
  if (WP_DEBUG || defined('WP_TESTS_TITLE')) {
333
  trigger_error('_geoip_detect_get_external_ip_adress_without_cache(): HTTP error (' . $url . '): Returned code ' . $ret['response']['code'], E_USER_NOTICE);
334
  }
335
- } else if (isset($ret['body'])) {
336
- $ip = trim($ret['body']);
337
- if (geoip_detect_is_ip($ip))
338
- return $ip;
 
 
 
 
 
339
  }
340
  }
341
  return '0.0.0.0';
38
  $options = array();
39
  $options['skipCache'] = $value;
40
  }
41
+
42
+ // Check if source exists
43
+ if (isset($options['source'])) {
44
+ $registry = DataSourceRegistry::getInstance();
45
+ if (!$registry->sourceExists($options['source']))
46
+ unset($options['source']);
47
+ }
48
+
49
  /**
50
  * Filter: geoip_detect2_options
51
  * You can programmatically change the defaults etc.
56
 
57
 
58
  $defaultOptions = array(
59
+ 'skipCache' => false,
60
+ 'source' => get_option('geoip-detect-source', DataSourceRegistry::DEFAULT_SOURCE),
61
  );
62
  $options = $options + $defaultOptions;
63
 
86
  }
87
 
88
  $reader = null;
89
+ $source = DataSourceRegistry::getInstance()->getSource($options['source']);
90
  if ($source) {
91
  $reader = $source->getReader($locales, $options);
92
  $sourceId = $source->getId();
93
  }
94
+
95
  /**
96
  * Filter: geoip_detect2_reader
97
  * You can customize your reader here.
114
  return base64_encode($binary);
115
  }
116
 
117
+ function _geoip_detect2_get_data_from_cache($ip, $source) {
118
+ if (!DataSourceRegistry::getInstance()->isSourceCachable($source)) {
 
 
119
  return null;
120
+ }
121
 
122
  $ip_s = _ip_to_s($ip);
123
+ if (!$ip_s) {
124
  return null;
125
+ }
126
 
127
+ $data = get_transient('geoip_detect_c_' . $source . '_' . $ip_s);
 
 
128
 
129
  return $data;
130
  }
131
 
132
  function _geoip_detect2_add_data_to_cache($data, $ip) {
133
+ $source = $data['extra']['source'];
134
+ if (!DataSourceRegistry::getInstance()->isSourceCachable($source)) {
135
+ return null;
136
+ }
137
 
138
  $data['extra']['cached'] = time();
139
  unset($data['maxmind']['queries_remaining']);
140
 
141
  $ip_s = _ip_to_s($ip);
142
  // Do not cache invalid IPs
143
+ if (!$ip_s) {
144
  return;
145
+ }
146
 
147
  // Do not cache error lookups (they might be temporary)
148
+ if (!empty($data['extra']['error'])) {
149
  return;
150
+ }
151
 
152
+ set_transient('geoip_detect_c_' . $source . '_' . $ip_s, $data, GEOIP_DETECT_READER_CACHE_TIME);
153
  }
154
 
155
  function _geoip_detect2_get_record_from_reader($reader, $ip, &$error) {
284
  }
285
 
286
  /**
287
+ * Check if IP is not in RFC private IP range
288
  * (for local development)
289
  * @param string $ip IP (IPv4 or IPv6)
290
  * @return boolean TRUE if private
293
  // filver_var only detects 127.0.0.1 as local ...
294
  if (geoip_detect_is_ip_in_range($ip, '127.0.0.0', '127.255.255.255'))
295
  return false;
296
+ if (trim($ip) === '0.0.0.0')
297
+ return false;
298
 
299
  $flags = FILTER_FLAG_IPV4 // IP can be v4 or v6
300
  | FILTER_FLAG_NO_PRIV_RANGE // It may not be in the RFC private range
323
  'http://ipecho.net/plain',
324
  'http://v4.ident.me',
325
  'http://bot.whatismyipaddress.com',
326
+ // 'http://ip.appspot.com', // overloaded, 503 Out of Quota
327
  );
328
 
329
  // Randomizing to avoid querying the same service each time
330
  shuffle($ipservices);
331
  $ipservices = apply_filters('geiop_detect_ipservices', $ipservices);
332
  $ipservices = array_slice($ipservices, 0, 3);
333
+
334
  foreach ($ipservices as $url)
335
  {
336
  $ret = wp_remote_get($url, array('timeout' => defined('WP_TESTS_TITLE') ? 3 : 1));
343
  if (WP_DEBUG || defined('WP_TESTS_TITLE')) {
344
  trigger_error('_geoip_detect_get_external_ip_adress_without_cache(): HTTP error (' . $url . '): Returned code ' . $ret['response']['code'], E_USER_NOTICE);
345
  }
346
+ } else {
347
+ if (isset($ret['body'])) {
348
+ $ip = trim($ret['body']);
349
+ if (geoip_detect_is_ip($ip))
350
+ return $ip;
351
+ }
352
+ if (WP_DEBUG || defined('WP_TESTS_TITLE')) {
353
+ trigger_error('_geoip_detect_get_external_ip_adress_without_cache(): HTTP error (' . $url . '): Did not return an IP: ' . $ret['body'], E_USER_NOTICE);
354
+ }
355
  }
356
  }
357
  return '0.0.0.0';
geoip-detect.php CHANGED
@@ -5,7 +5,7 @@ Plugin URI: http://www.yellowtree.de
5
  Description: Retrieving Geo-Information using the Maxmind GeoIP (Lite) Database.
6
  Author: Yellow Tree (Benjamin Pick)
7
  Author URI: http://www.yellowtree.de
8
- Version: 2.6.0
9
  License: GPLv3 or later
10
  License URI: http://www.gnu.org/licenses/gpl-3.0.html
11
  Text Domain: geoip-detect
@@ -16,7 +16,7 @@ Requires WP: 3.5
16
  Requires PHP: 5.3.1
17
  */
18
 
19
- define('GEOIP_DETECT_VERSION', '2.6.0');
20
 
21
  /*
22
  Copyright 2013-2016 Yellow Tree, Siegen, Germany
@@ -65,14 +65,15 @@ require_once(GEOIP_PLUGIN_DIR . '/deprecated.php');
65
  require_once(GEOIP_PLUGIN_DIR . '/filter.php');
66
  require_once(GEOIP_PLUGIN_DIR . '/shortcode.php');
67
 
68
- require_once('data-sources/registry.php');
69
- require_once('data-sources/abstract.php');
70
 
71
- include_once('data-sources/hostinfo.php');
72
- include_once('data-sources/manual.php');
73
- include_once('data-sources/auto.php');
74
- include_once('data-sources/precision.php');
75
- include_once('data-sources/header.php');
 
76
 
77
  // You can define these constants in your theme/plugin if you like.
78
  /**
@@ -84,11 +85,17 @@ include_once('data-sources/header.php');
84
  * This is probably only used in dev cases, so per default relatively low.
85
  */
86
  //define('GEOIP_DETECT_IP_CACHE_TIME', 2 * HOUR_IN_SECONDS);
 
 
 
 
 
87
  /**
88
  * How long the data of the IP is cached. This applies to the Web-APIs (Maxmind Precision and HostIP.info)
89
  * Only successful lookups will be cached.
90
  */
91
  //define('GEOIP_DETECT_READER_CACHE_TIME', 7 * DAY_IN_SECONDS);
92
-
 
93
 
94
  require_once(GEOIP_PLUGIN_DIR . '/admin-ui.php');
5
  Description: Retrieving Geo-Information using the Maxmind GeoIP (Lite) Database.
6
  Author: Yellow Tree (Benjamin Pick)
7
  Author URI: http://www.yellowtree.de
8
+ Version: 2.7.0
9
  License: GPLv3 or later
10
  License URI: http://www.gnu.org/licenses/gpl-3.0.html
11
  Text Domain: geoip-detect
16
  Requires PHP: 5.3.1
17
  */
18
 
19
+ define('GEOIP_DETECT_VERSION', '2.7.0');
20
 
21
  /*
22
  Copyright 2013-2016 Yellow Tree, Siegen, Germany
65
  require_once(GEOIP_PLUGIN_DIR . '/filter.php');
66
  require_once(GEOIP_PLUGIN_DIR . '/shortcode.php');
67
 
68
+ require_once(GEOIP_PLUGIN_DIR . '/data-sources/registry.php');
69
+ require_once(GEOIP_PLUGIN_DIR . '/data-sources/abstract.php');
70
 
71
+ // These data-source files are optional
72
+ include_once(GEOIP_PLUGIN_DIR . '/data-sources/hostinfo.php');
73
+ include_once(GEOIP_PLUGIN_DIR . '/data-sources/manual.php');
74
+ include_once(GEOIP_PLUGIN_DIR . '/data-sources/auto.php');
75
+ include_once(GEOIP_PLUGIN_DIR . '/data-sources/precision.php');
76
+ include_once(GEOIP_PLUGIN_DIR . '/data-sources/header.php');
77
 
78
  // You can define these constants in your theme/plugin if you like.
79
  /**
85
  * This is probably only used in dev cases, so per default relatively low.
86
  */
87
  //define('GEOIP_DETECT_IP_CACHE_TIME', 2 * HOUR_IN_SECONDS);
88
+ /**
89
+ * How long the external IP of the server is cached, if no IP was found.
90
+ * Default: the same as GEOIP_DETECT_IP_CACHE_TIME
91
+ */
92
+ //define('GEOIP_DETECT_IP_EMPTY_CACHE_TIME', 2 * HOUR_IN_SECONDS);
93
  /**
94
  * How long the data of the IP is cached. This applies to the Web-APIs (Maxmind Precision and HostIP.info)
95
  * Only successful lookups will be cached.
96
  */
97
  //define('GEOIP_DETECT_READER_CACHE_TIME', 7 * DAY_IN_SECONDS);
98
+
99
+
100
 
101
  require_once(GEOIP_PLUGIN_DIR . '/admin-ui.php');
init.php CHANGED
@@ -2,6 +2,10 @@
2
  function geoip_detect_defines() {
3
  if (!defined('GEOIP_DETECT_IP_CACHE_TIME'))
4
  define('GEOIP_DETECT_IP_CACHE_TIME', 2 * HOUR_IN_SECONDS);
 
 
 
 
5
  if (!defined('GEOIP_DETECT_READER_CACHE_TIME'))
6
  define('GEOIP_DETECT_READER_CACHE_TIME', 7 * DAY_IN_SECONDS);
7
  if (!defined('GEOIP_DETECT_DOING_UNIT_TESTS'))
2
  function geoip_detect_defines() {
3
  if (!defined('GEOIP_DETECT_IP_CACHE_TIME'))
4
  define('GEOIP_DETECT_IP_CACHE_TIME', 2 * HOUR_IN_SECONDS);
5
+ if (!defined('GEOIP_DETECT_IP_EMPTY_CACHE_TIME'))
6
+ define('GEOIP_DETECT_IP_EMPTY_CACHE_TIME', GEOIP_DETECT_IP_CACHE_TIME);
7
+
8
+
9
  if (!defined('GEOIP_DETECT_READER_CACHE_TIME'))
10
  define('GEOIP_DETECT_READER_CACHE_TIME', 7 * DAY_IN_SECONDS);
11
  if (!defined('GEOIP_DETECT_DOING_UNIT_TESTS'))
lib/geonames/data/country-info.php CHANGED
@@ -1,5 +1,5 @@
1
  <?php
2
- // Generated at Sat, 03 Sep 2016 09:01:32 +0200
3
  return array (
4
  'countries' =>
5
  array (
@@ -155,8 +155,8 @@ return array (
155
  'continent' => 'EU',
156
  'location' =>
157
  array (
158
- 'latitude' => 41.156986000000003,
159
- 'longitude' => 20.181221999999998,
160
  ),
161
  ),
162
  'AM' =>
@@ -234,7 +234,7 @@ return array (
234
  'location' =>
235
  array (
236
  'latitude' => -75.257716500000001,
237
- 'longitude' => 0,
238
  ),
239
  ),
240
  'AR' =>
@@ -701,8 +701,8 @@ return array (
701
  'continent' => 'NA',
702
  'location' =>
703
  array (
704
- 'latitude' => 32.320236000000001,
705
- 'longitude' => -64.774021500000003,
706
  ),
707
  ),
708
  'BN' =>
@@ -883,8 +883,8 @@ return array (
883
  'continent' => 'AN',
884
  'location' =>
885
  array (
886
- 'latitude' => -54.431352500000003,
887
- 'longitude' => 3.4117375000000001,
888
  ),
889
  ),
890
  'BW' =>
@@ -1481,7 +1481,7 @@ return array (
1481
  'continent' => 'EU',
1482
  'location' =>
1483
  array (
1484
- 'latitude' => 51.164235133224366,
1485
  'longitude' => 10.454033001170981,
1486
  ),
1487
  ),
@@ -1637,8 +1637,8 @@ return array (
1637
  'continent' => 'SA',
1638
  'location' =>
1639
  array (
1640
- 'latitude' => -1.7799014999999998,
1641
- 'longitude' => -78.131591999999998,
1642
  ),
1643
  ),
1644
  'EE' =>
@@ -1663,8 +1663,8 @@ return array (
1663
  'continent' => 'EU',
1664
  'location' =>
1665
  array (
1666
- 'latitude' => 58.596208500000003,
1667
- 'longitude' => 25.023778,
1668
  ),
1669
  ),
1670
  'EG' =>
@@ -1845,8 +1845,8 @@ return array (
1845
  'continent' => 'OC',
1846
  'location' =>
1847
  array (
1848
- 'latitude' => -16.5780405,
1849
- 'longitude' => -0.64755200000000457,
1850
  ),
1851
  ),
1852
  'FK' =>
@@ -1923,8 +1923,8 @@ return array (
1923
  'continent' => 'EU',
1924
  'location' =>
1925
  array (
1926
- 'latitude' => 61.897846000000001,
1927
- 'longitude' => -6.9287915,
1928
  ),
1929
  ),
1930
  'FR' =>
@@ -1949,8 +1949,8 @@ return array (
1949
  'continent' => 'EU',
1950
  'location' =>
1951
  array (
1952
- 'latitude' => 46.232192999999995,
1953
- 'longitude' => 2.2096669999999996,
1954
  ),
1955
  ),
1956
  'GA' =>
@@ -2859,8 +2859,8 @@ return array (
2859
  'continent' => 'EU',
2860
  'location' =>
2861
  array (
2862
- 'latitude' => 41.873987499999998,
2863
- 'longitude' => 12.564167000000001,
2864
  ),
2865
  ),
2866
  'JE' =>
@@ -3171,8 +3171,8 @@ return array (
3171
  'continent' => 'AS',
3172
  'location' =>
3173
  array (
3174
- 'latitude' => 35.901695500000002,
3175
- 'longitude' => 127.73588949999998,
3176
  ),
3177
  ),
3178
  'KW' =>
@@ -3327,8 +3327,8 @@ return array (
3327
  'continent' => 'NA',
3328
  'location' =>
3329
  array (
3330
- 'latitude' => 13.904011499999999,
3331
- 'longitude' => -60.974176499999999,
3332
  ),
3333
  ),
3334
  'LI' =>
@@ -3483,8 +3483,8 @@ return array (
3483
  'continent' => 'EU',
3484
  'location' =>
3485
  array (
3486
- 'latitude' => 49.815763500000003,
3487
- 'longitude' => 6.1315140000000001,
3488
  ),
3489
  ),
3490
  'LV' =>
@@ -3509,8 +3509,8 @@ return array (
3509
  'continent' => 'EU',
3510
  'location' =>
3511
  array (
3512
- 'latitude' => 56.875583500000005,
3513
- 'longitude' => 24.607722000000003,
3514
  ),
3515
  ),
3516
  'LY' =>
@@ -3665,8 +3665,8 @@ return array (
3665
  'continent' => 'NA',
3666
  'location' =>
3667
  array (
3668
- 'latitude' => 18.091292500000002,
3669
- 'longitude' => -63.082880000000003,
3670
  ),
3671
  ),
3672
  'MG' =>
@@ -4601,8 +4601,8 @@ return array (
4601
  'continent' => 'AS',
4602
  'location' =>
4603
  array (
4604
- 'latitude' => 12.8819585,
4605
- 'longitude' => 121.76654049999999,
4606
  ),
4607
  ),
4608
  'PK' =>
@@ -4679,8 +4679,8 @@ return array (
4679
  'continent' => 'NA',
4680
  'location' =>
4681
  array (
4682
- 'latitude' => 46.9661635,
4683
- 'longitude' => -56.336824500000006,
4684
  ),
4685
  ),
4686
  'PN' =>
@@ -5303,8 +5303,8 @@ return array (
5303
  'continent' => 'EU',
5304
  'location' =>
5305
  array (
5306
- 'latitude' => 43.942973262829568,
5307
- 'longitude' => 12.460035423309307,
5308
  ),
5309
  ),
5310
  'SN' =>
@@ -5485,8 +5485,8 @@ return array (
5485
  'continent' => 'NA',
5486
  'location' =>
5487
  array (
5488
- 'latitude' => 18.040970000000002,
5489
- 'longitude' => -63.078516,
5490
  ),
5491
  ),
5492
  'SY' =>
@@ -5745,8 +5745,8 @@ return array (
5745
  'continent' => 'OC',
5746
  'location' =>
5747
  array (
5748
- 'latitude' => -8.7997303009033203,
5749
- 'longitude' => 125.67734527587891,
5750
  ),
5751
  ),
5752
  'TM' =>
1
  <?php
2
+ // Generated at Mon, 13 Mar 2017 12:14:10 +0100
3
  return array (
4
  'countries' =>
5
  array (
155
  'continent' => 'EU',
156
  'location' =>
157
  array (
158
+ 'latitude' => 41.153014710620553,
159
+ 'longitude' => 20.160672377352647,
160
  ),
161
  ),
162
  'AM' =>
234
  'location' =>
235
  array (
236
  'latitude' => -75.257716500000001,
237
+ 'longitude' => 0.0,
238
  ),
239
  ),
240
  'AR' =>
701
  'continent' => 'NA',
702
  'location' =>
703
  array (
704
+ 'latitude' => 32.319387258230812,
705
+ 'longitude' => -64.767212240722671,
706
  ),
707
  ),
708
  'BN' =>
883
  'continent' => 'AN',
884
  'location' =>
885
  array (
886
+ 'latitude' => -54.419768851630295,
887
+ 'longitude' => 3.3608110028978331,
888
  ),
889
  ),
890
  'BW' =>
1481
  'continent' => 'EU',
1482
  'location' =>
1483
  array (
1484
+ 'latitude' => 51.090735557380697,
1485
  'longitude' => 10.454033001170981,
1486
  ),
1487
  ),
1637
  'continent' => 'SA',
1638
  'location' =>
1639
  array (
1640
+ 'latitude' => -1.7904610797626752,
1641
+ 'longitude' => -78.13541522506975,
1642
  ),
1643
  ),
1644
  'EE' =>
1663
  'continent' => 'EU',
1664
  'location' =>
1665
  array (
1666
+ 'latitude' => 58.592312052510394,
1667
+ 'longitude' => 25.018813401475601,
1668
  ),
1669
  ),
1670
  'EG' =>
1845
  'continent' => 'OC',
1846
  'location' =>
1847
  array (
1848
+ 'latitude' => -16.577801029357165,
1849
+ 'longitude' => -0.64202631176044633,
1850
  ),
1851
  ),
1852
  'FK' =>
1923
  'continent' => 'EU',
1924
  'location' =>
1925
  array (
1926
+ 'latitude' => 61.892459353514354,
1927
+ 'longitude' => -6.972375624847877,
1928
  ),
1929
  ),
1930
  'FR' =>
1949
  'continent' => 'EU',
1950
  'location' =>
1951
  array (
1952
+ 'latitude' => 46.227411278966052,
1953
+ 'longitude' => 2.2103091990658004,
1954
  ),
1955
  ),
1956
  'GA' =>
2859
  'continent' => 'EU',
2860
  'location' =>
2861
  array (
2862
+ 'latitude' => 41.867932703854351,
2863
+ 'longitude' => 12.573501384524841,
2864
  ),
2865
  ),
2866
  'JE' =>
3171
  'continent' => 'AS',
3172
  'location' =>
3173
  array (
3174
+ 'latitude' => 35.894399703461701,
3175
+ 'longitude' => 127.7352292667875,
3176
  ),
3177
  ),
3178
  'KW' =>
3327
  'continent' => 'NA',
3328
  'location' =>
3329
  array (
3330
+ 'latitude' => 13.9087932550721,
3331
+ 'longitude' => -60.976593971912308,
3332
  ),
3333
  ),
3334
  'LI' =>
3483
  'continent' => 'EU',
3484
  'location' =>
3485
  array (
3486
+ 'latitude' => 49.815315565781077,
3487
+ 'longitude' => 6.1332985028233686,
3488
  ),
3489
  ),
3490
  'LV' =>
3509
  'continent' => 'EU',
3510
  'location' =>
3511
  array (
3512
+ 'latitude' => 56.880237870430001,
3513
+ 'longitude' => 24.606613741685898,
3514
  ),
3515
  ),
3516
  'LY' =>
3665
  'continent' => 'NA',
3666
  'location' =>
3667
  array (
3668
+ 'latitude' => 18.086233691138208,
3669
+ 'longitude' => -63.080476051053722,
3670
  ),
3671
  ),
3672
  'MG' =>
4601
  'continent' => 'AS',
4602
  'location' =>
4603
  array (
4604
+ 'latitude' => 12.88199172124097,
4605
+ 'longitude' => 121.7669150462425,
4606
  ),
4607
  ),
4608
  'PK' =>
4679
  'continent' => 'NA',
4680
  'location' =>
4681
  array (
4682
+ 'latitude' => 46.963208868962745,
4683
+ 'longitude' => -56.266211037608116,
4684
  ),
4685
  ),
4686
  'PN' =>
5303
  'continent' => 'EU',
5304
  'location' =>
5305
  array (
5306
+ 'latitude' => 43.942896593917453,
5307
+ 'longitude' => 12.459727152803548,
5308
  ),
5309
  ),
5310
  'SN' =>
5485
  'continent' => 'NA',
5486
  'location' =>
5487
  array (
5488
+ 'latitude' => 18.035910279177614,
5489
+ 'longitude' => -63.075940545819492,
5490
  ),
5491
  ),
5492
  'SY' =>
5745
  'continent' => 'OC',
5746
  'location' =>
5747
  array (
5748
+ 'latitude' => -8.8157601356506348,
5749
+ 'longitude' => 125.69338226318359,
5750
  ),
5751
  ),
5752
  'TM' =>
lib/geonames/data/country-names.php CHANGED
@@ -1,5 +1,5 @@
1
  <?php
2
- // Generated at Sat, 03 Sep 2016 09:01:32 +0200
3
  return array (
4
  'en' =>
5
  array (
1
  <?php
2
+ // Generated at Mon, 13 Mar 2017 12:14:10 +0100
3
  return array (
4
  'en' =>
5
  array (
readme.txt CHANGED
@@ -2,7 +2,7 @@
2
  Contributors: benjaminpick
3
  Tags: geoip, maxmind, geolocation, locator
4
  Requires at least: 3.5
5
- Tested up to: 4.6
6
  Stable tag: trunk
7
  License: GPLv3 or later
8
  License URI: http://www.gnu.org/licenses/gpl-3.0.html
@@ -167,6 +167,14 @@ Fixing automatic weekly updates.
167
 
168
  == Changelog ==
169
 
 
 
 
 
 
 
 
 
170
  = 2.6.0 =
171
 
172
  * ADD: New datasources for Cloudflare & Amazon AWS CloudFront (countries for current IP only).
2
  Contributors: benjaminpick
3
  Tags: geoip, maxmind, geolocation, locator
4
  Requires at least: 3.5
5
+ Tested up to: 4.7
6
  Stable tag: trunk
7
  License: GPLv3 or later
8
  License URI: http://www.gnu.org/licenses/gpl-3.0.html
167
 
168
  == Changelog ==
169
 
170
+ = 2.7.0 =
171
+
172
+ * ADD: The options array of `geoip_detect2_get_info_from_ip` now has a new parameter for overriding the current source for a single lookup. See [API usage examples](https://github.com/yellowtree/wp-geoip-detect/wiki/API-Usage-Examples)
173
+ * ADD: New filter `geoip_detect2_shortcode_country_select_countries` for the country list of `[geoip_detect2_countries]`
174
+ * ADD: New constant `GEOIP_DETECT_IP_EMPTY_CACHE_TIME` that can be used to specify a shorter cache time in case temporarily no external IP was found.
175
+ * FIX: Compatibility with CF 4.6 (remove deprecated function call)
176
+ * Maxmind vendor code was updated to the current version (2.4.5).
177
+
178
  = 2.6.0 =
179
 
180
  * ADD: New datasources for Cloudflare & Amazon AWS CloudFront (countries for current IP only).
shortcode.php CHANGED
@@ -196,18 +196,39 @@ function geoip_detect2_shortcode_country_select($attr) {
196
 
197
  $countryInfo = new YellowTree\GeoipDetect\Geonames\CountryInformation();
198
  $countries = $countryInfo->getAllCountries($locales);
 
 
 
 
 
 
 
 
 
 
 
 
 
199
 
200
  $html = '<select ' . $select_attrs_html . '>';
201
  if (!empty($attr['include_blank']) && $attr['include_blank'] !== 'false')
202
  $html .= '<option value="">---</option>';
203
  foreach ($countries as $code => $label) {
204
- $html .= '<option' . ($code == $selected ? ' selected="selected"' : '') . '>' . esc_html($label) . '</option>';
 
 
 
 
 
 
 
205
  }
206
  $html .= '</select>';
207
 
208
  return $html;
209
  }
210
  add_shortcode('geoip_detect2_countries_select', 'geoip_detect2_shortcode_country_select');
 
211
 
212
  /**
213
  *
@@ -260,7 +281,13 @@ function geoip_detect2_shortcode_country_select_wpcf7($tag) {
260
 
261
  add_action( 'wpcf7_init', 'geoip_detect2_add_shortcodes' );
262
  function geoip_detect2_add_shortcodes() {
263
- wpcf7_add_shortcode(array('geoip_detect2_countries', 'geoip_detect2_countries*'), 'geoip_detect2_shortcode_country_select_wpcf7', true);
 
 
 
 
 
 
264
  }
265
 
266
 
@@ -278,6 +305,8 @@ function geoip_detect2_shortcode_user_info_wpcf7($output, $name, $isHtml) {
278
  $lines[] = sprintf(__('State or region: %s', 'geoip-detect'), $info->mostSpecificSubdivision->name);
279
  if ($info->city->name)
280
  $lines[] = sprintf(__('City: %s', 'geoip-detect'), $info->city->name);
 
 
281
 
282
  $lineBreak = $isHtml ? "<br>" : "\n";
283
  return implode($lineBreak, $lines);
196
 
197
  $countryInfo = new YellowTree\GeoipDetect\Geonames\CountryInformation();
198
  $countries = $countryInfo->getAllCountries($locales);
199
+
200
+ /**
201
+ * Filter: geoip_detect2_shortcode_country_select_countries
202
+ * Change the list of countries that should show up in the select box.
203
+ * You can add, remove, reorder countries at will.
204
+ * If you want to add a blank value (for seperators or so), use a key name that starts with 'blank_'
205
+ * and then something at will in case you need several of them.
206
+ *
207
+ * @param array $countries List of localized country names
208
+ * @param array $attr Parameters that were passed to the shortcode
209
+ * @return array
210
+ */
211
+ $countries = apply_filters('geoip_detect2_shortcode_country_select_countries', $countries, $attr);
212
 
213
  $html = '<select ' . $select_attrs_html . '>';
214
  if (!empty($attr['include_blank']) && $attr['include_blank'] !== 'false')
215
  $html .= '<option value="">---</option>';
216
  foreach ($countries as $code => $label) {
217
+ if (substr($code, 0, 6) == 'blank_')
218
+ {
219
+ $html .= '<option value="">' . esc_html($label) . '</option>';
220
+ }
221
+ else
222
+ {
223
+ $html .= '<option' . ($code == $selected ? ' selected="selected"' : '') . '>' . esc_html($label) . '</option>';
224
+ }
225
  }
226
  $html .= '</select>';
227
 
228
  return $html;
229
  }
230
  add_shortcode('geoip_detect2_countries_select', 'geoip_detect2_shortcode_country_select');
231
+ add_shortcode('geoip_detect2_countries', 'geoip_detect2_shortcode_country_select');
232
 
233
  /**
234
  *
281
 
282
  add_action( 'wpcf7_init', 'geoip_detect2_add_shortcodes' );
283
  function geoip_detect2_add_shortcodes() {
284
+ if (function_exists('wpcf7_add_form_tag')) {
285
+ // >=CF 4.6
286
+ wpcf7_add_form_tag(array('geoip_detect2_countries', 'geoip_detect2_countries*'), 'geoip_detect2_shortcode_country_select_wpcf7', true);
287
+ } else if (function_exists('wpcf7_add_shortcode')) {
288
+ // < CF 4.6
289
+ wpcf7_add_shortcode(array('geoip_detect2_countries', 'geoip_detect2_countries*'), 'geoip_detect2_shortcode_country_select_wpcf7', true);
290
+ }
291
  }
292
 
293
 
305
  $lines[] = sprintf(__('State or region: %s', 'geoip-detect'), $info->mostSpecificSubdivision->name);
306
  if ($info->city->name)
307
  $lines[] = sprintf(__('City: %s', 'geoip-detect'), $info->city->name);
308
+ $lines[] = '';
309
+ $lines[] = sprintf(__('Data from: %s', 'geoip-detect'), geoip_detect2_get_current_source_description());
310
 
311
  $lineBreak = $isHtml ? "<br>" : "\n";
312
  return implode($lineBreak, $lines);
vendor/autoload.php CHANGED
@@ -2,6 +2,6 @@
2
 
3
  // autoload.php @generated by Composer
4
 
5
- require_once __DIR__ . '/composer' . '/autoload_real.php';
6
 
7
  return ComposerAutoloaderInite354937679ffa734a3f63544e59103dd::getLoader();
2
 
3
  // autoload.php @generated by Composer
4
 
5
+ require_once __DIR__ . '/composer/autoload_real.php';
6
 
7
  return ComposerAutoloaderInite354937679ffa734a3f63544e59103dd::getLoader();
vendor/composer/ClassLoader.php CHANGED
@@ -55,6 +55,7 @@ class ClassLoader
55
  private $classMap = array();
56
  private $classMapAuthoritative = false;
57
  private $missingClasses = array();
 
58
 
59
  public function getPrefixes()
60
  {
@@ -271,6 +272,26 @@ class ClassLoader
271
  return $this->classMapAuthoritative;
272
  }
273
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
274
  /**
275
  * Registers this instance as an autoloader.
276
  *
@@ -313,11 +334,6 @@ class ClassLoader
313
  */
314
  public function findFile($class)
315
  {
316
- // work around for PHP 5.3.0 - 5.3.2 https://bugs.php.net/50731
317
- if ('\\' == $class[0]) {
318
- $class = substr($class, 1);
319
- }
320
-
321
  // class map lookup
322
  if (isset($this->classMap[$class])) {
323
  return $this->classMap[$class];
@@ -325,6 +341,12 @@ class ClassLoader
325
  if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) {
326
  return false;
327
  }
 
 
 
 
 
 
328
 
329
  $file = $this->findFileWithExtension($class, '.php');
330
 
@@ -333,6 +355,10 @@ class ClassLoader
333
  $file = $this->findFileWithExtension($class, '.hh');
334
  }
335
 
 
 
 
 
336
  if (false === $file) {
337
  // Remember that this class does not exist.
338
  $this->missingClasses[$class] = true;
@@ -348,9 +374,13 @@ class ClassLoader
348
 
349
  $first = $class[0];
350
  if (isset($this->prefixLengthsPsr4[$first])) {
351
- foreach ($this->prefixLengthsPsr4[$first] as $prefix => $length) {
352
- if (0 === strpos($class, $prefix)) {
353
- foreach ($this->prefixDirsPsr4[$prefix] as $dir) {
 
 
 
 
354
  if (file_exists($file = $dir . DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $length))) {
355
  return $file;
356
  }
55
  private $classMap = array();
56
  private $classMapAuthoritative = false;
57
  private $missingClasses = array();
58
+ private $apcuPrefix;
59
 
60
  public function getPrefixes()
61
  {
272
  return $this->classMapAuthoritative;
273
  }
274
 
275
+ /**
276
+ * APCu prefix to use to cache found/not-found classes, if the extension is enabled.
277
+ *
278
+ * @param string|null $apcuPrefix
279
+ */
280
+ public function setApcuPrefix($apcuPrefix)
281
+ {
282
+ $this->apcuPrefix = function_exists('apcu_fetch') && ini_get('apc.enabled') ? $apcuPrefix : null;
283
+ }
284
+
285
+ /**
286
+ * The APCu prefix in use, or null if APCu caching is not enabled.
287
+ *
288
+ * @return string|null
289
+ */
290
+ public function getApcuPrefix()
291
+ {
292
+ return $this->apcuPrefix;
293
+ }
294
+
295
  /**
296
  * Registers this instance as an autoloader.
297
  *
334
  */
335
  public function findFile($class)
336
  {
 
 
 
 
 
337
  // class map lookup
338
  if (isset($this->classMap[$class])) {
339
  return $this->classMap[$class];
341
  if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) {
342
  return false;
343
  }
344
+ if (null !== $this->apcuPrefix) {
345
+ $file = apcu_fetch($this->apcuPrefix.$class, $hit);
346
+ if ($hit) {
347
+ return $file;
348
+ }
349
+ }
350
 
351
  $file = $this->findFileWithExtension($class, '.php');
352
 
355
  $file = $this->findFileWithExtension($class, '.hh');
356
  }
357
 
358
+ if (null !== $this->apcuPrefix) {
359
+ apcu_add($this->apcuPrefix.$class, $file);
360
+ }
361
+
362
  if (false === $file) {
363
  // Remember that this class does not exist.
364
  $this->missingClasses[$class] = true;
374
 
375
  $first = $class[0];
376
  if (isset($this->prefixLengthsPsr4[$first])) {
377
+ $subPath = $class;
378
+ while (false !== $lastPos = strrpos($subPath, '\\')) {
379
+ $subPath = substr($subPath, 0, $lastPos);
380
+ $search = $subPath.'\\';
381
+ if (isset($this->prefixDirsPsr4[$search])) {
382
+ foreach ($this->prefixDirsPsr4[$search] as $dir) {
383
+ $length = $this->prefixLengthsPsr4[$first][$search];
384
  if (file_exists($file = $dir . DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $length))) {
385
  return $file;
386
  }
vendor/composer/LICENSE CHANGED
@@ -1,5 +1,5 @@
1
 
2
- Copyright (c) 2016 Nils Adermann, Jordi Boggiano
3
 
4
  Permission is hereby granted, free of charge, to any person obtaining a copy
5
  of this software and associated documentation files (the "Software"), to deal
1
 
2
+ Copyright (c) Nils Adermann, Jordi Boggiano
3
 
4
  Permission is hereby granted, free of charge, to any person obtaining a copy
5
  of this software and associated documentation files (the "Software"), to deal
vendor/composer/autoload_namespaces.php CHANGED
@@ -6,5 +6,4 @@ $vendorDir = dirname(dirname(__FILE__));
6
  $baseDir = dirname($vendorDir);
7
 
8
  return array(
9
- 'MaxMind' => array($vendorDir . '/maxmind-db/reader/src'),
10
  );
6
  $baseDir = dirname($vendorDir);
7
 
8
  return array(
 
9
  );
vendor/composer/autoload_psr4.php CHANGED
@@ -6,6 +6,7 @@ $vendorDir = dirname(dirname(__FILE__));
6
  $baseDir = dirname($vendorDir);
7
 
8
  return array(
 
9
  'MaxMind\\' => array($vendorDir . '/maxmind/web-service-common/src'),
10
  'GeoIp2\\' => array($vendorDir . '/geoip2/geoip2/src'),
11
  'Composer\\CaBundle\\' => array($vendorDir . '/composer/ca-bundle/src'),
6
  $baseDir = dirname($vendorDir);
7
 
8
  return array(
9
+ 'MaxMind\\Db\\' => array($vendorDir . '/maxmind-db/reader/src/MaxMind/Db'),
10
  'MaxMind\\' => array($vendorDir . '/maxmind/web-service-common/src'),
11
  'GeoIp2\\' => array($vendorDir . '/geoip2/geoip2/src'),
12
  'Composer\\CaBundle\\' => array($vendorDir . '/composer/ca-bundle/src'),
vendor/composer/autoload_real.php CHANGED
@@ -23,7 +23,7 @@ class ComposerAutoloaderInite354937679ffa734a3f63544e59103dd
23
  self::$loader = $loader = new \Composer\Autoload\ClassLoader();
24
  spl_autoload_unregister(array('ComposerAutoloaderInite354937679ffa734a3f63544e59103dd', 'loadClassLoader'));
25
 
26
- $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION');
27
  if ($useStaticLoader) {
28
  require_once __DIR__ . '/autoload_static.php';
29
 
23
  self::$loader = $loader = new \Composer\Autoload\ClassLoader();
24
  spl_autoload_unregister(array('ComposerAutoloaderInite354937679ffa734a3f63544e59103dd', 'loadClassLoader'));
25
 
26
+ $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
27
  if ($useStaticLoader) {
28
  require_once __DIR__ . '/autoload_static.php';
29
 
vendor/composer/autoload_static.php CHANGED
@@ -9,6 +9,7 @@ class ComposerStaticInite354937679ffa734a3f63544e59103dd
9
  public static $prefixLengthsPsr4 = array (
10
  'M' =>
11
  array (
 
12
  'MaxMind\\' => 8,
13
  ),
14
  'G' =>
@@ -22,6 +23,10 @@ class ComposerStaticInite354937679ffa734a3f63544e59103dd
22
  );
23
 
24
  public static $prefixDirsPsr4 = array (
 
 
 
 
25
  'MaxMind\\' =>
26
  array (
27
  0 => __DIR__ . '/..' . '/maxmind/web-service-common/src',
@@ -36,22 +41,11 @@ class ComposerStaticInite354937679ffa734a3f63544e59103dd
36
  ),
37
  );
38
 
39
- public static $prefixesPsr0 = array (
40
- 'M' =>
41
- array (
42
- 'MaxMind' =>
43
- array (
44
- 0 => __DIR__ . '/..' . '/maxmind-db/reader/src',
45
- ),
46
- ),
47
- );
48
-
49
  public static function getInitializer(ClassLoader $loader)
50
  {
51
  return \Closure::bind(function () use ($loader) {
52
  $loader->prefixLengthsPsr4 = ComposerStaticInite354937679ffa734a3f63544e59103dd::$prefixLengthsPsr4;
53
  $loader->prefixDirsPsr4 = ComposerStaticInite354937679ffa734a3f63544e59103dd::$prefixDirsPsr4;
54
- $loader->prefixesPsr0 = ComposerStaticInite354937679ffa734a3f63544e59103dd::$prefixesPsr0;
55
 
56
  }, null, ClassLoader::class);
57
  }
9
  public static $prefixLengthsPsr4 = array (
10
  'M' =>
11
  array (
12
+ 'MaxMind\\Db\\' => 11,
13
  'MaxMind\\' => 8,
14
  ),
15
  'G' =>
23
  );
24
 
25
  public static $prefixDirsPsr4 = array (
26
+ 'MaxMind\\Db\\' =>
27
+ array (
28
+ 0 => __DIR__ . '/..' . '/maxmind-db/reader/src/MaxMind/Db',
29
+ ),
30
  'MaxMind\\' =>
31
  array (
32
  0 => __DIR__ . '/..' . '/maxmind/web-service-common/src',
41
  ),
42
  );
43
 
 
 
 
 
 
 
 
 
 
 
44
  public static function getInitializer(ClassLoader $loader)
45
  {
46
  return \Closure::bind(function () use ($loader) {
47
  $loader->prefixLengthsPsr4 = ComposerStaticInite354937679ffa734a3f63544e59103dd::$prefixLengthsPsr4;
48
  $loader->prefixDirsPsr4 = ComposerStaticInite354937679ffa734a3f63544e59103dd::$prefixDirsPsr4;
 
49
 
50
  }, null, ClassLoader::class);
51
  }
vendor/composer/ca-bundle/composer.json CHANGED
@@ -27,6 +27,7 @@
27
  "php": "^5.3.2 || ^7.0"
28
  },
29
  "require-dev": {
 
30
  "psr/log": "^1.0",
31
  "symfony/process": "^2.5 || ^3.0"
32
  },
@@ -47,5 +48,10 @@
47
  "branch-alias": {
48
  "dev-master": "1.x-dev"
49
  }
 
 
 
 
 
50
  }
51
  }
27
  "php": "^5.3.2 || ^7.0"
28
  },
29
  "require-dev": {
30
+ "phpunit/phpunit": "^4.5",
31
  "psr/log": "^1.0",
32
  "symfony/process": "^2.5 || ^3.0"
33
  },
48
  "branch-alias": {
49
  "dev-master": "1.x-dev"
50
  }
51
+ },
52
+ "config": {
53
+ "platform": {
54
+ "php": "5.3.9"
55
+ }
56
  }
57
  }
vendor/composer/ca-bundle/res/cacert.pem CHANGED
@@ -1,41 +1,22 @@
1
  ##
2
  ## Bundle of CA Root Certificates
3
  ##
4
- ## Certificate data from Mozilla as of: Wed Apr 20 03:12:05 2016
5
  ##
6
  ## This is a bundle of X.509 certificates of public Certificate Authorities
7
  ## (CA). These were automatically extracted from Mozilla's root certificates
8
  ## file (certdata.txt). This file can be found in the mozilla source tree:
9
- ## http://hg.mozilla.org/releases/mozilla-release/raw-file/default/security/nss/lib/ckfw/builtins/certdata.txt
10
  ##
11
  ## It contains the certificates in PEM format and therefore
12
  ## can be directly used with curl / libcurl / php_curl, or with
13
  ## an Apache+mod_ssl webserver for SSL client authentication.
14
  ## Just configure this file as the SSLCACertificateFile.
15
  ##
16
- ## Conversion done with mk-ca-bundle.pl version 1.25.
17
- ## SHA1: 5df367cda83086392e1acdf22bfef00c48d5eba6
18
  ##
19
 
20
- Equifax Secure CA
21
- =================
22
- -----BEGIN CERTIFICATE-----
23
- MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJVUzEQMA4GA1UE
24
- ChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5
25
- MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoT
26
- B0VxdWlmYXgxLTArBgNVBAsTJEVxdWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTCB
27
- nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2RFGiYCh7+2gRvE4RiIcPR
28
- fM6fBeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP/PvwDN1Dulsr4R+AcJkVV5MW
29
- 8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/FP3gx7kCAwEAAaOCAQkwggEFMHAG
30
- A1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UE
31
- CxMkRXF1aWZheCBTZWN1cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoG
32
- A1UdEAQTMBGBDzIwMTgwODIyMTY0MTUxWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvS
33
- spXXR9gjIBBPM5iQn9QwHQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQFMAMB
34
- Af8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUAA4GBAFjOKer89961
35
- zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y7qj/WsjTVbJmcVfewCHrPSqnI0kB
36
- BIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee95
37
- 70+sB3c4
38
- -----END CERTIFICATE-----
39
 
40
  GlobalSign Root CA
41
  ==================
@@ -271,27 +252,6 @@ W3iDVuycNsMm4hH2Z0kdkquM++v/eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0
271
  tHuu2guQOHXvgR1m0vdXcDazv/wor3ElhVsT/h5/WrQ8
272
  -----END CERTIFICATE-----
273
 
274
- RSA Security 2048 v3
275
- ====================
276
- -----BEGIN CERTIFICATE-----
277
- MIIDYTCCAkmgAwIBAgIQCgEBAQAAAnwAAAAKAAAAAjANBgkqhkiG9w0BAQUFADA6MRkwFwYDVQQK
278
- ExBSU0EgU2VjdXJpdHkgSW5jMR0wGwYDVQQLExRSU0EgU2VjdXJpdHkgMjA0OCBWMzAeFw0wMTAy
279
- MjIyMDM5MjNaFw0yNjAyMjIyMDM5MjNaMDoxGTAXBgNVBAoTEFJTQSBTZWN1cml0eSBJbmMxHTAb
280
- BgNVBAsTFFJTQSBTZWN1cml0eSAyMDQ4IFYzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
281
- AQEAt49VcdKA3XtpeafwGFAyPGJn9gqVB93mG/Oe2dJBVGutn3y+Gc37RqtBaB4Y6lXIL5F4iSj7
282
- Jylg/9+PjDvJSZu1pJTOAeo+tWN7fyb9Gd3AIb2E0S1PRsNO3Ng3OTsor8udGuorryGlwSMiuLgb
283
- WhOHV4PR8CDn6E8jQrAApX2J6elhc5SYcSa8LWrg903w8bYqODGBDSnhAMFRD0xS+ARaqn1y07iH
284
- KrtjEAMqs6FPDVpeRrc9DvV07Jmf+T0kgYim3WBU6JU2PcYJk5qjEoAAVZkZR73QpXzDuvsf9/UP
285
- +Ky5tfQ3mBMY3oVbtwyCO4dvlTlYMNpuAWgXIszACwIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/
286
- MA4GA1UdDwEB/wQEAwIBBjAfBgNVHSMEGDAWgBQHw1EwpKrpRa41JPr/JCwz0LGdjDAdBgNVHQ4E
287
- FgQUB8NRMKSq6UWuNST6/yQsM9CxnYwwDQYJKoZIhvcNAQEFBQADggEBAF8+hnZuuDU8TjYcHnmY
288
- v/3VEhF5Ug7uMYm83X/50cYVIeiKAVQNOvtUudZj1LGqlk2iQk3UUx+LEN5/Zb5gEydxiKRz44Rj
289
- 0aRV4VCT5hsOedBnvEbIvz8XDZXmxpBp3ue0L96VfdASPz0+f00/FGj1EVDVwfSQpQgdMWD/YIwj
290
- VAqv/qFuxdF6Kmh4zx6CCiC0H63lhbJqaHVOrSU3lIW+vaHU6rcMSzyd6BIA8F+sDeGscGNz9395
291
- nzIlQnQFgCi/vcEkllgVsRch6YlL2weIZ/QVrXA+L02FO8K32/6YaCOJ4XQP3vTFhGMpG8zLB8kA
292
- pKnXwiJPZ9d37CAFYd4=
293
- -----END CERTIFICATE-----
294
-
295
  GeoTrust Global CA
296
  ==================
297
  -----BEGIN CERTIFICATE-----
@@ -1304,30 +1264,6 @@ FAkK+qDmfQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdvGDeA
1304
  U/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY=
1305
  -----END CERTIFICATE-----
1306
 
1307
- IGC/A
1308
- =====
1309
- -----BEGIN CERTIFICATE-----
1310
- MIIEAjCCAuqgAwIBAgIFORFFEJQwDQYJKoZIhvcNAQEFBQAwgYUxCzAJBgNVBAYTAkZSMQ8wDQYD
1311
- VQQIEwZGcmFuY2UxDjAMBgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQTS9TR0ROMQ4wDAYDVQQLEwVE
1312
- Q1NTSTEOMAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2LmZy
1313
- MB4XDTAyMTIxMzE0MjkyM1oXDTIwMTAxNzE0MjkyMlowgYUxCzAJBgNVBAYTAkZSMQ8wDQYDVQQI
1314
- EwZGcmFuY2UxDjAMBgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQTS9TR0ROMQ4wDAYDVQQLEwVEQ1NT
1315
- STEOMAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2LmZyMIIB
1316
- IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsh/R0GLFMzvABIaIs9z4iPf930Pfeo2aSVz2
1317
- TqrMHLmh6yeJ8kbpO0px1R2OLc/mratjUMdUC24SyZA2xtgv2pGqaMVy/hcKshd+ebUyiHDKcMCW
1318
- So7kVc0dJ5S/znIq7Fz5cyD+vfcuiWe4u0dzEvfRNWk68gq5rv9GQkaiv6GFGvm/5P9JhfejcIYy
1319
- HF2fYPepraX/z9E0+X1bF8bc1g4oa8Ld8fUzaJ1O/Id8NhLWo4DoQw1VYZTqZDdH6nfK0LJYBcNd
1320
- frGoRpAxVs5wKpayMLh35nnAvSk7/ZR3TL0gzUEl4C7HG7vupARB0l2tEmqKm0f7yd1GQOGdPDPQ
1321
- tQIDAQABo3cwdTAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIBRjAVBgNVHSAEDjAMMAoGCCqB
1322
- egF5AQEBMB0GA1UdDgQWBBSjBS8YYFDCiQrdKyFP/45OqDAxNjAfBgNVHSMEGDAWgBSjBS8YYFDC
1323
- iQrdKyFP/45OqDAxNjANBgkqhkiG9w0BAQUFAAOCAQEABdwm2Pp3FURo/C9mOnTgXeQp/wYHE4RK
1324
- q89toB9RlPhJy3Q2FLwV3duJL92PoF189RLrn544pEfMs5bZvpwlqwN+Mw+VgQ39FuCIvjfwbF3Q
1325
- MZsyK10XZZOYYLxuj7GoPB7ZHPOpJkL5ZB3C55L29B5aqhlSXa/oovdgoPaN8In1buAKBQGVyYsg
1326
- Crpa/JosPL3Dt8ldeCUFP1YUmwza+zpI/pdpXsoQhvdOlgQITeywvl3cO45Pwf2aNjSaTFR+FwNI
1327
- lQgRHAdvhQh+XU3Endv7rs6y0bO4g2wdsrN58dhwmX7wEwLOXt1R0982gaEbeC9xs/FZTEYYKKuF
1328
- 0mBWWg==
1329
- -----END CERTIFICATE-----
1330
-
1331
  Security Communication EV RootCA1
1332
  =================================
1333
  -----BEGIN CERTIFICATE-----
@@ -1537,58 +1473,6 @@ LBOhgLJeDEoTniDYYkCrkOpkSi+sDQESeUWoL4cZaMjihccwsnX5OD+ywJO0a+IDRM5noN+J1q2M
1537
  dqMTw5RhK2vZbMEHCiIHhWyFJEapvj+LeISCfiQMnf2BN+MlqO02TpUsyZyQ2uypQjyttgI=
1538
  -----END CERTIFICATE-----
1539
 
1540
- Buypass Class 2 CA 1
1541
- ====================
1542
- -----BEGIN CERTIFICATE-----
1543
- MIIDUzCCAjugAwIBAgIBATANBgkqhkiG9w0BAQUFADBLMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU
1544
- QnV5cGFzcyBBUy05ODMxNjMzMjcxHTAbBgNVBAMMFEJ1eXBhc3MgQ2xhc3MgMiBDQSAxMB4XDTA2
1545
- MTAxMzEwMjUwOVoXDTE2MTAxMzEwMjUwOVowSzELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBh
1546
- c3MgQVMtOTgzMTYzMzI3MR0wGwYDVQQDDBRCdXlwYXNzIENsYXNzIDIgQ0EgMTCCASIwDQYJKoZI
1547
- hvcNAQEBBQADggEPADCCAQoCggEBAIs8B0XY9t/mx8q6jUPFR42wWsE425KEHK8T1A9vNkYgxC7M
1548
- cXA0ojTTNy7Y3Tp3L8DrKehc0rWpkTSHIln+zNvnma+WwajHQN2lFYxuyHyXA8vmIPLXl18xoS83
1549
- 0r7uvqmtqEyeIWZDO6i88wmjONVZJMHCR3axiFyCO7srpgTXjAePzdVBHfCuuCkslFJgNJQ72uA4
1550
- 0Z0zPhX0kzLFANq1KWYOOngPIVJfAuWSeyXTkh4vFZ2B5J2O6O+JzhRMVB0cgRJNcKi+EAUXfh/R
1551
- uFdV7c27UsKwHnjCTTZoy1YmwVLBvXb3WNVyfh9EdrsAiR0WnVE1703CVu9r4Iw7DekCAwEAAaNC
1552
- MEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUP42aWYv8e3uco684sDntkHGA1sgwDgYDVR0P
1553
- AQH/BAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQAVGn4TirnoB6NLJzKyQJHyIdFkhb5jatLPgcIV
1554
- 1Xp+DCmsNx4cfHZSldq1fyOhKXdlyTKdqC5Wq2B2zha0jX94wNWZUYN/Xtm+DKhQ7SLHrQVMdvvt
1555
- 7h5HZPb3J31cKA9FxVxiXqaakZG3Uxcu3K1gnZZkOb1naLKuBctN518fV4bVIJwo+28TOPX2EZL2
1556
- fZleHwzoq0QkKXJAPTZSr4xYkHPB7GEseaHsh7U/2k3ZIQAw3pDaDtMaSKk+hQsUi4y8QZ5q9w5w
1557
- wDX3OaJdZtB7WZ+oRxKaJyOkLY4ng5IgodcVf/EuGO70SH8vf/GhGLWhC5SgYiAynB321O+/TIho
1558
- -----END CERTIFICATE-----
1559
-
1560
- EBG Elektronik Sertifika Hizmet Sa\xC4\x9Flay\xc4\xb1\x63\xc4\xb1s\xc4\xb1
1561
- ==========================================================================
1562
- -----BEGIN CERTIFICATE-----
1563
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- gmmkTPiab+ci2hC6X5L8GCcKqKpE+i4stPtGmggDg3KriORqcsnlZR9uKg+ds+g75AxuetpX/dfr
1572
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- /wQEAwIBBjAdBgNVHQ4EFgQU587GT/wWZ5b6SqMHwQSny2re2kcwHwYDVR0jBBgwFoAU587GT/wW
1580
- Z5b6SqMHwQSny2re2kcwDQYJKoZIhvcNAQEFBQADggIBAJuYml2+8ygjdsZs93/mQJ7ANtyVDR2t
1581
- FcU22NU57/IeIl6zgrRdu0waypIN30ckHrMk2pGI6YNw3ZPX6bqz3xZaPt7gyPvT/Wwp+BVGoGgm
1582
- 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
- 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
- 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
- RT0KlhaOEKGXmdXTMIXM3rRyt7yKPBgpaP3ccQfuJDlq+u2lrDgv+R4QDgZxGhBM/nV+/x5XOULK
1586
- 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
- 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
- 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
- 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
1590
- -----END CERTIFICATE-----
1591
-
1592
  certSIGN ROOT CA
1593
  ================
1594
  -----BEGIN CERTIFICATE-----
@@ -1783,7 +1667,7 @@ AJw9SDkjOVgaFRJZap7v1VmyHVIsmXHNxynfGyphe3HR3vPA5Q06Sqotp9iGKt0uEA==
1783
  -----END CERTIFICATE-----
1784
 
1785
  NetLock Arany (Class Gold) Főtanúsítvány
1786
- ============================================
1787
  -----BEGIN CERTIFICATE-----
1788
  MIIEFTCCAv2gAwIBAgIGSUEs5AAQMA0GCSqGSIb3DQEBCwUAMIGnMQswCQYDVQQGEwJIVTERMA8G
1789
  A1UEBwwIQnVkYXBlc3QxFTATBgNVBAoMDE5ldExvY2sgS2Z0LjE3MDUGA1UECwwuVGFuw7pzw610
@@ -1838,34 +1722,6 @@ IPVVYpbtbZNQvOSqeK3Zywplh6ZmwcSBo3c6WB4L7oOLnR7SUqTMHW+wmG2UMbX4cQrcufx9MmDm
1838
  66+KAQ==
1839
  -----END CERTIFICATE-----
1840
 
1841
- Juur-SK
1842
- =======
1843
- -----BEGIN CERTIFICATE-----
1844
- MIIE5jCCA86gAwIBAgIEO45L/DANBgkqhkiG9w0BAQUFADBdMRgwFgYJKoZIhvcNAQkBFglwa2lA
1845
- c2suZWUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKExlBUyBTZXJ0aWZpdHNlZXJpbWlza2Vza3VzMRAw
1846
- DgYDVQQDEwdKdXVyLVNLMB4XDTAxMDgzMDE0MjMwMVoXDTE2MDgyNjE0MjMwMVowXTEYMBYGCSqG
1847
- SIb3DQEJARYJcGtpQHNrLmVlMQswCQYDVQQGEwJFRTEiMCAGA1UEChMZQVMgU2VydGlmaXRzZWVy
1848
- aW1pc2tlc2t1czEQMA4GA1UEAxMHSnV1ci1TSzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
1849
- ggEBAIFxNj4zB9bjMI0TfncyRsvPGbJgMUaXhvSYRqTCZUXP00B841oiqBB4M8yIsdOBSvZiF3tf
1850
- TQou0M+LI+5PAk676w7KvRhj6IAcjeEcjT3g/1tf6mTll+g/mX8MCgkzABpTpyHhOEvWgxutr2TC
1851
- +Rx6jGZITWYfGAriPrsfB2WThbkasLnE+w0R9vXW+RvHLCu3GFH+4Hv2qEivbDtPL+/40UceJlfw
1852
- UR0zlv/vWT3aTdEVNMfqPxZIe5EcgEMPPbgFPtGzlc3Yyg/CQ2fbt5PgIoIuvvVoKIO5wTtpeyDa
1853
- Tpxt4brNj3pssAki14sL2xzVWiZbDcDq5WDQn/413z8CAwEAAaOCAawwggGoMA8GA1UdEwEB/wQF
1854
- MAMBAf8wggEWBgNVHSAEggENMIIBCTCCAQUGCisGAQQBzh8BAQEwgfYwgdAGCCsGAQUFBwICMIHD
1855
- HoHAAFMAZQBlACAAcwBlAHIAdABpAGYAaQBrAGEAYQB0ACAAbwBuACAAdgDkAGwAagBhAHMAdABh
1856
- AHQAdQBkACAAQQBTAC0AaQBzACAAUwBlAHIAdABpAGYAaQB0AHMAZQBlAHIAaQBtAGkAcwBrAGUA
1857
- cwBrAHUAcwAgAGEAbABhAG0ALQBTAEsAIABzAGUAcgB0AGkAZgBpAGsAYQBhAHQAaQBkAGUAIABr
1858
- AGkAbgBuAGkAdABhAG0AaQBzAGUAawBzMCEGCCsGAQUFBwIBFhVodHRwOi8vd3d3LnNrLmVlL2Nw
1859
- cy8wKwYDVR0fBCQwIjAgoB6gHIYaaHR0cDovL3d3dy5zay5lZS9qdXVyL2NybC8wHQYDVR0OBBYE
1860
- FASqekej5ImvGs8KQKcYP2/v6X2+MB8GA1UdIwQYMBaAFASqekej5ImvGs8KQKcYP2/v6X2+MA4G
1861
- A1UdDwEB/wQEAwIB5jANBgkqhkiG9w0BAQUFAAOCAQEAe8EYlFOiCfP+JmeaUOTDBS8rNXiRTHyo
1862
- ERF5TElZrMj3hWVcRrs7EKACr81Ptcw2Kuxd/u+gkcm2k298gFTsxwhwDY77guwqYHhpNjbRxZyL
1863
- abVAyJRld/JXIWY7zoVAtjNjGr95HvxcHdMdkxuLDF2FvZkwMhgJkVLpfKG6/2SSmuz+Ne6ML678
1864
- IIbsSt4beDI3poHSna9aEhbKmVv8b20OxaAehsmR0FyYgl9jDIpaq9iVpszLita/ZEuOyoqysOkh
1865
- Mp6qqIWYNIE5ITuoOlIyPfZrN4YGWhWY3PARZv40ILcD9EEQfTmEeZZyY7aWAuVrua0ZTbvGRNs2
1866
- yyqcjg==
1867
- -----END CERTIFICATE-----
1868
-
1869
  Hongkong Post Root CA 1
1870
  =======================
1871
  -----BEGIN CERTIFICATE-----
@@ -2299,7 +2155,7 @@ Zt3hrvJBW8qYVoNzcOSGGtIxQbovvi0TWnZvTuhOgQ4/WwMioBK+ZlgRSssDxLQqKi2WF+A5VLxI
2299
  -----END CERTIFICATE-----
2300
 
2301
  Certinomis - Autorité Racine
2302
- =============================
2303
  -----BEGIN CERTIFICATE-----
2304
  MIIFnDCCA4SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJGUjETMBEGA1UEChMK
2305
  Q2VydGlub21pczEXMBUGA1UECxMOMDAwMiA0MzM5OTg5MDMxJjAkBgNVBAMMHUNlcnRpbm9taXMg
@@ -2329,41 +2185,6 @@ wk01+dIL8hf2rGbVJLJP0RyZwG71fet0BLj5TXcJ17TPBzAJ8bgAVtkXFhYKK4bfjwEZGuW7gmP/
2329
  vgt2Fl43N+bYdJeimUV5
2330
  -----END CERTIFICATE-----
2331
 
2332
- Root CA Generalitat Valenciana
2333
- ==============================
2334
- -----BEGIN CERTIFICATE-----
2335
- MIIGizCCBXOgAwIBAgIEO0XlaDANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJFUzEfMB0GA1UE
2336
- ChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UECxMGUEtJR1ZBMScwJQYDVQQDEx5Sb290
2337
- IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmEwHhcNMDEwNzA2MTYyMjQ3WhcNMjEwNzAxMTUyMjQ3
2338
- WjBoMQswCQYDVQQGEwJFUzEfMB0GA1UEChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UE
2339
- CxMGUEtJR1ZBMScwJQYDVQQDEx5Sb290IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmEwggEiMA0G
2340
- CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDGKqtXETcvIorKA3Qdyu0togu8M1JAJke+WmmmO3I2
2341
- F0zo37i7L3bhQEZ0ZQKQUgi0/6iMweDHiVYQOTPvaLRfX9ptI6GJXiKjSgbwJ/BXufjpTjJ3Cj9B
2342
- ZPPrZe52/lSqfR0grvPXdMIKX/UIKFIIzFVd0g/bmoGlu6GzwZTNVOAydTGRGmKy3nXiz0+J2ZGQ
2343
- D0EbtFpKd71ng+CT516nDOeB0/RSrFOyA8dEJvt55cs0YFAQexvba9dHq198aMpunUEDEO5rmXte
2344
- JajCq+TA81yc477OMUxkHl6AovWDfgzWyoxVjr7gvkkHD6MkQXpYHYTqWBLI4bft75PelAgxAgMB
2345
- AAGjggM7MIIDNzAyBggrBgEFBQcBAQQmMCQwIgYIKwYBBQUHMAGGFmh0dHA6Ly9vY3NwLnBraS5n
2346
- dmEuZXMwEgYDVR0TAQH/BAgwBgEB/wIBAjCCAjQGA1UdIASCAiswggInMIICIwYKKwYBBAG/VQIB
2347
- ADCCAhMwggHoBggrBgEFBQcCAjCCAdoeggHWAEEAdQB0AG8AcgBpAGQAYQBkACAAZABlACAAQwBl
2348
- AHIAdABpAGYAaQBjAGEAYwBpAPMAbgAgAFIAYQDtAHoAIABkAGUAIABsAGEAIABHAGUAbgBlAHIA
2349
- YQBsAGkAdABhAHQAIABWAGEAbABlAG4AYwBpAGEAbgBhAC4ADQAKAEwAYQAgAEQAZQBjAGwAYQBy
2350
- AGEAYwBpAPMAbgAgAGQAZQAgAFAAcgDhAGMAdABpAGMAYQBzACAAZABlACAAQwBlAHIAdABpAGYA
2351
- aQBjAGEAYwBpAPMAbgAgAHEAdQBlACAAcgBpAGcAZQAgAGUAbAAgAGYAdQBuAGMAaQBvAG4AYQBt
2352
- AGkAZQBuAHQAbwAgAGQAZQAgAGwAYQAgAHAAcgBlAHMAZQBuAHQAZQAgAEEAdQB0AG8AcgBpAGQA
2353
- YQBkACAAZABlACAAQwBlAHIAdABpAGYAaQBjAGEAYwBpAPMAbgAgAHMAZQAgAGUAbgBjAHUAZQBu
2354
- AHQAcgBhACAAZQBuACAAbABhACAAZABpAHIAZQBjAGMAaQDzAG4AIAB3AGUAYgAgAGgAdAB0AHAA
2355
- OgAvAC8AdwB3AHcALgBwAGsAaQAuAGcAdgBhAC4AZQBzAC8AYwBwAHMwJQYIKwYBBQUHAgEWGWh0
2356
- dHA6Ly93d3cucGtpLmd2YS5lcy9jcHMwHQYDVR0OBBYEFHs100DSHHgZZu90ECjcPk+yeAT8MIGV
2357
- BgNVHSMEgY0wgYqAFHs100DSHHgZZu90ECjcPk+yeAT8oWykajBoMQswCQYDVQQGEwJFUzEfMB0G
2358
- A1UEChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UECxMGUEtJR1ZBMScwJQYDVQQDEx5S
2359
- b290IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmGCBDtF5WgwDQYJKoZIhvcNAQEFBQADggEBACRh
2360
- TvW1yEICKrNcda3FbcrnlD+laJWIwVTAEGmiEi8YPyVQqHxK6sYJ2fR1xkDar1CdPaUWu20xxsdz
2361
- Ckj+IHLtb8zog2EWRpABlUt9jppSCS/2bxzkoXHPjCpaF3ODR00PNvsETUlR4hTJZGH71BTg9J63
2362
- NI8KJr2XXPR5OkowGcytT6CYirQxlyric21+eLj4iIlPsSKRZEv1UN4D2+XFducTZnV+ZfsBn5OH
2363
- iJ35Rld8TWCvmHMTI6QgkYH60GFmuH3Rr9ZvHmw96RH9qfmCIoaZM3Fa6hlXPZHNqcCjbgcTpsnt
2364
- +GijnsNacgmHKNHEc8RzGF9QdRYxn7fofMM=
2365
- -----END CERTIFICATE-----
2366
-
2367
  TWCA Root Certification Authority
2368
  =================================
2369
  -----BEGIN CERTIFICATE-----
@@ -3694,7 +3515,7 @@ ekD6819kR5LLU7m7Wc5P/dAVUwHY3+vZ5nbv0CO7O6l5s9UCKc2Jo5YPSjXnTkLAdc0Hz+Ys63su
3694
  -----END CERTIFICATE-----
3695
 
3696
  TÜRKTRUST Elektronik Sertifika Hizmet Sağlayıcısı H5
3697
- =========================================================
3698
  -----BEGIN CERTIFICATE-----
3699
  MIIEJzCCAw+gAwIBAgIHAI4X/iQggTANBgkqhkiG9w0BAQsFADCBsTELMAkGA1UEBhMCVFIxDzAN
3700
  BgNVBAcMBkFua2FyYTFNMEsGA1UECgxEVMOcUktUUlVTVCBCaWxnaSDEsGxldGnFn2ltIHZlIEJp
@@ -3718,7 +3539,7 @@ B59OTj+RdPsnnRHM3eaxynFNExc5JsUpISuTKWqW+qtB4Uu2NQvAmxU=
3718
  -----END CERTIFICATE-----
3719
 
3720
  TÜRKTRUST Elektronik Sertifika Hizmet Sağlayıcısı H6
3721
- =========================================================
3722
  -----BEGIN CERTIFICATE-----
3723
  MIIEJjCCAw6gAwIBAgIGfaHyZeyKMA0GCSqGSIb3DQEBCwUAMIGxMQswCQYDVQQGEwJUUjEPMA0G
3724
  A1UEBwwGQW5rYXJhMU0wSwYDVQQKDERUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmls
@@ -3882,3 +3703,341 @@ ypnTycUm/Q1oBEauttmbjL4ZvrHG8hnjXALKLNhvSgfZyTXaQHXyxKcZb55CEJh15pWLYLztxRLX
3882
  is7VmFxWlgPF7ncGNf/P5O4/E2Hu29othfDNrp2yGAlFw5Khchf8R7agCyzxxN5DaAhqXzvwdmP7
3883
  zAYspsbiDrW5viSP
3884
  -----END CERTIFICATE-----
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  ##
2
  ## Bundle of CA Root Certificates
3
  ##
4
+ ## Certificate data from Mozilla as of: Wed Jan 18 04:12:05 2017 GMT
5
  ##
6
  ## This is a bundle of X.509 certificates of public Certificate Authorities
7
  ## (CA). These were automatically extracted from Mozilla's root certificates
8
  ## file (certdata.txt). This file can be found in the mozilla source tree:
9
+ ## https://hg.mozilla.org/releases/mozilla-release/raw-file/default/security/nss/lib/ckfw/builtins/certdata.txt
10
  ##
11
  ## It contains the certificates in PEM format and therefore
12
  ## can be directly used with curl / libcurl / php_curl, or with
13
  ## an Apache+mod_ssl webserver for SSL client authentication.
14
  ## Just configure this file as the SSLCACertificateFile.
15
  ##
16
+ ## Conversion done with mk-ca-bundle.pl version 1.27.
17
+ ## SHA256: dffa79e6aa993f558e82884abf7bb54bf440ab66ee91d82a27a627f6f2a4ace4
18
  ##
19
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
20
 
21
  GlobalSign Root CA
22
  ==================
252
  tHuu2guQOHXvgR1m0vdXcDazv/wor3ElhVsT/h5/WrQ8
253
  -----END CERTIFICATE-----
254
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
255
  GeoTrust Global CA
256
  ==================
257
  -----BEGIN CERTIFICATE-----
1264
  U/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY=
1265
  -----END CERTIFICATE-----
1266
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1267
  Security Communication EV RootCA1
1268
  =================================
1269
  -----BEGIN CERTIFICATE-----
1473
  dqMTw5RhK2vZbMEHCiIHhWyFJEapvj+LeISCfiQMnf2BN+MlqO02TpUsyZyQ2uypQjyttgI=
1474
  -----END CERTIFICATE-----
1475
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1476
  certSIGN ROOT CA
1477
  ================
1478
  -----BEGIN CERTIFICATE-----
1667
  -----END CERTIFICATE-----
1668
 
1669
  NetLock Arany (Class Gold) Főtanúsítvány
1670
+ ========================================
1671
  -----BEGIN CERTIFICATE-----
1672
  MIIEFTCCAv2gAwIBAgIGSUEs5AAQMA0GCSqGSIb3DQEBCwUAMIGnMQswCQYDVQQGEwJIVTERMA8G
1673
  A1UEBwwIQnVkYXBlc3QxFTATBgNVBAoMDE5ldExvY2sgS2Z0LjE3MDUGA1UECwwuVGFuw7pzw610
1722
  66+KAQ==
1723
  -----END CERTIFICATE-----
1724
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1725
  Hongkong Post Root CA 1
1726
  =======================
1727
  -----BEGIN CERTIFICATE-----
2155
  -----END CERTIFICATE-----
2156
 
2157
  Certinomis - Autorité Racine
2158
+ ============================
2159
  -----BEGIN CERTIFICATE-----
2160
  MIIFnDCCA4SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJGUjETMBEGA1UEChMK
2161
  Q2VydGlub21pczEXMBUGA1UECxMOMDAwMiA0MzM5OTg5MDMxJjAkBgNVBAMMHUNlcnRpbm9taXMg
2185
  vgt2Fl43N+bYdJeimUV5
2186
  -----END CERTIFICATE-----
2187
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2188
  TWCA Root Certification Authority
2189
  =================================
2190
  -----BEGIN CERTIFICATE-----
3515
  -----END CERTIFICATE-----
3516
 
3517
  TÜRKTRUST Elektronik Sertifika Hizmet Sağlayıcısı H5
3518
+ ====================================================
3519
  -----BEGIN CERTIFICATE-----
3520
  MIIEJzCCAw+gAwIBAgIHAI4X/iQggTANBgkqhkiG9w0BAQsFADCBsTELMAkGA1UEBhMCVFIxDzAN
3521
  BgNVBAcMBkFua2FyYTFNMEsGA1UECgxEVMOcUktUUlVTVCBCaWxnaSDEsGxldGnFn2ltIHZlIEJp
3539
  -----END CERTIFICATE-----
3540
 
3541
  TÜRKTRUST Elektronik Sertifika Hizmet Sağlayıcısı H6
3542
+ ====================================================
3543
  -----BEGIN CERTIFICATE-----
3544
  MIIEJjCCAw6gAwIBAgIGfaHyZeyKMA0GCSqGSIb3DQEBCwUAMIGxMQswCQYDVQQGEwJUUjEPMA0G
3545
  A1UEBwwGQW5rYXJhMU0wSwYDVQQKDERUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmls
3703
  is7VmFxWlgPF7ncGNf/P5O4/E2Hu29othfDNrp2yGAlFw5Khchf8R7agCyzxxN5DaAhqXzvwdmP7
3704
  zAYspsbiDrW5viSP
3705
  -----END CERTIFICATE-----
3706
+
3707
+ Hellenic Academic and Research Institutions RootCA 2015
3708
+ =======================================================
3709
+ -----BEGIN CERTIFICATE-----
3710
+ MIIGCzCCA/OgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBpjELMAkGA1UEBhMCR1IxDzANBgNVBAcT
3711
+ BkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0
3712
+ aW9ucyBDZXJ0LiBBdXRob3JpdHkxQDA+BgNVBAMTN0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNl
3713
+ YXJjaCBJbnN0aXR1dGlvbnMgUm9vdENBIDIwMTUwHhcNMTUwNzA3MTAxMTIxWhcNNDAwNjMwMTAx
3714
+ MTIxWjCBpjELMAkGA1UEBhMCR1IxDzANBgNVBAcTBkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMg
3715
+ QWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkxQDA+BgNV
3716
+ BAMTN0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgUm9vdENBIDIw
3717
+ MTUwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDC+Kk/G4n8PDwEXT2QNrCROnk8Zlrv
3718
+ bTkBSRq0t89/TSNTt5AA4xMqKKYx8ZEA4yjsriFBzh/a/X0SWwGDD7mwX5nh8hKDgE0GPt+sr+eh
3719
+ iGsxr/CL0BgzuNtFajT0AoAkKAoCFZVedioNmToUW/bLy1O8E00BiDeUJRtCvCLYjqOWXjrZMts+
3720
+ 6PAQZe104S+nfK8nNLspfZu2zwnI5dMK/IhlZXQK3HMcXM1AsRzUtoSMTFDPaI6oWa7CJ06CojXd
3721
+ FPQf/7J31Ycvqm59JCfnxssm5uX+Zwdj2EUN3TpZZTlYepKZcj2chF6IIbjV9Cz82XBST3i4vTwr
3722
+ i5WY9bPRaM8gFH5MXF/ni+X1NYEZN9cRCLdmvtNKzoNXADrDgfgXy5I2XdGj2HUb4Ysn6npIQf1F
3723
+ GQatJ5lOwXBH3bWfgVMS5bGMSF0xQxfjjMZ6Y5ZLKTBOhE5iGV48zpeQpX8B653g+IuJ3SWYPZK2
3724
+ fu/Z8VFRfS0myGlZYeCsargqNhEEelC9MoS+L9xy1dcdFkfkR2YgP/SWxa+OAXqlD3pk9Q0Yh9mu
3725
+ iNX6hME6wGkoLfINaFGq46V3xqSQDqE3izEjR8EJCOtu93ib14L8hCCZSRm2Ekax+0VVFqmjZayc
3726
+ Bw/qa9wfLgZy7IaIEuQt218FL+TwA9MmM+eAws1CoRc0CwIDAQABo0IwQDAPBgNVHRMBAf8EBTAD
3727
+ AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUcRVnyMjJvXVdctA4GGqd83EkVAswDQYJKoZI
3728
+ hvcNAQELBQADggIBAHW7bVRLqhBYRjTyYtcWNl0IXtVsyIe9tC5G8jH4fOpCtZMWVdyhDBKg2mF+
3729
+ D1hYc2Ryx+hFjtyp8iY/xnmMsVMIM4GwVhO+5lFc2JsKT0ucVlMC6U/2DWDqTUJV6HwbISHTGzrM
3730
+ d/K4kPFox/la/vot9L/J9UUbzjgQKjeKeaO04wlshYaT/4mWJ3iBj2fjRnRUjtkNaeJK9E10A/+y
3731
+ d+2VZ5fkscWrv2oj6NSU4kQoYsRL4vDY4ilrGnB+JGGTe08DMiUNRSQrlrRGar9KC/eaj8GsGsVn
3732
+ 82800vpzY4zvFrCopEYq+OsS7HK07/grfoxSwIuEVPkvPuNVqNxmsdnhX9izjFk0WaSrT2y7Hxjb
3733
+ davYy5LNlDhhDgcGH0tGEPEVvo2FXDtKK4F5D7Rpn0lQl033DlZdwJVqwjbDG2jJ9SrcR5q+ss7F
3734
+ Jej6A7na+RZukYT1HCjI/CbM1xyQVqdfbzoEvM14iQuODy+jqk+iGxI9FghAD/FGTNeqewjBCvVt
3735
+ J94Cj8rDtSvK6evIIVM4pcw72Hc3MKJP2W/R8kCtQXoXxdZKNYm3QdV8hn9VTYNKpXMgwDqvkPGa
3736
+ JI7ZjnHKe7iG2rKPmT4dEw0SEe7Uq/DpFXYC5ODfqiAeW2GFZECpkJcNrVPSWh2HagCXZWK0vm9q
3737
+ p/UsQu0yrbYhnr68
3738
+ -----END CERTIFICATE-----
3739
+
3740
+ Hellenic Academic and Research Institutions ECC RootCA 2015
3741
+ ===========================================================
3742
+ -----BEGIN CERTIFICATE-----
3743
+ MIICwzCCAkqgAwIBAgIBADAKBggqhkjOPQQDAjCBqjELMAkGA1UEBhMCR1IxDzANBgNVBAcTBkF0
3744
+ aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9u
3745
+ cyBDZXJ0LiBBdXRob3JpdHkxRDBCBgNVBAMTO0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJj
3746
+ aCBJbnN0aXR1dGlvbnMgRUNDIFJvb3RDQSAyMDE1MB4XDTE1MDcwNzEwMzcxMloXDTQwMDYzMDEw
3747
+ MzcxMlowgaoxCzAJBgNVBAYTAkdSMQ8wDQYDVQQHEwZBdGhlbnMxRDBCBgNVBAoTO0hlbGxlbmlj
3748
+ IEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ2VydC4gQXV0aG9yaXR5MUQwQgYD
3749
+ VQQDEztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25zIEVDQyBSb290
3750
+ Q0EgMjAxNTB2MBAGByqGSM49AgEGBSuBBAAiA2IABJKgQehLgoRc4vgxEZmGZE4JJS+dQS8KrjVP
3751
+ dJWyUWRrjWvmP3CV8AVER6ZyOFB2lQJajq4onvktTpnvLEhvTCUp6NFxW98dwXU3tNf6e3pCnGoK
3752
+ Vlp8aQuqgAkkbH7BRqNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0O
3753
+ BBYEFLQiC4KZJAEOnLvkDv2/+5cgk5kqMAoGCCqGSM49BAMCA2cAMGQCMGfOFmI4oqxiRaeplSTA
3754
+ GiecMjvAwNW6qef4BENThe5SId6d9SWDPp5YSy/XZxMOIQIwBeF1Ad5o7SofTUwJCA3sS61kFyjn
3755
+ dc5FZXIhF8siQQ6ME5g4mlRtm8rifOoCWCKR
3756
+ -----END CERTIFICATE-----
3757
+
3758
+ Certplus Root CA G1
3759
+ ===================
3760
+ -----BEGIN CERTIFICATE-----
3761
+ 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
3785
+ qsOR0C5CB8AMTVPNJLFMWx5R9N/pkvo=
3786
+ -----END CERTIFICATE-----
3787
+
3788
+ Certplus Root CA G2
3789
+ ===================
3790
+ -----BEGIN CERTIFICATE-----
3791
+ MIICHDCCAaKgAwIBAgISESDZkc6uo+jF5//pAq/Pc7xVMAoGCCqGSM49BAMDMD4xCzAJBgNVBAYT
3792
+ AkZSMREwDwYDVQQKDAhDZXJ0cGx1czEcMBoGA1UEAwwTQ2VydHBsdXMgUm9vdCBDQSBHMjAeFw0x
3793
+ NDA1MjYwMDAwMDBaFw0zODAxMTUwMDAwMDBaMD4xCzAJBgNVBAYTAkZSMREwDwYDVQQKDAhDZXJ0
3794
+ cGx1czEcMBoGA1UEAwwTQ2VydHBsdXMgUm9vdCBDQSBHMjB2MBAGByqGSM49AgEGBSuBBAAiA2IA
3795
+ BM0PW1aC3/BFGtat93nwHcmsltaeTpwftEIRyoa/bfuFo8XlGVzX7qY/aWfYeOKmycTbLXku54uN
3796
+ Am8xIk0G42ByRZ0OQneezs/lf4WbGOT8zC5y0xaTTsqZY1yhBSpsBqNjMGEwDgYDVR0PAQH/BAQD
3797
+ AgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNqDYwJ5jtpMxjwjFNiPwyCrKGBZMB8GA1Ud
3798
+ IwQYMBaAFNqDYwJ5jtpMxjwjFNiPwyCrKGBZMAoGCCqGSM49BAMDA2gAMGUCMHD+sAvZ94OX7PNV
3799
+ HdTcswYO/jOYnYs5kGuUIe22113WTNchp+e/IQ8rzfcq3IUHnQIxAIYUFuXcsGXCwI4Un78kFmjl
3800
+ vPl5adytRSv3tjFzzAalU5ORGpOucGpnutee5WEaXw==
3801
+ -----END CERTIFICATE-----
3802
+
3803
+ OpenTrust Root CA G1
3804
+ ====================
3805
+ -----BEGIN CERTIFICATE-----
3806
+ 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
3830
+ OXXUc0ECd97N4EOH1uS6SsNsEn/+KuYj1oxx
3831
+ -----END CERTIFICATE-----
3832
+
3833
+ OpenTrust Root CA G2
3834
+ ====================
3835
+ -----BEGIN CERTIFICATE-----
3836
+ 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
3860
+ u7JwqkwR3v98KzfUetF3NI/n+UL3PIEMS1IK
3861
+ -----END CERTIFICATE-----
3862
+
3863
+ OpenTrust Root CA G3
3864
+ ====================
3865
+ -----BEGIN CERTIFICATE-----
3866
+ MIICITCCAaagAwIBAgISESDm+Ez8JLC+BUCs2oMbNGA/MAoGCCqGSM49BAMDMEAxCzAJBgNVBAYT
3867
+ AkZSMRIwEAYDVQQKDAlPcGVuVHJ1c3QxHTAbBgNVBAMMFE9wZW5UcnVzdCBSb290IENBIEczMB4X
3868
+ DTE0MDUyNjAwMDAwMFoXDTM4MDExNTAwMDAwMFowQDELMAkGA1UEBhMCRlIxEjAQBgNVBAoMCU9w
3869
+ ZW5UcnVzdDEdMBsGA1UEAwwUT3BlblRydXN0IFJvb3QgQ0EgRzMwdjAQBgcqhkjOPQIBBgUrgQQA
3870
+ IgNiAARK7liuTcpm3gY6oxH84Bjwbhy6LTAMidnW7ptzg6kjFYwvWYpa3RTqnVkrQ7cG7DK2uu5B
3871
+ ta1doYXM6h0UZqNnfkbilPPntlahFVmhTzeXuSIevRHr9LIfXsMUmuXZl5mjYzBhMA4GA1UdDwEB
3872
+ /wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRHd8MUi2I5DMlv4VBN0BBY3JWIbTAf
3873
+ BgNVHSMEGDAWgBRHd8MUi2I5DMlv4VBN0BBY3JWIbTAKBggqhkjOPQQDAwNpADBmAjEAj6jcnboM
3874
+ BBf6Fek9LykBl7+BFjNAk2z8+e2AcG+qj9uEwov1NcoG3GRvaBbhj5G5AjEA2Euly8LQCGzpGPta
3875
+ 3U1fJAuwACEl74+nBCZx4nxp5V2a+EEfOzmTk51V6s2N8fvB
3876
+ -----END CERTIFICATE-----
3877
+
3878
+ ISRG Root X1
3879
+ ============
3880
+ -----BEGIN CERTIFICATE-----
3881
+ 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
3905
+ m+kXQ99b21/+jh5Xos1AnX5iItreGCc=
3906
+ -----END CERTIFICATE-----
3907
+
3908
+ AC RAIZ FNMT-RCM
3909
+ ================
3910
+ -----BEGIN CERTIFICATE-----
3911
+ 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
3936
+ -----END CERTIFICATE-----
3937
+
3938
+ Amazon Root CA 1
3939
+ ================
3940
+ -----BEGIN CERTIFICATE-----
3941
+ MIIDQTCCAimgAwIBAgITBmyfz5m/jAo54vB4ikPmljZbyjANBgkqhkiG9w0BAQsFADA5MQswCQYD
3942
+ VQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSAxMB4XDTE1
3943
+ MDUyNjAwMDAwMFoXDTM4MDExNzAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpv
3944
+ bjEZMBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
3945
+ ggEBALJ4gHHKeNXjca9HgFB0fW7Y14h29Jlo91ghYPl0hAEvrAIthtOgQ3pOsqTQNroBvo3bSMgH
3946
+ FzZM9O6II8c+6zf1tRn4SWiw3te5djgdYZ6k/oI2peVKVuRF4fn9tBb6dNqcmzU5L/qwIFAGbHrQ
3947
+ gLKm+a/sRxmPUDgH3KKHOVj4utWp+UhnMJbulHheb4mjUcAwhmahRWa6VOujw5H5SNz/0egwLX0t
3948
+ dHA114gk957EWW67c4cX8jJGKLhD+rcdqsq08p8kDi1L93FcXmn/6pUCyziKrlA4b9v7LWIbxcce
3949
+ VOF34GfID5yHI9Y/QCB/IIDEgEw+OyQmjgSubJrIqg0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB
3950
+ /zAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0OBBYEFIQYzIU07LwMlJQuCFmcx7IQTgoIMA0GCSqGSIb3
3951
+ DQEBCwUAA4IBAQCY8jdaQZChGsV2USggNiMOruYou6r4lK5IpDB/G/wkjUu0yKGX9rbxenDIU5PM
3952
+ CCjjmCXPI6T53iHTfIUJrU6adTrCC2qJeHZERxhlbI1Bjjt/msv0tadQ1wUsN+gDS63pYaACbvXy
3953
+ 8MWy7Vu33PqUXHeeE6V/Uq2V8viTO96LXFvKWlJbYK8U90vvo/ufQJVtMVT8QtPHRh8jrdkPSHCa
3954
+ 2XV4cdFyQzR1bldZwgJcJmApzyMZFo6IQ6XU5MsI+yMRQ+hDKXJioaldXgjUkK642M4UwtBV8ob2
3955
+ xJNDd2ZhwLnoQdeXeGADbkpyrqXRfboQnoZsG4q5WTP468SQvvG5
3956
+ -----END CERTIFICATE-----
3957
+
3958
+ Amazon Root CA 2
3959
+ ================
3960
+ -----BEGIN CERTIFICATE-----
3961
+ MIIFQTCCAymgAwIBAgITBmyf0pY1hp8KD+WGePhbJruKNzANBgkqhkiG9w0BAQwFADA5MQswCQYD
3962
+ VQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSAyMB4XDTE1
3963
+ MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpv
3964
+ bjEZMBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoC
3965
+ ggIBAK2Wny2cSkxKgXlRmeyKy2tgURO8TW0G/LAIjd0ZEGrHJgw12MBvIITplLGbhQPDW9tK6Mj4
3966
+ kHbZW0/jTOgGNk3Mmqw9DJArktQGGWCsN0R5hYGCrVo34A3MnaZMUnbqQ523BNFQ9lXg1dKmSYXp
3967
+ N+nKfq5clU1Imj+uIFptiJXZNLhSGkOQsL9sBbm2eLfq0OQ6PBJTYv9K8nu+NQWpEjTj82R0Yiw9
3968
+ AElaKP4yRLuH3WUnAnE72kr3H9rN9yFVkE8P7K6C4Z9r2UXTu/Bfh+08LDmG2j/e7HJV63mjrdvd
3969
+ fLC6HM783k81ds8P+HgfajZRRidhW+mez/CiVX18JYpvL7TFz4QuK/0NURBs+18bvBt+xa47mAEx
3970
+ kv8LV/SasrlX6avvDXbR8O70zoan4G7ptGmh32n2M8ZpLpcTnqWHsFcQgTfJU7O7f/aS0ZzQGPSS
3971
+ btqDT6ZjmUyl+17vIWR6IF9sZIUVyzfpYgwLKhbcAS4y2j5L9Z469hdAlO+ekQiG+r5jqFoz7Mt0
3972
+ Q5X5bGlSNscpb/xVA1wf+5+9R+vnSUeVC06JIglJ4PVhHvG/LopyboBZ/1c6+XUyo05f7O0oYtlN
3973
+ c/LMgRdg7c3r3NunysV+Ar3yVAhU/bQtCSwXVEqY0VThUWcI0u1ufm8/0i2BWSlmy5A5lREedCf+
3974
+ 3euvAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSw
3975
+ DPBMMPQFWAJI/TPlUq9LhONmUjANBgkqhkiG9w0BAQwFAAOCAgEAqqiAjw54o+Ci1M3m9Zh6O+oA
3976
+ A7CXDpO8Wqj2LIxyh6mx/H9z/WNxeKWHWc8w4Q0QshNabYL1auaAn6AFC2jkR2vHat+2/XcycuUY
3977
+ +gn0oJMsXdKMdYV2ZZAMA3m3MSNjrXiDCYZohMr/+c8mmpJ5581LxedhpxfL86kSk5Nrp+gvU5LE
3978
+ YFiwzAJRGFuFjWJZY7attN6a+yb3ACfAXVU3dJnJUH/jWS5E4ywl7uxMMne0nxrpS10gxdr9HIcW
3979
+ xkPo1LsmmkVwXqkLN1PiRnsn/eBG8om3zEK2yygmbtmlyTrIQRNg91CMFa6ybRoVGld45pIq2WWQ
3980
+ gj9sAq+uEjonljYE1x2igGOpm/HlurR8FLBOybEfdF849lHqm/osohHUqS0nGkWxr7JOcQ3AWEbW
3981
+ aQbLU8uz/mtBzUF+fUwPfHJ5elnNXkoOrJupmHN5fLT0zLm4BwyydFy4x2+IoZCn9Kr5v2c69BoV
3982
+ Yh63n749sSmvZ6ES8lgQGVMDMBu4Gon2nL2XA46jCfMdiyHxtN/kHNGfZQIG6lzWE7OE76KlXIx3
3983
+ KadowGuuQNKotOrN8I1LOJwZmhsoVLiJkO/KdYE+HvJkJMcYr07/R54H9jVlpNMKVv/1F2Rs76gi
3984
+ JUmTtt8AF9pYfl3uxRuw0dFfIRDH+fO6AgonB8Xx1sfT4PsJYGw=
3985
+ -----END CERTIFICATE-----
3986
+
3987
+ Amazon Root CA 3
3988
+ ================
3989
+ -----BEGIN CERTIFICATE-----
3990
+ MIIBtjCCAVugAwIBAgITBmyf1XSXNmY/Owua2eiedgPySjAKBggqhkjOPQQDAjA5MQswCQYDVQQG
3991
+ EwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSAzMB4XDTE1MDUy
3992
+ NjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZ
3993
+ MBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgMzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABCmXp8ZB
3994
+ f8ANm+gBG1bG8lKlui2yEujSLtf6ycXYqm0fc4E7O5hrOXwzpcVOho6AF2hiRVd9RFgdszflZwjr
3995
+ Zt6jQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSrttvXBp43
3996
+ rDCGB5Fwx5zEGbF4wDAKBggqhkjOPQQDAgNJADBGAiEA4IWSoxe3jfkrBqWTrBqYaGFy+uGh0Psc
3997
+ eGCmQ5nFuMQCIQCcAu/xlJyzlvnrxir4tiz+OpAUFteMYyRIHN8wfdVoOw==
3998
+ -----END CERTIFICATE-----
3999
+
4000
+ Amazon Root CA 4
4001
+ ================
4002
+ -----BEGIN CERTIFICATE-----
4003
+ MIIB8jCCAXigAwIBAgITBmyf18G7EEwpQ+Vxe3ssyBrBDjAKBggqhkjOPQQDAzA5MQswCQYDVQQG
4004
+ EwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSA0MB4XDTE1MDUy
4005
+ NjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZ
4006
+ MBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgNDB2MBAGByqGSM49AgEGBSuBBAAiA2IABNKrijdPo1MN
4007
+ /sGKe0uoe0ZLY7Bi9i0b2whxIdIA6GO9mif78DluXeo9pcmBqqNbIJhFXRbb/egQbeOc4OO9X4Ri
4008
+ 83BkM6DLJC9wuoihKqB1+IGuYgbEgds5bimwHvouXKNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNV
4009
+ HQ8BAf8EBAMCAYYwHQYDVR0OBBYEFNPsxzplbszh2naaVvuc84ZtV+WBMAoGCCqGSM49BAMDA2gA
4010
+ MGUCMDqLIfG9fhGt0O9Yli/W651+kI0rz2ZVwyzjKKlwCkcO8DdZEv8tmZQoTipPNU0zWgIxAOp1
4011
+ AE47xDqUEpHJWEadIRNyp4iciuRMStuW1KyLa2tJElMzrdfkviT8tQp21KW8EA==
4012
+ -----END CERTIFICATE-----
4013
+
4014
+ LuxTrust Global Root 2
4015
+ ======================
4016
+ -----BEGIN CERTIFICATE-----
4017
+ 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
4043
+ -----END CERTIFICATE-----
vendor/composer/installed.json CHANGED
@@ -24,7 +24,7 @@
24
  "phpunit/phpunit": "4.*",
25
  "squizlabs/php_codesniffer": "2.*"
26
  },
27
- "time": "2016-08-18 16:36:52",
28
  "type": "library",
29
  "installation-source": "dist",
30
  "autoload": {
@@ -45,19 +45,76 @@
45
  "description": "Internal MaxMind Web Service API",
46
  "homepage": "https://github.com/maxmind/mm-web-service-api-php"
47
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
48
  {
49
  "name": "geoip2/geoip2",
50
- "version": "v2.4.2",
51
- "version_normalized": "2.4.2.0",
52
  "source": {
53
  "type": "git",
54
  "url": "https://github.com/maxmind/GeoIP2-php.git",
55
- "reference": "24b278b0195d7067e930b844c44faf8fae5bdbc7"
56
  },
57
  "dist": {
58
  "type": "zip",
59
- "url": "https://api.github.com/repos/maxmind/GeoIP2-php/zipball/24b278b0195d7067e930b844c44faf8fae5bdbc7",
60
- "reference": "24b278b0195d7067e930b844c44faf8fae5bdbc7",
61
  "shasum": ""
62
  },
63
  "require": {
@@ -69,7 +126,7 @@
69
  "phpunit/phpunit": "4.2.*",
70
  "squizlabs/php_codesniffer": "2.*"
71
  },
72
- "time": "2016-08-17 20:42:55",
73
  "type": "library",
74
  "installation-source": "dist",
75
  "autoload": {
@@ -100,17 +157,17 @@
100
  },
101
  {
102
  "name": "composer/ca-bundle",
103
- "version": "1.0.4",
104
- "version_normalized": "1.0.4.0",
105
  "source": {
106
  "type": "git",
107
  "url": "https://github.com/composer/ca-bundle.git",
108
- "reference": "ec21a59414b99501e723b63fd664aa8ead9c5680"
109
  },
110
  "dist": {
111
  "type": "zip",
112
- "url": "https://api.github.com/repos/composer/ca-bundle/zipball/ec21a59414b99501e723b63fd664aa8ead9c5680",
113
- "reference": "ec21a59414b99501e723b63fd664aa8ead9c5680",
114
  "shasum": ""
115
  },
116
  "require": {
@@ -119,13 +176,14 @@
119
  "php": "^5.3.2 || ^7.0"
120
  },
121
  "require-dev": {
 
122
  "psr/log": "^1.0",
123
  "symfony/process": "^2.5 || ^3.0"
124
  },
125
  "suggest": {
126
  "symfony/process": "This is necessary to reliably check whether openssl_x509_parse is vulnerable on older php versions, but can be ignored on PHP 5.5.6+"
127
  },
128
- "time": "2016-09-04 19:00:06",
129
  "type": "library",
130
  "extra": {
131
  "branch-alias": {
@@ -157,57 +215,5 @@
157
  "ssl",
158
  "tls"
159
  ]
160
- },
161
- {
162
- "name": "maxmind-db/reader",
163
- "version": "v1.1.1",
164
- "version_normalized": "1.1.1.0",
165
- "source": {
166
- "type": "git",
167
- "url": "https://github.com/maxmind/MaxMind-DB-Reader-php.git",
168
- "reference": "8da3b4fcd439779d4b16bba0a4ba98365f78d788"
169
- },
170
- "dist": {
171
- "type": "zip",
172
- "url": "https://api.github.com/repos/maxmind/MaxMind-DB-Reader-php/zipball/8da3b4fcd439779d4b16bba0a4ba98365f78d788",
173
- "reference": "8da3b4fcd439779d4b16bba0a4ba98365f78d788",
174
- "shasum": ""
175
- },
176
- "require": {
177
- "php": ">=5.3.1"
178
- },
179
- "require-dev": {
180
- "phpunit/phpunit": "4.2.*",
181
- "satooshi/php-coveralls": "1.0.*",
182
- "squizlabs/php_codesniffer": "2.*"
183
- },
184
- "time": "2016-09-15 21:26:50",
185
- "type": "library",
186
- "installation-source": "dist",
187
- "autoload": {
188
- "psr-0": {
189
- "MaxMind": "src/"
190
- }
191
- },
192
- "notification-url": "https://packagist.org/downloads/",
193
- "license": [
194
- "Apache-2.0"
195
- ],
196
- "authors": [
197
- {
198
- "name": "Gregory J. Oschwald",
199
- "email": "goschwald@maxmind.com",
200
- "homepage": "http://www.maxmind.com/"
201
- }
202
- ],
203
- "description": "MaxMind DB Reader API",
204
- "homepage": "https://github.com/maxmind/MaxMind-DB-Reader-php",
205
- "keywords": [
206
- "database",
207
- "geoip",
208
- "geoip2",
209
- "geolocation",
210
- "maxmind"
211
- ]
212
  }
213
  ]
24
  "phpunit/phpunit": "4.*",
25
  "squizlabs/php_codesniffer": "2.*"
26
  },
27
+ "time": "2016-08-18T16:36:52+00:00",
28
  "type": "library",
29
  "installation-source": "dist",
30
  "autoload": {
45
  "description": "Internal MaxMind Web Service API",
46
  "homepage": "https://github.com/maxmind/mm-web-service-api-php"
47
  },
48
+ {
49
+ "name": "maxmind-db/reader",
50
+ "version": "v1.1.3",
51
+ "version_normalized": "1.1.3.0",
52
+ "source": {
53
+ "type": "git",
54
+ "url": "https://github.com/maxmind/MaxMind-DB-Reader-php.git",
55
+ "reference": "7eeccf61b078bb23bb07b1a151a7e5db52871e65"
56
+ },
57
+ "dist": {
58
+ "type": "zip",
59
+ "url": "https://api.github.com/repos/maxmind/MaxMind-DB-Reader-php/zipball/7eeccf61b078bb23bb07b1a151a7e5db52871e65",
60
+ "reference": "7eeccf61b078bb23bb07b1a151a7e5db52871e65",
61
+ "shasum": ""
62
+ },
63
+ "require": {
64
+ "php": ">=5.3.1"
65
+ },
66
+ "require-dev": {
67
+ "phpunit/phpunit": "4.2.*",
68
+ "satooshi/php-coveralls": "1.0.*",
69
+ "squizlabs/php_codesniffer": "2.*"
70
+ },
71
+ "suggest": {
72
+ "ext-bcmath": "bcmath or gmp is requred for decoding larger integers with the pure PHP decoder",
73
+ "ext-gmp": "bcmath or gmp is requred for decoding larger integers with the pure PHP decoder",
74
+ "ext-maxminddb": "A C-based database decoder that provides significantly faster lookups"
75
+ },
76
+ "time": "2017-01-19T23:49:38+00:00",
77
+ "type": "library",
78
+ "installation-source": "dist",
79
+ "autoload": {
80
+ "psr-4": {
81
+ "MaxMind\\Db\\": "src/MaxMind/Db"
82
+ }
83
+ },
84
+ "notification-url": "https://packagist.org/downloads/",
85
+ "license": [
86
+ "Apache-2.0"
87
+ ],
88
+ "authors": [
89
+ {
90
+ "name": "Gregory J. Oschwald",
91
+ "email": "goschwald@maxmind.com",
92
+ "homepage": "http://www.maxmind.com/"
93
+ }
94
+ ],
95
+ "description": "MaxMind DB Reader API",
96
+ "homepage": "https://github.com/maxmind/MaxMind-DB-Reader-php",
97
+ "keywords": [
98
+ "database",
99
+ "geoip",
100
+ "geoip2",
101
+ "geolocation",
102
+ "maxmind"
103
+ ]
104
+ },
105
  {
106
  "name": "geoip2/geoip2",
107
+ "version": "v2.4.5",
108
+ "version_normalized": "2.4.5.0",
109
  "source": {
110
  "type": "git",
111
  "url": "https://github.com/maxmind/GeoIP2-php.git",
112
+ "reference": "b28a0ed0190cd76c878ed7002a5d1bb8c5f4c175"
113
  },
114
  "dist": {
115
  "type": "zip",
116
+ "url": "https://api.github.com/repos/maxmind/GeoIP2-php/zipball/b28a0ed0190cd76c878ed7002a5d1bb8c5f4c175",
117
+ "reference": "b28a0ed0190cd76c878ed7002a5d1bb8c5f4c175",
118
  "shasum": ""
119
  },
120
  "require": {
126
  "phpunit/phpunit": "4.2.*",
127
  "squizlabs/php_codesniffer": "2.*"
128
  },
129
+ "time": "2017-01-31T17:28:48+00:00",
130
  "type": "library",
131
  "installation-source": "dist",
132
  "autoload": {
157
  },
158
  {
159
  "name": "composer/ca-bundle",
160
+ "version": "1.0.7",
161
+ "version_normalized": "1.0.7.0",
162
  "source": {
163
  "type": "git",
164
  "url": "https://github.com/composer/ca-bundle.git",
165
+ "reference": "b17e6153cb7f33c7e44eb59578dc12eee5dc8e12"
166
  },
167
  "dist": {
168
  "type": "zip",
169
+ "url": "https://api.github.com/repos/composer/ca-bundle/zipball/b17e6153cb7f33c7e44eb59578dc12eee5dc8e12",
170
+ "reference": "b17e6153cb7f33c7e44eb59578dc12eee5dc8e12",
171
  "shasum": ""
172
  },
173
  "require": {
176
  "php": "^5.3.2 || ^7.0"
177
  },
178
  "require-dev": {
179
+ "phpunit/phpunit": "^4.5",
180
  "psr/log": "^1.0",
181
  "symfony/process": "^2.5 || ^3.0"
182
  },
183
  "suggest": {
184
  "symfony/process": "This is necessary to reliably check whether openssl_x509_parse is vulnerable on older php versions, but can be ignored on PHP 5.5.6+"
185
  },
186
+ "time": "2017-03-06T11:59:08+00:00",
187
  "type": "library",
188
  "extra": {
189
  "branch-alias": {
215
  "ssl",
216
  "tls"
217
  ]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
218
  }
219
  ]
vendor/geoip2/geoip2/CHANGELOG.md CHANGED
@@ -1,12 +1,30 @@
1
  CHANGELOG
2
  =========
3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4
  2.4.2 (2016-08-17)
5
  ------------------
6
 
7
  * Updated documentation to clarify what the accuracy radius refers to.
8
  * Upgraded `maxmind/web-service-common` to 0.3.0. This version uses
9
- `composer/ca-bundle` rather than our own CA bundle. Fixes #75.
10
  * Improved PHP documentation generation.
11
 
12
  2.4.1 (2016-06-10)
1
  CHANGELOG
2
  =========
3
 
4
+ 2.4.5 (2017-01-31)
5
+ ------------------
6
+
7
+ * Additional error checking on the data returned from `MaxMind\Db\Reader`
8
+ was added to help detect corrupt databases. GitHub #83.
9
+
10
+ 2.4.4 (2016-10-11)
11
+ ------------------
12
+
13
+ * `isset()` on `mostSpecificSubdivision` attribute now returns the
14
+ correct value. Reported by Juan Francisco Giordana. GitHub #81.
15
+
16
+ 2.4.3 (2016-10-11)
17
+ ------------------
18
+
19
+ * `isset()` on `name` attribute now returns the correct value. Reported by
20
+ Juan Francisco Giordana. GitHub #79.
21
+
22
  2.4.2 (2016-08-17)
23
  ------------------
24
 
25
  * Updated documentation to clarify what the accuracy radius refers to.
26
  * Upgraded `maxmind/web-service-common` to 0.3.0. This version uses
27
+ `composer/ca-bundle` rather than our own CA bundle. GitHub #75.
28
  * Improved PHP documentation generation.
29
 
30
  2.4.1 (2016-06-10)
vendor/geoip2/geoip2/src/Database/Reader.php CHANGED
@@ -5,6 +5,7 @@ namespace GeoIp2\Database;
5
  use GeoIp2\Exception\AddressNotFoundException;
6
  use GeoIp2\ProviderInterface;
7
  use MaxMind\Db\Reader as DbReader;
 
8
 
9
  /**
10
  * Instances of this class provide a reader for the GeoIP2 database format.
@@ -223,6 +224,19 @@ class Reader implements ProviderInterface
223
  "The address $ipAddress is not in the database."
224
  );
225
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
226
  return $record;
227
  }
228
 
5
  use GeoIp2\Exception\AddressNotFoundException;
6
  use GeoIp2\ProviderInterface;
7
  use MaxMind\Db\Reader as DbReader;
8
+ use MaxMind\Db\Reader\InvalidDatabaseException;
9
 
10
  /**
11
  * Instances of this class provide a reader for the GeoIP2 database format.
224
  "The address $ipAddress is not in the database."
225
  );
226
  }
227
+ if (!is_array($record)) {
228
+ // This can happen on corrupt databases. Generally,
229
+ // MaxMind\Db\Reader will throw a
230
+ // MaxMind\Db\Reader\InvalidDatabaseException, but occasionally
231
+ // the lookup may result in a record that looks valid but is not
232
+ // an array. This mostly happens when the user is ignoring all
233
+ // exceptions and the more frequent InvalidDatabaseException
234
+ // exceptions go unnoticed.
235
+ throw new InvalidDatabaseException(
236
+ "Expected an array when looking up $ipAddress but received: "
237
+ . gettype($record)
238
+ );
239
+ }
240
  return $record;
241
  }
242
 
vendor/geoip2/geoip2/src/Model/City.php CHANGED
@@ -113,6 +113,20 @@ class City extends Country
113
  }
114
  }
115
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
116
  private function mostSpecificSubdivision()
117
  {
118
  return empty($this->subdivisions) ?
113
  }
114
  }
115
 
116
+ /**
117
+ * @ignore
118
+ */
119
+ public function __isset($attr)
120
+ {
121
+ if ($attr == 'mostSpecificSubdivision') {
122
+ // We always return a mostSpecificSubdivision, even if it is the
123
+ // empty subdivision
124
+ return true;
125
+ } else {
126
+ return parent::__isset($attr);
127
+ }
128
+ }
129
+
130
  private function mostSpecificSubdivision()
131
  {
132
  return empty($this->subdivisions) ?
vendor/geoip2/geoip2/src/Record/AbstractPlaceRecord.php CHANGED
@@ -27,12 +27,31 @@ abstract class AbstractPlaceRecord extends AbstractRecord
27
  }
28
  }
29
 
 
 
 
 
 
 
 
 
 
 
 
 
30
  private function name()
 
 
 
 
 
 
31
  {
32
  foreach ($this->locales as $locale) {
33
  if (isset($this->names[$locale])) {
34
- return $this->names[$locale];
35
  }
36
  }
 
37
  }
38
  }
27
  }
28
  }
29
 
30
+ /**
31
+ * @ignore
32
+ */
33
+ public function __isset($attr)
34
+ {
35
+ if ($attr == 'name') {
36
+ return $this->firstSetNameLocale() == null ? false : true;
37
+ } else {
38
+ return parent::__isset($attr);
39
+ }
40
+ }
41
+
42
  private function name()
43
+ {
44
+ $locale = $this->firstSetNameLocale();
45
+ return $locale === null ? null : $this->names[$locale];
46
+ }
47
+
48
+ private function firstSetNameLocale()
49
  {
50
  foreach ($this->locales as $locale) {
51
  if (isset($this->names[$locale])) {
52
+ return $locale;
53
  }
54
  }
55
+ return null;
56
  }
57
  }
vendor/geoip2/geoip2/src/WebService/Client.php CHANGED
@@ -48,7 +48,7 @@ class Client implements ProviderInterface
48
  private $client;
49
  private static $basePath = '/geoip/v2.1';
50
 
51
- const VERSION = 'v2.4.2';
52
 
53
  /**
54
  * Constructor.
48
  private $client;
49
  private static $basePath = '/geoip/v2.1';
50
 
51
+ const VERSION = 'v2.4.5';
52
 
53
  /**
54
  * Constructor.
vendor/maxmind-db/reader/CHANGELOG.md CHANGED
@@ -1,6 +1,19 @@
1
  CHANGELOG
2
  =========
3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4
  1.1.1 (2016-09-15)
5
  ------------------
6
 
1
  CHANGELOG
2
  =========
3
 
4
+ 1.1.3 (2017-01-19)
5
+ ------------------
6
+
7
+ * Fix incorrect version in `ext/php_maxminddb.h`. GitHub #48.
8
+
9
+ 1.1.2 (2016-11-22)
10
+ ------------------
11
+
12
+ * Searching for database metadata only occurs within the last 128KB
13
+ (128 * 1024 bytes) of the file, speeding detection of corrupt
14
+ datafiles. Reported by Eric Teubert. GitHub #42.
15
+ * Suggest relevant extensions when installing with Composer. GitHub #37.
16
+
17
  1.1.1 (2016-09-15)
18
  ------------------
19
 
vendor/maxmind-db/reader/README.md CHANGED
@@ -62,7 +62,7 @@ $reader->close();
62
 
63
  ## Optional PHP C Extension ##
64
 
65
- MaxMind provides an optional C extension that is a drop-in replacement for for
66
  `MaxMind\Db\Reader`. In order to use this extension, you must install the
67
  Reader API as described above and install the extension as described below. If
68
  you are using an autoloader, no changes to your code should be necessary.
62
 
63
  ## Optional PHP C Extension ##
64
 
65
+ MaxMind provides an optional C extension that is a drop-in replacement for
66
  `MaxMind\Db\Reader`. In order to use this extension, you must install the
67
  Reader API as described above and install the extension as described below. If
68
  you are using an autoloader, no changes to your code should be necessary.
vendor/maxmind-db/reader/composer.json CHANGED
@@ -15,14 +15,19 @@
15
  "require": {
16
  "php": ">=5.3.1"
17
  },
 
 
 
 
 
18
  "require-dev": {
19
  "phpunit/phpunit": "4.2.*",
20
  "satooshi/php-coveralls": "1.0.*",
21
  "squizlabs/php_codesniffer": "2.*"
22
  },
23
  "autoload": {
24
- "psr-0": {
25
- "MaxMind": "src/"
26
  }
27
  }
28
  }
15
  "require": {
16
  "php": ">=5.3.1"
17
  },
18
+ "suggest": {
19
+ "ext-bcmath": "bcmath or gmp is requred for decoding larger integers with the pure PHP decoder",
20
+ "ext-gmp": "bcmath or gmp is requred for decoding larger integers with the pure PHP decoder",
21
+ "ext-maxminddb": "A C-based database decoder that provides significantly faster lookups"
22
+ },
23
  "require-dev": {
24
  "phpunit/phpunit": "4.2.*",
25
  "satooshi/php-coveralls": "1.0.*",
26
  "squizlabs/php_codesniffer": "2.*"
27
  },
28
  "autoload": {
29
+ "psr-4": {
30
+ "MaxMind\\Db\\": "src/MaxMind/Db"
31
  }
32
  }
33
  }
vendor/maxmind-db/reader/ext/php_maxminddb.h CHANGED
@@ -15,7 +15,7 @@
15
 
16
  #ifndef PHP_MAXMINDDB_H
17
  #define PHP_MAXMINDDB_H 1
18
- #define PHP_MAXMINDDB_VERSION "1.1.1"
19
  #define PHP_MAXMINDDB_EXTNAME "maxminddb"
20
 
21
  extern zend_module_entry maxminddb_module_entry;
15
 
16
  #ifndef PHP_MAXMINDDB_H
17
  #define PHP_MAXMINDDB_H 1
18
+ #define PHP_MAXMINDDB_VERSION "1.1.3"
19
  #define PHP_MAXMINDDB_EXTNAME "maxminddb"
20
 
21
  extern zend_module_entry maxminddb_module_entry;
vendor/maxmind-db/reader/src/MaxMind/Db/Reader.php CHANGED
@@ -16,6 +16,7 @@ class Reader
16
  private static $DATA_SECTION_SEPARATOR_SIZE = 16;
17
  private static $METADATA_START_MARKER = "\xAB\xCD\xEFMaxMind.com";
18
  private static $METADATA_START_MARKER_LENGTH = 14;
 
19
 
20
  private $decoder;
21
  private $fileHandle;
@@ -237,8 +238,10 @@ class Reader
237
  $fileSize = $fstat['size'];
238
  $marker = self::$METADATA_START_MARKER;
239
  $markerLength = self::$METADATA_START_MARKER_LENGTH;
 
 
240
 
241
- for ($i = 0; $i < $fileSize - $markerLength + 1; $i++) {
242
  for ($j = 0; $j < $markerLength; $j++) {
243
  fseek($handle, $fileSize - $i - $j - 1);
244
  $matchBit = fgetc($handle);
16
  private static $DATA_SECTION_SEPARATOR_SIZE = 16;
17
  private static $METADATA_START_MARKER = "\xAB\xCD\xEFMaxMind.com";
18
  private static $METADATA_START_MARKER_LENGTH = 14;
19
+ private static $METADATA_MAX_SIZE = 131072; // 128 * 1024 = 128KB
20
 
21
  private $decoder;
22
  private $fileHandle;
238
  $fileSize = $fstat['size'];
239
  $marker = self::$METADATA_START_MARKER;
240
  $markerLength = self::$METADATA_START_MARKER_LENGTH;
241
+ $metadataMaxLengthExcludingMarker
242
+ = min(self::$METADATA_MAX_SIZE, $fileSize) - $markerLength;
243
 
244
+ for ($i = 0; $i <= $metadataMaxLengthExcludingMarker; $i++) {
245
  for ($j = 0; $j < $markerLength; $j++) {
246
  fseek($handle, $fileSize - $i - $j - 1);
247
  $matchBit = fgetc($handle);