Version Description
There have been changes to the reverse proxy logic. If you have enabled a reverse proxy, check if the detected IP is correct. New: Shortcode for showing/hiding content!
=
Download this release
Release Info
Developer | benjamin4 |
Plugin | GeoIP Detection |
Version | 2.9.0 |
Comparing to | |
See all releases |
Code changes from version 2.8.2 to 2.9.0
- CHANGELOG.md +184 -0
- admin-ui.php +37 -27
- api.php +45 -76
- changelog.txt +177 -0
- check_requirements.php +1 -1
- composer.lock +23 -24
- data-sources/auto.php +3 -3
- data-sources/header.php +1 -1
- data-sources/hostinfo.php +24 -24
- data-sources/manual.php +3 -4
- data-sources/precision.php +1 -1
- data-sources/registry.php +33 -26
- filter.php +10 -7
- geoip-detect-lib.php +62 -48
- geoip-detect.php +5 -4
- init.php +45 -20
- legacy-api.php +1 -1
- lib/geonames/geonames-country-info.php +1 -1
- lib/get-client-ip.php +87 -0
- readme.txt +17 -253
- shortcode.php +272 -67
- upgrade-plugin.php +1 -1
- vendor/composer/ca-bundle/composer.json +1 -1
- vendor/composer/ca-bundle/res/cacert.pem +211 -519
- vendor/composer/installed.json +69 -70
- vendor/geoip2/geoip2/.php_cs +1 -0
- vendor/geoip2/geoip2/CHANGELOG.md +12 -0
- vendor/geoip2/geoip2/README.md +3 -3
- vendor/geoip2/geoip2/composer.json +2 -3
- vendor/geoip2/geoip2/src/Record/Country.php +5 -1
- vendor/geoip2/geoip2/src/Record/RepresentedCountry.php +4 -0
- vendor/geoip2/geoip2/src/WebService/Client.php +8 -8
- vendor/maxmind-db/reader/CHANGELOG.md +14 -1
- vendor/maxmind-db/reader/README.md +18 -1
- vendor/maxmind-db/reader/autoload.php +44 -0
- vendor/maxmind-db/reader/composer.json +1 -1
- vendor/maxmind-db/reader/ext/maxminddb.c +4 -4
- vendor/maxmind-db/reader/ext/php_maxminddb.h +1 -1
- vendor/maxmind-db/reader/ext/tests/003-open-basedir.phpt +12 -0
- vendor/maxmind/web-service-common/CHANGELOG.md +6 -1
- vendor/maxmind/web-service-common/README.md +3 -3
- vendor/maxmind/web-service-common/dev-bin/release.sh +60 -0
- vendor/maxmind/web-service-common/src/WebService/Client.php +7 -5
- views/client-ip.php +58 -0
- views/footer.php +29 -1
- views/lookup.php +19 -35
- views/options.php +14 -32
CHANGELOG.md
ADDED
@@ -0,0 +1,184 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
## Old Changelog ##
|
2 |
+
|
3 |
+
# 2.9.0 =
|
4 |
+
* NEW: Wizard to get the right ip adress (in order to simplify reverse proxy configuration).
|
5 |
+
* The reverse proxy logic was heavily changed. If you run into configuration errors, try the wizard.
|
6 |
+
* NEW: The CSS classes that are added to the body-tag (if enabled in the options) now also include the most specific subdivisino (province).
|
7 |
+
* Maxmind vendor code was updated to the current version (2.8.0).
|
8 |
+
|
9 |
+
# 2.8.2 =
|
10 |
+
* Maxmind vendor code was updated to the current version (2.7.0).
|
11 |
+
* FIX: There was a fatal error when using PHP 7.2 (thx jj-dev)
|
12 |
+
* FIX: The automatic update of Maxmind Geoip2 Lite City database was fixed.
|
13 |
+
* FIX: Always try to fill in more information into the country information from the GeoNames-DB.
|
14 |
+
|
15 |
+
# 2.8.1 =
|
16 |
+
|
17 |
+
(Was not released on wordpress.org)
|
18 |
+
|
19 |
+
# 2.8.0 =
|
20 |
+
|
21 |
+
* FIX: Localhost now always is a trusted proxy (for standard reverse proxy configurations, however the checkbox "uses a reverse proxy" still needs to be activated.)
|
22 |
+
* FIX: Timezone was overwritten by country data even though the maxmind data had already detected a timezone.
|
23 |
+
* ADD: If the manual datasource is used, the file will continue to be found if the site is moved to another host
|
24 |
+
* Maxmind vendor code was updated to the current version (2.6.0).
|
25 |
+
* PHP 5.4 is now required (due to the maxmind library).
|
26 |
+
|
27 |
+
# 2.7.0 =
|
28 |
+
|
29 |
+
* 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)
|
30 |
+
* ADD: New filter `geoip_detect2_shortcode_country_select_countries` for the country list of `[geoip_detect2_countries]`
|
31 |
+
* 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.
|
32 |
+
* FIX: Compatibility with CF 4.6 (remove deprecated function call)
|
33 |
+
* Maxmind vendor code was updated to the current version (2.4.5).
|
34 |
+
|
35 |
+
# 2.6.0 =
|
36 |
+
|
37 |
+
* ADD: New datasources for Cloudflare & Amazon AWS CloudFront (countries for current IP only).
|
38 |
+
* ADD: Country information (names, lat/lon, continent, localized in the different languages) are now filled in for sources that only detect the country code (Cloudflare, Amazon, hostip.info)
|
39 |
+
* ADD: 2 shortcodes for [Contact Form 7](https://wordpress.org/plugins/contact-form-7/) (a select with all countries `[geoip_detect2_countries mycountry]`, and tracking information for the email text `[geoip_detect2_user_info]`) - see [Documentation](https://github.com/yellowtree/wp-geoip-detect/wiki/API-Documentation#wp-contactform7-shortcodes)
|
40 |
+
* FIX: Cron scheduling is checked every time you visit the plugin page.
|
41 |
+
* FIX: Timezones of US & Canada are now detected more often (if country+state is known)
|
42 |
+
* FIX: Shortcode didn't use current sitelang as default, but always english
|
43 |
+
* Maxmind vendor code was updated to the current version (2.4.2).
|
44 |
+
|
45 |
+
# 2.5.7 =
|
46 |
+
* ADD: Shortcodes can now optionally specifiy the IP: `[geoip_detect2 property="country.isoCode" ip="(ipv4 or ipv6)"]`
|
47 |
+
* ADD: Plugin is now translated into German.
|
48 |
+
* FIX: `geoip_detect2_get_info_from_current_ip()` now also handles the case when REMOTE_ADDR contains multiple IP adresses
|
49 |
+
|
50 |
+
# 2.5.6 =
|
51 |
+
* FIX: Removed noticed concerning open_basedir.
|
52 |
+
|
53 |
+
# 2.5.5 =
|
54 |
+
|
55 |
+
* Clean-up changes to prepare plugin translation.
|
56 |
+
* FIX: Only show the "no database installed" admin notice to admins (props @meitar)
|
57 |
+
|
58 |
+
# 2.5.4 =
|
59 |
+
|
60 |
+
* FIX: Manual datasource filepath handling corrected.
|
61 |
+
* FIX: Potential incompability with BuddyPress removed.
|
62 |
+
|
63 |
+
# 2.5.3 =
|
64 |
+
|
65 |
+
* FIX: (Security) Add nonces to backend to avoid CSRF (thanks to Gerard Arall).
|
66 |
+
* FIX: Do not use PHP shortcode tags (<?=) as some servers do not support it with PHP 5.3
|
67 |
+
* Maxmind vendor code was updated to the current version (2.3.3).
|
68 |
+
|
69 |
+
# 2.5.2 =
|
70 |
+
* FIX: Also disallow proxy caching via HTTP header, if possible.
|
71 |
+
* NEW: Shortcodes for the other API functions: `[geoip_detect2_get_current_source_description]`, `[geoip_detect2_get_client_ip]`, and `[geoip_detect2_get_external_ip_adress]`
|
72 |
+
* FIX: geoip_detect2_get_external_ip_adress() : do not filter if $unfiltered is true.
|
73 |
+
|
74 |
+
# 2.5.1 =
|
75 |
+
* FIX: Upgrade script did change the source.
|
76 |
+
* FIX: Page caching is only disabled on upgrade when `set_css_country` is disabled.
|
77 |
+
|
78 |
+
# 2.5.0 =
|
79 |
+
* CHANGE: The parameter $skipCache is now $options['skipCache']. Using $skipCache is deprecated, but still works.
|
80 |
+
* NEW: $options['timeout'] for Web-API lookups can now be specified.
|
81 |
+
* FIX: Hostip.info did not set traits->ipAddress
|
82 |
+
* FIX: Hostip.info does not include data for IPv6. Add a lookup error message.
|
83 |
+
* NEW: Disable page caching if geoip-API was called (this is configurable in the options). (Supported plugins: WP Super Cache, W3 Total Cache, ZenCache, and possibly others)
|
84 |
+
* Maxmind vendor code was updated to the current version (2.3.1).
|
85 |
+
|
86 |
+
# 2.4.3 =
|
87 |
+
* FIX: Options Page: The checkboxes didn't show (even though the option was saved) since 2.4.0
|
88 |
+
* NEW: A fixed external IP can now be specified on the options page. (Useful in development scenarios without internet, or mixed internet/intranet cases. You can also use this to speed up things on the production server if you know the IP will not change.)
|
89 |
+
* NEW: Hidden feature/side-effect: Clicking on save in the General Options section also empties the external IP cache.
|
90 |
+
|
91 |
+
# 2.4.2 =
|
92 |
+
* FIX: Trim whitespace of IP adress.
|
93 |
+
* FIX: some PHP notices.
|
94 |
+
* FIX: The Installation message "No database installed" failed to install the Maxmind database since 2.4.0
|
95 |
+
* NEW: Show IPv6-not-supported notice.
|
96 |
+
* FIX: Add empty fallback functions in case the plugin requirements are not met. (To avoid fatal errors.)
|
97 |
+
|
98 |
+
# 2.4.1 =
|
99 |
+
* FIX: Revert IPv6 check. (Sorry for this. I thought PHP compiled without IPv6 would be esoteric.)
|
100 |
+
|
101 |
+
# 2.4.0 =
|
102 |
+
This is a major refactor in order to support multiple sources properly. The Lookup and the Options were seperated into 2 screens (accessible in the menu under `Tools` and `Options`, respectively.)
|
103 |
+
|
104 |
+
* NEW: Add a Cache for Web-API-Requests. Consequently, the function geoip_detect2_get_info_from_ip() received a new parameter "$skipCache" to skip this cache if not needed. You can check if the result is coming from the cache by checking $result->extra->cached (it is 0 when not cached, UNIX timestamp of cache event otherwise).
|
105 |
+
* This also applies to the shortcode API (`[geoip_detect2 property="extra.cached" skip_cache="true"]`)
|
106 |
+
* NEW: Error messages during lookup are now in `$record->extra->error`.
|
107 |
+
* NEW: Experimental support for the Maxmind Precision API.
|
108 |
+
* NEW: Shortcodes now also support fallback languages. (`[geoip_detect2 property="country" lang="fr,de"]`)
|
109 |
+
* FIX: Check for IPv6 support for PHP.
|
110 |
+
* FIX: Country data now also get timezones.
|
111 |
+
|
112 |
+
# 2.3.1 =
|
113 |
+
* NEW: API function geoip_detect2_get_current_source_description() (as there are different sources to choose from now)
|
114 |
+
* FIX: Show error message if PHP < 5.3 (instead of fatal error)
|
115 |
+
|
116 |
+
# 2.3.0 =
|
117 |
+
* NEW: Add HostIP.info-Support
|
118 |
+
|
119 |
+
# 2.2.0 =
|
120 |
+
* FIX: Update Maxmind Reader to 1.0.3 (fixing issues when the PHP extension mbstring was not installed)
|
121 |
+
* NEW: Commercial databases are now supported. You can specify a file path in the options.
|
122 |
+
* NEW: A country database (lite or commercial) database now works as well.
|
123 |
+
* NEW:
|
124 |
+
License is now displayed before install.
|
125 |
+
|
126 |
+
# 2.1.2 =
|
127 |
+
* FIX: Show error message if PHP < 5.3 (instead of fatal error)
|
128 |
+
* FIX: Support multiple proxies (but currently only one reverse proxy)
|
129 |
+
|
130 |
+
# 2.1.1 =
|
131 |
+
* FIX: Notice "Database missing" should not show during/right after database update.
|
132 |
+
|
133 |
+
# 2.1.0 =
|
134 |
+
* NEW: A nagging admin notice shows up on every wp-admin page when no database is installed (yet).
|
135 |
+
|
136 |
+
# 2.0.1 =
|
137 |
+
* NEW: Using v2 version of the API.
|
138 |
+
See Migration Guide at [Github](https://github.com/yellowtree/wp-geoip-detect/wiki/How-to-migrate-from-v1-to-v2)
|
139 |
+
|
140 |
+
Other changes:
|
141 |
+
|
142 |
+
* NEW: The v2-functions now support location names in other locales. By default, they return the current site language if possible.
|
143 |
+
* NEW: The new shortcode [geoip_detect2 ...] also supports a "lang"-Attribute.
|
144 |
+
* NEW: IPv6 addresses are now supported as well.
|
145 |
+
* Legacy function names and shortcode should work in most cases. For details check the guide above.
|
146 |
+
|
147 |
+
# 2.0.0 =
|
148 |
+
|
149 |
+
(Was not released on wordpress.org to make sure that development releases get this update as well.)
|
150 |
+
|
151 |
+
# 1.8 =
|
152 |
+
* NEW: Support reverse proxies (you have to enable it in the plugin options.)
|
153 |
+
* NEW: Shortcode now has a default value when no information for this IP found.
|
154 |
+
|
155 |
+
# 1.7.1 =
|
156 |
+
* FIX: Fatal error on cron run
|
157 |
+
|
158 |
+
# 1.7 =
|
159 |
+
* FIX: Schedule Database update to do in background immediately after plugin installation/re-activation.
|
160 |
+
* FIX: Longitude can be smaller than -90
|
161 |
+
|
162 |
+
# 1.6 =
|
163 |
+
* NEW: Can add a country- and continent-specific class on the body tag. You need to activate this in the options.
|
164 |
+
* FIX: Automatic weekly update. (Didn't work on all installations).
|
165 |
+
* FIX: Do not include Maxmind Libraries again if already included by another plugin/theme
|
166 |
+
|
167 |
+
# 1.5 =
|
168 |
+
* FIX: Automatic weekly update. Go to the plugin page (Tools menu) to verify that an update is planned.
|
169 |
+
|
170 |
+
# 1.4 =
|
171 |
+
* Feature: Add shortcode [geoip_detect property="(property name)"] for direct use in posts/pages
|
172 |
+
|
173 |
+
# 1.3 =
|
174 |
+
* FIX: Manual install works again (was broken since 1.2)
|
175 |
+
|
176 |
+
# 1.2 =
|
177 |
+
* FIX: property region_name is now filled again (was broken since 1.1)
|
178 |
+
|
179 |
+
# 1.1 =
|
180 |
+
* Add function `geoip_detect_get_external_ip_adress()`: Ask a webservice to tell me the external IP of the webserver.
|
181 |
+
* New filter: When developing locally, the external IP is used to determine the geographic location.
|
182 |
+
|
183 |
+
# 1.0 =
|
184 |
+
* First working release.
|
admin-ui.php
CHANGED
@@ -1,7 +1,7 @@
|
|
1 |
<?php
|
2 |
/*
|
3 |
Copyright 2013-2018 Yellow Tree, Siegen, Germany
|
4 |
-
Author: Benjamin Pick (
|
5 |
|
6 |
This program is free software; you can redistribute it and/or modify
|
7 |
it under the terms of the GNU General Public License as published by
|
@@ -50,7 +50,7 @@ function geoip_detect_lookup_page()
|
|
50 |
{
|
51 |
if (!is_admin())
|
52 |
return;
|
53 |
-
|
54 |
$ip_lookup_result = false;
|
55 |
$message = '';
|
56 |
|
@@ -62,11 +62,11 @@ function geoip_detect_lookup_page()
|
|
62 |
$request_ip = $_POST['ip'];
|
63 |
$request_skipCache = !empty($_POST['skip_cache']);
|
64 |
$options = array('skipCache' => $request_skipCache);
|
65 |
-
|
66 |
$request_locales = null;
|
67 |
if (!empty($_POST['locales']))
|
68 |
$request_locales = explode(',', $_POST['locales']);
|
69 |
-
|
70 |
$start = microtime(true);
|
71 |
$ip_lookup_result = geoip_detect2_get_info_from_ip($request_ip, $request_locales, $options);
|
72 |
$end = microtime(true);
|
@@ -75,45 +75,51 @@ function geoip_detect_lookup_page()
|
|
75 |
break;
|
76 |
}
|
77 |
}
|
78 |
-
|
79 |
include_once(GEOIP_PLUGIN_DIR . '/views/lookup.php');
|
80 |
}
|
81 |
|
82 |
function geoip_detect_option_page() {
|
83 |
if (!is_admin() || !current_user_can('manage_options'))
|
84 |
return;
|
85 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
86 |
$registry = DataSourceRegistry::getInstance();
|
87 |
$sources = $registry->getAllSources();
|
88 |
-
|
89 |
$message = '';
|
90 |
-
|
91 |
$numeric_options = array('set_css_country', 'has_reverse_proxy', 'disable_pagecache');
|
92 |
-
$text_options = array('external_ip');
|
93 |
$option_names = array_merge($numeric_options, $text_options);
|
94 |
-
|
95 |
-
if (geoip_detect_verify_nonce()) {
|
96 |
switch(@$_POST['action'])
|
97 |
{
|
98 |
case 'update':
|
99 |
$registry->setCurrentSource('auto');
|
100 |
-
|
101 |
$s = new \YellowTree\GeoipDetect\DataSources\Auto\AutoDataSource();
|
102 |
$ret = $s->maxmindUpdate();
|
103 |
-
|
104 |
if ($ret === true)
|
105 |
$message .= __('Updated successfully.', 'geoip-detect');
|
106 |
else
|
107 |
$message .= __('File was not updated', 'geoip-detect') .': '. $ret;
|
108 |
-
|
109 |
break;
|
110 |
-
|
111 |
case 'choose':
|
112 |
$registry->setCurrentSource($_POST['options']['source']);
|
113 |
break;
|
114 |
-
|
115 |
-
|
116 |
-
case 'options-source':
|
117 |
$messages = array();
|
118 |
foreach ($sources as $s) {
|
119 |
$ret = $s->saveParameters($_POST);
|
@@ -123,13 +129,13 @@ function geoip_detect_option_page() {
|
|
123 |
}
|
124 |
if ($messages)
|
125 |
$message .= implode('<br />', $messages);
|
126 |
-
|
127 |
break;
|
128 |
-
|
129 |
-
case 'options':
|
130 |
// Empty IP Cache
|
131 |
delete_transient('geoip_detect_external_ip');
|
132 |
-
|
133 |
if (!empty($_POST['options']['external_ip'])) {
|
134 |
if (!geoip_detect_is_ip($_POST['options']['external_ip'])) {
|
135 |
$message .= 'The external IP "' . esc_html($_POST['options']['external_ip']) . '" is not a valid IP.';
|
@@ -138,8 +144,8 @@ function geoip_detect_option_page() {
|
|
138 |
$message .= 'Warning: The external IP "' . esc_html($_POST['options']['external_ip']) . '" is not a public internet IP, so it will probably not work.';
|
139 |
}
|
140 |
}
|
141 |
-
|
142 |
-
|
143 |
foreach ($option_names as $opt_name) {
|
144 |
if (in_array($opt_name, $numeric_options))
|
145 |
$opt_value = isset($_POST['options'][$opt_name]) ? (int) $_POST['options'][$opt_name] : 0;
|
@@ -152,13 +158,17 @@ function geoip_detect_option_page() {
|
|
152 |
}
|
153 |
|
154 |
$currentSource = $registry->getCurrentSource();
|
155 |
-
|
156 |
$wp_options = array();
|
157 |
foreach ($option_names as $opt_name) {
|
158 |
$wp_options[$opt_name] = get_option('geoip-detect-'. $opt_name);
|
159 |
}
|
160 |
-
|
161 |
$ipv6_supported = GEOIP_DETECT_IPV6_SUPPORTED;
|
162 |
-
|
163 |
include_once(GEOIP_PLUGIN_DIR . '/views/options.php');
|
164 |
}
|
|
|
|
|
|
|
|
1 |
<?php
|
2 |
/*
|
3 |
Copyright 2013-2018 Yellow Tree, Siegen, Germany
|
4 |
+
Author: Benjamin Pick (wp-geoip-detect| |posteo.de)
|
5 |
|
6 |
This program is free software; you can redistribute it and/or modify
|
7 |
it under the terms of the GNU General Public License as published by
|
50 |
{
|
51 |
if (!is_admin())
|
52 |
return;
|
53 |
+
|
54 |
$ip_lookup_result = false;
|
55 |
$message = '';
|
56 |
|
62 |
$request_ip = $_POST['ip'];
|
63 |
$request_skipCache = !empty($_POST['skip_cache']);
|
64 |
$options = array('skipCache' => $request_skipCache);
|
65 |
+
|
66 |
$request_locales = null;
|
67 |
if (!empty($_POST['locales']))
|
68 |
$request_locales = explode(',', $_POST['locales']);
|
69 |
+
|
70 |
$start = microtime(true);
|
71 |
$ip_lookup_result = geoip_detect2_get_info_from_ip($request_ip, $request_locales, $options);
|
72 |
$end = microtime(true);
|
75 |
break;
|
76 |
}
|
77 |
}
|
78 |
+
|
79 |
include_once(GEOIP_PLUGIN_DIR . '/views/lookup.php');
|
80 |
}
|
81 |
|
82 |
function geoip_detect_option_page() {
|
83 |
if (!is_admin() || !current_user_can('manage_options'))
|
84 |
return;
|
85 |
+
|
86 |
+
switch (@$_GET['geoip_detect_part']) {
|
87 |
+
case 'client-ip':
|
88 |
+
return geoip_detect_option_client_ip_page();
|
89 |
+
break;
|
90 |
+
}
|
91 |
+
|
92 |
$registry = DataSourceRegistry::getInstance();
|
93 |
$sources = $registry->getAllSources();
|
94 |
+
|
95 |
$message = '';
|
96 |
+
|
97 |
$numeric_options = array('set_css_country', 'has_reverse_proxy', 'disable_pagecache');
|
98 |
+
$text_options = array('external_ip', 'trusted_proxy_ips');
|
99 |
$option_names = array_merge($numeric_options, $text_options);
|
100 |
+
|
101 |
+
if (geoip_detect_verify_nonce()) {
|
102 |
switch(@$_POST['action'])
|
103 |
{
|
104 |
case 'update':
|
105 |
$registry->setCurrentSource('auto');
|
106 |
+
|
107 |
$s = new \YellowTree\GeoipDetect\DataSources\Auto\AutoDataSource();
|
108 |
$ret = $s->maxmindUpdate();
|
109 |
+
|
110 |
if ($ret === true)
|
111 |
$message .= __('Updated successfully.', 'geoip-detect');
|
112 |
else
|
113 |
$message .= __('File was not updated', 'geoip-detect') .': '. $ret;
|
114 |
+
|
115 |
break;
|
116 |
+
|
117 |
case 'choose':
|
118 |
$registry->setCurrentSource($_POST['options']['source']);
|
119 |
break;
|
120 |
+
|
121 |
+
|
122 |
+
case 'options-source':
|
123 |
$messages = array();
|
124 |
foreach ($sources as $s) {
|
125 |
$ret = $s->saveParameters($_POST);
|
129 |
}
|
130 |
if ($messages)
|
131 |
$message .= implode('<br />', $messages);
|
132 |
+
|
133 |
break;
|
134 |
+
|
135 |
+
case 'options':
|
136 |
// Empty IP Cache
|
137 |
delete_transient('geoip_detect_external_ip');
|
138 |
+
|
139 |
if (!empty($_POST['options']['external_ip'])) {
|
140 |
if (!geoip_detect_is_ip($_POST['options']['external_ip'])) {
|
141 |
$message .= 'The external IP "' . esc_html($_POST['options']['external_ip']) . '" is not a valid IP.';
|
144 |
$message .= 'Warning: The external IP "' . esc_html($_POST['options']['external_ip']) . '" is not a public internet IP, so it will probably not work.';
|
145 |
}
|
146 |
}
|
147 |
+
|
148 |
+
|
149 |
foreach ($option_names as $opt_name) {
|
150 |
if (in_array($opt_name, $numeric_options))
|
151 |
$opt_value = isset($_POST['options'][$opt_name]) ? (int) $_POST['options'][$opt_name] : 0;
|
158 |
}
|
159 |
|
160 |
$currentSource = $registry->getCurrentSource();
|
161 |
+
|
162 |
$wp_options = array();
|
163 |
foreach ($option_names as $opt_name) {
|
164 |
$wp_options[$opt_name] = get_option('geoip-detect-'. $opt_name);
|
165 |
}
|
166 |
+
|
167 |
$ipv6_supported = GEOIP_DETECT_IPV6_SUPPORTED;
|
168 |
+
|
169 |
include_once(GEOIP_PLUGIN_DIR . '/views/options.php');
|
170 |
}
|
171 |
+
|
172 |
+
function geoip_detect_option_client_ip_page() {
|
173 |
+
include_once(GEOIP_PLUGIN_DIR . '/views/client-ip.php');
|
174 |
+
}
|
api.php
CHANGED
@@ -1,7 +1,7 @@
|
|
1 |
<?php
|
2 |
/*
|
3 |
Copyright 2013-2018 Yellow Tree, Siegen, Germany
|
4 |
-
Author: Benjamin Pick (
|
5 |
|
6 |
This program is free software; you can redistribute it and/or modify
|
7 |
it under the terms of the GNU General Public License as published by
|
@@ -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 |
/**
|
24 |
* Get Geo-Information for a specific IP
|
@@ -28,10 +29,10 @@ use YellowTree\GeoipDetect\DataSources\DataSourceRegistry;
|
|
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)
|
34 |
-
*
|
35 |
* @see https://github.com/maxmind/GeoIP2-php API Usage
|
36 |
* @see http://dev.maxmind.com/geoip/geoip2/web-services/ API Documentation
|
37 |
*
|
@@ -43,34 +44,34 @@ use YellowTree\GeoipDetect\DataSources\DataSourceRegistry;
|
|
43 |
function geoip_detect2_get_info_from_ip($ip, $locales = null, $options = array()) {
|
44 |
_geoip_maybe_disable_pagecache();
|
45 |
// 1) Processing the parameters.
|
46 |
-
|
47 |
$options = _geoip_detect2_process_options($options);
|
48 |
|
49 |
/**
|
50 |
* Filter: geoip_detect2_locales
|
51 |
-
*
|
52 |
-
* @param array $locales The locales that were passed to the function
|
53 |
*/
|
54 |
$locales = apply_filters('geoip_detect2_locales', $locales);
|
55 |
-
|
56 |
-
|
57 |
// 2) Doing the Lookup
|
58 |
$data = array();
|
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) {
|
66 |
|
67 |
$reader = _geoip_detect2_get_reader(array('en') /* will be replaced anyway */, true, $outSourceId, $options);
|
68 |
-
|
69 |
$lookupError = '';
|
70 |
$record = _geoip_detect2_get_record_from_reader($reader, $ip, $lookupError);
|
71 |
-
|
72 |
$data = _geoip_detect2_record_enrich_data($record, $ip, $outSourceId, $lookupError);
|
73 |
-
|
74 |
if (WP_DEBUG && !GEOIP_DETECT_DOING_UNIT_TESTS && $lookupError) {
|
75 |
trigger_error($lookupError, E_USER_NOTICE);
|
76 |
}
|
@@ -79,17 +80,17 @@ function geoip_detect2_get_info_from_ip($ip, $locales = null, $options = array()
|
|
79 |
if (!$lookupError)
|
80 |
_geoip_detect2_add_data_to_cache($data, $ip);
|
81 |
}
|
82 |
-
|
83 |
-
|
84 |
// 3) Returning the data
|
85 |
-
|
86 |
// Always return a city record for API compatability. City attributes etc. return empty values.
|
87 |
$record = new \YellowTree\GeoipDetect\DataSources\City($data, $locales);
|
88 |
-
|
89 |
/**
|
90 |
* Filter: geoip_detect2_record_information
|
91 |
* Use geoip_detect2_record_data instead if you want to modify the data.
|
92 |
-
*
|
93 |
* @return \YellowTree\GeoipDetect\DataSources\City
|
94 |
*/
|
95 |
$record = apply_filters('geoip_detect2_record_information', $record, $ip, $locales);
|
@@ -105,7 +106,7 @@ function geoip_detect2_get_info_from_ip($ip, $locales = null, $options = array()
|
|
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 |
*
|
@@ -122,14 +123,14 @@ function geoip_detect2_get_info_from_current_ip($locales = null, $options = arra
|
|
122 |
/**
|
123 |
* Get the Reader class of the currently chosen source.
|
124 |
* (Use this if you want to use other methods than "city" or otherwise customize behavior.)
|
125 |
-
*
|
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
|
@@ -145,7 +146,7 @@ function geoip_detect2_get_reader($locales = null, $options = array()) {
|
|
145 |
* Return a human-readable label of the currently chosen source.
|
146 |
* @param string|\YellowTree\GeoipDetect\DataSources\City Id of the source or the returned record
|
147 |
* @return string The label.
|
148 |
-
*
|
149 |
* @since 2.3.1
|
150 |
* @since 2.4.0 new parameter $source
|
151 |
*/
|
@@ -159,7 +160,7 @@ function geoip_detect2_get_current_source_description($source = null) {
|
|
159 |
} else {
|
160 |
$source = $registry->getSource($source);
|
161 |
}
|
162 |
-
|
163 |
if ($source) {
|
164 |
return $source->getShortLabel();
|
165 |
}
|
@@ -169,88 +170,56 @@ function geoip_detect2_get_current_source_description($source = null) {
|
|
169 |
/**
|
170 |
* Get client IP (even if it is behind a reverse proxy)
|
171 |
* For security reasons, the reverse proxy usage has to be enabled on the settings page.
|
172 |
-
*
|
173 |
* @return string Client Ip (IPv4 or IPv6)
|
174 |
-
*
|
175 |
* @since 2.0.0
|
176 |
*/
|
177 |
function geoip_detect2_get_client_ip() {
|
178 |
_geoip_maybe_disable_pagecache();
|
179 |
-
|
180 |
-
$
|
181 |
-
|
182 |
-
|
183 |
-
|
184 |
-
|
185 |
-
|
186 |
-
|
187 |
-
|
188 |
-
|
189 |
-
|
190 |
-
$ip_list = explode(',', @$_SERVER["HTTP_X_FORWARDED_FOR"]);
|
191 |
-
$ip_list = array_map('geoip_detect_normalize_ip', $ip_list);
|
192 |
-
|
193 |
-
// TODO: Expose option to UI. comma-seperated list of IPv4 and v6 adresses.
|
194 |
-
$trusted_proxies = explode(',', get_option('geoip-detect-trusted_proxy_ips'));
|
195 |
-
|
196 |
-
// Always trust localhost
|
197 |
-
$trusted_proxies[] = '';
|
198 |
-
$trusted_proxies[] = '::1';
|
199 |
-
$trusted_proxies[] = '127.0.0.1';
|
200 |
-
|
201 |
-
$trusted_proxies = array_map('geoip_detect_normalize_ip', $trusted_proxies);
|
202 |
-
$ip_list[] = $ip;
|
203 |
-
|
204 |
-
$ip_list = array_diff($ip_list, $trusted_proxies);
|
205 |
-
}
|
206 |
-
// Fallback IP
|
207 |
-
array_unshift($ip_list, '::1');
|
208 |
-
|
209 |
-
// Each Proxy server append their information at the end, so the last IP is most trustworthy.
|
210 |
-
$ip = end($ip_list);
|
211 |
-
$ip = geoip_detect_normalize_ip($ip);
|
212 |
-
|
213 |
-
if (!$ip)
|
214 |
-
$ip = '::1'; // By default, use localhost
|
215 |
-
|
216 |
-
// @deprecated: this filter was added by mistake
|
217 |
-
$ip = apply_filters('geoip2_detect2_client_ip', $ip, $ip_list);
|
218 |
-
// this is the correct one!
|
219 |
-
$ip = apply_filters('geoip_detect2_client_ip', $ip, $ip_list);
|
220 |
-
|
221 |
-
return $ip;
|
222 |
}
|
223 |
|
224 |
/**
|
225 |
* Sometimes we can only see an local IP adress (local development environment.)
|
226 |
* In this case we need to ask an internet server which IP adress our internet connection has.
|
227 |
-
*
|
228 |
* @param boolean $unfiltered If true, do not check the options for an external adress. (Default: false)
|
229 |
* @return string The detected IPv4 Adress. If none is found, '0.0.0.0' is returned instead.
|
230 |
-
*
|
231 |
* @since 2.0.0
|
232 |
* @since 2.4.3 Reading option 'external_ip' first.
|
233 |
* @since 2.5.2 New param $unfiltered that can bypass the option.
|
234 |
*/
|
235 |
function geoip_detect2_get_external_ip_adress($unfiltered = false) {
|
236 |
$ip_cache = '';
|
237 |
-
|
238 |
if (!$unfiltered)
|
239 |
$ip_cache = get_option('geoip-detect-external_ip');
|
240 |
-
|
241 |
if (!$ip_cache)
|
242 |
$ip_cache = get_transient('geoip_detect_external_ip');
|
243 |
|
244 |
if (!$ip_cache) {
|
245 |
$ip_cache = _geoip_detect_get_external_ip_adress_without_cache();
|
246 |
-
|
247 |
$expiryTime = GEOIP_DETECT_IP_CACHE_TIME;
|
248 |
if (empty($ip_cache) || $ip_cache === '0.0.0.0')
|
249 |
$expiryTime = GEOIP_DETECT_IP_EMPTY_CACHE_TIME;
|
250 |
-
|
251 |
set_transient('geoip_detect_external_ip', $ip_cache, $expiryTime);
|
252 |
}
|
253 |
-
|
254 |
$ip_cache = apply_filters('geoip_detect_get_external_ip_adress', $ip_cache);
|
255 |
|
256 |
return $ip_cache;
|
1 |
<?php
|
2 |
/*
|
3 |
Copyright 2013-2018 Yellow Tree, Siegen, Germany
|
4 |
+
Author: Benjamin Pick (wp-geoip-detect| |posteo.de)
|
5 |
|
6 |
This program is free software; you can redistribute it and/or modify
|
7 |
it under the terms of the GNU General Public License as published by
|
19 |
*/
|
20 |
|
21 |
use YellowTree\GeoipDetect\DataSources\DataSourceRegistry;
|
22 |
+
use YellowTree\GeoipDetect\Lib\GetClientIp;
|
23 |
|
24 |
/**
|
25 |
* Get Geo-Information for a specific IP
|
29 |
* @param array Property names with options.
|
30 |
* @param boolean $skipCache TRUE: Do not use cache for this request. (Default: FALSE)
|
31 |
* @param string $source Change the source for this request only. (Valid values: 'auto', 'manual', 'precision', 'header', 'hostinfo')
|
32 |
+
* @param float $timeout Total transaction timeout in seconds (Precision+HostIP.info API only)
|
33 |
* @param int $connectTimeout Initial connection timeout in seconds (Precision API only)
|
34 |
* @return YellowTree\GeoipDetect\DataSources\City GeoInformation. (Actually, this is a subclass of \GeoIp2\Model\City)
|
35 |
+
*
|
36 |
* @see https://github.com/maxmind/GeoIP2-php API Usage
|
37 |
* @see http://dev.maxmind.com/geoip/geoip2/web-services/ API Documentation
|
38 |
*
|
44 |
function geoip_detect2_get_info_from_ip($ip, $locales = null, $options = array()) {
|
45 |
_geoip_maybe_disable_pagecache();
|
46 |
// 1) Processing the parameters.
|
47 |
+
|
48 |
$options = _geoip_detect2_process_options($options);
|
49 |
|
50 |
/**
|
51 |
* Filter: geoip_detect2_locales
|
52 |
+
*
|
53 |
+
* @param array $locales The locales that were passed to the function
|
54 |
*/
|
55 |
$locales = apply_filters('geoip_detect2_locales', $locales);
|
56 |
+
|
57 |
+
|
58 |
// 2) Doing the Lookup
|
59 |
$data = array();
|
60 |
+
|
61 |
// Have a look at the cache first
|
62 |
if (!$options['skipCache']) {
|
63 |
$data = _geoip_detect2_get_data_from_cache($ip, $options['source']);
|
64 |
}
|
65 |
+
|
66 |
if (!$data) {
|
67 |
|
68 |
$reader = _geoip_detect2_get_reader(array('en') /* will be replaced anyway */, true, $outSourceId, $options);
|
69 |
+
|
70 |
$lookupError = '';
|
71 |
$record = _geoip_detect2_get_record_from_reader($reader, $ip, $lookupError);
|
72 |
+
|
73 |
$data = _geoip_detect2_record_enrich_data($record, $ip, $outSourceId, $lookupError);
|
74 |
+
|
75 |
if (WP_DEBUG && !GEOIP_DETECT_DOING_UNIT_TESTS && $lookupError) {
|
76 |
trigger_error($lookupError, E_USER_NOTICE);
|
77 |
}
|
80 |
if (!$lookupError)
|
81 |
_geoip_detect2_add_data_to_cache($data, $ip);
|
82 |
}
|
83 |
+
|
84 |
+
|
85 |
// 3) Returning the data
|
86 |
+
|
87 |
// Always return a city record for API compatability. City attributes etc. return empty values.
|
88 |
$record = new \YellowTree\GeoipDetect\DataSources\City($data, $locales);
|
89 |
+
|
90 |
/**
|
91 |
* Filter: geoip_detect2_record_information
|
92 |
* Use geoip_detect2_record_data instead if you want to modify the data.
|
93 |
+
*
|
94 |
* @return \YellowTree\GeoipDetect\DataSources\City
|
95 |
*/
|
96 |
$record = apply_filters('geoip_detect2_record_information', $record, $ip, $locales);
|
106 |
* @param array Property names with options.
|
107 |
* @param boolean $skipCache TRUE: Do not use cache for this request. (Default: FALSE)
|
108 |
* @param string $source Change the source for this request only. (Valid values: 'auto', 'manual', 'precision', 'header', 'hostinfo')
|
109 |
+
* @param float $timeout Total transaction timeout in seconds (Precision+HostIP.info API only)
|
110 |
* @param int $connectTimeout Initial connection timeout in seconds (Precision API only)
|
111 |
* @return YellowTree\GeoipDetect\DataSources\City GeoInformation.
|
112 |
*
|
123 |
/**
|
124 |
* Get the Reader class of the currently chosen source.
|
125 |
* (Use this if you want to use other methods than "city" or otherwise customize behavior.)
|
126 |
+
*
|
127 |
* @param array(string) List of locale codes to use in name property
|
128 |
* from most preferred to least preferred. (Default: Site language, en)
|
129 |
* @param array Property names with options.
|
130 |
* @param string $source Change the source for this request only. (Valid values: 'auto', 'manual', 'precision', 'header', 'hostinfo')
|
131 |
+
* @param float $timeout Total transaction timeout in seconds (Precision+HostIP.info API only)
|
132 |
* @param int $connectTimeout Initial connection timeout in seconds (Precision API only)
|
133 |
+
*
|
134 |
* @since 2.0.0
|
135 |
* @since 2.5.0 new parameter $options
|
136 |
* @since 2.7.0 Parameter $options['source'] has been introduced
|
146 |
* Return a human-readable label of the currently chosen source.
|
147 |
* @param string|\YellowTree\GeoipDetect\DataSources\City Id of the source or the returned record
|
148 |
* @return string The label.
|
149 |
+
*
|
150 |
* @since 2.3.1
|
151 |
* @since 2.4.0 new parameter $source
|
152 |
*/
|
160 |
} else {
|
161 |
$source = $registry->getSource($source);
|
162 |
}
|
163 |
+
|
164 |
if ($source) {
|
165 |
return $source->getShortLabel();
|
166 |
}
|
170 |
/**
|
171 |
* Get client IP (even if it is behind a reverse proxy)
|
172 |
* For security reasons, the reverse proxy usage has to be enabled on the settings page.
|
173 |
+
*
|
174 |
* @return string Client Ip (IPv4 or IPv6)
|
175 |
+
*
|
176 |
* @since 2.0.0
|
177 |
*/
|
178 |
function geoip_detect2_get_client_ip() {
|
179 |
_geoip_maybe_disable_pagecache();
|
180 |
+
|
181 |
+
static $helper = null;
|
182 |
+
if (is_null($helper) || defined('GEOIP_DETECT_DOING_UNIT_TESTS')) {
|
183 |
+
$helper = new GetClientIp();
|
184 |
+
|
185 |
+
// TODO: Expose option to UI. comma-seperated list of IPv4 and v6 adresses.
|
186 |
+
$trusted_proxies = explode(',', (string) get_option('geoip-detect-trusted_proxy_ips', ''));
|
187 |
+
$helper->addProxiesToWhitelist($trusted_proxies);
|
188 |
+
}
|
189 |
+
$useReverseProxy = get_option('geoip-detect-has_reverse_proxy', 0);
|
190 |
+
return $helper->getIp( $useReverseProxy );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
191 |
}
|
192 |
|
193 |
/**
|
194 |
* Sometimes we can only see an local IP adress (local development environment.)
|
195 |
* In this case we need to ask an internet server which IP adress our internet connection has.
|
196 |
+
*
|
197 |
* @param boolean $unfiltered If true, do not check the options for an external adress. (Default: false)
|
198 |
* @return string The detected IPv4 Adress. If none is found, '0.0.0.0' is returned instead.
|
199 |
+
*
|
200 |
* @since 2.0.0
|
201 |
* @since 2.4.3 Reading option 'external_ip' first.
|
202 |
* @since 2.5.2 New param $unfiltered that can bypass the option.
|
203 |
*/
|
204 |
function geoip_detect2_get_external_ip_adress($unfiltered = false) {
|
205 |
$ip_cache = '';
|
206 |
+
|
207 |
if (!$unfiltered)
|
208 |
$ip_cache = get_option('geoip-detect-external_ip');
|
209 |
+
|
210 |
if (!$ip_cache)
|
211 |
$ip_cache = get_transient('geoip_detect_external_ip');
|
212 |
|
213 |
if (!$ip_cache) {
|
214 |
$ip_cache = _geoip_detect_get_external_ip_adress_without_cache();
|
215 |
+
|
216 |
$expiryTime = GEOIP_DETECT_IP_CACHE_TIME;
|
217 |
if (empty($ip_cache) || $ip_cache === '0.0.0.0')
|
218 |
$expiryTime = GEOIP_DETECT_IP_EMPTY_CACHE_TIME;
|
219 |
+
|
220 |
set_transient('geoip_detect_external_ip', $ip_cache, $expiryTime);
|
221 |
}
|
222 |
+
|
223 |
$ip_cache = apply_filters('geoip_detect_get_external_ip_adress', $ip_cache);
|
224 |
|
225 |
return $ip_cache;
|
changelog.txt
ADDED
@@ -0,0 +1,177 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
== Old Changelog ==
|
2 |
+
|
3 |
+
= 2.8.2 =
|
4 |
+
* Maxmind vendor code was updated to the current version (2.7.0).
|
5 |
+
* FIX: There was a fatal error when using PHP 7.2 (thx jj-dev)
|
6 |
+
* FIX: The automatic update of Maxmind Geoip2 Lite City database was fixed.
|
7 |
+
* FIX: Always try to fill in more information into the country information from the GeoNames-DB.
|
8 |
+
|
9 |
+
= 2.8.1 =
|
10 |
+
|
11 |
+
(Was not released on wordpress.org)
|
12 |
+
|
13 |
+
= 2.8.0 =
|
14 |
+
|
15 |
+
* FIX: Localhost now always is a trusted proxy (for standard reverse proxy configurations, however the checkbox "uses a reverse proxy" still needs to be activated.)
|
16 |
+
* FIX: Timezone was overwritten by country data even though the maxmind data had already detected a timezone.
|
17 |
+
* ADD: If the manual datasource is used, the file will continue to be found if the site is moved to another host
|
18 |
+
* Maxmind vendor code was updated to the current version (2.6.0).
|
19 |
+
* PHP 5.4 is now required (due to the maxmind library).
|
20 |
+
|
21 |
+
= 2.7.0 =
|
22 |
+
|
23 |
+
* 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)
|
24 |
+
* ADD: New filter `geoip_detect2_shortcode_country_select_countries` for the country list of `[geoip_detect2_countries]`
|
25 |
+
* 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.
|
26 |
+
* FIX: Compatibility with CF 4.6 (remove deprecated function call)
|
27 |
+
* Maxmind vendor code was updated to the current version (2.4.5).
|
28 |
+
|
29 |
+
= 2.6.0 =
|
30 |
+
|
31 |
+
* ADD: New datasources for Cloudflare & Amazon AWS CloudFront (countries for current IP only).
|
32 |
+
* ADD: Country information (names, lat/lon, continent, localized in the different languages) are now filled in for sources that only detect the country code (Cloudflare, Amazon, hostip.info)
|
33 |
+
* ADD: 2 shortcodes for [Contact Form 7](https://wordpress.org/plugins/contact-form-7/) (a select with all countries `[geoip_detect2_countries mycountry]`, and tracking information for the email text `[geoip_detect2_user_info]`) - see [Documentation](https://github.com/yellowtree/wp-geoip-detect/wiki/API-Documentation#wp-contactform7-shortcodes)
|
34 |
+
* FIX: Cron scheduling is checked every time you visit the plugin page.
|
35 |
+
* FIX: Timezones of US & Canada are now detected more often (if country+state is known)
|
36 |
+
* FIX: Shortcode didn't use current sitelang as default, but always english
|
37 |
+
* Maxmind vendor code was updated to the current version (2.4.2).
|
38 |
+
|
39 |
+
= 2.5.7 =
|
40 |
+
* ADD: Shortcodes can now optionally specifiy the IP: `[geoip_detect2 property="country.isoCode" ip="(ipv4 or ipv6)"]`
|
41 |
+
* ADD: Plugin is now translated into German.
|
42 |
+
* FIX: `geoip_detect2_get_info_from_current_ip()` now also handles the case when REMOTE_ADDR contains multiple IP adresses
|
43 |
+
|
44 |
+
= 2.5.6 =
|
45 |
+
* FIX: Removed noticed concerning open_basedir.
|
46 |
+
|
47 |
+
= 2.5.5 =
|
48 |
+
|
49 |
+
* Clean-up changes to prepare plugin translation.
|
50 |
+
* FIX: Only show the "no database installed" admin notice to admins (props @meitar)
|
51 |
+
|
52 |
+
= 2.5.4 =
|
53 |
+
|
54 |
+
* FIX: Manual datasource filepath handling corrected.
|
55 |
+
* FIX: Potential incompability with BuddyPress removed.
|
56 |
+
|
57 |
+
= 2.5.3 =
|
58 |
+
|
59 |
+
* FIX: (Security) Add nonces to backend to avoid CSRF (thanks to Gerard Arall).
|
60 |
+
* FIX: Do not use PHP shortcode tags (<?=) as some servers do not support it with PHP 5.3
|
61 |
+
* Maxmind vendor code was updated to the current version (2.3.3).
|
62 |
+
|
63 |
+
= 2.5.2 =
|
64 |
+
* FIX: Also disallow proxy caching via HTTP header, if possible.
|
65 |
+
* NEW: Shortcodes for the other API functions: `[geoip_detect2_get_current_source_description]`, `[geoip_detect2_get_client_ip]`, and `[geoip_detect2_get_external_ip_adress]`
|
66 |
+
* FIX: geoip_detect2_get_external_ip_adress() : do not filter if $unfiltered is true.
|
67 |
+
|
68 |
+
= 2.5.1 =
|
69 |
+
* FIX: Upgrade script did change the source.
|
70 |
+
* FIX: Page caching is only disabled on upgrade when `set_css_country` is disabled.
|
71 |
+
|
72 |
+
= 2.5.0 =
|
73 |
+
* CHANGE: The parameter $skipCache is now $options['skipCache']. Using $skipCache is deprecated, but still works.
|
74 |
+
* NEW: $options['timeout'] for Web-API lookups can now be specified.
|
75 |
+
* FIX: Hostip.info did not set traits->ipAddress
|
76 |
+
* FIX: Hostip.info does not include data for IPv6. Add a lookup error message.
|
77 |
+
* NEW: Disable page caching if geoip-API was called (this is configurable in the options). (Supported plugins: WP Super Cache, W3 Total Cache, ZenCache, and possibly others)
|
78 |
+
* Maxmind vendor code was updated to the current version (2.3.1).
|
79 |
+
|
80 |
+
= 2.4.3 =
|
81 |
+
* FIX: Options Page: The checkboxes didn't show (even though the option was saved) since 2.4.0
|
82 |
+
* NEW: A fixed external IP can now be specified on the options page. (Useful in development scenarios without internet, or mixed internet/intranet cases. You can also use this to speed up things on the production server if you know the IP will not change.)
|
83 |
+
* NEW: Hidden feature/side-effect: Clicking on save in the General Options section also empties the external IP cache.
|
84 |
+
|
85 |
+
= 2.4.2 =
|
86 |
+
* FIX: Trim whitespace of IP adress.
|
87 |
+
* FIX: some PHP notices.
|
88 |
+
* FIX: The Installation message "No database installed" failed to install the Maxmind database since 2.4.0
|
89 |
+
* NEW: Show IPv6-not-supported notice.
|
90 |
+
* FIX: Add empty fallback functions in case the plugin requirements are not met. (To avoid fatal errors.)
|
91 |
+
|
92 |
+
= 2.4.1 =
|
93 |
+
* FIX: Revert IPv6 check. (Sorry for this. I thought PHP compiled without IPv6 would be esoteric.)
|
94 |
+
|
95 |
+
= 2.4.0 =
|
96 |
+
This is a major refactor in order to support multiple sources properly. The Lookup and the Options were seperated into 2 screens (accessible in the menu under `Tools` and `Options`, respectively.)
|
97 |
+
|
98 |
+
* NEW: Add a Cache for Web-API-Requests. Consequently, the function geoip_detect2_get_info_from_ip() received a new parameter "$skipCache" to skip this cache if not needed. You can check if the result is coming from the cache by checking $result->extra->cached (it is 0 when not cached, UNIX timestamp of cache event otherwise).
|
99 |
+
* This also applies to the shortcode API (`[geoip_detect2 property="extra.cached" skip_cache="true"]`)
|
100 |
+
* NEW: Error messages during lookup are now in `$record->extra->error`.
|
101 |
+
* NEW: Experimental support for the Maxmind Precision API.
|
102 |
+
* NEW: Shortcodes now also support fallback languages. (`[geoip_detect2 property="country" lang="fr,de"]`)
|
103 |
+
* FIX: Check for IPv6 support for PHP.
|
104 |
+
* FIX: Country data now also get timezones.
|
105 |
+
|
106 |
+
= 2.3.1 =
|
107 |
+
* NEW: API function geoip_detect2_get_current_source_description() (as there are different sources to choose from now)
|
108 |
+
* FIX: Show error message if PHP < 5.3 (instead of fatal error)
|
109 |
+
|
110 |
+
= 2.3.0 =
|
111 |
+
* NEW: Add HostIP.info-Support
|
112 |
+
|
113 |
+
= 2.2.0 =
|
114 |
+
* FIX: Update Maxmind Reader to 1.0.3 (fixing issues when the PHP extension mbstring was not installed)
|
115 |
+
* NEW: Commercial databases are now supported. You can specify a file path in the options.
|
116 |
+
* NEW: A country database (lite or commercial) database now works as well.
|
117 |
+
* NEW: License is now displayed before install.
|
118 |
+
|
119 |
+
= 2.1.2 =
|
120 |
+
* FIX: Show error message if PHP < 5.3 (instead of fatal error)
|
121 |
+
* FIX: Support multiple proxies (but currently only one reverse proxy)
|
122 |
+
|
123 |
+
= 2.1.1 =
|
124 |
+
* FIX: Notice "Database missing" should not show during/right after database update.
|
125 |
+
|
126 |
+
= 2.1.0 =
|
127 |
+
* NEW: A nagging admin notice shows up on every wp-admin page when no database is installed (yet).
|
128 |
+
|
129 |
+
= 2.0.1 =
|
130 |
+
* NEW: Using v2 version of the API.
|
131 |
+
See Migration Guide at [Github](https://github.com/yellowtree/wp-geoip-detect/wiki/How-to-migrate-from-v1-to-v2)
|
132 |
+
|
133 |
+
Other changes:
|
134 |
+
|
135 |
+
* NEW: The v2-functions now support location names in other locales. By default, they return the current site language if possible.
|
136 |
+
* NEW: The new shortcode [geoip_detect2 ...] also supports a "lang"-Attribute.
|
137 |
+
* NEW: IPv6 addresses are now supported as well.
|
138 |
+
* Legacy function names and shortcode should work in most cases. For details check the guide above.
|
139 |
+
|
140 |
+
= 2.0.0 =
|
141 |
+
|
142 |
+
(Was not released on wordpress.org to make sure that development releases get this update as well.)
|
143 |
+
|
144 |
+
= 1.8 =
|
145 |
+
* NEW: Support reverse proxies (you have to enable it in the plugin options.)
|
146 |
+
* NEW: Shortcode now has a default value when no information for this IP found.
|
147 |
+
|
148 |
+
= 1.7.1 =
|
149 |
+
* FIX: Fatal error on cron run
|
150 |
+
|
151 |
+
= 1.7 =
|
152 |
+
* FIX: Schedule Database update to do in background immediately after plugin installation/re-activation.
|
153 |
+
* FIX: Longitude can be smaller than -90
|
154 |
+
|
155 |
+
= 1.6 =
|
156 |
+
* NEW: Can add a country- and continent-specific class on the body tag. You need to activate this in the options.
|
157 |
+
* FIX: Automatic weekly update. (Didn't work on all installations).
|
158 |
+
* FIX: Do not include Maxmind Libraries again if already included by another plugin/theme
|
159 |
+
|
160 |
+
= 1.5 =
|
161 |
+
* FIX: Automatic weekly update. Go to the plugin page (Tools menu) to verify that an update is planned.
|
162 |
+
|
163 |
+
= 1.4 =
|
164 |
+
* Feature: Add shortcode [geoip_detect property="(property name)"] for direct use in posts/pages
|
165 |
+
|
166 |
+
= 1.3 =
|
167 |
+
* FIX: Manual install works again (was broken since 1.2)
|
168 |
+
|
169 |
+
= 1.2 =
|
170 |
+
* FIX: property region_name is now filled again (was broken since 1.1)
|
171 |
+
|
172 |
+
= 1.1 =
|
173 |
+
* Add function `geoip_detect_get_external_ip_adress()`: Ask a webservice to tell me the external IP of the webserver.
|
174 |
+
* New filter: When developing locally, the external IP is used to determine the geographic location.
|
175 |
+
|
176 |
+
= 1.0 =
|
177 |
+
* First working release.
|
check_requirements.php
CHANGED
@@ -1,7 +1,7 @@
|
|
1 |
<?php
|
2 |
/*
|
3 |
Copyright 2013-2018 Yellow Tree, Siegen, Germany
|
4 |
-
Author: Benjamin Pick (
|
5 |
|
6 |
This program is free software; you can redistribute it and/or modify
|
7 |
it under the terms of the GNU General Public License as published by
|
1 |
<?php
|
2 |
/*
|
3 |
Copyright 2013-2018 Yellow Tree, Siegen, Germany
|
4 |
+
Author: Benjamin Pick (wp-geoip-detect| |posteo.de)
|
5 |
|
6 |
This program is free software; you can redistribute it and/or modify
|
7 |
it under the terms of the GNU General Public License as published by
|
composer.lock
CHANGED
@@ -8,16 +8,16 @@
|
|
8 |
"packages": [
|
9 |
{
|
10 |
"name": "composer/ca-bundle",
|
11 |
-
"version": "1.1.
|
12 |
"source": {
|
13 |
"type": "git",
|
14 |
"url": "https://github.com/composer/ca-bundle.git",
|
15 |
-
"reference": "
|
16 |
},
|
17 |
"dist": {
|
18 |
"type": "zip",
|
19 |
-
"url": "https://api.github.com/repos/composer/ca-bundle/zipball/
|
20 |
-
"reference": "
|
21 |
"shasum": ""
|
22 |
},
|
23 |
"require": {
|
@@ -26,7 +26,7 @@
|
|
26 |
"php": "^5.3.2 || ^7.0"
|
27 |
},
|
28 |
"require-dev": {
|
29 |
-
"phpunit/phpunit": "^4.8.35",
|
30 |
"psr/log": "^1.0",
|
31 |
"symfony/process": "^2.5 || ^3.0 || ^4.0"
|
32 |
},
|
@@ -60,29 +60,28 @@
|
|
60 |
"ssl",
|
61 |
"tls"
|
62 |
],
|
63 |
-
"time": "
|
64 |
},
|
65 |
{
|
66 |
"name": "geoip2/geoip2",
|
67 |
-
"version": "v2.
|
68 |
"source": {
|
69 |
"type": "git",
|
70 |
"url": "https://github.com/maxmind/GeoIP2-php.git",
|
71 |
-
"reference": "
|
72 |
},
|
73 |
"dist": {
|
74 |
"type": "zip",
|
75 |
-
"url": "https://api.github.com/repos/maxmind/GeoIP2-php/zipball/
|
76 |
-
"reference": "
|
77 |
"shasum": ""
|
78 |
},
|
79 |
"require": {
|
80 |
"maxmind-db/reader": "~1.0",
|
81 |
-
"maxmind/web-service-common": "~0.
|
82 |
"php": ">=5.4"
|
83 |
},
|
84 |
"require-dev": {
|
85 |
-
"apigen/apigen": "*",
|
86 |
"friendsofphp/php-cs-fixer": "2.*",
|
87 |
"phpunit/phpunit": "4.*",
|
88 |
"squizlabs/php_codesniffer": "3.*"
|
@@ -113,20 +112,20 @@
|
|
113 |
"geolocation",
|
114 |
"maxmind"
|
115 |
],
|
116 |
-
"time": "
|
117 |
},
|
118 |
{
|
119 |
"name": "maxmind-db/reader",
|
120 |
-
"version": "v1.
|
121 |
"source": {
|
122 |
"type": "git",
|
123 |
"url": "https://github.com/maxmind/MaxMind-DB-Reader-php.git",
|
124 |
-
"reference": "
|
125 |
},
|
126 |
"dist": {
|
127 |
"type": "zip",
|
128 |
-
"url": "https://api.github.com/repos/maxmind/MaxMind-DB-Reader-php/zipball/
|
129 |
-
"reference": "
|
130 |
"shasum": ""
|
131 |
},
|
132 |
"require": {
|
@@ -134,7 +133,7 @@
|
|
134 |
},
|
135 |
"require-dev": {
|
136 |
"friendsofphp/php-cs-fixer": "2.*",
|
137 |
-
"phpunit/phpunit": "4.*",
|
138 |
"satooshi/php-coveralls": "1.0.*",
|
139 |
"squizlabs/php_codesniffer": "3.*"
|
140 |
},
|
@@ -169,20 +168,20 @@
|
|
169 |
"geolocation",
|
170 |
"maxmind"
|
171 |
],
|
172 |
-
"time": "
|
173 |
},
|
174 |
{
|
175 |
"name": "maxmind/web-service-common",
|
176 |
-
"version": "v0.
|
177 |
"source": {
|
178 |
"type": "git",
|
179 |
"url": "https://github.com/maxmind/web-service-common-php.git",
|
180 |
-
"reference": "
|
181 |
},
|
182 |
"dist": {
|
183 |
"type": "zip",
|
184 |
-
"url": "https://api.github.com/repos/maxmind/web-service-common-php/zipball/
|
185 |
-
"reference": "
|
186 |
"shasum": ""
|
187 |
},
|
188 |
"require": {
|
@@ -215,7 +214,7 @@
|
|
215 |
],
|
216 |
"description": "Internal MaxMind Web Service API",
|
217 |
"homepage": "https://github.com/maxmind/web-service-common-php",
|
218 |
-
"time": "
|
219 |
}
|
220 |
],
|
221 |
"packages-dev": [],
|
8 |
"packages": [
|
9 |
{
|
10 |
"name": "composer/ca-bundle",
|
11 |
+
"version": "1.1.1",
|
12 |
"source": {
|
13 |
"type": "git",
|
14 |
"url": "https://github.com/composer/ca-bundle.git",
|
15 |
+
"reference": "d2c0a83b7533d6912e8d516756ebd34f893e9169"
|
16 |
},
|
17 |
"dist": {
|
18 |
"type": "zip",
|
19 |
+
"url": "https://api.github.com/repos/composer/ca-bundle/zipball/d2c0a83b7533d6912e8d516756ebd34f893e9169",
|
20 |
+
"reference": "d2c0a83b7533d6912e8d516756ebd34f893e9169",
|
21 |
"shasum": ""
|
22 |
},
|
23 |
"require": {
|
26 |
"php": "^5.3.2 || ^7.0"
|
27 |
},
|
28 |
"require-dev": {
|
29 |
+
"phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5",
|
30 |
"psr/log": "^1.0",
|
31 |
"symfony/process": "^2.5 || ^3.0 || ^4.0"
|
32 |
},
|
60 |
"ssl",
|
61 |
"tls"
|
62 |
],
|
63 |
+
"time": "2018-03-29T19:57:20+00:00"
|
64 |
},
|
65 |
{
|
66 |
"name": "geoip2/geoip2",
|
67 |
+
"version": "v2.9.0",
|
68 |
"source": {
|
69 |
"type": "git",
|
70 |
"url": "https://github.com/maxmind/GeoIP2-php.git",
|
71 |
+
"reference": "a807fbf65212eef5d8d2db1a1b31082b53633d77"
|
72 |
},
|
73 |
"dist": {
|
74 |
"type": "zip",
|
75 |
+
"url": "https://api.github.com/repos/maxmind/GeoIP2-php/zipball/a807fbf65212eef5d8d2db1a1b31082b53633d77",
|
76 |
+
"reference": "a807fbf65212eef5d8d2db1a1b31082b53633d77",
|
77 |
"shasum": ""
|
78 |
},
|
79 |
"require": {
|
80 |
"maxmind-db/reader": "~1.0",
|
81 |
+
"maxmind/web-service-common": "~0.5",
|
82 |
"php": ">=5.4"
|
83 |
},
|
84 |
"require-dev": {
|
|
|
85 |
"friendsofphp/php-cs-fixer": "2.*",
|
86 |
"phpunit/phpunit": "4.*",
|
87 |
"squizlabs/php_codesniffer": "3.*"
|
112 |
"geolocation",
|
113 |
"maxmind"
|
114 |
],
|
115 |
+
"time": "2018-04-10T15:32:59+00:00"
|
116 |
},
|
117 |
{
|
118 |
"name": "maxmind-db/reader",
|
119 |
+
"version": "v1.3.0",
|
120 |
"source": {
|
121 |
"type": "git",
|
122 |
"url": "https://github.com/maxmind/MaxMind-DB-Reader-php.git",
|
123 |
+
"reference": "e042b4f8a2dff41e19019faf16427178b07fbd58"
|
124 |
},
|
125 |
"dist": {
|
126 |
"type": "zip",
|
127 |
+
"url": "https://api.github.com/repos/maxmind/MaxMind-DB-Reader-php/zipball/e042b4f8a2dff41e19019faf16427178b07fbd58",
|
128 |
+
"reference": "e042b4f8a2dff41e19019faf16427178b07fbd58",
|
129 |
"shasum": ""
|
130 |
},
|
131 |
"require": {
|
133 |
},
|
134 |
"require-dev": {
|
135 |
"friendsofphp/php-cs-fixer": "2.*",
|
136 |
+
"phpunit/phpunit": "4.* || 5.*",
|
137 |
"satooshi/php-coveralls": "1.0.*",
|
138 |
"squizlabs/php_codesniffer": "3.*"
|
139 |
},
|
168 |
"geolocation",
|
169 |
"maxmind"
|
170 |
],
|
171 |
+
"time": "2018-02-21T21:23:33+00:00"
|
172 |
},
|
173 |
{
|
174 |
"name": "maxmind/web-service-common",
|
175 |
+
"version": "v0.5.0",
|
176 |
"source": {
|
177 |
"type": "git",
|
178 |
"url": "https://github.com/maxmind/web-service-common-php.git",
|
179 |
+
"reference": "61a9836fa3bb1743ab89752bae5005d71e78c73b"
|
180 |
},
|
181 |
"dist": {
|
182 |
"type": "zip",
|
183 |
+
"url": "https://api.github.com/repos/maxmind/web-service-common-php/zipball/61a9836fa3bb1743ab89752bae5005d71e78c73b",
|
184 |
+
"reference": "61a9836fa3bb1743ab89752bae5005d71e78c73b",
|
185 |
"shasum": ""
|
186 |
},
|
187 |
"require": {
|
214 |
],
|
215 |
"description": "Internal MaxMind Web Service API",
|
216 |
"homepage": "https://github.com/maxmind/web-service-common-php",
|
217 |
+
"time": "2018-02-12T22:31:54+00:00"
|
218 |
}
|
219 |
],
|
220 |
"packages-dev": [],
|
data-sources/auto.php
CHANGED
@@ -1,7 +1,7 @@
|
|
1 |
<?php
|
2 |
/*
|
3 |
Copyright 2013-2018 Yellow Tree, Siegen, Germany
|
4 |
-
Author: Benjamin Pick (
|
5 |
|
6 |
This program is free software; you can redistribute it and/or modify
|
7 |
it under the terms of the GNU General Public License as published by
|
@@ -97,7 +97,7 @@ HTML;
|
|
97 |
|
98 |
$tmpfname = wp_tempnam( $url_filename );
|
99 |
if ( ! $tmpfname )
|
100 |
-
return new \WP_Error('http_no_file', __('Could not create
|
101 |
|
102 |
$headers = array();
|
103 |
$headers['User-Agent'] = GEOIP_DETECT_USER_AGENT;
|
@@ -108,7 +108,7 @@ HTML;
|
|
108 |
$response = wp_safe_remote_get( $url, array('timeout' => 300, 'stream' => true, 'filename' => $tmpfname, 'headers' => $headers ) );
|
109 |
$http_response_code = wp_remote_retrieve_response_code( $response );
|
110 |
if (304 === $http_response_code) {
|
111 |
-
return new \WP_Error( 'http_304', __('It has not changed since last update.', 'geoip-detect') );
|
112 |
}
|
113 |
if (is_wp_error( $response ) || 200 != $http_response_code) {
|
114 |
unlink($tmpfname);
|
1 |
<?php
|
2 |
/*
|
3 |
Copyright 2013-2018 Yellow Tree, Siegen, Germany
|
4 |
+
Author: Benjamin Pick (wp-geoip-detect| |posteo.de)
|
5 |
|
6 |
This program is free software; you can redistribute it and/or modify
|
7 |
it under the terms of the GNU General Public License as published by
|
97 |
|
98 |
$tmpfname = wp_tempnam( $url_filename );
|
99 |
if ( ! $tmpfname )
|
100 |
+
return new \WP_Error('http_no_file', __('Could not create temporary file.', 'geoip-detect'));
|
101 |
|
102 |
$headers = array();
|
103 |
$headers['User-Agent'] = GEOIP_DETECT_USER_AGENT;
|
108 |
$response = wp_safe_remote_get( $url, array('timeout' => 300, 'stream' => true, 'filename' => $tmpfname, 'headers' => $headers ) );
|
109 |
$http_response_code = wp_remote_retrieve_response_code( $response );
|
110 |
if (304 === $http_response_code) {
|
111 |
+
return new \WP_Error( 'http_304', __('It has not changed since the last update.', 'geoip-detect') );
|
112 |
}
|
113 |
if (is_wp_error( $response ) || 200 != $http_response_code) {
|
114 |
unlink($tmpfname);
|
data-sources/header.php
CHANGED
@@ -1,7 +1,7 @@
|
|
1 |
<?php
|
2 |
/*
|
3 |
Copyright 2013-2018 Yellow Tree, Siegen, Germany
|
4 |
-
Author: Benjamin Pick (
|
5 |
|
6 |
This program is free software; you can redistribute it and/or modify
|
7 |
it under the terms of the GNU General Public License as published by
|
1 |
<?php
|
2 |
/*
|
3 |
Copyright 2013-2018 Yellow Tree, Siegen, Germany
|
4 |
+
Author: Benjamin Pick (wp-geoip-detect| |posteo.de)
|
5 |
|
6 |
This program is free software; you can redistribute it and/or modify
|
7 |
it under the terms of the GNU General Public License as published by
|
data-sources/hostinfo.php
CHANGED
@@ -6,52 +6,52 @@ use YellowTree\GeoipDetect\DataSources\AbstractDataSource;
|
|
6 |
use YellowTree\GeoipDetect\DataSources\DataSourceRegistry;
|
7 |
|
8 |
class Reader implements \YellowTree\GeoipDetect\DataSources\ReaderInterface {
|
9 |
-
|
10 |
const URL = 'http://api.hostip.info/get_json.php?ip=';
|
11 |
protected $options;
|
12 |
-
|
13 |
function __construct($options) {
|
14 |
$default_options = array(
|
15 |
-
'timeout' => 1,
|
16 |
);
|
17 |
$this->options = $options + $default_options;
|
18 |
}
|
19 |
-
|
20 |
public function city($ip) {
|
21 |
if (!geoip_detect_is_ip($ip, true))
|
22 |
throw new \Exception('The Hostip.info-Database only contains IPv4 adresses.');
|
23 |
-
|
24 |
$data = $this->api_call($ip);
|
25 |
-
|
26 |
if (!$data)
|
27 |
return null;
|
28 |
-
|
29 |
$r = array();
|
30 |
-
|
31 |
if ($data['country_name'])
|
32 |
$r['country']['names'] = array('en' => $data['country_name']);
|
33 |
if ($data['country_code'])
|
34 |
$r['country']['iso_code'] = strtoupper($data['country_code']);
|
35 |
-
|
36 |
if ($data['city']) {
|
37 |
$r['city']['names'] = array('en' => $data['city']);
|
38 |
}
|
39 |
-
|
40 |
$r['traits']['ip_address'] = $ip;
|
41 |
-
|
42 |
$record = new \GeoIp2\Model\City($r, array('en'));
|
43 |
-
|
44 |
return $record;
|
45 |
}
|
46 |
-
|
47 |
public function country($ip) {
|
48 |
return $this->city($ip); // too much info shouldn't hurt ...
|
49 |
}
|
50 |
-
|
51 |
public function close() {
|
52 |
-
|
53 |
}
|
54 |
-
|
55 |
private function api_call($ip) {
|
56 |
try {
|
57 |
// Setting timeout limit to speed up sites
|
@@ -66,7 +66,7 @@ class Reader implements \YellowTree\GeoipDetect\DataSources\ReaderInterface {
|
|
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);
|
@@ -80,11 +80,11 @@ class Reader implements \YellowTree\GeoipDetect\DataSources\ReaderInterface {
|
|
80 |
}
|
81 |
$hasInfo = $data['country_name'] || $data['country_code'] || $data['city'];
|
82 |
}
|
83 |
-
|
84 |
if ($hasInfo)
|
85 |
return $data;
|
86 |
return null;
|
87 |
-
} catch (Exception $e) {
|
88 |
// If the API isn't available, we have to do this
|
89 |
return null;
|
90 |
}
|
@@ -95,15 +95,15 @@ class Reader implements \YellowTree\GeoipDetect\DataSources\ReaderInterface {
|
|
95 |
class HostInfoDataSource extends AbstractDataSource {
|
96 |
public function getId() { return 'hostinfo'; }
|
97 |
public function getLabel() { return __('HostIP.info Web-API', 'geoip-detect'); }
|
98 |
-
|
99 |
public function getDescriptionHTML() { return __('Free (Licence: GPL)<br />(only English names, does only have the following fields: country name, country ID and city name)', 'geoip-detect'); }
|
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; }
|
106 |
-
|
107 |
}
|
108 |
|
109 |
-
geoip_detect2_register_source(new HostInfoDataSource());
|
6 |
use YellowTree\GeoipDetect\DataSources\DataSourceRegistry;
|
7 |
|
8 |
class Reader implements \YellowTree\GeoipDetect\DataSources\ReaderInterface {
|
9 |
+
|
10 |
const URL = 'http://api.hostip.info/get_json.php?ip=';
|
11 |
protected $options;
|
12 |
+
|
13 |
function __construct($options) {
|
14 |
$default_options = array(
|
15 |
+
'timeout' => 1,
|
16 |
);
|
17 |
$this->options = $options + $default_options;
|
18 |
}
|
19 |
+
|
20 |
public function city($ip) {
|
21 |
if (!geoip_detect_is_ip($ip, true))
|
22 |
throw new \Exception('The Hostip.info-Database only contains IPv4 adresses.');
|
23 |
+
|
24 |
$data = $this->api_call($ip);
|
25 |
+
|
26 |
if (!$data)
|
27 |
return null;
|
28 |
+
|
29 |
$r = array();
|
30 |
+
|
31 |
if ($data['country_name'])
|
32 |
$r['country']['names'] = array('en' => $data['country_name']);
|
33 |
if ($data['country_code'])
|
34 |
$r['country']['iso_code'] = strtoupper($data['country_code']);
|
35 |
+
|
36 |
if ($data['city']) {
|
37 |
$r['city']['names'] = array('en' => $data['city']);
|
38 |
}
|
39 |
+
|
40 |
$r['traits']['ip_address'] = $ip;
|
41 |
+
|
42 |
$record = new \GeoIp2\Model\City($r, array('en'));
|
43 |
+
|
44 |
return $record;
|
45 |
}
|
46 |
+
|
47 |
public function country($ip) {
|
48 |
return $this->city($ip); // too much info shouldn't hurt ...
|
49 |
}
|
50 |
+
|
51 |
public function close() {
|
52 |
+
|
53 |
}
|
54 |
+
|
55 |
private function api_call($ip) {
|
56 |
try {
|
57 |
// Setting timeout limit to speed up sites
|
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);
|
80 |
}
|
81 |
$hasInfo = $data['country_name'] || $data['country_code'] || $data['city'];
|
82 |
}
|
83 |
+
|
84 |
if ($hasInfo)
|
85 |
return $data;
|
86 |
return null;
|
87 |
+
} catch (\Exception $e) {
|
88 |
// If the API isn't available, we have to do this
|
89 |
return null;
|
90 |
}
|
95 |
class HostInfoDataSource extends AbstractDataSource {
|
96 |
public function getId() { return 'hostinfo'; }
|
97 |
public function getLabel() { return __('HostIP.info Web-API', 'geoip-detect'); }
|
98 |
+
|
99 |
public function getDescriptionHTML() { return __('Free (Licence: GPL)<br />(only English names, does only have the following fields: country name, country ID and city name)', 'geoip-detect'); }
|
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; }
|
106 |
+
|
107 |
}
|
108 |
|
109 |
+
geoip_detect2_register_source(new HostInfoDataSource());
|
data-sources/manual.php
CHANGED
@@ -1,7 +1,7 @@
|
|
1 |
<?php
|
2 |
/*
|
3 |
Copyright 2013-2018 Yellow Tree, Siegen, Germany
|
4 |
-
Author: Benjamin Pick (
|
5 |
|
6 |
This program is free software; you can redistribute it and/or modify
|
7 |
it under the terms of the GNU General Public License as published by
|
@@ -108,7 +108,7 @@ HTML;
|
|
108 |
$reader = new \GeoIp2\Database\Reader ( $data_file, $locales );
|
109 |
} catch ( \Exception $e ) {
|
110 |
if (WP_DEBUG)
|
111 |
-
|
112 |
}
|
113 |
}
|
114 |
|
@@ -154,8 +154,7 @@ HTML;
|
|
154 |
$metadata = $reader->metadata();
|
155 |
$reader->close();
|
156 |
} catch ( \Exception $e ) {
|
157 |
-
|
158 |
-
echo printf(__('Error while creating reader for "%s": %s', 'geoip-detect'), $filename, $e->getMessage ());
|
159 |
return '';
|
160 |
}
|
161 |
|
1 |
<?php
|
2 |
/*
|
3 |
Copyright 2013-2018 Yellow Tree, Siegen, Germany
|
4 |
+
Author: Benjamin Pick (wp-geoip-detect| |posteo.de)
|
5 |
|
6 |
This program is free software; you can redistribute it and/or modify
|
7 |
it under the terms of the GNU General Public License as published by
|
108 |
$reader = new \GeoIp2\Database\Reader ( $data_file, $locales );
|
109 |
} catch ( \Exception $e ) {
|
110 |
if (WP_DEBUG)
|
111 |
+
printf(__('Error while creating reader for "%s": %s', 'geoip-detect'), $data_file, $e->getMessage());
|
112 |
}
|
113 |
}
|
114 |
|
154 |
$metadata = $reader->metadata();
|
155 |
$reader->close();
|
156 |
} catch ( \Exception $e ) {
|
157 |
+
// Not readable, so do not accept this filename
|
|
|
158 |
return '';
|
159 |
}
|
160 |
|
data-sources/precision.php
CHANGED
@@ -1,7 +1,7 @@
|
|
1 |
<?php
|
2 |
/*
|
3 |
Copyright 2013-2018 Yellow Tree, Siegen, Germany
|
4 |
-
Author: Benjamin Pick (
|
5 |
|
6 |
This program is free software; you can redistribute it and/or modify
|
7 |
it under the terms of the GNU General Public License as published by
|
1 |
<?php
|
2 |
/*
|
3 |
Copyright 2013-2018 Yellow Tree, Siegen, Germany
|
4 |
+
Author: Benjamin Pick (wp-geoip-detect| |posteo.de)
|
5 |
|
6 |
This program is free software; you can redistribute it and/or modify
|
7 |
it under the terms of the GNU General Public License as published by
|
data-sources/registry.php
CHANGED
@@ -1,7 +1,7 @@
|
|
1 |
<?php
|
2 |
/*
|
3 |
Copyright 2013-2018 Yellow Tree, Siegen, Germany
|
4 |
-
Author: Benjamin Pick (
|
5 |
|
6 |
This program is free software; you can redistribute it and/or modify
|
7 |
it under the terms of the GNU General Public License as published by
|
@@ -21,22 +21,22 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
21 |
namespace YellowTree\GeoipDetect\DataSources;
|
22 |
|
23 |
class DataSourceRegistry {
|
24 |
-
|
25 |
private static $instance;
|
26 |
/* singleton */
|
27 |
-
private function __construct() {
|
28 |
$this->sources = array();
|
29 |
}
|
30 |
-
public static function getInstance() {
|
31 |
-
if (!self::$instance) {
|
32 |
-
self::$instance = new static();
|
33 |
-
}
|
34 |
return self::$instance;
|
35 |
}
|
36 |
|
37 |
-
|
38 |
protected $sources;
|
39 |
-
|
40 |
/**
|
41 |
* Register a Data source
|
42 |
* @param \YellowTree\GeoipDetect\DataSources\AbstractDataSource $source
|
@@ -45,20 +45,23 @@ class DataSourceRegistry {
|
|
45 |
$id = $source->getId();
|
46 |
$this->sources[$id] = $source;
|
47 |
}
|
48 |
-
|
49 |
-
|
50 |
const DEFAULT_SOURCE = 'hostinfo';
|
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 |
-
$
|
59 |
-
return $this->getSource($currentSource);
|
60 |
}
|
61 |
-
|
62 |
/**
|
63 |
* Returns the source known by this id.
|
64 |
* @param string Source id
|
@@ -67,16 +70,16 @@ class DataSourceRegistry {
|
|
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];
|
76 |
-
|
77 |
return null;
|
78 |
}
|
79 |
-
|
80 |
/**
|
81 |
* Check if a source named $id exists.
|
82 |
* @param string $id
|
@@ -85,7 +88,7 @@ class DataSourceRegistry {
|
|
85 |
public function sourceExists($id) {
|
86 |
return isset($this->sources[$id]);
|
87 |
}
|
88 |
-
|
89 |
/**
|
90 |
* Choose a new source as "current source".
|
91 |
* @param string $id
|
@@ -93,28 +96,32 @@ class DataSourceRegistry {
|
|
93 |
public function setCurrentSource($id) {
|
94 |
$oldSource = $this->getCurrentSource();
|
95 |
$newSource = $this->getSource($id);
|
96 |
-
|
97 |
if ($oldSource->getId() != $newSource->getId()) {
|
98 |
$oldSource->deactivate();
|
99 |
update_option('geoip-detect-source', $newSource->getId());
|
100 |
$newSource->activate();
|
101 |
}
|
102 |
-
|
103 |
update_option('geoip-detect-ui-has-chosen-source', true);
|
104 |
}
|
105 |
-
|
106 |
/**
|
107 |
* Returns all registered sources.
|
108 |
-
*
|
109 |
* @return array(\YellowTree\GeoipDetect\DataSources\AbstractDataSource)
|
110 |
*/
|
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 |
}
|
1 |
<?php
|
2 |
/*
|
3 |
Copyright 2013-2018 Yellow Tree, Siegen, Germany
|
4 |
+
Author: Benjamin Pick (wp-geoip-detect| |posteo.de)
|
5 |
|
6 |
This program is free software; you can redistribute it and/or modify
|
7 |
it under the terms of the GNU General Public License as published by
|
21 |
namespace YellowTree\GeoipDetect\DataSources;
|
22 |
|
23 |
class DataSourceRegistry {
|
24 |
+
|
25 |
private static $instance;
|
26 |
/* singleton */
|
27 |
+
private function __construct() {
|
28 |
$this->sources = array();
|
29 |
}
|
30 |
+
public static function getInstance() {
|
31 |
+
if (!self::$instance) {
|
32 |
+
self::$instance = new static();
|
33 |
+
}
|
34 |
return self::$instance;
|
35 |
}
|
36 |
|
37 |
+
|
38 |
protected $sources;
|
39 |
+
|
40 |
/**
|
41 |
* Register a Data source
|
42 |
* @param \YellowTree\GeoipDetect\DataSources\AbstractDataSource $source
|
45 |
$id = $source->getId();
|
46 |
$this->sources[$id] = $source;
|
47 |
}
|
48 |
+
|
49 |
+
|
50 |
const DEFAULT_SOURCE = 'hostinfo';
|
51 |
+
|
52 |
+
public function getCurrentSourceId() {
|
53 |
+
return get_option('geoip-detect-source', self::DEFAULT_SOURCE);
|
54 |
+
}
|
55 |
+
|
56 |
/**
|
57 |
* Returns the currently chosen source.
|
58 |
* @deprecated Use getSource() instead
|
59 |
* @return \YellowTree\GeoipDetect\DataSources\AbstractDataSource
|
60 |
*/
|
61 |
public function getCurrentSource() {
|
62 |
+
return $this->getSource($this->getCurrentSourceId());
|
|
|
63 |
}
|
64 |
+
|
65 |
/**
|
66 |
* Returns the source known by this id.
|
67 |
* @param string Source id
|
70 |
public function getSource($id) {
|
71 |
if (isset($this->sources[$id]))
|
72 |
return $this->sources[$id];
|
73 |
+
|
74 |
if (WP_DEBUG)
|
75 |
trigger_error('The source with id "' . $id . '" was requested, but no such source was found. Using default source instead.', E_USER_NOTICE);
|
76 |
+
|
77 |
if (isset($this->sources[self::DEFAULT_SOURCE]))
|
78 |
return $this->sources[self::DEFAULT_SOURCE];
|
79 |
+
|
80 |
return null;
|
81 |
}
|
82 |
+
|
83 |
/**
|
84 |
* Check if a source named $id exists.
|
85 |
* @param string $id
|
88 |
public function sourceExists($id) {
|
89 |
return isset($this->sources[$id]);
|
90 |
}
|
91 |
+
|
92 |
/**
|
93 |
* Choose a new source as "current source".
|
94 |
* @param string $id
|
96 |
public function setCurrentSource($id) {
|
97 |
$oldSource = $this->getCurrentSource();
|
98 |
$newSource = $this->getSource($id);
|
99 |
+
|
100 |
if ($oldSource->getId() != $newSource->getId()) {
|
101 |
$oldSource->deactivate();
|
102 |
update_option('geoip-detect-source', $newSource->getId());
|
103 |
$newSource->activate();
|
104 |
}
|
105 |
+
|
106 |
update_option('geoip-detect-ui-has-chosen-source', true);
|
107 |
}
|
108 |
+
|
109 |
/**
|
110 |
* Returns all registered sources.
|
111 |
+
*
|
112 |
* @return array(\YellowTree\GeoipDetect\DataSources\AbstractDataSource)
|
113 |
*/
|
114 |
public function getAllSources() {
|
115 |
return $this->sources;
|
116 |
}
|
117 |
+
|
118 |
public function isSourceCachable($source) {
|
119 |
// Don't cache for file access based sources (not worth the effort/time)
|
120 |
+
$sources_not_cachable = apply_filters('geoip2_detect_sources_not_cachable', array('auto', 'manual', 'header'));
|
121 |
return !in_array($source, $sources_not_cachable);
|
122 |
}
|
123 |
+
|
124 |
+
public function isCachingUsed() {
|
125 |
+
return $this->isSourceCachable($this->getCurrentSourceId());
|
126 |
+
}
|
127 |
}
|
filter.php
CHANGED
@@ -1,7 +1,7 @@
|
|
1 |
<?php
|
2 |
/*
|
3 |
Copyright 2013-2018 Yellow Tree, Siegen, Germany
|
4 |
-
Author: Benjamin Pick (
|
5 |
|
6 |
This program is free software; you can redistribute it and/or modify
|
7 |
it under the terms of the GNU General Public License as published by
|
@@ -21,15 +21,18 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
21 |
function geoip_detect2_add_body_classes($classes) {
|
22 |
if (!get_option('geoip-detect-set_css_country'))
|
23 |
return $classes;
|
24 |
-
|
25 |
$info = geoip_detect2_get_info_from_current_ip();
|
26 |
|
27 |
if ($info->country->isoCode)
|
28 |
$classes[] = 'geoip-country-' . $info->country->isoCode;
|
29 |
-
|
30 |
if ($info->continent->code)
|
31 |
$classes[] = 'geoip-continent-' . $info->continent->code;
|
32 |
|
|
|
|
|
|
|
33 |
return $classes;
|
34 |
}
|
35 |
add_filter('body_class', 'geoip_detect2_add_body_classes');
|
@@ -39,7 +42,7 @@ function geoip_detect2_convert_locale_format($locales) {
|
|
39 |
if (is_string($locales)) {
|
40 |
$locales = explode(',', $locales);
|
41 |
$locales = array_map('trim', $locales);
|
42 |
-
|
43 |
$locales = array_unique($locales);
|
44 |
}
|
45 |
return $locales;
|
@@ -49,12 +52,12 @@ add_filter('geoip_detect2_locales', 'geoip_detect2_convert_locale_format', 7);
|
|
49 |
function geoip_detect2_add_default_locales($locales) {
|
50 |
if (is_null($locales) || $locales === false) {
|
51 |
$locales = array();
|
52 |
-
|
53 |
/* Needed? should be in get_locale()
|
54 |
if (defined('ICL_LANGUAGE_CODE'))
|
55 |
$locales[] = ICL_LANGUAGE_CODE;
|
56 |
*/
|
57 |
-
|
58 |
$site_locale = get_locale();
|
59 |
if ($site_locale) {
|
60 |
$translate = array(
|
@@ -65,7 +68,7 @@ function geoip_detect2_add_default_locales($locales) {
|
|
65 |
$site_locale = $translate[$site_locale];
|
66 |
else
|
67 |
$site_locale = substr($site_locale, 0, 2);
|
68 |
-
|
69 |
$locales[] = $site_locale;
|
70 |
}
|
71 |
$locales[] = 'en';
|
1 |
<?php
|
2 |
/*
|
3 |
Copyright 2013-2018 Yellow Tree, Siegen, Germany
|
4 |
+
Author: Benjamin Pick (wp-geoip-detect| |posteo.de)
|
5 |
|
6 |
This program is free software; you can redistribute it and/or modify
|
7 |
it under the terms of the GNU General Public License as published by
|
21 |
function geoip_detect2_add_body_classes($classes) {
|
22 |
if (!get_option('geoip-detect-set_css_country'))
|
23 |
return $classes;
|
24 |
+
|
25 |
$info = geoip_detect2_get_info_from_current_ip();
|
26 |
|
27 |
if ($info->country->isoCode)
|
28 |
$classes[] = 'geoip-country-' . $info->country->isoCode;
|
29 |
+
|
30 |
if ($info->continent->code)
|
31 |
$classes[] = 'geoip-continent-' . $info->continent->code;
|
32 |
|
33 |
+
if ($info->mostSpecificSubdivision->isoCode)
|
34 |
+
$classes[] = 'geoip-province-' . $info->mostSpecificSubdivision->isoCode;
|
35 |
+
|
36 |
return $classes;
|
37 |
}
|
38 |
add_filter('body_class', 'geoip_detect2_add_body_classes');
|
42 |
if (is_string($locales)) {
|
43 |
$locales = explode(',', $locales);
|
44 |
$locales = array_map('trim', $locales);
|
45 |
+
|
46 |
$locales = array_unique($locales);
|
47 |
}
|
48 |
return $locales;
|
52 |
function geoip_detect2_add_default_locales($locales) {
|
53 |
if (is_null($locales) || $locales === false) {
|
54 |
$locales = array();
|
55 |
+
|
56 |
/* Needed? should be in get_locale()
|
57 |
if (defined('ICL_LANGUAGE_CODE'))
|
58 |
$locales[] = ICL_LANGUAGE_CODE;
|
59 |
*/
|
60 |
+
|
61 |
$site_locale = get_locale();
|
62 |
if ($site_locale) {
|
63 |
$translate = array(
|
68 |
$site_locale = $translate[$site_locale];
|
69 |
else
|
70 |
$site_locale = substr($site_locale, 0, 2);
|
71 |
+
|
72 |
$locales[] = $site_locale;
|
73 |
}
|
74 |
$locales[] = 'en';
|
geoip-detect-lib.php
CHANGED
@@ -1,7 +1,7 @@
|
|
1 |
<?php
|
2 |
/*
|
3 |
Copyright 2013-2018 Yellow Tree, Siegen, Germany
|
4 |
-
Author: Benjamin Pick (
|
5 |
|
6 |
This program is free software; you can redistribute it and/or modify
|
7 |
it under the terms of the GNU General Public License as published by
|
@@ -30,7 +30,7 @@ use YellowTree\GeoipDetect\DataSources\DataSourceRegistry;
|
|
30 |
*/
|
31 |
|
32 |
function _geoip_detect2_process_options($options) {
|
33 |
-
|
34 |
// For backwards compat 2.4.0-2.5.0
|
35 |
if (is_bool($options)) {
|
36 |
_doing_it_wrong('GeoIP Detection Plugin: geoip_detect2_get_info_from_ip()', '$skipCache has been renamed to $options. Instead of TRUE, now use "array(\'skipCache\' => TRUE)".', '2.5.0');
|
@@ -38,14 +38,14 @@ function _geoip_detect2_process_options($options) {
|
|
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.
|
@@ -53,14 +53,14 @@ function _geoip_detect2_process_options($options) {
|
|
53 |
* @param array $options The options array
|
54 |
*/
|
55 |
$options = apply_filters('geoip_detect2_options', $options);
|
56 |
-
|
57 |
-
|
58 |
$defaultOptions = array(
|
59 |
'skipCache' => false,
|
60 |
'source' => get_option('geoip-detect-source', DataSourceRegistry::DEFAULT_SOURCE),
|
61 |
);
|
62 |
$options = $options + $defaultOptions;
|
63 |
-
|
64 |
return $options;
|
65 |
}
|
66 |
|
@@ -84,14 +84,14 @@ function _geoip_detect2_get_reader($locales = null, $skipLocaleFilter = false, &
|
|
84 |
*/
|
85 |
$locales = apply_filters ( 'geoip_detect2_locales', $locales );
|
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.
|
@@ -123,9 +123,9 @@ function _geoip_detect2_get_data_from_cache($ip, $source) {
|
|
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 |
|
@@ -134,16 +134,20 @@ function _geoip_detect2_add_data_to_cache($data, $ip) {
|
|
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;
|
@@ -154,9 +158,9 @@ function _geoip_detect2_add_data_to_cache($data, $ip) {
|
|
154 |
|
155 |
function _geoip_detect2_get_record_from_reader($reader, $ip, &$error) {
|
156 |
$record = null;
|
157 |
-
|
158 |
$ip = trim($ip);
|
159 |
-
|
160 |
if ($reader) {
|
161 |
// When plugin installed on development boxes:
|
162 |
// If the client IP is not a public IP, use the public IP of the server instead.
|
@@ -164,7 +168,7 @@ function _geoip_detect2_get_record_from_reader($reader, $ip, &$error) {
|
|
164 |
if ($ip == 'me' || (geoip_detect_is_ip($ip) && !geoip_detect_is_public_ip($ip))) {
|
165 |
$ip = geoip_detect2_get_external_ip_adress();
|
166 |
}
|
167 |
-
|
168 |
try {
|
169 |
try {
|
170 |
$record = $reader->city($ip);
|
@@ -174,12 +178,12 @@ function _geoip_detect2_get_record_from_reader($reader, $ip, &$error) {
|
|
174 |
} catch(\Exception $e) {
|
175 |
$error = 'Lookup Error: ' . $e->getMessage();
|
176 |
}
|
177 |
-
|
178 |
$reader->close();
|
179 |
} else {
|
180 |
$error = 'No reader was found. Check if the configuration is complete and correct.';
|
181 |
}
|
182 |
-
|
183 |
return $record;
|
184 |
}
|
185 |
|
@@ -209,7 +213,7 @@ function _geoip_detect2_record_enrich_data($record, $ip, $sourceId, $error) {
|
|
209 |
/**
|
210 |
* GeoIPv2 doesn't always include a timezone when v1 did.
|
211 |
* Region ids have changed, so countries with several time zones are out of luck.
|
212 |
-
*
|
213 |
* @param array $record
|
214 |
*/
|
215 |
function _geoip_detect2_try_to_fix_timezone($data) {
|
@@ -234,7 +238,7 @@ function _geoip_detect2_add_geonames_data($data) {
|
|
234 |
static $countryInfo = null;
|
235 |
if (is_null($countryInfo))
|
236 |
$countryInfo = new \YellowTree\GeoipDetect\Geonames\CountryInformation;
|
237 |
-
|
238 |
if (!empty($data['country']['iso_code'])) {
|
239 |
$geonamesData = $countryInfo->getInformationAboutCountry($data['country']['iso_code']);
|
240 |
$data = array_replace_recursive($geonamesData, $data);
|
@@ -253,7 +257,7 @@ function geoip_detect_normalize_ip($ip) {
|
|
253 |
$binary = @inet_pton($ip);
|
254 |
if (empty($binary))
|
255 |
return $ip; // Probably an IPv6 adress & IPv6 is not supported. Or not a valid IP.
|
256 |
-
|
257 |
$ip = inet_ntop($binary);
|
258 |
return $ip;
|
259 |
}
|
@@ -261,16 +265,16 @@ function geoip_detect_normalize_ip($ip) {
|
|
261 |
function geoip_detect_is_ip_equal($ip1, $ip2) {
|
262 |
$one = @inet_pton($ip1);
|
263 |
$two = @inet_pton($ip2);
|
264 |
-
|
265 |
return !empty($one) && $one == $two;
|
266 |
}
|
267 |
|
268 |
function geoip_detect_is_ip($ip, $noIpv6 = false) {
|
269 |
$flags = FILTER_FLAG_IPV4;
|
270 |
-
|
271 |
if (GEOIP_DETECT_IPV6_SUPPORTED && !$noIpv6)
|
272 |
$flags = $flags | FILTER_FLAG_IPV6;
|
273 |
-
|
274 |
return filter_var($ip, FILTER_VALIDATE_IP, $flags) !== false;
|
275 |
}
|
276 |
|
@@ -299,37 +303,47 @@ function geoip_detect_is_public_ip($ip) {
|
|
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
|
301 |
| FILTER_FLAG_NO_RES_RANGE; // It may not be in the RFC reserved range
|
302 |
-
|
303 |
if (GEOIP_DETECT_IPV6_SUPPORTED)
|
304 |
$flags = $flags | FILTER_FLAG_IPV6;
|
305 |
-
|
306 |
$is_public = filter_var($ip, FILTER_VALIDATE_IP, $flags) !== false;
|
307 |
-
|
308 |
return $is_public;
|
309 |
}
|
310 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
311 |
/**
|
312 |
* Sometimes we can only see an local IP adress (local development environment.)
|
313 |
* In this case we need to ask an internet server which IP adress our internet connection has.
|
314 |
* (This function is not cached. Some providers may throttle our requests, that's why caching is enabled by default.)
|
315 |
-
*
|
316 |
* @return string The detected IPv4 Adress. If none is found, '0.0.0.0' is returned instead.
|
317 |
*/
|
318 |
function _geoip_detect_get_external_ip_adress_without_cache()
|
319 |
{
|
320 |
-
$ipservices =
|
321 |
-
'http://ipv4.icanhazip.com',
|
322 |
-
// 'http://ifconfig.me/ip', // seems to be slow
|
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 |
{
|
@@ -342,7 +356,7 @@ function _geoip_detect_get_external_ip_adress_without_cache()
|
|
342 |
} else if (isset($ret['response']['code']) && $ret['response']['code'] != 200) {
|
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']);
|
@@ -394,20 +408,20 @@ function geoip_detect_get_relative_path($from, $to)
|
|
394 |
function _geoip_maybe_disable_pagecache() {
|
395 |
if (!get_option('geoip-detect-disable_pagecache'))
|
396 |
return false;
|
397 |
-
|
398 |
// WP Super Cache, W3 Total Cache
|
399 |
if (!defined('DONOTCACHEPAGE'))
|
400 |
define('DONOTCACHEPAGE', true);
|
401 |
-
|
402 |
if (!defined('DONOTCACHEOBJECT'))
|
403 |
define('DONOTCACHEOBJECT', true);
|
404 |
-
|
405 |
if (!defined('DONOTCACHEDB'))
|
406 |
define('DONOTCACHEDB', true);
|
407 |
-
|
408 |
if (!headers_sent() && !is_user_logged_in()) {
|
409 |
header('Cache-Control: private, proxy-revalidate, s-maxage=0');
|
410 |
}
|
411 |
-
|
412 |
return true;
|
413 |
}
|
1 |
<?php
|
2 |
/*
|
3 |
Copyright 2013-2018 Yellow Tree, Siegen, Germany
|
4 |
+
Author: Benjamin Pick (wp-geoip-detect| |posteo.de)
|
5 |
|
6 |
This program is free software; you can redistribute it and/or modify
|
7 |
it under the terms of the GNU General Public License as published by
|
30 |
*/
|
31 |
|
32 |
function _geoip_detect2_process_options($options) {
|
33 |
+
|
34 |
// For backwards compat 2.4.0-2.5.0
|
35 |
if (is_bool($options)) {
|
36 |
_doing_it_wrong('GeoIP Detection Plugin: geoip_detect2_get_info_from_ip()', '$skipCache has been renamed to $options. Instead of TRUE, now use "array(\'skipCache\' => TRUE)".', '2.5.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.
|
53 |
* @param array $options The options array
|
54 |
*/
|
55 |
$options = apply_filters('geoip_detect2_options', $options);
|
56 |
+
|
57 |
+
|
58 |
$defaultOptions = array(
|
59 |
'skipCache' => false,
|
60 |
'source' => get_option('geoip-detect-source', DataSourceRegistry::DEFAULT_SOURCE),
|
61 |
);
|
62 |
$options = $options + $defaultOptions;
|
63 |
+
|
64 |
return $options;
|
65 |
}
|
66 |
|
84 |
*/
|
85 |
$locales = apply_filters ( 'geoip_detect2_locales', $locales );
|
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.
|
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 |
|
134 |
if (!DataSourceRegistry::getInstance()->isSourceCachable($source)) {
|
135 |
return null;
|
136 |
}
|
137 |
+
if (GEOIP_DETECT_READER_CACHE_TIME === 0) {
|
138 |
+
// Caching is disabled
|
139 |
+
return null;
|
140 |
+
}
|
141 |
+
|
142 |
$data['extra']['cached'] = time();
|
143 |
unset($data['maxmind']['queries_remaining']);
|
144 |
+
|
145 |
$ip_s = _ip_to_s($ip);
|
146 |
// Do not cache invalid IPs
|
147 |
if (!$ip_s) {
|
148 |
return;
|
149 |
}
|
150 |
+
|
151 |
// Do not cache error lookups (they might be temporary)
|
152 |
if (!empty($data['extra']['error'])) {
|
153 |
return;
|
158 |
|
159 |
function _geoip_detect2_get_record_from_reader($reader, $ip, &$error) {
|
160 |
$record = null;
|
161 |
+
|
162 |
$ip = trim($ip);
|
163 |
+
|
164 |
if ($reader) {
|
165 |
// When plugin installed on development boxes:
|
166 |
// If the client IP is not a public IP, use the public IP of the server instead.
|
168 |
if ($ip == 'me' || (geoip_detect_is_ip($ip) && !geoip_detect_is_public_ip($ip))) {
|
169 |
$ip = geoip_detect2_get_external_ip_adress();
|
170 |
}
|
171 |
+
|
172 |
try {
|
173 |
try {
|
174 |
$record = $reader->city($ip);
|
178 |
} catch(\Exception $e) {
|
179 |
$error = 'Lookup Error: ' . $e->getMessage();
|
180 |
}
|
181 |
+
|
182 |
$reader->close();
|
183 |
} else {
|
184 |
$error = 'No reader was found. Check if the configuration is complete and correct.';
|
185 |
}
|
186 |
+
|
187 |
return $record;
|
188 |
}
|
189 |
|
213 |
/**
|
214 |
* GeoIPv2 doesn't always include a timezone when v1 did.
|
215 |
* Region ids have changed, so countries with several time zones are out of luck.
|
216 |
+
*
|
217 |
* @param array $record
|
218 |
*/
|
219 |
function _geoip_detect2_try_to_fix_timezone($data) {
|
238 |
static $countryInfo = null;
|
239 |
if (is_null($countryInfo))
|
240 |
$countryInfo = new \YellowTree\GeoipDetect\Geonames\CountryInformation;
|
241 |
+
|
242 |
if (!empty($data['country']['iso_code'])) {
|
243 |
$geonamesData = $countryInfo->getInformationAboutCountry($data['country']['iso_code']);
|
244 |
$data = array_replace_recursive($geonamesData, $data);
|
257 |
$binary = @inet_pton($ip);
|
258 |
if (empty($binary))
|
259 |
return $ip; // Probably an IPv6 adress & IPv6 is not supported. Or not a valid IP.
|
260 |
+
|
261 |
$ip = inet_ntop($binary);
|
262 |
return $ip;
|
263 |
}
|
265 |
function geoip_detect_is_ip_equal($ip1, $ip2) {
|
266 |
$one = @inet_pton($ip1);
|
267 |
$two = @inet_pton($ip2);
|
268 |
+
|
269 |
return !empty($one) && $one == $two;
|
270 |
}
|
271 |
|
272 |
function geoip_detect_is_ip($ip, $noIpv6 = false) {
|
273 |
$flags = FILTER_FLAG_IPV4;
|
274 |
+
|
275 |
if (GEOIP_DETECT_IPV6_SUPPORTED && !$noIpv6)
|
276 |
$flags = $flags | FILTER_FLAG_IPV6;
|
277 |
+
|
278 |
return filter_var($ip, FILTER_VALIDATE_IP, $flags) !== false;
|
279 |
}
|
280 |
|
303 |
$flags = FILTER_FLAG_IPV4 // IP can be v4 or v6
|
304 |
| FILTER_FLAG_NO_PRIV_RANGE // It may not be in the RFC private range
|
305 |
| FILTER_FLAG_NO_RES_RANGE; // It may not be in the RFC reserved range
|
306 |
+
|
307 |
if (GEOIP_DETECT_IPV6_SUPPORTED)
|
308 |
$flags = $flags | FILTER_FLAG_IPV6;
|
309 |
+
|
310 |
$is_public = filter_var($ip, FILTER_VALIDATE_IP, $flags) !== false;
|
311 |
+
|
312 |
return $is_public;
|
313 |
}
|
314 |
|
315 |
+
function _geoip_detect2_get_external_ip_services($nb = 3, $needsCORS = false) {
|
316 |
+
$ipservicesThatAllowCORS = array(
|
317 |
+
'http://ipv4.icanhazip.com',
|
318 |
+
'http://v4.ident.me',
|
319 |
+
);
|
320 |
+
$ipservicesWithoutCORS = array(
|
321 |
+
'http://ipecho.net/plain',
|
322 |
+
'http://bot.whatismyipaddress.com',
|
323 |
+
);
|
324 |
+
|
325 |
+
$ipservices = $ipservicesThatAllowCORS;
|
326 |
+
if (!$needsCORS) {
|
327 |
+
$ipservices = array_merge($ipservices, $ipservicesWithoutCORS);
|
328 |
+
}
|
329 |
+
|
330 |
+
// Randomizing to avoid querying the same service each time
|
331 |
+
shuffle($ipservices);
|
332 |
+
$ipservices = apply_filters('geiop_detect_ipservices', $ipservices);
|
333 |
+
$ipservices = array_slice($ipservices, 0, $nb);
|
334 |
+
return $ipservices;
|
335 |
+
}
|
336 |
+
|
337 |
/**
|
338 |
* Sometimes we can only see an local IP adress (local development environment.)
|
339 |
* In this case we need to ask an internet server which IP adress our internet connection has.
|
340 |
* (This function is not cached. Some providers may throttle our requests, that's why caching is enabled by default.)
|
341 |
+
*
|
342 |
* @return string The detected IPv4 Adress. If none is found, '0.0.0.0' is returned instead.
|
343 |
*/
|
344 |
function _geoip_detect_get_external_ip_adress_without_cache()
|
345 |
{
|
346 |
+
$ipservices = _geoip_detect2_get_external_ip_services();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
347 |
|
348 |
foreach ($ipservices as $url)
|
349 |
{
|
356 |
} else if (isset($ret['response']['code']) && $ret['response']['code'] != 200) {
|
357 |
if (WP_DEBUG || defined('WP_TESTS_TITLE')) {
|
358 |
trigger_error('_geoip_detect_get_external_ip_adress_without_cache(): HTTP error (' . $url . '): Returned code ' . $ret['response']['code'], E_USER_NOTICE);
|
359 |
+
}
|
360 |
} else {
|
361 |
if (isset($ret['body'])) {
|
362 |
$ip = trim($ret['body']);
|
408 |
function _geoip_maybe_disable_pagecache() {
|
409 |
if (!get_option('geoip-detect-disable_pagecache'))
|
410 |
return false;
|
411 |
+
|
412 |
// WP Super Cache, W3 Total Cache
|
413 |
if (!defined('DONOTCACHEPAGE'))
|
414 |
define('DONOTCACHEPAGE', true);
|
415 |
+
|
416 |
if (!defined('DONOTCACHEOBJECT'))
|
417 |
define('DONOTCACHEOBJECT', true);
|
418 |
+
|
419 |
if (!defined('DONOTCACHEDB'))
|
420 |
define('DONOTCACHEDB', true);
|
421 |
+
|
422 |
if (!headers_sent() && !is_user_logged_in()) {
|
423 |
header('Cache-Control: private, proxy-revalidate, s-maxage=0');
|
424 |
}
|
425 |
+
|
426 |
return true;
|
427 |
}
|
geoip-detect.php
CHANGED
@@ -5,22 +5,22 @@ 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.
|
9 |
License: GPLv3 or later
|
10 |
License URI: http://www.gnu.org/licenses/gpl-3.0.html
|
11 |
Text Domain: geoip-detect
|
12 |
Domain Path: /languages
|
13 |
GitHub Plugin URI: https://github.com/yellowtree/wp-geoip-detect
|
14 |
-
GitHub Branch:
|
15 |
Requires WP: 3.5
|
16 |
Requires PHP: 5.4
|
17 |
*/
|
18 |
|
19 |
-
define('GEOIP_DETECT_VERSION', '2.
|
20 |
|
21 |
/*
|
22 |
Copyright 2013-2018 Yellow Tree, Siegen, Germany
|
23 |
-
Author: Benjamin Pick (
|
24 |
|
25 |
This program is free software; you can redistribute it and/or modify
|
26 |
it under the terms of the GNU General Public License as published by
|
@@ -57,6 +57,7 @@ require_once(GEOIP_PLUGIN_DIR . '/init.php');
|
|
57 |
|
58 |
require_once(GEOIP_PLUGIN_DIR . '/geoip-detect-lib.php');
|
59 |
require_once(GEOIP_PLUGIN_DIR . '/lib/geonames/geonames-country-info.php');
|
|
|
60 |
|
61 |
require_once(GEOIP_PLUGIN_DIR . '/upgrade-plugin.php');
|
62 |
require_once(GEOIP_PLUGIN_DIR . '/api.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.9.0
|
9 |
License: GPLv3 or later
|
10 |
License URI: http://www.gnu.org/licenses/gpl-3.0.html
|
11 |
Text Domain: geoip-detect
|
12 |
Domain Path: /languages
|
13 |
GitHub Plugin URI: https://github.com/yellowtree/wp-geoip-detect
|
14 |
+
GitHub Branch: master
|
15 |
Requires WP: 3.5
|
16 |
Requires PHP: 5.4
|
17 |
*/
|
18 |
|
19 |
+
define('GEOIP_DETECT_VERSION', '2.9.0');
|
20 |
|
21 |
/*
|
22 |
Copyright 2013-2018 Yellow Tree, Siegen, Germany
|
23 |
+
Author: Benjamin Pick (wp-geoip-detect| |posteo.de)
|
24 |
|
25 |
This program is free software; you can redistribute it and/or modify
|
26 |
it under the terms of the GNU General Public License as published by
|
57 |
|
58 |
require_once(GEOIP_PLUGIN_DIR . '/geoip-detect-lib.php');
|
59 |
require_once(GEOIP_PLUGIN_DIR . '/lib/geonames/geonames-country-info.php');
|
60 |
+
require_once(GEOIP_PLUGIN_DIR . '/lib/get-client-ip.php');
|
61 |
|
62 |
require_once(GEOIP_PLUGIN_DIR . '/upgrade-plugin.php');
|
63 |
require_once(GEOIP_PLUGIN_DIR . '/api.php');
|
init.php
CHANGED
@@ -1,21 +1,24 @@
|
|
1 |
<?php
|
|
|
|
|
|
|
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'))
|
12 |
define('GEOIP_DETECT_DOING_UNIT_TESTS', false);
|
13 |
-
|
14 |
-
|
15 |
if (!defined('GEOIP_DETECT_IPV6_SUPPORTED'))
|
16 |
define('GEOIP_DETECT_IPV6_SUPPORTED', defined('AF_INET6'));
|
17 |
-
|
18 |
-
if (!defined('GEOIP_DETECT_USER_AGENT'))
|
19 |
define('GEOIP_DETECT_USER_AGENT', 'GeoIP Detect ' . GEOIP_DETECT_VERSION);
|
20 |
}
|
21 |
add_action('plugins_loaded', 'geoip_detect_defines');
|
@@ -23,21 +26,21 @@ add_action('plugins_loaded', 'geoip_detect_defines');
|
|
23 |
|
24 |
// Load Locales
|
25 |
function geoip_detect_load_textdomain() {
|
26 |
-
load_plugin_textdomain( 'geoip-detect', false, GEOIP_PLUGIN_DIR . '/languages' );
|
27 |
}
|
28 |
add_action( 'plugins_loaded', 'geoip_detect_load_textdomain' );
|
29 |
|
30 |
|
31 |
function geoip_detect_enqueue_admin_notices() {
|
32 |
// Nobody would see them anyway.
|
33 |
-
if (!is_admin() ||
|
34 |
!is_user_logged_in() ||
|
35 |
-
(defined('DOING_CRON') && DOING_CRON) ||
|
36 |
(defined('DOING_AJAX') && DOING_AJAX) )
|
37 |
return;
|
38 |
|
39 |
global $plugin_page;
|
40 |
-
|
41 |
if (get_option('geoip-detect-source') == 'hostinfo' && get_option('geoip-detect-ui-has-chosen-source', false) == false) {
|
42 |
if ($plugin_page == GEOIP_PLUGIN_BASENAME && isset($_POST['action']) && $_POST['action'] == 'update') {
|
43 |
// Skip because maybe he is currently updating the database
|
@@ -58,14 +61,14 @@ function geoip_detect_admin_notice_database_missing() {
|
|
58 |
<div class="error notice is-dismissible">
|
59 |
<p style="float: right">
|
60 |
<a href="tools.php?page=<?php echo GEOIP_PLUGIN_BASENAME ?>&geoip_detect_dismiss_notice=hostinfo_used"><?php _e('Dismiss notice', 'geoip-detect'); ?></a>
|
61 |
-
|
62 |
-
|
63 |
<h3><?php _e( 'GeoIP Detection: No database installed', 'geoip-detect' ); ?></h3>
|
64 |
<p><?php printf(__('The Plugin %s is currently using the Webservice <a href="http://hostip.info" target="_blank">hostip.info</a> as data source. <br />You can click on the button below to download and install Maxmind GeoIPv2 Lite City now.', 'geoip-detect' ), $url); ?></p>
|
65 |
<p><?php printf(__('This database is licenced <a href="http://creativecommons.org/licenses/by-sa/3.0/">CC BY-SA</a>. See <a href="http://dev.maxmind.com/geoip/geoip2/geolite2/#License">License</a> for details.', 'geoip-detect')); ?>
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
<form action="options-general.php?page=<?php echo GEOIP_PLUGIN_BASENAME; ?>" method="post">
|
70 |
<?php wp_nonce_field( 'geoip_detect_update' ); ?>
|
71 |
<input type="hidden" name="source" value="auto" />
|
@@ -82,21 +85,43 @@ function geoip_detect_admin_notice_database_missing() {
|
|
82 |
function geoip_detect_dismiss_message() {
|
83 |
if (!is_admin() || !is_user_logged_in())
|
84 |
return;
|
85 |
-
|
86 |
if (!isset($_GET['geoip_detect_dismiss_notice']))
|
87 |
return;
|
88 |
-
|
89 |
$dismiss = $_GET['geoip_detect_dismiss_notice'];
|
90 |
if ($dismiss) {
|
91 |
$ignored_notices = (array) get_user_meta(get_current_user_id(), 'geoip_detect_dismissed_notices', true);
|
92 |
-
|
93 |
if ($dismiss == '-1') { // Undocumented feature: reset dismissed messages
|
94 |
$ignored_notices = array();
|
95 |
} else if (!in_array($dismiss, $ignored_notices)) {
|
96 |
$ignored_notices[] = $dismiss;
|
97 |
}
|
98 |
-
|
99 |
-
update_user_meta(get_current_user_id(), 'geoip_detect_dismissed_notices', $ignored_notices);
|
100 |
}
|
101 |
}
|
102 |
add_action('admin_init', 'geoip_detect_dismiss_message');
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
<?php
|
2 |
+
|
3 |
+
use YellowTree\GeoipDetect\DataSources\DataSourceRegistry;
|
4 |
+
|
5 |
function geoip_detect_defines() {
|
6 |
if (!defined('GEOIP_DETECT_IP_CACHE_TIME'))
|
7 |
define('GEOIP_DETECT_IP_CACHE_TIME', 2 * HOUR_IN_SECONDS);
|
8 |
if (!defined('GEOIP_DETECT_IP_EMPTY_CACHE_TIME'))
|
9 |
define('GEOIP_DETECT_IP_EMPTY_CACHE_TIME', GEOIP_DETECT_IP_CACHE_TIME);
|
10 |
+
|
11 |
+
|
12 |
if (!defined('GEOIP_DETECT_READER_CACHE_TIME'))
|
13 |
define('GEOIP_DETECT_READER_CACHE_TIME', 7 * DAY_IN_SECONDS);
|
14 |
if (!defined('GEOIP_DETECT_DOING_UNIT_TESTS'))
|
15 |
define('GEOIP_DETECT_DOING_UNIT_TESTS', false);
|
16 |
+
|
17 |
+
|
18 |
if (!defined('GEOIP_DETECT_IPV6_SUPPORTED'))
|
19 |
define('GEOIP_DETECT_IPV6_SUPPORTED', defined('AF_INET6'));
|
20 |
+
|
21 |
+
if (!defined('GEOIP_DETECT_USER_AGENT'))
|
22 |
define('GEOIP_DETECT_USER_AGENT', 'GeoIP Detect ' . GEOIP_DETECT_VERSION);
|
23 |
}
|
24 |
add_action('plugins_loaded', 'geoip_detect_defines');
|
26 |
|
27 |
// Load Locales
|
28 |
function geoip_detect_load_textdomain() {
|
29 |
+
load_plugin_textdomain( 'geoip-detect', false, GEOIP_PLUGIN_DIR . '/languages' );
|
30 |
}
|
31 |
add_action( 'plugins_loaded', 'geoip_detect_load_textdomain' );
|
32 |
|
33 |
|
34 |
function geoip_detect_enqueue_admin_notices() {
|
35 |
// Nobody would see them anyway.
|
36 |
+
if (!is_admin() ||
|
37 |
!is_user_logged_in() ||
|
38 |
+
(defined('DOING_CRON') && DOING_CRON) ||
|
39 |
(defined('DOING_AJAX') && DOING_AJAX) )
|
40 |
return;
|
41 |
|
42 |
global $plugin_page;
|
43 |
+
|
44 |
if (get_option('geoip-detect-source') == 'hostinfo' && get_option('geoip-detect-ui-has-chosen-source', false) == false) {
|
45 |
if ($plugin_page == GEOIP_PLUGIN_BASENAME && isset($_POST['action']) && $_POST['action'] == 'update') {
|
46 |
// Skip because maybe he is currently updating the database
|
61 |
<div class="error notice is-dismissible">
|
62 |
<p style="float: right">
|
63 |
<a href="tools.php?page=<?php echo GEOIP_PLUGIN_BASENAME ?>&geoip_detect_dismiss_notice=hostinfo_used"><?php _e('Dismiss notice', 'geoip-detect'); ?></a>
|
64 |
+
|
65 |
+
|
66 |
<h3><?php _e( 'GeoIP Detection: No database installed', 'geoip-detect' ); ?></h3>
|
67 |
<p><?php printf(__('The Plugin %s is currently using the Webservice <a href="http://hostip.info" target="_blank">hostip.info</a> as data source. <br />You can click on the button below to download and install Maxmind GeoIPv2 Lite City now.', 'geoip-detect' ), $url); ?></p>
|
68 |
<p><?php printf(__('This database is licenced <a href="http://creativecommons.org/licenses/by-sa/3.0/">CC BY-SA</a>. See <a href="http://dev.maxmind.com/geoip/geoip2/geolite2/#License">License</a> for details.', 'geoip-detect')); ?>
|
69 |
+
|
70 |
+
|
71 |
+
|
72 |
<form action="options-general.php?page=<?php echo GEOIP_PLUGIN_BASENAME; ?>" method="post">
|
73 |
<?php wp_nonce_field( 'geoip_detect_update' ); ?>
|
74 |
<input type="hidden" name="source" value="auto" />
|
85 |
function geoip_detect_dismiss_message() {
|
86 |
if (!is_admin() || !is_user_logged_in())
|
87 |
return;
|
88 |
+
|
89 |
if (!isset($_GET['geoip_detect_dismiss_notice']))
|
90 |
return;
|
91 |
+
|
92 |
$dismiss = $_GET['geoip_detect_dismiss_notice'];
|
93 |
if ($dismiss) {
|
94 |
$ignored_notices = (array) get_user_meta(get_current_user_id(), 'geoip_detect_dismissed_notices', true);
|
95 |
+
|
96 |
if ($dismiss == '-1') { // Undocumented feature: reset dismissed messages
|
97 |
$ignored_notices = array();
|
98 |
} else if (!in_array($dismiss, $ignored_notices)) {
|
99 |
$ignored_notices[] = $dismiss;
|
100 |
}
|
101 |
+
|
102 |
+
update_user_meta(get_current_user_id(), 'geoip_detect_dismissed_notices', $ignored_notices);
|
103 |
}
|
104 |
}
|
105 |
add_action('admin_init', 'geoip_detect_dismiss_message');
|
106 |
+
|
107 |
+
// --------------------------------------- Privacy -------------------------------
|
108 |
+
|
109 |
+
function geoip_detect_add_privacy_policy_content() {
|
110 |
+
if ( ! function_exists( 'wp_add_privacy_policy_content' ) ) {
|
111 |
+
return;
|
112 |
+
}
|
113 |
+
|
114 |
+
$caching = '';
|
115 |
+
if (GEOIP_DETECT_READER_CACHE_TIME > 0 && !DataSourceRegistry::getInstance()->isCachingUsed()) {
|
116 |
+
$caching = sprintf(__('This site is saving the IP of the visitors of the last %s for performance reasons.', 'geoip-detect'), human_time_diff(0, GEOIP_DETECT_READER_CACHE_TIME));
|
117 |
+
}
|
118 |
+
$source = geoip_detect2_get_current_source_description();
|
119 |
+
$content = sprintf(__( 'This site is using %s to identify the geographic location of your IP adress. %s (Add here: how this information is used, how long it is retained. Be especially careful when using this information to change prices or selling options, as this might not be legal.)', 'geoip-detect' ),
|
120 |
+
$source, $caching);
|
121 |
+
|
122 |
+
wp_add_privacy_policy_content(
|
123 |
+
'GeoIP Detection',
|
124 |
+
wp_kses_post( wpautop( $content, false ) )
|
125 |
+
);
|
126 |
+
}
|
127 |
+
add_action( 'admin_init', 'geoip_detect_add_privacy_policy_content' );
|
legacy-api.php
CHANGED
@@ -1,7 +1,7 @@
|
|
1 |
<?php
|
2 |
/*
|
3 |
Copyright 2013-2018 Yellow Tree, Siegen, Germany
|
4 |
-
Author: Benjamin Pick (
|
5 |
|
6 |
This program is free software; you can redistribute it and/or modify
|
7 |
it under the terms of the GNU General Public License as published by
|
1 |
<?php
|
2 |
/*
|
3 |
Copyright 2013-2018 Yellow Tree, Siegen, Germany
|
4 |
+
Author: Benjamin Pick (wp-geoip-detect| |posteo.de)
|
5 |
|
6 |
This program is free software; you can redistribute it and/or modify
|
7 |
it under the terms of the GNU General Public License as published by
|
lib/geonames/geonames-country-info.php
CHANGED
@@ -1,7 +1,7 @@
|
|
1 |
<?php
|
2 |
/*
|
3 |
Copyright 2013-2018 Yellow Tree, Siegen, Germany
|
4 |
-
Author: Benjamin Pick (
|
5 |
|
6 |
This program is free software; you can redistribute it and/or modify
|
7 |
it under the terms of the GNU General Public License as published by
|
1 |
<?php
|
2 |
/*
|
3 |
Copyright 2013-2018 Yellow Tree, Siegen, Germany
|
4 |
+
Author: Benjamin Pick (wp-geoip-detect| |posteo.de)
|
5 |
|
6 |
This program is free software; you can redistribute it and/or modify
|
7 |
it under the terms of the GNU General Public License as published by
|
lib/get-client-ip.php
ADDED
@@ -0,0 +1,87 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
Copyright 2013-2018 Yellow Tree, Siegen, Germany
|
5 |
+
Author: Benjamin Pick (wp-geoip-detect| |posteo.de)
|
6 |
+
|
7 |
+
This program is free software; you can redistribute it and/or modify
|
8 |
+
it under the terms of the GNU General Public License as published by
|
9 |
+
the Free Software Foundation; either version 3 of the License, or
|
10 |
+
(at your option) any later version.
|
11 |
+
|
12 |
+
This program is distributed in the hope that it will be useful,
|
13 |
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
14 |
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
15 |
+
GNU General Public License for more details.
|
16 |
+
|
17 |
+
You should have received a copy of the GNU General Public License
|
18 |
+
along with this program; if not, write to the Free Software
|
19 |
+
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
20 |
+
*/
|
21 |
+
|
22 |
+
namespace YellowTree\GeoipDetect\Lib;
|
23 |
+
|
24 |
+
class GetClientIp {
|
25 |
+
protected $proxyWhitelist = [];
|
26 |
+
protected $useProxyWhitelist = false;
|
27 |
+
|
28 |
+
public function __construct() {
|
29 |
+
$this->proxyWhitelist[] = '';
|
30 |
+
$this->proxyWhitelist[] = '::1';
|
31 |
+
$this->proxyWhitelist[] = '127.0.0.1';
|
32 |
+
}
|
33 |
+
|
34 |
+
public function addProxiesToWhitelist($trusted_proxies) {
|
35 |
+
foreach ($trusted_proxies as $proxy) {
|
36 |
+
$proxy = geoip_detect_normalize_ip($proxy);
|
37 |
+
if ($proxy) {
|
38 |
+
$this->proxyWhitelist[] = $proxy;
|
39 |
+
$this->useProxyWhitelist = true;
|
40 |
+
}
|
41 |
+
}
|
42 |
+
}
|
43 |
+
|
44 |
+
protected function getIpsFromRemoteAddr() {
|
45 |
+
if (!isset($_SERVER['REMOTE_ADDR']))
|
46 |
+
return ['::1'];
|
47 |
+
|
48 |
+
// REMOTE_ADDR may contain multiple adresses
|
49 |
+
$ip_list = explode(',', $_SERVER['REMOTE_ADDR']);
|
50 |
+
|
51 |
+
return $ip_list;
|
52 |
+
}
|
53 |
+
|
54 |
+
protected function getIpsFromForwardedFor($currentIpList) {
|
55 |
+
$ip_list_reverse = explode(',', @$_SERVER["HTTP_X_FORWARDED_FOR"]);
|
56 |
+
|
57 |
+
if ($this->useProxyWhitelist) {
|
58 |
+
// Add the REMOTE_ADDR to the available IP pool
|
59 |
+
$ip_list_reverse = array_merge($ip_list_reverse, $currentIpList);
|
60 |
+
$ip_list_reverse = array_map('geoip_detect_normalize_ip', $ip_list_reverse);
|
61 |
+
$ip_list_reverse = array_diff($ip_list_reverse, $this->proxyWhitelist);
|
62 |
+
}
|
63 |
+
|
64 |
+
return $ip_list_reverse;
|
65 |
+
}
|
66 |
+
|
67 |
+
public function getIp($useReverseProxy = false) {
|
68 |
+
$ip_list = $this->getIpsFromRemoteAddr();
|
69 |
+
|
70 |
+
if ($useReverseProxy)
|
71 |
+
{
|
72 |
+
$ip_list = $this->getIpsFromForwardedFor($ip_list);
|
73 |
+
}
|
74 |
+
|
75 |
+
// Each Proxy server append their information at the end, so the last IP is most trustworthy.
|
76 |
+
$ip = end($ip_list);
|
77 |
+
$ip = geoip_detect_normalize_ip($ip);
|
78 |
+
|
79 |
+
if (!geoip_detect_is_ip($ip))
|
80 |
+
$ip = '::1'; // By default, use localhost
|
81 |
+
|
82 |
+
// this is the correct one!
|
83 |
+
$ip = apply_filters('geoip_detect2_client_ip', $ip, $ip_list);
|
84 |
+
|
85 |
+
return $ip;
|
86 |
+
}
|
87 |
+
}
|
readme.txt
CHANGED
@@ -18,8 +18,8 @@ as a shortcode, or via CSS body classes. The city & country names are translated
|
|
18 |
|
19 |
= Features: =
|
20 |
|
21 |
-
* Provides these 5 functions (see [API Documentation](https://github.com/yellowtree/wp-geoip-detect/wiki/API-Documentation)):
|
22 |
-
* `geoip_detect2_get_info_from_ip($ip, $locales = array('en'), $options = array())`: Lookup Geo-Information of the specified IP
|
23 |
* `geoip_detect2_get_info_from_current_ip($locales = array('en'), $options = array())`: Lookup Geo-Information of the current website user
|
24 |
* `geoip_detect2_get_current_source_description(...)`: Return a human-readable label of the currently chosen source.
|
25 |
* `geoip_detect2_get_external_ip_adress()`: Fetch the internet adress of the webserver
|
@@ -32,7 +32,8 @@ as a shortcode, or via CSS body classes. The city & country names are translated
|
|
32 |
* Hosting-Provider dependent: [Cloudflare](https://support.cloudflare.com/hc/en-us/articles/200168236-What-does-CloudFlare-IP-Geolocation-do-) or [Amazon AWS CloudFront](https://aws.amazon.com/blogs/aws/enhanced-cloudfront-customization/) (Country)
|
33 |
* For the property names, see the results of a specific IP in the wordpress backend (under *Tools > GeoIP Detection*).
|
34 |
* You can include these properties into your posts and pages by using the shortcode `[geoip_detect2 property="country.name" default="(country could not be detected)" lang="en"]` (where 'country.name' can be one of the other property names as well, and 'default' and 'lang' are optional).
|
35 |
-
*
|
|
|
36 |
* When enabled on the options page, the client IP respects a reverse proxy of the server.
|
37 |
* If you are using [Contact Form 7](https://wordpress.org/plugins/contact-form-7/), you can use these shortcodes:
|
38 |
* A select input with all countries, the detected country being selected by default `[geoip_detect2_countries mycountry]`
|
@@ -95,259 +96,22 @@ Does `geoip_detect2_get_info_from_current_ip()` return the same country, regardl
|
|
95 |
1. Lookup page (under Tools > GeoIP Lookup)
|
96 |
2. Options page (under Preferences > GeoIP Detection)
|
97 |
|
98 |
-
== Upgrade Notice ==
|
99 |
|
100 |
-
= 2.
|
101 |
-
|
102 |
-
This plugin version is compatible with PHP 7.2 and adapted the automatic update code.
|
103 |
-
|
104 |
-
= 2.8.0 =
|
105 |
-
|
106 |
-
Warning: This bugfix version of the plugin requires PHP 5.4.
|
107 |
-
|
108 |
-
= 2.6.0 =
|
109 |
-
|
110 |
-
Support for Cloudflare & AWS. 2 shortcodes for Contact Form 7.
|
111 |
-
|
112 |
-
= 2.5.6 =
|
113 |
-
|
114 |
-
Some users reported problems with open_basedir-notices - if that's you, this update will help. Otherwise there are no changes.
|
115 |
-
|
116 |
-
= 2.5.3 =
|
117 |
-
|
118 |
-
This is a security update (please update).
|
119 |
-
|
120 |
-
= 2.5.1 =
|
121 |
-
|
122 |
-
Hotfix: If you upgraded to 2.5.0, please verify that the correct datasource is still chosen. Sorry for any inconvenience caused.
|
123 |
-
|
124 |
-
= 2.5.0 =
|
125 |
-
|
126 |
-
If you use a caching plugin, you don't need to exempt geo-content pages manually anymore. When the API of this plugin is called, then this plugin signals to the caching plugin that this page should not be cached. You can disable this behavior on the options page.
|
127 |
-
|
128 |
-
= 2.4.2 =
|
129 |
-
|
130 |
-
You don't need to upgrade to this version, this release is mainly to fix installation behavior.
|
131 |
-
|
132 |
-
= 2.4.1 =
|
133 |
-
|
134 |
-
Reverting Requirements check to behavior before 2.4.0
|
135 |
-
|
136 |
-
= 2.4.0 =
|
137 |
-
|
138 |
-
Maxmind Precision API support is here ... Try it out, I would tag it "experimental" at the moment.
|
139 |
-
|
140 |
-
= 2.3.1 =
|
141 |
-
|
142 |
-
The plugin was down for licensing issues.
|
143 |
-
All users must now opt in to use the database because it is licensed CC BY-SA.
|
144 |
-
Otherwise, the Web-API of HostIP.info is used.
|
145 |
-
|
146 |
-
= 2.3.0 =
|
147 |
-
|
148 |
-
The plugin was down for licensing issues.
|
149 |
-
All users must now opt in to use the database because it is licensed CC BY-SA.
|
150 |
-
Otherwise, the Web-API of HostIP.info is used.
|
151 |
-
|
152 |
-
= 2.1.1 =
|
153 |
-
|
154 |
-
Update to v2.x is a major update.
|
155 |
-
At least PHP 5.3.1 is required now.
|
156 |
-
See Migration Guide at https://github.com/yellowtree/wp-geoip-detect/wiki/How-to-migrate-from-v1-to-v2
|
157 |
-
|
158 |
-
= 2.0.1 =
|
159 |
-
|
160 |
-
This major update uses the new Maxmind API (v2).
|
161 |
-
At least PHP 5.3.1 is required now.
|
162 |
-
See Migration Guide at https://github.com/yellowtree/wp-geoip-detect/wiki/How-to-migrate-from-v1-to-v2
|
163 |
-
|
164 |
-
= 1.7.1 =
|
165 |
-
|
166 |
-
Cron update was broken again ...
|
167 |
-
|
168 |
-
= 1.6 =
|
169 |
-
|
170 |
-
Automatic weekly update didn't work in all installations.
|
171 |
-
|
172 |
-
= 1.5 =
|
173 |
-
|
174 |
-
Fixing automatic weekly updates.
|
175 |
|
|
|
|
|
176 |
|
177 |
== Changelog ==
|
178 |
|
179 |
-
= 2.
|
180 |
-
*
|
181 |
-
*
|
182 |
-
*
|
183 |
-
*
|
184 |
-
|
185 |
-
|
186 |
-
|
187 |
-
(Was not released on wordpress.org)
|
188 |
-
|
189 |
-
= 2.8.0 =
|
190 |
-
|
191 |
-
* FIX: Localhost now always is a trusted proxy (for standard reverse proxy configurations, however the checkbox "uses a reverse proxy" still needs to be activated.)
|
192 |
-
* FIX: Timezone was overwritten by country data even though the maxmind data had already detected a timezone.
|
193 |
-
* ADD: If the manual datasource is used, the file will continue to be found if the site is moved to another host
|
194 |
-
* Maxmind vendor code was updated to the current version (2.6.0).
|
195 |
-
* PHP 5.4 is now required (due to the maxmind library).
|
196 |
-
|
197 |
-
= 2.7.0 =
|
198 |
-
|
199 |
-
* 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)
|
200 |
-
* ADD: New filter `geoip_detect2_shortcode_country_select_countries` for the country list of `[geoip_detect2_countries]`
|
201 |
-
* 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.
|
202 |
-
* FIX: Compatibility with CF 4.6 (remove deprecated function call)
|
203 |
-
* Maxmind vendor code was updated to the current version (2.4.5).
|
204 |
-
|
205 |
-
= 2.6.0 =
|
206 |
-
|
207 |
-
* ADD: New datasources for Cloudflare & Amazon AWS CloudFront (countries for current IP only).
|
208 |
-
* ADD: Country information (names, lat/lon, continent, localized in the different languages) are now filled in for sources that only detect the country code (Cloudflare, Amazon, hostip.info)
|
209 |
-
* ADD: 2 shortcodes for [Contact Form 7](https://wordpress.org/plugins/contact-form-7/) (a select with all countries `[geoip_detect2_countries mycountry]`, and tracking information for the email text `[geoip_detect2_user_info]`) - see [Documentation](https://github.com/yellowtree/wp-geoip-detect/wiki/API-Documentation#wp-contactform7-shortcodes)
|
210 |
-
* FIX: Cron scheduling is checked every time you visit the plugin page.
|
211 |
-
* FIX: Timezones of US & Canada are now detected more often (if country+state is known)
|
212 |
-
* FIX: Shortcode didn't use current sitelang as default, but always english
|
213 |
-
* Maxmind vendor code was updated to the current version (2.4.2).
|
214 |
-
|
215 |
-
= 2.5.7 =
|
216 |
-
* ADD: Shortcodes can now optionally specifiy the IP: `[geoip_detect2 property="country.isoCode" ip="(ipv4 or ipv6)"]`
|
217 |
-
* ADD: Plugin is now translated into German.
|
218 |
-
* FIX: `geoip_detect2_get_info_from_current_ip()` now also handles the case when REMOTE_ADDR contains multiple IP adresses
|
219 |
-
|
220 |
-
= 2.5.6 =
|
221 |
-
* FIX: Removed noticed concerning open_basedir.
|
222 |
-
|
223 |
-
= 2.5.5 =
|
224 |
-
|
225 |
-
* Clean-up changes to prepare plugin translation.
|
226 |
-
* FIX: Only show the "no database installed" admin notice to admins (props @meitar)
|
227 |
-
|
228 |
-
= 2.5.4 =
|
229 |
-
|
230 |
-
* FIX: Manual datasource filepath handling corrected.
|
231 |
-
* FIX: Potential incompability with BuddyPress removed.
|
232 |
-
|
233 |
-
= 2.5.3 =
|
234 |
-
|
235 |
-
* FIX: (Security) Add nonces to backend to avoid CSRF (thanks to Gerard Arall).
|
236 |
-
* FIX: Do not use PHP shortcode tags (<?=) as some servers do not support it with PHP 5.3
|
237 |
-
* Maxmind vendor code was updated to the current version (2.3.3).
|
238 |
-
|
239 |
-
= 2.5.2 =
|
240 |
-
* FIX: Also disallow proxy caching via HTTP header, if possible.
|
241 |
-
* NEW: Shortcodes for the other API functions: `[geoip_detect2_get_current_source_description]`, `[geoip_detect2_get_client_ip]`, and `[geoip_detect2_get_external_ip_adress]`
|
242 |
-
* FIX: geoip_detect2_get_external_ip_adress() : do not filter if $unfiltered is true.
|
243 |
-
|
244 |
-
= 2.5.1 =
|
245 |
-
* FIX: Upgrade script did change the source.
|
246 |
-
* FIX: Page caching is only disabled on upgrade when `set_css_country` is disabled.
|
247 |
-
|
248 |
-
= 2.5.0 =
|
249 |
-
* CHANGE: The parameter $skipCache is now $options['skipCache']. Using $skipCache is deprecated, but still works.
|
250 |
-
* NEW: $options['timeout'] for Web-API lookups can now be specified.
|
251 |
-
* FIX: Hostip.info did not set traits->ipAddress
|
252 |
-
* FIX: Hostip.info does not include data for IPv6. Add a lookup error message.
|
253 |
-
* NEW: Disable page caching if geoip-API was called (this is configurable in the options). (Supported plugins: WP Super Cache, W3 Total Cache, ZenCache, and possibly others)
|
254 |
-
* Maxmind vendor code was updated to the current version (2.3.1).
|
255 |
-
|
256 |
-
= 2.4.3 =
|
257 |
-
* FIX: Options Page: The checkboxes didn't show (even though the option was saved) since 2.4.0
|
258 |
-
* NEW: A fixed external IP can now be specified on the options page. (Useful in development scenarios without internet, or mixed internet/intranet cases. You can also use this to speed up things on the production server if you know the IP will not change.)
|
259 |
-
* NEW: Hidden feature/side-effect: Clicking on save in the General Options section also empties the external IP cache.
|
260 |
-
|
261 |
-
= 2.4.2 =
|
262 |
-
* FIX: Trim whitespace of IP adress.
|
263 |
-
* FIX: some PHP notices.
|
264 |
-
* FIX: The Installation message "No database installed" failed to install the Maxmind database since 2.4.0
|
265 |
-
* NEW: Show IPv6-not-supported notice.
|
266 |
-
* FIX: Add empty fallback functions in case the plugin requirements are not met. (To avoid fatal errors.)
|
267 |
-
|
268 |
-
= 2.4.1 =
|
269 |
-
* FIX: Revert IPv6 check. (Sorry for this. I thought PHP compiled without IPv6 would be esoteric.)
|
270 |
-
|
271 |
-
= 2.4.0 =
|
272 |
-
This is a major refactor in order to support multiple sources properly. The Lookup and the Options were seperated into 2 screens (accessible in the menu under `Tools` and `Options`, respectively.)
|
273 |
-
|
274 |
-
* NEW: Add a Cache for Web-API-Requests. Consequently, the function geoip_detect2_get_info_from_ip() received a new parameter "$skipCache" to skip this cache if not needed. You can check if the result is coming from the cache by checking $result->extra->cached (it is 0 when not cached, UNIX timestamp of cache event otherwise).
|
275 |
-
* This also applies to the shortcode API (`[geoip_detect2 property="extra.cached" skip_cache="true"]`)
|
276 |
-
* NEW: Error messages during lookup are now in `$record->extra->error`.
|
277 |
-
* NEW: Experimental support for the Maxmind Precision API.
|
278 |
-
* NEW: Shortcodes now also support fallback languages. (`[geoip_detect2 property="country" lang="fr,de"]`)
|
279 |
-
* FIX: Check for IPv6 support for PHP.
|
280 |
-
* FIX: Country data now also get timezones.
|
281 |
-
|
282 |
-
= 2.3.1 =
|
283 |
-
* NEW: API function geoip_detect2_get_current_source_description() (as there are different sources to choose from now)
|
284 |
-
* FIX: Show error message if PHP < 5.3 (instead of fatal error)
|
285 |
-
|
286 |
-
= 2.3.0 =
|
287 |
-
* NEW: Add HostIP.info-Support
|
288 |
-
|
289 |
-
= 2.2.0 =
|
290 |
-
* FIX: Update Maxmind Reader to 1.0.3 (fixing issues when the PHP extension mbstring was not installed)
|
291 |
-
* NEW: Commercial databases are now supported. You can specify a file path in the options.
|
292 |
-
* NEW: A country database (lite or commercial) database now works as well.
|
293 |
-
* NEW: License is now displayed before install.
|
294 |
-
|
295 |
-
= 2.1.2 =
|
296 |
-
* FIX: Show error message if PHP < 5.3 (instead of fatal error)
|
297 |
-
* FIX: Support multiple proxies (but currently only one reverse proxy)
|
298 |
-
|
299 |
-
= 2.1.1 =
|
300 |
-
* FIX: Notice "Database missing" should not show during/right after database update.
|
301 |
-
|
302 |
-
= 2.1.0 =
|
303 |
-
* NEW: A nagging admin notice shows up on every wp-admin page when no database is installed (yet).
|
304 |
-
|
305 |
-
= 2.0.1 =
|
306 |
-
* NEW: Using v2 version of the API.
|
307 |
-
See Migration Guide at [Github](https://github.com/yellowtree/wp-geoip-detect/wiki/How-to-migrate-from-v1-to-v2)
|
308 |
-
|
309 |
-
Other changes:
|
310 |
-
|
311 |
-
* NEW: The v2-functions now support location names in other locales. By default, they return the current site language if possible.
|
312 |
-
* NEW: The new shortcode [geoip_detect2 ...] also supports a "lang"-Attribute.
|
313 |
-
* NEW: IPv6 addresses are now supported as well.
|
314 |
-
* Legacy function names and shortcode should work in most cases. For details check the guide above.
|
315 |
-
|
316 |
-
= 2.0.0 =
|
317 |
-
|
318 |
-
(Was not released on wordpress.org to make sure that development releases get this update as well.)
|
319 |
-
|
320 |
-
= 1.8 =
|
321 |
-
* NEW: Support reverse proxies (you have to enable it in the plugin options.)
|
322 |
-
* NEW: Shortcode now has a default value when no information for this IP found.
|
323 |
-
|
324 |
-
= 1.7.1 =
|
325 |
-
* FIX: Fatal error on cron run
|
326 |
-
|
327 |
-
= 1.7 =
|
328 |
-
* FIX: Schedule Database update to do in background immediately after plugin installation/re-activation.
|
329 |
-
* FIX: Longitude can be smaller than -90
|
330 |
-
|
331 |
-
= 1.6 =
|
332 |
-
* NEW: Can add a country- and continent-specific class on the body tag. You need to activate this in the options.
|
333 |
-
* FIX: Automatic weekly update. (Didn't work on all installations).
|
334 |
-
* FIX: Do not include Maxmind Libraries again if already included by another plugin/theme
|
335 |
-
|
336 |
-
= 1.5 =
|
337 |
-
* FIX: Automatic weekly update. Go to the plugin page (Tools menu) to verify that an update is planned.
|
338 |
-
|
339 |
-
= 1.4 =
|
340 |
-
* Feature: Add shortcode [geoip_detect property="(property name)"] for direct use in posts/pages
|
341 |
-
|
342 |
-
= 1.3 =
|
343 |
-
* FIX: Manual install works again (was broken since 1.2)
|
344 |
-
|
345 |
-
= 1.2 =
|
346 |
-
* FIX: property region_name is now filled again (was broken since 1.1)
|
347 |
-
|
348 |
-
= 1.1 =
|
349 |
-
* Add function `geoip_detect_get_external_ip_adress()`: Ask a webservice to tell me the external IP of the webserver.
|
350 |
-
* New filter: When developing locally, the external IP is used to determine the geographic location.
|
351 |
|
352 |
-
|
353 |
-
* First working release.
|
18 |
|
19 |
= Features: =
|
20 |
|
21 |
+
* Provides these 5 functions (see [API Documentation](https://github.com/yellowtree/wp-geoip-detect/wiki/API-Documentation)):
|
22 |
+
* `geoip_detect2_get_info_from_ip($ip, $locales = array('en'), $options = array())`: Lookup Geo-Information of the specified IP
|
23 |
* `geoip_detect2_get_info_from_current_ip($locales = array('en'), $options = array())`: Lookup Geo-Information of the current website user
|
24 |
* `geoip_detect2_get_current_source_description(...)`: Return a human-readable label of the currently chosen source.
|
25 |
* `geoip_detect2_get_external_ip_adress()`: Fetch the internet adress of the webserver
|
32 |
* Hosting-Provider dependent: [Cloudflare](https://support.cloudflare.com/hc/en-us/articles/200168236-What-does-CloudFlare-IP-Geolocation-do-) or [Amazon AWS CloudFront](https://aws.amazon.com/blogs/aws/enhanced-cloudfront-customization/) (Country)
|
33 |
* For the property names, see the results of a specific IP in the wordpress backend (under *Tools > GeoIP Detection*).
|
34 |
* You can include these properties into your posts and pages by using the shortcode `[geoip_detect2 property="country.name" default="(country could not be detected)" lang="en"]` (where 'country.name' can be one of the other property names as well, and 'default' and 'lang' are optional).
|
35 |
+
* You can show or hide content by using a shortcode `[geoip_detect2_show_if country="FR, DE" not_city="Berlin"]TEXT[/geoip_detect2_show_if]`. See [API Documentation](https://github.com/yellowtree/wp-geoip-detect/wiki/API-Documentation#show-or-hide-content-depending-on-the-location).
|
36 |
+
* When enabled on the options page, it adds CSS classes to the body tag such as `geoip-province-HE`, `geoip-country-DE` and `geoip-continent-EU`.
|
37 |
* When enabled on the options page, the client IP respects a reverse proxy of the server.
|
38 |
* If you are using [Contact Form 7](https://wordpress.org/plugins/contact-form-7/), you can use these shortcodes:
|
39 |
* A select input with all countries, the detected country being selected by default `[geoip_detect2_countries mycountry]`
|
96 |
1. Lookup page (under Tools > GeoIP Lookup)
|
97 |
2. Options page (under Preferences > GeoIP Detection)
|
98 |
|
99 |
+
== Upgrade Notice ==
|
100 |
|
101 |
+
= 2.9.0 =
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
102 |
|
103 |
+
There have been changes to the reverse proxy logic. If you have enabled a reverse proxy, check if the detected IP is correct.
|
104 |
+
New: Shortcode for showing/hiding content!
|
105 |
|
106 |
== Changelog ==
|
107 |
|
108 |
+
= 2.9.0 =
|
109 |
+
* Add default Privacy text for GDPR compliance.
|
110 |
+
* The reverse proxy logic was heavily changed. If you run into configuration errors, try the debug panel (see link after the reverse proxy option).
|
111 |
+
* NEW: Reverse proxies can now be whitelisted - all non-whitelisted proxies are treated as user IP.
|
112 |
+
* NEW: Shortcode to show/hide content dynamically. (`[geoip_detect2_show_if country="US" not_state="Texas"]TEXT[/geoip_detect2_show_if]`) (Thanks to @DynAggelos!)
|
113 |
+
* NEW: All shortcodes now support multiple subdivisions (`[geoip_detect2 property="subdivisions.0.isoCode"]`)
|
114 |
+
* NEW: The CSS classes that are added to the body-tag (if enabled in the options) now also include the most specific subdivision (`geoip-province-HE`).
|
115 |
+
* Maxmind vendor code was updated to the current version (2.9.0).
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
116 |
|
117 |
+
[Older changelog](https://github.com/yellowtree/wp-geoip-detect/blob/master/CHANGELOG.md)
|
|
shortcode.php
CHANGED
@@ -1,7 +1,7 @@
|
|
1 |
<?php
|
2 |
/*
|
3 |
Copyright 2013-2018 Yellow Tree, Siegen, Germany
|
4 |
-
Author: Benjamin Pick (
|
5 |
|
6 |
This program is free software; you can redistribute it and/or modify
|
7 |
it under the terms of the GNU General Public License as published by
|
@@ -19,112 +19,145 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
19 |
*/
|
20 |
|
21 |
/**
|
22 |
-
* @deprecated
|
23 |
*/
|
24 |
function geoip_detect_shortcode($attr)
|
25 |
{
|
26 |
$userInfo = geoip_detect_get_info_from_current_ip();
|
27 |
|
28 |
-
$defaultValue = isset($attr['default']) ? $attr['default'] : '';
|
29 |
-
|
30 |
if (!is_object($userInfo))
|
31 |
return $defaultValue . '<!-- GeoIP Detect: No info found for this IP. -->';
|
32 |
|
33 |
$propertyName = $attr['property'];
|
34 |
-
|
35 |
-
|
36 |
if (property_exists($userInfo, $propertyName)) {
|
37 |
if ($userInfo->$propertyName)
|
38 |
return $userInfo->$propertyName;
|
39 |
else
|
40 |
return $defaultValue;
|
41 |
}
|
42 |
-
|
43 |
return $defaultValue . '<!-- GeoIP Detect: Invalid property name. -->';
|
44 |
}
|
45 |
add_shortcode('geoip_detect', 'geoip_detect_shortcode');
|
46 |
|
47 |
/**
|
48 |
* Short Code
|
49 |
-
*
|
50 |
* Examples:
|
51 |
* `[geoip_detect2 property="country"]` -> Germany
|
52 |
* `[geoip_detect2 property="country.isoCode"]` -> DE
|
53 |
* `[geoip_detect2 property="country.isoCode" ip="8.8.8.8"]` -> US
|
54 |
-
*
|
55 |
* `[geoip_detect2 property="country" lang="de"]` -> Deutschland
|
56 |
* `[geoip_detect2 property="country" lang="fr,de"]` -> Allemagne
|
57 |
-
* `[geoip_detect2 property="country.confidence" default="default value"]` -> default value
|
58 |
-
*
|
59 |
* @param string $property Property to read. Instead of '->', use '.'
|
60 |
* @param string $lang Language(s) (optional. If not set, current site language is used.)
|
61 |
* @param string $default Default Value that will be shown if value not set (optional)
|
62 |
-
* @param string $
|
63 |
*
|
64 |
* @since 2.5.7 New attribute `ip`
|
65 |
*/
|
66 |
-
function geoip_detect2_shortcode($attr)
|
67 |
{
|
68 |
-
$
|
69 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
70 |
$locales = isset($attr['lang']) ? $attr['lang'] . ',en' : null;
|
71 |
$locales = apply_filters('geoip_detect2_locales', $locales);
|
72 |
|
73 |
-
$defaultValue =
|
74 |
-
|
75 |
-
$properties = explode('.', $attr['property']);
|
76 |
-
|
77 |
$options = array('skipCache' => $skipCache);
|
78 |
-
|
79 |
-
$ip =
|
80 |
-
|
81 |
$userInfo = geoip_detect2_get_info_from_ip($ip, $locales, $options);
|
82 |
|
83 |
if ($userInfo->isEmpty)
|
84 |
-
return $defaultValue . '<!-- GeoIP Detect: No information found for this IP (' . geoip_detect2_get_client_ip() . ') -->';
|
85 |
-
|
86 |
-
$return = '';
|
87 |
try {
|
88 |
-
|
89 |
-
$return = $userInfo->{$properties[0]};
|
90 |
-
} else if (count($properties) == 2) {
|
91 |
-
$return = $userInfo->{$properties[0]};
|
92 |
-
if (!is_object($return))
|
93 |
-
throw new \RuntimeException('Invalid property name.');
|
94 |
-
$return = $return->{$properties[1]};
|
95 |
-
} else {
|
96 |
-
throw new \RuntimeException('Only 1 dot supported. Please send a bug report to show me the shortcode you used if you need it ...');
|
97 |
-
}
|
98 |
} catch (\RuntimeException $e) {
|
99 |
return $defaultValue . '<!-- GeoIP Detect: Invalid property name. -->';
|
100 |
}
|
101 |
|
102 |
-
if (is_object($return) && $return instanceof \GeoIp2\Record\AbstractPlaceRecord)
|
103 |
$return = $return->name;
|
104 |
-
|
|
|
105 |
if (is_object($return) || is_array($return)) {
|
106 |
return $defaultValue . '<!-- GeoIP Detect: Invalid property name (sub-property missing). -->';
|
107 |
}
|
108 |
-
|
109 |
if ($return)
|
110 |
return (string) $return;
|
111 |
else
|
112 |
return $defaultValue;
|
113 |
-
|
114 |
}
|
115 |
add_shortcode('geoip_detect2', 'geoip_detect2_shortcode');
|
116 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
117 |
function geoip_detect2_shortcode_client_ip($attr) {
|
118 |
$client_ip = geoip_detect2_get_client_ip();
|
119 |
geoip_detect_normalize_ip($client_ip);
|
120 |
-
|
121 |
return $client_ip;
|
122 |
}
|
123 |
add_shortcode('geoip_detect2_get_client_ip', 'geoip_detect2_shortcode_client_ip');
|
124 |
|
125 |
function geoip_detect2_shortcode_get_external_ip_adress($attr) {
|
126 |
$external_ip = geoip_detect2_get_external_ip_adress();
|
127 |
-
|
128 |
return $external_ip;
|
129 |
}
|
130 |
add_shortcode('geoip_detect2_get_external_ip_adress', 'geoip_detect2_shortcode_get_external_ip_adress');
|
@@ -138,23 +171,23 @@ add_shortcode('geoip_detect2_get_current_source_description', 'geoip_detect2_sho
|
|
138 |
|
139 |
/**
|
140 |
* Create a <select>-Input element with all countries.
|
141 |
-
*
|
142 |
* Examples:
|
143 |
* `[geoip_detect2_countries_select name="mycountry" lang="fr"]`
|
144 |
* A list of all country names in French, the visitor's country is preselected.
|
145 |
-
*
|
146 |
* `[geoip_detect2_countries_select id="id" class="class" name="mycountry" lang="fr"]`
|
147 |
* As above, with CSS id "#id" and class ".class"
|
148 |
-
*
|
149 |
* `[geoip_detect2_countries_select name="mycountry" include_blank="true"]`
|
150 |
* Country names are in the current site language. User can also choose '---' for no country at all.
|
151 |
-
*
|
152 |
* `[geoip_detect2_countries_select name="mycountry" selected="US"]`
|
153 |
* "United States" is preselected, there is no visitor IP detection going on here
|
154 |
-
*
|
155 |
* `[geoip_detect2_countries_select name="mycountry" default="US"]`
|
156 |
* Visitor's country is preselected, but in case the country is unknown, use "United States"
|
157 |
-
*
|
158 |
* @param string $name Name of the form element
|
159 |
* @param string $id CSS Id of element
|
160 |
* @param string $class CSS Class of element
|
@@ -162,7 +195,7 @@ add_shortcode('geoip_detect2_get_current_source_description', 'geoip_detect2_sho
|
|
162 |
* @param string $selected Which country to select by default (2-letter ISO code.) (optional. If not set, the country will be detected by client ip.)
|
163 |
* @param string $default Default Value that will be used if country cannot be detected (optional)
|
164 |
* @param string $include_blank If this value contains 'true', a empty value will be prepended ('---', i.e. no country) (optional)
|
165 |
-
*
|
166 |
* @return string The generated HTML
|
167 |
*/
|
168 |
function geoip_detect2_shortcode_country_select($attr) {
|
@@ -177,7 +210,7 @@ function geoip_detect2_shortcode_country_select($attr) {
|
|
177 |
if (isset($attr['default']))
|
178 |
$selected = $attr['default'];
|
179 |
}
|
180 |
-
|
181 |
$locales = !empty($attr['lang']) ? $attr['lang'] : null;
|
182 |
$locales = apply_filters('geoip_detect2_locales', $locales);
|
183 |
|
@@ -201,7 +234,7 @@ function geoip_detect2_shortcode_country_select($attr) {
|
|
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
|
@@ -209,22 +242,22 @@ function geoip_detect2_shortcode_country_select($attr) {
|
|
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');
|
@@ -233,32 +266,32 @@ add_shortcode('geoip_detect2_countries', 'geoip_detect2_shortcode_country_select
|
|
233 |
/**
|
234 |
*
|
235 |
* Examples:
|
236 |
-
*
|
237 |
* `[geoip_detect2_countries mycountry id:id class:class lang:fr]`
|
238 |
* A list of all country names in French (with CSS id "#id" and class ".class"), the visitor's country is preselected.
|
239 |
-
*
|
240 |
* `[geoip_detect2_countries mycountry include_blank]`
|
241 |
* Country names are in the current site language. User can also choose '---' for no country at all.
|
242 |
-
*
|
243 |
* `[geoip_detect2_countries mycountry "US"]`
|
244 |
* "United States" is preselected, there is no visitor IP detection going on here
|
245 |
-
*
|
246 |
* `[geoip_detect2_countries mycountry default:US]`
|
247 |
* Visitor's country is preselected, but in case the country is unknown, use "United States"
|
248 |
*
|
249 |
*/
|
250 |
function geoip_detect2_shortcode_country_select_wpcf7($tag) {
|
251 |
$tag = new WPCF7_FormTag( $tag );
|
252 |
-
|
253 |
$default = (string) reset( $tag->values );
|
254 |
$default = $tag->get_default_option($default, array('multiple' => false));
|
255 |
$default = wpcf7_get_hangover( $tag->name, $default ); // Get from $_POST if available
|
256 |
-
|
257 |
$class = wpcf7_form_controls_class( $tag->type );
|
258 |
$validation_error = wpcf7_get_validation_error( $tag->name );
|
259 |
if ($validation_error)
|
260 |
$class .= ' wpcf7-not-valid';
|
261 |
-
|
262 |
$attr = array(
|
263 |
'name' => $tag->name,
|
264 |
'include_blank' => $tag->has_option( 'include_blank' ),
|
@@ -271,22 +304,22 @@ function geoip_detect2_shortcode_country_select_wpcf7($tag) {
|
|
271 |
'default' => $tag->get_option('default', '', true),
|
272 |
);
|
273 |
$html = geoip_detect2_shortcode_country_select($attr);
|
274 |
-
|
275 |
$html = sprintf(
|
276 |
'<span class="wpcf7-form-control-wrap %1$s">%2$s %3$s</span>',
|
277 |
sanitize_html_class( $tag->name ), $html, $validation_error );
|
278 |
-
|
279 |
return $html;
|
280 |
}
|
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 |
|
@@ -316,4 +349,176 @@ add_filter( 'wpcf7_special_mail_tags', 'geoip_detect2_shortcode_user_info_wpcf7'
|
|
316 |
function geoip_detect_shortcode_user_info($attr) {
|
317 |
return geoip_detect2_shortcode_user_info_wpcf7('', 'geoip_detect2_user_info', true);
|
318 |
}
|
319 |
-
add_shortcode('geoip_detect2_user_info', 'geoip_detect_shortcode_user_info');
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
<?php
|
2 |
/*
|
3 |
Copyright 2013-2018 Yellow Tree, Siegen, Germany
|
4 |
+
Author: Benjamin Pick (wp-geoip-detect| |posteo.de)
|
5 |
|
6 |
This program is free software; you can redistribute it and/or modify
|
7 |
it under the terms of the GNU General Public License as published by
|
19 |
*/
|
20 |
|
21 |
/**
|
22 |
+
* @deprecated
|
23 |
*/
|
24 |
function geoip_detect_shortcode($attr)
|
25 |
{
|
26 |
$userInfo = geoip_detect_get_info_from_current_ip();
|
27 |
|
28 |
+
$defaultValue = isset($attr['default']) ? $attr['default'] : '';
|
29 |
+
|
30 |
if (!is_object($userInfo))
|
31 |
return $defaultValue . '<!-- GeoIP Detect: No info found for this IP. -->';
|
32 |
|
33 |
$propertyName = $attr['property'];
|
34 |
+
|
35 |
+
|
36 |
if (property_exists($userInfo, $propertyName)) {
|
37 |
if ($userInfo->$propertyName)
|
38 |
return $userInfo->$propertyName;
|
39 |
else
|
40 |
return $defaultValue;
|
41 |
}
|
42 |
+
|
43 |
return $defaultValue . '<!-- GeoIP Detect: Invalid property name. -->';
|
44 |
}
|
45 |
add_shortcode('geoip_detect', 'geoip_detect_shortcode');
|
46 |
|
47 |
/**
|
48 |
* Short Code
|
49 |
+
*
|
50 |
* Examples:
|
51 |
* `[geoip_detect2 property="country"]` -> Germany
|
52 |
* `[geoip_detect2 property="country.isoCode"]` -> DE
|
53 |
* `[geoip_detect2 property="country.isoCode" ip="8.8.8.8"]` -> US
|
54 |
+
*
|
55 |
* `[geoip_detect2 property="country" lang="de"]` -> Deutschland
|
56 |
* `[geoip_detect2 property="country" lang="fr,de"]` -> Allemagne
|
57 |
+
* `[geoip_detect2 property="country.confidence" skip_cache="true" default="default value"]` -> default value
|
58 |
+
*
|
59 |
* @param string $property Property to read. Instead of '->', use '.'
|
60 |
* @param string $lang Language(s) (optional. If not set, current site language is used.)
|
61 |
* @param string $default Default Value that will be shown if value not set (optional)
|
62 |
+
* @param string $skip_cache if 'true': Do not cache value
|
63 |
*
|
64 |
* @since 2.5.7 New attribute `ip`
|
65 |
*/
|
66 |
+
function geoip_detect2_shortcode($attr, $content, $shortcodeName)
|
67 |
{
|
68 |
+
$attr = shortcode_atts(array(
|
69 |
+
'skip_cache' => 'false',
|
70 |
+
'lang' => null,
|
71 |
+
'default' => '',
|
72 |
+
'property' => '',
|
73 |
+
'ip' => null,
|
74 |
+
), $attr, $shortcodeName);
|
75 |
+
|
76 |
+
$skipCache = filter_var($attr['skip_cache'], FILTER_VALIDATE_BOOLEAN );
|
77 |
+
|
78 |
$locales = isset($attr['lang']) ? $attr['lang'] . ',en' : null;
|
79 |
$locales = apply_filters('geoip_detect2_locales', $locales);
|
80 |
|
81 |
+
$defaultValue = $attr['default'];
|
82 |
+
|
|
|
|
|
83 |
$options = array('skipCache' => $skipCache);
|
84 |
+
|
85 |
+
$ip = $attr['ip'] ?: geoip_detect2_get_client_ip();
|
86 |
+
|
87 |
$userInfo = geoip_detect2_get_info_from_ip($ip, $locales, $options);
|
88 |
|
89 |
if ($userInfo->isEmpty)
|
90 |
+
return $defaultValue . '<!-- GeoIP Detect: No information found for this IP (' . geoip_detect2_get_client_ip() . ') -->';
|
91 |
+
|
|
|
92 |
try {
|
93 |
+
$return = geoip_detect2_shortcode_get_property($userInfo, $attr['property']);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
94 |
} catch (\RuntimeException $e) {
|
95 |
return $defaultValue . '<!-- GeoIP Detect: Invalid property name. -->';
|
96 |
}
|
97 |
|
98 |
+
if (is_object($return) && $return instanceof \GeoIp2\Record\AbstractPlaceRecord) {
|
99 |
$return = $return->name;
|
100 |
+
}
|
101 |
+
|
102 |
if (is_object($return) || is_array($return)) {
|
103 |
return $defaultValue . '<!-- GeoIP Detect: Invalid property name (sub-property missing). -->';
|
104 |
}
|
105 |
+
|
106 |
if ($return)
|
107 |
return (string) $return;
|
108 |
else
|
109 |
return $defaultValue;
|
110 |
+
|
111 |
}
|
112 |
add_shortcode('geoip_detect2', 'geoip_detect2_shortcode');
|
113 |
|
114 |
+
/**
|
115 |
+
* [geoip_detect2_shortcode_get_property description]
|
116 |
+
* @param [type] $userInfo [description]
|
117 |
+
* @param [type] $propertyName [description]
|
118 |
+
* @return [type] [description]
|
119 |
+
* @throws \RuntimeException (if Property name invalid)
|
120 |
+
*/
|
121 |
+
function geoip_detect2_shortcode_get_property($userInfo, $propertyName) {
|
122 |
+
$return = '';
|
123 |
+
$properties = explode('.', $propertyName);
|
124 |
+
if (count($properties) == 1) {
|
125 |
+
$return = $userInfo->{$properties[0]};
|
126 |
+
} else if ($properties[0] == 'subdivisions' && (count($properties) == 2 || count($properties) == 3)) {
|
127 |
+
$return = $userInfo->{$properties[0]};
|
128 |
+
if (!is_array($return))
|
129 |
+
throw new \RuntimeException('Invalid property name.');
|
130 |
+
if (!is_numeric($properties[1]))
|
131 |
+
throw new \RuntimeException('Invalid property name (must be numeric, e.g. "subdivisions.0").');
|
132 |
+
$return = $return[(int) $properties[1]];
|
133 |
+
|
134 |
+
if (isset($properties[2])) {
|
135 |
+
if (!is_object($return))
|
136 |
+
throw new \RuntimeException('Invalid property name.');
|
137 |
+
$return = $return->{$properties[2]};
|
138 |
+
}
|
139 |
+
} else if (count($properties) == 2) {
|
140 |
+
$return = $userInfo->{$properties[0]};
|
141 |
+
if (!is_object($return))
|
142 |
+
throw new \RuntimeException('Invalid property name.');
|
143 |
+
$return = $return->{$properties[1]};
|
144 |
+
} else {
|
145 |
+
throw new \RuntimeException('Only 1 dot supported. Please send a bug report to show me the shortcode you used if you need it ...');
|
146 |
+
}
|
147 |
+
return $return;
|
148 |
+
}
|
149 |
+
|
150 |
function geoip_detect2_shortcode_client_ip($attr) {
|
151 |
$client_ip = geoip_detect2_get_client_ip();
|
152 |
geoip_detect_normalize_ip($client_ip);
|
153 |
+
|
154 |
return $client_ip;
|
155 |
}
|
156 |
add_shortcode('geoip_detect2_get_client_ip', 'geoip_detect2_shortcode_client_ip');
|
157 |
|
158 |
function geoip_detect2_shortcode_get_external_ip_adress($attr) {
|
159 |
$external_ip = geoip_detect2_get_external_ip_adress();
|
160 |
+
|
161 |
return $external_ip;
|
162 |
}
|
163 |
add_shortcode('geoip_detect2_get_external_ip_adress', 'geoip_detect2_shortcode_get_external_ip_adress');
|
171 |
|
172 |
/**
|
173 |
* Create a <select>-Input element with all countries.
|
174 |
+
*
|
175 |
* Examples:
|
176 |
* `[geoip_detect2_countries_select name="mycountry" lang="fr"]`
|
177 |
* A list of all country names in French, the visitor's country is preselected.
|
178 |
+
*
|
179 |
* `[geoip_detect2_countries_select id="id" class="class" name="mycountry" lang="fr"]`
|
180 |
* As above, with CSS id "#id" and class ".class"
|
181 |
+
*
|
182 |
* `[geoip_detect2_countries_select name="mycountry" include_blank="true"]`
|
183 |
* Country names are in the current site language. User can also choose '---' for no country at all.
|
184 |
+
*
|
185 |
* `[geoip_detect2_countries_select name="mycountry" selected="US"]`
|
186 |
* "United States" is preselected, there is no visitor IP detection going on here
|
187 |
+
*
|
188 |
* `[geoip_detect2_countries_select name="mycountry" default="US"]`
|
189 |
* Visitor's country is preselected, but in case the country is unknown, use "United States"
|
190 |
+
*
|
191 |
* @param string $name Name of the form element
|
192 |
* @param string $id CSS Id of element
|
193 |
* @param string $class CSS Class of element
|
195 |
* @param string $selected Which country to select by default (2-letter ISO code.) (optional. If not set, the country will be detected by client ip.)
|
196 |
* @param string $default Default Value that will be used if country cannot be detected (optional)
|
197 |
* @param string $include_blank If this value contains 'true', a empty value will be prepended ('---', i.e. no country) (optional)
|
198 |
+
*
|
199 |
* @return string The generated HTML
|
200 |
*/
|
201 |
function geoip_detect2_shortcode_country_select($attr) {
|
210 |
if (isset($attr['default']))
|
211 |
$selected = $attr['default'];
|
212 |
}
|
213 |
+
|
214 |
$locales = !empty($attr['lang']) ? $attr['lang'] : null;
|
215 |
$locales = apply_filters('geoip_detect2_locales', $locales);
|
216 |
|
234 |
* Filter: geoip_detect2_shortcode_country_select_countries
|
235 |
* Change the list of countries that should show up in the select box.
|
236 |
* You can add, remove, reorder countries at will.
|
237 |
+
* If you want to add a blank value (for seperators or so), use a key name that starts with 'blank_'
|
238 |
* and then something at will in case you need several of them.
|
239 |
*
|
240 |
* @param array $countries List of localized country names
|
242 |
* @return array
|
243 |
*/
|
244 |
$countries = apply_filters('geoip_detect2_shortcode_country_select_countries', $countries, $attr);
|
245 |
+
|
246 |
$html = '<select ' . $select_attrs_html . '>';
|
247 |
+
if (!empty($attr['include_blank']) && $attr['include_blank'] !== 'false')
|
248 |
$html .= '<option value="">---</option>';
|
249 |
foreach ($countries as $code => $label) {
|
250 |
if (substr($code, 0, 6) == 'blank_')
|
251 |
{
|
252 |
+
$html .= '<option value="">' . esc_html($label) . '</option>';
|
253 |
}
|
254 |
else
|
255 |
{
|
256 |
+
$html .= '<option' . ($code == $selected ? ' selected="selected"' : '') . '>' . esc_html($label) . '</option>';
|
257 |
}
|
258 |
}
|
259 |
$html .= '</select>';
|
260 |
+
|
261 |
return $html;
|
262 |
}
|
263 |
add_shortcode('geoip_detect2_countries_select', 'geoip_detect2_shortcode_country_select');
|
266 |
/**
|
267 |
*
|
268 |
* Examples:
|
269 |
+
*
|
270 |
* `[geoip_detect2_countries mycountry id:id class:class lang:fr]`
|
271 |
* A list of all country names in French (with CSS id "#id" and class ".class"), the visitor's country is preselected.
|
272 |
+
*
|
273 |
* `[geoip_detect2_countries mycountry include_blank]`
|
274 |
* Country names are in the current site language. User can also choose '---' for no country at all.
|
275 |
+
*
|
276 |
* `[geoip_detect2_countries mycountry "US"]`
|
277 |
* "United States" is preselected, there is no visitor IP detection going on here
|
278 |
+
*
|
279 |
* `[geoip_detect2_countries mycountry default:US]`
|
280 |
* Visitor's country is preselected, but in case the country is unknown, use "United States"
|
281 |
*
|
282 |
*/
|
283 |
function geoip_detect2_shortcode_country_select_wpcf7($tag) {
|
284 |
$tag = new WPCF7_FormTag( $tag );
|
285 |
+
|
286 |
$default = (string) reset( $tag->values );
|
287 |
$default = $tag->get_default_option($default, array('multiple' => false));
|
288 |
$default = wpcf7_get_hangover( $tag->name, $default ); // Get from $_POST if available
|
289 |
+
|
290 |
$class = wpcf7_form_controls_class( $tag->type );
|
291 |
$validation_error = wpcf7_get_validation_error( $tag->name );
|
292 |
if ($validation_error)
|
293 |
$class .= ' wpcf7-not-valid';
|
294 |
+
|
295 |
$attr = array(
|
296 |
'name' => $tag->name,
|
297 |
'include_blank' => $tag->has_option( 'include_blank' ),
|
304 |
'default' => $tag->get_option('default', '', true),
|
305 |
);
|
306 |
$html = geoip_detect2_shortcode_country_select($attr);
|
307 |
+
|
308 |
$html = sprintf(
|
309 |
'<span class="wpcf7-form-control-wrap %1$s">%2$s %3$s</span>',
|
310 |
sanitize_html_class( $tag->name ), $html, $validation_error );
|
311 |
+
|
312 |
return $html;
|
313 |
}
|
314 |
|
315 |
add_action( 'wpcf7_init', 'geoip_detect2_add_shortcodes' );
|
316 |
function geoip_detect2_add_shortcodes() {
|
317 |
if (function_exists('wpcf7_add_form_tag')) {
|
318 |
+
// >=CF 4.6
|
319 |
wpcf7_add_form_tag(array('geoip_detect2_countries', 'geoip_detect2_countries*'), 'geoip_detect2_shortcode_country_select_wpcf7', true);
|
320 |
} else if (function_exists('wpcf7_add_shortcode')) {
|
321 |
// < CF 4.6
|
322 |
+
wpcf7_add_shortcode(array('geoip_detect2_countries', 'geoip_detect2_countries*'), 'geoip_detect2_shortcode_country_select_wpcf7', true);
|
323 |
}
|
324 |
}
|
325 |
|
349 |
function geoip_detect_shortcode_user_info($attr) {
|
350 |
return geoip_detect2_shortcode_user_info_wpcf7('', 'geoip_detect2_user_info', true);
|
351 |
}
|
352 |
+
add_shortcode('geoip_detect2_user_info', 'geoip_detect_shortcode_user_info');
|
353 |
+
|
354 |
+
/**
|
355 |
+
*
|
356 |
+
* Geo-Dependent Content Hiding
|
357 |
+
*
|
358 |
+
* Uses an enclosing shortcode to selectively show or hide content. Use either
|
359 |
+
* [geoip_detect2_show_if][/geoip_detect2_show_if] or [geoip_detect2_hide_if][/geoip_detect2_hide_if] at your
|
360 |
+
* discretion, as they can both be used to accomplish the same thing.
|
361 |
+
*
|
362 |
+
* Shortcode attributes can be as follows:
|
363 |
+
*
|
364 |
+
* Inclusive Attributes (note that `hide_if` makes them exclusive):
|
365 |
+
* "continent", "country", "most_specific_subdivision"/"region"/"state"*, "city"
|
366 |
+
*
|
367 |
+
* * most_specific_subdivision, region, and state are aliases (use the one that makes the most sense to you)
|
368 |
+
*
|
369 |
+
* Exclusive Attributes (note that `hide_if` makes them inclusive):
|
370 |
+
* "not_country", "not_most_specific_subdivision"/"not_region"/"not_state"*, "not_city"
|
371 |
+
*
|
372 |
+
* * most_specific_subdivision, region, and state are aliases (use the one that makes the most sense to you)
|
373 |
+
*
|
374 |
+
* Each attribute may only appear once in a shortcode!
|
375 |
+
* The location attributes can take each take full names, ISO abbreviations (e.g., US), or the GeonamesId.
|
376 |
+
* All attributes may take multiple values seperated by comma (,).
|
377 |
+
*
|
378 |
+
* You can use custom property names with the attribute "property" and "property_value" / "not_property_value".
|
379 |
+
*
|
380 |
+
* Examples:
|
381 |
+
*
|
382 |
+
* Display TEXT if the visitor is in the US and in Texas.
|
383 |
+
* `[geoip_detect2_show_if country="US" state="TX"]TEXT[/geoip_detect2_show_if]`
|
384 |
+
* - OR -
|
385 |
+
* `[geoip_detect2_show_if country="US" region="TX"]TEXT[/geoip_detect2_show_if]`
|
386 |
+
* - OR -
|
387 |
+
* `[geoip_detect2_show_if country="US" region="Texas"]TEXT[/geoip_detect2_show_if]`
|
388 |
+
* - OR -
|
389 |
+
* `[geoip_detect2_show_if country="US" most_specific_subdivision="TX"]TEXT[/geoip_detect2_show_if]`
|
390 |
+
*
|
391 |
+
* Display TEXT if the visitor is in the US, and in either Texas or Louisiana, but hide this content
|
392 |
+
* from visitors with IP addresses from cities named Houston.
|
393 |
+
* `[geoip_detect2_show_if country="US" state="TX, LA" not_city="Houston"]TEXT[/geoip_detect2_show_if]`
|
394 |
+
*
|
395 |
+
* Display TEXT if the visitor is from North America.
|
396 |
+
* `[geoip_detect2_show_if continent="North America"]TEXT[/geoip_detect2_show_if]`
|
397 |
+
* - OR -
|
398 |
+
* `[geoip_detect2_hide_if not_continent="North America"]TEXT[/geoip_detect2_hide_if]`
|
399 |
+
*
|
400 |
+
* Hide TEXT if the visitor is from the US.
|
401 |
+
* `[geoip_detect2_hide_if country="US"]TEXT[/geoip_detect2_hide_if]`
|
402 |
+
* - OR -
|
403 |
+
* `[geoip_detect2_show_if not_country="US"]TEXT[/geoip_detect2_show_if]`
|
404 |
+
*
|
405 |
+
* Show TEXT if the visitor is within the timezone Europe/Berlin
|
406 |
+
* `[geoip_detect2_show_if property="location.timeZone" property_value="Europe/Berlin"]TEXT[/geoip_detect2_show_if]`
|
407 |
+
*
|
408 |
+
* LIMITATIONS:
|
409 |
+
* - You cannot nest several of these shortcodes within one another. Instead, seperate them into several blocks of shortcodes.
|
410 |
+
* - City names can be ambigous. For example, [geoip_detect2_show_if country="US,FR" not_city="Paris"] will exclude both Paris in France and Paris in Texas, US. Instead, you can find out the geoname_id or seperate the shortcode to make it more specific.
|
411 |
+
*
|
412 |
+
*/
|
413 |
+
function geoip_detect2_shortcode_show_if($attr, $content = null, $shortcodeName = '') {
|
414 |
+
$showContentIfMatch = ($shortcodeName == 'geoip_detect2_show_if') ? true : false;
|
415 |
+
|
416 |
+
$attr = shortcode_atts(array(
|
417 |
+
'lang' => null,
|
418 |
+
'skip_cache' => 'false',
|
419 |
+
'property' => null,
|
420 |
+
'property_value' => null,
|
421 |
+
'not_property_value' => null,
|
422 |
+
'continent' => null,
|
423 |
+
'country' => null,
|
424 |
+
'most_specific_subdivision' => null,
|
425 |
+
'region' => null,
|
426 |
+
'state' => null,
|
427 |
+
'city' => null,
|
428 |
+
'not_country' => null,
|
429 |
+
'not_most_specific_subdivision' => null,
|
430 |
+
'not_region' => null,
|
431 |
+
'not_state' => null,
|
432 |
+
'not_city' => null,),
|
433 |
+
$attr, $shortcodeName);
|
434 |
+
|
435 |
+
$skipCache = filter_var($attr['skip_cache'], FILTER_VALIDATE_BOOLEAN );
|
436 |
+
|
437 |
+
$locales = isset($attr['lang']) ? $attr['lang'] . ',en' : null;
|
438 |
+
$locales = apply_filters('geoip_detect2_locales', $locales);
|
439 |
+
|
440 |
+
$options = array('skipCache' => $skipCache);
|
441 |
+
|
442 |
+
$info = geoip_detect2_get_info_from_current_ip($locales, $options);
|
443 |
+
$isConditionMatching = true;
|
444 |
+
|
445 |
+
/* Attribute Conditions. Order is not important, as they are combined with an transitive AND condition */
|
446 |
+
$attributeNames = array(
|
447 |
+
'continent' => 'continent',
|
448 |
+
'not_continent' => 'continent',
|
449 |
+
'country' => 'country',
|
450 |
+
'not_country' => 'country',
|
451 |
+
'most_specific_subdivision' => 'mostSpecificSubdivision',
|
452 |
+
'region' => 'mostSpecificSubdivision',
|
453 |
+
'state' => 'mostSpecificSubdivision',
|
454 |
+
'not_most_specific_subdivision' => 'mostSpecificSubdivision',
|
455 |
+
'not_region' => 'mostSpecificSubdivision',
|
456 |
+
'not_state' => 'mostSpecificSubdivision',
|
457 |
+
'city' => 'city',
|
458 |
+
'not_city' => 'city',
|
459 |
+
);
|
460 |
+
|
461 |
+
foreach ($attributeNames as $shortcodeParamName => $maxmindName) {
|
462 |
+
if (!empty($attr[$shortcodeParamName])) {
|
463 |
+
// Determine Actual MaxMind Value(s) for Attribute
|
464 |
+
$actualValues = array();
|
465 |
+
$alternativePropertyNames = array(
|
466 |
+
'name',
|
467 |
+
'isoCode',
|
468 |
+
'code',
|
469 |
+
'geonameId',
|
470 |
+
);
|
471 |
+
foreach ($alternativePropertyNames as $p) {
|
472 |
+
if (isset($info->{$maxmindName}->{$p})) {
|
473 |
+
$actualValues[] = $info->{$maxmindName}->{$p};
|
474 |
+
}
|
475 |
+
}
|
476 |
+
|
477 |
+
$subConditionMatching = geoip_detect2_shortcode_check_subcondition($attr[$shortcodeParamName], $actualValues);
|
478 |
+
|
479 |
+
if (substr($shortcodeParamName, 0, 4) == 'not_') {
|
480 |
+
$subConditionMatching = !$subConditionMatching;
|
481 |
+
}
|
482 |
+
$isConditionMatching = $isConditionMatching && $subConditionMatching;
|
483 |
+
}
|
484 |
+
}
|
485 |
+
|
486 |
+
if (!empty($attr['property']) && (!empty($attr['property_value']) || !empty($attr['not_property_value'])) ) {
|
487 |
+
try {
|
488 |
+
$actualValue = geoip_detect2_shortcode_get_property($info, $attr['property']);
|
489 |
+
|
490 |
+
if (!empty($attr['property_value'])) {
|
491 |
+
$subConditionMatching = geoip_detect2_shortcode_check_subcondition($attr['property_value'], $actualValue);
|
492 |
+
}
|
493 |
+
if (!empty($attr['not_property_value'])) {
|
494 |
+
$subConditionMatching = ! geoip_detect2_shortcode_check_subcondition($attr['not_property_value'], $actualValue);
|
495 |
+
}
|
496 |
+
} catch (\Exception $e) {
|
497 |
+
$subConditionMatching = false;
|
498 |
+
}
|
499 |
+
|
500 |
+
$isConditionMatching = $isConditionMatching && $subConditionMatching;
|
501 |
+
}
|
502 |
+
|
503 |
+
// All Criteria Passed?
|
504 |
+
if ($isConditionMatching === $showContentIfMatch) {
|
505 |
+
return do_shortcode($content);
|
506 |
+
}
|
507 |
+
return '';
|
508 |
+
}
|
509 |
+
add_shortcode('geoip_detect2_show_if', 'geoip_detect2_shortcode_show_if');
|
510 |
+
add_shortcode('geoip_detect2_hide_if', 'geoip_detect2_shortcode_show_if');
|
511 |
+
|
512 |
+
function geoip_detect2_shortcode_check_subcondition($expectedValuesRaw, $actualValues) {
|
513 |
+
// Parse User Input Values of Attribute
|
514 |
+
$attributeValuesArray = explode(',', $expectedValuesRaw);
|
515 |
+
$attributeValuesArray = array_map('trim', $attributeValuesArray);
|
516 |
+
|
517 |
+
$actualValues = (array) $actualValues;
|
518 |
+
|
519 |
+
// Compare case-insensitively
|
520 |
+
$attributeValuesArray = array_map('mb_strtolower', $attributeValuesArray);
|
521 |
+
$actualValues = array_map('mb_strtolower', $actualValues);
|
522 |
+
|
523 |
+
return count(array_intersect($actualValues, $attributeValuesArray)) > 0;
|
524 |
+
}
|
upgrade-plugin.php
CHANGED
@@ -1,7 +1,7 @@
|
|
1 |
<?php
|
2 |
/*
|
3 |
Copyright 2013-2018 Yellow Tree, Siegen, Germany
|
4 |
-
Author: Benjamin Pick (
|
5 |
|
6 |
This program is free software; you can redistribute it and/or modify
|
7 |
it under the terms of the GNU General Public License as published by
|
1 |
<?php
|
2 |
/*
|
3 |
Copyright 2013-2018 Yellow Tree, Siegen, Germany
|
4 |
+
Author: Benjamin Pick (wp-geoip-detect| |posteo.de)
|
5 |
|
6 |
This program is free software; you can redistribute it and/or modify
|
7 |
it under the terms of the GNU General Public License as published by
|
vendor/composer/ca-bundle/composer.json
CHANGED
@@ -27,7 +27,7 @@
|
|
27 |
"php": "^5.3.2 || ^7.0"
|
28 |
},
|
29 |
"require-dev": {
|
30 |
-
"phpunit/phpunit": "^4.8.35",
|
31 |
"psr/log": "^1.0",
|
32 |
"symfony/process": "^2.5 || ^3.0 || ^4.0"
|
33 |
},
|
27 |
"php": "^5.3.2 || ^7.0"
|
28 |
},
|
29 |
"require-dev": {
|
30 |
+
"phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5",
|
31 |
"psr/log": "^1.0",
|
32 |
"symfony/process": "^2.5 || ^3.0 || ^4.0"
|
33 |
},
|
vendor/composer/ca-bundle/res/cacert.pem
CHANGED
@@ -1,7 +1,7 @@
|
|
1 |
##
|
2 |
## Bundle of CA Root Certificates
|
3 |
##
|
4 |
-
## Certificate data from Mozilla as of: Wed
|
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
|
@@ -14,7 +14,7 @@
|
|
14 |
## Just configure this file as the SSLCACertificateFile.
|
15 |
##
|
16 |
## Conversion done with mk-ca-bundle.pl version 1.27.
|
17 |
-
## SHA256:
|
18 |
##
|
19 |
|
20 |
|
@@ -283,25 +283,6 @@ YQa7FkKMcPcw++DbZqMAAb3mLNqRX6BGi01qnD093QVG/na/oAo85ADmJ7f/hC3euiInlhBx6yLt
|
|
283 |
398znM/jra6O1I7mT1GvFpLgXPYHDw==
|
284 |
-----END CERTIFICATE-----
|
285 |
|
286 |
-
Certum Root CA
|
287 |
-
==============
|
288 |
-
-----BEGIN CERTIFICATE-----
|
289 |
-
MIIDDDCCAfSgAwIBAgIDAQAgMA0GCSqGSIb3DQEBBQUAMD4xCzAJBgNVBAYTAlBMMRswGQYDVQQK
|
290 |
-
ExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBDQTAeFw0wMjA2MTExMDQ2Mzla
|
291 |
-
Fw0yNzA2MTExMDQ2MzlaMD4xCzAJBgNVBAYTAlBMMRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8u
|
292 |
-
by4xEjAQBgNVBAMTCUNlcnR1bSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM6x
|
293 |
-
wS7TT3zNJc4YPk/EjG+AanPIW1H4m9LcuwBcsaD8dQPugfCI7iNS6eYVM42sLQnFdvkrOYCJ5JdL
|
294 |
-
kKWoePhzQ3ukYbDYWMzhbGZ+nPMJXlVjhNWo7/OxLjBos8Q82KxujZlakE403Daaj4GIULdtlkIJ
|
295 |
-
89eVgw1BS7Bqa/j8D35in2fE7SZfECYPCE/wpFcozo+47UX2bu4lXapuOb7kky/ZR6By6/qmW6/K
|
296 |
-
Uz/iDsaWVhFu9+lmqSbYf5VT7QqFiLpPKaVCjF62/IUgAKpoC6EahQGcxEZjgoi2IrHu/qpGWX7P
|
297 |
-
NSzVttpd90gzFFS269lvzs2I1qsb2pY7HVkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkq
|
298 |
-
hkiG9w0BAQUFAAOCAQEAuI3O7+cUus/usESSbLQ5PqKEbq24IXfS1HeCh+YgQYHu4vgRt2PRFze+
|
299 |
-
GXYkHAQaTOs9qmdvLdTN/mUxcMUbpgIKumB7bVjCmkn+YzILa+M6wKyrO7Do0wlRjBCDxjTgxSvg
|
300 |
-
GrZgFCdsMneMvLJymM/NzD+5yCRCFNZX/OYmQ6kd5YCQzgNUKD73P9P4Te1qCjqTE5s7FCMTY5w/
|
301 |
-
0YcneeVMUeMBrYVdGjux1XMQpNPyvG5k9VpWkKjHDkx0Dy5xO/fIR/RpbxXyEV6DHpx8Uq79AtoS
|
302 |
-
qFlnGNu8cN2bsWntgM6JQEhqDjXKKWYVIZQs6GAqm4VKQPNriiTsBhYscw==
|
303 |
-
-----END CERTIFICATE-----
|
304 |
-
|
305 |
Comodo AAA Services root
|
306 |
========================
|
307 |
-----BEGIN CERTIFICATE-----
|
@@ -465,60 +446,6 @@ EtzKO6gunRRaBXW37Ndj4ro1tgQIkejanZz2ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLH
|
|
465 |
llpwrN9M
|
466 |
-----END CERTIFICATE-----
|
467 |
|
468 |
-
Camerfirma Chambers of Commerce Root
|
469 |
-
====================================
|
470 |
-
-----BEGIN CERTIFICATE-----
|
471 |
-
MIIEvTCCA6WgAwIBAgIBADANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJFVTEnMCUGA1UEChMe
|
472 |
-
QUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1i
|
473 |
-
ZXJzaWduLm9yZzEiMCAGA1UEAxMZQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdDAeFw0wMzA5MzAx
|
474 |
-
NjEzNDNaFw0zNzA5MzAxNjEzNDRaMH8xCzAJBgNVBAYTAkVVMScwJQYDVQQKEx5BQyBDYW1lcmZp
|
475 |
-
cm1hIFNBIENJRiBBODI3NDMyODcxIzAhBgNVBAsTGmh0dHA6Ly93d3cuY2hhbWJlcnNpZ24ub3Jn
|
476 |
-
MSIwIAYDVQQDExlDaGFtYmVycyBvZiBDb21tZXJjZSBSb290MIIBIDANBgkqhkiG9w0BAQEFAAOC
|
477 |
-
AQ0AMIIBCAKCAQEAtzZV5aVdGDDg2olUkfzIx1L4L1DZ77F1c2VHfRtbunXF/KGIJPov7coISjlU
|
478 |
-
xFF6tdpg6jg8gbLL8bvZkSM/SAFwdakFKq0fcfPJVD0dBmpAPrMMhe5cG3nCYsS4No41XQEMIwRH
|
479 |
-
NaqbYE6gZj3LJgqcQKH0XZi/caulAGgq7YN6D6IUtdQis4CwPAxaUWktWBiP7Zme8a7ileb2R6jW
|
480 |
-
DA+wWFjbw2Y3npuRVDM30pQcakjJyfKl2qUMI/cjDpwyVV5xnIQFUZot/eZOKjRa3spAN2cMVCFV
|
481 |
-
d9oKDMyXroDclDZK9D7ONhMeU+SsTjoF7Nuucpw4i9A5O4kKPnf+dQIBA6OCAUQwggFAMBIGA1Ud
|
482 |
-
EwEB/wQIMAYBAf8CAQwwPAYDVR0fBDUwMzAxoC+gLYYraHR0cDovL2NybC5jaGFtYmVyc2lnbi5v
|
483 |
-
cmcvY2hhbWJlcnNyb290LmNybDAdBgNVHQ4EFgQU45T1sU3p26EpW1eLTXYGduHRooowDgYDVR0P
|
484 |
-
AQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzAnBgNVHREEIDAegRxjaGFtYmVyc3Jvb3RAY2hh
|
485 |
-
bWJlcnNpZ24ub3JnMCcGA1UdEgQgMB6BHGNoYW1iZXJzcm9vdEBjaGFtYmVyc2lnbi5vcmcwWAYD
|
486 |
-
VR0gBFEwTzBNBgsrBgEEAYGHLgoDATA+MDwGCCsGAQUFBwIBFjBodHRwOi8vY3BzLmNoYW1iZXJz
|
487 |
-
aWduLm9yZy9jcHMvY2hhbWJlcnNyb290Lmh0bWwwDQYJKoZIhvcNAQEFBQADggEBAAxBl8IahsAi
|
488 |
-
fJ/7kPMa0QOx7xP5IV8EnNrJpY0nbJaHkb5BkAFyk+cefV/2icZdp0AJPaxJRUXcLo0waLIJuvvD
|
489 |
-
L8y6C98/d3tGfToSJI6WjzwFCm/SlCgdbQzALogi1djPHRPH8EjX1wWnz8dHnjs8NMiAT9QUu/wN
|
490 |
-
UPf6s+xCX6ndbcj0dc97wXImsQEcXCz9ek60AcUFV7nnPKoF2YjpB0ZBzu9Bga5Y34OirsrXdx/n
|
491 |
-
ADydb47kMgkdTXg0eDQ8lJsm7U9xxhl6vSAiSFr+S30Dt+dYvsYyTnQeaN2oaFuzPu5ifdmA6Ap1
|
492 |
-
erfutGWaIZDgqtCYvDi1czyL+Nw=
|
493 |
-
-----END CERTIFICATE-----
|
494 |
-
|
495 |
-
Camerfirma Global Chambersign Root
|
496 |
-
==================================
|
497 |
-
-----BEGIN CERTIFICATE-----
|
498 |
-
MIIExTCCA62gAwIBAgIBADANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJFVTEnMCUGA1UEChMe
|
499 |
-
QUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1i
|
500 |
-
ZXJzaWduLm9yZzEgMB4GA1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwHhcNMDMwOTMwMTYx
|
501 |
-
NDE4WhcNMzcwOTMwMTYxNDE4WjB9MQswCQYDVQQGEwJFVTEnMCUGA1UEChMeQUMgQ2FtZXJmaXJt
|
502 |
-
YSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEg
|
503 |
-
MB4GA1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwggEgMA0GCSqGSIb3DQEBAQUAA4IBDQAw
|
504 |
-
ggEIAoIBAQCicKLQn0KuWxfH2H3PFIP8T8mhtxOviteePgQKkotgVvq0Mi+ITaFgCPS3CU6gSS9J
|
505 |
-
1tPfnZdan5QEcOw/Wdm3zGaLmFIoCQLfxS+EjXqXd7/sQJ0lcqu1PzKY+7e3/HKE5TWH+VX6ox8O
|
506 |
-
by4o3Wmg2UIQxvi1RMLQQ3/bvOSiPGpVeAp3qdjqGTK3L/5cPxvusZjsyq16aUXjlg9V9ubtdepl
|
507 |
-
6DJWk0aJqCWKZQbua795B9Dxt6/tLE2Su8CoX6dnfQTyFQhwrJLWfQTSM/tMtgsL+xrJxI0DqX5c
|
508 |
-
8lCrEqWhz0hQpe/SyBoT+rB/sYIcd2oPX9wLlY/vQ37mRQklAgEDo4IBUDCCAUwwEgYDVR0TAQH/
|
509 |
-
BAgwBgEB/wIBDDA/BgNVHR8EODA2MDSgMqAwhi5odHRwOi8vY3JsLmNoYW1iZXJzaWduLm9yZy9j
|
510 |
-
aGFtYmVyc2lnbnJvb3QuY3JsMB0GA1UdDgQWBBRDnDafsJ4wTcbOX60Qq+UDpfqpFDAOBgNVHQ8B
|
511 |
-
Af8EBAMCAQYwEQYJYIZIAYb4QgEBBAQDAgAHMCoGA1UdEQQjMCGBH2NoYW1iZXJzaWducm9vdEBj
|
512 |
-
aGFtYmVyc2lnbi5vcmcwKgYDVR0SBCMwIYEfY2hhbWJlcnNpZ25yb290QGNoYW1iZXJzaWduLm9y
|
513 |
-
ZzBbBgNVHSAEVDBSMFAGCysGAQQBgYcuCgEBMEEwPwYIKwYBBQUHAgEWM2h0dHA6Ly9jcHMuY2hh
|
514 |
-
bWJlcnNpZ24ub3JnL2Nwcy9jaGFtYmVyc2lnbnJvb3QuaHRtbDANBgkqhkiG9w0BAQUFAAOCAQEA
|
515 |
-
PDtwkfkEVCeR4e3t/mh/YV3lQWVPMvEYBZRqHN4fcNs+ezICNLUMbKGKfKX0j//U2K0X1S0E0T9Y
|
516 |
-
gOKBWYi+wONGkyT+kL0mojAt6JcmVzWJdJYY9hXiryQZVgICsroPFOrGimbBhkVVi76SvpykBMdJ
|
517 |
-
PJ7oKXqJ1/6v/2j1pReQvayZzKWGVwlnRtvWFsJG8eSpUPWP0ZIV018+xgBJOm5YstHRJw0lyDL4
|
518 |
-
IBHNfTIzSJRUTN3cecQwn+uOuFW114hcxWokPbLTBQNRxgfvzBRydD1ucs4YKIxKoHflCStFREes
|
519 |
-
t2d/AYoFWpO+ocH/+OcOZ6RHSXZddZAa9SaP8A==
|
520 |
-
-----END CERTIFICATE-----
|
521 |
-
|
522 |
XRamp Global CA Root
|
523 |
====================
|
524 |
-----BEGIN CERTIFICATE-----
|
@@ -591,47 +518,6 @@ KVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEYWQPJIrSPnNVeKtelttQKbfi3
|
|
591 |
QBFGmh95DmK/D5fs4C8fF5Q=
|
592 |
-----END CERTIFICATE-----
|
593 |
|
594 |
-
StartCom Certification Authority
|
595 |
-
================================
|
596 |
-
-----BEGIN CERTIFICATE-----
|
597 |
-
MIIHyTCCBbGgAwIBAgIBATANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMN
|
598 |
-
U3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmlu
|
599 |
-
ZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0
|
600 |
-
NjM2WhcNMzYwOTE3MTk0NjM2WjB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRk
|
601 |
-
LjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMg
|
602 |
-
U3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw
|
603 |
-
ggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZkpMyONvg45iPwbm2xPN1y
|
604 |
-
o4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rfOQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/
|
605 |
-
Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/CJi/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/d
|
606 |
-
eMotHweXMAEtcnn6RtYTKqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt
|
607 |
-
2PZE4XNiHzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMMAv+Z
|
608 |
-
6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w+2OqqGwaVLRcJXrJ
|
609 |
-
osmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/
|
610 |
-
untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVc
|
611 |
-
UjyJthkqcwEKDwOzEmDyei+B26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT
|
612 |
-
37uMdBNSSwIDAQABo4ICUjCCAk4wDAYDVR0TBAUwAwEB/zALBgNVHQ8EBAMCAa4wHQYDVR0OBBYE
|
613 |
-
FE4L7xqkQFulF2mHMMo0aEPQQa7yMGQGA1UdHwRdMFswLKAqoCiGJmh0dHA6Ly9jZXJ0LnN0YXJ0
|
614 |
-
Y29tLm9yZy9zZnNjYS1jcmwuY3JsMCugKaAnhiVodHRwOi8vY3JsLnN0YXJ0Y29tLm9yZy9zZnNj
|
615 |
-
YS1jcmwuY3JsMIIBXQYDVR0gBIIBVDCCAVAwggFMBgsrBgEEAYG1NwEBATCCATswLwYIKwYBBQUH
|
616 |
-
AgEWI2h0dHA6Ly9jZXJ0LnN0YXJ0Y29tLm9yZy9wb2xpY3kucGRmMDUGCCsGAQUFBwIBFilodHRw
|
617 |
-
Oi8vY2VydC5zdGFydGNvbS5vcmcvaW50ZXJtZWRpYXRlLnBkZjCB0AYIKwYBBQUHAgIwgcMwJxYg
|
618 |
-
U3RhcnQgQ29tbWVyY2lhbCAoU3RhcnRDb20pIEx0ZC4wAwIBARqBl0xpbWl0ZWQgTGlhYmlsaXR5
|
619 |
-
LCByZWFkIHRoZSBzZWN0aW9uICpMZWdhbCBMaW1pdGF0aW9ucyogb2YgdGhlIFN0YXJ0Q29tIENl
|
620 |
-
cnRpZmljYXRpb24gQXV0aG9yaXR5IFBvbGljeSBhdmFpbGFibGUgYXQgaHR0cDovL2NlcnQuc3Rh
|
621 |
-
cnRjb20ub3JnL3BvbGljeS5wZGYwEQYJYIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilT
|
622 |
-
dGFydENvbSBGcmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQUFAAOC
|
623 |
-
AgEAFmyZ9GYMNPXQhV59CuzaEE44HF7fpiUFS5Eyweg78T3dRAlbB0mKKctmArexmvclmAk8jhvh
|
624 |
-
3TaHK0u7aNM5Zj2gJsfyOZEdUauCe37Vzlrk4gNXcGmXCPleWKYK34wGmkUWFjgKXlf2Ysd6AgXm
|
625 |
-
vB618p70qSmD+LIU424oh0TDkBreOKk8rENNZEXO3SipXPJzewT4F+irsfMuXGRuczE6Eri8sxHk
|
626 |
-
fY+BUZo7jYn0TZNmezwD7dOaHZrzZVD1oNB1ny+v8OqCQ5j4aZyJecRDjkZy42Q2Eq/3JR44iZB3
|
627 |
-
fsNrarnDy0RLrHiQi+fHLB5LEUTINFInzQpdn4XBidUaePKVEFMy3YCEZnXZtWgo+2EuvoSoOMCZ
|
628 |
-
EoalHmdkrQYuL6lwhceWD3yJZfWOQ1QOq92lgDmUYMA0yZZwLKMS9R9Ie70cfmu3nZD0Ijuu+Pwq
|
629 |
-
yvqCUqDvr0tVk+vBtfAii6w0TiYiBKGHLHVKt+V9E9e4DGTANtLJL4YSjCMJwRuCO3NJo2pXh5Tl
|
630 |
-
1njFmUNj403gdy3hZZlyaQQaRwnmDwFWJPsfvw55qVguucQJAX6Vum0ABj6y6koQOdjQK/W/7HW/
|
631 |
-
lwLFCRsI3FU34oH7N4RDYiDK51ZLZer+bMEkkyShNOsF/5oirpt9P/FlUQqmMGqz9IgcgA38coro
|
632 |
-
g14=
|
633 |
-
-----END CERTIFICATE-----
|
634 |
-
|
635 |
Taiwan GRCA
|
636 |
===========
|
637 |
-----BEGIN CERTIFICATE-----
|
@@ -770,30 +656,6 @@ RLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubS
|
|
770 |
fZGL+T0yjWW06XyxV3bqxbYoOb8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ
|
771 |
-----END CERTIFICATE-----
|
772 |
|
773 |
-
DST ACES CA X6
|
774 |
-
==============
|
775 |
-
-----BEGIN CERTIFICATE-----
|
776 |
-
MIIECTCCAvGgAwIBAgIQDV6ZCtadt3js2AdWO4YV2TANBgkqhkiG9w0BAQUFADBbMQswCQYDVQQG
|
777 |
-
EwJVUzEgMB4GA1UEChMXRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QxETAPBgNVBAsTCERTVCBBQ0VT
|
778 |
-
MRcwFQYDVQQDEw5EU1QgQUNFUyBDQSBYNjAeFw0wMzExMjAyMTE5NThaFw0xNzExMjAyMTE5NTha
|
779 |
-
MFsxCzAJBgNVBAYTAlVTMSAwHgYDVQQKExdEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdDERMA8GA1UE
|
780 |
-
CxMIRFNUIEFDRVMxFzAVBgNVBAMTDkRTVCBBQ0VTIENBIFg2MIIBIjANBgkqhkiG9w0BAQEFAAOC
|
781 |
-
AQ8AMIIBCgKCAQEAuT31LMmU3HWKlV1j6IR3dma5WZFcRt2SPp/5DgO0PWGSvSMmtWPuktKe1jzI
|
782 |
-
DZBfZIGxqAgNTNj50wUoUrQBJcWVHAx+PhCEdc/BGZFjz+iokYi5Q1K7gLFViYsx+tC3dr5BPTCa
|
783 |
-
pCIlF3PoHuLTrCq9Wzgh1SpL11V94zpVvddtawJXa+ZHfAjIgrrep4c9oW24MFbCswKBXy314pow
|
784 |
-
GCi4ZtPLAZZv6opFVdbgnf9nKxcCpk4aahELfrd755jWjHZvwTvbUJN+5dCOHze4vbrGn2zpfDPy
|
785 |
-
MjwmR/onJALJfh1biEITajV8fTXpLmaRcpPVMibEdPVTo7NdmvYJywIDAQABo4HIMIHFMA8GA1Ud
|
786 |
-
EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgHGMB8GA1UdEQQYMBaBFHBraS1vcHNAdHJ1c3Rkc3Qu
|
787 |
-
Y29tMGIGA1UdIARbMFkwVwYKYIZIAWUDAgEBATBJMEcGCCsGAQUFBwIBFjtodHRwOi8vd3d3LnRy
|
788 |
-
dXN0ZHN0LmNvbS9jZXJ0aWZpY2F0ZXMvcG9saWN5L0FDRVMtaW5kZXguaHRtbDAdBgNVHQ4EFgQU
|
789 |
-
CXIGThhDD+XWzMNqizF7eI+og7gwDQYJKoZIhvcNAQEFBQADggEBAKPYjtay284F5zLNAdMEA+V2
|
790 |
-
5FYrnJmQ6AgwbN99Pe7lv7UkQIRJ4dEorsTCOlMwiPH1d25Ryvr/ma8kXxug/fKshMrfqfBfBC6t
|
791 |
-
Fr8hlxCBPeP/h40y3JTlR4peahPJlJU90u7INJXQgNStMgiAVDzgvVJT11J8smk/f3rPanTK+gQq
|
792 |
-
nExaBqXpIK1FZg9p8d2/6eMyi/rgwYZNcjwu2JN4Cir42NInPRmJX1p7ijvMDNpRrscL9yuwNwXs
|
793 |
-
vFcj4jjSm2jzVhKIT0J8uDHEtdvkyCE06UgRNe76x5JXxZ805Mf29w4LTJxoeHtxMcfrHuBnQfO3
|
794 |
-
oKfN5XozNmr6mis=
|
795 |
-
-----END CERTIFICATE-----
|
796 |
-
|
797 |
SwissSign Gold CA - G2
|
798 |
======================
|
799 |
-----BEGIN CERTIFICATE-----
|
@@ -1036,27 +898,6 @@ FAkK+qDmfQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdvGDeA
|
|
1036 |
U/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY=
|
1037 |
-----END CERTIFICATE-----
|
1038 |
|
1039 |
-
Security Communication EV RootCA1
|
1040 |
-
=================================
|
1041 |
-
-----BEGIN CERTIFICATE-----
|
1042 |
-
MIIDfTCCAmWgAwIBAgIBADANBgkqhkiG9w0BAQUFADBgMQswCQYDVQQGEwJKUDElMCMGA1UEChMc
|
1043 |
-
U0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEqMCgGA1UECxMhU2VjdXJpdHkgQ29tbXVuaWNh
|
1044 |
-
dGlvbiBFViBSb290Q0ExMB4XDTA3MDYwNjAyMTIzMloXDTM3MDYwNjAyMTIzMlowYDELMAkGA1UE
|
1045 |
-
BhMCSlAxJTAjBgNVBAoTHFNFQ09NIFRydXN0IFN5c3RlbXMgQ08uLExURC4xKjAoBgNVBAsTIVNl
|
1046 |
-
Y3VyaXR5IENvbW11bmljYXRpb24gRVYgUm9vdENBMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
|
1047 |
-
AQoCggEBALx/7FebJOD+nLpCeamIivqA4PUHKUPqjgo0No0c+qe1OXj/l3X3L+SqawSERMqm4miO
|
1048 |
-
/VVQYg+kcQ7OBzgtQoVQrTyWb4vVog7P3kmJPdZkLjjlHmy1V4qe70gOzXppFodEtZDkBp2uoQSX
|
1049 |
-
WHnvIEqCa4wiv+wfD+mEce3xDuS4GBPMVjZd0ZoeUWs5bmB2iDQL87PRsJ3KYeJkHcFGB7hj3R4z
|
1050 |
-
ZbOOCVVSPbW9/wfrrWFVGCypaZhKqkDFMxRldAD5kd6vA0jFQFTcD4SQaCDFkpbcLuUCRarAX1T4
|
1051 |
-
bepJz11sS6/vmsJWXMY1VkJqMF/Cq/biPT+zyRGPMUzXn0kCAwEAAaNCMEAwHQYDVR0OBBYEFDVK
|
1052 |
-
9U2vP9eCOKyrcWUXdYydVZPmMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqG
|
1053 |
-
SIb3DQEBBQUAA4IBAQCoh+ns+EBnXcPBZsdAS5f8hxOQWsTvoMpfi7ent/HWtWS3irO4G8za+6xm
|
1054 |
-
iEHO6Pzk2x6Ipu0nUBsCMCRGef4Eh3CXQHPRwMFXGZpppSeZq51ihPZRwSzJIxXYKLerJRO1RuGG
|
1055 |
-
Av8mjMSIkh1W/hln8lXkgKNrnKt34VFxDSDbEJrbvXZ5B3eZKK2aXtqxT0QsNY6llsf9g/BYxnnW
|
1056 |
-
mHyojf6GPgcWkuF75x3sM3Z+Qi5KhfmRiWiEA4Glm5q+4zfFVKtWOxgtQaQM+ELbmaDgcm+7XeEW
|
1057 |
-
T1MKZPlO9L9OVL14bIjqv5wTJMJwaaJ/D8g8rQjJsJhAoyrniIPtd490
|
1058 |
-
-----END CERTIFICATE-----
|
1059 |
-
|
1060 |
OISTE WISeKey Global Root GA CA
|
1061 |
===============================
|
1062 |
-----BEGIN CERTIFICATE-----
|
@@ -1177,34 +1018,6 @@ sP6SHhYKGvzZ8/gntsm+HbRsZJB/9OTEW9c3rkIO3aQab3yIVMUWbuF6aC74Or8NpDyJO3inTmOD
|
|
1177 |
BCEIZ43ygknQW/2xzQ+DhNQ+IIX3Sj0rnP0qCglN6oH4EZw=
|
1178 |
-----END CERTIFICATE-----
|
1179 |
|
1180 |
-
T\xc3\x9c\x42\xC4\xB0TAK UEKAE K\xC3\xB6k Sertifika Hizmet Sa\xC4\x9Flay\xc4\xb1\x63\xc4\xb1s\xc4\xb1 - S\xC3\xBCr\xC3\xBCm 3
|
1181 |
-
=============================================================================================================================
|
1182 |
-
-----BEGIN CERTIFICATE-----
|
1183 |
-
MIIFFzCCA/+gAwIBAgIBETANBgkqhkiG9w0BAQUFADCCASsxCzAJBgNVBAYTAlRSMRgwFgYDVQQH
|
1184 |
-
DA9HZWJ6ZSAtIEtvY2FlbGkxRzBFBgNVBAoMPlTDvHJraXllIEJpbGltc2VsIHZlIFRla25vbG9q
|
1185 |
-
aWsgQXJhxZ90xLFybWEgS3VydW11IC0gVMOcQsSwVEFLMUgwRgYDVQQLDD9VbHVzYWwgRWxla3Ry
|
1186 |
-
b25payB2ZSBLcmlwdG9sb2ppIEFyYcWfdMSxcm1hIEVuc3RpdMO8c8O8IC0gVUVLQUUxIzAhBgNV
|
1187 |
-
BAsMGkthbXUgU2VydGlmaWthc3lvbiBNZXJrZXppMUowSAYDVQQDDEFUw5xCxLBUQUsgVUVLQUUg
|
1188 |
-
S8O2ayBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsSAtIFPDvHLDvG0gMzAeFw0wNzA4
|
1189 |
-
MjQxMTM3MDdaFw0xNzA4MjExMTM3MDdaMIIBKzELMAkGA1UEBhMCVFIxGDAWBgNVBAcMD0dlYnpl
|
1190 |
-
IC0gS29jYWVsaTFHMEUGA1UECgw+VMO8cmtpeWUgQmlsaW1zZWwgdmUgVGVrbm9sb2ppayBBcmHF
|
1191 |
-
n3TEsXJtYSBLdXJ1bXUgLSBUw5xCxLBUQUsxSDBGBgNVBAsMP1VsdXNhbCBFbGVrdHJvbmlrIHZl
|
1192 |
-
IEtyaXB0b2xvamkgQXJhxZ90xLFybWEgRW5zdGl0w7xzw7wgLSBVRUtBRTEjMCEGA1UECwwaS2Ft
|
1193 |
-
dSBTZXJ0aWZpa2FzeW9uIE1lcmtlemkxSjBIBgNVBAMMQVTDnELEsFRBSyBVRUtBRSBLw7ZrIFNl
|
1194 |
-
cnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxIC0gU8O8csO8bSAzMIIBIjANBgkqhkiG9w0B
|
1195 |
-
AQEFAAOCAQ8AMIIBCgKCAQEAim1L/xCIOsP2fpTo6iBkcK4hgb46ezzb8R1Sf1n68yJMlaCQvEhO
|
1196 |
-
Eav7t7WNeoMojCZG2E6VQIdhn8WebYGHV2yKO7Rm6sxA/OOqbLLLAdsyv9Lrhc+hDVXDWzhXcLh1
|
1197 |
-
xnnRFDDtG1hba+818qEhTsXOfJlfbLm4IpNQp81McGq+agV/E5wrHur+R84EpW+sky58K5+eeROR
|
1198 |
-
6Oqeyjh1jmKwlZMq5d/pXpduIF9fhHpEORlAHLpVK/swsoHvhOPc7Jg4OQOFCKlUAwUp8MmPi+oL
|
1199 |
-
hmUZEdPpCSPeaJMDyTYcIW7OjGbxmTDY17PDHfiBLqi9ggtm/oLL4eAagsNAgQIDAQABo0IwQDAd
|
1200 |
-
BgNVHQ4EFgQUvYiHyY/2pAoLquvF/pEjnatKijIwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF
|
1201 |
-
MAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAB18+kmPNOm3JpIWmgV050vQbTlswyb2zrgxvMTfvCr4
|
1202 |
-
N5EY3ATIZJkrGG2AA1nJrvhY0D7twyOfaTyGOBye79oneNGEN3GKPEs5z35FBtYt2IpNeBLWrcLT
|
1203 |
-
y9LQQfMmNkqblWwM7uXRQydmwYj3erMgbOqwaSvHIOgMA8RBBZniP+Rr+KCGgceExh/VS4ESshYh
|
1204 |
-
LBOhgLJeDEoTniDYYkCrkOpkSi+sDQESeUWoL4cZaMjihccwsnX5OD+ywJO0a+IDRM5noN+J1q2M
|
1205 |
-
dqMTw5RhK2vZbMEHCiIHhWyFJEapvj+LeISCfiQMnf2BN+MlqO02TpUsyZyQ2uypQjyttgI=
|
1206 |
-
-----END CERTIFICATE-----
|
1207 |
-
|
1208 |
certSIGN ROOT CA
|
1209 |
================
|
1210 |
-----BEGIN CERTIFICATE-----
|
@@ -1452,37 +1265,6 @@ y8hSyn+B/tlr0/cR7SXf+Of5pPpyl4RTDaXQMhhRdlkUbA/r7F+AjHVDg8OFmP9Mni0N5HeDk061
|
|
1452 |
lgeLKBObjBmNQSdJQO7e5iNEOdyhIta6A/I=
|
1453 |
-----END CERTIFICATE-----
|
1454 |
|
1455 |
-
ACEDICOM Root
|
1456 |
-
=============
|
1457 |
-
-----BEGIN CERTIFICATE-----
|
1458 |
-
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
-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
-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
-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
-
AAOCAg8AMIICCgKCAgEA/5KV4WgGdrQsyFhIyv2AVClVYyT/kGWbEHV7w2rbYgIB8hiGtXxaOLHk
|
1463 |
-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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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
-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
-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
-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
-
bS5lZGljb21ncm91cC5jb20vZG9jMA0GCSqGSIb3DQEBBQUAA4ICAQDOLAtSUWImfQwng4/F9tqg
|
1475 |
-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
-
eGYDdwdY6ZXIfj7QeQCM8htRM5u8lOk6e25SLTKeI6RF+7YuE7CLGLHdztUdp0J/Vb77W7tH1Pwk
|
1477 |
-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
-
ThCojz2GuHURwCRiipZ7SkXp7FnFvmuD5uHorLUwHv4FB4D54SMNUI8FmP8sX+g7tq3PgbUhh8oI
|
1479 |
-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
-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
-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
-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
-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
|
1484 |
-
-----END CERTIFICATE-----
|
1485 |
-
|
1486 |
Microsec e-Szigno Root CA 2009
|
1487 |
==============================
|
1488 |
-----BEGIN CERTIFICATE-----
|
@@ -1843,37 +1625,6 @@ Zt3hrvJBW8qYVoNzcOSGGtIxQbovvi0TWnZvTuhOgQ4/WwMioBK+ZlgRSssDxLQqKi2WF+A5VLxI
|
|
1843 |
03YnnZotBqbJ7DnSq9ufmgsnAjUpsUCV5/nonFWIGUbWtzT1fs45mtk48VH3Tyw=
|
1844 |
-----END CERTIFICATE-----
|
1845 |
|
1846 |
-
Certinomis - Autorité Racine
|
1847 |
-
============================
|
1848 |
-
-----BEGIN CERTIFICATE-----
|
1849 |
-
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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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
-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
-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
-
c1pkIuVC28+BA5PY9OMQ4HL2AHCs8MF6DwV/zzRpRbWT5BnbUhYjBYkOjUjkJW+zeL9i9Qf6lSTC
|
1860 |
-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
-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
-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
-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
-
A1UdDgQWBBQNjLZh2kS40RR9w759XkjwzspqsDAXBgNVHSAEEDAOMAwGCiqBegFWAgIAAQEwDQYJ
|
1865 |
-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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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
-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
|
1874 |
-
vgt2Fl43N+bYdJeimUV5
|
1875 |
-
-----END CERTIFICATE-----
|
1876 |
-
|
1877 |
TWCA Root Certification Authority
|
1878 |
=================================
|
1879 |
-----BEGIN CERTIFICATE-----
|
@@ -2022,75 +1773,6 @@ l/9D7S3B2l0pKoU/rGXuhg8FjZBf3+6f9L/uHfuY5H+QK4R4EA5sSVPvFVtlRkpdr7r7OnIdzfYl
|
|
2022 |
iB6XzCGcKQENZetX2fNXlrtIzYE=
|
2023 |
-----END CERTIFICATE-----
|
2024 |
|
2025 |
-
StartCom Certification Authority
|
2026 |
-
================================
|
2027 |
-
-----BEGIN CERTIFICATE-----
|
2028 |
-
MIIHhzCCBW+gAwIBAgIBLTANBgkqhkiG9w0BAQsFADB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMN
|
2029 |
-
U3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmlu
|
2030 |
-
ZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0
|
2031 |
-
NjM3WhcNMzYwOTE3MTk0NjM2WjB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRk
|
2032 |
-
LjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMg
|
2033 |
-
U3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw
|
2034 |
-
ggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZkpMyONvg45iPwbm2xPN1y
|
2035 |
-
o4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rfOQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/
|
2036 |
-
Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/CJi/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/d
|
2037 |
-
eMotHweXMAEtcnn6RtYTKqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt
|
2038 |
-
2PZE4XNiHzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMMAv+Z
|
2039 |
-
6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w+2OqqGwaVLRcJXrJ
|
2040 |
-
osmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/
|
2041 |
-
untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVc
|
2042 |
-
UjyJthkqcwEKDwOzEmDyei+B26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT
|
2043 |
-
37uMdBNSSwIDAQABo4ICEDCCAgwwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYD
|
2044 |
-
VR0OBBYEFE4L7xqkQFulF2mHMMo0aEPQQa7yMB8GA1UdIwQYMBaAFE4L7xqkQFulF2mHMMo0aEPQ
|
2045 |
-
Qa7yMIIBWgYDVR0gBIIBUTCCAU0wggFJBgsrBgEEAYG1NwEBATCCATgwLgYIKwYBBQUHAgEWImh0
|
2046 |
-
dHA6Ly93d3cuc3RhcnRzc2wuY29tL3BvbGljeS5wZGYwNAYIKwYBBQUHAgEWKGh0dHA6Ly93d3cu
|
2047 |
-
c3RhcnRzc2wuY29tL2ludGVybWVkaWF0ZS5wZGYwgc8GCCsGAQUFBwICMIHCMCcWIFN0YXJ0IENv
|
2048 |
-
bW1lcmNpYWwgKFN0YXJ0Q29tKSBMdGQuMAMCAQEagZZMaW1pdGVkIExpYWJpbGl0eSwgcmVhZCB0
|
2049 |
-
aGUgc2VjdGlvbiAqTGVnYWwgTGltaXRhdGlvbnMqIG9mIHRoZSBTdGFydENvbSBDZXJ0aWZpY2F0
|
2050 |
-
aW9uIEF1dGhvcml0eSBQb2xpY3kgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuc3RhcnRzc2wuY29t
|
2051 |
-
L3BvbGljeS5wZGYwEQYJYIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilTdGFydENvbSBG
|
2052 |
-
cmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQsFAAOCAgEAjo/n3JR5
|
2053 |
-
fPGFf59Jb2vKXfuM/gTFwWLRfUKKvFO3lANmMD+x5wqnUCBVJX92ehQN6wQOQOY+2IirByeDqXWm
|
2054 |
-
N3PH/UvSTa0XQMhGvjt/UfzDtgUx3M2FIk5xt/JxXrAaxrqTi3iSSoX4eA+D/i+tLPfkpLst0OcN
|
2055 |
-
Org+zvZ49q5HJMqjNTbOx8aHmNrs++myziebiMMEofYLWWivydsQD032ZGNcpRJvkrKTlMeIFw6T
|
2056 |
-
tn5ii5B/q06f/ON1FE8qMt9bDeD1e5MNq6HPh+GlBEXoPBKlCcWw0bdT82AUuoVpaiF8H3VhFyAX
|
2057 |
-
e2w7QSlc4axa0c2Mm+tgHRns9+Ww2vl5GKVFP0lDV9LdJNUso/2RjSe15esUBppMeyG7Oq0wBhjA
|
2058 |
-
2MFrLH9ZXF2RsXAiV+uKa0hK1Q8p7MZAwC+ITGgBF3f0JBlPvfrhsiAhS90a2Cl9qrjeVOwhVYBs
|
2059 |
-
HvUwyKMQ5bLmKhQxw4UtjJixhlpPiVktucf3HMiKf8CdBUrmQk9io20ppB+Fq9vlgcitKj1MXVuE
|
2060 |
-
JnHEhV5xJMqlG2zYYdMa4FTbzrqpMrUi9nNBCV24F10OD5mQ1kfabwo6YigUZ4LZ8dCAWZvLMdib
|
2061 |
-
D4x3TrVoivJs9iQOLWxwxXPR3hTQcY+203sC9uO41Alua551hDnmfyWl8kgAwKQB2j8=
|
2062 |
-
-----END CERTIFICATE-----
|
2063 |
-
|
2064 |
-
StartCom Certification Authority G2
|
2065 |
-
===================================
|
2066 |
-
-----BEGIN CERTIFICATE-----
|
2067 |
-
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
-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
-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
-
ChMNU3RhcnRDb20gTHRkLjEsMCoGA1UEAxMjU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3Jp
|
2071 |
-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
-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
-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
-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
-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
-
O+wmETRIjfaAKxojAuuKHDp2KntWFhxyKrOq42ClAJ8Em+JvHhRYW6Vsi1g8w7pOOlz34ZYrPu8H
|
2077 |
-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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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
-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
-
/+gyRr61M3Z3qAFdlsHB1b6uJcDJHgoJIIihDsnzb02CVAAgp9KP5DlUFy6NHrgbuxu9mk47EDTc
|
2087 |
-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
-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
-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
-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
|
2091 |
-
obp573PYtlNXLfbQ4ddI
|
2092 |
-
-----END CERTIFICATE-----
|
2093 |
-
|
2094 |
Buypass Class 2 Root CA
|
2095 |
=======================
|
2096 |
-----BEGIN CERTIFICATE-----
|
@@ -2197,31 +1879,6 @@ uSlNDUmJEYcyW+ZLBMjkXOZ0c5RdFpgTlf7727FE5TpwrDdr5rMzcijJs1eg9gIWiAYLtqZLICjU
|
|
2197 |
dcGWxZ0=
|
2198 |
-----END CERTIFICATE-----
|
2199 |
|
2200 |
-
TURKTRUST Certificate Services Provider Root 2007
|
2201 |
-
=================================================
|
2202 |
-
-----BEGIN CERTIFICATE-----
|
2203 |
-
MIIEPTCCAyWgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBvzE/MD0GA1UEAww2VMOcUktUUlVTVCBF
|
2204 |
-
bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJUUjEP
|
2205 |
-
MA0GA1UEBwwGQW5rYXJhMV4wXAYDVQQKDFVUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUg
|
2206 |
-
QmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLiAoYykgQXJhbMSxayAyMDA3MB4X
|
2207 |
-
DTA3MTIyNTE4MzcxOVoXDTE3MTIyMjE4MzcxOVowgb8xPzA9BgNVBAMMNlTDnFJLVFJVU1QgRWxl
|
2208 |
-
a3Ryb25payBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsTELMAkGA1UEBhMCVFIxDzAN
|
2209 |
-
BgNVBAcMBkFua2FyYTFeMFwGA1UECgxVVMOcUktUUlVTVCBCaWxnaSDEsGxldGnFn2ltIHZlIEJp
|
2210 |
-
bGnFn2ltIEfDvHZlbmxpxJ9pIEhpem1ldGxlcmkgQS7Fni4gKGMpIEFyYWzEsWsgMjAwNzCCASIw
|
2211 |
-
DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKu3PgqMyKVYFeaK7yc9SrToJdPNM8Ig3BnuiD9N
|
2212 |
-
YvDdE3ePYakqtdTyuTFYKTsvP2qcb3N2Je40IIDu6rfwxArNK4aUyeNgsURSsloptJGXg9i3phQv
|
2213 |
-
KUmi8wUG+7RP2qFsmmaf8EMJyupyj+sA1zU511YXRxcw9L6/P8JorzZAwan0qafoEGsIiveGHtya
|
2214 |
-
KhUG9qPw9ODHFNRRf8+0222vR5YXm3dx2KdxnSQM9pQ/hTEST7ruToK4uT6PIzdezKKqdfcYbwnT
|
2215 |
-
rqdUKDT74eA7YH2gvnmJhsifLfkKS8RQouf9eRbHegsYz85M733WB2+Y8a+xwXrXgTW4qhe04MsC
|
2216 |
-
AwEAAaNCMEAwHQYDVR0OBBYEFCnFkKslrxHkYb+j/4hhkeYO/pyBMA4GA1UdDwEB/wQEAwIBBjAP
|
2217 |
-
BgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBBQUAA4IBAQAQDdr4Ouwo0RSVgrESLFF6QSU2TJ/s
|
2218 |
-
Px+EnWVUXKgWAkD6bho3hO9ynYYKVZ1WKKxmLNA6VpM0ByWtCLCPyA8JWcqdmBzlVPi5RX9ql2+I
|
2219 |
-
aE1KBiY3iAIOtsbWcpnOa3faYjGkVh+uX4132l32iPwa2Z61gfAyuOOI0JzzaqC5mxRZNTZPz/OO
|
2220 |
-
Xl0XrRWV2N2y1RVuAE6zS89mlOTgzbUF2mNXi+WzqtvALhyQRNsaXRik7r4EW5nVcV9VZWRi1aKb
|
2221 |
-
BFmGyGJ353yCRWo9F7/snXUMrqNvWtMvmDb08PUZqxFdyKbjKlhqQgnDvZImZjINXQhVdP+MmNAK
|
2222 |
-
poRq0Tl9
|
2223 |
-
-----END CERTIFICATE-----
|
2224 |
-
|
2225 |
D-TRUST Root Class 3 CA 2 2009
|
2226 |
==============================
|
2227 |
-----BEGIN CERTIFICATE-----
|
@@ -2271,84 +1928,6 @@ NCa1CInXCGNjOCd1HjPqbqjdn5lPdE2BiYBL3ZqXKVwvvoFBuYz/6n1gBp7N1z3TLqMVvKjmJuVv
|
|
2271 |
w9y4AyHqnxbxLFS1
|
2272 |
-----END CERTIFICATE-----
|
2273 |
|
2274 |
-
PSCProcert
|
2275 |
-
==========
|
2276 |
-
-----BEGIN CERTIFICATE-----
|
2277 |
-
MIIJhjCCB26gAwIBAgIBCzANBgkqhkiG9w0BAQsFADCCAR4xPjA8BgNVBAMTNUF1dG9yaWRhZCBk
|
2278 |
-
ZSBDZXJ0aWZpY2FjaW9uIFJhaXogZGVsIEVzdGFkbyBWZW5lem9sYW5vMQswCQYDVQQGEwJWRTEQ
|
2279 |
-
MA4GA1UEBxMHQ2FyYWNhczEZMBcGA1UECBMQRGlzdHJpdG8gQ2FwaXRhbDE2MDQGA1UEChMtU2lz
|
2280 |
-
dGVtYSBOYWNpb25hbCBkZSBDZXJ0aWZpY2FjaW9uIEVsZWN0cm9uaWNhMUMwQQYDVQQLEzpTdXBl
|
2281 |
-
cmludGVuZGVuY2lhIGRlIFNlcnZpY2lvcyBkZSBDZXJ0aWZpY2FjaW9uIEVsZWN0cm9uaWNhMSUw
|
2282 |
-
IwYJKoZIhvcNAQkBFhZhY3JhaXpAc3VzY2VydGUuZ29iLnZlMB4XDTEwMTIyODE2NTEwMFoXDTIw
|
2283 |
-
MTIyNTIzNTk1OVowgdExJjAkBgkqhkiG9w0BCQEWF2NvbnRhY3RvQHByb2NlcnQubmV0LnZlMQ8w
|
2284 |
-
DQYDVQQHEwZDaGFjYW8xEDAOBgNVBAgTB01pcmFuZGExKjAoBgNVBAsTIVByb3ZlZWRvciBkZSBD
|
2285 |
-
ZXJ0aWZpY2Fkb3MgUFJPQ0VSVDE2MDQGA1UEChMtU2lzdGVtYSBOYWNpb25hbCBkZSBDZXJ0aWZp
|
2286 |
-
Y2FjaW9uIEVsZWN0cm9uaWNhMQswCQYDVQQGEwJWRTETMBEGA1UEAxMKUFNDUHJvY2VydDCCAiIw
|
2287 |
-
DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANW39KOUM6FGqVVhSQ2oh3NekS1wwQYalNo97BVC
|
2288 |
-
wfWMrmoX8Yqt/ICV6oNEolt6Vc5Pp6XVurgfoCfAUFM+jbnADrgV3NZs+J74BCXfgI8Qhd19L3uA
|
2289 |
-
3VcAZCP4bsm+lU/hdezgfl6VzbHvvnpC2Mks0+saGiKLt38GieU89RLAu9MLmV+QfI4tL3czkkoh
|
2290 |
-
RqipCKzx9hEC2ZUWno0vluYC3XXCFCpa1sl9JcLB/KpnheLsvtF8PPqv1W7/U0HU9TI4seJfxPmO
|
2291 |
-
EO8GqQKJ/+MMbpfg353bIdD0PghpbNjU5Db4g7ayNo+c7zo3Fn2/omnXO1ty0K+qP1xmk6wKImG2
|
2292 |
-
0qCZyFSTXai20b1dCl53lKItwIKOvMoDKjSuc/HUtQy9vmebVOvh+qBa7Dh+PsHMosdEMXXqP+UH
|
2293 |
-
0quhJZb25uSgXTcYOWEAM11G1ADEtMo88aKjPvM6/2kwLkDd9p+cJsmWN63nOaK/6mnbVSKVUyqU
|
2294 |
-
td+tFjiBdWbjxywbk5yqjKPK2Ww8F22c3HxT4CAnQzb5EuE8XL1mv6JpIzi4mWCZDlZTOpx+FIyw
|
2295 |
-
Bm/xhnaQr/2v/pDGj59/i5IjnOcVdo/Vi5QTcmn7K2FjiO/mpF7moxdqWEfLcU8UC17IAggmosvp
|
2296 |
-
r2uKGcfLFFb14dq12fy/czja+eevbqQ34gcnAgMBAAGjggMXMIIDEzASBgNVHRMBAf8ECDAGAQH/
|
2297 |
-
AgEBMDcGA1UdEgQwMC6CD3N1c2NlcnRlLmdvYi52ZaAbBgVghl4CAqASDBBSSUYtRy0yMDAwNDAz
|
2298 |
-
Ni0wMB0GA1UdDgQWBBRBDxk4qpl/Qguk1yeYVKIXTC1RVDCCAVAGA1UdIwSCAUcwggFDgBStuyId
|
2299 |
-
xuDSAaj9dlBSk+2YwU2u06GCASakggEiMIIBHjE+MDwGA1UEAxM1QXV0b3JpZGFkIGRlIENlcnRp
|
2300 |
-
ZmljYWNpb24gUmFpeiBkZWwgRXN0YWRvIFZlbmV6b2xhbm8xCzAJBgNVBAYTAlZFMRAwDgYDVQQH
|
2301 |
-
EwdDYXJhY2FzMRkwFwYDVQQIExBEaXN0cml0byBDYXBpdGFsMTYwNAYDVQQKEy1TaXN0ZW1hIE5h
|
2302 |
-
Y2lvbmFsIGRlIENlcnRpZmljYWNpb24gRWxlY3Ryb25pY2ExQzBBBgNVBAsTOlN1cGVyaW50ZW5k
|
2303 |
-
ZW5jaWEgZGUgU2VydmljaW9zIGRlIENlcnRpZmljYWNpb24gRWxlY3Ryb25pY2ExJTAjBgkqhkiG
|
2304 |
-
9w0BCQEWFmFjcmFpekBzdXNjZXJ0ZS5nb2IudmWCAQowDgYDVR0PAQH/BAQDAgEGME0GA1UdEQRG
|
2305 |
-
MESCDnByb2NlcnQubmV0LnZloBUGBWCGXgIBoAwMClBTQy0wMDAwMDKgGwYFYIZeAgKgEgwQUklG
|
2306 |
-
LUotMzE2MzUzNzMtNzB2BgNVHR8EbzBtMEagRKBChkBodHRwOi8vd3d3LnN1c2NlcnRlLmdvYi52
|
2307 |
-
ZS9sY3IvQ0VSVElGSUNBRE8tUkFJWi1TSEEzODRDUkxERVIuY3JsMCOgIaAfhh1sZGFwOi8vYWNy
|
2308 |
-
YWl6LnN1c2NlcnRlLmdvYi52ZTA3BggrBgEFBQcBAQQrMCkwJwYIKwYBBQUHMAGGG2h0dHA6Ly9v
|
2309 |
-
Y3NwLnN1c2NlcnRlLmdvYi52ZTBBBgNVHSAEOjA4MDYGBmCGXgMBAjAsMCoGCCsGAQUFBwIBFh5o
|
2310 |
-
dHRwOi8vd3d3LnN1c2NlcnRlLmdvYi52ZS9kcGMwDQYJKoZIhvcNAQELBQADggIBACtZ6yKZu4Sq
|
2311 |
-
T96QxtGGcSOeSwORR3C7wJJg7ODU523G0+1ng3dS1fLld6c2suNUvtm7CpsR72H0xpkzmfWvADmN
|
2312 |
-
g7+mvTV+LFwxNG9s2/NkAZiqlCxB3RWGymspThbASfzXg0gTB1GEMVKIu4YXx2sviiCtxQuPcD4q
|
2313 |
-
uxtxj7mkoP3YldmvWb8lK5jpY5MvYB7Eqvh39YtsL+1+LrVPQA3uvFd359m21D+VJzog1eWuq2w1
|
2314 |
-
n8GhHVnchIHuTQfiSLaeS5UtQbHh6N5+LwUeaO6/u5BlOsju6rEYNxxik6SgMexxbJHmpHmJWhSn
|
2315 |
-
FFAFTKQAVzAswbVhltw+HoSvOULP5dAssSS830DD7X9jSr3hTxJkhpXzsOfIt+FTvZLm8wyWuevo
|
2316 |
-
5pLtp4EJFAv8lXrPj9Y0TzYS3F7RNHXGRoAvlQSMx4bEqCaJqD8Zm4G7UaRKhqsLEQ+xrmNTbSjq
|
2317 |
-
3TNWOByyrYDT13K9mmyZY+gAu0F2BbdbmRiKw7gSXFbPVgx96OLP7bx0R/vu0xdOIk9W/1DzLuY5
|
2318 |
-
poLWccret9W6aAjtmcz9opLLabid+Qqkpj5PkygqYWwHJgD/ll9ohri4zspV4KuxPX+Y1zMOWj3Y
|
2319 |
-
eMLEYC/HYvBhkdI4sPaeVdtAgAUSM84dkpvRabP/v/GSCmE1P93+hvS84Bpxs2Km
|
2320 |
-
-----END CERTIFICATE-----
|
2321 |
-
|
2322 |
-
CA Disig Root R1
|
2323 |
-
================
|
2324 |
-
-----BEGIN CERTIFICATE-----
|
2325 |
-
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
-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
-
ZyBSb290IFIxMB4XDTEyMDcxOTA5MDY1NloXDTQyMDcxOTA5MDY1NlowUjELMAkGA1UEBhMCU0sx
|
2328 |
-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
-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
-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
-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
-
m6uOt0qGeKAeVjGu74IKgEH3G8muqzIm1Cxr7X1r5OJeIgpFy4QxTaz+29FHuvlglzmxZcfe+5nk
|
2333 |
-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
-
YVKvJrT1cU/J19IG32PK/yHoWQbgCNWEFVP3Q+V8xaCJmGtzxmjOZd69fwX3se72V6FglcXM6pM6
|
2335 |
-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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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
-
CrDpfNIZTUJG7L399ldb3Zh+pE3McgODWF3vkzpBemOqfDqo9ayk0d2iLbYq/J8BjuIQscTK5Gfb
|
2344 |
-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
-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
-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
-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
-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
|
2349 |
-
a7+h89n07eLw4+1knj0vllJPgFOL
|
2350 |
-
-----END CERTIFICATE-----
|
2351 |
-
|
2352 |
CA Disig Root R2
|
2353 |
================
|
2354 |
-----BEGIN CERTIFICATE-----
|
@@ -2752,66 +2331,6 @@ G48BtieVU+i2iW1bvGjUI+iLUaJW+fCmgKDWHrO8Dw9TdSmq6hN35N6MgSGtBxBHEa2HPQfRdbzP
|
|
2752 |
82Z+
|
2753 |
-----END CERTIFICATE-----
|
2754 |
|
2755 |
-
WoSign
|
2756 |
-
======
|
2757 |
-
-----BEGIN CERTIFICATE-----
|
2758 |
-
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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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
-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
-
+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
-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
-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
-
8jHAPwQ+658geda4BmRkAjHXqc1S+4RFaQkAKtxVi8QGRkvASh0JWzko/amrzgD5LkhLJuYwTKVY
|
2771 |
-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
-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
-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
-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
-
T2r09Ys/L3yNWC7F4TmgPsc9SnOeQHrAK2GpZ8nzJLmzbVUsWh2eJXLOC62qx1ViC777Y7NhRCOj
|
2776 |
-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
-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
-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
-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
-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
-
kUOVyLzwPt0JfjBkUO1/AaQzZ01oT74V77D2AhGiGxMlOtzCWfHjXEa7ZywCRuoeSKbmW9m1vFGi
|
2782 |
-
kpbbqsY3Iqb+zCB0oy2pLmvLwIIRIbWTee5Ehr7XHuQe+w==
|
2783 |
-
-----END CERTIFICATE-----
|
2784 |
-
|
2785 |
-
WoSign China
|
2786 |
-
============
|
2787 |
-
-----BEGIN CERTIFICATE-----
|
2788 |
-
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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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
-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
-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
-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
-
+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
-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
-
GKUN5AXlK8IrC6KVkLn9YDxOiT7nnO4fuwECAwEAAaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1Ud
|
2802 |
-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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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
-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
-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
|
2812 |
-
kI26oQ==
|
2813 |
-
-----END CERTIFICATE-----
|
2814 |
-
|
2815 |
COMODO RSA Certification Authority
|
2816 |
==================================
|
2817 |
-----BEGIN CERTIFICATE-----
|
@@ -3193,42 +2712,6 @@ HZeeevJuQHHfaPFlTc58Bd9TZaml8LGXBHAVRgOY1NK/VLSgWH1Sb9pWJmLU2NuJMW8c8CLC02Ic
|
|
3193 |
Nc1MaRVUGpCY3useX8p3x8uOPUNpnJpY0CQ73xtAln41rYHHTnG6iBM=
|
3194 |
-----END CERTIFICATE-----
|
3195 |
|
3196 |
-
Certification Authority of WoSign G2
|
3197 |
-
====================================
|
3198 |
-
-----BEGIN CERTIFICATE-----
|
3199 |
-
MIIDfDCCAmSgAwIBAgIQayXaioidfLwPBbOxemFFRDANBgkqhkiG9w0BAQsFADBYMQswCQYDVQQG
|
3200 |
-
EwJDTjEaMBgGA1UEChMRV29TaWduIENBIExpbWl0ZWQxLTArBgNVBAMTJENlcnRpZmljYXRpb24g
|
3201 |
-
QXV0aG9yaXR5IG9mIFdvU2lnbiBHMjAeFw0xNDExMDgwMDU4NThaFw00NDExMDgwMDU4NThaMFgx
|
3202 |
-
CzAJBgNVBAYTAkNOMRowGAYDVQQKExFXb1NpZ24gQ0EgTGltaXRlZDEtMCsGA1UEAxMkQ2VydGlm
|
3203 |
-
aWNhdGlvbiBBdXRob3JpdHkgb2YgV29TaWduIEcyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
|
3204 |
-
CgKCAQEAvsXEoCKASU+/2YcRxlPhuw+9YH+v9oIOH9ywjj2X4FA8jzrvZjtFB5sg+OPXJYY1kBai
|
3205 |
-
XW8wGQiHC38Gsp1ij96vkqVg1CuAmlI/9ZqD6TRay9nVYlzmDuDfBpgOgHzKtB0TiGsOqCR3A9Du
|
3206 |
-
W/PKaZE1OVbFbeP3PU9ekzgkyhjpJMuSA93MHD0JcOQg5PGurLtzaaNjOg9FD6FKmsLRY6zLEPg9
|
3207 |
-
5k4ot+vElbGs/V6r+kHLXZ1L3PR8du9nfwB6jdKgGlxNIuG12t12s9R23164i5jIFFTMaxeSt+BK
|
3208 |
-
v0mUYQs4kI9dJGwlezt52eJ+na2fmKEG/HgUYFf47oB3sQIDAQABo0IwQDAOBgNVHQ8BAf8EBAMC
|
3209 |
-
AQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU+mCp62XF3RYUCE4MD42b4Pdkr2cwDQYJKoZI
|
3210 |
-
hvcNAQELBQADggEBAFfDejaCnI2Y4qtAqkePx6db7XznPWZaOzG73/MWM5H8fHulwqZm46qwtyeY
|
3211 |
-
P0nXYGdnPzZPSsvxFPpahygc7Y9BMsaV+X3avXtbwrAh449G3CE4Q3RM+zD4F3LBMvzIkRfEzFg3
|
3212 |
-
TgvMWvchNSiDbGAtROtSjFA9tWwS1/oJu2yySrHFieT801LYYRf+epSEj3m2M1m6D8QL4nCgS3gu
|
3213 |
-
+sif/a+RZQp4OBXllxcU3fngLDT4ONCEIgDAFFEYKwLcMFrw6AF8NTojrwjkr6qOKEJJLvD1mTS+
|
3214 |
-
7Q9LGOHSJDy7XUe3IfKN0QqZjuNuPq1w4I+5ysxugTH2e5x6eeRncRg=
|
3215 |
-
-----END CERTIFICATE-----
|
3216 |
-
|
3217 |
-
CA WoSign ECC Root
|
3218 |
-
==================
|
3219 |
-
-----BEGIN CERTIFICATE-----
|
3220 |
-
MIICCTCCAY+gAwIBAgIQaEpYcIBr8I8C+vbe6LCQkDAKBggqhkjOPQQDAzBGMQswCQYDVQQGEwJD
|
3221 |
-
TjEaMBgGA1UEChMRV29TaWduIENBIExpbWl0ZWQxGzAZBgNVBAMTEkNBIFdvU2lnbiBFQ0MgUm9v
|
3222 |
-
dDAeFw0xNDExMDgwMDU4NThaFw00NDExMDgwMDU4NThaMEYxCzAJBgNVBAYTAkNOMRowGAYDVQQK
|
3223 |
-
ExFXb1NpZ24gQ0EgTGltaXRlZDEbMBkGA1UEAxMSQ0EgV29TaWduIEVDQyBSb290MHYwEAYHKoZI
|
3224 |
-
zj0CAQYFK4EEACIDYgAE4f2OuEMkq5Z7hcK6C62N4DrjJLnSsb6IOsq/Srj57ywvr1FQPEd1bPiU
|
3225 |
-
t5v8KB7FVMxjnRZLU8HnIKvNrCXSf4/CwVqCXjCLelTOA7WRf6qU0NGKSMyCBSah1VES1ns2o0Iw
|
3226 |
-
QDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUqv3VWqP2h4syhf3R
|
3227 |
-
MluARZPzA7gwCgYIKoZIzj0EAwMDaAAwZQIxAOSkhLCB1T2wdKyUpOgOPQB0TKGXa/kNUTyh2Tv0
|
3228 |
-
Daupn75OcsqF1NnstTJFGG+rrQIwfcf3aWMvoeGY7xMQ0Xk/0f7qO3/eVvSQsRUR2LIiFdAvwyYu
|
3229 |
-
a/GRspBl9JrmkO5K
|
3230 |
-
-----END CERTIFICATE-----
|
3231 |
-
|
3232 |
SZAFIR ROOT CA2
|
3233 |
===============
|
3234 |
-----BEGIN CERTIFICATE-----
|
@@ -3644,3 +3127,212 @@ lNhOT8NrF7f3cuitZjO1JVOr4PhMqZ398g26rrnZqsZr+ZO7rqu4lzwDGrpDxpa5RXI4s6ehlj2R
|
|
3644 |
e37AIVNMh+3yC1SVUZPVIqUNivGTDj5UDrDYyU7c8jEyVupk+eq1nRZmQnLzf9OxMUP8pI4X8W0j
|
3645 |
q5Rm+K37DwhuJi1/FwcJsoz7UMCflo3Ptv0AnVoUmr8CRPXBwp8iXqIPoeM=
|
3646 |
-----END CERTIFICATE-----
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
##
|
2 |
## Bundle of CA Root Certificates
|
3 |
##
|
4 |
+
## Certificate data from Mozilla as of: Wed Mar 7 04:12:06 2018 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
|
14 |
## Just configure this file as the SSLCACertificateFile.
|
15 |
##
|
16 |
## Conversion done with mk-ca-bundle.pl version 1.27.
|
17 |
+
## SHA256: 704f02707ec6b4c4a7597a8c6039b020def11e64f3ef0605a9c3543d48038a57
|
18 |
##
|
19 |
|
20 |
|
283 |
398znM/jra6O1I7mT1GvFpLgXPYHDw==
|
284 |
-----END CERTIFICATE-----
|
285 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
286 |
Comodo AAA Services root
|
287 |
========================
|
288 |
-----BEGIN CERTIFICATE-----
|
446 |
llpwrN9M
|
447 |
-----END CERTIFICATE-----
|
448 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
449 |
XRamp Global CA Root
|
450 |
====================
|
451 |
-----BEGIN CERTIFICATE-----
|
518 |
QBFGmh95DmK/D5fs4C8fF5Q=
|
519 |
-----END CERTIFICATE-----
|
520 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
521 |
Taiwan GRCA
|
522 |
===========
|
523 |
-----BEGIN CERTIFICATE-----
|
656 |
fZGL+T0yjWW06XyxV3bqxbYoOb8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ
|
657 |
-----END CERTIFICATE-----
|
658 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
659 |
SwissSign Gold CA - G2
|
660 |
======================
|
661 |
-----BEGIN CERTIFICATE-----
|
898 |
U/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY=
|
899 |
-----END CERTIFICATE-----
|
900 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
901 |
OISTE WISeKey Global Root GA CA
|
902 |
===============================
|
903 |
-----BEGIN CERTIFICATE-----
|
1018 |
BCEIZ43ygknQW/2xzQ+DhNQ+IIX3Sj0rnP0qCglN6oH4EZw=
|
1019 |
-----END CERTIFICATE-----
|
1020 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1021 |
certSIGN ROOT CA
|
1022 |
================
|
1023 |
-----BEGIN CERTIFICATE-----
|
1265 |
lgeLKBObjBmNQSdJQO7e5iNEOdyhIta6A/I=
|
1266 |
-----END CERTIFICATE-----
|
1267 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1268 |
Microsec e-Szigno Root CA 2009
|
1269 |
==============================
|
1270 |
-----BEGIN CERTIFICATE-----
|
1625 |
03YnnZotBqbJ7DnSq9ufmgsnAjUpsUCV5/nonFWIGUbWtzT1fs45mtk48VH3Tyw=
|
1626 |
-----END CERTIFICATE-----
|
1627 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1628 |
TWCA Root Certification Authority
|
1629 |
=================================
|
1630 |
-----BEGIN CERTIFICATE-----
|
1773 |
iB6XzCGcKQENZetX2fNXlrtIzYE=
|
1774 |
-----END CERTIFICATE-----
|
1775 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1776 |
Buypass Class 2 Root CA
|
1777 |
=======================
|
1778 |
-----BEGIN CERTIFICATE-----
|
1879 |
dcGWxZ0=
|
1880 |
-----END CERTIFICATE-----
|
1881 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1882 |
D-TRUST Root Class 3 CA 2 2009
|
1883 |
==============================
|
1884 |
-----BEGIN CERTIFICATE-----
|
1928 |
w9y4AyHqnxbxLFS1
|
1929 |
-----END CERTIFICATE-----
|
1930 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1931 |
CA Disig Root R2
|
1932 |
================
|
1933 |
-----BEGIN CERTIFICATE-----
|
2331 |
82Z+
|
2332 |
-----END CERTIFICATE-----
|
2333 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2334 |
COMODO RSA Certification Authority
|
2335 |
==================================
|
2336 |
-----BEGIN CERTIFICATE-----
|
2712 |
Nc1MaRVUGpCY3useX8p3x8uOPUNpnJpY0CQ73xtAln41rYHHTnG6iBM=
|
2713 |
-----END CERTIFICATE-----
|
2714 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2715 |
SZAFIR ROOT CA2
|
2716 |
===============
|
2717 |
-----BEGIN CERTIFICATE-----
|
3127 |
e37AIVNMh+3yC1SVUZPVIqUNivGTDj5UDrDYyU7c8jEyVupk+eq1nRZmQnLzf9OxMUP8pI4X8W0j
|
3128 |
q5Rm+K37DwhuJi1/FwcJsoz7UMCflo3Ptv0AnVoUmr8CRPXBwp8iXqIPoeM=
|
3129 |
-----END CERTIFICATE-----
|
3130 |
+
|
3131 |
+
GDCA TrustAUTH R5 ROOT
|
3132 |
+
======================
|
3133 |
+
-----BEGIN CERTIFICATE-----
|
3134 |
+
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
|
3159 |
+
-----END CERTIFICATE-----
|
3160 |
+
|
3161 |
+
TrustCor RootCert CA-1
|
3162 |
+
======================
|
3163 |
+
-----BEGIN CERTIFICATE-----
|
3164 |
+
MIIEMDCCAxigAwIBAgIJANqb7HHzA7AZMA0GCSqGSIb3DQEBCwUAMIGkMQswCQYDVQQGEwJQQTEP
|
3165 |
+
MA0GA1UECAwGUGFuYW1hMRQwEgYDVQQHDAtQYW5hbWEgQ2l0eTEkMCIGA1UECgwbVHJ1c3RDb3Ig
|
3166 |
+
U3lzdGVtcyBTLiBkZSBSLkwuMScwJQYDVQQLDB5UcnVzdENvciBDZXJ0aWZpY2F0ZSBBdXRob3Jp
|
3167 |
+
dHkxHzAdBgNVBAMMFlRydXN0Q29yIFJvb3RDZXJ0IENBLTEwHhcNMTYwMjA0MTIzMjE2WhcNMjkx
|
3168 |
+
MjMxMTcyMzE2WjCBpDELMAkGA1UEBhMCUEExDzANBgNVBAgMBlBhbmFtYTEUMBIGA1UEBwwLUGFu
|
3169 |
+
YW1hIENpdHkxJDAiBgNVBAoMG1RydXN0Q29yIFN5c3RlbXMgUy4gZGUgUi5MLjEnMCUGA1UECwwe
|
3170 |
+
VHJ1c3RDb3IgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MR8wHQYDVQQDDBZUcnVzdENvciBSb290Q2Vy
|
3171 |
+
dCBDQS0xMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv463leLCJhJrMxnHQFgKq1mq
|
3172 |
+
jQCj/IDHUHuO1CAmujIS2CNUSSUQIpidRtLByZ5OGy4sDjjzGiVoHKZaBeYei0i/mJZ0PmnK6bV4
|
3173 |
+
pQa81QBeCQryJ3pS/C3Vseq0iWEk8xoT26nPUu0MJLq5nux+AHT6k61sKZKuUbS701e/s/OojZz0
|
3174 |
+
JEsq1pme9J7+wH5COucLlVPat2gOkEz7cD+PSiyU8ybdY2mplNgQTsVHCJCZGxdNuWxu72CVEY4h
|
3175 |
+
gLW9oHPY0LJ3xEXqWib7ZnZ2+AYfYW0PVcWDtxBWcgYHpfOxGgMFZA6dWorWhnAbJN7+KIor0Gqw
|
3176 |
+
/Hqi3LJ5DotlDwIDAQABo2MwYTAdBgNVHQ4EFgQU7mtJPHo/DeOxCbeKyKsZn3MzUOcwHwYDVR0j
|
3177 |
+
BBgwFoAU7mtJPHo/DeOxCbeKyKsZn3MzUOcwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
|
3178 |
+
AYYwDQYJKoZIhvcNAQELBQADggEBACUY1JGPE+6PHh0RU9otRCkZoB5rMZ5NDp6tPVxBb5UrJKF5
|
3179 |
+
mDo4Nvu7Zp5I/5CQ7z3UuJu0h3U/IJvOcs+hVcFNZKIZBqEHMwwLKeXx6quj7LUKdJDHfXLy11yf
|
3180 |
+
ke+Ri7fc7Waiz45mO7yfOgLgJ90WmMCV1Aqk5IGadZQ1nJBfiDcGrVmVCrDRZ9MZyonnMlo2HD6C
|
3181 |
+
qFqTvsbQZJG2z9m2GM/bftJlo6bEjhcxwft+dtvTheNYsnd6djtsL1Ac59v2Z3kf9YKVmgenFK+P
|
3182 |
+
3CghZwnS1k1aHBkcjndcw5QkPTJrS37UeJSDvjdNzl/HHk484IkzlQsPpTLWPFp5LBk=
|
3183 |
+
-----END CERTIFICATE-----
|
3184 |
+
|
3185 |
+
TrustCor RootCert CA-2
|
3186 |
+
======================
|
3187 |
+
-----BEGIN CERTIFICATE-----
|
3188 |
+
MIIGLzCCBBegAwIBAgIIJaHfyjPLWQIwDQYJKoZIhvcNAQELBQAwgaQxCzAJBgNVBAYTAlBBMQ8w
|
3189 |
+
DQYDVQQIDAZQYW5hbWExFDASBgNVBAcMC1BhbmFtYSBDaXR5MSQwIgYDVQQKDBtUcnVzdENvciBT
|
3190 |
+
eXN0ZW1zIFMuIGRlIFIuTC4xJzAlBgNVBAsMHlRydXN0Q29yIENlcnRpZmljYXRlIEF1dGhvcml0
|
3191 |
+
eTEfMB0GA1UEAwwWVHJ1c3RDb3IgUm9vdENlcnQgQ0EtMjAeFw0xNjAyMDQxMjMyMjNaFw0zNDEy
|
3192 |
+
MzExNzI2MzlaMIGkMQswCQYDVQQGEwJQQTEPMA0GA1UECAwGUGFuYW1hMRQwEgYDVQQHDAtQYW5h
|
3193 |
+
bWEgQ2l0eTEkMCIGA1UECgwbVHJ1c3RDb3IgU3lzdGVtcyBTLiBkZSBSLkwuMScwJQYDVQQLDB5U
|
3194 |
+
cnVzdENvciBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxHzAdBgNVBAMMFlRydXN0Q29yIFJvb3RDZXJ0
|
3195 |
+
IENBLTIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCnIG7CKqJiJJWQdsg4foDSq8Gb
|
3196 |
+
ZQWU9MEKENUCrO2fk8eHyLAnK0IMPQo+QVqedd2NyuCb7GgypGmSaIwLgQ5WoD4a3SwlFIIvl9Nk
|
3197 |
+
RvRUqdw6VC0xK5mC8tkq1+9xALgxpL56JAfDQiDyitSSBBtlVkxs1Pu2YVpHI7TYabS3OtB0PAx1
|
3198 |
+
oYxOdqHp2yqlO/rOsP9+aij9JxzIsekp8VduZLTQwRVtDr4uDkbIXvRR/u8OYzo7cbrPb1nKDOOb
|
3199 |
+
XUm4TOJXsZiKQlecdu/vvdFoqNL0Cbt3Nb4lggjEFixEIFapRBF37120Hapeaz6LMvYHL1cEksr1
|
3200 |
+
/p3C6eizjkxLAjHZ5DxIgif3GIJ2SDpxsROhOdUuxTTCHWKF3wP+TfSvPd9cW436cOGlfifHhi5q
|
3201 |
+
jxLGhF5DUVCcGZt45vz27Ud+ez1m7xMTiF88oWP7+ayHNZ/zgp6kPwqcMWmLmaSISo5uZk3vFsQP
|
3202 |
+
eSghYA2FFn3XVDjxklb9tTNMg9zXEJ9L/cb4Qr26fHMC4P99zVvh1Kxhe1fVSntb1IVYJ12/+Ctg
|
3203 |
+
rKAmrhQhJ8Z3mjOAPF5GP/fDsaOGM8boXg25NSyqRsGFAnWAoOsk+xWq5Gd/bnc/9ASKL3x74xdh
|
3204 |
+
8N0JqSDIvgmk0H5Ew7IwSjiqqewYmgeCK9u4nBit2uBGF6zPXQIDAQABo2MwYTAdBgNVHQ4EFgQU
|
3205 |
+
2f4hQG6UnrybPZx9mCAZ5YwwYrIwHwYDVR0jBBgwFoAU2f4hQG6UnrybPZx9mCAZ5YwwYrIwDwYD
|
3206 |
+
VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZIhvcNAQELBQADggIBAJ5Fngw7tu/h
|
3207 |
+
Osh80QA9z+LqBrWyOrsGS2h60COXdKcs8AjYeVrXWoSK2BKaG9l9XE1wxaX5q+WjiYndAfrs3fnp
|
3208 |
+
kpfbsEZC89NiqpX+MWcUaViQCqoL7jcjx1BRtPV+nuN79+TMQjItSQzL/0kMmx40/W5ulop5A7Zv
|
3209 |
+
2wnL/V9lFDfhOPXzYRZY5LVtDQsEGz9QLX+zx3oaFoBg+Iof6Rsqxvm6ARppv9JYx1RXCI/hOWB3
|
3210 |
+
S6xZhBqI8d3LT3jX5+EzLfzuQfogsL7L9ziUwOHQhQ+77Sxzq+3+knYaZH9bDTMJBzN7Bj8RpFxw
|
3211 |
+
PIXAz+OQqIN3+tvmxYxoZxBnpVIt8MSZj3+/0WvitUfW2dCFmU2Umw9Lje4AWkcdEQOsQRivh7dv
|
3212 |
+
DDqPys/cA8GiCcjl/YBeyGBCARsaU1q7N6a3vLqE6R5sGtRk2tRD/pOLS/IseRYQ1JMLiI+h2IYU
|
3213 |
+
RpFHmygk71dSTlxCnKr3Sewn6EAes6aJInKc9Q0ztFijMDvd1GpUk74aTfOTlPf8hAs/hCBcNANE
|
3214 |
+
xdqtvArBAs8e5ZTZ845b2EzwnexhF7sUMlQMAimTHpKG9n/v55IFDlndmQguLvqcAFLTxWYp5KeX
|
3215 |
+
RKQOKIETNcX2b2TmQcTVL8w0RSXPQQCWPUouwpaYT05KnJe32x+SMsj/D1Fu1uwJ
|
3216 |
+
-----END CERTIFICATE-----
|
3217 |
+
|
3218 |
+
TrustCor ECA-1
|
3219 |
+
==============
|
3220 |
+
-----BEGIN CERTIFICATE-----
|
3221 |
+
MIIEIDCCAwigAwIBAgIJAISCLF8cYtBAMA0GCSqGSIb3DQEBCwUAMIGcMQswCQYDVQQGEwJQQTEP
|
3222 |
+
MA0GA1UECAwGUGFuYW1hMRQwEgYDVQQHDAtQYW5hbWEgQ2l0eTEkMCIGA1UECgwbVHJ1c3RDb3Ig
|
3223 |
+
U3lzdGVtcyBTLiBkZSBSLkwuMScwJQYDVQQLDB5UcnVzdENvciBDZXJ0aWZpY2F0ZSBBdXRob3Jp
|
3224 |
+
dHkxFzAVBgNVBAMMDlRydXN0Q29yIEVDQS0xMB4XDTE2MDIwNDEyMzIzM1oXDTI5MTIzMTE3Mjgw
|
3225 |
+
N1owgZwxCzAJBgNVBAYTAlBBMQ8wDQYDVQQIDAZQYW5hbWExFDASBgNVBAcMC1BhbmFtYSBDaXR5
|
3226 |
+
MSQwIgYDVQQKDBtUcnVzdENvciBTeXN0ZW1zIFMuIGRlIFIuTC4xJzAlBgNVBAsMHlRydXN0Q29y
|
3227 |
+
IENlcnRpZmljYXRlIEF1dGhvcml0eTEXMBUGA1UEAwwOVHJ1c3RDb3IgRUNBLTEwggEiMA0GCSqG
|
3228 |
+
SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDPj+ARtZ+odnbb3w9U73NjKYKtR8aja+3+XzP4Q1HpGjOR
|
3229 |
+
MRegdMTUpwHmspI+ap3tDvl0mEDTPwOABoJA6LHip1GnHYMma6ve+heRK9jGrB6xnhkB1Zem6g23
|
3230 |
+
xFUfJ3zSCNV2HykVh0A53ThFEXXQmqc04L/NyFIduUd+Dbi7xgz2c1cWWn5DkR9VOsZtRASqnKmc
|
3231 |
+
p0yJF4OuowReUoCLHhIlERnXDH19MURB6tuvsBzvgdAsxZohmz3tQjtQJvLsznFhBmIhVE5/wZ0+
|
3232 |
+
fyCMgMsq2JdiyIMzkX2woloPV+g7zPIlstR8L+xNxqE6FXrntl019fZISjZFZtS6mFjBAgMBAAGj
|
3233 |
+
YzBhMB0GA1UdDgQWBBREnkj1zG1I1KBLf/5ZJC+Dl5mahjAfBgNVHSMEGDAWgBREnkj1zG1I1KBL
|
3234 |
+
f/5ZJC+Dl5mahjAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQsF
|
3235 |
+
AAOCAQEABT41XBVwm8nHc2FvcivUwo/yQ10CzsSUuZQRg2dd4mdsdXa/uwyqNsatR5Nj3B5+1t4u
|
3236 |
+
/ukZMjgDfxT2AHMsWbEhBuH7rBiVDKP/mZb3Kyeb1STMHd3BOuCYRLDE5D53sXOpZCz2HAF8P11F
|
3237 |
+
hcCF5yWPldwX8zyfGm6wyuMdKulMY/okYWLW2n62HGz1Ah3UKt1VkOsqEUc8Ll50soIipX1TH0Xs
|
3238 |
+
J5F95yIW6MBoNtjG8U+ARDL54dHRHareqKucBK+tIA5kmE2la8BIWJZpTdwHjFGTot+fDz2LYLSC
|
3239 |
+
jaoITmJF4PkL0uDgPFveXHEnJcLmA4GLEFPjx1WitJ/X5g==
|
3240 |
+
-----END CERTIFICATE-----
|
3241 |
+
|
3242 |
+
SSL.com Root Certification Authority RSA
|
3243 |
+
========================================
|
3244 |
+
-----BEGIN CERTIFICATE-----
|
3245 |
+
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
|
3271 |
+
WuuA8ShYIc2wBlX7Jz9TkHCpBB5XJ7k=
|
3272 |
+
-----END CERTIFICATE-----
|
3273 |
+
|
3274 |
+
SSL.com Root Certification Authority ECC
|
3275 |
+
========================================
|
3276 |
+
-----BEGIN CERTIFICATE-----
|
3277 |
+
MIICjTCCAhSgAwIBAgIIdebfy8FoW6gwCgYIKoZIzj0EAwIwfDELMAkGA1UEBhMCVVMxDjAMBgNV
|
3278 |
+
BAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQKDA9TU0wgQ29ycG9yYXRpb24xMTAv
|
3279 |
+
BgNVBAMMKFNTTC5jb20gUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSBFQ0MwHhcNMTYwMjEy
|
3280 |
+
MTgxNDAzWhcNNDEwMjEyMTgxNDAzWjB8MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMxEDAO
|
3281 |
+
BgNVBAcMB0hvdXN0b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjExMC8GA1UEAwwoU1NMLmNv
|
3282 |
+
bSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IEVDQzB2MBAGByqGSM49AgEGBSuBBAAiA2IA
|
3283 |
+
BEVuqVDEpiM2nl8ojRfLliJkP9x6jh3MCLOicSS6jkm5BBtHllirLZXI7Z4INcgn64mMU1jrYor+
|
3284 |
+
8FsPazFSY0E7ic3s7LaNGdM0B9y7xgZ/wkWV7Mt/qCPgCemB+vNH06NjMGEwHQYDVR0OBBYEFILR
|
3285 |
+
hXMw5zUE044CkvvlpNHEIejNMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUgtGFczDnNQTT
|
3286 |
+
jgKS++Wk0cQh6M0wDgYDVR0PAQH/BAQDAgGGMAoGCCqGSM49BAMCA2cAMGQCMG/n61kRpGDPYbCW
|
3287 |
+
e+0F+S8Tkdzt5fxQaxFGRrMcIQBiu77D5+jNB5n5DQtdcj7EqgIwH7y6C+IwJPt8bYBVCpk+gA0z
|
3288 |
+
5Wajs6O7pdWLjwkspl1+4vAHCGht0nxpbl/f5Wpl
|
3289 |
+
-----END CERTIFICATE-----
|
3290 |
+
|
3291 |
+
SSL.com EV Root Certification Authority RSA R2
|
3292 |
+
==============================================
|
3293 |
+
-----BEGIN CERTIFICATE-----
|
3294 |
+
MIIF6zCCA9OgAwIBAgIIVrYpzTS8ePYwDQYJKoZIhvcNAQELBQAwgYIxCzAJBgNVBAYTAlVTMQ4w
|
3295 |
+
DAYDVQQIDAVUZXhhczEQMA4GA1UEBwwHSG91c3RvbjEYMBYGA1UECgwPU1NMIENvcnBvcmF0aW9u
|
3296 |
+
MTcwNQYDVQQDDC5TU0wuY29tIEVWIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgUlNBIFIy
|
3297 |
+
MB4XDTE3MDUzMTE4MTQzN1oXDTQyMDUzMDE4MTQzN1owgYIxCzAJBgNVBAYTAlVTMQ4wDAYDVQQI
|
3298 |
+
DAVUZXhhczEQMA4GA1UEBwwHSG91c3RvbjEYMBYGA1UECgwPU1NMIENvcnBvcmF0aW9uMTcwNQYD
|
3299 |
+
VQQDDC5TU0wuY29tIEVWIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgUlNBIFIyMIICIjAN
|
3300 |
+
BgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAjzZlQOHWTcDXtOlG2mvqM0fNTPl9fb69LT3w23jh
|
3301 |
+
hqXZuglXaO1XPqDQCEGD5yhBJB/jchXQARr7XnAjssufOePPxU7Gkm0mxnu7s9onnQqG6YE3Bf7w
|
3302 |
+
cXHswxzpY6IXFJ3vG2fThVUCAtZJycxa4bH3bzKfydQ7iEGonL3Lq9ttewkfokxykNorCPzPPFTO
|
3303 |
+
Zw+oz12WGQvE43LrrdF9HSfvkusQv1vrO6/PgN3B0pYEW3p+pKk8OHakYo6gOV7qd89dAFmPZiw+
|
3304 |
+
B6KjBSYRaZfqhbcPlgtLyEDhULouisv3D5oi53+aNxPN8k0TayHRwMwi8qFG9kRpnMphNQcAb9Zh
|
3305 |
+
CBHqurj26bNg5U257J8UZslXWNvNh2n4ioYSA0e/ZhN2rHd9NCSFg83XqpyQGp8hLH94t2S42Oim
|
3306 |
+
9HizVcuE0jLEeK6jj2HdzghTreyI/BXkmg3mnxp3zkyPuBQVPWKchjgGAGYS5Fl2WlPAApiiECto
|
3307 |
+
RHuOec4zSnaqW4EWG7WK2NAAe15itAnWhmMOpgWVSbooi4iTsjQc2KRVbrcc0N6ZVTsj9CLg+Slm
|
3308 |
+
JuwgUHfbSguPvuUCYHBBXtSuUDkiFCbLsjtzdFVHB3mBOagwE0TlBIqulhMlQg+5U8Sb/M3kHN48
|
3309 |
+
+qvWBkofZ6aYMBzdLNvcGJVXZsb/XItW9XcCAwEAAaNjMGEwDwYDVR0TAQH/BAUwAwEB/zAfBgNV
|
3310 |
+
HSMEGDAWgBT5YLvU49U09rj1BoAlp3PbRmmonjAdBgNVHQ4EFgQU+WC71OPVNPa49QaAJadz20Zp
|
3311 |
+
qJ4wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUAA4ICAQBWs47LCp1Jjr+kxJG7ZhcFUZh1
|
3312 |
+
++VQLHqe8RT6q9OKPv+RKY9ji9i0qVQBDb6Thi/5Sm3HXvVX+cpVHBK+Rw82xd9qt9t1wkclf7nx
|
3313 |
+
Y/hoLVUE0fKNsKTPvDxeH3jnpaAgcLAExbf3cqfeIg29MyVGjGSSJuM+LmOW2puMPfgYCdcDzH2G
|
3314 |
+
guDKBAdRUNf/ktUM79qGn5nX67evaOI5JpS6aLe/g9Pqemc9YmeuJeVy6OLk7K4S9ksrPJ/psEDz
|
3315 |
+
OFSz/bdoyNrGj1E8svuR3Bznm53htw1yj+KkxKl4+esUrMZDBcJlOSgYAsOCsp0FvmXtll9ldDz7
|
3316 |
+
CTUue5wT/RsPXcdtgTpWD8w74a8CLyKsRspGPKAcTNZEtF4uXBVmCeEmKf7GUmG6sXP/wwyc5Wxq
|
3317 |
+
lD8UykAWlYTzWamsX0xhk23RO8yilQwipmdnRC652dKKQbNmC1r7fSOl8hqw/96bg5Qu0T/fkreR
|
3318 |
+
rwU7ZcegbLHNYhLDkBvjJc40vG93drEQw/cFGsDWr3RiSBd3kmmQYRzelYB0VI8YHMPzA9C/pEN1
|
3319 |
+
hlMYegouCRw2n5H9gooiS9EOUCXdywMMF8mDAAhONU2Ki+3wApRmLER/y5UnlhetCTCstnEXbosX
|
3320 |
+
9hwJ1C07mKVx01QT2WDz9UtmT/rx7iASjbSsV7FFY6GsdqnC+w==
|
3321 |
+
-----END CERTIFICATE-----
|
3322 |
+
|
3323 |
+
SSL.com EV Root Certification Authority ECC
|
3324 |
+
===========================================
|
3325 |
+
-----BEGIN CERTIFICATE-----
|
3326 |
+
MIIClDCCAhqgAwIBAgIILCmcWxbtBZUwCgYIKoZIzj0EAwIwfzELMAkGA1UEBhMCVVMxDjAMBgNV
|
3327 |
+
BAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQKDA9TU0wgQ29ycG9yYXRpb24xNDAy
|
3328 |
+
BgNVBAMMK1NTTC5jb20gRVYgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSBFQ0MwHhcNMTYw
|
3329 |
+
MjEyMTgxNTIzWhcNNDEwMjEyMTgxNTIzWjB/MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMx
|
3330 |
+
EDAOBgNVBAcMB0hvdXN0b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjE0MDIGA1UEAwwrU1NM
|
3331 |
+
LmNvbSBFViBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IEVDQzB2MBAGByqGSM49AgEGBSuB
|
3332 |
+
BAAiA2IABKoSR5CYG/vvw0AHgyBO8TCCogbR8pKGYfL2IWjKAMTH6kMAVIbc/R/fALhBYlzccBYy
|
3333 |
+
3h+Z1MzFB8gIH2EWB1E9fVwHU+M1OIzfzZ/ZLg1KthkuWnBaBu2+8KGwytAJKaNjMGEwHQYDVR0O
|
3334 |
+
BBYEFFvKXuXe0oGqzagtZFG22XKbl+ZPMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUW8pe
|
3335 |
+
5d7SgarNqC1kUbbZcpuX5k8wDgYDVR0PAQH/BAQDAgGGMAoGCCqGSM49BAMCA2gAMGUCMQCK5kCJ
|
3336 |
+
N+vp1RPZytRrJPOwPYdGWBrssd9v+1a6cGvHOMzosYxPD/fxZ3YOg9AeUY8CMD32IygmTMZgh5Mm
|
3337 |
+
m7I1HrrW9zzRHM76JTymGoEVW/MSD2zuZYrJh6j5B+BimoxcSg==
|
3338 |
+
-----END CERTIFICATE-----
|
vendor/composer/installed.json
CHANGED
@@ -1,17 +1,17 @@
|
|
1 |
[
|
2 |
{
|
3 |
"name": "maxmind/web-service-common",
|
4 |
-
"version": "v0.
|
5 |
-
"version_normalized": "0.
|
6 |
"source": {
|
7 |
"type": "git",
|
8 |
"url": "https://github.com/maxmind/web-service-common-php.git",
|
9 |
-
"reference": "
|
10 |
},
|
11 |
"dist": {
|
12 |
"type": "zip",
|
13 |
-
"url": "https://api.github.com/repos/maxmind/web-service-common-php/zipball/
|
14 |
-
"reference": "
|
15 |
"shasum": ""
|
16 |
},
|
17 |
"require": {
|
@@ -25,7 +25,7 @@
|
|
25 |
"phpunit/phpunit": "4.*",
|
26 |
"squizlabs/php_codesniffer": "3.*"
|
27 |
},
|
28 |
-
"time": "
|
29 |
"type": "library",
|
30 |
"installation-source": "dist",
|
31 |
"autoload": {
|
@@ -49,17 +49,17 @@
|
|
49 |
},
|
50 |
{
|
51 |
"name": "maxmind-db/reader",
|
52 |
-
"version": "v1.
|
53 |
-
"version_normalized": "1.
|
54 |
"source": {
|
55 |
"type": "git",
|
56 |
"url": "https://github.com/maxmind/MaxMind-DB-Reader-php.git",
|
57 |
-
"reference": "
|
58 |
},
|
59 |
"dist": {
|
60 |
"type": "zip",
|
61 |
-
"url": "https://api.github.com/repos/maxmind/MaxMind-DB-Reader-php/zipball/
|
62 |
-
"reference": "
|
63 |
"shasum": ""
|
64 |
},
|
65 |
"require": {
|
@@ -67,7 +67,7 @@
|
|
67 |
},
|
68 |
"require-dev": {
|
69 |
"friendsofphp/php-cs-fixer": "2.*",
|
70 |
-
"phpunit/phpunit": "4.*",
|
71 |
"satooshi/php-coveralls": "1.0.*",
|
72 |
"squizlabs/php_codesniffer": "3.*"
|
73 |
},
|
@@ -76,7 +76,7 @@
|
|
76 |
"ext-gmp": "bcmath or gmp is required for decoding larger integers with the pure PHP decoder",
|
77 |
"ext-maxminddb": "A C-based database decoder that provides significantly faster lookups"
|
78 |
},
|
79 |
-
"time": "
|
80 |
"type": "library",
|
81 |
"installation-source": "dist",
|
82 |
"autoload": {
|
@@ -106,116 +106,115 @@
|
|
106 |
]
|
107 |
},
|
108 |
{
|
109 |
-
"name": "
|
110 |
-
"version": "
|
111 |
-
"version_normalized": "
|
112 |
"source": {
|
113 |
"type": "git",
|
114 |
-
"url": "https://github.com/
|
115 |
-
"reference": "
|
116 |
},
|
117 |
"dist": {
|
118 |
"type": "zip",
|
119 |
-
"url": "https://api.github.com/repos/
|
120 |
-
"reference": "
|
121 |
"shasum": ""
|
122 |
},
|
123 |
"require": {
|
124 |
-
"
|
125 |
-
"
|
126 |
-
"php": "
|
127 |
},
|
128 |
"require-dev": {
|
129 |
-
"
|
130 |
-
"
|
131 |
-
"
|
132 |
-
"squizlabs/php_codesniffer": "3.*"
|
133 |
},
|
134 |
-
"time": "
|
135 |
"type": "library",
|
|
|
|
|
|
|
|
|
|
|
136 |
"installation-source": "dist",
|
137 |
"autoload": {
|
138 |
"psr-4": {
|
139 |
-
"
|
140 |
}
|
141 |
},
|
142 |
"notification-url": "https://packagist.org/downloads/",
|
143 |
"license": [
|
144 |
-
"
|
145 |
],
|
146 |
"authors": [
|
147 |
{
|
148 |
-
"name": "
|
149 |
-
"email": "
|
150 |
-
"homepage": "http://
|
151 |
}
|
152 |
],
|
153 |
-
"description": "
|
154 |
-
"homepage": "https://github.com/maxmind/GeoIP2-php",
|
155 |
"keywords": [
|
156 |
-
"
|
157 |
-
"
|
158 |
-
"
|
159 |
-
"
|
160 |
-
"
|
161 |
]
|
162 |
},
|
163 |
{
|
164 |
-
"name": "
|
165 |
-
"version": "
|
166 |
-
"version_normalized": "
|
167 |
"source": {
|
168 |
"type": "git",
|
169 |
-
"url": "https://github.com/
|
170 |
-
"reference": "
|
171 |
},
|
172 |
"dist": {
|
173 |
"type": "zip",
|
174 |
-
"url": "https://api.github.com/repos/
|
175 |
-
"reference": "
|
176 |
"shasum": ""
|
177 |
},
|
178 |
"require": {
|
179 |
-
"
|
180 |
-
"
|
181 |
-
"php": "
|
182 |
},
|
183 |
"require-dev": {
|
184 |
-
"
|
185 |
-
"
|
186 |
-
"
|
187 |
},
|
188 |
-
"time": "
|
189 |
"type": "library",
|
190 |
-
"extra": {
|
191 |
-
"branch-alias": {
|
192 |
-
"dev-master": "1.x-dev"
|
193 |
-
}
|
194 |
-
},
|
195 |
"installation-source": "dist",
|
196 |
"autoload": {
|
197 |
"psr-4": {
|
198 |
-
"
|
199 |
}
|
200 |
},
|
201 |
"notification-url": "https://packagist.org/downloads/",
|
202 |
"license": [
|
203 |
-
"
|
204 |
],
|
205 |
"authors": [
|
206 |
{
|
207 |
-
"name": "
|
208 |
-
"email": "
|
209 |
-
"homepage": "http://
|
210 |
}
|
211 |
],
|
212 |
-
"description": "
|
|
|
213 |
"keywords": [
|
214 |
-
"
|
215 |
-
"
|
216 |
-
"
|
217 |
-
"
|
218 |
-
"
|
219 |
]
|
220 |
}
|
221 |
]
|
1 |
[
|
2 |
{
|
3 |
"name": "maxmind/web-service-common",
|
4 |
+
"version": "v0.5.0",
|
5 |
+
"version_normalized": "0.5.0.0",
|
6 |
"source": {
|
7 |
"type": "git",
|
8 |
"url": "https://github.com/maxmind/web-service-common-php.git",
|
9 |
+
"reference": "61a9836fa3bb1743ab89752bae5005d71e78c73b"
|
10 |
},
|
11 |
"dist": {
|
12 |
"type": "zip",
|
13 |
+
"url": "https://api.github.com/repos/maxmind/web-service-common-php/zipball/61a9836fa3bb1743ab89752bae5005d71e78c73b",
|
14 |
+
"reference": "61a9836fa3bb1743ab89752bae5005d71e78c73b",
|
15 |
"shasum": ""
|
16 |
},
|
17 |
"require": {
|
25 |
"phpunit/phpunit": "4.*",
|
26 |
"squizlabs/php_codesniffer": "3.*"
|
27 |
},
|
28 |
+
"time": "2018-02-12T22:31:54+00:00",
|
29 |
"type": "library",
|
30 |
"installation-source": "dist",
|
31 |
"autoload": {
|
49 |
},
|
50 |
{
|
51 |
"name": "maxmind-db/reader",
|
52 |
+
"version": "v1.3.0",
|
53 |
+
"version_normalized": "1.3.0.0",
|
54 |
"source": {
|
55 |
"type": "git",
|
56 |
"url": "https://github.com/maxmind/MaxMind-DB-Reader-php.git",
|
57 |
+
"reference": "e042b4f8a2dff41e19019faf16427178b07fbd58"
|
58 |
},
|
59 |
"dist": {
|
60 |
"type": "zip",
|
61 |
+
"url": "https://api.github.com/repos/maxmind/MaxMind-DB-Reader-php/zipball/e042b4f8a2dff41e19019faf16427178b07fbd58",
|
62 |
+
"reference": "e042b4f8a2dff41e19019faf16427178b07fbd58",
|
63 |
"shasum": ""
|
64 |
},
|
65 |
"require": {
|
67 |
},
|
68 |
"require-dev": {
|
69 |
"friendsofphp/php-cs-fixer": "2.*",
|
70 |
+
"phpunit/phpunit": "4.* || 5.*",
|
71 |
"satooshi/php-coveralls": "1.0.*",
|
72 |
"squizlabs/php_codesniffer": "3.*"
|
73 |
},
|
76 |
"ext-gmp": "bcmath or gmp is required for decoding larger integers with the pure PHP decoder",
|
77 |
"ext-maxminddb": "A C-based database decoder that provides significantly faster lookups"
|
78 |
},
|
79 |
+
"time": "2018-02-21T21:23:33+00:00",
|
80 |
"type": "library",
|
81 |
"installation-source": "dist",
|
82 |
"autoload": {
|
106 |
]
|
107 |
},
|
108 |
{
|
109 |
+
"name": "composer/ca-bundle",
|
110 |
+
"version": "1.1.1",
|
111 |
+
"version_normalized": "1.1.1.0",
|
112 |
"source": {
|
113 |
"type": "git",
|
114 |
+
"url": "https://github.com/composer/ca-bundle.git",
|
115 |
+
"reference": "d2c0a83b7533d6912e8d516756ebd34f893e9169"
|
116 |
},
|
117 |
"dist": {
|
118 |
"type": "zip",
|
119 |
+
"url": "https://api.github.com/repos/composer/ca-bundle/zipball/d2c0a83b7533d6912e8d516756ebd34f893e9169",
|
120 |
+
"reference": "d2c0a83b7533d6912e8d516756ebd34f893e9169",
|
121 |
"shasum": ""
|
122 |
},
|
123 |
"require": {
|
124 |
+
"ext-openssl": "*",
|
125 |
+
"ext-pcre": "*",
|
126 |
+
"php": "^5.3.2 || ^7.0"
|
127 |
},
|
128 |
"require-dev": {
|
129 |
+
"phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5",
|
130 |
+
"psr/log": "^1.0",
|
131 |
+
"symfony/process": "^2.5 || ^3.0 || ^4.0"
|
|
|
132 |
},
|
133 |
+
"time": "2018-03-29T19:57:20+00:00",
|
134 |
"type": "library",
|
135 |
+
"extra": {
|
136 |
+
"branch-alias": {
|
137 |
+
"dev-master": "1.x-dev"
|
138 |
+
}
|
139 |
+
},
|
140 |
"installation-source": "dist",
|
141 |
"autoload": {
|
142 |
"psr-4": {
|
143 |
+
"Composer\\CaBundle\\": "src"
|
144 |
}
|
145 |
},
|
146 |
"notification-url": "https://packagist.org/downloads/",
|
147 |
"license": [
|
148 |
+
"MIT"
|
149 |
],
|
150 |
"authors": [
|
151 |
{
|
152 |
+
"name": "Jordi Boggiano",
|
153 |
+
"email": "j.boggiano@seld.be",
|
154 |
+
"homepage": "http://seld.be"
|
155 |
}
|
156 |
],
|
157 |
+
"description": "Lets you find a path to the system CA bundle, and includes a fallback to the Mozilla CA bundle.",
|
|
|
158 |
"keywords": [
|
159 |
+
"cabundle",
|
160 |
+
"cacert",
|
161 |
+
"certificate",
|
162 |
+
"ssl",
|
163 |
+
"tls"
|
164 |
]
|
165 |
},
|
166 |
{
|
167 |
+
"name": "geoip2/geoip2",
|
168 |
+
"version": "v2.9.0",
|
169 |
+
"version_normalized": "2.9.0.0",
|
170 |
"source": {
|
171 |
"type": "git",
|
172 |
+
"url": "https://github.com/maxmind/GeoIP2-php.git",
|
173 |
+
"reference": "a807fbf65212eef5d8d2db1a1b31082b53633d77"
|
174 |
},
|
175 |
"dist": {
|
176 |
"type": "zip",
|
177 |
+
"url": "https://api.github.com/repos/maxmind/GeoIP2-php/zipball/a807fbf65212eef5d8d2db1a1b31082b53633d77",
|
178 |
+
"reference": "a807fbf65212eef5d8d2db1a1b31082b53633d77",
|
179 |
"shasum": ""
|
180 |
},
|
181 |
"require": {
|
182 |
+
"maxmind-db/reader": "~1.0",
|
183 |
+
"maxmind/web-service-common": "~0.5",
|
184 |
+
"php": ">=5.4"
|
185 |
},
|
186 |
"require-dev": {
|
187 |
+
"friendsofphp/php-cs-fixer": "2.*",
|
188 |
+
"phpunit/phpunit": "4.*",
|
189 |
+
"squizlabs/php_codesniffer": "3.*"
|
190 |
},
|
191 |
+
"time": "2018-04-10T15:32:59+00:00",
|
192 |
"type": "library",
|
|
|
|
|
|
|
|
|
|
|
193 |
"installation-source": "dist",
|
194 |
"autoload": {
|
195 |
"psr-4": {
|
196 |
+
"GeoIp2\\": "src"
|
197 |
}
|
198 |
},
|
199 |
"notification-url": "https://packagist.org/downloads/",
|
200 |
"license": [
|
201 |
+
"Apache-2.0"
|
202 |
],
|
203 |
"authors": [
|
204 |
{
|
205 |
+
"name": "Gregory J. Oschwald",
|
206 |
+
"email": "goschwald@maxmind.com",
|
207 |
+
"homepage": "http://www.maxmind.com/"
|
208 |
}
|
209 |
],
|
210 |
+
"description": "MaxMind GeoIP2 PHP API",
|
211 |
+
"homepage": "https://github.com/maxmind/GeoIP2-php",
|
212 |
"keywords": [
|
213 |
+
"IP",
|
214 |
+
"geoip",
|
215 |
+
"geoip2",
|
216 |
+
"geolocation",
|
217 |
+
"maxmind"
|
218 |
]
|
219 |
}
|
220 |
]
|
vendor/geoip2/geoip2/.php_cs
CHANGED
@@ -9,6 +9,7 @@ return PhpCsFixer\Config::create()
|
|
9 |
'combine_consecutive_unsets' => true,
|
10 |
'concat_space' => [ 'spacing' => 'one'],
|
11 |
'heredoc_to_nowdoc' => true,
|
|
|
12 |
'list_syntax' => ['syntax' => 'long'],
|
13 |
'no_extra_consecutive_blank_lines' => ['break', 'continue', 'extra', 'return', 'throw', 'use', 'parenthesis_brace_block', 'square_brace_block', 'curly_brace_block'],
|
14 |
'no_short_echo_tag' => true,
|
9 |
'combine_consecutive_unsets' => true,
|
10 |
'concat_space' => [ 'spacing' => 'one'],
|
11 |
'heredoc_to_nowdoc' => true,
|
12 |
+
'increment_style' => false,
|
13 |
'list_syntax' => ['syntax' => 'long'],
|
14 |
'no_extra_consecutive_blank_lines' => ['break', 'continue', 'extra', 'return', 'throw', 'use', 'parenthesis_brace_block', 'square_brace_block', 'curly_brace_block'],
|
15 |
'no_short_echo_tag' => true,
|
vendor/geoip2/geoip2/CHANGELOG.md
CHANGED
@@ -1,6 +1,18 @@
|
|
1 |
CHANGELOG
|
2 |
=========
|
3 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4 |
2.7.0 (2017-10-27)
|
5 |
------------------
|
6 |
|
1 |
CHANGELOG
|
2 |
=========
|
3 |
|
4 |
+
2.9.0 (2018-04-10)
|
5 |
+
------------------
|
6 |
+
|
7 |
+
* Refer to account IDs using the terminology "account" rather than "user".
|
8 |
+
|
9 |
+
2.8.0 (2018-01-18)
|
10 |
+
------------------
|
11 |
+
|
12 |
+
* The `isInEuropeanUnion` property was added to `GeoIp2\Record\Country`
|
13 |
+
and `GeoIp2\Record\RepresentedCountry`. This property is `true` if the
|
14 |
+
country is a member state of the European Union.
|
15 |
+
|
16 |
2.7.0 (2017-10-27)
|
17 |
------------------
|
18 |
|
vendor/geoip2/geoip2/README.md
CHANGED
@@ -257,7 +257,7 @@ print($record->ipAddress . "\n"); // '128.101.101.101'
|
|
257 |
### Usage ###
|
258 |
|
259 |
To use this API, you must create a new `\GeoIp2\WebService\Client`
|
260 |
-
object with your `$
|
261 |
corresponding to a specific end point, passing it the IP address you want to
|
262 |
look up.
|
263 |
|
@@ -277,7 +277,7 @@ require_once 'vendor/autoload.php';
|
|
277 |
use GeoIp2\WebService\Client;
|
278 |
|
279 |
// This creates a Client object that can be reused across requests.
|
280 |
-
// Replace "42" with your
|
281 |
// key.
|
282 |
$client = new Client(42, 'abcdef123456');
|
283 |
|
@@ -395,7 +395,7 @@ The GeoIP2 PHP API uses [Semantic Versioning](http://semver.org/).
|
|
395 |
|
396 |
## Copyright and License ##
|
397 |
|
398 |
-
This software is Copyright (c) 2013-
|
399 |
|
400 |
This is free software, licensed under the Apache License, Version 2.0.
|
401 |
|
257 |
### Usage ###
|
258 |
|
259 |
To use this API, you must create a new `\GeoIp2\WebService\Client`
|
260 |
+
object with your `$accountId` and `$licenseKey`, then you call the method
|
261 |
corresponding to a specific end point, passing it the IP address you want to
|
262 |
look up.
|
263 |
|
277 |
use GeoIp2\WebService\Client;
|
278 |
|
279 |
// This creates a Client object that can be reused across requests.
|
280 |
+
// Replace "42" with your account ID and "license_key" with your license
|
281 |
// key.
|
282 |
$client = new Client(42, 'abcdef123456');
|
283 |
|
395 |
|
396 |
## Copyright and License ##
|
397 |
|
398 |
+
This software is Copyright (c) 2013-2018 by MaxMind, Inc.
|
399 |
|
400 |
This is free software, licensed under the Apache License, Version 2.0.
|
401 |
|
vendor/geoip2/geoip2/composer.json
CHANGED
@@ -14,14 +14,13 @@
|
|
14 |
],
|
15 |
"require": {
|
16 |
"maxmind-db/reader": "~1.0",
|
17 |
-
"maxmind/web-service-common": "~0.
|
18 |
"php": ">=5.4"
|
19 |
},
|
20 |
"require-dev": {
|
21 |
"friendsofphp/php-cs-fixer": "2.*",
|
22 |
"phpunit/phpunit": "4.*",
|
23 |
-
"squizlabs/php_codesniffer": "3.*"
|
24 |
-
"apigen/apigen": "*"
|
25 |
},
|
26 |
"autoload": {
|
27 |
"psr-4": {
|
14 |
],
|
15 |
"require": {
|
16 |
"maxmind-db/reader": "~1.0",
|
17 |
+
"maxmind/web-service-common": "~0.5",
|
18 |
"php": ">=5.4"
|
19 |
},
|
20 |
"require-dev": {
|
21 |
"friendsofphp/php-cs-fixer": "2.*",
|
22 |
"phpunit/phpunit": "4.*",
|
23 |
+
"squizlabs/php_codesniffer": "3.*"
|
|
|
24 |
},
|
25 |
"autoload": {
|
26 |
"psr-4": {
|
vendor/geoip2/geoip2/src/Record/Country.php
CHANGED
@@ -11,7 +11,10 @@ namespace GeoIp2\Record;
|
|
11 |
* confidence that the country is correct. This attribute is only available
|
12 |
* from the Insights service and the GeoIP2 Enterprise database.
|
13 |
* @property-read int|null $geonameId The GeoName ID for the country. This
|
14 |
-
* attribute is returned by location services and databases.
|
|
|
|
|
|
|
15 |
* @property-read string|null $isoCode The
|
16 |
* {@link * http://en.wikipedia.org/wiki/ISO_3166-1 two-character ISO 3166-1 alpha
|
17 |
* code} for the country. This attribute is returned by all location services
|
@@ -31,6 +34,7 @@ class Country extends AbstractPlaceRecord
|
|
31 |
protected $validAttributes = [
|
32 |
'confidence',
|
33 |
'geonameId',
|
|
|
34 |
'isoCode',
|
35 |
'names',
|
36 |
];
|
11 |
* confidence that the country is correct. This attribute is only available
|
12 |
* from the Insights service and the GeoIP2 Enterprise database.
|
13 |
* @property-read int|null $geonameId The GeoName ID for the country. This
|
14 |
+
* attribute is returned by all location services and databases.
|
15 |
+
* @property-read bool $isInEuropeanUnion This is true if the country is a
|
16 |
+
* member state of the European Union. This attribute is returned by all
|
17 |
+
* location services and databases.
|
18 |
* @property-read string|null $isoCode The
|
19 |
* {@link * http://en.wikipedia.org/wiki/ISO_3166-1 two-character ISO 3166-1 alpha
|
20 |
* code} for the country. This attribute is returned by all location services
|
34 |
protected $validAttributes = [
|
35 |
'confidence',
|
36 |
'geonameId',
|
37 |
+
'isInEuropeanUnion',
|
38 |
'isoCode',
|
39 |
'names',
|
40 |
];
|
vendor/geoip2/geoip2/src/Record/RepresentedCountry.php
CHANGED
@@ -13,6 +13,9 @@ namespace GeoIp2\Record;
|
|
13 |
* confidence that the country is correct. This attribute is only available
|
14 |
* from the Insights service and the GeoIP2 Enterprise database.
|
15 |
* @property-read int|null $geonameId The GeoName ID for the country.
|
|
|
|
|
|
|
16 |
* @property-read string|null $isoCode The {@link http://en.wikipedia.org/wiki/ISO_3166-1
|
17 |
* two-character ISO 3166-1 alpha code} for the country.
|
18 |
* @property-read string|null $name The name of the country based on the locales list
|
@@ -28,6 +31,7 @@ class RepresentedCountry extends Country
|
|
28 |
protected $validAttributes = [
|
29 |
'confidence',
|
30 |
'geonameId',
|
|
|
31 |
'isoCode',
|
32 |
'names',
|
33 |
'type',
|
13 |
* confidence that the country is correct. This attribute is only available
|
14 |
* from the Insights service and the GeoIP2 Enterprise database.
|
15 |
* @property-read int|null $geonameId The GeoName ID for the country.
|
16 |
+
* @property-read bool $isInEuropeanUnion This is true if the country is a
|
17 |
+
* member state of the European Union. This attribute is returned by all
|
18 |
+
* location services and databases.
|
19 |
* @property-read string|null $isoCode The {@link http://en.wikipedia.org/wiki/ISO_3166-1
|
20 |
* two-character ISO 3166-1 alpha code} for the country.
|
21 |
* @property-read string|null $name The name of the country based on the locales list
|
31 |
protected $validAttributes = [
|
32 |
'confidence',
|
33 |
'geonameId',
|
34 |
+
'isInEuropeanUnion',
|
35 |
'isoCode',
|
36 |
'names',
|
37 |
'type',
|
vendor/geoip2/geoip2/src/WebService/Client.php
CHANGED
@@ -30,7 +30,7 @@ use MaxMind\WebService\Client as WsClient;
|
|
30 |
* ## Usage ##
|
31 |
*
|
32 |
* The basic API for this class is the same for all of the web service end
|
33 |
-
* points. First you create a web service object with your MaxMind `$
|
34 |
* and `$licenseKey`, then you call the method corresponding to a specific end
|
35 |
* point, passing it the IP address you want to look up.
|
36 |
*
|
@@ -47,12 +47,12 @@ class Client implements ProviderInterface
|
|
47 |
private $client;
|
48 |
private static $basePath = '/geoip/v2.1';
|
49 |
|
50 |
-
const VERSION = 'v2.
|
51 |
|
52 |
/**
|
53 |
* Constructor.
|
54 |
*
|
55 |
-
* @param int $
|
56 |
* @param string $licenseKey your MaxMind license key
|
57 |
* @param array $locales list of locale codes to use in name property
|
58 |
* from most preferred to least preferred
|
@@ -65,7 +65,7 @@ class Client implements ProviderInterface
|
|
65 |
* `http://username:password@127.0.0.1:10`.
|
66 |
*/
|
67 |
public function __construct(
|
68 |
-
$
|
69 |
$licenseKey,
|
70 |
$locales = ['en'],
|
71 |
$options = []
|
@@ -84,7 +84,7 @@ class Client implements ProviderInterface
|
|
84 |
|
85 |
$options['userAgent'] = $this->userAgent();
|
86 |
|
87 |
-
$this->client = new WsClient($
|
88 |
}
|
89 |
|
90 |
private function userAgent()
|
@@ -102,7 +102,7 @@ class Client implements ProviderInterface
|
|
102 |
* @throws \GeoIp2\Exception\AddressNotFoundException if the address you
|
103 |
* provided is not in our database (e.g., a private address).
|
104 |
* @throws \GeoIp2\Exception\AuthenticationException if there is a problem
|
105 |
-
* with the
|
106 |
* @throws \GeoIp2\Exception\OutOfQueriesException if your account is out
|
107 |
* of queries
|
108 |
* @throws \GeoIp2\Exception\InvalidRequestException} if your request was received by the web service but is
|
@@ -133,7 +133,7 @@ class Client implements ProviderInterface
|
|
133 |
* @throws \GeoIp2\Exception\AddressNotFoundException if the address you provided is not in our database (e.g.,
|
134 |
* a private address).
|
135 |
* @throws \GeoIp2\Exception\AuthenticationException if there is a problem
|
136 |
-
* with the
|
137 |
* @throws \GeoIp2\Exception\OutOfQueriesException if your account is out of queries
|
138 |
* @throws \GeoIp2\Exception\InvalidRequestException} if your request was received by the web service but is
|
139 |
* invalid for some other reason. This may indicate an
|
@@ -164,7 +164,7 @@ class Client implements ProviderInterface
|
|
164 |
* @throws \GeoIp2\Exception\AddressNotFoundException if the address you
|
165 |
* provided is not in our database (e.g., a private address).
|
166 |
* @throws \GeoIp2\Exception\AuthenticationException if there is a problem
|
167 |
-
* with the
|
168 |
* @throws \GeoIp2\Exception\OutOfQueriesException if your account is out
|
169 |
* of queries
|
170 |
* @throws \GeoIp2\Exception\InvalidRequestException} if your request was received by the web service but is
|
30 |
* ## Usage ##
|
31 |
*
|
32 |
* The basic API for this class is the same for all of the web service end
|
33 |
+
* points. First you create a web service object with your MaxMind `$accountId`
|
34 |
* and `$licenseKey`, then you call the method corresponding to a specific end
|
35 |
* point, passing it the IP address you want to look up.
|
36 |
*
|
47 |
private $client;
|
48 |
private static $basePath = '/geoip/v2.1';
|
49 |
|
50 |
+
const VERSION = 'v2.9.0';
|
51 |
|
52 |
/**
|
53 |
* Constructor.
|
54 |
*
|
55 |
+
* @param int $accountId your MaxMind account ID
|
56 |
* @param string $licenseKey your MaxMind license key
|
57 |
* @param array $locales list of locale codes to use in name property
|
58 |
* from most preferred to least preferred
|
65 |
* `http://username:password@127.0.0.1:10`.
|
66 |
*/
|
67 |
public function __construct(
|
68 |
+
$accountId,
|
69 |
$licenseKey,
|
70 |
$locales = ['en'],
|
71 |
$options = []
|
84 |
|
85 |
$options['userAgent'] = $this->userAgent();
|
86 |
|
87 |
+
$this->client = new WsClient($accountId, $licenseKey, $options);
|
88 |
}
|
89 |
|
90 |
private function userAgent()
|
102 |
* @throws \GeoIp2\Exception\AddressNotFoundException if the address you
|
103 |
* provided is not in our database (e.g., a private address).
|
104 |
* @throws \GeoIp2\Exception\AuthenticationException if there is a problem
|
105 |
+
* with the account ID or license key that you provided
|
106 |
* @throws \GeoIp2\Exception\OutOfQueriesException if your account is out
|
107 |
* of queries
|
108 |
* @throws \GeoIp2\Exception\InvalidRequestException} if your request was received by the web service but is
|
133 |
* @throws \GeoIp2\Exception\AddressNotFoundException if the address you provided is not in our database (e.g.,
|
134 |
* a private address).
|
135 |
* @throws \GeoIp2\Exception\AuthenticationException if there is a problem
|
136 |
+
* with the account ID or license key that you provided
|
137 |
* @throws \GeoIp2\Exception\OutOfQueriesException if your account is out of queries
|
138 |
* @throws \GeoIp2\Exception\InvalidRequestException} if your request was received by the web service but is
|
139 |
* invalid for some other reason. This may indicate an
|
164 |
* @throws \GeoIp2\Exception\AddressNotFoundException if the address you
|
165 |
* provided is not in our database (e.g., a private address).
|
166 |
* @throws \GeoIp2\Exception\AuthenticationException if there is a problem
|
167 |
+
* with the account ID or license key that you provided
|
168 |
* @throws \GeoIp2\Exception\OutOfQueriesException if your account is out
|
169 |
* of queries
|
170 |
* @throws \GeoIp2\Exception\InvalidRequestException} if your request was received by the web service but is
|
vendor/maxmind-db/reader/CHANGELOG.md
CHANGED
@@ -1,10 +1,23 @@
|
|
1 |
CHANGELOG
|
2 |
=========
|
3 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4 |
1.2.0 (2017-10-27)
|
5 |
------------------
|
6 |
|
7 |
-
* PHP 5.4 is now required.
|
8 |
* The `Reader` class for the `maxminddb` extension is no longer final.
|
9 |
This was change to match the behavior of the pure PHP class.
|
10 |
Reported and fixed by venyii. GitHub #52 & #54.
|
1 |
CHANGELOG
|
2 |
=========
|
3 |
|
4 |
+
1.3.0 (2018-02-21)
|
5 |
+
------------------
|
6 |
+
|
7 |
+
* IMPORTANT: The `maxminddb` extension now obeys `open_basedir`. If
|
8 |
+
`open_basedir` is set, you _must_ store the database within the
|
9 |
+
specified directory. Placing the file outside of this directory
|
10 |
+
will result in an exception. Please test your integration before
|
11 |
+
upgrading the extension. This does not affect the pure PHP
|
12 |
+
implementation, which has always had this restriction. Reported
|
13 |
+
by Benoît Burnichon. GitHub #61.
|
14 |
+
* A custom `autoload.php` file is provided for installations without
|
15 |
+
Composer. GitHub #56.
|
16 |
+
|
17 |
1.2.0 (2017-10-27)
|
18 |
------------------
|
19 |
|
20 |
+
* PHP 5.4 or greater is now required.
|
21 |
* The `Reader` class for the `maxminddb` extension is no longer final.
|
22 |
This was change to match the behavior of the pure PHP class.
|
23 |
Reported and fixed by venyii. GitHub #52 & #54.
|
vendor/maxmind-db/reader/README.md
CHANGED
@@ -5,7 +5,7 @@
|
|
5 |
This is the PHP API for reading MaxMind DB files. MaxMind DB is a binary file
|
6 |
format that stores data indexed by IP address subnets (IPv4 or IPv6).
|
7 |
|
8 |
-
## Installation ##
|
9 |
|
10 |
We recommend installing this package with [Composer](http://getcomposer.org/).
|
11 |
|
@@ -40,6 +40,23 @@ from your code:
|
|
40 |
require 'vendor/autoload.php';
|
41 |
```
|
42 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
43 |
## Usage ##
|
44 |
|
45 |
## Example ##
|
5 |
This is the PHP API for reading MaxMind DB files. MaxMind DB is a binary file
|
6 |
format that stores data indexed by IP address subnets (IPv4 or IPv6).
|
7 |
|
8 |
+
## Installation (Composer) ##
|
9 |
|
10 |
We recommend installing this package with [Composer](http://getcomposer.org/).
|
11 |
|
40 |
require 'vendor/autoload.php';
|
41 |
```
|
42 |
|
43 |
+
## Installation (Standalone) ##
|
44 |
+
|
45 |
+
If you don't want to use Composer for some reason, a custom
|
46 |
+
`autoload.php` is provided for you in the project root. To use the
|
47 |
+
library, simply include that file,
|
48 |
+
|
49 |
+
```php
|
50 |
+
require('/path/to/MaxMind-DB-Reader-php/autoload.php');
|
51 |
+
```
|
52 |
+
|
53 |
+
and then instantiate the reader class normally:
|
54 |
+
|
55 |
+
```php
|
56 |
+
use MaxMind\Db\Reader;
|
57 |
+
$reader = new Reader('example.mmdb');
|
58 |
+
```
|
59 |
+
|
60 |
## Usage ##
|
61 |
|
62 |
## Example ##
|
vendor/maxmind-db/reader/autoload.php
ADDED
@@ -0,0 +1,44 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* PSR-4 autoloader implementation for the MaxMind\DB namespace.
|
5 |
+
* First we define the 'mmdb_autoload' function, and then we register
|
6 |
+
* it with 'spl_autoload_register' so that PHP knows to use it.
|
7 |
+
*/
|
8 |
+
|
9 |
+
/**
|
10 |
+
* Automatically include the file that defines <code>class</code>.
|
11 |
+
*
|
12 |
+
* @param string $class
|
13 |
+
* the name of the class to load
|
14 |
+
*
|
15 |
+
* @return void
|
16 |
+
*/
|
17 |
+
function mmdb_autoload($class)
|
18 |
+
{
|
19 |
+
/*
|
20 |
+
* A project-specific mapping between the namespaces and where
|
21 |
+
* they're located. By convention, we include the trailing
|
22 |
+
* slashes. The one-element array here simply makes things easy
|
23 |
+
* to extend in the future if (for example) the test classes
|
24 |
+
* begin to use one another.
|
25 |
+
*/
|
26 |
+
$namespace_map = array('MaxMind\\Db\\' => __DIR__ . '/src/MaxMind/Db/');
|
27 |
+
|
28 |
+
foreach ($namespace_map as $prefix => $dir)
|
29 |
+
{
|
30 |
+
/* First swap out the namespace prefix with a directory... */
|
31 |
+
$path = str_replace($prefix, $dir, $class);
|
32 |
+
|
33 |
+
/* replace the namespace separator with a directory separator... */
|
34 |
+
$path = str_replace('\\', '/', $path);
|
35 |
+
|
36 |
+
/* and finally, add the PHP file extension to the result. */
|
37 |
+
$path = $path . '.php';
|
38 |
+
|
39 |
+
/* $path should now contain the path to a PHP file defining $class */
|
40 |
+
@include $path;
|
41 |
+
}
|
42 |
+
}
|
43 |
+
|
44 |
+
spl_autoload_register('mmdb_autoload');
|
vendor/maxmind-db/reader/composer.json
CHANGED
@@ -22,7 +22,7 @@
|
|
22 |
},
|
23 |
"require-dev": {
|
24 |
"friendsofphp/php-cs-fixer": "2.*",
|
25 |
-
"phpunit/phpunit": "4.*",
|
26 |
"satooshi/php-coveralls": "1.0.*",
|
27 |
"squizlabs/php_codesniffer": "3.*"
|
28 |
},
|
22 |
},
|
23 |
"require-dev": {
|
24 |
"friendsofphp/php-cs-fixer": "2.*",
|
25 |
+
"phpunit/phpunit": "4.* || 5.*",
|
26 |
"satooshi/php-coveralls": "1.0.*",
|
27 |
"squizlabs/php_codesniffer": "3.*"
|
28 |
},
|
vendor/maxmind-db/reader/ext/maxminddb.c
CHANGED
@@ -120,14 +120,14 @@ PHP_METHOD(MaxMind_Db_Reader, __construct){
|
|
120 |
strsize_t name_len;
|
121 |
zval * _this_zval = NULL;
|
122 |
|
123 |
-
if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os",
|
124 |
&_this_zval, maxminddb_ce, &db_file, &name_len) == FAILURE) {
|
125 |
THROW_EXCEPTION("InvalidArgumentException",
|
126 |
"The constructor takes exactly one argument.");
|
127 |
return;
|
128 |
}
|
129 |
|
130 |
-
if (0 != access(db_file, R_OK)) {
|
131 |
THROW_EXCEPTION("InvalidArgumentException",
|
132 |
"The file \"%s\" does not exist or is not readable.",
|
133 |
db_file);
|
@@ -155,7 +155,7 @@ PHP_METHOD(MaxMind_Db_Reader, get){
|
|
155 |
strsize_t name_len;
|
156 |
zval * _this_zval = NULL;
|
157 |
|
158 |
-
if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os",
|
159 |
&_this_zval, maxminddb_ce, &ip_address, &name_len) == FAILURE) {
|
160 |
THROW_EXCEPTION("InvalidArgumentException",
|
161 |
"Method takes exactly one argument.");
|
@@ -284,7 +284,7 @@ PHP_METHOD(MaxMind_Db_Reader, close){
|
|
284 |
return;
|
285 |
}
|
286 |
|
287 |
-
maxminddb_obj *mmdb_obj =
|
288 |
(maxminddb_obj *)Z_MAXMINDDB_P(getThis());
|
289 |
|
290 |
if (NULL == mmdb_obj->mmdb) {
|
120 |
strsize_t name_len;
|
121 |
zval * _this_zval = NULL;
|
122 |
|
123 |
+
if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os",
|
124 |
&_this_zval, maxminddb_ce, &db_file, &name_len) == FAILURE) {
|
125 |
THROW_EXCEPTION("InvalidArgumentException",
|
126 |
"The constructor takes exactly one argument.");
|
127 |
return;
|
128 |
}
|
129 |
|
130 |
+
if (0 != php_check_open_basedir(db_file TSRMLS_CC) || 0 != access(db_file, R_OK)) {
|
131 |
THROW_EXCEPTION("InvalidArgumentException",
|
132 |
"The file \"%s\" does not exist or is not readable.",
|
133 |
db_file);
|
155 |
strsize_t name_len;
|
156 |
zval * _this_zval = NULL;
|
157 |
|
158 |
+
if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os",
|
159 |
&_this_zval, maxminddb_ce, &ip_address, &name_len) == FAILURE) {
|
160 |
THROW_EXCEPTION("InvalidArgumentException",
|
161 |
"Method takes exactly one argument.");
|
284 |
return;
|
285 |
}
|
286 |
|
287 |
+
maxminddb_obj *mmdb_obj =
|
288 |
(maxminddb_obj *)Z_MAXMINDDB_P(getThis());
|
289 |
|
290 |
if (NULL == mmdb_obj->mmdb) {
|
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.
|
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.3.0"
|
19 |
#define PHP_MAXMINDDB_EXTNAME "maxminddb"
|
20 |
|
21 |
extern zend_module_entry maxminddb_module_entry;
|
vendor/maxmind-db/reader/ext/tests/003-open-basedir.phpt
ADDED
@@ -0,0 +1,12 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
--TEST--
|
2 |
+
openbase_dir is followed
|
3 |
+
--INI--
|
4 |
+
open_basedir=/--dne--
|
5 |
+
--FILE--
|
6 |
+
<?php
|
7 |
+
use MaxMind\Db\Reader;
|
8 |
+
|
9 |
+
$reader = new Reader('/usr/local/share/GeoIP/GeoIP2-City.mmdb');
|
10 |
+
?>
|
11 |
+
--EXPECTREGEX--
|
12 |
+
.*open_basedir restriction in effect.*
|
vendor/maxmind/web-service-common/CHANGELOG.md
CHANGED
@@ -1,7 +1,12 @@
|
|
1 |
CHANGELOG
|
2 |
=========
|
3 |
|
4 |
-
0.
|
|
|
|
|
|
|
|
|
|
|
5 |
------------------
|
6 |
|
7 |
* PHP 5.4 is now required.
|
1 |
CHANGELOG
|
2 |
=========
|
3 |
|
4 |
+
0.5.0 (2018-02-12)
|
5 |
+
------------------
|
6 |
+
|
7 |
+
* Refer to account IDs using the terminology "account" rather than "user".
|
8 |
+
|
9 |
+
0.4.0 (2017-07-10)
|
10 |
------------------
|
11 |
|
12 |
* PHP 5.4 is now required.
|
vendor/maxmind/web-service-common/README.md
CHANGED
@@ -1,7 +1,7 @@
|
|
1 |
-
# MaxMind Web Service
|
2 |
|
3 |
This is _not_ intended for direct use by third parties. Rather, it is for
|
4 |
-
shared code between MaxMind's various web service APIs.
|
5 |
|
6 |
## Requirements ##
|
7 |
|
@@ -21,6 +21,6 @@ This API uses [Semantic Versioning](http://semver.org/).
|
|
21 |
|
22 |
## Copyright and License ##
|
23 |
|
24 |
-
This software is Copyright (c) 2015-
|
25 |
|
26 |
This is free software, licensed under the Apache License, Version 2.0.
|
1 |
+
# Common Code for MaxMind Web Service Clients #
|
2 |
|
3 |
This is _not_ intended for direct use by third parties. Rather, it is for
|
4 |
+
shared code between MaxMind's various web service client APIs.
|
5 |
|
6 |
## Requirements ##
|
7 |
|
21 |
|
22 |
## Copyright and License ##
|
23 |
|
24 |
+
This software is Copyright (c) 2015-2018 by MaxMind, Inc.
|
25 |
|
26 |
This is free software, licensed under the Apache License, Version 2.0.
|
vendor/maxmind/web-service-common/dev-bin/release.sh
ADDED
@@ -0,0 +1,60 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
#!/bin/bash
|
2 |
+
|
3 |
+
set -eu -o pipefail
|
4 |
+
|
5 |
+
|
6 |
+
changelog=$(cat CHANGELOG.md)
|
7 |
+
|
8 |
+
regex='
|
9 |
+
([0-9]+\.[0-9]+\.[0-9]+) \(([0-9]{4}-[0-9]{2}-[0-9]{2})\)
|
10 |
+
-*
|
11 |
+
|
12 |
+
((.|
|
13 |
+
)*)
|
14 |
+
'
|
15 |
+
|
16 |
+
if [[ ! $changelog =~ $regex ]]; then
|
17 |
+
echo "Could not find date line in change log!"
|
18 |
+
exit 1
|
19 |
+
fi
|
20 |
+
|
21 |
+
version="${BASH_REMATCH[1]}"
|
22 |
+
date="${BASH_REMATCH[2]}"
|
23 |
+
notes="$(echo "${BASH_REMATCH[3]}" | sed -n -e '/^[0-9]\+\.[0-9]\+\.[0-9]\+/,$!p')"
|
24 |
+
|
25 |
+
if [[ "$date" != $(date +"%Y-%m-%d") ]]; then
|
26 |
+
echo "$date is not today!"
|
27 |
+
exit 1
|
28 |
+
fi
|
29 |
+
|
30 |
+
tag="v$version"
|
31 |
+
|
32 |
+
if [ -n "$(git status --porcelain)" ]; then
|
33 |
+
echo ". is not clean." >&2
|
34 |
+
exit 1
|
35 |
+
fi
|
36 |
+
|
37 |
+
php composer.phar self-update
|
38 |
+
php composer.phar update
|
39 |
+
|
40 |
+
./vendor/bin/phpunit
|
41 |
+
|
42 |
+
echo "Release notes for $tag:"
|
43 |
+
echo "$notes"
|
44 |
+
|
45 |
+
read -e -p "Commit changes and push to origin? " should_push
|
46 |
+
|
47 |
+
if [ "$should_push" != "y" ]; then
|
48 |
+
echo "Aborting"
|
49 |
+
exit 1
|
50 |
+
fi
|
51 |
+
|
52 |
+
git push
|
53 |
+
|
54 |
+
message="$version
|
55 |
+
|
56 |
+
$notes"
|
57 |
+
|
58 |
+
hub release create -m "$message" "$tag"
|
59 |
+
|
60 |
+
git push --tags
|
vendor/maxmind/web-service-common/src/WebService/Client.php
CHANGED
@@ -32,10 +32,10 @@ class Client
|
|
32 |
private $proxy;
|
33 |
private $timeout;
|
34 |
private $userAgentPrefix;
|
35 |
-
private $
|
36 |
|
37 |
/**
|
38 |
-
* @param int $
|
39 |
* @param string $licenseKey your MaxMind license key
|
40 |
* @param array $options an array of options. Possible keys:
|
41 |
* * `host` - The host to use when connecting to the web service.
|
@@ -47,11 +47,11 @@ class Client
|
|
47 |
* username, and password, e.g., `http://username:password@127.0.0.1:10`.
|
48 |
*/
|
49 |
public function __construct(
|
50 |
-
$
|
51 |
$licenseKey,
|
52 |
$options = []
|
53 |
) {
|
54 |
-
$this->
|
55 |
$this->licenseKey = $licenseKey;
|
56 |
|
57 |
$this->httpRequestFactory = isset($options['httpRequestFactory'])
|
@@ -152,7 +152,7 @@ class Client
|
|
152 |
array_push(
|
153 |
$headers,
|
154 |
'Authorization: Basic '
|
155 |
-
. base64_encode($this->
|
156 |
'Accept: application/json'
|
157 |
);
|
158 |
|
@@ -325,6 +325,8 @@ class Client
|
|
325 |
$statusCode,
|
326 |
$this->urlFor($path)
|
327 |
);
|
|
|
|
|
328 |
case 'AUTHORIZATION_INVALID':
|
329 |
case 'LICENSE_KEY_REQUIRED':
|
330 |
case 'USER_ID_REQUIRED':
|
32 |
private $proxy;
|
33 |
private $timeout;
|
34 |
private $userAgentPrefix;
|
35 |
+
private $accountId;
|
36 |
|
37 |
/**
|
38 |
+
* @param int $accountId your MaxMind account ID
|
39 |
* @param string $licenseKey your MaxMind license key
|
40 |
* @param array $options an array of options. Possible keys:
|
41 |
* * `host` - The host to use when connecting to the web service.
|
47 |
* username, and password, e.g., `http://username:password@127.0.0.1:10`.
|
48 |
*/
|
49 |
public function __construct(
|
50 |
+
$accountId,
|
51 |
$licenseKey,
|
52 |
$options = []
|
53 |
) {
|
54 |
+
$this->accountId = $accountId;
|
55 |
$this->licenseKey = $licenseKey;
|
56 |
|
57 |
$this->httpRequestFactory = isset($options['httpRequestFactory'])
|
152 |
array_push(
|
153 |
$headers,
|
154 |
'Authorization: Basic '
|
155 |
+
. base64_encode($this->accountId . ':' . $this->licenseKey),
|
156 |
'Accept: application/json'
|
157 |
);
|
158 |
|
325 |
$statusCode,
|
326 |
$this->urlFor($path)
|
327 |
);
|
328 |
+
case 'ACCOUNT_ID_REQUIRED':
|
329 |
+
case 'ACCOUNT_ID_UNKNOWN':
|
330 |
case 'AUTHORIZATION_INVALID':
|
331 |
case 'LICENSE_KEY_REQUIRED':
|
332 |
case 'USER_ID_REQUIRED':
|
views/client-ip.php
ADDED
@@ -0,0 +1,58 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<div class="wrap geoip-detect-wrap">
|
2 |
+
<!-- This page cannot be translated yet, as I am not sure how it will look like in the long-term.
|
3 |
+
The goal is to have wizard helping to set all the relevant options semi-automatically. -->
|
4 |
+
<h1><?php _e('GeoIP Detection', 'geoip-detect');?> - Client IP Debug Panel</h1>
|
5 |
+
<p>
|
6 |
+
<a href="tools.php?page=<?php echo GEOIP_PLUGIN_BASENAME ?>"><?php _e('Test IP Detection Lookup', 'geoip-detect')?></a>
|
7 |
+
|
|
8 |
+
<a href="options-general.php?page=<?php echo GEOIP_PLUGIN_BASENAME ?>"><?php _e('Options', 'geoip-detect');?></a>
|
9 |
+
</p>
|
10 |
+
<pre>This debug panel is listing all relevant informations to debug when the detected client ip is wrong (in case of reverse proxies etc.)
|
11 |
+
Sometimes, there are proxies between your user and the wordpress server application (e.g. a <abbr title="Content Delivery Network: Amazon, Cloudflare, etc.">CDN</abbr>, reverse proxies).
|
12 |
+
This needs to be known to the plugin to choose the correct IP adress.
|
13 |
+
</pre>
|
14 |
+
<h2>Current IP informations (as detected by the plugin)</h2>
|
15 |
+
<p>
|
16 |
+
Detected client IP: <b><?php echo geoip_detect2_get_client_ip(); ?></b><br>
|
17 |
+
<span class="detail-box">This IP is used for detecting the geo-information of the user. It should be the same as the real client IP below.</span>
|
18 |
+
Real client IP (detected without the plugin): <b><span id="ajax_get_client_ip"><i>Detecting ...</i></span></b>
|
19 |
+
<span class="detail-box">This IP is detected within the browser, so reverse proxies of the server are not affected.<br></span>
|
20 |
+
External Server IP: <b><?php echo geoip_detect2_get_external_ip_adress(); ?></b><br>
|
21 |
+
<span class="detail-box">In some cases, the server is in the same network as the client (e.g. testing server). As the connection does not use Internet, this plugin uses the IP adress of the server as seen from the internet.<br>
|
22 |
+
For performance reasons, this IP is cached for <?php echo human_time_diff(0, GEOIP_DETECT_IP_CACHE_TIME); ?>.<br>
|
23 |
+
Also, for servers without internet access, this IP can be set in the options.
|
24 |
+
</span>
|
25 |
+
</p>
|
26 |
+
<p>
|
27 |
+
REMOTE_ADDR: <b><?php echo $_SERVER['REMOTE_ADDR']; ?></b><br>
|
28 |
+
<span class="detail-box">In server configurations without reverse proxy, this will equal to the "detected client IP". Otherwise, this is the IP of the reverse proxy.</span>
|
29 |
+
HTTP_X_FORWARDED_FOR: <b><?php echo isset($_SERVER["HTTP_X_FORWARDED_FOR"]) ? $_SERVER["HTTP_X_FORWARDED_FOR"] : __('(unset)', 'geoip-detect'); ?></b><br>
|
30 |
+
<span class="detail-box">Reverse proxies usually add this header to indicate the original IP. If several IPs are given here (seperated by a comma), the correct user IP usually is the leftmost one.</span>
|
31 |
+
<?php if (isset($_SERVER["HTTP_X_FORWARDED_FOR"]) && !get_option('geoip-detect-has_reverse_proxy')): ?>
|
32 |
+
<i>(Probably you should enable the reverse proxy option.)</i>
|
33 |
+
<?php endif; ?>
|
34 |
+
</p>
|
35 |
+
<h3>Settings of the plugin</h3>
|
36 |
+
<ul>
|
37 |
+
<li>Use reverse proxy: <b><?php echo get_option('geoip-detect-has_reverse_proxy', 0) ? 'yes' : 'no' ?></b>
|
38 |
+
<span class="detail-box">Enable this option if REMOTE_ADDR is not the correct client IP.</span>
|
39 |
+
</li>
|
40 |
+
|
41 |
+
<li>Whitelist for known reverse proxies (optional if only one): <b><?php echo get_option('geoip-detect-trusted_proxy_ips') ?: '(none)'; ?></b>
|
42 |
+
<span class="detail-box">All IPs in HTTP_X_FORWARDED_FOR that are not the correct client IP are probably known reverse proxies.<br>(For security reasons, this is not assumed by default: maybe the reverse proxy is not of the server, but a Man-In-The-Middle-Attack ... not very probable but possible.)</span>
|
43 |
+
</li>
|
44 |
+
</ul>
|
45 |
+
|
46 |
+
<script>
|
47 |
+
jQuery.ajax(<?php echo json_encode(_geoip_detect2_get_external_ip_services(1, true)[0]); ?>, {
|
48 |
+
type: 'GET',
|
49 |
+
dataType: 'text',
|
50 |
+
}).done(function(ret) {
|
51 |
+
jQuery('#ajax_get_client_ip').text(ret);
|
52 |
+
}).fail(function(xhr, status, ret) {
|
53 |
+
jQuery('#ajax_get_client_ip').text('Failed: ' + status + ret);
|
54 |
+
});
|
55 |
+
</script>
|
56 |
+
|
57 |
+
<?php require(GEOIP_PLUGIN_DIR . '/views/footer.php'); ?>
|
58 |
+
</div>
|
views/footer.php
CHANGED
@@ -9,9 +9,37 @@
|
|
9 |
<p class="legal_notices">
|
10 |
<?php _e('This product includes GeoLite2 data created by MaxMind, available from <a href="http://www.maxmind.com/">http://www.maxmind.com</a>.', 'geoip-detect'); ?>
|
11 |
</p>
|
|
|
12 |
<style>
|
13 |
.legal_notices {
|
14 |
font-size: 80%;
|
15 |
font-style: italic;
|
16 |
}
|
17 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
9 |
<p class="legal_notices">
|
10 |
<?php _e('This product includes GeoLite2 data created by MaxMind, available from <a href="http://www.maxmind.com/">http://www.maxmind.com</a>.', 'geoip-detect'); ?>
|
11 |
</p>
|
12 |
+
|
13 |
<style>
|
14 |
.legal_notices {
|
15 |
font-size: 80%;
|
16 |
font-style: italic;
|
17 |
}
|
18 |
+
.geoip_detect_error {
|
19 |
+
display:block;
|
20 |
+
clear: both;
|
21 |
+
background-color: rgb(255, 255, 255);
|
22 |
+
border-left: rgb(255, 0, 0) solid 4px;
|
23 |
+
box-shadow: 0 1px 1px 0 rgba(0, 0, 0, 0.1);
|
24 |
+
display: inline-block;
|
25 |
+
font-size: 14px;
|
26 |
+
line-height: 19px;
|
27 |
+
margin-bottom: 0;
|
28 |
+
margin-left: 2px;
|
29 |
+
margin-right: 20px;
|
30 |
+
margin-top: 25px;
|
31 |
+
padding-bottom: 11px;
|
32 |
+
padding-left: 15px;
|
33 |
+
padding-right: 15px;
|
34 |
+
padding-top: 11px;
|
35 |
+
text-align: left;
|
36 |
+
}
|
37 |
+
.detail-box {
|
38 |
+
display: block;
|
39 |
+
margin-left: 50px;
|
40 |
+
color: #777;
|
41 |
+
}
|
42 |
+
.geoip-detect-wrap select {
|
43 |
+
max-width: 100%;
|
44 |
+
}
|
45 |
+
</style>
|
views/lookup.php
CHANGED
@@ -1,4 +1,4 @@
|
|
1 |
-
<?php
|
2 |
use YellowTree\GeoipDetect\DataSources\DataSourceRegistry;
|
3 |
$date_format = get_option('date_format') . ' ' . get_option('time_format');
|
4 |
|
@@ -17,24 +17,31 @@ if ($shortcode_options) {
|
|
17 |
?>
|
18 |
<div class="wrap geoip-detect-wrap">
|
19 |
<h1><?php _e('GeoIP Detection', 'geoip-detect');?></h1>
|
20 |
-
<
|
21 |
-
|
|
|
|
|
22 |
<p>
|
23 |
<?php printf(__('<b>Selected data source:</b> %s', 'geoip-detect'), geoip_detect2_get_current_source_description() ); ?>
|
24 |
</p>
|
25 |
-
|
26 |
<p>
|
27 |
<?php echo $current_source->getStatusInformationHTML(); ?>
|
28 |
<br />
|
29 |
<br />
|
30 |
-
</p>
|
31 |
-
|
|
|
|
|
|
|
|
|
|
|
32 |
<h2><?php _e('Test IP Detection Lookup ', 'geoip-detect');?></h2>
|
33 |
<form method="post" action="#">
|
34 |
<?php wp_nonce_field( 'geoip_detect_lookup' ); ?>
|
35 |
<input type="hidden" name="action" value="lookup" />
|
36 |
<?php _e('IP', 'geoip-detect')?>: <input type="text" placeholder="<?php _e('Enter an IP (v4 or v6)', 'geoip-detect')?>" name="ip" value="<?php echo isset($_REQUEST['ip']) ? esc_attr($_REQUEST['ip']) : esc_attr(geoip_detect2_get_client_ip()); ?>" /><br />
|
37 |
-
<label><?php _e('Use these locales:', 'geoip-detect'); ?>
|
38 |
<select name="locales">
|
39 |
<option value="" <?php if (empty($_POST['locales'])) echo 'selected="selected"'?>><?php _e('Default (Current site language, English otherwise)', 'geoip-detect')?></option>
|
40 |
<option value="en" <?php if (!empty($_POST['locales']) && $_POST['locales'] == 'en') echo 'selected="selected"'?>><?php _e('English only', 'geoip-detect')?></option>
|
@@ -46,7 +53,7 @@ if ($shortcode_options) {
|
|
46 |
</form>
|
47 |
<?php if ($ip_lookup_result !== false) :
|
48 |
if (is_object($ip_lookup_result)) :
|
49 |
-
$record = $ip_lookup_result;
|
50 |
|
51 |
?>
|
52 |
<h3><?php _e('Lookup Result', 'geoip-detect'); ?></h3>
|
@@ -57,20 +64,20 @@ if ($shortcode_options) {
|
|
57 |
<br /><?php printf(__('(Served from cache. Was cached %s ago)', 'geoip-detect'), human_time_diff($record->extra->cached));?>
|
58 |
<?php endif; ?>
|
59 |
</p>
|
60 |
-
|
61 |
<?php if ($record->extra->error) : ?>
|
62 |
<p class="geoip_detect_error">
|
63 |
<?php echo nl2br(esc_html($record->extra->error)); ?>
|
64 |
</p>
|
65 |
<?php endif; ?>
|
66 |
-
|
67 |
<table>
|
68 |
<tr>
|
69 |
<th><?php _e('Key', 'geoip-detect'); ?></th>
|
70 |
<th><?php _e('Value', 'geoip-detect'); ?></th>
|
71 |
<th><?php _e('Shortcode equivalent', 'geoip-detect'); ?></th>
|
72 |
</tr>
|
73 |
-
|
74 |
<tr>
|
75 |
<td><code>$record->city->name</code></td>
|
76 |
<td><?php echo esc_html($record->city->name);?></td>
|
@@ -129,27 +136,4 @@ if ($shortcode_options) {
|
|
129 |
<?php printf(__('See %s for more documentation.', 'geoip-detect'), '<a href="http://dev.maxmind.com/geoip/geoip2/web-services/" target="_blank">http://dev.maxmind.com/geoip/geoip2/web-services/</a>');?>
|
130 |
</p>
|
131 |
<?php require(GEOIP_PLUGIN_DIR . '/views/footer.php'); ?>
|
132 |
-
</div>
|
133 |
-
<style>
|
134 |
-
.geoip-detect-wrap select {
|
135 |
-
max-width: 100%;
|
136 |
-
}
|
137 |
-
|
138 |
-
.geoip_detect_error {
|
139 |
-
background-color: rgb(255, 255, 255);
|
140 |
-
border-left: rgb(255, 0, 0) solid 4px;
|
141 |
-
box-shadow: 0 1px 1px 0 rgba(0, 0, 0, 0.1);
|
142 |
-
display: inline-block;
|
143 |
-
font-size: 14px;
|
144 |
-
line-height: 19px;
|
145 |
-
margin-bottom: 0;
|
146 |
-
margin-left: 2px;
|
147 |
-
margin-right: 20px;
|
148 |
-
margin-top: 25px;
|
149 |
-
padding-bottom: 11px;
|
150 |
-
padding-left: 15px;
|
151 |
-
padding-right: 15px;
|
152 |
-
padding-top: 11px;
|
153 |
-
text-align: left;
|
154 |
-
}
|
155 |
-
</style>
|
1 |
+
<?php
|
2 |
use YellowTree\GeoipDetect\DataSources\DataSourceRegistry;
|
3 |
$date_format = get_option('date_format') . ' ' . get_option('time_format');
|
4 |
|
17 |
?>
|
18 |
<div class="wrap geoip-detect-wrap">
|
19 |
<h1><?php _e('GeoIP Detection', 'geoip-detect');?></h1>
|
20 |
+
<p>
|
21 |
+
<a href="options-general.php?page=<?php echo GEOIP_PLUGIN_BASENAME ?>"><?php _e('Options', 'geoip-detect');?></a>
|
22 |
+
</p>
|
23 |
+
|
24 |
<p>
|
25 |
<?php printf(__('<b>Selected data source:</b> %s', 'geoip-detect'), geoip_detect2_get_current_source_description() ); ?>
|
26 |
</p>
|
27 |
+
|
28 |
<p>
|
29 |
<?php echo $current_source->getStatusInformationHTML(); ?>
|
30 |
<br />
|
31 |
<br />
|
32 |
+
</p>
|
33 |
+
|
34 |
+
<p>
|
35 |
+
<b><?php _e('Your current IP:', 'geoip-detect');?></b> <?php echo geoip_detect2_get_client_ip(); ?>
|
36 |
+
<a href="options-general.php?page=<?php echo GEOIP_PLUGIN_BASENAME ?>&geoip_detect_part=client-ip">(<?php _e('Not correct?', 'geoip-detect');?>)</a>
|
37 |
+
</p>
|
38 |
+
|
39 |
<h2><?php _e('Test IP Detection Lookup ', 'geoip-detect');?></h2>
|
40 |
<form method="post" action="#">
|
41 |
<?php wp_nonce_field( 'geoip_detect_lookup' ); ?>
|
42 |
<input type="hidden" name="action" value="lookup" />
|
43 |
<?php _e('IP', 'geoip-detect')?>: <input type="text" placeholder="<?php _e('Enter an IP (v4 or v6)', 'geoip-detect')?>" name="ip" value="<?php echo isset($_REQUEST['ip']) ? esc_attr($_REQUEST['ip']) : esc_attr(geoip_detect2_get_client_ip()); ?>" /><br />
|
44 |
+
<label><?php _e('Use these locales:', 'geoip-detect'); ?>
|
45 |
<select name="locales">
|
46 |
<option value="" <?php if (empty($_POST['locales'])) echo 'selected="selected"'?>><?php _e('Default (Current site language, English otherwise)', 'geoip-detect')?></option>
|
47 |
<option value="en" <?php if (!empty($_POST['locales']) && $_POST['locales'] == 'en') echo 'selected="selected"'?>><?php _e('English only', 'geoip-detect')?></option>
|
53 |
</form>
|
54 |
<?php if ($ip_lookup_result !== false) :
|
55 |
if (is_object($ip_lookup_result)) :
|
56 |
+
$record = $ip_lookup_result;
|
57 |
|
58 |
?>
|
59 |
<h3><?php _e('Lookup Result', 'geoip-detect'); ?></h3>
|
64 |
<br /><?php printf(__('(Served from cache. Was cached %s ago)', 'geoip-detect'), human_time_diff($record->extra->cached));?>
|
65 |
<?php endif; ?>
|
66 |
</p>
|
67 |
+
|
68 |
<?php if ($record->extra->error) : ?>
|
69 |
<p class="geoip_detect_error">
|
70 |
<?php echo nl2br(esc_html($record->extra->error)); ?>
|
71 |
</p>
|
72 |
<?php endif; ?>
|
73 |
+
|
74 |
<table>
|
75 |
<tr>
|
76 |
<th><?php _e('Key', 'geoip-detect'); ?></th>
|
77 |
<th><?php _e('Value', 'geoip-detect'); ?></th>
|
78 |
<th><?php _e('Shortcode equivalent', 'geoip-detect'); ?></th>
|
79 |
</tr>
|
80 |
+
|
81 |
<tr>
|
82 |
<td><code>$record->city->name</code></td>
|
83 |
<td><?php echo esc_html($record->city->name);?></td>
|
136 |
<?php printf(__('See %s for more documentation.', 'geoip-detect'), '<a href="http://dev.maxmind.com/geoip/geoip2/web-services/" target="_blank">http://dev.maxmind.com/geoip/geoip2/web-services/</a>');?>
|
137 |
</p>
|
138 |
<?php require(GEOIP_PLUGIN_DIR . '/views/footer.php'); ?>
|
139 |
+
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
views/options.php
CHANGED
@@ -1,4 +1,4 @@
|
|
1 |
-
<?php
|
2 |
$options = $currentSource->getParameterHTML();
|
3 |
?>
|
4 |
|
@@ -10,7 +10,7 @@ $options = $currentSource->getParameterHTML();
|
|
10 |
<?php echo $message; ?>
|
11 |
</p>
|
12 |
<?php endif; ?>
|
13 |
-
|
14 |
<p>
|
15 |
<?php printf(__('<b>Selected data source:</b> %s', 'geoip-detect'), geoip_detect2_get_current_source_description() ); ?>
|
16 |
</p>
|
@@ -26,7 +26,7 @@ $options = $currentSource->getParameterHTML();
|
|
26 |
<p><?php echo $options; ?></p>
|
27 |
<p>
|
28 |
<input type="submit" class="button button-primary" value="<?php _e('Save', 'geoip-detect'); ?>" />
|
29 |
-
</p>
|
30 |
</form>
|
31 |
</p>
|
32 |
<?php endif; ?>
|
@@ -58,14 +58,15 @@ $options = $currentSource->getParameterHTML();
|
|
58 |
<label><input type="checkbox" name="options[disable_pagecache]" value="1" <?php if (!empty($wp_options['disable_pagecache'])) { echo 'checked="checked"'; } ?>> <?php _e('Disable caching a page that contains a shortcode or API call to geo-dependent functions.', 'geoip-detect'); ?></label><br />
|
59 |
<span class="detail-box">
|
60 |
<?php _e('At least WP SuperCache, W3TotalCache and ZenCache are supported.', 'geoip-detect'); ?>
|
61 |
-
</span>
|
62 |
<?php if (!empty($wp_options['set_css_country']) && !empty($wp_options['disable_pagecache'])): ?>
|
63 |
<span class="geoip_detect_error"><?php _e('Warning: As the CSS option above is active, this means that all pages are not cached.', 'geoip-detect'); ?></span>
|
64 |
<?php endif; ?>
|
65 |
</p>
|
66 |
-
|
67 |
<p>
|
68 |
<label><input type="checkbox" name="options[has_reverse_proxy]" value="1" <?php if (!empty($wp_options['has_reverse_proxy'])) { echo 'checked="checked"'; } ?>> <?php _e('The server is behind a reverse proxy', 'geoip-detect')?></label>
|
|
|
69 |
<span class="detail-box">
|
70 |
<?php if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) : ?>
|
71 |
<?php printf(__('(With Proxy: %s - Without Proxy: %s - Client IP with current configuration: %s)', 'geoip-detect'), $_SERVER['HTTP_X_FORWARDED_FOR'], $_SERVER['REMOTE_ADDR'], geoip_detect2_get_client_ip()); ?><br />
|
@@ -74,6 +75,14 @@ $options = $currentSource->getParameterHTML();
|
|
74 |
<?php endif; ?>
|
75 |
</span>
|
76 |
</p>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
77 |
<p>
|
78 |
<label><?php _e('External IP of this server:', 'geoip-detect'); ?> <input type="text" name="options[external_ip]" value="<?php echo esc_attr($wp_options['external_ip']); ?>" placeholder="<?php _e('detect automatically', 'geoip-detect'); ?>" /></label>
|
79 |
<span class="detail-box">
|
@@ -98,30 +107,3 @@ $options = $currentSource->getParameterHTML();
|
|
98 |
<?php endif; ?>
|
99 |
<?php require(GEOIP_PLUGIN_DIR . '/views/footer.php'); ?>
|
100 |
</div>
|
101 |
-
<style>
|
102 |
-
.geoip_detect_error {
|
103 |
-
display:block;
|
104 |
-
clear: both;
|
105 |
-
background-color: rgb(255, 255, 255);
|
106 |
-
border-left: rgb(255, 0, 0) solid 4px;
|
107 |
-
box-shadow: 0 1px 1px 0 rgba(0, 0, 0, 0.1);
|
108 |
-
display: inline-block;
|
109 |
-
font-size: 14px;
|
110 |
-
line-height: 19px;
|
111 |
-
margin-bottom: 0;
|
112 |
-
margin-left: 2px;
|
113 |
-
margin-right: 20px;
|
114 |
-
margin-top: 25px;
|
115 |
-
padding-bottom: 11px;
|
116 |
-
padding-left: 15px;
|
117 |
-
padding-right: 15px;
|
118 |
-
padding-top: 11px;
|
119 |
-
text-align: left;
|
120 |
-
}
|
121 |
-
.detail-box {
|
122 |
-
display: block;
|
123 |
-
margin-left: 50px;
|
124 |
-
color: #777;
|
125 |
-
}
|
126 |
-
|
127 |
-
</style>
|
1 |
+
<?php
|
2 |
$options = $currentSource->getParameterHTML();
|
3 |
?>
|
4 |
|
10 |
<?php echo $message; ?>
|
11 |
</p>
|
12 |
<?php endif; ?>
|
13 |
+
|
14 |
<p>
|
15 |
<?php printf(__('<b>Selected data source:</b> %s', 'geoip-detect'), geoip_detect2_get_current_source_description() ); ?>
|
16 |
</p>
|
26 |
<p><?php echo $options; ?></p>
|
27 |
<p>
|
28 |
<input type="submit" class="button button-primary" value="<?php _e('Save', 'geoip-detect'); ?>" />
|
29 |
+
</p>
|
30 |
</form>
|
31 |
</p>
|
32 |
<?php endif; ?>
|
58 |
<label><input type="checkbox" name="options[disable_pagecache]" value="1" <?php if (!empty($wp_options['disable_pagecache'])) { echo 'checked="checked"'; } ?>> <?php _e('Disable caching a page that contains a shortcode or API call to geo-dependent functions.', 'geoip-detect'); ?></label><br />
|
59 |
<span class="detail-box">
|
60 |
<?php _e('At least WP SuperCache, W3TotalCache and ZenCache are supported.', 'geoip-detect'); ?>
|
61 |
+
</span>
|
62 |
<?php if (!empty($wp_options['set_css_country']) && !empty($wp_options['disable_pagecache'])): ?>
|
63 |
<span class="geoip_detect_error"><?php _e('Warning: As the CSS option above is active, this means that all pages are not cached.', 'geoip-detect'); ?></span>
|
64 |
<?php endif; ?>
|
65 |
</p>
|
66 |
+
|
67 |
<p>
|
68 |
<label><input type="checkbox" name="options[has_reverse_proxy]" value="1" <?php if (!empty($wp_options['has_reverse_proxy'])) { echo 'checked="checked"'; } ?>> <?php _e('The server is behind a reverse proxy', 'geoip-detect')?></label>
|
69 |
+
<a href="options-general.php?page=<?php echo GEOIP_PLUGIN_BASENAME ?>&geoip_detect_part=client-ip">(<?php _e('Client IP debug panel', 'geoip-detect');?>)</a>
|
70 |
<span class="detail-box">
|
71 |
<?php if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) : ?>
|
72 |
<?php printf(__('(With Proxy: %s - Without Proxy: %s - Client IP with current configuration: %s)', 'geoip-detect'), $_SERVER['HTTP_X_FORWARDED_FOR'], $_SERVER['REMOTE_ADDR'], geoip_detect2_get_client_ip()); ?><br />
|
75 |
<?php endif; ?>
|
76 |
</span>
|
77 |
</p>
|
78 |
+
<p>
|
79 |
+
<label><?php _e('IPs of trusted proxies:', 'geoip-detect'); ?><input type="text" name="options[trusted_proxy_ips]" <?php echo esc_attr($wp_options['trusted_proxy_ips']); ?>" placeholder="<?php _e('IPs comma-seperated', 'geoip-detect'); ?>" />
|
80 |
+
<span class="detail-box">
|
81 |
+
<?php _e('If specified, only IPs in this list will be treated as proxy.', 'geoip-detect'); ?><br>
|
82 |
+
<?php _e('Make sure to add both IPv4 and IPv6 adresses of the proxy!', 'geoip-detect'); ?>
|
83 |
+
</span>
|
84 |
+
</p>
|
85 |
+
|
86 |
<p>
|
87 |
<label><?php _e('External IP of this server:', 'geoip-detect'); ?> <input type="text" name="options[external_ip]" value="<?php echo esc_attr($wp_options['external_ip']); ?>" placeholder="<?php _e('detect automatically', 'geoip-detect'); ?>" /></label>
|
88 |
<span class="detail-box">
|
107 |
<?php endif; ?>
|
108 |
<?php require(GEOIP_PLUGIN_DIR . '/views/footer.php'); ?>
|
109 |
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|