Version Description
Download this release
Release Info
Developer | amazonlinkbuilder |
Plugin | Amazon Associates Link Builder |
Version | 1.5.0 |
Comparing to | |
See all releases |
Code changes from version 1.4.13 to 1.5.0
- NOTICE.txt +22 -1
- aalb_config.php +19 -8
- admin/aalb_admin.php +17 -7
- admin/css/aalb_admin.css +132 -73
- admin/css/aalb_credentials.css +5 -1
- admin/js/aalb_admin.js +790 -523
- admin/partials/aalb_admin_pop_up_content_hbs.php +34 -0
- admin/partials/aalb_editor_search_box.php +3 -6
- admin/partials/aalb_meta_box.php +62 -80
- admin/partials/aalb_meta_box_tab_content.php +98 -0
- admin/sidebar/aalb_sidebar.php +1 -0
- admin/sidebar/partials/aalb_credentials.php +15 -3
- admin/sidebar/partials/aalb_ui_common.php +3 -3
- admin/sidebar/partials/helper/aalb_credentials_helper.php +29 -0
- amazon-associates-link-builder.php +3 -1
- composer.json +5 -0
- composer.lock +232 -0
- composer.phar +0 -0
- css/aalb_basics.css +10 -0
- includes/aalb_activator.php +0 -21
- includes/aalb_autoloader.php +1 -0
- includes/aalb_cache_loader.php +6 -5
- includes/aalb_helper.php +32 -11
- includes/aalb_manager.php +6 -4
- includes/aalb_template_engine.php +7 -4
- ip2country/aalb_customer_country.php +110 -0
- ip2country/aalb_customer_ip_address.php +70 -0
- ip2country/aalb_maxmind_db_manager.php +242 -0
- lib/php/aalb_xml_helper.php +1 -1
- shortcode/aalb_shortcode_loader.php +10 -38
- shortcode/aalb_shortcode_manager.php +176 -0
- vendor/autoload.php +7 -0
- vendor/composer/ClassLoader.php +445 -0
- vendor/composer/LICENSE +21 -0
- vendor/composer/autoload_classmap.php +9 -0
- vendor/composer/autoload_namespaces.php +9 -0
- vendor/composer/autoload_psr4.php +14 -0
- vendor/composer/autoload_real.php +52 -0
- vendor/composer/autoload_static.php +57 -0
- vendor/composer/ca-bundle/LICENSE +19 -0
- vendor/composer/ca-bundle/README.md +77 -0
- vendor/composer/ca-bundle/composer.json +57 -0
- vendor/composer/ca-bundle/res/cacert.pem +3646 -0
- vendor/composer/ca-bundle/src/CaBundle.php +291 -0
- vendor/composer/installed.json +224 -0
- vendor/geoip2/geoip2/.gitmodules +3 -0
- vendor/geoip2/geoip2/.php_cs +34 -0
- vendor/geoip2/geoip2/CHANGELOG.md +250 -0
- vendor/geoip2/geoip2/LICENSE +202 -0
- vendor/geoip2/geoip2/README.md +401 -0
- vendor/geoip2/geoip2/composer.json +31 -0
- vendor/geoip2/geoip2/src/Database/Reader.php +283 -0
- vendor/geoip2/geoip2/src/Exception/AddressNotFoundException.php +10 -0
- vendor/geoip2/geoip2/src/Exception/AuthenticationException.php +10 -0
- vendor/geoip2/geoip2/src/Exception/GeoIp2Exception.php +10 -0
- vendor/geoip2/geoip2/src/Exception/HttpException.php +24 -0
- vendor/geoip2/geoip2/src/Exception/InvalidRequestException.php +26 -0
- vendor/geoip2/geoip2/src/Exception/OutOfQueriesException.php +10 -0
- vendor/geoip2/geoip2/src/Model/AbstractModel.php +67 -0
- vendor/geoip2/geoip2/src/Model/AnonymousIp.php +46 -0
- vendor/geoip2/geoip2/src/Model/Asn.php +35 -0
- vendor/geoip2/geoip2/src/Model/City.php +133 -0
- vendor/geoip2/geoip2/src/Model/ConnectionType.php +31 -0
- vendor/geoip2/geoip2/src/Model/Country.php +71 -0
- vendor/geoip2/geoip2/src/Model/Domain.php +31 -0
- vendor/geoip2/geoip2/src/Model/Enterprise.php +47 -0
- vendor/geoip2/geoip2/src/Model/Insights.php +47 -0
- vendor/geoip2/geoip2/src/Model/Isp.php +44 -0
- vendor/geoip2/geoip2/src/ProviderInterface.php +20 -0
- vendor/geoip2/geoip2/src/Record/AbstractPlaceRecord.php +66 -0
- vendor/geoip2/geoip2/src/Record/AbstractRecord.php +61 -0
- vendor/geoip2/geoip2/src/Record/City.php +29 -0
- vendor/geoip2/geoip2/src/Record/Continent.php +32 -0
- vendor/geoip2/geoip2/src/Record/Country.php +37 -0
- vendor/geoip2/geoip2/src/Record/Location.php +52 -0
- vendor/geoip2/geoip2/src/Record/MaxMind.php +19 -0
- vendor/geoip2/geoip2/src/Record/Postal.php +26 -0
- vendor/geoip2/geoip2/src/Record/RepresentedCountry.php +35 -0
- vendor/geoip2/geoip2/src/Record/Subdivision.php +40 -0
- vendor/geoip2/geoip2/src/Record/Traits.php +114 -0
- vendor/geoip2/geoip2/src/WebService/Client.php +239 -0
- vendor/maxmind-db/reader/CHANGELOG.md +108 -0
- vendor/maxmind-db/reader/LICENSE +202 -0
- vendor/maxmind-db/reader/README.md +139 -0
- vendor/maxmind-db/reader/composer.json +34 -0
- vendor/maxmind-db/reader/ext/config.m4 +19 -0
- vendor/maxmind-db/reader/ext/maxminddb.c +564 -0
- vendor/maxmind-db/reader/ext/php_maxminddb.h +24 -0
- vendor/maxmind-db/reader/ext/tests/001-load.phpt +12 -0
- vendor/maxmind-db/reader/ext/tests/002-final.phpt +13 -0
- vendor/maxmind-db/reader/src/MaxMind/Db/Reader.php +309 -0
- vendor/maxmind-db/reader/src/MaxMind/Db/Reader/Decoder.php +311 -0
- vendor/maxmind-db/reader/src/MaxMind/Db/Reader/InvalidDatabaseException.php +10 -0
- vendor/maxmind-db/reader/src/MaxMind/Db/Reader/Metadata.php +69 -0
- vendor/maxmind-db/reader/src/MaxMind/Db/Reader/Util.php +26 -0
- vendor/maxmind/web-service-common/CHANGELOG.md +74 -0
- vendor/maxmind/web-service-common/LICENSE +202 -0
- vendor/maxmind/web-service-common/README.md +26 -0
- vendor/maxmind/web-service-common/composer.json +31 -0
- vendor/maxmind/web-service-common/src/Exception/AuthenticationException.php +10 -0
- vendor/maxmind/web-service-common/src/Exception/HttpException.php +40 -0
- vendor/maxmind/web-service-common/src/Exception/InsufficientFundsException.php +10 -0
- vendor/maxmind/web-service-common/src/Exception/InvalidInputException.php +12 -0
- vendor/maxmind/web-service-common/src/Exception/InvalidRequestException.php +37 -0
- vendor/maxmind/web-service-common/src/Exception/IpAddressNotFoundException.php +7 -0
- vendor/maxmind/web-service-common/src/Exception/PermissionRequiredException.php +10 -0
- vendor/maxmind/web-service-common/src/Exception/WebServiceException.php +10 -0
- vendor/maxmind/web-service-common/src/WebService/Client.php +470 -0
- vendor/maxmind/web-service-common/src/WebService/Http/CurlRequest.php +110 -0
- vendor/maxmind/web-service-common/src/WebService/Http/Request.php +29 -0
- vendor/maxmind/web-service-common/src/WebService/Http/RequestFactory.php +26 -0
NOTICE.txt
CHANGED
@@ -74,4 +74,25 @@ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
|
74 |
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
75 |
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
76 |
OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE
|
77 |
-
OR OTHER DEALINGS IN THE SOFTWARE.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
74 |
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
75 |
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
76 |
OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE
|
77 |
+
OR OTHER DEALINGS IN THE SOFTWARE.
|
78 |
+
|
79 |
+
** maxmind-web-service-common, maxmind-db-reader geoip2 Apache License
|
80 |
+
|
81 |
+
Copyright [2017] [MaxMind]
|
82 |
+
|
83 |
+
Licensed under the Apache License, Version 2.0 (the "License");
|
84 |
+
you may not use this file except in compliance with the License.
|
85 |
+
You may obtain a copy of the License at
|
86 |
+
|
87 |
+
http://www.apache.org/licenses/LICENSE-2.0
|
88 |
+
|
89 |
+
Unless required by applicable law or agreed to in writing, software
|
90 |
+
distributed under the License is distributed on an "AS IS" BASIS,
|
91 |
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
92 |
+
See the License for the specific language governing permissions and
|
93 |
+
limitations under the License.
|
94 |
+
|
95 |
+
|
96 |
+
** GeoLite2 Country Database Creative Commons Attribution-ShareAlike 4.0 International License
|
97 |
+
This product includes GeoLite2 data created by MaxMind, available from
|
98 |
+
<a href="http://www.maxmind.com">http://www.maxmind.com</a>.
|
aalb_config.php
CHANGED
@@ -13,13 +13,13 @@ and limitations under the License.
|
|
13 |
*/
|
14 |
|
15 |
//version
|
16 |
-
define( 'AALB_PLUGIN_CURRENT_VERSION', '1.
|
17 |
|
18 |
//Version no. with multi locale settings page
|
19 |
define( 'AALB_MULTI_LOCALE_SETTINGS_PLUGIN_VERSION', '1.4.12' );
|
20 |
|
21 |
//PHP version compatible for AALB plugin
|
22 |
-
define( 'AALB_PLUGIN_MINIMUM_SUPPORTED_PHP_VERSION', '5.
|
23 |
|
24 |
//Plugin Name
|
25 |
define( 'AALB_PLUGIN_NAME', 'Amazon Associates Link Builder' );
|
@@ -40,12 +40,7 @@ define( 'AALB_PAAPI_HELPER_PHP', AALB_PLUGIN_DIR . 'lib/php/Paapi/aalb_paapi_hel
|
|
40 |
define( 'AALB_VALIDATION_HELPER_PHP', AALB_PLUGIN_DIR . 'lib/php/aalb_validation_helper.php' );
|
41 |
define( 'AALB_XML_HELPER_PHP', AALB_PLUGIN_DIR . 'lib/php/aalb_xml_helper.php' );
|
42 |
define( 'AALB_TRACKING_API_HELPER_PHP', AALB_PLUGIN_DIR . 'lib/php/aalb_tracking_api_helper.php' );
|
43 |
-
|
44 |
-
//Shortcode
|
45 |
-
define( 'AALB_SHORTCODE_PHP', AALB_PLUGIN_DIR . 'shortcode/aalb_shortcode.php' );
|
46 |
-
define( 'AALB_SHORTCODE_TEXT_PHP', AALB_PLUGIN_DIR . 'shortcode/aalb_shortcode_text.php' );
|
47 |
-
define( 'AALB_SHORTCODE_LOADER', AALB_PLUGIN_DIR . 'shortcode/aalb_shortcode_loader.php' );
|
48 |
-
define( 'AALB_SHORTCODE_HELPER', AALB_PLUGIN_DIR . 'shortcode/aalb_shortcode_helper.php' );
|
49 |
|
50 |
//Shortcodes supported
|
51 |
define( 'AALB_SHORTCODE_AMAZON_LINK', 'amazon_link' );
|
@@ -67,6 +62,7 @@ define( 'AALB_PAAPI_DIR', AALB_PLUGIN_DIR . 'lib/php/Paapi/' );
|
|
67 |
define( 'AALB_SHORTCODE_DIR', AALB_PLUGIN_DIR . 'shortcode/' );
|
68 |
define( 'AALB_LIBRARY_DIR', AALB_PLUGIN_DIR . 'lib/php/' );
|
69 |
define( 'AALB_SIDEBAR_HELPER_DIR', AALB_PLUGIN_DIR . 'admin/sidebar/partials/helper/' );
|
|
|
70 |
|
71 |
//Includes
|
72 |
define( 'AALB_ACTIVATOR_PHP', AALB_PLUGIN_DIR . 'includes/aalb_activator.php' );
|
@@ -80,6 +76,7 @@ define( 'AALB_AUTOLOADER', AALB_PLUGIN_DIR . 'includes/aalb_autoloader.php' );
|
|
80 |
//Templates Directory
|
81 |
define( 'AALB_TEMPLATE_URL', AALB_PLUGIN_URL . 'template/' );
|
82 |
define( 'AALB_TEMPLATE_UPLOADS_FOLDER', 'amazon-associates-link-builder/template/' );
|
|
|
83 |
|
84 |
//Partials
|
85 |
define( 'AALB_META_BOX_PARTIAL', AALB_PLUGIN_DIR . 'admin/partials/aalb_meta_box.php' );
|
@@ -120,6 +117,8 @@ define( 'HANDLEBARS_JS', 'https://d8fd03967nrad.cloudfront.net/libs/handlebars.j
|
|
120 |
define( 'CODEMIRROR_JS', 'https://d8fd03967nrad.cloudfront.net/libs/codemirror/5.13.2/codemirror.min.js' );
|
121 |
define( 'CODEMIRROR_MODE_XML_JS', 'https://d8fd03967nrad.cloudfront.net/libs/codemirror/5.13.2/mode/xml/xml.min.js' );
|
122 |
define( 'CODEMIRROR_MODE_CSS_JS', 'https://d8fd03967nrad.cloudfront.net/libs/codemirror/5.13.2/mode/css/css.min.js' );
|
|
|
|
|
123 |
|
124 |
//External Styles
|
125 |
define( 'FONT_AWESOME_CSS', 'https://d8fd03967nrad.cloudfront.net/libs/font-awesome/4.5.0/css/font-awesome.min.css' );
|
@@ -161,9 +160,12 @@ define( 'AALB_AWS_SECRET_KEY', 'aalb_aws_secret_key' );
|
|
161 |
define( 'AALB_CRED_CONFIG_GROUP', 'aalb_cred_config_group' );
|
162 |
define( 'AALB_STORE_ID_NAMES', 'aalb_store_id_names' );
|
163 |
define( 'AALB_STORE_IDS', 'aalb_store_ids' );
|
|
|
164 |
define( 'AALB_SHOW_HTTP_WARNING_ONCE', 'aalb_show_http_warning_once' );
|
165 |
define( 'AALB_PLUGIN_VERSION', 'aalb_plugin_version' );
|
166 |
define( 'AALB_NO_REFERRER_DISABLED', 'aalb_no_referrer_disabled' );
|
|
|
|
|
167 |
|
168 |
//Masking constant
|
169 |
define( 'AALB_AWS_SECRET_KEY_MASK', '••••••••••••••••••••••••••••••••••••••••' );
|
@@ -288,8 +290,17 @@ define( 'AALB_PAAPI_EFFICIENCY_GUIDELINES_URL', 'http://docs.aws.amazon.com/AWSE
|
|
288 |
//Plugin specific URLS
|
289 |
define( 'AALB_SETTINGS_PAGE_URL', admin_url( 'admin.php?page=associates-link-builder-settings' ) );
|
290 |
|
|
|
|
|
|
|
291 |
define( 'AALB_NEW_PAGE_TARGET', "_blank" );
|
292 |
|
293 |
define( 'AALB_NEWLINE_SEPARATOR', "\r\n" );
|
|
|
|
|
|
|
|
|
|
|
|
|
294 |
|
295 |
?>
|
13 |
*/
|
14 |
|
15 |
//version
|
16 |
+
define( 'AALB_PLUGIN_CURRENT_VERSION', '1.5.0' );
|
17 |
|
18 |
//Version no. with multi locale settings page
|
19 |
define( 'AALB_MULTI_LOCALE_SETTINGS_PLUGIN_VERSION', '1.4.12' );
|
20 |
|
21 |
//PHP version compatible for AALB plugin
|
22 |
+
define( 'AALB_PLUGIN_MINIMUM_SUPPORTED_PHP_VERSION', '5.4.0' );
|
23 |
|
24 |
//Plugin Name
|
25 |
define( 'AALB_PLUGIN_NAME', 'Amazon Associates Link Builder' );
|
40 |
define( 'AALB_VALIDATION_HELPER_PHP', AALB_PLUGIN_DIR . 'lib/php/aalb_validation_helper.php' );
|
41 |
define( 'AALB_XML_HELPER_PHP', AALB_PLUGIN_DIR . 'lib/php/aalb_xml_helper.php' );
|
42 |
define( 'AALB_TRACKING_API_HELPER_PHP', AALB_PLUGIN_DIR . 'lib/php/aalb_tracking_api_helper.php' );
|
43 |
+
define( 'MAXMIND_DATA_FILENAME', 'GeoLite2-Country.mmdb' );
|
|
|
|
|
|
|
|
|
|
|
44 |
|
45 |
//Shortcodes supported
|
46 |
define( 'AALB_SHORTCODE_AMAZON_LINK', 'amazon_link' );
|
62 |
define( 'AALB_SHORTCODE_DIR', AALB_PLUGIN_DIR . 'shortcode/' );
|
63 |
define( 'AALB_LIBRARY_DIR', AALB_PLUGIN_DIR . 'lib/php/' );
|
64 |
define( 'AALB_SIDEBAR_HELPER_DIR', AALB_PLUGIN_DIR . 'admin/sidebar/partials/helper/' );
|
65 |
+
define( 'AALB_IP_2_COUNTRY_DIR', AALB_PLUGIN_DIR . 'ip2country/' );
|
66 |
|
67 |
//Includes
|
68 |
define( 'AALB_ACTIVATOR_PHP', AALB_PLUGIN_DIR . 'includes/aalb_activator.php' );
|
76 |
//Templates Directory
|
77 |
define( 'AALB_TEMPLATE_URL', AALB_PLUGIN_URL . 'template/' );
|
78 |
define( 'AALB_TEMPLATE_UPLOADS_FOLDER', 'amazon-associates-link-builder/template/' );
|
79 |
+
define( 'AALB_UPLOADS_FOLDER', 'amazon-associates-link-builder/' );
|
80 |
|
81 |
//Partials
|
82 |
define( 'AALB_META_BOX_PARTIAL', AALB_PLUGIN_DIR . 'admin/partials/aalb_meta_box.php' );
|
117 |
define( 'CODEMIRROR_JS', 'https://d8fd03967nrad.cloudfront.net/libs/codemirror/5.13.2/codemirror.min.js' );
|
118 |
define( 'CODEMIRROR_MODE_XML_JS', 'https://d8fd03967nrad.cloudfront.net/libs/codemirror/5.13.2/mode/xml/xml.min.js' );
|
119 |
define( 'CODEMIRROR_MODE_CSS_JS', 'https://d8fd03967nrad.cloudfront.net/libs/codemirror/5.13.2/mode/css/css.min.js' );
|
120 |
+
define( 'AALB_JQUERY_UI_JS', 'https://d8fd03967nrad.cloudfront.net/libs/jQueryUI/1.12.1/jquery-ui.js' );
|
121 |
+
define( 'AALB_JQUERY_UI_CSS', 'https://d8fd03967nrad.cloudfront.net/libs/jQueryUI/1.12.1/themes/ui-lightness/jquery-ui.css' );
|
122 |
|
123 |
//External Styles
|
124 |
define( 'FONT_AWESOME_CSS', 'https://d8fd03967nrad.cloudfront.net/libs/font-awesome/4.5.0/css/font-awesome.min.css' );
|
160 |
define( 'AALB_CRED_CONFIG_GROUP', 'aalb_cred_config_group' );
|
161 |
define( 'AALB_STORE_ID_NAMES', 'aalb_store_id_names' );
|
162 |
define( 'AALB_STORE_IDS', 'aalb_store_ids' );
|
163 |
+
define( 'AALB_CUSTOM_UPLOAD_PATH', 'aalb_custom_upload_path' );
|
164 |
define( 'AALB_SHOW_HTTP_WARNING_ONCE', 'aalb_show_http_warning_once' );
|
165 |
define( 'AALB_PLUGIN_VERSION', 'aalb_plugin_version' );
|
166 |
define( 'AALB_NO_REFERRER_DISABLED', 'aalb_no_referrer_disabled' );
|
167 |
+
define( 'AALB_GEOLITE_DB_EXPIRATION_TIME', 'aalb_geolite_db_expiration_time' );
|
168 |
+
define( 'AALB_GEOLITE_DB_LAST_UPDATED_TIME', 'aalb_geolite_db_last_updated_time' );
|
169 |
|
170 |
//Masking constant
|
171 |
define( 'AALB_AWS_SECRET_KEY_MASK', '••••••••••••••••••••••••••••••••••••••••' );
|
290 |
//Plugin specific URLS
|
291 |
define( 'AALB_SETTINGS_PAGE_URL', admin_url( 'admin.php?page=associates-link-builder-settings' ) );
|
292 |
|
293 |
+
//Maxmind GeoLite2Country DB Download URL
|
294 |
+
define('AALB_GEOLITE_COUNTRY_DB_DOWNLOAD_URL', 'http://geolite.maxmind.com/download/geoip/database/GeoLite2-Country.mmdb.gz');
|
295 |
+
define('AALB_GEOLITE_COUNTRY_DB_DETAILS_URL','https://dev.maxmind.com/geoip/geoip2/geolite2/');
|
296 |
define( 'AALB_NEW_PAGE_TARGET', "_blank" );
|
297 |
|
298 |
define( 'AALB_NEWLINE_SEPARATOR', "\r\n" );
|
299 |
+
define('GEO_TARGETED_LINKS_DELIMITER', "|");
|
300 |
+
|
301 |
+
//Pugin Link Codes
|
302 |
+
define('AALB_DEFAULT_LINK_CODE', "alb");
|
303 |
+
define('AALB_GEO_TARGETED_LINKS_DEFAULT_COUNTRY_LINK_CODE', "al0");
|
304 |
+
define('AALB_GEO_TARGETED_LINKS_REDIRECTED_COUNTRY_LINK_CODE', "al1");
|
305 |
|
306 |
?>
|
admin/aalb_admin.php
CHANGED
@@ -56,7 +56,7 @@ class Aalb_Admin {
|
|
56 |
* Checks if store-ids credentials are not set
|
57 |
*
|
58 |
* @since 1.4.12
|
59 |
-
|
60 |
* @return boolean true if store-id credentials are set
|
61 |
*/
|
62 |
public function is_store_id_credentials_not_set() {
|
@@ -70,8 +70,10 @@ class Aalb_Admin {
|
|
70 |
*
|
71 |
*/
|
72 |
public function aalb_enqueue_styles() {
|
73 |
-
wp_enqueue_style( '
|
74 |
-
wp_enqueue_style( '
|
|
|
|
|
75 |
wp_enqueue_style( 'font_awesome_css', FONT_AWESOME_CSS );
|
76 |
wp_enqueue_style( 'thickbox' );
|
77 |
}
|
@@ -86,7 +88,8 @@ class Aalb_Admin {
|
|
86 |
wp_enqueue_script( 'jquery' );
|
87 |
wp_enqueue_script( 'handlebars_js', HANDLEBARS_JS );
|
88 |
wp_enqueue_script( 'aalb_sha2_js', AALB_SHA2_JS, array(), AALB_PLUGIN_CURRENT_VERSION );
|
89 |
-
wp_enqueue_script( '
|
|
|
90 |
wp_localize_script( 'aalb_admin_js', 'api_pref', $this->get_paapi_pref() );
|
91 |
wp_localize_script( 'aalb_admin_js', 'aalb_strings', $this->get_aalb_strings() );
|
92 |
}
|
@@ -126,7 +129,7 @@ class Aalb_Admin {
|
|
126 |
private function get_aalb_strings() {
|
127 |
return array(
|
128 |
"template_asin_error" => esc_html__( "Only one product can be selected for this template", 'amazon-associates-link-builder' ),
|
129 |
-
"no_asin_selected_error" => esc_html__( "Please select at least one product for
|
130 |
"empty_product_search_bar" => esc_html__( "Please Enter a Product Name ", 'amazon-associates-link-builder' ),
|
131 |
"short_code_create_failure" => esc_html__( "Failed to create Text Link shortcode. Editor has some text selected. Only one item can be selected while adding text links", 'amazon-associates-link-builder' ),
|
132 |
/* translators: %s: Email-id of the support */
|
@@ -140,16 +143,22 @@ class Aalb_Admin {
|
|
140 |
"searchbox_placeholder" => esc_html__( "Enter keyword(s)", 'amazon-associates-link-builder' ),
|
141 |
"search_button_label" => esc_html__( "Search", 'amazon-associates-link-builder' ),
|
142 |
"associate_id_label" => esc_html__( "Tracking IDs", 'amazon-associates-link-builder' ),
|
|
|
|
|
143 |
"marketplace_label" => esc_html__( "Marketplace", 'amazon-associates-link-builder' ),
|
|
|
144 |
"text_shown_during_search" => esc_html__( "Searching relevant products from Amazon", 'amazon-associates-link-builder' ),
|
145 |
"click_to_select_products_label" => esc_html__( "Click to select product(s) to advertise", 'amazon-associates-link-builder' ),
|
146 |
"check_more_on_amazon_text" => esc_html__( "Check more search results on Amazon", 'amazon-associates-link-builder' ),
|
147 |
-
"selected_products_list_label" => esc_html__( "List of Selected Products", 'amazon-associates-link-builder' ),
|
148 |
"text_shown_during_shortcode_creation" => esc_html__( "Creating shortcode. Please wait....", 'amazon-associates-link-builder' ),
|
149 |
"add_shortcode_button_label" => esc_html__( "Add Shortcode", 'amazon-associates-link-builder' ),
|
150 |
"templates_help_content" => esc_html__( "To configure templates, go to Associates Link Builder plugin's Templates page", 'amazon-associates-link-builder' ),
|
151 |
"marketplace_help_content" => esc_html__( "To configure marketplaces, go to Associates Link Builder plugin's Settings page", 'amazon-associates-link-builder' ),
|
152 |
-
"tracking_id_help_content" => esc_html__( "To configure tracking ids, go to Associates Link Builder plugin's Settings page", 'amazon-associates-link-builder' )
|
|
|
|
|
|
|
153 |
);
|
154 |
}
|
155 |
|
@@ -175,6 +184,7 @@ class Aalb_Admin {
|
|
175 |
//Clear all transients for price changes to reflect
|
176 |
$this->helper->clear_cache_for_substring( '' );
|
177 |
$this->helper->clear_expired_transients();
|
|
|
178 |
|
179 |
global $wp_filesystem;
|
180 |
$this->helper->aalb_initialize_wp_filesystem_api();
|
56 |
* Checks if store-ids credentials are not set
|
57 |
*
|
58 |
* @since 1.4.12
|
59 |
+
*
|
60 |
* @return boolean true if store-id credentials are set
|
61 |
*/
|
62 |
public function is_store_id_credentials_not_set() {
|
70 |
*
|
71 |
*/
|
72 |
public function aalb_enqueue_styles() {
|
73 |
+
wp_enqueue_style( 'jquery_ui_css', AALB_JQUERY_UI_CSS );
|
74 |
+
wp_enqueue_style( 'aalb_basics_css', AALB_BASICS_CSS, array( 'jquery_ui_css' ), AALB_PLUGIN_CURRENT_VERSION );
|
75 |
+
wp_enqueue_style( 'aalb_admin_css', AALB_ADMIN_CSS, array( 'jquery_ui_css' ), AALB_PLUGIN_CURRENT_VERSION );
|
76 |
+
|
77 |
wp_enqueue_style( 'font_awesome_css', FONT_AWESOME_CSS );
|
78 |
wp_enqueue_style( 'thickbox' );
|
79 |
}
|
88 |
wp_enqueue_script( 'jquery' );
|
89 |
wp_enqueue_script( 'handlebars_js', HANDLEBARS_JS );
|
90 |
wp_enqueue_script( 'aalb_sha2_js', AALB_SHA2_JS, array(), AALB_PLUGIN_CURRENT_VERSION );
|
91 |
+
wp_enqueue_script( 'jquery_ui', AALB_JQUERY_UI_JS );
|
92 |
+
wp_enqueue_script( 'aalb_admin_js', AALB_ADMIN_JS, array( 'handlebars_js', 'jquery', 'jquery_ui', 'aalb_sha2_js' ), AALB_PLUGIN_CURRENT_VERSION );
|
93 |
wp_localize_script( 'aalb_admin_js', 'api_pref', $this->get_paapi_pref() );
|
94 |
wp_localize_script( 'aalb_admin_js', 'aalb_strings', $this->get_aalb_strings() );
|
95 |
}
|
129 |
private function get_aalb_strings() {
|
130 |
return array(
|
131 |
"template_asin_error" => esc_html__( "Only one product can be selected for this template", 'amazon-associates-link-builder' ),
|
132 |
+
"no_asin_selected_error" => esc_html__( "Please select at least one product for these marketplaces:", 'amazon-associates-link-builder' ),
|
133 |
"empty_product_search_bar" => esc_html__( "Please Enter a Product Name ", 'amazon-associates-link-builder' ),
|
134 |
"short_code_create_failure" => esc_html__( "Failed to create Text Link shortcode. Editor has some text selected. Only one item can be selected while adding text links", 'amazon-associates-link-builder' ),
|
135 |
/* translators: %s: Email-id of the support */
|
143 |
"searchbox_placeholder" => esc_html__( "Enter keyword(s)", 'amazon-associates-link-builder' ),
|
144 |
"search_button_label" => esc_html__( "Search", 'amazon-associates-link-builder' ),
|
145 |
"associate_id_label" => esc_html__( "Tracking IDs", 'amazon-associates-link-builder' ),
|
146 |
+
"search_keyword_label" => esc_html__( "Search Phrase", 'amazon-associates-link-builder' ),
|
147 |
+
"select_associate_id_label" => esc_html__( "Select Tracking Id", 'amazon-associates-link-builder' ),
|
148 |
"marketplace_label" => esc_html__( "Marketplace", 'amazon-associates-link-builder' ),
|
149 |
+
"select_marketplace_label" => esc_html__( "Select Marketplace", 'amazon-associates-link-builder' ),
|
150 |
"text_shown_during_search" => esc_html__( "Searching relevant products from Amazon", 'amazon-associates-link-builder' ),
|
151 |
"click_to_select_products_label" => esc_html__( "Click to select product(s) to advertise", 'amazon-associates-link-builder' ),
|
152 |
"check_more_on_amazon_text" => esc_html__( "Check more search results on Amazon", 'amazon-associates-link-builder' ),
|
153 |
+
"selected_products_list_label" => esc_html__( "List of Selected Products(Maximum: 10)", 'amazon-associates-link-builder' ),
|
154 |
"text_shown_during_shortcode_creation" => esc_html__( "Creating shortcode. Please wait....", 'amazon-associates-link-builder' ),
|
155 |
"add_shortcode_button_label" => esc_html__( "Add Shortcode", 'amazon-associates-link-builder' ),
|
156 |
"templates_help_content" => esc_html__( "To configure templates, go to Associates Link Builder plugin's Templates page", 'amazon-associates-link-builder' ),
|
157 |
"marketplace_help_content" => esc_html__( "To configure marketplaces, go to Associates Link Builder plugin's Settings page", 'amazon-associates-link-builder' ),
|
158 |
+
"tracking_id_help_content" => esc_html__( "To configure tracking ids, go to Associates Link Builder plugin's Settings page", 'amazon-associates-link-builder' ),
|
159 |
+
"searched_products_box_placeholder" => esc_html__( "Please select marketplace from above to show products.", 'amazon-associates-link-builder' ),
|
160 |
+
"selected_products_box_placeholder" => esc_html__( "Please select some products from above.", 'amazon-associates-link-builder' ),
|
161 |
+
"pop_up_new_tab_label" => esc_html__( "Add ProductSet for Country", 'amazon-associates-link-builder' )
|
162 |
);
|
163 |
}
|
164 |
|
184 |
//Clear all transients for price changes to reflect
|
185 |
$this->helper->clear_cache_for_substring( '' );
|
186 |
$this->helper->clear_expired_transients();
|
187 |
+
$this->helper->load_db_keys();
|
188 |
|
189 |
global $wp_filesystem;
|
190 |
$this->helper->aalb_initialize_wp_filesystem_api();
|
admin/css/aalb_admin.css
CHANGED
@@ -24,7 +24,7 @@ input.aalb-admin-input-search {
|
|
24 |
width: 190px;
|
25 |
}
|
26 |
|
27 |
-
|
28 |
box-shadow: 0px 1px 0px rgba(255, 255, 255, 0.4) inset;
|
29 |
background: transparent linear-gradient(to bottom, #F7DFA5, #F0C14B) repeat scroll 0% 0%;
|
30 |
background-color: transparent;
|
@@ -65,7 +65,7 @@ html, body {
|
|
65 |
display: none;
|
66 |
}
|
67 |
|
68 |
-
|
69 |
padding-top: 5px;
|
70 |
height: 50%;
|
71 |
width: 100%;
|
@@ -144,11 +144,10 @@ html, body {
|
|
144 |
padding: 5px;
|
145 |
margin: 0 0 5px;
|
146 |
width: 100%;
|
147 |
-
height:
|
148 |
-moz-box-sizing: border-box;
|
149 |
-webkit-box-sizing: border-box;
|
150 |
box-sizing: border-box;
|
151 |
-
box-shadow: 2px 2px 4px 0 #ccc;
|
152 |
border: 1px solid #CCC;
|
153 |
border-radius: 4px;
|
154 |
cursor: pointer;
|
@@ -226,24 +225,26 @@ and(-webkit-min-device-pixel-ratio: 0) {
|
|
226 |
}
|
227 |
}
|
228 |
}
|
|
|
229 |
/* fix for safari 10.1 */
|
230 |
-
@media not all and (min-resolution
|
231 |
@media {
|
232 |
-
|
233 |
-
|
234 |
-
|
235 |
-
|
236 |
-
|
237 |
-
|
238 |
-
|
239 |
-
|
240 |
-
|
241 |
-
|
242 |
-
|
243 |
-
|
244 |
-
|
245 |
|
246 |
-
}
|
|
|
247 |
|
248 |
.aalb-admin-item-search-items-item-price {
|
249 |
font-size: 1em;
|
@@ -257,70 +258,39 @@ and(-webkit-min-device-pixel-ratio: 0) {
|
|
257 |
border-color: #E77600;
|
258 |
}
|
259 |
|
260 |
-
.aalb-admin-popup-shortocde-wrapper {
|
261 |
-
display: block;
|
262 |
-
width: 100%;
|
263 |
-
margin-top: 10px;
|
264 |
-
padding-top: 5px;
|
265 |
-
}
|
266 |
-
|
267 |
.aalb-admin-popup-shortcode-options {
|
268 |
-
|
269 |
width: 100%;
|
270 |
-
-moz-column-gap: 10px;
|
271 |
-
-webkit-column-gap: 10px;
|
272 |
-
column-gap: 10px;
|
273 |
-
-moz-column-count: 3;
|
274 |
-
-webkit-column-count: 3;
|
275 |
-
column-count: 3;
|
276 |
-
}
|
277 |
-
|
278 |
-
.aalb-admin-popup-shortcode-options label {
|
279 |
-
display: block;
|
280 |
-
text-align: left;
|
281 |
}
|
282 |
|
283 |
.aalb-admin-item-search-templates {
|
284 |
-
|
285 |
-
}
|
286 |
-
|
287 |
-
.aalb-admin-popup-store {
|
288 |
-
width: 100%;
|
289 |
}
|
290 |
|
291 |
-
.aalb-admin-item-search-
|
292 |
-
|
|
|
293 |
}
|
294 |
|
295 |
.aalb-add-shortcode-button {
|
296 |
-
padding-top: 20px;
|
297 |
bottom: 2px;
|
298 |
position: absolute;
|
|
|
|
|
|
|
|
|
299 |
}
|
300 |
|
301 |
-
.aalb-admin-popup-
|
302 |
-
position: relative;
|
303 |
-
}
|
304 |
-
|
305 |
-
#aalb-admin-popup-input-search {
|
306 |
-
position: absolute;
|
307 |
-
width: 100%;
|
308 |
-
left: 0;
|
309 |
-
margin-top: 1%;
|
310 |
-
height: 33px;
|
311 |
-
vertical-align: middle;
|
312 |
border: 1px solid #F0C14B;
|
313 |
-
|
314 |
-
|
315 |
-
#aalb-admin-popup-search-button {
|
316 |
-
position: absolute;
|
317 |
-
right: 0;
|
318 |
}
|
319 |
|
320 |
.aalb-selected {
|
321 |
height: auto;
|
322 |
width: 100%;
|
323 |
-
|
324 |
padding-bottom: 10px;
|
325 |
}
|
326 |
|
@@ -330,6 +300,13 @@ and(-webkit-min-device-pixel-ratio: 0) {
|
|
330 |
padding: 15px 0px;
|
331 |
}
|
332 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
333 |
.aalb-selected-item {
|
334 |
border: 1px solid #eee;
|
335 |
float: left;
|
@@ -403,10 +380,6 @@ and(-webkit-min-device-pixel-ratio: 0) {
|
|
403 |
display: none;
|
404 |
}
|
405 |
|
406 |
-
.aalb-admin-searchbox.aalb-admin-popup-options {
|
407 |
-
margin-bottom: 15px;
|
408 |
-
}
|
409 |
-
|
410 |
#aalb-add-asin-error {
|
411 |
padding: 2px;
|
412 |
display: inline;
|
@@ -420,8 +393,8 @@ and(-webkit-min-device-pixel-ratio: 0) {
|
|
420 |
display: block;
|
421 |
}
|
422 |
|
423 |
-
#aalb_template_names_list
|
424 |
-
width:
|
425 |
}
|
426 |
|
427 |
input.aalb-admin-input-search:focus {
|
@@ -429,9 +402,9 @@ input.aalb-admin-input-search:focus {
|
|
429 |
}
|
430 |
|
431 |
#aalb-add-shortcode-button:disabled {
|
432 |
-
cursor
|
433 |
-
background
|
434 |
-
opacity
|
435 |
}
|
436 |
|
437 |
.aalb-admin-inline.aalb-admin-searchbox:hover .aalb-admin-searchbox-tooltip-text {
|
@@ -460,7 +433,7 @@ input.aalb-admin-input-search:disabled {
|
|
460 |
bottom: 60%;
|
461 |
width: 290px;
|
462 |
box-shadow: 3px 3px 10px 0px rgba(44, 50, 50, 0.76);
|
463 |
-
border: 1px
|
464 |
font-size: 12px;
|
465 |
}
|
466 |
|
@@ -476,4 +449,90 @@ input.aalb-admin-input-search:disabled {
|
|
476 |
|
477 |
.aalb-info-icon::before {
|
478 |
margin-left: 5px;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
479 |
}
|
24 |
width: 190px;
|
25 |
}
|
26 |
|
27 |
+
.aalb-admin-searchbox a.aalb-admin-button-create-amazon-shortcode {
|
28 |
box-shadow: 0px 1px 0px rgba(255, 255, 255, 0.4) inset;
|
29 |
background: transparent linear-gradient(to bottom, #F7DFA5, #F0C14B) repeat scroll 0% 0%;
|
30 |
background-color: transparent;
|
65 |
display: none;
|
66 |
}
|
67 |
|
68 |
+
.aalb-admin-popup-content {
|
69 |
padding-top: 5px;
|
70 |
height: 50%;
|
71 |
width: 100%;
|
144 |
padding: 5px;
|
145 |
margin: 0 0 5px;
|
146 |
width: 100%;
|
147 |
+
height: 80px;
|
148 |
-moz-box-sizing: border-box;
|
149 |
-webkit-box-sizing: border-box;
|
150 |
box-sizing: border-box;
|
|
|
151 |
border: 1px solid #CCC;
|
152 |
border-radius: 4px;
|
153 |
cursor: pointer;
|
225 |
}
|
226 |
}
|
227 |
}
|
228 |
+
|
229 |
/* fix for safari 10.1 */
|
230 |
+
@media not all and (min-resolution: .001dpcm) {
|
231 |
@media {
|
232 |
+
.aalb-admin-item-search-items-item-title {
|
233 |
+
position: initial;
|
234 |
+
margin-left: 2em;
|
235 |
+
margin-right: 0;
|
236 |
+
font-weight: bold;
|
237 |
+
word-break: break-all;
|
238 |
+
font-size: 1em;
|
239 |
+
overflow: hidden;
|
240 |
+
position: relative;
|
241 |
+
line-height: 1.2em;
|
242 |
+
max-height: 2.4em;
|
243 |
+
text-align: justify;
|
244 |
+
}
|
245 |
|
246 |
+
}
|
247 |
+
}
|
248 |
|
249 |
.aalb-admin-item-search-items-item-price {
|
250 |
font-size: 1em;
|
258 |
border-color: #E77600;
|
259 |
}
|
260 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
261 |
.aalb-admin-popup-shortcode-options {
|
262 |
+
display: inline-block;
|
263 |
width: 100%;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
264 |
}
|
265 |
|
266 |
.aalb-admin-item-search-templates {
|
267 |
+
display: inline-block;
|
|
|
|
|
|
|
|
|
268 |
}
|
269 |
|
270 |
+
.aalb-admin-item-search-templates {
|
271 |
+
margin-top: 2px;
|
272 |
+
margin-bottom: 3px;
|
273 |
}
|
274 |
|
275 |
.aalb-add-shortcode-button {
|
|
|
276 |
bottom: 2px;
|
277 |
position: absolute;
|
278 |
+
width: 97%;
|
279 |
+
margin-left: -1%;
|
280 |
+
background: #ffffff;
|
281 |
+
z-index: 1000;
|
282 |
}
|
283 |
|
284 |
+
.aalb-admin-popup-input-search {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
285 |
border: 1px solid #F0C14B;
|
286 |
+
width: 95%;
|
287 |
+
height: 28px;
|
|
|
|
|
|
|
288 |
}
|
289 |
|
290 |
.aalb-selected {
|
291 |
height: auto;
|
292 |
width: 100%;
|
293 |
+
margin-top: 20px;
|
294 |
padding-bottom: 10px;
|
295 |
}
|
296 |
|
300 |
padding: 15px 0px;
|
301 |
}
|
302 |
|
303 |
+
.aalb-selected-placeholder {
|
304 |
+
color: #a9a9a9;
|
305 |
+
margin-left: 17px;
|
306 |
+
margin-top: 8px;
|
307 |
+
font-size: 18px;
|
308 |
+
}
|
309 |
+
|
310 |
.aalb-selected-item {
|
311 |
border: 1px solid #eee;
|
312 |
float: left;
|
380 |
display: none;
|
381 |
}
|
382 |
|
|
|
|
|
|
|
|
|
383 |
#aalb-add-asin-error {
|
384 |
padding: 2px;
|
385 |
display: inline;
|
393 |
display: block;
|
394 |
}
|
395 |
|
396 |
+
#aalb_template_names_list {
|
397 |
+
width: 200px;
|
398 |
}
|
399 |
|
400 |
input.aalb-admin-input-search:focus {
|
402 |
}
|
403 |
|
404 |
#aalb-add-shortcode-button:disabled {
|
405 |
+
cursor: not-allowed;
|
406 |
+
background: transparent;
|
407 |
+
opacity: 0.2;
|
408 |
}
|
409 |
|
410 |
.aalb-admin-inline.aalb-admin-searchbox:hover .aalb-admin-searchbox-tooltip-text {
|
433 |
bottom: 60%;
|
434 |
width: 290px;
|
435 |
box-shadow: 3px 3px 10px 0px rgba(44, 50, 50, 0.76);
|
436 |
+
border: 1px #000000;
|
437 |
font-size: 12px;
|
438 |
}
|
439 |
|
449 |
|
450 |
.aalb-info-icon::before {
|
451 |
margin-left: 5px;
|
452 |
+
}
|
453 |
+
|
454 |
+
#aalb-tabs li .ui-icon-close {
|
455 |
+
float: left;
|
456 |
+
margin: 0.4em 0.2em 0 0;
|
457 |
+
cursor: pointer;
|
458 |
+
}
|
459 |
+
|
460 |
+
.aalb-pop-up-tabs {
|
461 |
+
width: 100%;
|
462 |
+
border: 1px solid #e78f08;
|
463 |
+
}
|
464 |
+
|
465 |
+
#aalb-tabs {
|
466 |
+
padding: 0;
|
467 |
+
}
|
468 |
+
|
469 |
+
.aalb-pop-up-tabs ul {
|
470 |
+
background: #ededed;
|
471 |
+
padding: 0;
|
472 |
+
border-top: 0;
|
473 |
+
border-left: 0;
|
474 |
+
border-right: 0;
|
475 |
+
}
|
476 |
+
|
477 |
+
.aalb-pop-up-tabs ul li {
|
478 |
+
background: #ededed;
|
479 |
+
border: 0.1px solid #ededed;
|
480 |
+
}
|
481 |
+
|
482 |
+
#aalb-tabs .ui-state-active {
|
483 |
+
background: #ffffff !important;
|
484 |
+
border-bottom: 0;
|
485 |
+
}
|
486 |
+
|
487 |
+
#aalb-add-marketplace-tab {
|
488 |
+
size: 70px;
|
489 |
+
cursor: pointer;
|
490 |
+
}
|
491 |
+
|
492 |
+
.aalb-templates-label {
|
493 |
+
vertical-align: middle;
|
494 |
+
}
|
495 |
+
|
496 |
+
.aalb-admin-popup-fieldset {
|
497 |
+
border: 1px solid #778899;
|
498 |
+
border-radius: 5px;
|
499 |
+
min-height: 150px;
|
500 |
+
padding-right: 4px;
|
501 |
+
padding-left: 4px;
|
502 |
+
}
|
503 |
+
|
504 |
+
.aalb-admin-popup-legend {
|
505 |
+
margin-left: 5px;
|
506 |
+
}
|
507 |
+
|
508 |
+
.aalb-admin-popup-placeholder {
|
509 |
+
margin-top: 15px;
|
510 |
+
}
|
511 |
+
|
512 |
+
.aalb-admin-popup-more-results {
|
513 |
+
margin-bottom: 3px;
|
514 |
+
}
|
515 |
+
|
516 |
+
.aalb-table-cell {
|
517 |
+
display: table-cell;
|
518 |
+
}
|
519 |
+
|
520 |
+
.aalb-table {
|
521 |
+
display: table;
|
522 |
+
}
|
523 |
+
|
524 |
+
.aalb-table-row {
|
525 |
+
display: table-row;
|
526 |
+
}
|
527 |
+
|
528 |
+
.aalb-width-25 {
|
529 |
+
width: 25%
|
530 |
+
}
|
531 |
+
|
532 |
+
.aalb-width-40 {
|
533 |
+
width: 40%
|
534 |
+
}
|
535 |
+
|
536 |
+
.aalb-width-10 {
|
537 |
+
width: 10%
|
538 |
}
|
admin/css/aalb_credentials.css
CHANGED
@@ -22,7 +22,7 @@ td.aalb-settings-input-column {
|
|
22 |
width: 90%;
|
23 |
}
|
24 |
|
25 |
-
.aalb-
|
26 |
font-size: 110%;
|
27 |
}
|
28 |
|
@@ -70,4 +70,8 @@ a.aalb-remove-marketplace {
|
|
70 |
|
71 |
#aalb-remove-marketplace-confirmation-container {
|
72 |
display: none;
|
|
|
|
|
|
|
|
|
73 |
}
|
22 |
width: 90%;
|
23 |
}
|
24 |
|
25 |
+
.aalb-font-size-110 {
|
26 |
font-size: 110%;
|
27 |
}
|
28 |
|
70 |
|
71 |
#aalb-remove-marketplace-confirmation-container {
|
72 |
display: none;
|
73 |
+
}
|
74 |
+
|
75 |
+
.aalb-is-upload-in-plugin-column {
|
76 |
+
width: 58%;
|
77 |
}
|
admin/js/aalb_admin.js
CHANGED
@@ -10,572 +10,839 @@
|
|
10 |
and limitations under the License.
|
11 |
*/
|
12 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
13 |
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
|
|
|
|
20 |
|
21 |
-
var
|
22 |
-
|
23 |
-
|
24 |
-
var link_id = "";
|
25 |
-
var AALB_SHORTCODE_AMAZON_LINK = api_pref.AALB_SHORTCODE_AMAZON_LINK; //constant value from server side is reused here
|
26 |
-
var AALB_SHORTCODE_AMAZON_TEXT = api_pref.AALB_SHORTCODE_AMAZON_TEXT;
|
27 |
-
var IS_PAAPI_CREDENTIALS_NOT_SET = api_pref.IS_PAAPI_CREDENTIALS_NOT_SET;
|
28 |
-
var IS_STORE_ID_CREDENTIALS_NOT_SET = api_pref.IS_STORE_ID_CREDENTIALS_NOT_SET;
|
29 |
-
//object used as map to check duplicate asin selected by admin
|
30 |
-
var asin_map = {};
|
31 |
-
var SINGLE_ASIN_TEMPLATE = {
|
32 |
-
PriceLink : 'true',
|
33 |
-
ProductAd : 'true',
|
34 |
-
ProductLink: 'true'
|
35 |
-
};
|
36 |
-
|
37 |
-
var aalb_marketplace_store_id_mapping = jQuery.parseJSON( api_pref.marketplace_store_id_map );
|
38 |
-
var aalb_default_marketplace = api_pref.default_marketplace;
|
39 |
-
var aalb_default_store_id_list = aalb_marketplace_store_id_mapping ? aalb_marketplace_store_id_mapping[ aalb_default_marketplace ] : [];
|
40 |
-
var aalb_search_pop_up_context = {
|
41 |
-
"ad_template_label" : aalb_strings.ad_template_label,
|
42 |
-
"searchbox_placeholder" : aalb_strings.searchbox_placeholder,
|
43 |
-
"search_button_label" : aalb_strings.search_button_label,
|
44 |
-
"associate_id_label" : aalb_strings.associate_id_label,
|
45 |
-
"marketplace_label" : aalb_strings.marketplace_label,
|
46 |
-
"text_shown_during_search" : aalb_strings.text_shown_during_search,
|
47 |
-
"click_to_select_products_label" : aalb_strings.click_to_select_products_label,
|
48 |
-
"check_more_on_amazon_text" : aalb_strings.check_more_on_amazon_text,
|
49 |
-
"selected_products_list_label" : aalb_strings.selected_products_list_label,
|
50 |
-
"text_shown_during_shortcode_creation": aalb_strings.text_shown_during_shortcode_creation,
|
51 |
-
"add_shortcode_button_label" : aalb_strings.add_shortcode_button_label,
|
52 |
-
"templates_help_content" : aalb_strings.templates_help_content,
|
53 |
-
"marketplace_help_content" : aalb_strings.marketplace_help_content,
|
54 |
-
"tracking_id_help_content" : aalb_strings.tracking_id_help_content,
|
55 |
-
"templates_list" : jQuery.parseJSON( api_pref.templates_list ),
|
56 |
-
"default_template" : api_pref.default_template,
|
57 |
-
"marketplace_list" : aalb_marketplace_store_id_mapping ? Object.keys( aalb_marketplace_store_id_mapping ) : "",
|
58 |
-
"default_marketplace" : aalb_default_marketplace,
|
59 |
-
"default_store_id_list" : aalb_default_store_id_list,
|
60 |
-
"default_store_id" : aalb_default_store_id_list ? aalb_default_store_id_list[ 0 ] : ""
|
61 |
-
};
|
62 |
-
|
63 |
-
jQuery( document ).ready( function() {
|
64 |
-
aalb_load_search_pop_up();
|
65 |
-
// http://stackoverflow.com/questions/5557641/how-can-i-reset-div-to-its-original-state-after-it-has-been-modified-by-java
|
66 |
-
jQuery( "#aalb-admin-popup-content" ).data( 'old-state', jQuery( "#aalb-admin-popup-content" ).html() );
|
67 |
-
|
68 |
-
//Load the search result template
|
69 |
-
var aalb_hbs_admin_items_search_source = jQuery( "#aalb-hbs-admin-items-search" ).html();
|
70 |
-
if( aalb_hbs_admin_items_search_source != null ) {
|
71 |
-
template = Handlebars.compile( aalb_hbs_admin_items_search_source );
|
72 |
-
}
|
73 |
-
|
74 |
-
|
75 |
-
//Resize thickbox on window resize
|
76 |
-
jQuery( window ).on( 'resize', resize_thickbox );
|
77 |
-
|
78 |
-
//Storing the tb_remove function of Thickbox.js
|
79 |
-
var old_tb_remove = window.tb_remove;
|
80 |
-
|
81 |
-
//Custom tb_remove function
|
82 |
-
tb_remove = function() {
|
83 |
-
aalb_reset_add_short_button_and_error_warnings();
|
84 |
-
//re initializing asin_map on window remove
|
85 |
-
asin_map = {};
|
86 |
-
//call actual tb_remove
|
87 |
-
old_tb_remove();
|
88 |
-
//custom actions to execute
|
89 |
-
jQuery( ".aalb-selected-item" ).each( function() {
|
90 |
-
aalb_remove_selected_item( this );
|
91 |
-
} );
|
92 |
};
|
93 |
|
94 |
-
|
95 |
-
|
96 |
-
|
97 |
-
|
98 |
-
|
99 |
-
|
100 |
-
var aalb_add_short_code_button = jQuery( '#aalb-add-shortcode-button' );
|
101 |
-
//checking for user selected template and number of products selected by user
|
102 |
-
if( ( selected_products > 1 ) && SINGLE_ASIN_TEMPLATE[ user_selected_template ] ) {
|
103 |
-
jQuery( '#aalb-add-template-asin-error' ).text( aalb_strings.template_asin_error );
|
104 |
-
aalb_add_short_code_button.prop( 'disabled', true );
|
105 |
|
106 |
-
|
107 |
-
|
108 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
109 |
}
|
110 |
} );
|
111 |
|
112 |
/**
|
113 |
-
*
|
114 |
-
|
115 |
-
|
116 |
-
|
117 |
-
|
118 |
-
|
119 |
-
|
120 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
121 |
|
122 |
-
|
123 |
-
|
124 |
-
|
125 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
126 |
}
|
127 |
-
} );
|
128 |
|
129 |
-
/**
|
130 |
-
|
131 |
-
|
132 |
-
|
133 |
-
|
134 |
-
|
135 |
-
|
136 |
-
|
137 |
-
|
138 |
-
|
139 |
-
|
140 |
-
|
141 |
-
var aalb_search_pop_up_html = aalb_search_pop_up_template( aalb_search_pop_up_context );
|
142 |
-
jQuery( "#aalb-admin-popup-container" ).prepend( aalb_search_pop_up_html );
|
143 |
}
|
144 |
-
}
|
145 |
|
146 |
-
/**
|
147 |
-
|
148 |
-
|
149 |
-
|
150 |
-
|
151 |
-
|
152 |
-
|
153 |
-
|
154 |
-
|
155 |
-
|
156 |
-
|
157 |
-
|
158 |
-
|
159 |
-
/**
|
160 |
-
* Ensure a button click on a return key press event
|
161 |
-
* Caller element and button_to_click_class needs to be part of a container having class name aalb-admin-searchbox.
|
162 |
-
*
|
163 |
-
* @param HTML_DOM_EVENT event OnKeyPress event
|
164 |
-
* @param string button_to_click_class name of a button to click on a return key press event
|
165 |
-
* @param HTMLElement caller_element caller of this function
|
166 |
-
*
|
167 |
-
* @since 1.4.3 added param caller_element and modified param button_to_click_class
|
168 |
-
*/
|
169 |
-
function aalb_submit_event( event, button_to_click_class, caller_element ) {
|
170 |
-
//Code for the RETURN key is 13
|
171 |
-
if ( event.keyCode == 13 ) {
|
172 |
-
event.preventDefault();
|
173 |
-
//Find button to click in the container and invoke a click event.
|
174 |
-
var container_search_box = jQuery( caller_element ).closest( ".aalb-admin-searchbox" );
|
175 |
-
jQuery( container_search_box ).find( '.' + button_to_click_class ).click();
|
176 |
-
}
|
177 |
-
}
|
178 |
-
|
179 |
-
/**
|
180 |
-
* Removes the selected HTML element
|
181 |
-
*
|
182 |
-
* @param HTMLElement element HTML element to be removed.
|
183 |
-
*/
|
184 |
-
function aalb_remove_selected_item( element ) {
|
185 |
-
jQuery( element ).remove();
|
186 |
-
}
|
187 |
-
|
188 |
-
/**
|
189 |
-
* Display pop up thickbox
|
190 |
-
*
|
191 |
-
* @param HTMLElement search_button reference to the clicked button element to get to the keyword of interest.
|
192 |
-
*
|
193 |
-
* @since 1.4.3 added param search_button
|
194 |
-
*/
|
195 |
-
function aalb_admin_show_create_shortcode_popup( search_button ) {
|
196 |
-
// Retain content from old state of pop content primarily input text of search box.
|
197 |
-
// http://stackoverflow.com/questions/5557641/how-can-i-reset-div-to-its-original-state-after-it-has-been-modified-by-java
|
198 |
-
jQuery( "#aalb-admin-popup-content" ).html( jQuery( "#aalb-admin-popup-content" ).data( 'old-state' ) );
|
199 |
|
200 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
201 |
|
202 |
-
|
203 |
-
|
204 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
205 |
}
|
206 |
|
207 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
208 |
|
209 |
-
|
210 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
211 |
|
212 |
-
|
213 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
214 |
|
215 |
-
|
216 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
217 |
|
218 |
-
|
219 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
220 |
|
221 |
-
|
222 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
223 |
|
224 |
-
|
225 |
-
|
226 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
227 |
}
|
228 |
-
}
|
229 |
|
230 |
-
/**
|
231 |
-
|
232 |
-
|
233 |
-
|
234 |
-
|
235 |
-
|
236 |
-
|
237 |
-
|
238 |
-
|
239 |
-
|
240 |
-
|
241 |
-
}
|
242 |
-
|
243 |
-
|
244 |
-
|
245 |
-
|
246 |
-
|
247 |
-
|
248 |
-
|
249 |
-
|
250 |
-
|
251 |
-
|
252 |
-
|
253 |
-
|
254 |
-
|
255 |
-
|
256 |
-
|
257 |
-
|
258 |
-
|
259 |
-
|
260 |
-
|
261 |
-
|
262 |
-
|
263 |
-
|
264 |
-
|
265 |
-
|
266 |
-
|
267 |
-
|
268 |
-
|
269 |
-
|
270 |
-
|
271 |
-
|
272 |
-
|
273 |
-
|
274 |
-
|
275 |
-
|
276 |
-
|
277 |
-
|
278 |
-
|
279 |
-
|
280 |
-
|
281 |
-
|
282 |
-
|
283 |
-
|
284 |
-
|
285 |
-
|
286 |
-
|
287 |
-
|
288 |
-
|
289 |
-
|
290 |
-
|
291 |
-
|
292 |
-
|
293 |
-
|
294 |
-
|
295 |
-
|
296 |
-
|
297 |
-
|
298 |
-
|
299 |
-
|
300 |
-
|
301 |
-
|
302 |
-
|
303 |
-
|
304 |
-
|
305 |
-
|
306 |
-
|
307 |
-
|
308 |
-
|
309 |
-
|
310 |
-
|
311 |
-
|
312 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
313 |
} );
|
314 |
-
|
|
|
|
|
|
|
|
|
|
|
315 |
} else {
|
316 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
317 |
}
|
318 |
-
}
|
319 |
-
|
320 |
-
|
321 |
-
|
322 |
-
|
323 |
-
|
324 |
-
|
325 |
-
}
|
326 |
-
|
327 |
-
|
328 |
-
|
329 |
-
|
330 |
-
|
331 |
-
|
332 |
-
|
333 |
-
|
334 |
-
|
335 |
-
|
336 |
-
|
337 |
-
|
|
|
|
|
|
|
338 |
} else {
|
339 |
-
|
340 |
-
|
341 |
}
|
342 |
} else {
|
343 |
-
|
344 |
-
aalb_add_shortcode( AALB_SHORTCODE_AMAZON_LINK );
|
345 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
346 |
} else {
|
347 |
-
|
|
|
348 |
}
|
349 |
-
|
350 |
-
}
|
351 |
|
352 |
-
/**
|
353 |
-
|
354 |
-
|
355 |
-
|
356 |
-
|
357 |
-
|
358 |
-
|
359 |
-
|
360 |
-
|
361 |
-
|
362 |
-
|
363 |
-
|
364 |
-
|
365 |
-
|
366 |
-
|
367 |
-
|
368 |
-
|
369 |
-
|
370 |
-
|
371 |
-
|
372 |
-
|
373 |
-
|
374 |
-
|
375 |
-
|
376 |
-
"name": AALB_SHORTCODE_AMAZON_TEXT,
|
377 |
-
"params": {
|
378 |
-
"asin": selectedAsins,
|
379 |
-
"text": aalb_get_selected_text_from_editor(),
|
380 |
-
"template": selectedTemplate,
|
381 |
-
"store": selectedStore,
|
382 |
-
"marketplace": selectedMarketplace,
|
383 |
}
|
384 |
-
};
|
385 |
-
} else {
|
386 |
-
console.log( "Invalid Shortcode provided!" );
|
387 |
-
return;
|
388 |
-
}
|
389 |
-
aalb_get_link_id( shortcodeJson );
|
390 |
-
}
|
391 |
-
|
392 |
-
/**
|
393 |
-
* Handler function when the Add Shortcode button is clicked
|
394 |
-
* and link id is retrieved.
|
395 |
-
*
|
396 |
-
* @param Object shortcodeJson Object describing the shortcode
|
397 |
-
*/
|
398 |
-
function aalb_add_shortcode_click_handler( shortcodeJson ) {
|
399 |
-
aalb_create_shortcode( shortcodeJson );
|
400 |
-
tb_remove();
|
401 |
-
}
|
402 |
-
|
403 |
-
/**
|
404 |
-
* Builds shortcode from given JSON
|
405 |
-
*
|
406 |
-
* @param Object shortcodeJson Object describing the shortcode
|
407 |
-
*
|
408 |
-
* @return String returns the Shortcode String
|
409 |
-
*/
|
410 |
-
function buildShortcode( shortcodeJson ) {
|
411 |
-
var shortcodeParamsString = "";
|
412 |
-
for ( var shortcodeParam in shortcodeJson.params ) {
|
413 |
-
if ( shortcodeJson.params.hasOwnProperty( shortcodeParam ) ) {
|
414 |
-
shortcodeParamsString += " " + shortcodeParam + "='" + shortcodeJson.params[ shortcodeParam ] + "'";
|
415 |
}
|
|
|
|
|
|
|
416 |
}
|
417 |
|
418 |
-
|
419 |
-
|
420 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
421 |
|
422 |
-
/**
|
423 |
-
|
424 |
-
|
425 |
-
|
426 |
-
|
427 |
-
function
|
428 |
-
|
429 |
-
|
430 |
-
} ).success( function( data ) {
|
431 |
-
link_id = data;
|
432 |
-
} ).fail( function() {
|
433 |
-
link_id = "";
|
434 |
-
} ).always( function() {
|
435 |
-
shortcodeJson.params.link_id = link_id;
|
436 |
-
jQuery( "#aalb-add-shortcode-alert" ).fadeTo( "slow", 0 );
|
437 |
-
aalb_add_shortcode_click_handler( shortcodeJson );
|
438 |
-
} );
|
439 |
-
}
|
440 |
|
441 |
-
/**
|
442 |
-
|
443 |
-
|
444 |
-
|
445 |
-
|
446 |
-
function
|
447 |
-
|
448 |
-
|
449 |
-
|
450 |
-
|
451 |
-
|
452 |
-
*
|
453 |
-
* @return String Selected Asins
|
454 |
-
*/
|
455 |
-
function aalb_get_selected_asins() {
|
456 |
-
var selectedAsins = "";
|
457 |
-
jQuery( ".aalb-selected-item" ).each( function() {
|
458 |
-
selectedAsins += jQuery( this ).attr( "data-asin" ) + ",";
|
459 |
-
} );
|
460 |
-
return selectedAsins.slice( 0, -1 );
|
461 |
-
}
|
462 |
|
463 |
-
/**
|
464 |
-
|
465 |
-
|
466 |
-
|
467 |
-
|
468 |
-
function
|
469 |
-
|
470 |
-
|
471 |
-
|
472 |
-
|
473 |
-
|
474 |
-
|
475 |
-
|
476 |
-
|
477 |
-
|
478 |
-
|
479 |
-
|
480 |
-
|
481 |
-
|
482 |
-
|
483 |
-
|
484 |
-
|
485 |
-
|
486 |
-
|
487 |
-
|
488 |
-
|
489 |
-
|
490 |
-
|
491 |
-
|
492 |
-
|
493 |
-
|
494 |
-
|
495 |
-
|
496 |
-
|
497 |
-
|
498 |
-
|
499 |
-
|
500 |
-
function aalb_get_selected_text_from_editor() {
|
501 |
-
if ( tinyMCE.activeEditor ) {
|
502 |
-
return tinyMCE.activeEditor.selection.getContent( { format: "text" } );
|
503 |
-
} else {
|
504 |
-
return null;
|
505 |
-
}
|
506 |
-
}
|
507 |
-
|
508 |
-
/**
|
509 |
-
* To check the validity of ASIN based on different actions
|
510 |
-
*
|
511 |
-
* @param String Asin ASIN of Product selected by Admin
|
512 |
-
* @param String action Admin action either 'add' or 'remove'
|
513 |
-
*
|
514 |
-
* @return Boolean true if single ASIN is selected or false on multiple ASIN selected
|
515 |
-
**/
|
516 |
-
function aalb_validate_asins( asin, action ) {
|
517 |
-
var count_of_selected_items = jQuery( '.aalb-selected-item' ).length;
|
518 |
-
var selected_template = aalb_get_selected_template();
|
519 |
-
var aalb_add_short_code_button = jQuery( '#aalb-add-shortcode-button' );
|
520 |
-
var max_allowed_items;
|
521 |
-
if( action === 'add' ) {
|
522 |
-
max_allowed_items = 0;
|
523 |
-
|
524 |
-
//if ASIN is already present no need to add the ASIN
|
525 |
-
if( !asin_map[ asin ] ) {
|
526 |
-
asin_map[ asin ] = 1;
|
527 |
} else {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
528 |
return false;
|
529 |
}
|
530 |
-
|
531 |
-
|
532 |
-
|
533 |
-
|
534 |
-
|
535 |
-
|
536 |
-
|
537 |
-
|
538 |
-
|
539 |
-
|
540 |
-
|
541 |
-
|
542 |
-
|
543 |
-
|
544 |
-
|
545 |
-
|
546 |
-
|
547 |
-
|
548 |
-
|
549 |
-
|
550 |
-
|
551 |
-
|
552 |
-
|
553 |
-
|
554 |
-
|
555 |
-
|
556 |
-
|
557 |
-
|
558 |
-
|
559 |
-
|
560 |
-
|
561 |
-
|
562 |
-
|
563 |
-
|
564 |
-
|
565 |
-
|
566 |
-
|
567 |
-
|
568 |
-
|
569 |
-
|
570 |
-
|
571 |
-
|
572 |
-
|
573 |
-
|
574 |
-
|
575 |
-
|
576 |
-
|
577 |
-
|
578 |
-
|
579 |
-
|
580 |
-
|
581 |
-
}
|
10 |
and limitations under the License.
|
11 |
*/
|
12 |
|
13 |
+
//ToDo: Create the JSON in contexts in PHP instead of creating here and pass directly to Handlebars
|
14 |
+
//ToDO: Deep-dive to find out if event bubbling with single target is a better option and instead of having a common parent for event delgation with capturing
|
15 |
+
|
16 |
+
(function( $ ) {
|
17 |
+
var SELECT_DROPDOWN_VALUE = "no-selection";
|
18 |
+
var SINGLE_ASIN_TEMPLATE = {
|
19 |
+
PriceLink : 'true',
|
20 |
+
ProductAd : 'true',
|
21 |
+
ProductLink: 'true'
|
22 |
+
};
|
23 |
+
var AALB_SHORTCODE_AMAZON_LINK = api_pref.AALB_SHORTCODE_AMAZON_LINK;
|
24 |
+
var AALB_SHORTCODE_AMAZON_TEXT = api_pref.AALB_SHORTCODE_AMAZON_TEXT;
|
25 |
+
var IS_PAAPI_CREDENTIALS_NOT_SET = api_pref.IS_PAAPI_CREDENTIALS_NOT_SET;
|
26 |
+
var IS_STORE_ID_CREDENTIALS_NOT_SET = api_pref.IS_STORE_ID_CREDENTIALS_NOT_SET;
|
27 |
+
var MAX_ALLOWED_ASINS_IN_SELECTION = 10;
|
28 |
+
var ENTER_KEY_CODE = 13;
|
29 |
+
var tb_remove = "";
|
30 |
+
var template;
|
31 |
+
var link_id = "";
|
32 |
+
var marketplace_store_id_mapping = $.parseJSON( api_pref.marketplace_store_id_map );
|
33 |
+
var default_marketplace = api_pref.default_marketplace;
|
34 |
+
var default_store_id_list = marketplace_store_id_mapping[ default_marketplace ] || [];
|
35 |
+
var default_store_id = default_store_id_list[ 0 ] || "";
|
36 |
+
var tabs = "";
|
37 |
+
//tab_counter will be appended to the new tab's id(#aalb_tab2) and will be incremented in code on every new tab addition. 1 is already assigned to default marketplace tab
|
38 |
+
var tab_counter = 2;
|
39 |
+
var marketplace_pop_up_json = [];
|
40 |
+
var keyword_for_search = "";
|
41 |
+
|
42 |
+
var meta_box_tab_context = {
|
43 |
+
"searchbox_placeholder" : aalb_strings.searchbox_placeholder,
|
44 |
+
"search_button_label" : aalb_strings.search_button_label,
|
45 |
+
"associate_id_label" : aalb_strings.associate_id_label,
|
46 |
+
"select_associate_id_label" : aalb_strings.select_associate_id_label,
|
47 |
+
"marketplace_label" : aalb_strings.marketplace_label,
|
48 |
+
"search_keyword_label" : aalb_strings.search_keyword_label,
|
49 |
+
"select_marketplace_label" : aalb_strings.select_marketplace_label,
|
50 |
+
"selected_products_list_label" : aalb_strings.selected_products_list_label,
|
51 |
+
"click_to_select_products_label" : aalb_strings.click_to_select_products_label,
|
52 |
+
"text_shown_during_shortcode_creation": aalb_strings.text_shown_during_shortcode_creation,
|
53 |
+
"marketplace_help_content" : aalb_strings.marketplace_help_content,
|
54 |
+
"tracking_id_help_content" : aalb_strings.tracking_id_help_content,
|
55 |
+
"searched_products_box_placeholder" : aalb_strings.searched_products_box_placeholder,
|
56 |
+
"selected_products_box_placeholder" : aalb_strings.selected_products_box_placeholder,
|
57 |
+
"marketplace_list" : marketplace_store_id_mapping ? Object.keys( marketplace_store_id_mapping ) : "",
|
58 |
+
"default_marketplace" : default_marketplace,
|
59 |
+
"default_store_id_list" : default_store_id_list,
|
60 |
+
"default_store_id" : default_store_id
|
61 |
+
};
|
62 |
|
63 |
+
var search_pop_up_context = {
|
64 |
+
"meta_box_tab_context" : meta_box_tab_context,
|
65 |
+
"add_shortcode_button_label": aalb_strings.add_shortcode_button_label,
|
66 |
+
"ad_template_label" : aalb_strings.ad_template_label,
|
67 |
+
"templates_help_content" : aalb_strings.templates_help_content,
|
68 |
+
"templates_list" : $.parseJSON( api_pref.templates_list ),
|
69 |
+
"default_template" : api_pref.default_template
|
70 |
+
};
|
71 |
|
72 |
+
var admin_pop_up_content_context = {
|
73 |
+
"text_shown_during_search" : aalb_strings.text_shown_during_search,
|
74 |
+
"check_more_on_amazon_text": aalb_strings.check_more_on_amazon_text
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
75 |
};
|
76 |
|
77 |
+
$( function() {
|
78 |
+
//Load the search result template
|
79 |
+
var hbs_admin_items_search_source = $( "#aalb-hbs-admin-items-search" ).html();
|
80 |
+
if( hbs_admin_items_search_source != null ) {
|
81 |
+
template = Handlebars.compile( hbs_admin_items_search_source );
|
82 |
+
}
|
|
|
|
|
|
|
|
|
|
|
83 |
|
84 |
+
//Resize thickbox on window resize
|
85 |
+
$( window ).on( 'resize', resize_thickbox );
|
86 |
+
|
87 |
+
//Storing the tb_remove function of Thickbox.js
|
88 |
+
var old_tb_remove = window.tb_remove;
|
89 |
+
//Custom tb_remove function
|
90 |
+
tb_remove = function() {
|
91 |
+
reset_add_short_button_and_error_warnings();
|
92 |
+
//call actual tb_remove
|
93 |
+
old_tb_remove();
|
94 |
+
//Emptying the array
|
95 |
+
marketplace_pop_up_json = [];
|
96 |
+
tab_counter = 2;
|
97 |
+
};
|
98 |
+
|
99 |
+
/**
|
100 |
+
* Bind template change using delegated events so that the binding remains when complete pop-up is removed(childs of #aalb-admin-pop-up) & added again
|
101 |
+
*
|
102 |
+
**/
|
103 |
+
$( '#aalb-admin-pop-up' ).on( 'change', '#aalb_template_names_list', function() {
|
104 |
+
var aalb_add_short_code_button = $( '#aalb-add-shortcode-button' );
|
105 |
+
//checking for user selected template and number of products selected by user
|
106 |
+
if( does_any_marketplace_contains_multiple_asin() && SINGLE_ASIN_TEMPLATE[ get_selected_template() ] ) {
|
107 |
+
$( '#aalb-add-template-asin-error' ).text( aalb_strings.template_asin_error );
|
108 |
+
aalb_add_short_code_button.prop( 'disabled', true );
|
109 |
+
} else {
|
110 |
+
aalb_add_short_code_button.prop( 'disabled', false );
|
111 |
+
$( '#aalb-add-template-asin-error' ).text( '' );
|
112 |
+
}
|
113 |
+
} );
|
114 |
+
|
115 |
+
//Bind focus event with dropdown of marketplaces
|
116 |
+
$( "#aalb-admin-pop-up" ).on( 'focus', '.aalb-marketplace-names-list', function() {
|
117 |
+
$( this ).data( 'prev-val', $( this ).val() );
|
118 |
+
} );
|
119 |
+
|
120 |
+
/**
|
121 |
+
* To fill the store-ids as per markeplace in Associate Id section on changing marketplace
|
122 |
+
**/
|
123 |
+
$( '#aalb-admin-pop-up' ).on( 'change', '.aalb-marketplace-names-list', function() {
|
124 |
+
var prev_marketplace = $( this ).data( 'prev-val' );
|
125 |
+
var new_marketplace = $( this ).val();
|
126 |
+
if( !marketplace_pop_up_json[ new_marketplace ] ) {
|
127 |
+
var pop_up_container = $( this ).closest( '.aalb-pop-up-container' );
|
128 |
+
var store_id_dropdown = pop_up_container.find( '.aalb-admin-popup-store-id' );
|
129 |
+
reset_store_id_list( store_id_dropdown, marketplace_store_id_mapping[ new_marketplace ] );
|
130 |
+
if( prev_marketplace !== null ) {
|
131 |
+
delete marketplace_pop_up_json[ prev_marketplace ];
|
132 |
+
pop_up_container.find( '.aalb-selected-item' ).remove();
|
133 |
+
} else {
|
134 |
+
add_close_button( pop_up_container );
|
135 |
+
add_tab();
|
136 |
+
}
|
137 |
+
add_entry_in_marketplace_json( new_marketplace, marketplace_store_id_mapping[ new_marketplace ][ 0 ] );
|
138 |
+
change_header_of_tab( pop_up_container, new_marketplace );
|
139 |
+
admin_popup_search_items( pop_up_container );
|
140 |
+
} else {
|
141 |
+
$( this ).val( prev_marketplace || SELECT_DROPDOWN_VALUE );
|
142 |
+
}
|
143 |
+
$( this ).blur();
|
144 |
+
} );
|
145 |
+
|
146 |
+
// Close icon: removing the tab on click
|
147 |
+
$( '#aalb-admin-pop-up' ).on( "click", "span.ui-icon-close", function() {
|
148 |
+
var marketplace = $( this ).siblings( "a" ).text();
|
149 |
+
var panelId = $( this ).closest( "li" ).remove().attr( "aria-controls" );
|
150 |
+
$( "#" + panelId ).remove();
|
151 |
+
|
152 |
+
delete marketplace_pop_up_json[ marketplace ];
|
153 |
+
tabs.tabs( "refresh" );
|
154 |
+
} );
|
155 |
+
|
156 |
+
//Binding on change event of store-id list
|
157 |
+
$( '#aalb-admin-pop-up' ).on( 'change', '.aalb-admin-popup-store-id', function() {
|
158 |
+
var pop_up_container = $( this ).closest( '.aalb-pop-up-container' );
|
159 |
+
marketplace_pop_up_json[ pop_up_container.find( '.aalb-marketplace-names-list' ).val() ].store_id = $( this ).val();
|
160 |
+
} );
|
161 |
+
|
162 |
+
//Binding click event with Search button in editor search box
|
163 |
+
$( '.aalb-admin-button-create-amazon-shortcode' ).on( 'click', function() {
|
164 |
+
admin_show_create_shortcode_popup( this );
|
165 |
+
} );
|
166 |
+
|
167 |
+
//Binding click event with Search button in search pop-up
|
168 |
+
$( '#aalb-admin-pop-up' ).on( 'click', '.aalb-admin-popup-search-button', function() {
|
169 |
+
admin_popup_search_items( $( this ).closest( '.aalb-pop-up-container' ) );
|
170 |
+
} );
|
171 |
+
|
172 |
+
//Binding click event with ASIN removal from selcted item in search pop-up
|
173 |
+
$( '#aalb-admin-pop-up' ).on( 'click', '.aalb-selected-item', function() {
|
174 |
+
var aalb_selected_box = $( this ).closest( '.aalb-selected' );
|
175 |
+
remove_asin( this );
|
176 |
+
if( aalb_selected_box.find( '.aalb-selected-item' ).length === 0 ) {
|
177 |
+
aalb_selected_box.find( '.aalb-admin-popup-placeholder' ).show();
|
178 |
+
}
|
179 |
+
} );
|
180 |
+
|
181 |
+
//Binding click event with ASIN addition from search item in search pop-up
|
182 |
+
$( '#aalb-admin-pop-up' ).on( "click", '.aalb-admin-item-search-items-item', function() {
|
183 |
+
var data_asin = $( this ).attr( "data-asin" );
|
184 |
+
var marketplace = $( this ).closest( '.aalb-pop-up-container' ).find( '.aalb-marketplace-names-list' ).val();
|
185 |
+
if( !validate_asin_addition( data_asin, marketplace ) ) {
|
186 |
+
return;
|
187 |
+
}
|
188 |
+
marketplace_pop_up_json[ marketplace ].selected_asin.push( data_asin );
|
189 |
+
var aalb_selected_box = $( this ).closest( '.aalb-pop-up-container' ).find( '.aalb-selected' );
|
190 |
+
aalb_selected_box.find( '.aalb-admin-popup-placeholder' ).hide();
|
191 |
+
aalb_selected_box.append( create_selected_asin_html( data_asin, this ) );
|
192 |
+
} );
|
193 |
+
|
194 |
+
//Binding enter event with Search button in search pop-up
|
195 |
+
$( '.aalb-admin-input-search' ).on( 'keypress', function( event ) {
|
196 |
+
if( event.keyCode === ENTER_KEY_CODE ) {
|
197 |
+
event.preventDefault();
|
198 |
+
admin_show_create_shortcode_popup( $( this ).siblings( '.aalb-admin-button-create-amazon-shortcode' ) );
|
199 |
+
}
|
200 |
+
} );
|
201 |
+
|
202 |
+
//Binding Enter event with Search button in editor search box
|
203 |
+
$( '#aalb-admin-pop-up' ).on( 'keypress', '.aalb-admin-popup-input-search', function( event ) {
|
204 |
+
if( event.keyCode === ENTER_KEY_CODE ) {
|
205 |
+
event.preventDefault();
|
206 |
+
admin_popup_search_items( $( this ).closest( '.aalb-pop-up-container' ) );
|
207 |
+
}
|
208 |
+
} );
|
209 |
+
|
210 |
+
if( IS_PAAPI_CREDENTIALS_NOT_SET ) {
|
211 |
+
disable_editor_search( aalb_strings.paapi_credentials_not_set );
|
212 |
+
} else if( IS_STORE_ID_CREDENTIALS_NOT_SET ) {
|
213 |
+
disable_editor_search( aalb_strings.store_id_credentials_not_set );
|
214 |
}
|
215 |
} );
|
216 |
|
217 |
/**
|
218 |
+
* Returns elements not present in second array but in first
|
219 |
+
*
|
220 |
+
* @param Array arr1
|
221 |
+
* @param Array arr2
|
222 |
+
*
|
223 |
+
* @since 1.5.0
|
224 |
+
*
|
225 |
+
* @return Array difference between two arrays
|
226 |
+
*/
|
227 |
+
function get_diff_between_two_arrays( arr1, arr2 ) {
|
228 |
+
return arr1.filter( function( a ) {
|
229 |
+
return arr2.indexOf( a ) == -1;
|
230 |
+
} );
|
231 |
+
}
|
232 |
|
233 |
+
/**
|
234 |
+
* Resets marketplace drop down with the values provided in new_store_id_list
|
235 |
+
*
|
236 |
+
* @param HTMLElement marketplace_dropdown
|
237 |
+
* @param Array marketplace_list
|
238 |
+
* @param String selected_marketplace
|
239 |
+
*
|
240 |
+
* @since 1.5.0
|
241 |
+
*/
|
242 |
+
function reset_marketplace_dropwdown( marketplace_dropdown, new_marketplace_list, selected_marketplace ) {
|
243 |
+
marketplace_dropdown.empty();
|
244 |
+
marketplace_dropdown.append( '<option value="' + SELECT_DROPDOWN_VALUE + '" disabled="disabled">' + meta_box_tab_context.select_marketplace_label + '</option>' );
|
245 |
+
if( selected_marketplace ) {
|
246 |
+
marketplace_dropdown.append( '<option>' + selected_marketplace + '</option>' );
|
247 |
+
}
|
248 |
+
$.each( new_marketplace_list, function( key, marketplace ) {
|
249 |
+
marketplace_dropdown.append( '<option>' + marketplace + '</option>' );
|
250 |
+
} );
|
251 |
+
marketplace_dropdown.val( selected_marketplace || SELECT_DROPDOWN_VALUE );
|
252 |
}
|
|
|
253 |
|
254 |
+
/**
|
255 |
+
* Adds a close button to the tab
|
256 |
+
*
|
257 |
+
* @param jQueryObject pop_up_container The pop up container in which all content in a tab resides
|
258 |
+
*
|
259 |
+
* @since 1.5.0
|
260 |
+
*
|
261 |
+
*/
|
262 |
+
function add_close_button( pop_up_container ) {
|
263 |
+
var close_icon = "<span class='ui-icon ui-icon-close' role='presentation'></span>";
|
264 |
+
var url = '#' + pop_up_container.parent().closest( 'div' ).attr( "id" );
|
265 |
+
$( 'a[href=' + url + ']' ).after( close_icon );
|
|
|
|
|
266 |
}
|
|
|
267 |
|
268 |
+
/**
|
269 |
+
* Change header of tab with marketplace name
|
270 |
+
*
|
271 |
+
* @param jQueryObject pop_up_container The pop up container in which all content in a tab resides
|
272 |
+
* @param String marketplace
|
273 |
+
*
|
274 |
+
* @since 1.5.0
|
275 |
+
*
|
276 |
+
*/
|
277 |
+
function change_header_of_tab( pop_up_container, marketplace ) {
|
278 |
+
var url = '#' + pop_up_container.parent().closest( 'div' ).attr( "id" );
|
279 |
+
$( 'a[href=' + url + ']' ).text( marketplace );
|
280 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
281 |
|
282 |
+
/**
|
283 |
+
* Checks if any marketplace contains more than one asin selected
|
284 |
+
*
|
285 |
+
* @return bool does any marketplace contains multiple asins
|
286 |
+
*
|
287 |
+
* @since 1.5.0
|
288 |
+
*/
|
289 |
+
function does_any_marketplace_contains_multiple_asin() {
|
290 |
+
return Object.keys( marketplace_pop_up_json ).some( function( marketplace ) {
|
291 |
+
return marketplace_pop_up_json[ marketplace ].selected_asin.length > 1;
|
292 |
+
} );
|
293 |
+
}
|
294 |
+
|
295 |
+
/**
|
296 |
+
* Checks if any marketplace exists for which no asin is selected
|
297 |
+
*
|
298 |
+
* @param String marketplace
|
299 |
+
*
|
300 |
+
* @return Array marketplaces list for which no asin is selected
|
301 |
+
*
|
302 |
+
* @since 1.5.0
|
303 |
+
*/
|
304 |
+
function get_marketplaces_containing_no_asin_selected() {
|
305 |
+
return Object.keys( marketplace_pop_up_json ).filter( function( marketplace ) {
|
306 |
+
return marketplace_pop_up_json[ marketplace ].selected_asin.length === 0;
|
307 |
+
} );
|
308 |
+
}
|
309 |
|
310 |
+
/**
|
311 |
+
* Creates HTML for the selected ASIN from search results
|
312 |
+
*
|
313 |
+
* @param String data_asin ASIN to be added
|
314 |
+
* @param jQueryObject element The search item clicked in search results to be added to selected ASIN list
|
315 |
+
*
|
316 |
+
* @return HTMLElement HTML of selected ASIN
|
317 |
+
*
|
318 |
+
* @since 1.5.0
|
319 |
+
*/
|
320 |
+
function create_selected_asin_html( data_asin, element ) {
|
321 |
+
var productImage = $( element ).find( "img" ).attr( "src" );
|
322 |
+
var productTitle = $( element ).find( "div.aalb-admin-item-search-items-item-title" ).text();
|
323 |
+
var productPrice = $( element ).find( "div.aalb-admin-item-search-items-item-price" ).text();
|
324 |
+
//ToDO: See if handlebars can be leveraged here like in credentials.js
|
325 |
+
var selectedAsinHTML = '<div class="aalb-selected-item"';
|
326 |
+
selectedAsinHTML += ' data-asin="' + data_asin + '">';
|
327 |
+
selectedAsinHTML += '<div class="aalb-selected-item-img-wrap"><span class="aalb-selected-item-close">×</span>';
|
328 |
+
selectedAsinHTML += '<img class="aalb-selected-item-img" src="' + productImage + '"></img></div>';
|
329 |
+
selectedAsinHTML += '<div class="aalb-selected-item-title"><h3>' + productTitle + '</h3>';
|
330 |
+
selectedAsinHTML += '<p class="aalb-selected-item-price">' + productPrice + '<br></p></div>';
|
331 |
+
return selectedAsinHTML;
|
332 |
}
|
333 |
|
334 |
+
/**
|
335 |
+
* Add json object with marketplace as key
|
336 |
+
*
|
337 |
+
* @param String marketplace
|
338 |
+
* @param String store_id
|
339 |
+
*
|
340 |
+
*
|
341 |
+
* @since 1.5.0
|
342 |
+
*/
|
343 |
+
function add_entry_in_marketplace_json( marketplace, store_id ) {
|
344 |
+
marketplace_pop_up_json[ marketplace ] = {
|
345 |
+
"store_id" : store_id,
|
346 |
+
"selected_asin": []
|
347 |
+
};
|
348 |
+
}
|
349 |
|
350 |
+
/**
|
351 |
+
* Resets store-id drop down with the values provided in new_store_id_list
|
352 |
+
*
|
353 |
+
* @param HTMLElement store_id_dropdown
|
354 |
+
* @param Array new_store_id_list
|
355 |
+
*
|
356 |
+
* @since 1.5.0
|
357 |
+
*/
|
358 |
+
function reset_store_id_list( store_id_dropdown, new_store_id_list ) {
|
359 |
+
store_id_dropdown.empty();
|
360 |
+
store_id_dropdown.append( '<option value="' + SELECT_DROPDOWN_VALUE + '" disabled="disabled">' + meta_box_tab_context.select_associate_id_label + '</option>' );
|
361 |
+
$.each( new_store_id_list, function( key, store_id ) {
|
362 |
+
store_id_dropdown.append( '<option>' + store_id + '</option>' );
|
363 |
+
} );
|
364 |
+
store_id_dropdown.val( new_store_id_list[ 0 ] );
|
365 |
+
}
|
366 |
|
367 |
+
/**
|
368 |
+
* Insert Loading search results spinner and content
|
369 |
+
*
|
370 |
+
* @param jQueryObject pop_up_container The pop up container in which all content in a tab resides
|
371 |
+
*
|
372 |
+
* @since 1.5.0
|
373 |
+
*/
|
374 |
+
function insert_search_loading_box( pop_up_container ) {
|
375 |
+
delete_stale_pop_up_content( pop_up_container );
|
376 |
+
var admin_pop_up_content_hbs = $( "#aalb-admin-pop-up-content-hbs" ).html();
|
377 |
+
if( admin_pop_up_content_hbs != null ) {
|
378 |
+
var admin_pop_up_content_template = Handlebars.compile( admin_pop_up_content_hbs );
|
379 |
+
var admin_pop_up_content_html = admin_pop_up_content_template( admin_pop_up_content_context );
|
380 |
+
pop_up_container.find( ".aalb-admin-popup-search-result .aalb-admin-popup-placeholder" ).remove();
|
381 |
+
pop_up_container.find( ".aalb-admin-popup-search-result" ).append( admin_pop_up_content_html );
|
382 |
+
}
|
383 |
+
}
|
384 |
|
385 |
+
/**
|
386 |
+
* Delete existing content in pop-up container
|
387 |
+
*
|
388 |
+
* @param jQueryObject pop_up_container The pop up container in which all content in a tab resides
|
389 |
+
*
|
390 |
+
* @since 1.5.0
|
391 |
+
*/
|
392 |
+
function delete_stale_pop_up_content( pop_up_container ) {
|
393 |
+
var pop_up_content = pop_up_container.find( '.aalb-admin-popup-content' );
|
394 |
+
if( pop_up_content.length !== 0 ) {
|
395 |
+
pop_up_content.remove();
|
396 |
+
}
|
397 |
+
}
|
398 |
|
399 |
+
/**
|
400 |
+
* Adds a new jQuery tab
|
401 |
+
*
|
402 |
+
* @since 1.5.0
|
403 |
+
*/
|
404 |
+
function add_tab() {
|
405 |
+
var id = "aalb_tab" + tab_counter++;
|
406 |
+
var tab_template = "<li><a href=#" + id + ">" + aalb_strings.pop_up_new_tab_label + "</a></li>";
|
407 |
+
tabs.find( ".ui-tabs-nav" ).append( tab_template );
|
408 |
+
tabs.append( "<div id='" + id + "'>" );
|
409 |
+
tabs.tabs( "refresh" );
|
410 |
+
|
411 |
+
var aalb_meta_box_tab_hbs = $( "#aalb-metabox-tab-hbs" ).html();
|
412 |
+
if( aalb_meta_box_tab_hbs != null ) {
|
413 |
+
var aalb_meta_box_template = Handlebars.compile( aalb_meta_box_tab_hbs );
|
414 |
+
var aalb_meta_box_html = aalb_meta_box_template( meta_box_tab_context );
|
415 |
+
$( 'div#aalb-tabs' + ' #' + id ).append( aalb_meta_box_html );
|
416 |
+
}
|
417 |
+
$( '#' + id + ' .aalb-marketplace-names-list' ).val( SELECT_DROPDOWN_VALUE );
|
418 |
+
$( '#' + id + ' .aalb-admin-popup-store-id' ).empty();
|
419 |
+
$( '#' + id + ' .aalb-admin-popup-store-id' ).append( '<option>' + meta_box_tab_context.select_associate_id_label + '</option>' );
|
420 |
+
$( '#' + id + ' .aalb-marketplace-names-list' ).val( SELECT_DROPDOWN_VALUE );
|
421 |
+
$( '#' + id + ' .aalb-admin-popup-input-search' ).val( keyword_for_search );
|
422 |
+
}
|
423 |
|
424 |
+
/**
|
425 |
+
* Load search pop-up box
|
426 |
+
*
|
427 |
+
* @since 1.4.12
|
428 |
+
*/
|
429 |
+
function load_search_pop_up() {
|
430 |
+
var aalb_meta_box_tab_partial = $( "#aalb-metabox-tab-hbs" ).html();
|
431 |
+
if( aalb_meta_box_tab_partial != null ) {
|
432 |
+
Handlebars.registerPartial( "aalb-metabox-tab-hbs", aalb_meta_box_tab_partial );
|
433 |
+
|
434 |
+
Handlebars.registerHelper( 'selected', function( current_option, selected_option ) {
|
435 |
+
return (current_option === selected_option) ? 'selected' : '';
|
436 |
+
} );
|
437 |
+
var aalb_search_pop_up_hbs = $( "#aalb-search-pop-up-hbs" ).html();
|
438 |
+
if( aalb_search_pop_up_hbs != null ) {
|
439 |
+
var aalb_search_pop_up_template = Handlebars.compile( aalb_search_pop_up_hbs );
|
440 |
+
var aalb_search_pop_up_html = aalb_search_pop_up_template( search_pop_up_context );
|
441 |
+
$( "#aalb-admin-pop-up" ).prepend( aalb_search_pop_up_html );
|
442 |
+
load_jQuery_tabs();
|
443 |
+
}
|
444 |
+
}
|
445 |
+
}
|
446 |
|
447 |
+
/**
|
448 |
+
* Load JQuery tabs
|
449 |
+
*
|
450 |
+
* @since 1.5.0
|
451 |
+
*/
|
452 |
+
function load_jQuery_tabs() {
|
453 |
+
tabs = $( "#aalb-tabs" ).tabs();
|
454 |
+
tabs.css( {
|
455 |
+
'overflow': 'auto'
|
456 |
+
} );
|
457 |
+
$( '#aalb-tabs' ).removeClass( 'ui-widget-content' );
|
458 |
+
//Binding the event here as this tab is created dynamically on every click of search button from editor
|
459 |
+
$( "#aalb-tabs" ).tabs( {
|
460 |
+
activate: function( event, ui ) {
|
461 |
+
//Below fetches the id of active tab & find marketplace dropdown element in that active tab
|
462 |
+
var maketplace_dropdown = $( '#' + ui.newPanel.attr( 'id' ) ).find( '.aalb-marketplace-names-list' );
|
463 |
+
var not_set_marketplace = get_diff_between_two_arrays( Object.keys( marketplace_store_id_mapping ), Object.keys( marketplace_pop_up_json ) );
|
464 |
+
reset_marketplace_dropwdown( maketplace_dropdown, not_set_marketplace, maketplace_dropdown.val() );
|
465 |
+
}
|
466 |
+
} );
|
467 |
}
|
|
|
468 |
|
469 |
+
/**
|
470 |
+
* Resizing thickbox on change in window dimensions
|
471 |
+
* Setting a max width and height of 1280x800 px for readability and to lessen distortion
|
472 |
+
*/
|
473 |
+
function resize_thickbox() {
|
474 |
+
var tb_width = Math.min( 1280, 0.6 * $( window ).width() );
|
475 |
+
var tb_height = Math.min( 800, 0.9 * $( window ).height() );
|
476 |
+
$( document ).find( '#TB_ajaxContent' ).width( tb_width - 35 ).height( tb_height - 90 );
|
477 |
+
$( document ).find( '#TB_window' ).width( tb_width ).height( tb_height );
|
478 |
+
$( document ).find( '#TB_window' ).css( { marginLeft: '-' + tb_width / 2 + 'px', top: tb_height / 12 } );
|
479 |
+
$( document ).find( '#TB_window' ).removeClass();
|
480 |
+
}
|
481 |
+
|
482 |
+
/**
|
483 |
+
* Display pop up thickbox
|
484 |
+
*
|
485 |
+
* @param HTMLElement search_button reference to the clicked button element to get to the keyword of interest.
|
486 |
+
*
|
487 |
+
* @since 1.4.3 added param search_button
|
488 |
+
*/
|
489 |
+
function admin_show_create_shortcode_popup( search_button ) {
|
490 |
+
var editor_selected_text = get_selected_text_from_editor();
|
491 |
+
|
492 |
+
var editor_search_box_input = $( search_button ).siblings( ".aalb-admin-input-search" );
|
493 |
+
|
494 |
+
var search_keywords = editor_selected_text || editor_search_box_input.val();
|
495 |
+
if( search_keywords ) {
|
496 |
+
keyword_for_search = search_keywords;
|
497 |
+
$( '#aalb-search-pop-up' ).remove();
|
498 |
+
tab_counter = 2;
|
499 |
+
load_search_pop_up();
|
500 |
+
if( editor_selected_text ) {
|
501 |
+
//Make ProductLink template as a default choice of template when some text is selected.
|
502 |
+
$( "#aalb_template_names_list" ).val( 'ProductLink' );
|
503 |
+
}
|
504 |
+
|
505 |
+
var pop_up_container = $( '#aalb-tabs' ).find( '.aalb-pop-up-container' );
|
506 |
+
add_tab();
|
507 |
+
insert_search_loading_box( pop_up_container );
|
508 |
+
add_entry_in_marketplace_json( default_marketplace, default_store_id );
|
509 |
+
tb_show( aalb_strings.add_aalb_shortcode, '#TB_inline?inlineId=aalb-admin-popup-container', false );
|
510 |
+
resize_thickbox();
|
511 |
+
|
512 |
+
// Getting the ItemSearch results
|
513 |
+
admin_get_item_search_items( search_keywords, pop_up_container );
|
514 |
+
|
515 |
+
//Setting search input of shortcode popup with search keyword.
|
516 |
+
$( ".aalb-admin-popup-input-search" ).attr( 'value', search_keywords );
|
517 |
+
|
518 |
+
//Setting editor search input with search keyword.
|
519 |
+
editor_search_box_input.attr( 'value', search_keywords );
|
520 |
+
|
521 |
+
} else {
|
522 |
+
alert( aalb_strings.empty_product_search_bar );
|
523 |
+
editor_search_box_input.focus();
|
524 |
+
}
|
525 |
+
}
|
526 |
+
|
527 |
+
/**
|
528 |
+
* Search items from within the thickbox
|
529 |
+
*
|
530 |
+
* @param jQueryObject pop_up_container The pop up container in which all content in a tab resides
|
531 |
+
*
|
532 |
+
*/
|
533 |
+
function admin_popup_search_items( pop_up_container ) {
|
534 |
+
var keywords = $( pop_up_container ).find( '.aalb-admin-popup-input-search' ).val();
|
535 |
+
if( keywords ) {
|
536 |
+
insert_search_loading_box( pop_up_container );
|
537 |
+
// Getting the ItemSearch results
|
538 |
+
admin_get_item_search_items( keywords, pop_up_container );
|
539 |
+
pop_up_container.find( ".aalb-admin-popup-input-search" ).attr( 'value', keywords );
|
540 |
+
} else {
|
541 |
+
alert( aalb_strings.empty_product_search_bar );
|
542 |
+
$( ".aalb-admin-popup-input-search" ).focus();
|
543 |
+
}
|
544 |
+
}
|
545 |
+
|
546 |
+
/**
|
547 |
+
* Search items for the keywords and display it in the pop up thickbox
|
548 |
+
*
|
549 |
+
* @param String keywords Items to search for.
|
550 |
+
* @param jQueryObject pop_up_container The pop up container in which all content in a tab resides
|
551 |
+
*/
|
552 |
+
function admin_get_item_search_items( keywords, pop_up_container ) {
|
553 |
+
$.ajax( {
|
554 |
+
url : api_pref.ajax_url,
|
555 |
+
type : 'GET',
|
556 |
+
data : {
|
557 |
+
"action" : api_pref.action,
|
558 |
+
"item_search_nonce": api_pref.item_search_nonce,
|
559 |
+
"keywords" : keywords,
|
560 |
+
"marketplace" : $( pop_up_container ).find( '.aalb-marketplace-names-list' ).val(),
|
561 |
+
"store_id" : $( pop_up_container ).find( '.aalb-admin-popup-store-id' ).val()
|
562 |
+
},
|
563 |
+
success: function( xml ) {
|
564 |
+
var items_xml = $( xml ).find( "Item" );
|
565 |
+
if( items_xml.length > 0 ) {
|
566 |
+
var items = [];
|
567 |
+
var i = 0;
|
568 |
+
items_xml.each( function() {
|
569 |
+
//selecting maximum of max_search_result_items elements
|
570 |
+
if( i < api_pref.max_search_result_items ) {
|
571 |
+
var item = {};
|
572 |
+
item.asin = $( this ).find( "ASIN" ).text();
|
573 |
+
item.title = $( this ).find( "Title" ).text();
|
574 |
+
item.image = $( this ).find( "LargeImage" ).first().find( "URL" ).text();
|
575 |
+
item.price = $( this ).find( "LowestNewPrice" ).find( "FormattedPrice" ).text();
|
576 |
+
items.push( item );
|
577 |
+
}
|
578 |
+
i++;
|
579 |
} );
|
580 |
+
|
581 |
+
var html = template( items );
|
582 |
+
$( pop_up_container ).find( ".aalb-admin-item-search-items" ).append( html );
|
583 |
+
$( pop_up_container ).find( ".aalb-admin-popup-more-results" ).attr( 'href', $( xml ).find( "MoreSearchResultsUrl" ).text() );
|
584 |
+
$( pop_up_container ).find( ".aalb-admin-item-search-loading" ).slideUp( "slow" );
|
585 |
+
$( pop_up_container ).find( ".aalb-admin-item-search" ).fadeIn( "slow" );
|
586 |
} else {
|
587 |
+
var errors_xml = $( xml ).find( "Error" );
|
588 |
+
if( errors_xml.length > 0 ) {
|
589 |
+
var htmlerror = "";
|
590 |
+
errors_xml.each( function() {
|
591 |
+
htmlerror += $( this ).find( "Message" ).text() + "<br>";
|
592 |
+
} );
|
593 |
+
$( pop_up_container ).find( ".aalb-admin-item-search-loading" ).html( htmlerror );
|
594 |
+
} else {
|
595 |
+
$( pop_up_container ).find( ".aalb-admin-item-search-loading" ).html( xml );
|
596 |
+
}
|
597 |
}
|
598 |
+
},
|
599 |
+
error : function( request, status ) {
|
600 |
+
if( status === "timeout" ) {
|
601 |
+
$( pop_up_container ).find( ".aalb-admin-item-search-loading" ).html( aalb_strings.paapi_request_timeout_error );
|
602 |
+
} else {
|
603 |
+
$( pop_up_container ).find( ".aalb-admin-item-search-loading" ).html( "An Error Occurred : " + status );
|
604 |
+
}
|
605 |
+
},
|
606 |
+
timeout: api_pref.WORDPRESS_REQUEST_TIMEOUT
|
607 |
+
} );
|
608 |
+
|
609 |
+
$( "#aalb-add-shortcode-button" ).unbind().click( function() {
|
610 |
+
var selected = get_selected_text_from_editor();
|
611 |
+
var non_asin_selected_marketplaces = get_marketplaces_containing_no_asin_selected();
|
612 |
+
if( non_asin_selected_marketplaces.length === 0 ) {
|
613 |
+
if( selected ) {
|
614 |
+
/* If there was some text selected in the wordpress post editor. Implies amazon_textlink */
|
615 |
+
if( does_any_marketplace_contains_multiple_asin() ) {
|
616 |
+
alert( aalb_strings.short_code_create_failure );
|
617 |
+
} else {
|
618 |
+
$( "#aalb-add-shortcode-alert" ).fadeTo( "fast", 1 );
|
619 |
+
add_shortcode( AALB_SHORTCODE_AMAZON_TEXT );
|
620 |
+
}
|
621 |
} else {
|
622 |
+
$( "#aalb-add-shortcode-alert" ).fadeTo( "fast", 1 );
|
623 |
+
add_shortcode( AALB_SHORTCODE_AMAZON_LINK );
|
624 |
}
|
625 |
} else {
|
626 |
+
alert( aalb_strings.no_asin_selected_error + non_asin_selected_marketplaces.toString() );
|
|
|
627 |
}
|
628 |
+
} );
|
629 |
+
}
|
630 |
+
|
631 |
+
/**
|
632 |
+
* Adds the given shortcode to the editor
|
633 |
+
*
|
634 |
+
* @param String Shortcode type to be added
|
635 |
+
*/
|
636 |
+
function add_shortcode( shortcodeName ) {
|
637 |
+
var shortcodeJson;
|
638 |
+
var selectedAsins = get_selected_asins();
|
639 |
+
var selectedTemplate = get_selected_template();
|
640 |
+
var selectedStore = get_selected_store();
|
641 |
+
var selectedMarketplace = get_selected_marketplace();
|
642 |
+
|
643 |
+
if( shortcodeName === AALB_SHORTCODE_AMAZON_LINK ) {
|
644 |
+
shortcodeJson = {
|
645 |
+
"name" : AALB_SHORTCODE_AMAZON_LINK,
|
646 |
+
"params": {
|
647 |
+
"asins" : selectedAsins,
|
648 |
+
"template" : selectedTemplate,
|
649 |
+
"store" : selectedStore,
|
650 |
+
"marketplace": selectedMarketplace
|
651 |
+
}
|
652 |
+
};
|
653 |
+
} else if( shortcodeName === AALB_SHORTCODE_AMAZON_TEXT ) {
|
654 |
+
shortcodeJson = {
|
655 |
+
"name" : AALB_SHORTCODE_AMAZON_TEXT,
|
656 |
+
"params": {
|
657 |
+
"asin" : selectedAsins,
|
658 |
+
"text" : get_selected_text_from_editor(),
|
659 |
+
"template" : selectedTemplate,
|
660 |
+
"store" : selectedStore,
|
661 |
+
"marketplace": selectedMarketplace
|
662 |
+
}
|
663 |
+
};
|
664 |
} else {
|
665 |
+
console.log( "Invalid Shortcode provided!" );
|
666 |
+
return;
|
667 |
}
|
668 |
+
get_link_id( shortcodeJson );
|
669 |
+
}
|
670 |
|
671 |
+
/**
|
672 |
+
* Handler function when the Add Shortcode button is clicked
|
673 |
+
* and link id is retrieved.
|
674 |
+
*
|
675 |
+
* @param Object shortcodeJson Object describing the shortcode
|
676 |
+
*/
|
677 |
+
function add_shortcode_click_handler( shortcodeJson ) {
|
678 |
+
create_shortcode( shortcodeJson );
|
679 |
+
tb_remove();
|
680 |
+
}
|
681 |
+
|
682 |
+
/**
|
683 |
+
* Builds shortcode from given JSON
|
684 |
+
*
|
685 |
+
* @param Object shortcodeJson Object describing the shortcode
|
686 |
+
*
|
687 |
+
* @return String returns the Shortcode String
|
688 |
+
*/
|
689 |
+
function buildShortcode( shortcodeJson ) {
|
690 |
+
var shortcodeParamsString = "";
|
691 |
+
var shortcodeParam = "";
|
692 |
+
for( shortcodeParam in shortcodeJson.params ) {
|
693 |
+
if( shortcodeJson.params.hasOwnProperty( shortcodeParam ) ) {
|
694 |
+
shortcodeParamsString += " " + shortcodeParam + "='" + shortcodeJson.params[ shortcodeParam ] + "'";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
695 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
696 |
}
|
697 |
+
|
698 |
+
var shortcodeString = "[" + shortcodeJson.name + shortcodeParamsString + "]";
|
699 |
+
return shortcodeString;
|
700 |
}
|
701 |
|
702 |
+
/**
|
703 |
+
* Get unique link id whenever add shortcode button is clicked
|
704 |
+
*
|
705 |
+
* @param Object shortcodeJson Object describing the shortcode
|
706 |
+
*/
|
707 |
+
function get_link_id( shortcodeJson ) {
|
708 |
+
$.post( api_pref.ajax_url, {
|
709 |
+
"action": "get_link_code", "shortcode_name": shortcodeJson.name, "shortcode_params": shortcodeJson.params
|
710 |
+
} ).success( function( data ) {
|
711 |
+
link_id = data;
|
712 |
+
} ).fail( function() {
|
713 |
+
link_id = "";
|
714 |
+
} ).always( function() {
|
715 |
+
shortcodeJson.params.link_id = link_id;
|
716 |
+
$( "#aalb-add-shortcode-alert" ).fadeTo( "slow", 0 );
|
717 |
+
add_shortcode_click_handler( shortcodeJson );
|
718 |
+
} );
|
719 |
+
}
|
720 |
|
721 |
+
/**
|
722 |
+
* Add the shortcode to the display editor
|
723 |
+
*
|
724 |
+
* @param Object shortcodeJson Object describing the shortcode
|
725 |
+
*/
|
726 |
+
function create_shortcode( shortcodeJson ) {
|
727 |
+
send_to_editor( buildShortcode( shortcodeJson ) );
|
728 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
729 |
|
730 |
+
/**
|
731 |
+
* Gets the selected Asins
|
732 |
+
*
|
733 |
+
* @return String Selected Asins
|
734 |
+
*/
|
735 |
+
function get_selected_asins() {
|
736 |
+
//Map first creates an Array of ASINs(every array element contains comma separated asins of one marketplace) & later separate these array elements by join
|
737 |
+
return Object.values( marketplace_pop_up_json ).map( function( marketplace ) {
|
738 |
+
return marketplace.selected_asin.toString();
|
739 |
+
} ).join( '|' );
|
740 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
741 |
|
742 |
+
/**
|
743 |
+
* Get the selected Template style
|
744 |
+
*
|
745 |
+
* @return String Selected Template style
|
746 |
+
*/
|
747 |
+
function get_selected_template() {
|
748 |
+
return $( '#aalb_template_names_list' ).val();
|
749 |
+
}
|
750 |
+
|
751 |
+
/**
|
752 |
+
* Get the selected associate tag
|
753 |
+
*
|
754 |
+
* @return String Selected Associate tag
|
755 |
+
*/
|
756 |
+
function get_selected_store() {
|
757 |
+
return Object.values( marketplace_pop_up_json ).map( function( marketplace ) {
|
758 |
+
return marketplace.store_id;
|
759 |
+
} ).join( '|' );
|
760 |
+
}
|
761 |
+
|
762 |
+
/**
|
763 |
+
* Get the selected marketplace
|
764 |
+
*
|
765 |
+
* @return String Selected Marketplace bar spearted list
|
766 |
+
*/
|
767 |
+
function get_selected_marketplace() {
|
768 |
+
return Object.keys( marketplace_pop_up_json ).join( '|' );
|
769 |
+
}
|
770 |
+
|
771 |
+
/**
|
772 |
+
* Get selected text from the editor.
|
773 |
+
*
|
774 |
+
* @return String Selected text from the wordpress post editor.
|
775 |
+
*/
|
776 |
+
function get_selected_text_from_editor() {
|
777 |
+
if( tinyMCE.activeEditor ) {
|
778 |
+
return tinyMCE.activeEditor.selection.getContent( { format: "text" } );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
779 |
} else {
|
780 |
+
return null;
|
781 |
+
}
|
782 |
+
}
|
783 |
+
|
784 |
+
/**
|
785 |
+
* To check the validity of ASIN based on different actions
|
786 |
+
*
|
787 |
+
* @param String Asin ASIN of Product selected by Admin
|
788 |
+
* @param String marketplace Marketplace for which this ASIN is being added
|
789 |
+
*
|
790 |
+
* @return bool true
|
791 |
+
*
|
792 |
+
* @since 1.5.0
|
793 |
+
**/
|
794 |
+
function validate_asin_addition( asin, marketplace ) {
|
795 |
+
if( marketplace_pop_up_json[ marketplace ].selected_asin.indexOf( asin ) != -1 || marketplace_pop_up_json[ marketplace ].selected_asin.length === MAX_ALLOWED_ASINS_IN_SELECTION ) {
|
796 |
return false;
|
797 |
}
|
798 |
+
|
799 |
+
var selected_template = get_selected_template();
|
800 |
+
if( SINGLE_ASIN_TEMPLATE[ selected_template ] && marketplace_pop_up_json[ marketplace ].selected_asin.length === 1 ) {
|
801 |
+
$( '#aalb-add-template-asin-error' ).text( aalb_strings.template_asin_error );
|
802 |
+
$( '#aalb-add-shortcode-button' ).prop( 'disabled', true );
|
803 |
+
}
|
804 |
+
return true;
|
805 |
+
// reset_add_short_button_and_error_warnings();
|
806 |
+
}
|
807 |
+
|
808 |
+
/**
|
809 |
+
* To remove ASIN element from list
|
810 |
+
*
|
811 |
+
* @param element HTMLDivElement
|
812 |
+
**/
|
813 |
+
function remove_asin( element ) {
|
814 |
+
var removed_product_asin = element.getAttribute( 'data-asin' );
|
815 |
+
var marketplace = $( element ).closest( '.aalb-pop-up-container' ).find( '.aalb-marketplace-names-list' ).val();
|
816 |
+
$( element ).remove();
|
817 |
+
marketplace_pop_up_json[ marketplace ].selected_asin.splice( marketplace_pop_up_json[ marketplace ].selected_asin.indexOf( removed_product_asin ), 1 );
|
818 |
+
if( SINGLE_ASIN_TEMPLATE[ get_selected_template() ] && !does_any_marketplace_contains_multiple_asin() ) {
|
819 |
+
reset_add_short_button_and_error_warnings();
|
820 |
+
}
|
821 |
+
}
|
822 |
+
|
823 |
+
/**
|
824 |
+
* To enable add short code button and remove template asin error
|
825 |
+
**/
|
826 |
+
function reset_add_short_button_and_error_warnings() {
|
827 |
+
var add_short_code_button = $( '#aalb-add-shortcode-button' );
|
828 |
+
add_short_code_button.prop( 'disabled', false );
|
829 |
+
$( '#aalb-add-template-asin-error' ).text( '' );
|
830 |
+
}
|
831 |
+
|
832 |
+
/**
|
833 |
+
* To disable editor search for AALB plugin along with message
|
834 |
+
*
|
835 |
+
* @param String error_msg Error message
|
836 |
+
*
|
837 |
+
* @since 1.4.12
|
838 |
+
*
|
839 |
+
**/
|
840 |
+
function disable_editor_search( error_msg ) {
|
841 |
+
$( ".aalb-admin-button-create-amazon-shortcode" ).addClass( 'aalb-admin-button-create-amazon-shortcode-disabled' );
|
842 |
+
$( ".aalb-admin-input-search" ).prop( 'disabled', true );
|
843 |
+
var admin_searchbox_tooltip = $( '.aalb-admin-editor-tooltip' );
|
844 |
+
admin_searchbox_tooltip.html( error_msg );
|
845 |
+
admin_searchbox_tooltip.addClass( 'aalb-admin-searchbox-tooltip-text' );
|
846 |
+
admin_searchbox_tooltip.removeClass( 'aalb-admin-hide-display' );
|
847 |
+
}
|
848 |
+
})( jQuery );
|
|
admin/partials/aalb_admin_pop_up_content_hbs.php
ADDED
@@ -0,0 +1,34 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<!--
|
2 |
+
Copyright 2016-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
3 |
+
|
4 |
+
Licensed under the GNU General Public License as published by the Free Software Foundation,
|
5 |
+
Version 2.0 (the "License"). You may not use this file except in compliance with the License.
|
6 |
+
A copy of the License is located in the "license" file accompanying this file.
|
7 |
+
|
8 |
+
This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
|
9 |
+
either express or implied. See the License for the specific language governing permissions
|
10 |
+
and limitations under the License.
|
11 |
+
-->
|
12 |
+
<?php
|
13 |
+
/*
|
14 |
+
* Below is an example of context to be passed to the below template
|
15 |
+
*
|
16 |
+
{
|
17 |
+
"text_shown_during_search":"Searching relevant products from Amazon",
|
18 |
+
"check_more_on_amazon_text":"Check more search results on Amazon"
|
19 |
+
}
|
20 |
+
*/
|
21 |
+
?>
|
22 |
+
|
23 |
+
<script id="aalb-admin-pop-up-content-hbs" type="text/x-handlebars-template">
|
24 |
+
<div class="aalb-admin-popup-content">
|
25 |
+
<div class="aalb-admin-alert aalb-admin-alert-info aalb-admin-item-search-loading">
|
26 |
+
<div class="aalb-admin-icon"><i class="fa fa-spinner fa-pulse"></i></div>
|
27 |
+
{{text_shown_during_search}}
|
28 |
+
</div>
|
29 |
+
<div class="aalb-admin-item-search">
|
30 |
+
<div class="aalb-admin-item-search-items"></div>
|
31 |
+
<a href="#" target="_blank" class="aalb-admin-popup-more-results pull-right">{{check_more_on_amazon_text}}</a>
|
32 |
+
</div>
|
33 |
+
</div>
|
34 |
+
</script>
|
admin/partials/aalb_editor_search_box.php
CHANGED
@@ -27,11 +27,8 @@ $aalb_admin->aalb_enqueue_scripts();
|
|
27 |
<div class="aalb-admin-inline aalb-admin-searchbox">
|
28 |
<span class="aalb-admin-editor-tooltip aalb-admin-hide-display"></span>
|
29 |
<img src=<?= AALB_ADMIN_ICON ?> class="aalb-admin-searchbox-amzlogo">
|
30 |
-
<input type="text" class="aalb-admin-input-search"
|
31 |
-
|
32 |
-
|
33 |
-
onkeypress='aalb_submit_event(event,"aalb-admin-button-create-amazon-shortcode",this)' />
|
34 |
-
<a class="button aalb-admin-button-create-amazon-shortcode" title="<?php esc_attr_e( "Add Amazon Associates Link Builder Shortcode", 'amazon-associates-link-builder' ) ?>"
|
35 |
-
onclick="aalb_admin_show_create_shortcode_popup(this)"><?php esc_html_e( "Search", 'amazon-associates-link-builder' ) ?>
|
36 |
</a>
|
37 |
</div>
|
27 |
<div class="aalb-admin-inline aalb-admin-searchbox">
|
28 |
<span class="aalb-admin-editor-tooltip aalb-admin-hide-display"></span>
|
29 |
<img src=<?= AALB_ADMIN_ICON ?> class="aalb-admin-searchbox-amzlogo">
|
30 |
+
<input type="text" class="aalb-admin-input-search" name="aalb-admin-input-search" placeholder="<?php esc_attr_e( "Enter keyword(s)", 'amazon-associates-link-builder' ) ?>" />
|
31 |
+
<a class="button aalb-admin-button-create-amazon-shortcode" title="<?php esc_attr_e( "Add Amazon Associates Link Builder Shortcode", 'amazon-associates-link-builder' ) ?>">
|
32 |
+
<?php esc_html_e( "Search", 'amazon-associates-link-builder' ) ?>
|
|
|
|
|
|
|
33 |
</a>
|
34 |
</div>
|
admin/partials/aalb_meta_box.php
CHANGED
@@ -20,7 +20,8 @@ and limitations under the License.
|
|
20 |
|
21 |
// HandleBar template
|
22 |
include AALB_ADMIN_ITEM_SEARCH_ITEMS_PATH;
|
23 |
-
|
|
|
24 |
$aalb_admin = new Aalb_Admin();
|
25 |
$aalb_admin->aalb_enqueue_styles();
|
26 |
$aalb_admin->aalb_enqueue_scripts();
|
@@ -29,55 +30,58 @@ $aalb_admin->aalb_enqueue_scripts();
|
|
29 |
* Below is an example of context to be passed to the below template
|
30 |
*
|
31 |
{
|
32 |
-
"
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
42 |
"add_shortcode_button_label":"Add Shortcode",
|
|
|
|
|
43 |
"templates_list":[
|
44 |
"PriceLink",
|
45 |
"ProductAd",
|
46 |
"ProductCarousel",
|
47 |
"ProductGrid",
|
48 |
-
"ProductLink"
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
"
|
53 |
-
"
|
54 |
-
],
|
55 |
-
"default_marketplace":"IN",
|
56 |
-
"default_store_id_list":[
|
57 |
-
"store-1",
|
58 |
-
"store-2"
|
59 |
],
|
60 |
-
"
|
61 |
}
|
62 |
*/
|
63 |
|
64 |
?>
|
65 |
-
<!--ToDO: Remove inline & event binding & styling(except the one for aalb-admin-popup-container)-->
|
66 |
<!-- keeping css inline as css file does not load at plugin initialization -->
|
67 |
<div id="aalb-admin-popup-container" style="display:none;">
|
68 |
-
<
|
69 |
-
<
|
70 |
-
<
|
71 |
-
placeholder="{{searchbox_placeholder}}" onkeypress='aalb_submit_event(event,"aalb-btn-primary",this)' />
|
72 |
-
<button class="aalb-btn aalb-btn-primary" id="aalb-admin-popup-search-button" type="button"
|
73 |
-
onclick="aalb_admin_popup_search_items()" style="margin-top:1%">{{search_button_label}}
|
74 |
-
</button>
|
75 |
-
</div><!--end .aalb-admin-popup-options-->
|
76 |
-
<!-- start: aalb-admin-popup-shortcode-options-->
|
77 |
-
<div class="aalb-admin-popup-shortocde-wrapper">
|
78 |
-
<div class="aalb-admin-popup-shortcode-options">
|
79 |
<div class="aalb-admin-item-search-templates">
|
80 |
-
<label title="{{templates_help_content}}">{{ad_template_label}}<i class="fa fa-info-circle aalb-info-icon" aria-hidden="true"></i></label>
|
81 |
<select id="aalb_template_names_list" name="aalb_template_names_list">
|
82 |
{{#each templates_list}}
|
83 |
<option value="{{this}}" {{selected this ..
|
@@ -85,52 +89,30 @@ $aalb_admin->aalb_enqueue_scripts();
|
|
85 |
{{/each}}
|
86 |
</select>
|
87 |
</div>
|
88 |
-
|
89 |
-
|
90 |
-
<
|
91 |
-
{{
|
92 |
-
|
93 |
-
|
94 |
-
|
95 |
-
|
96 |
-
|
97 |
-
<div class="aalb-admin-popup-store">
|
98 |
-
<label title="{{tracking_id_help_content}}">{{associate_id_label}}<i class="fa fa-info-circle aalb-info-icon" aria-hidden="true"></i></label>
|
99 |
-
<select id="aalb-admin-popup-store-id" name="aalb-admin-popup-store-id">
|
100 |
-
{{#each default_store_id_list}}
|
101 |
-
<option value="{{this}}" {{selected this ..
|
102 |
-
/default_store_id}}>{{this}}</option>
|
103 |
-
{{/each}}
|
104 |
-
</select>
|
105 |
</div>
|
106 |
-
</div>
|
107 |
-
</div><!--end .aalb-admin-popup-shortcode-options-->
|
108 |
-
<div id="aalb-admin-popup-content">
|
109 |
-
<div class="aalb-admin-alert aalb-admin-alert-info aalb-admin-item-search-loading">
|
110 |
-
<div class="aalb-admin-icon"><i class="fa fa-spinner fa-pulse"></i></div>
|
111 |
-
{{text_shown_during_search}}
|
112 |
-
</div><!--end .aalb-admin-item-search-loading-->
|
113 |
-
<div class="aalb-admin-item-search">
|
114 |
-
{{click_to_select_products_label}}
|
115 |
-
<div class="aalb-admin-item-search-items"></div>
|
116 |
-
<a href="#" target="_blank" id="aalb-admin-popup-more-results" class="pull-right">{{check_more_on_amazon_text}}</a>
|
117 |
-
</div><!--end .aalb-admin-item-serch-->
|
118 |
-
</div><!--end .aalb-admin-popup-content-->
|
119 |
-
<div class="aalb-selected">
|
120 |
-
<label>{{selected_products_list_label}}</label>
|
121 |
-
</div>
|
122 |
|
123 |
-
|
124 |
-
|
125 |
-
|
126 |
-
|
127 |
-
|
128 |
-
|
129 |
-
|
130 |
-
|
|
|
|
|
131 |
</div>
|
132 |
-
</
|
133 |
-
</
|
134 |
-
</div
|
135 |
<?php
|
136 |
?>
|
20 |
|
21 |
// HandleBar template
|
22 |
include AALB_ADMIN_ITEM_SEARCH_ITEMS_PATH;
|
23 |
+
include 'aalb_meta_box_tab_content.php';
|
24 |
+
include 'aalb_admin_pop_up_content_hbs.php';
|
25 |
$aalb_admin = new Aalb_Admin();
|
26 |
$aalb_admin->aalb_enqueue_styles();
|
27 |
$aalb_admin->aalb_enqueue_scripts();
|
30 |
* Below is an example of context to be passed to the below template
|
31 |
*
|
32 |
{
|
33 |
+
"meta_box_tab_context":{
|
34 |
+
"searchbox_placeholder":"Enter keyword(s)",
|
35 |
+
"search_button_label":"Search",
|
36 |
+
"associate_id_label":"Tracking IDs",
|
37 |
+
"select_associate_id_label":"Select Tracking Id",
|
38 |
+
"marketplace_label":"Marketplace",
|
39 |
+
"select_marketplace_label":"Select Marketplace",
|
40 |
+
"selected_products_list_label":"List of Selected Products(Maximum: 10)",
|
41 |
+
"text_shown_during_shortcode_creation":"Creating shortcode. Please wait....",
|
42 |
+
"marketplace_help_content":"To configure marketplaces, go to Associates Link Builder plugin's Settings page",
|
43 |
+
"tracking_id_help_content":"To configure tracking ids, go to Associates Link Builder plugin's Settings page",
|
44 |
+
"marketplace_list":[
|
45 |
+
"IN",
|
46 |
+
"BR",
|
47 |
+
"IT",
|
48 |
+
"CA",
|
49 |
+
"US"
|
50 |
+
],
|
51 |
+
"default_marketplace":"IN",
|
52 |
+
"default_store_id_list":[
|
53 |
+
"in-1",
|
54 |
+
"in-2"
|
55 |
+
],
|
56 |
+
"default_store_id":"in-1"
|
57 |
+
},
|
58 |
"add_shortcode_button_label":"Add Shortcode",
|
59 |
+
"ad_template_label":"Ad Template",
|
60 |
+
"templates_help_content":"To configure templates, go to Associates Link Builder plugin's Templates page",
|
61 |
"templates_list":[
|
62 |
"PriceLink",
|
63 |
"ProductAd",
|
64 |
"ProductCarousel",
|
65 |
"ProductGrid",
|
66 |
+
"ProductLink",
|
67 |
+
"CopyOf-ProductAd",
|
68 |
+
"CopyOf-ProductAds",
|
69 |
+
"CopyOf-ProductCarousel",
|
70 |
+
"ProductAdss",
|
71 |
+
"ProductCarousel-width"
|
|
|
|
|
|
|
|
|
|
|
72 |
],
|
73 |
+
"default_template":"ProductCarousel"
|
74 |
}
|
75 |
*/
|
76 |
|
77 |
?>
|
|
|
78 |
<!-- keeping css inline as css file does not load at plugin initialization -->
|
79 |
<div id="aalb-admin-popup-container" style="display:none;">
|
80 |
+
<div id="aalb-admin-pop-up">
|
81 |
+
<script id="aalb-search-pop-up-hbs" type="text/x-handlebars-template">
|
82 |
+
<div id="aalb-search-pop-up">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
83 |
<div class="aalb-admin-item-search-templates">
|
84 |
+
<label class="aalb-templates-label" title="{{templates_help_content}}">{{ad_template_label}}<i class="fa fa-info-circle aalb-info-icon" aria-hidden="true"></i></label>
|
85 |
<select id="aalb_template_names_list" name="aalb_template_names_list">
|
86 |
{{#each templates_list}}
|
87 |
<option value="{{this}}" {{selected this ..
|
89 |
{{/each}}
|
90 |
</select>
|
91 |
</div>
|
92 |
+
|
93 |
+
<div id="aalb-tabs" class="aalb-pop-up-tabs">
|
94 |
+
<ul>
|
95 |
+
<li><a href="#aalb_tab1">{{meta_box_tab_context.default_marketplace}}</a></li>
|
96 |
+
</ul>
|
97 |
+
|
98 |
+
<div id="aalb_tab1">
|
99 |
+
{{> aalb-metabox-tab-hbs meta_box_tab_context}}
|
100 |
+
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
101 |
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
102 |
|
103 |
+
<div class="aalb-add-shortcode-button">
|
104 |
+
<button class="aalb-btn aalb-btn-primary" id="aalb-add-shortcode-button" type="button">{{add_shortcode_button_label}}</button>
|
105 |
+
<div id="aalb-add-shortcode-alert">
|
106 |
+
<div class="aalb-admin-icon"><i class="fa fa-spinner fa-pulse"></i></div>
|
107 |
+
{{text_shown_during_shortcode_creation}}
|
108 |
+
</div>
|
109 |
+
<div id="aalb-add-asin-error">
|
110 |
+
<div id="aalb-add-template-asin-error"></div>
|
111 |
+
</div>
|
112 |
+
</div>
|
113 |
</div>
|
114 |
+
</script>
|
115 |
+
</div>
|
116 |
+
</div>
|
117 |
<?php
|
118 |
?>
|
admin/partials/aalb_meta_box_tab_content.php
ADDED
@@ -0,0 +1,98 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<!--
|
2 |
+
Copyright 2016-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
3 |
+
|
4 |
+
Licensed under the GNU General Public License as published by the Free Software Foundation,
|
5 |
+
Version 2.0 (the "License"). You may not use this file except in compliance with the License.
|
6 |
+
A copy of the License is located in the "license" file accompanying this file.
|
7 |
+
|
8 |
+
This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
|
9 |
+
either express or implied. See the License for the specific language governing permissions
|
10 |
+
and limitations under the License.
|
11 |
+
-->
|
12 |
+
<?php
|
13 |
+
/*
|
14 |
+
* Below is an example of context to be passed to the below template
|
15 |
+
*
|
16 |
+
{
|
17 |
+
"searchbox_placeholder":"Enter keyword(s)",
|
18 |
+
"search_button_label":"Search",
|
19 |
+
"associate_id_label":"Tracking IDs",
|
20 |
+
"select_associate_id_label":"Select Tracking Id",
|
21 |
+
"marketplace_label":"Marketplace",
|
22 |
+
"select_marketplace_label":"Select Marketplace",
|
23 |
+
"selected_products_list_label":"List of Selected Products(Maximum: 10)",
|
24 |
+
"click_to_select_products_label":"Click to select product(s) to advertise",
|
25 |
+
"text_shown_during_shortcode_creation":"Creating shortcode. Please wait....",
|
26 |
+
"marketplace_help_content":"To configure marketplaces, go to Associates Link Builder plugin's Settings page",
|
27 |
+
"tracking_id_help_content":"To configure tracking ids, go to Associates Link Builder plugin's Settings page",
|
28 |
+
"searched_products_box_placeholder":Please select marketplace from above to show products.,
|
29 |
+
"selected_products_box_placeholder":Please select some products from above.,
|
30 |
+
"marketplace_list":[
|
31 |
+
"IN",
|
32 |
+
"BR",
|
33 |
+
"IT",
|
34 |
+
"CA",
|
35 |
+
"US"
|
36 |
+
],
|
37 |
+
"default_marketplace":"IN",
|
38 |
+
"default_store_id_list":[
|
39 |
+
"in-1",
|
40 |
+
"in-2"
|
41 |
+
],
|
42 |
+
"default_store_id":"in-1"
|
43 |
+
}
|
44 |
+
*/
|
45 |
+
?>
|
46 |
+
<script id="aalb-metabox-tab-hbs" type="text/x-handlebars-template">
|
47 |
+
<div class="aalb-pop-up-container">
|
48 |
+
<div class="aalb-admin-popup-shortcode-options aalb-table">
|
49 |
+
<div class="aalb-table-row">
|
50 |
+
<div class="aalb-table-cell">
|
51 |
+
<label title="{{marketplace_help_content}}">{{marketplace_label}}<i class="fa fa-info-circle aalb-info-icon" aria-hidden="true"></i></label>
|
52 |
+
</div>
|
53 |
+
<div class="aalb-table-cell">
|
54 |
+
<label title="{{tracking_id_help_content}}">{{associate_id_label}}<i class="fa fa-info-circle aalb-info-icon" aria-hidden="true"></i></label>
|
55 |
+
</div>
|
56 |
+
<div class="aalb-table-cell">
|
57 |
+
<label>{{search_keyword_label}}</label>
|
58 |
+
</div>
|
59 |
+
</div>
|
60 |
+
|
61 |
+
<div class="aalb-table-row">
|
62 |
+
<div class="aalb-admin-item-search-marketplaces aalb-width-25 aalb-table-cell">
|
63 |
+
<select class="aalb-marketplace-names-list" name="aalb-marketplace-names-list">
|
64 |
+
<option value="no-selection" disabled="disabled">{{select_marketplace_label}}</option>
|
65 |
+
{{#each marketplace_list}}
|
66 |
+
<option value="{{this}}" {{selected this ..
|
67 |
+
/default_marketplace}}>{{this}}</option>
|
68 |
+
{{/each}}
|
69 |
+
</select>
|
70 |
+
</div>
|
71 |
+
<div class="aalb-admin-popup-store aalb-width-25 aalb-table-cell">
|
72 |
+
<select class="aalb-admin-popup-store-id" name="aalb-admin-popup-store-id">
|
73 |
+
<option value="no-selection" disabled="disabled">{{select_associate_id_label}}</option>
|
74 |
+
{{#each default_store_id_list}}
|
75 |
+
<option value="{{this}}" {{selected this ..
|
76 |
+
/default_store_id}}>{{this}}</option>
|
77 |
+
{{/each}}
|
78 |
+
</select>
|
79 |
+
</div>
|
80 |
+
|
81 |
+
<div class="aalb-width-40 aalb-table-cell">
|
82 |
+
<input type="text" class="aalb-admin-popup-input-search" name="aalb-admin-popup-input-search" placeholder="{{searchbox_placeholder}}" />
|
83 |
+
</div>
|
84 |
+
<div class="aalb-admin-searchbox aalb-width-10 aalb-table-cell">
|
85 |
+
<button class="aalb-btn aalb-btn-primary aalb-admin-popup-search-button" type="button">{{search_button_label}}</button>
|
86 |
+
</div>
|
87 |
+
</div>
|
88 |
+
</div>
|
89 |
+
<fieldset class="aalb-admin-popup-search-result aalb-admin-popup-fieldset">
|
90 |
+
<legend class="aalb-admin-popup-legend">{{click_to_select_products_label}}</legend>
|
91 |
+
<div class="aalb-admin-alert aalb-admin-alert-info aalb-admin-popup-placeholder">{{searched_products_box_placeholder}}</div>
|
92 |
+
</fieldset>
|
93 |
+
<fieldset class="aalb-selected aalb-admin-popup-fieldset">
|
94 |
+
<legend class="aalb-admin-popup-legend">{{selected_products_list_label}}</legend>
|
95 |
+
<div class="aalb-admin-alert aalb-admin-alert-info aalb-admin-popup-placeholder">{{selected_products_box_placeholder}}</div>
|
96 |
+
</fieldset>
|
97 |
+
</div>
|
98 |
+
</script>
|
admin/sidebar/aalb_sidebar.php
CHANGED
@@ -54,6 +54,7 @@ class Aalb_Sidebar {
|
|
54 |
register_setting( AALB_CRED_CONFIG_GROUP, AALB_STORE_ID_NAMES );
|
55 |
register_setting( AALB_CRED_CONFIG_GROUP, AALB_STORE_IDS );
|
56 |
register_setting( AALB_CRED_CONFIG_GROUP, AALB_NO_REFERRER_DISABLED );
|
|
|
57 |
}
|
58 |
|
59 |
/**
|
54 |
register_setting( AALB_CRED_CONFIG_GROUP, AALB_STORE_ID_NAMES );
|
55 |
register_setting( AALB_CRED_CONFIG_GROUP, AALB_STORE_IDS );
|
56 |
register_setting( AALB_CRED_CONFIG_GROUP, AALB_NO_REFERRER_DISABLED );
|
57 |
+
register_setting( AALB_CRED_CONFIG_GROUP, AALB_CUSTOM_UPLOAD_PATH );
|
58 |
}
|
59 |
|
60 |
/**
|
admin/sidebar/partials/aalb_credentials.php
CHANGED
@@ -13,7 +13,10 @@ and limitations under the License.
|
|
13 |
*/
|
14 |
|
15 |
include 'aalb_admin_ui_common.php';
|
16 |
-
include 'aalb_credentials_locale_row.php'
|
|
|
|
|
|
|
17 |
?>
|
18 |
<!-- ToDO: 1. Convert table to div. 2. Put complete code under handlebars as currently store-id settings loads 1 second after page load-->
|
19 |
<!-- ToDO: 3. Include JSHint 4. See how can we leverage any of the libraries from Angular,React or VueJS -->
|
@@ -35,7 +38,6 @@ include 'aalb_credentials_locale_row.php'
|
|
35 |
<form id="aalb-credentials-form" method="post" action="options.php">
|
36 |
<?php settings_fields( AALB_CRED_CONFIG_GROUP );
|
37 |
do_settings_sections( AALB_CRED_CONFIG_GROUP ); ?>
|
38 |
-
|
39 |
<script id="aalb-hbs-store-id-settings" type="text/x-handlebars-template">
|
40 |
<fieldset class="aalb-settings-fieldset">
|
41 |
<legend class="aalb-settings-legend"> {{tracking_id_fieldset_label}}</legend>
|
@@ -85,11 +87,21 @@ include 'aalb_credentials_locale_row.php'
|
|
85 |
<td><?php esc_html_e( "The ad template that will be used for rendering the ad if no template is specified in the short code.", 'amazon-associates-link-builder' ) ?>
|
86 |
</td>
|
87 |
</tr>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
88 |
<tr>
|
89 |
<td scope="row" colspan="2" class="aalb-settings-input-column">
|
90 |
<input id=<?php echo AALB_NO_REFERRER_DISABLED ?> type="checkbox" name=<?php echo AALB_NO_REFERRER_DISABLED ?> value="true"<?php if ( get_option( AALB_NO_REFERRER_DISABLED ) )
|
91 |
echo "checked='checked'"; ?> />
|
92 |
-
<label class="aalb-
|
93 |
<?php /* translators: %s: rel="noreferrer" attribute */
|
94 |
printf( esc_html__( "Remove %s for Amazon Affiliate Links from all posts", 'amazon-associates-link-builder' ), "rel=\"noreferrer\"" ); ?></label>
|
95 |
</td>
|
13 |
*/
|
14 |
|
15 |
include 'aalb_admin_ui_common.php';
|
16 |
+
include 'aalb_credentials_locale_row.php';
|
17 |
+
|
18 |
+
$cred_helper = new Aalb_Credentials_Helper();
|
19 |
+
$cred_helper->handle_error_notices();
|
20 |
?>
|
21 |
<!-- ToDO: 1. Convert table to div. 2. Put complete code under handlebars as currently store-id settings loads 1 second after page load-->
|
22 |
<!-- ToDO: 3. Include JSHint 4. See how can we leverage any of the libraries from Angular,React or VueJS -->
|
38 |
<form id="aalb-credentials-form" method="post" action="options.php">
|
39 |
<?php settings_fields( AALB_CRED_CONFIG_GROUP );
|
40 |
do_settings_sections( AALB_CRED_CONFIG_GROUP ); ?>
|
|
|
41 |
<script id="aalb-hbs-store-id-settings" type="text/x-handlebars-template">
|
42 |
<fieldset class="aalb-settings-fieldset">
|
43 |
<legend class="aalb-settings-legend"> {{tracking_id_fieldset_label}}</legend>
|
87 |
<td><?php esc_html_e( "The ad template that will be used for rendering the ad if no template is specified in the short code.", 'amazon-associates-link-builder' ) ?>
|
88 |
</td>
|
89 |
</tr>
|
90 |
+
<tr>
|
91 |
+
<th scope="row" class="aalb-settings-identifier"><?php esc_html_e( "Downloads Folder", 'amazon-associates-link-builder' ) ?></th>
|
92 |
+
<td class="aalb-settings-input-column">
|
93 |
+
<input type="text" name=<?php echo AALB_CUSTOM_UPLOAD_PATH ?> class="aalb-settings-input-field"
|
94 |
+
value="<?php echo get_option( AALB_CUSTOM_UPLOAD_PATH ) ?>" />
|
95 |
+
</td>
|
96 |
+
<td>
|
97 |
+
<?php printf( __("This folder will be used to save files downloaded by the plugin (e.g. <a href=%1s target=%2s>The MaxMind IP2Country Database</a>) for local use. Absolute path required. <br><span class=\"aalb-bold\"> Default value:</span> *blank*, defaults to <code>wp_upload_dir()['basedir'] + '%3s'</code>", 'amazon-associates-link-builder' ), AALB_GEOLITE_COUNTRY_DB_DETAILS_URL, AALB_NEW_PAGE_TARGET, AALB_UPLOADS_FOLDER ); ?>
|
98 |
+
</td>
|
99 |
+
</tr>
|
100 |
<tr>
|
101 |
<td scope="row" colspan="2" class="aalb-settings-input-column">
|
102 |
<input id=<?php echo AALB_NO_REFERRER_DISABLED ?> type="checkbox" name=<?php echo AALB_NO_REFERRER_DISABLED ?> value="true"<?php if ( get_option( AALB_NO_REFERRER_DISABLED ) )
|
103 |
echo "checked='checked'"; ?> />
|
104 |
+
<label class="aalb-font-size-110" for="aalb_no_referrer_disabled">
|
105 |
<?php /* translators: %s: rel="noreferrer" attribute */
|
106 |
printf( esc_html__( "Remove %s for Amazon Affiliate Links from all posts", 'amazon-associates-link-builder' ), "rel=\"noreferrer\"" ); ?></label>
|
107 |
</td>
|
admin/sidebar/partials/aalb_ui_common.php
CHANGED
@@ -21,17 +21,17 @@ function aalb_info_notice( $message ) {
|
|
21 |
|
22 |
function aalb_warning_notice( $message ) {
|
23 |
/* translators: %s: Warning message */
|
24 |
-
echo "<div class=\"notice notice-warning\"><p>" . sprintf( esc_html__( "WARNING - %s", 'amazon-associates-link-builder' ), $message ) . "</p></div>";
|
25 |
}
|
26 |
|
27 |
function aalb_error_notice( $message ) {
|
28 |
/* translators: %s: Error message */
|
29 |
-
echo "<div class=\"notice notice-error\"><p>" . sprintf( esc_html__( "ERROR - %s", 'amazon-associates-link-builder' ), $message ) . "</p></div>";
|
30 |
}
|
31 |
|
32 |
function aalb_success_notice( $message ) {
|
33 |
/* translators: %s: Success message */
|
34 |
-
echo "<div class=\"notice notice-success\"><p>" . sprintf( esc_html__( "SUCCESS - %s", 'amazon-associates-link-builder' ), $message ) . "</p></div>";
|
35 |
}
|
36 |
|
37 |
?>
|
21 |
|
22 |
function aalb_warning_notice( $message ) {
|
23 |
/* translators: %s: Warning message */
|
24 |
+
echo "<div class=\"notice notice-warning is-dismissible\"><p>" . sprintf( esc_html__( "WARNING - %s", 'amazon-associates-link-builder' ), $message ) . "</p></div>";
|
25 |
}
|
26 |
|
27 |
function aalb_error_notice( $message ) {
|
28 |
/* translators: %s: Error message */
|
29 |
+
echo "<div class=\"notice notice-error is-dismissible\"><p>" . sprintf( esc_html__( "ERROR - %s", 'amazon-associates-link-builder' ), $message ) . "</p></div>";
|
30 |
}
|
31 |
|
32 |
function aalb_success_notice( $message ) {
|
33 |
/* translators: %s: Success message */
|
34 |
+
echo "<div class=\"notice notice-success is-dismissible\"><p>" . sprintf( esc_html__( "SUCCESS - %s", 'amazon-associates-link-builder' ), $message ) . "</p></div>";
|
35 |
}
|
36 |
|
37 |
?>
|
admin/sidebar/partials/helper/aalb_credentials_helper.php
CHANGED
@@ -108,6 +108,35 @@ class Aalb_Credentials_Helper {
|
|
108 |
|
109 |
return json_encode( array_values( $aalb_marketplace_names ) );
|
110 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
111 |
}
|
112 |
|
113 |
?>
|
108 |
|
109 |
return json_encode( array_values( $aalb_marketplace_names ) );
|
110 |
}
|
111 |
+
|
112 |
+
/**
|
113 |
+
* Prints admin error notices specific to geolite db on settings page
|
114 |
+
*
|
115 |
+
* @since 1.5.0
|
116 |
+
*/
|
117 |
+
public function handle_error_notices() {
|
118 |
+
$maxmind_db_manager = new Aalb_Maxmind_Db_Manager();
|
119 |
+
if ( $this->is_more_than_one_marketplaces_configured() ) {
|
120 |
+
if ( ! is_readable( $maxmind_db_manager->db_file_path ) ) {
|
121 |
+
aalb_error_notice( sprintf( esc_html__( "The file used to fetch country details to enable geo-targetted links doesn't have read permissions. Please give recursive read/write permissons to:%s. In case you are still facing the issue, please change download folder in Site Wide Settings section on this page.", 'amazon-associates-link-builder' ), $maxmind_db_manager->db_file_path ) );
|
122 |
+
} else if ( ! is_writable( $maxmind_db_manager->db_file_path ) ) {
|
123 |
+
aalb_error_notice( sprintf( esc_html__( "The file used to fetch country details to enable geo-targetted links doesn't have write permissions. Please give recursive read/write permissons to:%s. In case you are still facing the issue, please change download folder in Site Wide Settings section on this page", 'amazon-associates-link-builder' ), $maxmind_db_manager->db_file_path ) );
|
124 |
+
} else if ( ! is_writable( $maxmind_db_manager->db_upload_dir ) ) {
|
125 |
+
aalb_error_notice( sprintf( esc_html__( "The directory where the file used to fetch country details to enable geo-targetted links doesn't have write permissions. Please give recursive read/write permissons to:%s. In case you are still facing the issue, please change download folder in Site Wide Settings section on this page", 'amazon-associates-link-builder' ), $maxmind_db_manager->db_upload_dir ) );
|
126 |
+
}
|
127 |
+
}
|
128 |
+
}
|
129 |
+
|
130 |
+
/**
|
131 |
+
* Checks if more than one marketplaces have been configured in settings
|
132 |
+
*
|
133 |
+
* @since 1.5.0
|
134 |
+
*
|
135 |
+
* @return bool True if more than one marketplaces configured in settings
|
136 |
+
*/
|
137 |
+
public function is_more_than_one_marketplaces_configured() {
|
138 |
+
return count( json_decode( get_option( AALB_STORE_IDS ), true ) ) > 1;
|
139 |
+
}
|
140 |
}
|
141 |
|
142 |
?>
|
amazon-associates-link-builder.php
CHANGED
@@ -7,7 +7,7 @@
|
|
7 |
/*
|
8 |
Plugin Name: Amazon Associates Link Builder
|
9 |
Description: Amazon Associates Link Builder is the official free Amazon Associates Program plugin for WordPress. The plugin enables you to search for products in the Amazon catalog, access real-time price and availability information, and easily create links in your posts to products on Amazon.com. You will be able to generate text links, create custom ad units, or take advantage of out-of-the-box widgets that we’ve designed and included with the plugin.
|
10 |
-
Version: 1.
|
11 |
Author: Amazon Associates Program
|
12 |
Author URI: https://affiliate-program.amazon.com/
|
13 |
License: GPLv2
|
@@ -54,6 +54,8 @@ function aalb_autoload() {
|
|
54 |
require_once( MUSTACHE_AUTOLOADER_PHP );
|
55 |
Mustache_Autoloader::register();
|
56 |
|
|
|
|
|
57 |
//Load the autoloader for plugin files.
|
58 |
require_once( AALB_AUTOLOADER );
|
59 |
Aalb_Autoloader::register();
|
7 |
/*
|
8 |
Plugin Name: Amazon Associates Link Builder
|
9 |
Description: Amazon Associates Link Builder is the official free Amazon Associates Program plugin for WordPress. The plugin enables you to search for products in the Amazon catalog, access real-time price and availability information, and easily create links in your posts to products on Amazon.com. You will be able to generate text links, create custom ad units, or take advantage of out-of-the-box widgets that we’ve designed and included with the plugin.
|
10 |
+
Version: 1.5.0
|
11 |
Author: Amazon Associates Program
|
12 |
Author URI: https://affiliate-program.amazon.com/
|
13 |
License: GPLv2
|
54 |
require_once( MUSTACHE_AUTOLOADER_PHP );
|
55 |
Mustache_Autoloader::register();
|
56 |
|
57 |
+
require_once(AALB_PLUGIN_DIR . 'vendor/autoload.php');
|
58 |
+
|
59 |
//Load the autoloader for plugin files.
|
60 |
require_once( AALB_AUTOLOADER );
|
61 |
Aalb_Autoloader::register();
|
composer.json
ADDED
@@ -0,0 +1,5 @@
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"require": {
|
3 |
+
"geoip2/geoip2": "~2.0"
|
4 |
+
}
|
5 |
+
}
|
composer.lock
ADDED
@@ -0,0 +1,232 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"_readme": [
|
3 |
+
"This file locks the dependencies of your project to a known state",
|
4 |
+
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
|
5 |
+
"This file is @generated automatically"
|
6 |
+
],
|
7 |
+
"content-hash": "25737d43de99fb5d718029bd29d5374e",
|
8 |
+
"packages": [
|
9 |
+
{
|
10 |
+
"name": "composer/ca-bundle",
|
11 |
+
"version": "1.0.9",
|
12 |
+
"source": {
|
13 |
+
"type": "git",
|
14 |
+
"url": "https://github.com/composer/ca-bundle.git",
|
15 |
+
"reference": "36344aeffdc37711335563e6108cda86566432a6"
|
16 |
+
},
|
17 |
+
"dist": {
|
18 |
+
"type": "zip",
|
19 |
+
"url": "https://api.github.com/repos/composer/ca-bundle/zipball/36344aeffdc37711335563e6108cda86566432a6",
|
20 |
+
"reference": "36344aeffdc37711335563e6108cda86566432a6",
|
21 |
+
"shasum": ""
|
22 |
+
},
|
23 |
+
"require": {
|
24 |
+
"ext-openssl": "*",
|
25 |
+
"ext-pcre": "*",
|
26 |
+
"php": "^5.3.2 || ^7.0"
|
27 |
+
},
|
28 |
+
"require-dev": {
|
29 |
+
"phpunit/phpunit": "^4.5",
|
30 |
+
"psr/log": "^1.0",
|
31 |
+
"symfony/process": "^2.5 || ^3.0"
|
32 |
+
},
|
33 |
+
"suggest": {
|
34 |
+
"symfony/process": "This is necessary to reliably check whether openssl_x509_parse is vulnerable on older php versions, but can be ignored on PHP 5.5.6+"
|
35 |
+
},
|
36 |
+
"type": "library",
|
37 |
+
"extra": {
|
38 |
+
"branch-alias": {
|
39 |
+
"dev-master": "1.x-dev"
|
40 |
+
}
|
41 |
+
},
|
42 |
+
"autoload": {
|
43 |
+
"psr-4": {
|
44 |
+
"Composer\\CaBundle\\": "src"
|
45 |
+
}
|
46 |
+
},
|
47 |
+
"notification-url": "https://packagist.org/downloads/",
|
48 |
+
"license": [
|
49 |
+
"MIT"
|
50 |
+
],
|
51 |
+
"authors": [
|
52 |
+
{
|
53 |
+
"name": "Jordi Boggiano",
|
54 |
+
"email": "j.boggiano@seld.be",
|
55 |
+
"homepage": "http://seld.be"
|
56 |
+
}
|
57 |
+
],
|
58 |
+
"description": "Lets you find a path to the system CA bundle, and includes a fallback to the Mozilla CA bundle.",
|
59 |
+
"keywords": [
|
60 |
+
"cabundle",
|
61 |
+
"cacert",
|
62 |
+
"certificate",
|
63 |
+
"ssl",
|
64 |
+
"tls"
|
65 |
+
],
|
66 |
+
"time": "2017-11-13T15:51:25+00:00"
|
67 |
+
},
|
68 |
+
{
|
69 |
+
"name": "geoip2/geoip2",
|
70 |
+
"version": "v2.7.0",
|
71 |
+
"source": {
|
72 |
+
"type": "git",
|
73 |
+
"url": "https://github.com/maxmind/GeoIP2-php.git",
|
74 |
+
"reference": "ca9f9a244474d97eac1ef542aaced7cc944bafbe"
|
75 |
+
},
|
76 |
+
"dist": {
|
77 |
+
"type": "zip",
|
78 |
+
"url": "https://api.github.com/repos/maxmind/GeoIP2-php/zipball/ca9f9a244474d97eac1ef542aaced7cc944bafbe",
|
79 |
+
"reference": "ca9f9a244474d97eac1ef542aaced7cc944bafbe",
|
80 |
+
"shasum": ""
|
81 |
+
},
|
82 |
+
"require": {
|
83 |
+
"maxmind-db/reader": "~1.0",
|
84 |
+
"maxmind/web-service-common": "~0.4",
|
85 |
+
"php": ">=5.4"
|
86 |
+
},
|
87 |
+
"require-dev": {
|
88 |
+
"apigen/apigen": "*",
|
89 |
+
"friendsofphp/php-cs-fixer": "2.*",
|
90 |
+
"phpunit/phpunit": "4.*",
|
91 |
+
"squizlabs/php_codesniffer": "3.*"
|
92 |
+
},
|
93 |
+
"type": "library",
|
94 |
+
"autoload": {
|
95 |
+
"psr-4": {
|
96 |
+
"GeoIp2\\": "src"
|
97 |
+
}
|
98 |
+
},
|
99 |
+
"notification-url": "https://packagist.org/downloads/",
|
100 |
+
"license": [
|
101 |
+
"Apache-2.0"
|
102 |
+
],
|
103 |
+
"authors": [
|
104 |
+
{
|
105 |
+
"name": "Gregory J. Oschwald",
|
106 |
+
"email": "goschwald@maxmind.com",
|
107 |
+
"homepage": "http://www.maxmind.com/"
|
108 |
+
}
|
109 |
+
],
|
110 |
+
"description": "MaxMind GeoIP2 PHP API",
|
111 |
+
"homepage": "https://github.com/maxmind/GeoIP2-php",
|
112 |
+
"keywords": [
|
113 |
+
"IP",
|
114 |
+
"geoip",
|
115 |
+
"geoip2",
|
116 |
+
"geolocation",
|
117 |
+
"maxmind"
|
118 |
+
],
|
119 |
+
"time": "2017-10-27T19:20:22+00:00"
|
120 |
+
},
|
121 |
+
{
|
122 |
+
"name": "maxmind-db/reader",
|
123 |
+
"version": "v1.2.0",
|
124 |
+
"source": {
|
125 |
+
"type": "git",
|
126 |
+
"url": "https://github.com/maxmind/MaxMind-DB-Reader-php.git",
|
127 |
+
"reference": "1647820dfbcb552222fb5feb3a8387e2636394c9"
|
128 |
+
},
|
129 |
+
"dist": {
|
130 |
+
"type": "zip",
|
131 |
+
"url": "https://api.github.com/repos/maxmind/MaxMind-DB-Reader-php/zipball/1647820dfbcb552222fb5feb3a8387e2636394c9",
|
132 |
+
"reference": "1647820dfbcb552222fb5feb3a8387e2636394c9",
|
133 |
+
"shasum": ""
|
134 |
+
},
|
135 |
+
"require": {
|
136 |
+
"php": ">=5.4"
|
137 |
+
},
|
138 |
+
"require-dev": {
|
139 |
+
"friendsofphp/php-cs-fixer": "2.*",
|
140 |
+
"phpunit/phpunit": "4.*",
|
141 |
+
"satooshi/php-coveralls": "1.0.*",
|
142 |
+
"squizlabs/php_codesniffer": "3.*"
|
143 |
+
},
|
144 |
+
"suggest": {
|
145 |
+
"ext-bcmath": "bcmath or gmp is required for decoding larger integers with the pure PHP decoder",
|
146 |
+
"ext-gmp": "bcmath or gmp is required for decoding larger integers with the pure PHP decoder",
|
147 |
+
"ext-maxminddb": "A C-based database decoder that provides significantly faster lookups"
|
148 |
+
},
|
149 |
+
"type": "library",
|
150 |
+
"autoload": {
|
151 |
+
"psr-4": {
|
152 |
+
"MaxMind\\Db\\": "src/MaxMind/Db"
|
153 |
+
}
|
154 |
+
},
|
155 |
+
"notification-url": "https://packagist.org/downloads/",
|
156 |
+
"license": [
|
157 |
+
"Apache-2.0"
|
158 |
+
],
|
159 |
+
"authors": [
|
160 |
+
{
|
161 |
+
"name": "Gregory J. Oschwald",
|
162 |
+
"email": "goschwald@maxmind.com",
|
163 |
+
"homepage": "http://www.maxmind.com/"
|
164 |
+
}
|
165 |
+
],
|
166 |
+
"description": "MaxMind DB Reader API",
|
167 |
+
"homepage": "https://github.com/maxmind/MaxMind-DB-Reader-php",
|
168 |
+
"keywords": [
|
169 |
+
"database",
|
170 |
+
"geoip",
|
171 |
+
"geoip2",
|
172 |
+
"geolocation",
|
173 |
+
"maxmind"
|
174 |
+
],
|
175 |
+
"time": "2017-10-27T19:15:33+00:00"
|
176 |
+
},
|
177 |
+
{
|
178 |
+
"name": "maxmind/web-service-common",
|
179 |
+
"version": "v0.4.0",
|
180 |
+
"source": {
|
181 |
+
"type": "git",
|
182 |
+
"url": "https://github.com/maxmind/web-service-common-php.git",
|
183 |
+
"reference": "622f7c732a7f9c4c62497fc103939e042b6bdb88"
|
184 |
+
},
|
185 |
+
"dist": {
|
186 |
+
"type": "zip",
|
187 |
+
"url": "https://api.github.com/repos/maxmind/web-service-common-php/zipball/622f7c732a7f9c4c62497fc103939e042b6bdb88",
|
188 |
+
"reference": "622f7c732a7f9c4c62497fc103939e042b6bdb88",
|
189 |
+
"shasum": ""
|
190 |
+
},
|
191 |
+
"require": {
|
192 |
+
"composer/ca-bundle": "^1.0.3",
|
193 |
+
"ext-curl": "*",
|
194 |
+
"ext-json": "*",
|
195 |
+
"php": ">=5.4"
|
196 |
+
},
|
197 |
+
"require-dev": {
|
198 |
+
"friendsofphp/php-cs-fixer": "2.*",
|
199 |
+
"phpunit/phpunit": "4.*",
|
200 |
+
"squizlabs/php_codesniffer": "3.*"
|
201 |
+
},
|
202 |
+
"type": "library",
|
203 |
+
"autoload": {
|
204 |
+
"psr-4": {
|
205 |
+
"MaxMind\\Exception\\": "src/Exception",
|
206 |
+
"MaxMind\\WebService\\": "src/WebService"
|
207 |
+
}
|
208 |
+
},
|
209 |
+
"notification-url": "https://packagist.org/downloads/",
|
210 |
+
"license": [
|
211 |
+
"Apache-2.0"
|
212 |
+
],
|
213 |
+
"authors": [
|
214 |
+
{
|
215 |
+
"name": "Gregory Oschwald",
|
216 |
+
"email": "goschwald@maxmind.com"
|
217 |
+
}
|
218 |
+
],
|
219 |
+
"description": "Internal MaxMind Web Service API",
|
220 |
+
"homepage": "https://github.com/maxmind/web-service-common-php",
|
221 |
+
"time": "2017-07-06T17:48:21+00:00"
|
222 |
+
}
|
223 |
+
],
|
224 |
+
"packages-dev": [],
|
225 |
+
"aliases": [],
|
226 |
+
"minimum-stability": "stable",
|
227 |
+
"stability-flags": [],
|
228 |
+
"prefer-stable": false,
|
229 |
+
"prefer-lowest": false,
|
230 |
+
"platform": [],
|
231 |
+
"platform-dev": []
|
232 |
+
}
|
composer.phar
ADDED
Binary file
|
css/aalb_basics.css
CHANGED
@@ -81,3 +81,13 @@ and limitations under the License.
|
|
81 |
.pull-left {
|
82 |
float: left;
|
83 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
81 |
.pull-left {
|
82 |
float: left;
|
83 |
}
|
84 |
+
|
85 |
+
.aalb-preview-message {
|
86 |
+
color: #ff0000;
|
87 |
+
font-weight: bold;
|
88 |
+
margin-top: 10px;
|
89 |
+
}
|
90 |
+
|
91 |
+
.aalb-bold {
|
92 |
+
font-weight: bold;
|
93 |
+
}
|
includes/aalb_activator.php
CHANGED
@@ -40,26 +40,6 @@ class Aalb_Activator {
|
|
40 |
$this->helper->refresh_template_list();
|
41 |
}
|
42 |
|
43 |
-
/**
|
44 |
-
* Add the aws key options into the database on activation.
|
45 |
-
* This solves the problem of encryption as wordpress called an update option before calling
|
46 |
-
* add option while sanitizing.
|
47 |
-
* https://codex.wordpress.org/Function_Reference/register_setting
|
48 |
-
*
|
49 |
-
* @since 1.0.0
|
50 |
-
*/
|
51 |
-
private function load_db_keys() {
|
52 |
-
if ( ! get_option( AALB_AWS_ACCESS_KEY ) ) {
|
53 |
-
update_option( AALB_AWS_ACCESS_KEY, '' );
|
54 |
-
}
|
55 |
-
if ( ! get_option( AALB_AWS_SECRET_KEY ) ) {
|
56 |
-
update_option( AALB_AWS_SECRET_KEY, '' );
|
57 |
-
}
|
58 |
-
if ( ! get_option( AALB_STORE_IDS ) ) {
|
59 |
-
update_option( AALB_STORE_IDS, '' );
|
60 |
-
}
|
61 |
-
}
|
62 |
-
|
63 |
/**
|
64 |
* Halts activation process if the plugin is not compatible with the user environment
|
65 |
*
|
@@ -80,7 +60,6 @@ class Aalb_Activator {
|
|
80 |
function activate() {
|
81 |
if($this->aalb_compatibility_helper->is_plugin_compatible()) {
|
82 |
$this->load_templates();
|
83 |
-
$this->load_db_keys();
|
84 |
} else {
|
85 |
$this->halt_activation();
|
86 |
}
|
40 |
$this->helper->refresh_template_list();
|
41 |
}
|
42 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
43 |
/**
|
44 |
* Halts activation process if the plugin is not compatible with the user environment
|
45 |
*
|
60 |
function activate() {
|
61 |
if($this->aalb_compatibility_helper->is_plugin_compatible()) {
|
62 |
$this->load_templates();
|
|
|
63 |
} else {
|
64 |
$this->halt_activation();
|
65 |
}
|
includes/aalb_autoloader.php
CHANGED
@@ -53,6 +53,7 @@ class Aalb_Autoloader {
|
|
53 |
new self( AALB_SHORTCODE_DIR );
|
54 |
new self( AALB_LIBRARY_DIR );
|
55 |
new self( AALB_SIDEBAR_HELPER_DIR );
|
|
|
56 |
}
|
57 |
|
58 |
/**
|
53 |
new self( AALB_SHORTCODE_DIR );
|
54 |
new self( AALB_LIBRARY_DIR );
|
55 |
new self( AALB_SIDEBAR_HELPER_DIR );
|
56 |
+
new self( AALB_IP_2_COUNTRY_DIR );
|
57 |
}
|
58 |
|
59 |
/**
|
includes/aalb_cache_loader.php
CHANGED
@@ -38,15 +38,16 @@ class Aalb_Cache_Loader {
|
|
38 |
*
|
39 |
* @param string $key Unique identification of the information.
|
40 |
* @param string $url URL for making a request.
|
|
|
41 |
*
|
42 |
* @return string GET Response.
|
43 |
*/
|
44 |
-
public function load( $key, $url ) {
|
45 |
$info = $this->lookup( $key );
|
46 |
if ( $info !== false ) {
|
47 |
return $info;
|
48 |
} else {
|
49 |
-
return $this->load_and_save( $key, $url );
|
50 |
}
|
51 |
}
|
52 |
|
@@ -68,15 +69,15 @@ class Aalb_Cache_Loader {
|
|
68 |
*
|
69 |
* @param string $key Unique identification of the information.
|
70 |
* @param string $url URL for making a request.
|
|
|
71 |
*
|
72 |
* @return string GET Response.
|
73 |
*/
|
74 |
-
private function load_and_save( $key, $url ) {
|
75 |
$info = $this->loader->load( $url );
|
76 |
|
77 |
//use wordpress linkcode
|
78 |
-
$info =
|
79 |
-
$info = str_replace( 'linkCode=xm2', 'linkCode=alb', $info );
|
80 |
|
81 |
$this->helper->clear_expired_transients_at_intervals();
|
82 |
set_transient( $key, $info, AALB_CACHE_FOR_ASIN_RAWINFO_TTL );
|
38 |
*
|
39 |
* @param string $key Unique identification of the information.
|
40 |
* @param string $url URL for making a request.
|
41 |
+
* @param string $link_code Link Code to be entered in URLS for attribution purposes.
|
42 |
*
|
43 |
* @return string GET Response.
|
44 |
*/
|
45 |
+
public function load( $key, $url, $link_code = AALB_DEFAULT_LINK_CODE ) {
|
46 |
$info = $this->lookup( $key );
|
47 |
if ( $info !== false ) {
|
48 |
return $info;
|
49 |
} else {
|
50 |
+
return $this->load_and_save( $key, $url, $link_code );
|
51 |
}
|
52 |
}
|
53 |
|
69 |
*
|
70 |
* @param string $key Unique identification of the information.
|
71 |
* @param string $url URL for making a request.
|
72 |
+
* @param string $link_code Link Code to be entered in URLS for attribution purposes.
|
73 |
*
|
74 |
* @return string GET Response.
|
75 |
*/
|
76 |
+
private function load_and_save( $key, $url, $link_code ) {
|
77 |
$info = $this->loader->load( $url );
|
78 |
|
79 |
//use wordpress linkcode
|
80 |
+
$info = preg_replace( "/linkCode(%3D|=)\w{1,3}/", "linkCode$1" . $link_code, $info );
|
|
|
81 |
|
82 |
$this->helper->clear_expired_transients_at_intervals();
|
83 |
set_transient( $key, $info, AALB_CACHE_FOR_ASIN_RAWINFO_TTL );
|
includes/aalb_helper.php
CHANGED
@@ -132,20 +132,10 @@ class Aalb_Helper {
|
|
132 |
public function show_error_in_preview( $error_message ) {
|
133 |
if ( is_preview() ) {
|
134 |
//If it's preview mode
|
135 |
-
echo
|
136 |
}
|
137 |
}
|
138 |
|
139 |
-
/**
|
140 |
-
* Returns the Store IDs Array.
|
141 |
-
* Returns AALB_DEFAULT_STORE_ID_NAME if the nothing is specified.
|
142 |
-
*
|
143 |
-
* @since 1.0.0
|
144 |
-
*/
|
145 |
-
public function get_store_ids_array() {
|
146 |
-
return explode( "\r\n", strlen( get_option( AALB_STORE_ID_NAMES ) ) ? get_option( AALB_STORE_ID_NAMES ) : AALB_DEFAULT_STORE_ID_NAME );
|
147 |
-
}
|
148 |
-
|
149 |
/**
|
150 |
* Fetches the Wordpress version number
|
151 |
*
|
@@ -298,6 +288,37 @@ class Aalb_Helper {
|
|
298 |
public function aalb_get_file_extension( $file_name ) {
|
299 |
return substr( strrchr( $file_name, '.' ), 1 );
|
300 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
301 |
}
|
302 |
|
303 |
?>
|
132 |
public function show_error_in_preview( $error_message ) {
|
133 |
if ( is_preview() ) {
|
134 |
//If it's preview mode
|
135 |
+
echo '<div class="aalb-preview-message">' . $error_message . '</div>';
|
136 |
}
|
137 |
}
|
138 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
139 |
/**
|
140 |
* Fetches the Wordpress version number
|
141 |
*
|
288 |
public function aalb_get_file_extension( $file_name ) {
|
289 |
return substr( strrchr( $file_name, '.' ), 1 );
|
290 |
}
|
291 |
+
|
292 |
+
/**
|
293 |
+
* Add the aws key options into the database on activation.
|
294 |
+
* This solves the problem of encryption as wordpress called an update option before calling
|
295 |
+
* add option while sanitizing.
|
296 |
+
* https://codex.wordpress.org/Function_Reference/register_setting
|
297 |
+
*
|
298 |
+
* @since 1.0.0
|
299 |
+
*/
|
300 |
+
public function load_db_keys() {
|
301 |
+
$this->init_option_if_empty( AALB_AWS_ACCESS_KEY, '' );
|
302 |
+
$this->init_option_if_empty( AALB_AWS_SECRET_KEY, '' );
|
303 |
+
$this->init_option_if_empty( AALB_STORE_IDS, '' );
|
304 |
+
$this->init_option_if_empty( AALB_CUSTOM_UPLOAD_PATH, '' );
|
305 |
+
$this->init_option_if_empty( AALB_GEOLITE_DB_EXPIRATION_TIME, 0 );
|
306 |
+
$this->init_option_if_empty( AALB_GEOLITE_DB_LAST_UPDATED_TIME, 0 );
|
307 |
+
}
|
308 |
+
|
309 |
+
/**
|
310 |
+
* Initialize db option with the value provided
|
311 |
+
*
|
312 |
+
* @param String db_key Database key
|
313 |
+
* @param String db_value Database Value
|
314 |
+
*
|
315 |
+
* @since 1.5.0
|
316 |
+
*/
|
317 |
+
private function init_option_if_empty( $dbkey, $dbvalue ) {
|
318 |
+
if ( ! get_option( $dbkey ) ) {
|
319 |
+
update_option( $dbkey, $dbvalue );
|
320 |
+
}
|
321 |
+
}
|
322 |
}
|
323 |
|
324 |
?>
|
includes/aalb_manager.php
CHANGED
@@ -23,10 +23,12 @@ class Aalb_Manager {
|
|
23 |
|
24 |
protected $hook_loader;
|
25 |
protected $shortcode_loader;
|
|
|
26 |
|
27 |
public function __construct() {
|
28 |
$this->hook_loader = new Aalb_Hook_Loader();
|
29 |
$this->shortcode_loader = new Aalb_Shortcode_Loader();
|
|
|
30 |
|
31 |
//add the hooks specific to admin.
|
32 |
$this->add_admin_hooks();
|
@@ -56,6 +58,9 @@ class Aalb_Manager {
|
|
56 |
$aalb_sidebar = new Aalb_Sidebar();
|
57 |
$this->hook_loader->add_action( 'admin_init', $aalb_sidebar, 'register_cred_config_group' );
|
58 |
$this->hook_loader->add_action( 'admin_menu', $aalb_sidebar, 'register_sidebar_config_page' );
|
|
|
|
|
|
|
59 |
}
|
60 |
|
61 |
/**
|
@@ -64,10 +69,7 @@ class Aalb_Manager {
|
|
64 |
* @since 1.0.0
|
65 |
*/
|
66 |
private function register_shortcode_hooks() {
|
67 |
-
$
|
68 |
-
$aalb_shortcode_text = $this->shortcode_loader->get_amazon_textlink_shortcode();
|
69 |
-
$this->hook_loader->add_action( 'wp_enqueue_scripts', $aalb_shortcode, 'enqueue_styles' );
|
70 |
-
$this->hook_loader->add_action( 'wp_enqueue_scripts', $aalb_shortcode_text, 'enqueue_styles' );
|
71 |
}
|
72 |
|
73 |
/**
|
23 |
|
24 |
protected $hook_loader;
|
25 |
protected $shortcode_loader;
|
26 |
+
protected $shortcode_manager;
|
27 |
|
28 |
public function __construct() {
|
29 |
$this->hook_loader = new Aalb_Hook_Loader();
|
30 |
$this->shortcode_loader = new Aalb_Shortcode_Loader();
|
31 |
+
$this->shortcode_manager = new Aalb_Shortcode_Manager();
|
32 |
|
33 |
//add the hooks specific to admin.
|
34 |
$this->add_admin_hooks();
|
58 |
$aalb_sidebar = new Aalb_Sidebar();
|
59 |
$this->hook_loader->add_action( 'admin_init', $aalb_sidebar, 'register_cred_config_group' );
|
60 |
$this->hook_loader->add_action( 'admin_menu', $aalb_sidebar, 'register_sidebar_config_page' );
|
61 |
+
|
62 |
+
$maxmind_db_manager = new Aalb_Maxmind_Db_Manager();
|
63 |
+
$this->hook_loader->add_action( 'plugins_loaded', $maxmind_db_manager, 'update_db_if_required' );
|
64 |
}
|
65 |
|
66 |
/**
|
69 |
* @since 1.0.0
|
70 |
*/
|
71 |
private function register_shortcode_hooks() {
|
72 |
+
$this->hook_loader->add_action( 'wp_enqueue_scripts', $this->shortcode_manager, 'enqueue_styles' );
|
|
|
|
|
|
|
73 |
}
|
74 |
|
75 |
/**
|
includes/aalb_template_engine.php
CHANGED
@@ -47,12 +47,14 @@ class Aalb_Template_Engine {
|
|
47 |
* @param string $products_key Key of the combined products.
|
48 |
* @param string $template Template to render the display unit.
|
49 |
* @param string $url Url to get the product from if not present in cache.
|
|
|
|
|
50 |
*
|
51 |
* @return string HTML of the disply unit.
|
52 |
*/
|
53 |
-
public function render( $display_key, $products_key, $template, $url, $marketplace ) {
|
54 |
if ( false === ( $display_unit = $this->cache_template_loader->get_display_unit( $display_key ) ) ) {
|
55 |
-
$products = $this->get_products( $products_key, $url );
|
56 |
$xml = $this->parse( $products );
|
57 |
$items = $this->get_items( $xml );
|
58 |
|
@@ -73,11 +75,12 @@ class Aalb_Template_Engine {
|
|
73 |
*
|
74 |
* @param string $key Unique identification of the product.
|
75 |
* @param string $url Signed URL for the PAAPI request.
|
|
|
76 |
*
|
77 |
* @return string Xml response from PAAPI.
|
78 |
*/
|
79 |
-
private function get_products( $key, $url ) {
|
80 |
-
return $this->xml_loader->load( $key, $url );
|
81 |
}
|
82 |
|
83 |
/**
|
47 |
* @param string $products_key Key of the combined products.
|
48 |
* @param string $template Template to render the display unit.
|
49 |
* @param string $url Url to get the product from if not present in cache.
|
50 |
+
* @param string $marketplace Marketplace to which the product belongs.
|
51 |
+
* @param string $link_code Link Code to be entered in URLS for attribution purposes.
|
52 |
*
|
53 |
* @return string HTML of the disply unit.
|
54 |
*/
|
55 |
+
public function render( $display_key, $products_key, $template, $url, $marketplace, $link_code ) {
|
56 |
if ( false === ( $display_unit = $this->cache_template_loader->get_display_unit( $display_key ) ) ) {
|
57 |
+
$products = $this->get_products( $products_key, $url, $link_code );
|
58 |
$xml = $this->parse( $products );
|
59 |
$items = $this->get_items( $xml );
|
60 |
|
75 |
*
|
76 |
* @param string $key Unique identification of the product.
|
77 |
* @param string $url Signed URL for the PAAPI request.
|
78 |
+
* @param string $link_code Link Code to be entered in URLS for attribution purposes.
|
79 |
*
|
80 |
* @return string Xml response from PAAPI.
|
81 |
*/
|
82 |
+
private function get_products( $key, $url, $link_code ) {
|
83 |
+
return $this->xml_loader->load( $key, $url, $link_code );
|
84 |
}
|
85 |
|
86 |
/**
|
ip2country/aalb_customer_country.php
ADDED
@@ -0,0 +1,110 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
Copyright 2016-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
4 |
+
|
5 |
+
Licensed under the GNU General Public License as published by the Free Software Foundation,
|
6 |
+
Version 2.0 (the "License"). You may not use this file except in compliance with the License.
|
7 |
+
A copy of the License is located in the "license" file accompanying this file.
|
8 |
+
|
9 |
+
This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
|
10 |
+
either express or implied. See the License for the specific language governing permissions
|
11 |
+
and limitations under the License.
|
12 |
+
*/
|
13 |
+
|
14 |
+
/**
|
15 |
+
*
|
16 |
+
* Gets the Country from which customer is coming using his IP Address
|
17 |
+
*
|
18 |
+
* @since 1.5.0
|
19 |
+
* @package AmazonAssociatesLinkBuilder
|
20 |
+
* @subpackage AmazonAssociatesLinkBuilder/ip2country
|
21 |
+
*/
|
22 |
+
|
23 |
+
use GeoIp2\Database\Reader;
|
24 |
+
|
25 |
+
class Aalb_Customer_Country {
|
26 |
+
private $customer_ip_address;
|
27 |
+
private $helper;
|
28 |
+
private $maxmind_db_manager;
|
29 |
+
private $credentials_helper;
|
30 |
+
|
31 |
+
public function __construct() {
|
32 |
+
$this->customer_ip_address = new Aalb_Customer_Ip_Address();
|
33 |
+
$this->helper = new Aalb_Helper();
|
34 |
+
$this->maxmind_db_manager = new Aalb_Maxmind_Db_Manager();
|
35 |
+
$this->credentials_helper = new Aalb_Credentials_Helper();
|
36 |
+
}
|
37 |
+
|
38 |
+
/**
|
39 |
+
* Gets the country of the customer from ip Address
|
40 |
+
*
|
41 |
+
* @since 1.5.0
|
42 |
+
*
|
43 |
+
* @return string Country of the customer
|
44 |
+
*/
|
45 |
+
public function get_country_iso_code() {
|
46 |
+
$ip = $this->customer_ip_address->get();
|
47 |
+
$country_code = "";
|
48 |
+
$reader = $this->get_reader();
|
49 |
+
if ( $reader ) {
|
50 |
+
try {
|
51 |
+
$record = $reader->country( $ip );
|
52 |
+
$country_code = $record->country->isoCode;
|
53 |
+
//In the ISO code list, "GB" is used to refer to "UK" but since in Amazon we call it UK, so override that
|
54 |
+
$country_code = $country_code === "GB" ? "UK" : $country_code;
|
55 |
+
} catch ( Exception $e ) {
|
56 |
+
error_log( "Aalb_Customer_Country:get_country_iso_code failed." . $e->getMessage() );
|
57 |
+
} finally {
|
58 |
+
$reader->close();
|
59 |
+
}
|
60 |
+
}
|
61 |
+
|
62 |
+
return $country_code;
|
63 |
+
}
|
64 |
+
|
65 |
+
/**
|
66 |
+
* Gets the instance of reader class of maxmind with GeoLiteCountryDB
|
67 |
+
*
|
68 |
+
* @since 1.5.0
|
69 |
+
*
|
70 |
+
* @return Reader Instance of Reader class of Maxmind
|
71 |
+
*/
|
72 |
+
private function get_reader() {
|
73 |
+
$maxmind_db_file = $this->get_maxmind_db_file();
|
74 |
+
$reader = null;
|
75 |
+
if ( $maxmind_db_file ) {
|
76 |
+
try {
|
77 |
+
$reader = new Reader( $maxmind_db_file );
|
78 |
+
} catch ( Exception $e ) {
|
79 |
+
error_log( "Aalb_Customer_Country:get_reader failed." . $e->getMessage() );
|
80 |
+
}
|
81 |
+
}
|
82 |
+
|
83 |
+
return $reader;
|
84 |
+
}
|
85 |
+
|
86 |
+
/**
|
87 |
+
* Gets the maxmind db file name with complete path
|
88 |
+
*
|
89 |
+
* @since 1.5.0
|
90 |
+
*
|
91 |
+
* @return String Maxmind db file name with complete path
|
92 |
+
*/
|
93 |
+
private function get_maxmind_db_file() {
|
94 |
+
$maxmind_file = $this->maxmind_db_manager->db_file_path;
|
95 |
+
try {
|
96 |
+
if ( ! file_exists( $maxmind_file ) || ! is_readable( $maxmind_file ) ) {
|
97 |
+
$maxmind_file = null;
|
98 |
+
if ( $this->credentials_helper->is_more_than_one_marketplaces_configured() ) {
|
99 |
+
$this->helper->show_error_in_preview( sprintf( esc_html__( "Maxmind DB file doesn't exist or is not readable. Please check & give appropriate read & write permissions to:%s. Go to plugin's Settings page for more details.", 'amazon-associates-link-builder' ), $this->maxmind_db_manager->db_upload_dir ) );
|
100 |
+
error_log( "Maxmind DB file doesn't exist or is not readable. Please check & give appropriate read & write permissions to:" . $this->maxmind_db_manager->db_upload_dir . "Go to plugin's settings page for more details" );
|
101 |
+
}
|
102 |
+
}
|
103 |
+
} catch ( Exception $e ) {
|
104 |
+
error_log( "Get Aalb_Customer_Country:get_maxmind_db_file failed" . $e->getMessage() );
|
105 |
+
}
|
106 |
+
|
107 |
+
return $maxmind_file;
|
108 |
+
}
|
109 |
+
}
|
110 |
+
?>
|
ip2country/aalb_customer_ip_address.php
ADDED
@@ -0,0 +1,70 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
Copyright 2016-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
4 |
+
|
5 |
+
Licensed under the GNU General Public License as published by the Free Software Foundation,
|
6 |
+
Version 2.0 (the "License"). You may not use this file except in compliance with the License.
|
7 |
+
A copy of the License is located in the "license" file accompanying this file.
|
8 |
+
|
9 |
+
This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
|
10 |
+
either express or implied. See the License for the specific language governing permissions
|
11 |
+
and limitations under the License.
|
12 |
+
*/
|
13 |
+
|
14 |
+
/**
|
15 |
+
*
|
16 |
+
* Gets the IP Address of the customer
|
17 |
+
*
|
18 |
+
* @since 1.5.0
|
19 |
+
* @package AmazonAssociatesLinkBuilder
|
20 |
+
* @subpackage AmazonAssociatesLinkBuilder/ip2country
|
21 |
+
*/
|
22 |
+
class Aalb_Customer_Ip_Address {
|
23 |
+
/**
|
24 |
+
* Gets the IP Address of the customer
|
25 |
+
*
|
26 |
+
* @since 1.5.0
|
27 |
+
*
|
28 |
+
* @return string IP ADDRESS of the customer
|
29 |
+
*/
|
30 |
+
public function get() {
|
31 |
+
$ip_address = isset( $_SERVER['REMOTE_ADDR'] ) ? $_SERVER['REMOTE_ADDR'] : '';
|
32 |
+
$ip_list = explode( ',', $ip_address );
|
33 |
+
$ip_list = array_map( array( $this, 'standardize_ip_address' ), $ip_list );
|
34 |
+
|
35 |
+
if ( isset( $_SERVER["HTTP_X_FORWARDED_FOR"] ) ) {
|
36 |
+
$x_forwarded_for_ip_address = array_map( array( $this, 'standardize_ip_address' ), explode( ',', @$_SERVER["HTTP_X_FORWARDED_FOR"] ) );
|
37 |
+
$ip_list = array_merge( $ip_list, $x_forwarded_for_ip_address );
|
38 |
+
$trusted_proxies = array( '', '::1', '127.0.0.1' );
|
39 |
+
$trusted_proxies = array_map( array( $this, 'standardize_ip_address' ), $trusted_proxies );
|
40 |
+
|
41 |
+
$ip_list = array_diff( $ip_list, $trusted_proxies );
|
42 |
+
}
|
43 |
+
|
44 |
+
array_unshift( $ip_list, '::1' );
|
45 |
+
$ip_address = end( $ip_list );
|
46 |
+
|
47 |
+
if ( ! $ip_address ) {
|
48 |
+
$ip_address = '::1';
|
49 |
+
}
|
50 |
+
|
51 |
+
return $ip_address;
|
52 |
+
}
|
53 |
+
|
54 |
+
/**
|
55 |
+
* Standardize the IPV6 Address & Trim IPV4 Address
|
56 |
+
*
|
57 |
+
* @since 1.5.0
|
58 |
+
*
|
59 |
+
* @param string $ip_address Raw IP Address
|
60 |
+
*
|
61 |
+
* @return string Normalized IP Address
|
62 |
+
*/
|
63 |
+
private function standardize_ip_address( $ip_address ) {
|
64 |
+
$ip_address = trim( $ip_address );
|
65 |
+
$binary_representation = @inet_pton( $ip_address );
|
66 |
+
return empty( $binary_representation ) ? $ip_address : inet_ntop( $binary_representation );
|
67 |
+
}
|
68 |
+
|
69 |
+
}
|
70 |
+
?>
|
ip2country/aalb_maxmind_db_manager.php
ADDED
@@ -0,0 +1,242 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
Copyright 2016-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
5 |
+
|
6 |
+
Licensed under the GNU General Public License as published by the Free Software Foundation,
|
7 |
+
Version 2.0 (the "License"). You may not use this file except in compliance with the License.
|
8 |
+
A copy of the License is located in the "license" file accompanying this file.
|
9 |
+
|
10 |
+
This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
|
11 |
+
either express or implied. See the License for the specific language governing permissions
|
12 |
+
and limitations under the License.
|
13 |
+
*/
|
14 |
+
|
15 |
+
/**
|
16 |
+
*
|
17 |
+
* Manages the operations related to maxmind GeoLite2Country database & maintains regular updates for the same
|
18 |
+
*
|
19 |
+
* @since 1.5.0
|
20 |
+
* @package AmazonAssociatesLinkBuilder
|
21 |
+
* @subpackage AmazonAssociatesLinkBuilder/ip2country
|
22 |
+
*/
|
23 |
+
class Aalb_Maxmind_Db_Manager {
|
24 |
+
|
25 |
+
public $db_upload_dir;
|
26 |
+
public $db_file_path;
|
27 |
+
|
28 |
+
public function __construct() {
|
29 |
+
$this->db_upload_dir = $this->get_db_file_dir();
|
30 |
+
$this->db_file_path = $this->db_upload_dir . MAXMIND_DATA_FILENAME;
|
31 |
+
clearstatcache( true, $this->db_file_path );
|
32 |
+
}
|
33 |
+
|
34 |
+
/**
|
35 |
+
* Downloads & updates the maxmind db file(GeoLite2 Country)
|
36 |
+
*
|
37 |
+
* @argument HTTP Response $response
|
38 |
+
*
|
39 |
+
* @since 1.5.0
|
40 |
+
*
|
41 |
+
*/
|
42 |
+
private function update_db( $response ) {
|
43 |
+
try {
|
44 |
+
$outFile = $this->db_file_path;
|
45 |
+
$tmp_file = $response["tmpfname"];
|
46 |
+
$current_file = fopen( $outFile, 'w' );
|
47 |
+
$donwloaded_file = gzopen( $tmp_file, 'r' );
|
48 |
+
while ( ( $string = gzread( $donwloaded_file, 4096 ) ) != false ) {
|
49 |
+
fwrite( $current_file, $string, strlen( $string ) );
|
50 |
+
}
|
51 |
+
gzclose( $donwloaded_file );
|
52 |
+
fclose( $current_file );
|
53 |
+
unlink( $tmp_file );
|
54 |
+
update_option( AALB_GEOLITE_DB_LAST_UPDATED_TIME, strtotime( wp_remote_retrieve_header( $response["response"], 'Last-Modified' ) ) );
|
55 |
+
} catch ( Exception $e ) {
|
56 |
+
error_log( "Error in maxmind_db_manager:update_db:::" . $e->getMessage() );
|
57 |
+
throw $e;
|
58 |
+
}
|
59 |
+
}
|
60 |
+
|
61 |
+
/*
|
62 |
+
* It checks if the GeoLite Db downloaded file has expired and call for update
|
63 |
+
*
|
64 |
+
* @since 1.5.0
|
65 |
+
*
|
66 |
+
*/
|
67 |
+
public function update_db_if_required() {
|
68 |
+
$this->reset_db_keys_if_required();
|
69 |
+
if ( $this->is_db_expired() ) {
|
70 |
+
$this->check_and_update_db();
|
71 |
+
}
|
72 |
+
}
|
73 |
+
|
74 |
+
/*
|
75 |
+
* It checks if the GeoLite Db has expired
|
76 |
+
*
|
77 |
+
* @since 1.5.0
|
78 |
+
*
|
79 |
+
*/
|
80 |
+
private function is_db_expired() {
|
81 |
+
return ( get_option( AALB_GEOLITE_DB_EXPIRATION_TIME ) == "" || get_option( AALB_GEOLITE_DB_EXPIRATION_TIME ) < time() );
|
82 |
+
}
|
83 |
+
|
84 |
+
/*
|
85 |
+
* It checks if the GeoLite Db update is required and calls for update
|
86 |
+
*
|
87 |
+
* @since 1.5.0
|
88 |
+
*
|
89 |
+
*/
|
90 |
+
private function check_and_update_db() {
|
91 |
+
try {
|
92 |
+
$response = $this->get_db();
|
93 |
+
if ( $response ) {
|
94 |
+
if ( $this->should_update_db( $response["response"] ) ) {
|
95 |
+
$this->update_db( $response );
|
96 |
+
}
|
97 |
+
update_option( AALB_GEOLITE_DB_EXPIRATION_TIME, strtotime( wp_remote_retrieve_header( $response["response"] , 'expires' ) ) );
|
98 |
+
}
|
99 |
+
}
|
100 |
+
catch ( Exception $e ) {
|
101 |
+
error_log( "Error in maxmind_db_manager:should_update_db:::" . $e->getMessage() );
|
102 |
+
}
|
103 |
+
}
|
104 |
+
|
105 |
+
/*
|
106 |
+
* It downlaods the db file
|
107 |
+
*
|
108 |
+
* @since 1.5.0
|
109 |
+
*
|
110 |
+
* @return geolite db on success else null
|
111 |
+
*
|
112 |
+
*/
|
113 |
+
private function get_db() {
|
114 |
+
$response = null;
|
115 |
+
try {
|
116 |
+
$response = $this->customized_download_url( AALB_GEOLITE_COUNTRY_DB_DOWNLOAD_URL );
|
117 |
+
if ( is_wp_error( $response ) ) {
|
118 |
+
error_log( "Maxmind_db_manager:get_db:::" . $response->get_error_message() );
|
119 |
+
}
|
120 |
+
}
|
121 |
+
catch ( Exception $e ) {
|
122 |
+
error_log( "Error in maxmind_db_manager:get_db:::" . $e->getMessage() );
|
123 |
+
}
|
124 |
+
|
125 |
+
return $response;
|
126 |
+
}
|
127 |
+
|
128 |
+
/*
|
129 |
+
* It reset the db keys if required
|
130 |
+
*
|
131 |
+
* @since 1.5.0
|
132 |
+
*
|
133 |
+
*/
|
134 |
+
private function reset_db_keys_if_required() {
|
135 |
+
if ( $this->should_write_new_db_file() ) {
|
136 |
+
update_option( AALB_GEOLITE_DB_EXPIRATION_TIME, 0 );
|
137 |
+
update_option( AALB_GEOLITE_DB_LAST_UPDATED_TIME, 0 );
|
138 |
+
}
|
139 |
+
}
|
140 |
+
|
141 |
+
/*
|
142 |
+
* It checks if writing a new db file operation should be done
|
143 |
+
*
|
144 |
+
* @since 1.5.0
|
145 |
+
*
|
146 |
+
*/
|
147 |
+
private function should_write_new_db_file() {
|
148 |
+
return ( ! file_exists( $this->db_file_path ) && is_writable( $this->db_upload_dir ) );
|
149 |
+
}
|
150 |
+
|
151 |
+
/*
|
152 |
+
* It does basic checks regarding read/write persmissions and then check if update is required
|
153 |
+
*
|
154 |
+
* @param HTTPResponse $response
|
155 |
+
*
|
156 |
+
* @since 1.5.0
|
157 |
+
*
|
158 |
+
* @bool True if geolite db should be updated
|
159 |
+
*/
|
160 |
+
private function should_update_db( $response ) {
|
161 |
+
return ( $this->should_write_new_db_file() || ( is_writable( $this->db_file_path ) && $this->is_version_updated( $response ) ) );
|
162 |
+
}
|
163 |
+
|
164 |
+
/**
|
165 |
+
* It sets the absolute path of the directory where db file is present
|
166 |
+
*
|
167 |
+
* @return string database directory absolute path
|
168 |
+
*
|
169 |
+
* @since 1.5.0
|
170 |
+
*
|
171 |
+
*/
|
172 |
+
private function get_db_file_dir() {
|
173 |
+
$file_dir_path = get_option( AALB_CUSTOM_UPLOAD_PATH );
|
174 |
+
if ( $file_dir_path == "" ) {
|
175 |
+
$file_dir_path = wp_upload_dir()['basedir'] . '/' . AALB_UPLOADS_FOLDER;
|
176 |
+
}
|
177 |
+
|
178 |
+
return $file_dir_path;
|
179 |
+
}
|
180 |
+
|
181 |
+
/*
|
182 |
+
* It checks if the newer version of GeoLite Db file is present
|
183 |
+
*
|
184 |
+
* @ since 1.5.0
|
185 |
+
*
|
186 |
+
* @return bool True if geolite db's newer version is available
|
187 |
+
*/
|
188 |
+
private function is_version_updated( $response ) {
|
189 |
+
return ( get_option( AALB_GEOLITE_DB_LAST_UPDATED_TIME ) == '' ) || ( strtotime( wp_remote_retrieve_header( $response, 'Last-Modified' ) ) > get_option( AALB_GEOLITE_DB_LAST_UPDATED_TIME ) );
|
190 |
+
}
|
191 |
+
|
192 |
+
/**
|
193 |
+
* Downloads a URL to a local temporary file using the WordPress HTTP Class.
|
194 |
+
* Please note, That the calling function must unlink() the file.
|
195 |
+
* Modified from download_url() that is located in wp-admin/includes/file.php. Just changed the response returned
|
196 |
+
*
|
197 |
+
* @since 1.5.0
|
198 |
+
*
|
199 |
+
* @param string $url the URL of the file to download
|
200 |
+
* @param int $timeout The timeout for the request to download the file default 300 seconds
|
201 |
+
*
|
202 |
+
* @return mixed WP_Error on failure, Array of reponse & filename on success
|
203 |
+
*/
|
204 |
+
function customized_download_url( $url, $timeout = 300 ) {
|
205 |
+
//WARNING: The file is not automatically deleted, The script must unlink() the file.
|
206 |
+
if ( ! $url )
|
207 |
+
return new WP_Error( 'http_no_url', __( 'Invalid URL Provided.' ) );
|
208 |
+
|
209 |
+
$url_filename = basename( parse_url( $url, PHP_URL_PATH ) );
|
210 |
+
|
211 |
+
$tmpfname = wp_tempnam( $url_filename );
|
212 |
+
if ( ! $tmpfname )
|
213 |
+
return new WP_Error( 'http_no_file', __( 'Could not create Temporary file.' ) );
|
214 |
+
|
215 |
+
$response = wp_safe_remote_get( $url, array( 'timeout' => $timeout, 'stream' => true, 'filename' => $tmpfname ) );
|
216 |
+
|
217 |
+
if ( is_wp_error( $response ) ) {
|
218 |
+
unlink( $tmpfname );
|
219 |
+
|
220 |
+
return $response;
|
221 |
+
}
|
222 |
+
|
223 |
+
if ( 200 != wp_remote_retrieve_response_code( $response ) ) {
|
224 |
+
unlink( $tmpfname );
|
225 |
+
|
226 |
+
return new WP_Error( 'http_404', trim( wp_remote_retrieve_response_message( $response ) ) );
|
227 |
+
}
|
228 |
+
|
229 |
+
$content_md5 = wp_remote_retrieve_header( $response, 'content-md5' );
|
230 |
+
if ( $content_md5 ) {
|
231 |
+
$md5_check = verify_file_md5( $tmpfname, $content_md5 );
|
232 |
+
if ( is_wp_error( $md5_check ) ) {
|
233 |
+
unlink( $tmpfname );
|
234 |
+
|
235 |
+
return $md5_check;
|
236 |
+
}
|
237 |
+
}
|
238 |
+
return array( "tmpfname" => $tmpfname, "response" => $response );
|
239 |
+
}
|
240 |
+
}
|
241 |
+
|
242 |
+
?>
|
lib/php/aalb_xml_helper.php
CHANGED
@@ -49,7 +49,7 @@ class Aalb_Xml_Helper {
|
|
49 |
$aalb_node->DetailPageURL = isset( $item->DetailPageURL ) ? $item->DetailPageURL : null;
|
50 |
$aalb_node->LargeImageURL = isset( $item->LargeImage->URL ) ? $item->LargeImage->URL : null;
|
51 |
$aalb_node->MediumImageURL = isset( $item->MediumImage->URL ) ? $item->MediumImage->URL : null;
|
52 |
-
$aalb_node->SmallImageURL = isset( $item->
|
53 |
|
54 |
//Marketplace
|
55 |
$marketplace_node_name = $common_marketplace_node_name;
|
49 |
$aalb_node->DetailPageURL = isset( $item->DetailPageURL ) ? $item->DetailPageURL : null;
|
50 |
$aalb_node->LargeImageURL = isset( $item->LargeImage->URL ) ? $item->LargeImage->URL : null;
|
51 |
$aalb_node->MediumImageURL = isset( $item->MediumImage->URL ) ? $item->MediumImage->URL : null;
|
52 |
+
$aalb_node->SmallImageURL = isset( $item->SmallImageURL->URL ) ? $item->SmallImage->URL : null;
|
53 |
|
54 |
//Marketplace
|
55 |
$marketplace_node_name = $common_marketplace_node_name;
|
shortcode/aalb_shortcode_loader.php
CHANGED
@@ -22,9 +22,7 @@ and limitations under the License.
|
|
22 |
* @subpackage AmazonAssociatesLinkBuilder/shortcode
|
23 |
*/
|
24 |
class Aalb_Shortcode_Loader {
|
25 |
-
|
26 |
-
public $shortcode_link = null;
|
27 |
-
public $shortcode_textlink = null;
|
28 |
|
29 |
/**
|
30 |
* Register shortcode with Wordpress
|
@@ -36,16 +34,6 @@ class Aalb_Shortcode_Loader {
|
|
36 |
add_shortcode( AALB_SHORTCODE_AMAZON_TEXT, array( $this, 'amazon_textlink_shortcode_callback' ) );
|
37 |
}
|
38 |
|
39 |
-
/**
|
40 |
-
* Disable shortcode
|
41 |
-
*
|
42 |
-
* @since 1.0.0
|
43 |
-
*/
|
44 |
-
public function remove_shortcode() {
|
45 |
-
remove_shortcode( AALB_SHORTCODE_AMAZON_LINK );
|
46 |
-
remove_shortcode( AALB_SHORTCODE_AMAZON_TEXT );
|
47 |
-
}
|
48 |
-
|
49 |
/**
|
50 |
* Callback function for rendering amazon_link shortcode
|
51 |
*
|
@@ -57,22 +45,7 @@ class Aalb_Shortcode_Loader {
|
|
57 |
* @return HTML HTML for displaying the templates.
|
58 |
*/
|
59 |
public function amazon_link_shortcode_callback( $atts ) {
|
60 |
-
return $this->
|
61 |
-
}
|
62 |
-
|
63 |
-
/**
|
64 |
-
* Create only a single instance of the Aalb Shortcode.
|
65 |
-
* No need to create an instance for rendering each shortcode.
|
66 |
-
*
|
67 |
-
* @since 1.0.0
|
68 |
-
* @return Aalb_Shortcode The instance of Aalb_Shortcode.
|
69 |
-
*/
|
70 |
-
public function get_amazon_link_shortcode() {
|
71 |
-
if ( is_null( $this->shortcode_link ) ) {
|
72 |
-
return new Aalb_Shortcode();
|
73 |
-
}
|
74 |
-
|
75 |
-
return $this->shortcode_link;
|
76 |
}
|
77 |
|
78 |
/**
|
@@ -86,24 +59,23 @@ class Aalb_Shortcode_Loader {
|
|
86 |
* @return HTML HTML for displaying the templates.
|
87 |
*/
|
88 |
public function amazon_textlink_shortcode_callback( $atts ) {
|
89 |
-
return $this->
|
90 |
}
|
91 |
|
92 |
/**
|
93 |
-
* Create only a single instance of the Aalb
|
94 |
* No need to create an instance for rendering each shortcode.
|
95 |
*
|
96 |
-
* @since 1.
|
97 |
-
* @return
|
98 |
*/
|
99 |
-
public function
|
100 |
-
if ( is_null( $this->
|
101 |
-
|
102 |
}
|
103 |
|
104 |
-
return $this->
|
105 |
}
|
106 |
-
|
107 |
}
|
108 |
|
109 |
?>
|
22 |
* @subpackage AmazonAssociatesLinkBuilder/shortcode
|
23 |
*/
|
24 |
class Aalb_Shortcode_Loader {
|
25 |
+
public $shortcode_manager = null;
|
|
|
|
|
26 |
|
27 |
/**
|
28 |
* Register shortcode with Wordpress
|
34 |
add_shortcode( AALB_SHORTCODE_AMAZON_TEXT, array( $this, 'amazon_textlink_shortcode_callback' ) );
|
35 |
}
|
36 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
37 |
/**
|
38 |
* Callback function for rendering amazon_link shortcode
|
39 |
*
|
45 |
* @return HTML HTML for displaying the templates.
|
46 |
*/
|
47 |
public function amazon_link_shortcode_callback( $atts ) {
|
48 |
+
return $this->get_shortcode_manager_instance()->render( $atts );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
49 |
}
|
50 |
|
51 |
/**
|
59 |
* @return HTML HTML for displaying the templates.
|
60 |
*/
|
61 |
public function amazon_textlink_shortcode_callback( $atts ) {
|
62 |
+
return $this->get_shortcode_manager_instance()->render( $atts );
|
63 |
}
|
64 |
|
65 |
/**
|
66 |
+
* Create only a single instance of the Aalb Shortcode manager.
|
67 |
* No need to create an instance for rendering each shortcode.
|
68 |
*
|
69 |
+
* @since 1.5.0
|
70 |
+
* @return Aalb_Shortcode The instance of Aalb_Shortcode.
|
71 |
*/
|
72 |
+
public function get_shortcode_manager_instance() {
|
73 |
+
if ( is_null( $this->shortcode_manager ) ) {
|
74 |
+
$this->shortcode_manager = new Aalb_Shortcode_Manager();
|
75 |
}
|
76 |
|
77 |
+
return $this->shortcode_manager;
|
78 |
}
|
|
|
79 |
}
|
80 |
|
81 |
?>
|
shortcode/aalb_shortcode_manager.php
ADDED
@@ -0,0 +1,176 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
Copyright 2016-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
4 |
+
|
5 |
+
Licensed under the GNU General Public License as published by the Free Software Foundation,
|
6 |
+
Version 2.0 (the "License"). You may not use this file except in compliance with the License.
|
7 |
+
A copy of the License is located in the "license" file accompanying this file.
|
8 |
+
|
9 |
+
This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
|
10 |
+
either express or implied. See the License for the specific language governing permissions
|
11 |
+
and limitations under the License.
|
12 |
+
*/
|
13 |
+
|
14 |
+
/**
|
15 |
+
*
|
16 |
+
* Gets the product information by making a Paapi request and renders the HTML
|
17 |
+
*
|
18 |
+
* @since 1.5.0
|
19 |
+
* @package AmazonAssociatesLinkBuilder
|
20 |
+
* @subpackage AmazonAssociatesLinkBuilder/shortcode
|
21 |
+
*/
|
22 |
+
class Aalb_Shortcode_Manager {
|
23 |
+
protected $paapi_helper;
|
24 |
+
protected $template_engine;
|
25 |
+
protected $helper;
|
26 |
+
//Below is commented out as it was being used in impression tracking
|
27 |
+
//protected $tracking_api_helper;
|
28 |
+
protected $shortcode_helper;
|
29 |
+
protected $customer_country;
|
30 |
+
|
31 |
+
public function __construct() {
|
32 |
+
$this->template_engine = new Aalb_Template_Engine();
|
33 |
+
$this->paapi_helper = new Aalb_Paapi_Helper();
|
34 |
+
$this->helper = new Aalb_Helper();
|
35 |
+
//$this->tracking_api_helper = new Aalb_Tracking_Api_Helper();
|
36 |
+
$this->shortcode_helper = new Aalb_Shortcode_Helper();
|
37 |
+
$this->customer_country = new Aalb_Customer_Country();
|
38 |
+
}
|
39 |
+
|
40 |
+
/**
|
41 |
+
* Add basic styles
|
42 |
+
*
|
43 |
+
* @since 1.5.0
|
44 |
+
*/
|
45 |
+
public function enqueue_styles() {
|
46 |
+
wp_enqueue_style( 'aalb_basics_css', AALB_BASICS_CSS, array(), AALB_PLUGIN_CURRENT_VERSION );
|
47 |
+
}
|
48 |
+
|
49 |
+
/**
|
50 |
+
* The function responsible for rendering the shortcode.
|
51 |
+
* Makes a GET request and calls the render_xml to render the response.
|
52 |
+
*
|
53 |
+
* @since 1.5.0
|
54 |
+
*
|
55 |
+
* @param array $atts Shortcode attribute and values.
|
56 |
+
*
|
57 |
+
* @return HTML Rendered html to display.
|
58 |
+
*/
|
59 |
+
public function render( $atts ) {
|
60 |
+
$shortcode_attributes = $this->get_shortcode_attributes( $atts );
|
61 |
+
$marketplace_list = explode( GEO_TARGETED_LINKS_DELIMITER, $shortcode_attributes['marketplace'] );
|
62 |
+
//Below contains both asin & asins to support both amazon_text_link & amazon_link
|
63 |
+
$asins_list = explode( GEO_TARGETED_LINKS_DELIMITER, $shortcode_attributes['asins'] ? $shortcode_attributes['asins'] : $shortcode_attributes['asin'] );
|
64 |
+
$store_id_list = explode( GEO_TARGETED_LINKS_DELIMITER, $shortcode_attributes['store'] );
|
65 |
+
if ( ( count( $marketplace_list ) === count( $asins_list ) ) && ( count( $asins_list ) === count( $store_id_list ) ) ) {
|
66 |
+
if ( $this->is_shortcode_geo_targeted_links_supported( $marketplace_list ) ) {
|
67 |
+
$marketplace = $this->find_marketplace_of_customer( $marketplace_list );
|
68 |
+
$index_to_render = array_search( $marketplace, $marketplace_list );
|
69 |
+
$index_to_render = $index_to_render === false ? 0 : $index_to_render;
|
70 |
+
$link_code = $index_to_render === 0 ? AALB_GEO_TARGETED_LINKS_DEFAULT_COUNTRY_LINK_CODE : AALB_GEO_TARGETED_LINKS_REDIRECTED_COUNTRY_LINK_CODE;
|
71 |
+
} else {
|
72 |
+
$index_to_render = 0;
|
73 |
+
$link_code = AALB_DEFAULT_LINK_CODE;
|
74 |
+
}
|
75 |
+
|
76 |
+
} else {
|
77 |
+
//Render geo-targeted default country link-code as its safest bet to pick first marketplace. We can end up in showing wrong ASINs due to bigger mess in shortcode but still we will render some ads.
|
78 |
+
if ( count( $asins_list ) === 0 ) {
|
79 |
+
$asins_list = array( null );
|
80 |
+
}
|
81 |
+
$index_to_render = 0;
|
82 |
+
$link_code = AALB_GEO_TARGETED_LINKS_DEFAULT_COUNTRY_LINK_CODE;
|
83 |
+
$this->helper->show_error_in_preview( esc_html__( "There is an error in the count of configured marketplaces, asins and stores in this shortcode. Please fix the parameters for marketplace, asin and store-id.", 'amazon-associates-link-builder' ) );
|
84 |
+
}
|
85 |
+
|
86 |
+
return $this->render_shortcode( $shortcode_attributes, $marketplace_list[$index_to_render], $asins_list[$index_to_render], $store_id_list[$index_to_render], $link_code );
|
87 |
+
}
|
88 |
+
|
89 |
+
/**
|
90 |
+
* Finds whether the shortcode is geo-targetted links supported or not
|
91 |
+
* To be geo-targeted links supported a shortcode needs to have at least 2 entries of marketplaces to define redirection to other
|
92 |
+
*
|
93 |
+
* @since 1.5.0
|
94 |
+
*
|
95 |
+
* @param array $marketplace_list List of all marketplaces present in shortcode
|
96 |
+
*
|
97 |
+
* @return boolean is_shortcode_geo_targetted_links_supported
|
98 |
+
*/
|
99 |
+
private function is_shortcode_geo_targeted_links_supported( $marketplace_list ) {
|
100 |
+
return ( count( $marketplace_list ) > 1 );
|
101 |
+
}
|
102 |
+
|
103 |
+
/**
|
104 |
+
* The function responsible for rendering the shortcode.
|
105 |
+
* Makes a GET request and calls the render_xml to render the response.
|
106 |
+
*
|
107 |
+
* @since 1.5.0
|
108 |
+
*
|
109 |
+
* @param array $shortcode_attributes Shortcode attribute and values.
|
110 |
+
* @param string $redirected_marketplace Marketplace of the asin to look into.
|
111 |
+
* @param string $redirected_store The identifier of the store to be used for adunit with $redirected_marketplace
|
112 |
+
*
|
113 |
+
* @return HTML Rendered html to display.
|
114 |
+
*/
|
115 |
+
private function render_shortcode( $shortcode_attributes, $marketplace, $asins, $store_id, $link_code ) {
|
116 |
+
//$validated_link_id = $this->shortcode_helper->get_validated_link_id( $shortcode_attributes['link_id'] );
|
117 |
+
$validated_marketplace = $this->shortcode_helper->get_validated_marketplace( $marketplace );
|
118 |
+
//Below contains both asin & asins to support both amazon_text_link & amazon_link
|
119 |
+
$validated_asins = $this->shortcode_helper->get_validated_asins( $asins );
|
120 |
+
$validated_template = $this->shortcode_helper->get_validated_template( $shortcode_attributes['template'] );
|
121 |
+
$validated_store_id = $this->shortcode_helper->get_validated_store_id( $store_id );
|
122 |
+
$link_text = $shortcode_attributes['text'];
|
123 |
+
|
124 |
+
$marketplace_endpoint = $this->shortcode_helper->get_marketplace_endpoint( $validated_marketplace );
|
125 |
+
$url = $this->paapi_helper->get_item_lookup_url( $validated_asins, $marketplace_endpoint, $validated_store_id );
|
126 |
+
$formatted_asins = $this->shortcode_helper->format_asins( $validated_asins );
|
127 |
+
$this->shortcode_helper->enqueue_template_styles( $validated_template );
|
128 |
+
|
129 |
+
$products_key = $this->helper->build_products_cache_key( $formatted_asins, $validated_marketplace, $validated_store_id );
|
130 |
+
$products_template_key = $this->helper->build_template_cache_key( $formatted_asins, $validated_marketplace, $validated_store_id, $validated_template );
|
131 |
+
try {
|
132 |
+
return str_replace( array( '[[UNIQUE_ID]]', '[[Amazon_Link_Text]]' ), array( str_replace( '.', '-', $products_template_key ), $link_text ), $this->template_engine->render( $products_template_key, $products_key, $validated_template, $url, $validated_marketplace, $link_code ) );
|
133 |
+
} catch ( Exception $e ) {
|
134 |
+
error_log( $this->paapi_helper->get_error_message( $e->getMessage() ) );
|
135 |
+
}
|
136 |
+
}
|
137 |
+
|
138 |
+
/**
|
139 |
+
* Returns default shortcode attributes if not mentioned
|
140 |
+
*
|
141 |
+
* @since 1.5.0
|
142 |
+
*
|
143 |
+
* @param array $atts Shortcode attributes.
|
144 |
+
*
|
145 |
+
* @return array Default shortcode attributes if not mentioned.
|
146 |
+
*/
|
147 |
+
private function get_shortcode_attributes( $atts ) {
|
148 |
+
//Below shortcode contains both asin & asins to support both amazon_text_link & amazon_link
|
149 |
+
$shortcode_attributes = shortcode_atts( array(
|
150 |
+
'asin' => null,
|
151 |
+
'asins' => null,
|
152 |
+
'marketplace' => get_option( AALB_DEFAULT_MARKETPLACE ),
|
153 |
+
'store' => get_option( AALB_DEFAULT_STORE_ID ),
|
154 |
+
'template' => get_option( AALB_DEFAULT_TEMPLATE ),
|
155 |
+
'link_id' => null,
|
156 |
+
'text' => null
|
157 |
+
), $atts );
|
158 |
+
|
159 |
+
return $shortcode_attributes;
|
160 |
+
}
|
161 |
+
|
162 |
+
/**
|
163 |
+
* Returns default shortcode attributes if not mentioned
|
164 |
+
*
|
165 |
+
* @since 1.5.0
|
166 |
+
*
|
167 |
+
* @param Array $marketplace_list Array of marketplaces present in shortcode
|
168 |
+
*
|
169 |
+
* @return String Marketplace from which customer is coming. Empty in case marketplace not added by user or no e-commerce presence
|
170 |
+
*/
|
171 |
+
private function find_marketplace_of_customer( $marketplace_list ) {
|
172 |
+
$country_code = $this->customer_country->get_country_iso_code();
|
173 |
+
return in_array( $country_code, $marketplace_list ) ? $country_code : "";
|
174 |
+
}
|
175 |
+
}
|
176 |
+
?>
|
vendor/autoload.php
ADDED
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
// autoload.php @generated by Composer
|
4 |
+
|
5 |
+
require_once __DIR__ . '/composer/autoload_real.php';
|
6 |
+
|
7 |
+
return ComposerAutoloaderInit04057e52b45ebf7b66537656fab0b7df::getLoader();
|
vendor/composer/ClassLoader.php
ADDED
@@ -0,0 +1,445 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* This file is part of Composer.
|
5 |
+
*
|
6 |
+
* (c) Nils Adermann <naderman@naderman.de>
|
7 |
+
* Jordi Boggiano <j.boggiano@seld.be>
|
8 |
+
*
|
9 |
+
* For the full copyright and license information, please view the LICENSE
|
10 |
+
* file that was distributed with this source code.
|
11 |
+
*/
|
12 |
+
|
13 |
+
namespace Composer\Autoload;
|
14 |
+
|
15 |
+
/**
|
16 |
+
* ClassLoader implements a PSR-0, PSR-4 and classmap class loader.
|
17 |
+
*
|
18 |
+
* $loader = new \Composer\Autoload\ClassLoader();
|
19 |
+
*
|
20 |
+
* // register classes with namespaces
|
21 |
+
* $loader->add('Symfony\Component', __DIR__.'/component');
|
22 |
+
* $loader->add('Symfony', __DIR__.'/framework');
|
23 |
+
*
|
24 |
+
* // activate the autoloader
|
25 |
+
* $loader->register();
|
26 |
+
*
|
27 |
+
* // to enable searching the include path (eg. for PEAR packages)
|
28 |
+
* $loader->setUseIncludePath(true);
|
29 |
+
*
|
30 |
+
* In this example, if you try to use a class in the Symfony\Component
|
31 |
+
* namespace or one of its children (Symfony\Component\Console for instance),
|
32 |
+
* the autoloader will first look for the class under the component/
|
33 |
+
* directory, and it will then fallback to the framework/ directory if not
|
34 |
+
* found before giving up.
|
35 |
+
*
|
36 |
+
* This class is loosely based on the Symfony UniversalClassLoader.
|
37 |
+
*
|
38 |
+
* @author Fabien Potencier <fabien@symfony.com>
|
39 |
+
* @author Jordi Boggiano <j.boggiano@seld.be>
|
40 |
+
* @see http://www.php-fig.org/psr/psr-0/
|
41 |
+
* @see http://www.php-fig.org/psr/psr-4/
|
42 |
+
*/
|
43 |
+
class ClassLoader
|
44 |
+
{
|
45 |
+
// PSR-4
|
46 |
+
private $prefixLengthsPsr4 = array();
|
47 |
+
private $prefixDirsPsr4 = array();
|
48 |
+
private $fallbackDirsPsr4 = array();
|
49 |
+
|
50 |
+
// PSR-0
|
51 |
+
private $prefixesPsr0 = array();
|
52 |
+
private $fallbackDirsPsr0 = array();
|
53 |
+
|
54 |
+
private $useIncludePath = false;
|
55 |
+
private $classMap = array();
|
56 |
+
private $classMapAuthoritative = false;
|
57 |
+
private $missingClasses = array();
|
58 |
+
private $apcuPrefix;
|
59 |
+
|
60 |
+
public function getPrefixes()
|
61 |
+
{
|
62 |
+
if (!empty($this->prefixesPsr0)) {
|
63 |
+
return call_user_func_array('array_merge', $this->prefixesPsr0);
|
64 |
+
}
|
65 |
+
|
66 |
+
return array();
|
67 |
+
}
|
68 |
+
|
69 |
+
public function getPrefixesPsr4()
|
70 |
+
{
|
71 |
+
return $this->prefixDirsPsr4;
|
72 |
+
}
|
73 |
+
|
74 |
+
public function getFallbackDirs()
|
75 |
+
{
|
76 |
+
return $this->fallbackDirsPsr0;
|
77 |
+
}
|
78 |
+
|
79 |
+
public function getFallbackDirsPsr4()
|
80 |
+
{
|
81 |
+
return $this->fallbackDirsPsr4;
|
82 |
+
}
|
83 |
+
|
84 |
+
public function getClassMap()
|
85 |
+
{
|
86 |
+
return $this->classMap;
|
87 |
+
}
|
88 |
+
|
89 |
+
/**
|
90 |
+
* @param array $classMap Class to filename map
|
91 |
+
*/
|
92 |
+
public function addClassMap(array $classMap)
|
93 |
+
{
|
94 |
+
if ($this->classMap) {
|
95 |
+
$this->classMap = array_merge($this->classMap, $classMap);
|
96 |
+
} else {
|
97 |
+
$this->classMap = $classMap;
|
98 |
+
}
|
99 |
+
}
|
100 |
+
|
101 |
+
/**
|
102 |
+
* Registers a set of PSR-0 directories for a given prefix, either
|
103 |
+
* appending or prepending to the ones previously set for this prefix.
|
104 |
+
*
|
105 |
+
* @param string $prefix The prefix
|
106 |
+
* @param array|string $paths The PSR-0 root directories
|
107 |
+
* @param bool $prepend Whether to prepend the directories
|
108 |
+
*/
|
109 |
+
public function add($prefix, $paths, $prepend = false)
|
110 |
+
{
|
111 |
+
if (!$prefix) {
|
112 |
+
if ($prepend) {
|
113 |
+
$this->fallbackDirsPsr0 = array_merge(
|
114 |
+
(array) $paths,
|
115 |
+
$this->fallbackDirsPsr0
|
116 |
+
);
|
117 |
+
} else {
|
118 |
+
$this->fallbackDirsPsr0 = array_merge(
|
119 |
+
$this->fallbackDirsPsr0,
|
120 |
+
(array) $paths
|
121 |
+
);
|
122 |
+
}
|
123 |
+
|
124 |
+
return;
|
125 |
+
}
|
126 |
+
|
127 |
+
$first = $prefix[0];
|
128 |
+
if (!isset($this->prefixesPsr0[$first][$prefix])) {
|
129 |
+
$this->prefixesPsr0[$first][$prefix] = (array) $paths;
|
130 |
+
|
131 |
+
return;
|
132 |
+
}
|
133 |
+
if ($prepend) {
|
134 |
+
$this->prefixesPsr0[$first][$prefix] = array_merge(
|
135 |
+
(array) $paths,
|
136 |
+
$this->prefixesPsr0[$first][$prefix]
|
137 |
+
);
|
138 |
+
} else {
|
139 |
+
$this->prefixesPsr0[$first][$prefix] = array_merge(
|
140 |
+
$this->prefixesPsr0[$first][$prefix],
|
141 |
+
(array) $paths
|
142 |
+
);
|
143 |
+
}
|
144 |
+
}
|
145 |
+
|
146 |
+
/**
|
147 |
+
* Registers a set of PSR-4 directories for a given namespace, either
|
148 |
+
* appending or prepending to the ones previously set for this namespace.
|
149 |
+
*
|
150 |
+
* @param string $prefix The prefix/namespace, with trailing '\\'
|
151 |
+
* @param array|string $paths The PSR-4 base directories
|
152 |
+
* @param bool $prepend Whether to prepend the directories
|
153 |
+
*
|
154 |
+
* @throws \InvalidArgumentException
|
155 |
+
*/
|
156 |
+
public function addPsr4($prefix, $paths, $prepend = false)
|
157 |
+
{
|
158 |
+
if (!$prefix) {
|
159 |
+
// Register directories for the root namespace.
|
160 |
+
if ($prepend) {
|
161 |
+
$this->fallbackDirsPsr4 = array_merge(
|
162 |
+
(array) $paths,
|
163 |
+
$this->fallbackDirsPsr4
|
164 |
+
);
|
165 |
+
} else {
|
166 |
+
$this->fallbackDirsPsr4 = array_merge(
|
167 |
+
$this->fallbackDirsPsr4,
|
168 |
+
(array) $paths
|
169 |
+
);
|
170 |
+
}
|
171 |
+
} elseif (!isset($this->prefixDirsPsr4[$prefix])) {
|
172 |
+
// Register directories for a new namespace.
|
173 |
+
$length = strlen($prefix);
|
174 |
+
if ('\\' !== $prefix[$length - 1]) {
|
175 |
+
throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
|
176 |
+
}
|
177 |
+
$this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
|
178 |
+
$this->prefixDirsPsr4[$prefix] = (array) $paths;
|
179 |
+
} elseif ($prepend) {
|
180 |
+
// Prepend directories for an already registered namespace.
|
181 |
+
$this->prefixDirsPsr4[$prefix] = array_merge(
|
182 |
+
(array) $paths,
|
183 |
+
$this->prefixDirsPsr4[$prefix]
|
184 |
+
);
|
185 |
+
} else {
|
186 |
+
// Append directories for an already registered namespace.
|
187 |
+
$this->prefixDirsPsr4[$prefix] = array_merge(
|
188 |
+
$this->prefixDirsPsr4[$prefix],
|
189 |
+
(array) $paths
|
190 |
+
);
|
191 |
+
}
|
192 |
+
}
|
193 |
+
|
194 |
+
/**
|
195 |
+
* Registers a set of PSR-0 directories for a given prefix,
|
196 |
+
* replacing any others previously set for this prefix.
|
197 |
+
*
|
198 |
+
* @param string $prefix The prefix
|
199 |
+
* @param array|string $paths The PSR-0 base directories
|
200 |
+
*/
|
201 |
+
public function set($prefix, $paths)
|
202 |
+
{
|
203 |
+
if (!$prefix) {
|
204 |
+
$this->fallbackDirsPsr0 = (array) $paths;
|
205 |
+
} else {
|
206 |
+
$this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths;
|
207 |
+
}
|
208 |
+
}
|
209 |
+
|
210 |
+
/**
|
211 |
+
* Registers a set of PSR-4 directories for a given namespace,
|
212 |
+
* replacing any others previously set for this namespace.
|
213 |
+
*
|
214 |
+
* @param string $prefix The prefix/namespace, with trailing '\\'
|
215 |
+
* @param array|string $paths The PSR-4 base directories
|
216 |
+
*
|
217 |
+
* @throws \InvalidArgumentException
|
218 |
+
*/
|
219 |
+
public function setPsr4($prefix, $paths)
|
220 |
+
{
|
221 |
+
if (!$prefix) {
|
222 |
+
$this->fallbackDirsPsr4 = (array) $paths;
|
223 |
+
} else {
|
224 |
+
$length = strlen($prefix);
|
225 |
+
if ('\\' !== $prefix[$length - 1]) {
|
226 |
+
throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
|
227 |
+
}
|
228 |
+
$this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
|
229 |
+
$this->prefixDirsPsr4[$prefix] = (array) $paths;
|
230 |
+
}
|
231 |
+
}
|
232 |
+
|
233 |
+
/**
|
234 |
+
* Turns on searching the include path for class files.
|
235 |
+
*
|
236 |
+
* @param bool $useIncludePath
|
237 |
+
*/
|
238 |
+
public function setUseIncludePath($useIncludePath)
|
239 |
+
{
|
240 |
+
$this->useIncludePath = $useIncludePath;
|
241 |
+
}
|
242 |
+
|
243 |
+
/**
|
244 |
+
* Can be used to check if the autoloader uses the include path to check
|
245 |
+
* for classes.
|
246 |
+
*
|
247 |
+
* @return bool
|
248 |
+
*/
|
249 |
+
public function getUseIncludePath()
|
250 |
+
{
|
251 |
+
return $this->useIncludePath;
|
252 |
+
}
|
253 |
+
|
254 |
+
/**
|
255 |
+
* Turns off searching the prefix and fallback directories for classes
|
256 |
+
* that have not been registered with the class map.
|
257 |
+
*
|
258 |
+
* @param bool $classMapAuthoritative
|
259 |
+
*/
|
260 |
+
public function setClassMapAuthoritative($classMapAuthoritative)
|
261 |
+
{
|
262 |
+
$this->classMapAuthoritative = $classMapAuthoritative;
|
263 |
+
}
|
264 |
+
|
265 |
+
/**
|
266 |
+
* Should class lookup fail if not found in the current class map?
|
267 |
+
*
|
268 |
+
* @return bool
|
269 |
+
*/
|
270 |
+
public function isClassMapAuthoritative()
|
271 |
+
{
|
272 |
+
return $this->classMapAuthoritative;
|
273 |
+
}
|
274 |
+
|
275 |
+
/**
|
276 |
+
* APCu prefix to use to cache found/not-found classes, if the extension is enabled.
|
277 |
+
*
|
278 |
+
* @param string|null $apcuPrefix
|
279 |
+
*/
|
280 |
+
public function setApcuPrefix($apcuPrefix)
|
281 |
+
{
|
282 |
+
$this->apcuPrefix = function_exists('apcu_fetch') && ini_get('apc.enabled') ? $apcuPrefix : null;
|
283 |
+
}
|
284 |
+
|
285 |
+
/**
|
286 |
+
* The APCu prefix in use, or null if APCu caching is not enabled.
|
287 |
+
*
|
288 |
+
* @return string|null
|
289 |
+
*/
|
290 |
+
public function getApcuPrefix()
|
291 |
+
{
|
292 |
+
return $this->apcuPrefix;
|
293 |
+
}
|
294 |
+
|
295 |
+
/**
|
296 |
+
* Registers this instance as an autoloader.
|
297 |
+
*
|
298 |
+
* @param bool $prepend Whether to prepend the autoloader or not
|
299 |
+
*/
|
300 |
+
public function register($prepend = false)
|
301 |
+
{
|
302 |
+
spl_autoload_register(array($this, 'loadClass'), true, $prepend);
|
303 |
+
}
|
304 |
+
|
305 |
+
/**
|
306 |
+
* Unregisters this instance as an autoloader.
|
307 |
+
*/
|
308 |
+
public function unregister()
|
309 |
+
{
|
310 |
+
spl_autoload_unregister(array($this, 'loadClass'));
|
311 |
+
}
|
312 |
+
|
313 |
+
/**
|
314 |
+
* Loads the given class or interface.
|
315 |
+
*
|
316 |
+
* @param string $class The name of the class
|
317 |
+
* @return bool|null True if loaded, null otherwise
|
318 |
+
*/
|
319 |
+
public function loadClass($class)
|
320 |
+
{
|
321 |
+
if ($file = $this->findFile($class)) {
|
322 |
+
includeFile($file);
|
323 |
+
|
324 |
+
return true;
|
325 |
+
}
|
326 |
+
}
|
327 |
+
|
328 |
+
/**
|
329 |
+
* Finds the path to the file where the class is defined.
|
330 |
+
*
|
331 |
+
* @param string $class The name of the class
|
332 |
+
*
|
333 |
+
* @return string|false The path if found, false otherwise
|
334 |
+
*/
|
335 |
+
public function findFile($class)
|
336 |
+
{
|
337 |
+
// class map lookup
|
338 |
+
if (isset($this->classMap[$class])) {
|
339 |
+
return $this->classMap[$class];
|
340 |
+
}
|
341 |
+
if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) {
|
342 |
+
return false;
|
343 |
+
}
|
344 |
+
if (null !== $this->apcuPrefix) {
|
345 |
+
$file = apcu_fetch($this->apcuPrefix.$class, $hit);
|
346 |
+
if ($hit) {
|
347 |
+
return $file;
|
348 |
+
}
|
349 |
+
}
|
350 |
+
|
351 |
+
$file = $this->findFileWithExtension($class, '.php');
|
352 |
+
|
353 |
+
// Search for Hack files if we are running on HHVM
|
354 |
+
if (false === $file && defined('HHVM_VERSION')) {
|
355 |
+
$file = $this->findFileWithExtension($class, '.hh');
|
356 |
+
}
|
357 |
+
|
358 |
+
if (null !== $this->apcuPrefix) {
|
359 |
+
apcu_add($this->apcuPrefix.$class, $file);
|
360 |
+
}
|
361 |
+
|
362 |
+
if (false === $file) {
|
363 |
+
// Remember that this class does not exist.
|
364 |
+
$this->missingClasses[$class] = true;
|
365 |
+
}
|
366 |
+
|
367 |
+
return $file;
|
368 |
+
}
|
369 |
+
|
370 |
+
private function findFileWithExtension($class, $ext)
|
371 |
+
{
|
372 |
+
// PSR-4 lookup
|
373 |
+
$logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;
|
374 |
+
|
375 |
+
$first = $class[0];
|
376 |
+
if (isset($this->prefixLengthsPsr4[$first])) {
|
377 |
+
$subPath = $class;
|
378 |
+
while (false !== $lastPos = strrpos($subPath, '\\')) {
|
379 |
+
$subPath = substr($subPath, 0, $lastPos);
|
380 |
+
$search = $subPath.'\\';
|
381 |
+
if (isset($this->prefixDirsPsr4[$search])) {
|
382 |
+
foreach ($this->prefixDirsPsr4[$search] as $dir) {
|
383 |
+
$length = $this->prefixLengthsPsr4[$first][$search];
|
384 |
+
if (file_exists($file = $dir . DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $length))) {
|
385 |
+
return $file;
|
386 |
+
}
|
387 |
+
}
|
388 |
+
}
|
389 |
+
}
|
390 |
+
}
|
391 |
+
|
392 |
+
// PSR-4 fallback dirs
|
393 |
+
foreach ($this->fallbackDirsPsr4 as $dir) {
|
394 |
+
if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {
|
395 |
+
return $file;
|
396 |
+
}
|
397 |
+
}
|
398 |
+
|
399 |
+
// PSR-0 lookup
|
400 |
+
if (false !== $pos = strrpos($class, '\\')) {
|
401 |
+
// namespaced class name
|
402 |
+
$logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)
|
403 |
+
. strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);
|
404 |
+
} else {
|
405 |
+
// PEAR-like class name
|
406 |
+
$logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;
|
407 |
+
}
|
408 |
+
|
409 |
+
if (isset($this->prefixesPsr0[$first])) {
|
410 |
+
foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {
|
411 |
+
if (0 === strpos($class, $prefix)) {
|
412 |
+
foreach ($dirs as $dir) {
|
413 |
+
if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
|
414 |
+
return $file;
|
415 |
+
}
|
416 |
+
}
|
417 |
+
}
|
418 |
+
}
|
419 |
+
}
|
420 |
+
|
421 |
+
// PSR-0 fallback dirs
|
422 |
+
foreach ($this->fallbackDirsPsr0 as $dir) {
|
423 |
+
if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
|
424 |
+
return $file;
|
425 |
+
}
|
426 |
+
}
|
427 |
+
|
428 |
+
// PSR-0 include paths.
|
429 |
+
if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
|
430 |
+
return $file;
|
431 |
+
}
|
432 |
+
|
433 |
+
return false;
|
434 |
+
}
|
435 |
+
}
|
436 |
+
|
437 |
+
/**
|
438 |
+
* Scope isolated include.
|
439 |
+
*
|
440 |
+
* Prevents access to $this/self from included files.
|
441 |
+
*/
|
442 |
+
function includeFile($file)
|
443 |
+
{
|
444 |
+
include $file;
|
445 |
+
}
|
vendor/composer/LICENSE
ADDED
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
|
2 |
+
Copyright (c) Nils Adermann, Jordi Boggiano
|
3 |
+
|
4 |
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
5 |
+
of this software and associated documentation files (the "Software"), to deal
|
6 |
+
in the Software without restriction, including without limitation the rights
|
7 |
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
8 |
+
copies of the Software, and to permit persons to whom the Software is furnished
|
9 |
+
to do so, subject to the following conditions:
|
10 |
+
|
11 |
+
The above copyright notice and this permission notice shall be included in all
|
12 |
+
copies or substantial portions of the Software.
|
13 |
+
|
14 |
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
15 |
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
16 |
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
17 |
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
18 |
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
19 |
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
20 |
+
THE SOFTWARE.
|
21 |
+
|
vendor/composer/autoload_classmap.php
ADDED
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
// autoload_classmap.php @generated by Composer
|
4 |
+
|
5 |
+
$vendorDir = dirname(dirname(__FILE__));
|
6 |
+
$baseDir = dirname($vendorDir);
|
7 |
+
|
8 |
+
return array(
|
9 |
+
);
|
vendor/composer/autoload_namespaces.php
ADDED
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
// autoload_namespaces.php @generated by Composer
|
4 |
+
|
5 |
+
$vendorDir = dirname(dirname(__FILE__));
|
6 |
+
$baseDir = dirname($vendorDir);
|
7 |
+
|
8 |
+
return array(
|
9 |
+
);
|
vendor/composer/autoload_psr4.php
ADDED
@@ -0,0 +1,14 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
// autoload_psr4.php @generated by Composer
|
4 |
+
|
5 |
+
$vendorDir = dirname(dirname(__FILE__));
|
6 |
+
$baseDir = dirname($vendorDir);
|
7 |
+
|
8 |
+
return array(
|
9 |
+
'MaxMind\\WebService\\' => array($vendorDir . '/maxmind/web-service-common/src/WebService'),
|
10 |
+
'MaxMind\\Exception\\' => array($vendorDir . '/maxmind/web-service-common/src/Exception'),
|
11 |
+
'MaxMind\\Db\\' => array($vendorDir . '/maxmind-db/reader/src/MaxMind/Db'),
|
12 |
+
'GeoIp2\\' => array($vendorDir . '/geoip2/geoip2/src'),
|
13 |
+
'Composer\\CaBundle\\' => array($vendorDir . '/composer/ca-bundle/src'),
|
14 |
+
);
|
vendor/composer/autoload_real.php
ADDED
@@ -0,0 +1,52 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
// autoload_real.php @generated by Composer
|
4 |
+
|
5 |
+
class ComposerAutoloaderInit04057e52b45ebf7b66537656fab0b7df
|
6 |
+
{
|
7 |
+
private static $loader;
|
8 |
+
|
9 |
+
public static function loadClassLoader($class)
|
10 |
+
{
|
11 |
+
if ('Composer\Autoload\ClassLoader' === $class) {
|
12 |
+
require __DIR__ . '/ClassLoader.php';
|
13 |
+
}
|
14 |
+
}
|
15 |
+
|
16 |
+
public static function getLoader()
|
17 |
+
{
|
18 |
+
if (null !== self::$loader) {
|
19 |
+
return self::$loader;
|
20 |
+
}
|
21 |
+
|
22 |
+
spl_autoload_register(array('ComposerAutoloaderInit04057e52b45ebf7b66537656fab0b7df', 'loadClassLoader'), true, true);
|
23 |
+
self::$loader = $loader = new \Composer\Autoload\ClassLoader();
|
24 |
+
spl_autoload_unregister(array('ComposerAutoloaderInit04057e52b45ebf7b66537656fab0b7df', 'loadClassLoader'));
|
25 |
+
|
26 |
+
$useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
|
27 |
+
if ($useStaticLoader) {
|
28 |
+
require_once __DIR__ . '/autoload_static.php';
|
29 |
+
|
30 |
+
call_user_func(\Composer\Autoload\ComposerStaticInit04057e52b45ebf7b66537656fab0b7df::getInitializer($loader));
|
31 |
+
} else {
|
32 |
+
$map = require __DIR__ . '/autoload_namespaces.php';
|
33 |
+
foreach ($map as $namespace => $path) {
|
34 |
+
$loader->set($namespace, $path);
|
35 |
+
}
|
36 |
+
|
37 |
+
$map = require __DIR__ . '/autoload_psr4.php';
|
38 |
+
foreach ($map as $namespace => $path) {
|
39 |
+
$loader->setPsr4($namespace, $path);
|
40 |
+
}
|
41 |
+
|
42 |
+
$classMap = require __DIR__ . '/autoload_classmap.php';
|
43 |
+
if ($classMap) {
|
44 |
+
$loader->addClassMap($classMap);
|
45 |
+
}
|
46 |
+
}
|
47 |
+
|
48 |
+
$loader->register(true);
|
49 |
+
|
50 |
+
return $loader;
|
51 |
+
}
|
52 |
+
}
|
vendor/composer/autoload_static.php
ADDED
@@ -0,0 +1,57 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
// autoload_static.php @generated by Composer
|
4 |
+
|
5 |
+
namespace Composer\Autoload;
|
6 |
+
|
7 |
+
class ComposerStaticInit04057e52b45ebf7b66537656fab0b7df
|
8 |
+
{
|
9 |
+
public static $prefixLengthsPsr4 = array (
|
10 |
+
'M' =>
|
11 |
+
array (
|
12 |
+
'MaxMind\\WebService\\' => 19,
|
13 |
+
'MaxMind\\Exception\\' => 18,
|
14 |
+
'MaxMind\\Db\\' => 11,
|
15 |
+
),
|
16 |
+
'G' =>
|
17 |
+
array (
|
18 |
+
'GeoIp2\\' => 7,
|
19 |
+
),
|
20 |
+
'C' =>
|
21 |
+
array (
|
22 |
+
'Composer\\CaBundle\\' => 18,
|
23 |
+
),
|
24 |
+
);
|
25 |
+
|
26 |
+
public static $prefixDirsPsr4 = array (
|
27 |
+
'MaxMind\\WebService\\' =>
|
28 |
+
array (
|
29 |
+
0 => __DIR__ . '/..' . '/maxmind/web-service-common/src/WebService',
|
30 |
+
),
|
31 |
+
'MaxMind\\Exception\\' =>
|
32 |
+
array (
|
33 |
+
0 => __DIR__ . '/..' . '/maxmind/web-service-common/src/Exception',
|
34 |
+
),
|
35 |
+
'MaxMind\\Db\\' =>
|
36 |
+
array (
|
37 |
+
0 => __DIR__ . '/..' . '/maxmind-db/reader/src/MaxMind/Db',
|
38 |
+
),
|
39 |
+
'GeoIp2\\' =>
|
40 |
+
array (
|
41 |
+
0 => __DIR__ . '/..' . '/geoip2/geoip2/src',
|
42 |
+
),
|
43 |
+
'Composer\\CaBundle\\' =>
|
44 |
+
array (
|
45 |
+
0 => __DIR__ . '/..' . '/composer/ca-bundle/src',
|
46 |
+
),
|
47 |
+
);
|
48 |
+
|
49 |
+
public static function getInitializer(ClassLoader $loader)
|
50 |
+
{
|
51 |
+
return \Closure::bind(function () use ($loader) {
|
52 |
+
$loader->prefixLengthsPsr4 = ComposerStaticInit04057e52b45ebf7b66537656fab0b7df::$prefixLengthsPsr4;
|
53 |
+
$loader->prefixDirsPsr4 = ComposerStaticInit04057e52b45ebf7b66537656fab0b7df::$prefixDirsPsr4;
|
54 |
+
|
55 |
+
}, null, ClassLoader::class);
|
56 |
+
}
|
57 |
+
}
|
vendor/composer/ca-bundle/LICENSE
ADDED
@@ -0,0 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
Copyright (C) 2016 Composer
|
2 |
+
|
3 |
+
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
4 |
+
this software and associated documentation files (the "Software"), to deal in
|
5 |
+
the Software without restriction, including without limitation the rights to
|
6 |
+
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
7 |
+
of the Software, and to permit persons to whom the Software is furnished to do
|
8 |
+
so, subject to the following conditions:
|
9 |
+
|
10 |
+
The above copyright notice and this permission notice shall be included in all
|
11 |
+
copies or substantial portions of the Software.
|
12 |
+
|
13 |
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
14 |
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
15 |
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
16 |
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
17 |
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
18 |
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
19 |
+
SOFTWARE.
|
vendor/composer/ca-bundle/README.md
ADDED
@@ -0,0 +1,77 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
composer/ca-bundle
|
2 |
+
==================
|
3 |
+
|
4 |
+
Small utility library that lets you find a path to the system CA bundle,
|
5 |
+
and includes a fallback to the Mozilla CA bundle.
|
6 |
+
|
7 |
+
Originally written as part of [composer/composer](https://github.com/composer/composer),
|
8 |
+
now extracted and made available as a stand-alone library.
|
9 |
+
|
10 |
+
|
11 |
+
Installation
|
12 |
+
------------
|
13 |
+
|
14 |
+
Install the latest version with:
|
15 |
+
|
16 |
+
```bash
|
17 |
+
$ composer require composer/ca-bundle
|
18 |
+
```
|
19 |
+
|
20 |
+
|
21 |
+
Requirements
|
22 |
+
------------
|
23 |
+
|
24 |
+
* PHP 5.3.2 is required but using the latest version of PHP is highly recommended.
|
25 |
+
|
26 |
+
|
27 |
+
Basic usage
|
28 |
+
-----------
|
29 |
+
|
30 |
+
# `Composer\CaBundle\CaBundle`
|
31 |
+
|
32 |
+
- `CaBundle::getSystemCaRootBundlePath()`: Returns the system CA bundle path, or a path to the bundled one as fallback
|
33 |
+
- `CaBundle::getBundledCaBundlePath()`: Returns the path to the bundled CA file
|
34 |
+
- `CaBundle::validateCaFile($filename)`: Validates a CA file using opensl_x509_parse only if it is safe to use
|
35 |
+
- `CaBundle::isOpensslParseSafe()`: Test if it is safe to use the PHP function openssl_x509_parse()
|
36 |
+
- `CaBundle::reset()`: Resets the static caches
|
37 |
+
|
38 |
+
|
39 |
+
## To use with curl
|
40 |
+
|
41 |
+
```php
|
42 |
+
$curl = curl_init("https://example.org/");
|
43 |
+
|
44 |
+
$caPathOrFile = \Composer\CaBundle\CaBundle::getSystemCaRootBundlePath();
|
45 |
+
if (is_dir($caPathOrFile) || (is_link($caPathOrFile) && is_dir(readlink($caPathOrFile)))) {
|
46 |
+
curl_setopt($curl, CURLOPT_CAPATH, $caPathOrFile);
|
47 |
+
} else {
|
48 |
+
curl_setopt($curl, CURLOPT_CAINFO, $caPathOrFile);
|
49 |
+
}
|
50 |
+
|
51 |
+
$result = curl_exec($curl);
|
52 |
+
```
|
53 |
+
|
54 |
+
## To use with php streams
|
55 |
+
|
56 |
+
```php
|
57 |
+
$opts = array(
|
58 |
+
'http' => array(
|
59 |
+
'method' => "GET"
|
60 |
+
)
|
61 |
+
);
|
62 |
+
|
63 |
+
$caPathOrFile = \Composer\CaBundle\CaBundle::getSystemCaRootBundlePath();
|
64 |
+
if (is_dir($caPathOrFile) || (is_link($caPathOrFile) && is_dir(readlink($caPathOrFile)))) {
|
65 |
+
$opts['ssl']['capath'] = $caPathOrFile;
|
66 |
+
} else {
|
67 |
+
$opts['ssl']['cafile'] = $caPathOrFile;
|
68 |
+
}
|
69 |
+
|
70 |
+
$context = stream_context_create($opts);
|
71 |
+
$result = file_get_contents('https://example.com', false, $context);
|
72 |
+
```
|
73 |
+
|
74 |
+
License
|
75 |
+
-------
|
76 |
+
|
77 |
+
composer/ca-bundle is licensed under the MIT License, see the LICENSE file for details.
|
vendor/composer/ca-bundle/composer.json
ADDED
@@ -0,0 +1,57 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"name": "composer/ca-bundle",
|
3 |
+
"description": "Lets you find a path to the system CA bundle, and includes a fallback to the Mozilla CA bundle.",
|
4 |
+
"type": "library",
|
5 |
+
"license": "MIT",
|
6 |
+
"keywords": [
|
7 |
+
"cabundle",
|
8 |
+
"cacert",
|
9 |
+
"certificate",
|
10 |
+
"ssl",
|
11 |
+
"tls"
|
12 |
+
],
|
13 |
+
"authors": [
|
14 |
+
{
|
15 |
+
"name": "Jordi Boggiano",
|
16 |
+
"email": "j.boggiano@seld.be",
|
17 |
+
"homepage": "http://seld.be"
|
18 |
+
}
|
19 |
+
],
|
20 |
+
"support": {
|
21 |
+
"irc": "irc://irc.freenode.org/composer",
|
22 |
+
"issues": "https://github.com/composer/ca-bundle/issues"
|
23 |
+
},
|
24 |
+
"require": {
|
25 |
+
"ext-openssl": "*",
|
26 |
+
"ext-pcre": "*",
|
27 |
+
"php": "^5.3.2 || ^7.0"
|
28 |
+
},
|
29 |
+
"require-dev": {
|
30 |
+
"phpunit/phpunit": "^4.5",
|
31 |
+
"psr/log": "^1.0",
|
32 |
+
"symfony/process": "^2.5 || ^3.0"
|
33 |
+
},
|
34 |
+
"suggest": {
|
35 |
+
"symfony/process": "This is necessary to reliably check whether openssl_x509_parse is vulnerable on older php versions, but can be ignored on PHP 5.5.6+"
|
36 |
+
},
|
37 |
+
"autoload": {
|
38 |
+
"psr-4": {
|
39 |
+
"Composer\\CaBundle\\": "src"
|
40 |
+
}
|
41 |
+
},
|
42 |
+
"autoload-dev": {
|
43 |
+
"psr-4": {
|
44 |
+
"Composer\\CaBundle\\": "tests"
|
45 |
+
}
|
46 |
+
},
|
47 |
+
"extra": {
|
48 |
+
"branch-alias": {
|
49 |
+
"dev-master": "1.x-dev"
|
50 |
+
}
|
51 |
+
},
|
52 |
+
"config": {
|
53 |
+
"platform": {
|
54 |
+
"php": "5.3.9"
|
55 |
+
}
|
56 |
+
}
|
57 |
+
}
|
vendor/composer/ca-bundle/res/cacert.pem
ADDED
@@ -0,0 +1,3646 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
##
|
2 |
+
## Bundle of CA Root Certificates
|
3 |
+
##
|
4 |
+
## Certificate data from Mozilla as of: Wed Sep 20 03:12:05 2017 GMT
|
5 |
+
##
|
6 |
+
## This is a bundle of X.509 certificates of public Certificate Authorities
|
7 |
+
## (CA). These were automatically extracted from Mozilla's root certificates
|
8 |
+
## file (certdata.txt). This file can be found in the mozilla source tree:
|
9 |
+
## https://hg.mozilla.org/releases/mozilla-release/raw-file/default/security/nss/lib/ckfw/builtins/certdata.txt
|
10 |
+
##
|
11 |
+
## It contains the certificates in PEM format and therefore
|
12 |
+
## can be directly used with curl / libcurl / php_curl, or with
|
13 |
+
## an Apache+mod_ssl webserver for SSL client authentication.
|
14 |
+
## Just configure this file as the SSLCACertificateFile.
|
15 |
+
##
|
16 |
+
## Conversion done with mk-ca-bundle.pl version 1.27.
|
17 |
+
## SHA256: 2b2dbe5244e0047e088c597998883a913f6c5fffd1cb5c0fe5a368c8466cb2ec
|
18 |
+
##
|
19 |
+
|
20 |
+
|
21 |
+
GlobalSign Root CA
|
22 |
+
==================
|
23 |
+
-----BEGIN CERTIFICATE-----
|
24 |
+
MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkGA1UEBhMCQkUx
|
25 |
+
GTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jvb3QgQ0ExGzAZBgNVBAMTEkds
|
26 |
+
b2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAwMDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNV
|
27 |
+
BAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYD
|
28 |
+
VQQDExJHbG9iYWxTaWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDa
|
29 |
+
DuaZjc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavpxy0Sy6sc
|
30 |
+
THAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp1Wrjsok6Vjk4bwY8iGlb
|
31 |
+
Kk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdGsnUOhugZitVtbNV4FpWi6cgKOOvyJBNP
|
32 |
+
c1STE4U6G7weNLWLBYy5d4ux2x8gkasJU26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrX
|
33 |
+
gzT/LCrBbBlDSgeF59N89iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV
|
34 |
+
HRMBAf8EBTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0BAQUF
|
35 |
+
AAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOzyj1hTdNGCbM+w6Dj
|
36 |
+
Y1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE38NflNUVyRRBnMRddWQVDf9VMOyG
|
37 |
+
j/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymPAbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhH
|
38 |
+
hm4qxFYxldBniYUr+WymXUadDKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveC
|
39 |
+
X4XSQRjbgbMEHMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A==
|
40 |
+
-----END CERTIFICATE-----
|
41 |
+
|
42 |
+
GlobalSign Root CA - R2
|
43 |
+
=======================
|
44 |
+
-----BEGIN CERTIFICATE-----
|
45 |
+
MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4GA1UECxMXR2xv
|
46 |
+
YmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh
|
47 |
+
bFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT
|
48 |
+
aWduIFJvb3QgQ0EgLSBSMjETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln
|
49 |
+
bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6
|
50 |
+
ErPLv4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8eoLrvozp
|
51 |
+
s6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklqtTleiDTsvHgMCJiEbKjN
|
52 |
+
S7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzdC9XZzPnqJworc5HGnRusyMvo4KD0L5CL
|
53 |
+
TfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pazq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6C
|
54 |
+
ygPCm48CAwEAAaOBnDCBmTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E
|
55 |
+
FgQUm+IHV2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5nbG9i
|
56 |
+
YWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG3lm0mi3f3BmGLjAN
|
57 |
+
BgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4GsJ0/WwbgcQ3izDJr86iw8bmEbTUsp
|
58 |
+
9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu
|
59 |
+
01yiPqFbQfXf5WRDLenVOavSot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG7
|
60 |
+
9G+dwfCMNYxdAfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7
|
61 |
+
TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg==
|
62 |
+
-----END CERTIFICATE-----
|
63 |
+
|
64 |
+
Verisign Class 3 Public Primary Certification Authority - G3
|
65 |
+
============================================================
|
66 |
+
-----BEGIN CERTIFICATE-----
|
67 |
+
MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV
|
68 |
+
UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv
|
69 |
+
cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
|
70 |
+
IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh
|
71 |
+
dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw
|
72 |
+
CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy
|
73 |
+
dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv
|
74 |
+
cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkg
|
75 |
+
Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
|
76 |
+
ggEBAMu6nFL8eB8aHm8bN3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1
|
77 |
+
EUGO+i2tKmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGukxUc
|
78 |
+
cLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBmCC+Vk7+qRy+oRpfw
|
79 |
+
EuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJXwzw3sJ2zq/3avL6QaaiMxTJ5Xpj
|
80 |
+
055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWuimi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA
|
81 |
+
ERSWwauSCPc/L8my/uRan2Te2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5f
|
82 |
+
j267Cz3qWhMeDGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC
|
83 |
+
/Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565pF4ErWjfJXir0
|
84 |
+
xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGtTxzhT5yvDwyd93gN2PQ1VoDa
|
85 |
+
t20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ==
|
86 |
+
-----END CERTIFICATE-----
|
87 |
+
|
88 |
+
Entrust.net Premium 2048 Secure Server CA
|
89 |
+
=========================================
|
90 |
+
-----BEGIN CERTIFICATE-----
|
91 |
+
MIIEKjCCAxKgAwIBAgIEOGPe+DANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChMLRW50cnVzdC5u
|
92 |
+
ZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBpbmNvcnAuIGJ5IHJlZi4gKGxp
|
93 |
+
bWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNV
|
94 |
+
BAMTKkVudHJ1c3QubmV0IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQx
|
95 |
+
NzUwNTFaFw0yOTA3MjQxNDE1MTJaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3
|
96 |
+
d3d3LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTEl
|
97 |
+
MCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5u
|
98 |
+
ZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgpMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
|
99 |
+
MIIBCgKCAQEArU1LqRKGsuqjIAcVFmQqK0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOL
|
100 |
+
Gp18EzoOH1u3Hs/lJBQesYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSr
|
101 |
+
hRSGlVuXMlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVTXTzW
|
102 |
+
nLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/HoZdenoVve8AjhUi
|
103 |
+
VBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH4QIDAQABo0IwQDAOBgNVHQ8BAf8E
|
104 |
+
BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUVeSB0RGAvtiJuQijMfmhJAkWuXAwDQYJ
|
105 |
+
KoZIhvcNAQEFBQADggEBADubj1abMOdTmXx6eadNl9cZlZD7Bh/KM3xGY4+WZiT6QBshJ8rmcnPy
|
106 |
+
T/4xmf3IDExoU8aAghOY+rat2l098c5u9hURlIIM7j+VrxGrD9cv3h8Dj1csHsm7mhpElesYT6Yf
|
107 |
+
zX1XEC+bBAlahLVu2B064dae0Wx5XnkcFMXj0EyTO2U87d89vqbllRrDtRnDvV5bu/8j72gZyxKT
|
108 |
+
J1wDLW8w0B62GqzeWvfRqqgnpv55gcR5mTNXuhKwqeBCbJPKVt7+bYQLCIt+jerXmCHG8+c8eS9e
|
109 |
+
nNFMFY3h7CI3zJpDC5fcgJCNs2ebb0gIFVbPv/ErfF6adulZkMV8gzURZVE=
|
110 |
+
-----END CERTIFICATE-----
|
111 |
+
|
112 |
+
Baltimore CyberTrust Root
|
113 |
+
=========================
|
114 |
+
-----BEGIN CERTIFICATE-----
|
115 |
+
MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJRTESMBAGA1UE
|
116 |
+
ChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYDVQQDExlCYWx0aW1vcmUgQ3li
|
117 |
+
ZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoXDTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMC
|
118 |
+
SUUxEjAQBgNVBAoTCUJhbHRpbW9yZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFs
|
119 |
+
dGltb3JlIEN5YmVyVHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKME
|
120 |
+
uyKrmD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjrIZ3AQSsB
|
121 |
+
UnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeKmpYcqWe4PwzV9/lSEy/C
|
122 |
+
G9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSuXmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9
|
123 |
+
XbIGevOF6uvUA65ehD5f/xXtabz5OTZydc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjpr
|
124 |
+
l3RjM71oGDHweI12v/yejl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoI
|
125 |
+
VDaGezq1BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEB
|
126 |
+
BQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT929hkTI7gQCvlYpNRh
|
127 |
+
cL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3WgxjkzSswF07r51XgdIGn9w/xZchMB5
|
128 |
+
hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsa
|
129 |
+
Y71k5h+3zvDyny67G7fyUIhzksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9H
|
130 |
+
RCwBXbsdtTLSR9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp
|
131 |
+
-----END CERTIFICATE-----
|
132 |
+
|
133 |
+
AddTrust External Root
|
134 |
+
======================
|
135 |
+
-----BEGIN CERTIFICATE-----
|
136 |
+
MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
|
137 |
+
QWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFsIFRUUCBOZXR3b3JrMSIwIAYD
|
138 |
+
VQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEw
|
139 |
+
NDgzOFowbzELMAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRU
|
140 |
+
cnVzdCBFeHRlcm5hbCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0Eg
|
141 |
+
Um9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvtH7xsD821
|
142 |
+
+iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9uMq/NzgtHj6RQa1wVsfw
|
143 |
+
Tz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzXmk6vBbOmcZSccbNQYArHE504B4YCqOmo
|
144 |
+
aSYYkKtMsE8jqzpPhNjfzp/haW+710LXa0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy
|
145 |
+
2xSoRcRdKn23tNbE7qzNE0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv7
|
146 |
+
7+ldU9U0WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYDVR0P
|
147 |
+
BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0Jvf6xCZU7wO94CTL
|
148 |
+
VBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEmMCQGA1UECxMdQWRk
|
149 |
+
VHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsxIjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENB
|
150 |
+
IFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZl
|
151 |
+
j7DYd7usQWxHYINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5
|
152 |
+
6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvCNr4TDea9Y355
|
153 |
+
e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEXc4g/VhsxOBi0cQ+azcgOno4u
|
154 |
+
G+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5amnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ=
|
155 |
+
-----END CERTIFICATE-----
|
156 |
+
|
157 |
+
Entrust Root Certification Authority
|
158 |
+
====================================
|
159 |
+
-----BEGIN CERTIFICATE-----
|
160 |
+
MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMCVVMxFjAUBgNV
|
161 |
+
BAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0Lm5ldC9DUFMgaXMgaW5jb3Jw
|
162 |
+
b3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMWKGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsG
|
163 |
+
A1UEAxMkRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0
|
164 |
+
MloXDTI2MTEyNzIwNTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMu
|
165 |
+
MTkwNwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSByZWZlcmVu
|
166 |
+
Y2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNVBAMTJEVudHJ1c3QgUm9v
|
167 |
+
dCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
|
168 |
+
ALaVtkNC+sZtKm9I35RMOVcF7sN5EUFoNu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYsz
|
169 |
+
A9u3g3s+IIRe7bJWKKf44LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOww
|
170 |
+
Cj0Yzfv9KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGIrb68
|
171 |
+
j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi94DkZfs0Nw4pgHBN
|
172 |
+
rziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOBsDCBrTAOBgNVHQ8BAf8EBAMCAQYw
|
173 |
+
DwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAigA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1
|
174 |
+
MzQyWjAfBgNVHSMEGDAWgBRokORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DH
|
175 |
+
hmak8fdLQ/uEvW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA
|
176 |
+
A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9tO1KzKtvn1ISM
|
177 |
+
Y/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6ZuaAGAT/3B+XxFNSRuzFVJ7yVTa
|
178 |
+
v52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTS
|
179 |
+
W3iDVuycNsMm4hH2Z0kdkquM++v/eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0
|
180 |
+
tHuu2guQOHXvgR1m0vdXcDazv/wor3ElhVsT/h5/WrQ8
|
181 |
+
-----END CERTIFICATE-----
|
182 |
+
|
183 |
+
GeoTrust Global CA
|
184 |
+
==================
|
185 |
+
-----BEGIN CERTIFICATE-----
|
186 |
+
MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVTMRYwFAYDVQQK
|
187 |
+
Ew1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9iYWwgQ0EwHhcNMDIwNTIxMDQw
|
188 |
+
MDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5j
|
189 |
+
LjEbMBkGA1UEAxMSR2VvVHJ1c3QgR2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
|
190 |
+
CgKCAQEA2swYYzD99BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjo
|
191 |
+
BbdqfnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDviS2Aelet
|
192 |
+
8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU1XupGc1V3sjs0l44U+Vc
|
193 |
+
T4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+bw8HHa8sHo9gOeL6NlMTOdReJivbPagU
|
194 |
+
vTLrGAMoUgRx5aszPeE4uwc2hGKceeoWMPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTAD
|
195 |
+
AQH/MB0GA1UdDgQWBBTAephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVk
|
196 |
+
DBF9qn1luMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKInZ57Q
|
197 |
+
zxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfStQWVYrmm3ok9Nns4
|
198 |
+
d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcFPseKUgzbFbS9bZvlxrFUaKnjaZC2
|
199 |
+
mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Unhw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6p
|
200 |
+
XE0zX5IJL4hmXXeXxx12E6nV5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvm
|
201 |
+
Mw==
|
202 |
+
-----END CERTIFICATE-----
|
203 |
+
|
204 |
+
GeoTrust Universal CA
|
205 |
+
=====================
|
206 |
+
-----BEGIN CERTIFICATE-----
|
207 |
+
MIIFaDCCA1CgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN
|
208 |
+
R2VvVHJ1c3QgSW5jLjEeMBwGA1UEAxMVR2VvVHJ1c3QgVW5pdmVyc2FsIENBMB4XDTA0MDMwNDA1
|
209 |
+
MDAwMFoXDTI5MDMwNDA1MDAwMFowRTELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IElu
|
210 |
+
Yy4xHjAcBgNVBAMTFUdlb1RydXN0IFVuaXZlcnNhbCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIP
|
211 |
+
ADCCAgoCggIBAKYVVaCjxuAfjJ0hUNfBvitbtaSeodlyWL0AG0y/YckUHUWCq8YdgNY96xCcOq9t
|
212 |
+
JPi8cQGeBvV8Xx7BDlXKg5pZMK4ZyzBIle0iN430SppyZj6tlcDgFgDgEB8rMQ7XlFTTQjOgNB0e
|
213 |
+
RXbdT8oYN+yFFXoZCPzVx5zw8qkuEKmS5j1YPakWaDwvdSEYfyh3peFhF7em6fgemdtzbvQKoiFs
|
214 |
+
7tqqhZJmr/Z6a4LauiIINQ/PQvE1+mrufislzDoR5G2vc7J2Ha3QsnhnGqQ5HFELZ1aD/ThdDc7d
|
215 |
+
8Lsrlh/eezJS/R27tQahsiFepdaVaH/wmZ7cRQg+59IJDTWU3YBOU5fXtQlEIGQWFwMCTFMNaN7V
|
216 |
+
qnJNk22CDtucvc+081xdVHppCZbW2xHBjXWotM85yM48vCR85mLK4b19p71XZQvk/iXttmkQ3Cga
|
217 |
+
Rr0BHdCXteGYO8A3ZNY9lO4L4fUorgtWv3GLIylBjobFS1J72HGrH4oVpjuDWtdYAVHGTEHZf9hB
|
218 |
+
Z3KiKN9gg6meyHv8U3NyWfWTehd2Ds735VzZC1U0oqpbtWpU5xPKV+yXbfReBi9Fi1jUIxaS5BZu
|
219 |
+
KGNZMN9QAZxjiRqf2xeUgnA3wySemkfWWspOqGmJch+RbNt+nhutxx9z3SxPGWX9f5NAEC7S8O08
|
220 |
+
ni4oPmkmM8V7AgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNq7LqqwDLiIJlF0
|
221 |
+
XG0D08DYj3rWMB8GA1UdIwQYMBaAFNq7LqqwDLiIJlF0XG0D08DYj3rWMA4GA1UdDwEB/wQEAwIB
|
222 |
+
hjANBgkqhkiG9w0BAQUFAAOCAgEAMXjmx7XfuJRAyXHEqDXsRh3ChfMoWIawC/yOsjmPRFWrZIRc
|
223 |
+
aanQmjg8+uUfNeVE44B5lGiku8SfPeE0zTBGi1QrlaXv9z+ZhP015s8xxtxqv6fXIwjhmF7DWgh2
|
224 |
+
qaavdy+3YL1ERmrvl/9zlcGO6JP7/TG37FcREUWbMPEaiDnBTzynANXH/KttgCJwpQzgXQQpAvvL
|
225 |
+
oJHRfNbDflDVnVi+QTjruXU8FdmbyUqDWcDaU/0zuzYYm4UPFd3uLax2k7nZAY1IEKj79TiG8dsK
|
226 |
+
xr2EoyNB3tZ3b4XUhRxQ4K5RirqNPnbiucon8l+f725ZDQbYKxek0nxru18UGkiPGkzns0ccjkxF
|
227 |
+
KyDuSN/n3QmOGKjaQI2SJhFTYXNd673nxE0pN2HrrDktZy4W1vUAg4WhzH92xH3kt0tm7wNFYGm2
|
228 |
+
DFKWkoRepqO1pD4r2czYG0eq8kTaT/kD6PAUyz/zg97QwVTjt+gKN02LIFkDMBmhLMi9ER/frslK
|
229 |
+
xfMnZmaGrGiR/9nmUxwPi1xpZQomyB40w11Re9epnAahNt3ViZS82eQtDF4JbAiXfKM9fJP/P6EU
|
230 |
+
p8+1Xevb2xzEdt+Iub1FBZUbrvxGakyvSOPOrg/SfuvmbJxPgWp6ZKy7PtXny3YuxadIwVyQD8vI
|
231 |
+
P/rmMuGNG2+k5o7Y+SlIis5z/iw=
|
232 |
+
-----END CERTIFICATE-----
|
233 |
+
|
234 |
+
GeoTrust Universal CA 2
|
235 |
+
=======================
|
236 |
+
-----BEGIN CERTIFICATE-----
|
237 |
+
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
|
261 |
+
X36vWkzaH6byHCx+rgIW0lbQL1dTR+iS
|
262 |
+
-----END CERTIFICATE-----
|
263 |
+
|
264 |
+
Visa eCommerce Root
|
265 |
+
===================
|
266 |
+
-----BEGIN CERTIFICATE-----
|
267 |
+
MIIDojCCAoqgAwIBAgIQE4Y1TR0/BvLB+WUF1ZAcYjANBgkqhkiG9w0BAQUFADBrMQswCQYDVQQG
|
268 |
+
EwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2Ug
|
269 |
+
QXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNvbW1lcmNlIFJvb3QwHhcNMDIwNjI2MDIxODM2
|
270 |
+
WhcNMjIwNjI0MDAxNjEyWjBrMQswCQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMm
|
271 |
+
VmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNv
|
272 |
+
bW1lcmNlIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvV95WHm6h2mCxlCfL
|
273 |
+
F9sHP4CFT8icttD0b0/Pmdjh28JIXDqsOTPHH2qLJj0rNfVIsZHBAk4ElpF7sDPwsRROEW+1QK8b
|
274 |
+
RaVK7362rPKgH1g/EkZgPI2h4H3PVz4zHvtH8aoVlwdVZqW1LS7YgFmypw23RuwhY/81q6UCzyr0
|
275 |
+
TP579ZRdhE2o8mCP2w4lPJ9zcc+U30rq299yOIzzlr3xF7zSujtFWsan9sYXiwGd/BmoKoMWuDpI
|
276 |
+
/k4+oKsGGelT84ATB+0tvz8KPFUgOSwsAGl0lUq8ILKpeeUYiZGo3BxN77t+Nwtd/jmliFKMAGzs
|
277 |
+
GHxBvfaLdXe6YJ2E5/4tAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEG
|
278 |
+
MB0GA1UdDgQWBBQVOIMPPyw/cDMezUb+B4wg4NfDtzANBgkqhkiG9w0BAQUFAAOCAQEAX/FBfXxc
|
279 |
+
CLkr4NWSR/pnXKUTwwMhmytMiUbPWU3J/qVAtmPN3XEolWcRzCSs00Rsca4BIGsDoo8Ytyk6feUW
|
280 |
+
YFN4PMCvFYP3j1IzJL1kk5fui/fbGKhtcbP3LBfQdCVp9/5rPJS+TUtBjE7ic9DjkCJzQ83z7+pz
|
281 |
+
zkWKsKZJ/0x9nXGIxHYdkFsd7v3M9+79YKWxehZx0RbQfBI8bGmX265fOZpwLwU8GUYEmSA20GBu
|
282 |
+
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-----
|
308 |
+
MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS
|
309 |
+
R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg
|
310 |
+
TGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAw
|
311 |
+
MFoXDTI4MTIzMTIzNTk1OVowezELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hl
|
312 |
+
c3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNV
|
313 |
+
BAMMGEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
|
314 |
+
ggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQuaBtDFcCLNSS1UY8y2bmhG
|
315 |
+
C1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe3M/vg4aijJRPn2jymJBGhCfHdr/jzDUs
|
316 |
+
i14HZGWCwEiwqJH5YZ92IFCokcdmtet4YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszW
|
317 |
+
Y19zjNoFmag4qMsXeDZRrOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjH
|
318 |
+
Ypy+g8cmez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQUoBEK
|
319 |
+
Iz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wewYDVR0f
|
320 |
+
BHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20vQUFBQ2VydGlmaWNhdGVTZXJ2aWNl
|
321 |
+
cy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29tb2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2Vz
|
322 |
+
LmNybDANBgkqhkiG9w0BAQUFAAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm
|
323 |
+
7l3sAg9g1o1QGE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz
|
324 |
+
Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2G9w84FoVxp7Z
|
325 |
+
8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsil2D4kF501KKaU73yqWjgom7C
|
326 |
+
12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg==
|
327 |
+
-----END CERTIFICATE-----
|
328 |
+
|
329 |
+
QuoVadis Root CA
|
330 |
+
================
|
331 |
+
-----BEGIN CERTIFICATE-----
|
332 |
+
MIIF0DCCBLigAwIBAgIEOrZQizANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJCTTEZMBcGA1UE
|
333 |
+
ChMQUXVvVmFkaXMgTGltaXRlZDElMCMGA1UECxMcUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
|
334 |
+
eTEuMCwGA1UEAxMlUXVvVmFkaXMgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMTAz
|
335 |
+
MTkxODMzMzNaFw0yMTAzMTcxODMzMzNaMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRp
|
336 |
+
cyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQD
|
337 |
+
EyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEF
|
338 |
+
AAOCAQ8AMIIBCgKCAQEAv2G1lVO6V/z68mcLOhrfEYBklbTRvM16z/Ypli4kVEAkOPcahdxYTMuk
|
339 |
+
J0KX0J+DisPkBgNbAKVRHnAEdOLB1Dqr1607BxgFjv2DrOpm2RgbaIr1VxqYuvXtdj182d6UajtL
|
340 |
+
F8HVj71lODqV0D1VNk7feVcxKh7YWWVJWCCYfqtffp/p1k3sg3Spx2zY7ilKhSoGFPlU5tPaZQeL
|
341 |
+
YzcS19Dsw3sgQUSj7cugF+FxZc4dZjH3dgEZyH0DWLaVSR2mEiboxgx24ONmy+pdpibu5cxfvWen
|
342 |
+
AScOospUxbF6lR1xHkopigPcakXBpBlebzbNw6Kwt/5cOOJSvPhEQ+aQuwIDAQABo4ICUjCCAk4w
|
343 |
+
PQYIKwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwczovL29jc3AucXVvdmFkaXNvZmZzaG9y
|
344 |
+
ZS5jb20wDwYDVR0TAQH/BAUwAwEB/zCCARoGA1UdIASCAREwggENMIIBCQYJKwYBBAG+WAABMIH7
|
345 |
+
MIHUBggrBgEFBQcCAjCBxxqBxFJlbGlhbmNlIG9uIHRoZSBRdW9WYWRpcyBSb290IENlcnRpZmlj
|
346 |
+
YXRlIGJ5IGFueSBwYXJ0eSBhc3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJs
|
347 |
+
ZSBzdGFuZGFyZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRpb24gcHJh
|
348 |
+
Y3RpY2VzLCBhbmQgdGhlIFF1b1ZhZGlzIENlcnRpZmljYXRlIFBvbGljeS4wIgYIKwYBBQUHAgEW
|
349 |
+
Fmh0dHA6Ly93d3cucXVvdmFkaXMuYm0wHQYDVR0OBBYEFItLbe3TKbkGGew5Oanwl4Rqy+/fMIGu
|
350 |
+
BgNVHSMEgaYwgaOAFItLbe3TKbkGGew5Oanwl4Rqy+/foYGEpIGBMH8xCzAJBgNVBAYTAkJNMRkw
|
351 |
+
FwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0
|
352 |
+
aG9yaXR5MS4wLAYDVQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggQ6
|
353 |
+
tlCLMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAitQUtf70mpKnGdSkfnIYj9lo
|
354 |
+
fFIk3WdvOXrEql494liwTXCYhGHoG+NpGA7O+0dQoE7/8CQfvbLO9Sf87C9TqnN7Az10buYWnuul
|
355 |
+
LsS/VidQK2K6vkscPFVcQR0kvoIgR13VRH56FmjffU1RcHhXHTMe/QKZnAzNCgVPx7uOpHX6Sm2x
|
356 |
+
gI4JVrmcGmD+XcHXetwReNDWXcG31a0ymQM6isxUJTkxgXsTIlG6Rmyhu576BGxJJnSP0nPrzDCi
|
357 |
+
5upZIof4l/UO/erMkqQWxFIY6iHOsfHmhIHluqmGKPJDWl0Snawe2ajlCmqnf6CHKc/yiU3U7MXi
|
358 |
+
5nrQNiOKSnQ2+Q==
|
359 |
+
-----END CERTIFICATE-----
|
360 |
+
|
361 |
+
QuoVadis Root CA 2
|
362 |
+
==================
|
363 |
+
-----BEGIN CERTIFICATE-----
|
364 |
+
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
|
390 |
+
-----END CERTIFICATE-----
|
391 |
+
|
392 |
+
QuoVadis Root CA 3
|
393 |
+
==================
|
394 |
+
-----BEGIN CERTIFICATE-----
|
395 |
+
MIIGnTCCBIWgAwIBAgICBcYwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoT
|
396 |
+
EFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJvb3QgQ0EgMzAeFw0wNjExMjQx
|
397 |
+
OTExMjNaFw0zMTExMjQxOTA2NDRaMEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM
|
398 |
+
aW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4IC
|
399 |
+
DwAwggIKAoICAQDMV0IWVJzmmNPTTe7+7cefQzlKZbPoFog02w1ZkXTPkrgEQK0CSzGrvI2RaNgg
|
400 |
+
DhoB4hp7Thdd4oq3P5kazethq8Jlph+3t723j/z9cI8LoGe+AaJZz3HmDyl2/7FWeUUrH556VOij
|
401 |
+
KTVopAFPD6QuN+8bv+OPEKhyq1hX51SGyMnzW9os2l2ObjyjPtr7guXd8lyyBTNvijbO0BNO/79K
|
402 |
+
DDRMpsMhvVAEVeuxu537RR5kFd5VAYwCdrXLoT9CabwvvWhDFlaJKjdhkf2mrk7AyxRllDdLkgbv
|
403 |
+
BNDInIjbC3uBr7E9KsRlOni27tyAsdLTmZw67mtaa7ONt9XOnMK+pUsvFrGeaDsGb659n/je7Mwp
|
404 |
+
p5ijJUMv7/FfJuGITfhebtfZFG4ZM2mnO4SJk8RTVROhUXhA+LjJou57ulJCg54U7QVSWllWp5f8
|
405 |
+
nT8KKdjcT5EOE7zelaTfi5m+rJsziO+1ga8bxiJTyPbH7pcUsMV8eFLI8M5ud2CEpukqdiDtWAEX
|
406 |
+
MJPpGovgc2PZapKUSU60rUqFxKMiMPwJ7Wgic6aIDFUhWMXhOp8q3crhkODZc6tsgLjoC2SToJyM
|
407 |
+
Gf+z0gzskSaHirOi4XCPLArlzW1oUevaPwV/izLmE1xr/l9A4iLItLRkT9a6fUg+qGkM17uGcclz
|
408 |
+
uD87nSVL2v9A6wIDAQABo4IBlTCCAZEwDwYDVR0TAQH/BAUwAwEB/zCB4QYDVR0gBIHZMIHWMIHT
|
409 |
+
BgkrBgEEAb5YAAMwgcUwgZMGCCsGAQUFBwICMIGGGoGDQW55IHVzZSBvZiB0aGlzIENlcnRpZmlj
|
410 |
+
YXRlIGNvbnN0aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlIFF1b1ZhZGlzIFJvb3QgQ0EgMyBDZXJ0
|
411 |
+
aWZpY2F0ZSBQb2xpY3kgLyBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVudC4wLQYIKwYB
|
412 |
+
BQUHAgEWIWh0dHA6Ly93d3cucXVvdmFkaXNnbG9iYWwuY29tL2NwczALBgNVHQ8EBAMCAQYwHQYD
|
413 |
+
VR0OBBYEFPLAE+CCQz777i9nMpY1XNu4ywLQMG4GA1UdIwRnMGWAFPLAE+CCQz777i9nMpY1XNu4
|
414 |
+
ywLQoUmkRzBFMQswCQYDVQQGEwJCTTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDEbMBkGA1UE
|
415 |
+
AxMSUXVvVmFkaXMgUm9vdCBDQSAzggIFxjANBgkqhkiG9w0BAQUFAAOCAgEAT62gLEz6wPJv92ZV
|
416 |
+
qyM07ucp2sNbtrCD2dDQ4iH782CnO11gUyeim/YIIirnv6By5ZwkajGxkHon24QRiSemd1o417+s
|
417 |
+
hvzuXYO8BsbRd2sPbSQvS3pspweWyuOEn62Iix2rFo1bZhfZFvSLgNLd+LJ2w/w4E6oM3kJpK27z
|
418 |
+
POuAJ9v1pkQNn1pVWQvVDVJIxa6f8i+AxeoyUDUSly7B4f/xI4hROJ/yZlZ25w9Rl6VSDE1JUZU2
|
419 |
+
Pb+iSwwQHYaZTKrzchGT5Or2m9qoXadNt54CrnMAyNojA+j56hl0YgCUyyIgvpSnWbWCar6ZeXqp
|
420 |
+
8kokUvd0/bpO5qgdAm6xDYBEwa7TIzdfu4V8K5Iu6H6li92Z4b8nby1dqnuH/grdS/yO9SbkbnBC
|
421 |
+
bjPsMZ57k8HkyWkaPcBrTiJt7qtYTcbQQcEr6k8Sh17rRdhs9ZgC06DYVYoGmRmioHfRMJ6szHXu
|
422 |
+
g/WwYjnPbFfiTNKRCw51KBuav/0aQ/HKd/s7j2G4aSgWQgRecCocIdiP4b0jWy10QJLZYxkNc91p
|
423 |
+
vGJHvOB0K7Lrfb5BG7XARsWhIstfTsEokt4YutUqKLsRixeTmJlglFwjz1onl14LBQaTNx47aTbr
|
424 |
+
qZ5hHY8y2o4M1nQ+ewkk2gF3R8Q7zTSMmfXK4SVhM7JZG+Ju1zdXtg2pEto=
|
425 |
+
-----END CERTIFICATE-----
|
426 |
+
|
427 |
+
Security Communication Root CA
|
428 |
+
==============================
|
429 |
+
-----BEGIN CERTIFICATE-----
|
430 |
+
MIIDWjCCAkKgAwIBAgIBADANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP
|
431 |
+
U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw
|
432 |
+
HhcNMDMwOTMwMDQyMDQ5WhcNMjMwOTMwMDQyMDQ5WjBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP
|
433 |
+
U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw
|
434 |
+
ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCzs/5/022x7xZ8V6UMbXaKL0u/ZPtM7orw
|
435 |
+
8yl89f/uKuDp6bpbZCKamm8sOiZpUQWZJtzVHGpxxpp9Hp3dfGzGjGdnSj74cbAZJ6kJDKaVv0uM
|
436 |
+
DPpVmDvY6CKhS3E4eayXkmmziX7qIWgGmBSWh9JhNrxtJ1aeV+7AwFb9Ms+k2Y7CI9eNqPPYJayX
|
437 |
+
5HA49LY6tJ07lyZDo6G8SVlyTCMwhwFY9k6+HGhWZq/NQV3Is00qVUarH9oe4kA92819uZKAnDfd
|
438 |
+
DJZkndwi92SL32HeFZRSFaB9UslLqCHJxrHty8OVYNEP8Ktw+N/LTX7s1vqr2b1/VPKl6Xn62dZ2
|
439 |
+
JChzAgMBAAGjPzA9MB0GA1UdDgQWBBSgc0mZaNyFW2XjmygvV5+9M7wHSDALBgNVHQ8EBAMCAQYw
|
440 |
+
DwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAaECpqLvkT115swW1F7NgE+vGkl3g
|
441 |
+
0dNq/vu+m22/xwVtWSDEHPC32oRYAmP6SBbvT6UL90qY8j+eG61Ha2POCEfrUj94nK9NrvjVT8+a
|
442 |
+
mCoQQTlSxN3Zmw7vkwGusi7KaEIkQmywszo+zenaSMQVy+n5Bw+SUEmK3TGXX8npN6o7WWWXlDLJ
|
443 |
+
s58+OmJYxUmtYg5xpTKqL8aJdkNAExNnPaJUJRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ
|
444 |
+
6rBK+1YWc26sTfcioU+tHXotRSflMMFe8toTyyVCUZVHA4xsIcx0Qu1T/zOLjw9XARYvz6buyXAi
|
445 |
+
FL39vmwLAw==
|
446 |
+
-----END CERTIFICATE-----
|
447 |
+
|
448 |
+
Sonera Class 2 Root CA
|
449 |
+
======================
|
450 |
+
-----BEGIN CERTIFICATE-----
|
451 |
+
MIIDIDCCAgigAwIBAgIBHTANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEPMA0GA1UEChMG
|
452 |
+
U29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MyIENBMB4XDTAxMDQwNjA3Mjk0MFoXDTIxMDQw
|
453 |
+
NjA3Mjk0MFowOTELMAkGA1UEBhMCRkkxDzANBgNVBAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJh
|
454 |
+
IENsYXNzMiBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJAXSjWdyvANlsdE+hY3
|
455 |
+
/Ei9vX+ALTU74W+oZ6m/AxxNjG8yR9VBaKQTBME1DJqEQ/xcHf+Js+gXGM2RX/uJ4+q/Tl18GybT
|
456 |
+
dXnt5oTjV+WtKcT0OijnpXuENmmz/V52vaMtmdOQTiMofRhj8VQ7Jp12W5dCsv+u8E7s3TmVToMG
|
457 |
+
f+dJQMjFAbJUWmYdPfz56TwKnoG4cPABi+QjVHzIrviQHgCWctRUz2EjvOr7nQKV0ba5cTppCD8P
|
458 |
+
tOFCx4j1P5iop7oc4HFx71hXgVB6XGt0Rg6DA5jDjqhu8nYybieDwnPz3BjotJPqdURrBGAgcVeH
|
459 |
+
nfO+oJAjPYok4doh28MCAwEAAaMzMDEwDwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQISqCqWITT
|
460 |
+
XjwwCwYDVR0PBAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQBazof5FnIVV0sd2ZvnoiYw7JNn39Yt
|
461 |
+
0jSv9zilzqsWuasvfDXLrNAPtEwr/IDva4yRXzZ299uzGxnq9LIR/WFxRL8oszodv7ND6J+/3DEI
|
462 |
+
cbCdjdY0RzKQxmUk96BKfARzjzlvF4xytb1LyHr4e4PDKE6cCepnP7JnBBvDFNr450kkkdAdavph
|
463 |
+
Oe9r5yF1BgfYErQhIHBCcYHaPJo2vqZbDWpsmh+Re/n570K6Tk6ezAyNlNzZRZxe7EJQY670XcSx
|
464 |
+
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-----
|
525 |
+
MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UE
|
526 |
+
BhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2Vj
|
527 |
+
dXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB
|
528 |
+
dXRob3JpdHkwHhcNMDQxMTAxMTcxNDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMx
|
529 |
+
HjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkg
|
530 |
+
U2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
|
531 |
+
dHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS638eMpSe2OAtp87ZOqCwu
|
532 |
+
IR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCPKZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMx
|
533 |
+
foArtYzAQDsRhtDLooY2YKTVMIJt2W7QDxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FE
|
534 |
+
zG+gSqmUsE3a56k0enI4qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqs
|
535 |
+
AxcZZPRaJSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNViPvry
|
536 |
+
xS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud
|
537 |
+
EwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASsjVy16bYbMDYGA1UdHwQvMC0wK6Ap
|
538 |
+
oCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMC
|
539 |
+
AQEwDQYJKoZIhvcNAQEFBQADggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc
|
540 |
+
/Kh4ZzXxHfARvbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt
|
541 |
+
qZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLaIR9NmXmd4c8n
|
542 |
+
nxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSyi6mx5O+aGtA9aZnuqCij4Tyz
|
543 |
+
8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQO+7ETPTsJ3xCwnR8gooJybQDJbw=
|
544 |
+
-----END CERTIFICATE-----
|
545 |
+
|
546 |
+
Go Daddy Class 2 CA
|
547 |
+
===================
|
548 |
+
-----BEGIN CERTIFICATE-----
|
549 |
+
MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMY
|
550 |
+
VGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRp
|
551 |
+
ZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkG
|
552 |
+
A1UEBhMCVVMxITAfBgNVBAoTGFRoZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28g
|
553 |
+
RGFkZHkgQ2xhc3MgMiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQAD
|
554 |
+
ggENADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCAPVYYYwhv
|
555 |
+
2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6wwdhFJ2+qN1j3hybX2C32
|
556 |
+
qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXiEqITLdiOr18SPaAIBQi2XKVlOARFmR6j
|
557 |
+
YGB0xUGlcmIbYsUfb18aQr4CUWWoriMYavx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmY
|
558 |
+
vLEHZ6IVDd2gWMZEewo+YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0O
|
559 |
+
BBYEFNLEsNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h/t2o
|
560 |
+
atTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMu
|
561 |
+
MTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwG
|
562 |
+
A1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wim
|
563 |
+
PQoZ+YeAEW5p5JYXMP80kWNyOO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKt
|
564 |
+
I3lpjbi2Tc7PTMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ
|
565 |
+
HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mERdEr/VxqHD3VI
|
566 |
+
Ls9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5CufReYNnyicsbkqWletNw+vHX/b
|
567 |
+
vZ8=
|
568 |
+
-----END CERTIFICATE-----
|
569 |
+
|
570 |
+
Starfield Class 2 CA
|
571 |
+
====================
|
572 |
+
-----BEGIN CERTIFICATE-----
|
573 |
+
MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzElMCMGA1UEChMc
|
574 |
+
U3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZpZWxkIENsYXNzIDIg
|
575 |
+
Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQwNjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBo
|
576 |
+
MQswCQYDVQQGEwJVUzElMCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAG
|
577 |
+
A1UECxMpU3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqG
|
578 |
+
SIb3DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf8MOh2tTY
|
579 |
+
bitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN+lq2cwQlZut3f+dZxkqZ
|
580 |
+
JRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVm
|
581 |
+
epsZGD3/cVE8MC5fvj13c7JdBmzDI1aaK4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSN
|
582 |
+
F4Azbl5KXZnJHoe0nRrA1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HF
|
583 |
+
MIHCMB0GA1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fRzt0f
|
584 |
+
hvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNo
|
585 |
+
bm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBDbGFzcyAyIENlcnRpZmljYXRpb24g
|
586 |
+
QXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGs
|
587 |
+
afPzWdqbAYcaT1epoXkJKtv3L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLM
|
588 |
+
PUxA2IGvd56Deruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl
|
589 |
+
xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynpVSJYACPq4xJD
|
590 |
+
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-----
|
638 |
+
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
|
663 |
+
-----END CERTIFICATE-----
|
664 |
+
|
665 |
+
DigiCert Assured ID Root CA
|
666 |
+
===========================
|
667 |
+
-----BEGIN CERTIFICATE-----
|
668 |
+
MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQG
|
669 |
+
EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQw
|
670 |
+
IgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzEx
|
671 |
+
MTEwMDAwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQL
|
672 |
+
ExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0Ew
|
673 |
+
ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7cJpSIqvTO
|
674 |
+
9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYPmDI2dsze3Tyoou9q+yHy
|
675 |
+
UmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW
|
676 |
+
/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpy
|
677 |
+
oeb6pNnVFzF1roV9Iq4/AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whf
|
678 |
+
GHdPAgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRF
|
679 |
+
66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYunpyGd823IDzANBgkq
|
680 |
+
hkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRCdWKuh+vy1dneVrOfzM4UKLkNl2Bc
|
681 |
+
EkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTffwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38Fn
|
682 |
+
SbNd67IJKusm7Xi+fT8r87cmNW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i
|
683 |
+
8b5QZ7dsvfPxH2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe
|
684 |
+
+o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g==
|
685 |
+
-----END CERTIFICATE-----
|
686 |
+
|
687 |
+
DigiCert Global Root CA
|
688 |
+
=======================
|
689 |
+
-----BEGIN CERTIFICATE-----
|
690 |
+
MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBhMQswCQYDVQQG
|
691 |
+
EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAw
|
692 |
+
HgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBDQTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAw
|
693 |
+
MDAwMDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3
|
694 |
+
dy5kaWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkq
|
695 |
+
hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsBCSDMAZOn
|
696 |
+
TjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97nh6Vfe63SKMI2tavegw5
|
697 |
+
BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt43C/dxC//AH2hdmoRBBYMql1GNXRor5H
|
698 |
+
4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7PT19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y
|
699 |
+
7vrTC0LUq7dBMtoM1O/4gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQAB
|
700 |
+
o2MwYTAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbRTLtm
|
701 |
+
8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUwDQYJKoZIhvcNAQEF
|
702 |
+
BQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/EsrhMAtudXH/vTBH1jLuG2cenTnmCmr
|
703 |
+
EbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIt
|
704 |
+
tep3Sp+dWOIrWcBAI+0tKIJFPnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886
|
705 |
+
UAb3LujEV0lsYSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk
|
706 |
+
CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=
|
707 |
+
-----END CERTIFICATE-----
|
708 |
+
|
709 |
+
DigiCert High Assurance EV Root CA
|
710 |
+
==================================
|
711 |
+
-----BEGIN CERTIFICATE-----
|
712 |
+
MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBsMQswCQYDVQQG
|
713 |
+
EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSsw
|
714 |
+
KQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5jZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAw
|
715 |
+
MFoXDTMxMTExMDAwMDAwMFowbDELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZ
|
716 |
+
MBcGA1UECxMQd3d3LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFu
|
717 |
+
Y2UgRVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm+9S75S0t
|
718 |
+
Mqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTWPNt0OKRKzE0lgvdKpVMS
|
719 |
+
OO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEMxChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3
|
720 |
+
MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFBIk5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQ
|
721 |
+
NAQTXKFx01p8VdteZOE3hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUe
|
722 |
+
h10aUAsgEsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQFMAMB
|
723 |
+
Af8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaAFLE+w2kD+L9HAdSY
|
724 |
+
JhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3NecnzyIZgYIVyHbIUf4KmeqvxgydkAQ
|
725 |
+
V8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6zeM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFp
|
726 |
+
myPInngiK3BD41VHMWEZ71jFhS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkK
|
727 |
+
mNEVX58Svnw2Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe
|
728 |
+
vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep+OkuE6N36B9K
|
729 |
+
-----END CERTIFICATE-----
|
730 |
+
|
731 |
+
Certplus Class 2 Primary CA
|
732 |
+
===========================
|
733 |
+
-----BEGIN CERTIFICATE-----
|
734 |
+
MIIDkjCCAnqgAwIBAgIRAIW9S/PY2uNp9pTXX8OlRCMwDQYJKoZIhvcNAQEFBQAwPTELMAkGA1UE
|
735 |
+
BhMCRlIxETAPBgNVBAoTCENlcnRwbHVzMRswGQYDVQQDExJDbGFzcyAyIFByaW1hcnkgQ0EwHhcN
|
736 |
+
OTkwNzA3MTcwNTAwWhcNMTkwNzA2MjM1OTU5WjA9MQswCQYDVQQGEwJGUjERMA8GA1UEChMIQ2Vy
|
737 |
+
dHBsdXMxGzAZBgNVBAMTEkNsYXNzIDIgUHJpbWFyeSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEP
|
738 |
+
ADCCAQoCggEBANxQltAS+DXSCHh6tlJw/W/uz7kRy1134ezpfgSN1sxvc0NXYKwzCkTsA18cgCSR
|
739 |
+
5aiRVhKC9+Ar9NuuYS6JEI1rbLqzAr3VNsVINyPi8Fo3UjMXEuLRYE2+L0ER4/YXJQyLkcAbmXuZ
|
740 |
+
Vg2v7tK8R1fjeUl7NIknJITesezpWE7+Tt9avkGtrAjFGA7v0lPubNCdEgETjdyAYveVqUSISnFO
|
741 |
+
YFWe2yMZeVYHDD9jC1yw4r5+FfyUM1hBOHTE4Y+L3yasH7WLO7dDWWuwJKZtkIvEcupdM5i3y95e
|
742 |
+
e++U8Rs+yskhwcWYAqqi9lt3m/V+llU0HGdpwPFC40es/CgcZlUCAwEAAaOBjDCBiTAPBgNVHRME
|
743 |
+
CDAGAQH/AgEKMAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQU43Mt38sOKAze3bOkynm4jrvoMIkwEQYJ
|
744 |
+
YIZIAYb4QgEBBAQDAgEGMDcGA1UdHwQwMC4wLKAqoCiGJmh0dHA6Ly93d3cuY2VydHBsdXMuY29t
|
745 |
+
L0NSTC9jbGFzczIuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQCnVM+IRBnL39R/AN9WM2K191EBkOvD
|
746 |
+
P9GIROkkXe/nFL0gt5o8AP5tn9uQ3Nf0YtaLcF3n5QRIqWh8yfFC82x/xXp8HVGIutIKPidd3i1R
|
747 |
+
TtMTZGnkLuPT55sJmabglZvOGtd/vjzOUrMRFcEPF80Du5wlFbqidon8BvEY0JNLDnyCt6X09l/+
|
748 |
+
7UCmnYR0ObncHoUW2ikbhiMAybuJfm6AiB4vFLQDJKgybwOaRywwvlbGp0ICcBvqQNi6BQNwB6SW
|
749 |
+
//1IMwrh3KWBkJtN3X3n57LNXMhqlfil9o3EXXgIvnsG1knPGTZQIy4I5p4FTUcY1Rbpsda2ENW7
|
750 |
+
l7+ijrRU
|
751 |
+
-----END CERTIFICATE-----
|
752 |
+
|
753 |
+
DST Root CA X3
|
754 |
+
==============
|
755 |
+
-----BEGIN CERTIFICATE-----
|
756 |
+
MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/MSQwIgYDVQQK
|
757 |
+
ExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMTDkRTVCBSb290IENBIFgzMB4X
|
758 |
+
DTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVowPzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1
|
759 |
+
cmUgVHJ1c3QgQ28uMRcwFQYDVQQDEw5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQAD
|
760 |
+
ggEPADCCAQoCggEBAN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmT
|
761 |
+
rE4Orz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEqOLl5CjH9
|
762 |
+
UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9bxiqKqy69cK3FCxolkHRy
|
763 |
+
xXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40d
|
764 |
+
utolucbY38EVAjqr2m7xPi71XAicPNaDaeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0T
|
765 |
+
AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQ
|
766 |
+
MA0GCSqGSIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69ikug
|
767 |
+
dB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXrAvHRAosZy5Q6XkjE
|
768 |
+
GB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZzR8srzJmwN0jP41ZL9c8PDHIyh8bw
|
769 |
+
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-----
|
800 |
+
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
|
826 |
+
-----END CERTIFICATE-----
|
827 |
+
|
828 |
+
SwissSign Silver CA - G2
|
829 |
+
========================
|
830 |
+
-----BEGIN CERTIFICATE-----
|
831 |
+
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
|
857 |
+
-----END CERTIFICATE-----
|
858 |
+
|
859 |
+
GeoTrust Primary Certification Authority
|
860 |
+
========================================
|
861 |
+
-----BEGIN CERTIFICATE-----
|
862 |
+
MIIDfDCCAmSgAwIBAgIQGKy1av1pthU6Y2yv2vrEoTANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQG
|
863 |
+
EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjExMC8GA1UEAxMoR2VvVHJ1c3QgUHJpbWFyeSBD
|
864 |
+
ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjExMjcwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMFgx
|
865 |
+
CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTEwLwYDVQQDEyhHZW9UcnVzdCBQ
|
866 |
+
cmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
|
867 |
+
CgKCAQEAvrgVe//UfH1nrYNke8hCUy3f9oQIIGHWAVlqnEQRr+92/ZV+zmEwu3qDXwK9AWbK7hWN
|
868 |
+
b6EwnL2hhZ6UOvNWiAAxz9juapYC2e0DjPt1befquFUWBRaa9OBesYjAZIVcFU2Ix7e64HXprQU9
|
869 |
+
nceJSOC7KMgD4TCTZF5SwFlwIjVXiIrxlQqD17wxcwE07e9GceBrAqg1cmuXm2bgyxx5X9gaBGge
|
870 |
+
RwLmnWDiNpcB3841kt++Z8dtd1k7j53WkBWUvEI0EME5+bEnPn7WinXFsq+W06Lem+SYvn3h6YGt
|
871 |
+
tm/81w7a4DSwDRp35+MImO9Y+pyEtzavwt+s0vQQBnBxNQIDAQABo0IwQDAPBgNVHRMBAf8EBTAD
|
872 |
+
AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQULNVQQZcVi/CPNmFbSvtr2ZnJM5IwDQYJKoZI
|
873 |
+
hvcNAQEFBQADggEBAFpwfyzdtzRP9YZRqSa+S7iq8XEN3GHHoOo0Hnp3DwQ16CePbJC/kRYkRj5K
|
874 |
+
Ts4rFtULUh38H2eiAkUxT87z+gOneZ1TatnaYzr4gNfTmeGl4b7UVXGYNTq+k+qurUKykG/g/CFN
|
875 |
+
NWMziUnWm07Kx+dOCQD32sfvmWKZd7aVIl6KoKv0uHiYyjgZmclynnjNS6yvGaBzEi38wkG6gZHa
|
876 |
+
Floxt/m0cYASSJlyc1pZU8FjUjPtp8nSOQJw+uCxQmYpqptR7TBUIhRf2asdweSU8Pj1K/fqynhG
|
877 |
+
1riR/aYNKxoUAT6A8EKglQdebc3MS6RFjasS6LPeWuWgfOgPIh1a6Vk=
|
878 |
+
-----END CERTIFICATE-----
|
879 |
+
|
880 |
+
thawte Primary Root CA
|
881 |
+
======================
|
882 |
+
-----BEGIN CERTIFICATE-----
|
883 |
+
MIIEIDCCAwigAwIBAgIQNE7VVyDV7exJ9C/ON9srbTANBgkqhkiG9w0BAQUFADCBqTELMAkGA1UE
|
884 |
+
BhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2
|
885 |
+
aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhv
|
886 |
+
cml6ZWQgdXNlIG9ubHkxHzAdBgNVBAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwHhcNMDYxMTE3
|
887 |
+
MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCBqTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwg
|
888 |
+
SW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMv
|
889 |
+
KGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNVBAMT
|
890 |
+
FnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCs
|
891 |
+
oPD7gFnUnMekz52hWXMJEEUMDSxuaPFsW0hoSVk3/AszGcJ3f8wQLZU0HObrTQmnHNK4yZc2AreJ
|
892 |
+
1CRfBsDMRJSUjQJib+ta3RGNKJpchJAQeg29dGYvajig4tVUROsdB58Hum/u6f1OCyn1PoSgAfGc
|
893 |
+
q/gcfomk6KHYcWUNo1F77rzSImANuVud37r8UVsLr5iy6S7pBOhih94ryNdOwUxkHt3Ph1i6Sk/K
|
894 |
+
aAcdHJ1KxtUvkcx8cXIcxcBn6zL9yZJclNqFwJu/U30rCfSMnZEfl2pSy94JNqR32HuHUETVPm4p
|
895 |
+
afs5SSYeCaWAe0At6+gnhcn+Yf1+5nyXHdWdAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYD
|
896 |
+
VR0PAQH/BAQDAgEGMB0GA1UdDgQWBBR7W0XPr87Lev0xkhpqtvNG61dIUDANBgkqhkiG9w0BAQUF
|
897 |
+
AAOCAQEAeRHAS7ORtvzw6WfUDW5FvlXok9LOAz/t2iWwHVfLHjp2oEzsUHboZHIMpKnxuIvW1oeE
|
898 |
+
uzLlQRHAd9mzYJ3rG9XRbkREqaYB7FViHXe4XI5ISXycO1cRrK1zN44veFyQaEfZYGDm/Ac9IiAX
|
899 |
+
xPcW6cTYcvnIc3zfFi8VqT79aie2oetaupgf1eNNZAqdE8hhuvU5HIe6uL17In/2/qxAeeWsEG89
|
900 |
+
jxt5dovEN7MhGITlNgDrYyCZuen+MwS7QcjBAvlEYyCegc5C09Y/LHbTY5xZ3Y+m4Q6gLkH3LpVH
|
901 |
+
z7z9M/P2C2F+fpErgUfCJzDupxBdN49cOSvkBPB7jVaMaA==
|
902 |
+
-----END CERTIFICATE-----
|
903 |
+
|
904 |
+
VeriSign Class 3 Public Primary Certification Authority - G5
|
905 |
+
============================================================
|
906 |
+
-----BEGIN CERTIFICATE-----
|
907 |
+
MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCByjELMAkGA1UE
|
908 |
+
BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBO
|
909 |
+
ZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVk
|
910 |
+
IHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRp
|
911 |
+
ZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCB
|
912 |
+
yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2ln
|
913 |
+
biBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZvciBh
|
914 |
+
dXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmlt
|
915 |
+
YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
|
916 |
+
ggEKAoIBAQCvJAgIKXo1nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKz
|
917 |
+
j/i5Vbext0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIzSdhD
|
918 |
+
Y2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQGBO+QueQA5N06tRn/
|
919 |
+
Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+rCpSx4/VBEnkjWNHiDxpg8v+R70r
|
920 |
+
fk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/
|
921 |
+
BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2Uv
|
922 |
+
Z2lmMCEwHzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy
|
923 |
+
aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKvMzEzMA0GCSqG
|
924 |
+
SIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzEp6B4Eq1iDkVwZMXnl2YtmAl+
|
925 |
+
X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKE
|
926 |
+
KQsTb47bDN0lAtukixlE0kF6BWlKWE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiC
|
927 |
+
Km0oHw0LxOXnGiYZ4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vE
|
928 |
+
ZV8NhnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq
|
929 |
+
-----END CERTIFICATE-----
|
930 |
+
|
931 |
+
SecureTrust CA
|
932 |
+
==============
|
933 |
+
-----BEGIN CERTIFICATE-----
|
934 |
+
MIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBIMQswCQYDVQQG
|
935 |
+
EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xFzAVBgNVBAMTDlNlY3VyZVRy
|
936 |
+
dXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIzMTE5NDA1NVowSDELMAkGA1UEBhMCVVMxIDAe
|
937 |
+
BgNVBAoTF1NlY3VyZVRydXN0IENvcnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTCC
|
938 |
+
ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7CT8rU4niVWJxB4Q2ZQCQX
|
939 |
+
OZEzZum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/jep4G6pkjGnx29vo6pQT64lO0pGtSO0gMdA+9t
|
940 |
+
DWccV9cGrcrI9f4Or2YlSASWC12juhbDCE/RRvgUXPLIXgGZbf2IzIaowW8xQmxSPmjL8xk037uH
|
941 |
+
GFaAJsTQ3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj7DaUaHp3pLHnDi+BeuK1cobvomuL8A/b
|
942 |
+
01k/unK8RCSc43Oz969XL0Imnal0ugBS8kvNU3xHCzaFDmapCJcWNFfBZveA4+1wVMeT4C4oFVmH
|
943 |
+
ursCAwEAAaOBnTCBmjATBgkrBgEEAYI3FAIEBh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/
|
944 |
+
BAUwAwEB/zAdBgNVHQ4EFgQUQjK2FvoE/f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCegJYYj
|
945 |
+
aHR0cDovL2NybC5zZWN1cmV0cnVzdC5jb20vU1RDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQAwDQYJ
|
946 |
+
KoZIhvcNAQEFBQADggEBADDtT0rhWDpSclu1pqNlGKa7UTt36Z3q059c4EVlew3KW+JwULKUBRSu
|
947 |
+
SceNQQcSc5R+DCMh/bwQf2AQWnL1mA6s7Ll/3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHf
|
948 |
+
mbx8IVQr5Fiiu1cprp6poxkmD5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZ
|
949 |
+
nMUFdAvnZyPSCPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR
|
950 |
+
3ItHuuG51WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShLHZ4swrhovO0C7jE=
|
951 |
+
-----END CERTIFICATE-----
|
952 |
+
|
953 |
+
Secure Global CA
|
954 |
+
================
|
955 |
+
-----BEGIN CERTIFICATE-----
|
956 |
+
MIIDvDCCAqSgAwIBAgIQB1YipOjUiolN9BPI8PjqpTANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQG
|
957 |
+
EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBH
|
958 |
+
bG9iYWwgQ0EwHhcNMDYxMTA3MTk0MjI4WhcNMjkxMjMxMTk1MjA2WjBKMQswCQYDVQQGEwJVUzEg
|
959 |
+
MB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwg
|
960 |
+
Q0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvNS7YrGxVaQZx5RNoJLNP2MwhR/jx
|
961 |
+
YDiJiQPpvepeRlMJ3Fz1Wuj3RSoC6zFh1ykzTM7HfAo3fg+6MpjhHZevj8fcyTiW89sa/FHtaMbQ
|
962 |
+
bqR8JNGuQsiWUGMu4P51/pinX0kuleM5M2SOHqRfkNJnPLLZ/kG5VacJjnIFHovdRIWCQtBJwB1g
|
963 |
+
8NEXLJXr9qXBkqPFwqcIYA1gBBCWeZ4WNOaptvolRTnIHmX5k/Wq8VLcmZg9pYYaDDUz+kulBAYV
|
964 |
+
HDGA76oYa8J719rO+TMg1fW9ajMtgQT7sFzUnKPiXB3jqUJ1XnvUd+85VLrJChgbEplJL4hL/VBi
|
965 |
+
0XPnj3pDAgMBAAGjgZ0wgZowEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud
|
966 |
+
EwEB/wQFMAMBAf8wHQYDVR0OBBYEFK9EBMJBfkiD2045AuzshHrmzsmkMDQGA1UdHwQtMCswKaAn
|
967 |
+
oCWGI2h0dHA6Ly9jcmwuc2VjdXJldHJ1c3QuY29tL1NHQ0EuY3JsMBAGCSsGAQQBgjcVAQQDAgEA
|
968 |
+
MA0GCSqGSIb3DQEBBQUAA4IBAQBjGghAfaReUw132HquHw0LURYD7xh8yOOvaliTFGCRsoTciE6+
|
969 |
+
OYo68+aCiV0BN7OrJKQVDpI1WkpEXk5X+nXOH0jOZvQ8QCaSmGwb7iRGDBezUqXbpZGRzzfTb+cn
|
970 |
+
CDpOGR86p1hcF895P4vkp9MmI50mD1hp/Ed+stCNi5O/KU9DaXR2Z0vPB4zmAve14bRDtUstFJ/5
|
971 |
+
3CYNv6ZHdAbYiNE6KTCEztI5gGIbqMdXSbxqVVFnFUq+NQfk1XWYN3kwFNspnWzFacxHVaIw98xc
|
972 |
+
f8LDmBxrThaA63p4ZUWiABqvDA1VZDRIuJK58bRQKfJPIx/abKwfROHdI3hRW8cW
|
973 |
+
-----END CERTIFICATE-----
|
974 |
+
|
975 |
+
COMODO Certification Authority
|
976 |
+
==============================
|
977 |
+
-----BEGIN CERTIFICATE-----
|
978 |
+
MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCBgTELMAkGA1UE
|
979 |
+
BhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgG
|
980 |
+
A1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNVBAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1
|
981 |
+
dGhvcml0eTAeFw0wNjEyMDEwMDAwMDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEb
|
982 |
+
MBkGA1UECBMSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFD
|
983 |
+
T01PRE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0aG9yaXR5
|
984 |
+
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3UcEbVASY06m/weaKXTuH
|
985 |
+
+7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI2GqGd0S7WWaXUF601CxwRM/aN5VCaTww
|
986 |
+
xHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV
|
987 |
+
4EajcNxo2f8ESIl33rXp+2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA
|
988 |
+
1KGzqSX+DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5OnKVI
|
989 |
+
rLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW/zAOBgNVHQ8BAf8E
|
990 |
+
BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6gPKA6hjhodHRwOi8vY3JsLmNvbW9k
|
991 |
+
b2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9uQXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOC
|
992 |
+
AQEAPpiem/Yb6dc5t3iuHXIYSdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CP
|
993 |
+
OGEIqB6BCsAvIC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/
|
994 |
+
RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4zJVSk/BwJVmc
|
995 |
+
IGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5ddBA6+C4OmF4O5MBKgxTMVBbkN
|
996 |
+
+8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IBZQ==
|
997 |
+
-----END CERTIFICATE-----
|
998 |
+
|
999 |
+
Network Solutions Certificate Authority
|
1000 |
+
=======================================
|
1001 |
+
-----BEGIN CERTIFICATE-----
|
1002 |
+
MIID5jCCAs6gAwIBAgIQV8szb8JcFuZHFhfjkDFo4DANBgkqhkiG9w0BAQUFADBiMQswCQYDVQQG
|
1003 |
+
EwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMuMTAwLgYDVQQDEydOZXR3b3Jr
|
1004 |
+
IFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDYxMjAxMDAwMDAwWhcNMjkxMjMx
|
1005 |
+
MjM1OTU5WjBiMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMu
|
1006 |
+
MTAwLgYDVQQDEydOZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0G
|
1007 |
+
CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkvH6SMG3G2I4rC7xGzuAnlt7e+foS0zwzc7MEL7xx
|
1008 |
+
jOWftiJgPl9dzgn/ggwbmlFQGiaJ3dVhXRncEg8tCqJDXRfQNJIg6nPPOCwGJgl6cvf6UDL4wpPT
|
1009 |
+
aaIjzkGxzOTVHzbRijr4jGPiFFlp7Q3Tf2vouAPlT2rlmGNpSAW+Lv8ztumXWWn4Zxmuk2GWRBXT
|
1010 |
+
crA/vGp97Eh/jcOrqnErU2lBUzS1sLnFBgrEsEX1QV1uiUV7PTsmjHTC5dLRfbIR1PtYMiKagMnc
|
1011 |
+
/Qzpf14Dl847ABSHJ3A4qY5usyd2mFHgBeMhqxrVhSI8KbWaFsWAqPS7azCPL0YCorEMIuDTAgMB
|
1012 |
+
AAGjgZcwgZQwHQYDVR0OBBYEFCEwyfsA106Y2oeqKtCnLrFAMadMMA4GA1UdDwEB/wQEAwIBBjAP
|
1013 |
+
BgNVHRMBAf8EBTADAQH/MFIGA1UdHwRLMEkwR6BFoEOGQWh0dHA6Ly9jcmwubmV0c29sc3NsLmNv
|
1014 |
+
bS9OZXR3b3JrU29sdXRpb25zQ2VydGlmaWNhdGVBdXRob3JpdHkuY3JsMA0GCSqGSIb3DQEBBQUA
|
1015 |
+
A4IBAQC7rkvnt1frf6ott3NHhWrB5KUd5Oc86fRZZXe1eltajSU24HqXLjjAV2CDmAaDn7l2em5Q
|
1016 |
+
4LqILPxFzBiwmZVRDuwduIj/h1AcgsLj4DKAv6ALR8jDMe+ZZzKATxcheQxpXN5eNK4CtSbqUN9/
|
1017 |
+
GGUsyfJj4akH/nxxH2szJGoeBfcFaMBqEssuXmHLrijTfsK0ZpEmXzwuJF/LWA/rKOyvEZbz3Htv
|
1018 |
+
wKeI8lN3s2Berq4o2jUsbzRF0ybh3uxbTydrFny9RAQYgrOJeRcQcT16ohZO9QHNpGxlaKFJdlxD
|
1019 |
+
ydi8NmdspZS11My5vWo1ViHe2MPr+8ukYEywVaCge1ey
|
1020 |
+
-----END CERTIFICATE-----
|
1021 |
+
|
1022 |
+
COMODO ECC Certification Authority
|
1023 |
+
==================================
|
1024 |
+
-----BEGIN CERTIFICATE-----
|
1025 |
+
MIICiTCCAg+gAwIBAgIQH0evqmIAcFBUTAGem2OZKjAKBggqhkjOPQQDAzCBhTELMAkGA1UEBhMC
|
1026 |
+
R0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UE
|
1027 |
+
ChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBB
|
1028 |
+
dXRob3JpdHkwHhcNMDgwMzA2MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0Ix
|
1029 |
+
GzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMR
|
1030 |
+
Q09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRo
|
1031 |
+
b3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQDR3svdcmCFYX7deSRFtSrYpn1PlILBs5BAH+X
|
1032 |
+
4QokPB0BBO490o0JlwzgdeT6+3eKKvUDYEs2ixYjFq0JcfRK9ChQtP6IHG4/bC8vCVlbpVsLM5ni
|
1033 |
+
wz2J+Wos77LTBumjQjBAMB0GA1UdDgQWBBR1cacZSBm8nZ3qQUfflMRId5nTeTAOBgNVHQ8BAf8E
|
1034 |
+
BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjEA7wNbeqy3eApyt4jf/7VG
|
1035 |
+
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-----
|
1063 |
+
MIID8TCCAtmgAwIBAgIQQT1yx/RrH4FDffHSKFTfmjANBgkqhkiG9w0BAQUFADCBijELMAkGA1UE
|
1064 |
+
BhMCQ0gxEDAOBgNVBAoTB1dJU2VLZXkxGzAZBgNVBAsTEkNvcHlyaWdodCAoYykgMjAwNTEiMCAG
|
1065 |
+
A1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNlZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBH
|
1066 |
+
bG9iYWwgUm9vdCBHQSBDQTAeFw0wNTEyMTExNjAzNDRaFw0zNzEyMTExNjA5NTFaMIGKMQswCQYD
|
1067 |
+
VQQGEwJDSDEQMA4GA1UEChMHV0lTZUtleTEbMBkGA1UECxMSQ29weXJpZ2h0IChjKSAyMDA1MSIw
|
1068 |
+
IAYDVQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5
|
1069 |
+
IEdsb2JhbCBSb290IEdBIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAy0+zAJs9
|
1070 |
+
Nt350UlqaxBJH+zYK7LG+DKBKUOVTJoZIyEVRd7jyBxRVVuuk+g3/ytr6dTqvirdqFEr12bDYVxg
|
1071 |
+
Asj1znJ7O7jyTmUIms2kahnBAbtzptf2w93NvKSLtZlhuAGio9RN1AU9ka34tAhxZK9w8RxrfvbD
|
1072 |
+
d50kc3vkDIzh2TbhmYsFmQvtRTEJysIA2/dyoJaqlYfQjse2YXMNdmaM3Bu0Y6Kff5MTMPGhJ9vZ
|
1073 |
+
/yxViJGg4E8HsChWjBgbl0SOid3gF27nKu+POQoxhILYQBRJLnpB5Kf+42TMwVlxSywhp1t94B3R
|
1074 |
+
LoGbw9ho972WG6xwsRYUC9tguSYBBQIDAQABo1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUw
|
1075 |
+
AwEB/zAdBgNVHQ4EFgQUswN+rja8sHnR3JQmthG+IbJphpQwEAYJKwYBBAGCNxUBBAMCAQAwDQYJ
|
1076 |
+
KoZIhvcNAQEFBQADggEBAEuh/wuHbrP5wUOxSPMowB0uyQlB+pQAHKSkq0lPjz0e701vvbyk9vIm
|
1077 |
+
MMkQyh2I+3QZH4VFvbBsUfk2ftv1TDI6QU9bR8/oCy22xBmddMVHxjtqD6wU2zz0c5ypBd8A3HR4
|
1078 |
+
+vg1YFkCExh8vPtNsCBtQ7tgMHpnM1zFmdH4LTlSc/uMqpclXHLZCB6rTjzjgTGfA6b7wP4piFXa
|
1079 |
+
hNVQA7bihKOmNqoROgHhGEvWRGizPflTdISzRpFGlgC3gCy24eMQ4tui5yiPAZZiFj4A4xylNoEY
|
1080 |
+
okxSdsARo27mHbrjWr42U8U+dY+GaSlYU7Wcu2+fXMUY7N0v4ZjJ/L7fCg0=
|
1081 |
+
-----END CERTIFICATE-----
|
1082 |
+
|
1083 |
+
Certigna
|
1084 |
+
========
|
1085 |
+
-----BEGIN CERTIFICATE-----
|
1086 |
+
MIIDqDCCApCgAwIBAgIJAP7c4wEPyUj/MA0GCSqGSIb3DQEBBQUAMDQxCzAJBgNVBAYTAkZSMRIw
|
1087 |
+
EAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hMB4XDTA3MDYyOTE1MTMwNVoXDTI3
|
1088 |
+
MDYyOTE1MTMwNVowNDELMAkGA1UEBhMCRlIxEjAQBgNVBAoMCURoaW15b3RpczERMA8GA1UEAwwI
|
1089 |
+
Q2VydGlnbmEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDIaPHJ1tazNHUmgh7stL7q
|
1090 |
+
XOEm7RFHYeGifBZ4QCHkYJ5ayGPhxLGWkv8YbWkj4Sti993iNi+RB7lIzw7sebYs5zRLcAglozyH
|
1091 |
+
GxnygQcPOJAZ0xH+hrTy0V4eHpbNgGzOOzGTtvKg0KmVEn2lmsxryIRWijOp5yIVUxbwzBfsV1/p
|
1092 |
+
ogqYCd7jX5xv3EjjhQsVWqa6n6xI4wmy9/Qy3l40vhx4XUJbzg4ij02Q130yGLMLLGq/jj8UEYkg
|
1093 |
+
DncUtT2UCIf3JR7VsmAA7G8qKCVuKj4YYxclPz5EIBb2JsglrgVKtOdjLPOMFlN+XPsRGgjBRmKf
|
1094 |
+
Irjxwo1p3Po6WAbfAgMBAAGjgbwwgbkwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUGu3+QTmQ
|
1095 |
+
tCRZvgHyUtVF9lo53BEwZAYDVR0jBF0wW4AUGu3+QTmQtCRZvgHyUtVF9lo53BGhOKQ2MDQxCzAJ
|
1096 |
+
BgNVBAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hggkA/tzjAQ/J
|
1097 |
+
SP8wDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG9w0BAQUFAAOCAQEA
|
1098 |
+
hQMeknH2Qq/ho2Ge6/PAD/Kl1NqV5ta+aDY9fm4fTIrv0Q8hbV6lUmPOEvjvKtpv6zf+EwLHyzs+
|
1099 |
+
ImvaYS5/1HI93TDhHkxAGYwP15zRgzB7mFncfca5DClMoTOi62c6ZYTTluLtdkVwj7Ur3vkj1klu
|
1100 |
+
PBS1xp81HlDQwY9qcEQCYsuuHWhBp6pX6FOqB9IG9tUUBguRA3UsbHK1YZWaDYu5Def131TN3ubY
|
1101 |
+
1gkIl2PlwS6wt0QmwCbAr1UwnjvVNioZBPRcHv/PLLf/0P2HQBHVESO7SMAhqaQoLf0V+LBOK/Qw
|
1102 |
+
WyH8EZE0vkHve52Xdf+XlcCWWC/qu0bXu+TZLg==
|
1103 |
+
-----END CERTIFICATE-----
|
1104 |
+
|
1105 |
+
Deutsche Telekom Root CA 2
|
1106 |
+
==========================
|
1107 |
+
-----BEGIN CERTIFICATE-----
|
1108 |
+
MIIDnzCCAoegAwIBAgIBJjANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJERTEcMBoGA1UEChMT
|
1109 |
+
RGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxlU2VjIFRydXN0IENlbnRlcjEjMCEG
|
1110 |
+
A1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290IENBIDIwHhcNOTkwNzA5MTIxMTAwWhcNMTkwNzA5
|
1111 |
+
MjM1OTAwWjBxMQswCQYDVQQGEwJERTEcMBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0G
|
1112 |
+
A1UECxMWVC1UZWxlU2VjIFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBS
|
1113 |
+
b290IENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCrC6M14IspFLEUha88EOQ5
|
1114 |
+
bzVdSq7d6mGNlUn0b2SjGmBmpKlAIoTZ1KXleJMOaAGtuU1cOs7TuKhCQN/Po7qCWWqSG6wcmtoI
|
1115 |
+
KyUn+WkjR/Hg6yx6m/UTAtB+NHzCnjwAWav12gz1MjwrrFDa1sPeg5TKqAyZMg4ISFZbavva4VhY
|
1116 |
+
AUlfckE8FQYBjl2tqriTtM2e66foai1SNNs671x1Udrb8zH57nGYMsRUFUQM+ZtV7a3fGAigo4aK
|
1117 |
+
Se5TBY8ZTNXeWHmb0mocQqvF1afPaA+W5OFhmHZhyJF81j4A4pFQh+GdCuatl9Idxjp9y7zaAzTV
|
1118 |
+
jlsB9WoHtxa2bkp/AgMBAAGjQjBAMB0GA1UdDgQWBBQxw3kbuvVT1xfgiXotF2wKsyudMzAPBgNV
|
1119 |
+
HRMECDAGAQH/AgEFMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAlGRZrTlk5ynr
|
1120 |
+
E/5aw4sTV8gEJPB0d8Bg42f76Ymmg7+Wgnxu1MM9756AbrsptJh6sTtU6zkXR34ajgv8HzFZMQSy
|
1121 |
+
zhfzLMdiNlXiItiJVbSYSKpk+tYcNthEeFpaIzpXl/V6ME+un2pMSyuOoAPjPuCp1NJ70rOo4nI8
|
1122 |
+
rZ7/gFnkm0W09juwzTkZmDLl6iFhkOQxIY40sfcvNUqFENrnijchvllj4PKFiDFT1FQUhXB59C4G
|
1123 |
+
dyd1Lx+4ivn+xbrYNuSD7Odlt79jWvNGr4GUN9RBjNYj1h7P9WgbRGOiWrqnNVmh5XAFmw4jV5mU
|
1124 |
+
Cm26OWMohpLzGITY+9HPBVZkVw==
|
1125 |
+
-----END CERTIFICATE-----
|
1126 |
+
|
1127 |
+
Cybertrust Global Root
|
1128 |
+
======================
|
1129 |
+
-----BEGIN CERTIFICATE-----
|
1130 |
+
MIIDoTCCAomgAwIBAgILBAAAAAABD4WqLUgwDQYJKoZIhvcNAQEFBQAwOzEYMBYGA1UEChMPQ3li
|
1131 |
+
ZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2JhbCBSb290MB4XDTA2MTIxNTA4
|
1132 |
+
MDAwMFoXDTIxMTIxNTA4MDAwMFowOzEYMBYGA1UEChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQD
|
1133 |
+
ExZDeWJlcnRydXN0IEdsb2JhbCBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
|
1134 |
+
+Mi8vRRQZhP/8NN57CPytxrHjoXxEnOmGaoQ25yiZXRadz5RfVb23CO21O1fWLE3TdVJDm71aofW
|
1135 |
+
0ozSJ8bi/zafmGWgE07GKmSb1ZASzxQG9Dvj1Ci+6A74q05IlG2OlTEQXO2iLb3VOm2yHLtgwEZL
|
1136 |
+
AfVJrn5GitB0jaEMAs7u/OePuGtm839EAL9mJRQr3RAwHQeWP032a7iPt3sMpTjr3kfb1V05/Iin
|
1137 |
+
89cqdPHoWqI7n1C6poxFNcJQZZXcY4Lv3b93TZxiyWNzFtApD0mpSPCzqrdsxacwOUBdrsTiXSZT
|
1138 |
+
8M4cIwhhqJQZugRiQOwfOHB3EgZxpzAYXSUnpQIDAQABo4GlMIGiMA4GA1UdDwEB/wQEAwIBBjAP
|
1139 |
+
BgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBS2CHsNesysIEyGVjJez6tuhS1wVzA/BgNVHR8EODA2
|
1140 |
+
MDSgMqAwhi5odHRwOi8vd3d3Mi5wdWJsaWMtdHJ1c3QuY29tL2NybC9jdC9jdHJvb3QuY3JsMB8G
|
1141 |
+
A1UdIwQYMBaAFLYIew16zKwgTIZWMl7Pq26FLXBXMA0GCSqGSIb3DQEBBQUAA4IBAQBW7wojoFRO
|
1142 |
+
lZfJ+InaRcHUowAl9B8Tq7ejhVhpwjCt2BWKLePJzYFa+HMjWqd8BfP9IjsO0QbE2zZMcwSO5bAi
|
1143 |
+
5MXzLqXZI+O4Tkogp24CJJ8iYGd7ix1yCcUxXOl5n4BHPa2hCwcUPUf/A2kaDAtE52Mlp3+yybh2
|
1144 |
+
hO0j9n0Hq0V+09+zv+mKts2oomcrUtW3ZfA5TGOgkXmTUg9U3YO7n9GPp1Nzw8v/MOx8BLjYRB+T
|
1145 |
+
X3EJIrduPuocA06dGiBh+4E37F78CkWr1+cXVdCg6mCbpvbjjFspwgZgFJ0tl0ypkxWdYcQBX0jW
|
1146 |
+
WL1WMRJOEcgh4LMRkWXbtKaIOM5V
|
1147 |
+
-----END CERTIFICATE-----
|
1148 |
+
|
1149 |
+
ePKI Root Certification Authority
|
1150 |
+
=================================
|
1151 |
+
-----BEGIN CERTIFICATE-----
|
1152 |
+
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
|
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-----
|
1211 |
+
MIIDODCCAiCgAwIBAgIGIAYFFnACMA0GCSqGSIb3DQEBBQUAMDsxCzAJBgNVBAYTAlJPMREwDwYD
|
1212 |
+
VQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBDQTAeFw0wNjA3MDQxNzIwMDRa
|
1213 |
+
Fw0zMTA3MDQxNzIwMDRaMDsxCzAJBgNVBAYTAlJPMREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UE
|
1214 |
+
CxMQY2VydFNJR04gUk9PVCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALczuX7I
|
1215 |
+
JUqOtdu0KBuqV5Do0SLTZLrTk+jUrIZhQGpgV2hUhE28alQCBf/fm5oqrl0Hj0rDKH/v+yv6efHH
|
1216 |
+
rfAQUySQi2bJqIirr1qjAOm+ukbuW3N7LBeCgV5iLKECZbO9xSsAfsT8AzNXDe3i+s5dRdY4zTW2
|
1217 |
+
ssHQnIFKquSyAVwdj1+ZxLGt24gh65AIgoDzMKND5pCCrlUoSe1b16kQOA7+j0xbm0bqQfWwCHTD
|
1218 |
+
0IgztnzXdN/chNFDDnU5oSVAKOp4yw4sLjmdjItuFhwvJoIQ4uNllAoEwF73XVv4EOLQunpL+943
|
1219 |
+
AAAaWyjj0pxzPjKHmKHJUS/X3qwzs08CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8B
|
1220 |
+
Af8EBAMCAcYwHQYDVR0OBBYEFOCMm9slSbPxfIbWskKHC9BroNnkMA0GCSqGSIb3DQEBBQUAA4IB
|
1221 |
+
AQA+0hyJLjX8+HXd5n9liPRyTMks1zJO890ZeUe9jjtbkw9QSSQTaxQGcu8J06Gh40CEyecYMnQ8
|
1222 |
+
SG4Pn0vU9x7Tk4ZkVJdjclDVVc/6IJMCopvDI5NOFlV2oHB5bc0hH88vLbwZ44gx+FkagQnIl6Z0
|
1223 |
+
x2DEW8xXjrJ1/RsCCdtZb3KTafcxQdaIOL+Hsr0Wefmq5L6IJd1hJyMctTEHBDa0GpC9oHRxUIlt
|
1224 |
+
vBTjD4au8as+x6AJzKNI0eDbZOeStc+vckNwi/nDhDwTqn6Sm1dTk/pwwpEOMfmbZ13pljheX7Nz
|
1225 |
+
TogVZ96edhBiIL5VaZVDADlN9u6wWk5JRFRYX0KD
|
1226 |
+
-----END CERTIFICATE-----
|
1227 |
+
|
1228 |
+
GeoTrust Primary Certification Authority - G3
|
1229 |
+
=============================================
|
1230 |
+
-----BEGIN CERTIFICATE-----
|
1231 |
+
MIID/jCCAuagAwIBAgIQFaxulBmyeUtB9iepwxgPHzANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UE
|
1232 |
+
BhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChjKSAyMDA4IEdlb1RydXN0
|
1233 |
+
IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFy
|
1234 |
+
eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEczMB4XDTA4MDQwMjAwMDAwMFoXDTM3MTIwMTIz
|
1235 |
+
NTk1OVowgZgxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAo
|
1236 |
+
YykgMjAwOCBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNVBAMT
|
1237 |
+
LUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZI
|
1238 |
+
hvcNAQEBBQADggEPADCCAQoCggEBANziXmJYHTNXOTIz+uvLh4yn1ErdBojqZI4xmKU4kB6Yzy5j
|
1239 |
+
K/BGvESyiaHAKAxJcCGVn2TAppMSAmUmhsalifD614SgcK9PGpc/BkTVyetyEH3kMSj7HGHmKAdE
|
1240 |
+
c5IiaacDiGydY8hS2pgn5whMcD60yRLBxWeDXTPzAxHsatBT4tG6NmCUgLthY2xbF37fQJQeqw3C
|
1241 |
+
IShwiP/WJmxsYAQlTlV+fe+/lEjetx3dcI0FX4ilm/LC7urRQEFtYjgdVgbFA0dRIBn8exALDmKu
|
1242 |
+
dlW/X3e+PkkBUz2YJQN2JFodtNuJ6nnltrM7P7pMKEF/BqxqjsHQ9gUdfeZChuOl1UcCAwEAAaNC
|
1243 |
+
MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMR5yo6hTgMdHNxr
|
1244 |
+
2zFblD4/MH8tMA0GCSqGSIb3DQEBCwUAA4IBAQAtxRPPVoB7eni9n64smefv2t+UXglpp+duaIy9
|
1245 |
+
cr5HqQ6XErhK8WTTOd8lNNTBzU6B8A8ExCSzNJbGpqow32hhc9f5joWJ7w5elShKKiePEI4ufIbE
|
1246 |
+
Ap7aDHdlDkQNkv39sxY2+hENHYwOB4lqKVb3cvTdFZx3NWZXqxNT2I7BQMXXExZacse3aQHEerGD
|
1247 |
+
AWh9jUGhlBjBJVz88P6DAod8DQ3PLghcSkANPuyBYeYk28rgDi0Hsj5W3I31QYUHSJsMC8tJP33s
|
1248 |
+
t/3LjWeJGqvtux6jAAgIFyqCXDFdRootD4abdNlF+9RAsXqqaC2Gspki4cErx5z481+oghLrGREt
|
1249 |
+
-----END CERTIFICATE-----
|
1250 |
+
|
1251 |
+
thawte Primary Root CA - G2
|
1252 |
+
===========================
|
1253 |
+
-----BEGIN CERTIFICATE-----
|
1254 |
+
MIICiDCCAg2gAwIBAgIQNfwmXNmET8k9Jj1Xm67XVjAKBggqhkjOPQQDAzCBhDELMAkGA1UEBhMC
|
1255 |
+
VVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjE4MDYGA1UECxMvKGMpIDIwMDcgdGhhd3RlLCBJbmMu
|
1256 |
+
IC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAiBgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3Qg
|
1257 |
+
Q0EgLSBHMjAeFw0wNzExMDUwMDAwMDBaFw0zODAxMTgyMzU5NTlaMIGEMQswCQYDVQQGEwJVUzEV
|
1258 |
+
MBMGA1UEChMMdGhhd3RlLCBJbmMuMTgwNgYDVQQLEy8oYykgMjAwNyB0aGF3dGUsIEluYy4gLSBG
|
1259 |
+
b3IgYXV0aG9yaXplZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAt
|
1260 |
+
IEcyMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEotWcgnuVnfFSeIf+iha/BebfowJPDQfGAFG6DAJS
|
1261 |
+
LSKkQjnE/o/qycG+1E3/n3qe4rF8mq2nhglzh9HnmuN6papu+7qzcMBniKI11KOasf2twu8x+qi5
|
1262 |
+
8/sIxpHR+ymVo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQU
|
1263 |
+
mtgAMADna3+FGO6Lts6KDPgR4bswCgYIKoZIzj0EAwMDaQAwZgIxAN344FdHW6fmCsO99YCKlzUN
|
1264 |
+
G4k8VIZ3KMqh9HneteY4sPBlcIx/AlTCv//YoT7ZzwIxAMSNlPzcU9LcnXgWHxUzI1NS41oxXZ3K
|
1265 |
+
rr0TKUQNJ1uo52icEvdYPy5yAlejj6EULg==
|
1266 |
+
-----END CERTIFICATE-----
|
1267 |
+
|
1268 |
+
thawte Primary Root CA - G3
|
1269 |
+
===========================
|
1270 |
+
-----BEGIN CERTIFICATE-----
|
1271 |
+
MIIEKjCCAxKgAwIBAgIQYAGXt0an6rS0mtZLL/eQ+zANBgkqhkiG9w0BAQsFADCBrjELMAkGA1UE
|
1272 |
+
BhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2
|
1273 |
+
aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIwMDggdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhv
|
1274 |
+
cml6ZWQgdXNlIG9ubHkxJDAiBgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMzAeFw0w
|
1275 |
+
ODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIGuMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhh
|
1276 |
+
d3RlLCBJbmMuMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNlcnZpY2VzIERpdmlzaW9uMTgwNgYD
|
1277 |
+
VQQLEy8oYykgMjAwOCB0aGF3dGUsIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEkMCIG
|
1278 |
+
A1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAtIEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
|
1279 |
+
MIIBCgKCAQEAsr8nLPvb2FvdeHsbnndmgcs+vHyu86YnmjSjaDFxODNi5PNxZnmxqWWjpYvVj2At
|
1280 |
+
P0LMqmsywCPLLEHd5N/8YZzic7IilRFDGF/Eth9XbAoFWCLINkw6fKXRz4aviKdEAhN0cXMKQlkC
|
1281 |
+
+BsUa0Lfb1+6a4KinVvnSr0eAXLbS3ToO39/fR8EtCab4LRarEc9VbjXsCZSKAExQGbY2SS99irY
|
1282 |
+
7CFJXJv2eul/VTV+lmuNk5Mny5K76qxAwJ/C+IDPXfRa3M50hqY+bAtTyr2SzhkGcuYMXDhpxwTW
|
1283 |
+
vGzOW/b3aJzcJRVIiKHpqfiYnODz1TEoYRFsZ5aNOZnLwkUkOQIDAQABo0IwQDAPBgNVHRMBAf8E
|
1284 |
+
BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUrWyqlGCc7eT/+j4KdCtjA/e2Wb8wDQYJ
|
1285 |
+
KoZIhvcNAQELBQADggEBABpA2JVlrAmSicY59BDlqQ5mU1143vokkbvnRFHfxhY0Cu9qRFHqKweK
|
1286 |
+
A3rD6z8KLFIWoCtDuSWQP3CpMyVtRRooOyfPqsMpQhvfO0zAMzRbQYi/aytlryjvsvXDqmbOe1bu
|
1287 |
+
t8jLZ8HJnBoYuMTDSQPxYA5QzUbF83d597YV4Djbxy8ooAw/dyZ02SUS2jHaGh7cKUGRIjxpp7sC
|
1288 |
+
8rZcJwOJ9Abqm+RyguOhCcHpABnTPtRwa7pxpqpYrvS76Wy274fMm7v/OeZWYdMKp8RcTGB7BXcm
|
1289 |
+
er/YB1IsYvdwY9k5vG8cwnncdimvzsUsZAReiDZuMdRAGmI0Nj81Aa6sY6A=
|
1290 |
+
-----END CERTIFICATE-----
|
1291 |
+
|
1292 |
+
GeoTrust Primary Certification Authority - G2
|
1293 |
+
=============================================
|
1294 |
+
-----BEGIN CERTIFICATE-----
|
1295 |
+
MIICrjCCAjWgAwIBAgIQPLL0SAoA4v7rJDteYD7DazAKBggqhkjOPQQDAzCBmDELMAkGA1UEBhMC
|
1296 |
+
VVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChjKSAyMDA3IEdlb1RydXN0IElu
|
1297 |
+
Yy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBD
|
1298 |
+
ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMB4XDTA3MTEwNTAwMDAwMFoXDTM4MDExODIzNTk1
|
1299 |
+
OVowgZgxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykg
|
1300 |
+
MjAwNyBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNVBAMTLUdl
|
1301 |
+
b1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjB2MBAGByqGSM49AgEG
|
1302 |
+
BSuBBAAiA2IABBWx6P0DFUPlrOuHNxFi79KDNlJ9RVcLSo17VDs6bl8VAsBQps8lL33KSLjHUGMc
|
1303 |
+
KiEIfJo22Av+0SbFWDEwKCXzXV2juLaltJLtbCyf691DiaI8S0iRHVDsJt/WYC69IaNCMEAwDwYD
|
1304 |
+
VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBVfNVdRVfslsq0DafwBo/q+
|
1305 |
+
EVXVMAoGCCqGSM49BAMDA2cAMGQCMGSWWaboCd6LuvpaiIjwH5HTRqjySkwCY/tsXzjbLkGTqQ7m
|
1306 |
+
ndwxHLKgpxgceeHHNgIwOlavmnRs9vuD4DPTCF+hnMJbn0bWtsuRBmOiBuczrD6ogRLQy7rQkgu2
|
1307 |
+
npaqBA+K
|
1308 |
+
-----END CERTIFICATE-----
|
1309 |
+
|
1310 |
+
VeriSign Universal Root Certification Authority
|
1311 |
+
===============================================
|
1312 |
+
-----BEGIN CERTIFICATE-----
|
1313 |
+
MIIEuTCCA6GgAwIBAgIQQBrEZCGzEyEDDrvkEhrFHTANBgkqhkiG9w0BAQsFADCBvTELMAkGA1UE
|
1314 |
+
BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBO
|
1315 |
+
ZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVk
|
1316 |
+
IHVzZSBvbmx5MTgwNgYDVQQDEy9WZXJpU2lnbiBVbml2ZXJzYWwgUm9vdCBDZXJ0aWZpY2F0aW9u
|
1317 |
+
IEF1dGhvcml0eTAeFw0wODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIG9MQswCQYDVQQGEwJV
|
1318 |
+
UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv
|
1319 |
+
cmsxOjA4BgNVBAsTMShjKSAyMDA4IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
|
1320 |
+
IG9ubHkxODA2BgNVBAMTL1ZlcmlTaWduIFVuaXZlcnNhbCBSb290IENlcnRpZmljYXRpb24gQXV0
|
1321 |
+
aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx2E3XrEBNNti1xWb/1hajCMj
|
1322 |
+
1mCOkdeQmIN65lgZOIzF9uVkhbSicfvtvbnazU0AtMgtc6XHaXGVHzk8skQHnOgO+k1KxCHfKWGP
|
1323 |
+
MiJhgsWHH26MfF8WIFFE0XBPV+rjHOPMee5Y2A7Cs0WTwCznmhcrewA3ekEzeOEz4vMQGn+HLL72
|
1324 |
+
9fdC4uW/h2KJXwBL38Xd5HVEMkE6HnFuacsLdUYI0crSK5XQz/u5QGtkjFdN/BMReYTtXlT2NJ8I
|
1325 |
+
AfMQJQYXStrxHXpma5hgZqTZ79IugvHw7wnqRMkVauIDbjPTrJ9VAMf2CGqUuV/c4DPxhGD5WycR
|
1326 |
+
tPwW8rtWaoAljQIDAQABo4GyMIGvMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMG0G
|
1327 |
+
CCsGAQUFBwEMBGEwX6FdoFswWTBXMFUWCWltYWdlL2dpZjAhMB8wBwYFKw4DAhoEFI/l0xqGrI2O
|
1328 |
+
a8PPgGrUSBgsexkuMCUWI2h0dHA6Ly9sb2dvLnZlcmlzaWduLmNvbS92c2xvZ28uZ2lmMB0GA1Ud
|
1329 |
+
DgQWBBS2d/ppSEefUxLVwuoHMnYH0ZcHGTANBgkqhkiG9w0BAQsFAAOCAQEASvj4sAPmLGd75JR3
|
1330 |
+
Y8xuTPl9Dg3cyLk1uXBPY/ok+myDjEedO2Pzmvl2MpWRsXe8rJq+seQxIcaBlVZaDrHC1LGmWazx
|
1331 |
+
Y8u4TB1ZkErvkBYoH1quEPuBUDgMbMzxPcP1Y+Oz4yHJJDnp/RVmRvQbEdBNc6N9Rvk97ahfYtTx
|
1332 |
+
P/jgdFcrGJ2BtMQo2pSXpXDrrB2+BxHw1dvd5Yzw1TKwg+ZX4o+/vqGqvz0dtdQ46tewXDpPaj+P
|
1333 |
+
wGZsY6rp2aQW9IHRlRQOfc2VNNnSj3BzgXucfr2YYdhFh5iQxeuGMMY1v/D/w1WIg0vvBZIGcfK4
|
1334 |
+
mJO37M2CYfE45k+XmCpajQ==
|
1335 |
+
-----END CERTIFICATE-----
|
1336 |
+
|
1337 |
+
VeriSign Class 3 Public Primary Certification Authority - G4
|
1338 |
+
============================================================
|
1339 |
+
-----BEGIN CERTIFICATE-----
|
1340 |
+
MIIDhDCCAwqgAwIBAgIQL4D+I4wOIg9IZxIokYesszAKBggqhkjOPQQDAzCByjELMAkGA1UEBhMC
|
1341 |
+
VVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3
|
1342 |
+
b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVz
|
1343 |
+
ZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmlj
|
1344 |
+
YXRpb24gQXV0aG9yaXR5IC0gRzQwHhcNMDcxMTA1MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCByjEL
|
1345 |
+
MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBU
|
1346 |
+
cnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRo
|
1347 |
+
b3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5
|
1348 |
+
IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzQwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASnVnp8
|
1349 |
+
Utpkmw4tXNherJI9/gHmGUo9FANL+mAnINmDiWn6VMaaGF5VKmTeBvaNSjutEDxlPZCIBIngMGGz
|
1350 |
+
rl0Bp3vefLK+ymVhAIau2o970ImtTR1ZmkGxvEeA3J5iw/mjgbIwga8wDwYDVR0TAQH/BAUwAwEB
|
1351 |
+
/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEw
|
1352 |
+
HzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVyaXNpZ24u
|
1353 |
+
Y29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFLMWkf3upm7ktS5Jj4d4gYDs5bG1MAoGCCqGSM49BAMD
|
1354 |
+
A2gAMGUCMGYhDBgmYFo4e1ZC4Kf8NoRRkSAsdk1DPcQdhCPQrNZ8NQbOzWm9kA3bbEhCHQ6qQgIx
|
1355 |
+
AJw9SDkjOVgaFRJZap7v1VmyHVIsmXHNxynfGyphe3HR3vPA5Q06Sqotp9iGKt0uEA==
|
1356 |
+
-----END CERTIFICATE-----
|
1357 |
+
|
1358 |
+
NetLock Arany (Class Gold) Főtanúsítvány
|
1359 |
+
========================================
|
1360 |
+
-----BEGIN CERTIFICATE-----
|
1361 |
+
MIIEFTCCAv2gAwIBAgIGSUEs5AAQMA0GCSqGSIb3DQEBCwUAMIGnMQswCQYDVQQGEwJIVTERMA8G
|
1362 |
+
A1UEBwwIQnVkYXBlc3QxFTATBgNVBAoMDE5ldExvY2sgS2Z0LjE3MDUGA1UECwwuVGFuw7pzw610
|
1363 |
+
dsOhbnlraWFkw7NrIChDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzKTE1MDMGA1UEAwwsTmV0TG9jayBB
|
1364 |
+
cmFueSAoQ2xhc3MgR29sZCkgRsWRdGFuw7pzw610dsOhbnkwHhcNMDgxMjExMTUwODIxWhcNMjgx
|
1365 |
+
MjA2MTUwODIxWjCBpzELMAkGA1UEBhMCSFUxETAPBgNVBAcMCEJ1ZGFwZXN0MRUwEwYDVQQKDAxO
|
1366 |
+
ZXRMb2NrIEtmdC4xNzA1BgNVBAsMLlRhbsO6c8OtdHbDoW55a2lhZMOzayAoQ2VydGlmaWNhdGlv
|
1367 |
+
biBTZXJ2aWNlcykxNTAzBgNVBAMMLE5ldExvY2sgQXJhbnkgKENsYXNzIEdvbGQpIEbFkXRhbsO6
|
1368 |
+
c8OtdHbDoW55MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxCRec75LbRTDofTjl5Bu
|
1369 |
+
0jBFHjzuZ9lk4BqKf8owyoPjIMHj9DrTlF8afFttvzBPhCf2nx9JvMaZCpDyD/V/Q4Q3Y1GLeqVw
|
1370 |
+
/HpYzY6b7cNGbIRwXdrzAZAj/E4wqX7hJ2Pn7WQ8oLjJM2P+FpD/sLj916jAwJRDC7bVWaaeVtAk
|
1371 |
+
H3B5r9s5VA1lddkVQZQBr17s9o3x/61k/iCa11zr/qYfCGSji3ZVrR47KGAuhyXoqq8fxmRGILdw
|
1372 |
+
fzzeSNuWU7c5d+Qa4scWhHaXWy+7GRWF+GmF9ZmnqfI0p6m2pgP8b4Y9VHx2BJtr+UBdADTHLpl1
|
1373 |
+
neWIA6pN+APSQnbAGwIDAKiLo0UwQzASBgNVHRMBAf8ECDAGAQH/AgEEMA4GA1UdDwEB/wQEAwIB
|
1374 |
+
BjAdBgNVHQ4EFgQUzPpnk/C2uNClwB7zU/2MU9+D15YwDQYJKoZIhvcNAQELBQADggEBAKt/7hwW
|
1375 |
+
qZw8UQCgwBEIBaeZ5m8BiFRhbvG5GK1Krf6BQCOUL/t1fC8oS2IkgYIL9WHxHG64YTjrgfpioTta
|
1376 |
+
YtOUZcTh5m2C+C8lcLIhJsFyUR+MLMOEkMNaj7rP9KdlpeuY0fsFskZ1FSNqb4VjMIDw1Z4fKRzC
|
1377 |
+
bLBQWV2QWzuoDTDPv31/zvGdg73JRm4gpvlhUbohL3u+pRVjodSVh/GeufOJ8z2FuLjbvrW5Kfna
|
1378 |
+
NwUASZQDhETnv0Mxz3WLJdH0pmT1kvarBes96aULNmLazAZfNou2XjG4Kvte9nHfRCaexOYNkbQu
|
1379 |
+
dZWAUWpLMKawYqGT8ZvYzsRjdT9ZR7E=
|
1380 |
+
-----END CERTIFICATE-----
|
1381 |
+
|
1382 |
+
Staat der Nederlanden Root CA - G2
|
1383 |
+
==================================
|
1384 |
+
-----BEGIN CERTIFICATE-----
|
1385 |
+
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
|
1411 |
+
66+KAQ==
|
1412 |
+
-----END CERTIFICATE-----
|
1413 |
+
|
1414 |
+
Hongkong Post Root CA 1
|
1415 |
+
=======================
|
1416 |
+
-----BEGIN CERTIFICATE-----
|
1417 |
+
MIIDMDCCAhigAwIBAgICA+gwDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCSEsxFjAUBgNVBAoT
|
1418 |
+
DUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3QgUm9vdCBDQSAxMB4XDTAzMDUx
|
1419 |
+
NTA1MTMxNFoXDTIzMDUxNTA0NTIyOVowRzELMAkGA1UEBhMCSEsxFjAUBgNVBAoTDUhvbmdrb25n
|
1420 |
+
IFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3QgUm9vdCBDQSAxMIIBIjANBgkqhkiG9w0BAQEF
|
1421 |
+
AAOCAQ8AMIIBCgKCAQEArP84tulmAknjorThkPlAj3n54r15/gK97iSSHSL22oVyaf7XPwnU3ZG1
|
1422 |
+
ApzQjVrhVcNQhrkpJsLj2aDxaQMoIIBFIi1WpztUlVYiWR8o3x8gPW2iNr4joLFutbEnPzlTCeqr
|
1423 |
+
auh0ssJlXI6/fMN4hM2eFvz1Lk8gKgifd/PFHsSaUmYeSF7jEAaPIpjhZY4bXSNmO7ilMlHIhqqh
|
1424 |
+
qZ5/dpTCpmy3QfDVyAY45tQM4vM7TG1QjMSDJ8EThFk9nnV0ttgCXjqQesBCNnLsak3c78QA3xMY
|
1425 |
+
V18meMjWCnl3v/evt3a5pQuEF10Q6m/hq5URX208o1xNg1vysxmKgIsLhwIDAQABoyYwJDASBgNV
|
1426 |
+
HRMBAf8ECDAGAQH/AgEDMA4GA1UdDwEB/wQEAwIBxjANBgkqhkiG9w0BAQUFAAOCAQEADkbVPK7i
|
1427 |
+
h9legYsCmEEIjEy82tvuJxuC52pF7BaLT4Wg87JwvVqWuspube5Gi27nKi6Wsxkz67SfqLI37pio
|
1428 |
+
l7Yutmcn1KZJ/RyTZXaeQi/cImyaT/JaFTmxcdcrUehtHJjA2Sr0oYJ71clBoiMBdDhViw+5Lmei
|
1429 |
+
IAQ32pwL0xch4I+XeTRvhEgCIDMb5jREn5Fw9IBehEPCKdJsEhTkYY2sEJCehFC78JZvRZ+K88ps
|
1430 |
+
T/oROhUVRsPNH4NbLUES7VBnQRM9IauUiqpOfMGx+6fWtScvl6tu4B3i0RwsH0Ti/L6RoZz71ilT
|
1431 |
+
c4afU9hDDl3WY4JxHYB0yvbiAmvZWg==
|
1432 |
+
-----END CERTIFICATE-----
|
1433 |
+
|
1434 |
+
SecureSign RootCA11
|
1435 |
+
===================
|
1436 |
+
-----BEGIN CERTIFICATE-----
|
1437 |
+
MIIDbTCCAlWgAwIBAgIBATANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQGEwJKUDErMCkGA1UEChMi
|
1438 |
+
SmFwYW4gQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcywgSW5jLjEcMBoGA1UEAxMTU2VjdXJlU2lnbiBS
|
1439 |
+
b290Q0ExMTAeFw0wOTA0MDgwNDU2NDdaFw0yOTA0MDgwNDU2NDdaMFgxCzAJBgNVBAYTAkpQMSsw
|
1440 |
+
KQYDVQQKEyJKYXBhbiBDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzLCBJbmMuMRwwGgYDVQQDExNTZWN1
|
1441 |
+
cmVTaWduIFJvb3RDQTExMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA/XeqpRyQBTvL
|
1442 |
+
TJszi1oURaTnkBbR31fSIRCkF/3frNYfp+TbfPfs37gD2pRY/V1yfIw/XwFndBWW4wI8h9uuywGO
|
1443 |
+
wvNmxoVF9ALGOrVisq/6nL+k5tSAMJjzDbaTj6nU2DbysPyKyiyhFTOVMdrAG/LuYpmGYz+/3ZMq
|
1444 |
+
g6h2uRMft85OQoWPIucuGvKVCbIFtUROd6EgvanyTgp9UK31BQ1FT0Zx/Sg+U/sE2C3XZR1KG/rP
|
1445 |
+
O7AxmjVuyIsG0wCR8pQIZUyxNAYAeoni8McDWc/V1uinMrPmmECGxc0nEovMe863ETxiYAcjPitA
|
1446 |
+
bpSACW22s293bzUIUPsCh8U+iQIDAQABo0IwQDAdBgNVHQ4EFgQUW/hNT7KlhtQ60vFjmqC+CfZX
|
1447 |
+
t94wDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAKCh
|
1448 |
+
OBZmLqdWHyGcBvod7bkixTgm2E5P7KN/ed5GIaGHd48HCJqypMWvDzKYC3xmKbabfSVSSUOrTC4r
|
1449 |
+
bnpwrxYO4wJs+0LmGJ1F2FXI6Dvd5+H0LgscNFxsWEr7jIhQX5Ucv+2rIrVls4W6ng+4reV6G4pQ
|
1450 |
+
Oh29Dbx7VFALuUKvVaAYga1lme++5Jy/xIWrQbJUb9wlze144o4MjQlJ3WN7WmmWAiGovVJZ6X01
|
1451 |
+
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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
|
1484 |
+
-----END CERTIFICATE-----
|
1485 |
+
|
1486 |
+
Microsec e-Szigno Root CA 2009
|
1487 |
+
==============================
|
1488 |
+
-----BEGIN CERTIFICATE-----
|
1489 |
+
MIIECjCCAvKgAwIBAgIJAMJ+QwRORz8ZMA0GCSqGSIb3DQEBCwUAMIGCMQswCQYDVQQGEwJIVTER
|
1490 |
+
MA8GA1UEBwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jv
|
1491 |
+
c2VjIGUtU3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5o
|
1492 |
+
dTAeFw0wOTA2MTYxMTMwMThaFw0yOTEyMzAxMTMwMThaMIGCMQswCQYDVQQGEwJIVTERMA8GA1UE
|
1493 |
+
BwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUt
|
1494 |
+
U3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5odTCCASIw
|
1495 |
+
DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOn4j/NjrdqG2KfgQvvPkd6mJviZpWNwrZuuyjNA
|
1496 |
+
fW2WbqEORO7hE52UQlKavXWFdCyoDh2Tthi3jCyoz/tccbna7P7ofo/kLx2yqHWH2Leh5TvPmUpG
|
1497 |
+
0IMZfcChEhyVbUr02MelTTMuhTlAdX4UfIASmFDHQWe4oIBhVKZsTh/gnQ4H6cm6M+f+wFUoLAKA
|
1498 |
+
pxn1ntxVUwOXewdI/5n7N4okxFnMUBBjjqqpGrCEGob5X7uxUG6k0QrM1XF+H6cbfPVTbiJfyyvm
|
1499 |
+
1HxdrtbCxkzlBQHZ7Vf8wSN5/PrIJIOV87VqUQHQd9bpEqH5GoP7ghu5sJf0dgYzQ0mg/wu1+rUC
|
1500 |
+
AwEAAaOBgDB+MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTLD8bf
|
1501 |
+
QkPMPcu1SCOhGnqmKrs0aDAfBgNVHSMEGDAWgBTLD8bfQkPMPcu1SCOhGnqmKrs0aDAbBgNVHREE
|
1502 |
+
FDASgRBpbmZvQGUtc3ppZ25vLmh1MA0GCSqGSIb3DQEBCwUAA4IBAQDJ0Q5eLtXMs3w+y/w9/w0o
|
1503 |
+
lZMEyL/azXm4Q5DwpL7v8u8hmLzU1F0G9u5C7DBsoKqpyvGvivo/C3NqPuouQH4frlRheesuCDfX
|
1504 |
+
I/OMn74dseGkddug4lQUsbocKaQY9hK6ohQU4zE1yED/t+AFdlfBHFny+L/k7SViXITwfn4fs775
|
1505 |
+
tyERzAMBVnCnEJIeGzSBHq2cGsMEPO0CYdYeBvNfOofyK/FFh+U9rNHHV4S9a67c2Pm2G2JwCz02
|
1506 |
+
yULyMtd6YebS2z3PyKnJm9zbWETXbzivf3jTo60adbocwTZ8jx5tHMN1Rq41Bab2XD0h7lbwyYIi
|
1507 |
+
LXpUq3DDfSJlgnCW
|
1508 |
+
-----END CERTIFICATE-----
|
1509 |
+
|
1510 |
+
GlobalSign Root CA - R3
|
1511 |
+
=======================
|
1512 |
+
-----BEGIN CERTIFICATE-----
|
1513 |
+
MIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4GA1UECxMXR2xv
|
1514 |
+
YmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh
|
1515 |
+
bFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4MTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT
|
1516 |
+
aWduIFJvb3QgQ0EgLSBSMzETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln
|
1517 |
+
bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWt
|
1518 |
+
iHL8RgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsTgHeMCOFJ
|
1519 |
+
0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmmKPZpO/bLyCiR5Z2KYVc3
|
1520 |
+
rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zdQQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjl
|
1521 |
+
OCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZXriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2
|
1522 |
+
xmmFghcCAwEAAaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE
|
1523 |
+
FI/wS3+oLkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZURUm7
|
1524 |
+
lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMpjjM5RcOO5LlXbKr8
|
1525 |
+
EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK6fBdRoyV3XpYKBovHd7NADdBj+1E
|
1526 |
+
bddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQXmcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18
|
1527 |
+
YIvDQVETI53O9zJrlAGomecsMx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7r
|
1528 |
+
kpeDMdmztcpHWD9f
|
1529 |
+
-----END CERTIFICATE-----
|
1530 |
+
|
1531 |
+
Autoridad de Certificacion Firmaprofesional CIF A62634068
|
1532 |
+
=========================================================
|
1533 |
+
-----BEGIN CERTIFICATE-----
|
1534 |
+
MIIGFDCCA/ygAwIBAgIIU+w77vuySF8wDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCRVMxQjBA
|
1535 |
+
BgNVBAMMOUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2
|
1536 |
+
MjYzNDA2ODAeFw0wOTA1MjAwODM4MTVaFw0zMDEyMzEwODM4MTVaMFExCzAJBgNVBAYTAkVTMUIw
|
1537 |
+
QAYDVQQDDDlBdXRvcmlkYWQgZGUgQ2VydGlmaWNhY2lvbiBGaXJtYXByb2Zlc2lvbmFsIENJRiBB
|
1538 |
+
NjI2MzQwNjgwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKlmuO6vj78aI14H9M2uDD
|
1539 |
+
Utd9thDIAl6zQyrET2qyyhxdKJp4ERppWVevtSBC5IsP5t9bpgOSL/UR5GLXMnE42QQMcas9UX4P
|
1540 |
+
B99jBVzpv5RvwSmCwLTaUbDBPLutN0pcyvFLNg4kq7/DhHf9qFD0sefGL9ItWY16Ck6WaVICqjaY
|
1541 |
+
7Pz6FIMMNx/Jkjd/14Et5cS54D40/mf0PmbR0/RAz15iNA9wBj4gGFrO93IbJWyTdBSTo3OxDqqH
|
1542 |
+
ECNZXyAFGUftaI6SEspd/NYrspI8IM/hX68gvqB2f3bl7BqGYTM+53u0P6APjqK5am+5hyZvQWyI
|
1543 |
+
plD9amML9ZMWGxmPsu2bm8mQ9QEM3xk9Dz44I8kvjwzRAv4bVdZO0I08r0+k8/6vKtMFnXkIoctX
|
1544 |
+
MbScyJCyZ/QYFpM6/EfY0XiWMR+6KwxfXZmtY4laJCB22N/9q06mIqqdXuYnin1oKaPnirjaEbsX
|
1545 |
+
LZmdEyRG98Xi2J+Of8ePdG1asuhy9azuJBCtLxTa/y2aRnFHvkLfuwHb9H/TKI8xWVvTyQKmtFLK
|
1546 |
+
bpf7Q8UIJm+K9Lv9nyiqDdVF8xM6HdjAeI9BZzwelGSuewvF6NkBiDkal4ZkQdU7hwxu+g/GvUgU
|
1547 |
+
vzlN1J5Bto+WHWOWk9mVBngxaJ43BjuAiUVhOSPHG0SjFeUc+JIwuwIDAQABo4HvMIHsMBIGA1Ud
|
1548 |
+
EwEB/wQIMAYBAf8CAQEwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRlzeurNR4APn7VdMActHNH
|
1549 |
+
DhpkLzCBpgYDVR0gBIGeMIGbMIGYBgRVHSAAMIGPMC8GCCsGAQUFBwIBFiNodHRwOi8vd3d3LmZp
|
1550 |
+
cm1hcHJvZmVzaW9uYWwuY29tL2NwczBcBggrBgEFBQcCAjBQHk4AUABhAHMAZQBvACAAZABlACAA
|
1551 |
+
bABhACAAQgBvAG4AYQBuAG8AdgBhACAANAA3ACAAQgBhAHIAYwBlAGwAbwBuAGEAIAAwADgAMAAx
|
1552 |
+
ADcwDQYJKoZIhvcNAQEFBQADggIBABd9oPm03cXF661LJLWhAqvdpYhKsg9VSytXjDvlMd3+xDLx
|
1553 |
+
51tkljYyGOylMnfX40S2wBEqgLk9am58m9Ot/MPWo+ZkKXzR4Tgegiv/J2Wv+xYVxC5xhOW1//qk
|
1554 |
+
R71kMrv2JYSiJ0L1ILDCExARzRAVukKQKtJE4ZYm6zFIEv0q2skGz3QeqUvVhyj5eTSSPi5E6PaP
|
1555 |
+
T481PyWzOdxjKpBrIF/EUhJOlywqrJ2X3kjyo2bbwtKDlaZmp54lD+kLM5FlClrD2VQS3a/DTg4f
|
1556 |
+
Jl4N3LON7NWBcN7STyQF82xO9UxJZo3R/9ILJUFI/lGExkKvgATP0H5kSeTy36LssUzAKh3ntLFl
|
1557 |
+
osS88Zj0qnAHY7S42jtM+kAiMFsRpvAFDsYCA0irhpuF3dvd6qJ2gHN99ZwExEWN57kci57q13XR
|
1558 |
+
crHedUTnQn3iV2t93Jm8PYMo6oCTjcVMZcFwgbg4/EMxsvYDNEeyrPsiBsse3RdHHF9mudMaotoR
|
1559 |
+
saS8I8nkvof/uZS2+F0gStRf571oe2XyFR7SOqkt6dhrJKyXWERHrVkY8SFlcN7ONGCoQPHzPKTD
|
1560 |
+
KCOM/iczQ0CgFzzr6juwcqajuUpLXhZI9LK8yIySxZ2frHI2vDSANGupi5LAuBft7HZT9SQBjLMi
|
1561 |
+
6Et8Vcad+qMUu2WFbm5PEn4KPJ2V
|
1562 |
+
-----END CERTIFICATE-----
|
1563 |
+
|
1564 |
+
Izenpe.com
|
1565 |
+
==========
|
1566 |
+
-----BEGIN CERTIFICATE-----
|
1567 |
+
MIIF8TCCA9mgAwIBAgIQALC3WhZIX7/hy/WL1xnmfTANBgkqhkiG9w0BAQsFADA4MQswCQYDVQQG
|
1568 |
+
EwJFUzEUMBIGA1UECgwLSVpFTlBFIFMuQS4xEzARBgNVBAMMCkl6ZW5wZS5jb20wHhcNMDcxMjEz
|
1569 |
+
MTMwODI4WhcNMzcxMjEzMDgyNzI1WjA4MQswCQYDVQQGEwJFUzEUMBIGA1UECgwLSVpFTlBFIFMu
|
1570 |
+
QS4xEzARBgNVBAMMCkl6ZW5wZS5jb20wggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDJ
|
1571 |
+
03rKDx6sp4boFmVqscIbRTJxldn+EFvMr+eleQGPicPK8lVx93e+d5TzcqQsRNiekpsUOqHnJJAK
|
1572 |
+
ClaOxdgmlOHZSOEtPtoKct2jmRXagaKH9HtuJneJWK3W6wyyQXpzbm3benhB6QiIEn6HLmYRY2xU
|
1573 |
+
+zydcsC8Lv/Ct90NduM61/e0aL6i9eOBbsFGb12N4E3GVFWJGjMxCrFXuaOKmMPsOzTFlUFpfnXC
|
1574 |
+
PCDFYbpRR6AgkJOhkEvzTnyFRVSa0QUmQbC1TR0zvsQDyCV8wXDbO/QJLVQnSKwv4cSsPsjLkkxT
|
1575 |
+
OTcj7NMB+eAJRE1NZMDhDVqHIrytG6P+JrUV86f8hBnp7KGItERphIPzidF0BqnMC9bC3ieFUCbK
|
1576 |
+
F7jJeodWLBoBHmy+E60QrLUk9TiRodZL2vG70t5HtfG8gfZZa88ZU+mNFctKy6lvROUbQc/hhqfK
|
1577 |
+
0GqfvEyNBjNaooXlkDWgYlwWTvDjovoDGrQscbNYLN57C9saD+veIR8GdwYDsMnvmfzAuU8Lhij+
|
1578 |
+
0rnq49qlw0dpEuDb8PYZi+17cNcC1u2HGCgsBCRMd+RIihrGO5rUD8r6ddIBQFqNeb+Lz0vPqhbB
|
1579 |
+
leStTIo+F5HUsWLlguWABKQDfo2/2n+iD5dPDNMN+9fR5XJ+HMh3/1uaD7euBUbl8agW7EekFwID
|
1580 |
+
AQABo4H2MIHzMIGwBgNVHREEgagwgaWBD2luZm9AaXplbnBlLmNvbaSBkTCBjjFHMEUGA1UECgw+
|
1581 |
+
SVpFTlBFIFMuQS4gLSBDSUYgQTAxMzM3MjYwLVJNZXJjLlZpdG9yaWEtR2FzdGVpeiBUMTA1NSBG
|
1582 |
+
NjIgUzgxQzBBBgNVBAkMOkF2ZGEgZGVsIE1lZGl0ZXJyYW5lbyBFdG9yYmlkZWEgMTQgLSAwMTAx
|
1583 |
+
MCBWaXRvcmlhLUdhc3RlaXowDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0O
|
1584 |
+
BBYEFB0cZQ6o8iV7tJHP5LGx5r1VdGwFMA0GCSqGSIb3DQEBCwUAA4ICAQB4pgwWSp9MiDrAyw6l
|
1585 |
+
Fn2fuUhfGI8NYjb2zRlrrKvV9pF9rnHzP7MOeIWblaQnIUdCSnxIOvVFfLMMjlF4rJUT3sb9fbga
|
1586 |
+
kEyrkgPH7UIBzg/YsfqikuFgba56awmqxinuaElnMIAkejEWOVt+8Rwu3WwJrfIxwYJOubv5vr8q
|
1587 |
+
hT/AQKM6WfxZSzwoJNu0FXWuDYi6LnPAvViH5ULy617uHjAimcs30cQhbIHsvm0m5hzkQiCeR7Cs
|
1588 |
+
g1lwLDXWrzY0tM07+DKo7+N4ifuNRSzanLh+QBxh5z6ikixL8s36mLYp//Pye6kfLqCTVyvehQP5
|
1589 |
+
aTfLnnhqBbTFMXiJ7HqnheG5ezzevh55hM6fcA5ZwjUukCox2eRFekGkLhObNA5me0mrZJfQRsN5
|
1590 |
+
nXJQY6aYWwa9SG3YOYNw6DXwBdGqvOPbyALqfP2C2sJbUjWumDqtujWTI6cfSN01RpiyEGjkpTHC
|
1591 |
+
ClguGYEQyVB1/OpaFs4R1+7vUIgtYf8/QnMFlEPVjjxOAToZpR9GTnfQXeWBIiGH/pR9hNiTrdZo
|
1592 |
+
Q0iy2+tzJOeRf1SktoA+naM8THLCV8Sg1Mw4J87VBp6iSNnpn86CcDaTmjvfliHjWbcM2pE38P1Z
|
1593 |
+
WrOZyGlsQyYBNWNgVYkDOnXYukrZVP/u3oDYLdE41V4tC5h9Pmzb/CaIxw==
|
1594 |
+
-----END CERTIFICATE-----
|
1595 |
+
|
1596 |
+
Chambers of Commerce Root - 2008
|
1597 |
+
================================
|
1598 |
+
-----BEGIN CERTIFICATE-----
|
1599 |
+
MIIHTzCCBTegAwIBAgIJAKPaQn6ksa7aMA0GCSqGSIb3DQEBBQUAMIGuMQswCQYDVQQGEwJFVTFD
|
1600 |
+
MEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNv
|
1601 |
+
bS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMu
|
1602 |
+
QS4xKTAnBgNVBAMTIENoYW1iZXJzIG9mIENvbW1lcmNlIFJvb3QgLSAyMDA4MB4XDTA4MDgwMTEy
|
1603 |
+
Mjk1MFoXDTM4MDczMTEyMjk1MFowga4xCzAJBgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNl
|
1604 |
+
ZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNhbWVyZmlybWEuY29tL2FkZHJlc3MpMRIwEAYDVQQF
|
1605 |
+
EwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENhbWVyZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJl
|
1606 |
+
cnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDgwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC
|
1607 |
+
AQCvAMtwNyuAWko6bHiUfaN/Gh/2NdW928sNRHI+JrKQUrpjOyhYb6WzbZSm891kDFX29ufyIiKA
|
1608 |
+
XuFixrYp4YFs8r/lfTJqVKAyGVn+H4vXPWCGhSRv4xGzdz4gljUha7MI2XAuZPeEklPWDrCQiorj
|
1609 |
+
h40G072QDuKZoRuGDtqaCrsLYVAGUvGef3bsyw/QHg3PmTA9HMRFEFis1tPo1+XqxQEHd9ZR5gN/
|
1610 |
+
ikilTWh1uem8nk4ZcfUyS5xtYBkL+8ydddy/Js2Pk3g5eXNeJQ7KXOt3EgfLZEFHcpOrUMPrCXZk
|
1611 |
+
NNI5t3YRCQ12RcSprj1qr7V9ZS+UWBDsXHyvfuK2GNnQm05aSd+pZgvMPMZ4fKecHePOjlO+Bd5g
|
1612 |
+
D2vlGts/4+EhySnB8esHnFIbAURRPHsl18TlUlRdJQfKFiC4reRB7noI/plvg6aRArBsNlVq5331
|
1613 |
+
lubKgdaX8ZSD6e2wsWsSaR6s+12pxZjptFtYer49okQ6Y1nUCyXeG0+95QGezdIp1Z8XGQpvvwyQ
|
1614 |
+
0wlf2eOKNcx5Wk0ZN5K3xMGtr/R5JJqyAQuxr1yW84Ay+1w9mPGgP0revq+ULtlVmhduYJ1jbLhj
|
1615 |
+
ya6BXBg14JC7vjxPNyK5fuvPnnchpj04gftI2jE9K+OJ9dC1vX7gUMQSibMjmhAxhduub+84Mxh2
|
1616 |
+
EQIDAQABo4IBbDCCAWgwEgYDVR0TAQH/BAgwBgEB/wIBDDAdBgNVHQ4EFgQU+SSsD7K1+HnA+mCI
|
1617 |
+
G8TZTQKeFxkwgeMGA1UdIwSB2zCB2IAU+SSsD7K1+HnA+mCIG8TZTQKeFxmhgbSkgbEwga4xCzAJ
|
1618 |
+
BgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNlZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNh
|
1619 |
+
bWVyZmlybWEuY29tL2FkZHJlc3MpMRIwEAYDVQQFEwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENh
|
1620 |
+
bWVyZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDiC
|
1621 |
+
CQCj2kJ+pLGu2jAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUH
|
1622 |
+
AgEWHGh0dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZIhvcNAQEFBQADggIBAJASryI1
|
1623 |
+
wqM58C7e6bXpeHxIvj99RZJe6dqxGfwWPJ+0W2aeaufDuV2I6A+tzyMP3iU6XsxPpcG1Lawk0lgH
|
1624 |
+
3qLPaYRgM+gQDROpI9CF5Y57pp49chNyM/WqfcZjHwj0/gF/JM8rLFQJ3uIrbZLGOU8W6jx+ekbU
|
1625 |
+
RWpGqOt1glanq6B8aBMz9p0w8G8nOSQjKpD9kCk18pPfNKXG9/jvjA9iSnyu0/VU+I22mlaHFoI6
|
1626 |
+
M6taIgj3grrqLuBHmrS1RaMFO9ncLkVAO+rcf+g769HsJtg1pDDFOqxXnrN2pSB7+R5KBWIBpih1
|
1627 |
+
YJeSDW4+TTdDDZIVnBgizVGZoCkaPF+KMjNbMMeJL0eYD6MDxvbxrN8y8NmBGuScvfaAFPDRLLmF
|
1628 |
+
9dijscilIeUcE5fuDr3fKanvNFNb0+RqE4QGtjICxFKuItLcsiFCGtpA8CnJ7AoMXOLQusxI0zcK
|
1629 |
+
zBIKinmwPQN/aUv0NCB9szTqjktk9T79syNnFQ0EuPAtwQlRPLJsFfClI9eDdOTlLsn+mCdCxqvG
|
1630 |
+
nrDQWzilm1DefhiYtUU79nm06PcaewaD+9CL2rvHvRirCG88gGtAPxkZumWK5r7VXNM21+9AUiRg
|
1631 |
+
OGcEMeyP84LG3rlV8zsxkVrctQgVrXYlCg17LofiDKYGvCYQbTed7N14jHyAxfDZd0jQ
|
1632 |
+
-----END CERTIFICATE-----
|
1633 |
+
|
1634 |
+
Global Chambersign Root - 2008
|
1635 |
+
==============================
|
1636 |
+
-----BEGIN CERTIFICATE-----
|
1637 |
+
MIIHSTCCBTGgAwIBAgIJAMnN0+nVfSPOMA0GCSqGSIb3DQEBBQUAMIGsMQswCQYDVQQGEwJFVTFD
|
1638 |
+
MEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNv
|
1639 |
+
bS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMu
|
1640 |
+
QS4xJzAlBgNVBAMTHkdsb2JhbCBDaGFtYmVyc2lnbiBSb290IC0gMjAwODAeFw0wODA4MDExMjMx
|
1641 |
+
NDBaFw0zODA3MzExMjMxNDBaMIGsMQswCQYDVQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUg
|
1642 |
+
Y3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJ
|
1643 |
+
QTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xJzAlBgNVBAMTHkdsb2JhbCBD
|
1644 |
+
aGFtYmVyc2lnbiBSb290IC0gMjAwODCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMDf
|
1645 |
+
VtPkOpt2RbQT2//BthmLN0EYlVJH6xedKYiONWwGMi5HYvNJBL99RDaxccy9Wglz1dmFRP+RVyXf
|
1646 |
+
XjaOcNFccUMd2drvXNL7G706tcuto8xEpw2uIRU/uXpbknXYpBI4iRmKt4DS4jJvVpyR1ogQC7N0
|
1647 |
+
ZJJ0YPP2zxhPYLIj0Mc7zmFLmY/CDNBAspjcDahOo7kKrmCgrUVSY7pmvWjg+b4aqIG7HkF4ddPB
|
1648 |
+
/gBVsIdU6CeQNR1MM62X/JcumIS/LMmjv9GYERTtY/jKmIhYF5ntRQOXfjyGHoiMvvKRhI9lNNgA
|
1649 |
+
TH23MRdaKXoKGCQwoze1eqkBfSbW+Q6OWfH9GzO1KTsXO0G2Id3UwD2ln58fQ1DJu7xsepeY7s2M
|
1650 |
+
H/ucUa6LcL0nn3HAa6x9kGbo1106DbDVwo3VyJ2dwW3Q0L9R5OP4wzg2rtandeavhENdk5IMagfe
|
1651 |
+
Ox2YItaswTXbo6Al/3K1dh3ebeksZixShNBFks4c5eUzHdwHU1SjqoI7mjcv3N2gZOnm3b2u/GSF
|
1652 |
+
HTynyQbehP9r6GsaPMWis0L7iwk+XwhSx2LE1AVxv8Rk5Pihg+g+EpuoHtQ2TS9x9o0o9oOpE9Jh
|
1653 |
+
wZG7SMA0j0GMS0zbaRL/UJScIINZc+18ofLx/d33SdNDWKBWY8o9PeU1VlnpDsogzCtLkykPAgMB
|
1654 |
+
AAGjggFqMIIBZjASBgNVHRMBAf8ECDAGAQH/AgEMMB0GA1UdDgQWBBS5CcqcHtvTbDprru1U8VuT
|
1655 |
+
BjUuXjCB4QYDVR0jBIHZMIHWgBS5CcqcHtvTbDprru1U8VuTBjUuXqGBsqSBrzCBrDELMAkGA1UE
|
1656 |
+
BhMCRVUxQzBBBgNVBAcTOk1hZHJpZCAoc2VlIGN1cnJlbnQgYWRkcmVzcyBhdCB3d3cuY2FtZXJm
|
1657 |
+
aXJtYS5jb20vYWRkcmVzcykxEjAQBgNVBAUTCUE4Mjc0MzI4NzEbMBkGA1UEChMSQUMgQ2FtZXJm
|
1658 |
+
aXJtYSBTLkEuMScwJQYDVQQDEx5HbG9iYWwgQ2hhbWJlcnNpZ24gUm9vdCAtIDIwMDiCCQDJzdPp
|
1659 |
+
1X0jzjAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUHAgEWHGh0
|
1660 |
+
dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZIhvcNAQEFBQADggIBAICIf3DekijZBZRG
|
1661 |
+
/5BXqfEv3xoNa/p8DhxJJHkn2EaqbylZUohwEurdPfWbU1Rv4WCiqAm57OtZfMY18dwY6fFn5a+6
|
1662 |
+
ReAJ3spED8IXDneRRXozX1+WLGiLwUePmJs9wOzL9dWCkoQ10b42OFZyMVtHLaoXpGNR6woBrX/s
|
1663 |
+
dZ7LoR/xfxKxueRkf2fWIyr0uDldmOghp+G9PUIadJpwr2hsUF1Jz//7Dl3mLEfXgTpZALVza2Mg
|
1664 |
+
9jFFCDkO9HB+QHBaP9BrQql0PSgvAm11cpUJjUhjxsYjV5KTXjXBjfkK9yydYhz2rXzdpjEetrHH
|
1665 |
+
foUm+qRqtdpjMNHvkzeyZi99Bffnt0uYlDXA2TopwZ2yUDMdSqlapskD7+3056huirRXhOukP9Du
|
1666 |
+
qqqHW2Pok+JrqNS4cnhrG+055F3Lm6qH1U9OAP7Zap88MQ8oAgF9mOinsKJknnn4SPIVqczmyETr
|
1667 |
+
P3iZ8ntxPjzxmKfFGBI/5rsoM0LpRQp8bfKGeS/Fghl9CYl8slR2iK7ewfPM4W7bMdaTrpmg7yVq
|
1668 |
+
c5iJWzouE4gev8CSlDQb4ye3ix5vQv/n6TebUB0tovkC7stYWDpxvGjjqsGvHCgfotwjZT+B6q6Z
|
1669 |
+
09gwzxMNTxXJhLynSC34MCN32EZLeW32jO06f2ARePTpm67VVMB0gNELQp/B
|
1670 |
+
-----END CERTIFICATE-----
|
1671 |
+
|
1672 |
+
Go Daddy Root Certificate Authority - G2
|
1673 |
+
========================================
|
1674 |
+
-----BEGIN CERTIFICATE-----
|
1675 |
+
MIIDxTCCAq2gAwIBAgIBADANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMxEDAOBgNVBAgT
|
1676 |
+
B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoTEUdvRGFkZHkuY29tLCBJbmMu
|
1677 |
+
MTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5
|
1678 |
+
MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgYMxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6
|
1679 |
+
b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjExMC8G
|
1680 |
+
A1UEAxMoR28gRGFkZHkgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZI
|
1681 |
+
hvcNAQEBBQADggEPADCCAQoCggEBAL9xYgjx+lk09xvJGKP3gElY6SKDE6bFIEMBO4Tx5oVJnyfq
|
1682 |
+
9oQbTqC023CYxzIBsQU+B07u9PpPL1kwIuerGVZr4oAH/PMWdYA5UXvl+TW2dE6pjYIT5LY/qQOD
|
1683 |
+
+qK+ihVqf94Lw7YZFAXK6sOoBJQ7RnwyDfMAZiLIjWltNowRGLfTshxgtDj6AozO091GB94KPutd
|
1684 |
+
fMh8+7ArU6SSYmlRJQVhGkSBjCypQ5Yj36w6gZoOKcUcqeldHraenjAKOc7xiID7S13MMuyFYkMl
|
1685 |
+
NAJWJwGRtDtwKj9useiciAF9n9T521NtYJ2/LOdYq7hfRvzOxBsDPAnrSTFcaUaz4EcCAwEAAaNC
|
1686 |
+
MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFDqahQcQZyi27/a9
|
1687 |
+
BUFuIMGU2g/eMA0GCSqGSIb3DQEBCwUAA4IBAQCZ21151fmXWWcDYfF+OwYxdS2hII5PZYe096ac
|
1688 |
+
vNjpL9DbWu7PdIxztDhC2gV7+AJ1uP2lsdeu9tfeE8tTEH6KRtGX+rcuKxGrkLAngPnon1rpN5+r
|
1689 |
+
5N9ss4UXnT3ZJE95kTXWXwTrgIOrmgIttRD02JDHBHNA7XIloKmf7J6raBKZV8aPEjoJpL1E/QYV
|
1690 |
+
N8Gb5DKj7Tjo2GTzLH4U/ALqn83/B2gX2yKQOC16jdFU8WnjXzPKej17CuPKf1855eJ1usV2GDPO
|
1691 |
+
LPAvTK33sefOT6jEm0pUBsV/fdUID+Ic/n4XuKxe9tQWskMJDE32p2u0mYRlynqI4uJEvlz36hz1
|
1692 |
+
-----END CERTIFICATE-----
|
1693 |
+
|
1694 |
+
Starfield Root Certificate Authority - G2
|
1695 |
+
=========================================
|
1696 |
+
-----BEGIN CERTIFICATE-----
|
1697 |
+
MIID3TCCAsWgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBjzELMAkGA1UEBhMCVVMxEDAOBgNVBAgT
|
1698 |
+
B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9s
|
1699 |
+
b2dpZXMsIEluYy4xMjAwBgNVBAMTKVN0YXJmaWVsZCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0
|
1700 |
+
eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgY8xCzAJBgNVBAYTAlVTMRAw
|
1701 |
+
DgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQg
|
1702 |
+
VGVjaG5vbG9naWVzLCBJbmMuMTIwMAYDVQQDEylTdGFyZmllbGQgUm9vdCBDZXJ0aWZpY2F0ZSBB
|
1703 |
+
dXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL3twQP89o/8ArFv
|
1704 |
+
W59I2Z154qK3A2FWGMNHttfKPTUuiUP3oWmb3ooa/RMgnLRJdzIpVv257IzdIvpy3Cdhl+72WoTs
|
1705 |
+
bhm5iSzchFvVdPtrX8WJpRBSiUZV9Lh1HOZ/5FSuS/hVclcCGfgXcVnrHigHdMWdSL5stPSksPNk
|
1706 |
+
N3mSwOxGXn/hbVNMYq/NHwtjuzqd+/x5AJhhdM8mgkBj87JyahkNmcrUDnXMN/uLicFZ8WJ/X7Nf
|
1707 |
+
ZTD4p7dNdloedl40wOiWVpmKs/B/pM293DIxfJHP4F8R+GuqSVzRmZTRouNjWwl2tVZi4Ut0HZbU
|
1708 |
+
JtQIBFnQmA4O5t78w+wfkPECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
|
1709 |
+
AQYwHQYDVR0OBBYEFHwMMh+n2TB/xH1oo2Kooc6rB1snMA0GCSqGSIb3DQEBCwUAA4IBAQARWfol
|
1710 |
+
TwNvlJk7mh+ChTnUdgWUXuEok21iXQnCoKjUsHU48TRqneSfioYmUeYs0cYtbpUgSpIB7LiKZ3sx
|
1711 |
+
4mcujJUDJi5DnUox9g61DLu34jd/IroAow57UvtruzvE03lRTs2Q9GcHGcg8RnoNAX3FWOdt5oUw
|
1712 |
+
F5okxBDgBPfg8n/Uqgr/Qh037ZTlZFkSIHc40zI+OIF1lnP6aI+xy84fxez6nH7PfrHxBy22/L/K
|
1713 |
+
pL/QlwVKvOoYKAKQvVR4CSFx09F9HdkWsKlhPdAKACL8x3vLCWRFCztAgfd9fDL1mMpYjn0q7pBZ
|
1714 |
+
c2T5NnReJaH1ZgUufzkVqSr7UIuOhWn0
|
1715 |
+
-----END CERTIFICATE-----
|
1716 |
+
|
1717 |
+
Starfield Services Root Certificate Authority - G2
|
1718 |
+
==================================================
|
1719 |
+
-----BEGIN CERTIFICATE-----
|
1720 |
+
MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMxEDAOBgNVBAgT
|
1721 |
+
B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9s
|
1722 |
+
b2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVsZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRl
|
1723 |
+
IEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNV
|
1724 |
+
BAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxT
|
1725 |
+
dGFyZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2VydmljZXMg
|
1726 |
+
Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
|
1727 |
+
AQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20pOsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2
|
1728 |
+
h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm28xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4Pa
|
1729 |
+
hHQUw2eeBGg6345AWh1KTs9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLP
|
1730 |
+
LJGmpufehRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk6mFB
|
1731 |
+
rMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAwDwYDVR0TAQH/BAUw
|
1732 |
+
AwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+qAdcwKziIorhtSpzyEZGDMA0GCSqG
|
1733 |
+
SIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMIbw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPP
|
1734 |
+
E95Dz+I0swSdHynVv/heyNXBve6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTy
|
1735 |
+
xQGjhdByPq1zqwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkd
|
1736 |
+
iEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn0q23KXB56jza
|
1737 |
+
YyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCNsSi6
|
1738 |
+
-----END CERTIFICATE-----
|
1739 |
+
|
1740 |
+
AffirmTrust Commercial
|
1741 |
+
======================
|
1742 |
+
-----BEGIN CERTIFICATE-----
|
1743 |
+
MIIDTDCCAjSgAwIBAgIId3cGJyapsXwwDQYJKoZIhvcNAQELBQAwRDELMAkGA1UEBhMCVVMxFDAS
|
1744 |
+
BgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBDb21tZXJjaWFsMB4XDTEw
|
1745 |
+
MDEyOTE0MDYwNloXDTMwMTIzMTE0MDYwNlowRDELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmly
|
1746 |
+
bVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBDb21tZXJjaWFsMIIBIjANBgkqhkiG9w0BAQEF
|
1747 |
+
AAOCAQ8AMIIBCgKCAQEA9htPZwcroRX1BiLLHwGy43NFBkRJLLtJJRTWzsO3qyxPxkEylFf6Eqdb
|
1748 |
+
DuKPHx6GGaeqtS25Xw2Kwq+FNXkyLbscYjfysVtKPcrNcV/pQr6U6Mje+SJIZMblq8Yrba0F8PrV
|
1749 |
+
C8+a5fBQpIs7R6UjW3p6+DM/uO+Zl+MgwdYoic+U+7lF7eNAFxHUdPALMeIrJmqbTFeurCA+ukV6
|
1750 |
+
BfO9m2kVrn1OIGPENXY6BwLJN/3HR+7o8XYdcxXyl6S1yHp52UKqK39c/s4mT6NmgTWvRLpUHhww
|
1751 |
+
MmWd5jyTXlBOeuM61G7MGvv50jeuJCqrVwMiKA1JdX+3KNp1v47j3A55MQIDAQABo0IwQDAdBgNV
|
1752 |
+
HQ4EFgQUnZPGU4teyq8/nx4P5ZmVvCT2lI8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
|
1753 |
+
AQYwDQYJKoZIhvcNAQELBQADggEBAFis9AQOzcAN/wr91LoWXym9e2iZWEnStB03TX8nfUYGXUPG
|
1754 |
+
hi4+c7ImfU+TqbbEKpqrIZcUsd6M06uJFdhrJNTxFq7YpFzUf1GO7RgBsZNjvbz4YYCanrHOQnDi
|
1755 |
+
qX0GJX0nof5v7LMeJNrjS1UaADs1tDvZ110w/YETifLCBivtZ8SOyUOyXGsViQK8YvxO8rUzqrJv
|
1756 |
+
0wqiUOP2O+guRMLbZjipM1ZI8W0bM40NjD9gN53Tym1+NH4Nn3J2ixufcv1SNUFFApYvHLKac0kh
|
1757 |
+
sUlHRUe072o0EclNmsxZt9YCnlpOZbWUrhvfKbAW8b8Angc6F2S1BLUjIZkKlTuXfO8=
|
1758 |
+
-----END CERTIFICATE-----
|
1759 |
+
|
1760 |
+
AffirmTrust Networking
|
1761 |
+
======================
|
1762 |
+
-----BEGIN CERTIFICATE-----
|
1763 |
+
MIIDTDCCAjSgAwIBAgIIfE8EORzUmS0wDQYJKoZIhvcNAQEFBQAwRDELMAkGA1UEBhMCVVMxFDAS
|
1764 |
+
BgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBOZXR3b3JraW5nMB4XDTEw
|
1765 |
+
MDEyOTE0MDgyNFoXDTMwMTIzMTE0MDgyNFowRDELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmly
|
1766 |
+
bVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBOZXR3b3JraW5nMIIBIjANBgkqhkiG9w0BAQEF
|
1767 |
+
AAOCAQ8AMIIBCgKCAQEAtITMMxcua5Rsa2FSoOujz3mUTOWUgJnLVWREZY9nZOIG41w3SfYvm4SE
|
1768 |
+
Hi3yYJ0wTsyEheIszx6e/jarM3c1RNg1lho9Nuh6DtjVR6FqaYvZ/Ls6rnla1fTWcbuakCNrmreI
|
1769 |
+
dIcMHl+5ni36q1Mr3Lt2PpNMCAiMHqIjHNRqrSK6mQEubWXLviRmVSRLQESxG9fhwoXA3hA/Pe24
|
1770 |
+
/PHxI1Pcv2WXb9n5QHGNfb2V1M6+oF4nI979ptAmDgAp6zxG8D1gvz9Q0twmQVGeFDdCBKNwV6gb
|
1771 |
+
h+0t+nvujArjqWaJGctB+d1ENmHP4ndGyH329JKBNv3bNPFyfvMMFr20FQIDAQABo0IwQDAdBgNV
|
1772 |
+
HQ4EFgQUBx/S55zawm6iQLSwelAQUHTEyL0wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
|
1773 |
+
AQYwDQYJKoZIhvcNAQEFBQADggEBAIlXshZ6qML91tmbmzTCnLQyFE2npN/svqe++EPbkTfOtDIu
|
1774 |
+
UFUaNU52Q3Eg75N3ThVwLofDwR1t3Mu1J9QsVtFSUzpE0nPIxBsFZVpikpzuQY0x2+c06lkh1QF6
|
1775 |
+
12S4ZDnNye2v7UsDSKegmQGA3GWjNq5lWUhPgkvIZfFXHeVZLgo/bNjR9eUJtGxUAArgFU2HdW23
|
1776 |
+
WJZa3W3SAKD0m0i+wzekujbgfIeFlxoVot4uolu9rxj5kFDNcFn4J2dHy8egBzp90SxdbBk6ZrV9
|
1777 |
+
/ZFvgrG+CJPbFEfxojfHRZ48x3evZKiT3/Zpg4Jg8klCNO1aAFSFHBY2kgxc+qatv9s=
|
1778 |
+
-----END CERTIFICATE-----
|
1779 |
+
|
1780 |
+
AffirmTrust Premium
|
1781 |
+
===================
|
1782 |
+
-----BEGIN CERTIFICATE-----
|
1783 |
+
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
|
1807 |
+
-----END CERTIFICATE-----
|
1808 |
+
|
1809 |
+
AffirmTrust Premium ECC
|
1810 |
+
=======================
|
1811 |
+
-----BEGIN CERTIFICATE-----
|
1812 |
+
MIIB/jCCAYWgAwIBAgIIdJclisc/elQwCgYIKoZIzj0EAwMwRTELMAkGA1UEBhMCVVMxFDASBgNV
|
1813 |
+
BAoMC0FmZmlybVRydXN0MSAwHgYDVQQDDBdBZmZpcm1UcnVzdCBQcmVtaXVtIEVDQzAeFw0xMDAx
|
1814 |
+
MjkxNDIwMjRaFw00MDEyMzExNDIwMjRaMEUxCzAJBgNVBAYTAlVTMRQwEgYDVQQKDAtBZmZpcm1U
|
1815 |
+
cnVzdDEgMB4GA1UEAwwXQWZmaXJtVHJ1c3QgUHJlbWl1bSBFQ0MwdjAQBgcqhkjOPQIBBgUrgQQA
|
1816 |
+
IgNiAAQNMF4bFZ0D0KF5Nbc6PJJ6yhUczWLznCZcBz3lVPqj1swS6vQUX+iOGasvLkjmrBhDeKzQ
|
1817 |
+
N8O9ss0s5kfiGuZjuD0uL3jET9v0D6RoTFVya5UdThhClXjMNzyR4ptlKymjQjBAMB0GA1UdDgQW
|
1818 |
+
BBSaryl6wBE1NSZRMADDav5A1a7WPDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAK
|
1819 |
+
BggqhkjOPQQDAwNnADBkAjAXCfOHiFBar8jAQr9HX/VsaobgxCd05DhT1wV/GzTjxi+zygk8N53X
|
1820 |
+
57hG8f2h4nECMEJZh0PUUd+60wkyWs6Iflc9nF9Ca/UHLbXwgpP5WW+uZPpY5Yse42O+tYHNbwKM
|
1821 |
+
eQ==
|
1822 |
+
-----END CERTIFICATE-----
|
1823 |
+
|
1824 |
+
Certum Trusted Network CA
|
1825 |
+
=========================
|
1826 |
+
-----BEGIN CERTIFICATE-----
|
1827 |
+
MIIDuzCCAqOgAwIBAgIDBETAMA0GCSqGSIb3DQEBBQUAMH4xCzAJBgNVBAYTAlBMMSIwIAYDVQQK
|
1828 |
+
ExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlv
|
1829 |
+
biBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBUcnVzdGVkIE5ldHdvcmsgQ0EwHhcNMDgxMDIy
|
1830 |
+
MTIwNzM3WhcNMjkxMjMxMTIwNzM3WjB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBU
|
1831 |
+
ZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5
|
1832 |
+
MSIwIAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMIIBIjANBgkqhkiG9w0BAQEFAAOC
|
1833 |
+
AQ8AMIIBCgKCAQEA4/t9o3K6wvDJFIf1awFO4W5AB7ptJ11/91sts1rHUV+rpDKmYYe2bg+G0jAC
|
1834 |
+
l/jXaVehGDldamR5xgFZrDwxSjh80gTSSyjoIF87B6LMTXPb865Px1bVWqeWifrzq2jUI4ZZJ88J
|
1835 |
+
J7ysbnKDHDBy3+Ci6dLhdHUZvSqeexVUBBvXQzmtVSjF4hq79MDkrjhJM8x2hZ85RdKknvISjFH4
|
1836 |
+
fOQtf/WsX+sWn7Et0brMkUJ3TCXJkDhv2/DM+44el1k+1WBO5gUo7Ul5E0u6SNsv+XLTOcr+H9g0
|
1837 |
+
cvW0QM8xAcPs3hEtF10fuFDRXhmnad4HMyjKUJX5p1TLVIZQRan5SQIDAQABo0IwQDAPBgNVHRMB
|
1838 |
+
Af8EBTADAQH/MB0GA1UdDgQWBBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNVHQ8BAf8EBAMCAQYw
|
1839 |
+
DQYJKoZIhvcNAQEFBQADggEBAKaorSLOAT2mo/9i0Eidi15ysHhE49wcrwn9I0j6vSrEuVUEtRCj
|
1840 |
+
jSfeC4Jj0O7eDDd5QVsisrCaQVymcODU0HfLI9MA4GxWL+FpDQ3Zqr8hgVDZBqWo/5U30Kr+4rP1
|
1841 |
+
mS1FhIrlQgnXdAIv94nYmem8J9RHjboNRhx3zxSkHLmkMcScKHQDNP8zGSal6Q10tz6XxnboJ5aj
|
1842 |
+
Zt3hrvJBW8qYVoNzcOSGGtIxQbovvi0TWnZvTuhOgQ4/WwMioBK+ZlgRSssDxLQqKi2WF+A5VLxI
|
1843 |
+
03YnnZotBqbJ7DnSq9ufmgsnAjUpsUCV5/nonFWIGUbWtzT1fs45mtk48VH3Tyw=
|
1844 |
+
-----END CERTIFICATE-----
|
1845 |
+
|
1846 |
+
Certinomis - Autorité Racine
|
1847 |
+
============================
|
1848 |
+
-----BEGIN CERTIFICATE-----
|
1849 |
+
MIIFnDCCA4SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJGUjETMBEGA1UEChMK
|
1850 |
+
Q2VydGlub21pczEXMBUGA1UECxMOMDAwMiA0MzM5OTg5MDMxJjAkBgNVBAMMHUNlcnRpbm9taXMg
|
1851 |
+
LSBBdXRvcml0w6kgUmFjaW5lMB4XDTA4MDkxNzA4Mjg1OVoXDTI4MDkxNzA4Mjg1OVowYzELMAkG
|
1852 |
+
A1UEBhMCRlIxEzARBgNVBAoTCkNlcnRpbm9taXMxFzAVBgNVBAsTDjAwMDIgNDMzOTk4OTAzMSYw
|
1853 |
+
JAYDVQQDDB1DZXJ0aW5vbWlzIC0gQXV0b3JpdMOpIFJhY2luZTCCAiIwDQYJKoZIhvcNAQEBBQAD
|
1854 |
+
ggIPADCCAgoCggIBAJ2Fn4bT46/HsmtuM+Cet0I0VZ35gb5j2CN2DpdUzZlMGvE5x4jYF1AMnmHa
|
1855 |
+
wE5V3udauHpOd4cN5bjr+p5eex7Ezyh0x5P1FMYiKAT5kcOrJ3NqDi5N8y4oH3DfVS9O7cdxbwly
|
1856 |
+
Lu3VMpfQ8Vh30WC8Tl7bmoT2R2FFK/ZQpn9qcSdIhDWerP5pqZ56XjUl+rSnSTV3lqc2W+HN3yNw
|
1857 |
+
2F1MpQiD8aYkOBOo7C+ooWfHpi2GR+6K/OybDnT0K0kCe5B1jPyZOQE51kqJ5Z52qz6WKDgmi92N
|
1858 |
+
jMD2AR5vpTESOH2VwnHu7XSu5DaiQ3XV8QCb4uTXzEIDS3h65X27uK4uIJPT5GHfceF2Z5c/tt9q
|
1859 |
+
c1pkIuVC28+BA5PY9OMQ4HL2AHCs8MF6DwV/zzRpRbWT5BnbUhYjBYkOjUjkJW+zeL9i9Qf6lSTC
|
1860 |
+
lrLooyPCXQP8w9PlfMl1I9f09bze5N/NgL+RiH2nE7Q5uiy6vdFrzPOlKO1Enn1So2+WLhl+HPNb
|
1861 |
+
xxaOu2B9d2ZHVIIAEWBsMsGoOBvrbpgT1u449fCfDu/+MYHB0iSVL1N6aaLwD4ZFjliCK0wi1F6g
|
1862 |
+
530mJ0jfJUaNSih8hp75mxpZuWW/Bd22Ql095gBIgl4g9xGC3srYn+Y3RyYe63j3YcNBZFgCQfna
|
1863 |
+
4NH4+ej9Uji29YnfAgMBAAGjWzBZMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0G
|
1864 |
+
A1UdDgQWBBQNjLZh2kS40RR9w759XkjwzspqsDAXBgNVHSAEEDAOMAwGCiqBegFWAgIAAQEwDQYJ
|
1865 |
+
KoZIhvcNAQEFBQADggIBACQ+YAZ+He86PtvqrxyaLAEL9MW12Ukx9F1BjYkMTv9sov3/4gbIOZ/x
|
1866 |
+
WqndIlgVqIrTseYyCYIDbNc/CMf4uboAbbnW/FIyXaR/pDGUu7ZMOH8oMDX/nyNTt7buFHAAQCva
|
1867 |
+
R6s0fl6nVjBhK4tDrP22iCj1a7Y+YEq6QpA0Z43q619FVDsXrIvkxmUP7tCMXWY5zjKn2BCXwH40
|
1868 |
+
nJ+U8/aGH88bc62UeYdocMMzpXDn2NU4lG9jeeu/Cg4I58UvD0KgKxRA/yHgBcUn4YQRE7rWhh1B
|
1869 |
+
CxMjidPJC+iKunqjo3M3NYB9Ergzd0A4wPpeMNLytqOx1qKVl4GbUu1pTP+A5FPbVFsDbVRfsbjv
|
1870 |
+
JL1vnxHDx2TCDyhihWZeGnuyt++uNckZM6i4J9szVb9o4XVIRFb7zdNIu0eJOqxp9YDG5ERQL1TE
|
1871 |
+
qkPFMTFYvZbF6nVsmnWxTfj3l/+WFvKXTej28xH5On2KOG4Ey+HTRRWqpdEdnV1j6CTmNhTih60b
|
1872 |
+
WfVEm/vXd3wfAXBioSAaosUaKPQhA+4u2cGA6rnZgtZbdsLLO7XSAPCjDuGtbkD326C00EauFddE
|
1873 |
+
wk01+dIL8hf2rGbVJLJP0RyZwG71fet0BLj5TXcJ17TPBzAJ8bgAVtkXFhYKK4bfjwEZGuW7gmP/
|
1874 |
+
vgt2Fl43N+bYdJeimUV5
|
1875 |
+
-----END CERTIFICATE-----
|
1876 |
+
|
1877 |
+
TWCA Root Certification Authority
|
1878 |
+
=================================
|
1879 |
+
-----BEGIN CERTIFICATE-----
|
1880 |
+
MIIDezCCAmOgAwIBAgIBATANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQGEwJUVzESMBAGA1UECgwJ
|
1881 |
+
VEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NBIFJvb3QgQ2VydGlmaWNh
|
1882 |
+
dGlvbiBBdXRob3JpdHkwHhcNMDgwODI4MDcyNDMzWhcNMzAxMjMxMTU1OTU5WjBfMQswCQYDVQQG
|
1883 |
+
EwJUVzESMBAGA1UECgwJVEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NB
|
1884 |
+
IFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
|
1885 |
+
AoIBAQCwfnK4pAOU5qfeCTiRShFAh6d8WWQUe7UREN3+v9XAu1bihSX0NXIP+FPQQeFEAcK0HMMx
|
1886 |
+
QhZHhTMidrIKbw/lJVBPhYa+v5guEGcevhEFhgWQxFnQfHgQsIBct+HHK3XLfJ+utdGdIzdjp9xC
|
1887 |
+
oi2SBBtQwXu4PhvJVgSLL1KbralW6cH/ralYhzC2gfeXRfwZVzsrb+RH9JlF/h3x+JejiB03HFyP
|
1888 |
+
4HYlmlD4oFT/RJB2I9IyxsOrBr/8+7/zrX2SYgJbKdM1o5OaQ2RgXbL6Mv87BK9NQGr5x+PvI/1r
|
1889 |
+
y+UPizgN7gr8/g+YnzAx3WxSZfmLgb4i4RxYA7qRG4kHAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIB
|
1890 |
+
BjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqOFsmjd6LWvJPelSDGRjjCDWmujANBgkqhkiG
|
1891 |
+
9w0BAQUFAAOCAQEAPNV3PdrfibqHDAhUaiBQkr6wQT25JmSDCi/oQMCXKCeCMErJk/9q56YAf4lC
|
1892 |
+
mtYR5VPOL8zy2gXE/uJQxDqGfczafhAJO5I1KlOy/usrBdlsXebQ79NqZp4VKIV66IIArB6nCWlW
|
1893 |
+
QtNoURi+VJq/REG6Sb4gumlc7rh3zc5sH62Dlhh9DrUUOYTxKOkto557HnpyWoOzeW/vtPzQCqVY
|
1894 |
+
T0bf+215WfKEIlKuD8z7fDvnaspHYcN6+NOSBB+4IIThNlQWx0DeO4pz3N/GCUzf7Nr/1FNCocny
|
1895 |
+
Yh0igzyXxfkZYiesZSLX0zzG5Y6yU8xJzrww/nsOM5D77dIUkR8Hrw==
|
1896 |
+
-----END CERTIFICATE-----
|
1897 |
+
|
1898 |
+
Security Communication RootCA2
|
1899 |
+
==============================
|
1900 |
+
-----BEGIN CERTIFICATE-----
|
1901 |
+
MIIDdzCCAl+gAwIBAgIBADANBgkqhkiG9w0BAQsFADBdMQswCQYDVQQGEwJKUDElMCMGA1UEChMc
|
1902 |
+
U0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEnMCUGA1UECxMeU2VjdXJpdHkgQ29tbXVuaWNh
|
1903 |
+
dGlvbiBSb290Q0EyMB4XDTA5MDUyOTA1MDAzOVoXDTI5MDUyOTA1MDAzOVowXTELMAkGA1UEBhMC
|
1904 |
+
SlAxJTAjBgNVBAoTHFNFQ09NIFRydXN0IFN5c3RlbXMgQ08uLExURC4xJzAlBgNVBAsTHlNlY3Vy
|
1905 |
+
aXR5IENvbW11bmljYXRpb24gUm9vdENBMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
|
1906 |
+
ANAVOVKxUrO6xVmCxF1SrjpDZYBLx/KWvNs2l9amZIyoXvDjChz335c9S672XewhtUGrzbl+dp++
|
1907 |
+
+T42NKA7wfYxEUV0kz1XgMX5iZnK5atq1LXaQZAQwdbWQonCv/Q4EpVMVAX3NuRFg3sUZdbcDE3R
|
1908 |
+
3n4MqzvEFb46VqZab3ZpUql6ucjrappdUtAtCms1FgkQhNBqyjoGADdH5H5XTz+L62e4iKrFvlNV
|
1909 |
+
spHEfbmwhRkGeC7bYRr6hfVKkaHnFtWOojnflLhwHyg/i/xAXmODPIMqGplrz95Zajv8bxbXH/1K
|
1910 |
+
EOtOghY6rCcMU/Gt1SSwawNQwS08Ft1ENCcadfsCAwEAAaNCMEAwHQYDVR0OBBYEFAqFqXdlBZh8
|
1911 |
+
QIH4D5csOPEK7DzPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEB
|
1912 |
+
CwUAA4IBAQBMOqNErLlFsceTfsgLCkLfZOoc7llsCLqJX2rKSpWeeo8HxdpFcoJxDjrSzG+ntKEj
|
1913 |
+
u/Ykn8sX/oymzsLS28yN/HH8AynBbF0zX2S2ZTuJbxh2ePXcokgfGT+Ok+vx+hfuzU7jBBJV1uXk
|
1914 |
+
3fs+BXziHV7Gp7yXT2g69ekuCkO2r1dcYmh8t/2jioSgrGK+KwmHNPBqAbubKVY8/gA3zyNs8U6q
|
1915 |
+
tnRGEmyR7jTV7JqR50S+kDFy1UkC9gLl9B/rfNmWVan/7Ir5mUf/NVoCqgTLiluHcSmRvaS0eg29
|
1916 |
+
mvVXIwAHIRc/SjnRBUkLp7Y3gaVdjKozXoEofKd9J+sAro03
|
1917 |
+
-----END CERTIFICATE-----
|
1918 |
+
|
1919 |
+
EC-ACC
|
1920 |
+
======
|
1921 |
+
-----BEGIN CERTIFICATE-----
|
1922 |
+
MIIFVjCCBD6gAwIBAgIQ7is969Qh3hSoYqwE893EATANBgkqhkiG9w0BAQUFADCB8zELMAkGA1UE
|
1923 |
+
BhMCRVMxOzA5BgNVBAoTMkFnZW5jaWEgQ2F0YWxhbmEgZGUgQ2VydGlmaWNhY2lvIChOSUYgUS0w
|
1924 |
+
ODAxMTc2LUkpMSgwJgYDVQQLEx9TZXJ2ZWlzIFB1YmxpY3MgZGUgQ2VydGlmaWNhY2lvMTUwMwYD
|
1925 |
+
VQQLEyxWZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5ldC92ZXJhcnJlbCAoYykwMzE1MDMGA1UE
|
1926 |
+
CxMsSmVyYXJxdWlhIEVudGl0YXRzIGRlIENlcnRpZmljYWNpbyBDYXRhbGFuZXMxDzANBgNVBAMT
|
1927 |
+
BkVDLUFDQzAeFw0wMzAxMDcyMzAwMDBaFw0zMTAxMDcyMjU5NTlaMIHzMQswCQYDVQQGEwJFUzE7
|
1928 |
+
MDkGA1UEChMyQWdlbmNpYSBDYXRhbGFuYSBkZSBDZXJ0aWZpY2FjaW8gKE5JRiBRLTA4MDExNzYt
|
1929 |
+
SSkxKDAmBgNVBAsTH1NlcnZlaXMgUHVibGljcyBkZSBDZXJ0aWZpY2FjaW8xNTAzBgNVBAsTLFZl
|
1930 |
+
Z2V1IGh0dHBzOi8vd3d3LmNhdGNlcnQubmV0L3ZlcmFycmVsIChjKTAzMTUwMwYDVQQLEyxKZXJh
|
1931 |
+
cnF1aWEgRW50aXRhdHMgZGUgQ2VydGlmaWNhY2lvIENhdGFsYW5lczEPMA0GA1UEAxMGRUMtQUND
|
1932 |
+
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsyLHT+KXQpWIR4NA9h0X84NzJB5R85iK
|
1933 |
+
w5K4/0CQBXCHYMkAqbWUZRkiFRfCQ2xmRJoNBD45b6VLeqpjt4pEndljkYRm4CgPukLjbo73FCeT
|
1934 |
+
ae6RDqNfDrHrZqJyTxIThmV6PttPB/SnCWDaOkKZx7J/sxaVHMf5NLWUhdWZXqBIoH7nF2W4onW4
|
1935 |
+
HvPlQn2v7fOKSGRdghST2MDk/7NQcvJ29rNdQlB50JQ+awwAvthrDk4q7D7SzIKiGGUzE3eeml0a
|
1936 |
+
E9jD2z3Il3rucO2n5nzbcc8tlGLfbdb1OL4/pYUKGbio2Al1QnDE6u/LDsg0qBIimAy4E5S2S+zw
|
1937 |
+
0JDnJwIDAQABo4HjMIHgMB0GA1UdEQQWMBSBEmVjX2FjY0BjYXRjZXJ0Lm5ldDAPBgNVHRMBAf8E
|
1938 |
+
BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUoMOLRKo3pUW/l4Ba0fF4opvpXY0wfwYD
|
1939 |
+
VR0gBHgwdjB0BgsrBgEEAfV4AQMBCjBlMCwGCCsGAQUFBwIBFiBodHRwczovL3d3dy5jYXRjZXJ0
|
1940 |
+
Lm5ldC92ZXJhcnJlbDA1BggrBgEFBQcCAjApGidWZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5l
|
1941 |
+
dC92ZXJhcnJlbCAwDQYJKoZIhvcNAQEFBQADggEBAKBIW4IB9k1IuDlVNZyAelOZ1Vr/sXE7zDkJ
|
1942 |
+
lF7W2u++AVtd0x7Y/X1PzaBB4DSTv8vihpw3kpBWHNzrKQXlxJ7HNd+KDM3FIUPpqojlNcAZQmNa
|
1943 |
+
Al6kSBg6hW/cnbw/nZzBh7h6YQjpdwt/cKt63dmXLGQehb+8dJahw3oS7AwaboMMPOhyRp/7SNVe
|
1944 |
+
l+axofjk70YllJyJ22k4vuxcDlbHZVHlUIiIv0LVKz3l+bqeLrPK9HOSAgu+TGbrIP65y7WZf+a2
|
1945 |
+
E/rKS03Z7lNGBjvGTq2TWoF+bCpLagVFjPIhpDGQh2xlnJ2lYJU6Un/10asIbvPuW/mIPX64b24D
|
1946 |
+
5EI=
|
1947 |
+
-----END CERTIFICATE-----
|
1948 |
+
|
1949 |
+
Hellenic Academic and Research Institutions RootCA 2011
|
1950 |
+
=======================================================
|
1951 |
+
-----BEGIN CERTIFICATE-----
|
1952 |
+
MIIEMTCCAxmgAwIBAgIBADANBgkqhkiG9w0BAQUFADCBlTELMAkGA1UEBhMCR1IxRDBCBgNVBAoT
|
1953 |
+
O0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ2VydC4gQXV0aG9y
|
1954 |
+
aXR5MUAwPgYDVQQDEzdIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25z
|
1955 |
+
IFJvb3RDQSAyMDExMB4XDTExMTIwNjEzNDk1MloXDTMxMTIwMTEzNDk1MlowgZUxCzAJBgNVBAYT
|
1956 |
+
AkdSMUQwQgYDVQQKEztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25z
|
1957 |
+
IENlcnQuIEF1dGhvcml0eTFAMD4GA1UEAxM3SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNo
|
1958 |
+
IEluc3RpdHV0aW9ucyBSb290Q0EgMjAxMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
|
1959 |
+
AKlTAOMupvaO+mDYLZU++CwqVE7NuYRhlFhPjz2L5EPzdYmNUeTDN9KKiE15HrcS3UN4SoqS5tdI
|
1960 |
+
1Q+kOilENbgH9mgdVc04UfCMJDGFr4PJfel3r+0ae50X+bOdOFAPplp5kYCvN66m0zH7tSYJnTxa
|
1961 |
+
71HFK9+WXesyHgLacEnsbgzImjeN9/E2YEsmLIKe0HjzDQ9jpFEw4fkrJxIH2Oq9GGKYsFk3fb7u
|
1962 |
+
8yBRQlqD75O6aRXxYp2fmTmCobd0LovUxQt7L/DICto9eQqakxylKHJzkUOap9FNhYS5qXSPFEDH
|
1963 |
+
3N6sQWRstBmbAmNtJGSPRLIl6s5ddAxjMlyNh+UCAwEAAaOBiTCBhjAPBgNVHRMBAf8EBTADAQH/
|
1964 |
+
MAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQUppFC/RNhSiOeCKQp5dgTBCPuQSUwRwYDVR0eBEAwPqA8
|
1965 |
+
MAWCAy5ncjAFggMuZXUwBoIELmVkdTAGggQub3JnMAWBAy5ncjAFgQMuZXUwBoEELmVkdTAGgQQu
|
1966 |
+
b3JnMA0GCSqGSIb3DQEBBQUAA4IBAQAf73lB4XtuP7KMhjdCSk4cNx6NZrokgclPEg8hwAOXhiVt
|
1967 |
+
XdMiKahsog2p6z0GW5k6x8zDmjR/qw7IThzh+uTczQ2+vyT+bOdrwg3IBp5OjWEopmr95fZi6hg8
|
1968 |
+
TqBTnbI6nOulnJEWtk2C4AwFSKls9cz4y51JtPACpf1wA+2KIaWuE4ZJwzNzvoc7dIsXRSZMFpGD
|
1969 |
+
/md9zU1jZ/rzAxKWeAaNsWftjj++n08C9bMJL/NMh98qy5V8AcysNnq/onN694/BtZqhFLKPM58N
|
1970 |
+
7yLcZnuEvUUXBj08yrl3NI/K6s8/MT7jiOOASSXIl7WdmplNsDz4SgCbZN2fOUvRJ9e4
|
1971 |
+
-----END CERTIFICATE-----
|
1972 |
+
|
1973 |
+
Actalis Authentication Root CA
|
1974 |
+
==============================
|
1975 |
+
-----BEGIN CERTIFICATE-----
|
1976 |
+
MIIFuzCCA6OgAwIBAgIIVwoRl0LE48wwDQYJKoZIhvcNAQELBQAwazELMAkGA1UEBhMCSVQxDjAM
|
1977 |
+
BgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8wMzM1ODUyMDk2NzEnMCUGA1UE
|
1978 |
+
AwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290IENBMB4XDTExMDkyMjExMjIwMloXDTMwMDky
|
1979 |
+
MjExMjIwMlowazELMAkGA1UEBhMCSVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlz
|
1980 |
+
IFMucC5BLi8wMzM1ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290
|
1981 |
+
IENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAp8bEpSmkLO/lGMWwUKNvUTufClrJ
|
1982 |
+
wkg4CsIcoBh/kbWHuUA/3R1oHwiD1S0eiKD4j1aPbZkCkpAW1V8IbInX4ay8IMKx4INRimlNAJZa
|
1983 |
+
by/ARH6jDuSRzVju3PvHHkVH3Se5CAGfpiEd9UEtL0z9KK3giq0itFZljoZUj5NDKd45RnijMCO6
|
1984 |
+
zfB9E1fAXdKDa0hMxKufgFpbOr3JpyI/gCczWw63igxdBzcIy2zSekciRDXFzMwujt0q7bd9Zg1f
|
1985 |
+
YVEiVRvjRuPjPdA1YprbrxTIW6HMiRvhMCb8oJsfgadHHwTrozmSBp+Z07/T6k9QnBn+locePGX2
|
1986 |
+
oxgkg4YQ51Q+qDp2JE+BIcXjDwL4k5RHILv+1A7TaLndxHqEguNTVHnd25zS8gebLra8Pu2Fbe8l
|
1987 |
+
EfKXGkJh90qX6IuxEAf6ZYGyojnP9zz/GPvG8VqLWeICrHuS0E4UT1lF9gxeKF+w6D9Fz8+vm2/7
|
1988 |
+
hNN3WpVvrJSEnu68wEqPSpP4RCHiMUVhUE4Q2OM1fEwZtN4Fv6MGn8i1zeQf1xcGDXqVdFUNaBr8
|
1989 |
+
EBtiZJ1t4JWgw5QHVw0U5r0F+7if5t+L4sbnfpb2U8WANFAoWPASUHEXMLrmeGO89LKtmyuy/uE5
|
1990 |
+
jF66CyCU3nuDuP/jVo23Eek7jPKxwV2dpAtMK9myGPW1n0sCAwEAAaNjMGEwHQYDVR0OBBYEFFLY
|
1991 |
+
iDrIn3hm7YnzezhwlMkCAjbQMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUUtiIOsifeGbt
|
1992 |
+
ifN7OHCUyQICNtAwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4ICAQALe3KHwGCmSUyI
|
1993 |
+
WOYdiPcUZEim2FgKDk8TNd81HdTtBjHIgT5q1d07GjLukD0R0i70jsNjLiNmsGe+b7bAEzlgqqI0
|
1994 |
+
JZN1Ut6nna0Oh4lScWoWPBkdg/iaKWW+9D+a2fDzWochcYBNy+A4mz+7+uAwTc+G02UQGRjRlwKx
|
1995 |
+
K3JCaKygvU5a2hi/a5iB0P2avl4VSM0RFbnAKVy06Ij3Pjaut2L9HmLecHgQHEhb2rykOLpn7VU+
|
1996 |
+
Xlff1ANATIGk0k9jpwlCCRT8AKnCgHNPLsBA2RF7SOp6AsDT6ygBJlh0wcBzIm2Tlf05fbsq4/aC
|
1997 |
+
4yyXX04fkZT6/iyj2HYauE2yOE+b+h1IYHkm4vP9qdCa6HCPSXrW5b0KDtst842/6+OkfcvHlXHo
|
1998 |
+
2qN8xcL4dJIEG4aspCJTQLas/kx2z/uUMsA1n3Y/buWQbqCmJqK4LL7RK4X9p2jIugErsWx0Hbhz
|
1999 |
+
lefut8cl8ABMALJ+tguLHPPAUJ4lueAI3jZm/zel0btUZCzJJ7VLkn5l/9Mt4blOvH+kQSGQQXem
|
2000 |
+
OR/qnuOf0GZvBeyqdn6/axag67XH/JJULysRJyU3eExRarDzzFhdFPFqSBX/wge2sY0PjlxQRrM9
|
2001 |
+
vwGYT7JZVEc+NHt4bVaTLnPqZih4zR0Uv6CPLy64Lo7yFIrM6bV8+2ydDKXhlg==
|
2002 |
+
-----END CERTIFICATE-----
|
2003 |
+
|
2004 |
+
Trustis FPS Root CA
|
2005 |
+
===================
|
2006 |
+
-----BEGIN CERTIFICATE-----
|
2007 |
+
MIIDZzCCAk+gAwIBAgIQGx+ttiD5JNM2a/fH8YygWTANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQG
|
2008 |
+
EwJHQjEYMBYGA1UEChMPVHJ1c3RpcyBMaW1pdGVkMRwwGgYDVQQLExNUcnVzdGlzIEZQUyBSb290
|
2009 |
+
IENBMB4XDTAzMTIyMzEyMTQwNloXDTI0MDEyMTExMzY1NFowRTELMAkGA1UEBhMCR0IxGDAWBgNV
|
2010 |
+
BAoTD1RydXN0aXMgTGltaXRlZDEcMBoGA1UECxMTVHJ1c3RpcyBGUFMgUm9vdCBDQTCCASIwDQYJ
|
2011 |
+
KoZIhvcNAQEBBQADggEPADCCAQoCggEBAMVQe547NdDfxIzNjpvto8A2mfRC6qc+gIMPpqdZh8mQ
|
2012 |
+
RUN+AOqGeSoDvT03mYlmt+WKVoaTnGhLaASMk5MCPjDSNzoiYYkchU59j9WvezX2fihHiTHcDnlk
|
2013 |
+
H5nSW7r+f2C/revnPDgpai/lkQtV/+xvWNUtyd5MZnGPDNcE2gfmHhjjvSkCqPoc4Vu5g6hBSLwa
|
2014 |
+
cY3nYuUtsuvffM/bq1rKMfFMIvMFE/eC+XN5DL7XSxzA0RU8k0Fk0ea+IxciAIleH2ulrG6nS4zt
|
2015 |
+
o3Lmr2NNL4XSFDWaLk6M6jKYKIahkQlBOrTh4/L68MkKokHdqeMDx4gVOxzUGpTXn2RZEm0CAwEA
|
2016 |
+
AaNTMFEwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBS6+nEleYtXQSUhhgtx67JkDoshZzAd
|
2017 |
+
BgNVHQ4EFgQUuvpxJXmLV0ElIYYLceuyZA6LIWcwDQYJKoZIhvcNAQEFBQADggEBAH5Y//01GX2c
|
2018 |
+
GE+esCu8jowU/yyg2kdbw++BLa8F6nRIW/M+TgfHbcWzk88iNVy2P3UnXwmWzaD+vkAMXBJV+JOC
|
2019 |
+
yinpXj9WV4s4NvdFGkwozZ5BuO1WTISkQMi4sKUraXAEasP41BIy+Q7DsdwyhEQsb8tGD+pmQQ9P
|
2020 |
+
8Vilpg0ND2HepZ5dfWWhPBfnqFVO76DH7cZEf1T1o+CP8HxVIo8ptoGj4W1OLBuAZ+ytIJ8MYmHV
|
2021 |
+
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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
|
2091 |
+
obp573PYtlNXLfbQ4ddI
|
2092 |
+
-----END CERTIFICATE-----
|
2093 |
+
|
2094 |
+
Buypass Class 2 Root CA
|
2095 |
+
=======================
|
2096 |
+
-----BEGIN CERTIFICATE-----
|
2097 |
+
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
|
2121 |
+
rJgWVqA=
|
2122 |
+
-----END CERTIFICATE-----
|
2123 |
+
|
2124 |
+
Buypass Class 3 Root CA
|
2125 |
+
=======================
|
2126 |
+
-----BEGIN CERTIFICATE-----
|
2127 |
+
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
|
2151 |
+
Cp/HuZc=
|
2152 |
+
-----END CERTIFICATE-----
|
2153 |
+
|
2154 |
+
T-TeleSec GlobalRoot Class 3
|
2155 |
+
============================
|
2156 |
+
-----BEGIN CERTIFICATE-----
|
2157 |
+
MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoM
|
2158 |
+
IlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBU
|
2159 |
+
cnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwHhcNMDgx
|
2160 |
+
MDAxMTAyOTU2WhcNMzMxMDAxMjM1OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lz
|
2161 |
+
dGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBD
|
2162 |
+
ZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwggEiMA0GCSqGSIb3
|
2163 |
+
DQEBAQUAA4IBDwAwggEKAoIBAQC9dZPwYiJvJK7genasfb3ZJNW4t/zN8ELg63iIVl6bmlQdTQyK
|
2164 |
+
9tPPcPRStdiTBONGhnFBSivwKixVA9ZIw+A5OO3yXDw/RLyTPWGrTs0NvvAgJ1gORH8EGoel15YU
|
2165 |
+
NpDQSXuhdfsaa3Ox+M6pCSzyU9XDFES4hqX2iys52qMzVNn6chr3IhUciJFrf2blw2qAsCTz34ZF
|
2166 |
+
iP0Zf3WHHx+xGwpzJFu5ZeAsVMhg02YXP+HMVDNzkQI6pn97djmiH5a2OK61yJN0HZ65tOVgnS9W
|
2167 |
+
0eDrXltMEnAMbEQgqxHY9Bn20pxSN+f6tsIxO0rUFJmtxxr1XV/6B7h8DR/Wgx6zAgMBAAGjQjBA
|
2168 |
+
MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS1A/d2O2GCahKqGFPr
|
2169 |
+
AyGUv/7OyjANBgkqhkiG9w0BAQsFAAOCAQEAVj3vlNW92nOyWL6ukK2YJ5f+AbGwUgC4TeQbIXQb
|
2170 |
+
fsDuXmkqJa9c1h3a0nnJ85cp4IaH3gRZD/FZ1GSFS5mvJQQeyUapl96Cshtwn5z2r3Ex3XsFpSzT
|
2171 |
+
ucpH9sry9uetuUg/vBa3wW306gmv7PO15wWeph6KU1HWk4HMdJP2udqmJQV0eVp+QD6CSyYRMG7h
|
2172 |
+
P0HHRwA11fXT91Q+gT3aSWqas+8QPebrb9HIIkfLzM8BMZLZGOMivgkeGj5asuRrDFR6fUNOuIml
|
2173 |
+
e9eiPZaGzPImNC1qkp2aGtAw4l1OBLBfiyB+d8E9lYLRRpo7PHi4b6HQDWSieB4pTpPDpFQUWw==
|
2174 |
+
-----END CERTIFICATE-----
|
2175 |
+
|
2176 |
+
EE Certification Centre Root CA
|
2177 |
+
===============================
|
2178 |
+
-----BEGIN CERTIFICATE-----
|
2179 |
+
MIIEAzCCAuugAwIBAgIQVID5oHPtPwBMyonY43HmSjANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQG
|
2180 |
+
EwJFRTEiMCAGA1UECgwZQVMgU2VydGlmaXRzZWVyaW1pc2tlc2t1czEoMCYGA1UEAwwfRUUgQ2Vy
|
2181 |
+
dGlmaWNhdGlvbiBDZW50cmUgUm9vdCBDQTEYMBYGCSqGSIb3DQEJARYJcGtpQHNrLmVlMCIYDzIw
|
2182 |
+
MTAxMDMwMTAxMDMwWhgPMjAzMDEyMTcyMzU5NTlaMHUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKDBlB
|
2183 |
+
UyBTZXJ0aWZpdHNlZXJpbWlza2Vza3VzMSgwJgYDVQQDDB9FRSBDZXJ0aWZpY2F0aW9uIENlbnRy
|
2184 |
+
ZSBSb290IENBMRgwFgYJKoZIhvcNAQkBFglwa2lAc2suZWUwggEiMA0GCSqGSIb3DQEBAQUAA4IB
|
2185 |
+
DwAwggEKAoIBAQDIIMDs4MVLqwd4lfNE7vsLDP90jmG7sWLqI9iroWUyeuuOF0+W2Ap7kaJjbMeM
|
2186 |
+
TC55v6kF/GlclY1i+blw7cNRfdCT5mzrMEvhvH2/UpvObntl8jixwKIy72KyaOBhU8E2lf/slLo2
|
2187 |
+
rpwcpzIP5Xy0xm90/XsY6KxX7QYgSzIwWFv9zajmofxwvI6Sc9uXp3whrj3B9UiHbCe9nyV0gVWw
|
2188 |
+
93X2PaRka9ZP585ArQ/dMtO8ihJTmMmJ+xAdTX7Nfh9WDSFwhfYggx/2uh8Ej+p3iDXE/+pOoYtN
|
2189 |
+
P2MbRMNE1CV2yreN1x5KZmTNXMWcg+HCCIia7E6j8T4cLNlsHaFLAgMBAAGjgYowgYcwDwYDVR0T
|
2190 |
+
AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBLyWj7qVhy/zQas8fElyalL1BSZ
|
2191 |
+
MEUGA1UdJQQ+MDwGCCsGAQUFBwMCBggrBgEFBQcDAQYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEF
|
2192 |
+
BQcDCAYIKwYBBQUHAwkwDQYJKoZIhvcNAQEFBQADggEBAHv25MANqhlHt01Xo/6tu7Fq1Q+e2+Rj
|
2193 |
+
xY6hUFaTlrg4wCQiZrxTFGGVv9DHKpY5P30osxBAIWrEr7BSdxjhlthWXePdNl4dp1BUoMUq5KqM
|
2194 |
+
lIpPnTX/dqQGE5Gion0ARD9V04I8GtVbvFZMIi5GQ4okQC3zErg7cBqklrkar4dBGmoYDQZPxz5u
|
2195 |
+
uSlNDUmJEYcyW+ZLBMjkXOZ0c5RdFpgTlf7727FE5TpwrDdr5rMzcijJs1eg9gIWiAYLtqZLICjU
|
2196 |
+
3j2LrTcFU3T+bsy8QxdxXvnFzBqpYe73dgzzcvRyrc9yAjYHR8/vGVCJYMzpJJUPwssd8m92kMfM
|
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-----
|
2228 |
+
MIIEMzCCAxugAwIBAgIDCYPzMA0GCSqGSIb3DQEBCwUAME0xCzAJBgNVBAYTAkRFMRUwEwYDVQQK
|
2229 |
+
DAxELVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgMjAwOTAe
|
2230 |
+
Fw0wOTExMDUwODM1NThaFw0yOTExMDUwODM1NThaME0xCzAJBgNVBAYTAkRFMRUwEwYDVQQKDAxE
|
2231 |
+
LVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgMjAwOTCCASIw
|
2232 |
+
DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANOySs96R+91myP6Oi/WUEWJNTrGa9v+2wBoqOAD
|
2233 |
+
ER03UAifTUpolDWzU9GUY6cgVq/eUXjsKj3zSEhQPgrfRlWLJ23DEE0NkVJD2IfgXU42tSHKXzlA
|
2234 |
+
BF9bfsyjxiupQB7ZNoTWSPOSHjRGICTBpFGOShrvUD9pXRl/RcPHAY9RySPocq60vFYJfxLLHLGv
|
2235 |
+
KZAKyVXMD9O0Gu1HNVpK7ZxzBCHQqr0ME7UAyiZsxGsMlFqVlNpQmvH/pStmMaTJOKDfHR+4CS7z
|
2236 |
+
p+hnUquVH+BGPtikw8paxTGA6Eian5Rp/hnd2HN8gcqW3o7tszIFZYQ05ub9VxC1X3a/L7AQDcUC
|
2237 |
+
AwEAAaOCARowggEWMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFP3aFMSfMN4hvR5COfyrYyNJ
|
2238 |
+
4PGEMA4GA1UdDwEB/wQEAwIBBjCB0wYDVR0fBIHLMIHIMIGAoH6gfIZ6bGRhcDovL2RpcmVjdG9y
|
2239 |
+
eS5kLXRydXN0Lm5ldC9DTj1ELVRSVVNUJTIwUm9vdCUyMENsYXNzJTIwMyUyMENBJTIwMiUyMDIw
|
2240 |
+
MDksTz1ELVRydXN0JTIwR21iSCxDPURFP2NlcnRpZmljYXRlcmV2b2NhdGlvbmxpc3QwQ6BBoD+G
|
2241 |
+
PWh0dHA6Ly93d3cuZC10cnVzdC5uZXQvY3JsL2QtdHJ1c3Rfcm9vdF9jbGFzc18zX2NhXzJfMjAw
|
2242 |
+
OS5jcmwwDQYJKoZIhvcNAQELBQADggEBAH+X2zDI36ScfSF6gHDOFBJpiBSVYEQBrLLpME+bUMJm
|
2243 |
+
2H6NMLVwMeniacfzcNsgFYbQDfC+rAF1hM5+n02/t2A7nPPKHeJeaNijnZflQGDSNiH+0LS4F9p0
|
2244 |
+
o3/U37CYAqxva2ssJSRyoWXuJVrl5jLn8t+rSfrzkGkj2wTZ51xY/GXUl77M/C4KzCUqNQT4YJEV
|
2245 |
+
dT1B/yMfGchs64JTBKbkTCJNjYy6zltz7GRUUG3RnFX7acM2w4y8PIWmawomDeCTmGCufsYkl4ph
|
2246 |
+
X5GOZpIJhzbNi5stPvZR1FDUWSi9g/LMKHtThm3YJohw1+qRzT65ysCQblrGXnRl11z+o+I=
|
2247 |
+
-----END CERTIFICATE-----
|
2248 |
+
|
2249 |
+
D-TRUST Root Class 3 CA 2 EV 2009
|
2250 |
+
=================================
|
2251 |
+
-----BEGIN CERTIFICATE-----
|
2252 |
+
MIIEQzCCAyugAwIBAgIDCYP0MA0GCSqGSIb3DQEBCwUAMFAxCzAJBgNVBAYTAkRFMRUwEwYDVQQK
|
2253 |
+
DAxELVRydXN0IEdtYkgxKjAoBgNVBAMMIUQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgRVYgMjAw
|
2254 |
+
OTAeFw0wOTExMDUwODUwNDZaFw0yOTExMDUwODUwNDZaMFAxCzAJBgNVBAYTAkRFMRUwEwYDVQQK
|
2255 |
+
DAxELVRydXN0IEdtYkgxKjAoBgNVBAMMIUQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgRVYgMjAw
|
2256 |
+
OTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJnxhDRwui+3MKCOvXwEz75ivJn9gpfS
|
2257 |
+
egpnljgJ9hBOlSJzmY3aFS3nBfwZcyK3jpgAvDw9rKFs+9Z5JUut8Mxk2og+KbgPCdM03TP1YtHh
|
2258 |
+
zRnp7hhPTFiu4h7WDFsVWtg6uMQYZB7jM7K1iXdODL/ZlGsTl28So/6ZqQTMFexgaDbtCHu39b+T
|
2259 |
+
7WYxg4zGcTSHThfqr4uRjRxWQa4iN1438h3Z0S0NL2lRp75mpoo6Kr3HGrHhFPC+Oh25z1uxav60
|
2260 |
+
sUYgovseO3Dvk5h9jHOW8sXvhXCtKSb8HgQ+HKDYD8tSg2J87otTlZCpV6LqYQXY+U3EJ/pure35
|
2261 |
+
11H3a6UCAwEAAaOCASQwggEgMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNOUikxiEyoZLsyv
|
2262 |
+
cop9NteaHNxnMA4GA1UdDwEB/wQEAwIBBjCB3QYDVR0fBIHVMIHSMIGHoIGEoIGBhn9sZGFwOi8v
|
2263 |
+
ZGlyZWN0b3J5LmQtdHJ1c3QubmV0L0NOPUQtVFJVU1QlMjBSb290JTIwQ2xhc3MlMjAzJTIwQ0El
|
2264 |
+
MjAyJTIwRVYlMjAyMDA5LE89RC1UcnVzdCUyMEdtYkgsQz1ERT9jZXJ0aWZpY2F0ZXJldm9jYXRp
|
2265 |
+
b25saXN0MEagRKBChkBodHRwOi8vd3d3LmQtdHJ1c3QubmV0L2NybC9kLXRydXN0X3Jvb3RfY2xh
|
2266 |
+
c3NfM19jYV8yX2V2XzIwMDkuY3JsMA0GCSqGSIb3DQEBCwUAA4IBAQA07XtaPKSUiO8aEXUHL7P+
|
2267 |
+
PPoeUSbrh/Yp3uDx1MYkCenBz1UbtDDZzhr+BlGmFaQt77JLvyAoJUnRpjZ3NOhk31KxEcdzes05
|
2268 |
+
nsKtjHEh8lprr988TlWvsoRlFIm5d8sqMb7Po23Pb0iUMkZv53GMoKaEGTcH8gNFCSuGdXzfX2lX
|
2269 |
+
ANtu2KZyIktQ1HWYVt+3GP9DQ1CuekR78HlR10M9p9OB0/DJT7naxpeG0ILD5EJt/rDiZE4OJudA
|
2270 |
+
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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
|
2349 |
+
a7+h89n07eLw4+1knj0vllJPgFOL
|
2350 |
+
-----END CERTIFICATE-----
|
2351 |
+
|
2352 |
+
CA Disig Root R2
|
2353 |
+
================
|
2354 |
+
-----BEGIN CERTIFICATE-----
|
2355 |
+
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
|
2379 |
+
7+ZtsH8tZ/3zbBt1RqPlShfppNcL
|
2380 |
+
-----END CERTIFICATE-----
|
2381 |
+
|
2382 |
+
ACCVRAIZ1
|
2383 |
+
=========
|
2384 |
+
-----BEGIN CERTIFICATE-----
|
2385 |
+
MIIH0zCCBbugAwIBAgIIXsO3pkN/pOAwDQYJKoZIhvcNAQEFBQAwQjESMBAGA1UEAwwJQUNDVlJB
|
2386 |
+
SVoxMRAwDgYDVQQLDAdQS0lBQ0NWMQ0wCwYDVQQKDARBQ0NWMQswCQYDVQQGEwJFUzAeFw0xMTA1
|
2387 |
+
MDUwOTM3MzdaFw0zMDEyMzEwOTM3MzdaMEIxEjAQBgNVBAMMCUFDQ1ZSQUlaMTEQMA4GA1UECwwH
|
2388 |
+
UEtJQUNDVjENMAsGA1UECgwEQUNDVjELMAkGA1UEBhMCRVMwggIiMA0GCSqGSIb3DQEBAQUAA4IC
|
2389 |
+
DwAwggIKAoICAQCbqau/YUqXry+XZpp0X9DZlv3P4uRm7x8fRzPCRKPfmt4ftVTdFXxpNRFvu8gM
|
2390 |
+
jmoYHtiP2Ra8EEg2XPBjs5BaXCQ316PWywlxufEBcoSwfdtNgM3802/J+Nq2DoLSRYWoG2ioPej0
|
2391 |
+
RGy9ocLLA76MPhMAhN9KSMDjIgro6TenGEyxCQ0jVn8ETdkXhBilyNpAlHPrzg5XPAOBOp0KoVdD
|
2392 |
+
aaxXbXmQeOW1tDvYvEyNKKGno6e6Ak4l0Squ7a4DIrhrIA8wKFSVf+DuzgpmndFALW4ir50awQUZ
|
2393 |
+
0m/A8p/4e7MCQvtQqR0tkw8jq8bBD5L/0KIV9VMJcRz/RROE5iZe+OCIHAr8Fraocwa48GOEAqDG
|
2394 |
+
WuzndN9wrqODJerWx5eHk6fGioozl2A3ED6XPm4pFdahD9GILBKfb6qkxkLrQaLjlUPTAYVtjrs7
|
2395 |
+
8yM2x/474KElB0iryYl0/wiPgL/AlmXz7uxLaL2diMMxs0Dx6M/2OLuc5NF/1OVYm3z61PMOm3WR
|
2396 |
+
5LpSLhl+0fXNWhn8ugb2+1KoS5kE3fj5tItQo05iifCHJPqDQsGH+tUtKSpacXpkatcnYGMN285J
|
2397 |
+
9Y0fkIkyF/hzQ7jSWpOGYdbhdQrqeWZ2iE9x6wQl1gpaepPluUsXQA+xtrn13k/c4LOsOxFwYIRK
|
2398 |
+
Q26ZIMApcQrAZQIDAQABo4ICyzCCAscwfQYIKwYBBQUHAQEEcTBvMEwGCCsGAQUFBzAChkBodHRw
|
2399 |
+
Oi8vd3d3LmFjY3YuZXMvZmlsZWFkbWluL0FyY2hpdm9zL2NlcnRpZmljYWRvcy9yYWl6YWNjdjEu
|
2400 |
+
Y3J0MB8GCCsGAQUFBzABhhNodHRwOi8vb2NzcC5hY2N2LmVzMB0GA1UdDgQWBBTSh7Tj3zcnk1X2
|
2401 |
+
VuqB5TbMjB4/vTAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFNKHtOPfNyeTVfZW6oHlNsyM
|
2402 |
+
Hj+9MIIBcwYDVR0gBIIBajCCAWYwggFiBgRVHSAAMIIBWDCCASIGCCsGAQUFBwICMIIBFB6CARAA
|
2403 |
+
QQB1AHQAbwByAGkAZABhAGQAIABkAGUAIABDAGUAcgB0AGkAZgBpAGMAYQBjAGkA8wBuACAAUgBh
|
2404 |
+
AO0AegAgAGQAZQAgAGwAYQAgAEEAQwBDAFYAIAAoAEEAZwBlAG4AYwBpAGEAIABkAGUAIABUAGUA
|
2405 |
+
YwBuAG8AbABvAGcA7QBhACAAeQAgAEMAZQByAHQAaQBmAGkAYwBhAGMAaQDzAG4AIABFAGwAZQBj
|
2406 |
+
AHQAcgDzAG4AaQBjAGEALAAgAEMASQBGACAAUQA0ADYAMAAxADEANQA2AEUAKQAuACAAQwBQAFMA
|
2407 |
+
IABlAG4AIABoAHQAdABwADoALwAvAHcAdwB3AC4AYQBjAGMAdgAuAGUAczAwBggrBgEFBQcCARYk
|
2408 |
+
aHR0cDovL3d3dy5hY2N2LmVzL2xlZ2lzbGFjaW9uX2MuaHRtMFUGA1UdHwROMEwwSqBIoEaGRGh0
|
2409 |
+
dHA6Ly93d3cuYWNjdi5lcy9maWxlYWRtaW4vQXJjaGl2b3MvY2VydGlmaWNhZG9zL3JhaXphY2N2
|
2410 |
+
MV9kZXIuY3JsMA4GA1UdDwEB/wQEAwIBBjAXBgNVHREEEDAOgQxhY2N2QGFjY3YuZXMwDQYJKoZI
|
2411 |
+
hvcNAQEFBQADggIBAJcxAp/n/UNnSEQU5CmH7UwoZtCPNdpNYbdKl02125DgBS4OxnnQ8pdpD70E
|
2412 |
+
R9m+27Up2pvZrqmZ1dM8MJP1jaGo/AaNRPTKFpV8M9xii6g3+CfYCS0b78gUJyCpZET/LtZ1qmxN
|
2413 |
+
YEAZSUNUY9rizLpm5U9EelvZaoErQNV/+QEnWCzI7UiRfD+mAM/EKXMRNt6GGT6d7hmKG9Ww7Y49
|
2414 |
+
nCrADdg9ZuM8Db3VlFzi4qc1GwQA9j9ajepDvV+JHanBsMyZ4k0ACtrJJ1vnE5Bc5PUzolVt3OAJ
|
2415 |
+
TS+xJlsndQAJxGJ3KQhfnlmstn6tn1QwIgPBHnFk/vk4CpYY3QIUrCPLBhwepH2NDd4nQeit2hW3
|
2416 |
+
sCPdK6jT2iWH7ehVRE2I9DZ+hJp4rPcOVkkO1jMl1oRQQmwgEh0q1b688nCBpHBgvgW1m54ERL5h
|
2417 |
+
I6zppSSMEYCUWqKiuUnSwdzRp+0xESyeGabu4VXhwOrPDYTkF7eifKXeVSUG7szAh1xA2syVP1Xg
|
2418 |
+
Nce4hL60Xc16gwFy7ofmXx2utYXGJt/mwZrpHgJHnyqobalbz+xFd3+YJ5oyXSrjhO7FmGYvliAd
|
2419 |
+
3djDJ9ew+f7Zfc3Qn48LFFhRny+Lwzgt3uiP1o2HpPVWQxaZLPSkVrQ0uGE3ycJYgBugl6H8WY3p
|
2420 |
+
EfbRD0tVNEYqi4Y7
|
2421 |
+
-----END CERTIFICATE-----
|
2422 |
+
|
2423 |
+
TWCA Global Root CA
|
2424 |
+
===================
|
2425 |
+
-----BEGIN CERTIFICATE-----
|
2426 |
+
MIIFQTCCAymgAwIBAgICDL4wDQYJKoZIhvcNAQELBQAwUTELMAkGA1UEBhMCVFcxEjAQBgNVBAoT
|
2427 |
+
CVRBSVdBTi1DQTEQMA4GA1UECxMHUm9vdCBDQTEcMBoGA1UEAxMTVFdDQSBHbG9iYWwgUm9vdCBD
|
2428 |
+
QTAeFw0xMjA2MjcwNjI4MzNaFw0zMDEyMzExNTU5NTlaMFExCzAJBgNVBAYTAlRXMRIwEAYDVQQK
|
2429 |
+
EwlUQUlXQU4tQ0ExEDAOBgNVBAsTB1Jvb3QgQ0ExHDAaBgNVBAMTE1RXQ0EgR2xvYmFsIFJvb3Qg
|
2430 |
+
Q0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCwBdvI64zEbooh745NnHEKH1Jw7W2C
|
2431 |
+
nJfF10xORUnLQEK1EjRsGcJ0pDFfhQKX7EMzClPSnIyOt7h52yvVavKOZsTuKwEHktSz0ALfUPZV
|
2432 |
+
r2YOy+BHYC8rMjk1Ujoog/h7FsYYuGLWRyWRzvAZEk2tY/XTP3VfKfChMBwqoJimFb3u/Rk28OKR
|
2433 |
+
Q4/6ytYQJ0lM793B8YVwm8rqqFpD/G2Gb3PpN0Wp8DbHzIh1HrtsBv+baz4X7GGqcXzGHaL3SekV
|
2434 |
+
tTzWoWH1EfcFbx39Eb7QMAfCKbAJTibc46KokWofwpFFiFzlmLhxpRUZyXx1EcxwdE8tmx2RRP1W
|
2435 |
+
KKD+u4ZqyPpcC1jcxkt2yKsi2XMPpfRaAok/T54igu6idFMqPVMnaR1sjjIsZAAmY2E2TqNGtz99
|
2436 |
+
sy2sbZCilaLOz9qC5wc0GZbpuCGqKX6mOL6OKUohZnkfs8O1CWfe1tQHRvMq2uYiN2DLgbYPoA/p
|
2437 |
+
yJV/v1WRBXrPPRXAb94JlAGD1zQbzECl8LibZ9WYkTunhHiVJqRaCPgrdLQABDzfuBSO6N+pjWxn
|
2438 |
+
kjMdwLfS7JLIvgm/LCkFbwJrnu+8vyq8W8BQj0FwcYeyTbcEqYSjMq+u7msXi7Kx/mzhkIyIqJdI
|
2439 |
+
zshNy/MGz19qCkKxHh53L46g5pIOBvwFItIm4TFRfTLcDwIDAQABoyMwITAOBgNVHQ8BAf8EBAMC
|
2440 |
+
AQYwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEAXzSBdu+WHdXltdkCY4QWwa6g
|
2441 |
+
cFGn90xHNcgL1yg9iXHZqjNB6hQbbCEAwGxCGX6faVsgQt+i0trEfJdLjbDorMjupWkEmQqSpqsn
|
2442 |
+
LhpNgb+E1HAerUf+/UqdM+DyucRFCCEK2mlpc3INvjT+lIutwx4116KD7+U4x6WFH6vPNOw/KP4M
|
2443 |
+
8VeGTslV9xzU2KV9Bnpv1d8Q34FOIWWxtuEXeZVFBs5fzNxGiWNoRI2T9GRwoD2dKAXDOXC4Ynsg
|
2444 |
+
/eTb6QihuJ49CcdP+yz4k3ZB3lLg4VfSnQO8d57+nile98FRYB/e2guyLXW3Q0iT5/Z5xoRdgFlg
|
2445 |
+
lPx4mI88k1HtQJAH32RjJMtOcQWh15QaiDLxInQirqWm2BJpTGCjAu4r7NRjkgtevi92a6O2JryP
|
2446 |
+
A9gK8kxkRr05YuWW6zRjESjMlfGt7+/cgFhI6Uu46mWs6fyAtbXIRfmswZ/ZuepiiI7E8UuDEq3m
|
2447 |
+
i4TWnsLrgxifarsbJGAzcMzs9zLzXNl5fe+epP7JI8Mk7hWSsT2RTyaGvWZzJBPqpK5jwa19hAM8
|
2448 |
+
EHiGG3njxPPyBJUgriOCxLM6AGK/5jYk4Ve6xx6QddVfP5VhK8E7zeWzaGHQRiapIVJpLesux+t3
|
2449 |
+
zqY6tQMzT3bR51xUAV3LePTJDL/PEo4XLSNolOer/qmyKwbQBM0=
|
2450 |
+
-----END CERTIFICATE-----
|
2451 |
+
|
2452 |
+
TeliaSonera Root CA v1
|
2453 |
+
======================
|
2454 |
+
-----BEGIN CERTIFICATE-----
|
2455 |
+
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
|
2478 |
+
WWFUyBy6ysHK4bkgTI86k4mloMy/0/Z1pHWWbVY=
|
2479 |
+
-----END CERTIFICATE-----
|
2480 |
+
|
2481 |
+
E-Tugra Certification Authority
|
2482 |
+
===============================
|
2483 |
+
-----BEGIN CERTIFICATE-----
|
2484 |
+
MIIGSzCCBDOgAwIBAgIIamg+nFGby1MwDQYJKoZIhvcNAQELBQAwgbIxCzAJBgNVBAYTAlRSMQ8w
|
2485 |
+
DQYDVQQHDAZBbmthcmExQDA+BgNVBAoMN0UtVHXEn3JhIEVCRyBCaWxpxZ9pbSBUZWtub2xvamls
|
2486 |
+
ZXJpIHZlIEhpem1ldGxlcmkgQS7Fni4xJjAkBgNVBAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBN
|
2487 |
+
ZXJrZXppMSgwJgYDVQQDDB9FLVR1Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTEzMDMw
|
2488 |
+
NTEyMDk0OFoXDTIzMDMwMzEyMDk0OFowgbIxCzAJBgNVBAYTAlRSMQ8wDQYDVQQHDAZBbmthcmEx
|
2489 |
+
QDA+BgNVBAoMN0UtVHXEn3JhIEVCRyBCaWxpxZ9pbSBUZWtub2xvamlsZXJpIHZlIEhpem1ldGxl
|
2490 |
+
cmkgQS7Fni4xJjAkBgNVBAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBNZXJrZXppMSgwJgYDVQQD
|
2491 |
+
DB9FLVR1Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0BAQEFAAOCAg8A
|
2492 |
+
MIICCgKCAgEA4vU/kwVRHoViVF56C/UYB4Oufq9899SKa6VjQzm5S/fDxmSJPZQuVIBSOTkHS0vd
|
2493 |
+
hQd2h8y/L5VMzH2nPbxHD5hw+IyFHnSOkm0bQNGZDbt1bsipa5rAhDGvykPL6ys06I+XawGb1Q5K
|
2494 |
+
CKpbknSFQ9OArqGIW66z6l7LFpp3RMih9lRozt6Plyu6W0ACDGQXwLWTzeHxE2bODHnv0ZEoq1+g
|
2495 |
+
ElIwcxmOj+GMB6LDu0rw6h8VqO4lzKRG+Bsi77MOQ7osJLjFLFzUHPhdZL3Dk14opz8n8Y4e0ypQ
|
2496 |
+
BaNV2cvnOVPAmJ6MVGKLJrD3fY185MaeZkJVgkfnsliNZvcHfC425lAcP9tDJMW/hkd5s3kc91r0
|
2497 |
+
E+xs+D/iWR+V7kI+ua2oMoVJl0b+SzGPWsutdEcf6ZG33ygEIqDUD13ieU/qbIWGvaimzuT6w+Gz
|
2498 |
+
rt48Ue7LE3wBf4QOXVGUnhMMti6lTPk5cDZvlsouDERVxcr6XQKj39ZkjFqzAQqptQpHF//vkUAq
|
2499 |
+
jqFGOjGY5RH8zLtJVor8udBhmm9lbObDyz51Sf6Pp+KJxWfXnUYTTjF2OySznhFlhqt/7x3U+Lzn
|
2500 |
+
rFpct1pHXFXOVbQicVtbC/DP3KBhZOqp12gKY6fgDT+gr9Oq0n7vUaDmUStVkhUXU8u3Zg5mTPj5
|
2501 |
+
dUyQ5xJwx0UCAwEAAaNjMGEwHQYDVR0OBBYEFC7j27JJ0JxUeVz6Jyr+zE7S6E5UMA8GA1UdEwEB
|
2502 |
+
/wQFMAMBAf8wHwYDVR0jBBgwFoAULuPbsknQnFR5XPonKv7MTtLoTlQwDgYDVR0PAQH/BAQDAgEG
|
2503 |
+
MA0GCSqGSIb3DQEBCwUAA4ICAQAFNzr0TbdF4kV1JI+2d1LoHNgQk2Xz8lkGpD4eKexd0dCrfOAK
|
2504 |
+
kEh47U6YA5n+KGCRHTAduGN8qOY1tfrTYXbm1gdLymmasoR6d5NFFxWfJNCYExL/u6Au/U5Mh/jO
|
2505 |
+
XKqYGwXgAEZKgoClM4so3O0409/lPun++1ndYYRP0lSWE2ETPo+Aab6TR7U1Q9Jauz1c77NCR807
|
2506 |
+
VRMGsAnb/WP2OogKmW9+4c4bU2pEZiNRCHu8W1Ki/QY3OEBhj0qWuJA3+GbHeJAAFS6LrVE1Uweo
|
2507 |
+
a2iu+U48BybNCAVwzDk/dr2l02cmAYamU9JgO3xDf1WKvJUawSg5TB9D0pH0clmKuVb8P7Sd2nCc
|
2508 |
+
dlqMQ1DujjByTd//SffGqWfZbawCEeI6FiWnWAjLb1NBnEg4R2gz0dfHj9R0IdTDBZB6/86WiLEV
|
2509 |
+
KV0jq9BgoRJP3vQXzTLlyb/IQ639Lo7xr+L0mPoSHyDYwKcMhcWQ9DstliaxLL5Mq+ux0orJ23gT
|
2510 |
+
Dx4JnW2PAJ8C2sH6H3p6CcRK5ogql5+Ji/03X186zjhZhkuvcQu02PJwT58yE+Owp1fl2tpDy4Q0
|
2511 |
+
8ijE6m30Ku/Ba3ba+367hTzSU8JNvnHhRdH9I2cNE3X7z2VnIp2usAnRCf8dNL/+I5c30jn6PQ0G
|
2512 |
+
C7TbO6Orb1wdtn7os4I07QZcJA==
|
2513 |
+
-----END CERTIFICATE-----
|
2514 |
+
|
2515 |
+
T-TeleSec GlobalRoot Class 2
|
2516 |
+
============================
|
2517 |
+
-----BEGIN CERTIFICATE-----
|
2518 |
+
MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoM
|
2519 |
+
IlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBU
|
2520 |
+
cnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDIwHhcNMDgx
|
2521 |
+
MDAxMTA0MDE0WhcNMzMxMDAxMjM1OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lz
|
2522 |
+
dGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBD
|
2523 |
+
ZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDIwggEiMA0GCSqGSIb3
|
2524 |
+
DQEBAQUAA4IBDwAwggEKAoIBAQCqX9obX+hzkeXaXPSi5kfl82hVYAUdAqSzm1nzHoqvNK38DcLZ
|
2525 |
+
SBnuaY/JIPwhqgcZ7bBcrGXHX+0CfHt8LRvWurmAwhiCFoT6ZrAIxlQjgeTNuUk/9k9uN0goOA/F
|
2526 |
+
vudocP05l03Sx5iRUKrERLMjfTlH6VJi1hKTXrcxlkIF+3anHqP1wvzpesVsqXFP6st4vGCvx970
|
2527 |
+
2cu+fjOlbpSD8DT6IavqjnKgP6TeMFvvhk1qlVtDRKgQFRzlAVfFmPHmBiiRqiDFt1MmUUOyCxGV
|
2528 |
+
WOHAD3bZwI18gfNycJ5v/hqO2V81xrJvNHy+SE/iWjnX2J14np+GPgNeGYtEotXHAgMBAAGjQjBA
|
2529 |
+
MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS/WSA2AHmgoCJrjNXy
|
2530 |
+
YdK4LMuCSjANBgkqhkiG9w0BAQsFAAOCAQEAMQOiYQsfdOhyNsZt+U2e+iKo4YFWz827n+qrkRk4
|
2531 |
+
r6p8FU3ztqONpfSO9kSpp+ghla0+AGIWiPACuvxhI+YzmzB6azZie60EI4RYZeLbK4rnJVM3YlNf
|
2532 |
+
vNoBYimipidx5joifsFvHZVwIEoHNN/q/xWA5brXethbdXwFeilHfkCoMRN3zUA7tFFHei4R40cR
|
2533 |
+
3p1m0IvVVGb6g1XqfMIpiRvpb7PO4gWEyS8+eIVibslfwXhjdFjASBgMmTnrpMwatXlajRWc2BQN
|
2534 |
+
9noHV8cigwUtPJslJj0Ys6lDfMjIq2SPDqO/nBudMNva0Bkuqjzx+zOAduTNrRlPBSeOE6Fuwg==
|
2535 |
+
-----END CERTIFICATE-----
|
2536 |
+
|
2537 |
+
Atos TrustedRoot 2011
|
2538 |
+
=====================
|
2539 |
+
-----BEGIN CERTIFICATE-----
|
2540 |
+
MIIDdzCCAl+gAwIBAgIIXDPLYixfszIwDQYJKoZIhvcNAQELBQAwPDEeMBwGA1UEAwwVQXRvcyBU
|
2541 |
+
cnVzdGVkUm9vdCAyMDExMQ0wCwYDVQQKDARBdG9zMQswCQYDVQQGEwJERTAeFw0xMTA3MDcxNDU4
|
2542 |
+
MzBaFw0zMDEyMzEyMzU5NTlaMDwxHjAcBgNVBAMMFUF0b3MgVHJ1c3RlZFJvb3QgMjAxMTENMAsG
|
2543 |
+
A1UECgwEQXRvczELMAkGA1UEBhMCREUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCV
|
2544 |
+
hTuXbyo7LjvPpvMpNb7PGKw+qtn4TaA+Gke5vJrf8v7MPkfoepbCJI419KkM/IL9bcFyYie96mvr
|
2545 |
+
54rMVD6QUM+A1JX76LWC1BTFtqlVJVfbsVD2sGBkWXppzwO3bw2+yj5vdHLqqjAqc2K+SZFhyBH+
|
2546 |
+
DgMq92og3AIVDV4VavzjgsG1xZ1kCWyjWZgHJ8cblithdHFsQ/H3NYkQ4J7sVaE3IqKHBAUsR320
|
2547 |
+
HLliKWYoyrfhk/WklAOZuXCFteZI6o1Q/NnezG8HDt0Lcp2AMBYHlT8oDv3FdU9T1nSatCQujgKR
|
2548 |
+
z3bFmx5VdJx4IbHwLfELn8LVlhgf8FQieowHAgMBAAGjfTB7MB0GA1UdDgQWBBSnpQaxLKYJYO7R
|
2549 |
+
l+lwrrw7GWzbITAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFKelBrEspglg7tGX6XCuvDsZ
|
2550 |
+
bNshMBgGA1UdIAQRMA8wDQYLKwYBBAGwLQMEAQEwDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEB
|
2551 |
+
CwUAA4IBAQAmdzTblEiGKkGdLD4GkGDEjKwLVLgfuXvTBznk+j57sj1O7Z8jvZfza1zv7v1Apt+h
|
2552 |
+
k6EKhqzvINB5Ab149xnYJDE0BAGmuhWawyfc2E8PzBhj/5kPDpFrdRbhIfzYJsdHt6bPWHJxfrrh
|
2553 |
+
TZVHO8mvbaG0weyJ9rQPOLXiZNwlz6bb65pcmaHFCN795trV1lpFDMS3wrUU77QR/w4VtfX128a9
|
2554 |
+
61qn8FYiqTxlVMYVqL2Gns2Dlmh6cYGJ4Qvh6hEbaAjMaZ7snkGeRDImeuKHCnE96+RapNLbxc3G
|
2555 |
+
3mB/ufNPRJLvKrcYPqcZ2Qt9sTdBQrC6YB3y/gkRsPCHe6ed
|
2556 |
+
-----END CERTIFICATE-----
|
2557 |
+
|
2558 |
+
QuoVadis Root CA 1 G3
|
2559 |
+
=====================
|
2560 |
+
-----BEGIN CERTIFICATE-----
|
2561 |
+
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
|
2585 |
+
hMJKzRwuJIczYOXD
|
2586 |
+
-----END CERTIFICATE-----
|
2587 |
+
|
2588 |
+
QuoVadis Root CA 2 G3
|
2589 |
+
=====================
|
2590 |
+
-----BEGIN CERTIFICATE-----
|
2591 |
+
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
|
2615 |
+
O3jtZsSOeWmD3n+M
|
2616 |
+
-----END CERTIFICATE-----
|
2617 |
+
|
2618 |
+
QuoVadis Root CA 3 G3
|
2619 |
+
=====================
|
2620 |
+
-----BEGIN CERTIFICATE-----
|
2621 |
+
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
|
2645 |
+
PpxxVJkES/1Y+Zj0
|
2646 |
+
-----END CERTIFICATE-----
|
2647 |
+
|
2648 |
+
DigiCert Assured ID Root G2
|
2649 |
+
===========================
|
2650 |
+
-----BEGIN CERTIFICATE-----
|
2651 |
+
MIIDljCCAn6gAwIBAgIQC5McOtY5Z+pnI7/Dr5r0SzANBgkqhkiG9w0BAQsFADBlMQswCQYDVQQG
|
2652 |
+
EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQw
|
2653 |
+
IgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzIwHhcNMTMwODAxMTIwMDAwWhcNMzgw
|
2654 |
+
MTE1MTIwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQL
|
2655 |
+
ExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzIw
|
2656 |
+
ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDZ5ygvUj82ckmIkzTz+GoeMVSAn61UQbVH
|
2657 |
+
35ao1K+ALbkKz3X9iaV9JPrjIgwrvJUXCzO/GU1BBpAAvQxNEP4HteccbiJVMWWXvdMX0h5i89vq
|
2658 |
+
bFCMP4QMls+3ywPgym2hFEwbid3tALBSfK+RbLE4E9HpEgjAALAcKxHad3A2m67OeYfcgnDmCXRw
|
2659 |
+
VWmvo2ifv922ebPynXApVfSr/5Vh88lAbx3RvpO704gqu52/clpWcTs/1PPRCv4o76Pu2ZmvA9OP
|
2660 |
+
YLfykqGxvYmJHzDNw6YuYjOuFgJ3RFrngQo8p0Quebg/BLxcoIfhG69Rjs3sLPr4/m3wOnyqi+Rn
|
2661 |
+
lTGNAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBTO
|
2662 |
+
w0q5mVXyuNtgv6l+vVa1lzan1jANBgkqhkiG9w0BAQsFAAOCAQEAyqVVjOPIQW5pJ6d1Ee88hjZv
|
2663 |
+
0p3GeDgdaZaikmkuOGybfQTUiaWxMTeKySHMq2zNixya1r9I0jJmwYrA8y8678Dj1JGG0VDjA9tz
|
2664 |
+
d29KOVPt3ibHtX2vK0LRdWLjSisCx1BL4GnilmwORGYQRI+tBev4eaymG+g3NJ1TyWGqolKvSnAW
|
2665 |
+
hsI6yLETcDbYz+70CjTVW0z9B5yiutkBclzzTcHdDrEcDcRjvq30FPuJ7KJBDkzMyFdA0G4Dqs0M
|
2666 |
+
jomZmWzwPDCvON9vvKO+KSAnq3T/EyJ43pdSVR6DtVQgA+6uwE9W3jfMw3+qBCe703e4YtsXfJwo
|
2667 |
+
IhNzbM8m9Yop5w==
|
2668 |
+
-----END CERTIFICATE-----
|
2669 |
+
|
2670 |
+
DigiCert Assured ID Root G3
|
2671 |
+
===========================
|
2672 |
+
-----BEGIN CERTIFICATE-----
|
2673 |
+
MIICRjCCAc2gAwIBAgIQC6Fa+h3foLVJRK/NJKBs7DAKBggqhkjOPQQDAzBlMQswCQYDVQQGEwJV
|
2674 |
+
UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQwIgYD
|
2675 |
+
VQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzMwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1
|
2676 |
+
MTIwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
|
2677 |
+
d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzMwdjAQ
|
2678 |
+
BgcqhkjOPQIBBgUrgQQAIgNiAAQZ57ysRGXtzbg/WPuNsVepRC0FFfLvC/8QdJ+1YlJfZn4f5dwb
|
2679 |
+
RXkLzMZTCp2NXQLZqVneAlr2lSoOjThKiknGvMYDOAdfVdp+CW7if17QRSAPWXYQ1qAk8C3eNvJs
|
2680 |
+
KTmjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBTL0L2p4ZgF
|
2681 |
+
UaFNN6KDec6NHSrkhDAKBggqhkjOPQQDAwNnADBkAjAlpIFFAmsSS3V0T8gj43DydXLefInwz5Fy
|
2682 |
+
YZ5eEJJZVrmDxxDnOOlYJjZ91eQ0hjkCMHw2U/Aw5WJjOpnitqM7mzT6HtoQknFekROn3aRukswy
|
2683 |
+
1vUhZscv6pZjamVFkpUBtA==
|
2684 |
+
-----END CERTIFICATE-----
|
2685 |
+
|
2686 |
+
DigiCert Global Root G2
|
2687 |
+
=======================
|
2688 |
+
-----BEGIN CERTIFICATE-----
|
2689 |
+
MIIDjjCCAnagAwIBAgIQAzrx5qcRqaC7KGSxHQn65TANBgkqhkiG9w0BAQsFADBhMQswCQYDVQQG
|
2690 |
+
EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAw
|
2691 |
+
HgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBHMjAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUx
|
2692 |
+
MjAwMDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3
|
2693 |
+
dy5kaWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEcyMIIBIjANBgkq
|
2694 |
+
hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuzfNNNx7a8myaJCtSnX/RrohCgiN9RlUyfuI2/Ou8jqJ
|
2695 |
+
kTx65qsGGmvPrC3oXgkkRLpimn7Wo6h+4FR1IAWsULecYxpsMNzaHxmx1x7e/dfgy5SDN67sH0NO
|
2696 |
+
3Xss0r0upS/kqbitOtSZpLYl6ZtrAGCSYP9PIUkY92eQq2EGnI/yuum06ZIya7XzV+hdG82MHauV
|
2697 |
+
BJVJ8zUtluNJbd134/tJS7SsVQepj5WztCO7TG1F8PapspUwtP1MVYwnSlcUfIKdzXOS0xZKBgyM
|
2698 |
+
UNGPHgm+F6HmIcr9g+UQvIOlCsRnKPZzFBQ9RnbDhxSJITRNrw9FDKZJobq7nMWxM4MphQIDAQAB
|
2699 |
+
o0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUTiJUIBiV5uNu
|
2700 |
+
5g/6+rkS7QYXjzkwDQYJKoZIhvcNAQELBQADggEBAGBnKJRvDkhj6zHd6mcY1Yl9PMWLSn/pvtsr
|
2701 |
+
F9+wX3N3KjITOYFnQoQj8kVnNeyIv/iPsGEMNKSuIEyExtv4NeF22d+mQrvHRAiGfzZ0JFrabA0U
|
2702 |
+
WTW98kndth/Jsw1HKj2ZL7tcu7XUIOGZX1NGFdtom/DzMNU+MeKNhJ7jitralj41E6Vf8PlwUHBH
|
2703 |
+
QRFXGU7Aj64GxJUTFy8bJZ918rGOmaFvE7FBcf6IKshPECBV1/MUReXgRPTqh5Uykw7+U0b6LJ3/
|
2704 |
+
iyK5S9kJRaTepLiaWN0bfVKfjllDiIGknibVb63dDcY3fe0Dkhvld1927jyNxF1WW6LZZm6zNTfl
|
2705 |
+
MrY=
|
2706 |
+
-----END CERTIFICATE-----
|
2707 |
+
|
2708 |
+
DigiCert Global Root G3
|
2709 |
+
=======================
|
2710 |
+
-----BEGIN CERTIFICATE-----
|
2711 |
+
MIICPzCCAcWgAwIBAgIQBVVWvPJepDU1w6QP1atFcjAKBggqhkjOPQQDAzBhMQswCQYDVQQGEwJV
|
2712 |
+
UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAwHgYD
|
2713 |
+
VQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBHMzAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAw
|
2714 |
+
MDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5k
|
2715 |
+
aWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEczMHYwEAYHKoZIzj0C
|
2716 |
+
AQYFK4EEACIDYgAE3afZu4q4C/sLfyHS8L6+c/MzXRq8NOrexpu80JX28MzQC7phW1FGfp4tn+6O
|
2717 |
+
YwwX7Adw9c+ELkCDnOg/QW07rdOkFFk2eJ0DQ+4QE2xy3q6Ip6FrtUPOZ9wj/wMco+I+o0IwQDAP
|
2718 |
+
BgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUs9tIpPmhxdiuNkHMEWNp
|
2719 |
+
Yim8S8YwCgYIKoZIzj0EAwMDaAAwZQIxAK288mw/EkrRLTnDCgmXc/SINoyIJ7vmiI1Qhadj+Z4y
|
2720 |
+
3maTD/HMsQmP3Wyr+mt/oAIwOWZbwmSNuJ5Q3KjVSaLtx9zRSX8XAbjIho9OjIgrqJqpisXRAL34
|
2721 |
+
VOKa5Vt8sycX
|
2722 |
+
-----END CERTIFICATE-----
|
2723 |
+
|
2724 |
+
DigiCert Trusted Root G4
|
2725 |
+
========================
|
2726 |
+
-----BEGIN CERTIFICATE-----
|
2727 |
+
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
|
2752 |
+
82Z+
|
2753 |
+
-----END CERTIFICATE-----
|
2754 |
+
|
2755 |
+
WoSign
|
2756 |
+
======
|
2757 |
+
-----BEGIN CERTIFICATE-----
|
2758 |
+
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
|
2783 |
+
-----END CERTIFICATE-----
|
2784 |
+
|
2785 |
+
WoSign China
|
2786 |
+
============
|
2787 |
+
-----BEGIN CERTIFICATE-----
|
2788 |
+
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
|
2812 |
+
kI26oQ==
|
2813 |
+
-----END CERTIFICATE-----
|
2814 |
+
|
2815 |
+
COMODO RSA Certification Authority
|
2816 |
+
==================================
|
2817 |
+
-----BEGIN CERTIFICATE-----
|
2818 |
+
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
|
2844 |
+
LaZRfyHBNVOFBkpdn627G190
|
2845 |
+
-----END CERTIFICATE-----
|
2846 |
+
|
2847 |
+
USERTrust RSA Certification Authority
|
2848 |
+
=====================================
|
2849 |
+
-----BEGIN CERTIFICATE-----
|
2850 |
+
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
|
2876 |
+
Q+6IHdfGjjxDah2nGN59PRbxYvnKkKj9
|
2877 |
+
-----END CERTIFICATE-----
|
2878 |
+
|
2879 |
+
USERTrust ECC Certification Authority
|
2880 |
+
=====================================
|
2881 |
+
-----BEGIN CERTIFICATE-----
|
2882 |
+
MIICjzCCAhWgAwIBAgIQXIuZxVqUxdJxVt7NiYDMJjAKBggqhkjOPQQDAzCBiDELMAkGA1UEBhMC
|
2883 |
+
VVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVU
|
2884 |
+
aGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBFQ0MgQ2VydGlmaWNhdGlv
|
2885 |
+
biBBdXRob3JpdHkwHhcNMTAwMjAxMDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UEBhMC
|
2886 |
+
VVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVU
|
2887 |
+
aGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBFQ0MgQ2VydGlmaWNhdGlv
|
2888 |
+
biBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQarFRaqfloI+d61SRvU8Za2EurxtW2
|
2889 |
+
0eZzca7dnNYMYf3boIkDuAUU7FfO7l0/4iGzzvfUinngo4N+LZfQYcTxmdwlkWOrfzCjtHDix6Ez
|
2890 |
+
nPO/LlxTsV+zfTJ/ijTjeXmjQjBAMB0GA1UdDgQWBBQ64QmG1M8ZwpZ2dEl23OA1xmNjmjAOBgNV
|
2891 |
+
HQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjA2Z6EWCNzklwBB
|
2892 |
+
HU6+4WMBzzuqQhFkoJ2UOQIReVx7Hfpkue4WQrO/isIJxOzksU0CMQDpKmFHjFJKS04YcPbWRNZu
|
2893 |
+
9YO6bVi9JNlWSOrvxKJGgYhqOkbRqZtNyWHa0V1Xahg=
|
2894 |
+
-----END CERTIFICATE-----
|
2895 |
+
|
2896 |
+
GlobalSign ECC Root CA - R4
|
2897 |
+
===========================
|
2898 |
+
-----BEGIN CERTIFICATE-----
|
2899 |
+
MIIB4TCCAYegAwIBAgIRKjikHJYKBN5CsiilC+g0mAIwCgYIKoZIzj0EAwIwUDEkMCIGA1UECxMb
|
2900 |
+
R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI0MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD
|
2901 |
+
EwpHbG9iYWxTaWduMB4XDTEyMTExMzAwMDAwMFoXDTM4MDExOTAzMTQwN1owUDEkMCIGA1UECxMb
|
2902 |
+
R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI0MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD
|
2903 |
+
EwpHbG9iYWxTaWduMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEuMZ5049sJQ6fLjkZHAOkrprl
|
2904 |
+
OQcJFspjsbmG+IpXwVfOQvpzofdlQv8ewQCybnMO/8ch5RikqtlxP6jUuc6MHaNCMEAwDgYDVR0P
|
2905 |
+
AQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFFSwe61FuOJAf/sKbvu+M8k8o4TV
|
2906 |
+
MAoGCCqGSM49BAMCA0gAMEUCIQDckqGgE6bPA7DmxCGXkPoUVy0D7O48027KqGx2vKLeuwIgJ6iF
|
2907 |
+
JzWbVsaj8kfSt24bAgAXqmemFZHe+pTsewv4n4Q=
|
2908 |
+
-----END CERTIFICATE-----
|
2909 |
+
|
2910 |
+
GlobalSign ECC Root CA - R5
|
2911 |
+
===========================
|
2912 |
+
-----BEGIN CERTIFICATE-----
|
2913 |
+
MIICHjCCAaSgAwIBAgIRYFlJ4CYuu1X5CneKcflK2GwwCgYIKoZIzj0EAwMwUDEkMCIGA1UECxMb
|
2914 |
+
R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI1MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD
|
2915 |
+
EwpHbG9iYWxTaWduMB4XDTEyMTExMzAwMDAwMFoXDTM4MDExOTAzMTQwN1owUDEkMCIGA1UECxMb
|
2916 |
+
R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI1MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD
|
2917 |
+
EwpHbG9iYWxTaWduMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAER0UOlvt9Xb/pOdEh+J8LttV7HpI6
|
2918 |
+
SFkc8GIxLcB6KP4ap1yztsyX50XUWPrRd21DosCHZTQKH3rd6zwzocWdTaRvQZU4f8kehOvRnkmS
|
2919 |
+
h5SHDDqFSmafnVmTTZdhBoZKo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAd
|
2920 |
+
BgNVHQ4EFgQUPeYpSJvqB8ohREom3m7e0oPQn1kwCgYIKoZIzj0EAwMDaAAwZQIxAOVpEslu28Yx
|
2921 |
+
uglB4Zf4+/2a4n0Sye18ZNPLBSWLVtmg515dTguDnFt2KaAJJiFqYgIwcdK1j1zqO+F4CYWodZI7
|
2922 |
+
yFz9SO8NdCKoCOJuxUnOxwy8p2Fp8fc74SrL+SvzZpA3
|
2923 |
+
-----END CERTIFICATE-----
|
2924 |
+
|
2925 |
+
Staat der Nederlanden Root CA - G3
|
2926 |
+
==================================
|
2927 |
+
-----BEGIN CERTIFICATE-----
|
2928 |
+
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
|
2953 |
+
-----END CERTIFICATE-----
|
2954 |
+
|
2955 |
+
Staat der Nederlanden EV Root CA
|
2956 |
+
================================
|
2957 |
+
-----BEGIN CERTIFICATE-----
|
2958 |
+
MIIFcDCCA1igAwIBAgIEAJiWjTANBgkqhkiG9w0BAQsFADBYMQswCQYDVQQGEwJOTDEeMBwGA1UE
|
2959 |
+
CgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSkwJwYDVQQDDCBTdGFhdCBkZXIgTmVkZXJsYW5kZW4g
|
2960 |
+
RVYgUm9vdCBDQTAeFw0xMDEyMDgxMTE5MjlaFw0yMjEyMDgxMTEwMjhaMFgxCzAJBgNVBAYTAk5M
|
2961 |
+
MR4wHAYDVQQKDBVTdGFhdCBkZXIgTmVkZXJsYW5kZW4xKTAnBgNVBAMMIFN0YWF0IGRlciBOZWRl
|
2962 |
+
cmxhbmRlbiBFViBSb290IENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA48d+ifkk
|
2963 |
+
SzrSM4M1LGns3Amk41GoJSt5uAg94JG6hIXGhaTK5skuU6TJJB79VWZxXSzFYGgEt9nCUiY4iKTW
|
2964 |
+
O0Cmws0/zZiTs1QUWJZV1VD+hq2kY39ch/aO5ieSZxeSAgMs3NZmdO3dZ//BYY1jTw+bbRcwJu+r
|
2965 |
+
0h8QoPnFfxZpgQNH7R5ojXKhTbImxrpsX23Wr9GxE46prfNeaXUmGD5BKyF/7otdBwadQ8QpCiv8
|
2966 |
+
Kj6GyzyDOvnJDdrFmeK8eEEzduG/L13lpJhQDBXd4Pqcfzho0LKmeqfRMb1+ilgnQ7O6M5HTp5gV
|
2967 |
+
XJrm0w912fxBmJc+qiXbj5IusHsMX/FjqTf5m3VpTCgmJdrV8hJwRVXj33NeN/UhbJCONVrJ0yPr
|
2968 |
+
08C+eKxCKFhmpUZtcALXEPlLVPxdhkqHz3/KRawRWrUgUY0viEeXOcDPusBCAUCZSCELa6fS/ZbV
|
2969 |
+
0b5GnUngC6agIk440ME8MLxwjyx1zNDFjFE7PZQIZCZhfbnDZY8UnCHQqv0XcgOPvZuM5l5Tnrmd
|
2970 |
+
74K74bzickFbIZTTRTeU0d8JOV3nI6qaHcptqAqGhYqCvkIH1vI4gnPah1vlPNOePqc7nvQDs/nx
|
2971 |
+
fRN0Av+7oeX6AHkcpmZBiFxgV6YuCcS6/ZrPpx9Aw7vMWgpVSzs4dlG4Y4uElBbmVvMCAwEAAaNC
|
2972 |
+
MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFP6rAJCYniT8qcwa
|
2973 |
+
ivsnuL8wbqg7MA0GCSqGSIb3DQEBCwUAA4ICAQDPdyxuVr5Os7aEAJSrR8kN0nbHhp8dB9O2tLsI
|
2974 |
+
eK9p0gtJ3jPFrK3CiAJ9Brc1AsFgyb/E6JTe1NOpEyVa/m6irn0F3H3zbPB+po3u2dfOWBfoqSmu
|
2975 |
+
c0iH55vKbimhZF8ZE/euBhD/UcabTVUlT5OZEAFTdfETzsemQUHSv4ilf0X8rLiltTMMgsT7B/Zq
|
2976 |
+
5SWEXwbKwYY5EdtYzXc7LMJMD16a4/CrPmEbUCTCwPTxGfARKbalGAKb12NMcIxHowNDXLldRqAN
|
2977 |
+
b/9Zjr7dn3LDWyvfjFvO5QxGbJKyCqNMVEIYFRIYvdr8unRu/8G2oGTYqV9Vrp9canaW2HNnh/tN
|
2978 |
+
f1zuacpzEPuKqf2evTY4SUmH9A4U8OmHuD+nT3pajnnUk+S7aFKErGzp85hwVXIy+TSrK0m1zSBi
|
2979 |
+
5Dp6Z2Orltxtrpfs/J92VoguZs9btsmksNcFuuEnL5O7Jiqik7Ab846+HUCjuTaPPoIaGl6I6lD4
|
2980 |
+
WeKDRikL40Rc4ZW2aZCaFG+XroHPaO+Zmr615+F/+PoTRxZMzG0IQOeLeG9QgkRQP2YGiqtDhFZK
|
2981 |
+
DyAthg710tvSeopLzaXoTvFeJiUBWSOgftL2fiFX1ye8FVdMpEbB4IMeDExNH08GGeL5qPQ6gqGy
|
2982 |
+
eUN51q1veieQA6TqJIc/2b3Z6fJfUEkc7uzXLg==
|
2983 |
+
-----END CERTIFICATE-----
|
2984 |
+
|
2985 |
+
IdenTrust Commercial Root CA 1
|
2986 |
+
==============================
|
2987 |
+
-----BEGIN CERTIFICATE-----
|
2988 |
+
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
|
3012 |
+
cGzM7vRX+Bi6hG6H
|
3013 |
+
-----END CERTIFICATE-----
|
3014 |
+
|
3015 |
+
IdenTrust Public Sector Root CA 1
|
3016 |
+
=================================
|
3017 |
+
-----BEGIN CERTIFICATE-----
|
3018 |
+
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
|
3042 |
+
3Wl9af0AVqW3rLatt8o+Ae+c
|
3043 |
+
-----END CERTIFICATE-----
|
3044 |
+
|
3045 |
+
Entrust Root Certification Authority - G2
|
3046 |
+
=========================================
|
3047 |
+
-----BEGIN CERTIFICATE-----
|
3048 |
+
MIIEPjCCAyagAwIBAgIESlOMKDANBgkqhkiG9w0BAQsFADCBvjELMAkGA1UEBhMCVVMxFjAUBgNV
|
3049 |
+
BAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVnYWwtdGVy
|
3050 |
+
bXMxOTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ug
|
3051 |
+
b25seTEyMDAGA1UEAxMpRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzIw
|
3052 |
+
HhcNMDkwNzA3MTcyNTU0WhcNMzAxMjA3MTc1NTU0WjCBvjELMAkGA1UEBhMCVVMxFjAUBgNVBAoT
|
3053 |
+
DUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVnYWwtdGVybXMx
|
3054 |
+
OTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ugb25s
|
3055 |
+
eTEyMDAGA1UEAxMpRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzIwggEi
|
3056 |
+
MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC6hLZy254Ma+KZ6TABp3bqMriVQRrJ2mFOWHLP
|
3057 |
+
/vaCeb9zYQYKpSfYs1/TRU4cctZOMvJyig/3gxnQaoCAAEUesMfnmr8SVycco2gvCoe9amsOXmXz
|
3058 |
+
HHfV1IWNcCG0szLni6LVhjkCsbjSR87kyUnEO6fe+1R9V77w6G7CebI6C1XiUJgWMhNcL3hWwcKU
|
3059 |
+
s/Ja5CeanyTXxuzQmyWC48zCxEXFjJd6BmsqEZ+pCm5IO2/b1BEZQvePB7/1U1+cPvQXLOZprE4y
|
3060 |
+
TGJ36rfo5bs0vBmLrpxR57d+tVOxMyLlbc9wPBr64ptntoP0jaWvYkxN4FisZDQSA/i2jZRjJKRx
|
3061 |
+
AgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqciZ6
|
3062 |
+
0B7vfec7aVHUbI2fkBJmqzANBgkqhkiG9w0BAQsFAAOCAQEAeZ8dlsa2eT8ijYfThwMEYGprmi5Z
|
3063 |
+
iXMRrEPR9RP/jTkrwPK9T3CMqS/qF8QLVJ7UG5aYMzyorWKiAHarWWluBh1+xLlEjZivEtRh2woZ
|
3064 |
+
Rkfz6/djwUAFQKXSt/S1mja/qYh2iARVBCuch38aNzx+LaUa2NSJXsq9rD1s2G2v1fN2D807iDgi
|
3065 |
+
nWyTmsQ9v4IbZT+mD12q/OWyFcq1rca8PdCE6OoGcrBNOTJ4vz4RnAuknZoh8/CbCzB428Hch0P+
|
3066 |
+
vGOaysXCHMnHjf87ElgI5rY97HosTvuDls4MPGmHVHOkc8KT/1EQrBVUAdj8BbGJoX90g5pJ19xO
|
3067 |
+
e4pIb4tF9g==
|
3068 |
+
-----END CERTIFICATE-----
|
3069 |
+
|
3070 |
+
Entrust Root Certification Authority - EC1
|
3071 |
+
==========================================
|
3072 |
+
-----BEGIN CERTIFICATE-----
|
3073 |
+
MIIC+TCCAoCgAwIBAgINAKaLeSkAAAAAUNCR+TAKBggqhkjOPQQDAzCBvzELMAkGA1UEBhMCVVMx
|
3074 |
+
FjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVn
|
3075 |
+
YWwtdGVybXMxOTA3BgNVBAsTMChjKSAyMDEyIEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXpl
|
3076 |
+
ZCB1c2Ugb25seTEzMDEGA1UEAxMqRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5
|
3077 |
+
IC0gRUMxMB4XDTEyMTIxODE1MjUzNloXDTM3MTIxODE1NTUzNlowgb8xCzAJBgNVBAYTAlVTMRYw
|
3078 |
+
FAYDVQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQLEx9TZWUgd3d3LmVudHJ1c3QubmV0L2xlZ2Fs
|
3079 |
+
LXRlcm1zMTkwNwYDVQQLEzAoYykgMjAxMiBFbnRydXN0LCBJbmMuIC0gZm9yIGF1dGhvcml6ZWQg
|
3080 |
+
dXNlIG9ubHkxMzAxBgNVBAMTKkVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAt
|
3081 |
+
IEVDMTB2MBAGByqGSM49AgEGBSuBBAAiA2IABIQTydC6bUF74mzQ61VfZgIaJPRbiWlH47jCffHy
|
3082 |
+
AsWfoPZb1YsGGYZPUxBtByQnoaD41UcZYUx9ypMn6nQM72+WCf5j7HBdNq1nd67JnXxVRDqiY1Ef
|
3083 |
+
9eNi1KlHBz7MIKNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE
|
3084 |
+
FLdj5xrdjekIplWDpOBqUEFlEUJJMAoGCCqGSM49BAMDA2cAMGQCMGF52OVCR98crlOZF7ZvHH3h
|
3085 |
+
vxGU0QOIdeSNiaSKd0bebWHvAvX7td/M/k7//qnmpwIwW5nXhTcGtXsI/esni0qU+eH6p44mCOh8
|
3086 |
+
kmhtc9hvJqwhAriZtyZBWyVgrtBIGu4G
|
3087 |
+
-----END CERTIFICATE-----
|
3088 |
+
|
3089 |
+
CFCA EV ROOT
|
3090 |
+
============
|
3091 |
+
-----BEGIN CERTIFICATE-----
|
3092 |
+
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
|
3117 |
+
-----END CERTIFICATE-----
|
3118 |
+
|
3119 |
+
TÜRKTRUST Elektronik Sertifika Hizmet Sağlayıcısı H5
|
3120 |
+
====================================================
|
3121 |
+
-----BEGIN CERTIFICATE-----
|
3122 |
+
MIIEJzCCAw+gAwIBAgIHAI4X/iQggTANBgkqhkiG9w0BAQsFADCBsTELMAkGA1UEBhMCVFIxDzAN
|
3123 |
+
BgNVBAcMBkFua2FyYTFNMEsGA1UECgxEVMOcUktUUlVTVCBCaWxnaSDEsGxldGnFn2ltIHZlIEJp
|
3124 |
+
bGnFn2ltIEfDvHZlbmxpxJ9pIEhpem1ldGxlcmkgQS7Fni4xQjBABgNVBAMMOVTDnFJLVFJVU1Qg
|
3125 |
+
RWxla3Ryb25payBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsSBINTAeFw0xMzA0MzAw
|
3126 |
+
ODA3MDFaFw0yMzA0MjgwODA3MDFaMIGxMQswCQYDVQQGEwJUUjEPMA0GA1UEBwwGQW5rYXJhMU0w
|
3127 |
+
SwYDVQQKDERUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmlsacWfaW0gR8O8dmVubGnE
|
3128 |
+
n2kgSGl6bWV0bGVyaSBBLsWeLjFCMEAGA1UEAww5VMOcUktUUlVTVCBFbGVrdHJvbmlrIFNlcnRp
|
3129 |
+
ZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxIEg1MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
|
3130 |
+
CgKCAQEApCUZ4WWe60ghUEoI5RHwWrom/4NZzkQqL/7hzmAD/I0Dpe3/a6i6zDQGn1k19uwsu537
|
3131 |
+
jVJp45wnEFPzpALFp/kRGml1bsMdi9GYjZOHp3GXDSHHmflS0yxjXVW86B8BSLlg/kJK9siArs1m
|
3132 |
+
ep5Fimh34khon6La8eHBEJ/rPCmBp+EyCNSgBbGM+42WAA4+Jd9ThiI7/PS98wl+d+yG6w8z5UNP
|
3133 |
+
9FR1bSmZLmZaQ9/LXMrI5Tjxfjs1nQ/0xVqhzPMggCTTV+wVunUlm+hkS7M0hO8EuPbJbKoCPrZV
|
3134 |
+
4jI3X/xml1/N1p7HIL9Nxqw/dV8c7TKcfGkAaZHjIxhT6QIDAQABo0IwQDAdBgNVHQ4EFgQUVpkH
|
3135 |
+
HtOsDGlktAxQR95DLL4gwPswDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZI
|
3136 |
+
hvcNAQELBQADggEBAJ5FdnsXSDLyOIspve6WSk6BGLFRRyDN0GSxDsnZAdkJzsiZ3GglE9Rc8qPo
|
3137 |
+
BP5yCccLqh0lVX6Wmle3usURehnmp349hQ71+S4pL+f5bFgWV1Al9j4uPqrtd3GqqpmWRgqujuwq
|
3138 |
+
URawXs3qZwQcWDD1YIq9pr1N5Za0/EKJAWv2cMhQOQwt1WbZyNKzMrcbGW3LM/nfpeYVhDfwwvJl
|
3139 |
+
lpKQd/Ct9JDpEXjXk4nAPQu6KfTomZ1yju2dL+6SfaHx/126M2CFYv4HAqGEVka+lgqaE9chTLd8
|
3140 |
+
B59OTj+RdPsnnRHM3eaxynFNExc5JsUpISuTKWqW+qtB4Uu2NQvAmxU=
|
3141 |
+
-----END CERTIFICATE-----
|
3142 |
+
|
3143 |
+
Certinomis - Root CA
|
3144 |
+
====================
|
3145 |
+
-----BEGIN CERTIFICATE-----
|
3146 |
+
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
|
3171 |
+
hkIGuUE=
|
3172 |
+
-----END CERTIFICATE-----
|
3173 |
+
|
3174 |
+
OISTE WISeKey Global Root GB CA
|
3175 |
+
===============================
|
3176 |
+
-----BEGIN CERTIFICATE-----
|
3177 |
+
MIIDtTCCAp2gAwIBAgIQdrEgUnTwhYdGs/gjGvbCwDANBgkqhkiG9w0BAQsFADBtMQswCQYDVQQG
|
3178 |
+
EwJDSDEQMA4GA1UEChMHV0lTZUtleTEiMCAGA1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNl
|
3179 |
+
ZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9iYWwgUm9vdCBHQiBDQTAeFw0xNDEyMDExNTAw
|
3180 |
+
MzJaFw0zOTEyMDExNTEwMzFaMG0xCzAJBgNVBAYTAkNIMRAwDgYDVQQKEwdXSVNlS2V5MSIwIAYD
|
3181 |
+
VQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5IEds
|
3182 |
+
b2JhbCBSb290IEdCIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2Be3HEokKtaX
|
3183 |
+
scriHvt9OO+Y9bI5mE4nuBFde9IllIiCFSZqGzG7qFshISvYD06fWvGxWuR51jIjK+FTzJlFXHtP
|
3184 |
+
rby/h0oLS5daqPZI7H17Dc0hBt+eFf1Biki3IPShehtX1F1Q/7pn2COZH8g/497/b1t3sWtuuMlk
|
3185 |
+
9+HKQUYOKXHQuSP8yYFfTvdv37+ErXNku7dCjmn21HYdfp2nuFeKUWdy19SouJVUQHMD9ur06/4o
|
3186 |
+
Qnc/nSMbsrY9gBQHTC5P99UKFg29ZkM3fiNDecNAhvVMKdqOmq0NpQSHiB6F4+lT1ZvIiwNjeOvg
|
3187 |
+
GUpuuy9rM2RYk61pv48b74JIxwIDAQABo1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB
|
3188 |
+
/zAdBgNVHQ4EFgQUNQ/INmNe4qPs+TtmFc5RUuORmj0wEAYJKwYBBAGCNxUBBAMCAQAwDQYJKoZI
|
3189 |
+
hvcNAQELBQADggEBAEBM+4eymYGQfp3FsLAmzYh7KzKNbrghcViXfa43FK8+5/ea4n32cZiZBKpD
|
3190 |
+
dHij40lhPnOMTZTg+XHEthYOU3gf1qKHLwI5gSk8rxWYITD+KJAAjNHhy/peyP34EEY7onhCkRd0
|
3191 |
+
VQreUGdNZtGn//3ZwLWoo4rOZvUPQ82nK1d7Y0Zqqi5S2PTt4W2tKZB4SLrhI6qjiey1q5bAtEui
|
3192 |
+
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-----
|
3235 |
+
MIIDcjCCAlqgAwIBAgIUPopdB+xV0jLVt+O2XwHrLdzk1uQwDQYJKoZIhvcNAQELBQAwUTELMAkG
|
3236 |
+
A1UEBhMCUEwxKDAmBgNVBAoMH0tyYWpvd2EgSXpiYSBSb3psaWN6ZW5pb3dhIFMuQS4xGDAWBgNV
|
3237 |
+
BAMMD1NaQUZJUiBST09UIENBMjAeFw0xNTEwMTkwNzQzMzBaFw0zNTEwMTkwNzQzMzBaMFExCzAJ
|
3238 |
+
BgNVBAYTAlBMMSgwJgYDVQQKDB9LcmFqb3dhIEl6YmEgUm96bGljemVuaW93YSBTLkEuMRgwFgYD
|
3239 |
+
VQQDDA9TWkFGSVIgUk9PVCBDQTIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC3vD5Q
|
3240 |
+
qEvNQLXOYeeWyrSh2gwisPq1e3YAd4wLz32ohswmUeQgPYUM1ljj5/QqGJ3a0a4m7utT3PSQ1hNK
|
3241 |
+
DJA8w/Ta0o4NkjrcsbH/ON7Dui1fgLkCvUqdGw+0w8LBZwPd3BucPbOw3gAeqDRHu5rr/gsUvTaE
|
3242 |
+
2g0gv/pby6kWIK05YO4vdbbnl5z5Pv1+TW9NL++IDWr63fE9biCloBK0TXC5ztdyO4mTp4CEHCdJ
|
3243 |
+
ckm1/zuVnsHMyAHs6A6KCpbns6aH5db5BSsNl0BwPLqsdVqc1U2dAgrSS5tmS0YHF2Wtn2yIANwi
|
3244 |
+
ieDhZNRnvDF5YTy7ykHNXGoAyDw4jlivAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0P
|
3245 |
+
AQH/BAQDAgEGMB0GA1UdDgQWBBQuFqlKGLXLzPVvUPMjX/hd56zwyDANBgkqhkiG9w0BAQsFAAOC
|
3246 |
+
AQEAtXP4A9xZWx126aMqe5Aosk3AM0+qmrHUuOQn/6mWmc5G4G18TKI4pAZw8PRBEew/R40/cof5
|
3247 |
+
O/2kbytTAOD/OblqBw7rHRz2onKQy4I9EYKL0rufKq8h5mOGnXkZ7/e7DDWQw4rtTw/1zBLZpD67
|
3248 |
+
oPwglV9PJi8RI4NOdQcPv5vRtB3pEAT+ymCPoky4rc/hkA/NrgrHXXu3UNLUYfrVFdvXn4dRVOul
|
3249 |
+
4+vJhaAlIDf7js4MNIThPIGyd05DpYhfhmehPea0XGG2Ptv+tyjFogeutcrKjSoS75ftwjCkySp6
|
3250 |
+
+/NNIxuZMzSgLvWpCz/UXeHPhJ/iGcJfitYgHuNztw==
|
3251 |
+
-----END CERTIFICATE-----
|
3252 |
+
|
3253 |
+
Certum Trusted Network CA 2
|
3254 |
+
===========================
|
3255 |
+
-----BEGIN CERTIFICATE-----
|
3256 |
+
MIIF0jCCA7qgAwIBAgIQIdbQSk8lD8kyN/yqXhKN6TANBgkqhkiG9w0BAQ0FADCBgDELMAkGA1UE
|
3257 |
+
BhMCUEwxIjAgBgNVBAoTGVVuaXpldG8gVGVjaG5vbG9naWVzIFMuQS4xJzAlBgNVBAsTHkNlcnR1
|
3258 |
+
bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEkMCIGA1UEAxMbQ2VydHVtIFRydXN0ZWQgTmV0d29y
|
3259 |
+
ayBDQSAyMCIYDzIwMTExMDA2MDgzOTU2WhgPMjA0NjEwMDYwODM5NTZaMIGAMQswCQYDVQQGEwJQ
|
3260 |
+
TDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENl
|
3261 |
+
cnRpZmljYXRpb24gQXV0aG9yaXR5MSQwIgYDVQQDExtDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENB
|
3262 |
+
IDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC9+Xj45tWADGSdhhuWZGc/IjoedQF9
|
3263 |
+
7/tcZ4zJzFxrqZHmuULlIEub2pt7uZld2ZuAS9eEQCsn0+i6MLs+CRqnSZXvK0AkwpfHp+6bJe+o
|
3264 |
+
CgCXhVqqndwpyeI1B+twTUrWwbNWuKFBOJvR+zF/j+Bf4bE/D44WSWDXBo0Y+aomEKsq09DRZ40b
|
3265 |
+
Rr5HMNUuctHFY9rnY3lEfktjJImGLjQ/KUxSiyqnwOKRKIm5wFv5HdnnJ63/mgKXwcZQkpsCLL2p
|
3266 |
+
uTRZCr+ESv/f/rOf69me4Jgj7KZrdxYq28ytOxykh9xGc14ZYmhFV+SQgkK7QtbwYeDBoz1mo130
|
3267 |
+
GO6IyY0XRSmZMnUCMe4pJshrAua1YkV/NxVaI2iJ1D7eTiew8EAMvE0Xy02isx7QBlrd9pPPV3WZ
|
3268 |
+
9fqGGmd4s7+W/jTcvedSVuWz5XV710GRBdxdaeOVDUO5/IOWOZV7bIBaTxNyxtd9KXpEulKkKtVB
|
3269 |
+
Rgkg/iKgtlswjbyJDNXXcPiHUv3a76xRLgezTv7QCdpw75j6VuZt27VXS9zlLCUVyJ4ueE742pye
|
3270 |
+
hizKV/Ma5ciSixqClnrDvFASadgOWkaLOusm+iPJtrCBvkIApPjW/jAux9JG9uWOdf3yzLnQh1vM
|
3271 |
+
BhBgu4M1t15n3kfsmUjxpKEV/q2MYo45VU85FrmxY53/twIDAQABo0IwQDAPBgNVHRMBAf8EBTAD
|
3272 |
+
AQH/MB0GA1UdDgQWBBS2oVQ5AsOgP46KvPrU+Bym0ToO/TAOBgNVHQ8BAf8EBAMCAQYwDQYJKoZI
|
3273 |
+
hvcNAQENBQADggIBAHGlDs7k6b8/ONWJWsQCYftMxRQXLYtPU2sQF/xlhMcQSZDe28cmk4gmb3DW
|
3274 |
+
Al45oPePq5a1pRNcgRRtDoGCERuKTsZPpd1iHkTfCVn0W3cLN+mLIMb4Ck4uWBzrM9DPhmDJ2vuA
|
3275 |
+
L55MYIR4PSFk1vtBHxgP58l1cb29XN40hz5BsA72udY/CROWFC/emh1auVbONTqwX3BNXuMp8SMo
|
3276 |
+
clm2q8KMZiYcdywmdjWLKKdpoPk79SPdhRB0yZADVpHnr7pH1BKXESLjokmUbOe3lEu6LaTaM4tM
|
3277 |
+
pkT/WjzGHWTYtTHkpjx6qFcL2+1hGsvxznN3Y6SHb0xRONbkX8eftoEq5IVIeVheO/jbAoJnwTnb
|
3278 |
+
w3RLPTYe+SmTiGhbqEQZIfCn6IENLOiTNrQ3ssqwGyZ6miUfmpqAnksqP/ujmv5zMnHCnsZy4Ypo
|
3279 |
+
J/HkD7TETKVhk/iXEAcqMCWpuchxuO9ozC1+9eB+D4Kob7a6bINDd82Kkhehnlt4Fj1F4jNy3eFm
|
3280 |
+
ypnTycUm/Q1oBEauttmbjL4ZvrHG8hnjXALKLNhvSgfZyTXaQHXyxKcZb55CEJh15pWLYLztxRLX
|
3281 |
+
is7VmFxWlgPF7ncGNf/P5O4/E2Hu29othfDNrp2yGAlFw5Khchf8R7agCyzxxN5DaAhqXzvwdmP7
|
3282 |
+
zAYspsbiDrW5viSP
|
3283 |
+
-----END CERTIFICATE-----
|
3284 |
+
|
3285 |
+
Hellenic Academic and Research Institutions RootCA 2015
|
3286 |
+
=======================================================
|
3287 |
+
-----BEGIN CERTIFICATE-----
|
3288 |
+
MIIGCzCCA/OgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBpjELMAkGA1UEBhMCR1IxDzANBgNVBAcT
|
3289 |
+
BkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0
|
3290 |
+
aW9ucyBDZXJ0LiBBdXRob3JpdHkxQDA+BgNVBAMTN0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNl
|
3291 |
+
YXJjaCBJbnN0aXR1dGlvbnMgUm9vdENBIDIwMTUwHhcNMTUwNzA3MTAxMTIxWhcNNDAwNjMwMTAx
|
3292 |
+
MTIxWjCBpjELMAkGA1UEBhMCR1IxDzANBgNVBAcTBkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMg
|
3293 |
+
QWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkxQDA+BgNV
|
3294 |
+
BAMTN0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgUm9vdENBIDIw
|
3295 |
+
MTUwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDC+Kk/G4n8PDwEXT2QNrCROnk8Zlrv
|
3296 |
+
bTkBSRq0t89/TSNTt5AA4xMqKKYx8ZEA4yjsriFBzh/a/X0SWwGDD7mwX5nh8hKDgE0GPt+sr+eh
|
3297 |
+
iGsxr/CL0BgzuNtFajT0AoAkKAoCFZVedioNmToUW/bLy1O8E00BiDeUJRtCvCLYjqOWXjrZMts+
|
3298 |
+
6PAQZe104S+nfK8nNLspfZu2zwnI5dMK/IhlZXQK3HMcXM1AsRzUtoSMTFDPaI6oWa7CJ06CojXd
|
3299 |
+
FPQf/7J31Ycvqm59JCfnxssm5uX+Zwdj2EUN3TpZZTlYepKZcj2chF6IIbjV9Cz82XBST3i4vTwr
|
3300 |
+
i5WY9bPRaM8gFH5MXF/ni+X1NYEZN9cRCLdmvtNKzoNXADrDgfgXy5I2XdGj2HUb4Ysn6npIQf1F
|
3301 |
+
GQatJ5lOwXBH3bWfgVMS5bGMSF0xQxfjjMZ6Y5ZLKTBOhE5iGV48zpeQpX8B653g+IuJ3SWYPZK2
|
3302 |
+
fu/Z8VFRfS0myGlZYeCsargqNhEEelC9MoS+L9xy1dcdFkfkR2YgP/SWxa+OAXqlD3pk9Q0Yh9mu
|
3303 |
+
iNX6hME6wGkoLfINaFGq46V3xqSQDqE3izEjR8EJCOtu93ib14L8hCCZSRm2Ekax+0VVFqmjZayc
|
3304 |
+
Bw/qa9wfLgZy7IaIEuQt218FL+TwA9MmM+eAws1CoRc0CwIDAQABo0IwQDAPBgNVHRMBAf8EBTAD
|
3305 |
+
AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUcRVnyMjJvXVdctA4GGqd83EkVAswDQYJKoZI
|
3306 |
+
hvcNAQELBQADggIBAHW7bVRLqhBYRjTyYtcWNl0IXtVsyIe9tC5G8jH4fOpCtZMWVdyhDBKg2mF+
|
3307 |
+
D1hYc2Ryx+hFjtyp8iY/xnmMsVMIM4GwVhO+5lFc2JsKT0ucVlMC6U/2DWDqTUJV6HwbISHTGzrM
|
3308 |
+
d/K4kPFox/la/vot9L/J9UUbzjgQKjeKeaO04wlshYaT/4mWJ3iBj2fjRnRUjtkNaeJK9E10A/+y
|
3309 |
+
d+2VZ5fkscWrv2oj6NSU4kQoYsRL4vDY4ilrGnB+JGGTe08DMiUNRSQrlrRGar9KC/eaj8GsGsVn
|
3310 |
+
82800vpzY4zvFrCopEYq+OsS7HK07/grfoxSwIuEVPkvPuNVqNxmsdnhX9izjFk0WaSrT2y7Hxjb
|
3311 |
+
davYy5LNlDhhDgcGH0tGEPEVvo2FXDtKK4F5D7Rpn0lQl033DlZdwJVqwjbDG2jJ9SrcR5q+ss7F
|
3312 |
+
Jej6A7na+RZukYT1HCjI/CbM1xyQVqdfbzoEvM14iQuODy+jqk+iGxI9FghAD/FGTNeqewjBCvVt
|
3313 |
+
J94Cj8rDtSvK6evIIVM4pcw72Hc3MKJP2W/R8kCtQXoXxdZKNYm3QdV8hn9VTYNKpXMgwDqvkPGa
|
3314 |
+
JI7ZjnHKe7iG2rKPmT4dEw0SEe7Uq/DpFXYC5ODfqiAeW2GFZECpkJcNrVPSWh2HagCXZWK0vm9q
|
3315 |
+
p/UsQu0yrbYhnr68
|
3316 |
+
-----END CERTIFICATE-----
|
3317 |
+
|
3318 |
+
Hellenic Academic and Research Institutions ECC RootCA 2015
|
3319 |
+
===========================================================
|
3320 |
+
-----BEGIN CERTIFICATE-----
|
3321 |
+
MIICwzCCAkqgAwIBAgIBADAKBggqhkjOPQQDAjCBqjELMAkGA1UEBhMCR1IxDzANBgNVBAcTBkF0
|
3322 |
+
aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9u
|
3323 |
+
cyBDZXJ0LiBBdXRob3JpdHkxRDBCBgNVBAMTO0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJj
|
3324 |
+
aCBJbnN0aXR1dGlvbnMgRUNDIFJvb3RDQSAyMDE1MB4XDTE1MDcwNzEwMzcxMloXDTQwMDYzMDEw
|
3325 |
+
MzcxMlowgaoxCzAJBgNVBAYTAkdSMQ8wDQYDVQQHEwZBdGhlbnMxRDBCBgNVBAoTO0hlbGxlbmlj
|
3326 |
+
IEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ2VydC4gQXV0aG9yaXR5MUQwQgYD
|
3327 |
+
VQQDEztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25zIEVDQyBSb290
|
3328 |
+
Q0EgMjAxNTB2MBAGByqGSM49AgEGBSuBBAAiA2IABJKgQehLgoRc4vgxEZmGZE4JJS+dQS8KrjVP
|
3329 |
+
dJWyUWRrjWvmP3CV8AVER6ZyOFB2lQJajq4onvktTpnvLEhvTCUp6NFxW98dwXU3tNf6e3pCnGoK
|
3330 |
+
Vlp8aQuqgAkkbH7BRqNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0O
|
3331 |
+
BBYEFLQiC4KZJAEOnLvkDv2/+5cgk5kqMAoGCCqGSM49BAMCA2cAMGQCMGfOFmI4oqxiRaeplSTA
|
3332 |
+
GiecMjvAwNW6qef4BENThe5SId6d9SWDPp5YSy/XZxMOIQIwBeF1Ad5o7SofTUwJCA3sS61kFyjn
|
3333 |
+
dc5FZXIhF8siQQ6ME5g4mlRtm8rifOoCWCKR
|
3334 |
+
-----END CERTIFICATE-----
|
3335 |
+
|
3336 |
+
Certplus Root CA G1
|
3337 |
+
===================
|
3338 |
+
-----BEGIN CERTIFICATE-----
|
3339 |
+
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
|
3363 |
+
qsOR0C5CB8AMTVPNJLFMWx5R9N/pkvo=
|
3364 |
+
-----END CERTIFICATE-----
|
3365 |
+
|
3366 |
+
Certplus Root CA G2
|
3367 |
+
===================
|
3368 |
+
-----BEGIN CERTIFICATE-----
|
3369 |
+
MIICHDCCAaKgAwIBAgISESDZkc6uo+jF5//pAq/Pc7xVMAoGCCqGSM49BAMDMD4xCzAJBgNVBAYT
|
3370 |
+
AkZSMREwDwYDVQQKDAhDZXJ0cGx1czEcMBoGA1UEAwwTQ2VydHBsdXMgUm9vdCBDQSBHMjAeFw0x
|
3371 |
+
NDA1MjYwMDAwMDBaFw0zODAxMTUwMDAwMDBaMD4xCzAJBgNVBAYTAkZSMREwDwYDVQQKDAhDZXJ0
|
3372 |
+
cGx1czEcMBoGA1UEAwwTQ2VydHBsdXMgUm9vdCBDQSBHMjB2MBAGByqGSM49AgEGBSuBBAAiA2IA
|
3373 |
+
BM0PW1aC3/BFGtat93nwHcmsltaeTpwftEIRyoa/bfuFo8XlGVzX7qY/aWfYeOKmycTbLXku54uN
|
3374 |
+
Am8xIk0G42ByRZ0OQneezs/lf4WbGOT8zC5y0xaTTsqZY1yhBSpsBqNjMGEwDgYDVR0PAQH/BAQD
|
3375 |
+
AgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNqDYwJ5jtpMxjwjFNiPwyCrKGBZMB8GA1Ud
|
3376 |
+
IwQYMBaAFNqDYwJ5jtpMxjwjFNiPwyCrKGBZMAoGCCqGSM49BAMDA2gAMGUCMHD+sAvZ94OX7PNV
|
3377 |
+
HdTcswYO/jOYnYs5kGuUIe22113WTNchp+e/IQ8rzfcq3IUHnQIxAIYUFuXcsGXCwI4Un78kFmjl
|
3378 |
+
vPl5adytRSv3tjFzzAalU5ORGpOucGpnutee5WEaXw==
|
3379 |
+
-----END CERTIFICATE-----
|
3380 |
+
|
3381 |
+
OpenTrust Root CA G1
|
3382 |
+
====================
|
3383 |
+
-----BEGIN CERTIFICATE-----
|
3384 |
+
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
|
3408 |
+
OXXUc0ECd97N4EOH1uS6SsNsEn/+KuYj1oxx
|
3409 |
+
-----END CERTIFICATE-----
|
3410 |
+
|
3411 |
+
OpenTrust Root CA G2
|
3412 |
+
====================
|
3413 |
+
-----BEGIN CERTIFICATE-----
|
3414 |
+
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
|
3438 |
+
u7JwqkwR3v98KzfUetF3NI/n+UL3PIEMS1IK
|
3439 |
+
-----END CERTIFICATE-----
|
3440 |
+
|
3441 |
+
OpenTrust Root CA G3
|
3442 |
+
====================
|
3443 |
+
-----BEGIN CERTIFICATE-----
|
3444 |
+
MIICITCCAaagAwIBAgISESDm+Ez8JLC+BUCs2oMbNGA/MAoGCCqGSM49BAMDMEAxCzAJBgNVBAYT
|
3445 |
+
AkZSMRIwEAYDVQQKDAlPcGVuVHJ1c3QxHTAbBgNVBAMMFE9wZW5UcnVzdCBSb290IENBIEczMB4X
|
3446 |
+
DTE0MDUyNjAwMDAwMFoXDTM4MDExNTAwMDAwMFowQDELMAkGA1UEBhMCRlIxEjAQBgNVBAoMCU9w
|
3447 |
+
ZW5UcnVzdDEdMBsGA1UEAwwUT3BlblRydXN0IFJvb3QgQ0EgRzMwdjAQBgcqhkjOPQIBBgUrgQQA
|
3448 |
+
IgNiAARK7liuTcpm3gY6oxH84Bjwbhy6LTAMidnW7ptzg6kjFYwvWYpa3RTqnVkrQ7cG7DK2uu5B
|
3449 |
+
ta1doYXM6h0UZqNnfkbilPPntlahFVmhTzeXuSIevRHr9LIfXsMUmuXZl5mjYzBhMA4GA1UdDwEB
|
3450 |
+
/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRHd8MUi2I5DMlv4VBN0BBY3JWIbTAf
|
3451 |
+
BgNVHSMEGDAWgBRHd8MUi2I5DMlv4VBN0BBY3JWIbTAKBggqhkjOPQQDAwNpADBmAjEAj6jcnboM
|
3452 |
+
BBf6Fek9LykBl7+BFjNAk2z8+e2AcG+qj9uEwov1NcoG3GRvaBbhj5G5AjEA2Euly8LQCGzpGPta
|
3453 |
+
3U1fJAuwACEl74+nBCZx4nxp5V2a+EEfOzmTk51V6s2N8fvB
|
3454 |
+
-----END CERTIFICATE-----
|
3455 |
+
|
3456 |
+
ISRG Root X1
|
3457 |
+
============
|
3458 |
+
-----BEGIN CERTIFICATE-----
|
3459 |
+
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
|
3483 |
+
m+kXQ99b21/+jh5Xos1AnX5iItreGCc=
|
3484 |
+
-----END CERTIFICATE-----
|
3485 |
+
|
3486 |
+
AC RAIZ FNMT-RCM
|
3487 |
+
================
|
3488 |
+
-----BEGIN CERTIFICATE-----
|
3489 |
+
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
|
3514 |
+
-----END CERTIFICATE-----
|
3515 |
+
|
3516 |
+
Amazon Root CA 1
|
3517 |
+
================
|
3518 |
+
-----BEGIN CERTIFICATE-----
|
3519 |
+
MIIDQTCCAimgAwIBAgITBmyfz5m/jAo54vB4ikPmljZbyjANBgkqhkiG9w0BAQsFADA5MQswCQYD
|
3520 |
+
VQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSAxMB4XDTE1
|
3521 |
+
MDUyNjAwMDAwMFoXDTM4MDExNzAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpv
|
3522 |
+
bjEZMBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
|
3523 |
+
ggEBALJ4gHHKeNXjca9HgFB0fW7Y14h29Jlo91ghYPl0hAEvrAIthtOgQ3pOsqTQNroBvo3bSMgH
|
3524 |
+
FzZM9O6II8c+6zf1tRn4SWiw3te5djgdYZ6k/oI2peVKVuRF4fn9tBb6dNqcmzU5L/qwIFAGbHrQ
|
3525 |
+
gLKm+a/sRxmPUDgH3KKHOVj4utWp+UhnMJbulHheb4mjUcAwhmahRWa6VOujw5H5SNz/0egwLX0t
|
3526 |
+
dHA114gk957EWW67c4cX8jJGKLhD+rcdqsq08p8kDi1L93FcXmn/6pUCyziKrlA4b9v7LWIbxcce
|
3527 |
+
VOF34GfID5yHI9Y/QCB/IIDEgEw+OyQmjgSubJrIqg0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB
|
3528 |
+
/zAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0OBBYEFIQYzIU07LwMlJQuCFmcx7IQTgoIMA0GCSqGSIb3
|
3529 |
+
DQEBCwUAA4IBAQCY8jdaQZChGsV2USggNiMOruYou6r4lK5IpDB/G/wkjUu0yKGX9rbxenDIU5PM
|
3530 |
+
CCjjmCXPI6T53iHTfIUJrU6adTrCC2qJeHZERxhlbI1Bjjt/msv0tadQ1wUsN+gDS63pYaACbvXy
|
3531 |
+
8MWy7Vu33PqUXHeeE6V/Uq2V8viTO96LXFvKWlJbYK8U90vvo/ufQJVtMVT8QtPHRh8jrdkPSHCa
|
3532 |
+
2XV4cdFyQzR1bldZwgJcJmApzyMZFo6IQ6XU5MsI+yMRQ+hDKXJioaldXgjUkK642M4UwtBV8ob2
|
3533 |
+
xJNDd2ZhwLnoQdeXeGADbkpyrqXRfboQnoZsG4q5WTP468SQvvG5
|
3534 |
+
-----END CERTIFICATE-----
|
3535 |
+
|
3536 |
+
Amazon Root CA 2
|
3537 |
+
================
|
3538 |
+
-----BEGIN CERTIFICATE-----
|
3539 |
+
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
|
3563 |
+
-----END CERTIFICATE-----
|
3564 |
+
|
3565 |
+
Amazon Root CA 3
|
3566 |
+
================
|
3567 |
+
-----BEGIN CERTIFICATE-----
|
3568 |
+
MIIBtjCCAVugAwIBAgITBmyf1XSXNmY/Owua2eiedgPySjAKBggqhkjOPQQDAjA5MQswCQYDVQQG
|
3569 |
+
EwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSAzMB4XDTE1MDUy
|
3570 |
+
NjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZ
|
3571 |
+
MBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgMzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABCmXp8ZB
|
3572 |
+
f8ANm+gBG1bG8lKlui2yEujSLtf6ycXYqm0fc4E7O5hrOXwzpcVOho6AF2hiRVd9RFgdszflZwjr
|
3573 |
+
Zt6jQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSrttvXBp43
|
3574 |
+
rDCGB5Fwx5zEGbF4wDAKBggqhkjOPQQDAgNJADBGAiEA4IWSoxe3jfkrBqWTrBqYaGFy+uGh0Psc
|
3575 |
+
eGCmQ5nFuMQCIQCcAu/xlJyzlvnrxir4tiz+OpAUFteMYyRIHN8wfdVoOw==
|
3576 |
+
-----END CERTIFICATE-----
|
3577 |
+
|
3578 |
+
Amazon Root CA 4
|
3579 |
+
================
|
3580 |
+
-----BEGIN CERTIFICATE-----
|
3581 |
+
MIIB8jCCAXigAwIBAgITBmyf18G7EEwpQ+Vxe3ssyBrBDjAKBggqhkjOPQQDAzA5MQswCQYDVQQG
|
3582 |
+
EwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSA0MB4XDTE1MDUy
|
3583 |
+
NjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZ
|
3584 |
+
MBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgNDB2MBAGByqGSM49AgEGBSuBBAAiA2IABNKrijdPo1MN
|
3585 |
+
/sGKe0uoe0ZLY7Bi9i0b2whxIdIA6GO9mif78DluXeo9pcmBqqNbIJhFXRbb/egQbeOc4OO9X4Ri
|
3586 |
+
83BkM6DLJC9wuoihKqB1+IGuYgbEgds5bimwHvouXKNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNV
|
3587 |
+
HQ8BAf8EBAMCAYYwHQYDVR0OBBYEFNPsxzplbszh2naaVvuc84ZtV+WBMAoGCCqGSM49BAMDA2gA
|
3588 |
+
MGUCMDqLIfG9fhGt0O9Yli/W651+kI0rz2ZVwyzjKKlwCkcO8DdZEv8tmZQoTipPNU0zWgIxAOp1
|
3589 |
+
AE47xDqUEpHJWEadIRNyp4iciuRMStuW1KyLa2tJElMzrdfkviT8tQp21KW8EA==
|
3590 |
+
-----END CERTIFICATE-----
|
3591 |
+
|
3592 |
+
LuxTrust Global Root 2
|
3593 |
+
======================
|
3594 |
+
-----BEGIN CERTIFICATE-----
|
3595 |
+
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
|
3621 |
+
-----END CERTIFICATE-----
|
3622 |
+
|
3623 |
+
TUBITAK Kamu SM SSL Kok Sertifikasi - Surum 1
|
3624 |
+
=============================================
|
3625 |
+
-----BEGIN CERTIFICATE-----
|
3626 |
+
MIIEYzCCA0ugAwIBAgIBATANBgkqhkiG9w0BAQsFADCB0jELMAkGA1UEBhMCVFIxGDAWBgNVBAcT
|
3627 |
+
D0dlYnplIC0gS29jYWVsaTFCMEAGA1UEChM5VHVya2l5ZSBCaWxpbXNlbCB2ZSBUZWtub2xvamlr
|
3628 |
+
IEFyYXN0aXJtYSBLdXJ1bXUgLSBUVUJJVEFLMS0wKwYDVQQLEyRLYW11IFNlcnRpZmlrYXN5b24g
|
3629 |
+
TWVya2V6aSAtIEthbXUgU00xNjA0BgNVBAMTLVRVQklUQUsgS2FtdSBTTSBTU0wgS29rIFNlcnRp
|
3630 |
+
ZmlrYXNpIC0gU3VydW0gMTAeFw0xMzExMjUwODI1NTVaFw00MzEwMjUwODI1NTVaMIHSMQswCQYD
|
3631 |
+
VQQGEwJUUjEYMBYGA1UEBxMPR2ViemUgLSBLb2NhZWxpMUIwQAYDVQQKEzlUdXJraXllIEJpbGlt
|
3632 |
+
c2VsIHZlIFRla25vbG9qaWsgQXJhc3Rpcm1hIEt1cnVtdSAtIFRVQklUQUsxLTArBgNVBAsTJEth
|
3633 |
+
bXUgU2VydGlmaWthc3lvbiBNZXJrZXppIC0gS2FtdSBTTTE2MDQGA1UEAxMtVFVCSVRBSyBLYW11
|
3634 |
+
IFNNIFNTTCBLb2sgU2VydGlmaWthc2kgLSBTdXJ1bSAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
|
3635 |
+
MIIBCgKCAQEAr3UwM6q7a9OZLBI3hNmNe5eA027n/5tQlT6QlVZC1xl8JoSNkvoBHToP4mQ4t4y8
|
3636 |
+
6Ij5iySrLqP1N+RAjhgleYN1Hzv/bKjFxlb4tO2KRKOrbEz8HdDc72i9z+SqzvBV96I01INrN3wc
|
3637 |
+
wv61A+xXzry0tcXtAA9TNypN9E8Mg/uGz8v+jE69h/mniyFXnHrfA2eJLJ2XYacQuFWQfw4tJzh0
|
3638 |
+
3+f92k4S400VIgLI4OD8D62K18lUUMw7D8oWgITQUVbDjlZ/iSIzL+aFCr2lqBs23tPcLG07xxO9
|
3639 |
+
WSMs5uWk99gL7eqQQESolbuT1dCANLZGeA4fAJNG4e7p+exPFwIDAQABo0IwQDAdBgNVHQ4EFgQU
|
3640 |
+
ZT/HiobGPN08VFw1+DrtUgxHV8gwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJ
|
3641 |
+
KoZIhvcNAQELBQADggEBACo/4fEyjq7hmFxLXs9rHmoJ0iKpEsdeV31zVmSAhHqT5Am5EM2fKifh
|
3642 |
+
AHe+SMg1qIGf5LgsyX8OsNJLN13qudULXjS99HMpw+0mFZx+CFOKWI3QSyjfwbPfIPP54+M638yc
|
3643 |
+
lNhOT8NrF7f3cuitZjO1JVOr4PhMqZ398g26rrnZqsZr+ZO7rqu4lzwDGrpDxpa5RXI4s6ehlj2R
|
3644 |
+
e37AIVNMh+3yC1SVUZPVIqUNivGTDj5UDrDYyU7c8jEyVupk+eq1nRZmQnLzf9OxMUP8pI4X8W0j
|
3645 |
+
q5Rm+K37DwhuJi1/FwcJsoz7UMCflo3Ptv0AnVoUmr8CRPXBwp8iXqIPoeM=
|
3646 |
+
-----END CERTIFICATE-----
|
vendor/composer/ca-bundle/src/CaBundle.php
ADDED
@@ -0,0 +1,291 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* This file is part of composer/ca-bundle.
|
5 |
+
*
|
6 |
+
* (c) Composer <https://github.com/composer>
|
7 |
+
*
|
8 |
+
* For the full copyright and license information, please view
|
9 |
+
* the LICENSE file that was distributed with this source code.
|
10 |
+
*/
|
11 |
+
|
12 |
+
namespace Composer\CaBundle;
|
13 |
+
|
14 |
+
use Psr\Log\LoggerInterface;
|
15 |
+
use Symfony\Component\Process\PhpProcess;
|
16 |
+
|
17 |
+
/**
|
18 |
+
* @author Chris Smith <chris@cs278.org>
|
19 |
+
* @author Jordi Boggiano <j.boggiano@seld.be>
|
20 |
+
*/
|
21 |
+
class CaBundle
|
22 |
+
{
|
23 |
+
private static $caPath;
|
24 |
+
private static $caFileValidity = array();
|
25 |
+
private static $useOpensslParse;
|
26 |
+
|
27 |
+
/**
|
28 |
+
* Returns the system CA bundle path, or a path to the bundled one
|
29 |
+
*
|
30 |
+
* This method was adapted from Sslurp.
|
31 |
+
* https://github.com/EvanDotPro/Sslurp
|
32 |
+
*
|
33 |
+
* (c) Evan Coury <me@evancoury.com>
|
34 |
+
*
|
35 |
+
* For the full copyright and license information, please see below:
|
36 |
+
*
|
37 |
+
* Copyright (c) 2013, Evan Coury
|
38 |
+
* All rights reserved.
|
39 |
+
*
|
40 |
+
* Redistribution and use in source and binary forms, with or without modification,
|
41 |
+
* are permitted provided that the following conditions are met:
|
42 |
+
*
|
43 |
+
* * Redistributions of source code must retain the above copyright notice,
|
44 |
+
* this list of conditions and the following disclaimer.
|
45 |
+
*
|
46 |
+
* * Redistributions in binary form must reproduce the above copyright notice,
|
47 |
+
* this list of conditions and the following disclaimer in the documentation
|
48 |
+
* and/or other materials provided with the distribution.
|
49 |
+
*
|
50 |
+
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
51 |
+
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
52 |
+
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
53 |
+
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
54 |
+
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
55 |
+
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
56 |
+
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
57 |
+
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
58 |
+
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
59 |
+
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
60 |
+
*
|
61 |
+
* @param LoggerInterface $logger optional logger for information about which CA files were loaded
|
62 |
+
* @return string path to a CA bundle file or directory
|
63 |
+
*/
|
64 |
+
public static function getSystemCaRootBundlePath(LoggerInterface $logger = null)
|
65 |
+
{
|
66 |
+
if (self::$caPath !== null) {
|
67 |
+
return self::$caPath;
|
68 |
+
}
|
69 |
+
|
70 |
+
// If SSL_CERT_FILE env variable points to a valid certificate/bundle, use that.
|
71 |
+
// This mimics how OpenSSL uses the SSL_CERT_FILE env variable.
|
72 |
+
$envCertFile = getenv('SSL_CERT_FILE');
|
73 |
+
if ($envCertFile && is_readable($envCertFile) && static::validateCaFile($envCertFile, $logger)) {
|
74 |
+
return self::$caPath = $envCertFile;
|
75 |
+
}
|
76 |
+
|
77 |
+
// If SSL_CERT_DIR env variable points to a valid certificate/bundle, use that.
|
78 |
+
// This mimics how OpenSSL uses the SSL_CERT_FILE env variable.
|
79 |
+
$envCertDir = getenv('SSL_CERT_DIR');
|
80 |
+
if ($envCertDir && is_dir($envCertDir) && is_readable($envCertDir)) {
|
81 |
+
return self::$caPath = $envCertDir;
|
82 |
+
}
|
83 |
+
|
84 |
+
$configured = ini_get('openssl.cafile');
|
85 |
+
if ($configured && strlen($configured) > 0 && is_readable($configured) && static::validateCaFile($configured, $logger)) {
|
86 |
+
return self::$caPath = $configured;
|
87 |
+
}
|
88 |
+
|
89 |
+
$configured = ini_get('openssl.capath');
|
90 |
+
if ($configured && is_dir($configured) && is_readable($configured)) {
|
91 |
+
return self::$caPath = $configured;
|
92 |
+
}
|
93 |
+
|
94 |
+
$caBundlePaths = array(
|
95 |
+
'/etc/pki/tls/certs/ca-bundle.crt', // Fedora, RHEL, CentOS (ca-certificates package)
|
96 |
+
'/etc/ssl/certs/ca-certificates.crt', // Debian, Ubuntu, Gentoo, Arch Linux (ca-certificates package)
|
97 |
+
'/etc/ssl/ca-bundle.pem', // SUSE, openSUSE (ca-certificates package)
|
98 |
+
'/usr/local/share/certs/ca-root-nss.crt', // FreeBSD (ca_root_nss_package)
|
99 |
+
'/usr/ssl/certs/ca-bundle.crt', // Cygwin
|
100 |
+
'/opt/local/share/curl/curl-ca-bundle.crt', // OS X macports, curl-ca-bundle package
|
101 |
+
'/usr/local/share/curl/curl-ca-bundle.crt', // Default cURL CA bunde path (without --with-ca-bundle option)
|
102 |
+
'/usr/share/ssl/certs/ca-bundle.crt', // Really old RedHat?
|
103 |
+
'/etc/ssl/cert.pem', // OpenBSD
|
104 |
+
'/usr/local/etc/ssl/cert.pem', // FreeBSD 10.x
|
105 |
+
'/usr/local/etc/openssl/cert.pem', // OS X homebrew, openssl package
|
106 |
+
);
|
107 |
+
|
108 |
+
foreach ($caBundlePaths as $caBundle) {
|
109 |
+
if (@is_readable($caBundle) && static::validateCaFile($caBundle, $logger)) {
|
110 |
+
return self::$caPath = $caBundle;
|
111 |
+
}
|
112 |
+
}
|
113 |
+
|
114 |
+
foreach ($caBundlePaths as $caBundle) {
|
115 |
+
$caBundle = dirname($caBundle);
|
116 |
+
if (@is_dir($caBundle) && glob($caBundle.'/*')) {
|
117 |
+
return self::$caPath = $caBundle;
|
118 |
+
}
|
119 |
+
}
|
120 |
+
|
121 |
+
return self::$caPath = static::getBundledCaBundlePath(); // Bundled CA file, last resort
|
122 |
+
}
|
123 |
+
|
124 |
+
/**
|
125 |
+
* Returns the path to the bundled CA file
|
126 |
+
*
|
127 |
+
* In case you don't want to trust the user or the system, you can use this directly
|
128 |
+
*
|
129 |
+
* @return string path to a CA bundle file
|
130 |
+
*/
|
131 |
+
public static function getBundledCaBundlePath()
|
132 |
+
{
|
133 |
+
return __DIR__.'/../res/cacert.pem';
|
134 |
+
}
|
135 |
+
|
136 |
+
/**
|
137 |
+
* Validates a CA file using opensl_x509_parse only if it is safe to use
|
138 |
+
*
|
139 |
+
* @param string $filename
|
140 |
+
* @param LoggerInterface $logger optional logger for information about which CA files were loaded
|
141 |
+
*
|
142 |
+
* @return bool
|
143 |
+
*/
|
144 |
+
public static function validateCaFile($filename, LoggerInterface $logger = null)
|
145 |
+
{
|
146 |
+
static $warned = false;
|
147 |
+
|
148 |
+
if (isset(self::$caFileValidity[$filename])) {
|
149 |
+
return self::$caFileValidity[$filename];
|
150 |
+
}
|
151 |
+
|
152 |
+
$contents = file_get_contents($filename);
|
153 |
+
|
154 |
+
// assume the CA is valid if php is vulnerable to
|
155 |
+
// https://www.sektioneins.de/advisories/advisory-012013-php-openssl_x509_parse-memory-corruption-vulnerability.html
|
156 |
+
if (!static::isOpensslParseSafe()) {
|
157 |
+
if (!$warned && $logger) {
|
158 |
+
$logger->warning(sprintf(
|
159 |
+
'Your version of PHP, %s, is affected by CVE-2013-6420 and cannot safely perform certificate validation, we strongly suggest you upgrade.',
|
160 |
+
PHP_VERSION
|
161 |
+
));
|
162 |
+
$warned = true;
|
163 |
+
}
|
164 |
+
|
165 |
+
$isValid = !empty($contents);
|
166 |
+
} else {
|
167 |
+
$isValid = (bool) openssl_x509_parse($contents);
|
168 |
+
}
|
169 |
+
|
170 |
+
if ($logger) {
|
171 |
+
$logger->debug('Checked CA file '.realpath($filename).': '.($isValid ? 'valid' : 'invalid'));
|
172 |
+
}
|
173 |
+
|
174 |
+
return self::$caFileValidity[$filename] = $isValid;
|
175 |
+
}
|
176 |
+
|
177 |
+
/**
|
178 |
+
* Test if it is safe to use the PHP function openssl_x509_parse().
|
179 |
+
*
|
180 |
+
* This checks if OpenSSL extensions is vulnerable to remote code execution
|
181 |
+
* via the exploit documented as CVE-2013-6420.
|
182 |
+
*
|
183 |
+
* @return bool
|
184 |
+
*/
|
185 |
+
public static function isOpensslParseSafe()
|
186 |
+
{
|
187 |
+
if (null !== self::$useOpensslParse) {
|
188 |
+
return self::$useOpensslParse;
|
189 |
+
}
|
190 |
+
|
191 |
+
if (PHP_VERSION_ID >= 50600) {
|
192 |
+
return self::$useOpensslParse = true;
|
193 |
+
}
|
194 |
+
|
195 |
+
// Vulnerable:
|
196 |
+
// PHP 5.3.0 - PHP 5.3.27
|
197 |
+
// PHP 5.4.0 - PHP 5.4.22
|
198 |
+
// PHP 5.5.0 - PHP 5.5.6
|
199 |
+
if (
|
200 |
+
(PHP_VERSION_ID < 50400 && PHP_VERSION_ID >= 50328)
|
201 |
+
|| (PHP_VERSION_ID < 50500 && PHP_VERSION_ID >= 50423)
|
202 |
+
|| (PHP_VERSION_ID < 50600 && PHP_VERSION_ID >= 50507)
|
203 |
+
) {
|
204 |
+
// This version of PHP has the fix for CVE-2013-6420 applied.
|
205 |
+
return self::$useOpensslParse = true;
|
206 |
+
}
|
207 |
+
|
208 |
+
if (defined('PHP_WINDOWS_VERSION_BUILD')) {
|
209 |
+
// Windows is probably insecure in this case.
|
210 |
+
return self::$useOpensslParse = false;
|
211 |
+
}
|
212 |
+
|
213 |
+
$compareDistroVersionPrefix = function ($prefix, $fixedVersion) {
|
214 |
+
$regex = '{^'.preg_quote($prefix).'([0-9]+)$}';
|
215 |
+
|
216 |
+
if (preg_match($regex, PHP_VERSION, $m)) {
|
217 |
+
return ((int) $m[1]) >= $fixedVersion;
|
218 |
+
}
|
219 |
+
|
220 |
+
return false;
|
221 |
+
};
|
222 |
+
|
223 |
+
// Hard coded list of PHP distributions with the fix backported.
|
224 |
+
if (
|
225 |
+
$compareDistroVersionPrefix('5.3.3-7+squeeze', 18) // Debian 6 (Squeeze)
|
226 |
+
|| $compareDistroVersionPrefix('5.4.4-14+deb7u', 7) // Debian 7 (Wheezy)
|
227 |
+
|| $compareDistroVersionPrefix('5.3.10-1ubuntu3.', 9) // Ubuntu 12.04 (Precise)
|
228 |
+
) {
|
229 |
+
return self::$useOpensslParse = true;
|
230 |
+
}
|
231 |
+
|
232 |
+
// Symfony Process component is missing so we assume it is unsafe at this point
|
233 |
+
if (!class_exists('Symfony\Component\Process\PhpProcess')) {
|
234 |
+
return self::$useOpensslParse = false;
|
235 |
+
}
|
236 |
+
|
237 |
+
// This is where things get crazy, because distros backport security
|
238 |
+
// fixes the chances are on NIX systems the fix has been applied but
|
239 |
+
// it's not possible to verify that from the PHP version.
|
240 |
+
//
|
241 |
+
// To verify exec a new PHP process and run the issue testcase with
|
242 |
+
// known safe input that replicates the bug.
|
243 |
+
|
244 |
+
// Based on testcase in https://github.com/php/php-src/commit/c1224573c773b6845e83505f717fbf820fc18415
|
245 |
+
// changes in https://github.com/php/php-src/commit/76a7fd893b7d6101300cc656058704a73254d593
|
246 |
+
$cert = 'LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUVwRENDQTR5Z0F3SUJBZ0lKQUp6dThyNnU2ZUJjTUEwR0NTcUdTSWIzRFFFQkJRVUFNSUhETVFzd0NRWUQKVlFRR0V3SkVSVEVjTUJvR0ExVUVDQXdUVG05eVpISm9aV2x1TFZkbGMzUm1ZV3hsYmpFUU1BNEdBMVVFQnd3SApTOE9Ed3Jac2JqRVVNQklHQTFVRUNnd0xVMlZyZEdsdmJrVnBibk14SHpBZEJnTlZCQXNNRmsxaGJHbGphVzkxCmN5QkRaWEowSUZObFkzUnBiMjR4SVRBZkJnTlZCQU1NR0cxaGJHbGphVzkxY3k1elpXdDBhVzl1WldsdWN5NWsKWlRFcU1DZ0dDU3FHU0liM0RRRUpBUlliYzNSbFptRnVMbVZ6YzJWeVFITmxhM1JwYjI1bGFXNXpMbVJsTUhVWQpaREU1TnpBd01UQXhNREF3TURBd1dnQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBCkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEKQUFBQUFBQVhEVEUwTVRFeU9ERXhNemt6TlZvd2djTXhDekFKQmdOVkJBWVRBa1JGTVJ3d0dnWURWUVFJREJOTwpiM0prY21obGFXNHRWMlZ6ZEdaaGJHVnVNUkF3RGdZRFZRUUhEQWRMdzRQQ3RteHVNUlF3RWdZRFZRUUtEQXRUClpXdDBhVzl1UldsdWN6RWZNQjBHQTFVRUN3d1dUV0ZzYVdOcGIzVnpJRU5sY25RZ1UyVmpkR2x2YmpFaE1COEcKQTFVRUF3d1liV0ZzYVdOcGIzVnpMbk5sYTNScGIyNWxhVzV6TG1SbE1Tb3dLQVlKS29aSWh2Y05BUWtCRmh0egpkR1ZtWVc0dVpYTnpaWEpBYzJWcmRHbHZibVZwYm5NdVpHVXdnZ0VpTUEwR0NTcUdTSWIzRFFFQkFRVUFBNElCCkR3QXdnZ0VLQW9JQkFRRERBZjNobDdKWTBYY0ZuaXlFSnBTU0RxbjBPcUJyNlFQNjV1c0pQUnQvOFBhRG9xQnUKd0VZVC9OYSs2ZnNnUGpDMHVLOURaZ1dnMnRIV1dvYW5TYmxBTW96NVBINlorUzRTSFJaN2UyZERJalBqZGhqaAowbUxnMlVNTzV5cDBWNzk3R2dzOWxOdDZKUmZIODFNTjJvYlhXczROdHp0TE11RDZlZ3FwcjhkRGJyMzRhT3M4CnBrZHVpNVVhd1Raa3N5NXBMUEhxNWNNaEZHbTA2djY1Q0xvMFYyUGQ5K0tBb2tQclBjTjVLTEtlYno3bUxwazYKU01lRVhPS1A0aWRFcXh5UTdPN2ZCdUhNZWRzUWh1K3ByWTNzaTNCVXlLZlF0UDVDWm5YMmJwMHdLSHhYMTJEWAoxbmZGSXQ5RGJHdkhUY3lPdU4rblpMUEJtM3ZXeG50eUlJdlZBZ01CQUFHalFqQkFNQWtHQTFVZEV3UUNNQUF3CkVRWUpZSVpJQVliNFFnRUJCQVFEQWdlQU1Bc0dBMVVkRHdRRUF3SUZvREFUQmdOVkhTVUVEREFLQmdnckJnRUYKQlFjREFqQU5CZ2txaGtpRzl3MEJBUVVGQUFPQ0FRRUFHMGZaWVlDVGJkajFYWWMrMVNub2FQUit2SThDOENhRAo4KzBVWWhkbnlVNGdnYTBCQWNEclk5ZTk0ZUVBdTZacXljRjZGakxxWFhkQWJvcHBXb2NyNlQ2R0QxeDMzQ2tsClZBcnpHL0t4UW9oR0QySmVxa2hJTWxEb214SE83a2EzOStPYThpMnZXTFZ5alU4QVp2V01BcnVIYTRFRU55RzcKbFcyQWFnYUZLRkNyOVRuWFRmcmR4R1ZFYnY3S1ZRNmJkaGc1cDVTanBXSDErTXEwM3VSM1pYUEJZZHlWODMxOQpvMGxWajFLRkkyRENML2xpV2lzSlJvb2YrMWNSMzVDdGQwd1lCY3BCNlRac2xNY09QbDc2ZHdLd0pnZUpvMlFnClpzZm1jMnZDMS9xT2xOdU5xLzBUenprVkd2OEVUVDNDZ2FVK1VYZTRYT1Z2a2NjZWJKbjJkZz09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K';
|
247 |
+
$script = <<<'EOT'
|
248 |
+
|
249 |
+
error_reporting(-1);
|
250 |
+
$info = openssl_x509_parse(base64_decode('%s'));
|
251 |
+
var_dump(PHP_VERSION, $info['issuer']['emailAddress'], $info['validFrom_time_t']);
|
252 |
+
|
253 |
+
EOT;
|
254 |
+
$script = '<'."?php\n".sprintf($script, $cert);
|
255 |
+
|
256 |
+
try {
|
257 |
+
$process = new PhpProcess($script);
|
258 |
+
$process->mustRun();
|
259 |
+
} catch (\Exception $e) {
|
260 |
+
// In the case of any exceptions just accept it is not possible to
|
261 |
+
// determine the safety of openssl_x509_parse and bail out.
|
262 |
+
return self::$useOpensslParse = false;
|
263 |
+
}
|
264 |
+
|
265 |
+
$output = preg_split('{\r?\n}', trim($process->getOutput()));
|
266 |
+
$errorOutput = trim($process->getErrorOutput());
|
267 |
+
|
268 |
+
if (
|
269 |
+
count($output) === 3
|
270 |
+
&& $output[0] === sprintf('string(%d) "%s"', strlen(PHP_VERSION), PHP_VERSION)
|
271 |
+
&& $output[1] === 'string(27) "stefan.esser@sektioneins.de"'
|
272 |
+
&& $output[2] === 'int(-1)'
|
273 |
+
&& preg_match('{openssl_x509_parse\(\): illegal (?:ASN1 data type for|length in) timestamp in - on line \d+}', $errorOutput)
|
274 |
+
) {
|
275 |
+
// This PHP has the fix backported probably by a distro security team.
|
276 |
+
return self::$useOpensslParse = true;
|
277 |
+
}
|
278 |
+
|
279 |
+
return self::$useOpensslParse = false;
|
280 |
+
}
|
281 |
+
|
282 |
+
/**
|
283 |
+
* Resets the static caches
|
284 |
+
*/
|
285 |
+
public static function reset()
|
286 |
+
{
|
287 |
+
self::$caFileValidity = array();
|
288 |
+
self::$caPath = null;
|
289 |
+
self::$useOpensslParse = null;
|
290 |
+
}
|
291 |
+
}
|
vendor/composer/installed.json
ADDED
@@ -0,0 +1,224 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
[
|
2 |
+
{
|
3 |
+
"name": "composer/ca-bundle",
|
4 |
+
"version": "1.0.9",
|
5 |
+
"version_normalized": "1.0.9.0",
|
6 |
+
"source": {
|
7 |
+
"type": "git",
|
8 |
+
"url": "https://github.com/composer/ca-bundle.git",
|
9 |
+
"reference": "36344aeffdc37711335563e6108cda86566432a6"
|
10 |
+
},
|
11 |
+
"dist": {
|
12 |
+
"type": "zip",
|
13 |
+
"url": "https://api.github.com/repos/composer/ca-bundle/zipball/36344aeffdc37711335563e6108cda86566432a6",
|
14 |
+
"reference": "36344aeffdc37711335563e6108cda86566432a6",
|
15 |
+
"shasum": ""
|
16 |
+
},
|
17 |
+
"require": {
|
18 |
+
"ext-openssl": "*",
|
19 |
+
"ext-pcre": "*",
|
20 |
+
"php": "^5.3.2 || ^7.0"
|
21 |
+
},
|
22 |
+
"require-dev": {
|
23 |
+
"phpunit/phpunit": "^4.5",
|
24 |
+
"psr/log": "^1.0",
|
25 |
+
"symfony/process": "^2.5 || ^3.0"
|
26 |
+
},
|
27 |
+
"suggest": {
|
28 |
+
"symfony/process": "This is necessary to reliably check whether openssl_x509_parse is vulnerable on older php versions, but can be ignored on PHP 5.5.6+"
|
29 |
+
},
|
30 |
+
"time": "2017-11-13T15:51:25+00:00",
|
31 |
+
"type": "library",
|
32 |
+
"extra": {
|
33 |
+
"branch-alias": {
|
34 |
+
"dev-master": "1.x-dev"
|
35 |
+
}
|
36 |
+
},
|
37 |
+
"installation-source": "dist",
|
38 |
+
"autoload": {
|
39 |
+
"psr-4": {
|
40 |
+
"Composer\\CaBundle\\": "src"
|
41 |
+
}
|
42 |
+
},
|
43 |
+
"notification-url": "https://packagist.org/downloads/",
|
44 |
+
"license": [
|
45 |
+
"MIT"
|
46 |
+
],
|
47 |
+
"authors": [
|
48 |
+
{
|
49 |
+
"name": "Jordi Boggiano",
|
50 |
+
"email": "j.boggiano@seld.be",
|
51 |
+
"homepage": "http://seld.be"
|
52 |
+
}
|
53 |
+
],
|
54 |
+
"description": "Lets you find a path to the system CA bundle, and includes a fallback to the Mozilla CA bundle.",
|
55 |
+
"keywords": [
|
56 |
+
"cabundle",
|
57 |
+
"cacert",
|
58 |
+
"certificate",
|
59 |
+
"ssl",
|
60 |
+
"tls"
|
61 |
+
]
|
62 |
+
},
|
63 |
+
{
|
64 |
+
"name": "maxmind/web-service-common",
|
65 |
+
"version": "v0.4.0",
|
66 |
+
"version_normalized": "0.4.0.0",
|
67 |
+
"source": {
|
68 |
+
"type": "git",
|
69 |
+
"url": "https://github.com/maxmind/web-service-common-php.git",
|
70 |
+
"reference": "622f7c732a7f9c4c62497fc103939e042b6bdb88"
|
71 |
+
},
|
72 |
+
"dist": {
|
73 |
+
"type": "zip",
|
74 |
+
"url": "https://api.github.com/repos/maxmind/web-service-common-php/zipball/622f7c732a7f9c4c62497fc103939e042b6bdb88",
|
75 |
+
"reference": "622f7c732a7f9c4c62497fc103939e042b6bdb88",
|
76 |
+
"shasum": ""
|
77 |
+
},
|
78 |
+
"require": {
|
79 |
+
"composer/ca-bundle": "^1.0.3",
|
80 |
+
"ext-curl": "*",
|
81 |
+
"ext-json": "*",
|
82 |
+
"php": ">=5.4"
|
83 |
+
},
|
84 |
+
"require-dev": {
|
85 |
+
"friendsofphp/php-cs-fixer": "2.*",
|
86 |
+
"phpunit/phpunit": "4.*",
|
87 |
+
"squizlabs/php_codesniffer": "3.*"
|
88 |
+
},
|
89 |
+
"time": "2017-07-06T17:48:21+00:00",
|
90 |
+
"type": "library",
|
91 |
+
"installation-source": "dist",
|
92 |
+
"autoload": {
|
93 |
+
"psr-4": {
|
94 |
+
"MaxMind\\Exception\\": "src/Exception",
|
95 |
+
"MaxMind\\WebService\\": "src/WebService"
|
96 |
+
}
|
97 |
+
},
|
98 |
+
"notification-url": "https://packagist.org/downloads/",
|
99 |
+
"license": [
|
100 |
+
"Apache-2.0"
|
101 |
+
],
|
102 |
+
"authors": [
|
103 |
+
{
|
104 |
+
"name": "Gregory Oschwald",
|
105 |
+
"email": "goschwald@maxmind.com"
|
106 |
+
}
|
107 |
+
],
|
108 |
+
"description": "Internal MaxMind Web Service API",
|
109 |
+
"homepage": "https://github.com/maxmind/web-service-common-php"
|
110 |
+
},
|
111 |
+
{
|
112 |
+
"name": "maxmind-db/reader",
|
113 |
+
"version": "v1.2.0",
|
114 |
+
"version_normalized": "1.2.0.0",
|
115 |
+
"source": {
|
116 |
+
"type": "git",
|
117 |
+
"url": "https://github.com/maxmind/MaxMind-DB-Reader-php.git",
|
118 |
+
"reference": "1647820dfbcb552222fb5feb3a8387e2636394c9"
|
119 |
+
},
|
120 |
+
"dist": {
|
121 |
+
"type": "zip",
|
122 |
+
"url": "https://api.github.com/repos/maxmind/MaxMind-DB-Reader-php/zipball/1647820dfbcb552222fb5feb3a8387e2636394c9",
|
123 |
+
"reference": "1647820dfbcb552222fb5feb3a8387e2636394c9",
|
124 |
+
"shasum": ""
|
125 |
+
},
|
126 |
+
"require": {
|
127 |
+
"php": ">=5.4"
|
128 |
+
},
|
129 |
+
"require-dev": {
|
130 |
+
"friendsofphp/php-cs-fixer": "2.*",
|
131 |
+
"phpunit/phpunit": "4.*",
|
132 |
+
"satooshi/php-coveralls": "1.0.*",
|
133 |
+
"squizlabs/php_codesniffer": "3.*"
|
134 |
+
},
|
135 |
+
"suggest": {
|
136 |
+
"ext-bcmath": "bcmath or gmp is required for decoding larger integers with the pure PHP decoder",
|
137 |
+
"ext-gmp": "bcmath or gmp is required for decoding larger integers with the pure PHP decoder",
|
138 |
+
"ext-maxminddb": "A C-based database decoder that provides significantly faster lookups"
|
139 |
+
},
|
140 |
+
"time": "2017-10-27T19:15:33+00:00",
|
141 |
+
"type": "library",
|
142 |
+
"installation-source": "dist",
|
143 |
+
"autoload": {
|
144 |
+
"psr-4": {
|
145 |
+
"MaxMind\\Db\\": "src/MaxMind/Db"
|
146 |
+
}
|
147 |
+
},
|
148 |
+
"notification-url": "https://packagist.org/downloads/",
|
149 |
+
"license": [
|
150 |
+
"Apache-2.0"
|
151 |
+
],
|
152 |
+
"authors": [
|
153 |
+
{
|
154 |
+
"name": "Gregory J. Oschwald",
|
155 |
+
"email": "goschwald@maxmind.com",
|
156 |
+
"homepage": "http://www.maxmind.com/"
|
157 |
+
}
|
158 |
+
],
|
159 |
+
"description": "MaxMind DB Reader API",
|
160 |
+
"homepage": "https://github.com/maxmind/MaxMind-DB-Reader-php",
|
161 |
+
"keywords": [
|
162 |
+
"database",
|
163 |
+
"geoip",
|
164 |
+
"geoip2",
|
165 |
+
"geolocation",
|
166 |
+
"maxmind"
|
167 |
+
]
|
168 |
+
},
|
169 |
+
{
|
170 |
+
"name": "geoip2/geoip2",
|
171 |
+
"version": "v2.7.0",
|
172 |
+
"version_normalized": "2.7.0.0",
|
173 |
+
"source": {
|
174 |
+
"type": "git",
|
175 |
+
"url": "https://github.com/maxmind/GeoIP2-php.git",
|
176 |
+
"reference": "ca9f9a244474d97eac1ef542aaced7cc944bafbe"
|
177 |
+
},
|
178 |
+
"dist": {
|
179 |
+
"type": "zip",
|
180 |
+
"url": "https://api.github.com/repos/maxmind/GeoIP2-php/zipball/ca9f9a244474d97eac1ef542aaced7cc944bafbe",
|
181 |
+
"reference": "ca9f9a244474d97eac1ef542aaced7cc944bafbe",
|
182 |
+
"shasum": ""
|
183 |
+
},
|
184 |
+
"require": {
|
185 |
+
"maxmind-db/reader": "~1.0",
|
186 |
+
"maxmind/web-service-common": "~0.4",
|
187 |
+
"php": ">=5.4"
|
188 |
+
},
|
189 |
+
"require-dev": {
|
190 |
+
"apigen/apigen": "*",
|
191 |
+
"friendsofphp/php-cs-fixer": "2.*",
|
192 |
+
"phpunit/phpunit": "4.*",
|
193 |
+
"squizlabs/php_codesniffer": "3.*"
|
194 |
+
},
|
195 |
+
"time": "2017-10-27T19:20:22+00:00",
|
196 |
+
"type": "library",
|
197 |
+
"installation-source": "dist",
|
198 |
+
"autoload": {
|
199 |
+
"psr-4": {
|
200 |
+
"GeoIp2\\": "src"
|
201 |
+
}
|
202 |
+
},
|
203 |
+
"notification-url": "https://packagist.org/downloads/",
|
204 |
+
"license": [
|
205 |
+
"Apache-2.0"
|
206 |
+
],
|
207 |
+
"authors": [
|
208 |
+
{
|
209 |
+
"name": "Gregory J. Oschwald",
|
210 |
+
"email": "goschwald@maxmind.com",
|
211 |
+
"homepage": "http://www.maxmind.com/"
|
212 |
+
}
|
213 |
+
],
|
214 |
+
"description": "MaxMind GeoIP2 PHP API",
|
215 |
+
"homepage": "https://github.com/maxmind/GeoIP2-php",
|
216 |
+
"keywords": [
|
217 |
+
"IP",
|
218 |
+
"geoip",
|
219 |
+
"geoip2",
|
220 |
+
"geolocation",
|
221 |
+
"maxmind"
|
222 |
+
]
|
223 |
+
}
|
224 |
+
]
|
vendor/geoip2/geoip2/.gitmodules
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
1 |
+
[submodule "maxmind-db"]
|
2 |
+
path = maxmind-db
|
3 |
+
url = git://github.com/maxmind/MaxMind-DB.git
|
vendor/geoip2/geoip2/.php_cs
ADDED
@@ -0,0 +1,34 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
return PhpCsFixer\Config::create()
|
4 |
+
->setRiskyAllowed(true)
|
5 |
+
->setRules([
|
6 |
+
'@Symfony' => true,
|
7 |
+
'@Symfony:risky' => true,
|
8 |
+
'array_syntax' => ['syntax' => 'short'],
|
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,
|
15 |
+
'no_unreachable_default_argument_value' => true,
|
16 |
+
'no_useless_else' => true,
|
17 |
+
'no_useless_return' => true,
|
18 |
+
'ordered_imports' => true,
|
19 |
+
'pre_increment' => false,
|
20 |
+
'php_unit_strict' => true,
|
21 |
+
'php_unit_test_class_requires_covers' => true,
|
22 |
+
'phpdoc_add_missing_param_annotation' => true,
|
23 |
+
'phpdoc_no_alias_tag' => false,
|
24 |
+
'phpdoc_order' => true,
|
25 |
+
'semicolon_after_instruction' => true,
|
26 |
+
'strict_comparison' => true,
|
27 |
+
'strict_param' => true,
|
28 |
+
'yoda_style' => false,
|
29 |
+
])
|
30 |
+
->setFinder(
|
31 |
+
PhpCsFixer\Finder::create()
|
32 |
+
->in(__DIR__)
|
33 |
+
)
|
34 |
+
;
|
vendor/geoip2/geoip2/CHANGELOG.md
ADDED
@@ -0,0 +1,250 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
CHANGELOG
|
2 |
+
=========
|
3 |
+
|
4 |
+
2.7.0 (2017-10-27)
|
5 |
+
------------------
|
6 |
+
|
7 |
+
* The following new anonymizer properties were added to `GeoIp2\Record\Traits`
|
8 |
+
for use with GeoIP2 Precision Insights: `isAnonymous`, `isAnonymousVpn`,
|
9 |
+
`isHostingProvider`, `isPublicProxy`, and `isTorExitNode`.
|
10 |
+
|
11 |
+
2.6.0 (2017-07-10)
|
12 |
+
-----------------
|
13 |
+
|
14 |
+
* Code clean-up and tidying.
|
15 |
+
* Set minimum required PHP version to 5.4 in `composer.json`. Previously,
|
16 |
+
5.3 would work but was not tested. Now 5.4 is hard minimum version.
|
17 |
+
|
18 |
+
2.5.0 (2017-05-08)
|
19 |
+
------------------
|
20 |
+
|
21 |
+
* Support for PHP 5.3 was dropped.
|
22 |
+
* Added support for GeoLite2 ASN database.
|
23 |
+
|
24 |
+
2.4.5 (2017-01-31)
|
25 |
+
------------------
|
26 |
+
|
27 |
+
* Additional error checking on the data returned from `MaxMind\Db\Reader`
|
28 |
+
was added to help detect corrupt databases. GitHub #83.
|
29 |
+
|
30 |
+
2.4.4 (2016-10-11)
|
31 |
+
------------------
|
32 |
+
|
33 |
+
* `isset()` on `mostSpecificSubdivision` attribute now returns the
|
34 |
+
correct value. Reported by Juan Francisco Giordana. GitHub #81.
|
35 |
+
|
36 |
+
2.4.3 (2016-10-11)
|
37 |
+
------------------
|
38 |
+
|
39 |
+
* `isset()` on `name` attribute now returns the correct value. Reported by
|
40 |
+
Juan Francisco Giordana. GitHub #79.
|
41 |
+
|
42 |
+
2.4.2 (2016-08-17)
|
43 |
+
------------------
|
44 |
+
|
45 |
+
* Updated documentation to clarify what the accuracy radius refers to.
|
46 |
+
* Upgraded `maxmind/web-service-common` to 0.3.0. This version uses
|
47 |
+
`composer/ca-bundle` rather than our own CA bundle. GitHub #75.
|
48 |
+
* Improved PHP documentation generation.
|
49 |
+
|
50 |
+
2.4.1 (2016-06-10)
|
51 |
+
------------------
|
52 |
+
|
53 |
+
* Corrected type annotations in documentation. GitHub #66.
|
54 |
+
* Updated documentation to reflect that the accuracy radius is now included
|
55 |
+
in City.
|
56 |
+
* Upgraded web service client, which supports setting a proxy. GitHub #59.
|
57 |
+
|
58 |
+
2.4.0 (2016-04-15)
|
59 |
+
------------------
|
60 |
+
|
61 |
+
* Added support for the GeoIP2 Enterprise database.
|
62 |
+
|
63 |
+
2.3.3 (2015-09-24)
|
64 |
+
------------------
|
65 |
+
|
66 |
+
* Corrected case on `JsonSerializable` interface. Reported by Axel Etcheverry.
|
67 |
+
GitHub #56.
|
68 |
+
|
69 |
+
2.3.2 (2015-09-23)
|
70 |
+
------------------
|
71 |
+
|
72 |
+
* `JsonSerializable` compatibility interface was moved to `GeoIp2\Compat`
|
73 |
+
rather than the global namespace to prevent autoloading issues. Reported by
|
74 |
+
Tomas Buteler. GitHub #54.
|
75 |
+
* Missing documentation for the `$postal` property was added to the
|
76 |
+
`GeoIp2\Model\City` class. Fix by Roy Sindre Norangshol. GitHub #51.
|
77 |
+
* In the Phar distribution, source files for this module no longer have their
|
78 |
+
documentation stripped, allowing IDE introspection to work properly.
|
79 |
+
Reported by Dominic Black. GitHub #52.
|
80 |
+
|
81 |
+
2.3.1 (2015-06-30)
|
82 |
+
------------------
|
83 |
+
|
84 |
+
* Updated `maxmind/web-service-common` to version with fixes for PHP 5.3 and
|
85 |
+
5.4.
|
86 |
+
|
87 |
+
2.3.0 (2015-06-29)
|
88 |
+
------------------
|
89 |
+
|
90 |
+
* Support for demographics fields `averageIncome` and `populationDensity` in
|
91 |
+
the `Location` record, returned by the Insights endpoint.
|
92 |
+
* The `isAnonymousProxy` and `isSatelliteProvider` properties on
|
93 |
+
`GeoIP2\Record\Traits` have been deprecated. Please use our [GeoIP2
|
94 |
+
Anonymous IP database](https://www.maxmind.com/en/geoip2-anonymous-ip-database)
|
95 |
+
to determine whether an IP address is used by an anonymizing service.
|
96 |
+
|
97 |
+
2.2.0-beta1 (2015-06-09)
|
98 |
+
------------------------
|
99 |
+
|
100 |
+
* Typo fix in documentation.
|
101 |
+
|
102 |
+
2.2.0-alpha2 (2015-06-01)
|
103 |
+
-------------------------
|
104 |
+
|
105 |
+
* `maxmind-ws/web-service-common` was renamed to `maxmind/web-service-common`.
|
106 |
+
|
107 |
+
2.2.0-alpha1 (2015-05-22)
|
108 |
+
-------------------------
|
109 |
+
|
110 |
+
* The library no longer uses Guzzle and instead uses curl directly.
|
111 |
+
* Support for `timeout` and `connectTimout` were added to the `$options` array
|
112 |
+
passed to the `GeoIp2\WebService\Client` constructor. Pull request by Will
|
113 |
+
Bradley. GitHub #36.
|
114 |
+
|
115 |
+
2.1.1 (2014-12-03)
|
116 |
+
------------------
|
117 |
+
|
118 |
+
* The 2.1.0 Phar builds included a shebang line, causing issues when loading
|
119 |
+
it as a library. This has been corrected. GitHub #33.
|
120 |
+
|
121 |
+
2.1.0 (2014-10-29)
|
122 |
+
------------------
|
123 |
+
|
124 |
+
* Update ApiGen dependency to version that isn't broken on case sensitive
|
125 |
+
file systems.
|
126 |
+
* Added support for the GeoIP2 Anonymous IP database. The
|
127 |
+
`GeoIP2\Database\Reader` class now has an `anonymousIp` method which returns
|
128 |
+
a `GeoIP2\Model\AnonymousIp` object.
|
129 |
+
* Boolean attributes like those in the `GeoIP2\Record\Traits` class now return
|
130 |
+
`false` instead of `null` when they were not true.
|
131 |
+
|
132 |
+
2.0.0 (2014-09-22)
|
133 |
+
------------------
|
134 |
+
|
135 |
+
* First production release.
|
136 |
+
|
137 |
+
0.9.0 (2014-09-15)
|
138 |
+
------------------
|
139 |
+
|
140 |
+
* IMPORTANT: The deprecated `omni()` and `cityIspOrg()` methods have been
|
141 |
+
removed from `GeoIp2\WebService\Client`.
|
142 |
+
|
143 |
+
0.8.1 (2014-09-12)
|
144 |
+
------------------
|
145 |
+
|
146 |
+
* The check added to the `GeoIP2\Database\Reader` lookup methods in 0.8.0 did
|
147 |
+
not work with the GeoIP2 City Database Subset by Continent with World
|
148 |
+
Countries. This has been fixed. Fixes GitHub issue #23.
|
149 |
+
|
150 |
+
0.8.0 (2014-09-10)
|
151 |
+
------------------
|
152 |
+
|
153 |
+
* The `GeoIp2\Database\Reader` lookup methods (e.g., `city()`, `isp()`) now
|
154 |
+
throw a `BadMethodCallException` if they are used with a database that
|
155 |
+
does not match the method. In particular, doing a `city()` lookup on a
|
156 |
+
GeoIP2 Country database will result in an exception, and vice versa.
|
157 |
+
* A `metadata()` method has been added to the `GeoIP2\Database\Reader` class.
|
158 |
+
This returns a `MaxMind\Db\Reader\Metadata` class with information about the
|
159 |
+
database.
|
160 |
+
* The name attribute was missing from the RepresentedCountry class.
|
161 |
+
|
162 |
+
0.7.0 (2014-07-22)
|
163 |
+
------------------
|
164 |
+
|
165 |
+
* The web service client API has been updated for the v2.1 release of the web
|
166 |
+
service. In particular, the `cityIspOrg` and `omni` methods on
|
167 |
+
`GeoIp2\WebService\Client` should be considered deprecated. The `city`
|
168 |
+
method now provides all of the data formerly provided by `cityIspOrg`, and
|
169 |
+
the `omni` method has been replaced by the `insights` method.
|
170 |
+
* Support was added for GeoIP2 Connection Type, Domain and ISP databases.
|
171 |
+
|
172 |
+
|
173 |
+
0.6.3 (2014-05-12)
|
174 |
+
------------------
|
175 |
+
|
176 |
+
* With the previous Phar builds, some users received `phar error: invalid url
|
177 |
+
or non-existent phar` errors. The correct alias is now used for the Phar,
|
178 |
+
and this should no longer be an issue.
|
179 |
+
|
180 |
+
0.6.2 (2014-05-08)
|
181 |
+
------------------
|
182 |
+
|
183 |
+
* The Phar build was broken with Guzzle 3.9.0+. This has been fixed.
|
184 |
+
|
185 |
+
0.6.1 (2014-05-01)
|
186 |
+
------------------
|
187 |
+
|
188 |
+
* This API now officially supports HHVM.
|
189 |
+
* The `maxmind-db/reader` dependency was updated to a version that does not
|
190 |
+
require BC Math.
|
191 |
+
* The Composer compatibility autoload rules are now targeted more narrowly.
|
192 |
+
* A `box.json` file is included to build a Phar package.
|
193 |
+
|
194 |
+
0.6.0 (2014-02-19)
|
195 |
+
------------------
|
196 |
+
|
197 |
+
* This API is now licensed under the Apache License, Version 2.0.
|
198 |
+
* Model and record classes now implement `JsonSerializable`.
|
199 |
+
* `isset` now works with model and record classes.
|
200 |
+
|
201 |
+
0.5.0 (2013-10-21)
|
202 |
+
------------------
|
203 |
+
|
204 |
+
* Renamed $languages constructor parameters to $locales for both the Client
|
205 |
+
and Reader classes.
|
206 |
+
* Documentation and code clean-up (Ben Morel).
|
207 |
+
* Added the interface `GeoIp2\ProviderInterface`, which is implemented by both
|
208 |
+
`\GeoIp2\Database\Reader` and `\GeoIp2\WebService\Client`.
|
209 |
+
|
210 |
+
0.4.0 (2013-07-16)
|
211 |
+
------------------
|
212 |
+
|
213 |
+
* This is the first release with the GeoIP2 database reader. Please see the
|
214 |
+
`README.md` file and the `\GeoIp2\Database\Reader` class.
|
215 |
+
* The general exception classes were replaced with specific exception classes
|
216 |
+
representing particular types of errors, such as an authentication error.
|
217 |
+
|
218 |
+
0.3.0 (2013-07-12)
|
219 |
+
------------------
|
220 |
+
|
221 |
+
* In namespaces and class names, "GeoIP2" was renamed to "GeoIp2" to improve
|
222 |
+
consistency.
|
223 |
+
|
224 |
+
0.2.1 (2013-06-10)
|
225 |
+
------------------
|
226 |
+
|
227 |
+
* First official beta release.
|
228 |
+
* Documentation updates and corrections.
|
229 |
+
|
230 |
+
0.2.0 (2013-05-29)
|
231 |
+
------------------
|
232 |
+
|
233 |
+
* `GenericException` was renamed to `GeoIP2Exception`.
|
234 |
+
* We now support more languages. The new languages are de, es, fr, and pt-BR.
|
235 |
+
* The REST API now returns a record with data about your account. There is
|
236 |
+
a new `GeoIP\Records\MaxMind` class for this data.
|
237 |
+
* The `continentCode` attribute on `Continent` was renamed to `code`.
|
238 |
+
* Documentation updates.
|
239 |
+
|
240 |
+
0.1.1 (2013-05-14)
|
241 |
+
------------------
|
242 |
+
|
243 |
+
* Updated Guzzle version requirement.
|
244 |
+
* Fixed Composer example in README.md.
|
245 |
+
|
246 |
+
|
247 |
+
0.1.0 (2013-05-13)
|
248 |
+
------------------
|
249 |
+
|
250 |
+
* Initial release.
|
vendor/geoip2/geoip2/LICENSE
ADDED
@@ -0,0 +1,202 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
|
2 |
+
Apache License
|
3 |
+
Version 2.0, January 2004
|
4 |
+
http://www.apache.org/licenses/
|
5 |
+
|
6 |
+
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
7 |
+
|
8 |
+
1. Definitions.
|
9 |
+
|
10 |
+
"License" shall mean the terms and conditions for use, reproduction,
|
11 |
+
and distribution as defined by Sections 1 through 9 of this document.
|
12 |
+
|
13 |
+
"Licensor" shall mean the copyright owner or entity authorized by
|
14 |
+
the copyright owner that is granting the License.
|
15 |
+
|
16 |
+
"Legal Entity" shall mean the union of the acting entity and all
|
17 |
+
other entities that control, are controlled by, or are under common
|
18 |
+
control with that entity. For the purposes of this definition,
|
19 |
+
"control" means (i) the power, direct or indirect, to cause the
|
20 |
+
direction or management of such entity, whether by contract or
|
21 |
+
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
22 |
+
outstanding shares, or (iii) beneficial ownership of such entity.
|
23 |
+
|
24 |
+
"You" (or "Your") shall mean an individual or Legal Entity
|
25 |
+
exercising permissions granted by this License.
|
26 |
+
|
27 |
+
"Source" form shall mean the preferred form for making modifications,
|
28 |
+
including but not limited to software source code, documentation
|
29 |
+
source, and configuration files.
|
30 |
+
|
31 |
+
"Object" form shall mean any form resulting from mechanical
|
32 |
+
transformation or translation of a Source form, including but
|
33 |
+
not limited to compiled object code, generated documentation,
|
34 |
+
and conversions to other media types.
|
35 |
+
|
36 |
+
"Work" shall mean the work of authorship, whether in Source or
|
37 |
+
Object form, made available under the License, as indicated by a
|
38 |
+
copyright notice that is included in or attached to the work
|
39 |
+
(an example is provided in the Appendix below).
|
40 |
+
|
41 |
+
"Derivative Works" shall mean any work, whether in Source or Object
|
42 |
+
form, that is based on (or derived from) the Work and for which the
|
43 |
+
editorial revisions, annotations, elaborations, or other modifications
|
44 |
+
represent, as a whole, an original work of authorship. For the purposes
|
45 |
+
of this License, Derivative Works shall not include works that remain
|
46 |
+
separable from, or merely link (or bind by name) to the interfaces of,
|
47 |
+
the Work and Derivative Works thereof.
|
48 |
+
|
49 |
+
"Contribution" shall mean any work of authorship, including
|
50 |
+
the original version of the Work and any modifications or additions
|
51 |
+
to that Work or Derivative Works thereof, that is intentionally
|
52 |
+
submitted to Licensor for inclusion in the Work by the copyright owner
|
53 |
+
or by an individual or Legal Entity authorized to submit on behalf of
|
54 |
+
the copyright owner. For the purposes of this definition, "submitted"
|
55 |
+
means any form of electronic, verbal, or written communication sent
|
56 |
+
to the Licensor or its representatives, including but not limited to
|
57 |
+
communication on electronic mailing lists, source code control systems,
|
58 |
+
and issue tracking systems that are managed by, or on behalf of, the
|
59 |
+
Licensor for the purpose of discussing and improving the Work, but
|
60 |
+
excluding communication that is conspicuously marked or otherwise
|
61 |
+
designated in writing by the copyright owner as "Not a Contribution."
|
62 |
+
|
63 |
+
"Contributor" shall mean Licensor and any individual or Legal Entity
|
64 |
+
on behalf of whom a Contribution has been received by Licensor and
|
65 |
+
subsequently incorporated within the Work.
|
66 |
+
|
67 |
+
2. Grant of Copyright License. Subject to the terms and conditions of
|
68 |
+
this License, each Contributor hereby grants to You a perpetual,
|
69 |
+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
70 |
+
copyright license to reproduce, prepare Derivative Works of,
|
71 |
+
publicly display, publicly perform, sublicense, and distribute the
|
72 |
+
Work and such Derivative Works in Source or Object form.
|
73 |
+
|
74 |
+
3. Grant of Patent License. Subject to the terms and conditions of
|
75 |
+
this License, each Contributor hereby grants to You a perpetual,
|
76 |
+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
77 |
+
(except as stated in this section) patent license to make, have made,
|
78 |
+
use, offer to sell, sell, import, and otherwise transfer the Work,
|
79 |
+
where such license applies only to those patent claims licensable
|
80 |
+
by such Contributor that are necessarily infringed by their
|
81 |
+
Contribution(s) alone or by combination of their Contribution(s)
|
82 |
+
with the Work to which such Contribution(s) was submitted. If You
|
83 |
+
institute patent litigation against any entity (including a
|
84 |
+
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
85 |
+
or a Contribution incorporated within the Work constitutes direct
|
86 |
+
or contributory patent infringement, then any patent licenses
|
87 |
+
granted to You under this License for that Work shall terminate
|
88 |
+
as of the date such litigation is filed.
|
89 |
+
|
90 |
+
4. Redistribution. You may reproduce and distribute copies of the
|
91 |
+
Work or Derivative Works thereof in any medium, with or without
|
92 |
+
modifications, and in Source or Object form, provided that You
|
93 |
+
meet the following conditions:
|
94 |
+
|
95 |
+
(a) You must give any other recipients of the Work or
|
96 |
+
Derivative Works a copy of this License; and
|
97 |
+
|
98 |
+
(b) You must cause any modified files to carry prominent notices
|
99 |
+
stating that You changed the files; and
|
100 |
+
|
101 |
+
(c) You must retain, in the Source form of any Derivative Works
|
102 |
+
that You distribute, all copyright, patent, trademark, and
|
103 |
+
attribution notices from the Source form of the Work,
|
104 |
+
excluding those notices that do not pertain to any part of
|
105 |
+
the Derivative Works; and
|
106 |
+
|
107 |
+
(d) If the Work includes a "NOTICE" text file as part of its
|
108 |
+
distribution, then any Derivative Works that You distribute must
|
109 |
+
include a readable copy of the attribution notices contained
|
110 |
+
within such NOTICE file, excluding those notices that do not
|
111 |
+
pertain to any part of the Derivative Works, in at least one
|
112 |
+
of the following places: within a NOTICE text file distributed
|
113 |
+
as part of the Derivative Works; within the Source form or
|
114 |
+
documentation, if provided along with the Derivative Works; or,
|
115 |
+
within a display generated by the Derivative Works, if and
|
116 |
+
wherever such third-party notices normally appear. The contents
|
117 |
+
of the NOTICE file are for informational purposes only and
|
118 |
+
do not modify the License. You may add Your own attribution
|
119 |
+
notices within Derivative Works that You distribute, alongside
|
120 |
+
or as an addendum to the NOTICE text from the Work, provided
|
121 |
+
that such additional attribution notices cannot be construed
|
122 |
+
as modifying the License.
|
123 |
+
|
124 |
+
You may add Your own copyright statement to Your modifications and
|
125 |
+
may provide additional or different license terms and conditions
|
126 |
+
for use, reproduction, or distribution of Your modifications, or
|
127 |
+
for any such Derivative Works as a whole, provided Your use,
|
128 |
+
reproduction, and distribution of the Work otherwise complies with
|
129 |
+
the conditions stated in this License.
|
130 |
+
|
131 |
+
5. Submission of Contributions. Unless You explicitly state otherwise,
|
132 |
+
any Contribution intentionally submitted for inclusion in the Work
|
133 |
+
by You to the Licensor shall be under the terms and conditions of
|
134 |
+
this License, without any additional terms or conditions.
|
135 |
+
Notwithstanding the above, nothing herein shall supersede or modify
|
136 |
+
the terms of any separate license agreement you may have executed
|
137 |
+
with Licensor regarding such Contributions.
|
138 |
+
|
139 |
+
6. Trademarks. This License does not grant permission to use the trade
|
140 |
+
names, trademarks, service marks, or product names of the Licensor,
|
141 |
+
except as required for reasonable and customary use in describing the
|
142 |
+
origin of the Work and reproducing the content of the NOTICE file.
|
143 |
+
|
144 |
+
7. Disclaimer of Warranty. Unless required by applicable law or
|
145 |
+
agreed to in writing, Licensor provides the Work (and each
|
146 |
+
Contributor provides its Contributions) on an "AS IS" BASIS,
|
147 |
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
148 |
+
implied, including, without limitation, any warranties or conditions
|
149 |
+
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
150 |
+
PARTICULAR PURPOSE. You are solely responsible for determining the
|
151 |
+
appropriateness of using or redistributing the Work and assume any
|
152 |
+
risks associated with Your exercise of permissions under this License.
|
153 |
+
|
154 |
+
8. Limitation of Liability. In no event and under no legal theory,
|
155 |
+
whether in tort (including negligence), contract, or otherwise,
|
156 |
+
unless required by applicable law (such as deliberate and grossly
|
157 |
+
negligent acts) or agreed to in writing, shall any Contributor be
|
158 |
+
liable to You for damages, including any direct, indirect, special,
|
159 |
+
incidental, or consequential damages of any character arising as a
|
160 |
+
result of this License or out of the use or inability to use the
|
161 |
+
Work (including but not limited to damages for loss of goodwill,
|
162 |
+
work stoppage, computer failure or malfunction, or any and all
|
163 |
+
other commercial damages or losses), even if such Contributor
|
164 |
+
has been advised of the possibility of such damages.
|
165 |
+
|
166 |
+
9. Accepting Warranty or Additional Liability. While redistributing
|
167 |
+
the Work or Derivative Works thereof, You may choose to offer,
|
168 |
+
and charge a fee for, acceptance of support, warranty, indemnity,
|
169 |
+
or other liability obligations and/or rights consistent with this
|
170 |
+
License. However, in accepting such obligations, You may act only
|
171 |
+
on Your own behalf and on Your sole responsibility, not on behalf
|
172 |
+
of any other Contributor, and only if You agree to indemnify,
|
173 |
+
defend, and hold each Contributor harmless for any liability
|
174 |
+
incurred by, or claims asserted against, such Contributor by reason
|
175 |
+
of your accepting any such warranty or additional liability.
|
176 |
+
|
177 |
+
END OF TERMS AND CONDITIONS
|
178 |
+
|
179 |
+
APPENDIX: How to apply the Apache License to your work.
|
180 |
+
|
181 |
+
To apply the Apache License to your work, attach the following
|
182 |
+
boilerplate notice, with the fields enclosed by brackets "[]"
|
183 |
+
replaced with your own identifying information. (Don't include
|
184 |
+
the brackets!) The text should be enclosed in the appropriate
|
185 |
+
comment syntax for the file format. We also recommend that a
|
186 |
+
file or class name and description of purpose be included on the
|
187 |
+
same "printed page" as the copyright notice for easier
|
188 |
+
identification within third-party archives.
|
189 |
+
|
190 |
+
Copyright [yyyy] [name of copyright owner]
|
191 |
+
|
192 |
+
Licensed under the Apache License, Version 2.0 (the "License");
|
193 |
+
you may not use this file except in compliance with the License.
|
194 |
+
You may obtain a copy of the License at
|
195 |
+
|
196 |
+
http://www.apache.org/licenses/LICENSE-2.0
|
197 |
+
|
198 |
+
Unless required by applicable law or agreed to in writing, software
|
199 |
+
distributed under the License is distributed on an "AS IS" BASIS,
|
200 |
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
201 |
+
See the License for the specific language governing permissions and
|
202 |
+
limitations under the License.
|
vendor/geoip2/geoip2/README.md
ADDED
@@ -0,0 +1,401 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# GeoIP2 PHP API #
|
2 |
+
|
3 |
+
## Description ##
|
4 |
+
|
5 |
+
This package provides an API for the GeoIP2
|
6 |
+
[web services](http://dev.maxmind.com/geoip/geoip2/web-services) and
|
7 |
+
[databases](http://dev.maxmind.com/geoip/geoip2/downloadable). The API also
|
8 |
+
works with the free
|
9 |
+
[GeoLite2 databases](http://dev.maxmind.com/geoip/geoip2/geolite2/).
|
10 |
+
|
11 |
+
## Install via Composer ##
|
12 |
+
|
13 |
+
We recommend installing this package with [Composer](http://getcomposer.org/).
|
14 |
+
|
15 |
+
### Download Composer ###
|
16 |
+
|
17 |
+
To download Composer, run in the root directory of your project:
|
18 |
+
|
19 |
+
```bash
|
20 |
+
curl -sS https://getcomposer.org/installer | php
|
21 |
+
```
|
22 |
+
|
23 |
+
You should now have the file `composer.phar` in your project directory.
|
24 |
+
|
25 |
+
### Install Dependencies ###
|
26 |
+
|
27 |
+
Run in your project root:
|
28 |
+
|
29 |
+
```
|
30 |
+
php composer.phar require geoip2/geoip2:~2.0
|
31 |
+
```
|
32 |
+
|
33 |
+
You should now have the files `composer.json` and `composer.lock` as well as
|
34 |
+
the directory `vendor` in your project directory. If you use a version control
|
35 |
+
system, `composer.json` should be added to it.
|
36 |
+
|
37 |
+
### Require Autoloader ###
|
38 |
+
|
39 |
+
After installing the dependencies, you need to require the Composer autoloader
|
40 |
+
from your code:
|
41 |
+
|
42 |
+
```php
|
43 |
+
require 'vendor/autoload.php';
|
44 |
+
```
|
45 |
+
|
46 |
+
## Install via Phar ##
|
47 |
+
|
48 |
+
Although we strongly recommend using Composer, we also provide a
|
49 |
+
[phar archive](http://php.net/manual/en/book.phar.php) containing most of the
|
50 |
+
dependencies for GeoIP2. Our latest phar archive is available on
|
51 |
+
[our releases page](https://github.com/maxmind/GeoIP2-php/releases).
|
52 |
+
|
53 |
+
### Install Dependencies ###
|
54 |
+
|
55 |
+
In order to use the phar archive, you must have the PHP
|
56 |
+
[Phar extension](http://php.net/manual/en/book.phar.php) installed and
|
57 |
+
enabled.
|
58 |
+
|
59 |
+
If you will be making web service requests, you must have the PHP
|
60 |
+
[cURL extension](http://php.net/manual/en/book.curl.php)
|
61 |
+
installed to use this archive. For Debian based distributions, this can
|
62 |
+
typically be found in the the `php-curl` package. For other operating
|
63 |
+
systems, please consult the relevant documentation. After installing the
|
64 |
+
extension you may need to restart your web server.
|
65 |
+
|
66 |
+
If you are missing this extension, you will see errors like the following:
|
67 |
+
|
68 |
+
```
|
69 |
+
PHP Fatal error: Uncaught Error: Call to undefined function MaxMind\WebService\curl_version()
|
70 |
+
```
|
71 |
+
|
72 |
+
### Require Package ###
|
73 |
+
|
74 |
+
To use the archive, just require it from your script:
|
75 |
+
|
76 |
+
```php
|
77 |
+
require 'geoip2.phar';
|
78 |
+
```
|
79 |
+
|
80 |
+
## Optional C Extension ##
|
81 |
+
|
82 |
+
The [MaxMind DB API](https://github.com/maxmind/MaxMind-DB-Reader-php)
|
83 |
+
includes an optional C extension that you may install to dramatically increase
|
84 |
+
the performance of lookups in GeoIP2 or GeoLite2 databases. To install, please
|
85 |
+
follow the instructions included with that API.
|
86 |
+
|
87 |
+
The extension has no effect on web-service lookups.
|
88 |
+
|
89 |
+
## IP Geolocation Usage ##
|
90 |
+
|
91 |
+
IP geolocation is inherently imprecise. Locations are often near the center of
|
92 |
+
the population. Any location provided by a GeoIP2 database or web service
|
93 |
+
should not be used to identify a particular address or household.
|
94 |
+
|
95 |
+
## Database Reader ##
|
96 |
+
|
97 |
+
### Usage ###
|
98 |
+
|
99 |
+
To use this API, you must create a new `\GeoIp2\Database\Reader` object with
|
100 |
+
the path to the database file as the first argument to the constructor. You
|
101 |
+
may then call the method corresponding to the database you are using.
|
102 |
+
|
103 |
+
If the lookup succeeds, the method call will return a model class for the
|
104 |
+
record in the database. This model in turn contains multiple container
|
105 |
+
classes for the different parts of the data such as the city in which the
|
106 |
+
IP address is located.
|
107 |
+
|
108 |
+
If the record is not found, a `\GeoIp2\Exception\AddressNotFoundException`
|
109 |
+
is thrown. If the database is invalid or corrupt, a
|
110 |
+
`\MaxMind\Db\InvalidDatabaseException` will be thrown.
|
111 |
+
|
112 |
+
See the API documentation for more details.
|
113 |
+
|
114 |
+
### City Example ###
|
115 |
+
|
116 |
+
```php
|
117 |
+
<?php
|
118 |
+
require_once 'vendor/autoload.php';
|
119 |
+
use GeoIp2\Database\Reader;
|
120 |
+
|
121 |
+
// This creates the Reader object, which should be reused across
|
122 |
+
// lookups.
|
123 |
+
$reader = new Reader('/usr/local/share/GeoIP/GeoIP2-City.mmdb');
|
124 |
+
|
125 |
+
// Replace "city" with the appropriate method for your database, e.g.,
|
126 |
+
// "country".
|
127 |
+
$record = $reader->city('128.101.101.101');
|
128 |
+
|
129 |
+
print($record->country->isoCode . "\n"); // 'US'
|
130 |
+
print($record->country->name . "\n"); // 'United States'
|
131 |
+
print($record->country->names['zh-CN'] . "\n"); // '美国'
|
132 |
+
|
133 |
+
print($record->mostSpecificSubdivision->name . "\n"); // 'Minnesota'
|
134 |
+
print($record->mostSpecificSubdivision->isoCode . "\n"); // 'MN'
|
135 |
+
|
136 |
+
print($record->city->name . "\n"); // 'Minneapolis'
|
137 |
+
|
138 |
+
print($record->postal->code . "\n"); // '55455'
|
139 |
+
|
140 |
+
print($record->location->latitude . "\n"); // 44.9733
|
141 |
+
print($record->location->longitude . "\n"); // -93.2323
|
142 |
+
|
143 |
+
```
|
144 |
+
|
145 |
+
### Anonymous IP Example ###
|
146 |
+
|
147 |
+
```php
|
148 |
+
<?php
|
149 |
+
require_once 'vendor/autoload.php';
|
150 |
+
use GeoIp2\Database\Reader;
|
151 |
+
|
152 |
+
// This creates the Reader object, which should be reused across
|
153 |
+
// lookups.
|
154 |
+
$reader = new Reader('/usr/local/share/GeoIP/GeoIP2-Anonymous-IP.mmdb');
|
155 |
+
|
156 |
+
$record = $reader->anonymousIp('128.101.101.101');
|
157 |
+
|
158 |
+
if ($record->isAnonymous) { print "anon\n"; }
|
159 |
+
print($record->ipAddress . "\n"); // '128.101.101.101'
|
160 |
+
|
161 |
+
```
|
162 |
+
|
163 |
+
### Connection-Type Example ###
|
164 |
+
|
165 |
+
```php
|
166 |
+
<?php
|
167 |
+
require_once 'vendor/autoload.php';
|
168 |
+
use GeoIp2\Database\Reader;
|
169 |
+
|
170 |
+
// This creates the Reader object, which should be reused across
|
171 |
+
// lookups.
|
172 |
+
$reader = new Reader('/usr/local/share/GeoIP/GeoIP2-Connection-Type.mmdb');
|
173 |
+
|
174 |
+
$record = $reader->connectionType('128.101.101.101');
|
175 |
+
|
176 |
+
print($record->connectionType . "\n"); // 'Corporate'
|
177 |
+
print($record->ipAddress . "\n"); // '128.101.101.101'
|
178 |
+
|
179 |
+
```
|
180 |
+
|
181 |
+
### Domain Example ###
|
182 |
+
|
183 |
+
```php
|
184 |
+
<?php
|
185 |
+
require_once 'vendor/autoload.php';
|
186 |
+
use GeoIp2\Database\Reader;
|
187 |
+
|
188 |
+
// This creates the Reader object, which should be reused across
|
189 |
+
// lookups.
|
190 |
+
$reader = new Reader('/usr/local/share/GeoIP/GeoIP2-Domain.mmdb');
|
191 |
+
|
192 |
+
$record = $reader->domain('128.101.101.101');
|
193 |
+
|
194 |
+
print($record->domain . "\n"); // 'umn.edu'
|
195 |
+
print($record->ipAddress . "\n"); // '128.101.101.101'
|
196 |
+
|
197 |
+
```
|
198 |
+
|
199 |
+
### Enterprise Example ###
|
200 |
+
|
201 |
+
```php
|
202 |
+
<?php
|
203 |
+
require_once 'vendor/autoload.php';
|
204 |
+
use GeoIp2\Database\Reader;
|
205 |
+
|
206 |
+
// This creates the Reader object, which should be reused across
|
207 |
+
// lookups.
|
208 |
+
$reader = new Reader('/usr/local/share/GeoIP/GeoIP2-Enterprise.mmdb');
|
209 |
+
|
210 |
+
// Use the ->enterprise method to do a lookup in the Enterprise database
|
211 |
+
$record = $reader->enterprise('128.101.101.101');
|
212 |
+
|
213 |
+
print($record->country->confidence . "\n"); // 99
|
214 |
+
print($record->country->isoCode . "\n"); // 'US'
|
215 |
+
print($record->country->name . "\n"); // 'United States'
|
216 |
+
print($record->country->names['zh-CN'] . "\n"); // '美国'
|
217 |
+
|
218 |
+
print($record->mostSpecificSubdivision->confidence . "\n"); // 77
|
219 |
+
print($record->mostSpecificSubdivision->name . "\n"); // 'Minnesota'
|
220 |
+
print($record->mostSpecificSubdivision->isoCode . "\n"); // 'MN'
|
221 |
+
|
222 |
+
print($record->city->confidence . "\n"); // 60
|
223 |
+
print($record->city->name . "\n"); // 'Minneapolis'
|
224 |
+
|
225 |
+
print($record->postal->code . "\n"); // '55455'
|
226 |
+
|
227 |
+
print($record->location->accuracyRadius . "\n"); // 50
|
228 |
+
print($record->location->latitude . "\n"); // 44.9733
|
229 |
+
print($record->location->longitude . "\n"); // -93.2323
|
230 |
+
|
231 |
+
```
|
232 |
+
|
233 |
+
### ISP Example ###
|
234 |
+
|
235 |
+
```php
|
236 |
+
<?php
|
237 |
+
require_once 'vendor/autoload.php';
|
238 |
+
use GeoIp2\Database\Reader;
|
239 |
+
|
240 |
+
// This creates the Reader object, which should be reused across
|
241 |
+
// lookups.
|
242 |
+
$reader = new Reader('/usr/local/share/GeoIP/GeoIP2-ISP.mmdb');
|
243 |
+
|
244 |
+
$record = $reader->isp('128.101.101.101');
|
245 |
+
|
246 |
+
print($record->autonomousSystemNumber . "\n"); // 217
|
247 |
+
print($record->autonomousSystemOrganization . "\n"); // 'University of Minnesota'
|
248 |
+
print($record->isp . "\n"); // 'University of Minnesota'
|
249 |
+
print($record->organization . "\n"); // 'University of Minnesota'
|
250 |
+
|
251 |
+
print($record->ipAddress . "\n"); // '128.101.101.101'
|
252 |
+
|
253 |
+
```
|
254 |
+
|
255 |
+
## Web Service Client ##
|
256 |
+
|
257 |
+
### Usage ###
|
258 |
+
|
259 |
+
To use this API, you must create a new `\GeoIp2\WebService\Client`
|
260 |
+
object with your `$userId` 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 |
+
|
264 |
+
If the request succeeds, the method call will return a model class for the end
|
265 |
+
point you called. This model in turn contains multiple record classes, each of
|
266 |
+
which represents part of the data returned by the web service.
|
267 |
+
|
268 |
+
If there is an error, a structured exception is thrown.
|
269 |
+
|
270 |
+
See the API documentation for more details.
|
271 |
+
|
272 |
+
### Example ###
|
273 |
+
|
274 |
+
```php
|
275 |
+
<?php
|
276 |
+
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 user ID and "license_key" with your license
|
281 |
+
// key.
|
282 |
+
$client = new Client(42, 'abcdef123456');
|
283 |
+
|
284 |
+
// Replace "city" with the method corresponding to the web service that
|
285 |
+
// you are using, e.g., "country", "insights".
|
286 |
+
$record = $client->city('128.101.101.101');
|
287 |
+
|
288 |
+
print($record->country->isoCode . "\n"); // 'US'
|
289 |
+
print($record->country->name . "\n"); // 'United States'
|
290 |
+
print($record->country->names['zh-CN'] . "\n"); // '美国'
|
291 |
+
|
292 |
+
print($record->mostSpecificSubdivision->name . "\n"); // 'Minnesota'
|
293 |
+
print($record->mostSpecificSubdivision->isoCode . "\n"); // 'MN'
|
294 |
+
|
295 |
+
print($record->city->name . "\n"); // 'Minneapolis'
|
296 |
+
|
297 |
+
print($record->postal->code . "\n"); // '55455'
|
298 |
+
|
299 |
+
print($record->location->latitude . "\n"); // 44.9733
|
300 |
+
print($record->location->longitude . "\n"); // -93.2323
|
301 |
+
|
302 |
+
```
|
303 |
+
|
304 |
+
## Values to use for Database or Array Keys ##
|
305 |
+
|
306 |
+
**We strongly discourage you from using a value from any `names` property as
|
307 |
+
a key in a database or array.**
|
308 |
+
|
309 |
+
These names may change between releases. Instead we recommend using one of the
|
310 |
+
following:
|
311 |
+
|
312 |
+
* `GeoIp2\Record\City` - `$city->geonameId`
|
313 |
+
* `GeoIp2\Record\Continent` - `$continent->code` or `$continent->geonameId`
|
314 |
+
* `GeoIp2\Record\Country` and `GeoIp2\Record\RepresentedCountry` -
|
315 |
+
`$country->isoCode` or `$country->geonameId`
|
316 |
+
* `GeoIp2\Record\Subdivision` - `$subdivision->isoCode` or `$subdivision->geonameId`
|
317 |
+
|
318 |
+
### What data is returned? ###
|
319 |
+
|
320 |
+
While many of the end points return the same basic records, the attributes
|
321 |
+
which can be populated vary between end points. In addition, while an end
|
322 |
+
point may offer a particular piece of data, MaxMind does not always have every
|
323 |
+
piece of data for any given IP address.
|
324 |
+
|
325 |
+
Because of these factors, it is possible for any end point to return a record
|
326 |
+
where some or all of the attributes are unpopulated.
|
327 |
+
|
328 |
+
See the
|
329 |
+
[GeoIP2 Precision web service docs](http://dev.maxmind.com/geoip/geoip2/web-services)
|
330 |
+
for details on what data each end point may return.
|
331 |
+
|
332 |
+
The only piece of data which is always returned is the `ipAddress`
|
333 |
+
attribute in the `GeoIp2\Record\Traits` record.
|
334 |
+
|
335 |
+
## Integration with GeoNames ##
|
336 |
+
|
337 |
+
[GeoNames](http://www.geonames.org/) offers web services and downloadable
|
338 |
+
databases with data on geographical features around the world, including
|
339 |
+
populated places. They offer both free and paid premium data. Each
|
340 |
+
feature is unique identified by a `geonameId`, which is an integer.
|
341 |
+
|
342 |
+
Many of the records returned by the GeoIP2 web services and databases
|
343 |
+
include a `geonameId` property. This is the ID of a geographical feature
|
344 |
+
(city, region, country, etc.) in the GeoNames database.
|
345 |
+
|
346 |
+
Some of the data that MaxMind provides is also sourced from GeoNames. We
|
347 |
+
source things like place names, ISO codes, and other similar data from
|
348 |
+
the GeoNames premium data set.
|
349 |
+
|
350 |
+
## Reporting data problems ##
|
351 |
+
|
352 |
+
If the problem you find is that an IP address is incorrectly mapped,
|
353 |
+
please
|
354 |
+
[submit your correction to MaxMind](http://www.maxmind.com/en/correction).
|
355 |
+
|
356 |
+
If you find some other sort of mistake, like an incorrect spelling,
|
357 |
+
please check the [GeoNames site](http://www.geonames.org/) first. Once
|
358 |
+
you've searched for a place and found it on the GeoNames map view, there
|
359 |
+
are a number of links you can use to correct data ("move", "edit",
|
360 |
+
"alternate names", etc.). Once the correction is part of the GeoNames
|
361 |
+
data set, it will be automatically incorporated into future MaxMind
|
362 |
+
releases.
|
363 |
+
|
364 |
+
If you are a paying MaxMind customer and you're not sure where to submit
|
365 |
+
a correction, please
|
366 |
+
[contact MaxMind support](http://www.maxmind.com/en/support) for help.
|
367 |
+
|
368 |
+
## Other Support ##
|
369 |
+
|
370 |
+
Please report all issues with this code using the
|
371 |
+
[GitHub issue tracker](https://github.com/maxmind/GeoIP2-php/issues).
|
372 |
+
|
373 |
+
If you are having an issue with a MaxMind service that is not specific
|
374 |
+
to the client API, please see
|
375 |
+
[our support page](http://www.maxmind.com/en/support).
|
376 |
+
|
377 |
+
## Requirements ##
|
378 |
+
|
379 |
+
This library requires PHP 5.4 or greater. This library works and is tested
|
380 |
+
with HHVM.
|
381 |
+
|
382 |
+
This library also relies on the [MaxMind DB Reader](https://github.com/maxmind/MaxMind-DB-Reader-php).
|
383 |
+
|
384 |
+
## Contributing ##
|
385 |
+
|
386 |
+
Patches and pull requests are encouraged. All code should follow the PSR-2
|
387 |
+
style guidelines. Please include unit tests whenever possible. You may obtain
|
388 |
+
the test data for the maxmind-db folder by running `git submodule update
|
389 |
+
--init --recursive` or adding `--recursive` to your initial clone, or from
|
390 |
+
https://github.com/maxmind/MaxMind-DB
|
391 |
+
|
392 |
+
## Versioning ##
|
393 |
+
|
394 |
+
The GeoIP2 PHP API uses [Semantic Versioning](http://semver.org/).
|
395 |
+
|
396 |
+
## Copyright and License ##
|
397 |
+
|
398 |
+
This software is Copyright (c) 2013-2017 by MaxMind, Inc.
|
399 |
+
|
400 |
+
This is free software, licensed under the Apache License, Version 2.0.
|
401 |
+
|
vendor/geoip2/geoip2/composer.json
ADDED
@@ -0,0 +1,31 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"name": "geoip2/geoip2",
|
3 |
+
"description": "MaxMind GeoIP2 PHP API",
|
4 |
+
"keywords": ["geoip", "geoip2", "geolocation", "ip", "maxmind"],
|
5 |
+
"homepage": "https://github.com/maxmind/GeoIP2-php",
|
6 |
+
"type": "library",
|
7 |
+
"license": "Apache-2.0",
|
8 |
+
"authors": [
|
9 |
+
{
|
10 |
+
"name": "Gregory J. Oschwald",
|
11 |
+
"email": "goschwald@maxmind.com",
|
12 |
+
"homepage": "http://www.maxmind.com/"
|
13 |
+
}
|
14 |
+
],
|
15 |
+
"require": {
|
16 |
+
"maxmind-db/reader": "~1.0",
|
17 |
+
"maxmind/web-service-common": "~0.4",
|
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": {
|
28 |
+
"GeoIp2\\": "src"
|
29 |
+
}
|
30 |
+
}
|
31 |
+
}
|
vendor/geoip2/geoip2/src/Database/Reader.php
ADDED
@@ -0,0 +1,283 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace GeoIp2\Database;
|
4 |
+
|
5 |
+
use GeoIp2\Exception\AddressNotFoundException;
|
6 |
+
use GeoIp2\ProviderInterface;
|
7 |
+
use MaxMind\Db\Reader as DbReader;
|
8 |
+
use MaxMind\Db\Reader\InvalidDatabaseException;
|
9 |
+
|
10 |
+
/**
|
11 |
+
* Instances of this class provide a reader for the GeoIP2 database format.
|
12 |
+
* IP addresses can be looked up using the database specific methods.
|
13 |
+
*
|
14 |
+
* ## Usage ##
|
15 |
+
*
|
16 |
+
* The basic API for this class is the same for every database. First, you
|
17 |
+
* create a reader object, specifying a file name. You then call the method
|
18 |
+
* corresponding to the specific database, passing it the IP address you want
|
19 |
+
* to look up.
|
20 |
+
*
|
21 |
+
* If the request succeeds, the method call will return a model class for
|
22 |
+
* the method you called. This model in turn contains multiple record classes,
|
23 |
+
* each of which represents part of the data returned by the database. If
|
24 |
+
* the database does not contain the requested information, the attributes
|
25 |
+
* on the record class will have a `null` value.
|
26 |
+
*
|
27 |
+
* If the address is not in the database, an
|
28 |
+
* {@link \GeoIp2\Exception\AddressNotFoundException} exception will be
|
29 |
+
* thrown. If an invalid IP address is passed to one of the methods, a
|
30 |
+
* SPL {@link \InvalidArgumentException} will be thrown. If the database is
|
31 |
+
* corrupt or invalid, a {@link \MaxMind\Db\Reader\InvalidDatabaseException}
|
32 |
+
* will be thrown.
|
33 |
+
*/
|
34 |
+
class Reader implements ProviderInterface
|
35 |
+
{
|
36 |
+
private $dbReader;
|
37 |
+
private $locales;
|
38 |
+
|
39 |
+
/**
|
40 |
+
* Constructor.
|
41 |
+
*
|
42 |
+
* @param string $filename the path to the GeoIP2 database file
|
43 |
+
* @param array $locales list of locale codes to use in name property
|
44 |
+
* from most preferred to least preferred
|
45 |
+
*
|
46 |
+
* @throws \MaxMind\Db\Reader\InvalidDatabaseException if the database
|
47 |
+
* is corrupt or invalid
|
48 |
+
*/
|
49 |
+
public function __construct(
|
50 |
+
$filename,
|
51 |
+
$locales = ['en']
|
52 |
+
) {
|
53 |
+
$this->dbReader = new DbReader($filename);
|
54 |
+
$this->locales = $locales;
|
55 |
+
}
|
56 |
+
|
57 |
+
/**
|
58 |
+
* This method returns a GeoIP2 City model.
|
59 |
+
*
|
60 |
+
* @param string $ipAddress an IPv4 or IPv6 address as a string
|
61 |
+
*
|
62 |
+
* @throws \GeoIp2\Exception\AddressNotFoundException if the address is
|
63 |
+
* not in the database
|
64 |
+
* @throws \MaxMind\Db\Reader\InvalidDatabaseException if the database
|
65 |
+
* is corrupt or invalid
|
66 |
+
*
|
67 |
+
* @return \GeoIp2\Model\City
|
68 |
+
*/
|
69 |
+
public function city($ipAddress)
|
70 |
+
{
|
71 |
+
return $this->modelFor('City', 'City', $ipAddress);
|
72 |
+
}
|
73 |
+
|
74 |
+
/**
|
75 |
+
* This method returns a GeoIP2 Country model.
|
76 |
+
*
|
77 |
+
* @param string $ipAddress an IPv4 or IPv6 address as a string
|
78 |
+
*
|
79 |
+
* @throws \GeoIp2\Exception\AddressNotFoundException if the address is
|
80 |
+
* not in the database
|
81 |
+
* @throws \MaxMind\Db\Reader\InvalidDatabaseException if the database
|
82 |
+
* is corrupt or invalid
|
83 |
+
*
|
84 |
+
* @return \GeoIp2\Model\Country
|
85 |
+
*/
|
86 |
+
public function country($ipAddress)
|
87 |
+
{
|
88 |
+
return $this->modelFor('Country', 'Country', $ipAddress);
|
89 |
+
}
|
90 |
+
|
91 |
+
/**
|
92 |
+
* This method returns a GeoIP2 Anonymous IP model.
|
93 |
+
*
|
94 |
+
* @param string $ipAddress an IPv4 or IPv6 address as a string
|
95 |
+
*
|
96 |
+
* @throws \GeoIp2\Exception\AddressNotFoundException if the address is
|
97 |
+
* not in the database
|
98 |
+
* @throws \MaxMind\Db\Reader\InvalidDatabaseException if the database
|
99 |
+
* is corrupt or invalid
|
100 |
+
*
|
101 |
+
* @return \GeoIp2\Model\AnonymousIp
|
102 |
+
*/
|
103 |
+
public function anonymousIp($ipAddress)
|
104 |
+
{
|
105 |
+
return $this->flatModelFor(
|
106 |
+
'AnonymousIp',
|
107 |
+
'GeoIP2-Anonymous-IP',
|
108 |
+
$ipAddress
|
109 |
+
);
|
110 |
+
}
|
111 |
+
|
112 |
+
/**
|
113 |
+
* This method returns a GeoLite2 ASN model.
|
114 |
+
*
|
115 |
+
* @param string $ipAddress an IPv4 or IPv6 address as a string
|
116 |
+
*
|
117 |
+
* @throws \GeoIp2\Exception\AddressNotFoundException if the address is
|
118 |
+
* not in the database
|
119 |
+
* @throws \MaxMind\Db\Reader\InvalidDatabaseException if the database
|
120 |
+
* is corrupt or invalid
|
121 |
+
*
|
122 |
+
* @return \GeoIp2\Model\Asn
|
123 |
+
*/
|
124 |
+
public function asn($ipAddress)
|
125 |
+
{
|
126 |
+
return $this->flatModelFor(
|
127 |
+
'Asn',
|
128 |
+
'GeoLite2-ASN',
|
129 |
+
$ipAddress
|
130 |
+
);
|
131 |
+
}
|
132 |
+
|
133 |
+
/**
|
134 |
+
* This method returns a GeoIP2 Connection Type model.
|
135 |
+
*
|
136 |
+
* @param string $ipAddress an IPv4 or IPv6 address as a string
|
137 |
+
*
|
138 |
+
* @throws \GeoIp2\Exception\AddressNotFoundException if the address is
|
139 |
+
* not in the database
|
140 |
+
* @throws \MaxMind\Db\Reader\InvalidDatabaseException if the database
|
141 |
+
* is corrupt or invalid
|
142 |
+
*
|
143 |
+
* @return \GeoIp2\Model\ConnectionType
|
144 |
+
*/
|
145 |
+
public function connectionType($ipAddress)
|
146 |
+
{
|
147 |
+
return $this->flatModelFor(
|
148 |
+
'ConnectionType',
|
149 |
+
'GeoIP2-Connection-Type',
|
150 |
+
$ipAddress
|
151 |
+
);
|
152 |
+
}
|
153 |
+
|
154 |
+
/**
|
155 |
+
* This method returns a GeoIP2 Domain model.
|
156 |
+
*
|
157 |
+
* @param string $ipAddress an IPv4 or IPv6 address as a string
|
158 |
+
*
|
159 |
+
* @throws \GeoIp2\Exception\AddressNotFoundException if the address is
|
160 |
+
* not in the database
|
161 |
+
* @throws \MaxMind\Db\Reader\InvalidDatabaseException if the database
|
162 |
+
* is corrupt or invalid
|
163 |
+
*
|
164 |
+
* @return \GeoIp2\Model\Domain
|
165 |
+
*/
|
166 |
+
public function domain($ipAddress)
|
167 |
+
{
|
168 |
+
return $this->flatModelFor(
|
169 |
+
'Domain',
|
170 |
+
'GeoIP2-Domain',
|
171 |
+
$ipAddress
|
172 |
+
);
|
173 |
+
}
|
174 |
+
|
175 |
+
/**
|
176 |
+
* This method returns a GeoIP2 Enterprise model.
|
177 |
+
*
|
178 |
+
* @param string $ipAddress an IPv4 or IPv6 address as a string
|
179 |
+
*
|
180 |
+
* @throws \GeoIp2\Exception\AddressNotFoundException if the address is
|
181 |
+
* not in the database
|
182 |
+
* @throws \MaxMind\Db\Reader\InvalidDatabaseException if the database
|
183 |
+
* is corrupt or invalid
|
184 |
+
*
|
185 |
+
* @return \GeoIp2\Model\Enterprise
|
186 |
+
*/
|
187 |
+
public function enterprise($ipAddress)
|
188 |
+
{
|
189 |
+
return $this->modelFor('Enterprise', 'Enterprise', $ipAddress);
|
190 |
+
}
|
191 |
+
|
192 |
+
/**
|
193 |
+
* This method returns a GeoIP2 ISP model.
|
194 |
+
*
|
195 |
+
* @param string $ipAddress an IPv4 or IPv6 address as a string
|
196 |
+
*
|
197 |
+
* @throws \GeoIp2\Exception\AddressNotFoundException if the address is
|
198 |
+
* not in the database
|
199 |
+
* @throws \MaxMind\Db\Reader\InvalidDatabaseException if the database
|
200 |
+
* is corrupt or invalid
|
201 |
+
*
|
202 |
+
* @return \GeoIp2\Model\Isp
|
203 |
+
*/
|
204 |
+
public function isp($ipAddress)
|
205 |
+
{
|
206 |
+
return $this->flatModelFor(
|
207 |
+
'Isp',
|
208 |
+
'GeoIP2-ISP',
|
209 |
+
$ipAddress
|
210 |
+
);
|
211 |
+
}
|
212 |
+
|
213 |
+
private function modelFor($class, $type, $ipAddress)
|
214 |
+
{
|
215 |
+
$record = $this->getRecord($class, $type, $ipAddress);
|
216 |
+
|
217 |
+
$record['traits']['ip_address'] = $ipAddress;
|
218 |
+
$class = 'GeoIp2\\Model\\' . $class;
|
219 |
+
|
220 |
+
return new $class($record, $this->locales);
|
221 |
+
}
|
222 |
+
|
223 |
+
private function flatModelFor($class, $type, $ipAddress)
|
224 |
+
{
|
225 |
+
$record = $this->getRecord($class, $type, $ipAddress);
|
226 |
+
|
227 |
+
$record['ip_address'] = $ipAddress;
|
228 |
+
$class = 'GeoIp2\\Model\\' . $class;
|
229 |
+
|
230 |
+
return new $class($record);
|
231 |
+
}
|
232 |
+
|
233 |
+
private function getRecord($class, $type, $ipAddress)
|
234 |
+
{
|
235 |
+
if (strpos($this->metadata()->databaseType, $type) === false) {
|
236 |
+
$method = lcfirst($class);
|
237 |
+
throw new \BadMethodCallException(
|
238 |
+
"The $method method cannot be used to open a "
|
239 |
+
. $this->metadata()->databaseType . ' database'
|
240 |
+
);
|
241 |
+
}
|
242 |
+
$record = $this->dbReader->get($ipAddress);
|
243 |
+
if ($record === null) {
|
244 |
+
throw new AddressNotFoundException(
|
245 |
+
"The address $ipAddress is not in the database."
|
246 |
+
);
|
247 |
+
}
|
248 |
+
if (!is_array($record)) {
|
249 |
+
// This can happen on corrupt databases. Generally,
|
250 |
+
// MaxMind\Db\Reader will throw a
|
251 |
+
// MaxMind\Db\Reader\InvalidDatabaseException, but occasionally
|
252 |
+
// the lookup may result in a record that looks valid but is not
|
253 |
+
// an array. This mostly happens when the user is ignoring all
|
254 |
+
// exceptions and the more frequent InvalidDatabaseException
|
255 |
+
// exceptions go unnoticed.
|
256 |
+
throw new InvalidDatabaseException(
|
257 |
+
"Expected an array when looking up $ipAddress but received: "
|
258 |
+
. gettype($record)
|
259 |
+
);
|
260 |
+
}
|
261 |
+
|
262 |
+
return $record;
|
263 |
+
}
|
264 |
+
|
265 |
+
/**
|
266 |
+
* @throws \InvalidArgumentException if arguments are passed to the method
|
267 |
+
* @throws \BadMethodCallException if the database has been closed
|
268 |
+
*
|
269 |
+
* @return \MaxMind\Db\Reader\Metadata object for the database
|
270 |
+
*/
|
271 |
+
public function metadata()
|
272 |
+
{
|
273 |
+
return $this->dbReader->metadata();
|
274 |
+
}
|
275 |
+
|
276 |
+
/**
|
277 |
+
* Closes the GeoIP2 database and returns the resources to the system.
|
278 |
+
*/
|
279 |
+
public function close()
|
280 |
+
{
|
281 |
+
$this->dbReader->close();
|
282 |
+
}
|
283 |
+
}
|
vendor/geoip2/geoip2/src/Exception/AddressNotFoundException.php
ADDED
@@ -0,0 +1,10 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace GeoIp2\Exception;
|
4 |
+
|
5 |
+
/**
|
6 |
+
* This class represents a generic error.
|
7 |
+
*/
|
8 |
+
class AddressNotFoundException extends GeoIp2Exception
|
9 |
+
{
|
10 |
+
}
|
vendor/geoip2/geoip2/src/Exception/AuthenticationException.php
ADDED
@@ -0,0 +1,10 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace GeoIp2\Exception;
|
4 |
+
|
5 |
+
/**
|
6 |
+
* This class represents a generic error.
|
7 |
+
*/
|
8 |
+
class AuthenticationException extends GeoIp2Exception
|
9 |
+
{
|
10 |
+
}
|
vendor/geoip2/geoip2/src/Exception/GeoIp2Exception.php
ADDED
@@ -0,0 +1,10 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace GeoIp2\Exception;
|
4 |
+
|
5 |
+
/**
|
6 |
+
* This class represents a generic error.
|
7 |
+
*/
|
8 |
+
class GeoIp2Exception extends \Exception
|
9 |
+
{
|
10 |
+
}
|
vendor/geoip2/geoip2/src/Exception/HttpException.php
ADDED
@@ -0,0 +1,24 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace GeoIp2\Exception;
|
4 |
+
|
5 |
+
/**
|
6 |
+
* This class represents an HTTP transport error.
|
7 |
+
*/
|
8 |
+
class HttpException extends GeoIp2Exception
|
9 |
+
{
|
10 |
+
/**
|
11 |
+
* The URI queried.
|
12 |
+
*/
|
13 |
+
public $uri;
|
14 |
+
|
15 |
+
public function __construct(
|
16 |
+
$message,
|
17 |
+
$httpStatus,
|
18 |
+
$uri,
|
19 |
+
\Exception $previous = null
|
20 |
+
) {
|
21 |
+
$this->uri = $uri;
|
22 |
+
parent::__construct($message, $httpStatus, $previous);
|
23 |
+
}
|
24 |
+
}
|
vendor/geoip2/geoip2/src/Exception/InvalidRequestException.php
ADDED
@@ -0,0 +1,26 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace GeoIp2\Exception;
|
4 |
+
|
5 |
+
/**
|
6 |
+
* This class represents an error returned by MaxMind's GeoIP2
|
7 |
+
* web service.
|
8 |
+
*/
|
9 |
+
class InvalidRequestException extends HttpException
|
10 |
+
{
|
11 |
+
/**
|
12 |
+
* The code returned by the MaxMind web service.
|
13 |
+
*/
|
14 |
+
public $error;
|
15 |
+
|
16 |
+
public function __construct(
|
17 |
+
$message,
|
18 |
+
$error,
|
19 |
+
$httpStatus,
|
20 |
+
$uri,
|
21 |
+
\Exception $previous = null
|
22 |
+
) {
|
23 |
+
$this->error = $error;
|
24 |
+
parent::__construct($message, $httpStatus, $uri, $previous);
|
25 |
+
}
|
26 |
+
}
|
vendor/geoip2/geoip2/src/Exception/OutOfQueriesException.php
ADDED
@@ -0,0 +1,10 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace GeoIp2\Exception;
|
4 |
+
|
5 |
+
/**
|
6 |
+
* This class represents a generic error.
|
7 |
+
*/
|
8 |
+
class OutOfQueriesException extends GeoIp2Exception
|
9 |
+
{
|
10 |
+
}
|
vendor/geoip2/geoip2/src/Model/AbstractModel.php
ADDED
@@ -0,0 +1,67 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace GeoIp2\Model;
|
4 |
+
|
5 |
+
/**
|
6 |
+
* @ignore
|
7 |
+
*/
|
8 |
+
abstract class AbstractModel implements \JsonSerializable
|
9 |
+
{
|
10 |
+
protected $raw;
|
11 |
+
|
12 |
+
/**
|
13 |
+
* @ignore
|
14 |
+
*
|
15 |
+
* @param mixed $raw
|
16 |
+
*/
|
17 |
+
public function __construct($raw)
|
18 |
+
{
|
19 |
+
$this->raw = $raw;
|
20 |
+
}
|
21 |
+
|
22 |
+
/**
|
23 |
+
* @ignore
|
24 |
+
*
|
25 |
+
* @param mixed $field
|
26 |
+
*/
|
27 |
+
protected function get($field)
|
28 |
+
{
|
29 |
+
if (isset($this->raw[$field])) {
|
30 |
+
return $this->raw[$field];
|
31 |
+
}
|
32 |
+
if (preg_match('/^is_/', $field)) {
|
33 |
+
return false;
|
34 |
+
}
|
35 |
+
|
36 |
+
return null;
|
37 |
+
}
|
38 |
+
|
39 |
+
/**
|
40 |
+
* @ignore
|
41 |
+
*
|
42 |
+
* @param mixed $attr
|
43 |
+
*/
|
44 |
+
public function __get($attr)
|
45 |
+
{
|
46 |
+
if ($attr !== 'instance' && property_exists($this, $attr)) {
|
47 |
+
return $this->$attr;
|
48 |
+
}
|
49 |
+
|
50 |
+
throw new \RuntimeException("Unknown attribute: $attr");
|
51 |
+
}
|
52 |
+
|
53 |
+
/**
|
54 |
+
* @ignore
|
55 |
+
*
|
56 |
+
* @param mixed $attr
|
57 |
+
*/
|
58 |
+
public function __isset($attr)
|
59 |
+
{
|
60 |
+
return $attr !== 'instance' && isset($this->$attr);
|
61 |
+
}
|
62 |
+
|
63 |
+
public function jsonSerialize()
|
64 |
+
{
|
65 |
+
return $this->raw;
|
66 |
+
}
|
67 |
+
}
|
vendor/geoip2/geoip2/src/Model/AnonymousIp.php
ADDED
@@ -0,0 +1,46 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace GeoIp2\Model;
|
4 |
+
|
5 |
+
/**
|
6 |
+
* This class provides the GeoIP2 Anonymous IP model.
|
7 |
+
*
|
8 |
+
* @property-read bool $isAnonymous This is true if the IP address belongs to
|
9 |
+
* any sort of anonymous network.
|
10 |
+
* @property-read bool $isAnonymousVpn This is true if the IP address belongs to
|
11 |
+
* an anonymous VPN system.
|
12 |
+
* @property-read bool $isHostingProvider This is true if the IP address belongs
|
13 |
+
* to a hosting provider.
|
14 |
+
* @property-read bool $isPublicProxy This is true if the IP address belongs to
|
15 |
+
* a public proxy.
|
16 |
+
* @property-read bool $isTorExitNode This is true if the IP address is a Tor
|
17 |
+
* exit node.
|
18 |
+
* @property-read string $ipAddress The IP address that the data in the model is
|
19 |
+
* for.
|
20 |
+
*/
|
21 |
+
class AnonymousIp extends AbstractModel
|
22 |
+
{
|
23 |
+
protected $isAnonymous;
|
24 |
+
protected $isAnonymousVpn;
|
25 |
+
protected $isHostingProvider;
|
26 |
+
protected $isPublicProxy;
|
27 |
+
protected $isTorExitNode;
|
28 |
+
protected $ipAddress;
|
29 |
+
|
30 |
+
/**
|
31 |
+
* @ignore
|
32 |
+
*
|
33 |
+
* @param mixed $raw
|
34 |
+
*/
|
35 |
+
public function __construct($raw)
|
36 |
+
{
|
37 |
+
parent::__construct($raw);
|
38 |
+
|
39 |
+
$this->isAnonymous = $this->get('is_anonymous');
|
40 |
+
$this->isAnonymousVpn = $this->get('is_anonymous_vpn');
|
41 |
+
$this->isHostingProvider = $this->get('is_hosting_provider');
|
42 |
+
$this->isPublicProxy = $this->get('is_public_proxy');
|
43 |
+
$this->isTorExitNode = $this->get('is_tor_exit_node');
|
44 |
+
$this->ipAddress = $this->get('ip_address');
|
45 |
+
}
|
46 |
+
}
|
vendor/geoip2/geoip2/src/Model/Asn.php
ADDED
@@ -0,0 +1,35 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace GeoIp2\Model;
|
4 |
+
|
5 |
+
/**
|
6 |
+
* This class provides the GeoLite2 ASN model.
|
7 |
+
*
|
8 |
+
* @property-read int|null $autonomousSystemNumber The autonomous system number
|
9 |
+
* associated with the IP address.
|
10 |
+
* @property-read string|null $autonomousSystemOrganization The organization
|
11 |
+
* associated with the registered autonomous system number for the IP
|
12 |
+
* address.
|
13 |
+
* @property-read string $ipAddress The IP address that the data in the model is
|
14 |
+
* for.
|
15 |
+
*/
|
16 |
+
class Asn extends AbstractModel
|
17 |
+
{
|
18 |
+
protected $autonomousSystemNumber;
|
19 |
+
protected $autonomousSystemOrganization;
|
20 |
+
protected $ipAddress;
|
21 |
+
|
22 |
+
/**
|
23 |
+
* @ignore
|
24 |
+
*
|
25 |
+
* @param mixed $raw
|
26 |
+
*/
|
27 |
+
public function __construct($raw)
|
28 |
+
{
|
29 |
+
parent::__construct($raw);
|
30 |
+
$this->autonomousSystemNumber = $this->get('autonomous_system_number');
|
31 |
+
$this->autonomousSystemOrganization =
|
32 |
+
$this->get('autonomous_system_organization');
|
33 |
+
$this->ipAddress = $this->get('ip_address');
|
34 |
+
}
|
35 |
+
}
|
vendor/geoip2/geoip2/src/Model/City.php
ADDED
@@ -0,0 +1,133 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace GeoIp2\Model;
|
4 |
+
|
5 |
+
/**
|
6 |
+
* Model class for the data returned by GeoIP2 City web service and database.
|
7 |
+
*
|
8 |
+
* The only difference between the City and Insights model classes is which
|
9 |
+
* fields in each record may be populated. See
|
10 |
+
* http://dev.maxmind.com/geoip/geoip2/web-services more details.
|
11 |
+
*
|
12 |
+
* @property-read \GeoIp2\Record\City $city City data for the requested IP
|
13 |
+
* address.
|
14 |
+
* @property-read \GeoIp2\Record\Continent $continent Continent data for the
|
15 |
+
* requested IP address.
|
16 |
+
* @property-read \GeoIp2\Record\Country $country Country data for the requested
|
17 |
+
* IP address. This object represents the country where MaxMind believes the
|
18 |
+
* end user is located.
|
19 |
+
* @property-read \GeoIp2\Record\Location $location Location data for the
|
20 |
+
* requested IP address.
|
21 |
+
* @property-read \GeoIp2\Record\Postal $postal Postal data for the
|
22 |
+
* requested IP address.
|
23 |
+
* @property-read \GeoIp2\Record\MaxMind $maxmind Data related to your MaxMind
|
24 |
+
* account.
|
25 |
+
* @property-read \GeoIp2\Record\Country $registeredCountry Registered country
|
26 |
+
* data for the requested IP address. This record represents the country
|
27 |
+
* where the ISP has registered a given IP block and may differ from the
|
28 |
+
* user's country.
|
29 |
+
* @property-read \GeoIp2\Record\RepresentedCountry $representedCountry
|
30 |
+
* Represented country data for the requested IP address. The represented
|
31 |
+
* country is used for things like military bases. It is only present when
|
32 |
+
* the represented country differs from the country.
|
33 |
+
* @property-read array $subdivisions An array of {@link \GeoIp2\Record\Subdivision}
|
34 |
+
* objects representing the country subdivisions for the requested IP
|
35 |
+
* address. The number and type of subdivisions varies by country, but a
|
36 |
+
* subdivision is typically a state, province, county, etc. Subdivisions
|
37 |
+
* are ordered from most general (largest) to most specific (smallest).
|
38 |
+
* If the response did not contain any subdivisions, this method returns
|
39 |
+
* an empty array.
|
40 |
+
* @property-read \GeoIp2\Record\Subdivision $mostSpecificSubdivision An object
|
41 |
+
* representing the most specific subdivision returned. If the response
|
42 |
+
* did not contain any subdivisions, this method returns an empty
|
43 |
+
* {@link \GeoIp2\Record\Subdivision} object.
|
44 |
+
* @property-read \GeoIp2\Record\Traits $traits Data for the traits of the
|
45 |
+
* requested IP address.
|
46 |
+
*/
|
47 |
+
class City extends Country
|
48 |
+
{
|
49 |
+
/**
|
50 |
+
* @ignore
|
51 |
+
*/
|
52 |
+
protected $city;
|
53 |
+
/**
|
54 |
+
* @ignore
|
55 |
+
*/
|
56 |
+
protected $location;
|
57 |
+
/**
|
58 |
+
* @ignore
|
59 |
+
*/
|
60 |
+
protected $postal;
|
61 |
+
/**
|
62 |
+
* @ignore
|
63 |
+
*/
|
64 |
+
protected $subdivisions = [];
|
65 |
+
|
66 |
+
/**
|
67 |
+
* @ignore
|
68 |
+
*
|
69 |
+
* @param mixed $raw
|
70 |
+
* @param mixed $locales
|
71 |
+
*/
|
72 |
+
public function __construct($raw, $locales = ['en'])
|
73 |
+
{
|
74 |
+
parent::__construct($raw, $locales);
|
75 |
+
|
76 |
+
$this->city = new \GeoIp2\Record\City($this->get('city'), $locales);
|
77 |
+
$this->location = new \GeoIp2\Record\Location($this->get('location'));
|
78 |
+
$this->postal = new \GeoIp2\Record\Postal($this->get('postal'));
|
79 |
+
|
80 |
+
$this->createSubdivisions($raw, $locales);
|
81 |
+
}
|
82 |
+
|
83 |
+
private function createSubdivisions($raw, $locales)
|
84 |
+
{
|
85 |
+
if (!isset($raw['subdivisions'])) {
|
86 |
+
return;
|
87 |
+
}
|
88 |
+
|
89 |
+
foreach ($raw['subdivisions'] as $sub) {
|
90 |
+
array_push(
|
91 |
+
$this->subdivisions,
|
92 |
+
new \GeoIp2\Record\Subdivision($sub, $locales)
|
93 |
+
);
|
94 |
+
}
|
95 |
+
}
|
96 |
+
|
97 |
+
/**
|
98 |
+
* @ignore
|
99 |
+
*
|
100 |
+
* @param mixed $attr
|
101 |
+
*/
|
102 |
+
public function __get($attr)
|
103 |
+
{
|
104 |
+
if ($attr === 'mostSpecificSubdivision') {
|
105 |
+
return $this->$attr();
|
106 |
+
}
|
107 |
+
|
108 |
+
return parent::__get($attr);
|
109 |
+
}
|
110 |
+
|
111 |
+
/**
|
112 |
+
* @ignore
|
113 |
+
*
|
114 |
+
* @param mixed $attr
|
115 |
+
*/
|
116 |
+
public function __isset($attr)
|
117 |
+
{
|
118 |
+
if ($attr === 'mostSpecificSubdivision') {
|
119 |
+
// We always return a mostSpecificSubdivision, even if it is the
|
120 |
+
// empty subdivision
|
121 |
+
return true;
|
122 |
+
}
|
123 |
+
|
124 |
+
return parent::__isset($attr);
|
125 |
+
}
|
126 |
+
|
127 |
+
private function mostSpecificSubdivision()
|
128 |
+
{
|
129 |
+
return empty($this->subdivisions) ?
|
130 |
+
new \GeoIp2\Record\Subdivision([], $this->locales) :
|
131 |
+
end($this->subdivisions);
|
132 |
+
}
|
133 |
+
}
|
vendor/geoip2/geoip2/src/Model/ConnectionType.php
ADDED
@@ -0,0 +1,31 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace GeoIp2\Model;
|
4 |
+
|
5 |
+
/**
|
6 |
+
* This class provides the GeoIP2 Connection-Type model.
|
7 |
+
*
|
8 |
+
* @property-read string|null $connectionType The connection type may take the
|
9 |
+
* following values: "Dialup", "Cable/DSL", "Corporate", "Cellular".
|
10 |
+
* Additional values may be added in the future.
|
11 |
+
* @property-read string $ipAddress The IP address that the data in the model is
|
12 |
+
* for.
|
13 |
+
*/
|
14 |
+
class ConnectionType extends AbstractModel
|
15 |
+
{
|
16 |
+
protected $connectionType;
|
17 |
+
protected $ipAddress;
|
18 |
+
|
19 |
+
/**
|
20 |
+
* @ignore
|
21 |
+
*
|
22 |
+
* @param mixed $raw
|
23 |
+
*/
|
24 |
+
public function __construct($raw)
|
25 |
+
{
|
26 |
+
parent::__construct($raw);
|
27 |
+
|
28 |
+
$this->connectionType = $this->get('connection_type');
|
29 |
+
$this->ipAddress = $this->get('ip_address');
|
30 |
+
}
|
31 |
+
}
|
vendor/geoip2/geoip2/src/Model/Country.php
ADDED
@@ -0,0 +1,71 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace GeoIp2\Model;
|
4 |
+
|
5 |
+
/**
|
6 |
+
* Model class for the data returned by GeoIP2 Country web service and database.
|
7 |
+
*
|
8 |
+
* The only difference between the City and Insights model classes is which
|
9 |
+
* fields in each record may be populated. See
|
10 |
+
* http://dev.maxmind.com/geoip/geoip2/web-services more details.
|
11 |
+
*
|
12 |
+
* @property-read \GeoIp2\Record\Continent $continent Continent data for the
|
13 |
+
* requested IP address.
|
14 |
+
* @property-read \GeoIp2\Record\Country $country Country data for the requested
|
15 |
+
* IP address. This object represents the country where MaxMind believes the
|
16 |
+
* end user is located.
|
17 |
+
* @property-read \GeoIp2\Record\MaxMind $maxmind Data related to your MaxMind
|
18 |
+
* account.
|
19 |
+
* @property-read \GeoIp2\Record\Country $registeredCountry Registered country
|
20 |
+
* data for the requested IP address. This record represents the country
|
21 |
+
* where the ISP has registered a given IP block and may differ from the
|
22 |
+
* user's country.
|
23 |
+
* @property-read \GeoIp2\Record\RepresentedCountry $representedCountry
|
24 |
+
* Represented country data for the requested IP address. The represented
|
25 |
+
* country is used for things like military bases. It is only present when
|
26 |
+
* the represented country differs from the country.
|
27 |
+
* @property-read \GeoIp2\Record\Traits $traits Data for the traits of the
|
28 |
+
* requested IP address.
|
29 |
+
*/
|
30 |
+
class Country extends AbstractModel
|
31 |
+
{
|
32 |
+
protected $continent;
|
33 |
+
protected $country;
|
34 |
+
protected $locales;
|
35 |
+
protected $maxmind;
|
36 |
+
protected $registeredCountry;
|
37 |
+
protected $representedCountry;
|
38 |
+
protected $traits;
|
39 |
+
|
40 |
+
/**
|
41 |
+
* @ignore
|
42 |
+
*
|
43 |
+
* @param mixed $raw
|
44 |
+
* @param mixed $locales
|
45 |
+
*/
|
46 |
+
public function __construct($raw, $locales = ['en'])
|
47 |
+
{
|
48 |
+
parent::__construct($raw);
|
49 |
+
|
50 |
+
$this->continent = new \GeoIp2\Record\Continent(
|
51 |
+
$this->get('continent'),
|
52 |
+
$locales
|
53 |
+
);
|
54 |
+
$this->country = new \GeoIp2\Record\Country(
|
55 |
+
$this->get('country'),
|
56 |
+
$locales
|
57 |
+
);
|
58 |
+
$this->maxmind = new \GeoIp2\Record\MaxMind($this->get('maxmind'));
|
59 |
+
$this->registeredCountry = new \GeoIp2\Record\Country(
|
60 |
+
$this->get('registered_country'),
|
61 |
+
$locales
|
62 |
+
);
|
63 |
+
$this->representedCountry = new \GeoIp2\Record\RepresentedCountry(
|
64 |
+
$this->get('represented_country'),
|
65 |
+
$locales
|
66 |
+
);
|
67 |
+
$this->traits = new \GeoIp2\Record\Traits($this->get('traits'));
|
68 |
+
|
69 |
+
$this->locales = $locales;
|
70 |
+
}
|
71 |
+
}
|
vendor/geoip2/geoip2/src/Model/Domain.php
ADDED
@@ -0,0 +1,31 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace GeoIp2\Model;
|
4 |
+
|
5 |
+
/**
|
6 |
+
* This class provides the GeoIP2 Domain model.
|
7 |
+
*
|
8 |
+
* @property-read string|null $domain The second level domain associated with the
|
9 |
+
* IP address. This will be something like "example.com" or
|
10 |
+
* "example.co.uk", not "foo.example.com".
|
11 |
+
* @property-read string $ipAddress The IP address that the data in the model is
|
12 |
+
* for.
|
13 |
+
*/
|
14 |
+
class Domain extends AbstractModel
|
15 |
+
{
|
16 |
+
protected $domain;
|
17 |
+
protected $ipAddress;
|
18 |
+
|
19 |
+
/**
|
20 |
+
* @ignore
|
21 |
+
*
|
22 |
+
* @param mixed $raw
|
23 |
+
*/
|
24 |
+
public function __construct($raw)
|
25 |
+
{
|
26 |
+
parent::__construct($raw);
|
27 |
+
|
28 |
+
$this->domain = $this->get('domain');
|
29 |
+
$this->ipAddress = $this->get('ip_address');
|
30 |
+
}
|
31 |
+
}
|
vendor/geoip2/geoip2/src/Model/Enterprise.php
ADDED
@@ -0,0 +1,47 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace GeoIp2\Model;
|
4 |
+
|
5 |
+
/**
|
6 |
+
* Model class for the data returned by GeoIP2 Enterprise database lookups.
|
7 |
+
*
|
8 |
+
* The only difference between the City and Enterprise model classes is which
|
9 |
+
* fields in each record may be populated. See
|
10 |
+
* http://dev.maxmind.com/geoip/geoip2/web-services more details.
|
11 |
+
*
|
12 |
+
* @property-read \GeoIp2\Record\City $city City data for the requested IP
|
13 |
+
* address.
|
14 |
+
* @property-read \GeoIp2\Record\Continent $continent Continent data for the
|
15 |
+
* requested IP address.
|
16 |
+
* @property-read \GeoIp2\Record\Country $country Country data for the requested
|
17 |
+
* IP address. This object represents the country where MaxMind believes the
|
18 |
+
* end user is located.
|
19 |
+
* @property-read \GeoIp2\Record\Location $location Location data for the
|
20 |
+
* requested IP address.
|
21 |
+
* @property-read \GeoIp2\Record\MaxMind $maxmind Data related to your MaxMind
|
22 |
+
* account.
|
23 |
+
* @property-read \GeoIp2\Record\Country $registeredCountry Registered country
|
24 |
+
* data for the requested IP address. This record represents the country
|
25 |
+
* where the ISP has registered a given IP block and may differ from the
|
26 |
+
* user's country.
|
27 |
+
* @property-read \GeoIp2\Record\RepresentedCountry $representedCountry
|
28 |
+
* Represented country data for the requested IP address. The represented
|
29 |
+
* country is used for things like military bases. It is only present when
|
30 |
+
* the represented country differs from the country.
|
31 |
+
* @property-read array $subdivisions An array of {@link \GeoIp2\Record\Subdivision}
|
32 |
+
* objects representing the country subdivisions for the requested IP
|
33 |
+
* address. The number and type of subdivisions varies by country, but a
|
34 |
+
* subdivision is typically a state, province, county, etc. Subdivisions
|
35 |
+
* are ordered from most general (largest) to most specific (smallest).
|
36 |
+
* If the response did not contain any subdivisions, this method returns
|
37 |
+
* an empty array.
|
38 |
+
* @property-read \GeoIp2\Record\Subdivision $mostSpecificSubdivision An object
|
39 |
+
* representing the most specific subdivision returned. If the response
|
40 |
+
* did not contain any subdivisions, this method returns an empty
|
41 |
+
* {@link \GeoIp2\Record\Subdivision} object.
|
42 |
+
* @property-read \GeoIp2\Record\Traits $traits Data for the traits of the
|
43 |
+
* requested IP address.
|
44 |
+
*/
|
45 |
+
class Enterprise extends City
|
46 |
+
{
|
47 |
+
}
|
vendor/geoip2/geoip2/src/Model/Insights.php
ADDED
@@ -0,0 +1,47 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace GeoIp2\Model;
|
4 |
+
|
5 |
+
/**
|
6 |
+
* Model class for the data returned by GeoIP2 Precision: Insights web service.
|
7 |
+
*
|
8 |
+
* The only difference between the City and Insights model classes is which
|
9 |
+
* fields in each record may be populated. See
|
10 |
+
* http://dev.maxmind.com/geoip/geoip2/web-services more details.
|
11 |
+
*
|
12 |
+
* @property-read \GeoIp2\Record\City $city City data for the requested IP
|
13 |
+
* address.
|
14 |
+
* @property-read \GeoIp2\Record\Continent $continent Continent data for the
|
15 |
+
* requested IP address.
|
16 |
+
* @property-read \GeoIp2\Record\Country $country Country data for the requested
|
17 |
+
* IP address. This object represents the country where MaxMind believes the
|
18 |
+
* end user is located.
|
19 |
+
* @property-read \GeoIp2\Record\Location $location Location data for the
|
20 |
+
* requested IP address.
|
21 |
+
* @property-read \GeoIp2\Record\MaxMind $maxmind Data related to your MaxMind
|
22 |
+
* account.
|
23 |
+
* @property-read \GeoIp2\Record\Country $registeredCountry Registered country
|
24 |
+
* data for the requested IP address. This record represents the country
|
25 |
+
* where the ISP has registered a given IP block and may differ from the
|
26 |
+
* user's country.
|
27 |
+
* @property-read \GeoIp2\Record\RepresentedCountry $representedCountry
|
28 |
+
* Represented country data for the requested IP address. The represented
|
29 |
+
* country is used for things like military bases. It is only present when
|
30 |
+
* the represented country differs from the country.
|
31 |
+
* @property-read array $subdivisions An array of {@link \GeoIp2\Record\Subdivision}
|
32 |
+
* objects representing the country subdivisions for the requested IP
|
33 |
+
* address. The number and type of subdivisions varies by country, but a
|
34 |
+
* subdivision is typically a state, province, county, etc. Subdivisions
|
35 |
+
* are ordered from most general (largest) to most specific (smallest).
|
36 |
+
* If the response did not contain any subdivisions, this method returns
|
37 |
+
* an empty array.
|
38 |
+
* @property-read \GeoIp2\Record\Subdivision $mostSpecificSubdivision An object
|
39 |
+
* representing the most specific subdivision returned. If the response
|
40 |
+
* did not contain any subdivisions, this method returns an empty
|
41 |
+
* {@link \GeoIp2\Record\Subdivision} object.
|
42 |
+
* @property-read \GeoIp2\Record\Traits $traits Data for the traits of the
|
43 |
+
* requested IP address.
|
44 |
+
*/
|
45 |
+
class Insights extends City
|
46 |
+
{
|
47 |
+
}
|
vendor/geoip2/geoip2/src/Model/Isp.php
ADDED
@@ -0,0 +1,44 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace GeoIp2\Model;
|
4 |
+
|
5 |
+
/**
|
6 |
+
* This class provides the GeoIP2 ISP model.
|
7 |
+
*
|
8 |
+
* @property-read int|null $autonomousSystemNumber The autonomous system number
|
9 |
+
* associated with the IP address.
|
10 |
+
* @property-read string|null $autonomousSystemOrganization The organization
|
11 |
+
* associated with the registered autonomous system number for the IP
|
12 |
+
* address.
|
13 |
+
* @property-read string|null $isp The name of the ISP associated with the IP
|
14 |
+
* address.
|
15 |
+
* @property-read string|null $organization The name of the organization associated
|
16 |
+
* with the IP address.
|
17 |
+
* @property-read string $ipAddress The IP address that the data in the model is
|
18 |
+
* for.
|
19 |
+
*/
|
20 |
+
class Isp extends AbstractModel
|
21 |
+
{
|
22 |
+
protected $autonomousSystemNumber;
|
23 |
+
protected $autonomousSystemOrganization;
|
24 |
+
protected $isp;
|
25 |
+
protected $organization;
|
26 |
+
protected $ipAddress;
|
27 |
+
|
28 |
+
/**
|
29 |
+
* @ignore
|
30 |
+
*
|
31 |
+
* @param mixed $raw
|
32 |
+
*/
|
33 |
+
public function __construct($raw)
|
34 |
+
{
|
35 |
+
parent::__construct($raw);
|
36 |
+
$this->autonomousSystemNumber = $this->get('autonomous_system_number');
|
37 |
+
$this->autonomousSystemOrganization =
|
38 |
+
$this->get('autonomous_system_organization');
|
39 |
+
$this->isp = $this->get('isp');
|
40 |
+
$this->organization = $this->get('organization');
|
41 |
+
|
42 |
+
$this->ipAddress = $this->get('ip_address');
|
43 |
+
}
|
44 |
+
}
|
vendor/geoip2/geoip2/src/ProviderInterface.php
ADDED
@@ -0,0 +1,20 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace GeoIp2;
|
4 |
+
|
5 |
+
interface ProviderInterface
|
6 |
+
{
|
7 |
+
/**
|
8 |
+
* @param string $ipAddress an IPv4 or IPv6 address to lookup
|
9 |
+
*
|
10 |
+
* @return \GeoIp2\Model\Country a Country model for the requested IP address
|
11 |
+
*/
|
12 |
+
public function country($ipAddress);
|
13 |
+
|
14 |
+
/**
|
15 |
+
* @param string $ipAddress an IPv4 or IPv6 address to lookup
|
16 |
+
*
|
17 |
+
* @return \GeoIp2\Model\City a City model for the requested IP address
|
18 |
+
*/
|
19 |
+
public function city($ipAddress);
|
20 |
+
}
|
vendor/geoip2/geoip2/src/Record/AbstractPlaceRecord.php
ADDED
@@ -0,0 +1,66 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace GeoIp2\Record;
|
4 |
+
|
5 |
+
abstract class AbstractPlaceRecord extends AbstractRecord
|
6 |
+
{
|
7 |
+
private $locales;
|
8 |
+
|
9 |
+
/**
|
10 |
+
* @ignore
|
11 |
+
*
|
12 |
+
* @param mixed $record
|
13 |
+
* @param mixed $locales
|
14 |
+
*/
|
15 |
+
public function __construct($record, $locales = ['en'])
|
16 |
+
{
|
17 |
+
$this->locales = $locales;
|
18 |
+
parent::__construct($record);
|
19 |
+
}
|
20 |
+
|
21 |
+
/**
|
22 |
+
* @ignore
|
23 |
+
*
|
24 |
+
* @param mixed $attr
|
25 |
+
*/
|
26 |
+
public function __get($attr)
|
27 |
+
{
|
28 |
+
if ($attr === 'name') {
|
29 |
+
return $this->name();
|
30 |
+
}
|
31 |
+
|
32 |
+
return parent::__get($attr);
|
33 |
+
}
|
34 |
+
|
35 |
+
/**
|
36 |
+
* @ignore
|
37 |
+
*
|
38 |
+
* @param mixed $attr
|
39 |
+
*/
|
40 |
+
public function __isset($attr)
|
41 |
+
{
|
42 |
+
if ($attr === 'name') {
|
43 |
+
return $this->firstSetNameLocale() === null ? false : true;
|
44 |
+
}
|
45 |
+
|
46 |
+
return parent::__isset($attr);
|
47 |
+
}
|
48 |
+
|
49 |
+
private function name()
|
50 |
+
{
|
51 |
+
$locale = $this->firstSetNameLocale();
|
52 |
+
|
53 |
+
return $locale === null ? null : $this->names[$locale];
|
54 |
+
}
|
55 |
+
|
56 |
+
private function firstSetNameLocale()
|
57 |
+
{
|
58 |
+
foreach ($this->locales as $locale) {
|
59 |
+
if (isset($this->names[$locale])) {
|
60 |
+
return $locale;
|
61 |
+
}
|
62 |
+
}
|
63 |
+
|
64 |
+
return null;
|
65 |
+
}
|
66 |
+
}
|
vendor/geoip2/geoip2/src/Record/AbstractRecord.php
ADDED
@@ -0,0 +1,61 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace GeoIp2\Record;
|
4 |
+
|
5 |
+
abstract class AbstractRecord implements \JsonSerializable
|
6 |
+
{
|
7 |
+
private $record;
|
8 |
+
|
9 |
+
/**
|
10 |
+
* @ignore
|
11 |
+
*
|
12 |
+
* @param mixed $record
|
13 |
+
*/
|
14 |
+
public function __construct($record)
|
15 |
+
{
|
16 |
+
$this->record = isset($record) ? $record : [];
|
17 |
+
}
|
18 |
+
|
19 |
+
/**
|
20 |
+
* @ignore
|
21 |
+
*
|
22 |
+
* @param mixed $attr
|
23 |
+
*/
|
24 |
+
public function __get($attr)
|
25 |
+
{
|
26 |
+
// XXX - kind of ugly but greatly reduces boilerplate code
|
27 |
+
$key = $this->attributeToKey($attr);
|
28 |
+
|
29 |
+
if ($this->__isset($attr)) {
|
30 |
+
return $this->record[$key];
|
31 |
+
} elseif ($this->validAttribute($attr)) {
|
32 |
+
if (preg_match('/^is_/', $key)) {
|
33 |
+
return false;
|
34 |
+
}
|
35 |
+
|
36 |
+
return null;
|
37 |
+
}
|
38 |
+
throw new \RuntimeException("Unknown attribute: $attr");
|
39 |
+
}
|
40 |
+
|
41 |
+
public function __isset($attr)
|
42 |
+
{
|
43 |
+
return $this->validAttribute($attr) &&
|
44 |
+
isset($this->record[$this->attributeToKey($attr)]);
|
45 |
+
}
|
46 |
+
|
47 |
+
private function attributeToKey($attr)
|
48 |
+
{
|
49 |
+
return strtolower(preg_replace('/([A-Z])/', '_\1', $attr));
|
50 |
+
}
|
51 |
+
|
52 |
+
private function validAttribute($attr)
|
53 |
+
{
|
54 |
+
return in_array($attr, $this->validAttributes, true);
|
55 |
+
}
|
56 |
+
|
57 |
+
public function jsonSerialize()
|
58 |
+
{
|
59 |
+
return $this->record;
|
60 |
+
}
|
61 |
+
}
|
vendor/geoip2/geoip2/src/Record/City.php
ADDED
@@ -0,0 +1,29 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace GeoIp2\Record;
|
4 |
+
|
5 |
+
/**
|
6 |
+
* City-level data associated with an IP address.
|
7 |
+
*
|
8 |
+
* This record is returned by all location services and databases besides
|
9 |
+
* Country.
|
10 |
+
*
|
11 |
+
* @property-read int|null $confidence A value from 0-100 indicating MaxMind's
|
12 |
+
* confidence that the city is correct. This attribute is only available
|
13 |
+
* from the Insights service and the GeoIP2 Enterprise database.
|
14 |
+
* @property-read int|null $geonameId The GeoName ID for the city. This attribute
|
15 |
+
* is returned by all location services and databases.
|
16 |
+
* @property-read string|null $name The name of the city based on the locales list
|
17 |
+
* passed to the constructor. This attribute is returned by all location
|
18 |
+
* services and databases.
|
19 |
+
* @property-read array|null $names A array map where the keys are locale codes
|
20 |
+
* and the values are names. This attribute is returned by all location
|
21 |
+
* services and databases.
|
22 |
+
*/
|
23 |
+
class City extends AbstractPlaceRecord
|
24 |
+
{
|
25 |
+
/**
|
26 |
+
* @ignore
|
27 |
+
*/
|
28 |
+
protected $validAttributes = ['confidence', 'geonameId', 'names'];
|
29 |
+
}
|
vendor/geoip2/geoip2/src/Record/Continent.php
ADDED
@@ -0,0 +1,32 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace GeoIp2\Record;
|
4 |
+
|
5 |
+
/**
|
6 |
+
* Contains data for the continent record associated with an IP address.
|
7 |
+
*
|
8 |
+
* This record is returned by all location services and databases.
|
9 |
+
*
|
10 |
+
* @property-read string|null $code A two character continent code like "NA" (North
|
11 |
+
* America) or "OC" (Oceania). This attribute is returned by all location
|
12 |
+
* services and databases.
|
13 |
+
* @property-read int|null $geonameId The GeoName ID for the continent. This
|
14 |
+
* attribute is returned by all location services and databases.
|
15 |
+
* @property-read string|null $name Returns the name of the continent based on the
|
16 |
+
* locales list passed to the constructor. This attribute is returned by all location
|
17 |
+
* services and databases.
|
18 |
+
* @property-read array|null $names An array map where the keys are locale codes
|
19 |
+
* and the values are names. This attribute is returned by all location
|
20 |
+
* services and databases.
|
21 |
+
*/
|
22 |
+
class Continent extends AbstractPlaceRecord
|
23 |
+
{
|
24 |
+
/**
|
25 |
+
* @ignore
|
26 |
+
*/
|
27 |
+
protected $validAttributes = [
|
28 |
+
'code',
|
29 |
+
'geonameId',
|
30 |
+
'names',
|
31 |
+
];
|
32 |
+
}
|
vendor/geoip2/geoip2/src/Record/Country.php
ADDED
@@ -0,0 +1,37 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace GeoIp2\Record;
|
4 |
+
|
5 |
+
/**
|
6 |
+
* Contains data for the country record associated with an IP address.
|
7 |
+
*
|
8 |
+
* This record is returned by all location services and databases.
|
9 |
+
*
|
10 |
+
* @property-read int|null $confidence A value from 0-100 indicating MaxMind's
|
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
|
18 |
+
* and databases.
|
19 |
+
* @property-read string|null $name The name of the country based on the locales
|
20 |
+
* list passed to the constructor. This attribute is returned by all location
|
21 |
+
* services and databases.
|
22 |
+
* @property-read array|null $names An array map where the keys are locale codes
|
23 |
+
* and the values are names. This attribute is returned by all location
|
24 |
+
* services and databases.
|
25 |
+
*/
|
26 |
+
class Country extends AbstractPlaceRecord
|
27 |
+
{
|
28 |
+
/**
|
29 |
+
* @ignore
|
30 |
+
*/
|
31 |
+
protected $validAttributes = [
|
32 |
+
'confidence',
|
33 |
+
'geonameId',
|
34 |
+
'isoCode',
|
35 |
+
'names',
|
36 |
+
];
|
37 |
+
}
|
vendor/geoip2/geoip2/src/Record/Location.php
ADDED
@@ -0,0 +1,52 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace GeoIp2\Record;
|
4 |
+
|
5 |
+
/**
|
6 |
+
* Contains data for the location record associated with an IP address.
|
7 |
+
*
|
8 |
+
* This record is returned by all location services and databases besides
|
9 |
+
* Country.
|
10 |
+
*
|
11 |
+
* @property-read int|null $averageIncome The average income in US dollars
|
12 |
+
* associated with the requested IP address. This attribute is only available
|
13 |
+
* from the Insights service.
|
14 |
+
* @property-read int|null $accuracyRadius The approximate accuracy radius in
|
15 |
+
* kilometers around the latitude and longitude for the IP address. This is
|
16 |
+
* the radius where we have a 67% confidence that the device using the IP
|
17 |
+
* address resides within the circle centered at the latitude and longitude
|
18 |
+
* with the provided radius.
|
19 |
+
* @property-read float|null $latitude The approximate latitude of the location
|
20 |
+
* associated with the IP address. This value is not precise and should not be
|
21 |
+
* used to identify a particular address or household.
|
22 |
+
* @property-read float|null $longitude The approximate longitude of the location
|
23 |
+
* associated with the IP address. This value is not precise and should not be
|
24 |
+
* used to identify a particular address or household.
|
25 |
+
* @property-read int|null $populationDensity The estimated population per square
|
26 |
+
* kilometer associated with the IP address. This attribute is only available
|
27 |
+
* from the Insights service.
|
28 |
+
* @property-read int|null $metroCode The metro code of the location if the location
|
29 |
+
* is in the US. MaxMind returns the same metro codes as the
|
30 |
+
* {@link * https://developers.google.com/adwords/api/docs/appendix/cities-DMAregions
|
31 |
+
* Google AdWords API}.
|
32 |
+
* @property-read string|null $timeZone The time zone associated with location, as
|
33 |
+
* specified by the {@link http://www.iana.org/time-zones IANA Time Zone
|
34 |
+
* Database}, e.g., "America/New_York".
|
35 |
+
*/
|
36 |
+
class Location extends AbstractRecord
|
37 |
+
{
|
38 |
+
/**
|
39 |
+
* @ignore
|
40 |
+
*/
|
41 |
+
protected $validAttributes = [
|
42 |
+
'averageIncome',
|
43 |
+
'accuracyRadius',
|
44 |
+
'latitude',
|
45 |
+
'longitude',
|
46 |
+
'metroCode',
|
47 |
+
'populationDensity',
|
48 |
+
'postalCode',
|
49 |
+
'postalConfidence',
|
50 |
+
'timeZone',
|
51 |
+
];
|
52 |
+
}
|
vendor/geoip2/geoip2/src/Record/MaxMind.php
ADDED
@@ -0,0 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace GeoIp2\Record;
|
4 |
+
|
5 |
+
/**
|
6 |
+
* Contains data about your account.
|
7 |
+
*
|
8 |
+
* This record is returned by all location services and databases.
|
9 |
+
*
|
10 |
+
* @property-read int|null $queriesRemaining The number of remaining queries you
|
11 |
+
* have for the service you are calling.
|
12 |
+
*/
|
13 |
+
class MaxMind extends AbstractRecord
|
14 |
+
{
|
15 |
+
/**
|
16 |
+
* @ignore
|
17 |
+
*/
|
18 |
+
protected $validAttributes = ['queriesRemaining'];
|
19 |
+
}
|
vendor/geoip2/geoip2/src/Record/Postal.php
ADDED
@@ -0,0 +1,26 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace GeoIp2\Record;
|
4 |
+
|
5 |
+
/**
|
6 |
+
* Contains data for the postal record associated with an IP address.
|
7 |
+
*
|
8 |
+
* This record is returned by all location databases and services besides
|
9 |
+
* Country.
|
10 |
+
*
|
11 |
+
* @property-read string|null $code The postal code of the location. Postal codes
|
12 |
+
* are not available for all countries. In some countries, this will only
|
13 |
+
* contain part of the postal code. This attribute is returned by all location
|
14 |
+
* databases and services besides Country.
|
15 |
+
* @property-read int|null $confidence A value from 0-100 indicating MaxMind's
|
16 |
+
* confidence that the postal code is correct. This attribute is only
|
17 |
+
* available from the Insights service and the GeoIP2 Enterprise
|
18 |
+
* database.
|
19 |
+
*/
|
20 |
+
class Postal extends AbstractRecord
|
21 |
+
{
|
22 |
+
/**
|
23 |
+
* @ignore
|
24 |
+
*/
|
25 |
+
protected $validAttributes = ['code', 'confidence'];
|
26 |
+
}
|
vendor/geoip2/geoip2/src/Record/RepresentedCountry.php
ADDED
@@ -0,0 +1,35 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace GeoIp2\Record;
|
4 |
+
|
5 |
+
/**
|
6 |
+
* Contains data for the represented country associated with an IP address.
|
7 |
+
*
|
8 |
+
* This class contains the country-level data associated with an IP address
|
9 |
+
* for the IP's represented country. The represented country is the country
|
10 |
+
* represented by something like a military base.
|
11 |
+
*
|
12 |
+
* @property-read int|null $confidence A value from 0-100 indicating MaxMind's
|
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
|
19 |
+
* passed to the constructor.
|
20 |
+
* @property-read array|null $names An array map where the keys are locale codes and
|
21 |
+
* the values are names.
|
22 |
+
* @property-read string|null $type A string indicating the type of entity that is
|
23 |
+
* representing the country. Currently we only return <code>military</code>
|
24 |
+
* but this could expand to include other types in the future.
|
25 |
+
*/
|
26 |
+
class RepresentedCountry extends Country
|
27 |
+
{
|
28 |
+
protected $validAttributes = [
|
29 |
+
'confidence',
|
30 |
+
'geonameId',
|
31 |
+
'isoCode',
|
32 |
+
'names',
|
33 |
+
'type',
|
34 |
+
];
|
35 |
+
}
|
vendor/geoip2/geoip2/src/Record/Subdivision.php
ADDED
@@ -0,0 +1,40 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace GeoIp2\Record;
|
4 |
+
|
5 |
+
/**
|
6 |
+
* Contains data for the subdivisions associated with an IP address.
|
7 |
+
*
|
8 |
+
* This record is returned by all location databases and services besides
|
9 |
+
* Country.
|
10 |
+
*
|
11 |
+
* @property-read int|null $confidence This is a value from 0-100 indicating
|
12 |
+
* MaxMind's confidence that the subdivision is correct. This attribute is
|
13 |
+
* only available from the Insights service and the GeoIP2 Enterprise
|
14 |
+
* database.
|
15 |
+
* @property-read int|null $geonameId This is a GeoName ID for the subdivision.
|
16 |
+
* This attribute is returned by all location databases and services besides
|
17 |
+
* Country.
|
18 |
+
* @property-read string|null $isoCode This is a string up to three characters long
|
19 |
+
* contain the subdivision portion of the
|
20 |
+
* {@link * http://en.wikipedia.org/wiki/ISO_3166-2 ISO 3166-2 code}. This attribute
|
21 |
+
* is returned by all location databases and services except Country.
|
22 |
+
* @property-read string|null $name The name of the subdivision based on the
|
23 |
+
* locales list passed to the constructor. This attribute is returned by all
|
24 |
+
* location databases and services besides Country.
|
25 |
+
* @property-read array|null $names An array map where the keys are locale codes
|
26 |
+
* and the values are names. This attribute is returned by all location
|
27 |
+
* databases and services besides Country.
|
28 |
+
*/
|
29 |
+
class Subdivision extends AbstractPlaceRecord
|
30 |
+
{
|
31 |
+
/**
|
32 |
+
* @ignore
|
33 |
+
*/
|
34 |
+
protected $validAttributes = [
|
35 |
+
'confidence',
|
36 |
+
'geonameId',
|
37 |
+
'isoCode',
|
38 |
+
'names',
|
39 |
+
];
|
40 |
+
}
|
vendor/geoip2/geoip2/src/Record/Traits.php
ADDED
@@ -0,0 +1,114 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace GeoIp2\Record;
|
4 |
+
|
5 |
+
/**
|
6 |
+
* Contains data for the traits record associated with an IP address.
|
7 |
+
*
|
8 |
+
* This record is returned by all location services and databases.
|
9 |
+
*
|
10 |
+
* @property-read int|null $autonomousSystemNumber The
|
11 |
+
* {@link * http://en.wikipedia.org/wiki/Autonomous_system_(Internet) autonomous
|
12 |
+
* system number} associated with the IP address. This attribute is only
|
13 |
+
* available from the City and Insights web service and the GeoIP2
|
14 |
+
* Enterprise database.
|
15 |
+
* @property-read string|null $autonomousSystemOrganization The organization
|
16 |
+
* associated with the registered {@link * http://en.wikipedia.org/wiki/Autonomous_system_(Internet) autonomous
|
17 |
+
* system number} for the IP address. This attribute is only available from
|
18 |
+
* the City and Insights web service and the GeoIP2 Enterprise
|
19 |
+
* database.
|
20 |
+
* @property-read string|null $connectionType The connection type may take the
|
21 |
+
* following values: "Dialup", "Cable/DSL", "Corporate", "Cellular".
|
22 |
+
* Additional values may be added in the future. This attribute is only
|
23 |
+
* available in the GeoIP2 Enterprise database.
|
24 |
+
* @property-read string|null $domain The second level domain associated with the
|
25 |
+
* IP address. This will be something like "example.com" or "example.co.uk",
|
26 |
+
* not "foo.example.com". This attribute is only available from the
|
27 |
+
* City and Insights web service and the GeoIP2 Enterprise
|
28 |
+
* database.
|
29 |
+
* @property-read string $ipAddress The IP address that the data in the model
|
30 |
+
* is for. If you performed a "me" lookup against the web service, this
|
31 |
+
* will be the externally routable IP address for the system the code is
|
32 |
+
* running on. If the system is behind a NAT, this may differ from the IP
|
33 |
+
* address locally assigned to it. This attribute is returned by all end
|
34 |
+
* points.
|
35 |
+
* @property-read bool $isAnonymous This is true if the IP address belongs to
|
36 |
+
* any sort of anonymous network. This property is only available from GeoIP2
|
37 |
+
* Precision Insights.
|
38 |
+
* @property-read bool $isAnonymousProxy *Deprecated.* Please see our
|
39 |
+
* {@link * https://www.maxmind.com/en/geoip2-anonymous-ip-database GeoIP2
|
40 |
+
* Anonymous IP database} to determine whether the IP address is used by an
|
41 |
+
* anonymizing service.
|
42 |
+
* @property-read bool $isAnonymousVpn This is true if the IP address belongs to
|
43 |
+
* an anonymous VPN system. This property is only available from GeoIP2
|
44 |
+
* Precision Insights.
|
45 |
+
* @property-read bool $isHostingProvider This is true if the IP address belongs
|
46 |
+
* to a hosting provider. This property is only available from GeoIP2
|
47 |
+
* Precision Insights.
|
48 |
+
* @property-read bool $isLegitimateProxy This attribute is true if MaxMind
|
49 |
+
* believes this IP address to be a legitimate proxy, such as an internal
|
50 |
+
* VPN used by a corporation. This attribute is only available in the GeoIP2
|
51 |
+
* Enterprise database.
|
52 |
+
* @property-read bool $isPublicProxy This is true if the IP address belongs to
|
53 |
+
* a public proxy. This property is only available from GeoIP2 Precision
|
54 |
+
* Insights.
|
55 |
+
* @property-read bool $isSatelliteProvider *Deprecated.* Due to the
|
56 |
+
* increased coverage by mobile carriers, very few satellite providers now
|
57 |
+
* serve multiple countries. As a result, the output does not provide
|
58 |
+
* sufficiently relevant data for us to maintain it.
|
59 |
+
* @property-read bool $isTorExitNode This is true if the IP address is a Tor
|
60 |
+
* exit node. This property is only available from GeoIP2 Precision Insights.
|
61 |
+
* @property-read string|null $isp The name of the ISP associated with the IP
|
62 |
+
* address. This attribute is only available from the City and Insights web
|
63 |
+
* services and the GeoIP2 Enterprise database.
|
64 |
+
* @property-read string|null $organization The name of the organization associated
|
65 |
+
* with the IP address. This attribute is only available from the City and
|
66 |
+
* Insights web services and the GeoIP2 Enterprise database.
|
67 |
+
* @property-read string|null $userType <p>The user type associated with the IP
|
68 |
+
* address. This can be one of the following values:</p>
|
69 |
+
* <ul>
|
70 |
+
* <li>business
|
71 |
+
* <li>cafe
|
72 |
+
* <li>cellular
|
73 |
+
* <li>college
|
74 |
+
* <li>content_delivery_network
|
75 |
+
* <li>dialup
|
76 |
+
* <li>government
|
77 |
+
* <li>hosting
|
78 |
+
* <li>library
|
79 |
+
* <li>military
|
80 |
+
* <li>residential
|
81 |
+
* <li>router
|
82 |
+
* <li>school
|
83 |
+
* <li>search_engine_spider
|
84 |
+
* <li>traveler
|
85 |
+
* </ul>
|
86 |
+
* <p>
|
87 |
+
* This attribute is only available from the Insights web service and the
|
88 |
+
* GeoIP2 Enterprise database.
|
89 |
+
* </p>
|
90 |
+
*/
|
91 |
+
class Traits extends AbstractRecord
|
92 |
+
{
|
93 |
+
/**
|
94 |
+
* @ignore
|
95 |
+
*/
|
96 |
+
protected $validAttributes = [
|
97 |
+
'autonomousSystemNumber',
|
98 |
+
'autonomousSystemOrganization',
|
99 |
+
'connectionType',
|
100 |
+
'domain',
|
101 |
+
'ipAddress',
|
102 |
+
'isAnonymous',
|
103 |
+
'isAnonymousProxy',
|
104 |
+
'isAnonymousVpn',
|
105 |
+
'isHostingProvider',
|
106 |
+
'isLegitimateProxy',
|
107 |
+
'isp',
|
108 |
+
'isPublicProxy',
|
109 |
+
'isSatelliteProvider',
|
110 |
+
'isTorExitNode',
|
111 |
+
'organization',
|
112 |
+
'userType',
|
113 |
+
];
|
114 |
+
}
|
vendor/geoip2/geoip2/src/WebService/Client.php
ADDED
@@ -0,0 +1,239 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace GeoIp2\WebService;
|
4 |
+
|
5 |
+
use GeoIp2\Exception\AddressNotFoundException;
|
6 |
+
use GeoIp2\Exception\AuthenticationException;
|
7 |
+
use GeoIp2\Exception\GeoIp2Exception;
|
8 |
+
use GeoIp2\Exception\HttpException;
|
9 |
+
use GeoIp2\Exception\InvalidRequestException;
|
10 |
+
use GeoIp2\Exception\OutOfQueriesException;
|
11 |
+
use GeoIp2\ProviderInterface;
|
12 |
+
use MaxMind\WebService\Client as WsClient;
|
13 |
+
|
14 |
+
/**
|
15 |
+
* This class provides a client API for all the GeoIP2 Precision web services.
|
16 |
+
* The services are Country, City, and Insights. Each service returns a
|
17 |
+
* different set of data about an IP address, with Country returning the
|
18 |
+
* least data and Insights the most.
|
19 |
+
*
|
20 |
+
* Each web service is represented by a different model class, and these model
|
21 |
+
* classes in turn contain multiple record classes. The record classes have
|
22 |
+
* attributes which contain data about the IP address.
|
23 |
+
*
|
24 |
+
* If the web service does not return a particular piece of data for an IP
|
25 |
+
* address, the associated attribute is not populated.
|
26 |
+
*
|
27 |
+
* The web service may not return any information for an entire record, in
|
28 |
+
* which case all of the attributes for that record class will be empty.
|
29 |
+
*
|
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 `$userId`
|
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 |
+
*
|
37 |
+
* If the request succeeds, the method call will return a model class for
|
38 |
+
* the service you called. This model in turn contains multiple record
|
39 |
+
* classes, each of which represents part of the data returned by the web
|
40 |
+
* service.
|
41 |
+
*
|
42 |
+
* If the request fails, the client class throws an exception.
|
43 |
+
*/
|
44 |
+
class Client implements ProviderInterface
|
45 |
+
{
|
46 |
+
private $locales;
|
47 |
+
private $client;
|
48 |
+
private static $basePath = '/geoip/v2.1';
|
49 |
+
|
50 |
+
const VERSION = 'v2.7.0';
|
51 |
+
|
52 |
+
/**
|
53 |
+
* Constructor.
|
54 |
+
*
|
55 |
+
* @param int $userId your MaxMind user 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
|
59 |
+
* @param array $options array of options. Valid options include:
|
60 |
+
* * `host` - The host to use when querying the web service.
|
61 |
+
* * `timeout` - Timeout in seconds.
|
62 |
+
* * `connectTimeout` - Initial connection timeout in seconds.
|
63 |
+
* * `proxy` - The HTTP proxy to use. May include a schema, port,
|
64 |
+
* username, and password, e.g.,
|
65 |
+
* `http://username:password@127.0.0.1:10`.
|
66 |
+
*/
|
67 |
+
public function __construct(
|
68 |
+
$userId,
|
69 |
+
$licenseKey,
|
70 |
+
$locales = ['en'],
|
71 |
+
$options = []
|
72 |
+
) {
|
73 |
+
$this->locales = $locales;
|
74 |
+
|
75 |
+
// This is for backwards compatibility. Do not remove except for a
|
76 |
+
// major version bump.
|
77 |
+
if (is_string($options)) {
|
78 |
+
$options = ['host' => $options];
|
79 |
+
}
|
80 |
+
|
81 |
+
if (!isset($options['host'])) {
|
82 |
+
$options['host'] = 'geoip.maxmind.com';
|
83 |
+
}
|
84 |
+
|
85 |
+
$options['userAgent'] = $this->userAgent();
|
86 |
+
|
87 |
+
$this->client = new WsClient($userId, $licenseKey, $options);
|
88 |
+
}
|
89 |
+
|
90 |
+
private function userAgent()
|
91 |
+
{
|
92 |
+
return 'GeoIP2-API/' . self::VERSION;
|
93 |
+
}
|
94 |
+
|
95 |
+
/**
|
96 |
+
* This method calls the GeoIP2 Precision: City service.
|
97 |
+
*
|
98 |
+
* @param string $ipAddress IPv4 or IPv6 address as a string. If no
|
99 |
+
* address is provided, the address that the web service is called
|
100 |
+
* from will be used.
|
101 |
+
*
|
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 user 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
|
109 |
+
* invalid for some other reason. This may indicate an issue
|
110 |
+
* with this API. Please report the error to MaxMind.
|
111 |
+
* @throws \GeoIp2\Exception\HttpException if an unexpected HTTP error code or message was returned.
|
112 |
+
* This could indicate a problem with the connection between
|
113 |
+
* your server and the web service or that the web service
|
114 |
+
* returned an invalid document or 500 error code.
|
115 |
+
* @throws \GeoIp2\Exception\GeoIp2Exception This serves as the parent
|
116 |
+
* class to the above exceptions. It will be thrown directly
|
117 |
+
* if a 200 status code is returned but the body is invalid.
|
118 |
+
*
|
119 |
+
* @return \GeoIp2\Model\City
|
120 |
+
*/
|
121 |
+
public function city($ipAddress = 'me')
|
122 |
+
{
|
123 |
+
return $this->responseFor('city', 'City', $ipAddress);
|
124 |
+
}
|
125 |
+
|
126 |
+
/**
|
127 |
+
* This method calls the GeoIP2 Precision: Country service.
|
128 |
+
*
|
129 |
+
* @param string $ipAddress IPv4 or IPv6 address as a string. If no
|
130 |
+
* address is provided, the address that the web service is called
|
131 |
+
* from will be used.
|
132 |
+
*
|
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 user 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
|
140 |
+
* issue with this API. Please report the error to MaxMind.
|
141 |
+
* @throws \GeoIp2\Exception\HttpException if an unexpected HTTP error
|
142 |
+
* code or message was returned. This could indicate a problem
|
143 |
+
* with the connection between your server and the web service
|
144 |
+
* or that the web service returned an invalid document or 500
|
145 |
+
* error code.
|
146 |
+
* @throws \GeoIp2\Exception\GeoIp2Exception This serves as the parent class to the above exceptions. It
|
147 |
+
* will be thrown directly if a 200 status code is returned but
|
148 |
+
* the body is invalid.
|
149 |
+
*
|
150 |
+
* @return \GeoIp2\Model\Country
|
151 |
+
*/
|
152 |
+
public function country($ipAddress = 'me')
|
153 |
+
{
|
154 |
+
return $this->responseFor('country', 'Country', $ipAddress);
|
155 |
+
}
|
156 |
+
|
157 |
+
/**
|
158 |
+
* This method calls the GeoIP2 Precision: Insights service.
|
159 |
+
*
|
160 |
+
* @param string $ipAddress IPv4 or IPv6 address as a string. If no
|
161 |
+
* address is provided, the address that the web service is called
|
162 |
+
* from will be used.
|
163 |
+
*
|
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 user 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
|
171 |
+
* invalid for some other reason. This may indicate an
|
172 |
+
* issue with this API. Please report the error to MaxMind.
|
173 |
+
* @throws \GeoIp2\Exception\HttpException if an unexpected HTTP error code or message was returned.
|
174 |
+
* This could indicate a problem with the connection between
|
175 |
+
* your server and the web service or that the web service
|
176 |
+
* returned an invalid document or 500 error code.
|
177 |
+
* @throws \GeoIp2\Exception\GeoIp2Exception This serves as the parent
|
178 |
+
* class to the above exceptions. It will be thrown directly
|
179 |
+
* if a 200 status code is returned but the body is invalid.
|
180 |
+
*
|
181 |
+
* @return \GeoIp2\Model\Insights
|
182 |
+
*/
|
183 |
+
public function insights($ipAddress = 'me')
|
184 |
+
{
|
185 |
+
return $this->responseFor('insights', 'Insights', $ipAddress);
|
186 |
+
}
|
187 |
+
|
188 |
+
private function responseFor($endpoint, $class, $ipAddress)
|
189 |
+
{
|
190 |
+
$path = implode('/', [self::$basePath, $endpoint, $ipAddress]);
|
191 |
+
|
192 |
+
try {
|
193 |
+
$body = $this->client->get('GeoIP2 ' . $class, $path);
|
194 |
+
} catch (\MaxMind\Exception\IpAddressNotFoundException $ex) {
|
195 |
+
throw new AddressNotFoundException(
|
196 |
+
$ex->getMessage(),
|
197 |
+
$ex->getStatusCode(),
|
198 |
+
$ex
|
199 |
+
);
|
200 |
+
} catch (\MaxMind\Exception\AuthenticationException $ex) {
|
201 |
+
throw new AuthenticationException(
|
202 |
+
$ex->getMessage(),
|
203 |
+
$ex->getStatusCode(),
|
204 |
+
$ex
|
205 |
+
);
|
206 |
+
} catch (\MaxMind\Exception\InsufficientFundsException $ex) {
|
207 |
+
throw new OutOfQueriesException(
|
208 |
+
$ex->getMessage(),
|
209 |
+
$ex->getStatusCode(),
|
210 |
+
$ex
|
211 |
+
);
|
212 |
+
} catch (\MaxMind\Exception\InvalidRequestException $ex) {
|
213 |
+
throw new InvalidRequestException(
|
214 |
+
$ex->getMessage(),
|
215 |
+
$ex->getErrorCode(),
|
216 |
+
$ex->getStatusCode(),
|
217 |
+
$ex->getUri(),
|
218 |
+
$ex
|
219 |
+
);
|
220 |
+
} catch (\MaxMind\Exception\HttpException $ex) {
|
221 |
+
throw new HttpException(
|
222 |
+
$ex->getMessage(),
|
223 |
+
$ex->getStatusCode(),
|
224 |
+
$ex->getUri(),
|
225 |
+
$ex
|
226 |
+
);
|
227 |
+
} catch (\MaxMind\Exception\WebServiceException $ex) {
|
228 |
+
throw new GeoIp2Exception(
|
229 |
+
$ex->getMessage(),
|
230 |
+
$ex->getCode(),
|
231 |
+
$ex
|
232 |
+
);
|
233 |
+
}
|
234 |
+
|
235 |
+
$class = 'GeoIp2\\Model\\' . $class;
|
236 |
+
|
237 |
+
return new $class($body, $this->locales);
|
238 |
+
}
|
239 |
+
}
|
vendor/maxmind-db/reader/CHANGELOG.md
ADDED
@@ -0,0 +1,108 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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.
|
11 |
+
|
12 |
+
1.1.3 (2017-01-19)
|
13 |
+
------------------
|
14 |
+
|
15 |
+
* Fix incorrect version in `ext/php_maxminddb.h`. GitHub #48.
|
16 |
+
|
17 |
+
1.1.2 (2016-11-22)
|
18 |
+
------------------
|
19 |
+
|
20 |
+
* Searching for database metadata only occurs within the last 128KB
|
21 |
+
(128 * 1024 bytes) of the file, speeding detection of corrupt
|
22 |
+
datafiles. Reported by Eric Teubert. GitHub #42.
|
23 |
+
* Suggest relevant extensions when installing with Composer. GitHub #37.
|
24 |
+
|
25 |
+
1.1.1 (2016-09-15)
|
26 |
+
------------------
|
27 |
+
|
28 |
+
* Development files were added to the `.gitattributes` as `export-ignore` so
|
29 |
+
that they are not part of the Composer release. Pull request by Michele
|
30 |
+
Locati. GitHub #39.
|
31 |
+
|
32 |
+
1.1.0 (2016-01-04)
|
33 |
+
------------------
|
34 |
+
|
35 |
+
* The MaxMind DB extension now supports PHP 7. Pull request by John Boehr.
|
36 |
+
GitHub #27.
|
37 |
+
|
38 |
+
1.0.3 (2015-03-13)
|
39 |
+
------------------
|
40 |
+
|
41 |
+
* All uses of `strlen` were removed. This should prevent issues in situations
|
42 |
+
where the function is overloaded or otherwise broken.
|
43 |
+
|
44 |
+
1.0.2 (2015-01-19)
|
45 |
+
------------------
|
46 |
+
|
47 |
+
* Previously the MaxMind DB extension would cause a segfault if the Reader
|
48 |
+
object's destructor was called without first having called the constructor.
|
49 |
+
(Reported by Matthias Saou & Juan Peri. GitHub #20.)
|
50 |
+
|
51 |
+
1.0.1 (2015-01-12)
|
52 |
+
------------------
|
53 |
+
|
54 |
+
* In the last several releases, the version number in the extension was
|
55 |
+
incorrect. This release is being done to correct it. No other code changes
|
56 |
+
are included.
|
57 |
+
|
58 |
+
1.0.0 (2014-09-22)
|
59 |
+
------------------
|
60 |
+
|
61 |
+
* First production release.
|
62 |
+
* In the pure PHP reader, a string length test after `fread()` was replaced
|
63 |
+
with the difference between the start pointer and the end pointer. This
|
64 |
+
provided a 15% speed increase.
|
65 |
+
|
66 |
+
0.3.3 (2014-09-15)
|
67 |
+
------------------
|
68 |
+
|
69 |
+
* Clarified behavior of 128-bit type in documentation.
|
70 |
+
* Updated phpunit and fixed some test breakage from the newer version.
|
71 |
+
|
72 |
+
0.3.2 (2014-09-10)
|
73 |
+
------------------
|
74 |
+
|
75 |
+
* Fixed invalid reference to global class RuntimeException from namespaced
|
76 |
+
code. Fixed by Steven Don. GitHub issue #15.
|
77 |
+
* Additional documentation of `Metadata` class as well as misc. documentation
|
78 |
+
cleanup.
|
79 |
+
|
80 |
+
0.3.1 (2014-05-01)
|
81 |
+
------------------
|
82 |
+
|
83 |
+
* The API now works when `mbstring.func_overload` is set.
|
84 |
+
* BCMath is no longer required. If the decoder encounters a big integer,
|
85 |
+
it will try to use GMP and then BCMath. If both of those fail, it will
|
86 |
+
throw an exception. No databases released by MaxMind currently use big
|
87 |
+
integers.
|
88 |
+
* The API now officially supports HHVM when using the pure PHP reader.
|
89 |
+
|
90 |
+
0.3.0 (2014-02-19)
|
91 |
+
------------------
|
92 |
+
|
93 |
+
* This API is now licensed under the Apache License, Version 2.0.
|
94 |
+
* The code for the C extension was cleaned up, fixing several potential
|
95 |
+
issues.
|
96 |
+
|
97 |
+
0.2.0 (2013-10-21)
|
98 |
+
------------------
|
99 |
+
|
100 |
+
* Added optional C extension for using libmaxminddb in place of the pure PHP
|
101 |
+
reader.
|
102 |
+
* Significantly improved error handling in pure PHP reader.
|
103 |
+
* Improved performance for IPv4 lookups in an IPv6 database.
|
104 |
+
|
105 |
+
0.1.0 (2013-07-16)
|
106 |
+
------------------
|
107 |
+
|
108 |
+
* Initial release
|
vendor/maxmind-db/reader/LICENSE
ADDED
@@ -0,0 +1,202 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
|
2 |
+
Apache License
|
3 |
+
Version 2.0, January 2004
|
4 |
+
http://www.apache.org/licenses/
|
5 |
+
|
6 |
+
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
7 |
+
|
8 |
+
1. Definitions.
|
9 |
+
|
10 |
+
"License" shall mean the terms and conditions for use, reproduction,
|
11 |
+
and distribution as defined by Sections 1 through 9 of this document.
|
12 |
+
|
13 |
+
"Licensor" shall mean the copyright owner or entity authorized by
|
14 |
+
the copyright owner that is granting the License.
|
15 |
+
|
16 |
+
"Legal Entity" shall mean the union of the acting entity and all
|
17 |
+
other entities that control, are controlled by, or are under common
|
18 |
+
control with that entity. For the purposes of this definition,
|
19 |
+
"control" means (i) the power, direct or indirect, to cause the
|
20 |
+
direction or management of such entity, whether by contract or
|
21 |
+
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
22 |
+
outstanding shares, or (iii) beneficial ownership of such entity.
|
23 |
+
|
24 |
+
"You" (or "Your") shall mean an individual or Legal Entity
|
25 |
+
exercising permissions granted by this License.
|
26 |
+
|
27 |
+
"Source" form shall mean the preferred form for making modifications,
|
28 |
+
including but not limited to software source code, documentation
|
29 |
+
source, and configuration files.
|
30 |
+
|
31 |
+
"Object" form shall mean any form resulting from mechanical
|
32 |
+
transformation or translation of a Source form, including but
|
33 |
+
not limited to compiled object code, generated documentation,
|
34 |
+
and conversions to other media types.
|
35 |
+
|
36 |
+
"Work" shall mean the work of authorship, whether in Source or
|
37 |
+
Object form, made available under the License, as indicated by a
|
38 |
+
copyright notice that is included in or attached to the work
|
39 |
+
(an example is provided in the Appendix below).
|
40 |
+
|
41 |
+
"Derivative Works" shall mean any work, whether in Source or Object
|
42 |
+
form, that is based on (or derived from) the Work and for which the
|
43 |
+
editorial revisions, annotations, elaborations, or other modifications
|
44 |
+
represent, as a whole, an original work of authorship. For the purposes
|
45 |
+
of this License, Derivative Works shall not include works that remain
|
46 |
+
separable from, or merely link (or bind by name) to the interfaces of,
|
47 |
+
the Work and Derivative Works thereof.
|
48 |
+
|
49 |
+
"Contribution" shall mean any work of authorship, including
|
50 |
+
the original version of the Work and any modifications or additions
|
51 |
+
to that Work or Derivative Works thereof, that is intentionally
|
52 |
+
submitted to Licensor for inclusion in the Work by the copyright owner
|
53 |
+
or by an individual or Legal Entity authorized to submit on behalf of
|
54 |
+
the copyright owner. For the purposes of this definition, "submitted"
|
55 |
+
means any form of electronic, verbal, or written communication sent
|
56 |
+
to the Licensor or its representatives, including but not limited to
|
57 |
+
communication on electronic mailing lists, source code control systems,
|
58 |
+
and issue tracking systems that are managed by, or on behalf of, the
|
59 |
+
Licensor for the purpose of discussing and improving the Work, but
|
60 |
+
excluding communication that is conspicuously marked or otherwise
|
61 |
+
designated in writing by the copyright owner as "Not a Contribution."
|
62 |
+
|
63 |
+
"Contributor" shall mean Licensor and any individual or Legal Entity
|
64 |
+
on behalf of whom a Contribution has been received by Licensor and
|
65 |
+
subsequently incorporated within the Work.
|
66 |
+
|
67 |
+
2. Grant of Copyright License. Subject to the terms and conditions of
|
68 |
+
this License, each Contributor hereby grants to You a perpetual,
|
69 |
+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
70 |
+
copyright license to reproduce, prepare Derivative Works of,
|
71 |
+
publicly display, publicly perform, sublicense, and distribute the
|
72 |
+
Work and such Derivative Works in Source or Object form.
|
73 |
+
|
74 |
+
3. Grant of Patent License. Subject to the terms and conditions of
|
75 |
+
this License, each Contributor hereby grants to You a perpetual,
|
76 |
+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
77 |
+
(except as stated in this section) patent license to make, have made,
|
78 |
+
use, offer to sell, sell, import, and otherwise transfer the Work,
|
79 |
+
where such license applies only to those patent claims licensable
|
80 |
+
by such Contributor that are necessarily infringed by their
|
81 |
+
Contribution(s) alone or by combination of their Contribution(s)
|
82 |
+
with the Work to which such Contribution(s) was submitted. If You
|
83 |
+
institute patent litigation against any entity (including a
|
84 |
+
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
85 |
+
or a Contribution incorporated within the Work constitutes direct
|
86 |
+
or contributory patent infringement, then any patent licenses
|
87 |
+
granted to You under this License for that Work shall terminate
|
88 |
+
as of the date such litigation is filed.
|
89 |
+
|
90 |
+
4. Redistribution. You may reproduce and distribute copies of the
|
91 |
+
Work or Derivative Works thereof in any medium, with or without
|
92 |
+
modifications, and in Source or Object form, provided that You
|
93 |
+
meet the following conditions:
|
94 |
+
|
95 |
+
(a) You must give any other recipients of the Work or
|
96 |
+
Derivative Works a copy of this License; and
|
97 |
+
|
98 |
+
(b) You must cause any modified files to carry prominent notices
|
99 |
+
stating that You changed the files; and
|
100 |
+
|
101 |
+
(c) You must retain, in the Source form of any Derivative Works
|
102 |
+
that You distribute, all copyright, patent, trademark, and
|
103 |
+
attribution notices from the Source form of the Work,
|
104 |
+
excluding those notices that do not pertain to any part of
|
105 |
+
the Derivative Works; and
|
106 |
+
|
107 |
+
(d) If the Work includes a "NOTICE" text file as part of its
|
108 |
+
distribution, then any Derivative Works that You distribute must
|
109 |
+
include a readable copy of the attribution notices contained
|
110 |
+
within such NOTICE file, excluding those notices that do not
|
111 |
+
pertain to any part of the Derivative Works, in at least one
|
112 |
+
of the following places: within a NOTICE text file distributed
|
113 |
+
as part of the Derivative Works; within the Source form or
|
114 |
+
documentation, if provided along with the Derivative Works; or,
|
115 |
+
within a display generated by the Derivative Works, if and
|
116 |
+
wherever such third-party notices normally appear. The contents
|
117 |
+
of the NOTICE file are for informational purposes only and
|
118 |
+
do not modify the License. You may add Your own attribution
|
119 |
+
notices within Derivative Works that You distribute, alongside
|
120 |
+
or as an addendum to the NOTICE text from the Work, provided
|
121 |
+
that such additional attribution notices cannot be construed
|
122 |
+
as modifying the License.
|
123 |
+
|
124 |
+
You may add Your own copyright statement to Your modifications and
|
125 |
+
may provide additional or different license terms and conditions
|
126 |
+
for use, reproduction, or distribution of Your modifications, or
|
127 |
+
for any such Derivative Works as a whole, provided Your use,
|
128 |
+
reproduction, and distribution of the Work otherwise complies with
|
129 |
+
the conditions stated in this License.
|
130 |
+
|
131 |
+
5. Submission of Contributions. Unless You explicitly state otherwise,
|
132 |
+
any Contribution intentionally submitted for inclusion in the Work
|
133 |
+
by You to the Licensor shall be under the terms and conditions of
|
134 |
+
this License, without any additional terms or conditions.
|
135 |
+
Notwithstanding the above, nothing herein shall supersede or modify
|
136 |
+
the terms of any separate license agreement you may have executed
|
137 |
+
with Licensor regarding such Contributions.
|
138 |
+
|
139 |
+
6. Trademarks. This License does not grant permission to use the trade
|
140 |
+
names, trademarks, service marks, or product names of the Licensor,
|
141 |
+
except as required for reasonable and customary use in describing the
|
142 |
+
origin of the Work and reproducing the content of the NOTICE file.
|
143 |
+
|
144 |
+
7. Disclaimer of Warranty. Unless required by applicable law or
|
145 |
+
agreed to in writing, Licensor provides the Work (and each
|
146 |
+
Contributor provides its Contributions) on an "AS IS" BASIS,
|
147 |
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
148 |
+
implied, including, without limitation, any warranties or conditions
|
149 |
+
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
150 |
+
PARTICULAR PURPOSE. You are solely responsible for determining the
|
151 |
+
appropriateness of using or redistributing the Work and assume any
|
152 |
+
risks associated with Your exercise of permissions under this License.
|
153 |
+
|
154 |
+
8. Limitation of Liability. In no event and under no legal theory,
|
155 |
+
whether in tort (including negligence), contract, or otherwise,
|
156 |
+
unless required by applicable law (such as deliberate and grossly
|
157 |
+
negligent acts) or agreed to in writing, shall any Contributor be
|
158 |
+
liable to You for damages, including any direct, indirect, special,
|
159 |
+
incidental, or consequential damages of any character arising as a
|
160 |
+
result of this License or out of the use or inability to use the
|
161 |
+
Work (including but not limited to damages for loss of goodwill,
|
162 |
+
work stoppage, computer failure or malfunction, or any and all
|
163 |
+
other commercial damages or losses), even if such Contributor
|
164 |
+
has been advised of the possibility of such damages.
|
165 |
+
|
166 |
+
9. Accepting Warranty or Additional Liability. While redistributing
|
167 |
+
the Work or Derivative Works thereof, You may choose to offer,
|
168 |
+
and charge a fee for, acceptance of support, warranty, indemnity,
|
169 |
+
or other liability obligations and/or rights consistent with this
|
170 |
+
License. However, in accepting such obligations, You may act only
|
171 |
+
on Your own behalf and on Your sole responsibility, not on behalf
|
172 |
+
of any other Contributor, and only if You agree to indemnify,
|
173 |
+
defend, and hold each Contributor harmless for any liability
|
174 |
+
incurred by, or claims asserted against, such Contributor by reason
|
175 |
+
of your accepting any such warranty or additional liability.
|
176 |
+
|
177 |
+
END OF TERMS AND CONDITIONS
|
178 |
+
|
179 |
+
APPENDIX: How to apply the Apache License to your work.
|
180 |
+
|
181 |
+
To apply the Apache License to your work, attach the following
|
182 |
+
boilerplate notice, with the fields enclosed by brackets "[]"
|
183 |
+
replaced with your own identifying information. (Don't include
|
184 |
+
the brackets!) The text should be enclosed in the appropriate
|
185 |
+
comment syntax for the file format. We also recommend that a
|
186 |
+
file or class name and description of purpose be included on the
|
187 |
+
same "printed page" as the copyright notice for easier
|
188 |
+
identification within third-party archives.
|
189 |
+
|
190 |
+
Copyright [yyyy] [name of copyright owner]
|
191 |
+
|
192 |
+
Licensed under the Apache License, Version 2.0 (the "License");
|
193 |
+
you may not use this file except in compliance with the License.
|
194 |
+
You may obtain a copy of the License at
|
195 |
+
|
196 |
+
http://www.apache.org/licenses/LICENSE-2.0
|
197 |
+
|
198 |
+
Unless required by applicable law or agreed to in writing, software
|
199 |
+
distributed under the License is distributed on an "AS IS" BASIS,
|
200 |
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
201 |
+
See the License for the specific language governing permissions and
|
202 |
+
limitations under the License.
|
vendor/maxmind-db/reader/README.md
ADDED
@@ -0,0 +1,139 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# MaxMind DB Reader PHP API #
|
2 |
+
|
3 |
+
## Description ##
|
4 |
+
|
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 |
+
|
12 |
+
### Download Composer ###
|
13 |
+
|
14 |
+
To download Composer, run in the root directory of your project:
|
15 |
+
|
16 |
+
```bash
|
17 |
+
curl -sS https://getcomposer.org/installer | php
|
18 |
+
```
|
19 |
+
|
20 |
+
You should now have the file `composer.phar` in your project directory.
|
21 |
+
|
22 |
+
### Install Dependencies ###
|
23 |
+
|
24 |
+
Run in your project root:
|
25 |
+
|
26 |
+
```
|
27 |
+
php composer.phar require maxmind-db/reader:~1.0
|
28 |
+
```
|
29 |
+
|
30 |
+
You should now have the files `composer.json` and `composer.lock` as well as
|
31 |
+
the directory `vendor` in your project directory. If you use a version control
|
32 |
+
system, `composer.json` should be added to it.
|
33 |
+
|
34 |
+
### Require Autoloader ###
|
35 |
+
|
36 |
+
After installing the dependencies, you need to require the Composer autoloader
|
37 |
+
from your code:
|
38 |
+
|
39 |
+
```php
|
40 |
+
require 'vendor/autoload.php';
|
41 |
+
```
|
42 |
+
|
43 |
+
## Usage ##
|
44 |
+
|
45 |
+
## Example ##
|
46 |
+
|
47 |
+
```php
|
48 |
+
<?php
|
49 |
+
require_once 'vendor/autoload.php';
|
50 |
+
|
51 |
+
use MaxMind\Db\Reader;
|
52 |
+
|
53 |
+
$ipAddress = '24.24.24.24';
|
54 |
+
$databaseFile = 'GeoIP2-City.mmdb';
|
55 |
+
|
56 |
+
$reader = new Reader($databaseFile);
|
57 |
+
|
58 |
+
print_r($reader->get($ipAddress));
|
59 |
+
|
60 |
+
$reader->close();
|
61 |
+
```
|
62 |
+
|
63 |
+
## Optional PHP C Extension ##
|
64 |
+
|
65 |
+
MaxMind provides an optional C extension that is a drop-in replacement for
|
66 |
+
`MaxMind\Db\Reader`. In order to use this extension, you must install the
|
67 |
+
Reader API as described above and install the extension as described below. If
|
68 |
+
you are using an autoloader, no changes to your code should be necessary.
|
69 |
+
|
70 |
+
### Installing Extension ###
|
71 |
+
|
72 |
+
First install [libmaxminddb](https://github.com/maxmind/libmaxminddb) as
|
73 |
+
described in its [README.md
|
74 |
+
file](https://github.com/maxmind/libmaxminddb/blob/master/README.md#installing-from-a-tarball).
|
75 |
+
After successfully installing libmaxmindb, run the following commands from the
|
76 |
+
top-level directory of this distribution:
|
77 |
+
|
78 |
+
```
|
79 |
+
cd ext
|
80 |
+
phpize
|
81 |
+
./configure
|
82 |
+
make
|
83 |
+
make test
|
84 |
+
sudo make install
|
85 |
+
```
|
86 |
+
|
87 |
+
You then must load your extension. The recommend method is to add the
|
88 |
+
following to your `php.ini` file:
|
89 |
+
|
90 |
+
```
|
91 |
+
extension=maxminddb.so
|
92 |
+
```
|
93 |
+
|
94 |
+
Note: You may need to install the PHP development package on your OS such as
|
95 |
+
php5-dev for Debian-based systems or php-devel for RedHat/Fedora-based ones.
|
96 |
+
|
97 |
+
## 128-bit Integer Support ##
|
98 |
+
|
99 |
+
The MaxMind DB format includes 128-bit unsigned integer as a type. Although
|
100 |
+
no MaxMind-distributed database currently makes use of this type, both the
|
101 |
+
pure PHP reader and the C extension support this type. The pure PHP reader
|
102 |
+
requires gmp or bcmath to read databases with 128-bit unsigned integers.
|
103 |
+
|
104 |
+
The integer is currently returned as a hexadecimal string (prefixed with "0x")
|
105 |
+
by the C extension and a decimal string (no prefix) by the pure PHP reader.
|
106 |
+
Any change to make the reader implementations always return either a
|
107 |
+
hexadecimal or decimal representation of the integer will NOT be considered a
|
108 |
+
breaking change.
|
109 |
+
|
110 |
+
## Support ##
|
111 |
+
|
112 |
+
Please report all issues with this code using the [GitHub issue tracker]
|
113 |
+
(https://github.com/maxmind/MaxMind-DB-Reader-php/issues).
|
114 |
+
|
115 |
+
If you are having an issue with a MaxMind service that is not specific to the
|
116 |
+
client API, please see [our support page](http://www.maxmind.com/en/support).
|
117 |
+
|
118 |
+
## Requirements ##
|
119 |
+
|
120 |
+
This library requires PHP 5.4 or greater. The pure PHP reader included with
|
121 |
+
this library works and is tested with HHVM.
|
122 |
+
|
123 |
+
The GMP or BCMath extension may be required to read some databases
|
124 |
+
using the pure PHP API.
|
125 |
+
|
126 |
+
## Contributing ##
|
127 |
+
|
128 |
+
Patches and pull requests are encouraged. All code should follow the PSR-1 and
|
129 |
+
PSR-2 style guidelines. Please include unit tests whenever possible.
|
130 |
+
|
131 |
+
## Versioning ##
|
132 |
+
|
133 |
+
The MaxMind DB Reader PHP API uses [Semantic Versioning](http://semver.org/).
|
134 |
+
|
135 |
+
## Copyright and License ##
|
136 |
+
|
137 |
+
This software is Copyright (c) 2014-2017 by MaxMind, Inc.
|
138 |
+
|
139 |
+
This is free software, licensed under the Apache License, Version 2.0.
|
vendor/maxmind-db/reader/composer.json
ADDED
@@ -0,0 +1,34 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"name": "maxmind-db/reader",
|
3 |
+
"description": "MaxMind DB Reader API",
|
4 |
+
"keywords": ["database", "geoip", "geoip2", "geolocation", "maxmind"],
|
5 |
+
"homepage": "https://github.com/maxmind/MaxMind-DB-Reader-php",
|
6 |
+
"type": "library",
|
7 |
+
"license": "Apache-2.0",
|
8 |
+
"authors": [
|
9 |
+
{
|
10 |
+
"name": "Gregory J. Oschwald",
|
11 |
+
"email": "goschwald@maxmind.com",
|
12 |
+
"homepage": "http://www.maxmind.com/"
|
13 |
+
}
|
14 |
+
],
|
15 |
+
"require": {
|
16 |
+
"php": ">=5.4"
|
17 |
+
},
|
18 |
+
"suggest": {
|
19 |
+
"ext-bcmath": "bcmath or gmp is required for decoding larger integers with the pure PHP decoder",
|
20 |
+
"ext-gmp": "bcmath or gmp is required for decoding larger integers with the pure PHP decoder",
|
21 |
+
"ext-maxminddb": "A C-based database decoder that provides significantly faster lookups"
|
22 |
+
},
|
23 |
+
"require-dev": {
|
24 |
+
"friendsofphp/php-cs-fixer": "2.*",
|
25 |
+
"phpunit/phpunit": "4.*",
|
26 |
+
"satooshi/php-coveralls": "1.0.*",
|
27 |
+
"squizlabs/php_codesniffer": "3.*"
|
28 |
+
},
|
29 |
+
"autoload": {
|
30 |
+
"psr-4": {
|
31 |
+
"MaxMind\\Db\\": "src/MaxMind/Db"
|
32 |
+
}
|
33 |
+
}
|
34 |
+
}
|
vendor/maxmind-db/reader/ext/config.m4
ADDED
@@ -0,0 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
PHP_ARG_WITH(maxminddb,
|
2 |
+
[Whether to enable the MaxMind DB Reader extension],
|
3 |
+
[ --with-maxminddb Enable MaxMind DB Reader extension support])
|
4 |
+
|
5 |
+
PHP_ARG_ENABLE(maxminddb-debug, for MaxMind DB debug support,
|
6 |
+
[ --enable-maxminddb-debug Enable enable MaxMind DB deubg support], no, no)
|
7 |
+
|
8 |
+
if test $PHP_MAXMINDDB != "no"; then
|
9 |
+
PHP_CHECK_LIBRARY(maxminddb, MMDB_open)
|
10 |
+
|
11 |
+
if test $PHP_MAXMINDDB_DEBUG != "no"; then
|
12 |
+
CFLAGS="$CFLAGS -Wall -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -Werror"
|
13 |
+
fi
|
14 |
+
|
15 |
+
PHP_ADD_LIBRARY(maxminddb, 1, MAXMINDDB_SHARED_LIBADD)
|
16 |
+
PHP_SUBST(MAXMINDDB_SHARED_LIBADD)
|
17 |
+
|
18 |
+
PHP_NEW_EXTENSION(maxminddb, maxminddb.c, $ext_shared)
|
19 |
+
fi
|
vendor/maxmind-db/reader/ext/maxminddb.c
ADDED
@@ -0,0 +1,564 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/* MaxMind, Inc., licenses this file to you under the Apache License, Version
|
2 |
+
* 2.0 (the "License"); you may not use this file except in compliance with
|
3 |
+
* the License. You may obtain a copy of the License at
|
4 |
+
*
|
5 |
+
* http://www.apache.org/licenses/LICENSE-2.0
|
6 |
+
*
|
7 |
+
* Unless required by applicable law or agreed to in writing, software
|
8 |
+
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
9 |
+
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
10 |
+
* License for the specific language governing permissions and limitations
|
11 |
+
* under the License.
|
12 |
+
*/
|
13 |
+
|
14 |
+
#include "php_maxminddb.h"
|
15 |
+
|
16 |
+
#ifdef HAVE_CONFIG_H
|
17 |
+
#include "config.h"
|
18 |
+
#endif
|
19 |
+
|
20 |
+
#include <php.h>
|
21 |
+
#include <zend.h>
|
22 |
+
#include "Zend/zend_exceptions.h"
|
23 |
+
#include <maxminddb.h>
|
24 |
+
|
25 |
+
#ifdef ZTS
|
26 |
+
#include <TSRM.h>
|
27 |
+
#endif
|
28 |
+
|
29 |
+
#define __STDC_FORMAT_MACROS
|
30 |
+
#include <inttypes.h>
|
31 |
+
|
32 |
+
#define PHP_MAXMINDDB_NS ZEND_NS_NAME("MaxMind", "Db")
|
33 |
+
#define PHP_MAXMINDDB_READER_NS ZEND_NS_NAME(PHP_MAXMINDDB_NS, "Reader")
|
34 |
+
#define PHP_MAXMINDDB_READER_EX_NS \
|
35 |
+
ZEND_NS_NAME(PHP_MAXMINDDB_READER_NS, \
|
36 |
+
"InvalidDatabaseException")
|
37 |
+
|
38 |
+
#ifdef ZEND_ENGINE_3
|
39 |
+
#define Z_MAXMINDDB_P(zv) php_maxminddb_fetch_object(Z_OBJ_P(zv))
|
40 |
+
#define _ZVAL_STRING ZVAL_STRING
|
41 |
+
#define _ZVAL_STRINGL ZVAL_STRINGL
|
42 |
+
typedef size_t strsize_t;
|
43 |
+
typedef zend_object free_obj_t;
|
44 |
+
#else
|
45 |
+
#define Z_MAXMINDDB_P(zv) (maxminddb_obj *) zend_object_store_get_object(zv TSRMLS_CC)
|
46 |
+
#define _ZVAL_STRING(a, b) ZVAL_STRING(a, b, 1)
|
47 |
+
#define _ZVAL_STRINGL(a, b, c) ZVAL_STRINGL(a, b, c, 1)
|
48 |
+
typedef int strsize_t;
|
49 |
+
typedef void free_obj_t;
|
50 |
+
#endif
|
51 |
+
|
52 |
+
#ifdef ZEND_ENGINE_3
|
53 |
+
typedef struct _maxminddb_obj {
|
54 |
+
MMDB_s *mmdb;
|
55 |
+
zend_object std;
|
56 |
+
} maxminddb_obj;
|
57 |
+
#else
|
58 |
+
typedef struct _maxminddb_obj {
|
59 |
+
zend_object std;
|
60 |
+
MMDB_s *mmdb;
|
61 |
+
} maxminddb_obj;
|
62 |
+
#endif
|
63 |
+
|
64 |
+
PHP_FUNCTION(maxminddb);
|
65 |
+
|
66 |
+
static const MMDB_entry_data_list_s *handle_entry_data_list(
|
67 |
+
const MMDB_entry_data_list_s *entry_data_list,
|
68 |
+
zval *z_value
|
69 |
+
TSRMLS_DC);
|
70 |
+
static const MMDB_entry_data_list_s *handle_array(
|
71 |
+
const MMDB_entry_data_list_s *entry_data_list,
|
72 |
+
zval *z_value TSRMLS_DC);
|
73 |
+
static const MMDB_entry_data_list_s *handle_map(
|
74 |
+
const MMDB_entry_data_list_s *entry_data_list,
|
75 |
+
zval *z_value TSRMLS_DC);
|
76 |
+
static void handle_uint128(const MMDB_entry_data_list_s *entry_data_list,
|
77 |
+
zval *z_value TSRMLS_DC);
|
78 |
+
static void handle_uint64(const MMDB_entry_data_list_s *entry_data_list,
|
79 |
+
zval *z_value TSRMLS_DC);
|
80 |
+
static zend_class_entry * lookup_class(const char *name TSRMLS_DC);
|
81 |
+
|
82 |
+
#define CHECK_ALLOCATED(val) \
|
83 |
+
if (!val ) { \
|
84 |
+
zend_error(E_ERROR, "Out of memory"); \
|
85 |
+
return; \
|
86 |
+
} \
|
87 |
+
|
88 |
+
#define THROW_EXCEPTION(name, ... ) \
|
89 |
+
{ \
|
90 |
+
zend_class_entry *exception_ce = lookup_class(name TSRMLS_CC); \
|
91 |
+
zend_throw_exception_ex(exception_ce, 0 TSRMLS_CC, __VA_ARGS__); \
|
92 |
+
} \
|
93 |
+
|
94 |
+
|
95 |
+
#if PHP_VERSION_ID < 50399
|
96 |
+
#define object_properties_init(zo, class_type) \
|
97 |
+
{ \
|
98 |
+
zval *tmp; \
|
99 |
+
zend_hash_copy((*zo).properties, \
|
100 |
+
&class_type->default_properties, \
|
101 |
+
(copy_ctor_func_t)zval_add_ref, \
|
102 |
+
(void *)&tmp, \
|
103 |
+
sizeof(zval *)); \
|
104 |
+
}
|
105 |
+
#endif
|
106 |
+
|
107 |
+
static zend_object_handlers maxminddb_obj_handlers;
|
108 |
+
static zend_class_entry *maxminddb_ce;
|
109 |
+
|
110 |
+
static inline maxminddb_obj *php_maxminddb_fetch_object(zend_object *obj TSRMLS_DC){
|
111 |
+
#ifdef ZEND_ENGINE_3
|
112 |
+
return (maxminddb_obj *)((char*)(obj) - XtOffsetOf(maxminddb_obj, std));
|
113 |
+
#else
|
114 |
+
return (maxminddb_obj *)obj;
|
115 |
+
#endif
|
116 |
+
}
|
117 |
+
|
118 |
+
PHP_METHOD(MaxMind_Db_Reader, __construct){
|
119 |
+
char *db_file = NULL;
|
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);
|
134 |
+
return;
|
135 |
+
}
|
136 |
+
|
137 |
+
MMDB_s *mmdb = (MMDB_s *)emalloc(sizeof(MMDB_s));
|
138 |
+
uint16_t status = MMDB_open(db_file, MMDB_MODE_MMAP, mmdb);
|
139 |
+
|
140 |
+
if (MMDB_SUCCESS != status) {
|
141 |
+
THROW_EXCEPTION(
|
142 |
+
PHP_MAXMINDDB_READER_EX_NS,
|
143 |
+
"Error opening database file (%s). Is this a valid MaxMind DB file?",
|
144 |
+
db_file);
|
145 |
+
efree(mmdb);
|
146 |
+
return;
|
147 |
+
}
|
148 |
+
|
149 |
+
maxminddb_obj *mmdb_obj = Z_MAXMINDDB_P(getThis());
|
150 |
+
mmdb_obj->mmdb = mmdb;
|
151 |
+
}
|
152 |
+
|
153 |
+
PHP_METHOD(MaxMind_Db_Reader, get){
|
154 |
+
char *ip_address = NULL;
|
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.");
|
162 |
+
return;
|
163 |
+
}
|
164 |
+
|
165 |
+
const maxminddb_obj *mmdb_obj =
|
166 |
+
(maxminddb_obj *)Z_MAXMINDDB_P(getThis());
|
167 |
+
|
168 |
+
MMDB_s *mmdb = mmdb_obj->mmdb;
|
169 |
+
|
170 |
+
if (NULL == mmdb) {
|
171 |
+
THROW_EXCEPTION("BadMethodCallException",
|
172 |
+
"Attempt to read from a closed MaxMind DB.");
|
173 |
+
return;
|
174 |
+
}
|
175 |
+
|
176 |
+
int gai_error = 0;
|
177 |
+
int mmdb_error = MMDB_SUCCESS;
|
178 |
+
MMDB_lookup_result_s result =
|
179 |
+
MMDB_lookup_string(mmdb, ip_address, &gai_error,
|
180 |
+
&mmdb_error);
|
181 |
+
|
182 |
+
if (MMDB_SUCCESS != gai_error) {
|
183 |
+
THROW_EXCEPTION("InvalidArgumentException",
|
184 |
+
"The value \"%s\" is not a valid IP address.",
|
185 |
+
ip_address);
|
186 |
+
return;
|
187 |
+
}
|
188 |
+
|
189 |
+
if (MMDB_SUCCESS != mmdb_error) {
|
190 |
+
char *exception_name;
|
191 |
+
if (MMDB_IPV6_LOOKUP_IN_IPV4_DATABASE_ERROR == mmdb_error) {
|
192 |
+
exception_name = "InvalidArgumentException";
|
193 |
+
} else {
|
194 |
+
exception_name = PHP_MAXMINDDB_READER_EX_NS;
|
195 |
+
}
|
196 |
+
THROW_EXCEPTION(exception_name,
|
197 |
+
"Error looking up %s. %s",
|
198 |
+
ip_address, MMDB_strerror(mmdb_error));
|
199 |
+
return;
|
200 |
+
}
|
201 |
+
|
202 |
+
MMDB_entry_data_list_s *entry_data_list = NULL;
|
203 |
+
|
204 |
+
if (!result.found_entry) {
|
205 |
+
RETURN_NULL();
|
206 |
+
}
|
207 |
+
|
208 |
+
int status = MMDB_get_entry_data_list(&result.entry, &entry_data_list);
|
209 |
+
|
210 |
+
if (MMDB_SUCCESS != status) {
|
211 |
+
THROW_EXCEPTION(PHP_MAXMINDDB_READER_EX_NS,
|
212 |
+
"Error while looking up data for %s. %s",
|
213 |
+
ip_address, MMDB_strerror(status));
|
214 |
+
MMDB_free_entry_data_list(entry_data_list);
|
215 |
+
return;
|
216 |
+
} else if (NULL == entry_data_list) {
|
217 |
+
THROW_EXCEPTION(
|
218 |
+
PHP_MAXMINDDB_READER_EX_NS,
|
219 |
+
"Error while looking up data for %s. Your database may be corrupt or you have found a bug in libmaxminddb.",
|
220 |
+
ip_address);
|
221 |
+
return;
|
222 |
+
}
|
223 |
+
|
224 |
+
handle_entry_data_list(entry_data_list, return_value TSRMLS_CC);
|
225 |
+
MMDB_free_entry_data_list(entry_data_list);
|
226 |
+
}
|
227 |
+
|
228 |
+
PHP_METHOD(MaxMind_Db_Reader, metadata){
|
229 |
+
if (ZEND_NUM_ARGS() != 0) {
|
230 |
+
THROW_EXCEPTION("InvalidArgumentException",
|
231 |
+
"Method takes no arguments.");
|
232 |
+
return;
|
233 |
+
}
|
234 |
+
|
235 |
+
const maxminddb_obj *const mmdb_obj =
|
236 |
+
(maxminddb_obj *)Z_MAXMINDDB_P(getThis());
|
237 |
+
|
238 |
+
if (NULL == mmdb_obj->mmdb) {
|
239 |
+
THROW_EXCEPTION("BadMethodCallException",
|
240 |
+
"Attempt to read from a closed MaxMind DB.");
|
241 |
+
return;
|
242 |
+
}
|
243 |
+
|
244 |
+
const char *const name = ZEND_NS_NAME(PHP_MAXMINDDB_READER_NS, "Metadata");
|
245 |
+
zend_class_entry *metadata_ce = lookup_class(name TSRMLS_CC);
|
246 |
+
|
247 |
+
object_init_ex(return_value, metadata_ce);
|
248 |
+
|
249 |
+
#ifdef ZEND_ENGINE_3
|
250 |
+
zval _metadata_array;
|
251 |
+
zval *metadata_array = &_metadata_array;
|
252 |
+
ZVAL_NULL(metadata_array);
|
253 |
+
#else
|
254 |
+
zval *metadata_array;
|
255 |
+
ALLOC_INIT_ZVAL(metadata_array);
|
256 |
+
#endif
|
257 |
+
|
258 |
+
MMDB_entry_data_list_s *entry_data_list;
|
259 |
+
MMDB_get_metadata_as_entry_data_list(mmdb_obj->mmdb, &entry_data_list);
|
260 |
+
|
261 |
+
handle_entry_data_list(entry_data_list, metadata_array TSRMLS_CC);
|
262 |
+
MMDB_free_entry_data_list(entry_data_list);
|
263 |
+
#ifdef ZEND_ENGINE_3
|
264 |
+
zend_call_method_with_1_params(return_value, metadata_ce,
|
265 |
+
&metadata_ce->constructor,
|
266 |
+
ZEND_CONSTRUCTOR_FUNC_NAME,
|
267 |
+
NULL,
|
268 |
+
metadata_array);
|
269 |
+
zval_ptr_dtor(metadata_array);
|
270 |
+
#else
|
271 |
+
zend_call_method_with_1_params(&return_value, metadata_ce,
|
272 |
+
&metadata_ce->constructor,
|
273 |
+
ZEND_CONSTRUCTOR_FUNC_NAME,
|
274 |
+
NULL,
|
275 |
+
metadata_array);
|
276 |
+
zval_ptr_dtor(&metadata_array);
|
277 |
+
#endif
|
278 |
+
}
|
279 |
+
|
280 |
+
PHP_METHOD(MaxMind_Db_Reader, close){
|
281 |
+
if (ZEND_NUM_ARGS() != 0) {
|
282 |
+
THROW_EXCEPTION("InvalidArgumentException",
|
283 |
+
"Method takes no arguments.");
|
284 |
+
return;
|
285 |
+
}
|
286 |
+
|
287 |
+
maxminddb_obj *mmdb_obj =
|
288 |
+
(maxminddb_obj *)Z_MAXMINDDB_P(getThis());
|
289 |
+
|
290 |
+
if (NULL == mmdb_obj->mmdb) {
|
291 |
+
THROW_EXCEPTION("BadMethodCallException",
|
292 |
+
"Attempt to close a closed MaxMind DB.");
|
293 |
+
return;
|
294 |
+
}
|
295 |
+
MMDB_close(mmdb_obj->mmdb);
|
296 |
+
efree(mmdb_obj->mmdb);
|
297 |
+
mmdb_obj->mmdb = NULL;
|
298 |
+
}
|
299 |
+
|
300 |
+
static const MMDB_entry_data_list_s *handle_entry_data_list(
|
301 |
+
const MMDB_entry_data_list_s *entry_data_list,
|
302 |
+
zval *z_value
|
303 |
+
TSRMLS_DC)
|
304 |
+
{
|
305 |
+
switch (entry_data_list->entry_data.type) {
|
306 |
+
case MMDB_DATA_TYPE_MAP:
|
307 |
+
return handle_map(entry_data_list, z_value TSRMLS_CC);
|
308 |
+
case MMDB_DATA_TYPE_ARRAY:
|
309 |
+
return handle_array(entry_data_list, z_value TSRMLS_CC);
|
310 |
+
case MMDB_DATA_TYPE_UTF8_STRING:
|
311 |
+
_ZVAL_STRINGL(z_value,
|
312 |
+
(char *)entry_data_list->entry_data.utf8_string,
|
313 |
+
entry_data_list->entry_data.data_size);
|
314 |
+
break;
|
315 |
+
case MMDB_DATA_TYPE_BYTES:
|
316 |
+
_ZVAL_STRINGL(z_value, (char *)entry_data_list->entry_data.bytes,
|
317 |
+
entry_data_list->entry_data.data_size);
|
318 |
+
break;
|
319 |
+
case MMDB_DATA_TYPE_DOUBLE:
|
320 |
+
ZVAL_DOUBLE(z_value, entry_data_list->entry_data.double_value);
|
321 |
+
break;
|
322 |
+
case MMDB_DATA_TYPE_FLOAT:
|
323 |
+
ZVAL_DOUBLE(z_value, entry_data_list->entry_data.float_value);
|
324 |
+
break;
|
325 |
+
case MMDB_DATA_TYPE_UINT16:
|
326 |
+
ZVAL_LONG(z_value, entry_data_list->entry_data.uint16);
|
327 |
+
break;
|
328 |
+
case MMDB_DATA_TYPE_UINT32:
|
329 |
+
ZVAL_LONG(z_value, entry_data_list->entry_data.uint32);
|
330 |
+
break;
|
331 |
+
case MMDB_DATA_TYPE_BOOLEAN:
|
332 |
+
ZVAL_BOOL(z_value, entry_data_list->entry_data.boolean);
|
333 |
+
break;
|
334 |
+
case MMDB_DATA_TYPE_UINT64:
|
335 |
+
handle_uint64(entry_data_list, z_value TSRMLS_CC);
|
336 |
+
break;
|
337 |
+
case MMDB_DATA_TYPE_UINT128:
|
338 |
+
handle_uint128(entry_data_list, z_value TSRMLS_CC);
|
339 |
+
break;
|
340 |
+
case MMDB_DATA_TYPE_INT32:
|
341 |
+
ZVAL_LONG(z_value, entry_data_list->entry_data.int32);
|
342 |
+
break;
|
343 |
+
default:
|
344 |
+
THROW_EXCEPTION(PHP_MAXMINDDB_READER_EX_NS,
|
345 |
+
"Invalid data type arguments: %d",
|
346 |
+
entry_data_list->entry_data.type);
|
347 |
+
return NULL;
|
348 |
+
}
|
349 |
+
return entry_data_list;
|
350 |
+
}
|
351 |
+
|
352 |
+
static const MMDB_entry_data_list_s *handle_map(
|
353 |
+
const MMDB_entry_data_list_s *entry_data_list,
|
354 |
+
zval *z_value TSRMLS_DC)
|
355 |
+
{
|
356 |
+
array_init(z_value);
|
357 |
+
const uint32_t map_size = entry_data_list->entry_data.data_size;
|
358 |
+
|
359 |
+
uint i;
|
360 |
+
for (i = 0; i < map_size && entry_data_list; i++ ) {
|
361 |
+
entry_data_list = entry_data_list->next;
|
362 |
+
|
363 |
+
char *key =
|
364 |
+
estrndup((char *)entry_data_list->entry_data.utf8_string,
|
365 |
+
entry_data_list->entry_data.data_size);
|
366 |
+
if (NULL == key) {
|
367 |
+
THROW_EXCEPTION(PHP_MAXMINDDB_READER_EX_NS,
|
368 |
+
"Invalid data type arguments");
|
369 |
+
return NULL;
|
370 |
+
}
|
371 |
+
|
372 |
+
entry_data_list = entry_data_list->next;
|
373 |
+
#ifdef ZEND_ENGINE_3
|
374 |
+
zval _new_value;
|
375 |
+
zval * new_value = &_new_value;
|
376 |
+
ZVAL_NULL(new_value);
|
377 |
+
#else
|
378 |
+
zval *new_value;
|
379 |
+
ALLOC_INIT_ZVAL(new_value);
|
380 |
+
#endif
|
381 |
+
entry_data_list = handle_entry_data_list(entry_data_list,
|
382 |
+
new_value TSRMLS_CC);
|
383 |
+
add_assoc_zval(z_value, key, new_value);
|
384 |
+
efree(key);
|
385 |
+
}
|
386 |
+
return entry_data_list;
|
387 |
+
}
|
388 |
+
|
389 |
+
static const MMDB_entry_data_list_s *handle_array(
|
390 |
+
const MMDB_entry_data_list_s *entry_data_list,
|
391 |
+
zval *z_value TSRMLS_DC)
|
392 |
+
{
|
393 |
+
const uint32_t size = entry_data_list->entry_data.data_size;
|
394 |
+
|
395 |
+
array_init(z_value);
|
396 |
+
|
397 |
+
uint i;
|
398 |
+
for (i = 0; i < size && entry_data_list; i++) {
|
399 |
+
entry_data_list = entry_data_list->next;
|
400 |
+
#ifdef ZEND_ENGINE_3
|
401 |
+
zval _new_value;
|
402 |
+
zval * new_value = &_new_value;
|
403 |
+
ZVAL_NULL(new_value);
|
404 |
+
#else
|
405 |
+
zval *new_value;
|
406 |
+
ALLOC_INIT_ZVAL(new_value);
|
407 |
+
#endif
|
408 |
+
entry_data_list = handle_entry_data_list(entry_data_list,
|
409 |
+
new_value TSRMLS_CC);
|
410 |
+
add_next_index_zval(z_value, new_value);
|
411 |
+
}
|
412 |
+
return entry_data_list;
|
413 |
+
}
|
414 |
+
|
415 |
+
static void handle_uint128(const MMDB_entry_data_list_s *entry_data_list,
|
416 |
+
zval *z_value TSRMLS_DC)
|
417 |
+
{
|
418 |
+
uint64_t high = 0;
|
419 |
+
uint64_t low = 0;
|
420 |
+
#if MMDB_UINT128_IS_BYTE_ARRAY
|
421 |
+
int i;
|
422 |
+
for (i = 0; i < 8; i++) {
|
423 |
+
high = (high << 8) | entry_data_list->entry_data.uint128[i];
|
424 |
+
}
|
425 |
+
|
426 |
+
for (i = 8; i < 16; i++) {
|
427 |
+
low = (low << 8) | entry_data_list->entry_data.uint128[i];
|
428 |
+
}
|
429 |
+
#else
|
430 |
+
high = entry_data_list->entry_data.uint128 >> 64;
|
431 |
+
low = (uint64_t)entry_data_list->entry_data.uint128;
|
432 |
+
#endif
|
433 |
+
|
434 |
+
char *num_str;
|
435 |
+
spprintf(&num_str, 0, "0x%016" PRIX64 "%016" PRIX64, high, low);
|
436 |
+
CHECK_ALLOCATED(num_str);
|
437 |
+
|
438 |
+
_ZVAL_STRING(z_value, num_str);
|
439 |
+
efree(num_str);
|
440 |
+
}
|
441 |
+
|
442 |
+
static void handle_uint64(const MMDB_entry_data_list_s *entry_data_list,
|
443 |
+
zval *z_value TSRMLS_DC)
|
444 |
+
{
|
445 |
+
// We return it as a string because PHP uses signed longs
|
446 |
+
char *int_str;
|
447 |
+
spprintf(&int_str, 0, "%" PRIu64,
|
448 |
+
entry_data_list->entry_data.uint64);
|
449 |
+
CHECK_ALLOCATED(int_str);
|
450 |
+
|
451 |
+
_ZVAL_STRING(z_value, int_str);
|
452 |
+
efree(int_str);
|
453 |
+
}
|
454 |
+
|
455 |
+
static zend_class_entry *lookup_class(const char *name TSRMLS_DC)
|
456 |
+
{
|
457 |
+
#ifdef ZEND_ENGINE_3
|
458 |
+
zend_string *n = zend_string_init(name, strlen(name), 0);
|
459 |
+
zend_class_entry *ce = zend_lookup_class(n);
|
460 |
+
zend_string_release(n);
|
461 |
+
if( NULL == ce ) {
|
462 |
+
zend_error(E_ERROR, "Class %s not found", name);
|
463 |
+
}
|
464 |
+
return ce;
|
465 |
+
#else
|
466 |
+
zend_class_entry **ce;
|
467 |
+
if (FAILURE ==
|
468 |
+
zend_lookup_class(name, strlen(name),
|
469 |
+
&ce TSRMLS_CC)) {
|
470 |
+
zend_error(E_ERROR, "Class %s not found", name);
|
471 |
+
}
|
472 |
+
return *ce;
|
473 |
+
#endif
|
474 |
+
}
|
475 |
+
|
476 |
+
static void maxminddb_free_storage(free_obj_t *object TSRMLS_DC)
|
477 |
+
{
|
478 |
+
maxminddb_obj *obj = php_maxminddb_fetch_object((zend_object *)object TSRMLS_CC);
|
479 |
+
if (obj->mmdb != NULL) {
|
480 |
+
MMDB_close(obj->mmdb);
|
481 |
+
efree(obj->mmdb);
|
482 |
+
}
|
483 |
+
|
484 |
+
zend_object_std_dtor(&obj->std TSRMLS_CC);
|
485 |
+
#ifndef ZEND_ENGINE_3
|
486 |
+
efree(object);
|
487 |
+
#endif
|
488 |
+
}
|
489 |
+
|
490 |
+
#ifdef ZEND_ENGINE_3
|
491 |
+
static zend_object *maxminddb_create_handler(
|
492 |
+
zend_class_entry *type TSRMLS_DC)
|
493 |
+
{
|
494 |
+
maxminddb_obj *obj = (maxminddb_obj *)ecalloc(1, sizeof(maxminddb_obj));
|
495 |
+
zend_object_std_init(&obj->std, type TSRMLS_CC);
|
496 |
+
object_properties_init(&(obj->std), type);
|
497 |
+
|
498 |
+
obj->std.handlers = &maxminddb_obj_handlers;
|
499 |
+
|
500 |
+
return &obj->std;
|
501 |
+
}
|
502 |
+
#else
|
503 |
+
static zend_object_value maxminddb_create_handler(
|
504 |
+
zend_class_entry *type TSRMLS_DC)
|
505 |
+
{
|
506 |
+
zend_object_value retval;
|
507 |
+
|
508 |
+
maxminddb_obj *obj = (maxminddb_obj *)ecalloc(1, sizeof(maxminddb_obj));
|
509 |
+
zend_object_std_init(&obj->std, type TSRMLS_CC);
|
510 |
+
object_properties_init(&(obj->std), type);
|
511 |
+
|
512 |
+
retval.handle = zend_objects_store_put(obj, NULL,
|
513 |
+
maxminddb_free_storage,
|
514 |
+
NULL TSRMLS_CC);
|
515 |
+
retval.handlers = &maxminddb_obj_handlers;
|
516 |
+
|
517 |
+
return retval;
|
518 |
+
}
|
519 |
+
#endif
|
520 |
+
|
521 |
+
/* *INDENT-OFF* */
|
522 |
+
static zend_function_entry maxminddb_methods[] = {
|
523 |
+
PHP_ME(MaxMind_Db_Reader, __construct, NULL,
|
524 |
+
ZEND_ACC_PUBLIC | ZEND_ACC_CTOR)
|
525 |
+
PHP_ME(MaxMind_Db_Reader, close, NULL, ZEND_ACC_PUBLIC)
|
526 |
+
PHP_ME(MaxMind_Db_Reader, get, NULL, ZEND_ACC_PUBLIC)
|
527 |
+
PHP_ME(MaxMind_Db_Reader, metadata, NULL, ZEND_ACC_PUBLIC)
|
528 |
+
{ NULL, NULL, NULL }
|
529 |
+
};
|
530 |
+
/* *INDENT-ON* */
|
531 |
+
|
532 |
+
PHP_MINIT_FUNCTION(maxminddb){
|
533 |
+
zend_class_entry ce;
|
534 |
+
|
535 |
+
INIT_CLASS_ENTRY(ce, PHP_MAXMINDDB_READER_NS, maxminddb_methods);
|
536 |
+
maxminddb_ce = zend_register_internal_class(&ce TSRMLS_CC);
|
537 |
+
maxminddb_ce->create_object = maxminddb_create_handler;
|
538 |
+
memcpy(&maxminddb_obj_handlers,
|
539 |
+
zend_get_std_object_handlers(), sizeof(zend_object_handlers));
|
540 |
+
maxminddb_obj_handlers.clone_obj = NULL;
|
541 |
+
#ifdef ZEND_ENGINE_3
|
542 |
+
maxminddb_obj_handlers.offset = XtOffsetOf(maxminddb_obj, std);
|
543 |
+
maxminddb_obj_handlers.free_obj = maxminddb_free_storage;
|
544 |
+
#endif
|
545 |
+
|
546 |
+
return SUCCESS;
|
547 |
+
}
|
548 |
+
|
549 |
+
zend_module_entry maxminddb_module_entry = {
|
550 |
+
STANDARD_MODULE_HEADER,
|
551 |
+
PHP_MAXMINDDB_EXTNAME,
|
552 |
+
NULL,
|
553 |
+
PHP_MINIT(maxminddb),
|
554 |
+
NULL,
|
555 |
+
NULL,
|
556 |
+
NULL,
|
557 |
+
NULL,
|
558 |
+
PHP_MAXMINDDB_VERSION,
|
559 |
+
STANDARD_MODULE_PROPERTIES
|
560 |
+
};
|
561 |
+
|
562 |
+
#ifdef COMPILE_DL_MAXMINDDB
|
563 |
+
ZEND_GET_MODULE(maxminddb)
|
564 |
+
#endif
|
vendor/maxmind-db/reader/ext/php_maxminddb.h
ADDED
@@ -0,0 +1,24 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/* MaxMind, Inc., licenses this file to you under the Apache License, Version
|
2 |
+
* 2.0 (the "License"); you may not use this file except in compliance with
|
3 |
+
* the License. You may obtain a copy of the License at
|
4 |
+
*
|
5 |
+
* http://www.apache.org/licenses/LICENSE-2.0
|
6 |
+
*
|
7 |
+
* Unless required by applicable law or agreed to in writing, software
|
8 |
+
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
9 |
+
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
10 |
+
* License for the specific language governing permissions and limitations
|
11 |
+
* under the License.
|
12 |
+
*/
|
13 |
+
|
14 |
+
#include <zend_interfaces.h>
|
15 |
+
|
16 |
+
#ifndef PHP_MAXMINDDB_H
|
17 |
+
#define PHP_MAXMINDDB_H 1
|
18 |
+
#define PHP_MAXMINDDB_VERSION "1.2.0"
|
19 |
+
#define PHP_MAXMINDDB_EXTNAME "maxminddb"
|
20 |
+
|
21 |
+
extern zend_module_entry maxminddb_module_entry;
|
22 |
+
#define phpext_maxminddb_ptr &maxminddb_module_entry
|
23 |
+
|
24 |
+
#endif
|
vendor/maxmind-db/reader/ext/tests/001-load.phpt
ADDED
@@ -0,0 +1,12 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
--TEST--
|
2 |
+
Check for maxminddb presence
|
3 |
+
--SKIPIF--
|
4 |
+
<?php if (!extension_loaded('maxminddb')) {
|
5 |
+
echo 'skip';
|
6 |
+
} ?>
|
7 |
+
--FILE--
|
8 |
+
<?php
|
9 |
+
echo 'maxminddb extension is available';
|
10 |
+
?>
|
11 |
+
--EXPECT--
|
12 |
+
maxminddb extension is available
|
vendor/maxmind-db/reader/ext/tests/002-final.phpt
ADDED
@@ -0,0 +1,13 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
--TEST--
|
2 |
+
Check that Reader class is not final
|
3 |
+
--SKIPIF--
|
4 |
+
<?php if (!extension_loaded('maxminddb')) {
|
5 |
+
echo 'skip';
|
6 |
+
} ?>
|
7 |
+
--FILE--
|
8 |
+
<?php
|
9 |
+
$reflectionClass = new \ReflectionClass('MaxMind\Db\Reader');
|
10 |
+
var_dump($reflectionClass->isFinal());
|
11 |
+
?>
|
12 |
+
--EXPECT--
|
13 |
+
bool(false)
|
vendor/maxmind-db/reader/src/MaxMind/Db/Reader.php
ADDED
@@ -0,0 +1,309 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace MaxMind\Db;
|
4 |
+
|
5 |
+
use MaxMind\Db\Reader\Decoder;
|
6 |
+
use MaxMind\Db\Reader\InvalidDatabaseException;
|
7 |
+
use MaxMind\Db\Reader\Metadata;
|
8 |
+
use MaxMind\Db\Reader\Util;
|
9 |
+
|
10 |
+
/**
|
11 |
+
* Instances of this class provide a reader for the MaxMind DB format. IP
|
12 |
+
* addresses can be looked up using the <code>get</code> method.
|
13 |
+
*/
|
14 |
+
class Reader
|
15 |
+
{
|
16 |
+
private static $DATA_SECTION_SEPARATOR_SIZE = 16;
|
17 |
+
private static $METADATA_START_MARKER = "\xAB\xCD\xEFMaxMind.com";
|
18 |
+
private static $METADATA_START_MARKER_LENGTH = 14;
|
19 |
+
private static $METADATA_MAX_SIZE = 131072; // 128 * 1024 = 128KB
|
20 |
+
|
21 |
+
private $decoder;
|
22 |
+
private $fileHandle;
|
23 |
+
private $fileSize;
|
24 |
+
private $ipV4Start;
|
25 |
+
private $metadata;
|
26 |
+
|
27 |
+
/**
|
28 |
+
* Constructs a Reader for the MaxMind DB format. The file passed to it must
|
29 |
+
* be a valid MaxMind DB file such as a GeoIp2 database file.
|
30 |
+
*
|
31 |
+
* @param string $database
|
32 |
+
* the MaxMind DB file to use
|
33 |
+
*
|
34 |
+
* @throws \InvalidArgumentException for invalid database path or unknown arguments
|
35 |
+
* @throws \MaxMind\Db\Reader\InvalidDatabaseException
|
36 |
+
* if the database is invalid or there is an error reading
|
37 |
+
* from it
|
38 |
+
*/
|
39 |
+
public function __construct($database)
|
40 |
+
{
|
41 |
+
if (func_num_args() !== 1) {
|
42 |
+
throw new \InvalidArgumentException(
|
43 |
+
'The constructor takes exactly one argument.'
|
44 |
+
);
|
45 |
+
}
|
46 |
+
|
47 |
+
if (!is_readable($database)) {
|
48 |
+
throw new \InvalidArgumentException(
|
49 |
+
"The file \"$database\" does not exist or is not readable."
|
50 |
+
);
|
51 |
+
}
|
52 |
+
$this->fileHandle = @fopen($database, 'rb');
|
53 |
+
if ($this->fileHandle === false) {
|
54 |
+
throw new \InvalidArgumentException(
|
55 |
+
"Error opening \"$database\"."
|
56 |
+
);
|
57 |
+
}
|
58 |
+
$this->fileSize = @filesize($database);
|
59 |
+
if ($this->fileSize === false) {
|
60 |
+
throw new \UnexpectedValueException(
|
61 |
+
"Error determining the size of \"$database\"."
|
62 |
+
);
|
63 |
+
}
|
64 |
+
|
65 |
+
$start = $this->findMetadataStart($database);
|
66 |
+
$metadataDecoder = new Decoder($this->fileHandle, $start);
|
67 |
+
list($metadataArray) = $metadataDecoder->decode($start);
|
68 |
+
$this->metadata = new Metadata($metadataArray);
|
69 |
+
$this->decoder = new Decoder(
|
70 |
+
$this->fileHandle,
|
71 |
+
$this->metadata->searchTreeSize + self::$DATA_SECTION_SEPARATOR_SIZE
|
72 |
+
);
|
73 |
+
}
|
74 |
+
|
75 |
+
/**
|
76 |
+
* Looks up the <code>address</code> in the MaxMind DB.
|
77 |
+
*
|
78 |
+
* @param string $ipAddress
|
79 |
+
* the IP address to look up
|
80 |
+
*
|
81 |
+
* @throws \BadMethodCallException if this method is called on a closed database
|
82 |
+
* @throws \InvalidArgumentException if something other than a single IP address is passed to the method
|
83 |
+
* @throws InvalidDatabaseException
|
84 |
+
* if the database is invalid or there is an error reading
|
85 |
+
* from it
|
86 |
+
*
|
87 |
+
* @return array the record for the IP address
|
88 |
+
*/
|
89 |
+
public function get($ipAddress)
|
90 |
+
{
|
91 |
+
if (func_num_args() !== 1) {
|
92 |
+
throw new \InvalidArgumentException(
|
93 |
+
'Method takes exactly one argument.'
|
94 |
+
);
|
95 |
+
}
|
96 |
+
|
97 |
+
if (!is_resource($this->fileHandle)) {
|
98 |
+
throw new \BadMethodCallException(
|
99 |
+
'Attempt to read from a closed MaxMind DB.'
|
100 |
+
);
|
101 |
+
}
|
102 |
+
|
103 |
+
if (!filter_var($ipAddress, FILTER_VALIDATE_IP)) {
|
104 |
+
throw new \InvalidArgumentException(
|
105 |
+
"The value \"$ipAddress\" is not a valid IP address."
|
106 |
+
);
|
107 |
+
}
|
108 |
+
|
109 |
+
if ($this->metadata->ipVersion === 4 && strrpos($ipAddress, ':')) {
|
110 |
+
throw new \InvalidArgumentException(
|
111 |
+
"Error looking up $ipAddress. You attempted to look up an"
|
112 |
+
. ' IPv6 address in an IPv4-only database.'
|
113 |
+
);
|
114 |
+
}
|
115 |
+
$pointer = $this->findAddressInTree($ipAddress);
|
116 |
+
if ($pointer === 0) {
|
117 |
+
return null;
|
118 |
+
}
|
119 |
+
|
120 |
+
return $this->resolveDataPointer($pointer);
|
121 |
+
}
|
122 |
+
|
123 |
+
private function findAddressInTree($ipAddress)
|
124 |
+
{
|
125 |
+
// XXX - could simplify. Done as a byte array to ease porting
|
126 |
+
$rawAddress = array_merge(unpack('C*', inet_pton($ipAddress)));
|
127 |
+
|
128 |
+
$bitCount = count($rawAddress) * 8;
|
129 |
+
|
130 |
+
// The first node of the tree is always node 0, at the beginning of the
|
131 |
+
// value
|
132 |
+
$node = $this->startNode($bitCount);
|
133 |
+
|
134 |
+
for ($i = 0; $i < $bitCount; $i++) {
|
135 |
+
if ($node >= $this->metadata->nodeCount) {
|
136 |
+
break;
|
137 |
+
}
|
138 |
+
$tempBit = 0xFF & $rawAddress[$i >> 3];
|
139 |
+
$bit = 1 & ($tempBit >> 7 - ($i % 8));
|
140 |
+
|
141 |
+
$node = $this->readNode($node, $bit);
|
142 |
+
}
|
143 |
+
if ($node === $this->metadata->nodeCount) {
|
144 |
+
// Record is empty
|
145 |
+
return 0;
|
146 |
+
} elseif ($node > $this->metadata->nodeCount) {
|
147 |
+
// Record is a data pointer
|
148 |
+
return $node;
|
149 |
+
}
|
150 |
+
throw new InvalidDatabaseException('Something bad happened');
|
151 |
+
}
|
152 |
+
|
153 |
+
private function startNode($length)
|
154 |
+
{
|
155 |
+
// Check if we are looking up an IPv4 address in an IPv6 tree. If this
|
156 |
+
// is the case, we can skip over the first 96 nodes.
|
157 |
+
if ($this->metadata->ipVersion === 6 && $length === 32) {
|
158 |
+
return $this->ipV4StartNode();
|
159 |
+
}
|
160 |
+
// The first node of the tree is always node 0, at the beginning of the
|
161 |
+
// value
|
162 |
+
return 0;
|
163 |
+
}
|
164 |
+
|
165 |
+
private function ipV4StartNode()
|
166 |
+
{
|
167 |
+
// This is a defensive check. There is no reason to call this when you
|
168 |
+
// have an IPv4 tree.
|
169 |
+
if ($this->metadata->ipVersion === 4) {
|
170 |
+
return 0;
|
171 |
+
}
|
172 |
+
|
173 |
+
if ($this->ipV4Start) {
|
174 |
+
return $this->ipV4Start;
|
175 |
+
}
|
176 |
+
$node = 0;
|
177 |
+
|
178 |
+
for ($i = 0; $i < 96 && $node < $this->metadata->nodeCount; $i++) {
|
179 |
+
$node = $this->readNode($node, 0);
|
180 |
+
}
|
181 |
+
$this->ipV4Start = $node;
|
182 |
+
|
183 |
+
return $node;
|
184 |
+
}
|
185 |
+
|
186 |
+
private function readNode($nodeNumber, $index)
|
187 |
+
{
|
188 |
+
$baseOffset = $nodeNumber * $this->metadata->nodeByteSize;
|
189 |
+
|
190 |
+
// XXX - probably could condense this.
|
191 |
+
switch ($this->metadata->recordSize) {
|
192 |
+
case 24:
|
193 |
+
$bytes = Util::read($this->fileHandle, $baseOffset + $index * 3, 3);
|
194 |
+
list(, $node) = unpack('N', "\x00" . $bytes);
|
195 |
+
|
196 |
+
return $node;
|
197 |
+
case 28:
|
198 |
+
$middleByte = Util::read($this->fileHandle, $baseOffset + 3, 1);
|
199 |
+
list(, $middle) = unpack('C', $middleByte);
|
200 |
+
if ($index === 0) {
|
201 |
+
$middle = (0xF0 & $middle) >> 4;
|
202 |
+
} else {
|
203 |
+
$middle = 0x0F & $middle;
|
204 |
+
}
|
205 |
+
$bytes = Util::read($this->fileHandle, $baseOffset + $index * 4, 3);
|
206 |
+
list(, $node) = unpack('N', chr($middle) . $bytes);
|
207 |
+
|
208 |
+
return $node;
|
209 |
+
case 32:
|
210 |
+
$bytes = Util::read($this->fileHandle, $baseOffset + $index * 4, 4);
|
211 |
+
list(, $node) = unpack('N', $bytes);
|
212 |
+
|
213 |
+
return $node;
|
214 |
+
default:
|
215 |
+
throw new InvalidDatabaseException(
|
216 |
+
'Unknown record size: '
|
217 |
+
. $this->metadata->recordSize
|
218 |
+
);
|
219 |
+
}
|
220 |
+
}
|
221 |
+
|
222 |
+
private function resolveDataPointer($pointer)
|
223 |
+
{
|
224 |
+
$resolved = $pointer - $this->metadata->nodeCount
|
225 |
+
+ $this->metadata->searchTreeSize;
|
226 |
+
if ($resolved > $this->fileSize) {
|
227 |
+
throw new InvalidDatabaseException(
|
228 |
+
"The MaxMind DB file's search tree is corrupt"
|
229 |
+
);
|
230 |
+
}
|
231 |
+
|
232 |
+
list($data) = $this->decoder->decode($resolved);
|
233 |
+
|
234 |
+
return $data;
|
235 |
+
}
|
236 |
+
|
237 |
+
/*
|
238 |
+
* This is an extremely naive but reasonably readable implementation. There
|
239 |
+
* are much faster algorithms (e.g., Boyer-Moore) for this if speed is ever
|
240 |
+
* an issue, but I suspect it won't be.
|
241 |
+
*/
|
242 |
+
private function findMetadataStart($filename)
|
243 |
+
{
|
244 |
+
$handle = $this->fileHandle;
|
245 |
+
$fstat = fstat($handle);
|
246 |
+
$fileSize = $fstat['size'];
|
247 |
+
$marker = self::$METADATA_START_MARKER;
|
248 |
+
$markerLength = self::$METADATA_START_MARKER_LENGTH;
|
249 |
+
$metadataMaxLengthExcludingMarker
|
250 |
+
= min(self::$METADATA_MAX_SIZE, $fileSize) - $markerLength;
|
251 |
+
|
252 |
+
for ($i = 0; $i <= $metadataMaxLengthExcludingMarker; $i++) {
|
253 |
+
for ($j = 0; $j < $markerLength; $j++) {
|
254 |
+
fseek($handle, $fileSize - $i - $j - 1);
|
255 |
+
$matchBit = fgetc($handle);
|
256 |
+
if ($matchBit !== $marker[$markerLength - $j - 1]) {
|
257 |
+
continue 2;
|
258 |
+
}
|
259 |
+
}
|
260 |
+
|
261 |
+
return $fileSize - $i;
|
262 |
+
}
|
263 |
+
throw new InvalidDatabaseException(
|
264 |
+
"Error opening database file ($filename). " .
|
265 |
+
'Is this a valid MaxMind DB file?'
|
266 |
+
);
|
267 |
+
}
|
268 |
+
|
269 |
+
/**
|
270 |
+
* @throws \InvalidArgumentException if arguments are passed to the method
|
271 |
+
* @throws \BadMethodCallException if the database has been closed
|
272 |
+
*
|
273 |
+
* @return Metadata object for the database
|
274 |
+
*/
|
275 |
+
public function metadata()
|
276 |
+
{
|
277 |
+
if (func_num_args()) {
|
278 |
+
throw new \InvalidArgumentException(
|
279 |
+
'Method takes no arguments.'
|
280 |
+
);
|
281 |
+
}
|
282 |
+
|
283 |
+
// Not technically required, but this makes it consistent with
|
284 |
+
// C extension and it allows us to change our implementation later.
|
285 |
+
if (!is_resource($this->fileHandle)) {
|
286 |
+
throw new \BadMethodCallException(
|
287 |
+
'Attempt to read from a closed MaxMind DB.'
|
288 |
+
);
|
289 |
+
}
|
290 |
+
|
291 |
+
return $this->metadata;
|
292 |
+
}
|
293 |
+
|
294 |
+
/**
|
295 |
+
* Closes the MaxMind DB and returns resources to the system.
|
296 |
+
*
|
297 |
+
* @throws \Exception
|
298 |
+
* if an I/O error occurs
|
299 |
+
*/
|
300 |
+
public function close()
|
301 |
+
{
|
302 |
+
if (!is_resource($this->fileHandle)) {
|
303 |
+
throw new \BadMethodCallException(
|
304 |
+
'Attempt to close a closed MaxMind DB.'
|
305 |
+
);
|
306 |
+
}
|
307 |
+
fclose($this->fileHandle);
|
308 |
+
}
|
309 |
+
}
|
vendor/maxmind-db/reader/src/MaxMind/Db/Reader/Decoder.php
ADDED
@@ -0,0 +1,311 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace MaxMind\Db\Reader;
|
4 |
+
|
5 |
+
class Decoder
|
6 |
+
{
|
7 |
+
private $fileStream;
|
8 |
+
private $pointerBase;
|
9 |
+
// This is only used for unit testing
|
10 |
+
private $pointerTestHack;
|
11 |
+
private $switchByteOrder;
|
12 |
+
|
13 |
+
private $types = [
|
14 |
+
0 => 'extended',
|
15 |
+
1 => 'pointer',
|
16 |
+
2 => 'utf8_string',
|
17 |
+
3 => 'double',
|
18 |
+
4 => 'bytes',
|
19 |
+
5 => 'uint16',
|
20 |
+
6 => 'uint32',
|
21 |
+
7 => 'map',
|
22 |
+
8 => 'int32',
|
23 |
+
9 => 'uint64',
|
24 |
+
10 => 'uint128',
|
25 |
+
11 => 'array',
|
26 |
+
12 => 'container',
|
27 |
+
13 => 'end_marker',
|
28 |
+
14 => 'boolean',
|
29 |
+
15 => 'float',
|
30 |
+
];
|
31 |
+
|
32 |
+
public function __construct(
|
33 |
+
$fileStream,
|
34 |
+
$pointerBase = 0,
|
35 |
+
$pointerTestHack = false
|
36 |
+
) {
|
37 |
+
$this->fileStream = $fileStream;
|
38 |
+
$this->pointerBase = $pointerBase;
|
39 |
+
$this->pointerTestHack = $pointerTestHack;
|
40 |
+
|
41 |
+
$this->switchByteOrder = $this->isPlatformLittleEndian();
|
42 |
+
}
|
43 |
+
|
44 |
+
public function decode($offset)
|
45 |
+
{
|
46 |
+
list(, $ctrlByte) = unpack(
|
47 |
+
'C',
|
48 |
+
Util::read($this->fileStream, $offset, 1)
|
49 |
+
);
|
50 |
+
$offset++;
|
51 |
+
|
52 |
+
$type = $this->types[$ctrlByte >> 5];
|
53 |
+
|
54 |
+
// Pointers are a special case, we don't read the next $size bytes, we
|
55 |
+
// use the size to determine the length of the pointer and then follow
|
56 |
+
// it.
|
57 |
+
if ($type === 'pointer') {
|
58 |
+
list($pointer, $offset) = $this->decodePointer($ctrlByte, $offset);
|
59 |
+
|
60 |
+
// for unit testing
|
61 |
+
if ($this->pointerTestHack) {
|
62 |
+
return [$pointer];
|
63 |
+
}
|
64 |
+
|
65 |
+
list($result) = $this->decode($pointer);
|
66 |
+
|
67 |
+
return [$result, $offset];
|
68 |
+
}
|
69 |
+
|
70 |
+
if ($type === 'extended') {
|
71 |
+
list(, $nextByte) = unpack(
|
72 |
+
'C',
|
73 |
+
Util::read($this->fileStream, $offset, 1)
|
74 |
+
);
|
75 |
+
|
76 |
+
$typeNum = $nextByte + 7;
|
77 |
+
|
78 |
+
if ($typeNum < 8) {
|
79 |
+
throw new InvalidDatabaseException(
|
80 |
+
'Something went horribly wrong in the decoder. An extended type '
|
81 |
+
. 'resolved to a type number < 8 ('
|
82 |
+
. $this->types[$typeNum]
|
83 |
+
. ')'
|
84 |
+
);
|
85 |
+
}
|
86 |
+
|
87 |
+
$type = $this->types[$typeNum];
|
88 |
+
$offset++;
|
89 |
+
}
|
90 |
+
|
91 |
+
list($size, $offset) = $this->sizeFromCtrlByte($ctrlByte, $offset);
|
92 |
+
|
93 |
+
return $this->decodeByType($type, $offset, $size);
|
94 |
+
}
|
95 |
+
|
96 |
+
private function decodeByType($type, $offset, $size)
|
97 |
+
{
|
98 |
+
switch ($type) {
|
99 |
+
case 'map':
|
100 |
+
return $this->decodeMap($size, $offset);
|
101 |
+
case 'array':
|
102 |
+
return $this->decodeArray($size, $offset);
|
103 |
+
case 'boolean':
|
104 |
+
return [$this->decodeBoolean($size), $offset];
|
105 |
+
}
|
106 |
+
|
107 |
+
$newOffset = $offset + $size;
|
108 |
+
$bytes = Util::read($this->fileStream, $offset, $size);
|
109 |
+
switch ($type) {
|
110 |
+
case 'utf8_string':
|
111 |
+
return [$this->decodeString($bytes), $newOffset];
|
112 |
+
case 'double':
|
113 |
+
$this->verifySize(8, $size);
|
114 |
+
|
115 |
+
return [$this->decodeDouble($bytes), $newOffset];
|
116 |
+
case 'float':
|
117 |
+
$this->verifySize(4, $size);
|
118 |
+
|
119 |
+
return [$this->decodeFloat($bytes), $newOffset];
|
120 |
+
case 'bytes':
|
121 |
+
return [$bytes, $newOffset];
|
122 |
+
case 'uint16':
|
123 |
+
case 'uint32':
|
124 |
+
return [$this->decodeUint($bytes), $newOffset];
|
125 |
+
case 'int32':
|
126 |
+
return [$this->decodeInt32($bytes), $newOffset];
|
127 |
+
case 'uint64':
|
128 |
+
case 'uint128':
|
129 |
+
return [$this->decodeBigUint($bytes, $size), $newOffset];
|
130 |
+
default:
|
131 |
+
throw new InvalidDatabaseException(
|
132 |
+
'Unknown or unexpected type: ' . $type
|
133 |
+
);
|
134 |
+
}
|
135 |
+
}
|
136 |
+
|
137 |
+
private function verifySize($expected, $actual)
|
138 |
+
{
|
139 |
+
if ($expected !== $actual) {
|
140 |
+
throw new InvalidDatabaseException(
|
141 |
+
"The MaxMind DB file's data section contains bad data (unknown data type or corrupt data)"
|
142 |
+
);
|
143 |
+
}
|
144 |
+
}
|
145 |
+
|
146 |
+
private function decodeArray($size, $offset)
|
147 |
+
{
|
148 |
+
$array = [];
|
149 |
+
|
150 |
+
for ($i = 0; $i < $size; $i++) {
|
151 |
+
list($value, $offset) = $this->decode($offset);
|
152 |
+
array_push($array, $value);
|
153 |
+
}
|
154 |
+
|
155 |
+
return [$array, $offset];
|
156 |
+
}
|
157 |
+
|
158 |
+
private function decodeBoolean($size)
|
159 |
+
{
|
160 |
+
return $size === 0 ? false : true;
|
161 |
+
}
|
162 |
+
|
163 |
+
private function decodeDouble($bits)
|
164 |
+
{
|
165 |
+
// XXX - Assumes IEEE 754 double on platform
|
166 |
+
list(, $double) = unpack('d', $this->maybeSwitchByteOrder($bits));
|
167 |
+
|
168 |
+
return $double;
|
169 |
+
}
|
170 |
+
|
171 |
+
private function decodeFloat($bits)
|
172 |
+
{
|
173 |
+
// XXX - Assumes IEEE 754 floats on platform
|
174 |
+
list(, $float) = unpack('f', $this->maybeSwitchByteOrder($bits));
|
175 |
+
|
176 |
+
return $float;
|
177 |
+
}
|
178 |
+
|
179 |
+
private function decodeInt32($bytes)
|
180 |
+
{
|
181 |
+
$bytes = $this->zeroPadLeft($bytes, 4);
|
182 |
+
list(, $int) = unpack('l', $this->maybeSwitchByteOrder($bytes));
|
183 |
+
|
184 |
+
return $int;
|
185 |
+
}
|
186 |
+
|
187 |
+
private function decodeMap($size, $offset)
|
188 |
+
{
|
189 |
+
$map = [];
|
190 |
+
|
191 |
+
for ($i = 0; $i < $size; $i++) {
|
192 |
+
list($key, $offset) = $this->decode($offset);
|
193 |
+
list($value, $offset) = $this->decode($offset);
|
194 |
+
$map[$key] = $value;
|
195 |
+
}
|
196 |
+
|
197 |
+
return [$map, $offset];
|
198 |
+
}
|
199 |
+
|
200 |
+
private $pointerValueOffset = [
|
201 |
+
1 => 0,
|
202 |
+
2 => 2048,
|
203 |
+
3 => 526336,
|
204 |
+
4 => 0,
|
205 |
+
];
|
206 |
+
|
207 |
+
private function decodePointer($ctrlByte, $offset)
|
208 |
+
{
|
209 |
+
$pointerSize = (($ctrlByte >> 3) & 0x3) + 1;
|
210 |
+
|
211 |
+
$buffer = Util::read($this->fileStream, $offset, $pointerSize);
|
212 |
+
$offset = $offset + $pointerSize;
|
213 |
+
|
214 |
+
$packed = $pointerSize === 4
|
215 |
+
? $buffer
|
216 |
+
: (pack('C', $ctrlByte & 0x7)) . $buffer;
|
217 |
+
|
218 |
+
$unpacked = $this->decodeUint($packed);
|
219 |
+
$pointer = $unpacked + $this->pointerBase
|
220 |
+
+ $this->pointerValueOffset[$pointerSize];
|
221 |
+
|
222 |
+
return [$pointer, $offset];
|
223 |
+
}
|
224 |
+
|
225 |
+
private function decodeUint($bytes)
|
226 |
+
{
|
227 |
+
list(, $int) = unpack('N', $this->zeroPadLeft($bytes, 4));
|
228 |
+
|
229 |
+
return $int;
|
230 |
+
}
|
231 |
+
|
232 |
+
private function decodeBigUint($bytes, $byteLength)
|
233 |
+
{
|
234 |
+
$maxUintBytes = log(PHP_INT_MAX, 2) / 8;
|
235 |
+
|
236 |
+
if ($byteLength === 0) {
|
237 |
+
return 0;
|
238 |
+
}
|
239 |
+
|
240 |
+
$numberOfLongs = ceil($byteLength / 4);
|
241 |
+
$paddedLength = $numberOfLongs * 4;
|
242 |
+
$paddedBytes = $this->zeroPadLeft($bytes, $paddedLength);
|
243 |
+
$unpacked = array_merge(unpack("N$numberOfLongs", $paddedBytes));
|
244 |
+
|
245 |
+
$integer = 0;
|
246 |
+
|
247 |
+
// 2^32
|
248 |
+
$twoTo32 = '4294967296';
|
249 |
+
|
250 |
+
foreach ($unpacked as $part) {
|
251 |
+
// We only use gmp or bcmath if the final value is too big
|
252 |
+
if ($byteLength <= $maxUintBytes) {
|
253 |
+
$integer = ($integer << 32) + $part;
|
254 |
+
} elseif (extension_loaded('gmp')) {
|
255 |
+
$integer = gmp_strval(gmp_add(gmp_mul($integer, $twoTo32), $part));
|
256 |
+
} elseif (extension_loaded('bcmath')) {
|
257 |
+
$integer = bcadd(bcmul($integer, $twoTo32), $part);
|
258 |
+
} else {
|
259 |
+
throw new \RuntimeException(
|
260 |
+
'The gmp or bcmath extension must be installed to read this database.'
|
261 |
+
);
|
262 |
+
}
|
263 |
+
}
|
264 |
+
|
265 |
+
return $integer;
|
266 |
+
}
|
267 |
+
|
268 |
+
private function decodeString($bytes)
|
269 |
+
{
|
270 |
+
// XXX - NOOP. As far as I know, the end user has to explicitly set the
|
271 |
+
// encoding in PHP. Strings are just bytes.
|
272 |
+
return $bytes;
|
273 |
+
}
|
274 |
+
|
275 |
+
private function sizeFromCtrlByte($ctrlByte, $offset)
|
276 |
+
{
|
277 |
+
$size = $ctrlByte & 0x1f;
|
278 |
+
$bytesToRead = $size < 29 ? 0 : $size - 28;
|
279 |
+
$bytes = Util::read($this->fileStream, $offset, $bytesToRead);
|
280 |
+
$decoded = $this->decodeUint($bytes);
|
281 |
+
|
282 |
+
if ($size === 29) {
|
283 |
+
$size = 29 + $decoded;
|
284 |
+
} elseif ($size === 30) {
|
285 |
+
$size = 285 + $decoded;
|
286 |
+
} elseif ($size > 30) {
|
287 |
+
$size = ($decoded & (0x0FFFFFFF >> (32 - (8 * $bytesToRead))))
|
288 |
+
+ 65821;
|
289 |
+
}
|
290 |
+
|
291 |
+
return [$size, $offset + $bytesToRead];
|
292 |
+
}
|
293 |
+
|
294 |
+
private function zeroPadLeft($content, $desiredLength)
|
295 |
+
{
|
296 |
+
return str_pad($content, $desiredLength, "\x00", STR_PAD_LEFT);
|
297 |
+
}
|
298 |
+
|
299 |
+
private function maybeSwitchByteOrder($bytes)
|
300 |
+
{
|
301 |
+
return $this->switchByteOrder ? strrev($bytes) : $bytes;
|
302 |
+
}
|
303 |
+
|
304 |
+
private function isPlatformLittleEndian()
|
305 |
+
{
|
306 |
+
$testint = 0x00FF;
|
307 |
+
$packed = pack('S', $testint);
|
308 |
+
|
309 |
+
return $testint === current(unpack('v', $packed));
|
310 |
+
}
|
311 |
+
}
|
vendor/maxmind-db/reader/src/MaxMind/Db/Reader/InvalidDatabaseException.php
ADDED
@@ -0,0 +1,10 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace MaxMind\Db\Reader;
|
4 |
+
|
5 |
+
/**
|
6 |
+
* This class should be thrown when unexpected data is found in the database.
|
7 |
+
*/
|
8 |
+
class InvalidDatabaseException extends \Exception
|
9 |
+
{
|
10 |
+
}
|
vendor/maxmind-db/reader/src/MaxMind/Db/Reader/Metadata.php
ADDED
@@ -0,0 +1,69 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace MaxMind\Db\Reader;
|
4 |
+
|
5 |
+
/**
|
6 |
+
* This class provides the metadata for the MaxMind DB file.
|
7 |
+
*
|
8 |
+
* @property int nodeCount This is an unsigned 32-bit integer indicating
|
9 |
+
* the number of nodes in the search tree.
|
10 |
+
* @property int recordSize This is an unsigned 16-bit integer. It
|
11 |
+
* indicates the number of bits in a record in the search tree. Note that each
|
12 |
+
* node consists of two records.
|
13 |
+
* @property int ipVersion This is an unsigned 16-bit integer which is
|
14 |
+
* always 4 or 6. It indicates whether the database contains IPv4 or IPv6
|
15 |
+
* address data.
|
16 |
+
* @property string databaseType This is a string that indicates the structure
|
17 |
+
* of each data record associated with an IP address. The actual definition of
|
18 |
+
* these structures is left up to the database creator.
|
19 |
+
* @property array languages An array of strings, each of which is a language
|
20 |
+
* code. A given record may contain data items that have been localized to
|
21 |
+
* some or all of these languages. This may be undefined.
|
22 |
+
* @property int binaryFormatMajorVersion This is an unsigned 16-bit
|
23 |
+
* integer indicating the major version number for the database's binary
|
24 |
+
* format.
|
25 |
+
* @property int binaryFormatMinorVersion This is an unsigned 16-bit
|
26 |
+
* integer indicating the minor version number for the database's binary format.
|
27 |
+
* @property int buildEpoch This is an unsigned 64-bit integer that
|
28 |
+
* contains the database build timestamp as a Unix epoch value.
|
29 |
+
* @property array description This key will always point to a map
|
30 |
+
* (associative array). The keys of that map will be language codes, and the
|
31 |
+
* values will be a description in that language as a UTF-8 string. May be
|
32 |
+
* undefined for some databases.
|
33 |
+
*/
|
34 |
+
class Metadata
|
35 |
+
{
|
36 |
+
private $binaryFormatMajorVersion;
|
37 |
+
private $binaryFormatMinorVersion;
|
38 |
+
private $buildEpoch;
|
39 |
+
private $databaseType;
|
40 |
+
private $description;
|
41 |
+
private $ipVersion;
|
42 |
+
private $languages;
|
43 |
+
private $nodeByteSize;
|
44 |
+
private $nodeCount;
|
45 |
+
private $recordSize;
|
46 |
+
private $searchTreeSize;
|
47 |
+
|
48 |
+
public function __construct($metadata)
|
49 |
+
{
|
50 |
+
$this->binaryFormatMajorVersion =
|
51 |
+
$metadata['binary_format_major_version'];
|
52 |
+
$this->binaryFormatMinorVersion =
|
53 |
+
$metadata['binary_format_minor_version'];
|
54 |
+
$this->buildEpoch = $metadata['build_epoch'];
|
55 |
+
$this->databaseType = $metadata['database_type'];
|
56 |
+
$this->languages = $metadata['languages'];
|
57 |
+
$this->description = $metadata['description'];
|
58 |
+
$this->ipVersion = $metadata['ip_version'];
|
59 |
+
$this->nodeCount = $metadata['node_count'];
|
60 |
+
$this->recordSize = $metadata['record_size'];
|
61 |
+
$this->nodeByteSize = $this->recordSize / 4;
|
62 |
+
$this->searchTreeSize = $this->nodeCount * $this->nodeByteSize;
|
63 |
+
}
|
64 |
+
|
65 |
+
public function __get($var)
|
66 |
+
{
|
67 |
+
return $this->$var;
|
68 |
+
}
|
69 |
+
}
|
vendor/maxmind-db/reader/src/MaxMind/Db/Reader/Util.php
ADDED
@@ -0,0 +1,26 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace MaxMind\Db\Reader;
|
4 |
+
|
5 |
+
class Util
|
6 |
+
{
|
7 |
+
public static function read($stream, $offset, $numberOfBytes)
|
8 |
+
{
|
9 |
+
if ($numberOfBytes === 0) {
|
10 |
+
return '';
|
11 |
+
}
|
12 |
+
if (fseek($stream, $offset) === 0) {
|
13 |
+
$value = fread($stream, $numberOfBytes);
|
14 |
+
|
15 |
+
// We check that the number of bytes read is equal to the number
|
16 |
+
// asked for. We use ftell as getting the length of $value is
|
17 |
+
// much slower.
|
18 |
+
if (ftell($stream) - $offset === $numberOfBytes) {
|
19 |
+
return $value;
|
20 |
+
}
|
21 |
+
}
|
22 |
+
throw new InvalidDatabaseException(
|
23 |
+
'The MaxMind DB file contains bad data'
|
24 |
+
);
|
25 |
+
}
|
26 |
+
}
|
vendor/maxmind/web-service-common/CHANGELOG.md
ADDED
@@ -0,0 +1,74 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
CHANGELOG
|
2 |
+
=========
|
3 |
+
|
4 |
+
0.4.0 (2017-XX-XX)
|
5 |
+
------------------
|
6 |
+
|
7 |
+
* PHP 5.4 is now required.
|
8 |
+
|
9 |
+
0.3.1 (2016-08-10)
|
10 |
+
------------------
|
11 |
+
|
12 |
+
* On Mac OS X when using a curl built against SecureTransport, the certs
|
13 |
+
in the system's keychain will now be used instead of the CA bundle on
|
14 |
+
the file system.
|
15 |
+
|
16 |
+
0.3.0 (2016-08-09)
|
17 |
+
------------------
|
18 |
+
|
19 |
+
* This package now uses `composer/ca-bundle` by default rather than a CA
|
20 |
+
bundle distributed with this package. `composer/ca-bundle` will first try
|
21 |
+
to use the system CA bundle and will fall back to the Mozilla CA bundle
|
22 |
+
when no system bundle is available. You may still specify your own bundle
|
23 |
+
using the `caBundle` option.
|
24 |
+
|
25 |
+
0.2.1 (2016-06-13)
|
26 |
+
------------------
|
27 |
+
|
28 |
+
* Fix typo in code to copy cert to temp directory.
|
29 |
+
|
30 |
+
0.2.0 (2016-06-10)
|
31 |
+
------------------
|
32 |
+
|
33 |
+
* Added handling of additional error codes that the web service may return.
|
34 |
+
* A `USER_ID_UNKNOWN` error will now throw a
|
35 |
+
`MaxMind\Exception\AuthenticationException`.
|
36 |
+
* Added support for `proxy` option. Closes #6.
|
37 |
+
|
38 |
+
0.1.0 (2016-05-23)
|
39 |
+
------------------
|
40 |
+
|
41 |
+
* A `PERMISSION_REQUIRED` error will now throw a `PermissionRequiredException`
|
42 |
+
exception.
|
43 |
+
* Added a `.gitattributes` file to exclude tests from Composer releases.
|
44 |
+
GitHub #7.
|
45 |
+
* Updated included cert bundle.
|
46 |
+
|
47 |
+
0.0.4 (2015-07-21)
|
48 |
+
------------------
|
49 |
+
|
50 |
+
* Added extremely basic tests for the curl calls.
|
51 |
+
* Fixed broken POSTs.
|
52 |
+
|
53 |
+
0.0.3 (2015-06-30)
|
54 |
+
------------------
|
55 |
+
|
56 |
+
* Floats now work with the `timeout` and `connectTimeout` options. Fix by
|
57 |
+
Benjamin Pick. GitHub PR #2.
|
58 |
+
* `curl_error` is now used instead of `curl_strerror`. The latter is only
|
59 |
+
available for PHP 5.5 or later. Fix by Benjamin Pick. GitHub PR #1.
|
60 |
+
|
61 |
+
|
62 |
+
0.0.2 (2015-06-09)
|
63 |
+
------------------
|
64 |
+
|
65 |
+
* An exception is now immediately thrown curl error rather than letting later
|
66 |
+
status code checks throw an exception. This improves the exception message
|
67 |
+
greatly.
|
68 |
+
* If this library is inside a phar archive, the CA certs are copied out of the
|
69 |
+
archive to a temporary file so that curl can use them.
|
70 |
+
|
71 |
+
0.0.1 (2015-06-01)
|
72 |
+
------------------
|
73 |
+
|
74 |
+
* Initial release.
|
vendor/maxmind/web-service-common/LICENSE
ADDED
@@ -0,0 +1,202 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
|
2 |
+
Apache License
|
3 |
+
Version 2.0, January 2004
|
4 |
+
http://www.apache.org/licenses/
|
5 |
+
|
6 |
+
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
7 |
+
|
8 |
+
1. Definitions.
|
9 |
+
|
10 |
+
"License" shall mean the terms and conditions for use, reproduction,
|
11 |
+
and distribution as defined by Sections 1 through 9 of this document.
|
12 |
+
|
13 |
+
"Licensor" shall mean the copyright owner or entity authorized by
|
14 |
+
the copyright owner that is granting the License.
|
15 |
+
|
16 |
+
"Legal Entity" shall mean the union of the acting entity and all
|
17 |
+
other entities that control, are controlled by, or are under common
|
18 |
+
control with that entity. For the purposes of this definition,
|
19 |
+
"control" means (i) the power, direct or indirect, to cause the
|
20 |
+
direction or management of such entity, whether by contract or
|
21 |
+
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
22 |
+
outstanding shares, or (iii) beneficial ownership of such entity.
|
23 |
+
|
24 |
+
"You" (or "Your") shall mean an individual or Legal Entity
|
25 |
+
exercising permissions granted by this License.
|
26 |
+
|
27 |
+
"Source" form shall mean the preferred form for making modifications,
|
28 |
+
including but not limited to software source code, documentation
|
29 |
+
source, and configuration files.
|
30 |
+
|
31 |
+
"Object" form shall mean any form resulting from mechanical
|
32 |
+
transformation or translation of a Source form, including but
|
33 |
+
not limited to compiled object code, generated documentation,
|
34 |
+
and conversions to other media types.
|
35 |
+
|
36 |
+
"Work" shall mean the work of authorship, whether in Source or
|
37 |
+
Object form, made available under the License, as indicated by a
|
38 |
+
copyright notice that is included in or attached to the work
|
39 |
+
(an example is provided in the Appendix below).
|
40 |
+
|
41 |
+
"Derivative Works" shall mean any work, whether in Source or Object
|
42 |
+
form, that is based on (or derived from) the Work and for which the
|
43 |
+
editorial revisions, annotations, elaborations, or other modifications
|
44 |
+
represent, as a whole, an original work of authorship. For the purposes
|
45 |
+
of this License, Derivative Works shall not include works that remain
|
46 |
+
separable from, or merely link (or bind by name) to the interfaces of,
|
47 |
+
the Work and Derivative Works thereof.
|
48 |
+
|
49 |
+
"Contribution" shall mean any work of authorship, including
|
50 |
+
the original version of the Work and any modifications or additions
|
51 |
+
to that Work or Derivative Works thereof, that is intentionally
|
52 |
+
submitted to Licensor for inclusion in the Work by the copyright owner
|
53 |
+
or by an individual or Legal Entity authorized to submit on behalf of
|
54 |
+
the copyright owner. For the purposes of this definition, "submitted"
|
55 |
+
means any form of electronic, verbal, or written communication sent
|
56 |
+
to the Licensor or its representatives, including but not limited to
|
57 |
+
communication on electronic mailing lists, source code control systems,
|
58 |
+
and issue tracking systems that are managed by, or on behalf of, the
|
59 |
+
Licensor for the purpose of discussing and improving the Work, but
|
60 |
+
excluding communication that is conspicuously marked or otherwise
|
61 |
+
designated in writing by the copyright owner as "Not a Contribution."
|
62 |
+
|
63 |
+
"Contributor" shall mean Licensor and any individual or Legal Entity
|
64 |
+
on behalf of whom a Contribution has been received by Licensor and
|
65 |
+
subsequently incorporated within the Work.
|
66 |
+
|
67 |
+
2. Grant of Copyright License. Subject to the terms and conditions of
|
68 |
+
this License, each Contributor hereby grants to You a perpetual,
|
69 |
+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
70 |
+
copyright license to reproduce, prepare Derivative Works of,
|
71 |
+
publicly display, publicly perform, sublicense, and distribute the
|
72 |
+
Work and such Derivative Works in Source or Object form.
|
73 |
+
|
74 |
+
3. Grant of Patent License. Subject to the terms and conditions of
|
75 |
+
this License, each Contributor hereby grants to You a perpetual,
|
76 |
+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
77 |
+
(except as stated in this section) patent license to make, have made,
|
78 |
+
use, offer to sell, sell, import, and otherwise transfer the Work,
|
79 |
+
where such license applies only to those patent claims licensable
|
80 |
+
by such Contributor that are necessarily infringed by their
|
81 |
+
Contribution(s) alone or by combination of their Contribution(s)
|
82 |
+
with the Work to which such Contribution(s) was submitted. If You
|
83 |
+
institute patent litigation against any entity (including a
|
84 |
+
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
85 |
+
or a Contribution incorporated within the Work constitutes direct
|
86 |
+
or contributory patent infringement, then any patent licenses
|
87 |
+
granted to You under this License for that Work shall terminate
|
88 |
+
as of the date such litigation is filed.
|
89 |
+
|
90 |
+
4. Redistribution. You may reproduce and distribute copies of the
|
91 |
+
Work or Derivative Works thereof in any medium, with or without
|
92 |
+
modifications, and in Source or Object form, provided that You
|
93 |
+
meet the following conditions:
|
94 |
+
|
95 |
+
(a) You must give any other recipients of the Work or
|
96 |
+
Derivative Works a copy of this License; and
|
97 |
+
|
98 |
+
(b) You must cause any modified files to carry prominent notices
|
99 |
+
stating that You changed the files; and
|
100 |
+
|
101 |
+
(c) You must retain, in the Source form of any Derivative Works
|
102 |
+
that You distribute, all copyright, patent, trademark, and
|
103 |
+
attribution notices from the Source form of the Work,
|
104 |
+
excluding those notices that do not pertain to any part of
|
105 |
+
the Derivative Works; and
|
106 |
+
|
107 |
+
(d) If the Work includes a "NOTICE" text file as part of its
|
108 |
+
distribution, then any Derivative Works that You distribute must
|
109 |
+
include a readable copy of the attribution notices contained
|
110 |
+
within such NOTICE file, excluding those notices that do not
|
111 |
+
pertain to any part of the Derivative Works, in at least one
|
112 |
+
of the following places: within a NOTICE text file distributed
|
113 |
+
as part of the Derivative Works; within the Source form or
|
114 |
+
documentation, if provided along with the Derivative Works; or,
|
115 |
+
within a display generated by the Derivative Works, if and
|
116 |
+
wherever such third-party notices normally appear. The contents
|
117 |
+
of the NOTICE file are for informational purposes only and
|
118 |
+
do not modify the License. You may add Your own attribution
|
119 |
+
notices within Derivative Works that You distribute, alongside
|
120 |
+
or as an addendum to the NOTICE text from the Work, provided
|
121 |
+
that such additional attribution notices cannot be construed
|
122 |
+
as modifying the License.
|
123 |
+
|
124 |
+
You may add Your own copyright statement to Your modifications and
|
125 |
+
may provide additional or different license terms and conditions
|
126 |
+
for use, reproduction, or distribution of Your modifications, or
|
127 |
+
for any such Derivative Works as a whole, provided Your use,
|
128 |
+
reproduction, and distribution of the Work otherwise complies with
|
129 |
+
the conditions stated in this License.
|
130 |
+
|
131 |
+
5. Submission of Contributions. Unless You explicitly state otherwise,
|
132 |
+
any Contribution intentionally submitted for inclusion in the Work
|
133 |
+
by You to the Licensor shall be under the terms and conditions of
|
134 |
+
this License, without any additional terms or conditions.
|
135 |
+
Notwithstanding the above, nothing herein shall supersede or modify
|
136 |
+
the terms of any separate license agreement you may have executed
|
137 |
+
with Licensor regarding such Contributions.
|
138 |
+
|
139 |
+
6. Trademarks. This License does not grant permission to use the trade
|
140 |
+
names, trademarks, service marks, or product names of the Licensor,
|
141 |
+
except as required for reasonable and customary use in describing the
|
142 |
+
origin of the Work and reproducing the content of the NOTICE file.
|
143 |
+
|
144 |
+
7. Disclaimer of Warranty. Unless required by applicable law or
|
145 |
+
agreed to in writing, Licensor provides the Work (and each
|
146 |
+
Contributor provides its Contributions) on an "AS IS" BASIS,
|
147 |
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
148 |
+
implied, including, without limitation, any warranties or conditions
|
149 |
+
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
150 |
+
PARTICULAR PURPOSE. You are solely responsible for determining the
|
151 |
+
appropriateness of using or redistributing the Work and assume any
|
152 |
+
risks associated with Your exercise of permissions under this License.
|
153 |
+
|
154 |
+
8. Limitation of Liability. In no event and under no legal theory,
|
155 |
+
whether in tort (including negligence), contract, or otherwise,
|
156 |
+
unless required by applicable law (such as deliberate and grossly
|
157 |
+
negligent acts) or agreed to in writing, shall any Contributor be
|
158 |
+
liable to You for damages, including any direct, indirect, special,
|
159 |
+
incidental, or consequential damages of any character arising as a
|
160 |
+
result of this License or out of the use or inability to use the
|
161 |
+
Work (including but not limited to damages for loss of goodwill,
|
162 |
+
work stoppage, computer failure or malfunction, or any and all
|
163 |
+
other commercial damages or losses), even if such Contributor
|
164 |
+
has been advised of the possibility of such damages.
|
165 |
+
|
166 |
+
9. Accepting Warranty or Additional Liability. While redistributing
|
167 |
+
the Work or Derivative Works thereof, You may choose to offer,
|
168 |
+
and charge a fee for, acceptance of support, warranty, indemnity,
|
169 |
+
or other liability obligations and/or rights consistent with this
|
170 |
+
License. However, in accepting such obligations, You may act only
|
171 |
+
on Your own behalf and on Your sole responsibility, not on behalf
|
172 |
+
of any other Contributor, and only if You agree to indemnify,
|
173 |
+
defend, and hold each Contributor harmless for any liability
|
174 |
+
incurred by, or claims asserted against, such Contributor by reason
|
175 |
+
of your accepting any such warranty or additional liability.
|
176 |
+
|
177 |
+
END OF TERMS AND CONDITIONS
|
178 |
+
|
179 |
+
APPENDIX: How to apply the Apache License to your work.
|
180 |
+
|
181 |
+
To apply the Apache License to your work, attach the following
|
182 |
+
boilerplate notice, with the fields enclosed by brackets "[]"
|
183 |
+
replaced with your own identifying information. (Don't include
|
184 |
+
the brackets!) The text should be enclosed in the appropriate
|
185 |
+
comment syntax for the file format. We also recommend that a
|
186 |
+
file or class name and description of purpose be included on the
|
187 |
+
same "printed page" as the copyright notice for easier
|
188 |
+
identification within third-party archives.
|
189 |
+
|
190 |
+
Copyright [yyyy] [name of copyright owner]
|
191 |
+
|
192 |
+
Licensed under the Apache License, Version 2.0 (the "License");
|
193 |
+
you may not use this file except in compliance with the License.
|
194 |
+
You may obtain a copy of the License at
|
195 |
+
|
196 |
+
http://www.apache.org/licenses/LICENSE-2.0
|
197 |
+
|
198 |
+
Unless required by applicable law or agreed to in writing, software
|
199 |
+
distributed under the License is distributed on an "AS IS" BASIS,
|
200 |
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
201 |
+
See the License for the specific language governing permissions and
|
202 |
+
limitations under the License.
|
vendor/maxmind/web-service-common/README.md
ADDED
@@ -0,0 +1,26 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# MaxMind Web Service Common #
|
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 |
+
|
8 |
+
The library requires PHP 5.4 or greater. This library works and is tested
|
9 |
+
with HHVM.
|
10 |
+
|
11 |
+
There are several other dependencies as defined in the `composer.json` file.
|
12 |
+
|
13 |
+
## Contributing ##
|
14 |
+
|
15 |
+
Patches and pull requests are encouraged. All code should follow the PSR-2
|
16 |
+
style guidelines. Please include unit tests whenever possible.
|
17 |
+
|
18 |
+
## Versioning ##
|
19 |
+
|
20 |
+
This API uses [Semantic Versioning](http://semver.org/).
|
21 |
+
|
22 |
+
## Copyright and License ##
|
23 |
+
|
24 |
+
This software is Copyright (c) 2015-2017 by MaxMind, Inc.
|
25 |
+
|
26 |
+
This is free software, licensed under the Apache License, Version 2.0.
|
vendor/maxmind/web-service-common/composer.json
ADDED
@@ -0,0 +1,31 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"name": "maxmind/web-service-common",
|
3 |
+
"description": "Internal MaxMind Web Service API",
|
4 |
+
"minimum-stability": "stable",
|
5 |
+
"homepage": "https://github.com/maxmind/web-service-common-php",
|
6 |
+
"type": "library",
|
7 |
+
"license": "Apache-2.0",
|
8 |
+
"authors": [
|
9 |
+
{
|
10 |
+
"name": "Gregory Oschwald",
|
11 |
+
"email": "goschwald@maxmind.com"
|
12 |
+
}
|
13 |
+
],
|
14 |
+
"require": {
|
15 |
+
"php": ">=5.4",
|
16 |
+
"composer/ca-bundle": "^1.0.3",
|
17 |
+
"ext-curl": "*",
|
18 |
+
"ext-json": "*"
|
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": {
|
27 |
+
"MaxMind\\Exception\\": "src/Exception",
|
28 |
+
"MaxMind\\WebService\\": "src/WebService"
|
29 |
+
}
|
30 |
+
}
|
31 |
+
}
|
vendor/maxmind/web-service-common/src/Exception/AuthenticationException.php
ADDED
@@ -0,0 +1,10 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace MaxMind\Exception;
|
4 |
+
|
5 |
+
/**
|
6 |
+
* This class represents an error authenticating.
|
7 |
+
*/
|
8 |
+
class AuthenticationException extends InvalidRequestException
|
9 |
+
{
|
10 |
+
}
|
vendor/maxmind/web-service-common/src/Exception/HttpException.php
ADDED
@@ -0,0 +1,40 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace MaxMind\Exception;
|
4 |
+
|
5 |
+
/**
|
6 |
+
* This class represents an HTTP transport error.
|
7 |
+
*/
|
8 |
+
class HttpException extends WebServiceException
|
9 |
+
{
|
10 |
+
/**
|
11 |
+
* The URI queried.
|
12 |
+
*/
|
13 |
+
private $uri;
|
14 |
+
|
15 |
+
/**
|
16 |
+
* @param string $message a message describing the error
|
17 |
+
* @param int $httpStatus the HTTP status code of the response
|
18 |
+
* @param string $uri the URI used in the request
|
19 |
+
* @param \Exception $previous the previous exception, if any
|
20 |
+
*/
|
21 |
+
public function __construct(
|
22 |
+
$message,
|
23 |
+
$httpStatus,
|
24 |
+
$uri,
|
25 |
+
\Exception $previous = null
|
26 |
+
) {
|
27 |
+
$this->uri = $uri;
|
28 |
+
parent::__construct($message, $httpStatus, $previous);
|
29 |
+
}
|
30 |
+
|
31 |
+
public function getUri()
|
32 |
+
{
|
33 |
+
return $this->uri;
|
34 |
+
}
|
35 |
+
|
36 |
+
public function getStatusCode()
|
37 |
+
{
|
38 |
+
return $this->getCode();
|
39 |
+
}
|
40 |
+
}
|
vendor/maxmind/web-service-common/src/Exception/InsufficientFundsException.php
ADDED
@@ -0,0 +1,10 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace MaxMind\Exception;
|
4 |
+
|
5 |
+
/**
|
6 |
+
* Thrown when the account is out of credits.
|
7 |
+
*/
|
8 |
+
class InsufficientFundsException extends InvalidRequestException
|
9 |
+
{
|
10 |
+
}
|
vendor/maxmind/web-service-common/src/Exception/InvalidInputException.php
ADDED
@@ -0,0 +1,12 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace MaxMind\Exception;
|
4 |
+
|
5 |
+
/**
|
6 |
+
* This class represents an error in creating the request to be sent to the
|
7 |
+
* web service. For example, if the array cannot be encoded as JSON or if there
|
8 |
+
* is a missing or invalid field.
|
9 |
+
*/
|
10 |
+
class InvalidInputException extends WebServiceException
|
11 |
+
{
|
12 |
+
}
|
vendor/maxmind/web-service-common/src/Exception/InvalidRequestException.php
ADDED
@@ -0,0 +1,37 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace MaxMind\Exception;
|
4 |
+
|
5 |
+
/**
|
6 |
+
* Thrown when a MaxMind web service returns an error relating to the request.
|
7 |
+
*/
|
8 |
+
class InvalidRequestException extends HttpException
|
9 |
+
{
|
10 |
+
/**
|
11 |
+
* The code returned by the MaxMind web service.
|
12 |
+
*/
|
13 |
+
private $error;
|
14 |
+
|
15 |
+
/**
|
16 |
+
* @param string $message the exception message
|
17 |
+
* @param int $error the error code returned by the MaxMind web service
|
18 |
+
* @param int $httpStatus the HTTP status code of the response
|
19 |
+
* @param string $uri the URI queries
|
20 |
+
* @param \Exception $previous the previous exception, if any
|
21 |
+
*/
|
22 |
+
public function __construct(
|
23 |
+
$message,
|
24 |
+
$error,
|
25 |
+
$httpStatus,
|
26 |
+
$uri,
|
27 |
+
\Exception $previous = null
|
28 |
+
) {
|
29 |
+
$this->error = $error;
|
30 |
+
parent::__construct($message, $httpStatus, $uri, $previous);
|
31 |
+
}
|
32 |
+
|
33 |
+
public function getErrorCode()
|
34 |
+
{
|
35 |
+
return $this->error;
|
36 |
+
}
|
37 |
+
}
|
vendor/maxmind/web-service-common/src/Exception/IpAddressNotFoundException.php
ADDED
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace MaxMind\Exception;
|
4 |
+
|
5 |
+
class IpAddressNotFoundException extends InvalidRequestException
|
6 |
+
{
|
7 |
+
}
|
vendor/maxmind/web-service-common/src/Exception/PermissionRequiredException.php
ADDED
@@ -0,0 +1,10 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace MaxMind\Exception;
|
4 |
+
|
5 |
+
/**
|
6 |
+
* This exception is thrown when the service requires permission to access.
|
7 |
+
*/
|
8 |
+
class PermissionRequiredException extends InvalidRequestException
|
9 |
+
{
|
10 |
+
}
|
vendor/maxmind/web-service-common/src/Exception/WebServiceException.php
ADDED
@@ -0,0 +1,10 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace MaxMind\Exception;
|
4 |
+
|
5 |
+
/**
|
6 |
+
* This class represents a generic web service error.
|
7 |
+
*/
|
8 |
+
class WebServiceException extends \Exception
|
9 |
+
{
|
10 |
+
}
|
vendor/maxmind/web-service-common/src/WebService/Client.php
ADDED
@@ -0,0 +1,470 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace MaxMind\WebService;
|
4 |
+
|
5 |
+
use Composer\CaBundle\CaBundle;
|
6 |
+
use MaxMind\Exception\AuthenticationException;
|
7 |
+
use MaxMind\Exception\HttpException;
|
8 |
+
use MaxMind\Exception\InsufficientFundsException;
|
9 |
+
use MaxMind\Exception\InvalidInputException;
|
10 |
+
use MaxMind\Exception\InvalidRequestException;
|
11 |
+
use MaxMind\Exception\IpAddressNotFoundException;
|
12 |
+
use MaxMind\Exception\PermissionRequiredException;
|
13 |
+
use MaxMind\Exception\WebServiceException;
|
14 |
+
use MaxMind\WebService\Http\RequestFactory;
|
15 |
+
|
16 |
+
/**
|
17 |
+
* This class is not intended to be used directly by an end-user of a
|
18 |
+
* MaxMind web service. Please use the appropriate client API for the service
|
19 |
+
* that you are using.
|
20 |
+
*
|
21 |
+
* @internal
|
22 |
+
*/
|
23 |
+
class Client
|
24 |
+
{
|
25 |
+
const VERSION = '0.2.0';
|
26 |
+
|
27 |
+
private $caBundle;
|
28 |
+
private $connectTimeout;
|
29 |
+
private $host = 'api.maxmind.com';
|
30 |
+
private $httpRequestFactory;
|
31 |
+
private $licenseKey;
|
32 |
+
private $proxy;
|
33 |
+
private $timeout;
|
34 |
+
private $userAgentPrefix;
|
35 |
+
private $userId;
|
36 |
+
|
37 |
+
/**
|
38 |
+
* @param int $userId your MaxMind user 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.
|
42 |
+
* * `userAgent` - The prefix of the User-Agent to use in the request.
|
43 |
+
* * `caBundle` - The bundle of CA root certificates to use in the request.
|
44 |
+
* * `connectTimeout` - The connect timeout to use for the request.
|
45 |
+
* * `timeout` - The timeout to use for the request.
|
46 |
+
* * `proxy` - The HTTP proxy to use. May include a schema, port,
|
47 |
+
* username, and password, e.g., `http://username:password@127.0.0.1:10`.
|
48 |
+
*/
|
49 |
+
public function __construct(
|
50 |
+
$userId,
|
51 |
+
$licenseKey,
|
52 |
+
$options = []
|
53 |
+
) {
|
54 |
+
$this->userId = $userId;
|
55 |
+
$this->licenseKey = $licenseKey;
|
56 |
+
|
57 |
+
$this->httpRequestFactory = isset($options['httpRequestFactory'])
|
58 |
+
? $options['httpRequestFactory']
|
59 |
+
: new RequestFactory();
|
60 |
+
|
61 |
+
if (isset($options['host'])) {
|
62 |
+
$this->host = $options['host'];
|
63 |
+
}
|
64 |
+
if (isset($options['userAgent'])) {
|
65 |
+
$this->userAgentPrefix = $options['userAgent'] . ' ';
|
66 |
+
}
|
67 |
+
|
68 |
+
$this->caBundle = isset($options['caBundle']) ?
|
69 |
+
$this->caBundle = $options['caBundle'] : $this->getCaBundle();
|
70 |
+
|
71 |
+
if (isset($options['connectTimeout'])) {
|
72 |
+
$this->connectTimeout = $options['connectTimeout'];
|
73 |
+
}
|
74 |
+
if (isset($options['timeout'])) {
|
75 |
+
$this->timeout = $options['timeout'];
|
76 |
+
}
|
77 |
+
|
78 |
+
if (isset($options['proxy'])) {
|
79 |
+
$this->proxy = $options['proxy'];
|
80 |
+
}
|
81 |
+
}
|
82 |
+
|
83 |
+
/**
|
84 |
+
* @param string $service name of the service querying
|
85 |
+
* @param string $path the URI path to use
|
86 |
+
* @param array $input the data to be posted as JSON
|
87 |
+
*
|
88 |
+
* @throws InvalidInputException when the request has missing or invalid
|
89 |
+
* data
|
90 |
+
* @throws AuthenticationException when there is an issue authenticating the
|
91 |
+
* request
|
92 |
+
* @throws InsufficientFundsException when your account is out of funds
|
93 |
+
* @throws InvalidRequestException when the request is invalid for some
|
94 |
+
* other reason, e.g., invalid JSON in the POST.
|
95 |
+
* @throws HttpException when an unexpected HTTP error occurs
|
96 |
+
* @throws WebServiceException when some other error occurs. This also
|
97 |
+
* serves as the base class for the above exceptions.
|
98 |
+
*
|
99 |
+
* @return array The decoded content of a successful response
|
100 |
+
*/
|
101 |
+
public function post($service, $path, $input)
|
102 |
+
{
|
103 |
+
$body = json_encode($input);
|
104 |
+
if ($body === false) {
|
105 |
+
throw new InvalidInputException(
|
106 |
+
'Error encoding input as JSON: '
|
107 |
+
. $this->jsonErrorDescription()
|
108 |
+
);
|
109 |
+
}
|
110 |
+
|
111 |
+
$request = $this->createRequest(
|
112 |
+
$path,
|
113 |
+
['Content-Type: application/json']
|
114 |
+
);
|
115 |
+
|
116 |
+
list($statusCode, $contentType, $body) = $request->post($body);
|
117 |
+
|
118 |
+
return $this->handleResponse(
|
119 |
+
$statusCode,
|
120 |
+
$contentType,
|
121 |
+
$body,
|
122 |
+
$service,
|
123 |
+
$path
|
124 |
+
);
|
125 |
+
}
|
126 |
+
|
127 |
+
public function get($service, $path)
|
128 |
+
{
|
129 |
+
$request = $this->createRequest($path);
|
130 |
+
|
131 |
+
list($statusCode, $contentType, $body) = $request->get();
|
132 |
+
|
133 |
+
return $this->handleResponse(
|
134 |
+
$statusCode,
|
135 |
+
$contentType,
|
136 |
+
$body,
|
137 |
+
$service,
|
138 |
+
$path
|
139 |
+
);
|
140 |
+
}
|
141 |
+
|
142 |
+
private function userAgent()
|
143 |
+
{
|
144 |
+
$curlVersion = curl_version();
|
145 |
+
|
146 |
+
return $this->userAgentPrefix . 'MaxMind-WS-API/' . self::VERSION . ' PHP/' . PHP_VERSION .
|
147 |
+
' curl/' . $curlVersion['version'];
|
148 |
+
}
|
149 |
+
|
150 |
+
private function createRequest($path, $headers = [])
|
151 |
+
{
|
152 |
+
array_push(
|
153 |
+
$headers,
|
154 |
+
'Authorization: Basic '
|
155 |
+
. base64_encode($this->userId . ':' . $this->licenseKey),
|
156 |
+
'Accept: application/json'
|
157 |
+
);
|
158 |
+
|
159 |
+
return $this->httpRequestFactory->request(
|
160 |
+
$this->urlFor($path),
|
161 |
+
[
|
162 |
+
'caBundle' => $this->caBundle,
|
163 |
+
'connectTimeout' => $this->connectTimeout,
|
164 |
+
'headers' => $headers,
|
165 |
+
'proxy' => $this->proxy,
|
166 |
+
'timeout' => $this->timeout,
|
167 |
+
'userAgent' => $this->userAgent(),
|
168 |
+
]
|
169 |
+
);
|
170 |
+
}
|
171 |
+
|
172 |
+
/**
|
173 |
+
* @param int $statusCode the HTTP status code of the response
|
174 |
+
* @param string $contentType the Content-Type of the response
|
175 |
+
* @param string $body the response body
|
176 |
+
* @param string $service the name of the service
|
177 |
+
* @param string $path the path used in the request
|
178 |
+
*
|
179 |
+
* @throws AuthenticationException when there is an issue authenticating the
|
180 |
+
* request
|
181 |
+
* @throws InsufficientFundsException when your account is out of funds
|
182 |
+
* @throws InvalidRequestException when the request is invalid for some
|
183 |
+
* other reason, e.g., invalid JSON in the POST.
|
184 |
+
* @throws HttpException when an unexpected HTTP error occurs
|
185 |
+
* @throws WebServiceException when some other error occurs. This also
|
186 |
+
* serves as the base class for the above exceptions
|
187 |
+
*
|
188 |
+
* @return array The decoded content of a successful response
|
189 |
+
*/
|
190 |
+
private function handleResponse(
|
191 |
+
$statusCode,
|
192 |
+
$contentType,
|
193 |
+
$body,
|
194 |
+
$service,
|
195 |
+
$path
|
196 |
+
) {
|
197 |
+
if ($statusCode >= 400 && $statusCode <= 499) {
|
198 |
+
$this->handle4xx($statusCode, $contentType, $body, $service, $path);
|
199 |
+
} elseif ($statusCode >= 500) {
|
200 |
+
$this->handle5xx($statusCode, $service, $path);
|
201 |
+
} elseif ($statusCode !== 200) {
|
202 |
+
$this->handleUnexpectedStatus($statusCode, $service, $path);
|
203 |
+
}
|
204 |
+
|
205 |
+
return $this->handleSuccess($body, $service);
|
206 |
+
}
|
207 |
+
|
208 |
+
/**
|
209 |
+
* @return string describing the JSON error
|
210 |
+
*/
|
211 |
+
private function jsonErrorDescription()
|
212 |
+
{
|
213 |
+
$errno = json_last_error();
|
214 |
+
switch ($errno) {
|
215 |
+
case JSON_ERROR_DEPTH:
|
216 |
+
return 'The maximum stack depth has been exceeded.';
|
217 |
+
case JSON_ERROR_STATE_MISMATCH:
|
218 |
+
return 'Invalid or malformed JSON.';
|
219 |
+
case JSON_ERROR_CTRL_CHAR:
|
220 |
+
return 'Control character error.';
|
221 |
+
case JSON_ERROR_SYNTAX:
|
222 |
+
return 'Syntax error.';
|
223 |
+
case JSON_ERROR_UTF8:
|
224 |
+
return 'Malformed UTF-8 characters.';
|
225 |
+
default:
|
226 |
+
return "Other JSON error ($errno).";
|
227 |
+
}
|
228 |
+
}
|
229 |
+
|
230 |
+
/**
|
231 |
+
* @param string $path the path to use in the URL
|
232 |
+
*
|
233 |
+
* @return string the constructed URL
|
234 |
+
*/
|
235 |
+
private function urlFor($path)
|
236 |
+
{
|
237 |
+
return 'https://' . $this->host . $path;
|
238 |
+
}
|
239 |
+
|
240 |
+
/**
|
241 |
+
* @param int $statusCode the HTTP status code
|
242 |
+
* @param string $contentType the response content-type
|
243 |
+
* @param string $body the response body
|
244 |
+
* @param string $service the service name
|
245 |
+
* @param string $path the path used in the request
|
246 |
+
*
|
247 |
+
* @throws AuthenticationException
|
248 |
+
* @throws HttpException
|
249 |
+
* @throws InsufficientFundsException
|
250 |
+
* @throws InvalidRequestException
|
251 |
+
*/
|
252 |
+
private function handle4xx(
|
253 |
+
$statusCode,
|
254 |
+
$contentType,
|
255 |
+
$body,
|
256 |
+
$service,
|
257 |
+
$path
|
258 |
+
) {
|
259 |
+
if (strlen($body) === 0) {
|
260 |
+
throw new HttpException(
|
261 |
+
"Received a $statusCode error for $service with no body",
|
262 |
+
$statusCode,
|
263 |
+
$this->urlFor($path)
|
264 |
+
);
|
265 |
+
}
|
266 |
+
if (!strstr($contentType, 'json')) {
|
267 |
+
throw new HttpException(
|
268 |
+
"Received a $statusCode error for $service with " .
|
269 |
+
'the following body: ' . $body,
|
270 |
+
$statusCode,
|
271 |
+
$this->urlFor($path)
|
272 |
+
);
|
273 |
+
}
|
274 |
+
|
275 |
+
$message = json_decode($body, true);
|
276 |
+
if ($message === null) {
|
277 |
+
throw new HttpException(
|
278 |
+
"Received a $statusCode error for $service but could " .
|
279 |
+
'not decode the response as JSON: '
|
280 |
+
. $this->jsonErrorDescription() . ' Body: ' . $body,
|
281 |
+
$statusCode,
|
282 |
+
$this->urlFor($path)
|
283 |
+
);
|
284 |
+
}
|
285 |
+
|
286 |
+
if (!isset($message['code']) || !isset($message['error'])) {
|
287 |
+
throw new HttpException(
|
288 |
+
'Error response contains JSON but it does not ' .
|
289 |
+
'specify code or error keys: ' . $body,
|
290 |
+
$statusCode,
|
291 |
+
$this->urlFor($path)
|
292 |
+
);
|
293 |
+
}
|
294 |
+
|
295 |
+
$this->handleWebServiceError(
|
296 |
+
$message['error'],
|
297 |
+
$message['code'],
|
298 |
+
$statusCode,
|
299 |
+
$path
|
300 |
+
);
|
301 |
+
}
|
302 |
+
|
303 |
+
/**
|
304 |
+
* @param string $message the error message from the web service
|
305 |
+
* @param string $code the error code from the web service
|
306 |
+
* @param int $statusCode the HTTP status code
|
307 |
+
* @param string $path the path used in the request
|
308 |
+
*
|
309 |
+
* @throws AuthenticationException
|
310 |
+
* @throws InvalidRequestException
|
311 |
+
* @throws InsufficientFundsException
|
312 |
+
*/
|
313 |
+
private function handleWebServiceError(
|
314 |
+
$message,
|
315 |
+
$code,
|
316 |
+
$statusCode,
|
317 |
+
$path
|
318 |
+
) {
|
319 |
+
switch ($code) {
|
320 |
+
case 'IP_ADDRESS_NOT_FOUND':
|
321 |
+
case 'IP_ADDRESS_RESERVED':
|
322 |
+
throw new IpAddressNotFoundException(
|
323 |
+
$message,
|
324 |
+
$code,
|
325 |
+
$statusCode,
|
326 |
+
$this->urlFor($path)
|
327 |
+
);
|
328 |
+
case 'AUTHORIZATION_INVALID':
|
329 |
+
case 'LICENSE_KEY_REQUIRED':
|
330 |
+
case 'USER_ID_REQUIRED':
|
331 |
+
case 'USER_ID_UNKNOWN':
|
332 |
+
throw new AuthenticationException(
|
333 |
+
$message,
|
334 |
+
$code,
|
335 |
+
$statusCode,
|
336 |
+
$this->urlFor($path)
|
337 |
+
);
|
338 |
+
case 'OUT_OF_QUERIES':
|
339 |
+
case 'INSUFFICIENT_FUNDS':
|
340 |
+
throw new InsufficientFundsException(
|
341 |
+
$message,
|
342 |
+
$code,
|
343 |
+
$statusCode,
|
344 |
+
$this->urlFor($path)
|
345 |
+
);
|
346 |
+
case 'PERMISSION_REQUIRED':
|
347 |
+
throw new PermissionRequiredException(
|
348 |
+
$message,
|
349 |
+
$code,
|
350 |
+
$statusCode,
|
351 |
+
$this->urlFor($path)
|
352 |
+
);
|
353 |
+
default:
|
354 |
+
throw new InvalidRequestException(
|
355 |
+
$message,
|
356 |
+
$code,
|
357 |
+
$statusCode,
|
358 |
+
$this->urlFor($path)
|
359 |
+
);
|
360 |
+
}
|
361 |
+
}
|
362 |
+
|
363 |
+
/**
|
364 |
+
* @param int $statusCode the HTTP status code
|
365 |
+
* @param string $service the service name
|
366 |
+
* @param string $path the URI path used in the request
|
367 |
+
*
|
368 |
+
* @throws HttpException
|
369 |
+
*/
|
370 |
+
private function handle5xx($statusCode, $service, $path)
|
371 |
+
{
|
372 |
+
throw new HttpException(
|
373 |
+
"Received a server error ($statusCode) for $service",
|
374 |
+
$statusCode,
|
375 |
+
$this->urlFor($path)
|
376 |
+
);
|
377 |
+
}
|
378 |
+
|
379 |
+
/**
|
380 |
+
* @param int $statusCode the HTTP status code
|
381 |
+
* @param string $service the service name
|
382 |
+
* @param string $path the URI path used in the request
|
383 |
+
*
|
384 |
+
* @throws HttpException
|
385 |
+
*/
|
386 |
+
private function handleUnexpectedStatus($statusCode, $service, $path)
|
387 |
+
{
|
388 |
+
throw new HttpException(
|
389 |
+
'Received an unexpected HTTP status ' .
|
390 |
+
"($statusCode) for $service",
|
391 |
+
$statusCode,
|
392 |
+
$this->urlFor($path)
|
393 |
+
);
|
394 |
+
}
|
395 |
+
|
396 |
+
/**
|
397 |
+
* @param string $body the successful request body
|
398 |
+
* @param string $service the service name
|
399 |
+
*
|
400 |
+
* @throws WebServiceException if the request body cannot be decoded as
|
401 |
+
* JSON
|
402 |
+
*
|
403 |
+
* @return array the decoded request body
|
404 |
+
*/
|
405 |
+
private function handleSuccess($body, $service)
|
406 |
+
{
|
407 |
+
if (strlen($body) === 0) {
|
408 |
+
throw new WebServiceException(
|
409 |
+
"Received a 200 response for $service but did not " .
|
410 |
+
'receive a HTTP body.'
|
411 |
+
);
|
412 |
+
}
|
413 |
+
|
414 |
+
$decodedContent = json_decode($body, true);
|
415 |
+
if ($decodedContent === null) {
|
416 |
+
throw new WebServiceException(
|
417 |
+
"Received a 200 response for $service but could " .
|
418 |
+
'not decode the response as JSON: '
|
419 |
+
. $this->jsonErrorDescription() . ' Body: ' . $body
|
420 |
+
);
|
421 |
+
}
|
422 |
+
|
423 |
+
return $decodedContent;
|
424 |
+
}
|
425 |
+
|
426 |
+
private function getCaBundle()
|
427 |
+
{
|
428 |
+
$curlVersion = curl_version();
|
429 |
+
|
430 |
+
// On OS X, when the SSL version is "SecureTransport", the system's
|
431 |
+
// keychain will be used.
|
432 |
+
if ($curlVersion['ssl_version'] === 'SecureTransport') {
|
433 |
+
return;
|
434 |
+
}
|
435 |
+
$cert = CaBundle::getSystemCaRootBundlePath();
|
436 |
+
|
437 |
+
// Check if the cert is inside a phar. If so, we need to copy the cert
|
438 |
+
// to a temp file so that curl can see it.
|
439 |
+
if (substr($cert, 0, 7) === 'phar://') {
|
440 |
+
$tempDir = sys_get_temp_dir();
|
441 |
+
$newCert = tempnam($tempDir, 'geoip2-');
|
442 |
+
if ($newCert === false) {
|
443 |
+
throw new \RuntimeException(
|
444 |
+
"Unable to create temporary file in $tempDir"
|
445 |
+
);
|
446 |
+
}
|
447 |
+
if (!copy($cert, $newCert)) {
|
448 |
+
throw new \RuntimeException(
|
449 |
+
"Could not copy $cert to $newCert: "
|
450 |
+
. var_export(error_get_last(), true)
|
451 |
+
);
|
452 |
+
}
|
453 |
+
|
454 |
+
// We use a shutdown function rather than the destructor as the
|
455 |
+
// destructor isn't called on a fatal error such as an uncaught
|
456 |
+
// exception.
|
457 |
+
register_shutdown_function(
|
458 |
+
function () use ($newCert) {
|
459 |
+
unlink($newCert);
|
460 |
+
}
|
461 |
+
);
|
462 |
+
$cert = $newCert;
|
463 |
+
}
|
464 |
+
if (!file_exists($cert)) {
|
465 |
+
throw new \RuntimeException("CA cert does not exist at $cert");
|
466 |
+
}
|
467 |
+
|
468 |
+
return $cert;
|
469 |
+
}
|
470 |
+
}
|
vendor/maxmind/web-service-common/src/WebService/Http/CurlRequest.php
ADDED
@@ -0,0 +1,110 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace MaxMind\WebService\Http;
|
4 |
+
|
5 |
+
use MaxMind\Exception\HttpException;
|
6 |
+
|
7 |
+
/**
|
8 |
+
* This class is for internal use only. Semantic versioning does not not apply.
|
9 |
+
*
|
10 |
+
* @internal
|
11 |
+
*/
|
12 |
+
class CurlRequest implements Request
|
13 |
+
{
|
14 |
+
private $url;
|
15 |
+
private $options;
|
16 |
+
|
17 |
+
/**
|
18 |
+
* @param $url
|
19 |
+
* @param $options
|
20 |
+
*/
|
21 |
+
public function __construct($url, $options)
|
22 |
+
{
|
23 |
+
$this->url = $url;
|
24 |
+
$this->options = $options;
|
25 |
+
}
|
26 |
+
|
27 |
+
/**
|
28 |
+
* @param $body
|
29 |
+
*
|
30 |
+
* @return array
|
31 |
+
*/
|
32 |
+
public function post($body)
|
33 |
+
{
|
34 |
+
$curl = $this->createCurl();
|
35 |
+
|
36 |
+
curl_setopt($curl, CURLOPT_POST, true);
|
37 |
+
curl_setopt($curl, CURLOPT_POSTFIELDS, $body);
|
38 |
+
|
39 |
+
return $this->execute($curl);
|
40 |
+
}
|
41 |
+
|
42 |
+
public function get()
|
43 |
+
{
|
44 |
+
$curl = $this->createCurl();
|
45 |
+
|
46 |
+
curl_setopt($curl, CURLOPT_HTTPGET, true);
|
47 |
+
|
48 |
+
return $this->execute($curl);
|
49 |
+
}
|
50 |
+
|
51 |
+
/**
|
52 |
+
* @return resource
|
53 |
+
*/
|
54 |
+
private function createCurl()
|
55 |
+
{
|
56 |
+
$curl = curl_init($this->url);
|
57 |
+
|
58 |
+
if (!empty($this->options['caBundle'])) {
|
59 |
+
$opts[CURLOPT_CAINFO] = $this->options['caBundle'];
|
60 |
+
}
|
61 |
+
$opts[CURLOPT_SSL_VERIFYHOST] = 2;
|
62 |
+
$opts[CURLOPT_FOLLOWLOCATION] = false;
|
63 |
+
$opts[CURLOPT_SSL_VERIFYPEER] = true;
|
64 |
+
$opts[CURLOPT_RETURNTRANSFER] = true;
|
65 |
+
|
66 |
+
$opts[CURLOPT_HTTPHEADER] = $this->options['headers'];
|
67 |
+
$opts[CURLOPT_USERAGENT] = $this->options['userAgent'];
|
68 |
+
$opts[CURLOPT_PROXY] = $this->options['proxy'];
|
69 |
+
|
70 |
+
// The defined()s are here as the *_MS opts are not available on older
|
71 |
+
// cURL versions
|
72 |
+
$connectTimeout = $this->options['connectTimeout'];
|
73 |
+
if (defined('CURLOPT_CONNECTTIMEOUT_MS')) {
|
74 |
+
$opts[CURLOPT_CONNECTTIMEOUT_MS] = ceil($connectTimeout * 1000);
|
75 |
+
} else {
|
76 |
+
$opts[CURLOPT_CONNECTTIMEOUT] = ceil($connectTimeout);
|
77 |
+
}
|
78 |
+
|
79 |
+
$timeout = $this->options['timeout'];
|
80 |
+
if (defined('CURLOPT_TIMEOUT_MS')) {
|
81 |
+
$opts[CURLOPT_TIMEOUT_MS] = ceil($timeout * 1000);
|
82 |
+
} else {
|
83 |
+
$opts[CURLOPT_TIMEOUT] = ceil($timeout);
|
84 |
+
}
|
85 |
+
|
86 |
+
curl_setopt_array($curl, $opts);
|
87 |
+
|
88 |
+
return $curl;
|
89 |
+
}
|
90 |
+
|
91 |
+
private function execute($curl)
|
92 |
+
{
|
93 |
+
$body = curl_exec($curl);
|
94 |
+
if ($errno = curl_errno($curl)) {
|
95 |
+
$errorMessage = curl_error($curl);
|
96 |
+
|
97 |
+
throw new HttpException(
|
98 |
+
"cURL error ({$errno}): {$errorMessage}",
|
99 |
+
0,
|
100 |
+
$this->url
|
101 |
+
);
|
102 |
+
}
|
103 |
+
|
104 |
+
$statusCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
|
105 |
+
$contentType = curl_getinfo($curl, CURLINFO_CONTENT_TYPE);
|
106 |
+
curl_close($curl);
|
107 |
+
|
108 |
+
return [$statusCode, $contentType, $body];
|
109 |
+
}
|
110 |
+
}
|
vendor/maxmind/web-service-common/src/WebService/Http/Request.php
ADDED
@@ -0,0 +1,29 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace MaxMind\WebService\Http;
|
4 |
+
|
5 |
+
/**
|
6 |
+
* Interface Request.
|
7 |
+
*
|
8 |
+
* @internal
|
9 |
+
*/
|
10 |
+
interface Request
|
11 |
+
{
|
12 |
+
/**
|
13 |
+
* @param $url
|
14 |
+
* @param $options
|
15 |
+
*/
|
16 |
+
public function __construct($url, $options);
|
17 |
+
|
18 |
+
/**
|
19 |
+
* @param $body
|
20 |
+
*
|
21 |
+
* @return mixed
|
22 |
+
*/
|
23 |
+
public function post($body);
|
24 |
+
|
25 |
+
/**
|
26 |
+
* @return mixed
|
27 |
+
*/
|
28 |
+
public function get();
|
29 |
+
}
|
vendor/maxmind/web-service-common/src/WebService/Http/RequestFactory.php
ADDED
@@ -0,0 +1,26 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace MaxMind\WebService\Http;
|
4 |
+
|
5 |
+
/**
|
6 |
+
* Class RequestFactory.
|
7 |
+
*
|
8 |
+
* @internal
|
9 |
+
*/
|
10 |
+
class RequestFactory
|
11 |
+
{
|
12 |
+
public function __construct()
|
13 |
+
{
|
14 |
+
}
|
15 |
+
|
16 |
+
/**
|
17 |
+
* @param $url
|
18 |
+
* @param $options
|
19 |
+
*
|
20 |
+
* @return CurlRequest
|
21 |
+
*/
|
22 |
+
public function request($url, $options)
|
23 |
+
{
|
24 |
+
return new CurlRequest($url, $options);
|
25 |
+
}
|
26 |
+
}
|