Webinterpret_Connector - Version 1.3.6.0

Version Notes

Bugfixes.

Download this release

Release Info

Developer Webinterpret
Extension Webinterpret_Connector
Version 1.3.6.0
Comparing to
See all releases


Code changes from version 1.3.5.1 to 1.3.6.0

Files changed (172) hide show
  1. app/code/community/Webinterpret/Connector/Block/Adminhtml/System/Config/Fieldset/Status.php +2 -4
  2. app/code/community/Webinterpret/Connector/Block/Head.php +5 -0
  3. app/code/community/Webinterpret/Connector/Helper/Autoloader.php +0 -174
  4. app/code/community/Webinterpret/Connector/Helper/Data.php +21 -130
  5. app/code/community/Webinterpret/Connector/Helper/Verifier.php +12 -9
  6. app/code/community/Webinterpret/Connector/Lib/Webinterpret/InventoryManagerClient.php +0 -117
  7. app/code/community/Webinterpret/Connector/Lib/Webinterpret/InventoryManagerProductInfo.php +0 -97
  8. app/code/community/Webinterpret/Connector/Lib/Webinterpret/Toolkit/GeoIP.php +0 -91
  9. app/code/community/Webinterpret/Connector/Lib/Webinterpret/Toolkit/StatusApi/StatusApiConfigurator.php +0 -70
  10. app/code/community/Webinterpret/Connector/Lib/autoload.php +0 -7
  11. app/code/community/Webinterpret/Connector/Lib/composer/ClassLoader.php +0 -413
  12. app/code/community/Webinterpret/Connector/Lib/composer/LICENSE +0 -433
  13. app/code/community/Webinterpret/Connector/Lib/composer/autoload_classmap.php +0 -9
  14. app/code/community/Webinterpret/Connector/Lib/composer/autoload_namespaces.php +0 -11
  15. app/code/community/Webinterpret/Connector/Lib/composer/autoload_psr4.php +0 -12
  16. app/code/community/Webinterpret/Connector/Lib/composer/autoload_real.php +0 -45
  17. app/code/community/Webinterpret/Connector/Lib/composer/ca-bundle/LICENSE +0 -19
  18. app/code/community/Webinterpret/Connector/Lib/composer/ca-bundle/README.md +0 -70
  19. app/code/community/Webinterpret/Connector/Lib/composer/ca-bundle/composer.json +0 -51
  20. app/code/community/Webinterpret/Connector/Lib/composer/ca-bundle/res/cacert.pem +0 -3884
  21. app/code/community/Webinterpret/Connector/Lib/composer/ca-bundle/src/CaBundle.php +0 -291
  22. app/code/community/Webinterpret/Connector/Lib/composer/installed.json +0 -263
  23. app/code/community/Webinterpret/Connector/Lib/geoip2/geoip2/.gitmodules +0 -3
  24. app/code/community/Webinterpret/Connector/Lib/geoip2/geoip2/CHANGELOG.md +0 -224
  25. app/code/community/Webinterpret/Connector/Lib/geoip2/geoip2/LICENSE +0 -202
  26. app/code/community/Webinterpret/Connector/Lib/geoip2/geoip2/README.md +0 -383
  27. app/code/community/Webinterpret/Connector/Lib/geoip2/geoip2/composer.json +0 -29
  28. app/code/community/Webinterpret/Connector/Lib/geoip2/geoip2/src/Compat/JsonSerializable.php +0 -27
  29. app/code/community/Webinterpret/Connector/Lib/geoip2/geoip2/src/Database/Reader.php +0 -246
  30. app/code/community/Webinterpret/Connector/Lib/geoip2/geoip2/src/Exception/AddressNotFoundException.php +0 -10
  31. app/code/community/Webinterpret/Connector/Lib/geoip2/geoip2/src/Exception/AuthenticationException.php +0 -10
  32. app/code/community/Webinterpret/Connector/Lib/geoip2/geoip2/src/Exception/GeoIp2Exception.php +0 -10
  33. app/code/community/Webinterpret/Connector/Lib/geoip2/geoip2/src/Exception/HttpException.php +0 -25
  34. app/code/community/Webinterpret/Connector/Lib/geoip2/geoip2/src/Exception/InvalidRequestException.php +0 -26
  35. app/code/community/Webinterpret/Connector/Lib/geoip2/geoip2/src/Exception/OutOfQueriesException.php +0 -10
  36. app/code/community/Webinterpret/Connector/Lib/geoip2/geoip2/src/Model/AbstractModel.php +0 -62
  37. app/code/community/Webinterpret/Connector/Lib/geoip2/geoip2/src/Model/AnonymousIp.php +0 -50
  38. app/code/community/Webinterpret/Connector/Lib/geoip2/geoip2/src/Model/City.php +0 -136
  39. app/code/community/Webinterpret/Connector/Lib/geoip2/geoip2/src/Model/ConnectionType.php +0 -31
  40. app/code/community/Webinterpret/Connector/Lib/geoip2/geoip2/src/Model/Country.php +0 -73
  41. app/code/community/Webinterpret/Connector/Lib/geoip2/geoip2/src/Model/Domain.php +0 -31
  42. app/code/community/Webinterpret/Connector/Lib/geoip2/geoip2/src/Model/Enterprise.php +0 -56
  43. app/code/community/Webinterpret/Connector/Lib/geoip2/geoip2/src/Model/Insights.php +0 -56
  44. app/code/community/Webinterpret/Connector/Lib/geoip2/geoip2/src/Model/Isp.php +0 -47
  45. app/code/community/Webinterpret/Connector/Lib/geoip2/geoip2/src/ProviderInterface.php +0 -20
  46. app/code/community/Webinterpret/Connector/Lib/geoip2/geoip2/src/Record/AbstractPlaceRecord.php +0 -57
  47. app/code/community/Webinterpret/Connector/Lib/geoip2/geoip2/src/Record/AbstractRecord.php +0 -60
  48. app/code/community/Webinterpret/Connector/Lib/geoip2/geoip2/src/Record/City.php +0 -32
  49. app/code/community/Webinterpret/Connector/Lib/geoip2/geoip2/src/Record/Continent.php +0 -35
  50. app/code/community/Webinterpret/Connector/Lib/geoip2/geoip2/src/Record/Country.php +0 -41
  51. app/code/community/Webinterpret/Connector/Lib/geoip2/geoip2/src/Record/Location.php +0 -59
  52. app/code/community/Webinterpret/Connector/Lib/geoip2/geoip2/src/Record/MaxMind.php +0 -19
  53. app/code/community/Webinterpret/Connector/Lib/geoip2/geoip2/src/Record/Postal.php +0 -27
  54. app/code/community/Webinterpret/Connector/Lib/geoip2/geoip2/src/Record/RepresentedCountry.php +0 -40
  55. app/code/community/Webinterpret/Connector/Lib/geoip2/geoip2/src/Record/Subdivision.php +0 -45
  56. app/code/community/Webinterpret/Connector/Lib/geoip2/geoip2/src/Record/Traits.php +0 -107
  57. app/code/community/Webinterpret/Connector/Lib/geoip2/geoip2/src/WebService/Client.php +0 -242
  58. app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/.gitignore +0 -5
  59. app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/.travis.yml +0 -25
  60. app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/CHANGELOG.md +0 -10
  61. app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/LICENSE +0 -19
  62. app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/README.md +0 -28
  63. app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/composer.json +0 -32
  64. app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/examples/CookieListener.php +0 -37
  65. app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/examples/DigestAuthListener.php +0 -40
  66. app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/lib/Buzz/Browser.php +0 -195
  67. app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/lib/Buzz/Client/AbstractClient.php +0 -73
  68. app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/lib/Buzz/Client/AbstractCurl.php +0 -232
  69. app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/lib/Buzz/Client/AbstractStream.php +0 -45
  70. app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/lib/Buzz/Client/BatchClientInterface.php +0 -27
  71. app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/lib/Buzz/Client/ClientInterface.php +0 -20
  72. app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/lib/Buzz/Client/Curl.php +0 -60
  73. app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/lib/Buzz/Client/FileGetContents.php +0 -51
  74. app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/lib/Buzz/Client/MultiCurl.php +0 -114
  75. app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/lib/Buzz/Exception/ClientException.php +0 -10
  76. app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/lib/Buzz/Exception/ExceptionInterface.php +0 -10
  77. app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/lib/Buzz/Exception/InvalidArgumentException.php +0 -10
  78. app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/lib/Buzz/Exception/LogicException.php +0 -10
  79. app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/lib/Buzz/Exception/RequestException.php +0 -32
  80. app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/lib/Buzz/Exception/RuntimeException.php +0 -7
  81. app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/lib/Buzz/Listener/BasicAuthListener.php +0 -27
  82. app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/lib/Buzz/Listener/CallbackListener.php +0 -49
  83. app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/lib/Buzz/Listener/CookieListener.php +0 -50
  84. app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/lib/Buzz/Listener/DigestAuthListener.php +0 -837
  85. app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/lib/Buzz/Listener/History/Entry.php +0 -42
  86. app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/lib/Buzz/Listener/History/Journal.php +0 -76
  87. app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/lib/Buzz/Listener/HistoryListener.php +0 -33
  88. app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/lib/Buzz/Listener/ListenerChain.php +0 -40
  89. app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/lib/Buzz/Listener/ListenerInterface.php +0 -12
  90. app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/lib/Buzz/Listener/LoggerListener.php +0 -36
  91. app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/lib/Buzz/Message/AbstractMessage.php +0 -154
  92. app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/lib/Buzz/Message/Factory/Factory.php +0 -26
  93. app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/lib/Buzz/Message/Factory/FactoryInterface.php +0 -12
  94. app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/lib/Buzz/Message/Form/FormRequest.php +0 -187
  95. app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/lib/Buzz/Message/Form/FormRequestInterface.php +0 -27
  96. app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/lib/Buzz/Message/Form/FormUpload.php +0 -118
  97. app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/lib/Buzz/Message/Form/FormUploadInterface.php +0 -13
  98. app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/lib/Buzz/Message/MessageInterface.php +0 -74
  99. app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/lib/Buzz/Message/Request.php +0 -174
  100. app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/lib/Buzz/Message/RequestInterface.php +0 -75
  101. app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/lib/Buzz/Message/Response.php +0 -193
  102. app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/lib/Buzz/Util/Cookie.php +0 -216
  103. app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/lib/Buzz/Util/CookieJar.php +0 -79
  104. app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/lib/Buzz/Util/Url.php +0 -190
  105. app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/phpunit.xml.dist +0 -20
  106. app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/test/Buzz/Test/BrowserTest.php +0 -182
  107. app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/test/Buzz/Test/Client/AbstractStreamTest.php +0 -58
  108. app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/test/Buzz/Test/Client/ClientTest.php +0 -36
  109. app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/test/Buzz/Test/Client/FunctionalTest.php +0 -287
  110. app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/test/Buzz/Test/Listener/BasicAuthListenerTest.php +0 -20
  111. app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/test/Buzz/Test/Listener/CallbackListenerTest.php +0 -34
  112. app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/test/Buzz/Test/Listener/DigestAuthListenerTest.php +0 -60
  113. app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/test/Buzz/Test/Listener/History/EntryTest.php +0 -15
  114. app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/test/Buzz/Test/Listener/History/JournalTest.php +0 -119
  115. app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/test/Buzz/Test/Listener/HistoryListenerTest.php +0 -39
  116. app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/test/Buzz/Test/Listener/ListenerChainTest.php +0 -36
  117. app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/test/Buzz/Test/Listener/LoggerListenerTest.php +0 -31
  118. app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/test/Buzz/Test/Message/AbstractMessageTest.php +0 -129
  119. app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/test/Buzz/Test/Message/FactoryTest.php +0 -61
  120. app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/test/Buzz/Test/Message/Fixtures/google.png +0 -0
  121. app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/test/Buzz/Test/Message/FormRequestTest.php +0 -137
  122. app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/test/Buzz/Test/Message/FormUploadTest.php +0 -44
  123. app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/test/Buzz/Test/Message/RequestTest.php +0 -141
  124. app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/test/Buzz/Test/Message/ResponseTest.php +0 -114
  125. app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/test/Buzz/Test/Util/CookieJarTest.php +0 -73
  126. app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/test/Buzz/Test/Util/CookieTest.php +0 -151
  127. app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/test/Buzz/Test/Util/UrlTest.php +0 -57
  128. app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/test/etc/nginx.conf +0 -49
  129. app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/test/etc/squid.conf +0 -2
  130. app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/test/server.php +0 -18
  131. app/code/community/Webinterpret/Connector/Lib/maxmind-db/reader/CHANGELOG.md +0 -87
  132. app/code/community/Webinterpret/Connector/Lib/maxmind-db/reader/LICENSE +0 -202
  133. app/code/community/Webinterpret/Connector/Lib/maxmind-db/reader/README.md +0 -140
  134. app/code/community/Webinterpret/Connector/Lib/maxmind-db/reader/composer.json +0 -28
  135. app/code/community/Webinterpret/Connector/Lib/maxmind-db/reader/ext/config.m4 +0 -19
  136. app/code/community/Webinterpret/Connector/Lib/maxmind-db/reader/ext/maxminddb.c +0 -565
  137. app/code/community/Webinterpret/Connector/Lib/maxmind-db/reader/ext/php_maxminddb.h +0 -24
  138. app/code/community/Webinterpret/Connector/Lib/maxmind-db/reader/ext/tests/001-load.phpt +0 -10
  139. app/code/community/Webinterpret/Connector/Lib/maxmind-db/reader/src/MaxMind/Db/Reader.php +0 -296
  140. app/code/community/Webinterpret/Connector/Lib/maxmind-db/reader/src/MaxMind/Db/Reader/Decoder.php +0 -309
  141. app/code/community/Webinterpret/Connector/Lib/maxmind-db/reader/src/MaxMind/Db/Reader/InvalidDatabaseException.php +0 -10
  142. app/code/community/Webinterpret/Connector/Lib/maxmind-db/reader/src/MaxMind/Db/Reader/Metadata.php +0 -77
  143. app/code/community/Webinterpret/Connector/Lib/maxmind-db/reader/src/MaxMind/Db/Reader/Util.php +0 -28
  144. app/code/community/Webinterpret/Connector/Lib/maxmind/web-service-common/CHANGELOG.md +0 -69
  145. app/code/community/Webinterpret/Connector/Lib/maxmind/web-service-common/LICENSE +0 -202
  146. app/code/community/Webinterpret/Connector/Lib/maxmind/web-service-common/README.md +0 -26
  147. app/code/community/Webinterpret/Connector/Lib/maxmind/web-service-common/composer.json +0 -29
  148. app/code/community/Webinterpret/Connector/Lib/maxmind/web-service-common/src/Exception/AuthenticationException.php +0 -10
  149. app/code/community/Webinterpret/Connector/Lib/maxmind/web-service-common/src/Exception/HttpException.php +0 -40
  150. app/code/community/Webinterpret/Connector/Lib/maxmind/web-service-common/src/Exception/InsufficientFundsException.php +0 -10
  151. app/code/community/Webinterpret/Connector/Lib/maxmind/web-service-common/src/Exception/InvalidInputException.php +0 -12
  152. app/code/community/Webinterpret/Connector/Lib/maxmind/web-service-common/src/Exception/InvalidRequestException.php +0 -37
  153. app/code/community/Webinterpret/Connector/Lib/maxmind/web-service-common/src/Exception/IpAddressNotFoundException.php +0 -7
  154. app/code/community/Webinterpret/Connector/Lib/maxmind/web-service-common/src/Exception/PermissionRequiredException.php +0 -10
  155. app/code/community/Webinterpret/Connector/Lib/maxmind/web-service-common/src/Exception/WebServiceException.php +0 -10
  156. app/code/community/Webinterpret/Connector/Lib/maxmind/web-service-common/src/WebService/Client.php +0 -457
  157. app/code/community/Webinterpret/Connector/Lib/maxmind/web-service-common/src/WebService/Http/CurlRequest.php +0 -109
  158. app/code/community/Webinterpret/Connector/Lib/maxmind/web-service-common/src/WebService/Http/Request.php +0 -28
  159. app/code/community/Webinterpret/Connector/Lib/maxmind/web-service-common/src/WebService/Http/RequestFactory.php +0 -25
  160. app/code/community/Webinterpret/Connector/Model/BackendRedirector.php +0 -182
  161. app/code/community/Webinterpret/Connector/Model/Observer.php +11 -42
  162. app/code/community/Webinterpret/Connector/Model/SignatureException.php +11 -0
  163. app/code/community/Webinterpret/Connector/Model/StoreExtender.php +0 -201
  164. app/code/community/Webinterpret/Connector/{Lib/Webinterpret/Toolkit/StatusApi → StatusApi}/AbstractStatusApiDiagnostics.php +7 -4
  165. app/code/community/Webinterpret/Connector/{Lib/Webinterpret/Toolkit/StatusApi → StatusApi}/PlatformDiagnostics.php +16 -21
  166. app/code/community/Webinterpret/Connector/{Lib/Webinterpret/Toolkit/StatusApi → StatusApi}/PluginDiagnostics.php +16 -27
  167. app/code/community/Webinterpret/Connector/{Lib/Webinterpret/Toolkit/StatusApi → StatusApi}/StatusApi.php +9 -6
  168. app/code/community/Webinterpret/Connector/StatusApi/StatusApiConfigurator.php +43 -0
  169. app/code/community/Webinterpret/Connector/{Lib/Webinterpret/Toolkit/StatusApi → StatusApi}/SystemDiagnostics.php +9 -4
  170. app/code/community/Webinterpret/Connector/bridge2cart/bridge.php +3710 -3711
  171. app/code/community/Webinterpret/Connector/bridge2cart/config.php +1 -9
  172. app/code/community/Webinterpret/Connector/bridge2cart/helper.php +0 -22
app/code/community/Webinterpret/Connector/Block/Adminhtml/System/Config/Fieldset/Status.php CHANGED
@@ -1,4 +1,5 @@
1
  <?php
 
2
  /**
3
  * Custom renderer for Webinterpret status in System Configuration
4
  *
@@ -31,10 +32,7 @@ class Webinterpret_Connector_Block_Adminhtml_System_Config_Fieldset_Status
31
  $url = 'https://webstores.webinterpret.com/plugin/test';
32
  $storeUrl = Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_WEB);
33
  $storeUrl = rtrim($storeUrl, '/');
34
- $params = array(
35
- 'url' => $storeUrl,
36
- );
37
- $url = $url . '?' . http_build_query($params);
38
  return $url;
39
  }
40
  }
1
  <?php
2
+
3
  /**
4
  * Custom renderer for Webinterpret status in System Configuration
5
  *
32
  $url = 'https://webstores.webinterpret.com/plugin/test';
33
  $storeUrl = Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_WEB);
34
  $storeUrl = rtrim($storeUrl, '/');
35
+ $url .= '?' . http_build_query(array('url' => $storeUrl));
 
 
 
36
  return $url;
37
  }
38
  }
app/code/community/Webinterpret/Connector/Block/Head.php CHANGED
@@ -13,4 +13,9 @@ class Webinterpret_Connector_Block_Head extends Mage_Core_Block_Template
13
  {
14
  return Mage::getStoreConfig('webinterpret_connector/head') . PHP_EOL;
15
  }
 
 
 
 
 
16
  }
13
  {
14
  return Mage::getStoreConfig('webinterpret_connector/head') . PHP_EOL;
15
  }
16
+
17
+ public function getLoaderUrl()
18
+ {
19
+ return Mage::helper('webinterpret_connector')->getRemoteAssetsUrl() . '/common/js/webinterpret-loader.js';
20
+ }
21
  }
app/code/community/Webinterpret/Connector/Helper/Autoloader.php DELETED
@@ -1,174 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * Autoloader helper
5
- *
6
- * @category Webinterpret
7
- * @package Webinterpret_Connector
8
- * @author Webinterpret Team <info@webinterpret.com>
9
- * @see https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-4-autoloader-examples.md
10
- * @license http://opensource.org/licenses/osl-3.0.php
11
- */
12
- class Webinterpret_Connector_Helper_Autoloader extends Mage_Core_Helper_Abstract
13
- {
14
- /**
15
- * An associative array where the key is a namespace prefix and the value
16
- * is an array of base directories for classes in that namespace.
17
- *
18
- * @var array
19
- */
20
- protected $prefixes = array();
21
-
22
- /**
23
- * Register loader with SPL autoloader stack.
24
- *
25
- * @return void
26
- */
27
- public function register()
28
- {
29
- spl_autoload_register(array($this, 'loadClass'));
30
- }
31
-
32
- /**
33
- * Adds a base directory for a namespace prefix.
34
- *
35
- * @param string $prefix The namespace prefix.
36
- * @param string $base_dir A base directory for class files in the
37
- * namespace.
38
- * @param bool $prepend If true, prepend the base directory to the stack
39
- * instead of appending it; this causes it to be searched first rather
40
- * than last.
41
- *
42
- * @return void
43
- */
44
- public function addNamespace($prefix, $base_dir, $prepend = false)
45
- {
46
- // normalize namespace prefix
47
- $prefix = trim($prefix, '\\').'\\';
48
-
49
- // normalize the base directory with a trailing separator
50
- $base_dir = rtrim($base_dir, DIRECTORY_SEPARATOR).'/';
51
-
52
- // initialize the namespace prefix array
53
- if (isset($this->prefixes[$prefix]) === false) {
54
- $this->prefixes[$prefix] = array();
55
- }
56
-
57
- // retain the base directory for the namespace prefix
58
- if ($prepend) {
59
- array_unshift($this->prefixes[$prefix], $base_dir);
60
- } else {
61
- array_push($this->prefixes[$prefix], $base_dir);
62
- }
63
- }
64
-
65
- /**
66
- * Loads the class file for a given class name.
67
- *
68
- * @param string $class The fully-qualified class name.
69
- *
70
- * @return mixed The mapped file name on success, or boolean false on
71
- * failure.
72
- */
73
- public function loadClass($class)
74
- {
75
- // the current namespace prefix
76
- $prefix = $class;
77
-
78
- // work backwards through the namespace names of the fully-qualified
79
- // class name to find a mapped file name
80
- while (false !== $pos = strrpos($prefix, '\\')) {
81
-
82
- // retain the trailing namespace separator in the prefix
83
- $prefix = substr($class, 0, $pos + 1);
84
-
85
- // the rest is the relative class name
86
- $relative_class = substr($class, $pos + 1);
87
-
88
- // try to load a mapped file for the prefix and relative class
89
- $mapped_file = $this->loadMappedFile($prefix, $relative_class);
90
- if ($mapped_file) {
91
- return $mapped_file;
92
- }
93
-
94
- // remove the trailing namespace separator for the next iteration
95
- // of strrpos()
96
- $prefix = rtrim($prefix, '\\');
97
- }
98
-
99
- // never found a mapped file
100
- return false;
101
- }
102
-
103
- /**
104
- * Load the mapped file for a namespace prefix and relative class.
105
- *
106
- * @param string $prefix The namespace prefix.
107
- * @param string $relative_class The relative class name.
108
- *
109
- * @return mixed Boolean false if no mapped file can be loaded, or the
110
- * name of the mapped file that was loaded.
111
- */
112
- protected function loadMappedFile($prefix, $relative_class)
113
- {
114
- // are there any base directories for this namespace prefix?
115
- if (isset($this->prefixes[$prefix]) === false) {
116
- return false;
117
- }
118
-
119
- // look through base directories for this namespace prefix
120
- foreach ($this->prefixes[$prefix] as $base_dir) {
121
-
122
- // replace the namespace prefix with the base directory,
123
- // replace namespace separators with directory separators
124
- // in the relative class name, append with .php
125
- $file = $base_dir
126
- .str_replace('\\', '/', $relative_class)
127
- .'.php';
128
-
129
- // if the mapped file exists, require it
130
- if ($this->requireFile($file)) {
131
- // yes, we're done
132
- return $file;
133
- }
134
- }
135
-
136
- // never found it
137
- return false;
138
- }
139
-
140
- /**
141
- * If a file exists, require it from the file system.
142
- *
143
- * @param string $file The file to require.
144
- *
145
- * @return bool True if the file exists, false if not.
146
- */
147
- protected function requireFile($file)
148
- {
149
- if (file_exists($file)) {
150
- require $file;
151
-
152
- return true;
153
- }
154
-
155
- return false;
156
- }
157
-
158
- public static function createAndRegister()
159
- {
160
- $libBaseDir = Mage::getModuleDir('', 'Webinterpret_Connector') . '/Lib';
161
- self::createAndRegisterWithBaseDir($libBaseDir);
162
- }
163
-
164
- public static function createAndRegisterWithBaseDir($libBaseDir)
165
- {
166
- static $registered = false;
167
- if (!$registered) {
168
- $autoloader = new self;
169
- $autoloader->addNamespace('WebInterpret\\Toolkit\\StatusApi\\', $libBaseDir.'/Webinterpret/Toolkit/StatusApi/');
170
- $autoloader->register();
171
- $registered = true;
172
- }
173
- }
174
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Helper/Data.php CHANGED
@@ -1,4 +1,5 @@
1
  <?php
 
2
  /**
3
  * Default helper
4
  *
@@ -23,84 +24,24 @@ class Webinterpret_Connector_Helper_Data extends Mage_Core_Helper_Abstract
23
  Mage::getConfig()->saveConfig('webinterpret_connector/installation_mode', 0);
24
  }
25
 
26
- public function installBridgeHelper()
27
- {
28
- $repo = Mage::getStoreConfig('webinterpret_connector/file_repository');
29
- $dir = $this->getModuleBridgeDir();
30
-
31
- // Install helper.php
32
- $remoteFile = $repo . DS . 'bridge2cart' . DS . $this->getExtensionVersion() . DS . 'helper.php';
33
- $contents = $this->downloadFile($remoteFile);
34
- if ($contents === false) {
35
- return false;
36
- }
37
- $localFile = $dir . DS . 'helper.php';
38
- $contents = str_replace('exit();', '', $contents);
39
- if (@file_put_contents($localFile, $contents) === false) {
40
- return false;
41
- }
42
-
43
- return true;
44
- }
45
-
46
- public function downloadFile($url, $timeout = 10)
47
  {
48
- try {
49
- $method = $this->getDownloadMethod();
50
-
51
- if ($method == 'stream') {
52
- $ctx = stream_context_create(array(
53
- 'http'=>
54
- array(
55
- 'timeout' => $timeout,
56
- ),
57
- 'https'=>
58
- array(
59
- 'timeout' => $timeout,
60
- ),
61
- )
62
- );
63
- $contents = @file_get_contents($url, false, $ctx);
64
- if ($contents !== false) {
65
- return $contents;
66
- }
67
- }
68
-
69
- if ($method == 'curl') {
70
-
71
- $ch = curl_init();
72
- $headers = array(
73
- "Accept: */*",
74
- );
75
- curl_setopt_array($ch, array(
76
- CURLOPT_RETURNTRANSFER => 1,
77
- CURLOPT_URL => $url,
78
- CURLOPT_TIMEOUT => $timeout,
79
- CURLOPT_FOLLOWLOCATION => true,
80
- CURLOPT_ENCODING => '',
81
- CURLOPT_HTTPHEADER => $headers,
82
- ));
83
-
84
- $contents = curl_exec($ch);
85
-
86
- if (curl_errno($ch)) {
87
- curl_close($ch);
88
- return false;
89
- }
90
-
91
- curl_close($ch);
92
- return $contents;
93
  }
94
- } catch (Exception $e) {
95
- return false;
96
  }
97
 
98
- return false;
99
  }
100
 
101
  public function validateWebinterpretKey($key)
102
  {
103
- return (!empty($key) && strlen($key) == 32);
104
  }
105
 
106
  public function isEnabled()
@@ -133,21 +74,23 @@ class Webinterpret_Connector_Helper_Data extends Mage_Core_Helper_Abstract
133
  return (bool)Mage::getStoreConfig('webinterpret_connector/global_notifications_enabled');
134
  }
135
 
136
- public function isStoreExtenderEnabled()
137
  {
138
- return (bool)Mage::getStoreConfig('webinterpret_connector/store_extender_enabled');
 
 
139
  }
140
 
141
- public function isBackendRedirectorEnabled()
142
  {
143
- return (bool)Mage::getStoreConfig('webinterpret_connector/backend_redirector_enabled');
 
144
  }
145
 
146
- public function isFooterEnabled()
147
  {
148
- $module = $this->isEnabled();
149
- $feature = (bool)Mage::getStoreConfig('webinterpret_connector/footer_enabled');
150
- return $module && $feature;
151
  }
152
 
153
  public function getModuleBridgeDir()
@@ -157,12 +100,6 @@ class Webinterpret_Connector_Helper_Data extends Mage_Core_Helper_Abstract
157
  return $dir;
158
  }
159
 
160
- public function getBaseBridgeDir()
161
- {
162
- $dir = Mage::getBaseDir() . DS . 'bridge2cart';
163
- return $dir;
164
- }
165
-
166
  public function getStoreBaseUrl()
167
  {
168
  if (Mage::app()->getStore()->isCurrentlySecure()) {
@@ -200,18 +137,6 @@ class Webinterpret_Connector_Helper_Data extends Mage_Core_Helper_Abstract
200
  return Mage::getVersion();
201
  }
202
 
203
- public function isRemoteFilesAllowed()
204
- {
205
- if (ini_get('allow_url_fopen')) {
206
- return true;
207
- }
208
- if (function_exists('curl_version')) {
209
- return true;
210
- }
211
-
212
- return false;
213
- }
214
-
215
  public function getDownloadMethod()
216
  {
217
  if (ini_get('allow_url_fopen')) {
@@ -374,10 +299,6 @@ class Webinterpret_Connector_Helper_Data extends Mage_Core_Helper_Abstract
374
  'type' => 'file',
375
  'path' => 'app/code/community/Webinterpret/Connector/controllers/IndexController.php',
376
  ),
377
- array(
378
- 'type' => 'file',
379
- 'path' => 'app/code/community/Webinterpret/Connector/controllers/HelperController.php',
380
- ),
381
  array(
382
  'type' => 'file',
383
  'path' => 'app/code/community/Webinterpret/Connector/Block/Adminhtml/Notifications.php',
@@ -410,14 +331,6 @@ class Webinterpret_Connector_Helper_Data extends Mage_Core_Helper_Abstract
410
  'type' => 'file',
411
  'path' => 'app/code/community/Webinterpret/Connector/bridge2cart/config.php',
412
  ),
413
- array(
414
- 'type' => 'file',
415
- 'path' => 'app/code/community/Webinterpret/Connector/bridge2cart/helper.php',
416
- ),
417
- array(
418
- 'type' => 'file',
419
- 'path' => 'app/code/community/Webinterpret/Connector/bridge2cart/preloader.php',
420
- ),
421
  );
422
 
423
  // Check file permissions
@@ -463,26 +376,4 @@ class Webinterpret_Connector_Helper_Data extends Mage_Core_Helper_Abstract
463
  {
464
  return (string) Mage::getConfig()->getNode()->modules->Webinterpret_Connector->version;
465
  }
466
-
467
- public function getGeoip2DbPath()
468
- {
469
- return Mage::getModuleDir('', 'Webinterpret_Connector') . '/resources/geoip/GeoIP2-Country.mmdb';
470
- }
471
-
472
- /**
473
- * Checks if the session was already started
474
- *
475
- * @return bool
476
- */
477
- public function isSessionStarted() {
478
- if (php_sapi_name() !== 'cli') {
479
- if (version_compare(phpversion(), '5.4.0', '>=')) {
480
- return session_status() === PHP_SESSION_ACTIVE;
481
- } else {
482
- return session_id() !== '';
483
- }
484
- }
485
-
486
- return false;
487
- }
488
  }
1
  <?php
2
+
3
  /**
4
  * Default helper
5
  *
24
  Mage::getConfig()->saveConfig('webinterpret_connector/installation_mode', 0);
25
  }
26
 
27
+ public function getEnvConfig()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
28
  {
29
+ foreach (array(
30
+ __DIR__ . '/../etc/env.ini',
31
+ __DIR__ . '/../../../../../../../env.ini',
32
+ __DIR__ . '/../../../../../../../env.ini.example',
33
+ ) as $path) {
34
+ if (is_readable($path)) {
35
+ return parse_ini_file($path);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
36
  }
 
 
37
  }
38
 
39
+ return array();
40
  }
41
 
42
  public function validateWebinterpretKey($key)
43
  {
44
+ return !empty($key) && strlen($key) == 32;
45
  }
46
 
47
  public function isEnabled()
74
  return (bool)Mage::getStoreConfig('webinterpret_connector/global_notifications_enabled');
75
  }
76
 
77
+ public function isFooterEnabled()
78
  {
79
+ $module = $this->isEnabled();
80
+ $feature = (bool)Mage::getStoreConfig('webinterpret_connector/footer_enabled');
81
+ return $module && $feature;
82
  }
83
 
84
+ public function getRemoteAssetsUrl()
85
  {
86
+ $env = $this->getEnvConfig();
87
+ return Mage::getStoreConfig('webinterpret_connector/remote_assets_url') ?: $env['REMOTE_ASSETS_URL'];
88
  }
89
 
90
+ public function isSignatureVerificationEnabled()
91
  {
92
+ $env = $this->getEnvConfig();
93
+ return (bool)$env['SIGNATURE_VERIFICATION'];
 
94
  }
95
 
96
  public function getModuleBridgeDir()
100
  return $dir;
101
  }
102
 
 
 
 
 
 
 
103
  public function getStoreBaseUrl()
104
  {
105
  if (Mage::app()->getStore()->isCurrentlySecure()) {
137
  return Mage::getVersion();
138
  }
139
 
 
 
 
 
 
 
 
 
 
 
 
 
140
  public function getDownloadMethod()
141
  {
142
  if (ini_get('allow_url_fopen')) {
299
  'type' => 'file',
300
  'path' => 'app/code/community/Webinterpret/Connector/controllers/IndexController.php',
301
  ),
 
 
 
 
302
  array(
303
  'type' => 'file',
304
  'path' => 'app/code/community/Webinterpret/Connector/Block/Adminhtml/Notifications.php',
331
  'type' => 'file',
332
  'path' => 'app/code/community/Webinterpret/Connector/bridge2cart/config.php',
333
  ),
 
 
 
 
 
 
 
 
334
  );
335
 
336
  // Check file permissions
376
  {
377
  return (string) Mage::getConfig()->getNode()->modules->Webinterpret_Connector->version;
378
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
379
  }
app/code/community/Webinterpret/Connector/Helper/Verifier.php CHANGED
@@ -1,5 +1,7 @@
1
  <?php
2
 
 
 
3
  /**
4
  * Verifier helper
5
  *
@@ -18,12 +20,16 @@ class Webinterpret_Connector_Helper_Verifier extends Mage_Core_Helper_Abstract
18
  */
19
  public static function verifyRequestWebInterpretSignature()
20
  {
 
 
 
 
21
  if (!function_exists('openssl_verify')) {
22
- throw new Exception('OpenSSL is required.');
23
  }
24
 
25
  if (empty($_SERVER['HTTP_WEBINTERPRET_REQUEST_ID']) || empty ($_SERVER['HTTP_WEBINTERPRET_SIGNATURE']) || empty ($_SERVER['HTTP_WEBINTERPRET_SIGNATURE_VERSION'])) {
26
- throw new Exception('Request needs to be signed by WebInterpret.');
27
  }
28
 
29
  $requestId = $_SERVER['HTTP_WEBINTERPRET_REQUEST_ID'];
@@ -31,12 +37,7 @@ class Webinterpret_Connector_Helper_Verifier extends Mage_Core_Helper_Abstract
31
  $signature = base64_decode($signature);
32
 
33
  $version = $_SERVER['HTTP_WEBINTERPRET_SIGNATURE_VERSION'];
34
- if (empty($version)) {
35
- $version = 1;
36
- }
37
 
38
- // Data
39
- $data = $requestId;
40
  if ($version == 2) {
41
  // Query data
42
  $queryArray = $_GET;
@@ -49,6 +50,8 @@ class Webinterpret_Connector_Helper_Verifier extends Mage_Core_Helper_Abstract
49
  $postData = serialize($postData);
50
 
51
  $data = $requestId.$queryData.$postData;
 
 
52
  }
53
 
54
  // Verify signature
@@ -60,9 +63,9 @@ class Webinterpret_Connector_Helper_Verifier extends Mage_Core_Helper_Abstract
60
  return true;
61
  }
62
  if ($ok == 0) {
63
- throw new Exception('Incorrect signature.');
64
  }
65
 
66
- throw new Exception('Error checking signature');
67
  }
68
  }
1
  <?php
2
 
3
+ use Webinterpret_Connector_Model_SignatureException as SignatureException;
4
+
5
  /**
6
  * Verifier helper
7
  *
20
  */
21
  public static function verifyRequestWebInterpretSignature()
22
  {
23
+ if (!Mage::helper('webinterpret_connector')->isSignatureVerificationEnabled()) {
24
+ return true;
25
+ }
26
+
27
  if (!function_exists('openssl_verify')) {
28
+ throw new SignatureException('OpenSSL is required.');
29
  }
30
 
31
  if (empty($_SERVER['HTTP_WEBINTERPRET_REQUEST_ID']) || empty ($_SERVER['HTTP_WEBINTERPRET_SIGNATURE']) || empty ($_SERVER['HTTP_WEBINTERPRET_SIGNATURE_VERSION'])) {
32
+ throw new SignatureException('Request needs to be signed by WebInterpret.');
33
  }
34
 
35
  $requestId = $_SERVER['HTTP_WEBINTERPRET_REQUEST_ID'];
37
  $signature = base64_decode($signature);
38
 
39
  $version = $_SERVER['HTTP_WEBINTERPRET_SIGNATURE_VERSION'];
 
 
 
40
 
 
 
41
  if ($version == 2) {
42
  // Query data
43
  $queryArray = $_GET;
50
  $postData = serialize($postData);
51
 
52
  $data = $requestId.$queryData.$postData;
53
+ } else {
54
+ throw new SignatureException('Not supported signature version.');
55
  }
56
 
57
  // Verify signature
63
  return true;
64
  }
65
  if ($ok == 0) {
66
+ throw new SignatureException('Incorrect signature.');
67
  }
68
 
69
+ throw new SignatureException('Error checking signature');
70
  }
71
  }
app/code/community/Webinterpret/Connector/Lib/Webinterpret/InventoryManagerClient.php DELETED
@@ -1,117 +0,0 @@
1
- <?php
2
-
3
- namespace WebinterpretConnector\Webinterpret;
4
-
5
- use Buzz\Browser;
6
- use Buzz\Message\Response;
7
-
8
- /**
9
- * Class InventoryManagerClient
10
- * @package WebinterpretConnector\Webinterpret
11
- */
12
- class InventoryManagerClient
13
- {
14
- /**
15
- * @var Browser
16
- */
17
- private $browser;
18
-
19
- /**
20
- * @var string
21
- */
22
- private $storeUrl;
23
-
24
- /**
25
- * @var string
26
- */
27
- private $inventoryManagerUrl;
28
-
29
- /**
30
- * InventoryManagerClient constructor.
31
- * @param Browser $browser
32
- * @param $storeUrl
33
- * @param $inventoryManagerUrl
34
- */
35
- public function __construct(Browser $browser, $storeUrl, $inventoryManagerUrl)
36
- {
37
- $this->browser = $browser;
38
- $this->storeUrl = $storeUrl;
39
- $this->inventoryManagerUrl = $inventoryManagerUrl;
40
- }
41
-
42
- /**
43
- * @param $productId
44
- * @return InventoryManagerProductInfo|bool
45
- */
46
- public function fetchProductInfo($productId, $clientIp, $clientCountryCode)
47
- {
48
- $productLookupUrl = $this->inventoryManagerUrl . '/product/' . $productId;
49
- $productLookupUrl .= '?' . http_build_query(array(
50
- 'store_url' => $this->storeUrl,
51
- ));
52
-
53
- $headers = array(
54
- 'Connection' => 'keep-alive',
55
- 'Cache-Control' => 'no-cache',
56
- 'Webinterpret-Visitor-Ip' => $clientIp,
57
- 'Webinterpret-Visitor-Country' => $clientCountryCode,
58
- );
59
-
60
- $response = $this->browser->call(
61
- $productLookupUrl,
62
- 'GET',
63
- $headers
64
- );
65
-
66
- if (!$this->isValidResponse($response)) {
67
- return false;
68
- }
69
-
70
- $jsonObject = json_decode($response->getContent());
71
-
72
- if (is_null($jsonObject)) {
73
- return false;
74
- }
75
-
76
- if ($this->isInventoryManagerStatusError($jsonObject)) {
77
- return false;
78
- }
79
-
80
- return new InventoryManagerProductInfo($jsonObject);
81
- }
82
-
83
- /**
84
- * Checks if response from the Inventory Manager API call is valid
85
- *
86
- * @param mixed $response
87
- *
88
- * @return bool
89
- */
90
- private function isValidResponse(Response $response)
91
- {
92
- if ($response->isEmpty()) {
93
- return false;
94
- };
95
-
96
- if ($response->getStatusCode() !== 200) {
97
- return false;
98
- }
99
-
100
- return true;
101
- }
102
-
103
- /**
104
- * Checks if Inventory Manager returned a response with status => "error"
105
- *
106
- * @param \stdClass $jsonObject
107
- *
108
- * @return bool
109
- */
110
- private function isInventoryManagerStatusError($jsonObject) {
111
- if (property_exists($jsonObject, 'status') === true && $jsonObject->status === 'error') {
112
- return true;
113
- };
114
-
115
- return false;
116
- }
117
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/Webinterpret/InventoryManagerProductInfo.php DELETED
@@ -1,97 +0,0 @@
1
- <?php
2
-
3
- namespace WebinterpretConnector\Webinterpret;
4
-
5
- /**
6
- * Product information fetched from Inventory Manager
7
- */
8
- class InventoryManagerProductInfo {
9
-
10
- /**
11
- * @var \stdClass Response from Inventory Manager
12
- */
13
- private $originalResponse;
14
-
15
- /**
16
- * InventoryManagerProductInfo constructor.
17
- *
18
- * @param \stdClass $inventoryManagerResponse
19
- */
20
- public function __construct(\stdClass $inventoryManagerResponse) {
21
- $this->originalResponse = $inventoryManagerResponse;
22
- }
23
-
24
- /**
25
- * Checks whether product is available (based on response from Inventory Manager)
26
- *
27
- * @return bool
28
- */
29
- public function isProductAvailable() {
30
- if ($this->propertyExists('available') && $this->get('available') === true) {
31
- return true;
32
- }
33
-
34
- return false;
35
- }
36
-
37
- /**
38
- * Checks whether automatic redirection is enabled on Inventory Manager's side
39
- *
40
- * @return bool
41
- */
42
- public function isAutoRedirectEnabled() {
43
- if ($this->propertyExists('auto_redirect') && $this->get('auto_redirect') === true) {
44
- return true;
45
- }
46
-
47
- return false;
48
- }
49
-
50
- /**
51
- * Returns locale code
52
- *
53
- * @return null|string
54
- */
55
- public function getLocaleCode() {
56
- if ($this->propertyExists('locale_code')) {
57
- return $this->get('locale_code');
58
- }
59
-
60
- return null;
61
- }
62
-
63
- /**
64
- * Returns product international URL
65
- *
66
- * @return null|string
67
- */
68
- public function getProductUrl() {
69
- if ($this->propertyExists('url')) {
70
- return $this->get('url');
71
- }
72
-
73
- return null;
74
- }
75
-
76
- /**
77
- * Checks if the property exists in the response
78
- *
79
- * @param $property_name
80
- *
81
- * @return bool
82
- */
83
- private function propertyExists($property_name) {
84
- return (property_exists($this->originalResponse, $property_name) === true);
85
- }
86
-
87
- /**
88
- * Returns a chosen property from the response
89
- *
90
- * @param $property_name
91
- *
92
- * @return mixed
93
- */
94
- private function get($property_name) {
95
- return $this->originalResponse->{$property_name};
96
- }
97
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/Webinterpret/Toolkit/GeoIP.php DELETED
@@ -1,91 +0,0 @@
1
- <?php
2
-
3
- namespace WebinterpretConnector\Webinterpret\Toolkit;
4
-
5
- use GeoIp2\Database\Reader;
6
-
7
- /**
8
- * Geolocation and IP helpers
9
- */
10
- class GeoIP
11
- {
12
- private $geoip2Reader;
13
-
14
- public function __construct(Reader $reader)
15
- {
16
- $this->geoip2Reader = $reader;
17
- }
18
-
19
- /**
20
- * Gets the client IP from headers. Proxies are taken into consideration, private & reserved ranges are filtered out.
21
- *
22
- * WARNING: the IP headers can be spoofed, so don't rely on it
23
- *
24
- * @return bool|string False on failure, client IP address on success
25
- */
26
- public function getClientIp() {
27
- foreach (
28
- array(
29
- 'HTTP_CLIENT_IP',
30
- 'HTTP_X_FORWARDED_FOR',
31
- 'HTTP_X_FORWARDED',
32
- 'HTTP_X_CLUSTER_CLIENT_IP',
33
- 'HTTP_FORWARDED_FOR',
34
- 'HTTP_FORWARDED',
35
- 'REMOTE_ADDR'
36
- ) as $key
37
- ) {
38
- if (array_key_exists($key, $_SERVER) === true) {
39
- foreach (array_map('trim', explode(',', $_SERVER[$key])) as $ip) {
40
- if (filter_var(
41
- $ip,
42
- FILTER_VALIDATE_IP,
43
- FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE
44
- ) !== false) {
45
- return $ip;
46
- }
47
- }
48
- }
49
- }
50
-
51
- return false;
52
- }
53
-
54
- /**
55
- * Returns a two-character ISO 3166-1 alpha country code for the country associated with the location (based on client IP)
56
- * or false if no country code was found
57
- *
58
- * @return bool|string False on failure, ISO 3166-1 country code on success
59
- */
60
- public function getClientCountryCode() {
61
- $clientIp = $this->getClientIp();
62
-
63
- if ($clientIp) {
64
- return $this->getCountryCodeForIp($clientIp);
65
- }
66
-
67
- return false;
68
- }
69
-
70
- /**
71
- * Returns a two-character ISO 3166-1 alpha country code for the country associated with the provided ip
72
- *
73
- * @param string $ip
74
- *
75
- * @return string
76
- */
77
- public function getCountryCodeForIp($ip) {
78
- $country = $this->getGeoip2Reader()->country($ip);
79
-
80
- return $country->country->isoCode;
81
- }
82
-
83
- /**
84
- * Return reader for the GeoIP2 database format (will be lazily instantiated if it hasn't been before)
85
- *
86
- * @return Reader
87
- */
88
- public function getGeoip2Reader() {
89
- return $this->geoip2Reader;
90
- }
91
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/Webinterpret/Toolkit/StatusApi/StatusApiConfigurator.php DELETED
@@ -1,70 +0,0 @@
1
- <?php
2
-
3
- namespace WebInterpret\Toolkit\StatusApi;
4
-
5
- /**
6
- * Factory for preconfigured StatusApi objects
7
- */
8
- class StatusApiConfigurator
9
- {
10
- /**
11
- * @var \Mage_Core_Model_App
12
- */
13
- private $app;
14
-
15
- /**
16
- * @var \Mage_Core_Model_Config
17
- */
18
- private $config;
19
-
20
- public function __construct(\Mage_Core_Model_App $app, \Mage_Core_Model_Config $config)
21
- {
22
- $this->app = $app;
23
- $this->config = $config;
24
- }
25
-
26
- /**
27
- * Returns StatusApi with full suite of diagnostics testers preconfigured
28
- *
29
- * @return StatusApi
30
- */
31
- public function getExtendedStatusApi()
32
- {
33
- $statusApi = new StatusApi();
34
- $statusApi->addTester($this->getPluginDiagnosticsTester());
35
- $statusApi->addTester($this->getPlatformDiagnosticsTester());
36
- $statusApi->addTester($this->getSystemDiagnosticsTester());
37
-
38
- return $statusApi;
39
- }
40
-
41
- /**
42
- * @return PluginDiagnostics
43
- */
44
- private function getPluginDiagnosticsTester()
45
- {
46
- $tester = new PluginDiagnostics($this->app, $this->config);
47
-
48
- return $tester;
49
- }
50
-
51
- /**
52
- * @return PlatformDiagnostics
53
- */
54
- private function getPlatformDiagnosticsTester()
55
- {
56
- $tester = new PlatformDiagnostics();
57
-
58
- return $tester;
59
- }
60
-
61
- /**
62
- * @return SystemDiagnostics
63
- */
64
- private function getSystemDiagnosticsTester()
65
- {
66
- $tester = new SystemDiagnostics();
67
-
68
- return $tester;
69
- }
70
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/autoload.php DELETED
@@ -1,7 +0,0 @@
1
- <?php
2
-
3
- // autoload.php @generated by Composer
4
-
5
- require_once __DIR__ . '/composer' . '/autoload_real.php';
6
-
7
- return ComposerAutoloaderInit6212b1904c1c4e85b10547bad70ddde1::getLoader();
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/composer/ClassLoader.php DELETED
@@ -1,413 +0,0 @@
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
-
57
- private $classMapAuthoritative = false;
58
-
59
- public function getPrefixes()
60
- {
61
- if (!empty($this->prefixesPsr0)) {
62
- return call_user_func_array('array_merge', $this->prefixesPsr0);
63
- }
64
-
65
- return array();
66
- }
67
-
68
- public function getPrefixesPsr4()
69
- {
70
- return $this->prefixDirsPsr4;
71
- }
72
-
73
- public function getFallbackDirs()
74
- {
75
- return $this->fallbackDirsPsr0;
76
- }
77
-
78
- public function getFallbackDirsPsr4()
79
- {
80
- return $this->fallbackDirsPsr4;
81
- }
82
-
83
- public function getClassMap()
84
- {
85
- return $this->classMap;
86
- }
87
-
88
- /**
89
- * @param array $classMap Class to filename map
90
- */
91
- public function addClassMap(array $classMap)
92
- {
93
- if ($this->classMap) {
94
- $this->classMap = array_merge($this->classMap, $classMap);
95
- } else {
96
- $this->classMap = $classMap;
97
- }
98
- }
99
-
100
- /**
101
- * Registers a set of PSR-0 directories for a given prefix, either
102
- * appending or prepending to the ones previously set for this prefix.
103
- *
104
- * @param string $prefix The prefix
105
- * @param array|string $paths The PSR-0 root directories
106
- * @param bool $prepend Whether to prepend the directories
107
- */
108
- public function add($prefix, $paths, $prepend = false)
109
- {
110
- if (!$prefix) {
111
- if ($prepend) {
112
- $this->fallbackDirsPsr0 = array_merge(
113
- (array) $paths,
114
- $this->fallbackDirsPsr0
115
- );
116
- } else {
117
- $this->fallbackDirsPsr0 = array_merge(
118
- $this->fallbackDirsPsr0,
119
- (array) $paths
120
- );
121
- }
122
-
123
- return;
124
- }
125
-
126
- $first = $prefix[0];
127
- if (!isset($this->prefixesPsr0[$first][$prefix])) {
128
- $this->prefixesPsr0[$first][$prefix] = (array) $paths;
129
-
130
- return;
131
- }
132
- if ($prepend) {
133
- $this->prefixesPsr0[$first][$prefix] = array_merge(
134
- (array) $paths,
135
- $this->prefixesPsr0[$first][$prefix]
136
- );
137
- } else {
138
- $this->prefixesPsr0[$first][$prefix] = array_merge(
139
- $this->prefixesPsr0[$first][$prefix],
140
- (array) $paths
141
- );
142
- }
143
- }
144
-
145
- /**
146
- * Registers a set of PSR-4 directories for a given namespace, either
147
- * appending or prepending to the ones previously set for this namespace.
148
- *
149
- * @param string $prefix The prefix/namespace, with trailing '\\'
150
- * @param array|string $paths The PSR-4 base directories
151
- * @param bool $prepend Whether to prepend the directories
152
- *
153
- * @throws \InvalidArgumentException
154
- */
155
- public function addPsr4($prefix, $paths, $prepend = false)
156
- {
157
- if (!$prefix) {
158
- // Register directories for the root namespace.
159
- if ($prepend) {
160
- $this->fallbackDirsPsr4 = array_merge(
161
- (array) $paths,
162
- $this->fallbackDirsPsr4
163
- );
164
- } else {
165
- $this->fallbackDirsPsr4 = array_merge(
166
- $this->fallbackDirsPsr4,
167
- (array) $paths
168
- );
169
- }
170
- } elseif (!isset($this->prefixDirsPsr4[$prefix])) {
171
- // Register directories for a new namespace.
172
- $length = strlen($prefix);
173
- if ('\\' !== $prefix[$length - 1]) {
174
- throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
175
- }
176
- $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
177
- $this->prefixDirsPsr4[$prefix] = (array) $paths;
178
- } elseif ($prepend) {
179
- // Prepend directories for an already registered namespace.
180
- $this->prefixDirsPsr4[$prefix] = array_merge(
181
- (array) $paths,
182
- $this->prefixDirsPsr4[$prefix]
183
- );
184
- } else {
185
- // Append directories for an already registered namespace.
186
- $this->prefixDirsPsr4[$prefix] = array_merge(
187
- $this->prefixDirsPsr4[$prefix],
188
- (array) $paths
189
- );
190
- }
191
- }
192
-
193
- /**
194
- * Registers a set of PSR-0 directories for a given prefix,
195
- * replacing any others previously set for this prefix.
196
- *
197
- * @param string $prefix The prefix
198
- * @param array|string $paths The PSR-0 base directories
199
- */
200
- public function set($prefix, $paths)
201
- {
202
- if (!$prefix) {
203
- $this->fallbackDirsPsr0 = (array) $paths;
204
- } else {
205
- $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths;
206
- }
207
- }
208
-
209
- /**
210
- * Registers a set of PSR-4 directories for a given namespace,
211
- * replacing any others previously set for this namespace.
212
- *
213
- * @param string $prefix The prefix/namespace, with trailing '\\'
214
- * @param array|string $paths The PSR-4 base directories
215
- *
216
- * @throws \InvalidArgumentException
217
- */
218
- public function setPsr4($prefix, $paths)
219
- {
220
- if (!$prefix) {
221
- $this->fallbackDirsPsr4 = (array) $paths;
222
- } else {
223
- $length = strlen($prefix);
224
- if ('\\' !== $prefix[$length - 1]) {
225
- throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
226
- }
227
- $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
228
- $this->prefixDirsPsr4[$prefix] = (array) $paths;
229
- }
230
- }
231
-
232
- /**
233
- * Turns on searching the include path for class files.
234
- *
235
- * @param bool $useIncludePath
236
- */
237
- public function setUseIncludePath($useIncludePath)
238
- {
239
- $this->useIncludePath = $useIncludePath;
240
- }
241
-
242
- /**
243
- * Can be used to check if the autoloader uses the include path to check
244
- * for classes.
245
- *
246
- * @return bool
247
- */
248
- public function getUseIncludePath()
249
- {
250
- return $this->useIncludePath;
251
- }
252
-
253
- /**
254
- * Turns off searching the prefix and fallback directories for classes
255
- * that have not been registered with the class map.
256
- *
257
- * @param bool $classMapAuthoritative
258
- */
259
- public function setClassMapAuthoritative($classMapAuthoritative)
260
- {
261
- $this->classMapAuthoritative = $classMapAuthoritative;
262
- }
263
-
264
- /**
265
- * Should class lookup fail if not found in the current class map?
266
- *
267
- * @return bool
268
- */
269
- public function isClassMapAuthoritative()
270
- {
271
- return $this->classMapAuthoritative;
272
- }
273
-
274
- /**
275
- * Registers this instance as an autoloader.
276
- *
277
- * @param bool $prepend Whether to prepend the autoloader or not
278
- */
279
- public function register($prepend = false)
280
- {
281
- spl_autoload_register(array($this, 'loadClass'), true, $prepend);
282
- }
283
-
284
- /**
285
- * Unregisters this instance as an autoloader.
286
- */
287
- public function unregister()
288
- {
289
- spl_autoload_unregister(array($this, 'loadClass'));
290
- }
291
-
292
- /**
293
- * Loads the given class or interface.
294
- *
295
- * @param string $class The name of the class
296
- * @return bool|null True if loaded, null otherwise
297
- */
298
- public function loadClass($class)
299
- {
300
- if ($file = $this->findFile($class)) {
301
- includeFile($file);
302
-
303
- return true;
304
- }
305
- }
306
-
307
- /**
308
- * Finds the path to the file where the class is defined.
309
- *
310
- * @param string $class The name of the class
311
- *
312
- * @return string|false The path if found, false otherwise
313
- */
314
- public function findFile($class)
315
- {
316
- // work around for PHP 5.3.0 - 5.3.2 https://bugs.php.net/50731
317
- if ('\\' == $class[0]) {
318
- $class = substr($class, 1);
319
- }
320
-
321
- // class map lookup
322
- if (isset($this->classMap[$class])) {
323
- return $this->classMap[$class];
324
- }
325
- if ($this->classMapAuthoritative) {
326
- return false;
327
- }
328
-
329
- $file = $this->findFileWithExtension($class, '.php');
330
-
331
- // Search for Hack files if we are running on HHVM
332
- if ($file === null && defined('HHVM_VERSION')) {
333
- $file = $this->findFileWithExtension($class, '.hh');
334
- }
335
-
336
- if ($file === null) {
337
- // Remember that this class does not exist.
338
- return $this->classMap[$class] = false;
339
- }
340
-
341
- return $file;
342
- }
343
-
344
- private function findFileWithExtension($class, $ext)
345
- {
346
- // PSR-4 lookup
347
- $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;
348
-
349
- $first = $class[0];
350
- if (isset($this->prefixLengthsPsr4[$first])) {
351
- foreach ($this->prefixLengthsPsr4[$first] as $prefix => $length) {
352
- if (0 === strpos($class, $prefix)) {
353
- foreach ($this->prefixDirsPsr4[$prefix] as $dir) {
354
- if (file_exists($file = $dir . DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $length))) {
355
- return $file;
356
- }
357
- }
358
- }
359
- }
360
- }
361
-
362
- // PSR-4 fallback dirs
363
- foreach ($this->fallbackDirsPsr4 as $dir) {
364
- if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {
365
- return $file;
366
- }
367
- }
368
-
369
- // PSR-0 lookup
370
- if (false !== $pos = strrpos($class, '\\')) {
371
- // namespaced class name
372
- $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)
373
- . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);
374
- } else {
375
- // PEAR-like class name
376
- $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;
377
- }
378
-
379
- if (isset($this->prefixesPsr0[$first])) {
380
- foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {
381
- if (0 === strpos($class, $prefix)) {
382
- foreach ($dirs as $dir) {
383
- if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
384
- return $file;
385
- }
386
- }
387
- }
388
- }
389
- }
390
-
391
- // PSR-0 fallback dirs
392
- foreach ($this->fallbackDirsPsr0 as $dir) {
393
- if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
394
- return $file;
395
- }
396
- }
397
-
398
- // PSR-0 include paths.
399
- if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
400
- return $file;
401
- }
402
- }
403
- }
404
-
405
- /**
406
- * Scope isolated include.
407
- *
408
- * Prevents access to $this/self from included files.
409
- */
410
- function includeFile($file)
411
- {
412
- include $file;
413
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/composer/LICENSE DELETED
@@ -1,433 +0,0 @@
1
- Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
2
- Upstream-Name: Composer
3
- Upstream-Contact: Jordi Boggiano <j.boggiano@seld.be>
4
- Source: https://github.com/composer/composer
5
-
6
- Files: *
7
- Copyright: 2016, Nils Adermann <naderman@naderman.de>
8
- 2016, Jordi Boggiano <j.boggiano@seld.be>
9
- License: Expat
10
-
11
- Files: res/cacert.pem
12
- Copyright: 2015, Mozilla Foundation
13
- License: MPL-2.0
14
-
15
- Files: src/Composer/Util/RemoteFilesystem.php
16
- src/Composer/Util/TlsHelper.php
17
- Copyright: 2016, Nils Adermann <naderman@naderman.de>
18
- 2016, Jordi Boggiano <j.boggiano@seld.be>
19
- 2013, Evan Coury <me@evancoury.com>
20
- License: Expat and BSD-2-Clause
21
-
22
- License: BSD-2-Clause
23
- Redistribution and use in source and binary forms, with or without modification,
24
- are permitted provided that the following conditions are met:
25
- .
26
- * Redistributions of source code must retain the above copyright notice,
27
- this list of conditions and the following disclaimer.
28
- .
29
- * Redistributions in binary form must reproduce the above copyright notice,
30
- this list of conditions and the following disclaimer in the documentation
31
- and/or other materials provided with the distribution.
32
- .
33
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
34
- ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
35
- WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
36
- DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
37
- ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
38
- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
39
- LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
40
- ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
41
- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
42
- SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
43
-
44
- License: Expat
45
- Permission is hereby granted, free of charge, to any person obtaining a copy
46
- of this software and associated documentation files (the "Software"), to deal
47
- in the Software without restriction, including without limitation the rights
48
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
49
- copies of the Software, and to permit persons to whom the Software is furnished
50
- to do so, subject to the following conditions:
51
- .
52
- The above copyright notice and this permission notice shall be included in all
53
- copies or substantial portions of the Software.
54
- .
55
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
56
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
57
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
58
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
59
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
60
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
61
- THE SOFTWARE.
62
-
63
- License: MPL-2.0
64
- 1. Definitions
65
- --------------
66
- .
67
- 1.1. "Contributor"
68
- means each individual or legal entity that creates, contributes to
69
- the creation of, or owns Covered Software.
70
- .
71
- 1.2. "Contributor Version"
72
- means the combination of the Contributions of others (if any) used
73
- by a Contributor and that particular Contributor's Contribution.
74
- .
75
- 1.3. "Contribution"
76
- means Covered Software of a particular Contributor.
77
- .
78
- 1.4. "Covered Software"
79
- means Source Code Form to which the initial Contributor has attached
80
- the notice in Exhibit A, the Executable Form of such Source Code
81
- Form, and Modifications of such Source Code Form, in each case
82
- including portions thereof.
83
- .
84
- 1.5. "Incompatible With Secondary Licenses"
85
- means
86
- .
87
- (a) that the initial Contributor has attached the notice described
88
- in Exhibit B to the Covered Software; or
89
- .
90
- (b) that the Covered Software was made available under the terms of
91
- version 1.1 or earlier of the License, but not also under the
92
- terms of a Secondary License.
93
- .
94
- 1.6. "Executable Form"
95
- means any form of the work other than Source Code Form.
96
- .
97
- 1.7. "Larger Work"
98
- means a work that combines Covered Software with other material, in
99
- a separate file or files, that is not Covered Software.
100
- .
101
- 1.8. "License"
102
- means this document.
103
- .
104
- 1.9. "Licensable"
105
- means having the right to grant, to the maximum extent possible,
106
- whether at the time of the initial grant or subsequently, any and
107
- all of the rights conveyed by this License.
108
- .
109
- 1.10. "Modifications"
110
- means any of the following:
111
- .
112
- (a) any file in Source Code Form that results from an addition to,
113
- deletion from, or modification of the contents of Covered
114
- Software; or
115
- .
116
- (b) any new file in Source Code Form that contains any Covered
117
- Software.
118
- .
119
- 1.11. "Patent Claims" of a Contributor
120
- means any patent claim(s), including without limitation, method,
121
- process, and apparatus claims, in any patent Licensable by such
122
- Contributor that would be infringed, but for the grant of the
123
- License, by the making, using, selling, offering for sale, having
124
- made, import, or transfer of either its Contributions or its
125
- Contributor Version.
126
- .
127
- 1.12. "Secondary License"
128
- means either the GNU General Public License, Version 2.0, the GNU
129
- Lesser General Public License, Version 2.1, the GNU Affero General
130
- Public License, Version 3.0, or any later versions of those
131
- licenses.
132
- .
133
- 1.13. "Source Code Form"
134
- means the form of the work preferred for making modifications.
135
- .
136
- 1.14. "You" (or "Your")
137
- means an individual or a legal entity exercising rights under this
138
- License. For legal entities, "You" includes any entity that
139
- controls, is controlled by, or is under common control with You. For
140
- purposes of this definition, "control" means (a) the power, direct
141
- or indirect, to cause the direction or management of such entity,
142
- whether by contract or otherwise, or (b) ownership of more than
143
- fifty percent (50%) of the outstanding shares or beneficial
144
- ownership of such entity.
145
- .
146
- 2. License Grants and Conditions
147
- --------------------------------
148
- .
149
- 2.1. Grants
150
- .
151
- Each Contributor hereby grants You a world-wide, royalty-free,
152
- non-exclusive license:
153
- .
154
- (a) under intellectual property rights (other than patent or trademark)
155
- Licensable by such Contributor to use, reproduce, make available,
156
- modify, display, perform, distribute, and otherwise exploit its
157
- Contributions, either on an unmodified basis, with Modifications, or
158
- as part of a Larger Work; and
159
- .
160
- (b) under Patent Claims of such Contributor to make, use, sell, offer
161
- for sale, have made, import, and otherwise transfer either its
162
- Contributions or its Contributor Version.
163
- .
164
- 2.2. Effective Date
165
- .
166
- The licenses granted in Section 2.1 with respect to any Contribution
167
- become effective for each Contribution on the date the Contributor first
168
- distributes such Contribution.
169
- .
170
- 2.3. Limitations on Grant Scope
171
- .
172
- The licenses granted in this Section 2 are the only rights granted under
173
- this License. No additional rights or licenses will be implied from the
174
- distribution or licensing of Covered Software under this License.
175
- Notwithstanding Section 2.1(b) above, no patent license is granted by a
176
- Contributor:
177
- .
178
- (a) for any code that a Contributor has removed from Covered Software;
179
- or
180
- .
181
- (b) for infringements caused by: (i) Your and any other third party's
182
- modifications of Covered Software, or (ii) the combination of its
183
- Contributions with other software (except as part of its Contributor
184
- Version); or
185
- .
186
- (c) under Patent Claims infringed by Covered Software in the absence of
187
- its Contributions.
188
- .
189
- This License does not grant any rights in the trademarks, service marks,
190
- or logos of any Contributor (except as may be necessary to comply with
191
- the notice requirements in Section 3.4).
192
- .
193
- 2.4. Subsequent Licenses
194
- .
195
- No Contributor makes additional grants as a result of Your choice to
196
- distribute the Covered Software under a subsequent version of this
197
- License (see Section 10.2) or under the terms of a Secondary License (if
198
- permitted under the terms of Section 3.3).
199
- .
200
- 2.5. Representation
201
- .
202
- Each Contributor represents that the Contributor believes its
203
- Contributions are its original creation(s) or it has sufficient rights
204
- to grant the rights to its Contributions conveyed by this License.
205
- .
206
- 2.6. Fair Use
207
- .
208
- This License is not intended to limit any rights You have under
209
- applicable copyright doctrines of fair use, fair dealing, or other
210
- equivalents.
211
- .
212
- 2.7. Conditions
213
- .
214
- Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted
215
- in Section 2.1.
216
- .
217
- 3. Responsibilities
218
- -------------------
219
- .
220
- 3.1. Distribution of Source Form
221
- .
222
- All distribution of Covered Software in Source Code Form, including any
223
- Modifications that You create or to which You contribute, must be under
224
- the terms of this License. You must inform recipients that the Source
225
- Code Form of the Covered Software is governed by the terms of this
226
- License, and how they can obtain a copy of this License. You may not
227
- attempt to alter or restrict the recipients' rights in the Source Code
228
- Form.
229
- .
230
- 3.2. Distribution of Executable Form
231
- .
232
- If You distribute Covered Software in Executable Form then:
233
- .
234
- (a) such Covered Software must also be made available in Source Code
235
- Form, as described in Section 3.1, and You must inform recipients of
236
- the Executable Form how they can obtain a copy of such Source Code
237
- Form by reasonable means in a timely manner, at a charge no more
238
- than the cost of distribution to the recipient; and
239
- .
240
- (b) You may distribute such Executable Form under the terms of this
241
- License, or sublicense it under different terms, provided that the
242
- license for the Executable Form does not attempt to limit or alter
243
- the recipients' rights in the Source Code Form under this License.
244
- .
245
- 3.3. Distribution of a Larger Work
246
- .
247
- You may create and distribute a Larger Work under terms of Your choice,
248
- provided that You also comply with the requirements of this License for
249
- the Covered Software. If the Larger Work is a combination of Covered
250
- Software with a work governed by one or more Secondary Licenses, and the
251
- Covered Software is not Incompatible With Secondary Licenses, this
252
- License permits You to additionally distribute such Covered Software
253
- under the terms of such Secondary License(s), so that the recipient of
254
- the Larger Work may, at their option, further distribute the Covered
255
- Software under the terms of either this License or such Secondary
256
- License(s).
257
- .
258
- 3.4. Notices
259
- .
260
- You may not remove or alter the substance of any license notices
261
- (including copyright notices, patent notices, disclaimers of warranty,
262
- or limitations of liability) contained within the Source Code Form of
263
- the Covered Software, except that You may alter any license notices to
264
- the extent required to remedy known factual inaccuracies.
265
- .
266
- 3.5. Application of Additional Terms
267
- .
268
- You may choose to offer, and to charge a fee for, warranty, support,
269
- indemnity or liability obligations to one or more recipients of Covered
270
- Software. However, You may do so only on Your own behalf, and not on
271
- behalf of any Contributor. You must make it absolutely clear that any
272
- such warranty, support, indemnity, or liability obligation is offered by
273
- You alone, and You hereby agree to indemnify every Contributor for any
274
- liability incurred by such Contributor as a result of warranty, support,
275
- indemnity or liability terms You offer. You may include additional
276
- disclaimers of warranty and limitations of liability specific to any
277
- jurisdiction.
278
- .
279
- 4. Inability to Comply Due to Statute or Regulation
280
- ---------------------------------------------------
281
- .
282
- If it is impossible for You to comply with any of the terms of this
283
- License with respect to some or all of the Covered Software due to
284
- statute, judicial order, or regulation then You must: (a) comply with
285
- the terms of this License to the maximum extent possible; and (b)
286
- describe the limitations and the code they affect. Such description must
287
- be placed in a text file included with all distributions of the Covered
288
- Software under this License. Except to the extent prohibited by statute
289
- or regulation, such description must be sufficiently detailed for a
290
- recipient of ordinary skill to be able to understand it.
291
- .
292
- 5. Termination
293
- --------------
294
- .
295
- 5.1. The rights granted under this License will terminate automatically
296
- if You fail to comply with any of its terms. However, if You become
297
- compliant, then the rights granted under this License from a particular
298
- Contributor are reinstated (a) provisionally, unless and until such
299
- Contributor explicitly and finally terminates Your grants, and (b) on an
300
- ongoing basis, if such Contributor fails to notify You of the
301
- non-compliance by some reasonable means prior to 60 days after You have
302
- come back into compliance. Moreover, Your grants from a particular
303
- Contributor are reinstated on an ongoing basis if such Contributor
304
- notifies You of the non-compliance by some reasonable means, this is the
305
- first time You have received notice of non-compliance with this License
306
- from such Contributor, and You become compliant prior to 30 days after
307
- Your receipt of the notice.
308
- .
309
- 5.2. If You initiate litigation against any entity by asserting a patent
310
- infringement claim (excluding declaratory judgment actions,
311
- counter-claims, and cross-claims) alleging that a Contributor Version
312
- directly or indirectly infringes any patent, then the rights granted to
313
- You by any and all Contributors for the Covered Software under Section
314
- 2.1 of this License shall terminate.
315
- .
316
- 5.3. In the event of termination under Sections 5.1 or 5.2 above, all
317
- end user license agreements (excluding distributors and resellers) which
318
- have been validly granted by You or Your distributors under this License
319
- prior to termination shall survive termination.
320
- .
321
- ************************************************************************
322
- * *
323
- * 6. Disclaimer of Warranty *
324
- * ------------------------- *
325
- * *
326
- * Covered Software is provided under this License on an "as is" *
327
- * basis, without warranty of any kind, either expressed, implied, or *
328
- * statutory, including, without limitation, warranties that the *
329
- * Covered Software is free of defects, merchantable, fit for a *
330
- * particular purpose or non-infringing. The entire risk as to the *
331
- * quality and performance of the Covered Software is with You. *
332
- * Should any Covered Software prove defective in any respect, You *
333
- * (not any Contributor) assume the cost of any necessary servicing, *
334
- * repair, or correction. This disclaimer of warranty constitutes an *
335
- * essential part of this License. No use of any Covered Software is *
336
- * authorized under this License except under this disclaimer. *
337
- * *
338
- ************************************************************************
339
- .
340
- ************************************************************************
341
- * *
342
- * 7. Limitation of Liability *
343
- * -------------------------- *
344
- * *
345
- * Under no circumstances and under no legal theory, whether tort *
346
- * (including negligence), contract, or otherwise, shall any *
347
- * Contributor, or anyone who distributes Covered Software as *
348
- * permitted above, be liable to You for any direct, indirect, *
349
- * special, incidental, or consequential damages of any character *
350
- * including, without limitation, damages for lost profits, loss of *
351
- * goodwill, work stoppage, computer failure or malfunction, or any *
352
- * and all other commercial damages or losses, even if such party *
353
- * shall have been informed of the possibility of such damages. This *
354
- * limitation of liability shall not apply to liability for death or *
355
- * personal injury resulting from such party's negligence to the *
356
- * extent applicable law prohibits such limitation. Some *
357
- * jurisdictions do not allow the exclusion or limitation of *
358
- * incidental or consequential damages, so this exclusion and *
359
- * limitation may not apply to You. *
360
- * *
361
- ************************************************************************
362
- .
363
- 8. Litigation
364
- -------------
365
- .
366
- Any litigation relating to this License may be brought only in the
367
- courts of a jurisdiction where the defendant maintains its principal
368
- place of business and such litigation shall be governed by laws of that
369
- jurisdiction, without reference to its conflict-of-law provisions.
370
- Nothing in this Section shall prevent a party's ability to bring
371
- cross-claims or counter-claims.
372
- .
373
- 9. Miscellaneous
374
- ----------------
375
- .
376
- This License represents the complete agreement concerning the subject
377
- matter hereof. If any provision of this License is held to be
378
- unenforceable, such provision shall be reformed only to the extent
379
- necessary to make it enforceable. Any law or regulation which provides
380
- that the language of a contract shall be construed against the drafter
381
- shall not be used to construe this License against a Contributor.
382
- .
383
- 10. Versions of the License
384
- ---------------------------
385
- .
386
- 10.1. New Versions
387
- .
388
- Mozilla Foundation is the license steward. Except as provided in Section
389
- 10.3, no one other than the license steward has the right to modify or
390
- publish new versions of this License. Each version will be given a
391
- distinguishing version number.
392
- .
393
- 10.2. Effect of New Versions
394
- .
395
- You may distribute the Covered Software under the terms of the version
396
- of the License under which You originally received the Covered Software,
397
- or under the terms of any subsequent version published by the license
398
- steward.
399
- .
400
- 10.3. Modified Versions
401
- .
402
- If you create software not governed by this License, and you want to
403
- create a new license for such software, you may create and use a
404
- modified version of this License if you rename the license and remove
405
- any references to the name of the license steward (except to note that
406
- such modified license differs from this License).
407
- .
408
- 10.4. Distributing Source Code Form that is Incompatible With Secondary
409
- Licenses
410
- .
411
- If You choose to distribute Source Code Form that is Incompatible With
412
- Secondary Licenses under the terms of this version of the License, the
413
- notice described in Exhibit B of this License must be attached.
414
- .
415
- Exhibit A - Source Code Form License Notice
416
- -------------------------------------------
417
- .
418
- This Source Code Form is subject to the terms of the Mozilla Public
419
- License, v. 2.0. If a copy of the MPL was not distributed with this
420
- file, You can obtain one at http://mozilla.org/MPL/2.0/.
421
- .
422
- If it is not possible or desirable to put the notice in a particular
423
- file, then You may include the notice in a location (such as a LICENSE
424
- file in a relevant directory) where a recipient would be likely to look
425
- for such a notice.
426
- .
427
- You may add additional accurate notices of copyright ownership.
428
- .
429
- Exhibit B - "Incompatible With Secondary Licenses" Notice
430
- ---------------------------------------------------------
431
- .
432
- This Source Code Form is "Incompatible With Secondary Licenses", as
433
- defined by the Mozilla Public License, v. 2.0.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/composer/autoload_classmap.php DELETED
@@ -1,9 +0,0 @@
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
- );
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/composer/autoload_namespaces.php DELETED
@@ -1,11 +0,0 @@
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
- 'MaxMind' => array($vendorDir . '/maxmind-db/reader/src'),
10
- 'Buzz' => array($vendorDir . '/kriswallsmith/buzz/lib'),
11
- );
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/composer/autoload_psr4.php DELETED
@@ -1,12 +0,0 @@
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\\' => array($vendorDir . '/maxmind/web-service-common/src'),
10
- 'GeoIp2\\' => array($vendorDir . '/geoip2/geoip2/src'),
11
- 'Composer\\CaBundle\\' => array($vendorDir . '/composer/ca-bundle/src'),
12
- );
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/composer/autoload_real.php DELETED
@@ -1,45 +0,0 @@
1
- <?php
2
-
3
- // autoload_real.php @generated by Composer
4
-
5
- class ComposerAutoloaderInit6212b1904c1c4e85b10547bad70ddde1
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('ComposerAutoloaderInit6212b1904c1c4e85b10547bad70ddde1', 'loadClassLoader'), true, true);
23
- self::$loader = $loader = new \Composer\Autoload\ClassLoader();
24
- spl_autoload_unregister(array('ComposerAutoloaderInit6212b1904c1c4e85b10547bad70ddde1', 'loadClassLoader'));
25
-
26
- $map = require __DIR__ . '/autoload_namespaces.php';
27
- foreach ($map as $namespace => $path) {
28
- $loader->set($namespace, $path);
29
- }
30
-
31
- $map = require __DIR__ . '/autoload_psr4.php';
32
- foreach ($map as $namespace => $path) {
33
- $loader->setPsr4($namespace, $path);
34
- }
35
-
36
- $classMap = require __DIR__ . '/autoload_classmap.php';
37
- if ($classMap) {
38
- $loader->addClassMap($classMap);
39
- }
40
-
41
- $loader->register(true);
42
-
43
- return $loader;
44
- }
45
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/composer/ca-bundle/LICENSE DELETED
@@ -1,19 +0,0 @@
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.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/composer/ca-bundle/README.md DELETED
@@ -1,70 +0,0 @@
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
- curl_setopt($curl, CURLOPT_CAINFO, \Composer\CaBundle\CaBundle::getSystemCaRootBundlePath());
44
- $result = curl_exec($curl);
45
- ```
46
-
47
- ## To use with php streams
48
-
49
- ```php
50
- $opts = array(
51
- 'http' => array(
52
- 'method' => "GET"
53
- )
54
- );
55
-
56
- $caPath = \Composer\CaBundle\CaBundle::getSystemCaRootBundlePath();
57
- if (is_dir($caPath)) {
58
- $opts['ssl']['capath'] = $caPath;
59
- } else {
60
- $opts['ssl']['cafile'] = $caPath;
61
- }
62
-
63
- $context = stream_context_create($opts);
64
- $result = file_get_contents('https://example.com', false, $context);
65
- ```
66
-
67
- License
68
- -------
69
-
70
- composer/ca-bundle is licensed under the MIT License, see the LICENSE file for details.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/composer/ca-bundle/composer.json DELETED
@@ -1,51 +0,0 @@
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
- "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
- "autoload": {
37
- "psr-4": {
38
- "Composer\\CaBundle\\": "src"
39
- }
40
- },
41
- "autoload-dev": {
42
- "psr-4": {
43
- "Composer\\CaBundle\\": "tests"
44
- }
45
- },
46
- "extra": {
47
- "branch-alias": {
48
- "dev-master": "1.x-dev"
49
- }
50
- }
51
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/composer/ca-bundle/res/cacert.pem DELETED
@@ -1,3884 +0,0 @@
1
- ##
2
- ## Bundle of CA Root Certificates
3
- ##
4
- ## Certificate data from Mozilla as of: Wed Apr 20 03:12:05 2016
5
- ##
6
- ## This is a bundle of X.509 certificates of public Certificate Authorities
7
- ## (CA). These were automatically extracted from Mozilla's root certificates
8
- ## file (certdata.txt). This file can be found in the mozilla source tree:
9
- ## http://hg.mozilla.org/releases/mozilla-release/raw-file/default/security/nss/lib/ckfw/builtins/certdata.txt
10
- ##
11
- ## It contains the certificates in PEM format and therefore
12
- ## can be directly used with curl / libcurl / php_curl, or with
13
- ## an Apache+mod_ssl webserver for SSL client authentication.
14
- ## Just configure this file as the SSLCACertificateFile.
15
- ##
16
- ## Conversion done with mk-ca-bundle.pl version 1.25.
17
- ## SHA1: 5df367cda83086392e1acdf22bfef00c48d5eba6
18
- ##
19
-
20
- Equifax Secure CA
21
- =================
22
- -----BEGIN CERTIFICATE-----
23
- MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJVUzEQMA4GA1UE
24
- ChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5
25
- MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoT
26
- B0VxdWlmYXgxLTArBgNVBAsTJEVxdWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTCB
27
- nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2RFGiYCh7+2gRvE4RiIcPR
28
- fM6fBeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP/PvwDN1Dulsr4R+AcJkVV5MW
29
- 8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/FP3gx7kCAwEAAaOCAQkwggEFMHAG
30
- A1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UE
31
- CxMkRXF1aWZheCBTZWN1cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoG
32
- A1UdEAQTMBGBDzIwMTgwODIyMTY0MTUxWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvS
33
- spXXR9gjIBBPM5iQn9QwHQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQFMAMB
34
- Af8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUAA4GBAFjOKer89961
35
- zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y7qj/WsjTVbJmcVfewCHrPSqnI0kB
36
- BIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee95
37
- 70+sB3c4
38
- -----END CERTIFICATE-----
39
-
40
- GlobalSign Root CA
41
- ==================
42
- -----BEGIN CERTIFICATE-----
43
- MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkGA1UEBhMCQkUx
44
- GTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jvb3QgQ0ExGzAZBgNVBAMTEkds
45
- b2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAwMDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNV
46
- BAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYD
47
- VQQDExJHbG9iYWxTaWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDa
48
- DuaZjc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavpxy0Sy6sc
49
- THAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp1Wrjsok6Vjk4bwY8iGlb
50
- Kk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdGsnUOhugZitVtbNV4FpWi6cgKOOvyJBNP
51
- c1STE4U6G7weNLWLBYy5d4ux2x8gkasJU26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrX
52
- gzT/LCrBbBlDSgeF59N89iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV
53
- HRMBAf8EBTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0BAQUF
54
- AAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOzyj1hTdNGCbM+w6Dj
55
- Y1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE38NflNUVyRRBnMRddWQVDf9VMOyG
56
- j/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymPAbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhH
57
- hm4qxFYxldBniYUr+WymXUadDKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveC
58
- X4XSQRjbgbMEHMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A==
59
- -----END CERTIFICATE-----
60
-
61
- GlobalSign Root CA - R2
62
- =======================
63
- -----BEGIN CERTIFICATE-----
64
- MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4GA1UECxMXR2xv
65
- YmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh
66
- bFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT
67
- aWduIFJvb3QgQ0EgLSBSMjETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln
68
- bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6
69
- ErPLv4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8eoLrvozp
70
- s6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklqtTleiDTsvHgMCJiEbKjN
71
- S7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzdC9XZzPnqJworc5HGnRusyMvo4KD0L5CL
72
- TfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pazq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6C
73
- ygPCm48CAwEAAaOBnDCBmTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E
74
- FgQUm+IHV2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5nbG9i
75
- YWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG3lm0mi3f3BmGLjAN
76
- BgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4GsJ0/WwbgcQ3izDJr86iw8bmEbTUsp
77
- 9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu
78
- 01yiPqFbQfXf5WRDLenVOavSot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG7
79
- 9G+dwfCMNYxdAfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7
80
- TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg==
81
- -----END CERTIFICATE-----
82
-
83
- Verisign Class 3 Public Primary Certification Authority - G3
84
- ============================================================
85
- -----BEGIN CERTIFICATE-----
86
- MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV
87
- UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv
88
- cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
89
- IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh
90
- dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw
91
- CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy
92
- dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv
93
- cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkg
94
- Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
95
- ggEBAMu6nFL8eB8aHm8bN3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1
96
- EUGO+i2tKmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGukxUc
97
- cLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBmCC+Vk7+qRy+oRpfw
98
- EuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJXwzw3sJ2zq/3avL6QaaiMxTJ5Xpj
99
- 055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWuimi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA
100
- ERSWwauSCPc/L8my/uRan2Te2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5f
101
- j267Cz3qWhMeDGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC
102
- /Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565pF4ErWjfJXir0
103
- xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGtTxzhT5yvDwyd93gN2PQ1VoDa
104
- t20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ==
105
- -----END CERTIFICATE-----
106
-
107
- Entrust.net Premium 2048 Secure Server CA
108
- =========================================
109
- -----BEGIN CERTIFICATE-----
110
- MIIEKjCCAxKgAwIBAgIEOGPe+DANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChMLRW50cnVzdC5u
111
- ZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBpbmNvcnAuIGJ5IHJlZi4gKGxp
112
- bWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNV
113
- BAMTKkVudHJ1c3QubmV0IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQx
114
- NzUwNTFaFw0yOTA3MjQxNDE1MTJaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3
115
- d3d3LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTEl
116
- MCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5u
117
- ZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgpMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
118
- MIIBCgKCAQEArU1LqRKGsuqjIAcVFmQqK0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOL
119
- Gp18EzoOH1u3Hs/lJBQesYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSr
120
- hRSGlVuXMlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVTXTzW
121
- nLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/HoZdenoVve8AjhUi
122
- VBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH4QIDAQABo0IwQDAOBgNVHQ8BAf8E
123
- BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUVeSB0RGAvtiJuQijMfmhJAkWuXAwDQYJ
124
- KoZIhvcNAQEFBQADggEBADubj1abMOdTmXx6eadNl9cZlZD7Bh/KM3xGY4+WZiT6QBshJ8rmcnPy
125
- T/4xmf3IDExoU8aAghOY+rat2l098c5u9hURlIIM7j+VrxGrD9cv3h8Dj1csHsm7mhpElesYT6Yf
126
- zX1XEC+bBAlahLVu2B064dae0Wx5XnkcFMXj0EyTO2U87d89vqbllRrDtRnDvV5bu/8j72gZyxKT
127
- J1wDLW8w0B62GqzeWvfRqqgnpv55gcR5mTNXuhKwqeBCbJPKVt7+bYQLCIt+jerXmCHG8+c8eS9e
128
- nNFMFY3h7CI3zJpDC5fcgJCNs2ebb0gIFVbPv/ErfF6adulZkMV8gzURZVE=
129
- -----END CERTIFICATE-----
130
-
131
- Baltimore CyberTrust Root
132
- =========================
133
- -----BEGIN CERTIFICATE-----
134
- MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJRTESMBAGA1UE
135
- ChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYDVQQDExlCYWx0aW1vcmUgQ3li
136
- ZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoXDTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMC
137
- SUUxEjAQBgNVBAoTCUJhbHRpbW9yZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFs
138
- dGltb3JlIEN5YmVyVHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKME
139
- uyKrmD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjrIZ3AQSsB
140
- UnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeKmpYcqWe4PwzV9/lSEy/C
141
- G9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSuXmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9
142
- XbIGevOF6uvUA65ehD5f/xXtabz5OTZydc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjpr
143
- l3RjM71oGDHweI12v/yejl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoI
144
- VDaGezq1BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEB
145
- BQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT929hkTI7gQCvlYpNRh
146
- cL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3WgxjkzSswF07r51XgdIGn9w/xZchMB5
147
- hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsa
148
- Y71k5h+3zvDyny67G7fyUIhzksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9H
149
- RCwBXbsdtTLSR9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp
150
- -----END CERTIFICATE-----
151
-
152
- AddTrust Low-Value Services Root
153
- ================================
154
- -----BEGIN CERTIFICATE-----
155
- MIIEGDCCAwCgAwIBAgIBATANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
156
- QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYDVQQDExhBZGRU
157
- cnVzdCBDbGFzcyAxIENBIFJvb3QwHhcNMDAwNTMwMTAzODMxWhcNMjAwNTMwMTAzODMxWjBlMQsw
158
- CQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBO
159
- ZXR3b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwggEiMA0GCSqGSIb3DQEB
160
- AQUAA4IBDwAwggEKAoIBAQCWltQhSWDia+hBBwzexODcEyPNwTXH+9ZOEQpnXvUGW2ulCDtbKRY6
161
- 54eyNAbFvAWlA3yCyykQruGIgb3WntP+LVbBFc7jJp0VLhD7Bo8wBN6ntGO0/7Gcrjyvd7ZWxbWr
162
- oulpOj0OM3kyP3CCkplhbY0wCI9xP6ZIVxn4JdxLZlyldI+Yrsj5wAYi56xz36Uu+1LcsRVlIPo1
163
- Zmne3yzxbrww2ywkEtvrNTVokMsAsJchPXQhI2U0K7t4WaPW4XY5mqRJjox0r26kmqPZm9I4XJui
164
- GMx1I4S+6+JNM3GOGvDC+Mcdoq0Dlyz4zyXG9rgkMbFjXZJ/Y/AlyVMuH79NAgMBAAGjgdIwgc8w
165
- HQYDVR0OBBYEFJWxtPCUtr3H2tERCSG+wa9J/RB7MAsGA1UdDwQEAwIBBjAPBgNVHRMBAf8EBTAD
166
- AQH/MIGPBgNVHSMEgYcwgYSAFJWxtPCUtr3H2tERCSG+wa9J/RB7oWmkZzBlMQswCQYDVQQGEwJT
167
- RTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEw
168
- HwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBACxt
169
- ZBsfzQ3duQH6lmM0MkhHma6X7f1yFqZzR1r0693p9db7RcwpiURdv0Y5PejuvE1Uhh4dbOMXJ0Ph
170
- iVYrqW9yTkkz43J8KiOavD7/KCrto/8cI7pDVwlnTUtiBi34/2ydYB7YHEt9tTEv2dB8Xfjea4MY
171
- eDdXL+gzB2ffHsdrKpV2ro9Xo/D0UrSpUwjP4E/TelOL/bscVjby/rK25Xa71SJlpz/+0WatC7xr
172
- mYbvP33zGDLKe8bjq2RGlfgmadlVg3sslgf/WSxEo8bl6ancoWOAWiFeIc9TVPC6b4nbqKqVz4vj
173
- ccweGyBECMB6tkD9xOQ14R0WHNC8K47Wcdk=
174
- -----END CERTIFICATE-----
175
-
176
- AddTrust External Root
177
- ======================
178
- -----BEGIN CERTIFICATE-----
179
- MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
180
- QWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFsIFRUUCBOZXR3b3JrMSIwIAYD
181
- VQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEw
182
- NDgzOFowbzELMAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRU
183
- cnVzdCBFeHRlcm5hbCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0Eg
184
- Um9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvtH7xsD821
185
- +iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9uMq/NzgtHj6RQa1wVsfw
186
- Tz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzXmk6vBbOmcZSccbNQYArHE504B4YCqOmo
187
- aSYYkKtMsE8jqzpPhNjfzp/haW+710LXa0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy
188
- 2xSoRcRdKn23tNbE7qzNE0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv7
189
- 7+ldU9U0WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYDVR0P
190
- BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0Jvf6xCZU7wO94CTL
191
- VBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEmMCQGA1UECxMdQWRk
192
- VHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsxIjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENB
193
- IFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZl
194
- j7DYd7usQWxHYINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5
195
- 6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvCNr4TDea9Y355
196
- e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEXc4g/VhsxOBi0cQ+azcgOno4u
197
- G+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5amnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ=
198
- -----END CERTIFICATE-----
199
-
200
- AddTrust Public Services Root
201
- =============================
202
- -----BEGIN CERTIFICATE-----
203
- MIIEFTCCAv2gAwIBAgIBATANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
204
- QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSAwHgYDVQQDExdBZGRU
205
- cnVzdCBQdWJsaWMgQ0EgUm9vdDAeFw0wMDA1MzAxMDQxNTBaFw0yMDA1MzAxMDQxNTBaMGQxCzAJ
206
- BgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5l
207
- dHdvcmsxIDAeBgNVBAMTF0FkZFRydXN0IFB1YmxpYyBDQSBSb290MIIBIjANBgkqhkiG9w0BAQEF
208
- AAOCAQ8AMIIBCgKCAQEA6Rowj4OIFMEg2Dybjxt+A3S72mnTRqX4jsIMEZBRpS9mVEBV6tsfSlbu
209
- nyNu9DnLoblv8n75XYcmYZ4c+OLspoH4IcUkzBEMP9smcnrHAZcHF/nXGCwwfQ56HmIexkvA/X1i
210
- d9NEHif2P0tEs7c42TkfYNVRknMDtABp4/MUTu7R3AnPdzRGULD4EfL+OHn3Bzn+UZKXC1sIXzSG
211
- Aa2Il+tmzV7R/9x98oTaunet3IAIx6eH1lWfl2royBFkuucZKT8Rs3iQhCBSWxHveNCD9tVIkNAw
212
- HM+A+WD+eeSI8t0A65RF62WUaUC6wNW0uLp9BBGo6zEFlpROWCGOn9Bg/QIDAQABo4HRMIHOMB0G
213
- A1UdDgQWBBSBPjfYkrAfd59ctKtzquf2NGAv+jALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB
214
- /zCBjgYDVR0jBIGGMIGDgBSBPjfYkrAfd59ctKtzquf2NGAv+qFopGYwZDELMAkGA1UEBhMCU0Ux
215
- FDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRUcnVzdCBUVFAgTmV0d29yazEgMB4G
216
- A1UEAxMXQWRkVHJ1c3QgUHVibGljIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBAAP3FUr4
217
- JNojVhaTdt02KLmuG7jD8WS6IBh4lSknVwW8fCr0uVFV2ocC3g8WFzH4qnkuCRO7r7IgGRLlk/lL
218
- +YPoRNWyQSW/iHVv/xD8SlTQX/D67zZzfRs2RcYhbbQVuE7PnFylPVoAjgbjPGsye/Kf8Lb93/Ao
219
- GEjwxrzQvzSAlsJKsW2Ox5BF3i9nrEUEo3rcVZLJR2bYGozH7ZxOmuASu7VqTITh4SINhwBk/ox9
220
- Yjllpu9CtoAlEmEBqCQTcAARJl/6NVDFSMwGR+gn2HCNX2TmoUQmXiLsks3/QppEIW1cxeMiHV9H
221
- EufOX1362KqxMy3ZdvJOOjMMK7MtkAY=
222
- -----END CERTIFICATE-----
223
-
224
- AddTrust Qualified Certificates Root
225
- ====================================
226
- -----BEGIN CERTIFICATE-----
227
- MIIEHjCCAwagAwIBAgIBATANBgkqhkiG9w0BAQUFADBnMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
228
- QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSMwIQYDVQQDExpBZGRU
229
- cnVzdCBRdWFsaWZpZWQgQ0EgUm9vdDAeFw0wMDA1MzAxMDQ0NTBaFw0yMDA1MzAxMDQ0NTBaMGcx
230
- CzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQ
231
- IE5ldHdvcmsxIzAhBgNVBAMTGkFkZFRydXN0IFF1YWxpZmllZCBDQSBSb290MIIBIjANBgkqhkiG
232
- 9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5B6a/twJWoekn0e+EV+vhDTbYjx5eLfpMLXsDBwqxBb/4Oxx
233
- 64r1EW7tTw2R0hIYLUkVAcKkIhPHEWT/IhKauY5cLwjPcWqzZwFZ8V1G87B4pfYOQnrjfxvM0PC3
234
- KP0q6p6zsLkEqv32x7SxuCqg+1jxGaBvcCV+PmlKfw8i2O+tCBGaKZnhqkRFmhJePp1tUvznoD1o
235
- L/BLcHwTOK28FSXx1s6rosAx1i+f4P8UWfyEk9mHfExUE+uf0S0R+Bg6Ot4l2ffTQO2kBhLEO+GR
236
- wVY18BTcZTYJbqukB8c10cIDMzZbdSZtQvESa0NvS3GU+jQd7RNuyoB/mC9suWXY6QIDAQABo4HU
237
- MIHRMB0GA1UdDgQWBBQ5lYtii1zJ1IC6WA+XPxUIQ8yYpzALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/
238
- BAUwAwEB/zCBkQYDVR0jBIGJMIGGgBQ5lYtii1zJ1IC6WA+XPxUIQ8yYp6FrpGkwZzELMAkGA1UE
239
- BhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRUcnVzdCBUVFAgTmV0d29y
240
- azEjMCEGA1UEAxMaQWRkVHJ1c3QgUXVhbGlmaWVkIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQAD
241
- ggEBABmrder4i2VhlRO6aQTvhsoToMeqT2QbPxj2qC0sVY8FtzDqQmodwCVRLae/DLPt7wh/bDxG
242
- GuoYQ992zPlmhpwsaPXpF/gxsxjE1kh9I0xowX67ARRvxdlu3rsEQmr49lx95dr6h+sNNVJn0J6X
243
- dgWTP5XHAeZpVTh/EGGZyeNfpso+gmNIquIISD6q8rKFYqa0p9m9N5xotS1WfbC3P6CxB9bpT9ze
244
- RXEwMn8bLgn5v1Kh7sKAPgZcLlVAwRv1cEWw3F369nJad9Jjzc9YiQBCYz95OdBEsIJuQRno3eDB
245
- iFrRHnGTHyQwdOUeqN48Jzd/g66ed8/wMLH/S5noxqE=
246
- -----END CERTIFICATE-----
247
-
248
- Entrust Root Certification Authority
249
- ====================================
250
- -----BEGIN CERTIFICATE-----
251
- MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMCVVMxFjAUBgNV
252
- BAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0Lm5ldC9DUFMgaXMgaW5jb3Jw
253
- b3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMWKGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsG
254
- A1UEAxMkRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0
255
- MloXDTI2MTEyNzIwNTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMu
256
- MTkwNwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSByZWZlcmVu
257
- Y2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNVBAMTJEVudHJ1c3QgUm9v
258
- dCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
259
- ALaVtkNC+sZtKm9I35RMOVcF7sN5EUFoNu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYsz
260
- A9u3g3s+IIRe7bJWKKf44LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOww
261
- Cj0Yzfv9KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGIrb68
262
- j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi94DkZfs0Nw4pgHBN
263
- rziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOBsDCBrTAOBgNVHQ8BAf8EBAMCAQYw
264
- DwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAigA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1
265
- MzQyWjAfBgNVHSMEGDAWgBRokORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DH
266
- hmak8fdLQ/uEvW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA
267
- A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9tO1KzKtvn1ISM
268
- Y/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6ZuaAGAT/3B+XxFNSRuzFVJ7yVTa
269
- v52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTS
270
- W3iDVuycNsMm4hH2Z0kdkquM++v/eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0
271
- tHuu2guQOHXvgR1m0vdXcDazv/wor3ElhVsT/h5/WrQ8
272
- -----END CERTIFICATE-----
273
-
274
- RSA Security 2048 v3
275
- ====================
276
- -----BEGIN CERTIFICATE-----
277
- MIIDYTCCAkmgAwIBAgIQCgEBAQAAAnwAAAAKAAAAAjANBgkqhkiG9w0BAQUFADA6MRkwFwYDVQQK
278
- ExBSU0EgU2VjdXJpdHkgSW5jMR0wGwYDVQQLExRSU0EgU2VjdXJpdHkgMjA0OCBWMzAeFw0wMTAy
279
- MjIyMDM5MjNaFw0yNjAyMjIyMDM5MjNaMDoxGTAXBgNVBAoTEFJTQSBTZWN1cml0eSBJbmMxHTAb
280
- BgNVBAsTFFJTQSBTZWN1cml0eSAyMDQ4IFYzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
281
- AQEAt49VcdKA3XtpeafwGFAyPGJn9gqVB93mG/Oe2dJBVGutn3y+Gc37RqtBaB4Y6lXIL5F4iSj7
282
- Jylg/9+PjDvJSZu1pJTOAeo+tWN7fyb9Gd3AIb2E0S1PRsNO3Ng3OTsor8udGuorryGlwSMiuLgb
283
- WhOHV4PR8CDn6E8jQrAApX2J6elhc5SYcSa8LWrg903w8bYqODGBDSnhAMFRD0xS+ARaqn1y07iH
284
- KrtjEAMqs6FPDVpeRrc9DvV07Jmf+T0kgYim3WBU6JU2PcYJk5qjEoAAVZkZR73QpXzDuvsf9/UP
285
- +Ky5tfQ3mBMY3oVbtwyCO4dvlTlYMNpuAWgXIszACwIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/
286
- MA4GA1UdDwEB/wQEAwIBBjAfBgNVHSMEGDAWgBQHw1EwpKrpRa41JPr/JCwz0LGdjDAdBgNVHQ4E
287
- FgQUB8NRMKSq6UWuNST6/yQsM9CxnYwwDQYJKoZIhvcNAQEFBQADggEBAF8+hnZuuDU8TjYcHnmY
288
- v/3VEhF5Ug7uMYm83X/50cYVIeiKAVQNOvtUudZj1LGqlk2iQk3UUx+LEN5/Zb5gEydxiKRz44Rj
289
- 0aRV4VCT5hsOedBnvEbIvz8XDZXmxpBp3ue0L96VfdASPz0+f00/FGj1EVDVwfSQpQgdMWD/YIwj
290
- VAqv/qFuxdF6Kmh4zx6CCiC0H63lhbJqaHVOrSU3lIW+vaHU6rcMSzyd6BIA8F+sDeGscGNz9395
291
- nzIlQnQFgCi/vcEkllgVsRch6YlL2weIZ/QVrXA+L02FO8K32/6YaCOJ4XQP3vTFhGMpG8zLB8kA
292
- pKnXwiJPZ9d37CAFYd4=
293
- -----END CERTIFICATE-----
294
-
295
- GeoTrust Global CA
296
- ==================
297
- -----BEGIN CERTIFICATE-----
298
- MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVTMRYwFAYDVQQK
299
- Ew1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9iYWwgQ0EwHhcNMDIwNTIxMDQw
300
- MDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5j
301
- LjEbMBkGA1UEAxMSR2VvVHJ1c3QgR2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
302
- CgKCAQEA2swYYzD99BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjo
303
- BbdqfnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDviS2Aelet
304
- 8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU1XupGc1V3sjs0l44U+Vc
305
- T4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+bw8HHa8sHo9gOeL6NlMTOdReJivbPagU
306
- vTLrGAMoUgRx5aszPeE4uwc2hGKceeoWMPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTAD
307
- AQH/MB0GA1UdDgQWBBTAephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVk
308
- DBF9qn1luMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKInZ57Q
309
- zxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfStQWVYrmm3ok9Nns4
310
- d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcFPseKUgzbFbS9bZvlxrFUaKnjaZC2
311
- mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Unhw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6p
312
- XE0zX5IJL4hmXXeXxx12E6nV5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvm
313
- Mw==
314
- -----END CERTIFICATE-----
315
-
316
- GeoTrust Global CA 2
317
- ====================
318
- -----BEGIN CERTIFICATE-----
319
- MIIDZjCCAk6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBEMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN
320
- R2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFsIENBIDIwHhcNMDQwMzA0MDUw
321
- MDAwWhcNMTkwMzA0MDUwMDAwWjBEMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5j
322
- LjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFsIENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
323
- ggEKAoIBAQDvPE1APRDfO1MA4Wf+lGAVPoWI8YkNkMgoI5kF6CsgncbzYEbYwbLVjDHZ3CB5JIG/
324
- NTL8Y2nbsSpr7iFY8gjpeMtvy/wWUsiRxP89c96xPqfCfWbB9X5SJBri1WeR0IIQ13hLTytCOb1k
325
- LUCgsBDTOEhGiKEMuzozKmKY+wCdE1l/bztyqu6mD4b5BWHqZ38MN5aL5mkWRxHCJ1kDs6ZgwiFA
326
- Vvqgx306E+PsV8ez1q6diYD3Aecs9pYrEw15LNnA5IZ7S4wMcoKK+xfNAGw6EzywhIdLFnopsk/b
327
- HdQL82Y3vdj2V7teJHq4PIu5+pIaGoSe2HSPqht/XvT+RSIhAgMBAAGjYzBhMA8GA1UdEwEB/wQF
328
- MAMBAf8wHQYDVR0OBBYEFHE4NvICMVNHK266ZUapEBVYIAUJMB8GA1UdIwQYMBaAFHE4NvICMVNH
329
- K266ZUapEBVYIAUJMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQUFAAOCAQEAA/e1K6tdEPx7
330
- srJerJsOflN4WT5CBP51o62sgU7XAotexC3IUnbHLB/8gTKY0UvGkpMzNTEv/NgdRN3ggX+d6Yvh
331
- ZJFiCzkIjKx0nVnZellSlxG5FntvRdOW2TF9AjYPnDtuzywNA0ZF66D0f0hExghAzN4bcLUprbqL
332
- OzRldRtxIR0sFAqwlpW41uryZfspuk/qkZN0abby/+Ea0AzRdoXLiiW9l14sbxWZJue2Kf8i7MkC
333
- x1YAzUm5s2x7UwQa4qjJqhIFI8LO57sEAszAR6LkxCkvW0VXiVHuPOtSCP8HNR6fNWpHSlaY0VqF
334
- H4z1Ir+rzoPz4iIprn2DQKi6bA==
335
- -----END CERTIFICATE-----
336
-
337
- GeoTrust Universal CA
338
- =====================
339
- -----BEGIN CERTIFICATE-----
340
- MIIFaDCCA1CgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN
341
- R2VvVHJ1c3QgSW5jLjEeMBwGA1UEAxMVR2VvVHJ1c3QgVW5pdmVyc2FsIENBMB4XDTA0MDMwNDA1
342
- MDAwMFoXDTI5MDMwNDA1MDAwMFowRTELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IElu
343
- Yy4xHjAcBgNVBAMTFUdlb1RydXN0IFVuaXZlcnNhbCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIP
344
- ADCCAgoCggIBAKYVVaCjxuAfjJ0hUNfBvitbtaSeodlyWL0AG0y/YckUHUWCq8YdgNY96xCcOq9t
345
- JPi8cQGeBvV8Xx7BDlXKg5pZMK4ZyzBIle0iN430SppyZj6tlcDgFgDgEB8rMQ7XlFTTQjOgNB0e
346
- RXbdT8oYN+yFFXoZCPzVx5zw8qkuEKmS5j1YPakWaDwvdSEYfyh3peFhF7em6fgemdtzbvQKoiFs
347
- 7tqqhZJmr/Z6a4LauiIINQ/PQvE1+mrufislzDoR5G2vc7J2Ha3QsnhnGqQ5HFELZ1aD/ThdDc7d
348
- 8Lsrlh/eezJS/R27tQahsiFepdaVaH/wmZ7cRQg+59IJDTWU3YBOU5fXtQlEIGQWFwMCTFMNaN7V
349
- qnJNk22CDtucvc+081xdVHppCZbW2xHBjXWotM85yM48vCR85mLK4b19p71XZQvk/iXttmkQ3Cga
350
- Rr0BHdCXteGYO8A3ZNY9lO4L4fUorgtWv3GLIylBjobFS1J72HGrH4oVpjuDWtdYAVHGTEHZf9hB
351
- Z3KiKN9gg6meyHv8U3NyWfWTehd2Ds735VzZC1U0oqpbtWpU5xPKV+yXbfReBi9Fi1jUIxaS5BZu
352
- KGNZMN9QAZxjiRqf2xeUgnA3wySemkfWWspOqGmJch+RbNt+nhutxx9z3SxPGWX9f5NAEC7S8O08
353
- ni4oPmkmM8V7AgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNq7LqqwDLiIJlF0
354
- XG0D08DYj3rWMB8GA1UdIwQYMBaAFNq7LqqwDLiIJlF0XG0D08DYj3rWMA4GA1UdDwEB/wQEAwIB
355
- hjANBgkqhkiG9w0BAQUFAAOCAgEAMXjmx7XfuJRAyXHEqDXsRh3ChfMoWIawC/yOsjmPRFWrZIRc
356
- aanQmjg8+uUfNeVE44B5lGiku8SfPeE0zTBGi1QrlaXv9z+ZhP015s8xxtxqv6fXIwjhmF7DWgh2
357
- qaavdy+3YL1ERmrvl/9zlcGO6JP7/TG37FcREUWbMPEaiDnBTzynANXH/KttgCJwpQzgXQQpAvvL
358
- oJHRfNbDflDVnVi+QTjruXU8FdmbyUqDWcDaU/0zuzYYm4UPFd3uLax2k7nZAY1IEKj79TiG8dsK
359
- xr2EoyNB3tZ3b4XUhRxQ4K5RirqNPnbiucon8l+f725ZDQbYKxek0nxru18UGkiPGkzns0ccjkxF
360
- KyDuSN/n3QmOGKjaQI2SJhFTYXNd673nxE0pN2HrrDktZy4W1vUAg4WhzH92xH3kt0tm7wNFYGm2
361
- DFKWkoRepqO1pD4r2czYG0eq8kTaT/kD6PAUyz/zg97QwVTjt+gKN02LIFkDMBmhLMi9ER/frslK
362
- xfMnZmaGrGiR/9nmUxwPi1xpZQomyB40w11Re9epnAahNt3ViZS82eQtDF4JbAiXfKM9fJP/P6EU
363
- p8+1Xevb2xzEdt+Iub1FBZUbrvxGakyvSOPOrg/SfuvmbJxPgWp6ZKy7PtXny3YuxadIwVyQD8vI
364
- P/rmMuGNG2+k5o7Y+SlIis5z/iw=
365
- -----END CERTIFICATE-----
366
-
367
- GeoTrust Universal CA 2
368
- =======================
369
- -----BEGIN CERTIFICATE-----
370
- MIIFbDCCA1SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBHMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN
371
- R2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVyc2FsIENBIDIwHhcNMDQwMzA0
372
- MDUwMDAwWhcNMjkwMzA0MDUwMDAwWjBHMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3Qg
373
- SW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVyc2FsIENBIDIwggIiMA0GCSqGSIb3DQEBAQUA
374
- A4ICDwAwggIKAoICAQCzVFLByT7y2dyxUxpZKeexw0Uo5dfR7cXFS6GqdHtXr0om/Nj1XqduGdt0
375
- DE81WzILAePb63p3NeqqWuDW6KFXlPCQo3RWlEQwAx5cTiuFJnSCegx2oG9NzkEtoBUGFF+3Qs17
376
- j1hhNNwqCPkuwwGmIkQcTAeC5lvO0Ep8BNMZcyfwqph/Lq9O64ceJHdqXbboW0W63MOhBW9Wjo8Q
377
- JqVJwy7XQYci4E+GymC16qFjwAGXEHm9ADwSbSsVsaxLse4YuU6W3Nx2/zu+z18DwPw76L5GG//a
378
- QMJS9/7jOvdqdzXQ2o3rXhhqMcceujwbKNZrVMaqW9eiLBsZzKIC9ptZvTdrhrVtgrrY6slWvKk2
379
- WP0+GfPtDCapkzj4T8FdIgbQl+rhrcZV4IErKIM6+vR7IVEAvlI4zs1meaj0gVbi0IMJR1FbUGrP
380
- 20gaXT73y/Zl92zxlfgCOzJWgjl6W70viRu/obTo/3+NjN8D8WBOWBFM66M/ECuDmgFz2ZRthAAn
381
- ZqzwcEAJQpKtT5MNYQlRJNiS1QuUYbKHsu3/mjX/hVTK7URDrBs8FmtISgocQIgfksILAAX/8sgC
382
- SqSqqcyZlpwvWOB94b67B9xfBHJcMTTD7F8t4D1kkCLm0ey4Lt1ZrtmhN79UNdxzMk+MBB4zsslG
383
- 8dhcyFVQyWi9qLo2CQIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBR281Xh+qQ2
384
- +/CfXGJx7Tz0RzgQKzAfBgNVHSMEGDAWgBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAOBgNVHQ8BAf8E
385
- BAMCAYYwDQYJKoZIhvcNAQEFBQADggIBAGbBxiPz2eAubl/oz66wsCVNK/g7WJtAJDday6sWSf+z
386
- dXkzoS9tcBc0kf5nfo/sm+VegqlVHy/c1FEHEv6sFj4sNcZj/NwQ6w2jqtB8zNHQL1EuxBRa3ugZ
387
- 4T7GzKQp5y6EqgYweHZUcyiYWTjgAA1i00J9IZ+uPTqM1fp3DRgrFg5fNuH8KrUwJM/gYwx7WBr+
388
- mbpCErGR9Hxo4sjoryzqyX6uuyo9DRXcNJW2GHSoag/HtPQTxORb7QrSpJdMKu0vbBKJPfEncKpq
389
- A1Ihn0CoZ1Dy81of398j9tx4TuaYT1U6U+Pv8vSfx3zYWK8pIpe44L2RLrB27FcRz+8pRPPphXpg
390
- Y+RdM4kX2TGq2tbzGDVyz4crL2MjhF2EjD9XoIj8mZEoJmmZ1I+XRL6O1UixpCgp8RW04eWe3fiP
391
- pm8m1wk8OhwRDqZsN/etRIcsKMfYdIKz0G9KV7s1KSegi+ghp4dkNl3M2Basx7InQJJVOCiNUW7d
392
- FGdTbHFcJoRNdVq2fmBWqU2t+5sel/MN2dKXVHfaPRK34B7vCAas+YWH6aLcr34YEoP9VhdBLtUp
393
- gn2Z9DH2canPLAEnpQW5qrJITirvn5NSUZU8UnOOVkwXQMAJKOSLakhT2+zNVVXxxvjpoixMptEm
394
- X36vWkzaH6byHCx+rgIW0lbQL1dTR+iS
395
- -----END CERTIFICATE-----
396
-
397
- Visa eCommerce Root
398
- ===================
399
- -----BEGIN CERTIFICATE-----
400
- MIIDojCCAoqgAwIBAgIQE4Y1TR0/BvLB+WUF1ZAcYjANBgkqhkiG9w0BAQUFADBrMQswCQYDVQQG
401
- EwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2Ug
402
- QXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNvbW1lcmNlIFJvb3QwHhcNMDIwNjI2MDIxODM2
403
- WhcNMjIwNjI0MDAxNjEyWjBrMQswCQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMm
404
- VmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNv
405
- bW1lcmNlIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvV95WHm6h2mCxlCfL
406
- F9sHP4CFT8icttD0b0/Pmdjh28JIXDqsOTPHH2qLJj0rNfVIsZHBAk4ElpF7sDPwsRROEW+1QK8b
407
- RaVK7362rPKgH1g/EkZgPI2h4H3PVz4zHvtH8aoVlwdVZqW1LS7YgFmypw23RuwhY/81q6UCzyr0
408
- TP579ZRdhE2o8mCP2w4lPJ9zcc+U30rq299yOIzzlr3xF7zSujtFWsan9sYXiwGd/BmoKoMWuDpI
409
- /k4+oKsGGelT84ATB+0tvz8KPFUgOSwsAGl0lUq8ILKpeeUYiZGo3BxN77t+Nwtd/jmliFKMAGzs
410
- GHxBvfaLdXe6YJ2E5/4tAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEG
411
- MB0GA1UdDgQWBBQVOIMPPyw/cDMezUb+B4wg4NfDtzANBgkqhkiG9w0BAQUFAAOCAQEAX/FBfXxc
412
- CLkr4NWSR/pnXKUTwwMhmytMiUbPWU3J/qVAtmPN3XEolWcRzCSs00Rsca4BIGsDoo8Ytyk6feUW
413
- YFN4PMCvFYP3j1IzJL1kk5fui/fbGKhtcbP3LBfQdCVp9/5rPJS+TUtBjE7ic9DjkCJzQ83z7+pz
414
- zkWKsKZJ/0x9nXGIxHYdkFsd7v3M9+79YKWxehZx0RbQfBI8bGmX265fOZpwLwU8GUYEmSA20GBu
415
- YQa7FkKMcPcw++DbZqMAAb3mLNqRX6BGi01qnD093QVG/na/oAo85ADmJ7f/hC3euiInlhBx6yLt
416
- 398znM/jra6O1I7mT1GvFpLgXPYHDw==
417
- -----END CERTIFICATE-----
418
-
419
- Certum Root CA
420
- ==============
421
- -----BEGIN CERTIFICATE-----
422
- MIIDDDCCAfSgAwIBAgIDAQAgMA0GCSqGSIb3DQEBBQUAMD4xCzAJBgNVBAYTAlBMMRswGQYDVQQK
423
- ExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBDQTAeFw0wMjA2MTExMDQ2Mzla
424
- Fw0yNzA2MTExMDQ2MzlaMD4xCzAJBgNVBAYTAlBMMRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8u
425
- by4xEjAQBgNVBAMTCUNlcnR1bSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM6x
426
- wS7TT3zNJc4YPk/EjG+AanPIW1H4m9LcuwBcsaD8dQPugfCI7iNS6eYVM42sLQnFdvkrOYCJ5JdL
427
- kKWoePhzQ3ukYbDYWMzhbGZ+nPMJXlVjhNWo7/OxLjBos8Q82KxujZlakE403Daaj4GIULdtlkIJ
428
- 89eVgw1BS7Bqa/j8D35in2fE7SZfECYPCE/wpFcozo+47UX2bu4lXapuOb7kky/ZR6By6/qmW6/K
429
- Uz/iDsaWVhFu9+lmqSbYf5VT7QqFiLpPKaVCjF62/IUgAKpoC6EahQGcxEZjgoi2IrHu/qpGWX7P
430
- NSzVttpd90gzFFS269lvzs2I1qsb2pY7HVkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkq
431
- hkiG9w0BAQUFAAOCAQEAuI3O7+cUus/usESSbLQ5PqKEbq24IXfS1HeCh+YgQYHu4vgRt2PRFze+
432
- GXYkHAQaTOs9qmdvLdTN/mUxcMUbpgIKumB7bVjCmkn+YzILa+M6wKyrO7Do0wlRjBCDxjTgxSvg
433
- GrZgFCdsMneMvLJymM/NzD+5yCRCFNZX/OYmQ6kd5YCQzgNUKD73P9P4Te1qCjqTE5s7FCMTY5w/
434
- 0YcneeVMUeMBrYVdGjux1XMQpNPyvG5k9VpWkKjHDkx0Dy5xO/fIR/RpbxXyEV6DHpx8Uq79AtoS
435
- qFlnGNu8cN2bsWntgM6JQEhqDjXKKWYVIZQs6GAqm4VKQPNriiTsBhYscw==
436
- -----END CERTIFICATE-----
437
-
438
- Comodo AAA Services root
439
- ========================
440
- -----BEGIN CERTIFICATE-----
441
- MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS
442
- R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg
443
- TGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAw
444
- MFoXDTI4MTIzMTIzNTk1OVowezELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hl
445
- c3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNV
446
- BAMMGEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
447
- ggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQuaBtDFcCLNSS1UY8y2bmhG
448
- C1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe3M/vg4aijJRPn2jymJBGhCfHdr/jzDUs
449
- i14HZGWCwEiwqJH5YZ92IFCokcdmtet4YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszW
450
- Y19zjNoFmag4qMsXeDZRrOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjH
451
- Ypy+g8cmez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQUoBEK
452
- Iz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wewYDVR0f
453
- BHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20vQUFBQ2VydGlmaWNhdGVTZXJ2aWNl
454
- cy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29tb2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2Vz
455
- LmNybDANBgkqhkiG9w0BAQUFAAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm
456
- 7l3sAg9g1o1QGE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz
457
- Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2G9w84FoVxp7Z
458
- 8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsil2D4kF501KKaU73yqWjgom7C
459
- 12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg==
460
- -----END CERTIFICATE-----
461
-
462
- Comodo Secure Services root
463
- ===========================
464
- -----BEGIN CERTIFICATE-----
465
- MIIEPzCCAyegAwIBAgIBATANBgkqhkiG9w0BAQUFADB+MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS
466
- R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg
467
- TGltaXRlZDEkMCIGA1UEAwwbU2VjdXJlIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAw
468
- MDAwMFoXDTI4MTIzMTIzNTk1OVowfjELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFu
469
- Y2hlc3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxJDAi
470
- BgNVBAMMG1NlY3VyZSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEP
471
- ADCCAQoCggEBAMBxM4KK0HDrc4eCQNUd5MvJDkKQ+d40uaG6EfQlhfPMcm3ye5drswfxdySRXyWP
472
- 9nQ95IDC+DwN879A6vfIUtFyb+/Iq0G4bi4XKpVpDM3SHpR7LZQdqnXXs5jLrLxkU0C8j6ysNstc
473
- rbvd4JQX7NFc0L/vpZXJkMWwrPsbQ996CF23uPJAGysnnlDOXmWCiIxe004MeuoIkbY2qitC++rC
474
- oznl2yY4rYsK7hljxxwk3wN42ubqwUcaCwtGCd0C/N7Lh1/XMGNooa7cMqG6vv5Eq2i2pRcV/b3V
475
- p6ea5EQz6YiO/O1R65NxTq0B50SOqy3LqP4BSUjwwN3HaNiS/j0CAwEAAaOBxzCBxDAdBgNVHQ4E
476
- FgQUPNiTiMLAggnMAZkGkyDpnnAJY08wDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8w
477
- gYEGA1UdHwR6MHgwO6A5oDeGNWh0dHA6Ly9jcmwuY29tb2RvY2EuY29tL1NlY3VyZUNlcnRpZmlj
478
- YXRlU2VydmljZXMuY3JsMDmgN6A1hjNodHRwOi8vY3JsLmNvbW9kby5uZXQvU2VjdXJlQ2VydGlm
479
- aWNhdGVTZXJ2aWNlcy5jcmwwDQYJKoZIhvcNAQEFBQADggEBAIcBbSMdflsXfcFhMs+P5/OKlFlm
480
- 4J4oqF7Tt/Q05qo5spcWxYJvMqTpjOev/e/C6LlLqqP05tqNZSH7uoDrJiiFGv45jN5bBAS0VPmj
481
- Z55B+glSzAVIqMk/IQQezkhr/IXownuvf7fM+F86/TXGDe+X3EyrEeFryzHRbPtIgKvcnDe4IRRL
482
- DXE97IMzbtFuMhbsmMcWi1mmNKsFVy2T96oTy9IT4rcuO81rUBcJaD61JlfutuC23bkpgHl9j6Pw
483
- pCikFcSF9CfUa7/lXORlAnZUtOM3ZiTTGWHIUhDlizeauan5Hb/qmZJhlv8BzaFfDbxxvA6sCx1H
484
- RR3B7Hzs/Sk=
485
- -----END CERTIFICATE-----
486
-
487
- Comodo Trusted Services root
488
- ============================
489
- -----BEGIN CERTIFICATE-----
490
- MIIEQzCCAyugAwIBAgIBATANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS
491
- R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg
492
- TGltaXRlZDElMCMGA1UEAwwcVHJ1c3RlZCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczAeFw0wNDAxMDEw
493
- MDAwMDBaFw0yODEyMzEyMzU5NTlaMH8xCzAJBgNVBAYTAkdCMRswGQYDVQQIDBJHcmVhdGVyIE1h
494
- bmNoZXN0ZXIxEDAOBgNVBAcMB1NhbGZvcmQxGjAYBgNVBAoMEUNvbW9kbyBDQSBMaW1pdGVkMSUw
495
- IwYDVQQDDBxUcnVzdGVkIENlcnRpZmljYXRlIFNlcnZpY2VzMIIBIjANBgkqhkiG9w0BAQEFAAOC
496
- AQ8AMIIBCgKCAQEA33FvNlhTWvI2VFeAxHQIIO0Yfyod5jWaHiWsnOWWfnJSoBVC21ndZHoa0Lh7
497
- 3TkVvFVIxO06AOoxEbrycXQaZ7jPM8yoMa+j49d/vzMtTGo87IvDktJTdyR0nAducPy9C1t2ul/y
498
- /9c3S0pgePfw+spwtOpZqqPOSC+pw7ILfhdyFgymBwwbOM/JYrc/oJOlh0Hyt3BAd9i+FHzjqMB6
499
- juljatEPmsbS9Is6FARW1O24zG71++IsWL1/T2sr92AkWCTOJu80kTrV44HQsvAEAtdbtz6SrGsS
500
- ivnkBbA7kUlcsutT6vifR4buv5XAwAaf0lteERv0xwQ1KdJVXOTt6wIDAQABo4HJMIHGMB0GA1Ud
501
- DgQWBBTFe1i97doladL3WRaoszLAeydb9DAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB
502
- /zCBgwYDVR0fBHwwejA8oDqgOIY2aHR0cDovL2NybC5jb21vZG9jYS5jb20vVHJ1c3RlZENlcnRp
503
- ZmljYXRlU2VydmljZXMuY3JsMDqgOKA2hjRodHRwOi8vY3JsLmNvbW9kby5uZXQvVHJ1c3RlZENl
504
- cnRpZmljYXRlU2VydmljZXMuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQDIk4E7ibSvuIQSTI3S8Ntw
505
- uleGFTQQuS9/HrCoiWChisJ3DFBKmwCL2Iv0QeLQg4pKHBQGsKNoBXAxMKdTmw7pSqBYaWcOrp32
506
- pSxBvzwGa+RZzG0Q8ZZvH9/0BAKkn0U+yNj6NkZEUD+Cl5EfKNsYEYwq5GWDVxISjBc/lDb+XbDA
507
- BHcTuPQV1T84zJQ6VdCsmPW6AF/ghhmBeC8owH7TzEIK9a5QoNE+xqFx7D+gIIxmOom0jtTYsU0l
508
- R+4viMi14QVFwL4Ucd56/Y57fU0IlqUSc/AtyjcndBInTMu2l+nZrghtWjlA3QVHdWpaIbOjGM9O
509
- 9y5Xt5hwXsjEeLBi
510
- -----END CERTIFICATE-----
511
-
512
- QuoVadis Root CA
513
- ================
514
- -----BEGIN CERTIFICATE-----
515
- MIIF0DCCBLigAwIBAgIEOrZQizANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJCTTEZMBcGA1UE
516
- ChMQUXVvVmFkaXMgTGltaXRlZDElMCMGA1UECxMcUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
517
- eTEuMCwGA1UEAxMlUXVvVmFkaXMgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMTAz
518
- MTkxODMzMzNaFw0yMTAzMTcxODMzMzNaMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRp
519
- cyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQD
520
- EyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEF
521
- AAOCAQ8AMIIBCgKCAQEAv2G1lVO6V/z68mcLOhrfEYBklbTRvM16z/Ypli4kVEAkOPcahdxYTMuk
522
- J0KX0J+DisPkBgNbAKVRHnAEdOLB1Dqr1607BxgFjv2DrOpm2RgbaIr1VxqYuvXtdj182d6UajtL
523
- F8HVj71lODqV0D1VNk7feVcxKh7YWWVJWCCYfqtffp/p1k3sg3Spx2zY7ilKhSoGFPlU5tPaZQeL
524
- YzcS19Dsw3sgQUSj7cugF+FxZc4dZjH3dgEZyH0DWLaVSR2mEiboxgx24ONmy+pdpibu5cxfvWen
525
- AScOospUxbF6lR1xHkopigPcakXBpBlebzbNw6Kwt/5cOOJSvPhEQ+aQuwIDAQABo4ICUjCCAk4w
526
- PQYIKwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwczovL29jc3AucXVvdmFkaXNvZmZzaG9y
527
- ZS5jb20wDwYDVR0TAQH/BAUwAwEB/zCCARoGA1UdIASCAREwggENMIIBCQYJKwYBBAG+WAABMIH7
528
- MIHUBggrBgEFBQcCAjCBxxqBxFJlbGlhbmNlIG9uIHRoZSBRdW9WYWRpcyBSb290IENlcnRpZmlj
529
- YXRlIGJ5IGFueSBwYXJ0eSBhc3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJs
530
- ZSBzdGFuZGFyZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRpb24gcHJh
531
- Y3RpY2VzLCBhbmQgdGhlIFF1b1ZhZGlzIENlcnRpZmljYXRlIFBvbGljeS4wIgYIKwYBBQUHAgEW
532
- Fmh0dHA6Ly93d3cucXVvdmFkaXMuYm0wHQYDVR0OBBYEFItLbe3TKbkGGew5Oanwl4Rqy+/fMIGu
533
- BgNVHSMEgaYwgaOAFItLbe3TKbkGGew5Oanwl4Rqy+/foYGEpIGBMH8xCzAJBgNVBAYTAkJNMRkw
534
- FwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0
535
- aG9yaXR5MS4wLAYDVQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggQ6
536
- tlCLMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAitQUtf70mpKnGdSkfnIYj9lo
537
- fFIk3WdvOXrEql494liwTXCYhGHoG+NpGA7O+0dQoE7/8CQfvbLO9Sf87C9TqnN7Az10buYWnuul
538
- LsS/VidQK2K6vkscPFVcQR0kvoIgR13VRH56FmjffU1RcHhXHTMe/QKZnAzNCgVPx7uOpHX6Sm2x
539
- gI4JVrmcGmD+XcHXetwReNDWXcG31a0ymQM6isxUJTkxgXsTIlG6Rmyhu576BGxJJnSP0nPrzDCi
540
- 5upZIof4l/UO/erMkqQWxFIY6iHOsfHmhIHluqmGKPJDWl0Snawe2ajlCmqnf6CHKc/yiU3U7MXi
541
- 5nrQNiOKSnQ2+Q==
542
- -----END CERTIFICATE-----
543
-
544
- QuoVadis Root CA 2
545
- ==================
546
- -----BEGIN CERTIFICATE-----
547
- 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
- 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
- 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
- aW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4IC
551
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- BNKr79X9DFHOUGoIMfmR2gyPZFwDwzqLID9ujWc9Otb+fVuIyV77zGHcizN300QyNQliBJIWENie
560
- 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
- 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
- a6FJpEcwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMT
563
- 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
- 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
- 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
- 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
- +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
- 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
- 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
- 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
- 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
- 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
573
- -----END CERTIFICATE-----
574
-
575
- QuoVadis Root CA 3
576
- ==================
577
- -----BEGIN CERTIFICATE-----
578
- MIIGnTCCBIWgAwIBAgICBcYwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoT
579
- EFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJvb3QgQ0EgMzAeFw0wNjExMjQx
580
- OTExMjNaFw0zMTExMjQxOTA2NDRaMEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM
581
- aW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4IC
582
- DwAwggIKAoICAQDMV0IWVJzmmNPTTe7+7cefQzlKZbPoFog02w1ZkXTPkrgEQK0CSzGrvI2RaNgg
583
- DhoB4hp7Thdd4oq3P5kazethq8Jlph+3t723j/z9cI8LoGe+AaJZz3HmDyl2/7FWeUUrH556VOij
584
- KTVopAFPD6QuN+8bv+OPEKhyq1hX51SGyMnzW9os2l2ObjyjPtr7guXd8lyyBTNvijbO0BNO/79K
585
- DDRMpsMhvVAEVeuxu537RR5kFd5VAYwCdrXLoT9CabwvvWhDFlaJKjdhkf2mrk7AyxRllDdLkgbv
586
- BNDInIjbC3uBr7E9KsRlOni27tyAsdLTmZw67mtaa7ONt9XOnMK+pUsvFrGeaDsGb659n/je7Mwp
587
- p5ijJUMv7/FfJuGITfhebtfZFG4ZM2mnO4SJk8RTVROhUXhA+LjJou57ulJCg54U7QVSWllWp5f8
588
- nT8KKdjcT5EOE7zelaTfi5m+rJsziO+1ga8bxiJTyPbH7pcUsMV8eFLI8M5ud2CEpukqdiDtWAEX
589
- MJPpGovgc2PZapKUSU60rUqFxKMiMPwJ7Wgic6aIDFUhWMXhOp8q3crhkODZc6tsgLjoC2SToJyM
590
- Gf+z0gzskSaHirOi4XCPLArlzW1oUevaPwV/izLmE1xr/l9A4iLItLRkT9a6fUg+qGkM17uGcclz
591
- uD87nSVL2v9A6wIDAQABo4IBlTCCAZEwDwYDVR0TAQH/BAUwAwEB/zCB4QYDVR0gBIHZMIHWMIHT
592
- BgkrBgEEAb5YAAMwgcUwgZMGCCsGAQUFBwICMIGGGoGDQW55IHVzZSBvZiB0aGlzIENlcnRpZmlj
593
- YXRlIGNvbnN0aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlIFF1b1ZhZGlzIFJvb3QgQ0EgMyBDZXJ0
594
- aWZpY2F0ZSBQb2xpY3kgLyBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVudC4wLQYIKwYB
595
- BQUHAgEWIWh0dHA6Ly93d3cucXVvdmFkaXNnbG9iYWwuY29tL2NwczALBgNVHQ8EBAMCAQYwHQYD
596
- VR0OBBYEFPLAE+CCQz777i9nMpY1XNu4ywLQMG4GA1UdIwRnMGWAFPLAE+CCQz777i9nMpY1XNu4
597
- ywLQoUmkRzBFMQswCQYDVQQGEwJCTTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDEbMBkGA1UE
598
- AxMSUXVvVmFkaXMgUm9vdCBDQSAzggIFxjANBgkqhkiG9w0BAQUFAAOCAgEAT62gLEz6wPJv92ZV
599
- qyM07ucp2sNbtrCD2dDQ4iH782CnO11gUyeim/YIIirnv6By5ZwkajGxkHon24QRiSemd1o417+s
600
- hvzuXYO8BsbRd2sPbSQvS3pspweWyuOEn62Iix2rFo1bZhfZFvSLgNLd+LJ2w/w4E6oM3kJpK27z
601
- POuAJ9v1pkQNn1pVWQvVDVJIxa6f8i+AxeoyUDUSly7B4f/xI4hROJ/yZlZ25w9Rl6VSDE1JUZU2
602
- Pb+iSwwQHYaZTKrzchGT5Or2m9qoXadNt54CrnMAyNojA+j56hl0YgCUyyIgvpSnWbWCar6ZeXqp
603
- 8kokUvd0/bpO5qgdAm6xDYBEwa7TIzdfu4V8K5Iu6H6li92Z4b8nby1dqnuH/grdS/yO9SbkbnBC
604
- bjPsMZ57k8HkyWkaPcBrTiJt7qtYTcbQQcEr6k8Sh17rRdhs9ZgC06DYVYoGmRmioHfRMJ6szHXu
605
- g/WwYjnPbFfiTNKRCw51KBuav/0aQ/HKd/s7j2G4aSgWQgRecCocIdiP4b0jWy10QJLZYxkNc91p
606
- vGJHvOB0K7Lrfb5BG7XARsWhIstfTsEokt4YutUqKLsRixeTmJlglFwjz1onl14LBQaTNx47aTbr
607
- qZ5hHY8y2o4M1nQ+ewkk2gF3R8Q7zTSMmfXK4SVhM7JZG+Ju1zdXtg2pEto=
608
- -----END CERTIFICATE-----
609
-
610
- Security Communication Root CA
611
- ==============================
612
- -----BEGIN CERTIFICATE-----
613
- MIIDWjCCAkKgAwIBAgIBADANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP
614
- U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw
615
- HhcNMDMwOTMwMDQyMDQ5WhcNMjMwOTMwMDQyMDQ5WjBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP
616
- U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw
617
- ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCzs/5/022x7xZ8V6UMbXaKL0u/ZPtM7orw
618
- 8yl89f/uKuDp6bpbZCKamm8sOiZpUQWZJtzVHGpxxpp9Hp3dfGzGjGdnSj74cbAZJ6kJDKaVv0uM
619
- DPpVmDvY6CKhS3E4eayXkmmziX7qIWgGmBSWh9JhNrxtJ1aeV+7AwFb9Ms+k2Y7CI9eNqPPYJayX
620
- 5HA49LY6tJ07lyZDo6G8SVlyTCMwhwFY9k6+HGhWZq/NQV3Is00qVUarH9oe4kA92819uZKAnDfd
621
- DJZkndwi92SL32HeFZRSFaB9UslLqCHJxrHty8OVYNEP8Ktw+N/LTX7s1vqr2b1/VPKl6Xn62dZ2
622
- JChzAgMBAAGjPzA9MB0GA1UdDgQWBBSgc0mZaNyFW2XjmygvV5+9M7wHSDALBgNVHQ8EBAMCAQYw
623
- DwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAaECpqLvkT115swW1F7NgE+vGkl3g
624
- 0dNq/vu+m22/xwVtWSDEHPC32oRYAmP6SBbvT6UL90qY8j+eG61Ha2POCEfrUj94nK9NrvjVT8+a
625
- mCoQQTlSxN3Zmw7vkwGusi7KaEIkQmywszo+zenaSMQVy+n5Bw+SUEmK3TGXX8npN6o7WWWXlDLJ
626
- s58+OmJYxUmtYg5xpTKqL8aJdkNAExNnPaJUJRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ
627
- 6rBK+1YWc26sTfcioU+tHXotRSflMMFe8toTyyVCUZVHA4xsIcx0Qu1T/zOLjw9XARYvz6buyXAi
628
- FL39vmwLAw==
629
- -----END CERTIFICATE-----
630
-
631
- Sonera Class 2 Root CA
632
- ======================
633
- -----BEGIN CERTIFICATE-----
634
- MIIDIDCCAgigAwIBAgIBHTANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEPMA0GA1UEChMG
635
- U29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MyIENBMB4XDTAxMDQwNjA3Mjk0MFoXDTIxMDQw
636
- NjA3Mjk0MFowOTELMAkGA1UEBhMCRkkxDzANBgNVBAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJh
637
- IENsYXNzMiBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJAXSjWdyvANlsdE+hY3
638
- /Ei9vX+ALTU74W+oZ6m/AxxNjG8yR9VBaKQTBME1DJqEQ/xcHf+Js+gXGM2RX/uJ4+q/Tl18GybT
639
- dXnt5oTjV+WtKcT0OijnpXuENmmz/V52vaMtmdOQTiMofRhj8VQ7Jp12W5dCsv+u8E7s3TmVToMG
640
- f+dJQMjFAbJUWmYdPfz56TwKnoG4cPABi+QjVHzIrviQHgCWctRUz2EjvOr7nQKV0ba5cTppCD8P
641
- tOFCx4j1P5iop7oc4HFx71hXgVB6XGt0Rg6DA5jDjqhu8nYybieDwnPz3BjotJPqdURrBGAgcVeH
642
- nfO+oJAjPYok4doh28MCAwEAAaMzMDEwDwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQISqCqWITT
643
- XjwwCwYDVR0PBAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQBazof5FnIVV0sd2ZvnoiYw7JNn39Yt
644
- 0jSv9zilzqsWuasvfDXLrNAPtEwr/IDva4yRXzZ299uzGxnq9LIR/WFxRL8oszodv7ND6J+/3DEI
645
- cbCdjdY0RzKQxmUk96BKfARzjzlvF4xytb1LyHr4e4PDKE6cCepnP7JnBBvDFNr450kkkdAdavph
646
- Oe9r5yF1BgfYErQhIHBCcYHaPJo2vqZbDWpsmh+Re/n570K6Tk6ezAyNlNzZRZxe7EJQY670XcSx
647
- EtzKO6gunRRaBXW37Ndj4ro1tgQIkejanZz2ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLH
648
- llpwrN9M
649
- -----END CERTIFICATE-----
650
-
651
- UTN USERFirst Hardware Root CA
652
- ==============================
653
- -----BEGIN CERTIFICATE-----
654
- MIIEdDCCA1ygAwIBAgIQRL4Mi1AAJLQR0zYq/mUK/TANBgkqhkiG9w0BAQUFADCBlzELMAkGA1UE
655
- BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl
656
- IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHzAd
657
- BgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdhcmUwHhcNOTkwNzA5MTgxMDQyWhcNMTkwNzA5MTgx
658
- OTIyWjCBlzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0
659
- eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVz
660
- ZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdhcmUwggEiMA0GCSqGSIb3
661
- DQEBAQUAA4IBDwAwggEKAoIBAQCx98M4P7Sof885glFn0G2f0v9Y8+efK+wNiVSZuTiZFvfgIXlI
662
- wrthdBKWHTxqctU8EGc6Oe0rE81m65UJM6Rsl7HoxuzBdXmcRl6Nq9Bq/bkqVRcQVLMZ8Jr28bFd
663
- tqdt++BxF2uiiPsA3/4aMXcMmgF6sTLjKwEHOG7DpV4jvEWbe1DByTCP2+UretNb+zNAHqDVmBe8
664
- i4fDidNdoI6yqqr2jmmIBsX6iSHzCJ1pLgkzmykNRg+MzEk0sGlRvfkGzWitZky8PqxhvQqIDsjf
665
- Pe58BEydCl5rkdbux+0ojatNh4lz0G6k0B4WixThdkQDf2Os5M1JnMWS9KsyoUhbAgMBAAGjgbkw
666
- gbYwCwYDVR0PBAQDAgHGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFKFyXyYbKJhDlV0HN9WF
667
- lp1L0sNFMEQGA1UdHwQ9MDswOaA3oDWGM2h0dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9VVE4tVVNF
668
- UkZpcnN0LUhhcmR3YXJlLmNybDAxBgNVHSUEKjAoBggrBgEFBQcDAQYIKwYBBQUHAwUGCCsGAQUF
669
- BwMGBggrBgEFBQcDBzANBgkqhkiG9w0BAQUFAAOCAQEARxkP3nTGmZev/K0oXnWO6y1n7k57K9cM
670
- //bey1WiCuFMVGWTYGufEpytXoMs61quwOQt9ABjHbjAbPLPSbtNk28GpgoiskliCE7/yMgUsogW
671
- XecB5BKV5UU0s4tpvc+0hY91UZ59Ojg6FEgSxvunOxqNDYJAB+gECJChicsZUN/KHAG8HQQZexB2
672
- lzvukJDKxA4fFm517zP4029bHpbj4HR3dHuKom4t3XbWOTCC8KucUvIqx69JXn7HaOWCgchqJ/kn
673
- iCrVWFCVH/A7HFe7fRQ5YiuayZSSKqMiDP+JJn1fIytH1xUdqWqeUQ0qUZ6B+dQ7XnASfxAynB67
674
- nfhmqA==
675
- -----END CERTIFICATE-----
676
-
677
- Camerfirma Chambers of Commerce Root
678
- ====================================
679
- -----BEGIN CERTIFICATE-----
680
- MIIEvTCCA6WgAwIBAgIBADANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJFVTEnMCUGA1UEChMe
681
- QUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1i
682
- ZXJzaWduLm9yZzEiMCAGA1UEAxMZQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdDAeFw0wMzA5MzAx
683
- NjEzNDNaFw0zNzA5MzAxNjEzNDRaMH8xCzAJBgNVBAYTAkVVMScwJQYDVQQKEx5BQyBDYW1lcmZp
684
- cm1hIFNBIENJRiBBODI3NDMyODcxIzAhBgNVBAsTGmh0dHA6Ly93d3cuY2hhbWJlcnNpZ24ub3Jn
685
- MSIwIAYDVQQDExlDaGFtYmVycyBvZiBDb21tZXJjZSBSb290MIIBIDANBgkqhkiG9w0BAQEFAAOC
686
- AQ0AMIIBCAKCAQEAtzZV5aVdGDDg2olUkfzIx1L4L1DZ77F1c2VHfRtbunXF/KGIJPov7coISjlU
687
- xFF6tdpg6jg8gbLL8bvZkSM/SAFwdakFKq0fcfPJVD0dBmpAPrMMhe5cG3nCYsS4No41XQEMIwRH
688
- NaqbYE6gZj3LJgqcQKH0XZi/caulAGgq7YN6D6IUtdQis4CwPAxaUWktWBiP7Zme8a7ileb2R6jW
689
- DA+wWFjbw2Y3npuRVDM30pQcakjJyfKl2qUMI/cjDpwyVV5xnIQFUZot/eZOKjRa3spAN2cMVCFV
690
- d9oKDMyXroDclDZK9D7ONhMeU+SsTjoF7Nuucpw4i9A5O4kKPnf+dQIBA6OCAUQwggFAMBIGA1Ud
691
- EwEB/wQIMAYBAf8CAQwwPAYDVR0fBDUwMzAxoC+gLYYraHR0cDovL2NybC5jaGFtYmVyc2lnbi5v
692
- cmcvY2hhbWJlcnNyb290LmNybDAdBgNVHQ4EFgQU45T1sU3p26EpW1eLTXYGduHRooowDgYDVR0P
693
- AQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzAnBgNVHREEIDAegRxjaGFtYmVyc3Jvb3RAY2hh
694
- bWJlcnNpZ24ub3JnMCcGA1UdEgQgMB6BHGNoYW1iZXJzcm9vdEBjaGFtYmVyc2lnbi5vcmcwWAYD
695
- VR0gBFEwTzBNBgsrBgEEAYGHLgoDATA+MDwGCCsGAQUFBwIBFjBodHRwOi8vY3BzLmNoYW1iZXJz
696
- aWduLm9yZy9jcHMvY2hhbWJlcnNyb290Lmh0bWwwDQYJKoZIhvcNAQEFBQADggEBAAxBl8IahsAi
697
- fJ/7kPMa0QOx7xP5IV8EnNrJpY0nbJaHkb5BkAFyk+cefV/2icZdp0AJPaxJRUXcLo0waLIJuvvD
698
- L8y6C98/d3tGfToSJI6WjzwFCm/SlCgdbQzALogi1djPHRPH8EjX1wWnz8dHnjs8NMiAT9QUu/wN
699
- UPf6s+xCX6ndbcj0dc97wXImsQEcXCz9ek60AcUFV7nnPKoF2YjpB0ZBzu9Bga5Y34OirsrXdx/n
700
- ADydb47kMgkdTXg0eDQ8lJsm7U9xxhl6vSAiSFr+S30Dt+dYvsYyTnQeaN2oaFuzPu5ifdmA6Ap1
701
- erfutGWaIZDgqtCYvDi1czyL+Nw=
702
- -----END CERTIFICATE-----
703
-
704
- Camerfirma Global Chambersign Root
705
- ==================================
706
- -----BEGIN CERTIFICATE-----
707
- MIIExTCCA62gAwIBAgIBADANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJFVTEnMCUGA1UEChMe
708
- QUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1i
709
- ZXJzaWduLm9yZzEgMB4GA1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwHhcNMDMwOTMwMTYx
710
- NDE4WhcNMzcwOTMwMTYxNDE4WjB9MQswCQYDVQQGEwJFVTEnMCUGA1UEChMeQUMgQ2FtZXJmaXJt
711
- YSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEg
712
- MB4GA1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwggEgMA0GCSqGSIb3DQEBAQUAA4IBDQAw
713
- ggEIAoIBAQCicKLQn0KuWxfH2H3PFIP8T8mhtxOviteePgQKkotgVvq0Mi+ITaFgCPS3CU6gSS9J
714
- 1tPfnZdan5QEcOw/Wdm3zGaLmFIoCQLfxS+EjXqXd7/sQJ0lcqu1PzKY+7e3/HKE5TWH+VX6ox8O
715
- by4o3Wmg2UIQxvi1RMLQQ3/bvOSiPGpVeAp3qdjqGTK3L/5cPxvusZjsyq16aUXjlg9V9ubtdepl
716
- 6DJWk0aJqCWKZQbua795B9Dxt6/tLE2Su8CoX6dnfQTyFQhwrJLWfQTSM/tMtgsL+xrJxI0DqX5c
717
- 8lCrEqWhz0hQpe/SyBoT+rB/sYIcd2oPX9wLlY/vQ37mRQklAgEDo4IBUDCCAUwwEgYDVR0TAQH/
718
- BAgwBgEB/wIBDDA/BgNVHR8EODA2MDSgMqAwhi5odHRwOi8vY3JsLmNoYW1iZXJzaWduLm9yZy9j
719
- aGFtYmVyc2lnbnJvb3QuY3JsMB0GA1UdDgQWBBRDnDafsJ4wTcbOX60Qq+UDpfqpFDAOBgNVHQ8B
720
- Af8EBAMCAQYwEQYJYIZIAYb4QgEBBAQDAgAHMCoGA1UdEQQjMCGBH2NoYW1iZXJzaWducm9vdEBj
721
- aGFtYmVyc2lnbi5vcmcwKgYDVR0SBCMwIYEfY2hhbWJlcnNpZ25yb290QGNoYW1iZXJzaWduLm9y
722
- ZzBbBgNVHSAEVDBSMFAGCysGAQQBgYcuCgEBMEEwPwYIKwYBBQUHAgEWM2h0dHA6Ly9jcHMuY2hh
723
- bWJlcnNpZ24ub3JnL2Nwcy9jaGFtYmVyc2lnbnJvb3QuaHRtbDANBgkqhkiG9w0BAQUFAAOCAQEA
724
- PDtwkfkEVCeR4e3t/mh/YV3lQWVPMvEYBZRqHN4fcNs+ezICNLUMbKGKfKX0j//U2K0X1S0E0T9Y
725
- gOKBWYi+wONGkyT+kL0mojAt6JcmVzWJdJYY9hXiryQZVgICsroPFOrGimbBhkVVi76SvpykBMdJ
726
- PJ7oKXqJ1/6v/2j1pReQvayZzKWGVwlnRtvWFsJG8eSpUPWP0ZIV018+xgBJOm5YstHRJw0lyDL4
727
- IBHNfTIzSJRUTN3cecQwn+uOuFW114hcxWokPbLTBQNRxgfvzBRydD1ucs4YKIxKoHflCStFREes
728
- t2d/AYoFWpO+ocH/+OcOZ6RHSXZddZAa9SaP8A==
729
- -----END CERTIFICATE-----
730
-
731
- XRamp Global CA Root
732
- ====================
733
- -----BEGIN CERTIFICATE-----
734
- MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UE
735
- BhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2Vj
736
- dXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB
737
- dXRob3JpdHkwHhcNMDQxMTAxMTcxNDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMx
738
- HjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkg
739
- U2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
740
- dHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS638eMpSe2OAtp87ZOqCwu
741
- IR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCPKZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMx
742
- foArtYzAQDsRhtDLooY2YKTVMIJt2W7QDxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FE
743
- zG+gSqmUsE3a56k0enI4qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqs
744
- AxcZZPRaJSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNViPvry
745
- xS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud
746
- EwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASsjVy16bYbMDYGA1UdHwQvMC0wK6Ap
747
- oCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMC
748
- AQEwDQYJKoZIhvcNAQEFBQADggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc
749
- /Kh4ZzXxHfARvbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt
750
- qZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLaIR9NmXmd4c8n
751
- nxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSyi6mx5O+aGtA9aZnuqCij4Tyz
752
- 8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQO+7ETPTsJ3xCwnR8gooJybQDJbw=
753
- -----END CERTIFICATE-----
754
-
755
- Go Daddy Class 2 CA
756
- ===================
757
- -----BEGIN CERTIFICATE-----
758
- MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMY
759
- VGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRp
760
- ZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkG
761
- A1UEBhMCVVMxITAfBgNVBAoTGFRoZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28g
762
- RGFkZHkgQ2xhc3MgMiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQAD
763
- ggENADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCAPVYYYwhv
764
- 2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6wwdhFJ2+qN1j3hybX2C32
765
- qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXiEqITLdiOr18SPaAIBQi2XKVlOARFmR6j
766
- YGB0xUGlcmIbYsUfb18aQr4CUWWoriMYavx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmY
767
- vLEHZ6IVDd2gWMZEewo+YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0O
768
- BBYEFNLEsNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h/t2o
769
- atTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMu
770
- MTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwG
771
- A1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wim
772
- PQoZ+YeAEW5p5JYXMP80kWNyOO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKt
773
- I3lpjbi2Tc7PTMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ
774
- HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mERdEr/VxqHD3VI
775
- Ls9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5CufReYNnyicsbkqWletNw+vHX/b
776
- vZ8=
777
- -----END CERTIFICATE-----
778
-
779
- Starfield Class 2 CA
780
- ====================
781
- -----BEGIN CERTIFICATE-----
782
- MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzElMCMGA1UEChMc
783
- U3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZpZWxkIENsYXNzIDIg
784
- Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQwNjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBo
785
- MQswCQYDVQQGEwJVUzElMCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAG
786
- A1UECxMpU3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqG
787
- SIb3DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf8MOh2tTY
788
- bitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN+lq2cwQlZut3f+dZxkqZ
789
- JRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVm
790
- epsZGD3/cVE8MC5fvj13c7JdBmzDI1aaK4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSN
791
- F4Azbl5KXZnJHoe0nRrA1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HF
792
- MIHCMB0GA1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fRzt0f
793
- hvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNo
794
- bm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBDbGFzcyAyIENlcnRpZmljYXRpb24g
795
- QXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGs
796
- afPzWdqbAYcaT1epoXkJKtv3L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLM
797
- PUxA2IGvd56Deruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl
798
- xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynpVSJYACPq4xJD
799
- KVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEYWQPJIrSPnNVeKtelttQKbfi3
800
- QBFGmh95DmK/D5fs4C8fF5Q=
801
- -----END CERTIFICATE-----
802
-
803
- StartCom Certification Authority
804
- ================================
805
- -----BEGIN CERTIFICATE-----
806
- MIIHyTCCBbGgAwIBAgIBATANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMN
807
- U3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmlu
808
- ZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0
809
- NjM2WhcNMzYwOTE3MTk0NjM2WjB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRk
810
- LjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMg
811
- U3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw
812
- ggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZkpMyONvg45iPwbm2xPN1y
813
- o4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rfOQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/
814
- Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/CJi/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/d
815
- eMotHweXMAEtcnn6RtYTKqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt
816
- 2PZE4XNiHzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMMAv+Z
817
- 6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w+2OqqGwaVLRcJXrJ
818
- osmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/
819
- untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVc
820
- UjyJthkqcwEKDwOzEmDyei+B26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT
821
- 37uMdBNSSwIDAQABo4ICUjCCAk4wDAYDVR0TBAUwAwEB/zALBgNVHQ8EBAMCAa4wHQYDVR0OBBYE
822
- FE4L7xqkQFulF2mHMMo0aEPQQa7yMGQGA1UdHwRdMFswLKAqoCiGJmh0dHA6Ly9jZXJ0LnN0YXJ0
823
- Y29tLm9yZy9zZnNjYS1jcmwuY3JsMCugKaAnhiVodHRwOi8vY3JsLnN0YXJ0Y29tLm9yZy9zZnNj
824
- YS1jcmwuY3JsMIIBXQYDVR0gBIIBVDCCAVAwggFMBgsrBgEEAYG1NwEBATCCATswLwYIKwYBBQUH
825
- AgEWI2h0dHA6Ly9jZXJ0LnN0YXJ0Y29tLm9yZy9wb2xpY3kucGRmMDUGCCsGAQUFBwIBFilodHRw
826
- Oi8vY2VydC5zdGFydGNvbS5vcmcvaW50ZXJtZWRpYXRlLnBkZjCB0AYIKwYBBQUHAgIwgcMwJxYg
827
- U3RhcnQgQ29tbWVyY2lhbCAoU3RhcnRDb20pIEx0ZC4wAwIBARqBl0xpbWl0ZWQgTGlhYmlsaXR5
828
- LCByZWFkIHRoZSBzZWN0aW9uICpMZWdhbCBMaW1pdGF0aW9ucyogb2YgdGhlIFN0YXJ0Q29tIENl
829
- cnRpZmljYXRpb24gQXV0aG9yaXR5IFBvbGljeSBhdmFpbGFibGUgYXQgaHR0cDovL2NlcnQuc3Rh
830
- cnRjb20ub3JnL3BvbGljeS5wZGYwEQYJYIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilT
831
- dGFydENvbSBGcmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQUFAAOC
832
- AgEAFmyZ9GYMNPXQhV59CuzaEE44HF7fpiUFS5Eyweg78T3dRAlbB0mKKctmArexmvclmAk8jhvh
833
- 3TaHK0u7aNM5Zj2gJsfyOZEdUauCe37Vzlrk4gNXcGmXCPleWKYK34wGmkUWFjgKXlf2Ysd6AgXm
834
- vB618p70qSmD+LIU424oh0TDkBreOKk8rENNZEXO3SipXPJzewT4F+irsfMuXGRuczE6Eri8sxHk
835
- fY+BUZo7jYn0TZNmezwD7dOaHZrzZVD1oNB1ny+v8OqCQ5j4aZyJecRDjkZy42Q2Eq/3JR44iZB3
836
- fsNrarnDy0RLrHiQi+fHLB5LEUTINFInzQpdn4XBidUaePKVEFMy3YCEZnXZtWgo+2EuvoSoOMCZ
837
- EoalHmdkrQYuL6lwhceWD3yJZfWOQ1QOq92lgDmUYMA0yZZwLKMS9R9Ie70cfmu3nZD0Ijuu+Pwq
838
- yvqCUqDvr0tVk+vBtfAii6w0TiYiBKGHLHVKt+V9E9e4DGTANtLJL4YSjCMJwRuCO3NJo2pXh5Tl
839
- 1njFmUNj403gdy3hZZlyaQQaRwnmDwFWJPsfvw55qVguucQJAX6Vum0ABj6y6koQOdjQK/W/7HW/
840
- lwLFCRsI3FU34oH7N4RDYiDK51ZLZer+bMEkkyShNOsF/5oirpt9P/FlUQqmMGqz9IgcgA38coro
841
- g14=
842
- -----END CERTIFICATE-----
843
-
844
- Taiwan GRCA
845
- ===========
846
- -----BEGIN CERTIFICATE-----
847
- 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
- EwJUVzEwMC4GA1UECgwnR292ZXJubWVudCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4X
849
- DTAyMTIwNTEzMjMzM1oXDTMyMTIwNTEzMjMzM1owPzELMAkGA1UEBhMCVFcxMDAuBgNVBAoMJ0dv
850
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 7tfGOB5jGxI7leFYrPLfhNVfmS8NVVvmONsuP3LpSIXLuykTjx44VbnzssQwmSNOXfJIoRIM3BKQ
870
- CZBUkQM8R+XVyWXgt0t97EfTsws+rZ7QdAAO671RrcDeLMDDav7v3Aun+kbfYNucpllQdSNpc5Oy
871
- +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
872
- -----END CERTIFICATE-----
873
-
874
- Swisscom Root CA 1
875
- ==================
876
- -----BEGIN CERTIFICATE-----
877
- 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
- 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
- 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
- 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
- aXRhbCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczEbMBkGA1UEAxMSU3dpc3Njb20gUm9vdCBDQSAxMIIC
882
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
903
- NY6E0F/6MBr1mmz0DlP5OlvRHA==
904
- -----END CERTIFICATE-----
905
-
906
- DigiCert Assured ID Root CA
907
- ===========================
908
- -----BEGIN CERTIFICATE-----
909
- MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQG
910
- EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQw
911
- IgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzEx
912
- MTEwMDAwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQL
913
- ExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0Ew
914
- ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7cJpSIqvTO
915
- 9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYPmDI2dsze3Tyoou9q+yHy
916
- UmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW
917
- /lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpy
918
- oeb6pNnVFzF1roV9Iq4/AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whf
919
- GHdPAgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRF
920
- 66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYunpyGd823IDzANBgkq
921
- hkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRCdWKuh+vy1dneVrOfzM4UKLkNl2Bc
922
- EkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTffwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38Fn
923
- SbNd67IJKusm7Xi+fT8r87cmNW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i
924
- 8b5QZ7dsvfPxH2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe
925
- +o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g==
926
- -----END CERTIFICATE-----
927
-
928
- DigiCert Global Root CA
929
- =======================
930
- -----BEGIN CERTIFICATE-----
931
- MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBhMQswCQYDVQQG
932
- EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAw
933
- HgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBDQTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAw
934
- MDAwMDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3
935
- dy5kaWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkq
936
- hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsBCSDMAZOn
937
- TjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97nh6Vfe63SKMI2tavegw5
938
- BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt43C/dxC//AH2hdmoRBBYMql1GNXRor5H
939
- 4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7PT19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y
940
- 7vrTC0LUq7dBMtoM1O/4gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQAB
941
- o2MwYTAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbRTLtm
942
- 8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUwDQYJKoZIhvcNAQEF
943
- BQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/EsrhMAtudXH/vTBH1jLuG2cenTnmCmr
944
- EbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIt
945
- tep3Sp+dWOIrWcBAI+0tKIJFPnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886
946
- UAb3LujEV0lsYSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk
947
- CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=
948
- -----END CERTIFICATE-----
949
-
950
- DigiCert High Assurance EV Root CA
951
- ==================================
952
- -----BEGIN CERTIFICATE-----
953
- MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBsMQswCQYDVQQG
954
- EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSsw
955
- KQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5jZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAw
956
- MFoXDTMxMTExMDAwMDAwMFowbDELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZ
957
- MBcGA1UECxMQd3d3LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFu
958
- Y2UgRVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm+9S75S0t
959
- Mqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTWPNt0OKRKzE0lgvdKpVMS
960
- OO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEMxChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3
961
- MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFBIk5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQ
962
- NAQTXKFx01p8VdteZOE3hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUe
963
- h10aUAsgEsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQFMAMB
964
- Af8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaAFLE+w2kD+L9HAdSY
965
- JhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3NecnzyIZgYIVyHbIUf4KmeqvxgydkAQ
966
- V8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6zeM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFp
967
- myPInngiK3BD41VHMWEZ71jFhS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkK
968
- mNEVX58Svnw2Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe
969
- vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep+OkuE6N36B9K
970
- -----END CERTIFICATE-----
971
-
972
- Certplus Class 2 Primary CA
973
- ===========================
974
- -----BEGIN CERTIFICATE-----
975
- MIIDkjCCAnqgAwIBAgIRAIW9S/PY2uNp9pTXX8OlRCMwDQYJKoZIhvcNAQEFBQAwPTELMAkGA1UE
976
- BhMCRlIxETAPBgNVBAoTCENlcnRwbHVzMRswGQYDVQQDExJDbGFzcyAyIFByaW1hcnkgQ0EwHhcN
977
- OTkwNzA3MTcwNTAwWhcNMTkwNzA2MjM1OTU5WjA9MQswCQYDVQQGEwJGUjERMA8GA1UEChMIQ2Vy
978
- dHBsdXMxGzAZBgNVBAMTEkNsYXNzIDIgUHJpbWFyeSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEP
979
- ADCCAQoCggEBANxQltAS+DXSCHh6tlJw/W/uz7kRy1134ezpfgSN1sxvc0NXYKwzCkTsA18cgCSR
980
- 5aiRVhKC9+Ar9NuuYS6JEI1rbLqzAr3VNsVINyPi8Fo3UjMXEuLRYE2+L0ER4/YXJQyLkcAbmXuZ
981
- Vg2v7tK8R1fjeUl7NIknJITesezpWE7+Tt9avkGtrAjFGA7v0lPubNCdEgETjdyAYveVqUSISnFO
982
- YFWe2yMZeVYHDD9jC1yw4r5+FfyUM1hBOHTE4Y+L3yasH7WLO7dDWWuwJKZtkIvEcupdM5i3y95e
983
- e++U8Rs+yskhwcWYAqqi9lt3m/V+llU0HGdpwPFC40es/CgcZlUCAwEAAaOBjDCBiTAPBgNVHRME
984
- CDAGAQH/AgEKMAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQU43Mt38sOKAze3bOkynm4jrvoMIkwEQYJ
985
- YIZIAYb4QgEBBAQDAgEGMDcGA1UdHwQwMC4wLKAqoCiGJmh0dHA6Ly93d3cuY2VydHBsdXMuY29t
986
- L0NSTC9jbGFzczIuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQCnVM+IRBnL39R/AN9WM2K191EBkOvD
987
- P9GIROkkXe/nFL0gt5o8AP5tn9uQ3Nf0YtaLcF3n5QRIqWh8yfFC82x/xXp8HVGIutIKPidd3i1R
988
- TtMTZGnkLuPT55sJmabglZvOGtd/vjzOUrMRFcEPF80Du5wlFbqidon8BvEY0JNLDnyCt6X09l/+
989
- 7UCmnYR0ObncHoUW2ikbhiMAybuJfm6AiB4vFLQDJKgybwOaRywwvlbGp0ICcBvqQNi6BQNwB6SW
990
- //1IMwrh3KWBkJtN3X3n57LNXMhqlfil9o3EXXgIvnsG1knPGTZQIy4I5p4FTUcY1Rbpsda2ENW7
991
- l7+ijrRU
992
- -----END CERTIFICATE-----
993
-
994
- DST Root CA X3
995
- ==============
996
- -----BEGIN CERTIFICATE-----
997
- MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/MSQwIgYDVQQK
998
- ExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMTDkRTVCBSb290IENBIFgzMB4X
999
- DTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVowPzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1
1000
- cmUgVHJ1c3QgQ28uMRcwFQYDVQQDEw5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQAD
1001
- ggEPADCCAQoCggEBAN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmT
1002
- rE4Orz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEqOLl5CjH9
1003
- UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9bxiqKqy69cK3FCxolkHRy
1004
- xXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40d
1005
- utolucbY38EVAjqr2m7xPi71XAicPNaDaeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0T
1006
- AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQ
1007
- MA0GCSqGSIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69ikug
1008
- dB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXrAvHRAosZy5Q6XkjE
1009
- GB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZzR8srzJmwN0jP41ZL9c8PDHIyh8bw
1010
- RLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubS
1011
- fZGL+T0yjWW06XyxV3bqxbYoOb8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ
1012
- -----END CERTIFICATE-----
1013
-
1014
- DST ACES CA X6
1015
- ==============
1016
- -----BEGIN CERTIFICATE-----
1017
- MIIECTCCAvGgAwIBAgIQDV6ZCtadt3js2AdWO4YV2TANBgkqhkiG9w0BAQUFADBbMQswCQYDVQQG
1018
- EwJVUzEgMB4GA1UEChMXRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QxETAPBgNVBAsTCERTVCBBQ0VT
1019
- MRcwFQYDVQQDEw5EU1QgQUNFUyBDQSBYNjAeFw0wMzExMjAyMTE5NThaFw0xNzExMjAyMTE5NTha
1020
- MFsxCzAJBgNVBAYTAlVTMSAwHgYDVQQKExdEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdDERMA8GA1UE
1021
- CxMIRFNUIEFDRVMxFzAVBgNVBAMTDkRTVCBBQ0VTIENBIFg2MIIBIjANBgkqhkiG9w0BAQEFAAOC
1022
- AQ8AMIIBCgKCAQEAuT31LMmU3HWKlV1j6IR3dma5WZFcRt2SPp/5DgO0PWGSvSMmtWPuktKe1jzI
1023
- DZBfZIGxqAgNTNj50wUoUrQBJcWVHAx+PhCEdc/BGZFjz+iokYi5Q1K7gLFViYsx+tC3dr5BPTCa
1024
- pCIlF3PoHuLTrCq9Wzgh1SpL11V94zpVvddtawJXa+ZHfAjIgrrep4c9oW24MFbCswKBXy314pow
1025
- GCi4ZtPLAZZv6opFVdbgnf9nKxcCpk4aahELfrd755jWjHZvwTvbUJN+5dCOHze4vbrGn2zpfDPy
1026
- MjwmR/onJALJfh1biEITajV8fTXpLmaRcpPVMibEdPVTo7NdmvYJywIDAQABo4HIMIHFMA8GA1Ud
1027
- EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgHGMB8GA1UdEQQYMBaBFHBraS1vcHNAdHJ1c3Rkc3Qu
1028
- Y29tMGIGA1UdIARbMFkwVwYKYIZIAWUDAgEBATBJMEcGCCsGAQUFBwIBFjtodHRwOi8vd3d3LnRy
1029
- dXN0ZHN0LmNvbS9jZXJ0aWZpY2F0ZXMvcG9saWN5L0FDRVMtaW5kZXguaHRtbDAdBgNVHQ4EFgQU
1030
- CXIGThhDD+XWzMNqizF7eI+og7gwDQYJKoZIhvcNAQEFBQADggEBAKPYjtay284F5zLNAdMEA+V2
1031
- 5FYrnJmQ6AgwbN99Pe7lv7UkQIRJ4dEorsTCOlMwiPH1d25Ryvr/ma8kXxug/fKshMrfqfBfBC6t
1032
- Fr8hlxCBPeP/h40y3JTlR4peahPJlJU90u7INJXQgNStMgiAVDzgvVJT11J8smk/f3rPanTK+gQq
1033
- nExaBqXpIK1FZg9p8d2/6eMyi/rgwYZNcjwu2JN4Cir42NInPRmJX1p7ijvMDNpRrscL9yuwNwXs
1034
- vFcj4jjSm2jzVhKIT0J8uDHEtdvkyCE06UgRNe76x5JXxZ805Mf29w4LTJxoeHtxMcfrHuBnQfO3
1035
- oKfN5XozNmr6mis=
1036
- -----END CERTIFICATE-----
1037
-
1038
- SwissSign Gold CA - G2
1039
- ======================
1040
- -----BEGIN CERTIFICATE-----
1041
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- AiTysybUa9oEVeXBCsdtMDeQKuSeFDNeFhdVxVu1yzSJkvGdJo+hB9TGsnhQ2wwMC3wLjEHXuend
1051
- jIj3o02yMszYF9rNt85mndT9Xv+9lz4pded+p2JYryU0pUHHPbwNUMoDAw8IWh+Vc3hiv69yFGkO
1052
- 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
- 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
- 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
- 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
- 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
- L3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBACe645R88a7A3hfm
1058
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
1067
- -----END CERTIFICATE-----
1068
-
1069
- SwissSign Silver CA - G2
1070
- ========================
1071
- -----BEGIN CERTIFICATE-----
1072
- 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
- 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
- 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
- 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
- 9w0BAQEFAAOCAg8AMIICCgKCAgEAxPGHf9N4Mfc4yfjDmUO8x/e8N+dOcbpLj6VzHVxumK4DV644
1077
- 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
- +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
- 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
- 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
- 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
- FZGkECwJMoBgs5PAKrYYC51+jUnyEEp/+dVGLxmSo5mnJqy7jDzmDrxHB9xzUfFwZC8I+bRHHTBs
1083
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
1098
- -----END CERTIFICATE-----
1099
-
1100
- GeoTrust Primary Certification Authority
1101
- ========================================
1102
- -----BEGIN CERTIFICATE-----
1103
- MIIDfDCCAmSgAwIBAgIQGKy1av1pthU6Y2yv2vrEoTANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQG
1104
- EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjExMC8GA1UEAxMoR2VvVHJ1c3QgUHJpbWFyeSBD
1105
- ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjExMjcwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMFgx
1106
- CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTEwLwYDVQQDEyhHZW9UcnVzdCBQ
1107
- cmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
1108
- CgKCAQEAvrgVe//UfH1nrYNke8hCUy3f9oQIIGHWAVlqnEQRr+92/ZV+zmEwu3qDXwK9AWbK7hWN
1109
- b6EwnL2hhZ6UOvNWiAAxz9juapYC2e0DjPt1befquFUWBRaa9OBesYjAZIVcFU2Ix7e64HXprQU9
1110
- nceJSOC7KMgD4TCTZF5SwFlwIjVXiIrxlQqD17wxcwE07e9GceBrAqg1cmuXm2bgyxx5X9gaBGge
1111
- RwLmnWDiNpcB3841kt++Z8dtd1k7j53WkBWUvEI0EME5+bEnPn7WinXFsq+W06Lem+SYvn3h6YGt
1112
- tm/81w7a4DSwDRp35+MImO9Y+pyEtzavwt+s0vQQBnBxNQIDAQABo0IwQDAPBgNVHRMBAf8EBTAD
1113
- AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQULNVQQZcVi/CPNmFbSvtr2ZnJM5IwDQYJKoZI
1114
- hvcNAQEFBQADggEBAFpwfyzdtzRP9YZRqSa+S7iq8XEN3GHHoOo0Hnp3DwQ16CePbJC/kRYkRj5K
1115
- Ts4rFtULUh38H2eiAkUxT87z+gOneZ1TatnaYzr4gNfTmeGl4b7UVXGYNTq+k+qurUKykG/g/CFN
1116
- NWMziUnWm07Kx+dOCQD32sfvmWKZd7aVIl6KoKv0uHiYyjgZmclynnjNS6yvGaBzEi38wkG6gZHa
1117
- Floxt/m0cYASSJlyc1pZU8FjUjPtp8nSOQJw+uCxQmYpqptR7TBUIhRf2asdweSU8Pj1K/fqynhG
1118
- 1riR/aYNKxoUAT6A8EKglQdebc3MS6RFjasS6LPeWuWgfOgPIh1a6Vk=
1119
- -----END CERTIFICATE-----
1120
-
1121
- thawte Primary Root CA
1122
- ======================
1123
- -----BEGIN CERTIFICATE-----
1124
- MIIEIDCCAwigAwIBAgIQNE7VVyDV7exJ9C/ON9srbTANBgkqhkiG9w0BAQUFADCBqTELMAkGA1UE
1125
- BhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2
1126
- aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhv
1127
- cml6ZWQgdXNlIG9ubHkxHzAdBgNVBAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwHhcNMDYxMTE3
1128
- MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCBqTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwg
1129
- SW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMv
1130
- KGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNVBAMT
1131
- FnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCs
1132
- oPD7gFnUnMekz52hWXMJEEUMDSxuaPFsW0hoSVk3/AszGcJ3f8wQLZU0HObrTQmnHNK4yZc2AreJ
1133
- 1CRfBsDMRJSUjQJib+ta3RGNKJpchJAQeg29dGYvajig4tVUROsdB58Hum/u6f1OCyn1PoSgAfGc
1134
- q/gcfomk6KHYcWUNo1F77rzSImANuVud37r8UVsLr5iy6S7pBOhih94ryNdOwUxkHt3Ph1i6Sk/K
1135
- aAcdHJ1KxtUvkcx8cXIcxcBn6zL9yZJclNqFwJu/U30rCfSMnZEfl2pSy94JNqR32HuHUETVPm4p
1136
- afs5SSYeCaWAe0At6+gnhcn+Yf1+5nyXHdWdAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYD
1137
- VR0PAQH/BAQDAgEGMB0GA1UdDgQWBBR7W0XPr87Lev0xkhpqtvNG61dIUDANBgkqhkiG9w0BAQUF
1138
- AAOCAQEAeRHAS7ORtvzw6WfUDW5FvlXok9LOAz/t2iWwHVfLHjp2oEzsUHboZHIMpKnxuIvW1oeE
1139
- uzLlQRHAd9mzYJ3rG9XRbkREqaYB7FViHXe4XI5ISXycO1cRrK1zN44veFyQaEfZYGDm/Ac9IiAX
1140
- xPcW6cTYcvnIc3zfFi8VqT79aie2oetaupgf1eNNZAqdE8hhuvU5HIe6uL17In/2/qxAeeWsEG89
1141
- jxt5dovEN7MhGITlNgDrYyCZuen+MwS7QcjBAvlEYyCegc5C09Y/LHbTY5xZ3Y+m4Q6gLkH3LpVH
1142
- z7z9M/P2C2F+fpErgUfCJzDupxBdN49cOSvkBPB7jVaMaA==
1143
- -----END CERTIFICATE-----
1144
-
1145
- VeriSign Class 3 Public Primary Certification Authority - G5
1146
- ============================================================
1147
- -----BEGIN CERTIFICATE-----
1148
- MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCByjELMAkGA1UE
1149
- BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBO
1150
- ZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVk
1151
- IHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRp
1152
- ZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCB
1153
- yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2ln
1154
- biBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZvciBh
1155
- dXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmlt
1156
- YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
1157
- ggEKAoIBAQCvJAgIKXo1nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKz
1158
- j/i5Vbext0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIzSdhD
1159
- Y2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQGBO+QueQA5N06tRn/
1160
- Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+rCpSx4/VBEnkjWNHiDxpg8v+R70r
1161
- fk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/
1162
- BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2Uv
1163
- Z2lmMCEwHzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy
1164
- aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKvMzEzMA0GCSqG
1165
- SIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzEp6B4Eq1iDkVwZMXnl2YtmAl+
1166
- X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKE
1167
- KQsTb47bDN0lAtukixlE0kF6BWlKWE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiC
1168
- Km0oHw0LxOXnGiYZ4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vE
1169
- ZV8NhnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq
1170
- -----END CERTIFICATE-----
1171
-
1172
- SecureTrust CA
1173
- ==============
1174
- -----BEGIN CERTIFICATE-----
1175
- MIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBIMQswCQYDVQQG
1176
- EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xFzAVBgNVBAMTDlNlY3VyZVRy
1177
- dXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIzMTE5NDA1NVowSDELMAkGA1UEBhMCVVMxIDAe
1178
- BgNVBAoTF1NlY3VyZVRydXN0IENvcnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTCC
1179
- ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7CT8rU4niVWJxB4Q2ZQCQX
1180
- OZEzZum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/jep4G6pkjGnx29vo6pQT64lO0pGtSO0gMdA+9t
1181
- DWccV9cGrcrI9f4Or2YlSASWC12juhbDCE/RRvgUXPLIXgGZbf2IzIaowW8xQmxSPmjL8xk037uH
1182
- GFaAJsTQ3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj7DaUaHp3pLHnDi+BeuK1cobvomuL8A/b
1183
- 01k/unK8RCSc43Oz969XL0Imnal0ugBS8kvNU3xHCzaFDmapCJcWNFfBZveA4+1wVMeT4C4oFVmH
1184
- ursCAwEAAaOBnTCBmjATBgkrBgEEAYI3FAIEBh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/
1185
- BAUwAwEB/zAdBgNVHQ4EFgQUQjK2FvoE/f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCegJYYj
1186
- aHR0cDovL2NybC5zZWN1cmV0cnVzdC5jb20vU1RDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQAwDQYJ
1187
- KoZIhvcNAQEFBQADggEBADDtT0rhWDpSclu1pqNlGKa7UTt36Z3q059c4EVlew3KW+JwULKUBRSu
1188
- SceNQQcSc5R+DCMh/bwQf2AQWnL1mA6s7Ll/3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHf
1189
- mbx8IVQr5Fiiu1cprp6poxkmD5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZ
1190
- nMUFdAvnZyPSCPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR
1191
- 3ItHuuG51WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShLHZ4swrhovO0C7jE=
1192
- -----END CERTIFICATE-----
1193
-
1194
- Secure Global CA
1195
- ================
1196
- -----BEGIN CERTIFICATE-----
1197
- MIIDvDCCAqSgAwIBAgIQB1YipOjUiolN9BPI8PjqpTANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQG
1198
- EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBH
1199
- bG9iYWwgQ0EwHhcNMDYxMTA3MTk0MjI4WhcNMjkxMjMxMTk1MjA2WjBKMQswCQYDVQQGEwJVUzEg
1200
- MB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwg
1201
- Q0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvNS7YrGxVaQZx5RNoJLNP2MwhR/jx
1202
- YDiJiQPpvepeRlMJ3Fz1Wuj3RSoC6zFh1ykzTM7HfAo3fg+6MpjhHZevj8fcyTiW89sa/FHtaMbQ
1203
- bqR8JNGuQsiWUGMu4P51/pinX0kuleM5M2SOHqRfkNJnPLLZ/kG5VacJjnIFHovdRIWCQtBJwB1g
1204
- 8NEXLJXr9qXBkqPFwqcIYA1gBBCWeZ4WNOaptvolRTnIHmX5k/Wq8VLcmZg9pYYaDDUz+kulBAYV
1205
- HDGA76oYa8J719rO+TMg1fW9ajMtgQT7sFzUnKPiXB3jqUJ1XnvUd+85VLrJChgbEplJL4hL/VBi
1206
- 0XPnj3pDAgMBAAGjgZ0wgZowEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud
1207
- EwEB/wQFMAMBAf8wHQYDVR0OBBYEFK9EBMJBfkiD2045AuzshHrmzsmkMDQGA1UdHwQtMCswKaAn
1208
- oCWGI2h0dHA6Ly9jcmwuc2VjdXJldHJ1c3QuY29tL1NHQ0EuY3JsMBAGCSsGAQQBgjcVAQQDAgEA
1209
- MA0GCSqGSIb3DQEBBQUAA4IBAQBjGghAfaReUw132HquHw0LURYD7xh8yOOvaliTFGCRsoTciE6+
1210
- OYo68+aCiV0BN7OrJKQVDpI1WkpEXk5X+nXOH0jOZvQ8QCaSmGwb7iRGDBezUqXbpZGRzzfTb+cn
1211
- CDpOGR86p1hcF895P4vkp9MmI50mD1hp/Ed+stCNi5O/KU9DaXR2Z0vPB4zmAve14bRDtUstFJ/5
1212
- 3CYNv6ZHdAbYiNE6KTCEztI5gGIbqMdXSbxqVVFnFUq+NQfk1XWYN3kwFNspnWzFacxHVaIw98xc
1213
- f8LDmBxrThaA63p4ZUWiABqvDA1VZDRIuJK58bRQKfJPIx/abKwfROHdI3hRW8cW
1214
- -----END CERTIFICATE-----
1215
-
1216
- COMODO Certification Authority
1217
- ==============================
1218
- -----BEGIN CERTIFICATE-----
1219
- MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCBgTELMAkGA1UE
1220
- BhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgG
1221
- A1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNVBAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1
1222
- dGhvcml0eTAeFw0wNjEyMDEwMDAwMDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEb
1223
- MBkGA1UECBMSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFD
1224
- T01PRE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0aG9yaXR5
1225
- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3UcEbVASY06m/weaKXTuH
1226
- +7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI2GqGd0S7WWaXUF601CxwRM/aN5VCaTww
1227
- xHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV
1228
- 4EajcNxo2f8ESIl33rXp+2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA
1229
- 1KGzqSX+DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5OnKVI
1230
- rLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW/zAOBgNVHQ8BAf8E
1231
- BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6gPKA6hjhodHRwOi8vY3JsLmNvbW9k
1232
- b2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9uQXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOC
1233
- AQEAPpiem/Yb6dc5t3iuHXIYSdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CP
1234
- OGEIqB6BCsAvIC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/
1235
- RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4zJVSk/BwJVmc
1236
- IGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5ddBA6+C4OmF4O5MBKgxTMVBbkN
1237
- +8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IBZQ==
1238
- -----END CERTIFICATE-----
1239
-
1240
- Network Solutions Certificate Authority
1241
- =======================================
1242
- -----BEGIN CERTIFICATE-----
1243
- MIID5jCCAs6gAwIBAgIQV8szb8JcFuZHFhfjkDFo4DANBgkqhkiG9w0BAQUFADBiMQswCQYDVQQG
1244
- EwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMuMTAwLgYDVQQDEydOZXR3b3Jr
1245
- IFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDYxMjAxMDAwMDAwWhcNMjkxMjMx
1246
- MjM1OTU5WjBiMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMu
1247
- MTAwLgYDVQQDEydOZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0G
1248
- CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkvH6SMG3G2I4rC7xGzuAnlt7e+foS0zwzc7MEL7xx
1249
- jOWftiJgPl9dzgn/ggwbmlFQGiaJ3dVhXRncEg8tCqJDXRfQNJIg6nPPOCwGJgl6cvf6UDL4wpPT
1250
- aaIjzkGxzOTVHzbRijr4jGPiFFlp7Q3Tf2vouAPlT2rlmGNpSAW+Lv8ztumXWWn4Zxmuk2GWRBXT
1251
- crA/vGp97Eh/jcOrqnErU2lBUzS1sLnFBgrEsEX1QV1uiUV7PTsmjHTC5dLRfbIR1PtYMiKagMnc
1252
- /Qzpf14Dl847ABSHJ3A4qY5usyd2mFHgBeMhqxrVhSI8KbWaFsWAqPS7azCPL0YCorEMIuDTAgMB
1253
- AAGjgZcwgZQwHQYDVR0OBBYEFCEwyfsA106Y2oeqKtCnLrFAMadMMA4GA1UdDwEB/wQEAwIBBjAP
1254
- BgNVHRMBAf8EBTADAQH/MFIGA1UdHwRLMEkwR6BFoEOGQWh0dHA6Ly9jcmwubmV0c29sc3NsLmNv
1255
- bS9OZXR3b3JrU29sdXRpb25zQ2VydGlmaWNhdGVBdXRob3JpdHkuY3JsMA0GCSqGSIb3DQEBBQUA
1256
- A4IBAQC7rkvnt1frf6ott3NHhWrB5KUd5Oc86fRZZXe1eltajSU24HqXLjjAV2CDmAaDn7l2em5Q
1257
- 4LqILPxFzBiwmZVRDuwduIj/h1AcgsLj4DKAv6ALR8jDMe+ZZzKATxcheQxpXN5eNK4CtSbqUN9/
1258
- GGUsyfJj4akH/nxxH2szJGoeBfcFaMBqEssuXmHLrijTfsK0ZpEmXzwuJF/LWA/rKOyvEZbz3Htv
1259
- wKeI8lN3s2Berq4o2jUsbzRF0ybh3uxbTydrFny9RAQYgrOJeRcQcT16ohZO9QHNpGxlaKFJdlxD
1260
- ydi8NmdspZS11My5vWo1ViHe2MPr+8ukYEywVaCge1ey
1261
- -----END CERTIFICATE-----
1262
-
1263
- WellsSecure Public Root Certificate Authority
1264
- =============================================
1265
- -----BEGIN CERTIFICATE-----
1266
- MIIEvTCCA6WgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoM
1267
- F1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYw
1268
- NAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcN
1269
- MDcxMjEzMTcwNzU0WhcNMjIxMjE0MDAwNzU0WjCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoMF1dl
1270
- bGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYD
1271
- VQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0G
1272
- CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDub7S9eeKPCCGeOARBJe+rWxxTkqxtnt3CxC5FlAM1
1273
- iGd0V+PfjLindo8796jE2yljDpFoNoqXjopxaAkH5OjUDk/41itMpBb570OYj7OeUt9tkTmPOL13
1274
- i0Nj67eT/DBMHAGTthP796EfvyXhdDcsHqRePGj4S78NuR4uNuip5Kf4D8uCdXw1LSLWwr8L87T8
1275
- bJVhHlfXBIEyg1J55oNjz7fLY4sR4r1e6/aN7ZVyKLSsEmLpSjPmgzKuBXWVvYSV2ypcm44uDLiB
1276
- K0HmOFafSZtsdvqKXfcBeYF8wYNABf5x/Qw/zE5gCQ5lRxAvAcAFP4/4s0HvWkJ+We/SlwxlAgMB
1277
- AAGjggE0MIIBMDAPBgNVHRMBAf8EBTADAQH/MDkGA1UdHwQyMDAwLqAsoCqGKGh0dHA6Ly9jcmwu
1278
- cGtpLndlbGxzZmFyZ28uY29tL3dzcHJjYS5jcmwwDgYDVR0PAQH/BAQDAgHGMB0GA1UdDgQWBBQm
1279
- lRkQ2eihl5H/3BnZtQQ+0nMKajCBsgYDVR0jBIGqMIGngBQmlRkQ2eihl5H/3BnZtQQ+0nMKaqGB
1280
- i6SBiDCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoMF1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRww
1281
- GgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMg
1282
- Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHmCAQEwDQYJKoZIhvcNAQEFBQADggEBALkVsUSRzCPI
1283
- K0134/iaeycNzXK7mQDKfGYZUMbVmO2rvwNa5U3lHshPcZeG1eMd/ZDJPHV3V3p9+N701NX3leZ0
1284
- bh08rnyd2wIDBSxxSyU+B+NemvVmFymIGjifz6pBA4SXa5M4esowRBskRDPQ5NHcKDj0E0M1NSlj
1285
- qHyita04pO2t/caaH/+Xc/77szWnk4bGdpEA5qxRFsQnMlzbc9qlk1eOPm01JghZ1edE13YgY+es
1286
- E2fDbbFwRnzVlhE9iW9dqKHrjQrawx0zbKPqZxmamX9LPYNRKh3KL4YMon4QLSvUFpULB6ouFJJJ
1287
- tylv2G0xffX8oRAHh84vWdw+WNs=
1288
- -----END CERTIFICATE-----
1289
-
1290
- COMODO ECC Certification Authority
1291
- ==================================
1292
- -----BEGIN CERTIFICATE-----
1293
- MIICiTCCAg+gAwIBAgIQH0evqmIAcFBUTAGem2OZKjAKBggqhkjOPQQDAzCBhTELMAkGA1UEBhMC
1294
- R0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UE
1295
- ChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBB
1296
- dXRob3JpdHkwHhcNMDgwMzA2MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0Ix
1297
- GzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMR
1298
- Q09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRo
1299
- b3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQDR3svdcmCFYX7deSRFtSrYpn1PlILBs5BAH+X
1300
- 4QokPB0BBO490o0JlwzgdeT6+3eKKvUDYEs2ixYjFq0JcfRK9ChQtP6IHG4/bC8vCVlbpVsLM5ni
1301
- wz2J+Wos77LTBumjQjBAMB0GA1UdDgQWBBR1cacZSBm8nZ3qQUfflMRId5nTeTAOBgNVHQ8BAf8E
1302
- BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjEA7wNbeqy3eApyt4jf/7VG
1303
- FAkK+qDmfQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdvGDeA
1304
- U/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY=
1305
- -----END CERTIFICATE-----
1306
-
1307
- IGC/A
1308
- =====
1309
- -----BEGIN CERTIFICATE-----
1310
- MIIEAjCCAuqgAwIBAgIFORFFEJQwDQYJKoZIhvcNAQEFBQAwgYUxCzAJBgNVBAYTAkZSMQ8wDQYD
1311
- VQQIEwZGcmFuY2UxDjAMBgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQTS9TR0ROMQ4wDAYDVQQLEwVE
1312
- Q1NTSTEOMAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2LmZy
1313
- MB4XDTAyMTIxMzE0MjkyM1oXDTIwMTAxNzE0MjkyMlowgYUxCzAJBgNVBAYTAkZSMQ8wDQYDVQQI
1314
- EwZGcmFuY2UxDjAMBgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQTS9TR0ROMQ4wDAYDVQQLEwVEQ1NT
1315
- STEOMAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2LmZyMIIB
1316
- IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsh/R0GLFMzvABIaIs9z4iPf930Pfeo2aSVz2
1317
- TqrMHLmh6yeJ8kbpO0px1R2OLc/mratjUMdUC24SyZA2xtgv2pGqaMVy/hcKshd+ebUyiHDKcMCW
1318
- So7kVc0dJ5S/znIq7Fz5cyD+vfcuiWe4u0dzEvfRNWk68gq5rv9GQkaiv6GFGvm/5P9JhfejcIYy
1319
- HF2fYPepraX/z9E0+X1bF8bc1g4oa8Ld8fUzaJ1O/Id8NhLWo4DoQw1VYZTqZDdH6nfK0LJYBcNd
1320
- frGoRpAxVs5wKpayMLh35nnAvSk7/ZR3TL0gzUEl4C7HG7vupARB0l2tEmqKm0f7yd1GQOGdPDPQ
1321
- tQIDAQABo3cwdTAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIBRjAVBgNVHSAEDjAMMAoGCCqB
1322
- egF5AQEBMB0GA1UdDgQWBBSjBS8YYFDCiQrdKyFP/45OqDAxNjAfBgNVHSMEGDAWgBSjBS8YYFDC
1323
- iQrdKyFP/45OqDAxNjANBgkqhkiG9w0BAQUFAAOCAQEABdwm2Pp3FURo/C9mOnTgXeQp/wYHE4RK
1324
- q89toB9RlPhJy3Q2FLwV3duJL92PoF189RLrn544pEfMs5bZvpwlqwN+Mw+VgQ39FuCIvjfwbF3Q
1325
- MZsyK10XZZOYYLxuj7GoPB7ZHPOpJkL5ZB3C55L29B5aqhlSXa/oovdgoPaN8In1buAKBQGVyYsg
1326
- Crpa/JosPL3Dt8ldeCUFP1YUmwza+zpI/pdpXsoQhvdOlgQITeywvl3cO45Pwf2aNjSaTFR+FwNI
1327
- lQgRHAdvhQh+XU3Endv7rs6y0bO4g2wdsrN58dhwmX7wEwLOXt1R0982gaEbeC9xs/FZTEYYKKuF
1328
- 0mBWWg==
1329
- -----END CERTIFICATE-----
1330
-
1331
- Security Communication EV RootCA1
1332
- =================================
1333
- -----BEGIN CERTIFICATE-----
1334
- MIIDfTCCAmWgAwIBAgIBADANBgkqhkiG9w0BAQUFADBgMQswCQYDVQQGEwJKUDElMCMGA1UEChMc
1335
- U0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEqMCgGA1UECxMhU2VjdXJpdHkgQ29tbXVuaWNh
1336
- dGlvbiBFViBSb290Q0ExMB4XDTA3MDYwNjAyMTIzMloXDTM3MDYwNjAyMTIzMlowYDELMAkGA1UE
1337
- BhMCSlAxJTAjBgNVBAoTHFNFQ09NIFRydXN0IFN5c3RlbXMgQ08uLExURC4xKjAoBgNVBAsTIVNl
1338
- Y3VyaXR5IENvbW11bmljYXRpb24gRVYgUm9vdENBMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
1339
- AQoCggEBALx/7FebJOD+nLpCeamIivqA4PUHKUPqjgo0No0c+qe1OXj/l3X3L+SqawSERMqm4miO
1340
- /VVQYg+kcQ7OBzgtQoVQrTyWb4vVog7P3kmJPdZkLjjlHmy1V4qe70gOzXppFodEtZDkBp2uoQSX
1341
- WHnvIEqCa4wiv+wfD+mEce3xDuS4GBPMVjZd0ZoeUWs5bmB2iDQL87PRsJ3KYeJkHcFGB7hj3R4z
1342
- ZbOOCVVSPbW9/wfrrWFVGCypaZhKqkDFMxRldAD5kd6vA0jFQFTcD4SQaCDFkpbcLuUCRarAX1T4
1343
- bepJz11sS6/vmsJWXMY1VkJqMF/Cq/biPT+zyRGPMUzXn0kCAwEAAaNCMEAwHQYDVR0OBBYEFDVK
1344
- 9U2vP9eCOKyrcWUXdYydVZPmMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqG
1345
- SIb3DQEBBQUAA4IBAQCoh+ns+EBnXcPBZsdAS5f8hxOQWsTvoMpfi7ent/HWtWS3irO4G8za+6xm
1346
- iEHO6Pzk2x6Ipu0nUBsCMCRGef4Eh3CXQHPRwMFXGZpppSeZq51ihPZRwSzJIxXYKLerJRO1RuGG
1347
- Av8mjMSIkh1W/hln8lXkgKNrnKt34VFxDSDbEJrbvXZ5B3eZKK2aXtqxT0QsNY6llsf9g/BYxnnW
1348
- mHyojf6GPgcWkuF75x3sM3Z+Qi5KhfmRiWiEA4Glm5q+4zfFVKtWOxgtQaQM+ELbmaDgcm+7XeEW
1349
- T1MKZPlO9L9OVL14bIjqv5wTJMJwaaJ/D8g8rQjJsJhAoyrniIPtd490
1350
- -----END CERTIFICATE-----
1351
-
1352
- OISTE WISeKey Global Root GA CA
1353
- ===============================
1354
- -----BEGIN CERTIFICATE-----
1355
- MIID8TCCAtmgAwIBAgIQQT1yx/RrH4FDffHSKFTfmjANBgkqhkiG9w0BAQUFADCBijELMAkGA1UE
1356
- BhMCQ0gxEDAOBgNVBAoTB1dJU2VLZXkxGzAZBgNVBAsTEkNvcHlyaWdodCAoYykgMjAwNTEiMCAG
1357
- A1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNlZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBH
1358
- bG9iYWwgUm9vdCBHQSBDQTAeFw0wNTEyMTExNjAzNDRaFw0zNzEyMTExNjA5NTFaMIGKMQswCQYD
1359
- VQQGEwJDSDEQMA4GA1UEChMHV0lTZUtleTEbMBkGA1UECxMSQ29weXJpZ2h0IChjKSAyMDA1MSIw
1360
- IAYDVQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5
1361
- IEdsb2JhbCBSb290IEdBIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAy0+zAJs9
1362
- Nt350UlqaxBJH+zYK7LG+DKBKUOVTJoZIyEVRd7jyBxRVVuuk+g3/ytr6dTqvirdqFEr12bDYVxg
1363
- Asj1znJ7O7jyTmUIms2kahnBAbtzptf2w93NvKSLtZlhuAGio9RN1AU9ka34tAhxZK9w8RxrfvbD
1364
- d50kc3vkDIzh2TbhmYsFmQvtRTEJysIA2/dyoJaqlYfQjse2YXMNdmaM3Bu0Y6Kff5MTMPGhJ9vZ
1365
- /yxViJGg4E8HsChWjBgbl0SOid3gF27nKu+POQoxhILYQBRJLnpB5Kf+42TMwVlxSywhp1t94B3R
1366
- LoGbw9ho972WG6xwsRYUC9tguSYBBQIDAQABo1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUw
1367
- AwEB/zAdBgNVHQ4EFgQUswN+rja8sHnR3JQmthG+IbJphpQwEAYJKwYBBAGCNxUBBAMCAQAwDQYJ
1368
- KoZIhvcNAQEFBQADggEBAEuh/wuHbrP5wUOxSPMowB0uyQlB+pQAHKSkq0lPjz0e701vvbyk9vIm
1369
- MMkQyh2I+3QZH4VFvbBsUfk2ftv1TDI6QU9bR8/oCy22xBmddMVHxjtqD6wU2zz0c5ypBd8A3HR4
1370
- +vg1YFkCExh8vPtNsCBtQ7tgMHpnM1zFmdH4LTlSc/uMqpclXHLZCB6rTjzjgTGfA6b7wP4piFXa
1371
- hNVQA7bihKOmNqoROgHhGEvWRGizPflTdISzRpFGlgC3gCy24eMQ4tui5yiPAZZiFj4A4xylNoEY
1372
- okxSdsARo27mHbrjWr42U8U+dY+GaSlYU7Wcu2+fXMUY7N0v4ZjJ/L7fCg0=
1373
- -----END CERTIFICATE-----
1374
-
1375
- Microsec e-Szigno Root CA
1376
- =========================
1377
- -----BEGIN CERTIFICATE-----
1378
- MIIHqDCCBpCgAwIBAgIRAMy4579OKRr9otxmpRwsDxEwDQYJKoZIhvcNAQEFBQAwcjELMAkGA1UE
1379
- BhMCSFUxETAPBgNVBAcTCEJ1ZGFwZXN0MRYwFAYDVQQKEw1NaWNyb3NlYyBMdGQuMRQwEgYDVQQL
1380
- EwtlLVN6aWdubyBDQTEiMCAGA1UEAxMZTWljcm9zZWMgZS1Temlnbm8gUm9vdCBDQTAeFw0wNTA0
1381
- MDYxMjI4NDRaFw0xNzA0MDYxMjI4NDRaMHIxCzAJBgNVBAYTAkhVMREwDwYDVQQHEwhCdWRhcGVz
1382
- dDEWMBQGA1UEChMNTWljcm9zZWMgTHRkLjEUMBIGA1UECxMLZS1Temlnbm8gQ0ExIjAgBgNVBAMT
1383
- GU1pY3Jvc2VjIGUtU3ppZ25vIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
1384
- AQDtyADVgXvNOABHzNuEwSFpLHSQDCHZU4ftPkNEU6+r+ICbPHiN1I2uuO/TEdyB5s87lozWbxXG
1385
- d36hL+BfkrYn13aaHUM86tnsL+4582pnS4uCzyL4ZVX+LMsvfUh6PXX5qqAnu3jCBspRwn5mS6/N
1386
- oqdNAoI/gqyFxuEPkEeZlApxcpMqyabAvjxWTHOSJ/FrtfX9/DAFYJLG65Z+AZHCabEeHXtTRbjc
1387
- QR/Ji3HWVBTji1R4P770Yjtb9aPs1ZJ04nQw7wHb4dSrmZsqa/i9phyGI0Jf7Enemotb9HI6QMVJ
1388
- PqW+jqpx62z69Rrkav17fVVA71hu5tnVvCSrwe+3AgMBAAGjggQ3MIIEMzBnBggrBgEFBQcBAQRb
1389
- MFkwKAYIKwYBBQUHMAGGHGh0dHBzOi8vcmNhLmUtc3ppZ25vLmh1L29jc3AwLQYIKwYBBQUHMAKG
1390
- IWh0dHA6Ly93d3cuZS1zemlnbm8uaHUvUm9vdENBLmNydDAPBgNVHRMBAf8EBTADAQH/MIIBcwYD
1391
- VR0gBIIBajCCAWYwggFiBgwrBgEEAYGoGAIBAQEwggFQMCgGCCsGAQUFBwIBFhxodHRwOi8vd3d3
1392
- LmUtc3ppZ25vLmh1L1NaU1ovMIIBIgYIKwYBBQUHAgIwggEUHoIBEABBACAAdABhAG4A+gBzAO0A
1393
- dAB2AOEAbgB5ACAA6QByAHQAZQBsAG0AZQB6AOkAcwDpAGgAZQB6ACAA6QBzACAAZQBsAGYAbwBn
1394
- AGEAZADhAHMA4QBoAG8AegAgAGEAIABTAHoAbwBsAGcA4QBsAHQAYQB0APMAIABTAHoAbwBsAGcA
1395
- 4QBsAHQAYQB0AOEAcwBpACAAUwB6AGEAYgDhAGwAeQB6AGEAdABhACAAcwB6AGUAcgBpAG4AdAAg
1396
- AGsAZQBsAGwAIABlAGwAagDhAHIAbgBpADoAIABoAHQAdABwADoALwAvAHcAdwB3AC4AZQAtAHMA
1397
- egBpAGcAbgBvAC4AaAB1AC8AUwBaAFMAWgAvMIHIBgNVHR8EgcAwgb0wgbqggbeggbSGIWh0dHA6
1398
- Ly93d3cuZS1zemlnbm8uaHUvUm9vdENBLmNybIaBjmxkYXA6Ly9sZGFwLmUtc3ppZ25vLmh1L0NO
1399
- PU1pY3Jvc2VjJTIwZS1Temlnbm8lMjBSb290JTIwQ0EsT1U9ZS1Temlnbm8lMjBDQSxPPU1pY3Jv
1400
- c2VjJTIwTHRkLixMPUJ1ZGFwZXN0LEM9SFU/Y2VydGlmaWNhdGVSZXZvY2F0aW9uTGlzdDtiaW5h
1401
- cnkwDgYDVR0PAQH/BAQDAgEGMIGWBgNVHREEgY4wgYuBEGluZm9AZS1zemlnbm8uaHWkdzB1MSMw
1402
- IQYDVQQDDBpNaWNyb3NlYyBlLVN6aWduw7MgUm9vdCBDQTEWMBQGA1UECwwNZS1TemlnbsOzIEhT
1403
- WjEWMBQGA1UEChMNTWljcm9zZWMgS2Z0LjERMA8GA1UEBxMIQnVkYXBlc3QxCzAJBgNVBAYTAkhV
1404
- MIGsBgNVHSMEgaQwgaGAFMegSXUWYYTbMUuE0vE3QJDvTtz3oXakdDByMQswCQYDVQQGEwJIVTER
1405
- MA8GA1UEBxMIQnVkYXBlc3QxFjAUBgNVBAoTDU1pY3Jvc2VjIEx0ZC4xFDASBgNVBAsTC2UtU3pp
1406
- Z25vIENBMSIwIAYDVQQDExlNaWNyb3NlYyBlLVN6aWdubyBSb290IENBghEAzLjnv04pGv2i3Gal
1407
- HCwPETAdBgNVHQ4EFgQUx6BJdRZhhNsxS4TS8TdAkO9O3PcwDQYJKoZIhvcNAQEFBQADggEBANMT
1408
- nGZjWS7KXHAM/IO8VbH0jgdsZifOwTsgqRy7RlRw7lrMoHfqaEQn6/Ip3Xep1fvj1KcExJW4C+FE
1409
- aGAHQzAxQmHl7tnlJNUb3+FKG6qfx1/4ehHqE5MAyopYse7tDk2016g2JnzgOsHVV4Lxdbb9iV/a
1410
- 86g4nzUGCM4ilb7N1fy+W955a9x6qWVmvrElWl/tftOsRm1M9DKHtCAE4Gx4sHfRhUZLphK3dehK
1411
- yVZs15KrnfVJONJPU+NVkBHbmJbGSfI+9J8b4PeI3CVimUTYc78/MPMMNz7UwiiAc7EBt51alhQB
1412
- S6kRnSlqLtBdgcDPsiBDxwPgN05dCtxZICU=
1413
- -----END CERTIFICATE-----
1414
-
1415
- Certigna
1416
- ========
1417
- -----BEGIN CERTIFICATE-----
1418
- MIIDqDCCApCgAwIBAgIJAP7c4wEPyUj/MA0GCSqGSIb3DQEBBQUAMDQxCzAJBgNVBAYTAkZSMRIw
1419
- EAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hMB4XDTA3MDYyOTE1MTMwNVoXDTI3
1420
- MDYyOTE1MTMwNVowNDELMAkGA1UEBhMCRlIxEjAQBgNVBAoMCURoaW15b3RpczERMA8GA1UEAwwI
1421
- Q2VydGlnbmEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDIaPHJ1tazNHUmgh7stL7q
1422
- XOEm7RFHYeGifBZ4QCHkYJ5ayGPhxLGWkv8YbWkj4Sti993iNi+RB7lIzw7sebYs5zRLcAglozyH
1423
- GxnygQcPOJAZ0xH+hrTy0V4eHpbNgGzOOzGTtvKg0KmVEn2lmsxryIRWijOp5yIVUxbwzBfsV1/p
1424
- ogqYCd7jX5xv3EjjhQsVWqa6n6xI4wmy9/Qy3l40vhx4XUJbzg4ij02Q130yGLMLLGq/jj8UEYkg
1425
- DncUtT2UCIf3JR7VsmAA7G8qKCVuKj4YYxclPz5EIBb2JsglrgVKtOdjLPOMFlN+XPsRGgjBRmKf
1426
- Irjxwo1p3Po6WAbfAgMBAAGjgbwwgbkwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUGu3+QTmQ
1427
- tCRZvgHyUtVF9lo53BEwZAYDVR0jBF0wW4AUGu3+QTmQtCRZvgHyUtVF9lo53BGhOKQ2MDQxCzAJ
1428
- BgNVBAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hggkA/tzjAQ/J
1429
- SP8wDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG9w0BAQUFAAOCAQEA
1430
- hQMeknH2Qq/ho2Ge6/PAD/Kl1NqV5ta+aDY9fm4fTIrv0Q8hbV6lUmPOEvjvKtpv6zf+EwLHyzs+
1431
- ImvaYS5/1HI93TDhHkxAGYwP15zRgzB7mFncfca5DClMoTOi62c6ZYTTluLtdkVwj7Ur3vkj1klu
1432
- PBS1xp81HlDQwY9qcEQCYsuuHWhBp6pX6FOqB9IG9tUUBguRA3UsbHK1YZWaDYu5Def131TN3ubY
1433
- 1gkIl2PlwS6wt0QmwCbAr1UwnjvVNioZBPRcHv/PLLf/0P2HQBHVESO7SMAhqaQoLf0V+LBOK/Qw
1434
- WyH8EZE0vkHve52Xdf+XlcCWWC/qu0bXu+TZLg==
1435
- -----END CERTIFICATE-----
1436
-
1437
- Deutsche Telekom Root CA 2
1438
- ==========================
1439
- -----BEGIN CERTIFICATE-----
1440
- MIIDnzCCAoegAwIBAgIBJjANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJERTEcMBoGA1UEChMT
1441
- RGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxlU2VjIFRydXN0IENlbnRlcjEjMCEG
1442
- A1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290IENBIDIwHhcNOTkwNzA5MTIxMTAwWhcNMTkwNzA5
1443
- MjM1OTAwWjBxMQswCQYDVQQGEwJERTEcMBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0G
1444
- A1UECxMWVC1UZWxlU2VjIFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBS
1445
- b290IENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCrC6M14IspFLEUha88EOQ5
1446
- bzVdSq7d6mGNlUn0b2SjGmBmpKlAIoTZ1KXleJMOaAGtuU1cOs7TuKhCQN/Po7qCWWqSG6wcmtoI
1447
- KyUn+WkjR/Hg6yx6m/UTAtB+NHzCnjwAWav12gz1MjwrrFDa1sPeg5TKqAyZMg4ISFZbavva4VhY
1448
- AUlfckE8FQYBjl2tqriTtM2e66foai1SNNs671x1Udrb8zH57nGYMsRUFUQM+ZtV7a3fGAigo4aK
1449
- Se5TBY8ZTNXeWHmb0mocQqvF1afPaA+W5OFhmHZhyJF81j4A4pFQh+GdCuatl9Idxjp9y7zaAzTV
1450
- jlsB9WoHtxa2bkp/AgMBAAGjQjBAMB0GA1UdDgQWBBQxw3kbuvVT1xfgiXotF2wKsyudMzAPBgNV
1451
- HRMECDAGAQH/AgEFMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAlGRZrTlk5ynr
1452
- E/5aw4sTV8gEJPB0d8Bg42f76Ymmg7+Wgnxu1MM9756AbrsptJh6sTtU6zkXR34ajgv8HzFZMQSy
1453
- zhfzLMdiNlXiItiJVbSYSKpk+tYcNthEeFpaIzpXl/V6ME+un2pMSyuOoAPjPuCp1NJ70rOo4nI8
1454
- rZ7/gFnkm0W09juwzTkZmDLl6iFhkOQxIY40sfcvNUqFENrnijchvllj4PKFiDFT1FQUhXB59C4G
1455
- dyd1Lx+4ivn+xbrYNuSD7Odlt79jWvNGr4GUN9RBjNYj1h7P9WgbRGOiWrqnNVmh5XAFmw4jV5mU
1456
- Cm26OWMohpLzGITY+9HPBVZkVw==
1457
- -----END CERTIFICATE-----
1458
-
1459
- Cybertrust Global Root
1460
- ======================
1461
- -----BEGIN CERTIFICATE-----
1462
- MIIDoTCCAomgAwIBAgILBAAAAAABD4WqLUgwDQYJKoZIhvcNAQEFBQAwOzEYMBYGA1UEChMPQ3li
1463
- ZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2JhbCBSb290MB4XDTA2MTIxNTA4
1464
- MDAwMFoXDTIxMTIxNTA4MDAwMFowOzEYMBYGA1UEChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQD
1465
- ExZDeWJlcnRydXN0IEdsb2JhbCBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
1466
- +Mi8vRRQZhP/8NN57CPytxrHjoXxEnOmGaoQ25yiZXRadz5RfVb23CO21O1fWLE3TdVJDm71aofW
1467
- 0ozSJ8bi/zafmGWgE07GKmSb1ZASzxQG9Dvj1Ci+6A74q05IlG2OlTEQXO2iLb3VOm2yHLtgwEZL
1468
- AfVJrn5GitB0jaEMAs7u/OePuGtm839EAL9mJRQr3RAwHQeWP032a7iPt3sMpTjr3kfb1V05/Iin
1469
- 89cqdPHoWqI7n1C6poxFNcJQZZXcY4Lv3b93TZxiyWNzFtApD0mpSPCzqrdsxacwOUBdrsTiXSZT
1470
- 8M4cIwhhqJQZugRiQOwfOHB3EgZxpzAYXSUnpQIDAQABo4GlMIGiMA4GA1UdDwEB/wQEAwIBBjAP
1471
- BgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBS2CHsNesysIEyGVjJez6tuhS1wVzA/BgNVHR8EODA2
1472
- MDSgMqAwhi5odHRwOi8vd3d3Mi5wdWJsaWMtdHJ1c3QuY29tL2NybC9jdC9jdHJvb3QuY3JsMB8G
1473
- A1UdIwQYMBaAFLYIew16zKwgTIZWMl7Pq26FLXBXMA0GCSqGSIb3DQEBBQUAA4IBAQBW7wojoFRO
1474
- lZfJ+InaRcHUowAl9B8Tq7ejhVhpwjCt2BWKLePJzYFa+HMjWqd8BfP9IjsO0QbE2zZMcwSO5bAi
1475
- 5MXzLqXZI+O4Tkogp24CJJ8iYGd7ix1yCcUxXOl5n4BHPa2hCwcUPUf/A2kaDAtE52Mlp3+yybh2
1476
- hO0j9n0Hq0V+09+zv+mKts2oomcrUtW3ZfA5TGOgkXmTUg9U3YO7n9GPp1Nzw8v/MOx8BLjYRB+T
1477
- X3EJIrduPuocA06dGiBh+4E37F78CkWr1+cXVdCg6mCbpvbjjFspwgZgFJ0tl0ypkxWdYcQBX0jW
1478
- WL1WMRJOEcgh4LMRkWXbtKaIOM5V
1479
- -----END CERTIFICATE-----
1480
-
1481
- ePKI Root Certification Authority
1482
- =================================
1483
- -----BEGIN CERTIFICATE-----
1484
- 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
- EwJUVzEjMCEGA1UECgwaQ2h1bmdod2EgVGVsZWNvbSBDby4sIEx0ZC4xKjAoBgNVBAsMIWVQS0kg
1486
- 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
- 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
- MCgGA1UECwwhZVBLSSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0B
1489
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- lQ2zepr7BxB4EW/hj8e6DyUadCrlHJhBmd8hh+iVBmoKs2pHdmX2Os+PYhcZewoozRrSgx4hxyy/
1497
- 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
- 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
- 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
- ClZ87lt4DJX5GFPBphzYEDANBgkqhkiG9w0BAQUFAAOCAgEACbODU1kBPpVJufGBuvl2ICO1J2B0
1501
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- BCEIZ43ygknQW/2xzQ+DhNQ+IIX3Sj0rnP0qCglN6oH4EZw=
1510
- -----END CERTIFICATE-----
1511
-
1512
- 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
1513
- =============================================================================================================================
1514
- -----BEGIN CERTIFICATE-----
1515
- MIIFFzCCA/+gAwIBAgIBETANBgkqhkiG9w0BAQUFADCCASsxCzAJBgNVBAYTAlRSMRgwFgYDVQQH
1516
- DA9HZWJ6ZSAtIEtvY2FlbGkxRzBFBgNVBAoMPlTDvHJraXllIEJpbGltc2VsIHZlIFRla25vbG9q
1517
- aWsgQXJhxZ90xLFybWEgS3VydW11IC0gVMOcQsSwVEFLMUgwRgYDVQQLDD9VbHVzYWwgRWxla3Ry
1518
- b25payB2ZSBLcmlwdG9sb2ppIEFyYcWfdMSxcm1hIEVuc3RpdMO8c8O8IC0gVUVLQUUxIzAhBgNV
1519
- BAsMGkthbXUgU2VydGlmaWthc3lvbiBNZXJrZXppMUowSAYDVQQDDEFUw5xCxLBUQUsgVUVLQUUg
1520
- S8O2ayBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsSAtIFPDvHLDvG0gMzAeFw0wNzA4
1521
- MjQxMTM3MDdaFw0xNzA4MjExMTM3MDdaMIIBKzELMAkGA1UEBhMCVFIxGDAWBgNVBAcMD0dlYnpl
1522
- IC0gS29jYWVsaTFHMEUGA1UECgw+VMO8cmtpeWUgQmlsaW1zZWwgdmUgVGVrbm9sb2ppayBBcmHF
1523
- n3TEsXJtYSBLdXJ1bXUgLSBUw5xCxLBUQUsxSDBGBgNVBAsMP1VsdXNhbCBFbGVrdHJvbmlrIHZl
1524
- IEtyaXB0b2xvamkgQXJhxZ90xLFybWEgRW5zdGl0w7xzw7wgLSBVRUtBRTEjMCEGA1UECwwaS2Ft
1525
- dSBTZXJ0aWZpa2FzeW9uIE1lcmtlemkxSjBIBgNVBAMMQVTDnELEsFRBSyBVRUtBRSBLw7ZrIFNl
1526
- cnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxIC0gU8O8csO8bSAzMIIBIjANBgkqhkiG9w0B
1527
- AQEFAAOCAQ8AMIIBCgKCAQEAim1L/xCIOsP2fpTo6iBkcK4hgb46ezzb8R1Sf1n68yJMlaCQvEhO
1528
- Eav7t7WNeoMojCZG2E6VQIdhn8WebYGHV2yKO7Rm6sxA/OOqbLLLAdsyv9Lrhc+hDVXDWzhXcLh1
1529
- xnnRFDDtG1hba+818qEhTsXOfJlfbLm4IpNQp81McGq+agV/E5wrHur+R84EpW+sky58K5+eeROR
1530
- 6Oqeyjh1jmKwlZMq5d/pXpduIF9fhHpEORlAHLpVK/swsoHvhOPc7Jg4OQOFCKlUAwUp8MmPi+oL
1531
- hmUZEdPpCSPeaJMDyTYcIW7OjGbxmTDY17PDHfiBLqi9ggtm/oLL4eAagsNAgQIDAQABo0IwQDAd
1532
- BgNVHQ4EFgQUvYiHyY/2pAoLquvF/pEjnatKijIwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF
1533
- MAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAB18+kmPNOm3JpIWmgV050vQbTlswyb2zrgxvMTfvCr4
1534
- N5EY3ATIZJkrGG2AA1nJrvhY0D7twyOfaTyGOBye79oneNGEN3GKPEs5z35FBtYt2IpNeBLWrcLT
1535
- y9LQQfMmNkqblWwM7uXRQydmwYj3erMgbOqwaSvHIOgMA8RBBZniP+Rr+KCGgceExh/VS4ESshYh
1536
- LBOhgLJeDEoTniDYYkCrkOpkSi+sDQESeUWoL4cZaMjihccwsnX5OD+ywJO0a+IDRM5noN+J1q2M
1537
- dqMTw5RhK2vZbMEHCiIHhWyFJEapvj+LeISCfiQMnf2BN+MlqO02TpUsyZyQ2uypQjyttgI=
1538
- -----END CERTIFICATE-----
1539
-
1540
- Buypass Class 2 CA 1
1541
- ====================
1542
- -----BEGIN CERTIFICATE-----
1543
- MIIDUzCCAjugAwIBAgIBATANBgkqhkiG9w0BAQUFADBLMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU
1544
- QnV5cGFzcyBBUy05ODMxNjMzMjcxHTAbBgNVBAMMFEJ1eXBhc3MgQ2xhc3MgMiBDQSAxMB4XDTA2
1545
- MTAxMzEwMjUwOVoXDTE2MTAxMzEwMjUwOVowSzELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBh
1546
- c3MgQVMtOTgzMTYzMzI3MR0wGwYDVQQDDBRCdXlwYXNzIENsYXNzIDIgQ0EgMTCCASIwDQYJKoZI
1547
- hvcNAQEBBQADggEPADCCAQoCggEBAIs8B0XY9t/mx8q6jUPFR42wWsE425KEHK8T1A9vNkYgxC7M
1548
- cXA0ojTTNy7Y3Tp3L8DrKehc0rWpkTSHIln+zNvnma+WwajHQN2lFYxuyHyXA8vmIPLXl18xoS83
1549
- 0r7uvqmtqEyeIWZDO6i88wmjONVZJMHCR3axiFyCO7srpgTXjAePzdVBHfCuuCkslFJgNJQ72uA4
1550
- 0Z0zPhX0kzLFANq1KWYOOngPIVJfAuWSeyXTkh4vFZ2B5J2O6O+JzhRMVB0cgRJNcKi+EAUXfh/R
1551
- uFdV7c27UsKwHnjCTTZoy1YmwVLBvXb3WNVyfh9EdrsAiR0WnVE1703CVu9r4Iw7DekCAwEAAaNC
1552
- MEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUP42aWYv8e3uco684sDntkHGA1sgwDgYDVR0P
1553
- AQH/BAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQAVGn4TirnoB6NLJzKyQJHyIdFkhb5jatLPgcIV
1554
- 1Xp+DCmsNx4cfHZSldq1fyOhKXdlyTKdqC5Wq2B2zha0jX94wNWZUYN/Xtm+DKhQ7SLHrQVMdvvt
1555
- 7h5HZPb3J31cKA9FxVxiXqaakZG3Uxcu3K1gnZZkOb1naLKuBctN518fV4bVIJwo+28TOPX2EZL2
1556
- fZleHwzoq0QkKXJAPTZSr4xYkHPB7GEseaHsh7U/2k3ZIQAw3pDaDtMaSKk+hQsUi4y8QZ5q9w5w
1557
- wDX3OaJdZtB7WZ+oRxKaJyOkLY4ng5IgodcVf/EuGO70SH8vf/GhGLWhC5SgYiAynB321O+/TIho
1558
- -----END CERTIFICATE-----
1559
-
1560
- EBG Elektronik Sertifika Hizmet Sa\xC4\x9Flay\xc4\xb1\x63\xc4\xb1s\xc4\xb1
1561
- ==========================================================================
1562
- -----BEGIN CERTIFICATE-----
1563
- MIIF5zCCA8+gAwIBAgIITK9zQhyOdAIwDQYJKoZIhvcNAQEFBQAwgYAxODA2BgNVBAMML0VCRyBF
1564
- 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
- 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
- Fw0wNjA4MTcwMDIxMDlaFw0xNjA4MTQwMDMxMDlaMIGAMTgwNgYDVQQDDC9FQkcgRWxla3Ryb25p
1567
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- qkuNKgPlV5EQ9GooFW5Hd4RcUXSfGenmHmMWOeMRFeNYGkS9y8RsZteEBt8w9DeiQyJ50hBs37vm
1577
- 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
- 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
- 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
- Z5b6SqMHwQSny2re2kcwDQYJKoZIhvcNAQEFBQADggIBAJuYml2+8ygjdsZs93/mQJ7ANtyVDR2t
1581
- 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
- zJNSroIBk5DKd8pNSe/iWtkqvTDOTLKBtjDOWU/aWR1qeqRFsIImgYZ29fUQALjuswnoT4cCB64k
1583
- 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
- bCmYIai7FvOpEl90tYeY8pUm3zTvilORiF0alKM/fCL414i6poyWqD1SNGKfAB5UVUJnxk1Gj7sU
1585
- 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
- 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
- 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
- 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
- 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
1590
- -----END CERTIFICATE-----
1591
-
1592
- certSIGN ROOT CA
1593
- ================
1594
- -----BEGIN CERTIFICATE-----
1595
- MIIDODCCAiCgAwIBAgIGIAYFFnACMA0GCSqGSIb3DQEBBQUAMDsxCzAJBgNVBAYTAlJPMREwDwYD
1596
- VQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBDQTAeFw0wNjA3MDQxNzIwMDRa
1597
- Fw0zMTA3MDQxNzIwMDRaMDsxCzAJBgNVBAYTAlJPMREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UE
1598
- CxMQY2VydFNJR04gUk9PVCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALczuX7I
1599
- JUqOtdu0KBuqV5Do0SLTZLrTk+jUrIZhQGpgV2hUhE28alQCBf/fm5oqrl0Hj0rDKH/v+yv6efHH
1600
- rfAQUySQi2bJqIirr1qjAOm+ukbuW3N7LBeCgV5iLKECZbO9xSsAfsT8AzNXDe3i+s5dRdY4zTW2
1601
- ssHQnIFKquSyAVwdj1+ZxLGt24gh65AIgoDzMKND5pCCrlUoSe1b16kQOA7+j0xbm0bqQfWwCHTD
1602
- 0IgztnzXdN/chNFDDnU5oSVAKOp4yw4sLjmdjItuFhwvJoIQ4uNllAoEwF73XVv4EOLQunpL+943
1603
- AAAaWyjj0pxzPjKHmKHJUS/X3qwzs08CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8B
1604
- Af8EBAMCAcYwHQYDVR0OBBYEFOCMm9slSbPxfIbWskKHC9BroNnkMA0GCSqGSIb3DQEBBQUAA4IB
1605
- AQA+0hyJLjX8+HXd5n9liPRyTMks1zJO890ZeUe9jjtbkw9QSSQTaxQGcu8J06Gh40CEyecYMnQ8
1606
- SG4Pn0vU9x7Tk4ZkVJdjclDVVc/6IJMCopvDI5NOFlV2oHB5bc0hH88vLbwZ44gx+FkagQnIl6Z0
1607
- x2DEW8xXjrJ1/RsCCdtZb3KTafcxQdaIOL+Hsr0Wefmq5L6IJd1hJyMctTEHBDa0GpC9oHRxUIlt
1608
- vBTjD4au8as+x6AJzKNI0eDbZOeStc+vckNwi/nDhDwTqn6Sm1dTk/pwwpEOMfmbZ13pljheX7Nz
1609
- TogVZ96edhBiIL5VaZVDADlN9u6wWk5JRFRYX0KD
1610
- -----END CERTIFICATE-----
1611
-
1612
- CNNIC ROOT
1613
- ==========
1614
- -----BEGIN CERTIFICATE-----
1615
- MIIDVTCCAj2gAwIBAgIESTMAATANBgkqhkiG9w0BAQUFADAyMQswCQYDVQQGEwJDTjEOMAwGA1UE
1616
- ChMFQ05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1QwHhcNMDcwNDE2MDcwOTE0WhcNMjcwNDE2MDcw
1617
- OTE0WjAyMQswCQYDVQQGEwJDTjEOMAwGA1UEChMFQ05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1Qw
1618
- ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDTNfc/c3et6FtzF8LRb+1VvG7q6KR5smzD
1619
- o+/hn7E7SIX1mlwhIhAsxYLO2uOabjfhhyzcuQxauohV3/2q2x8x6gHx3zkBwRP9SFIhxFXf2tiz
1620
- VHa6dLG3fdfA6PZZxU3Iva0fFNrfWEQlMhkqx35+jq44sDB7R3IJMfAw28Mbdim7aXZOV/kbZKKT
1621
- VrdvmW7bCgScEeOAH8tjlBAKqeFkgjH5jCftppkA9nCTGPihNIaj3XrCGHn2emU1z5DrvTOTn1Or
1622
- czvmmzQgLx3vqR1jGqCA2wMv+SYahtKNu6m+UjqHZ0gNv7Sg2Ca+I19zN38m5pIEo3/PIKe38zrK
1623
- y5nLAgMBAAGjczBxMBEGCWCGSAGG+EIBAQQEAwIABzAfBgNVHSMEGDAWgBRl8jGtKvf33VKWCscC
1624
- wQ7vptU7ETAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIB/jAdBgNVHQ4EFgQUZfIxrSr3991S
1625
- lgrHAsEO76bVOxEwDQYJKoZIhvcNAQEFBQADggEBAEs17szkrr/Dbq2flTtLP1se31cpolnKOOK5
1626
- Gv+e5m4y3R6u6jW39ZORTtpC4cMXYFDy0VwmuYK36m3knITnA3kXr5g9lNvHugDnuL8BV8F3RTIM
1627
- O/G0HAiw/VGgod2aHRM2mm23xzy54cXZF/qD1T0VoDy7HgviyJA/qIYM/PmLXoXLT1tLYhFHxUV8
1628
- BS9BsZ4QaRuZluBVeftOhpm4lNqGOGqTo+fLbuXf6iFViZx9fX+Y9QCJ7uOEwFyWtcVG6kbghVW2
1629
- G8kS1sHNzYDzAgE8yGnLRUhj2JTQ7IUOO04RZfSCjKY9ri4ilAnIXOo8gV0WKgOXFlUJ24pBgp5m
1630
- mxE=
1631
- -----END CERTIFICATE-----
1632
-
1633
- ApplicationCA - Japanese Government
1634
- ===================================
1635
- -----BEGIN CERTIFICATE-----
1636
- MIIDoDCCAoigAwIBAgIBMTANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQGEwJKUDEcMBoGA1UEChMT
1637
- SmFwYW5lc2UgR292ZXJubWVudDEWMBQGA1UECxMNQXBwbGljYXRpb25DQTAeFw0wNzEyMTIxNTAw
1638
- MDBaFw0xNzEyMTIxNTAwMDBaMEMxCzAJBgNVBAYTAkpQMRwwGgYDVQQKExNKYXBhbmVzZSBHb3Zl
1639
- cm5tZW50MRYwFAYDVQQLEw1BcHBsaWNhdGlvbkNBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
1640
- CgKCAQEAp23gdE6Hj6UG3mii24aZS2QNcfAKBZuOquHMLtJqO8F6tJdhjYq+xpqcBrSGUeQ3DnR4
1641
- fl+Kf5Sk10cI/VBaVuRorChzoHvpfxiSQE8tnfWuREhzNgaeZCw7NCPbXCbkcXmP1G55IrmTwcrN
1642
- wVbtiGrXoDkhBFcsovW8R0FPXjQilbUfKW1eSvNNcr5BViCH/OlQR9cwFO5cjFW6WY2H/CPek9AE
1643
- jP3vbb3QesmlOmpyM8ZKDQUXKi17safY1vC+9D/qDihtQWEjdnjDuGWk81quzMKq2edY3rZ+nYVu
1644
- nyoKb58DKTCXKB28t89UKU5RMfkntigm/qJj5kEW8DOYRwIDAQABo4GeMIGbMB0GA1UdDgQWBBRU
1645
- WssmP3HMlEYNllPqa0jQk/5CdTAOBgNVHQ8BAf8EBAMCAQYwWQYDVR0RBFIwUKROMEwxCzAJBgNV
1646
- BAYTAkpQMRgwFgYDVQQKDA/ml6XmnKzlm73mlL/lupwxIzAhBgNVBAsMGuOCouODl+ODquOCseOD
1647
- vOOCt+ODp+ODs0NBMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBADlqRHZ3ODrs
1648
- o2dGD/mLBqj7apAxzn7s2tGJfHrrLgy9mTLnsCTWw//1sogJhyzjVOGjprIIC8CFqMjSnHH2HZ9g
1649
- /DgzE+Ge3Atf2hZQKXsvcJEPmbo0NI2VdMV+eKlmXb3KIXdCEKxmJj3ekav9FfBv7WxfEPjzFvYD
1650
- io+nEhEMy/0/ecGc/WLuo89UDNErXxc+4z6/wCs+CZv+iKZ+tJIX/COUgb1up8WMwusRRdv4QcmW
1651
- dupwX3kSa+SjB1oF7ydJzyGfikwJcGapJsErEU4z0g781mzSDjJkaP+tBXhfAx2o45CsJOAPQKdL
1652
- rosot4LKGAfmt1t06SAZf7IbiVQ=
1653
- -----END CERTIFICATE-----
1654
-
1655
- GeoTrust Primary Certification Authority - G3
1656
- =============================================
1657
- -----BEGIN CERTIFICATE-----
1658
- MIID/jCCAuagAwIBAgIQFaxulBmyeUtB9iepwxgPHzANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UE
1659
- BhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChjKSAyMDA4IEdlb1RydXN0
1660
- IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFy
1661
- eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEczMB4XDTA4MDQwMjAwMDAwMFoXDTM3MTIwMTIz
1662
- NTk1OVowgZgxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAo
1663
- YykgMjAwOCBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNVBAMT
1664
- LUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZI
1665
- hvcNAQEBBQADggEPADCCAQoCggEBANziXmJYHTNXOTIz+uvLh4yn1ErdBojqZI4xmKU4kB6Yzy5j
1666
- K/BGvESyiaHAKAxJcCGVn2TAppMSAmUmhsalifD614SgcK9PGpc/BkTVyetyEH3kMSj7HGHmKAdE
1667
- c5IiaacDiGydY8hS2pgn5whMcD60yRLBxWeDXTPzAxHsatBT4tG6NmCUgLthY2xbF37fQJQeqw3C
1668
- IShwiP/WJmxsYAQlTlV+fe+/lEjetx3dcI0FX4ilm/LC7urRQEFtYjgdVgbFA0dRIBn8exALDmKu
1669
- dlW/X3e+PkkBUz2YJQN2JFodtNuJ6nnltrM7P7pMKEF/BqxqjsHQ9gUdfeZChuOl1UcCAwEAAaNC
1670
- MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMR5yo6hTgMdHNxr
1671
- 2zFblD4/MH8tMA0GCSqGSIb3DQEBCwUAA4IBAQAtxRPPVoB7eni9n64smefv2t+UXglpp+duaIy9
1672
- cr5HqQ6XErhK8WTTOd8lNNTBzU6B8A8ExCSzNJbGpqow32hhc9f5joWJ7w5elShKKiePEI4ufIbE
1673
- Ap7aDHdlDkQNkv39sxY2+hENHYwOB4lqKVb3cvTdFZx3NWZXqxNT2I7BQMXXExZacse3aQHEerGD
1674
- AWh9jUGhlBjBJVz88P6DAod8DQ3PLghcSkANPuyBYeYk28rgDi0Hsj5W3I31QYUHSJsMC8tJP33s
1675
- t/3LjWeJGqvtux6jAAgIFyqCXDFdRootD4abdNlF+9RAsXqqaC2Gspki4cErx5z481+oghLrGREt
1676
- -----END CERTIFICATE-----
1677
-
1678
- thawte Primary Root CA - G2
1679
- ===========================
1680
- -----BEGIN CERTIFICATE-----
1681
- MIICiDCCAg2gAwIBAgIQNfwmXNmET8k9Jj1Xm67XVjAKBggqhkjOPQQDAzCBhDELMAkGA1UEBhMC
1682
- VVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjE4MDYGA1UECxMvKGMpIDIwMDcgdGhhd3RlLCBJbmMu
1683
- IC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAiBgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3Qg
1684
- Q0EgLSBHMjAeFw0wNzExMDUwMDAwMDBaFw0zODAxMTgyMzU5NTlaMIGEMQswCQYDVQQGEwJVUzEV
1685
- MBMGA1UEChMMdGhhd3RlLCBJbmMuMTgwNgYDVQQLEy8oYykgMjAwNyB0aGF3dGUsIEluYy4gLSBG
1686
- b3IgYXV0aG9yaXplZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAt
1687
- IEcyMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEotWcgnuVnfFSeIf+iha/BebfowJPDQfGAFG6DAJS
1688
- LSKkQjnE/o/qycG+1E3/n3qe4rF8mq2nhglzh9HnmuN6papu+7qzcMBniKI11KOasf2twu8x+qi5
1689
- 8/sIxpHR+ymVo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQU
1690
- mtgAMADna3+FGO6Lts6KDPgR4bswCgYIKoZIzj0EAwMDaQAwZgIxAN344FdHW6fmCsO99YCKlzUN
1691
- G4k8VIZ3KMqh9HneteY4sPBlcIx/AlTCv//YoT7ZzwIxAMSNlPzcU9LcnXgWHxUzI1NS41oxXZ3K
1692
- rr0TKUQNJ1uo52icEvdYPy5yAlejj6EULg==
1693
- -----END CERTIFICATE-----
1694
-
1695
- thawte Primary Root CA - G3
1696
- ===========================
1697
- -----BEGIN CERTIFICATE-----
1698
- MIIEKjCCAxKgAwIBAgIQYAGXt0an6rS0mtZLL/eQ+zANBgkqhkiG9w0BAQsFADCBrjELMAkGA1UE
1699
- BhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2
1700
- aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIwMDggdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhv
1701
- cml6ZWQgdXNlIG9ubHkxJDAiBgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMzAeFw0w
1702
- ODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIGuMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhh
1703
- d3RlLCBJbmMuMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNlcnZpY2VzIERpdmlzaW9uMTgwNgYD
1704
- VQQLEy8oYykgMjAwOCB0aGF3dGUsIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEkMCIG
1705
- A1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAtIEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
1706
- MIIBCgKCAQEAsr8nLPvb2FvdeHsbnndmgcs+vHyu86YnmjSjaDFxODNi5PNxZnmxqWWjpYvVj2At
1707
- P0LMqmsywCPLLEHd5N/8YZzic7IilRFDGF/Eth9XbAoFWCLINkw6fKXRz4aviKdEAhN0cXMKQlkC
1708
- +BsUa0Lfb1+6a4KinVvnSr0eAXLbS3ToO39/fR8EtCab4LRarEc9VbjXsCZSKAExQGbY2SS99irY
1709
- 7CFJXJv2eul/VTV+lmuNk5Mny5K76qxAwJ/C+IDPXfRa3M50hqY+bAtTyr2SzhkGcuYMXDhpxwTW
1710
- vGzOW/b3aJzcJRVIiKHpqfiYnODz1TEoYRFsZ5aNOZnLwkUkOQIDAQABo0IwQDAPBgNVHRMBAf8E
1711
- BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUrWyqlGCc7eT/+j4KdCtjA/e2Wb8wDQYJ
1712
- KoZIhvcNAQELBQADggEBABpA2JVlrAmSicY59BDlqQ5mU1143vokkbvnRFHfxhY0Cu9qRFHqKweK
1713
- A3rD6z8KLFIWoCtDuSWQP3CpMyVtRRooOyfPqsMpQhvfO0zAMzRbQYi/aytlryjvsvXDqmbOe1bu
1714
- t8jLZ8HJnBoYuMTDSQPxYA5QzUbF83d597YV4Djbxy8ooAw/dyZ02SUS2jHaGh7cKUGRIjxpp7sC
1715
- 8rZcJwOJ9Abqm+RyguOhCcHpABnTPtRwa7pxpqpYrvS76Wy274fMm7v/OeZWYdMKp8RcTGB7BXcm
1716
- er/YB1IsYvdwY9k5vG8cwnncdimvzsUsZAReiDZuMdRAGmI0Nj81Aa6sY6A=
1717
- -----END CERTIFICATE-----
1718
-
1719
- GeoTrust Primary Certification Authority - G2
1720
- =============================================
1721
- -----BEGIN CERTIFICATE-----
1722
- MIICrjCCAjWgAwIBAgIQPLL0SAoA4v7rJDteYD7DazAKBggqhkjOPQQDAzCBmDELMAkGA1UEBhMC
1723
- VVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChjKSAyMDA3IEdlb1RydXN0IElu
1724
- Yy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBD
1725
- ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMB4XDTA3MTEwNTAwMDAwMFoXDTM4MDExODIzNTk1
1726
- OVowgZgxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykg
1727
- MjAwNyBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNVBAMTLUdl
1728
- b1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjB2MBAGByqGSM49AgEG
1729
- BSuBBAAiA2IABBWx6P0DFUPlrOuHNxFi79KDNlJ9RVcLSo17VDs6bl8VAsBQps8lL33KSLjHUGMc
1730
- KiEIfJo22Av+0SbFWDEwKCXzXV2juLaltJLtbCyf691DiaI8S0iRHVDsJt/WYC69IaNCMEAwDwYD
1731
- VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBVfNVdRVfslsq0DafwBo/q+
1732
- EVXVMAoGCCqGSM49BAMDA2cAMGQCMGSWWaboCd6LuvpaiIjwH5HTRqjySkwCY/tsXzjbLkGTqQ7m
1733
- ndwxHLKgpxgceeHHNgIwOlavmnRs9vuD4DPTCF+hnMJbn0bWtsuRBmOiBuczrD6ogRLQy7rQkgu2
1734
- npaqBA+K
1735
- -----END CERTIFICATE-----
1736
-
1737
- VeriSign Universal Root Certification Authority
1738
- ===============================================
1739
- -----BEGIN CERTIFICATE-----
1740
- MIIEuTCCA6GgAwIBAgIQQBrEZCGzEyEDDrvkEhrFHTANBgkqhkiG9w0BAQsFADCBvTELMAkGA1UE
1741
- BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBO
1742
- ZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVk
1743
- IHVzZSBvbmx5MTgwNgYDVQQDEy9WZXJpU2lnbiBVbml2ZXJzYWwgUm9vdCBDZXJ0aWZpY2F0aW9u
1744
- IEF1dGhvcml0eTAeFw0wODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIG9MQswCQYDVQQGEwJV
1745
- UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv
1746
- cmsxOjA4BgNVBAsTMShjKSAyMDA4IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
1747
- IG9ubHkxODA2BgNVBAMTL1ZlcmlTaWduIFVuaXZlcnNhbCBSb290IENlcnRpZmljYXRpb24gQXV0
1748
- aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx2E3XrEBNNti1xWb/1hajCMj
1749
- 1mCOkdeQmIN65lgZOIzF9uVkhbSicfvtvbnazU0AtMgtc6XHaXGVHzk8skQHnOgO+k1KxCHfKWGP
1750
- MiJhgsWHH26MfF8WIFFE0XBPV+rjHOPMee5Y2A7Cs0WTwCznmhcrewA3ekEzeOEz4vMQGn+HLL72
1751
- 9fdC4uW/h2KJXwBL38Xd5HVEMkE6HnFuacsLdUYI0crSK5XQz/u5QGtkjFdN/BMReYTtXlT2NJ8I
1752
- AfMQJQYXStrxHXpma5hgZqTZ79IugvHw7wnqRMkVauIDbjPTrJ9VAMf2CGqUuV/c4DPxhGD5WycR
1753
- tPwW8rtWaoAljQIDAQABo4GyMIGvMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMG0G
1754
- CCsGAQUFBwEMBGEwX6FdoFswWTBXMFUWCWltYWdlL2dpZjAhMB8wBwYFKw4DAhoEFI/l0xqGrI2O
1755
- a8PPgGrUSBgsexkuMCUWI2h0dHA6Ly9sb2dvLnZlcmlzaWduLmNvbS92c2xvZ28uZ2lmMB0GA1Ud
1756
- DgQWBBS2d/ppSEefUxLVwuoHMnYH0ZcHGTANBgkqhkiG9w0BAQsFAAOCAQEASvj4sAPmLGd75JR3
1757
- Y8xuTPl9Dg3cyLk1uXBPY/ok+myDjEedO2Pzmvl2MpWRsXe8rJq+seQxIcaBlVZaDrHC1LGmWazx
1758
- Y8u4TB1ZkErvkBYoH1quEPuBUDgMbMzxPcP1Y+Oz4yHJJDnp/RVmRvQbEdBNc6N9Rvk97ahfYtTx
1759
- P/jgdFcrGJ2BtMQo2pSXpXDrrB2+BxHw1dvd5Yzw1TKwg+ZX4o+/vqGqvz0dtdQ46tewXDpPaj+P
1760
- wGZsY6rp2aQW9IHRlRQOfc2VNNnSj3BzgXucfr2YYdhFh5iQxeuGMMY1v/D/w1WIg0vvBZIGcfK4
1761
- mJO37M2CYfE45k+XmCpajQ==
1762
- -----END CERTIFICATE-----
1763
-
1764
- VeriSign Class 3 Public Primary Certification Authority - G4
1765
- ============================================================
1766
- -----BEGIN CERTIFICATE-----
1767
- MIIDhDCCAwqgAwIBAgIQL4D+I4wOIg9IZxIokYesszAKBggqhkjOPQQDAzCByjELMAkGA1UEBhMC
1768
- VVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3
1769
- b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVz
1770
- ZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmlj
1771
- YXRpb24gQXV0aG9yaXR5IC0gRzQwHhcNMDcxMTA1MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCByjEL
1772
- MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBU
1773
- cnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRo
1774
- b3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5
1775
- IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzQwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASnVnp8
1776
- Utpkmw4tXNherJI9/gHmGUo9FANL+mAnINmDiWn6VMaaGF5VKmTeBvaNSjutEDxlPZCIBIngMGGz
1777
- rl0Bp3vefLK+ymVhAIau2o970ImtTR1ZmkGxvEeA3J5iw/mjgbIwga8wDwYDVR0TAQH/BAUwAwEB
1778
- /zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEw
1779
- HzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVyaXNpZ24u
1780
- Y29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFLMWkf3upm7ktS5Jj4d4gYDs5bG1MAoGCCqGSM49BAMD
1781
- A2gAMGUCMGYhDBgmYFo4e1ZC4Kf8NoRRkSAsdk1DPcQdhCPQrNZ8NQbOzWm9kA3bbEhCHQ6qQgIx
1782
- AJw9SDkjOVgaFRJZap7v1VmyHVIsmXHNxynfGyphe3HR3vPA5Q06Sqotp9iGKt0uEA==
1783
- -----END CERTIFICATE-----
1784
-
1785
- NetLock Arany (Class Gold) Főtanúsítvány
1786
- ============================================
1787
- -----BEGIN CERTIFICATE-----
1788
- MIIEFTCCAv2gAwIBAgIGSUEs5AAQMA0GCSqGSIb3DQEBCwUAMIGnMQswCQYDVQQGEwJIVTERMA8G
1789
- A1UEBwwIQnVkYXBlc3QxFTATBgNVBAoMDE5ldExvY2sgS2Z0LjE3MDUGA1UECwwuVGFuw7pzw610
1790
- dsOhbnlraWFkw7NrIChDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzKTE1MDMGA1UEAwwsTmV0TG9jayBB
1791
- cmFueSAoQ2xhc3MgR29sZCkgRsWRdGFuw7pzw610dsOhbnkwHhcNMDgxMjExMTUwODIxWhcNMjgx
1792
- MjA2MTUwODIxWjCBpzELMAkGA1UEBhMCSFUxETAPBgNVBAcMCEJ1ZGFwZXN0MRUwEwYDVQQKDAxO
1793
- ZXRMb2NrIEtmdC4xNzA1BgNVBAsMLlRhbsO6c8OtdHbDoW55a2lhZMOzayAoQ2VydGlmaWNhdGlv
1794
- biBTZXJ2aWNlcykxNTAzBgNVBAMMLE5ldExvY2sgQXJhbnkgKENsYXNzIEdvbGQpIEbFkXRhbsO6
1795
- c8OtdHbDoW55MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxCRec75LbRTDofTjl5Bu
1796
- 0jBFHjzuZ9lk4BqKf8owyoPjIMHj9DrTlF8afFttvzBPhCf2nx9JvMaZCpDyD/V/Q4Q3Y1GLeqVw
1797
- /HpYzY6b7cNGbIRwXdrzAZAj/E4wqX7hJ2Pn7WQ8oLjJM2P+FpD/sLj916jAwJRDC7bVWaaeVtAk
1798
- H3B5r9s5VA1lddkVQZQBr17s9o3x/61k/iCa11zr/qYfCGSji3ZVrR47KGAuhyXoqq8fxmRGILdw
1799
- fzzeSNuWU7c5d+Qa4scWhHaXWy+7GRWF+GmF9ZmnqfI0p6m2pgP8b4Y9VHx2BJtr+UBdADTHLpl1
1800
- neWIA6pN+APSQnbAGwIDAKiLo0UwQzASBgNVHRMBAf8ECDAGAQH/AgEEMA4GA1UdDwEB/wQEAwIB
1801
- BjAdBgNVHQ4EFgQUzPpnk/C2uNClwB7zU/2MU9+D15YwDQYJKoZIhvcNAQELBQADggEBAKt/7hwW
1802
- qZw8UQCgwBEIBaeZ5m8BiFRhbvG5GK1Krf6BQCOUL/t1fC8oS2IkgYIL9WHxHG64YTjrgfpioTta
1803
- YtOUZcTh5m2C+C8lcLIhJsFyUR+MLMOEkMNaj7rP9KdlpeuY0fsFskZ1FSNqb4VjMIDw1Z4fKRzC
1804
- bLBQWV2QWzuoDTDPv31/zvGdg73JRm4gpvlhUbohL3u+pRVjodSVh/GeufOJ8z2FuLjbvrW5Kfna
1805
- NwUASZQDhETnv0Mxz3WLJdH0pmT1kvarBes96aULNmLazAZfNou2XjG4Kvte9nHfRCaexOYNkbQu
1806
- dZWAUWpLMKawYqGT8ZvYzsRjdT9ZR7E=
1807
- -----END CERTIFICATE-----
1808
-
1809
- Staat der Nederlanden Root CA - G2
1810
- ==================================
1811
- -----BEGIN CERTIFICATE-----
1812
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- trzQ1aTsr1SIJSQ8p22xcik/Plemf1WvbibG/ufMQFxRRIEKeN5KzlW/HdXZt1bv8Hb/C3m1r737
1825
- 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
- AAGjgZcwgZQwDwYDVR0TAQH/BAUwAwEB/zBSBgNVHSAESzBJMEcGBFUdIAAwPzA9BggrBgEFBQcC
1827
- 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
- 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
- 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
- +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
- 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
- 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
- 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
- URmFzI79R6d0lR2o0a9OF7FpJsKqeFdbxU2n5Z4FF5TKsl+gSRiNNOkmbEgeqmiSBeGCc1qb3Adb
1835
- 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
- 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
- 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
1838
- 66+KAQ==
1839
- -----END CERTIFICATE-----
1840
-
1841
- Juur-SK
1842
- =======
1843
- -----BEGIN CERTIFICATE-----
1844
- MIIE5jCCA86gAwIBAgIEO45L/DANBgkqhkiG9w0BAQUFADBdMRgwFgYJKoZIhvcNAQkBFglwa2lA
1845
- c2suZWUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKExlBUyBTZXJ0aWZpdHNlZXJpbWlza2Vza3VzMRAw
1846
- DgYDVQQDEwdKdXVyLVNLMB4XDTAxMDgzMDE0MjMwMVoXDTE2MDgyNjE0MjMwMVowXTEYMBYGCSqG
1847
- SIb3DQEJARYJcGtpQHNrLmVlMQswCQYDVQQGEwJFRTEiMCAGA1UEChMZQVMgU2VydGlmaXRzZWVy
1848
- aW1pc2tlc2t1czEQMA4GA1UEAxMHSnV1ci1TSzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
1849
- ggEBAIFxNj4zB9bjMI0TfncyRsvPGbJgMUaXhvSYRqTCZUXP00B841oiqBB4M8yIsdOBSvZiF3tf
1850
- TQou0M+LI+5PAk676w7KvRhj6IAcjeEcjT3g/1tf6mTll+g/mX8MCgkzABpTpyHhOEvWgxutr2TC
1851
- +Rx6jGZITWYfGAriPrsfB2WThbkasLnE+w0R9vXW+RvHLCu3GFH+4Hv2qEivbDtPL+/40UceJlfw
1852
- UR0zlv/vWT3aTdEVNMfqPxZIe5EcgEMPPbgFPtGzlc3Yyg/CQ2fbt5PgIoIuvvVoKIO5wTtpeyDa
1853
- Tpxt4brNj3pssAki14sL2xzVWiZbDcDq5WDQn/413z8CAwEAAaOCAawwggGoMA8GA1UdEwEB/wQF
1854
- MAMBAf8wggEWBgNVHSAEggENMIIBCTCCAQUGCisGAQQBzh8BAQEwgfYwgdAGCCsGAQUFBwICMIHD
1855
- HoHAAFMAZQBlACAAcwBlAHIAdABpAGYAaQBrAGEAYQB0ACAAbwBuACAAdgDkAGwAagBhAHMAdABh
1856
- AHQAdQBkACAAQQBTAC0AaQBzACAAUwBlAHIAdABpAGYAaQB0AHMAZQBlAHIAaQBtAGkAcwBrAGUA
1857
- cwBrAHUAcwAgAGEAbABhAG0ALQBTAEsAIABzAGUAcgB0AGkAZgBpAGsAYQBhAHQAaQBkAGUAIABr
1858
- AGkAbgBuAGkAdABhAG0AaQBzAGUAawBzMCEGCCsGAQUFBwIBFhVodHRwOi8vd3d3LnNrLmVlL2Nw
1859
- cy8wKwYDVR0fBCQwIjAgoB6gHIYaaHR0cDovL3d3dy5zay5lZS9qdXVyL2NybC8wHQYDVR0OBBYE
1860
- FASqekej5ImvGs8KQKcYP2/v6X2+MB8GA1UdIwQYMBaAFASqekej5ImvGs8KQKcYP2/v6X2+MA4G
1861
- A1UdDwEB/wQEAwIB5jANBgkqhkiG9w0BAQUFAAOCAQEAe8EYlFOiCfP+JmeaUOTDBS8rNXiRTHyo
1862
- ERF5TElZrMj3hWVcRrs7EKACr81Ptcw2Kuxd/u+gkcm2k298gFTsxwhwDY77guwqYHhpNjbRxZyL
1863
- abVAyJRld/JXIWY7zoVAtjNjGr95HvxcHdMdkxuLDF2FvZkwMhgJkVLpfKG6/2SSmuz+Ne6ML678
1864
- IIbsSt4beDI3poHSna9aEhbKmVv8b20OxaAehsmR0FyYgl9jDIpaq9iVpszLita/ZEuOyoqysOkh
1865
- Mp6qqIWYNIE5ITuoOlIyPfZrN4YGWhWY3PARZv40ILcD9EEQfTmEeZZyY7aWAuVrua0ZTbvGRNs2
1866
- yyqcjg==
1867
- -----END CERTIFICATE-----
1868
-
1869
- Hongkong Post Root CA 1
1870
- =======================
1871
- -----BEGIN CERTIFICATE-----
1872
- MIIDMDCCAhigAwIBAgICA+gwDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCSEsxFjAUBgNVBAoT
1873
- DUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3QgUm9vdCBDQSAxMB4XDTAzMDUx
1874
- NTA1MTMxNFoXDTIzMDUxNTA0NTIyOVowRzELMAkGA1UEBhMCSEsxFjAUBgNVBAoTDUhvbmdrb25n
1875
- IFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3QgUm9vdCBDQSAxMIIBIjANBgkqhkiG9w0BAQEF
1876
- AAOCAQ8AMIIBCgKCAQEArP84tulmAknjorThkPlAj3n54r15/gK97iSSHSL22oVyaf7XPwnU3ZG1
1877
- ApzQjVrhVcNQhrkpJsLj2aDxaQMoIIBFIi1WpztUlVYiWR8o3x8gPW2iNr4joLFutbEnPzlTCeqr
1878
- auh0ssJlXI6/fMN4hM2eFvz1Lk8gKgifd/PFHsSaUmYeSF7jEAaPIpjhZY4bXSNmO7ilMlHIhqqh
1879
- qZ5/dpTCpmy3QfDVyAY45tQM4vM7TG1QjMSDJ8EThFk9nnV0ttgCXjqQesBCNnLsak3c78QA3xMY
1880
- V18meMjWCnl3v/evt3a5pQuEF10Q6m/hq5URX208o1xNg1vysxmKgIsLhwIDAQABoyYwJDASBgNV
1881
- HRMBAf8ECDAGAQH/AgEDMA4GA1UdDwEB/wQEAwIBxjANBgkqhkiG9w0BAQUFAAOCAQEADkbVPK7i
1882
- h9legYsCmEEIjEy82tvuJxuC52pF7BaLT4Wg87JwvVqWuspube5Gi27nKi6Wsxkz67SfqLI37pio
1883
- l7Yutmcn1KZJ/RyTZXaeQi/cImyaT/JaFTmxcdcrUehtHJjA2Sr0oYJ71clBoiMBdDhViw+5Lmei
1884
- IAQ32pwL0xch4I+XeTRvhEgCIDMb5jREn5Fw9IBehEPCKdJsEhTkYY2sEJCehFC78JZvRZ+K88ps
1885
- T/oROhUVRsPNH4NbLUES7VBnQRM9IauUiqpOfMGx+6fWtScvl6tu4B3i0RwsH0Ti/L6RoZz71ilT
1886
- c4afU9hDDl3WY4JxHYB0yvbiAmvZWg==
1887
- -----END CERTIFICATE-----
1888
-
1889
- SecureSign RootCA11
1890
- ===================
1891
- -----BEGIN CERTIFICATE-----
1892
- MIIDbTCCAlWgAwIBAgIBATANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQGEwJKUDErMCkGA1UEChMi
1893
- SmFwYW4gQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcywgSW5jLjEcMBoGA1UEAxMTU2VjdXJlU2lnbiBS
1894
- b290Q0ExMTAeFw0wOTA0MDgwNDU2NDdaFw0yOTA0MDgwNDU2NDdaMFgxCzAJBgNVBAYTAkpQMSsw
1895
- KQYDVQQKEyJKYXBhbiBDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzLCBJbmMuMRwwGgYDVQQDExNTZWN1
1896
- cmVTaWduIFJvb3RDQTExMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA/XeqpRyQBTvL
1897
- TJszi1oURaTnkBbR31fSIRCkF/3frNYfp+TbfPfs37gD2pRY/V1yfIw/XwFndBWW4wI8h9uuywGO
1898
- wvNmxoVF9ALGOrVisq/6nL+k5tSAMJjzDbaTj6nU2DbysPyKyiyhFTOVMdrAG/LuYpmGYz+/3ZMq
1899
- g6h2uRMft85OQoWPIucuGvKVCbIFtUROd6EgvanyTgp9UK31BQ1FT0Zx/Sg+U/sE2C3XZR1KG/rP
1900
- O7AxmjVuyIsG0wCR8pQIZUyxNAYAeoni8McDWc/V1uinMrPmmECGxc0nEovMe863ETxiYAcjPitA
1901
- bpSACW22s293bzUIUPsCh8U+iQIDAQABo0IwQDAdBgNVHQ4EFgQUW/hNT7KlhtQ60vFjmqC+CfZX
1902
- t94wDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAKCh
1903
- OBZmLqdWHyGcBvod7bkixTgm2E5P7KN/ed5GIaGHd48HCJqypMWvDzKYC3xmKbabfSVSSUOrTC4r
1904
- bnpwrxYO4wJs+0LmGJ1F2FXI6Dvd5+H0LgscNFxsWEr7jIhQX5Ucv+2rIrVls4W6ng+4reV6G4pQ
1905
- Oh29Dbx7VFALuUKvVaAYga1lme++5Jy/xIWrQbJUb9wlze144o4MjQlJ3WN7WmmWAiGovVJZ6X01
1906
- y8hSyn+B/tlr0/cR7SXf+Of5pPpyl4RTDaXQMhhRdlkUbA/r7F+AjHVDg8OFmP9Mni0N5HeDk061
1907
- lgeLKBObjBmNQSdJQO7e5iNEOdyhIta6A/I=
1908
- -----END CERTIFICATE-----
1909
-
1910
- ACEDICOM Root
1911
- =============
1912
- -----BEGIN CERTIFICATE-----
1913
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- nxQWWOLcpfShFosOkYuByptZ+thrkQdlVV9SH686+5DdaaVbnG0OLLb6zqylfDJKZ0DcMDQj3dcE
1936
- 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
- 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
- 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
1939
- -----END CERTIFICATE-----
1940
-
1941
- Microsec e-Szigno Root CA 2009
1942
- ==============================
1943
- -----BEGIN CERTIFICATE-----
1944
- MIIECjCCAvKgAwIBAgIJAMJ+QwRORz8ZMA0GCSqGSIb3DQEBCwUAMIGCMQswCQYDVQQGEwJIVTER
1945
- MA8GA1UEBwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jv
1946
- c2VjIGUtU3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5o
1947
- dTAeFw0wOTA2MTYxMTMwMThaFw0yOTEyMzAxMTMwMThaMIGCMQswCQYDVQQGEwJIVTERMA8GA1UE
1948
- BwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUt
1949
- U3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5odTCCASIw
1950
- DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOn4j/NjrdqG2KfgQvvPkd6mJviZpWNwrZuuyjNA
1951
- fW2WbqEORO7hE52UQlKavXWFdCyoDh2Tthi3jCyoz/tccbna7P7ofo/kLx2yqHWH2Leh5TvPmUpG
1952
- 0IMZfcChEhyVbUr02MelTTMuhTlAdX4UfIASmFDHQWe4oIBhVKZsTh/gnQ4H6cm6M+f+wFUoLAKA
1953
- pxn1ntxVUwOXewdI/5n7N4okxFnMUBBjjqqpGrCEGob5X7uxUG6k0QrM1XF+H6cbfPVTbiJfyyvm
1954
- 1HxdrtbCxkzlBQHZ7Vf8wSN5/PrIJIOV87VqUQHQd9bpEqH5GoP7ghu5sJf0dgYzQ0mg/wu1+rUC
1955
- AwEAAaOBgDB+MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTLD8bf
1956
- QkPMPcu1SCOhGnqmKrs0aDAfBgNVHSMEGDAWgBTLD8bfQkPMPcu1SCOhGnqmKrs0aDAbBgNVHREE
1957
- FDASgRBpbmZvQGUtc3ppZ25vLmh1MA0GCSqGSIb3DQEBCwUAA4IBAQDJ0Q5eLtXMs3w+y/w9/w0o
1958
- lZMEyL/azXm4Q5DwpL7v8u8hmLzU1F0G9u5C7DBsoKqpyvGvivo/C3NqPuouQH4frlRheesuCDfX
1959
- I/OMn74dseGkddug4lQUsbocKaQY9hK6ohQU4zE1yED/t+AFdlfBHFny+L/k7SViXITwfn4fs775
1960
- tyERzAMBVnCnEJIeGzSBHq2cGsMEPO0CYdYeBvNfOofyK/FFh+U9rNHHV4S9a67c2Pm2G2JwCz02
1961
- yULyMtd6YebS2z3PyKnJm9zbWETXbzivf3jTo60adbocwTZ8jx5tHMN1Rq41Bab2XD0h7lbwyYIi
1962
- LXpUq3DDfSJlgnCW
1963
- -----END CERTIFICATE-----
1964
-
1965
- GlobalSign Root CA - R3
1966
- =======================
1967
- -----BEGIN CERTIFICATE-----
1968
- MIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4GA1UECxMXR2xv
1969
- YmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh
1970
- bFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4MTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT
1971
- aWduIFJvb3QgQ0EgLSBSMzETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln
1972
- bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWt
1973
- iHL8RgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsTgHeMCOFJ
1974
- 0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmmKPZpO/bLyCiR5Z2KYVc3
1975
- rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zdQQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjl
1976
- OCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZXriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2
1977
- xmmFghcCAwEAAaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE
1978
- FI/wS3+oLkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZURUm7
1979
- lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMpjjM5RcOO5LlXbKr8
1980
- EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK6fBdRoyV3XpYKBovHd7NADdBj+1E
1981
- bddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQXmcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18
1982
- YIvDQVETI53O9zJrlAGomecsMx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7r
1983
- kpeDMdmztcpHWD9f
1984
- -----END CERTIFICATE-----
1985
-
1986
- Autoridad de Certificacion Firmaprofesional CIF A62634068
1987
- =========================================================
1988
- -----BEGIN CERTIFICATE-----
1989
- MIIGFDCCA/ygAwIBAgIIU+w77vuySF8wDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCRVMxQjBA
1990
- BgNVBAMMOUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2
1991
- MjYzNDA2ODAeFw0wOTA1MjAwODM4MTVaFw0zMDEyMzEwODM4MTVaMFExCzAJBgNVBAYTAkVTMUIw
1992
- QAYDVQQDDDlBdXRvcmlkYWQgZGUgQ2VydGlmaWNhY2lvbiBGaXJtYXByb2Zlc2lvbmFsIENJRiBB
1993
- NjI2MzQwNjgwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKlmuO6vj78aI14H9M2uDD
1994
- Utd9thDIAl6zQyrET2qyyhxdKJp4ERppWVevtSBC5IsP5t9bpgOSL/UR5GLXMnE42QQMcas9UX4P
1995
- B99jBVzpv5RvwSmCwLTaUbDBPLutN0pcyvFLNg4kq7/DhHf9qFD0sefGL9ItWY16Ck6WaVICqjaY
1996
- 7Pz6FIMMNx/Jkjd/14Et5cS54D40/mf0PmbR0/RAz15iNA9wBj4gGFrO93IbJWyTdBSTo3OxDqqH
1997
- ECNZXyAFGUftaI6SEspd/NYrspI8IM/hX68gvqB2f3bl7BqGYTM+53u0P6APjqK5am+5hyZvQWyI
1998
- plD9amML9ZMWGxmPsu2bm8mQ9QEM3xk9Dz44I8kvjwzRAv4bVdZO0I08r0+k8/6vKtMFnXkIoctX
1999
- MbScyJCyZ/QYFpM6/EfY0XiWMR+6KwxfXZmtY4laJCB22N/9q06mIqqdXuYnin1oKaPnirjaEbsX
2000
- LZmdEyRG98Xi2J+Of8ePdG1asuhy9azuJBCtLxTa/y2aRnFHvkLfuwHb9H/TKI8xWVvTyQKmtFLK
2001
- bpf7Q8UIJm+K9Lv9nyiqDdVF8xM6HdjAeI9BZzwelGSuewvF6NkBiDkal4ZkQdU7hwxu+g/GvUgU
2002
- vzlN1J5Bto+WHWOWk9mVBngxaJ43BjuAiUVhOSPHG0SjFeUc+JIwuwIDAQABo4HvMIHsMBIGA1Ud
2003
- EwEB/wQIMAYBAf8CAQEwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRlzeurNR4APn7VdMActHNH
2004
- DhpkLzCBpgYDVR0gBIGeMIGbMIGYBgRVHSAAMIGPMC8GCCsGAQUFBwIBFiNodHRwOi8vd3d3LmZp
2005
- cm1hcHJvZmVzaW9uYWwuY29tL2NwczBcBggrBgEFBQcCAjBQHk4AUABhAHMAZQBvACAAZABlACAA
2006
- bABhACAAQgBvAG4AYQBuAG8AdgBhACAANAA3ACAAQgBhAHIAYwBlAGwAbwBuAGEAIAAwADgAMAAx
2007
- ADcwDQYJKoZIhvcNAQEFBQADggIBABd9oPm03cXF661LJLWhAqvdpYhKsg9VSytXjDvlMd3+xDLx
2008
- 51tkljYyGOylMnfX40S2wBEqgLk9am58m9Ot/MPWo+ZkKXzR4Tgegiv/J2Wv+xYVxC5xhOW1//qk
2009
- R71kMrv2JYSiJ0L1ILDCExARzRAVukKQKtJE4ZYm6zFIEv0q2skGz3QeqUvVhyj5eTSSPi5E6PaP
2010
- T481PyWzOdxjKpBrIF/EUhJOlywqrJ2X3kjyo2bbwtKDlaZmp54lD+kLM5FlClrD2VQS3a/DTg4f
2011
- Jl4N3LON7NWBcN7STyQF82xO9UxJZo3R/9ILJUFI/lGExkKvgATP0H5kSeTy36LssUzAKh3ntLFl
2012
- osS88Zj0qnAHY7S42jtM+kAiMFsRpvAFDsYCA0irhpuF3dvd6qJ2gHN99ZwExEWN57kci57q13XR
2013
- crHedUTnQn3iV2t93Jm8PYMo6oCTjcVMZcFwgbg4/EMxsvYDNEeyrPsiBsse3RdHHF9mudMaotoR
2014
- saS8I8nkvof/uZS2+F0gStRf571oe2XyFR7SOqkt6dhrJKyXWERHrVkY8SFlcN7ONGCoQPHzPKTD
2015
- KCOM/iczQ0CgFzzr6juwcqajuUpLXhZI9LK8yIySxZ2frHI2vDSANGupi5LAuBft7HZT9SQBjLMi
2016
- 6Et8Vcad+qMUu2WFbm5PEn4KPJ2V
2017
- -----END CERTIFICATE-----
2018
-
2019
- Izenpe.com
2020
- ==========
2021
- -----BEGIN CERTIFICATE-----
2022
- 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
- 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
- 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
- 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
- 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
- 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
- +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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- NjIgUzgxQzBBBgNVBAkMOkF2ZGEgZGVsIE1lZGl0ZXJyYW5lbyBFdG9yYmlkZWEgMTQgLSAwMTAx
2038
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
2049
- -----END CERTIFICATE-----
2050
-
2051
- Chambers of Commerce Root - 2008
2052
- ================================
2053
- -----BEGIN CERTIFICATE-----
2054
- MIIHTzCCBTegAwIBAgIJAKPaQn6ksa7aMA0GCSqGSIb3DQEBBQUAMIGuMQswCQYDVQQGEwJFVTFD
2055
- MEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNv
2056
- bS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMu
2057
- QS4xKTAnBgNVBAMTIENoYW1iZXJzIG9mIENvbW1lcmNlIFJvb3QgLSAyMDA4MB4XDTA4MDgwMTEy
2058
- Mjk1MFoXDTM4MDczMTEyMjk1MFowga4xCzAJBgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNl
2059
- ZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNhbWVyZmlybWEuY29tL2FkZHJlc3MpMRIwEAYDVQQF
2060
- EwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENhbWVyZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJl
2061
- cnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDgwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC
2062
- AQCvAMtwNyuAWko6bHiUfaN/Gh/2NdW928sNRHI+JrKQUrpjOyhYb6WzbZSm891kDFX29ufyIiKA
2063
- XuFixrYp4YFs8r/lfTJqVKAyGVn+H4vXPWCGhSRv4xGzdz4gljUha7MI2XAuZPeEklPWDrCQiorj
2064
- h40G072QDuKZoRuGDtqaCrsLYVAGUvGef3bsyw/QHg3PmTA9HMRFEFis1tPo1+XqxQEHd9ZR5gN/
2065
- ikilTWh1uem8nk4ZcfUyS5xtYBkL+8ydddy/Js2Pk3g5eXNeJQ7KXOt3EgfLZEFHcpOrUMPrCXZk
2066
- NNI5t3YRCQ12RcSprj1qr7V9ZS+UWBDsXHyvfuK2GNnQm05aSd+pZgvMPMZ4fKecHePOjlO+Bd5g
2067
- D2vlGts/4+EhySnB8esHnFIbAURRPHsl18TlUlRdJQfKFiC4reRB7noI/plvg6aRArBsNlVq5331
2068
- lubKgdaX8ZSD6e2wsWsSaR6s+12pxZjptFtYer49okQ6Y1nUCyXeG0+95QGezdIp1Z8XGQpvvwyQ
2069
- 0wlf2eOKNcx5Wk0ZN5K3xMGtr/R5JJqyAQuxr1yW84Ay+1w9mPGgP0revq+ULtlVmhduYJ1jbLhj
2070
- ya6BXBg14JC7vjxPNyK5fuvPnnchpj04gftI2jE9K+OJ9dC1vX7gUMQSibMjmhAxhduub+84Mxh2
2071
- EQIDAQABo4IBbDCCAWgwEgYDVR0TAQH/BAgwBgEB/wIBDDAdBgNVHQ4EFgQU+SSsD7K1+HnA+mCI
2072
- G8TZTQKeFxkwgeMGA1UdIwSB2zCB2IAU+SSsD7K1+HnA+mCIG8TZTQKeFxmhgbSkgbEwga4xCzAJ
2073
- BgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNlZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNh
2074
- bWVyZmlybWEuY29tL2FkZHJlc3MpMRIwEAYDVQQFEwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENh
2075
- bWVyZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDiC
2076
- CQCj2kJ+pLGu2jAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUH
2077
- AgEWHGh0dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZIhvcNAQEFBQADggIBAJASryI1
2078
- wqM58C7e6bXpeHxIvj99RZJe6dqxGfwWPJ+0W2aeaufDuV2I6A+tzyMP3iU6XsxPpcG1Lawk0lgH
2079
- 3qLPaYRgM+gQDROpI9CF5Y57pp49chNyM/WqfcZjHwj0/gF/JM8rLFQJ3uIrbZLGOU8W6jx+ekbU
2080
- RWpGqOt1glanq6B8aBMz9p0w8G8nOSQjKpD9kCk18pPfNKXG9/jvjA9iSnyu0/VU+I22mlaHFoI6
2081
- M6taIgj3grrqLuBHmrS1RaMFO9ncLkVAO+rcf+g769HsJtg1pDDFOqxXnrN2pSB7+R5KBWIBpih1
2082
- YJeSDW4+TTdDDZIVnBgizVGZoCkaPF+KMjNbMMeJL0eYD6MDxvbxrN8y8NmBGuScvfaAFPDRLLmF
2083
- 9dijscilIeUcE5fuDr3fKanvNFNb0+RqE4QGtjICxFKuItLcsiFCGtpA8CnJ7AoMXOLQusxI0zcK
2084
- zBIKinmwPQN/aUv0NCB9szTqjktk9T79syNnFQ0EuPAtwQlRPLJsFfClI9eDdOTlLsn+mCdCxqvG
2085
- nrDQWzilm1DefhiYtUU79nm06PcaewaD+9CL2rvHvRirCG88gGtAPxkZumWK5r7VXNM21+9AUiRg
2086
- OGcEMeyP84LG3rlV8zsxkVrctQgVrXYlCg17LofiDKYGvCYQbTed7N14jHyAxfDZd0jQ
2087
- -----END CERTIFICATE-----
2088
-
2089
- Global Chambersign Root - 2008
2090
- ==============================
2091
- -----BEGIN CERTIFICATE-----
2092
- MIIHSTCCBTGgAwIBAgIJAMnN0+nVfSPOMA0GCSqGSIb3DQEBBQUAMIGsMQswCQYDVQQGEwJFVTFD
2093
- MEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNv
2094
- bS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMu
2095
- QS4xJzAlBgNVBAMTHkdsb2JhbCBDaGFtYmVyc2lnbiBSb290IC0gMjAwODAeFw0wODA4MDExMjMx
2096
- NDBaFw0zODA3MzExMjMxNDBaMIGsMQswCQYDVQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUg
2097
- Y3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJ
2098
- QTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xJzAlBgNVBAMTHkdsb2JhbCBD
2099
- aGFtYmVyc2lnbiBSb290IC0gMjAwODCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMDf
2100
- VtPkOpt2RbQT2//BthmLN0EYlVJH6xedKYiONWwGMi5HYvNJBL99RDaxccy9Wglz1dmFRP+RVyXf
2101
- XjaOcNFccUMd2drvXNL7G706tcuto8xEpw2uIRU/uXpbknXYpBI4iRmKt4DS4jJvVpyR1ogQC7N0
2102
- ZJJ0YPP2zxhPYLIj0Mc7zmFLmY/CDNBAspjcDahOo7kKrmCgrUVSY7pmvWjg+b4aqIG7HkF4ddPB
2103
- /gBVsIdU6CeQNR1MM62X/JcumIS/LMmjv9GYERTtY/jKmIhYF5ntRQOXfjyGHoiMvvKRhI9lNNgA
2104
- TH23MRdaKXoKGCQwoze1eqkBfSbW+Q6OWfH9GzO1KTsXO0G2Id3UwD2ln58fQ1DJu7xsepeY7s2M
2105
- H/ucUa6LcL0nn3HAa6x9kGbo1106DbDVwo3VyJ2dwW3Q0L9R5OP4wzg2rtandeavhENdk5IMagfe
2106
- Ox2YItaswTXbo6Al/3K1dh3ebeksZixShNBFks4c5eUzHdwHU1SjqoI7mjcv3N2gZOnm3b2u/GSF
2107
- HTynyQbehP9r6GsaPMWis0L7iwk+XwhSx2LE1AVxv8Rk5Pihg+g+EpuoHtQ2TS9x9o0o9oOpE9Jh
2108
- wZG7SMA0j0GMS0zbaRL/UJScIINZc+18ofLx/d33SdNDWKBWY8o9PeU1VlnpDsogzCtLkykPAgMB
2109
- AAGjggFqMIIBZjASBgNVHRMBAf8ECDAGAQH/AgEMMB0GA1UdDgQWBBS5CcqcHtvTbDprru1U8VuT
2110
- BjUuXjCB4QYDVR0jBIHZMIHWgBS5CcqcHtvTbDprru1U8VuTBjUuXqGBsqSBrzCBrDELMAkGA1UE
2111
- BhMCRVUxQzBBBgNVBAcTOk1hZHJpZCAoc2VlIGN1cnJlbnQgYWRkcmVzcyBhdCB3d3cuY2FtZXJm
2112
- aXJtYS5jb20vYWRkcmVzcykxEjAQBgNVBAUTCUE4Mjc0MzI4NzEbMBkGA1UEChMSQUMgQ2FtZXJm
2113
- aXJtYSBTLkEuMScwJQYDVQQDEx5HbG9iYWwgQ2hhbWJlcnNpZ24gUm9vdCAtIDIwMDiCCQDJzdPp
2114
- 1X0jzjAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUHAgEWHGh0
2115
- dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZIhvcNAQEFBQADggIBAICIf3DekijZBZRG
2116
- /5BXqfEv3xoNa/p8DhxJJHkn2EaqbylZUohwEurdPfWbU1Rv4WCiqAm57OtZfMY18dwY6fFn5a+6
2117
- ReAJ3spED8IXDneRRXozX1+WLGiLwUePmJs9wOzL9dWCkoQ10b42OFZyMVtHLaoXpGNR6woBrX/s
2118
- dZ7LoR/xfxKxueRkf2fWIyr0uDldmOghp+G9PUIadJpwr2hsUF1Jz//7Dl3mLEfXgTpZALVza2Mg
2119
- 9jFFCDkO9HB+QHBaP9BrQql0PSgvAm11cpUJjUhjxsYjV5KTXjXBjfkK9yydYhz2rXzdpjEetrHH
2120
- foUm+qRqtdpjMNHvkzeyZi99Bffnt0uYlDXA2TopwZ2yUDMdSqlapskD7+3056huirRXhOukP9Du
2121
- qqqHW2Pok+JrqNS4cnhrG+055F3Lm6qH1U9OAP7Zap88MQ8oAgF9mOinsKJknnn4SPIVqczmyETr
2122
- P3iZ8ntxPjzxmKfFGBI/5rsoM0LpRQp8bfKGeS/Fghl9CYl8slR2iK7ewfPM4W7bMdaTrpmg7yVq
2123
- c5iJWzouE4gev8CSlDQb4ye3ix5vQv/n6TebUB0tovkC7stYWDpxvGjjqsGvHCgfotwjZT+B6q6Z
2124
- 09gwzxMNTxXJhLynSC34MCN32EZLeW32jO06f2ARePTpm67VVMB0gNELQp/B
2125
- -----END CERTIFICATE-----
2126
-
2127
- Go Daddy Root Certificate Authority - G2
2128
- ========================================
2129
- -----BEGIN CERTIFICATE-----
2130
- MIIDxTCCAq2gAwIBAgIBADANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMxEDAOBgNVBAgT
2131
- B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoTEUdvRGFkZHkuY29tLCBJbmMu
2132
- MTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5
2133
- MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgYMxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6
2134
- b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjExMC8G
2135
- A1UEAxMoR28gRGFkZHkgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZI
2136
- hvcNAQEBBQADggEPADCCAQoCggEBAL9xYgjx+lk09xvJGKP3gElY6SKDE6bFIEMBO4Tx5oVJnyfq
2137
- 9oQbTqC023CYxzIBsQU+B07u9PpPL1kwIuerGVZr4oAH/PMWdYA5UXvl+TW2dE6pjYIT5LY/qQOD
2138
- +qK+ihVqf94Lw7YZFAXK6sOoBJQ7RnwyDfMAZiLIjWltNowRGLfTshxgtDj6AozO091GB94KPutd
2139
- fMh8+7ArU6SSYmlRJQVhGkSBjCypQ5Yj36w6gZoOKcUcqeldHraenjAKOc7xiID7S13MMuyFYkMl
2140
- NAJWJwGRtDtwKj9useiciAF9n9T521NtYJ2/LOdYq7hfRvzOxBsDPAnrSTFcaUaz4EcCAwEAAaNC
2141
- MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFDqahQcQZyi27/a9
2142
- BUFuIMGU2g/eMA0GCSqGSIb3DQEBCwUAA4IBAQCZ21151fmXWWcDYfF+OwYxdS2hII5PZYe096ac
2143
- vNjpL9DbWu7PdIxztDhC2gV7+AJ1uP2lsdeu9tfeE8tTEH6KRtGX+rcuKxGrkLAngPnon1rpN5+r
2144
- 5N9ss4UXnT3ZJE95kTXWXwTrgIOrmgIttRD02JDHBHNA7XIloKmf7J6raBKZV8aPEjoJpL1E/QYV
2145
- N8Gb5DKj7Tjo2GTzLH4U/ALqn83/B2gX2yKQOC16jdFU8WnjXzPKej17CuPKf1855eJ1usV2GDPO
2146
- LPAvTK33sefOT6jEm0pUBsV/fdUID+Ic/n4XuKxe9tQWskMJDE32p2u0mYRlynqI4uJEvlz36hz1
2147
- -----END CERTIFICATE-----
2148
-
2149
- Starfield Root Certificate Authority - G2
2150
- =========================================
2151
- -----BEGIN CERTIFICATE-----
2152
- MIID3TCCAsWgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBjzELMAkGA1UEBhMCVVMxEDAOBgNVBAgT
2153
- B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9s
2154
- b2dpZXMsIEluYy4xMjAwBgNVBAMTKVN0YXJmaWVsZCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0
2155
- eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgY8xCzAJBgNVBAYTAlVTMRAw
2156
- DgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQg
2157
- VGVjaG5vbG9naWVzLCBJbmMuMTIwMAYDVQQDEylTdGFyZmllbGQgUm9vdCBDZXJ0aWZpY2F0ZSBB
2158
- dXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL3twQP89o/8ArFv
2159
- W59I2Z154qK3A2FWGMNHttfKPTUuiUP3oWmb3ooa/RMgnLRJdzIpVv257IzdIvpy3Cdhl+72WoTs
2160
- bhm5iSzchFvVdPtrX8WJpRBSiUZV9Lh1HOZ/5FSuS/hVclcCGfgXcVnrHigHdMWdSL5stPSksPNk
2161
- N3mSwOxGXn/hbVNMYq/NHwtjuzqd+/x5AJhhdM8mgkBj87JyahkNmcrUDnXMN/uLicFZ8WJ/X7Nf
2162
- ZTD4p7dNdloedl40wOiWVpmKs/B/pM293DIxfJHP4F8R+GuqSVzRmZTRouNjWwl2tVZi4Ut0HZbU
2163
- JtQIBFnQmA4O5t78w+wfkPECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
2164
- AQYwHQYDVR0OBBYEFHwMMh+n2TB/xH1oo2Kooc6rB1snMA0GCSqGSIb3DQEBCwUAA4IBAQARWfol
2165
- TwNvlJk7mh+ChTnUdgWUXuEok21iXQnCoKjUsHU48TRqneSfioYmUeYs0cYtbpUgSpIB7LiKZ3sx
2166
- 4mcujJUDJi5DnUox9g61DLu34jd/IroAow57UvtruzvE03lRTs2Q9GcHGcg8RnoNAX3FWOdt5oUw
2167
- F5okxBDgBPfg8n/Uqgr/Qh037ZTlZFkSIHc40zI+OIF1lnP6aI+xy84fxez6nH7PfrHxBy22/L/K
2168
- pL/QlwVKvOoYKAKQvVR4CSFx09F9HdkWsKlhPdAKACL8x3vLCWRFCztAgfd9fDL1mMpYjn0q7pBZ
2169
- c2T5NnReJaH1ZgUufzkVqSr7UIuOhWn0
2170
- -----END CERTIFICATE-----
2171
-
2172
- Starfield Services Root Certificate Authority - G2
2173
- ==================================================
2174
- -----BEGIN CERTIFICATE-----
2175
- MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMxEDAOBgNVBAgT
2176
- B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9s
2177
- b2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVsZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRl
2178
- IEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNV
2179
- BAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxT
2180
- dGFyZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2VydmljZXMg
2181
- Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
2182
- AQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20pOsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2
2183
- h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm28xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4Pa
2184
- hHQUw2eeBGg6345AWh1KTs9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLP
2185
- LJGmpufehRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk6mFB
2186
- rMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAwDwYDVR0TAQH/BAUw
2187
- AwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+qAdcwKziIorhtSpzyEZGDMA0GCSqG
2188
- SIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMIbw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPP
2189
- E95Dz+I0swSdHynVv/heyNXBve6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTy
2190
- xQGjhdByPq1zqwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkd
2191
- iEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn0q23KXB56jza
2192
- YyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCNsSi6
2193
- -----END CERTIFICATE-----
2194
-
2195
- AffirmTrust Commercial
2196
- ======================
2197
- -----BEGIN CERTIFICATE-----
2198
- MIIDTDCCAjSgAwIBAgIId3cGJyapsXwwDQYJKoZIhvcNAQELBQAwRDELMAkGA1UEBhMCVVMxFDAS
2199
- BgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBDb21tZXJjaWFsMB4XDTEw
2200
- MDEyOTE0MDYwNloXDTMwMTIzMTE0MDYwNlowRDELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmly
2201
- bVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBDb21tZXJjaWFsMIIBIjANBgkqhkiG9w0BAQEF
2202
- AAOCAQ8AMIIBCgKCAQEA9htPZwcroRX1BiLLHwGy43NFBkRJLLtJJRTWzsO3qyxPxkEylFf6Eqdb
2203
- DuKPHx6GGaeqtS25Xw2Kwq+FNXkyLbscYjfysVtKPcrNcV/pQr6U6Mje+SJIZMblq8Yrba0F8PrV
2204
- C8+a5fBQpIs7R6UjW3p6+DM/uO+Zl+MgwdYoic+U+7lF7eNAFxHUdPALMeIrJmqbTFeurCA+ukV6
2205
- BfO9m2kVrn1OIGPENXY6BwLJN/3HR+7o8XYdcxXyl6S1yHp52UKqK39c/s4mT6NmgTWvRLpUHhww
2206
- MmWd5jyTXlBOeuM61G7MGvv50jeuJCqrVwMiKA1JdX+3KNp1v47j3A55MQIDAQABo0IwQDAdBgNV
2207
- HQ4EFgQUnZPGU4teyq8/nx4P5ZmVvCT2lI8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
2208
- AQYwDQYJKoZIhvcNAQELBQADggEBAFis9AQOzcAN/wr91LoWXym9e2iZWEnStB03TX8nfUYGXUPG
2209
- hi4+c7ImfU+TqbbEKpqrIZcUsd6M06uJFdhrJNTxFq7YpFzUf1GO7RgBsZNjvbz4YYCanrHOQnDi
2210
- qX0GJX0nof5v7LMeJNrjS1UaADs1tDvZ110w/YETifLCBivtZ8SOyUOyXGsViQK8YvxO8rUzqrJv
2211
- 0wqiUOP2O+guRMLbZjipM1ZI8W0bM40NjD9gN53Tym1+NH4Nn3J2ixufcv1SNUFFApYvHLKac0kh
2212
- sUlHRUe072o0EclNmsxZt9YCnlpOZbWUrhvfKbAW8b8Angc6F2S1BLUjIZkKlTuXfO8=
2213
- -----END CERTIFICATE-----
2214
-
2215
- AffirmTrust Networking
2216
- ======================
2217
- -----BEGIN CERTIFICATE-----
2218
- MIIDTDCCAjSgAwIBAgIIfE8EORzUmS0wDQYJKoZIhvcNAQEFBQAwRDELMAkGA1UEBhMCVVMxFDAS
2219
- BgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBOZXR3b3JraW5nMB4XDTEw
2220
- MDEyOTE0MDgyNFoXDTMwMTIzMTE0MDgyNFowRDELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmly
2221
- bVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBOZXR3b3JraW5nMIIBIjANBgkqhkiG9w0BAQEF
2222
- AAOCAQ8AMIIBCgKCAQEAtITMMxcua5Rsa2FSoOujz3mUTOWUgJnLVWREZY9nZOIG41w3SfYvm4SE
2223
- Hi3yYJ0wTsyEheIszx6e/jarM3c1RNg1lho9Nuh6DtjVR6FqaYvZ/Ls6rnla1fTWcbuakCNrmreI
2224
- dIcMHl+5ni36q1Mr3Lt2PpNMCAiMHqIjHNRqrSK6mQEubWXLviRmVSRLQESxG9fhwoXA3hA/Pe24
2225
- /PHxI1Pcv2WXb9n5QHGNfb2V1M6+oF4nI979ptAmDgAp6zxG8D1gvz9Q0twmQVGeFDdCBKNwV6gb
2226
- h+0t+nvujArjqWaJGctB+d1ENmHP4ndGyH329JKBNv3bNPFyfvMMFr20FQIDAQABo0IwQDAdBgNV
2227
- HQ4EFgQUBx/S55zawm6iQLSwelAQUHTEyL0wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
2228
- AQYwDQYJKoZIhvcNAQEFBQADggEBAIlXshZ6qML91tmbmzTCnLQyFE2npN/svqe++EPbkTfOtDIu
2229
- UFUaNU52Q3Eg75N3ThVwLofDwR1t3Mu1J9QsVtFSUzpE0nPIxBsFZVpikpzuQY0x2+c06lkh1QF6
2230
- 12S4ZDnNye2v7UsDSKegmQGA3GWjNq5lWUhPgkvIZfFXHeVZLgo/bNjR9eUJtGxUAArgFU2HdW23
2231
- WJZa3W3SAKD0m0i+wzekujbgfIeFlxoVot4uolu9rxj5kFDNcFn4J2dHy8egBzp90SxdbBk6ZrV9
2232
- /ZFvgrG+CJPbFEfxojfHRZ48x3evZKiT3/Zpg4Jg8klCNO1aAFSFHBY2kgxc+qatv9s=
2233
- -----END CERTIFICATE-----
2234
-
2235
- AffirmTrust Premium
2236
- ===================
2237
- -----BEGIN CERTIFICATE-----
2238
- MIIFRjCCAy6gAwIBAgIIbYwURrGmCu4wDQYJKoZIhvcNAQEMBQAwQTELMAkGA1UEBhMCVVMxFDAS
2239
- BgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVzdCBQcmVtaXVtMB4XDTEwMDEy
2240
- OTE0MTAzNloXDTQwMTIzMTE0MTAzNlowQTELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRy
2241
- dXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVzdCBQcmVtaXVtMIICIjANBgkqhkiG9w0BAQEFAAOCAg8A
2242
- MIICCgKCAgEAxBLfqV/+Qd3d9Z+K4/as4Tx4mrzY8H96oDMq3I0gW64tb+eT2TZwamjPjlGjhVtn
2243
- BKAQJG9dKILBl1fYSCkTtuG+kU3fhQxTGJoeJKJPj/CihQvL9Cl/0qRY7iZNyaqoe5rZ+jjeRFcV
2244
- 5fiMyNlI4g0WJx0eyIOFJbe6qlVBzAMiSy2RjYvmia9mx+n/K+k8rNrSs8PhaJyJ+HoAVt70VZVs
2245
- +7pk3WKL3wt3MutizCaam7uqYoNMtAZ6MMgpv+0GTZe5HMQxK9VfvFMSF5yZVylmd2EhMQcuJUmd
2246
- GPLu8ytxjLW6OQdJd/zvLpKQBY0tL3d770O/Nbua2Plzpyzy0FfuKE4mX4+QaAkvuPjcBukumj5R
2247
- p9EixAqnOEhss/n/fauGV+O61oV4d7pD6kh/9ti+I20ev9E2bFhc8e6kGVQa9QPSdubhjL08s9NI
2248
- S+LI+H+SqHZGnEJlPqQewQcDWkYtuJfzt9WyVSHvutxMAJf7FJUnM7/oQ0dG0giZFmA7mn7S5u04
2249
- 6uwBHjxIVkkJx0w3AJ6IDsBz4W9m6XJHMD4Q5QsDyZpCAGzFlH5hxIrff4IaC1nEWTJ3s7xgaVY5
2250
- /bQGeyzWZDbZvUjthB9+pSKPKrhC9IK31FOQeE4tGv2Bb0TXOwF0lkLgAOIua+rF7nKsu7/+6qqo
2251
- +Nz2snmKtmcCAwEAAaNCMEAwHQYDVR0OBBYEFJ3AZ6YMItkm9UWrpmVSESfYRaxjMA8GA1UdEwEB
2252
- /wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBDAUAA4ICAQCzV00QYk465KzquByv
2253
- MiPIs0laUZx2KI15qldGF9X1Uva3ROgIRL8YhNILgM3FEv0AVQVhh0HctSSePMTYyPtwni94loMg
2254
- Nt58D2kTiKV1NpgIpsbfrM7jWNa3Pt668+s0QNiigfV4Py/VpfzZotReBA4Xrf5B8OWycvpEgjNC
2255
- 6C1Y91aMYj+6QrCcDFx+LmUmXFNPALJ4fqENmS2NuB2OosSw/WDQMKSOyARiqcTtNd56l+0OOF6S
2256
- L5Nwpamcb6d9Ex1+xghIsV5n61EIJenmJWtSKZGc0jlzCFfemQa0W50QBuHCAKi4HEoCChTQwUHK
2257
- +4w1IX2COPKpVJEZNZOUbWo6xbLQu4mGk+ibyQ86p3q4ofB4Rvr8Ny/lioTz3/4E2aFooC8k4gmV
2258
- BtWVyuEklut89pMFu+1z6S3RdTnX5yTb2E5fQ4+e0BQ5v1VwSJlXMbSc7kqYA5YwH2AG7hsj/oFg
2259
- IxpHYoWlzBk0gG+zrBrjn/B7SK3VAdlntqlyk+otZrWyuOQ9PLLvTIzq6we/qzWaVYa8GKa1qF60
2260
- g2xraUDTn9zxw2lrueFtCfTxqlB2Cnp9ehehVZZCmTEJ3WARjQUwfuaORtGdFNrHF+QFlozEJLUb
2261
- zxQHskD4o55BhrwE0GuWyCqANP2/7waj3VjFhT0+j/6eKeC2uAloGRwYQw==
2262
- -----END CERTIFICATE-----
2263
-
2264
- AffirmTrust Premium ECC
2265
- =======================
2266
- -----BEGIN CERTIFICATE-----
2267
- MIIB/jCCAYWgAwIBAgIIdJclisc/elQwCgYIKoZIzj0EAwMwRTELMAkGA1UEBhMCVVMxFDASBgNV
2268
- BAoMC0FmZmlybVRydXN0MSAwHgYDVQQDDBdBZmZpcm1UcnVzdCBQcmVtaXVtIEVDQzAeFw0xMDAx
2269
- MjkxNDIwMjRaFw00MDEyMzExNDIwMjRaMEUxCzAJBgNVBAYTAlVTMRQwEgYDVQQKDAtBZmZpcm1U
2270
- cnVzdDEgMB4GA1UEAwwXQWZmaXJtVHJ1c3QgUHJlbWl1bSBFQ0MwdjAQBgcqhkjOPQIBBgUrgQQA
2271
- IgNiAAQNMF4bFZ0D0KF5Nbc6PJJ6yhUczWLznCZcBz3lVPqj1swS6vQUX+iOGasvLkjmrBhDeKzQ
2272
- N8O9ss0s5kfiGuZjuD0uL3jET9v0D6RoTFVya5UdThhClXjMNzyR4ptlKymjQjBAMB0GA1UdDgQW
2273
- BBSaryl6wBE1NSZRMADDav5A1a7WPDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAK
2274
- BggqhkjOPQQDAwNnADBkAjAXCfOHiFBar8jAQr9HX/VsaobgxCd05DhT1wV/GzTjxi+zygk8N53X
2275
- 57hG8f2h4nECMEJZh0PUUd+60wkyWs6Iflc9nF9Ca/UHLbXwgpP5WW+uZPpY5Yse42O+tYHNbwKM
2276
- eQ==
2277
- -----END CERTIFICATE-----
2278
-
2279
- Certum Trusted Network CA
2280
- =========================
2281
- -----BEGIN CERTIFICATE-----
2282
- MIIDuzCCAqOgAwIBAgIDBETAMA0GCSqGSIb3DQEBBQUAMH4xCzAJBgNVBAYTAlBMMSIwIAYDVQQK
2283
- ExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlv
2284
- biBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBUcnVzdGVkIE5ldHdvcmsgQ0EwHhcNMDgxMDIy
2285
- MTIwNzM3WhcNMjkxMjMxMTIwNzM3WjB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBU
2286
- ZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5
2287
- MSIwIAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMIIBIjANBgkqhkiG9w0BAQEFAAOC
2288
- AQ8AMIIBCgKCAQEA4/t9o3K6wvDJFIf1awFO4W5AB7ptJ11/91sts1rHUV+rpDKmYYe2bg+G0jAC
2289
- l/jXaVehGDldamR5xgFZrDwxSjh80gTSSyjoIF87B6LMTXPb865Px1bVWqeWifrzq2jUI4ZZJ88J
2290
- J7ysbnKDHDBy3+Ci6dLhdHUZvSqeexVUBBvXQzmtVSjF4hq79MDkrjhJM8x2hZ85RdKknvISjFH4
2291
- fOQtf/WsX+sWn7Et0brMkUJ3TCXJkDhv2/DM+44el1k+1WBO5gUo7Ul5E0u6SNsv+XLTOcr+H9g0
2292
- cvW0QM8xAcPs3hEtF10fuFDRXhmnad4HMyjKUJX5p1TLVIZQRan5SQIDAQABo0IwQDAPBgNVHRMB
2293
- Af8EBTADAQH/MB0GA1UdDgQWBBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNVHQ8BAf8EBAMCAQYw
2294
- DQYJKoZIhvcNAQEFBQADggEBAKaorSLOAT2mo/9i0Eidi15ysHhE49wcrwn9I0j6vSrEuVUEtRCj
2295
- jSfeC4Jj0O7eDDd5QVsisrCaQVymcODU0HfLI9MA4GxWL+FpDQ3Zqr8hgVDZBqWo/5U30Kr+4rP1
2296
- mS1FhIrlQgnXdAIv94nYmem8J9RHjboNRhx3zxSkHLmkMcScKHQDNP8zGSal6Q10tz6XxnboJ5aj
2297
- Zt3hrvJBW8qYVoNzcOSGGtIxQbovvi0TWnZvTuhOgQ4/WwMioBK+ZlgRSssDxLQqKi2WF+A5VLxI
2298
- 03YnnZotBqbJ7DnSq9ufmgsnAjUpsUCV5/nonFWIGUbWtzT1fs45mtk48VH3Tyw=
2299
- -----END CERTIFICATE-----
2300
-
2301
- Certinomis - Autorité Racine
2302
- =============================
2303
- -----BEGIN CERTIFICATE-----
2304
- MIIFnDCCA4SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJGUjETMBEGA1UEChMK
2305
- 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
- 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
- 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
- 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
- ggIPADCCAgoCggIBAJ2Fn4bT46/HsmtuM+Cet0I0VZ35gb5j2CN2DpdUzZlMGvE5x4jYF1AMnmHa
2310
- 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
- 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
- 2F1MpQiD8aYkOBOo7C+ooWfHpi2GR+6K/OybDnT0K0kCe5B1jPyZOQE51kqJ5Z52qz6WKDgmi92N
2313
- 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
- c1pkIuVC28+BA5PY9OMQ4HL2AHCs8MF6DwV/zzRpRbWT5BnbUhYjBYkOjUjkJW+zeL9i9Qf6lSTC
2315
- lrLooyPCXQP8w9PlfMl1I9f09bze5N/NgL+RiH2nE7Q5uiy6vdFrzPOlKO1Enn1So2+WLhl+HPNb
2316
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
2329
- vgt2Fl43N+bYdJeimUV5
2330
- -----END CERTIFICATE-----
2331
-
2332
- Root CA Generalitat Valenciana
2333
- ==============================
2334
- -----BEGIN CERTIFICATE-----
2335
- MIIGizCCBXOgAwIBAgIEO0XlaDANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJFUzEfMB0GA1UE
2336
- ChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UECxMGUEtJR1ZBMScwJQYDVQQDEx5Sb290
2337
- IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmEwHhcNMDEwNzA2MTYyMjQ3WhcNMjEwNzAxMTUyMjQ3
2338
- WjBoMQswCQYDVQQGEwJFUzEfMB0GA1UEChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UE
2339
- CxMGUEtJR1ZBMScwJQYDVQQDEx5Sb290IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmEwggEiMA0G
2340
- CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDGKqtXETcvIorKA3Qdyu0togu8M1JAJke+WmmmO3I2
2341
- F0zo37i7L3bhQEZ0ZQKQUgi0/6iMweDHiVYQOTPvaLRfX9ptI6GJXiKjSgbwJ/BXufjpTjJ3Cj9B
2342
- ZPPrZe52/lSqfR0grvPXdMIKX/UIKFIIzFVd0g/bmoGlu6GzwZTNVOAydTGRGmKy3nXiz0+J2ZGQ
2343
- D0EbtFpKd71ng+CT516nDOeB0/RSrFOyA8dEJvt55cs0YFAQexvba9dHq198aMpunUEDEO5rmXte
2344
- JajCq+TA81yc477OMUxkHl6AovWDfgzWyoxVjr7gvkkHD6MkQXpYHYTqWBLI4bft75PelAgxAgMB
2345
- AAGjggM7MIIDNzAyBggrBgEFBQcBAQQmMCQwIgYIKwYBBQUHMAGGFmh0dHA6Ly9vY3NwLnBraS5n
2346
- dmEuZXMwEgYDVR0TAQH/BAgwBgEB/wIBAjCCAjQGA1UdIASCAiswggInMIICIwYKKwYBBAG/VQIB
2347
- ADCCAhMwggHoBggrBgEFBQcCAjCCAdoeggHWAEEAdQB0AG8AcgBpAGQAYQBkACAAZABlACAAQwBl
2348
- AHIAdABpAGYAaQBjAGEAYwBpAPMAbgAgAFIAYQDtAHoAIABkAGUAIABsAGEAIABHAGUAbgBlAHIA
2349
- YQBsAGkAdABhAHQAIABWAGEAbABlAG4AYwBpAGEAbgBhAC4ADQAKAEwAYQAgAEQAZQBjAGwAYQBy
2350
- AGEAYwBpAPMAbgAgAGQAZQAgAFAAcgDhAGMAdABpAGMAYQBzACAAZABlACAAQwBlAHIAdABpAGYA
2351
- aQBjAGEAYwBpAPMAbgAgAHEAdQBlACAAcgBpAGcAZQAgAGUAbAAgAGYAdQBuAGMAaQBvAG4AYQBt
2352
- AGkAZQBuAHQAbwAgAGQAZQAgAGwAYQAgAHAAcgBlAHMAZQBuAHQAZQAgAEEAdQB0AG8AcgBpAGQA
2353
- YQBkACAAZABlACAAQwBlAHIAdABpAGYAaQBjAGEAYwBpAPMAbgAgAHMAZQAgAGUAbgBjAHUAZQBu
2354
- AHQAcgBhACAAZQBuACAAbABhACAAZABpAHIAZQBjAGMAaQDzAG4AIAB3AGUAYgAgAGgAdAB0AHAA
2355
- OgAvAC8AdwB3AHcALgBwAGsAaQAuAGcAdgBhAC4AZQBzAC8AYwBwAHMwJQYIKwYBBQUHAgEWGWh0
2356
- dHA6Ly93d3cucGtpLmd2YS5lcy9jcHMwHQYDVR0OBBYEFHs100DSHHgZZu90ECjcPk+yeAT8MIGV
2357
- BgNVHSMEgY0wgYqAFHs100DSHHgZZu90ECjcPk+yeAT8oWykajBoMQswCQYDVQQGEwJFUzEfMB0G
2358
- A1UEChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UECxMGUEtJR1ZBMScwJQYDVQQDEx5S
2359
- b290IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmGCBDtF5WgwDQYJKoZIhvcNAQEFBQADggEBACRh
2360
- TvW1yEICKrNcda3FbcrnlD+laJWIwVTAEGmiEi8YPyVQqHxK6sYJ2fR1xkDar1CdPaUWu20xxsdz
2361
- Ckj+IHLtb8zog2EWRpABlUt9jppSCS/2bxzkoXHPjCpaF3ODR00PNvsETUlR4hTJZGH71BTg9J63
2362
- NI8KJr2XXPR5OkowGcytT6CYirQxlyric21+eLj4iIlPsSKRZEv1UN4D2+XFducTZnV+ZfsBn5OH
2363
- iJ35Rld8TWCvmHMTI6QgkYH60GFmuH3Rr9ZvHmw96RH9qfmCIoaZM3Fa6hlXPZHNqcCjbgcTpsnt
2364
- +GijnsNacgmHKNHEc8RzGF9QdRYxn7fofMM=
2365
- -----END CERTIFICATE-----
2366
-
2367
- TWCA Root Certification Authority
2368
- =================================
2369
- -----BEGIN CERTIFICATE-----
2370
- MIIDezCCAmOgAwIBAgIBATANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQGEwJUVzESMBAGA1UECgwJ
2371
- VEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NBIFJvb3QgQ2VydGlmaWNh
2372
- dGlvbiBBdXRob3JpdHkwHhcNMDgwODI4MDcyNDMzWhcNMzAxMjMxMTU1OTU5WjBfMQswCQYDVQQG
2373
- EwJUVzESMBAGA1UECgwJVEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NB
2374
- IFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
2375
- AoIBAQCwfnK4pAOU5qfeCTiRShFAh6d8WWQUe7UREN3+v9XAu1bihSX0NXIP+FPQQeFEAcK0HMMx
2376
- QhZHhTMidrIKbw/lJVBPhYa+v5guEGcevhEFhgWQxFnQfHgQsIBct+HHK3XLfJ+utdGdIzdjp9xC
2377
- oi2SBBtQwXu4PhvJVgSLL1KbralW6cH/ralYhzC2gfeXRfwZVzsrb+RH9JlF/h3x+JejiB03HFyP
2378
- 4HYlmlD4oFT/RJB2I9IyxsOrBr/8+7/zrX2SYgJbKdM1o5OaQ2RgXbL6Mv87BK9NQGr5x+PvI/1r
2379
- y+UPizgN7gr8/g+YnzAx3WxSZfmLgb4i4RxYA7qRG4kHAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIB
2380
- BjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqOFsmjd6LWvJPelSDGRjjCDWmujANBgkqhkiG
2381
- 9w0BAQUFAAOCAQEAPNV3PdrfibqHDAhUaiBQkr6wQT25JmSDCi/oQMCXKCeCMErJk/9q56YAf4lC
2382
- mtYR5VPOL8zy2gXE/uJQxDqGfczafhAJO5I1KlOy/usrBdlsXebQ79NqZp4VKIV66IIArB6nCWlW
2383
- QtNoURi+VJq/REG6Sb4gumlc7rh3zc5sH62Dlhh9DrUUOYTxKOkto557HnpyWoOzeW/vtPzQCqVY
2384
- T0bf+215WfKEIlKuD8z7fDvnaspHYcN6+NOSBB+4IIThNlQWx0DeO4pz3N/GCUzf7Nr/1FNCocny
2385
- Yh0igzyXxfkZYiesZSLX0zzG5Y6yU8xJzrww/nsOM5D77dIUkR8Hrw==
2386
- -----END CERTIFICATE-----
2387
-
2388
- Security Communication RootCA2
2389
- ==============================
2390
- -----BEGIN CERTIFICATE-----
2391
- MIIDdzCCAl+gAwIBAgIBADANBgkqhkiG9w0BAQsFADBdMQswCQYDVQQGEwJKUDElMCMGA1UEChMc
2392
- U0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEnMCUGA1UECxMeU2VjdXJpdHkgQ29tbXVuaWNh
2393
- dGlvbiBSb290Q0EyMB4XDTA5MDUyOTA1MDAzOVoXDTI5MDUyOTA1MDAzOVowXTELMAkGA1UEBhMC
2394
- SlAxJTAjBgNVBAoTHFNFQ09NIFRydXN0IFN5c3RlbXMgQ08uLExURC4xJzAlBgNVBAsTHlNlY3Vy
2395
- aXR5IENvbW11bmljYXRpb24gUm9vdENBMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
2396
- ANAVOVKxUrO6xVmCxF1SrjpDZYBLx/KWvNs2l9amZIyoXvDjChz335c9S672XewhtUGrzbl+dp++
2397
- +T42NKA7wfYxEUV0kz1XgMX5iZnK5atq1LXaQZAQwdbWQonCv/Q4EpVMVAX3NuRFg3sUZdbcDE3R
2398
- 3n4MqzvEFb46VqZab3ZpUql6ucjrappdUtAtCms1FgkQhNBqyjoGADdH5H5XTz+L62e4iKrFvlNV
2399
- spHEfbmwhRkGeC7bYRr6hfVKkaHnFtWOojnflLhwHyg/i/xAXmODPIMqGplrz95Zajv8bxbXH/1K
2400
- EOtOghY6rCcMU/Gt1SSwawNQwS08Ft1ENCcadfsCAwEAAaNCMEAwHQYDVR0OBBYEFAqFqXdlBZh8
2401
- QIH4D5csOPEK7DzPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEB
2402
- CwUAA4IBAQBMOqNErLlFsceTfsgLCkLfZOoc7llsCLqJX2rKSpWeeo8HxdpFcoJxDjrSzG+ntKEj
2403
- u/Ykn8sX/oymzsLS28yN/HH8AynBbF0zX2S2ZTuJbxh2ePXcokgfGT+Ok+vx+hfuzU7jBBJV1uXk
2404
- 3fs+BXziHV7Gp7yXT2g69ekuCkO2r1dcYmh8t/2jioSgrGK+KwmHNPBqAbubKVY8/gA3zyNs8U6q
2405
- tnRGEmyR7jTV7JqR50S+kDFy1UkC9gLl9B/rfNmWVan/7Ir5mUf/NVoCqgTLiluHcSmRvaS0eg29
2406
- mvVXIwAHIRc/SjnRBUkLp7Y3gaVdjKozXoEofKd9J+sAro03
2407
- -----END CERTIFICATE-----
2408
-
2409
- EC-ACC
2410
- ======
2411
- -----BEGIN CERTIFICATE-----
2412
- MIIFVjCCBD6gAwIBAgIQ7is969Qh3hSoYqwE893EATANBgkqhkiG9w0BAQUFADCB8zELMAkGA1UE
2413
- BhMCRVMxOzA5BgNVBAoTMkFnZW5jaWEgQ2F0YWxhbmEgZGUgQ2VydGlmaWNhY2lvIChOSUYgUS0w
2414
- ODAxMTc2LUkpMSgwJgYDVQQLEx9TZXJ2ZWlzIFB1YmxpY3MgZGUgQ2VydGlmaWNhY2lvMTUwMwYD
2415
- VQQLEyxWZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5ldC92ZXJhcnJlbCAoYykwMzE1MDMGA1UE
2416
- CxMsSmVyYXJxdWlhIEVudGl0YXRzIGRlIENlcnRpZmljYWNpbyBDYXRhbGFuZXMxDzANBgNVBAMT
2417
- BkVDLUFDQzAeFw0wMzAxMDcyMzAwMDBaFw0zMTAxMDcyMjU5NTlaMIHzMQswCQYDVQQGEwJFUzE7
2418
- MDkGA1UEChMyQWdlbmNpYSBDYXRhbGFuYSBkZSBDZXJ0aWZpY2FjaW8gKE5JRiBRLTA4MDExNzYt
2419
- SSkxKDAmBgNVBAsTH1NlcnZlaXMgUHVibGljcyBkZSBDZXJ0aWZpY2FjaW8xNTAzBgNVBAsTLFZl
2420
- Z2V1IGh0dHBzOi8vd3d3LmNhdGNlcnQubmV0L3ZlcmFycmVsIChjKTAzMTUwMwYDVQQLEyxKZXJh
2421
- cnF1aWEgRW50aXRhdHMgZGUgQ2VydGlmaWNhY2lvIENhdGFsYW5lczEPMA0GA1UEAxMGRUMtQUND
2422
- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsyLHT+KXQpWIR4NA9h0X84NzJB5R85iK
2423
- w5K4/0CQBXCHYMkAqbWUZRkiFRfCQ2xmRJoNBD45b6VLeqpjt4pEndljkYRm4CgPukLjbo73FCeT
2424
- ae6RDqNfDrHrZqJyTxIThmV6PttPB/SnCWDaOkKZx7J/sxaVHMf5NLWUhdWZXqBIoH7nF2W4onW4
2425
- HvPlQn2v7fOKSGRdghST2MDk/7NQcvJ29rNdQlB50JQ+awwAvthrDk4q7D7SzIKiGGUzE3eeml0a
2426
- E9jD2z3Il3rucO2n5nzbcc8tlGLfbdb1OL4/pYUKGbio2Al1QnDE6u/LDsg0qBIimAy4E5S2S+zw
2427
- 0JDnJwIDAQABo4HjMIHgMB0GA1UdEQQWMBSBEmVjX2FjY0BjYXRjZXJ0Lm5ldDAPBgNVHRMBAf8E
2428
- BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUoMOLRKo3pUW/l4Ba0fF4opvpXY0wfwYD
2429
- VR0gBHgwdjB0BgsrBgEEAfV4AQMBCjBlMCwGCCsGAQUFBwIBFiBodHRwczovL3d3dy5jYXRjZXJ0
2430
- Lm5ldC92ZXJhcnJlbDA1BggrBgEFBQcCAjApGidWZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5l
2431
- dC92ZXJhcnJlbCAwDQYJKoZIhvcNAQEFBQADggEBAKBIW4IB9k1IuDlVNZyAelOZ1Vr/sXE7zDkJ
2432
- lF7W2u++AVtd0x7Y/X1PzaBB4DSTv8vihpw3kpBWHNzrKQXlxJ7HNd+KDM3FIUPpqojlNcAZQmNa
2433
- Al6kSBg6hW/cnbw/nZzBh7h6YQjpdwt/cKt63dmXLGQehb+8dJahw3oS7AwaboMMPOhyRp/7SNVe
2434
- l+axofjk70YllJyJ22k4vuxcDlbHZVHlUIiIv0LVKz3l+bqeLrPK9HOSAgu+TGbrIP65y7WZf+a2
2435
- E/rKS03Z7lNGBjvGTq2TWoF+bCpLagVFjPIhpDGQh2xlnJ2lYJU6Un/10asIbvPuW/mIPX64b24D
2436
- 5EI=
2437
- -----END CERTIFICATE-----
2438
-
2439
- Hellenic Academic and Research Institutions RootCA 2011
2440
- =======================================================
2441
- -----BEGIN CERTIFICATE-----
2442
- MIIEMTCCAxmgAwIBAgIBADANBgkqhkiG9w0BAQUFADCBlTELMAkGA1UEBhMCR1IxRDBCBgNVBAoT
2443
- O0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ2VydC4gQXV0aG9y
2444
- aXR5MUAwPgYDVQQDEzdIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25z
2445
- IFJvb3RDQSAyMDExMB4XDTExMTIwNjEzNDk1MloXDTMxMTIwMTEzNDk1MlowgZUxCzAJBgNVBAYT
2446
- AkdSMUQwQgYDVQQKEztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25z
2447
- IENlcnQuIEF1dGhvcml0eTFAMD4GA1UEAxM3SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNo
2448
- IEluc3RpdHV0aW9ucyBSb290Q0EgMjAxMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
2449
- AKlTAOMupvaO+mDYLZU++CwqVE7NuYRhlFhPjz2L5EPzdYmNUeTDN9KKiE15HrcS3UN4SoqS5tdI
2450
- 1Q+kOilENbgH9mgdVc04UfCMJDGFr4PJfel3r+0ae50X+bOdOFAPplp5kYCvN66m0zH7tSYJnTxa
2451
- 71HFK9+WXesyHgLacEnsbgzImjeN9/E2YEsmLIKe0HjzDQ9jpFEw4fkrJxIH2Oq9GGKYsFk3fb7u
2452
- 8yBRQlqD75O6aRXxYp2fmTmCobd0LovUxQt7L/DICto9eQqakxylKHJzkUOap9FNhYS5qXSPFEDH
2453
- 3N6sQWRstBmbAmNtJGSPRLIl6s5ddAxjMlyNh+UCAwEAAaOBiTCBhjAPBgNVHRMBAf8EBTADAQH/
2454
- MAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQUppFC/RNhSiOeCKQp5dgTBCPuQSUwRwYDVR0eBEAwPqA8
2455
- MAWCAy5ncjAFggMuZXUwBoIELmVkdTAGggQub3JnMAWBAy5ncjAFgQMuZXUwBoEELmVkdTAGgQQu
2456
- b3JnMA0GCSqGSIb3DQEBBQUAA4IBAQAf73lB4XtuP7KMhjdCSk4cNx6NZrokgclPEg8hwAOXhiVt
2457
- XdMiKahsog2p6z0GW5k6x8zDmjR/qw7IThzh+uTczQ2+vyT+bOdrwg3IBp5OjWEopmr95fZi6hg8
2458
- TqBTnbI6nOulnJEWtk2C4AwFSKls9cz4y51JtPACpf1wA+2KIaWuE4ZJwzNzvoc7dIsXRSZMFpGD
2459
- /md9zU1jZ/rzAxKWeAaNsWftjj++n08C9bMJL/NMh98qy5V8AcysNnq/onN694/BtZqhFLKPM58N
2460
- 7yLcZnuEvUUXBj08yrl3NI/K6s8/MT7jiOOASSXIl7WdmplNsDz4SgCbZN2fOUvRJ9e4
2461
- -----END CERTIFICATE-----
2462
-
2463
- Actalis Authentication Root CA
2464
- ==============================
2465
- -----BEGIN CERTIFICATE-----
2466
- MIIFuzCCA6OgAwIBAgIIVwoRl0LE48wwDQYJKoZIhvcNAQELBQAwazELMAkGA1UEBhMCSVQxDjAM
2467
- BgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8wMzM1ODUyMDk2NzEnMCUGA1UE
2468
- AwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290IENBMB4XDTExMDkyMjExMjIwMloXDTMwMDky
2469
- MjExMjIwMlowazELMAkGA1UEBhMCSVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlz
2470
- IFMucC5BLi8wMzM1ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290
2471
- IENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAp8bEpSmkLO/lGMWwUKNvUTufClrJ
2472
- wkg4CsIcoBh/kbWHuUA/3R1oHwiD1S0eiKD4j1aPbZkCkpAW1V8IbInX4ay8IMKx4INRimlNAJZa
2473
- by/ARH6jDuSRzVju3PvHHkVH3Se5CAGfpiEd9UEtL0z9KK3giq0itFZljoZUj5NDKd45RnijMCO6
2474
- zfB9E1fAXdKDa0hMxKufgFpbOr3JpyI/gCczWw63igxdBzcIy2zSekciRDXFzMwujt0q7bd9Zg1f
2475
- YVEiVRvjRuPjPdA1YprbrxTIW6HMiRvhMCb8oJsfgadHHwTrozmSBp+Z07/T6k9QnBn+locePGX2
2476
- oxgkg4YQ51Q+qDp2JE+BIcXjDwL4k5RHILv+1A7TaLndxHqEguNTVHnd25zS8gebLra8Pu2Fbe8l
2477
- EfKXGkJh90qX6IuxEAf6ZYGyojnP9zz/GPvG8VqLWeICrHuS0E4UT1lF9gxeKF+w6D9Fz8+vm2/7
2478
- hNN3WpVvrJSEnu68wEqPSpP4RCHiMUVhUE4Q2OM1fEwZtN4Fv6MGn8i1zeQf1xcGDXqVdFUNaBr8
2479
- EBtiZJ1t4JWgw5QHVw0U5r0F+7if5t+L4sbnfpb2U8WANFAoWPASUHEXMLrmeGO89LKtmyuy/uE5
2480
- jF66CyCU3nuDuP/jVo23Eek7jPKxwV2dpAtMK9myGPW1n0sCAwEAAaNjMGEwHQYDVR0OBBYEFFLY
2481
- iDrIn3hm7YnzezhwlMkCAjbQMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUUtiIOsifeGbt
2482
- ifN7OHCUyQICNtAwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4ICAQALe3KHwGCmSUyI
2483
- WOYdiPcUZEim2FgKDk8TNd81HdTtBjHIgT5q1d07GjLukD0R0i70jsNjLiNmsGe+b7bAEzlgqqI0
2484
- JZN1Ut6nna0Oh4lScWoWPBkdg/iaKWW+9D+a2fDzWochcYBNy+A4mz+7+uAwTc+G02UQGRjRlwKx
2485
- K3JCaKygvU5a2hi/a5iB0P2avl4VSM0RFbnAKVy06Ij3Pjaut2L9HmLecHgQHEhb2rykOLpn7VU+
2486
- Xlff1ANATIGk0k9jpwlCCRT8AKnCgHNPLsBA2RF7SOp6AsDT6ygBJlh0wcBzIm2Tlf05fbsq4/aC
2487
- 4yyXX04fkZT6/iyj2HYauE2yOE+b+h1IYHkm4vP9qdCa6HCPSXrW5b0KDtst842/6+OkfcvHlXHo
2488
- 2qN8xcL4dJIEG4aspCJTQLas/kx2z/uUMsA1n3Y/buWQbqCmJqK4LL7RK4X9p2jIugErsWx0Hbhz
2489
- lefut8cl8ABMALJ+tguLHPPAUJ4lueAI3jZm/zel0btUZCzJJ7VLkn5l/9Mt4blOvH+kQSGQQXem
2490
- OR/qnuOf0GZvBeyqdn6/axag67XH/JJULysRJyU3eExRarDzzFhdFPFqSBX/wge2sY0PjlxQRrM9
2491
- vwGYT7JZVEc+NHt4bVaTLnPqZih4zR0Uv6CPLy64Lo7yFIrM6bV8+2ydDKXhlg==
2492
- -----END CERTIFICATE-----
2493
-
2494
- Trustis FPS Root CA
2495
- ===================
2496
- -----BEGIN CERTIFICATE-----
2497
- MIIDZzCCAk+gAwIBAgIQGx+ttiD5JNM2a/fH8YygWTANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQG
2498
- EwJHQjEYMBYGA1UEChMPVHJ1c3RpcyBMaW1pdGVkMRwwGgYDVQQLExNUcnVzdGlzIEZQUyBSb290
2499
- IENBMB4XDTAzMTIyMzEyMTQwNloXDTI0MDEyMTExMzY1NFowRTELMAkGA1UEBhMCR0IxGDAWBgNV
2500
- BAoTD1RydXN0aXMgTGltaXRlZDEcMBoGA1UECxMTVHJ1c3RpcyBGUFMgUm9vdCBDQTCCASIwDQYJ
2501
- KoZIhvcNAQEBBQADggEPADCCAQoCggEBAMVQe547NdDfxIzNjpvto8A2mfRC6qc+gIMPpqdZh8mQ
2502
- RUN+AOqGeSoDvT03mYlmt+WKVoaTnGhLaASMk5MCPjDSNzoiYYkchU59j9WvezX2fihHiTHcDnlk
2503
- H5nSW7r+f2C/revnPDgpai/lkQtV/+xvWNUtyd5MZnGPDNcE2gfmHhjjvSkCqPoc4Vu5g6hBSLwa
2504
- cY3nYuUtsuvffM/bq1rKMfFMIvMFE/eC+XN5DL7XSxzA0RU8k0Fk0ea+IxciAIleH2ulrG6nS4zt
2505
- o3Lmr2NNL4XSFDWaLk6M6jKYKIahkQlBOrTh4/L68MkKokHdqeMDx4gVOxzUGpTXn2RZEm0CAwEA
2506
- AaNTMFEwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBS6+nEleYtXQSUhhgtx67JkDoshZzAd
2507
- BgNVHQ4EFgQUuvpxJXmLV0ElIYYLceuyZA6LIWcwDQYJKoZIhvcNAQEFBQADggEBAH5Y//01GX2c
2508
- GE+esCu8jowU/yyg2kdbw++BLa8F6nRIW/M+TgfHbcWzk88iNVy2P3UnXwmWzaD+vkAMXBJV+JOC
2509
- yinpXj9WV4s4NvdFGkwozZ5BuO1WTISkQMi4sKUraXAEasP41BIy+Q7DsdwyhEQsb8tGD+pmQQ9P
2510
- 8Vilpg0ND2HepZ5dfWWhPBfnqFVO76DH7cZEf1T1o+CP8HxVIo8ptoGj4W1OLBuAZ+ytIJ8MYmHV
2511
- l/9D7S3B2l0pKoU/rGXuhg8FjZBf3+6f9L/uHfuY5H+QK4R4EA5sSVPvFVtlRkpdr7r7OnIdzfYl
2512
- iB6XzCGcKQENZetX2fNXlrtIzYE=
2513
- -----END CERTIFICATE-----
2514
-
2515
- StartCom Certification Authority
2516
- ================================
2517
- -----BEGIN CERTIFICATE-----
2518
- MIIHhzCCBW+gAwIBAgIBLTANBgkqhkiG9w0BAQsFADB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMN
2519
- U3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmlu
2520
- ZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0
2521
- NjM3WhcNMzYwOTE3MTk0NjM2WjB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRk
2522
- LjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMg
2523
- U3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw
2524
- ggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZkpMyONvg45iPwbm2xPN1y
2525
- o4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rfOQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/
2526
- Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/CJi/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/d
2527
- eMotHweXMAEtcnn6RtYTKqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt
2528
- 2PZE4XNiHzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMMAv+Z
2529
- 6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w+2OqqGwaVLRcJXrJ
2530
- osmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/
2531
- untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVc
2532
- UjyJthkqcwEKDwOzEmDyei+B26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT
2533
- 37uMdBNSSwIDAQABo4ICEDCCAgwwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYD
2534
- VR0OBBYEFE4L7xqkQFulF2mHMMo0aEPQQa7yMB8GA1UdIwQYMBaAFE4L7xqkQFulF2mHMMo0aEPQ
2535
- Qa7yMIIBWgYDVR0gBIIBUTCCAU0wggFJBgsrBgEEAYG1NwEBATCCATgwLgYIKwYBBQUHAgEWImh0
2536
- dHA6Ly93d3cuc3RhcnRzc2wuY29tL3BvbGljeS5wZGYwNAYIKwYBBQUHAgEWKGh0dHA6Ly93d3cu
2537
- c3RhcnRzc2wuY29tL2ludGVybWVkaWF0ZS5wZGYwgc8GCCsGAQUFBwICMIHCMCcWIFN0YXJ0IENv
2538
- bW1lcmNpYWwgKFN0YXJ0Q29tKSBMdGQuMAMCAQEagZZMaW1pdGVkIExpYWJpbGl0eSwgcmVhZCB0
2539
- aGUgc2VjdGlvbiAqTGVnYWwgTGltaXRhdGlvbnMqIG9mIHRoZSBTdGFydENvbSBDZXJ0aWZpY2F0
2540
- aW9uIEF1dGhvcml0eSBQb2xpY3kgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuc3RhcnRzc2wuY29t
2541
- L3BvbGljeS5wZGYwEQYJYIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilTdGFydENvbSBG
2542
- cmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQsFAAOCAgEAjo/n3JR5
2543
- fPGFf59Jb2vKXfuM/gTFwWLRfUKKvFO3lANmMD+x5wqnUCBVJX92ehQN6wQOQOY+2IirByeDqXWm
2544
- N3PH/UvSTa0XQMhGvjt/UfzDtgUx3M2FIk5xt/JxXrAaxrqTi3iSSoX4eA+D/i+tLPfkpLst0OcN
2545
- Org+zvZ49q5HJMqjNTbOx8aHmNrs++myziebiMMEofYLWWivydsQD032ZGNcpRJvkrKTlMeIFw6T
2546
- tn5ii5B/q06f/ON1FE8qMt9bDeD1e5MNq6HPh+GlBEXoPBKlCcWw0bdT82AUuoVpaiF8H3VhFyAX
2547
- e2w7QSlc4axa0c2Mm+tgHRns9+Ww2vl5GKVFP0lDV9LdJNUso/2RjSe15esUBppMeyG7Oq0wBhjA
2548
- 2MFrLH9ZXF2RsXAiV+uKa0hK1Q8p7MZAwC+ITGgBF3f0JBlPvfrhsiAhS90a2Cl9qrjeVOwhVYBs
2549
- HvUwyKMQ5bLmKhQxw4UtjJixhlpPiVktucf3HMiKf8CdBUrmQk9io20ppB+Fq9vlgcitKj1MXVuE
2550
- JnHEhV5xJMqlG2zYYdMa4FTbzrqpMrUi9nNBCV24F10OD5mQ1kfabwo6YigUZ4LZ8dCAWZvLMdib
2551
- D4x3TrVoivJs9iQOLWxwxXPR3hTQcY+203sC9uO41Alua551hDnmfyWl8kgAwKQB2j8=
2552
- -----END CERTIFICATE-----
2553
-
2554
- StartCom Certification Authority G2
2555
- ===================================
2556
- -----BEGIN CERTIFICATE-----
2557
- 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
- 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
- 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
- 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
- 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
- o1XJJZlKxdBWQYeQTSFgpBSHO839sj60ZwNq7eEPS8CRhXBF4EKe3ikj1AENoBB5uNsDvfOpL9HG
2563
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUS8W0QGutHLOlHGVuRjaJhwUMDrYwDQYJ
2572
- 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
- 2s06Ctg6Wgk/XzTQLwPSZh0avZyQN8gMjgdalEVGKua+etqhqaRpEpKwfTbURIfXUfEpY9Z1zRbk
2574
- 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
- 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
- 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
- nIhT76IxW1hPkWLIwpqazRVdOKnWvvgTtZ8SafJQYqz7Fzf07rh1Z2AQ+4NQ+US1dZxAF7L+/Xld
2578
- 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
- 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
- 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
2581
- obp573PYtlNXLfbQ4ddI
2582
- -----END CERTIFICATE-----
2583
-
2584
- Buypass Class 2 Root CA
2585
- =======================
2586
- -----BEGIN CERTIFICATE-----
2587
- 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
- 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
- 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
- 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
- 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
- g1Lr6hxhFUi7HQfKjK6w3Jad6sNgkoaCKHOcVgb/S2TwDCo3SbXlzwx87vFKu3MwZfPVL4O2fuPn
2593
- 9Z6rYPnT8Z2SdIrkHJasW4DptfQxh6NR/Md+oW+OU3fUl8FVM5I+GC911K2GScuVr1QGbNgGE41b
2594
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- DnkM/crqJIByw5c/8nerQyIKx+u2DISCLIBrQYoIwOula9+ZEsuK1V6ADJHgJgg2SMX6OBE1/yWD
2607
- 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
- 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
- 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
- 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
2611
- rJgWVqA=
2612
- -----END CERTIFICATE-----
2613
-
2614
- Buypass Class 3 Root CA
2615
- =======================
2616
- -----BEGIN CERTIFICATE-----
2617
- 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
- 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
- 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
- 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
- DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKXaCpUWUOOV8l6ddjEGMnqb8RB2uACatVI2zSRH
2622
- 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
- 5r/VUv1xLXA+58bEiuPwKAv0dpihi4dVsjoT/Lc+JzeOIuOoTyrvYLs9tznDDgFHmV0ST9tD+leh
2624
- 7fmdvhFHJlsTmKtdFoqwNxxXnUX/iJY2v7vKB3tvh2PX0DJq1l1sDPGzbjniazEuOQAnFN44wOwZ
2625
- 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
- 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
- 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
- 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
- Xpacw8Tvw3xrizp5f7NJzz3iiZ+gMEuFuZyUJHmPfWupRWgPK9Dx2hzLabjKSWJtyNBjYt1gD1iq
2630
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- KSb12tjE8nVhz36udmNKekBlk4f4HoCMhuWG1o8O/FMsYOgWYRqiPkN7zTlgVGr18okmAWiDSKIz
2638
- 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
- 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
- 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
2641
- Cp/HuZc=
2642
- -----END CERTIFICATE-----
2643
-
2644
- T-TeleSec GlobalRoot Class 3
2645
- ============================
2646
- -----BEGIN CERTIFICATE-----
2647
- MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoM
2648
- IlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBU
2649
- cnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwHhcNMDgx
2650
- MDAxMTAyOTU2WhcNMzMxMDAxMjM1OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lz
2651
- dGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBD
2652
- ZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwggEiMA0GCSqGSIb3
2653
- DQEBAQUAA4IBDwAwggEKAoIBAQC9dZPwYiJvJK7genasfb3ZJNW4t/zN8ELg63iIVl6bmlQdTQyK
2654
- 9tPPcPRStdiTBONGhnFBSivwKixVA9ZIw+A5OO3yXDw/RLyTPWGrTs0NvvAgJ1gORH8EGoel15YU
2655
- NpDQSXuhdfsaa3Ox+M6pCSzyU9XDFES4hqX2iys52qMzVNn6chr3IhUciJFrf2blw2qAsCTz34ZF
2656
- iP0Zf3WHHx+xGwpzJFu5ZeAsVMhg02YXP+HMVDNzkQI6pn97djmiH5a2OK61yJN0HZ65tOVgnS9W
2657
- 0eDrXltMEnAMbEQgqxHY9Bn20pxSN+f6tsIxO0rUFJmtxxr1XV/6B7h8DR/Wgx6zAgMBAAGjQjBA
2658
- MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS1A/d2O2GCahKqGFPr
2659
- AyGUv/7OyjANBgkqhkiG9w0BAQsFAAOCAQEAVj3vlNW92nOyWL6ukK2YJ5f+AbGwUgC4TeQbIXQb
2660
- fsDuXmkqJa9c1h3a0nnJ85cp4IaH3gRZD/FZ1GSFS5mvJQQeyUapl96Cshtwn5z2r3Ex3XsFpSzT
2661
- ucpH9sry9uetuUg/vBa3wW306gmv7PO15wWeph6KU1HWk4HMdJP2udqmJQV0eVp+QD6CSyYRMG7h
2662
- P0HHRwA11fXT91Q+gT3aSWqas+8QPebrb9HIIkfLzM8BMZLZGOMivgkeGj5asuRrDFR6fUNOuIml
2663
- e9eiPZaGzPImNC1qkp2aGtAw4l1OBLBfiyB+d8E9lYLRRpo7PHi4b6HQDWSieB4pTpPDpFQUWw==
2664
- -----END CERTIFICATE-----
2665
-
2666
- EE Certification Centre Root CA
2667
- ===============================
2668
- -----BEGIN CERTIFICATE-----
2669
- MIIEAzCCAuugAwIBAgIQVID5oHPtPwBMyonY43HmSjANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQG
2670
- EwJFRTEiMCAGA1UECgwZQVMgU2VydGlmaXRzZWVyaW1pc2tlc2t1czEoMCYGA1UEAwwfRUUgQ2Vy
2671
- dGlmaWNhdGlvbiBDZW50cmUgUm9vdCBDQTEYMBYGCSqGSIb3DQEJARYJcGtpQHNrLmVlMCIYDzIw
2672
- MTAxMDMwMTAxMDMwWhgPMjAzMDEyMTcyMzU5NTlaMHUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKDBlB
2673
- UyBTZXJ0aWZpdHNlZXJpbWlza2Vza3VzMSgwJgYDVQQDDB9FRSBDZXJ0aWZpY2F0aW9uIENlbnRy
2674
- ZSBSb290IENBMRgwFgYJKoZIhvcNAQkBFglwa2lAc2suZWUwggEiMA0GCSqGSIb3DQEBAQUAA4IB
2675
- DwAwggEKAoIBAQDIIMDs4MVLqwd4lfNE7vsLDP90jmG7sWLqI9iroWUyeuuOF0+W2Ap7kaJjbMeM
2676
- TC55v6kF/GlclY1i+blw7cNRfdCT5mzrMEvhvH2/UpvObntl8jixwKIy72KyaOBhU8E2lf/slLo2
2677
- rpwcpzIP5Xy0xm90/XsY6KxX7QYgSzIwWFv9zajmofxwvI6Sc9uXp3whrj3B9UiHbCe9nyV0gVWw
2678
- 93X2PaRka9ZP585ArQ/dMtO8ihJTmMmJ+xAdTX7Nfh9WDSFwhfYggx/2uh8Ej+p3iDXE/+pOoYtN
2679
- P2MbRMNE1CV2yreN1x5KZmTNXMWcg+HCCIia7E6j8T4cLNlsHaFLAgMBAAGjgYowgYcwDwYDVR0T
2680
- AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBLyWj7qVhy/zQas8fElyalL1BSZ
2681
- MEUGA1UdJQQ+MDwGCCsGAQUFBwMCBggrBgEFBQcDAQYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEF
2682
- BQcDCAYIKwYBBQUHAwkwDQYJKoZIhvcNAQEFBQADggEBAHv25MANqhlHt01Xo/6tu7Fq1Q+e2+Rj
2683
- xY6hUFaTlrg4wCQiZrxTFGGVv9DHKpY5P30osxBAIWrEr7BSdxjhlthWXePdNl4dp1BUoMUq5KqM
2684
- lIpPnTX/dqQGE5Gion0ARD9V04I8GtVbvFZMIi5GQ4okQC3zErg7cBqklrkar4dBGmoYDQZPxz5u
2685
- uSlNDUmJEYcyW+ZLBMjkXOZ0c5RdFpgTlf7727FE5TpwrDdr5rMzcijJs1eg9gIWiAYLtqZLICjU
2686
- 3j2LrTcFU3T+bsy8QxdxXvnFzBqpYe73dgzzcvRyrc9yAjYHR8/vGVCJYMzpJJUPwssd8m92kMfM
2687
- dcGWxZ0=
2688
- -----END CERTIFICATE-----
2689
-
2690
- TURKTRUST Certificate Services Provider Root 2007
2691
- =================================================
2692
- -----BEGIN CERTIFICATE-----
2693
- MIIEPTCCAyWgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBvzE/MD0GA1UEAww2VMOcUktUUlVTVCBF
2694
- bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJUUjEP
2695
- MA0GA1UEBwwGQW5rYXJhMV4wXAYDVQQKDFVUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUg
2696
- QmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLiAoYykgQXJhbMSxayAyMDA3MB4X
2697
- DTA3MTIyNTE4MzcxOVoXDTE3MTIyMjE4MzcxOVowgb8xPzA9BgNVBAMMNlTDnFJLVFJVU1QgRWxl
2698
- a3Ryb25payBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsTELMAkGA1UEBhMCVFIxDzAN
2699
- BgNVBAcMBkFua2FyYTFeMFwGA1UECgxVVMOcUktUUlVTVCBCaWxnaSDEsGxldGnFn2ltIHZlIEJp
2700
- bGnFn2ltIEfDvHZlbmxpxJ9pIEhpem1ldGxlcmkgQS7Fni4gKGMpIEFyYWzEsWsgMjAwNzCCASIw
2701
- DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKu3PgqMyKVYFeaK7yc9SrToJdPNM8Ig3BnuiD9N
2702
- YvDdE3ePYakqtdTyuTFYKTsvP2qcb3N2Je40IIDu6rfwxArNK4aUyeNgsURSsloptJGXg9i3phQv
2703
- KUmi8wUG+7RP2qFsmmaf8EMJyupyj+sA1zU511YXRxcw9L6/P8JorzZAwan0qafoEGsIiveGHtya
2704
- KhUG9qPw9ODHFNRRf8+0222vR5YXm3dx2KdxnSQM9pQ/hTEST7ruToK4uT6PIzdezKKqdfcYbwnT
2705
- rqdUKDT74eA7YH2gvnmJhsifLfkKS8RQouf9eRbHegsYz85M733WB2+Y8a+xwXrXgTW4qhe04MsC
2706
- AwEAAaNCMEAwHQYDVR0OBBYEFCnFkKslrxHkYb+j/4hhkeYO/pyBMA4GA1UdDwEB/wQEAwIBBjAP
2707
- BgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBBQUAA4IBAQAQDdr4Ouwo0RSVgrESLFF6QSU2TJ/s
2708
- Px+EnWVUXKgWAkD6bho3hO9ynYYKVZ1WKKxmLNA6VpM0ByWtCLCPyA8JWcqdmBzlVPi5RX9ql2+I
2709
- aE1KBiY3iAIOtsbWcpnOa3faYjGkVh+uX4132l32iPwa2Z61gfAyuOOI0JzzaqC5mxRZNTZPz/OO
2710
- Xl0XrRWV2N2y1RVuAE6zS89mlOTgzbUF2mNXi+WzqtvALhyQRNsaXRik7r4EW5nVcV9VZWRi1aKb
2711
- BFmGyGJ353yCRWo9F7/snXUMrqNvWtMvmDb08PUZqxFdyKbjKlhqQgnDvZImZjINXQhVdP+MmNAK
2712
- poRq0Tl9
2713
- -----END CERTIFICATE-----
2714
-
2715
- D-TRUST Root Class 3 CA 2 2009
2716
- ==============================
2717
- -----BEGIN CERTIFICATE-----
2718
- MIIEMzCCAxugAwIBAgIDCYPzMA0GCSqGSIb3DQEBCwUAME0xCzAJBgNVBAYTAkRFMRUwEwYDVQQK
2719
- DAxELVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgMjAwOTAe
2720
- Fw0wOTExMDUwODM1NThaFw0yOTExMDUwODM1NThaME0xCzAJBgNVBAYTAkRFMRUwEwYDVQQKDAxE
2721
- LVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgMjAwOTCCASIw
2722
- DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANOySs96R+91myP6Oi/WUEWJNTrGa9v+2wBoqOAD
2723
- ER03UAifTUpolDWzU9GUY6cgVq/eUXjsKj3zSEhQPgrfRlWLJ23DEE0NkVJD2IfgXU42tSHKXzlA
2724
- BF9bfsyjxiupQB7ZNoTWSPOSHjRGICTBpFGOShrvUD9pXRl/RcPHAY9RySPocq60vFYJfxLLHLGv
2725
- KZAKyVXMD9O0Gu1HNVpK7ZxzBCHQqr0ME7UAyiZsxGsMlFqVlNpQmvH/pStmMaTJOKDfHR+4CS7z
2726
- p+hnUquVH+BGPtikw8paxTGA6Eian5Rp/hnd2HN8gcqW3o7tszIFZYQ05ub9VxC1X3a/L7AQDcUC
2727
- AwEAAaOCARowggEWMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFP3aFMSfMN4hvR5COfyrYyNJ
2728
- 4PGEMA4GA1UdDwEB/wQEAwIBBjCB0wYDVR0fBIHLMIHIMIGAoH6gfIZ6bGRhcDovL2RpcmVjdG9y
2729
- eS5kLXRydXN0Lm5ldC9DTj1ELVRSVVNUJTIwUm9vdCUyMENsYXNzJTIwMyUyMENBJTIwMiUyMDIw
2730
- MDksTz1ELVRydXN0JTIwR21iSCxDPURFP2NlcnRpZmljYXRlcmV2b2NhdGlvbmxpc3QwQ6BBoD+G
2731
- PWh0dHA6Ly93d3cuZC10cnVzdC5uZXQvY3JsL2QtdHJ1c3Rfcm9vdF9jbGFzc18zX2NhXzJfMjAw
2732
- OS5jcmwwDQYJKoZIhvcNAQELBQADggEBAH+X2zDI36ScfSF6gHDOFBJpiBSVYEQBrLLpME+bUMJm
2733
- 2H6NMLVwMeniacfzcNsgFYbQDfC+rAF1hM5+n02/t2A7nPPKHeJeaNijnZflQGDSNiH+0LS4F9p0
2734
- o3/U37CYAqxva2ssJSRyoWXuJVrl5jLn8t+rSfrzkGkj2wTZ51xY/GXUl77M/C4KzCUqNQT4YJEV
2735
- dT1B/yMfGchs64JTBKbkTCJNjYy6zltz7GRUUG3RnFX7acM2w4y8PIWmawomDeCTmGCufsYkl4ph
2736
- X5GOZpIJhzbNi5stPvZR1FDUWSi9g/LMKHtThm3YJohw1+qRzT65ysCQblrGXnRl11z+o+I=
2737
- -----END CERTIFICATE-----
2738
-
2739
- D-TRUST Root Class 3 CA 2 EV 2009
2740
- =================================
2741
- -----BEGIN CERTIFICATE-----
2742
- MIIEQzCCAyugAwIBAgIDCYP0MA0GCSqGSIb3DQEBCwUAMFAxCzAJBgNVBAYTAkRFMRUwEwYDVQQK
2743
- DAxELVRydXN0IEdtYkgxKjAoBgNVBAMMIUQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgRVYgMjAw
2744
- OTAeFw0wOTExMDUwODUwNDZaFw0yOTExMDUwODUwNDZaMFAxCzAJBgNVBAYTAkRFMRUwEwYDVQQK
2745
- DAxELVRydXN0IEdtYkgxKjAoBgNVBAMMIUQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgRVYgMjAw
2746
- OTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJnxhDRwui+3MKCOvXwEz75ivJn9gpfS
2747
- egpnljgJ9hBOlSJzmY3aFS3nBfwZcyK3jpgAvDw9rKFs+9Z5JUut8Mxk2og+KbgPCdM03TP1YtHh
2748
- zRnp7hhPTFiu4h7WDFsVWtg6uMQYZB7jM7K1iXdODL/ZlGsTl28So/6ZqQTMFexgaDbtCHu39b+T
2749
- 7WYxg4zGcTSHThfqr4uRjRxWQa4iN1438h3Z0S0NL2lRp75mpoo6Kr3HGrHhFPC+Oh25z1uxav60
2750
- sUYgovseO3Dvk5h9jHOW8sXvhXCtKSb8HgQ+HKDYD8tSg2J87otTlZCpV6LqYQXY+U3EJ/pure35
2751
- 11H3a6UCAwEAAaOCASQwggEgMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNOUikxiEyoZLsyv
2752
- cop9NteaHNxnMA4GA1UdDwEB/wQEAwIBBjCB3QYDVR0fBIHVMIHSMIGHoIGEoIGBhn9sZGFwOi8v
2753
- ZGlyZWN0b3J5LmQtdHJ1c3QubmV0L0NOPUQtVFJVU1QlMjBSb290JTIwQ2xhc3MlMjAzJTIwQ0El
2754
- MjAyJTIwRVYlMjAyMDA5LE89RC1UcnVzdCUyMEdtYkgsQz1ERT9jZXJ0aWZpY2F0ZXJldm9jYXRp
2755
- b25saXN0MEagRKBChkBodHRwOi8vd3d3LmQtdHJ1c3QubmV0L2NybC9kLXRydXN0X3Jvb3RfY2xh
2756
- c3NfM19jYV8yX2V2XzIwMDkuY3JsMA0GCSqGSIb3DQEBCwUAA4IBAQA07XtaPKSUiO8aEXUHL7P+
2757
- PPoeUSbrh/Yp3uDx1MYkCenBz1UbtDDZzhr+BlGmFaQt77JLvyAoJUnRpjZ3NOhk31KxEcdzes05
2758
- nsKtjHEh8lprr988TlWvsoRlFIm5d8sqMb7Po23Pb0iUMkZv53GMoKaEGTcH8gNFCSuGdXzfX2lX
2759
- ANtu2KZyIktQ1HWYVt+3GP9DQ1CuekR78HlR10M9p9OB0/DJT7naxpeG0ILD5EJt/rDiZE4OJudA
2760
- NCa1CInXCGNjOCd1HjPqbqjdn5lPdE2BiYBL3ZqXKVwvvoFBuYz/6n1gBp7N1z3TLqMVvKjmJuVv
2761
- w9y4AyHqnxbxLFS1
2762
- -----END CERTIFICATE-----
2763
-
2764
- PSCProcert
2765
- ==========
2766
- -----BEGIN CERTIFICATE-----
2767
- MIIJhjCCB26gAwIBAgIBCzANBgkqhkiG9w0BAQsFADCCAR4xPjA8BgNVBAMTNUF1dG9yaWRhZCBk
2768
- ZSBDZXJ0aWZpY2FjaW9uIFJhaXogZGVsIEVzdGFkbyBWZW5lem9sYW5vMQswCQYDVQQGEwJWRTEQ
2769
- MA4GA1UEBxMHQ2FyYWNhczEZMBcGA1UECBMQRGlzdHJpdG8gQ2FwaXRhbDE2MDQGA1UEChMtU2lz
2770
- dGVtYSBOYWNpb25hbCBkZSBDZXJ0aWZpY2FjaW9uIEVsZWN0cm9uaWNhMUMwQQYDVQQLEzpTdXBl
2771
- cmludGVuZGVuY2lhIGRlIFNlcnZpY2lvcyBkZSBDZXJ0aWZpY2FjaW9uIEVsZWN0cm9uaWNhMSUw
2772
- IwYJKoZIhvcNAQkBFhZhY3JhaXpAc3VzY2VydGUuZ29iLnZlMB4XDTEwMTIyODE2NTEwMFoXDTIw
2773
- MTIyNTIzNTk1OVowgdExJjAkBgkqhkiG9w0BCQEWF2NvbnRhY3RvQHByb2NlcnQubmV0LnZlMQ8w
2774
- DQYDVQQHEwZDaGFjYW8xEDAOBgNVBAgTB01pcmFuZGExKjAoBgNVBAsTIVByb3ZlZWRvciBkZSBD
2775
- ZXJ0aWZpY2Fkb3MgUFJPQ0VSVDE2MDQGA1UEChMtU2lzdGVtYSBOYWNpb25hbCBkZSBDZXJ0aWZp
2776
- Y2FjaW9uIEVsZWN0cm9uaWNhMQswCQYDVQQGEwJWRTETMBEGA1UEAxMKUFNDUHJvY2VydDCCAiIw
2777
- DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANW39KOUM6FGqVVhSQ2oh3NekS1wwQYalNo97BVC
2778
- wfWMrmoX8Yqt/ICV6oNEolt6Vc5Pp6XVurgfoCfAUFM+jbnADrgV3NZs+J74BCXfgI8Qhd19L3uA
2779
- 3VcAZCP4bsm+lU/hdezgfl6VzbHvvnpC2Mks0+saGiKLt38GieU89RLAu9MLmV+QfI4tL3czkkoh
2780
- RqipCKzx9hEC2ZUWno0vluYC3XXCFCpa1sl9JcLB/KpnheLsvtF8PPqv1W7/U0HU9TI4seJfxPmO
2781
- EO8GqQKJ/+MMbpfg353bIdD0PghpbNjU5Db4g7ayNo+c7zo3Fn2/omnXO1ty0K+qP1xmk6wKImG2
2782
- 0qCZyFSTXai20b1dCl53lKItwIKOvMoDKjSuc/HUtQy9vmebVOvh+qBa7Dh+PsHMosdEMXXqP+UH
2783
- 0quhJZb25uSgXTcYOWEAM11G1ADEtMo88aKjPvM6/2kwLkDd9p+cJsmWN63nOaK/6mnbVSKVUyqU
2784
- td+tFjiBdWbjxywbk5yqjKPK2Ww8F22c3HxT4CAnQzb5EuE8XL1mv6JpIzi4mWCZDlZTOpx+FIyw
2785
- Bm/xhnaQr/2v/pDGj59/i5IjnOcVdo/Vi5QTcmn7K2FjiO/mpF7moxdqWEfLcU8UC17IAggmosvp
2786
- r2uKGcfLFFb14dq12fy/czja+eevbqQ34gcnAgMBAAGjggMXMIIDEzASBgNVHRMBAf8ECDAGAQH/
2787
- AgEBMDcGA1UdEgQwMC6CD3N1c2NlcnRlLmdvYi52ZaAbBgVghl4CAqASDBBSSUYtRy0yMDAwNDAz
2788
- Ni0wMB0GA1UdDgQWBBRBDxk4qpl/Qguk1yeYVKIXTC1RVDCCAVAGA1UdIwSCAUcwggFDgBStuyId
2789
- xuDSAaj9dlBSk+2YwU2u06GCASakggEiMIIBHjE+MDwGA1UEAxM1QXV0b3JpZGFkIGRlIENlcnRp
2790
- ZmljYWNpb24gUmFpeiBkZWwgRXN0YWRvIFZlbmV6b2xhbm8xCzAJBgNVBAYTAlZFMRAwDgYDVQQH
2791
- EwdDYXJhY2FzMRkwFwYDVQQIExBEaXN0cml0byBDYXBpdGFsMTYwNAYDVQQKEy1TaXN0ZW1hIE5h
2792
- Y2lvbmFsIGRlIENlcnRpZmljYWNpb24gRWxlY3Ryb25pY2ExQzBBBgNVBAsTOlN1cGVyaW50ZW5k
2793
- ZW5jaWEgZGUgU2VydmljaW9zIGRlIENlcnRpZmljYWNpb24gRWxlY3Ryb25pY2ExJTAjBgkqhkiG
2794
- 9w0BCQEWFmFjcmFpekBzdXNjZXJ0ZS5nb2IudmWCAQowDgYDVR0PAQH/BAQDAgEGME0GA1UdEQRG
2795
- MESCDnByb2NlcnQubmV0LnZloBUGBWCGXgIBoAwMClBTQy0wMDAwMDKgGwYFYIZeAgKgEgwQUklG
2796
- LUotMzE2MzUzNzMtNzB2BgNVHR8EbzBtMEagRKBChkBodHRwOi8vd3d3LnN1c2NlcnRlLmdvYi52
2797
- ZS9sY3IvQ0VSVElGSUNBRE8tUkFJWi1TSEEzODRDUkxERVIuY3JsMCOgIaAfhh1sZGFwOi8vYWNy
2798
- YWl6LnN1c2NlcnRlLmdvYi52ZTA3BggrBgEFBQcBAQQrMCkwJwYIKwYBBQUHMAGGG2h0dHA6Ly9v
2799
- Y3NwLnN1c2NlcnRlLmdvYi52ZTBBBgNVHSAEOjA4MDYGBmCGXgMBAjAsMCoGCCsGAQUFBwIBFh5o
2800
- dHRwOi8vd3d3LnN1c2NlcnRlLmdvYi52ZS9kcGMwDQYJKoZIhvcNAQELBQADggIBACtZ6yKZu4Sq
2801
- T96QxtGGcSOeSwORR3C7wJJg7ODU523G0+1ng3dS1fLld6c2suNUvtm7CpsR72H0xpkzmfWvADmN
2802
- g7+mvTV+LFwxNG9s2/NkAZiqlCxB3RWGymspThbASfzXg0gTB1GEMVKIu4YXx2sviiCtxQuPcD4q
2803
- uxtxj7mkoP3YldmvWb8lK5jpY5MvYB7Eqvh39YtsL+1+LrVPQA3uvFd359m21D+VJzog1eWuq2w1
2804
- n8GhHVnchIHuTQfiSLaeS5UtQbHh6N5+LwUeaO6/u5BlOsju6rEYNxxik6SgMexxbJHmpHmJWhSn
2805
- FFAFTKQAVzAswbVhltw+HoSvOULP5dAssSS830DD7X9jSr3hTxJkhpXzsOfIt+FTvZLm8wyWuevo
2806
- 5pLtp4EJFAv8lXrPj9Y0TzYS3F7RNHXGRoAvlQSMx4bEqCaJqD8Zm4G7UaRKhqsLEQ+xrmNTbSjq
2807
- 3TNWOByyrYDT13K9mmyZY+gAu0F2BbdbmRiKw7gSXFbPVgx96OLP7bx0R/vu0xdOIk9W/1DzLuY5
2808
- poLWccret9W6aAjtmcz9opLLabid+Qqkpj5PkygqYWwHJgD/ll9ohri4zspV4KuxPX+Y1zMOWj3Y
2809
- eMLEYC/HYvBhkdI4sPaeVdtAgAUSM84dkpvRabP/v/GSCmE1P93+hvS84Bpxs2Km
2810
- -----END CERTIFICATE-----
2811
-
2812
- China Internet Network Information Center EV Certificates Root
2813
- ==============================================================
2814
- -----BEGIN CERTIFICATE-----
2815
- MIID9zCCAt+gAwIBAgIESJ8AATANBgkqhkiG9w0BAQUFADCBijELMAkGA1UEBhMCQ04xMjAwBgNV
2816
- BAoMKUNoaW5hIEludGVybmV0IE5ldHdvcmsgSW5mb3JtYXRpb24gQ2VudGVyMUcwRQYDVQQDDD5D
2817
- aGluYSBJbnRlcm5ldCBOZXR3b3JrIEluZm9ybWF0aW9uIENlbnRlciBFViBDZXJ0aWZpY2F0ZXMg
2818
- Um9vdDAeFw0xMDA4MzEwNzExMjVaFw0zMDA4MzEwNzExMjVaMIGKMQswCQYDVQQGEwJDTjEyMDAG
2819
- A1UECgwpQ2hpbmEgSW50ZXJuZXQgTmV0d29yayBJbmZvcm1hdGlvbiBDZW50ZXIxRzBFBgNVBAMM
2820
- PkNoaW5hIEludGVybmV0IE5ldHdvcmsgSW5mb3JtYXRpb24gQ2VudGVyIEVWIENlcnRpZmljYXRl
2821
- cyBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAm35z7r07eKpkQ0H1UN+U8i6y
2822
- jUqORlTSIRLIOTJCBumD1Z9S7eVnAztUwYyZmczpwA//DdmEEbK40ctb3B75aDFk4Zv6dOtouSCV
2823
- 98YPjUesWgbdYavi7NifFy2cyjw1l1VxzUOFsUcW9SxTgHbP0wBkvUCZ3czY28Sf1hNfQYOL+Q2H
2824
- klY0bBoQCxfVWhyXWIQ8hBouXJE0bhlffxdpxWXvayHG1VA6v2G5BY3vbzQ6sm8UY78WO5upKv23
2825
- KzhmBsUs4qpnHkWnjQRmQvaPK++IIGmPMowUc9orhpFjIpryp9vOiYurXccUwVswah+xt54ugQEC
2826
- 7c+WXmPbqOY4twIDAQABo2MwYTAfBgNVHSMEGDAWgBR8cks5x8DbYqVPm6oYNJKiyoOCWTAPBgNV
2827
- HRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUfHJLOcfA22KlT5uqGDSSosqD
2828
- glkwDQYJKoZIhvcNAQEFBQADggEBACrDx0M3j92tpLIM7twUbY8opJhJywyA6vPtI2Z1fcXTIWd5
2829
- 0XPFtQO3WKwMVC/GVhMPMdoG52U7HW8228gd+f2ABsqjPWYWqJ1MFn3AlUa1UeTiH9fqBk1jjZaM
2830
- 7+czV0I664zBechNdn3e9rG3geCg+aF4RhcaVpjwTj2rHO3sOdwHSPdj/gauwqRcalsyiMXHM4Ws
2831
- ZkJHwlgkmeHlPuV1LI5D1l08eB6olYIpUNHRFrrvwb562bTYzB5MRuF3sTGrvSrIzo9uoV1/A3U0
2832
- 5K2JRVRevq4opbs/eHnrc7MKDf2+yfdWrPa37S+bISnHOLaVxATywy39FCqQmbkHzJ8=
2833
- -----END CERTIFICATE-----
2834
-
2835
- Swisscom Root CA 2
2836
- ==================
2837
- -----BEGIN CERTIFICATE-----
2838
- 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
- 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
- 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
- MjUwNzM4MTRaMGQxCzAJBgNVBAYTAmNoMREwDwYDVQQKEwhTd2lzc2NvbTElMCMGA1UECxMcRGln
2842
- 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
- IjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAlUJOhJ1R5tMJ6HJaI2nbeHCOFvErjw0DzpPM
2844
- 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
- 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
- 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
- Wrumnf2U5NGKpV+GY3aFy6//SSj8gO1MedK75MDvAe5QQQg1I3ArqRa0jG6F6bYRzzHdUyYb3y1a
2848
- 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
- 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
- mbeGMktg2M7v0Ax/lZ9vh0+Hio5fCHyqW/xavqGRn1V9TrALacywlKinh/LTSlDcX3KwFnUey7QY
2851
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- OQ7Qj1zB09GOInJGTB2Wrk9xseEFKZZZ9LuedT3PDTcNYtsmjGOpI99nBjx8Oto0QuFmtEYE3saW
2861
- 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
- +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
- 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
2864
- 5OfNeOI5wSsSnqaeG8XmDtkx2Q==
2865
- -----END CERTIFICATE-----
2866
-
2867
- Swisscom Root EV CA 2
2868
- =====================
2869
- -----BEGIN CERTIFICATE-----
2870
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- Xhqdk/HoPGAsp15XGVhRXrwsVgu42O+LgrQ8uMIkqBPHoCE2G3pXKSinLr9xJZDzRINpUKTk4Rti
2878
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 59yLGn602MnTihdsfSlEvoqq9X46Lmgxk7lq2prg2+kupYTNHAq4Sgj5nPFhJpiTt3tm7JFe3VE/
2892
- 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
- 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
- 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
- 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
2896
- l8PVP3wbI+2ksx0WckNLIOFZfsLorSa/ovc=
2897
- -----END CERTIFICATE-----
2898
-
2899
- CA Disig Root R1
2900
- ================
2901
- -----BEGIN CERTIFICATE-----
2902
- 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
- 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
- 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
- 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
- c2lnIFJvb3QgUjEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCqw3j33Jijp1pedxiy
2907
- 3QRkD2P9m5YJgNXoqqXinCaUOuiZc4yd39ffg/N4T0Dhf9Kn0uXKE5Pn7cZ3Xza1lK/oOI7bm+V8
2908
- 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
- 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
- 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
- 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
- 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
- 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
- ZcD4XW9boAo0PO7X6oifmPmvTiT6l7Jkdtqr9O3jw2Dv1fkCyC2fg69naQanMVXVz0tv/wQFx1is
2915
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
2926
- a7+h89n07eLw4+1knj0vllJPgFOL
2927
- -----END CERTIFICATE-----
2928
-
2929
- CA Disig Root R2
2930
- ================
2931
- -----BEGIN CERTIFICATE-----
2932
- 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
- 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
- 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
- EzARBgNVBAcTCkJyYXRpc2xhdmExEzARBgNVBAoTCkRpc2lnIGEucy4xGTAXBgNVBAMTEENBIERp
2936
- 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
- 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
- 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
- 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
- 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
- g8NTEQxzHQuyRpDRQjrOQG6Vrf/GlK1ul4SOfW+eioANSW1z4nuSHsPzwfPrLgVv2RvPN3YEyLRa
2942
- 5Beny912H9AZdugsBbPWnDTYltxhh5EF5EQIM8HauQhl1K6yNg3ruji6DOWbnuuNZt2Zz9aJQfYE
2943
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
2956
- 7+ZtsH8tZ/3zbBt1RqPlShfppNcL
2957
- -----END CERTIFICATE-----
2958
-
2959
- ACCVRAIZ1
2960
- =========
2961
- -----BEGIN CERTIFICATE-----
2962
- MIIH0zCCBbugAwIBAgIIXsO3pkN/pOAwDQYJKoZIhvcNAQEFBQAwQjESMBAGA1UEAwwJQUNDVlJB
2963
- SVoxMRAwDgYDVQQLDAdQS0lBQ0NWMQ0wCwYDVQQKDARBQ0NWMQswCQYDVQQGEwJFUzAeFw0xMTA1
2964
- MDUwOTM3MzdaFw0zMDEyMzEwOTM3MzdaMEIxEjAQBgNVBAMMCUFDQ1ZSQUlaMTEQMA4GA1UECwwH
2965
- UEtJQUNDVjENMAsGA1UECgwEQUNDVjELMAkGA1UEBhMCRVMwggIiMA0GCSqGSIb3DQEBAQUAA4IC
2966
- DwAwggIKAoICAQCbqau/YUqXry+XZpp0X9DZlv3P4uRm7x8fRzPCRKPfmt4ftVTdFXxpNRFvu8gM
2967
- jmoYHtiP2Ra8EEg2XPBjs5BaXCQ316PWywlxufEBcoSwfdtNgM3802/J+Nq2DoLSRYWoG2ioPej0
2968
- RGy9ocLLA76MPhMAhN9KSMDjIgro6TenGEyxCQ0jVn8ETdkXhBilyNpAlHPrzg5XPAOBOp0KoVdD
2969
- aaxXbXmQeOW1tDvYvEyNKKGno6e6Ak4l0Squ7a4DIrhrIA8wKFSVf+DuzgpmndFALW4ir50awQUZ
2970
- 0m/A8p/4e7MCQvtQqR0tkw8jq8bBD5L/0KIV9VMJcRz/RROE5iZe+OCIHAr8Fraocwa48GOEAqDG
2971
- WuzndN9wrqODJerWx5eHk6fGioozl2A3ED6XPm4pFdahD9GILBKfb6qkxkLrQaLjlUPTAYVtjrs7
2972
- 8yM2x/474KElB0iryYl0/wiPgL/AlmXz7uxLaL2diMMxs0Dx6M/2OLuc5NF/1OVYm3z61PMOm3WR
2973
- 5LpSLhl+0fXNWhn8ugb2+1KoS5kE3fj5tItQo05iifCHJPqDQsGH+tUtKSpacXpkatcnYGMN285J
2974
- 9Y0fkIkyF/hzQ7jSWpOGYdbhdQrqeWZ2iE9x6wQl1gpaepPluUsXQA+xtrn13k/c4LOsOxFwYIRK
2975
- Q26ZIMApcQrAZQIDAQABo4ICyzCCAscwfQYIKwYBBQUHAQEEcTBvMEwGCCsGAQUFBzAChkBodHRw
2976
- Oi8vd3d3LmFjY3YuZXMvZmlsZWFkbWluL0FyY2hpdm9zL2NlcnRpZmljYWRvcy9yYWl6YWNjdjEu
2977
- Y3J0MB8GCCsGAQUFBzABhhNodHRwOi8vb2NzcC5hY2N2LmVzMB0GA1UdDgQWBBTSh7Tj3zcnk1X2
2978
- VuqB5TbMjB4/vTAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFNKHtOPfNyeTVfZW6oHlNsyM
2979
- Hj+9MIIBcwYDVR0gBIIBajCCAWYwggFiBgRVHSAAMIIBWDCCASIGCCsGAQUFBwICMIIBFB6CARAA
2980
- QQB1AHQAbwByAGkAZABhAGQAIABkAGUAIABDAGUAcgB0AGkAZgBpAGMAYQBjAGkA8wBuACAAUgBh
2981
- AO0AegAgAGQAZQAgAGwAYQAgAEEAQwBDAFYAIAAoAEEAZwBlAG4AYwBpAGEAIABkAGUAIABUAGUA
2982
- YwBuAG8AbABvAGcA7QBhACAAeQAgAEMAZQByAHQAaQBmAGkAYwBhAGMAaQDzAG4AIABFAGwAZQBj
2983
- AHQAcgDzAG4AaQBjAGEALAAgAEMASQBGACAAUQA0ADYAMAAxADEANQA2AEUAKQAuACAAQwBQAFMA
2984
- IABlAG4AIABoAHQAdABwADoALwAvAHcAdwB3AC4AYQBjAGMAdgAuAGUAczAwBggrBgEFBQcCARYk
2985
- aHR0cDovL3d3dy5hY2N2LmVzL2xlZ2lzbGFjaW9uX2MuaHRtMFUGA1UdHwROMEwwSqBIoEaGRGh0
2986
- dHA6Ly93d3cuYWNjdi5lcy9maWxlYWRtaW4vQXJjaGl2b3MvY2VydGlmaWNhZG9zL3JhaXphY2N2
2987
- MV9kZXIuY3JsMA4GA1UdDwEB/wQEAwIBBjAXBgNVHREEEDAOgQxhY2N2QGFjY3YuZXMwDQYJKoZI
2988
- hvcNAQEFBQADggIBAJcxAp/n/UNnSEQU5CmH7UwoZtCPNdpNYbdKl02125DgBS4OxnnQ8pdpD70E
2989
- R9m+27Up2pvZrqmZ1dM8MJP1jaGo/AaNRPTKFpV8M9xii6g3+CfYCS0b78gUJyCpZET/LtZ1qmxN
2990
- YEAZSUNUY9rizLpm5U9EelvZaoErQNV/+QEnWCzI7UiRfD+mAM/EKXMRNt6GGT6d7hmKG9Ww7Y49
2991
- nCrADdg9ZuM8Db3VlFzi4qc1GwQA9j9ajepDvV+JHanBsMyZ4k0ACtrJJ1vnE5Bc5PUzolVt3OAJ
2992
- TS+xJlsndQAJxGJ3KQhfnlmstn6tn1QwIgPBHnFk/vk4CpYY3QIUrCPLBhwepH2NDd4nQeit2hW3
2993
- sCPdK6jT2iWH7ehVRE2I9DZ+hJp4rPcOVkkO1jMl1oRQQmwgEh0q1b688nCBpHBgvgW1m54ERL5h
2994
- I6zppSSMEYCUWqKiuUnSwdzRp+0xESyeGabu4VXhwOrPDYTkF7eifKXeVSUG7szAh1xA2syVP1Xg
2995
- Nce4hL60Xc16gwFy7ofmXx2utYXGJt/mwZrpHgJHnyqobalbz+xFd3+YJ5oyXSrjhO7FmGYvliAd
2996
- 3djDJ9ew+f7Zfc3Qn48LFFhRny+Lwzgt3uiP1o2HpPVWQxaZLPSkVrQ0uGE3ycJYgBugl6H8WY3p
2997
- EfbRD0tVNEYqi4Y7
2998
- -----END CERTIFICATE-----
2999
-
3000
- TWCA Global Root CA
3001
- ===================
3002
- -----BEGIN CERTIFICATE-----
3003
- MIIFQTCCAymgAwIBAgICDL4wDQYJKoZIhvcNAQELBQAwUTELMAkGA1UEBhMCVFcxEjAQBgNVBAoT
3004
- CVRBSVdBTi1DQTEQMA4GA1UECxMHUm9vdCBDQTEcMBoGA1UEAxMTVFdDQSBHbG9iYWwgUm9vdCBD
3005
- QTAeFw0xMjA2MjcwNjI4MzNaFw0zMDEyMzExNTU5NTlaMFExCzAJBgNVBAYTAlRXMRIwEAYDVQQK
3006
- EwlUQUlXQU4tQ0ExEDAOBgNVBAsTB1Jvb3QgQ0ExHDAaBgNVBAMTE1RXQ0EgR2xvYmFsIFJvb3Qg
3007
- Q0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCwBdvI64zEbooh745NnHEKH1Jw7W2C
3008
- nJfF10xORUnLQEK1EjRsGcJ0pDFfhQKX7EMzClPSnIyOt7h52yvVavKOZsTuKwEHktSz0ALfUPZV
3009
- r2YOy+BHYC8rMjk1Ujoog/h7FsYYuGLWRyWRzvAZEk2tY/XTP3VfKfChMBwqoJimFb3u/Rk28OKR
3010
- Q4/6ytYQJ0lM793B8YVwm8rqqFpD/G2Gb3PpN0Wp8DbHzIh1HrtsBv+baz4X7GGqcXzGHaL3SekV
3011
- tTzWoWH1EfcFbx39Eb7QMAfCKbAJTibc46KokWofwpFFiFzlmLhxpRUZyXx1EcxwdE8tmx2RRP1W
3012
- KKD+u4ZqyPpcC1jcxkt2yKsi2XMPpfRaAok/T54igu6idFMqPVMnaR1sjjIsZAAmY2E2TqNGtz99
3013
- sy2sbZCilaLOz9qC5wc0GZbpuCGqKX6mOL6OKUohZnkfs8O1CWfe1tQHRvMq2uYiN2DLgbYPoA/p
3014
- yJV/v1WRBXrPPRXAb94JlAGD1zQbzECl8LibZ9WYkTunhHiVJqRaCPgrdLQABDzfuBSO6N+pjWxn
3015
- kjMdwLfS7JLIvgm/LCkFbwJrnu+8vyq8W8BQj0FwcYeyTbcEqYSjMq+u7msXi7Kx/mzhkIyIqJdI
3016
- zshNy/MGz19qCkKxHh53L46g5pIOBvwFItIm4TFRfTLcDwIDAQABoyMwITAOBgNVHQ8BAf8EBAMC
3017
- AQYwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEAXzSBdu+WHdXltdkCY4QWwa6g
3018
- cFGn90xHNcgL1yg9iXHZqjNB6hQbbCEAwGxCGX6faVsgQt+i0trEfJdLjbDorMjupWkEmQqSpqsn
3019
- LhpNgb+E1HAerUf+/UqdM+DyucRFCCEK2mlpc3INvjT+lIutwx4116KD7+U4x6WFH6vPNOw/KP4M
3020
- 8VeGTslV9xzU2KV9Bnpv1d8Q34FOIWWxtuEXeZVFBs5fzNxGiWNoRI2T9GRwoD2dKAXDOXC4Ynsg
3021
- /eTb6QihuJ49CcdP+yz4k3ZB3lLg4VfSnQO8d57+nile98FRYB/e2guyLXW3Q0iT5/Z5xoRdgFlg
3022
- lPx4mI88k1HtQJAH32RjJMtOcQWh15QaiDLxInQirqWm2BJpTGCjAu4r7NRjkgtevi92a6O2JryP
3023
- A9gK8kxkRr05YuWW6zRjESjMlfGt7+/cgFhI6Uu46mWs6fyAtbXIRfmswZ/ZuepiiI7E8UuDEq3m
3024
- i4TWnsLrgxifarsbJGAzcMzs9zLzXNl5fe+epP7JI8Mk7hWSsT2RTyaGvWZzJBPqpK5jwa19hAM8
3025
- EHiGG3njxPPyBJUgriOCxLM6AGK/5jYk4Ve6xx6QddVfP5VhK8E7zeWzaGHQRiapIVJpLesux+t3
3026
- zqY6tQMzT3bR51xUAV3LePTJDL/PEo4XLSNolOer/qmyKwbQBM0=
3027
- -----END CERTIFICATE-----
3028
-
3029
- TeliaSonera Root CA v1
3030
- ======================
3031
- -----BEGIN CERTIFICATE-----
3032
- MIIFODCCAyCgAwIBAgIRAJW+FqD3LkbxezmCcvqLzZYwDQYJKoZIhvcNAQEFBQAwNzEUMBIGA1UE
3033
- CgwLVGVsaWFTb25lcmExHzAdBgNVBAMMFlRlbGlhU29uZXJhIFJvb3QgQ0EgdjEwHhcNMDcxMDE4
3034
- MTIwMDUwWhcNMzIxMDE4MTIwMDUwWjA3MRQwEgYDVQQKDAtUZWxpYVNvbmVyYTEfMB0GA1UEAwwW
3035
- VGVsaWFTb25lcmEgUm9vdCBDQSB2MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMK+
3036
- 6yfwIaPzaSZVfp3FVRaRXP3vIb9TgHot0pGMYzHw7CTww6XScnwQbfQ3t+XmfHnqjLWCi65ItqwA
3037
- 3GV17CpNX8GH9SBlK4GoRz6JI5UwFpB/6FcHSOcZrr9FZ7E3GwYq/t75rH2D+1665I+XZ75Ljo1k
3038
- B1c4VWk0Nj0TSO9P4tNmHqTPGrdeNjPUtAa9GAH9d4RQAEX1jF3oI7x+/jXh7VB7qTCNGdMJjmhn
3039
- Xb88lxhTuylixcpecsHHltTbLaC0H2kD7OriUPEMPPCs81Mt8Bz17Ww5OXOAFshSsCPN4D7c3TxH
3040
- oLs1iuKYaIu+5b9y7tL6pe0S7fyYGKkmdtwoSxAgHNN/Fnct7W+A90m7UwW7XWjH1Mh1Fj+JWov3
3041
- F0fUTPHSiXk+TT2YqGHeOh7S+F4D4MHJHIzTjU3TlTazN19jY5szFPAtJmtTfImMMsJu7D0hADnJ
3042
- oWjiUIMusDor8zagrC/kb2HCUQk5PotTubtn2txTuXZZNp1D5SDgPTJghSJRt8czu90VL6R4pgd7
3043
- gUY2BIbdeTXHlSw7sKMXNeVzH7RcWe/a6hBle3rQf5+ztCo3O3CLm1u5K7fsslESl1MpWtTwEhDc
3044
- TwK7EpIvYtQ/aUN8Ddb8WHUBiJ1YFkveupD/RwGJBmr2X7KQarMCpgKIv7NHfirZ1fpoeDVNAgMB
3045
- AAGjPzA9MA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1UdDgQWBBTwj1k4ALP1j5qW
3046
- DNXr+nuqF+gTEjANBgkqhkiG9w0BAQUFAAOCAgEAvuRcYk4k9AwI//DTDGjkk0kiP0Qnb7tt3oNm
3047
- zqjMDfz1mgbldxSR651Be5kqhOX//CHBXfDkH1e3damhXwIm/9fH907eT/j3HEbAek9ALCI18Bmx
3048
- 0GtnLLCo4MBANzX2hFxc469CeP6nyQ1Q6g2EdvZR74NTxnr/DlZJLo961gzmJ1TjTQpgcmLNkQfW
3049
- pb/ImWvtxBnmq0wROMVvMeJuScg/doAmAyYp4Db29iBT4xdwNBedY2gea+zDTYa4EzAvXUYNR0PV
3050
- G6pZDrlcjQZIrXSHX8f8MVRBE+LHIQ6e4B4N4cB7Q4WQxYpYxmUKeFfyxiMPAdkgS94P+5KFdSpc
3051
- c41teyWRyu5FrgZLAMzTsVlQ2jqIOylDRl6XK1TOU2+NSueW+r9xDkKLfP0ooNBIytrEgUy7onOT
3052
- JsjrDNYmiLbAJM+7vVvrdX3pCI6GMyx5dwlppYn8s3CQh3aP0yK7Qs69cwsgJirQmz1wHiRszYd2
3053
- qReWt88NkvuOGKmYSdGe/mBEciG5Ge3C9THxOUiIkCR1VBatzvT4aRRkOfujuLpwQMcnHL/EVlP6
3054
- Y2XQ8xwOFvVrhlhNGNTkDY6lnVuR3HYkUD/GKvvZt5y11ubQ2egZixVxSK236thZiNSQvxaz2ems
3055
- WWFUyBy6ysHK4bkgTI86k4mloMy/0/Z1pHWWbVY=
3056
- -----END CERTIFICATE-----
3057
-
3058
- E-Tugra Certification Authority
3059
- ===============================
3060
- -----BEGIN CERTIFICATE-----
3061
- MIIGSzCCBDOgAwIBAgIIamg+nFGby1MwDQYJKoZIhvcNAQELBQAwgbIxCzAJBgNVBAYTAlRSMQ8w
3062
- DQYDVQQHDAZBbmthcmExQDA+BgNVBAoMN0UtVHXEn3JhIEVCRyBCaWxpxZ9pbSBUZWtub2xvamls
3063
- ZXJpIHZlIEhpem1ldGxlcmkgQS7Fni4xJjAkBgNVBAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBN
3064
- ZXJrZXppMSgwJgYDVQQDDB9FLVR1Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTEzMDMw
3065
- NTEyMDk0OFoXDTIzMDMwMzEyMDk0OFowgbIxCzAJBgNVBAYTAlRSMQ8wDQYDVQQHDAZBbmthcmEx
3066
- QDA+BgNVBAoMN0UtVHXEn3JhIEVCRyBCaWxpxZ9pbSBUZWtub2xvamlsZXJpIHZlIEhpem1ldGxl
3067
- cmkgQS7Fni4xJjAkBgNVBAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBNZXJrZXppMSgwJgYDVQQD
3068
- DB9FLVR1Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0BAQEFAAOCAg8A
3069
- MIICCgKCAgEA4vU/kwVRHoViVF56C/UYB4Oufq9899SKa6VjQzm5S/fDxmSJPZQuVIBSOTkHS0vd
3070
- hQd2h8y/L5VMzH2nPbxHD5hw+IyFHnSOkm0bQNGZDbt1bsipa5rAhDGvykPL6ys06I+XawGb1Q5K
3071
- CKpbknSFQ9OArqGIW66z6l7LFpp3RMih9lRozt6Plyu6W0ACDGQXwLWTzeHxE2bODHnv0ZEoq1+g
3072
- ElIwcxmOj+GMB6LDu0rw6h8VqO4lzKRG+Bsi77MOQ7osJLjFLFzUHPhdZL3Dk14opz8n8Y4e0ypQ
3073
- BaNV2cvnOVPAmJ6MVGKLJrD3fY185MaeZkJVgkfnsliNZvcHfC425lAcP9tDJMW/hkd5s3kc91r0
3074
- E+xs+D/iWR+V7kI+ua2oMoVJl0b+SzGPWsutdEcf6ZG33ygEIqDUD13ieU/qbIWGvaimzuT6w+Gz
3075
- rt48Ue7LE3wBf4QOXVGUnhMMti6lTPk5cDZvlsouDERVxcr6XQKj39ZkjFqzAQqptQpHF//vkUAq
3076
- jqFGOjGY5RH8zLtJVor8udBhmm9lbObDyz51Sf6Pp+KJxWfXnUYTTjF2OySznhFlhqt/7x3U+Lzn
3077
- rFpct1pHXFXOVbQicVtbC/DP3KBhZOqp12gKY6fgDT+gr9Oq0n7vUaDmUStVkhUXU8u3Zg5mTPj5
3078
- dUyQ5xJwx0UCAwEAAaNjMGEwHQYDVR0OBBYEFC7j27JJ0JxUeVz6Jyr+zE7S6E5UMA8GA1UdEwEB
3079
- /wQFMAMBAf8wHwYDVR0jBBgwFoAULuPbsknQnFR5XPonKv7MTtLoTlQwDgYDVR0PAQH/BAQDAgEG
3080
- MA0GCSqGSIb3DQEBCwUAA4ICAQAFNzr0TbdF4kV1JI+2d1LoHNgQk2Xz8lkGpD4eKexd0dCrfOAK
3081
- kEh47U6YA5n+KGCRHTAduGN8qOY1tfrTYXbm1gdLymmasoR6d5NFFxWfJNCYExL/u6Au/U5Mh/jO
3082
- XKqYGwXgAEZKgoClM4so3O0409/lPun++1ndYYRP0lSWE2ETPo+Aab6TR7U1Q9Jauz1c77NCR807
3083
- VRMGsAnb/WP2OogKmW9+4c4bU2pEZiNRCHu8W1Ki/QY3OEBhj0qWuJA3+GbHeJAAFS6LrVE1Uweo
3084
- a2iu+U48BybNCAVwzDk/dr2l02cmAYamU9JgO3xDf1WKvJUawSg5TB9D0pH0clmKuVb8P7Sd2nCc
3085
- dlqMQ1DujjByTd//SffGqWfZbawCEeI6FiWnWAjLb1NBnEg4R2gz0dfHj9R0IdTDBZB6/86WiLEV
3086
- KV0jq9BgoRJP3vQXzTLlyb/IQ639Lo7xr+L0mPoSHyDYwKcMhcWQ9DstliaxLL5Mq+ux0orJ23gT
3087
- Dx4JnW2PAJ8C2sH6H3p6CcRK5ogql5+Ji/03X186zjhZhkuvcQu02PJwT58yE+Owp1fl2tpDy4Q0
3088
- 8ijE6m30Ku/Ba3ba+367hTzSU8JNvnHhRdH9I2cNE3X7z2VnIp2usAnRCf8dNL/+I5c30jn6PQ0G
3089
- C7TbO6Orb1wdtn7os4I07QZcJA==
3090
- -----END CERTIFICATE-----
3091
-
3092
- T-TeleSec GlobalRoot Class 2
3093
- ============================
3094
- -----BEGIN CERTIFICATE-----
3095
- MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoM
3096
- IlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBU
3097
- cnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDIwHhcNMDgx
3098
- MDAxMTA0MDE0WhcNMzMxMDAxMjM1OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lz
3099
- dGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBD
3100
- ZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDIwggEiMA0GCSqGSIb3
3101
- DQEBAQUAA4IBDwAwggEKAoIBAQCqX9obX+hzkeXaXPSi5kfl82hVYAUdAqSzm1nzHoqvNK38DcLZ
3102
- SBnuaY/JIPwhqgcZ7bBcrGXHX+0CfHt8LRvWurmAwhiCFoT6ZrAIxlQjgeTNuUk/9k9uN0goOA/F
3103
- vudocP05l03Sx5iRUKrERLMjfTlH6VJi1hKTXrcxlkIF+3anHqP1wvzpesVsqXFP6st4vGCvx970
3104
- 2cu+fjOlbpSD8DT6IavqjnKgP6TeMFvvhk1qlVtDRKgQFRzlAVfFmPHmBiiRqiDFt1MmUUOyCxGV
3105
- WOHAD3bZwI18gfNycJ5v/hqO2V81xrJvNHy+SE/iWjnX2J14np+GPgNeGYtEotXHAgMBAAGjQjBA
3106
- MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS/WSA2AHmgoCJrjNXy
3107
- YdK4LMuCSjANBgkqhkiG9w0BAQsFAAOCAQEAMQOiYQsfdOhyNsZt+U2e+iKo4YFWz827n+qrkRk4
3108
- r6p8FU3ztqONpfSO9kSpp+ghla0+AGIWiPACuvxhI+YzmzB6azZie60EI4RYZeLbK4rnJVM3YlNf
3109
- vNoBYimipidx5joifsFvHZVwIEoHNN/q/xWA5brXethbdXwFeilHfkCoMRN3zUA7tFFHei4R40cR
3110
- 3p1m0IvVVGb6g1XqfMIpiRvpb7PO4gWEyS8+eIVibslfwXhjdFjASBgMmTnrpMwatXlajRWc2BQN
3111
- 9noHV8cigwUtPJslJj0Ys6lDfMjIq2SPDqO/nBudMNva0Bkuqjzx+zOAduTNrRlPBSeOE6Fuwg==
3112
- -----END CERTIFICATE-----
3113
-
3114
- Atos TrustedRoot 2011
3115
- =====================
3116
- -----BEGIN CERTIFICATE-----
3117
- MIIDdzCCAl+gAwIBAgIIXDPLYixfszIwDQYJKoZIhvcNAQELBQAwPDEeMBwGA1UEAwwVQXRvcyBU
3118
- cnVzdGVkUm9vdCAyMDExMQ0wCwYDVQQKDARBdG9zMQswCQYDVQQGEwJERTAeFw0xMTA3MDcxNDU4
3119
- MzBaFw0zMDEyMzEyMzU5NTlaMDwxHjAcBgNVBAMMFUF0b3MgVHJ1c3RlZFJvb3QgMjAxMTENMAsG
3120
- A1UECgwEQXRvczELMAkGA1UEBhMCREUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCV
3121
- hTuXbyo7LjvPpvMpNb7PGKw+qtn4TaA+Gke5vJrf8v7MPkfoepbCJI419KkM/IL9bcFyYie96mvr
3122
- 54rMVD6QUM+A1JX76LWC1BTFtqlVJVfbsVD2sGBkWXppzwO3bw2+yj5vdHLqqjAqc2K+SZFhyBH+
3123
- DgMq92og3AIVDV4VavzjgsG1xZ1kCWyjWZgHJ8cblithdHFsQ/H3NYkQ4J7sVaE3IqKHBAUsR320
3124
- HLliKWYoyrfhk/WklAOZuXCFteZI6o1Q/NnezG8HDt0Lcp2AMBYHlT8oDv3FdU9T1nSatCQujgKR
3125
- z3bFmx5VdJx4IbHwLfELn8LVlhgf8FQieowHAgMBAAGjfTB7MB0GA1UdDgQWBBSnpQaxLKYJYO7R
3126
- l+lwrrw7GWzbITAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFKelBrEspglg7tGX6XCuvDsZ
3127
- bNshMBgGA1UdIAQRMA8wDQYLKwYBBAGwLQMEAQEwDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEB
3128
- CwUAA4IBAQAmdzTblEiGKkGdLD4GkGDEjKwLVLgfuXvTBznk+j57sj1O7Z8jvZfza1zv7v1Apt+h
3129
- k6EKhqzvINB5Ab149xnYJDE0BAGmuhWawyfc2E8PzBhj/5kPDpFrdRbhIfzYJsdHt6bPWHJxfrrh
3130
- TZVHO8mvbaG0weyJ9rQPOLXiZNwlz6bb65pcmaHFCN795trV1lpFDMS3wrUU77QR/w4VtfX128a9
3131
- 61qn8FYiqTxlVMYVqL2Gns2Dlmh6cYGJ4Qvh6hEbaAjMaZ7snkGeRDImeuKHCnE96+RapNLbxc3G
3132
- 3mB/ufNPRJLvKrcYPqcZ2Qt9sTdBQrC6YB3y/gkRsPCHe6ed
3133
- -----END CERTIFICATE-----
3134
-
3135
- QuoVadis Root CA 1 G3
3136
- =====================
3137
- -----BEGIN CERTIFICATE-----
3138
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- Pser4BOcBRiYz5P1sZK0/CPTz9XEJ0ngnjybCKOLXSoh4Pw5qlPafX7PGglTvF0FBM+hSo+LdoIN
3146
- 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
- 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
- 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
- 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
- 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
- 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
- AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUo5fW816iEOGrRZ88F2Q87gFwnMwwDQYJKoZI
3153
- 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
- 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
- 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
- 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
- +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
- 3jRJjehZrJ3ydlo28hP0r+AJx2EqbPfgna67hkooby7utHnNkDPDs3b69fBsnQGQ+p6Q9pxyz0fa
3159
- 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
- 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
- FU/DlXpY18ls6Wy58yljXrQs8C097Vpl4KlbQMJImYFtnh8GKjwStIsPm6Ik8KaN1nrgS7ZklmOV
3162
- hMJKzRwuJIczYOXD
3163
- -----END CERTIFICATE-----
3164
-
3165
- QuoVadis Root CA 2 G3
3166
- =====================
3167
- -----BEGIN CERTIFICATE-----
3168
- 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
- A1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAcBgNVBAMTFVF1b1ZhZGlzIFJv
3170
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
3192
- O3jtZsSOeWmD3n+M
3193
- -----END CERTIFICATE-----
3194
-
3195
- QuoVadis Root CA 3 G3
3196
- =====================
3197
- -----BEGIN CERTIFICATE-----
3198
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 6okJ7UO4BUaKhvVZR74bbwEhELn9qdIoyhA5CcoTNs+cra1AdHkrAj80//ogaX3T7mH1urPnMNA3
3206
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- dSHBd575euFgndOtBBj0fOtek49TSiIp+EgrPk2GrFt/ywaZWWDYWGWVjUTR939+J399roD1B0y2
3222
- PpxxVJkES/1Y+Zj0
3223
- -----END CERTIFICATE-----
3224
-
3225
- DigiCert Assured ID Root G2
3226
- ===========================
3227
- -----BEGIN CERTIFICATE-----
3228
- MIIDljCCAn6gAwIBAgIQC5McOtY5Z+pnI7/Dr5r0SzANBgkqhkiG9w0BAQsFADBlMQswCQYDVQQG
3229
- EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQw
3230
- IgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzIwHhcNMTMwODAxMTIwMDAwWhcNMzgw
3231
- MTE1MTIwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQL
3232
- ExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzIw
3233
- ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDZ5ygvUj82ckmIkzTz+GoeMVSAn61UQbVH
3234
- 35ao1K+ALbkKz3X9iaV9JPrjIgwrvJUXCzO/GU1BBpAAvQxNEP4HteccbiJVMWWXvdMX0h5i89vq
3235
- bFCMP4QMls+3ywPgym2hFEwbid3tALBSfK+RbLE4E9HpEgjAALAcKxHad3A2m67OeYfcgnDmCXRw
3236
- VWmvo2ifv922ebPynXApVfSr/5Vh88lAbx3RvpO704gqu52/clpWcTs/1PPRCv4o76Pu2ZmvA9OP
3237
- YLfykqGxvYmJHzDNw6YuYjOuFgJ3RFrngQo8p0Quebg/BLxcoIfhG69Rjs3sLPr4/m3wOnyqi+Rn
3238
- lTGNAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBTO
3239
- w0q5mVXyuNtgv6l+vVa1lzan1jANBgkqhkiG9w0BAQsFAAOCAQEAyqVVjOPIQW5pJ6d1Ee88hjZv
3240
- 0p3GeDgdaZaikmkuOGybfQTUiaWxMTeKySHMq2zNixya1r9I0jJmwYrA8y8678Dj1JGG0VDjA9tz
3241
- d29KOVPt3ibHtX2vK0LRdWLjSisCx1BL4GnilmwORGYQRI+tBev4eaymG+g3NJ1TyWGqolKvSnAW
3242
- hsI6yLETcDbYz+70CjTVW0z9B5yiutkBclzzTcHdDrEcDcRjvq30FPuJ7KJBDkzMyFdA0G4Dqs0M
3243
- jomZmWzwPDCvON9vvKO+KSAnq3T/EyJ43pdSVR6DtVQgA+6uwE9W3jfMw3+qBCe703e4YtsXfJwo
3244
- IhNzbM8m9Yop5w==
3245
- -----END CERTIFICATE-----
3246
-
3247
- DigiCert Assured ID Root G3
3248
- ===========================
3249
- -----BEGIN CERTIFICATE-----
3250
- MIICRjCCAc2gAwIBAgIQC6Fa+h3foLVJRK/NJKBs7DAKBggqhkjOPQQDAzBlMQswCQYDVQQGEwJV
3251
- UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQwIgYD
3252
- VQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzMwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1
3253
- MTIwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
3254
- d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzMwdjAQ
3255
- BgcqhkjOPQIBBgUrgQQAIgNiAAQZ57ysRGXtzbg/WPuNsVepRC0FFfLvC/8QdJ+1YlJfZn4f5dwb
3256
- RXkLzMZTCp2NXQLZqVneAlr2lSoOjThKiknGvMYDOAdfVdp+CW7if17QRSAPWXYQ1qAk8C3eNvJs
3257
- KTmjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBTL0L2p4ZgF
3258
- UaFNN6KDec6NHSrkhDAKBggqhkjOPQQDAwNnADBkAjAlpIFFAmsSS3V0T8gj43DydXLefInwz5Fy
3259
- YZ5eEJJZVrmDxxDnOOlYJjZ91eQ0hjkCMHw2U/Aw5WJjOpnitqM7mzT6HtoQknFekROn3aRukswy
3260
- 1vUhZscv6pZjamVFkpUBtA==
3261
- -----END CERTIFICATE-----
3262
-
3263
- DigiCert Global Root G2
3264
- =======================
3265
- -----BEGIN CERTIFICATE-----
3266
- MIIDjjCCAnagAwIBAgIQAzrx5qcRqaC7KGSxHQn65TANBgkqhkiG9w0BAQsFADBhMQswCQYDVQQG
3267
- EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAw
3268
- HgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBHMjAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUx
3269
- MjAwMDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3
3270
- dy5kaWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEcyMIIBIjANBgkq
3271
- hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuzfNNNx7a8myaJCtSnX/RrohCgiN9RlUyfuI2/Ou8jqJ
3272
- kTx65qsGGmvPrC3oXgkkRLpimn7Wo6h+4FR1IAWsULecYxpsMNzaHxmx1x7e/dfgy5SDN67sH0NO
3273
- 3Xss0r0upS/kqbitOtSZpLYl6ZtrAGCSYP9PIUkY92eQq2EGnI/yuum06ZIya7XzV+hdG82MHauV
3274
- BJVJ8zUtluNJbd134/tJS7SsVQepj5WztCO7TG1F8PapspUwtP1MVYwnSlcUfIKdzXOS0xZKBgyM
3275
- UNGPHgm+F6HmIcr9g+UQvIOlCsRnKPZzFBQ9RnbDhxSJITRNrw9FDKZJobq7nMWxM4MphQIDAQAB
3276
- o0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUTiJUIBiV5uNu
3277
- 5g/6+rkS7QYXjzkwDQYJKoZIhvcNAQELBQADggEBAGBnKJRvDkhj6zHd6mcY1Yl9PMWLSn/pvtsr
3278
- F9+wX3N3KjITOYFnQoQj8kVnNeyIv/iPsGEMNKSuIEyExtv4NeF22d+mQrvHRAiGfzZ0JFrabA0U
3279
- WTW98kndth/Jsw1HKj2ZL7tcu7XUIOGZX1NGFdtom/DzMNU+MeKNhJ7jitralj41E6Vf8PlwUHBH
3280
- QRFXGU7Aj64GxJUTFy8bJZ918rGOmaFvE7FBcf6IKshPECBV1/MUReXgRPTqh5Uykw7+U0b6LJ3/
3281
- iyK5S9kJRaTepLiaWN0bfVKfjllDiIGknibVb63dDcY3fe0Dkhvld1927jyNxF1WW6LZZm6zNTfl
3282
- MrY=
3283
- -----END CERTIFICATE-----
3284
-
3285
- DigiCert Global Root G3
3286
- =======================
3287
- -----BEGIN CERTIFICATE-----
3288
- MIICPzCCAcWgAwIBAgIQBVVWvPJepDU1w6QP1atFcjAKBggqhkjOPQQDAzBhMQswCQYDVQQGEwJV
3289
- UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAwHgYD
3290
- VQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBHMzAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAw
3291
- MDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5k
3292
- aWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEczMHYwEAYHKoZIzj0C
3293
- AQYFK4EEACIDYgAE3afZu4q4C/sLfyHS8L6+c/MzXRq8NOrexpu80JX28MzQC7phW1FGfp4tn+6O
3294
- YwwX7Adw9c+ELkCDnOg/QW07rdOkFFk2eJ0DQ+4QE2xy3q6Ip6FrtUPOZ9wj/wMco+I+o0IwQDAP
3295
- BgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUs9tIpPmhxdiuNkHMEWNp
3296
- Yim8S8YwCgYIKoZIzj0EAwMDaAAwZQIxAK288mw/EkrRLTnDCgmXc/SINoyIJ7vmiI1Qhadj+Z4y
3297
- 3maTD/HMsQmP3Wyr+mt/oAIwOWZbwmSNuJ5Q3KjVSaLtx9zRSX8XAbjIho9OjIgrqJqpisXRAL34
3298
- VOKa5Vt8sycX
3299
- -----END CERTIFICATE-----
3300
-
3301
- DigiCert Trusted Root G4
3302
- ========================
3303
- -----BEGIN CERTIFICATE-----
3304
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 5BuVnRmhuZyxm7EAHu/QD09CbMkKvO5D+jpxpchNJqU1/YldvIViHTLSoCtU7ZpXwdv6EM8Zt4tK
3328
- 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
3329
- 82Z+
3330
- -----END CERTIFICATE-----
3331
-
3332
- WoSign
3333
- ======
3334
- -----BEGIN CERTIFICATE-----
3335
- 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
- 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
- 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
- BgNVBAYTAkNOMRowGAYDVQQKExFXb1NpZ24gQ0EgTGltaXRlZDEqMCgGA1UEAxMhQ2VydGlmaWNh
3339
- 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
- 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
- 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
- 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
- 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
- +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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 5cVAWubXbHssw1abR80LzvobtCHXt2a49CUwi1wNuepnsvRtrtWhnk/Yn+knArAdBtaP4/tIEp9/
3356
- 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
- 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
- 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
- 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
3360
- -----END CERTIFICATE-----
3361
-
3362
- WoSign China
3363
- ============
3364
- -----BEGIN CERTIFICATE-----
3365
- MIIFWDCCA0CgAwIBAgIQUHBrzdgT/BtOOzNy0hFIjTANBgkqhkiG9w0BAQsFADBGMQswCQYDVQQG
3366
- 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
- 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
- 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
- BgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0EkhHiX8h8EqwqzbdoYGTufQdDTc7WU1/FDWiD+k
3370
- 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
- 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
- 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
- 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
- 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
- 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
- +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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- jj4Du9gqsPoUJbJRa4ZDhS4HIxaAjUz7tGM7zMN07RujHv41D198HRaG9Q7DlfEvr10lO1Hm13ZB
3387
- ONFLAzkopR6RctR9q5czxNM+4Gm2KHmgCY0c0f9BckgG/Jou5yD5m6Leie2uPAmvylezkolwQOQv
3388
- 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
3389
- kI26oQ==
3390
- -----END CERTIFICATE-----
3391
-
3392
- COMODO RSA Certification Authority
3393
- ==================================
3394
- -----BEGIN CERTIFICATE-----
3395
- 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
- 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
- A1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBSU0EgQ2VydGlmaWNhdGlv
3398
- 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
- R0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UE
3400
- ChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBSU0EgQ2VydGlmaWNhdGlvbiBB
3401
- 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
- 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
- FGvnnLOFoIJ6dq9xkNfs/Q36nGz637CC9BR++b7Epi9Pf5l/tfxnQ3K9DADWietrLNPtj5gcFKt+
3404
- 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
- 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
- 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
- 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
- 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
- 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
- WdYgGq/yapiqcrxXStJLnbsQ/LBMQeXtHT1eKJ2czL+zUdqnR+WEUwIDAQABo0IwQDAdBgNVHQ4E
3411
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
3421
- LaZRfyHBNVOFBkpdn627G190
3422
- -----END CERTIFICATE-----
3423
-
3424
- USERTrust RSA Certification Authority
3425
- =====================================
3426
- -----BEGIN CERTIFICATE-----
3427
- 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
- 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
- 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
- dGlvbiBBdXRob3JpdHkwHhcNMTAwMjAxMDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UE
3431
- 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
- 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
- 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
- 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
- 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
- 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
- +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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 8WcRiQycE0xyNN+81XHfqnHd4blsjDwSXWXavVcStkNr/+XeTWYRUc+ZruwXtuhxkYzeSf7dNXGi
3449
- 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
- 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
- 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
- sAvgnEzDHNb842m1R0aBL6KCq9NjRHDEjf8tM7qtj3u1cIiuPhnPQCjY/MiQu12ZIvVS5ljFH4gx
3453
- Q+6IHdfGjjxDah2nGN59PRbxYvnKkKj9
3454
- -----END CERTIFICATE-----
3455
-
3456
- USERTrust ECC Certification Authority
3457
- =====================================
3458
- -----BEGIN CERTIFICATE-----
3459
- MIICjzCCAhWgAwIBAgIQXIuZxVqUxdJxVt7NiYDMJjAKBggqhkjOPQQDAzCBiDELMAkGA1UEBhMC
3460
- VVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVU
3461
- aGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBFQ0MgQ2VydGlmaWNhdGlv
3462
- biBBdXRob3JpdHkwHhcNMTAwMjAxMDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UEBhMC
3463
- VVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVU
3464
- aGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBFQ0MgQ2VydGlmaWNhdGlv
3465
- biBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQarFRaqfloI+d61SRvU8Za2EurxtW2
3466
- 0eZzca7dnNYMYf3boIkDuAUU7FfO7l0/4iGzzvfUinngo4N+LZfQYcTxmdwlkWOrfzCjtHDix6Ez
3467
- nPO/LlxTsV+zfTJ/ijTjeXmjQjBAMB0GA1UdDgQWBBQ64QmG1M8ZwpZ2dEl23OA1xmNjmjAOBgNV
3468
- HQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjA2Z6EWCNzklwBB
3469
- HU6+4WMBzzuqQhFkoJ2UOQIReVx7Hfpkue4WQrO/isIJxOzksU0CMQDpKmFHjFJKS04YcPbWRNZu
3470
- 9YO6bVi9JNlWSOrvxKJGgYhqOkbRqZtNyWHa0V1Xahg=
3471
- -----END CERTIFICATE-----
3472
-
3473
- GlobalSign ECC Root CA - R4
3474
- ===========================
3475
- -----BEGIN CERTIFICATE-----
3476
- MIIB4TCCAYegAwIBAgIRKjikHJYKBN5CsiilC+g0mAIwCgYIKoZIzj0EAwIwUDEkMCIGA1UECxMb
3477
- R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI0MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD
3478
- EwpHbG9iYWxTaWduMB4XDTEyMTExMzAwMDAwMFoXDTM4MDExOTAzMTQwN1owUDEkMCIGA1UECxMb
3479
- R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI0MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD
3480
- EwpHbG9iYWxTaWduMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEuMZ5049sJQ6fLjkZHAOkrprl
3481
- OQcJFspjsbmG+IpXwVfOQvpzofdlQv8ewQCybnMO/8ch5RikqtlxP6jUuc6MHaNCMEAwDgYDVR0P
3482
- AQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFFSwe61FuOJAf/sKbvu+M8k8o4TV
3483
- MAoGCCqGSM49BAMCA0gAMEUCIQDckqGgE6bPA7DmxCGXkPoUVy0D7O48027KqGx2vKLeuwIgJ6iF
3484
- JzWbVsaj8kfSt24bAgAXqmemFZHe+pTsewv4n4Q=
3485
- -----END CERTIFICATE-----
3486
-
3487
- GlobalSign ECC Root CA - R5
3488
- ===========================
3489
- -----BEGIN CERTIFICATE-----
3490
- MIICHjCCAaSgAwIBAgIRYFlJ4CYuu1X5CneKcflK2GwwCgYIKoZIzj0EAwMwUDEkMCIGA1UECxMb
3491
- R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI1MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD
3492
- EwpHbG9iYWxTaWduMB4XDTEyMTExMzAwMDAwMFoXDTM4MDExOTAzMTQwN1owUDEkMCIGA1UECxMb
3493
- R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI1MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD
3494
- EwpHbG9iYWxTaWduMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAER0UOlvt9Xb/pOdEh+J8LttV7HpI6
3495
- SFkc8GIxLcB6KP4ap1yztsyX50XUWPrRd21DosCHZTQKH3rd6zwzocWdTaRvQZU4f8kehOvRnkmS
3496
- h5SHDDqFSmafnVmTTZdhBoZKo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAd
3497
- BgNVHQ4EFgQUPeYpSJvqB8ohREom3m7e0oPQn1kwCgYIKoZIzj0EAwMDaAAwZQIxAOVpEslu28Yx
3498
- uglB4Zf4+/2a4n0Sye18ZNPLBSWLVtmg515dTguDnFt2KaAJJiFqYgIwcdK1j1zqO+F4CYWodZI7
3499
- yFz9SO8NdCKoCOJuxUnOxwy8p2Fp8fc74SrL+SvzZpA3
3500
- -----END CERTIFICATE-----
3501
-
3502
- Staat der Nederlanden Root CA - G3
3503
- ==================================
3504
- -----BEGIN CERTIFICATE-----
3505
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 1nus6+N86U78dULI7ViVDAZCopz35HCz33JvWjdAidiFpNfxC95DGdRKWCyMijmev4SH8RY7Ngzp
3516
- 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
- FxcHErVc0qsgk7TmgoNwNsXNo42ti+yjwUOH5kPiNL6VizXtBznaqB16nzaeErAMZRKQFWDZJkBE
3518
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
3530
- -----END CERTIFICATE-----
3531
-
3532
- Staat der Nederlanden EV Root CA
3533
- ================================
3534
- -----BEGIN CERTIFICATE-----
3535
- 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
- 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
- RVYgUm9vdCBDQTAeFw0xMDEyMDgxMTE5MjlaFw0yMjEyMDgxMTEwMjhaMFgxCzAJBgNVBAYTAk5M
3538
- MR4wHAYDVQQKDBVTdGFhdCBkZXIgTmVkZXJsYW5kZW4xKTAnBgNVBAMMIFN0YWF0IGRlciBOZWRl
3539
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 5Dp6Z2Orltxtrpfs/J92VoguZs9btsmksNcFuuEnL5O7Jiqik7Ab846+HUCjuTaPPoIaGl6I6lD4
3557
- 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
- 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
3559
- eUN51q1veieQA6TqJIc/2b3Z6fJfUEkc7uzXLg==
3560
- -----END CERTIFICATE-----
3561
-
3562
- IdenTrust Commercial Root CA 1
3563
- ==============================
3564
- -----BEGIN CERTIFICATE-----
3565
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- XZ/g1Ue9tOsbobtJSdifWwLziuQkkORiT0/Br4sOdBeo0XKIanoBScy0RnnGF7HamB4HWfp1IYVl
3574
- 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
- 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
- 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
- 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
- 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
- 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
- hvcNAQELBQADggIBAA2ukDL2pkt8RHYZYR4nKM1eVO8lvOMIkPkp165oCOGUAFjvLi5+U1KMtlwH
3581
- 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
- ghstO8OEPVeKlh6cdbjTMM1gCIOQ045U8U1mwF10A0Cj7oV+wh93nAbowacYXVKV7cndJZ5t+qnt
3583
- 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
- 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
- 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
- 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
- 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
- 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
3589
- cGzM7vRX+Bi6hG6H
3590
- -----END CERTIFICATE-----
3591
-
3592
- IdenTrust Public Sector Root CA 1
3593
- =================================
3594
- -----BEGIN CERTIFICATE-----
3595
- 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
- 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
- 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
- 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
- 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
- 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
- Hi9e28tzQa68ALBKK0CyrOE7S8ItneShm+waOh7wCLPQ5CQ1B5+ctMlSbdsHyo+1W/CD80/HLaXI
3602
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- NRF4eKLg6TCMf4DfWN88uieW4oA0beOY02QnrEh+KHdcxiVhJfiFDGX6xDIvpZgF5PgLZxYWxoK4
3616
- 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
- ajjDbp7hNxbqBWJMWxJH7ae0s1hWx0nzfxJoCTFx8G34Tkf71oXuxVhAGaQdp/lLQzfcaFpPz+vC
3618
- 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
3619
- 3Wl9af0AVqW3rLatt8o+Ae+c
3620
- -----END CERTIFICATE-----
3621
-
3622
- Entrust Root Certification Authority - G2
3623
- =========================================
3624
- -----BEGIN CERTIFICATE-----
3625
- MIIEPjCCAyagAwIBAgIESlOMKDANBgkqhkiG9w0BAQsFADCBvjELMAkGA1UEBhMCVVMxFjAUBgNV
3626
- BAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVnYWwtdGVy
3627
- bXMxOTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ug
3628
- b25seTEyMDAGA1UEAxMpRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzIw
3629
- HhcNMDkwNzA3MTcyNTU0WhcNMzAxMjA3MTc1NTU0WjCBvjELMAkGA1UEBhMCVVMxFjAUBgNVBAoT
3630
- DUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVnYWwtdGVybXMx
3631
- OTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ugb25s
3632
- eTEyMDAGA1UEAxMpRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzIwggEi
3633
- MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC6hLZy254Ma+KZ6TABp3bqMriVQRrJ2mFOWHLP
3634
- /vaCeb9zYQYKpSfYs1/TRU4cctZOMvJyig/3gxnQaoCAAEUesMfnmr8SVycco2gvCoe9amsOXmXz
3635
- HHfV1IWNcCG0szLni6LVhjkCsbjSR87kyUnEO6fe+1R9V77w6G7CebI6C1XiUJgWMhNcL3hWwcKU
3636
- s/Ja5CeanyTXxuzQmyWC48zCxEXFjJd6BmsqEZ+pCm5IO2/b1BEZQvePB7/1U1+cPvQXLOZprE4y
3637
- TGJ36rfo5bs0vBmLrpxR57d+tVOxMyLlbc9wPBr64ptntoP0jaWvYkxN4FisZDQSA/i2jZRjJKRx
3638
- AgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqciZ6
3639
- 0B7vfec7aVHUbI2fkBJmqzANBgkqhkiG9w0BAQsFAAOCAQEAeZ8dlsa2eT8ijYfThwMEYGprmi5Z
3640
- iXMRrEPR9RP/jTkrwPK9T3CMqS/qF8QLVJ7UG5aYMzyorWKiAHarWWluBh1+xLlEjZivEtRh2woZ
3641
- Rkfz6/djwUAFQKXSt/S1mja/qYh2iARVBCuch38aNzx+LaUa2NSJXsq9rD1s2G2v1fN2D807iDgi
3642
- nWyTmsQ9v4IbZT+mD12q/OWyFcq1rca8PdCE6OoGcrBNOTJ4vz4RnAuknZoh8/CbCzB428Hch0P+
3643
- vGOaysXCHMnHjf87ElgI5rY97HosTvuDls4MPGmHVHOkc8KT/1EQrBVUAdj8BbGJoX90g5pJ19xO
3644
- e4pIb4tF9g==
3645
- -----END CERTIFICATE-----
3646
-
3647
- Entrust Root Certification Authority - EC1
3648
- ==========================================
3649
- -----BEGIN CERTIFICATE-----
3650
- MIIC+TCCAoCgAwIBAgINAKaLeSkAAAAAUNCR+TAKBggqhkjOPQQDAzCBvzELMAkGA1UEBhMCVVMx
3651
- FjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVn
3652
- YWwtdGVybXMxOTA3BgNVBAsTMChjKSAyMDEyIEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXpl
3653
- ZCB1c2Ugb25seTEzMDEGA1UEAxMqRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5
3654
- IC0gRUMxMB4XDTEyMTIxODE1MjUzNloXDTM3MTIxODE1NTUzNlowgb8xCzAJBgNVBAYTAlVTMRYw
3655
- FAYDVQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQLEx9TZWUgd3d3LmVudHJ1c3QubmV0L2xlZ2Fs
3656
- LXRlcm1zMTkwNwYDVQQLEzAoYykgMjAxMiBFbnRydXN0LCBJbmMuIC0gZm9yIGF1dGhvcml6ZWQg
3657
- dXNlIG9ubHkxMzAxBgNVBAMTKkVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAt
3658
- IEVDMTB2MBAGByqGSM49AgEGBSuBBAAiA2IABIQTydC6bUF74mzQ61VfZgIaJPRbiWlH47jCffHy
3659
- AsWfoPZb1YsGGYZPUxBtByQnoaD41UcZYUx9ypMn6nQM72+WCf5j7HBdNq1nd67JnXxVRDqiY1Ef
3660
- 9eNi1KlHBz7MIKNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE
3661
- FLdj5xrdjekIplWDpOBqUEFlEUJJMAoGCCqGSM49BAMDA2cAMGQCMGF52OVCR98crlOZF7ZvHH3h
3662
- vxGU0QOIdeSNiaSKd0bebWHvAvX7td/M/k7//qnmpwIwW5nXhTcGtXsI/esni0qU+eH6p44mCOh8
3663
- kmhtc9hvJqwhAriZtyZBWyVgrtBIGu4G
3664
- -----END CERTIFICATE-----
3665
-
3666
- CFCA EV ROOT
3667
- ============
3668
- -----BEGIN CERTIFICATE-----
3669
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- uF++P96hyk0g1CXohClTt7GIH//62pCfCqktQT+x8Rgp7hZZLDRJGqgG16iI0gNyejLi6mhNbiyW
3677
- ZXvKWfry4t3uMCz7zEasxGPrb382KzRzEpR/38wmnvFyXVBlWY9ps4deMm/DGIq1lY+wejfeWkU7
3678
- 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
- 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
- gWU6cMGbrU1tVMoqLUuFG7OA5nBFDWteNfB/O7ic5ARwiRIlk9oKmSJgamNgTnYGmE69g60dWIol
3681
- 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
- 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
- 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
- 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
- ACXGumvrh8vegjmWPfBEp2uEcwPenStPuiB/vHiyz5ewG5zz13ku9Ui20vsXiObTej/tUxPQ4i9q
3686
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
3694
- -----END CERTIFICATE-----
3695
-
3696
- TÜRKTRUST Elektronik Sertifika Hizmet Sağlayıcısı H5
3697
- =========================================================
3698
- -----BEGIN CERTIFICATE-----
3699
- MIIEJzCCAw+gAwIBAgIHAI4X/iQggTANBgkqhkiG9w0BAQsFADCBsTELMAkGA1UEBhMCVFIxDzAN
3700
- BgNVBAcMBkFua2FyYTFNMEsGA1UECgxEVMOcUktUUlVTVCBCaWxnaSDEsGxldGnFn2ltIHZlIEJp
3701
- bGnFn2ltIEfDvHZlbmxpxJ9pIEhpem1ldGxlcmkgQS7Fni4xQjBABgNVBAMMOVTDnFJLVFJVU1Qg
3702
- RWxla3Ryb25payBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsSBINTAeFw0xMzA0MzAw
3703
- ODA3MDFaFw0yMzA0MjgwODA3MDFaMIGxMQswCQYDVQQGEwJUUjEPMA0GA1UEBwwGQW5rYXJhMU0w
3704
- SwYDVQQKDERUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmlsacWfaW0gR8O8dmVubGnE
3705
- n2kgSGl6bWV0bGVyaSBBLsWeLjFCMEAGA1UEAww5VMOcUktUUlVTVCBFbGVrdHJvbmlrIFNlcnRp
3706
- ZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxIEg1MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
3707
- CgKCAQEApCUZ4WWe60ghUEoI5RHwWrom/4NZzkQqL/7hzmAD/I0Dpe3/a6i6zDQGn1k19uwsu537
3708
- jVJp45wnEFPzpALFp/kRGml1bsMdi9GYjZOHp3GXDSHHmflS0yxjXVW86B8BSLlg/kJK9siArs1m
3709
- ep5Fimh34khon6La8eHBEJ/rPCmBp+EyCNSgBbGM+42WAA4+Jd9ThiI7/PS98wl+d+yG6w8z5UNP
3710
- 9FR1bSmZLmZaQ9/LXMrI5Tjxfjs1nQ/0xVqhzPMggCTTV+wVunUlm+hkS7M0hO8EuPbJbKoCPrZV
3711
- 4jI3X/xml1/N1p7HIL9Nxqw/dV8c7TKcfGkAaZHjIxhT6QIDAQABo0IwQDAdBgNVHQ4EFgQUVpkH
3712
- HtOsDGlktAxQR95DLL4gwPswDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZI
3713
- hvcNAQELBQADggEBAJ5FdnsXSDLyOIspve6WSk6BGLFRRyDN0GSxDsnZAdkJzsiZ3GglE9Rc8qPo
3714
- BP5yCccLqh0lVX6Wmle3usURehnmp349hQ71+S4pL+f5bFgWV1Al9j4uPqrtd3GqqpmWRgqujuwq
3715
- URawXs3qZwQcWDD1YIq9pr1N5Za0/EKJAWv2cMhQOQwt1WbZyNKzMrcbGW3LM/nfpeYVhDfwwvJl
3716
- lpKQd/Ct9JDpEXjXk4nAPQu6KfTomZ1yju2dL+6SfaHx/126M2CFYv4HAqGEVka+lgqaE9chTLd8
3717
- B59OTj+RdPsnnRHM3eaxynFNExc5JsUpISuTKWqW+qtB4Uu2NQvAmxU=
3718
- -----END CERTIFICATE-----
3719
-
3720
- TÜRKTRUST Elektronik Sertifika Hizmet Sağlayıcısı H6
3721
- =========================================================
3722
- -----BEGIN CERTIFICATE-----
3723
- MIIEJjCCAw6gAwIBAgIGfaHyZeyKMA0GCSqGSIb3DQEBCwUAMIGxMQswCQYDVQQGEwJUUjEPMA0G
3724
- A1UEBwwGQW5rYXJhMU0wSwYDVQQKDERUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmls
3725
- acWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLjFCMEAGA1UEAww5VMOcUktUUlVTVCBF
3726
- bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxIEg2MB4XDTEzMTIxODA5
3727
- MDQxMFoXDTIzMTIxNjA5MDQxMFowgbExCzAJBgNVBAYTAlRSMQ8wDQYDVQQHDAZBbmthcmExTTBL
3728
- BgNVBAoMRFTDnFJLVFJVU1QgQmlsZ2kgxLBsZXRpxZ9pbSB2ZSBCaWxpxZ9pbSBHw7x2ZW5sacSf
3729
- aSBIaXptZXRsZXJpIEEuxZ4uMUIwQAYDVQQDDDlUw5xSS1RSVVNUIEVsZWt0cm9uaWsgU2VydGlm
3730
- aWthIEhpem1ldCBTYcSfbGF5xLFjxLFzxLEgSDYwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
3731
- AoIBAQCdsGjW6L0UlqMACprx9MfMkU1xeHe59yEmFXNRFpQJRwXiM/VomjX/3EsvMsew7eKC5W/a
3732
- 2uqsxgbPJQ1BgfbBOCK9+bGlprMBvD9QFyv26WZV1DOzXPhDIHiTVRZwGTLmiddk671IUP320EED
3733
- wnS3/faAz1vFq6TWlRKb55cTMgPp1KtDWxbtMyJkKbbSk60vbNg9tvYdDjTu0n2pVQ8g9P0pu5Fb
3734
- HH3GQjhtQiht1AH7zYiXSX6484P4tZgvsycLSF5W506jM7NE1qXyGJTtHB6plVxiSvgNZ1GpryHV
3735
- +DKdeboaX+UEVU0TRv/yz3THGmNtwx8XEsMeED5gCLMxAgMBAAGjQjBAMB0GA1UdDgQWBBTdVRcT
3736
- 9qzoSCHK77Wv0QAy7Z6MtTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG
3737
- 9w0BAQsFAAOCAQEAb1gNl0OqFlQ+v6nfkkU/hQu7VtMMUszIv3ZnXuaqs6fvuay0EBQNdH49ba3R
3738
- fdCaqaXKGDsCQC4qnFAUi/5XfldcEQlLNkVS9z2sFP1E34uXI9TDwe7UU5X+LEr+DXCqu4svLcsy
3739
- o4LyVN/Y8t3XSHLuSqMplsNEzm61kod2pLv0kmzOLBQJZo6NrRa1xxsJYTvjIKIDgI6tflEATseW
3740
- hvtDmHd9KMeP2Cpu54Rvl0EpABZeTeIT6lnAY2c6RPuY/ATTMHKm9ocJV612ph1jmv3XZch4gyt1
3741
- O6VbuA1df74jrlZVlFjvH4GMKrLN5ptjnhi85WsGtAuYSyher4hYyw==
3742
- -----END CERTIFICATE-----
3743
-
3744
- Certinomis - Root CA
3745
- ====================
3746
- -----BEGIN CERTIFICATE-----
3747
- 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
- Q2VydGlub21pczEXMBUGA1UECxMOMDAwMiA0MzM5OTg5MDMxHTAbBgNVBAMTFENlcnRpbm9taXMg
3749
- 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
- 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
- ZXJ0aW5vbWlzIC0gUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANTMCQos
3752
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- i5HMkesE/Xa0lZrmFAYb1TQdvtj/dBxThZngWVJKYe2InmtJiUZ+IFrZ50rlau7SZRFDAgMBAAGj
3761
- YzBhMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTvkUz1pcMw6C8I
3762
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
3772
- hkIGuUE=
3773
- -----END CERTIFICATE-----
3774
-
3775
- OISTE WISeKey Global Root GB CA
3776
- ===============================
3777
- -----BEGIN CERTIFICATE-----
3778
- MIIDtTCCAp2gAwIBAgIQdrEgUnTwhYdGs/gjGvbCwDANBgkqhkiG9w0BAQsFADBtMQswCQYDVQQG
3779
- EwJDSDEQMA4GA1UEChMHV0lTZUtleTEiMCAGA1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNl
3780
- ZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9iYWwgUm9vdCBHQiBDQTAeFw0xNDEyMDExNTAw
3781
- MzJaFw0zOTEyMDExNTEwMzFaMG0xCzAJBgNVBAYTAkNIMRAwDgYDVQQKEwdXSVNlS2V5MSIwIAYD
3782
- VQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5IEds
3783
- b2JhbCBSb290IEdCIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2Be3HEokKtaX
3784
- scriHvt9OO+Y9bI5mE4nuBFde9IllIiCFSZqGzG7qFshISvYD06fWvGxWuR51jIjK+FTzJlFXHtP
3785
- rby/h0oLS5daqPZI7H17Dc0hBt+eFf1Biki3IPShehtX1F1Q/7pn2COZH8g/497/b1t3sWtuuMlk
3786
- 9+HKQUYOKXHQuSP8yYFfTvdv37+ErXNku7dCjmn21HYdfp2nuFeKUWdy19SouJVUQHMD9ur06/4o
3787
- Qnc/nSMbsrY9gBQHTC5P99UKFg29ZkM3fiNDecNAhvVMKdqOmq0NpQSHiB6F4+lT1ZvIiwNjeOvg
3788
- GUpuuy9rM2RYk61pv48b74JIxwIDAQABo1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB
3789
- /zAdBgNVHQ4EFgQUNQ/INmNe4qPs+TtmFc5RUuORmj0wEAYJKwYBBAGCNxUBBAMCAQAwDQYJKoZI
3790
- hvcNAQELBQADggEBAEBM+4eymYGQfp3FsLAmzYh7KzKNbrghcViXfa43FK8+5/ea4n32cZiZBKpD
3791
- dHij40lhPnOMTZTg+XHEthYOU3gf1qKHLwI5gSk8rxWYITD+KJAAjNHhy/peyP34EEY7onhCkRd0
3792
- VQreUGdNZtGn//3ZwLWoo4rOZvUPQ82nK1d7Y0Zqqi5S2PTt4W2tKZB4SLrhI6qjiey1q5bAtEui
3793
- HZeeevJuQHHfaPFlTc58Bd9TZaml8LGXBHAVRgOY1NK/VLSgWH1Sb9pWJmLU2NuJMW8c8CLC02Ic
3794
- Nc1MaRVUGpCY3useX8p3x8uOPUNpnJpY0CQ73xtAln41rYHHTnG6iBM=
3795
- -----END CERTIFICATE-----
3796
-
3797
- Certification Authority of WoSign G2
3798
- ====================================
3799
- -----BEGIN CERTIFICATE-----
3800
- MIIDfDCCAmSgAwIBAgIQayXaioidfLwPBbOxemFFRDANBgkqhkiG9w0BAQsFADBYMQswCQYDVQQG
3801
- EwJDTjEaMBgGA1UEChMRV29TaWduIENBIExpbWl0ZWQxLTArBgNVBAMTJENlcnRpZmljYXRpb24g
3802
- QXV0aG9yaXR5IG9mIFdvU2lnbiBHMjAeFw0xNDExMDgwMDU4NThaFw00NDExMDgwMDU4NThaMFgx
3803
- CzAJBgNVBAYTAkNOMRowGAYDVQQKExFXb1NpZ24gQ0EgTGltaXRlZDEtMCsGA1UEAxMkQ2VydGlm
3804
- aWNhdGlvbiBBdXRob3JpdHkgb2YgV29TaWduIEcyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
3805
- CgKCAQEAvsXEoCKASU+/2YcRxlPhuw+9YH+v9oIOH9ywjj2X4FA8jzrvZjtFB5sg+OPXJYY1kBai
3806
- XW8wGQiHC38Gsp1ij96vkqVg1CuAmlI/9ZqD6TRay9nVYlzmDuDfBpgOgHzKtB0TiGsOqCR3A9Du
3807
- W/PKaZE1OVbFbeP3PU9ekzgkyhjpJMuSA93MHD0JcOQg5PGurLtzaaNjOg9FD6FKmsLRY6zLEPg9
3808
- 5k4ot+vElbGs/V6r+kHLXZ1L3PR8du9nfwB6jdKgGlxNIuG12t12s9R23164i5jIFFTMaxeSt+BK
3809
- v0mUYQs4kI9dJGwlezt52eJ+na2fmKEG/HgUYFf47oB3sQIDAQABo0IwQDAOBgNVHQ8BAf8EBAMC
3810
- AQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU+mCp62XF3RYUCE4MD42b4Pdkr2cwDQYJKoZI
3811
- hvcNAQELBQADggEBAFfDejaCnI2Y4qtAqkePx6db7XznPWZaOzG73/MWM5H8fHulwqZm46qwtyeY
3812
- P0nXYGdnPzZPSsvxFPpahygc7Y9BMsaV+X3avXtbwrAh449G3CE4Q3RM+zD4F3LBMvzIkRfEzFg3
3813
- TgvMWvchNSiDbGAtROtSjFA9tWwS1/oJu2yySrHFieT801LYYRf+epSEj3m2M1m6D8QL4nCgS3gu
3814
- +sif/a+RZQp4OBXllxcU3fngLDT4ONCEIgDAFFEYKwLcMFrw6AF8NTojrwjkr6qOKEJJLvD1mTS+
3815
- 7Q9LGOHSJDy7XUe3IfKN0QqZjuNuPq1w4I+5ysxugTH2e5x6eeRncRg=
3816
- -----END CERTIFICATE-----
3817
-
3818
- CA WoSign ECC Root
3819
- ==================
3820
- -----BEGIN CERTIFICATE-----
3821
- MIICCTCCAY+gAwIBAgIQaEpYcIBr8I8C+vbe6LCQkDAKBggqhkjOPQQDAzBGMQswCQYDVQQGEwJD
3822
- TjEaMBgGA1UEChMRV29TaWduIENBIExpbWl0ZWQxGzAZBgNVBAMTEkNBIFdvU2lnbiBFQ0MgUm9v
3823
- dDAeFw0xNDExMDgwMDU4NThaFw00NDExMDgwMDU4NThaMEYxCzAJBgNVBAYTAkNOMRowGAYDVQQK
3824
- ExFXb1NpZ24gQ0EgTGltaXRlZDEbMBkGA1UEAxMSQ0EgV29TaWduIEVDQyBSb290MHYwEAYHKoZI
3825
- zj0CAQYFK4EEACIDYgAE4f2OuEMkq5Z7hcK6C62N4DrjJLnSsb6IOsq/Srj57ywvr1FQPEd1bPiU
3826
- t5v8KB7FVMxjnRZLU8HnIKvNrCXSf4/CwVqCXjCLelTOA7WRf6qU0NGKSMyCBSah1VES1ns2o0Iw
3827
- QDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUqv3VWqP2h4syhf3R
3828
- MluARZPzA7gwCgYIKoZIzj0EAwMDaAAwZQIxAOSkhLCB1T2wdKyUpOgOPQB0TKGXa/kNUTyh2Tv0
3829
- Daupn75OcsqF1NnstTJFGG+rrQIwfcf3aWMvoeGY7xMQ0Xk/0f7qO3/eVvSQsRUR2LIiFdAvwyYu
3830
- a/GRspBl9JrmkO5K
3831
- -----END CERTIFICATE-----
3832
-
3833
- SZAFIR ROOT CA2
3834
- ===============
3835
- -----BEGIN CERTIFICATE-----
3836
- MIIDcjCCAlqgAwIBAgIUPopdB+xV0jLVt+O2XwHrLdzk1uQwDQYJKoZIhvcNAQELBQAwUTELMAkG
3837
- A1UEBhMCUEwxKDAmBgNVBAoMH0tyYWpvd2EgSXpiYSBSb3psaWN6ZW5pb3dhIFMuQS4xGDAWBgNV
3838
- BAMMD1NaQUZJUiBST09UIENBMjAeFw0xNTEwMTkwNzQzMzBaFw0zNTEwMTkwNzQzMzBaMFExCzAJ
3839
- BgNVBAYTAlBMMSgwJgYDVQQKDB9LcmFqb3dhIEl6YmEgUm96bGljemVuaW93YSBTLkEuMRgwFgYD
3840
- VQQDDA9TWkFGSVIgUk9PVCBDQTIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC3vD5Q
3841
- qEvNQLXOYeeWyrSh2gwisPq1e3YAd4wLz32ohswmUeQgPYUM1ljj5/QqGJ3a0a4m7utT3PSQ1hNK
3842
- DJA8w/Ta0o4NkjrcsbH/ON7Dui1fgLkCvUqdGw+0w8LBZwPd3BucPbOw3gAeqDRHu5rr/gsUvTaE
3843
- 2g0gv/pby6kWIK05YO4vdbbnl5z5Pv1+TW9NL++IDWr63fE9biCloBK0TXC5ztdyO4mTp4CEHCdJ
3844
- ckm1/zuVnsHMyAHs6A6KCpbns6aH5db5BSsNl0BwPLqsdVqc1U2dAgrSS5tmS0YHF2Wtn2yIANwi
3845
- ieDhZNRnvDF5YTy7ykHNXGoAyDw4jlivAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0P
3846
- AQH/BAQDAgEGMB0GA1UdDgQWBBQuFqlKGLXLzPVvUPMjX/hd56zwyDANBgkqhkiG9w0BAQsFAAOC
3847
- AQEAtXP4A9xZWx126aMqe5Aosk3AM0+qmrHUuOQn/6mWmc5G4G18TKI4pAZw8PRBEew/R40/cof5
3848
- O/2kbytTAOD/OblqBw7rHRz2onKQy4I9EYKL0rufKq8h5mOGnXkZ7/e7DDWQw4rtTw/1zBLZpD67
3849
- oPwglV9PJi8RI4NOdQcPv5vRtB3pEAT+ymCPoky4rc/hkA/NrgrHXXu3UNLUYfrVFdvXn4dRVOul
3850
- 4+vJhaAlIDf7js4MNIThPIGyd05DpYhfhmehPea0XGG2Ptv+tyjFogeutcrKjSoS75ftwjCkySp6
3851
- +/NNIxuZMzSgLvWpCz/UXeHPhJ/iGcJfitYgHuNztw==
3852
- -----END CERTIFICATE-----
3853
-
3854
- Certum Trusted Network CA 2
3855
- ===========================
3856
- -----BEGIN CERTIFICATE-----
3857
- MIIF0jCCA7qgAwIBAgIQIdbQSk8lD8kyN/yqXhKN6TANBgkqhkiG9w0BAQ0FADCBgDELMAkGA1UE
3858
- BhMCUEwxIjAgBgNVBAoTGVVuaXpldG8gVGVjaG5vbG9naWVzIFMuQS4xJzAlBgNVBAsTHkNlcnR1
3859
- bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEkMCIGA1UEAxMbQ2VydHVtIFRydXN0ZWQgTmV0d29y
3860
- ayBDQSAyMCIYDzIwMTExMDA2MDgzOTU2WhgPMjA0NjEwMDYwODM5NTZaMIGAMQswCQYDVQQGEwJQ
3861
- TDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENl
3862
- cnRpZmljYXRpb24gQXV0aG9yaXR5MSQwIgYDVQQDExtDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENB
3863
- IDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC9+Xj45tWADGSdhhuWZGc/IjoedQF9
3864
- 7/tcZ4zJzFxrqZHmuULlIEub2pt7uZld2ZuAS9eEQCsn0+i6MLs+CRqnSZXvK0AkwpfHp+6bJe+o
3865
- CgCXhVqqndwpyeI1B+twTUrWwbNWuKFBOJvR+zF/j+Bf4bE/D44WSWDXBo0Y+aomEKsq09DRZ40b
3866
- Rr5HMNUuctHFY9rnY3lEfktjJImGLjQ/KUxSiyqnwOKRKIm5wFv5HdnnJ63/mgKXwcZQkpsCLL2p
3867
- uTRZCr+ESv/f/rOf69me4Jgj7KZrdxYq28ytOxykh9xGc14ZYmhFV+SQgkK7QtbwYeDBoz1mo130
3868
- GO6IyY0XRSmZMnUCMe4pJshrAua1YkV/NxVaI2iJ1D7eTiew8EAMvE0Xy02isx7QBlrd9pPPV3WZ
3869
- 9fqGGmd4s7+W/jTcvedSVuWz5XV710GRBdxdaeOVDUO5/IOWOZV7bIBaTxNyxtd9KXpEulKkKtVB
3870
- Rgkg/iKgtlswjbyJDNXXcPiHUv3a76xRLgezTv7QCdpw75j6VuZt27VXS9zlLCUVyJ4ueE742pye
3871
- hizKV/Ma5ciSixqClnrDvFASadgOWkaLOusm+iPJtrCBvkIApPjW/jAux9JG9uWOdf3yzLnQh1vM
3872
- BhBgu4M1t15n3kfsmUjxpKEV/q2MYo45VU85FrmxY53/twIDAQABo0IwQDAPBgNVHRMBAf8EBTAD
3873
- AQH/MB0GA1UdDgQWBBS2oVQ5AsOgP46KvPrU+Bym0ToO/TAOBgNVHQ8BAf8EBAMCAQYwDQYJKoZI
3874
- hvcNAQENBQADggIBAHGlDs7k6b8/ONWJWsQCYftMxRQXLYtPU2sQF/xlhMcQSZDe28cmk4gmb3DW
3875
- Al45oPePq5a1pRNcgRRtDoGCERuKTsZPpd1iHkTfCVn0W3cLN+mLIMb4Ck4uWBzrM9DPhmDJ2vuA
3876
- L55MYIR4PSFk1vtBHxgP58l1cb29XN40hz5BsA72udY/CROWFC/emh1auVbONTqwX3BNXuMp8SMo
3877
- clm2q8KMZiYcdywmdjWLKKdpoPk79SPdhRB0yZADVpHnr7pH1BKXESLjokmUbOe3lEu6LaTaM4tM
3878
- pkT/WjzGHWTYtTHkpjx6qFcL2+1hGsvxznN3Y6SHb0xRONbkX8eftoEq5IVIeVheO/jbAoJnwTnb
3879
- w3RLPTYe+SmTiGhbqEQZIfCn6IENLOiTNrQ3ssqwGyZ6miUfmpqAnksqP/ujmv5zMnHCnsZy4Ypo
3880
- J/HkD7TETKVhk/iXEAcqMCWpuchxuO9ozC1+9eB+D4Kob7a6bINDd82Kkhehnlt4Fj1F4jNy3eFm
3881
- ypnTycUm/Q1oBEauttmbjL4ZvrHG8hnjXALKLNhvSgfZyTXaQHXyxKcZb55CEJh15pWLYLztxRLX
3882
- is7VmFxWlgPF7ncGNf/P5O4/E2Hu29othfDNrp2yGAlFw5Khchf8R7agCyzxxN5DaAhqXzvwdmP7
3883
- zAYspsbiDrW5viSP
3884
- -----END CERTIFICATE-----
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/composer/ca-bundle/src/CaBundle.php DELETED
@@ -1,291 +0,0 @@
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
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/composer/installed.json DELETED
@@ -1,263 +0,0 @@
1
- [
2
- {
3
- "name": "kriswallsmith/buzz",
4
- "version": "v0.15",
5
- "version_normalized": "0.15.0.0",
6
- "source": {
7
- "type": "git",
8
- "url": "https://github.com/kriswallsmith/Buzz.git",
9
- "reference": "d4041666c3ffb379af02a92dabe81c904b35fab8"
10
- },
11
- "dist": {
12
- "type": "zip",
13
- "url": "https://api.github.com/repos/kriswallsmith/Buzz/zipball/d4041666c3ffb379af02a92dabe81c904b35fab8",
14
- "reference": "d4041666c3ffb379af02a92dabe81c904b35fab8",
15
- "shasum": ""
16
- },
17
- "require": {
18
- "php": ">=5.3.0"
19
- },
20
- "require-dev": {
21
- "phpunit/phpunit": "3.7.*"
22
- },
23
- "suggest": {
24
- "ext-curl": "*"
25
- },
26
- "time": "2015-06-25 17:26:56",
27
- "type": "library",
28
- "installation-source": "dist",
29
- "autoload": {
30
- "psr-0": {
31
- "Buzz": "lib/"
32
- }
33
- },
34
- "notification-url": "https://packagist.org/downloads/",
35
- "license": [
36
- "MIT"
37
- ],
38
- "authors": [
39
- {
40
- "name": "Kris Wallsmith",
41
- "email": "kris.wallsmith@gmail.com",
42
- "homepage": "http://kriswallsmith.net/"
43
- }
44
- ],
45
- "description": "Lightweight HTTP client",
46
- "homepage": "https://github.com/kriswallsmith/Buzz",
47
- "keywords": [
48
- "curl",
49
- "http client"
50
- ]
51
- },
52
- {
53
- "name": "composer/ca-bundle",
54
- "version": "1.0.4",
55
- "version_normalized": "1.0.4.0",
56
- "source": {
57
- "type": "git",
58
- "url": "https://github.com/composer/ca-bundle.git",
59
- "reference": "ec21a59414b99501e723b63fd664aa8ead9c5680"
60
- },
61
- "dist": {
62
- "type": "zip",
63
- "url": "https://api.github.com/repos/composer/ca-bundle/zipball/ec21a59414b99501e723b63fd664aa8ead9c5680",
64
- "reference": "ec21a59414b99501e723b63fd664aa8ead9c5680",
65
- "shasum": ""
66
- },
67
- "require": {
68
- "ext-openssl": "*",
69
- "ext-pcre": "*",
70
- "php": "^5.3.2 || ^7.0"
71
- },
72
- "require-dev": {
73
- "psr/log": "^1.0",
74
- "symfony/process": "^2.5 || ^3.0"
75
- },
76
- "suggest": {
77
- "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+"
78
- },
79
- "time": "2016-09-04 19:00:06",
80
- "type": "library",
81
- "extra": {
82
- "branch-alias": {
83
- "dev-master": "1.x-dev"
84
- }
85
- },
86
- "installation-source": "dist",
87
- "autoload": {
88
- "psr-4": {
89
- "Composer\\CaBundle\\": "src"
90
- }
91
- },
92
- "notification-url": "https://packagist.org/downloads/",
93
- "license": [
94
- "MIT"
95
- ],
96
- "authors": [
97
- {
98
- "name": "Jordi Boggiano",
99
- "email": "j.boggiano@seld.be",
100
- "homepage": "http://seld.be"
101
- }
102
- ],
103
- "description": "Lets you find a path to the system CA bundle, and includes a fallback to the Mozilla CA bundle.",
104
- "keywords": [
105
- "cabundle",
106
- "cacert",
107
- "certificate",
108
- "ssl",
109
- "tls"
110
- ]
111
- },
112
- {
113
- "name": "maxmind/web-service-common",
114
- "version": "v0.3.1",
115
- "version_normalized": "0.3.1.0",
116
- "source": {
117
- "type": "git",
118
- "url": "https://github.com/maxmind/web-service-common-php.git",
119
- "reference": "1fe780bcd6a9038b7e36b13fa0aeeeeca4cdb0a4"
120
- },
121
- "dist": {
122
- "type": "zip",
123
- "url": "https://api.github.com/repos/maxmind/web-service-common-php/zipball/1fe780bcd6a9038b7e36b13fa0aeeeeca4cdb0a4",
124
- "reference": "1fe780bcd6a9038b7e36b13fa0aeeeeca4cdb0a4",
125
- "shasum": ""
126
- },
127
- "require": {
128
- "composer/ca-bundle": "^1.0.3",
129
- "ext-curl": "*",
130
- "ext-json": "*",
131
- "php": ">=5.3"
132
- },
133
- "require-dev": {
134
- "phpunit/phpunit": "4.*",
135
- "squizlabs/php_codesniffer": "2.*"
136
- },
137
- "time": "2016-08-18 16:36:52",
138
- "type": "library",
139
- "installation-source": "dist",
140
- "autoload": {
141
- "psr-4": {
142
- "MaxMind\\": "src"
143
- }
144
- },
145
- "notification-url": "https://packagist.org/downloads/",
146
- "license": [
147
- "Apache-2.0"
148
- ],
149
- "authors": [
150
- {
151
- "name": "Gregory Oschwald",
152
- "email": "goschwald@maxmind.com"
153
- }
154
- ],
155
- "description": "Internal MaxMind Web Service API",
156
- "homepage": "https://github.com/maxmind/mm-web-service-api-php"
157
- },
158
- {
159
- "name": "maxmind-db/reader",
160
- "version": "v1.1.1",
161
- "version_normalized": "1.1.1.0",
162
- "source": {
163
- "type": "git",
164
- "url": "https://github.com/maxmind/MaxMind-DB-Reader-php.git",
165
- "reference": "8da3b4fcd439779d4b16bba0a4ba98365f78d788"
166
- },
167
- "dist": {
168
- "type": "zip",
169
- "url": "https://api.github.com/repos/maxmind/MaxMind-DB-Reader-php/zipball/8da3b4fcd439779d4b16bba0a4ba98365f78d788",
170
- "reference": "8da3b4fcd439779d4b16bba0a4ba98365f78d788",
171
- "shasum": ""
172
- },
173
- "require": {
174
- "php": ">=5.3.1"
175
- },
176
- "require-dev": {
177
- "phpunit/phpunit": "4.2.*",
178
- "satooshi/php-coveralls": "1.0.*",
179
- "squizlabs/php_codesniffer": "2.*"
180
- },
181
- "time": "2016-09-15 21:26:50",
182
- "type": "library",
183
- "installation-source": "dist",
184
- "autoload": {
185
- "psr-0": {
186
- "MaxMind": "src/"
187
- }
188
- },
189
- "notification-url": "https://packagist.org/downloads/",
190
- "license": [
191
- "Apache-2.0"
192
- ],
193
- "authors": [
194
- {
195
- "name": "Gregory J. Oschwald",
196
- "email": "goschwald@maxmind.com",
197
- "homepage": "http://www.maxmind.com/"
198
- }
199
- ],
200
- "description": "MaxMind DB Reader API",
201
- "homepage": "https://github.com/maxmind/MaxMind-DB-Reader-php",
202
- "keywords": [
203
- "database",
204
- "geoip",
205
- "geoip2",
206
- "geolocation",
207
- "maxmind"
208
- ]
209
- },
210
- {
211
- "name": "geoip2/geoip2",
212
- "version": "v2.4.4",
213
- "version_normalized": "2.4.4.0",
214
- "source": {
215
- "type": "git",
216
- "url": "https://github.com/maxmind/GeoIP2-php.git",
217
- "reference": "57e0384a83d0935db4c4cdb3f411aa131481ae80"
218
- },
219
- "dist": {
220
- "type": "zip",
221
- "url": "https://api.github.com/repos/maxmind/GeoIP2-php/zipball/57e0384a83d0935db4c4cdb3f411aa131481ae80",
222
- "reference": "57e0384a83d0935db4c4cdb3f411aa131481ae80",
223
- "shasum": ""
224
- },
225
- "require": {
226
- "maxmind-db/reader": "~1.0",
227
- "maxmind/web-service-common": "~0.3",
228
- "php": ">=5.3.1"
229
- },
230
- "require-dev": {
231
- "phpunit/phpunit": "4.2.*",
232
- "squizlabs/php_codesniffer": "2.*"
233
- },
234
- "time": "2016-10-11 21:58:42",
235
- "type": "library",
236
- "installation-source": "dist",
237
- "autoload": {
238
- "psr-4": {
239
- "GeoIp2\\": "src"
240
- }
241
- },
242
- "notification-url": "https://packagist.org/downloads/",
243
- "license": [
244
- "Apache-2.0"
245
- ],
246
- "authors": [
247
- {
248
- "name": "Gregory J. Oschwald",
249
- "email": "goschwald@maxmind.com",
250
- "homepage": "http://www.maxmind.com/"
251
- }
252
- ],
253
- "description": "MaxMind GeoIP2 PHP API",
254
- "homepage": "https://github.com/maxmind/GeoIP2-php",
255
- "keywords": [
256
- "IP",
257
- "geoip",
258
- "geoip2",
259
- "geolocation",
260
- "maxmind"
261
- ]
262
- }
263
- ]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/geoip2/geoip2/.gitmodules DELETED
@@ -1,3 +0,0 @@
1
- [submodule "maxmind-db"]
2
- path = maxmind-db
3
- url = git://github.com/maxmind/MaxMind-DB.git
 
 
 
app/code/community/Webinterpret/Connector/Lib/geoip2/geoip2/CHANGELOG.md DELETED
@@ -1,224 +0,0 @@
1
- CHANGELOG
2
- =========
3
-
4
- 2.4.4 (2016-10-11)
5
- ------------------
6
-
7
- * `isset()` on `mostSpecificSubdivision` attribute now returns the
8
- correct value. Reported by Juan Francisco Giordana. GitHub #81.
9
-
10
- 2.4.3 (2016-10-11)
11
- ------------------
12
-
13
- * `isset()` on `name` attribute now returns the correct value. Reported by
14
- Juan Francisco Giordana. GitHub #79.
15
-
16
- 2.4.2 (2016-08-17)
17
- ------------------
18
-
19
- * Updated documentation to clarify what the accuracy radius refers to.
20
- * Upgraded `maxmind/web-service-common` to 0.3.0. This version uses
21
- `composer/ca-bundle` rather than our own CA bundle. GitHub #75.
22
- * Improved PHP documentation generation.
23
-
24
- 2.4.1 (2016-06-10)
25
- ------------------
26
-
27
- * Corrected type annotations in documentation. GitHub #66.
28
- * Updated documentation to reflect that the accuracy radius is now included
29
- in City.
30
- * Upgraded web service client, which supports setting a proxy. GitHub #59.
31
-
32
- 2.4.0 (2016-04-15)
33
- ------------------
34
-
35
- * Added support for the GeoIP2 Enterprise database.
36
-
37
- 2.3.3 (2015-09-24)
38
- ------------------
39
-
40
- * Corrected case on `JsonSerializable` interface. Reported by Axel Etcheverry.
41
- GitHub #56.
42
-
43
- 2.3.2 (2015-09-23)
44
- ------------------
45
-
46
- * `JsonSerializable` compatibility interface was moved to `GeoIp2\Compat`
47
- rather than the global namespace to prevent autoloading issues. Reported by
48
- Tomas Buteler. GitHub #54.
49
- * Missing documentation for the `$postal` property was added to the
50
- `GeoIp2\Model\City` class. Fix by Roy Sindre Norangshol. GitHub #51.
51
- * In the Phar distribution, source files for this module no longer have their
52
- documentation stripped, allowing IDE introspection to work properly.
53
- Reported by Dominic Black. GitHub #52.
54
-
55
- 2.3.1 (2015-06-30)
56
- ------------------
57
-
58
- * Updated `maxmind/web-service-common` to version with fixes for PHP 5.3 and
59
- 5.4.
60
-
61
- 2.3.0 (2015-06-29)
62
- ------------------
63
-
64
- * Support for demographics fields `averageIncome` and `populationDensity` in
65
- the `Location` record, returned by the Insights endpoint.
66
- * The `isAnonymousProxy` and `isSatelliteProvider` properties on
67
- `GeoIP2\Record\Traits` have been deprecated. Please use our [GeoIP2
68
- Anonymous IP database](https://www.maxmind.com/en/geoip2-anonymous-ip-database)
69
- to determine whether an IP address is used by an anonymizing service.
70
-
71
- 2.2.0-beta1 (2015-06-09)
72
- ------------------------
73
-
74
- * Typo fix in documentation.
75
-
76
- 2.2.0-alpha2 (2015-06-01)
77
- -------------------------
78
-
79
- * `maxmind-ws/web-service-common` was renamed to `maxmind/web-service-common`.
80
-
81
- 2.2.0-alpha1 (2015-05-22)
82
- -------------------------
83
-
84
- * The library no longer uses Guzzle and instead uses curl directly.
85
- * Support for `timeout` and `connectTimout` were added to the `$options` array
86
- passed to the `GeoIp2\WebService\Client` constructor. Pull request by Will
87
- Bradley. GitHub #36.
88
-
89
- 2.1.1 (2014-12-03)
90
- ------------------
91
-
92
- * The 2.1.0 Phar builds included a shebang line, causing issues when loading
93
- it as a library. This has been corrected. GitHub #33.
94
-
95
- 2.1.0 (2014-10-29)
96
- ------------------
97
-
98
- * Update ApiGen dependency to version that isn't broken on case sensitive
99
- file systems.
100
- * Added support for the GeoIP2 Anonymous IP database. The
101
- `GeoIP2\Database\Reader` class now has an `anonymousIp` method which returns
102
- a `GeoIP2\Model\AnonymousIp` object.
103
- * Boolean attributes like those in the `GeoIP2\Record\Traits` class now return
104
- `false` instead of `null` when they were not true.
105
-
106
- 2.0.0 (2014-09-22)
107
- ------------------
108
-
109
- * First production release.
110
-
111
- 0.9.0 (2014-09-15)
112
- ------------------
113
-
114
- * IMPORTANT: The deprecated `omni()` and `cityIspOrg()` methods have been
115
- removed from `GeoIp2\WebService\Client`.
116
-
117
- 0.8.1 (2014-09-12)
118
- ------------------
119
-
120
- * The check added to the `GeoIP2\Database\Reader` lookup methods in 0.8.0 did
121
- not work with the GeoIP2 City Database Subset by Continent with World
122
- Countries. This has been fixed. Fixes GitHub issue #23.
123
-
124
- 0.8.0 (2014-09-10)
125
- ------------------
126
-
127
- * The `GeoIp2\Database\Reader` lookup methods (e.g., `city()`, `isp()`) now
128
- throw a `BadMethodCallException` if they are used with a database that
129
- does not match the method. In particular, doing a `city()` lookup on a
130
- GeoIP2 Country database will result in an exception, and vice versa.
131
- * A `metadata()` method has been added to the `GeoIP2\Database\Reader` class.
132
- This returns a `MaxMind\Db\Reader\Metadata` class with information about the
133
- database.
134
- * The name attribute was missing from the RepresentedCountry class.
135
-
136
- 0.7.0 (2014-07-22)
137
- ------------------
138
-
139
- * The web service client API has been updated for the v2.1 release of the web
140
- service. In particular, the `cityIspOrg` and `omni` methods on
141
- `GeoIp2\WebService\Client` should be considered deprecated. The `city`
142
- method now provides all of the data formerly provided by `cityIspOrg`, and
143
- the `omni` method has been replaced by the `insights` method.
144
- * Support was added for GeoIP2 Connection Type, Domain and ISP databases.
145
-
146
-
147
- 0.6.3 (2014-05-12)
148
- ------------------
149
-
150
- * With the previous Phar builds, some users received `phar error: invalid url
151
- or non-existent phar` errors. The correct alias is now used for the Phar,
152
- and this should no longer be an issue.
153
-
154
- 0.6.2 (2014-05-08)
155
- ------------------
156
-
157
- * The Phar build was broken with Guzzle 3.9.0+. This has been fixed.
158
-
159
- 0.6.1 (2014-05-01)
160
- ------------------
161
-
162
- * This API now officially supports HHVM.
163
- * The `maxmind-db/reader` dependency was updated to a version that does not
164
- require BC Math.
165
- * The Composer compatibility autoload rules are now targeted more narrowly.
166
- * A `box.json` file is included to build a Phar package.
167
-
168
- 0.6.0 (2014-02-19)
169
- ------------------
170
-
171
- * This API is now licensed under the Apache License, Version 2.0.
172
- * Model and record classes now implement `JsonSerializable`.
173
- * `isset` now works with model and record classes.
174
-
175
- 0.5.0 (2013-10-21)
176
- ------------------
177
-
178
- * Renamed $languages constructor parameters to $locales for both the Client
179
- and Reader classes.
180
- * Documentation and code clean-up (Ben Morel).
181
- * Added the interface `GeoIp2\ProviderInterface`, which is implemented by both
182
- `\GeoIp2\Database\Reader` and `\GeoIp2\WebService\Client`.
183
-
184
- 0.4.0 (2013-07-16)
185
- ------------------
186
-
187
- * This is the first release with the GeoIP2 database reader. Please see the
188
- `README.md` file and the `\GeoIp2\Database\Reader` class.
189
- * The general exception classes were replaced with specific exception classes
190
- representing particular types of errors, such as an authentication error.
191
-
192
- 0.3.0 (2013-07-12)
193
- ------------------
194
-
195
- * In namespaces and class names, "GeoIP2" was renamed to "GeoIp2" to improve
196
- consistency.
197
-
198
- 0.2.1 (2013-06-10)
199
- ------------------
200
-
201
- * First official beta release.
202
- * Documentation updates and corrections.
203
-
204
- 0.2.0 (2013-05-29)
205
- ------------------
206
-
207
- * `GenericException` was renamed to `GeoIP2Exception`.
208
- * We now support more languages. The new languages are de, es, fr, and pt-BR.
209
- * The REST API now returns a record with data about your account. There is
210
- a new `GeoIP\Records\MaxMind` class for this data.
211
- * The `continentCode` attribute on `Continent` was renamed to `code`.
212
- * Documentation updates.
213
-
214
- 0.1.1 (2013-05-14)
215
- ------------------
216
-
217
- * Updated Guzzle version requirement.
218
- * Fixed Composer example in README.md.
219
-
220
-
221
- 0.1.0 (2013-05-13)
222
- ------------------
223
-
224
- * Initial release.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/geoip2/geoip2/LICENSE DELETED
@@ -1,202 +0,0 @@
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.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/geoip2/geoip2/README.md DELETED
@@ -1,383 +0,0 @@
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 all 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
- To use the archive, just require it from your script:
54
-
55
- ```php
56
- require 'geoip2.phar';
57
- ```
58
-
59
- ## Optional C Extension ##
60
-
61
- The [MaxMind DB API](https://github.com/maxmind/MaxMind-DB-Reader-php)
62
- includes an optional C extension that you may install to dramatically increase
63
- the performance of lookups in GeoIP2 or GeoLite2 databases. To install, please
64
- follow the instructions included with that API.
65
-
66
- The extension has no effect on web-service lookups.
67
-
68
- ## IP Geolocation Usage ##
69
-
70
- IP geolocation is inherently imprecise. Locations are often near the center of
71
- the population. Any location provided by a GeoIP2 database or web service
72
- should not be used to identify a particular address or household.
73
-
74
- ## Database Reader ##
75
-
76
- ### Usage ###
77
-
78
- To use this API, you must create a new `\GeoIp2\Database\Reader` object with
79
- the path to the database file as the first argument to the constructor. You
80
- may then call the method corresponding to the database you are using.
81
-
82
- If the lookup succeeds, the method call will return a model class for the
83
- record in the database. This model in turn contains multiple container
84
- classes for the different parts of the data such as the city in which the
85
- IP address is located.
86
-
87
- If the record is not found, a `\GeoIp2\Exception\AddressNotFoundException`
88
- is thrown. If the database is invalid or corrupt, a
89
- `\MaxMind\Db\InvalidDatabaseException` will be thrown.
90
-
91
- See the API documentation for more details.
92
-
93
- ### City Example ###
94
-
95
- ```php
96
- <?php
97
- require_once 'vendor/autoload.php';
98
- use GeoIp2\Database\Reader;
99
-
100
- // This creates the Reader object, which should be reused across
101
- // lookups.
102
- $reader = new Reader('/usr/local/share/GeoIP/GeoIP2-City.mmdb');
103
-
104
- // Replace "city" with the appropriate method for your database, e.g.,
105
- // "country".
106
- $record = $reader->city('128.101.101.101');
107
-
108
- print($record->country->isoCode . "\n"); // 'US'
109
- print($record->country->name . "\n"); // 'United States'
110
- print($record->country->names['zh-CN'] . "\n"); // '美国'
111
-
112
- print($record->mostSpecificSubdivision->name . "\n"); // 'Minnesota'
113
- print($record->mostSpecificSubdivision->isoCode . "\n"); // 'MN'
114
-
115
- print($record->city->name . "\n"); // 'Minneapolis'
116
-
117
- print($record->postal->code . "\n"); // '55455'
118
-
119
- print($record->location->latitude . "\n"); // 44.9733
120
- print($record->location->longitude . "\n"); // -93.2323
121
-
122
- ```
123
-
124
- ### Anonymous IP Example ###
125
-
126
- ```php
127
- <?php
128
- require_once 'vendor/autoload.php';
129
- use GeoIp2\Database\Reader;
130
-
131
- // This creates the Reader object, which should be reused across
132
- // lookups.
133
- $reader = new Reader('/usr/local/share/GeoIP/GeoIP2-Anonymous-IP.mmdb');
134
-
135
- $record = $reader->anonymousIp('128.101.101.101');
136
-
137
- if ($record->isAnonymous) { print "anon\n"; }
138
- print($record->ipAddress . "\n"); // '128.101.101.101'
139
-
140
- ```
141
-
142
- ### Connection-Type Example ###
143
-
144
- ```php
145
- <?php
146
- require_once 'vendor/autoload.php';
147
- use GeoIp2\Database\Reader;
148
-
149
- // This creates the Reader object, which should be reused across
150
- // lookups.
151
- $reader = new Reader('/usr/local/share/GeoIP/GeoIP2-Connection-Type.mmdb');
152
-
153
- $record = $reader->connectionType('128.101.101.101');
154
-
155
- print($record->connectionType . "\n"); // 'Corporate'
156
- print($record->ipAddress . "\n"); // '128.101.101.101'
157
-
158
- ```
159
-
160
- ### Domain Example ###
161
-
162
- ```php
163
- <?php
164
- require_once 'vendor/autoload.php';
165
- use GeoIp2\Database\Reader;
166
-
167
- // This creates the Reader object, which should be reused across
168
- // lookups.
169
- $reader = new Reader('/usr/local/share/GeoIP/GeoIP2-Domain.mmdb');
170
-
171
- $record = $reader->domain('128.101.101.101');
172
-
173
- print($record->domain . "\n"); // 'umn.edu'
174
- print($record->ipAddress . "\n"); // '128.101.101.101'
175
-
176
- ```
177
-
178
- ### Enterprise Example ###
179
-
180
- ```php
181
- <?php
182
- require_once 'vendor/autoload.php';
183
- use GeoIp2\Database\Reader;
184
-
185
- // This creates the Reader object, which should be reused across
186
- // lookups.
187
- $reader = new Reader('/usr/local/share/GeoIP/GeoIP2-Enterprise.mmdb');
188
-
189
- // Use the ->enterprise method to do a lookup in the Enterprise database
190
- $record = $reader->enterprise('128.101.101.101');
191
-
192
- print($record->country->confidence . "\n"); // 99
193
- print($record->country->isoCode . "\n"); // 'US'
194
- print($record->country->name . "\n"); // 'United States'
195
- print($record->country->names['zh-CN'] . "\n"); // '美国'
196
-
197
- print($record->mostSpecificSubdivision->confidence . "\n"); // 77
198
- print($record->mostSpecificSubdivision->name . "\n"); // 'Minnesota'
199
- print($record->mostSpecificSubdivision->isoCode . "\n"); // 'MN'
200
-
201
- print($record->city->confidence . "\n"); // 60
202
- print($record->city->name . "\n"); // 'Minneapolis'
203
-
204
- print($record->postal->code . "\n"); // '55455'
205
-
206
- print($record->location->accuracy_radius . "\n"); // 50
207
- print($record->location->latitude . "\n"); // 44.9733
208
- print($record->location->longitude . "\n"); // -93.2323
209
-
210
- ```
211
-
212
- ### ISP Example ###
213
-
214
- ```php
215
- <?php
216
- require_once 'vendor/autoload.php';
217
- use GeoIp2\Database\Reader;
218
-
219
- // This creates the Reader object, which should be reused across
220
- // lookups.
221
- $reader = new Reader('/usr/local/share/GeoIP/GeoIP2-ISP.mmdb');
222
-
223
- $record = $reader->isp('128.101.101.101');
224
-
225
- print($record->autonomousSystemNumber . "\n"); // 217
226
- print($record->autonomousSystemOrganization . "\n"); // 'University of Minnesota'
227
- print($record->isp . "\n"); // 'University of Minnesota'
228
- print($record->organization . "\n"); // 'University of Minnesota'
229
-
230
- print($record->ipAddress . "\n"); // '128.101.101.101'
231
-
232
- ```
233
-
234
- ## Web Service Client ##
235
-
236
- ### Usage ###
237
-
238
- To use this API, you must create a new `\GeoIp2\WebService\Client`
239
- object with your `$userId` and `$licenseKey`, then you call the method
240
- corresponding to a specific end point, passing it the IP address you want to
241
- look up.
242
-
243
- If the request succeeds, the method call will return a model class for the end
244
- point you called. This model in turn contains multiple record classes, each of
245
- which represents part of the data returned by the web service.
246
-
247
- If there is an error, a structured exception is thrown.
248
-
249
- See the API documentation for more details.
250
-
251
- ### Example ###
252
-
253
- ```php
254
- <?php
255
- require_once 'vendor/autoload.php';
256
- use GeoIp2\WebService\Client;
257
-
258
- // This creates a Client object that can be reused across requests.
259
- // Replace "42" with your user ID and "license_key" with your license
260
- // key.
261
- $client = new Client(42, 'abcdef123456');
262
-
263
- // Replace "city" with the method corresponding to the web service that
264
- // you are using, e.g., "country", "insights".
265
- $record = $client->city('128.101.101.101');
266
-
267
- print($record->country->isoCode . "\n"); // 'US'
268
- print($record->country->name . "\n"); // 'United States'
269
- print($record->country->names['zh-CN'] . "\n"); // '美国'
270
-
271
- print($record->mostSpecificSubdivision->name . "\n"); // 'Minnesota'
272
- print($record->mostSpecificSubdivision->isoCode . "\n"); // 'MN'
273
-
274
- print($record->city->name . "\n"); // 'Minneapolis'
275
-
276
- print($record->postal->code . "\n"); // '55455'
277
-
278
- print($record->location->latitude . "\n"); // 44.9733
279
- print($record->location->longitude . "\n"); // -93.2323
280
-
281
- ```
282
-
283
- ## Values to use for Database or Array Keys ##
284
-
285
- **We strongly discourage you from using a value from any `names` property as
286
- a key in a database or array.**
287
-
288
- These names may change between releases. Instead we recommend using one of the
289
- following:
290
-
291
- * `GeoIp2\Record\City` - `$city->geonameId`
292
- * `GeoIp2\Record\Continent` - `$continent->code` or `$continent->geonameId`
293
- * `GeoIp2\Record\Country` and `GeoIp2\Record\RepresentedCountry` -
294
- `$country->isoCode` or `$country->geonameId`
295
- * `GeoIp2\Record\Subdivision` - `$subdivision->isoCode` or `$subdivision->geonameId`
296
-
297
- ### What data is returned? ###
298
-
299
- While many of the end points return the same basic records, the attributes
300
- which can be populated vary between end points. In addition, while an end
301
- point may offer a particular piece of data, MaxMind does not always have every
302
- piece of data for any given IP address.
303
-
304
- Because of these factors, it is possible for any end point to return a record
305
- where some or all of the attributes are unpopulated.
306
-
307
- See the
308
- [GeoIP2 Precision web service docs](http://dev.maxmind.com/geoip/geoip2/web-services)
309
- for details on what data each end point may return.
310
-
311
- The only piece of data which is always returned is the `ipAddress`
312
- attribute in the `GeoIp2\Record\Traits` record.
313
-
314
- ## Integration with GeoNames ##
315
-
316
- [GeoNames](http://www.geonames.org/) offers web services and downloadable
317
- databases with data on geographical features around the world, including
318
- populated places. They offer both free and paid premium data. Each
319
- feature is unique identified by a `geonameId`, which is an integer.
320
-
321
- Many of the records returned by the GeoIP2 web services and databases
322
- include a `geonameId` property. This is the ID of a geographical feature
323
- (city, region, country, etc.) in the GeoNames database.
324
-
325
- Some of the data that MaxMind provides is also sourced from GeoNames. We
326
- source things like place names, ISO codes, and other similar data from
327
- the GeoNames premium data set.
328
-
329
- ## Reporting data problems ##
330
-
331
- If the problem you find is that an IP address is incorrectly mapped,
332
- please
333
- [submit your correction to MaxMind](http://www.maxmind.com/en/correction).
334
-
335
- If you find some other sort of mistake, like an incorrect spelling,
336
- please check the [GeoNames site](http://www.geonames.org/) first. Once
337
- you've searched for a place and found it on the GeoNames map view, there
338
- are a number of links you can use to correct data ("move", "edit",
339
- "alternate names", etc.). Once the correction is part of the GeoNames
340
- data set, it will be automatically incorporated into future MaxMind
341
- releases.
342
-
343
- If you are a paying MaxMind customer and you're not sure where to submit
344
- a correction, please
345
- [contact MaxMind support](http://www.maxmind.com/en/support) for help.
346
-
347
- ## Other Support ##
348
-
349
- Please report all issues with this code using the
350
- [GitHub issue tracker](https://github.com/maxmind/GeoIP2-php/issues).
351
-
352
- If you are having an issue with a MaxMind service that is not specific
353
- to the client API, please see
354
- [our support page](http://www.maxmind.com/en/support).
355
-
356
- ## Requirements ##
357
-
358
- This code requires PHP 5.3 or greater. Older versions of PHP are not
359
- supported. This library works and is tested with HHVM.
360
-
361
- This library also relies on the [MaxMind DB Reader](https://github.com/maxmind/MaxMind-DB-Reader-php).
362
-
363
- If you are using PHP 5.3 with an autoloader besides Composer, you must load
364
- `JsonSerializable.php` in the `compat` directory.
365
-
366
- ## Contributing ##
367
-
368
- Patches and pull requests are encouraged. All code should follow the PSR-2
369
- style guidelines. Please include unit tests whenever possible. You may obtain
370
- the test data for the maxmind-db folder by running `git submodule update
371
- --init --recursive` or adding `--recursive` to your initial clone, or from
372
- https://github.com/maxmind/MaxMind-DB
373
-
374
- ## Versioning ##
375
-
376
- The GeoIP2 PHP API uses [Semantic Versioning](http://semver.org/).
377
-
378
- ## Copyright and License ##
379
-
380
- This software is Copyright (c) 2013-2016 by MaxMind, Inc.
381
-
382
- This is free software, licensed under the Apache License, Version 2.0.
383
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/geoip2/geoip2/composer.json DELETED
@@ -1,29 +0,0 @@
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.3",
18
- "php": ">=5.3.1"
19
- },
20
- "require-dev": {
21
- "phpunit/phpunit": "4.2.*",
22
- "squizlabs/php_codesniffer": "2.*"
23
- },
24
- "autoload": {
25
- "psr-4": {
26
- "GeoIp2\\": "src"
27
- }
28
- }
29
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/geoip2/geoip2/src/Compat/JsonSerializable.php DELETED
@@ -1,27 +0,0 @@
1
- <?php
2
-
3
- namespace GeoIp2\Compat;
4
-
5
- // @codingStandardsIgnoreFile
6
-
7
- /**
8
- * This interface exists to provide backwards compatibility with PHP 5.3
9
- *
10
- * This should _not_ be used by any third-party code.
11
- *
12
- * @ignore
13
- */
14
- if (interface_exists('JsonSerializable')) {
15
- interface JsonSerializable extends \JsonSerializable
16
- {
17
- }
18
- } else {
19
- interface JsonSerializable
20
- {
21
- /**
22
- * Returns data that can be serialized by json_encode
23
- * @ignore
24
- */
25
- public function jsonSerialize();
26
- }
27
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/geoip2/geoip2/src/Database/Reader.php DELETED
@@ -1,246 +0,0 @@
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
-
9
- /**
10
- * Instances of this class provide a reader for the GeoIP2 database format.
11
- * IP addresses can be looked up using the database specific methods.
12
- *
13
- * ## Usage ##
14
- *
15
- * The basic API for this class is the same for every database. First, you
16
- * create a reader object, specifying a file name. You then call the method
17
- * corresponding to the specific database, passing it the IP address you want
18
- * to look up.
19
- *
20
- * If the request succeeds, the method call will return a model class for
21
- * the method you called. This model in turn contains multiple record classes,
22
- * each of which represents part of the data returned by the database. If
23
- * the database does not contain the requested information, the attributes
24
- * on the record class will have a `null` value.
25
- *
26
- * If the address is not in the database, an
27
- * {@link \GeoIp2\Exception\AddressNotFoundException} exception will be
28
- * thrown. If an invalid IP address is passed to one of the methods, a
29
- * SPL {@link \InvalidArgumentException} will be thrown. If the database is
30
- * corrupt or invalid, a {@link \MaxMind\Db\Reader\InvalidDatabaseException}
31
- * will be thrown.
32
- *
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
- * @throws \MaxMind\Db\Reader\InvalidDatabaseException if the database
46
- * is corrupt or invalid
47
- */
48
- public function __construct(
49
- $filename,
50
- $locales = array('en')
51
- ) {
52
- $this->dbReader = new DbReader($filename);
53
- $this->locales = $locales;
54
- }
55
-
56
- /**
57
- * This method returns a GeoIP2 City model.
58
- *
59
- * @param string $ipAddress IPv4 or IPv6 address as a string.
60
- *
61
- * @return \GeoIp2\Model\City
62
- *
63
- * @throws \GeoIp2\Exception\AddressNotFoundException if the address is
64
- * not in the database.
65
- * @throws \MaxMind\Db\Reader\InvalidDatabaseException if the database
66
- * is corrupt or invalid
67
- */
68
- public function city($ipAddress)
69
- {
70
- return $this->modelFor('City', 'City', $ipAddress);
71
- }
72
-
73
- /**
74
- * This method returns a GeoIP2 Country model.
75
- *
76
- * @param string $ipAddress IPv4 or IPv6 address as a string.
77
- *
78
- * @return \GeoIp2\Model\Country
79
- *
80
- * @throws \GeoIp2\Exception\AddressNotFoundException if the address is
81
- * not in the database.
82
- * @throws \MaxMind\Db\Reader\InvalidDatabaseException if the database
83
- * is corrupt or invalid
84
- */
85
- public function country($ipAddress)
86
- {
87
- return $this->modelFor('Country', 'Country', $ipAddress);
88
- }
89
-
90
- /**
91
- * This method returns a GeoIP2 Anonymous IP model.
92
- *
93
- * @param string $ipAddress IPv4 or IPv6 address as a string.
94
- *
95
- * @return \GeoIp2\Model\AnonymousIp
96
- *
97
- * @throws \GeoIp2\Exception\AddressNotFoundException if the address is
98
- * not in the database.
99
- * @throws \MaxMind\Db\Reader\InvalidDatabaseException if the database
100
- * is corrupt or invalid
101
- */
102
- public function anonymousIp($ipAddress)
103
- {
104
- return $this->flatModelFor(
105
- 'AnonymousIp',
106
- 'GeoIP2-Anonymous-IP',
107
- $ipAddress
108
- );
109
- }
110
-
111
- /**
112
- * This method returns a GeoIP2 Connection Type model.
113
- *
114
- * @param string $ipAddress IPv4 or IPv6 address as a string.
115
- *
116
- * @return \GeoIp2\Model\ConnectionType
117
- *
118
- * @throws \GeoIp2\Exception\AddressNotFoundException if the address is
119
- * not in the database.
120
- * @throws \MaxMind\Db\Reader\InvalidDatabaseException if the database
121
- * is corrupt or invalid
122
- */
123
- public function connectionType($ipAddress)
124
- {
125
- return $this->flatModelFor(
126
- 'ConnectionType',
127
- 'GeoIP2-Connection-Type',
128
- $ipAddress
129
- );
130
- }
131
-
132
- /**
133
- * This method returns a GeoIP2 Domain model.
134
- *
135
- * @param string $ipAddress IPv4 or IPv6 address as a string.
136
- *
137
- * @return \GeoIp2\Model\Domain
138
- *
139
- * @throws \GeoIp2\Exception\AddressNotFoundException if the address is
140
- * not in the database.
141
- * @throws \MaxMind\Db\Reader\InvalidDatabaseException if the database
142
- * is corrupt or invalid
143
- */
144
- public function domain($ipAddress)
145
- {
146
- return $this->flatModelFor(
147
- 'Domain',
148
- 'GeoIP2-Domain',
149
- $ipAddress
150
- );
151
- }
152
-
153
- /**
154
- * This method returns a GeoIP2 Enterprise model.
155
- *
156
- * @param string $ipAddress IPv4 or IPv6 address as a string.
157
- *
158
- * @return \GeoIp2\Model\Enterprise
159
- *
160
- * @throws \GeoIp2\Exception\AddressNotFoundException if the address is
161
- * not in the database.
162
- * @throws \MaxMind\Db\Reader\InvalidDatabaseException if the database
163
- * is corrupt or invalid
164
- */
165
- public function enterprise($ipAddress)
166
- {
167
- return $this->modelFor('Enterprise', 'Enterprise', $ipAddress);
168
- }
169
-
170
- /**
171
- * This method returns a GeoIP2 ISP model.
172
- *
173
- * @param string $ipAddress IPv4 or IPv6 address as a string.
174
- *
175
- * @return \GeoIp2\Model\Isp
176
- *
177
- * @throws \GeoIp2\Exception\AddressNotFoundException if the address is
178
- * not in the database.
179
- * @throws \MaxMind\Db\Reader\InvalidDatabaseException if the database
180
- * is corrupt or invalid
181
- */
182
- public function isp($ipAddress)
183
- {
184
- return $this->flatModelFor(
185
- 'Isp',
186
- 'GeoIP2-ISP',
187
- $ipAddress
188
- );
189
- }
190
-
191
- private function modelFor($class, $type, $ipAddress)
192
- {
193
- $record = $this->getRecord($class, $type, $ipAddress);
194
-
195
- $record['traits']['ip_address'] = $ipAddress;
196
- $class = "GeoIp2\\Model\\" . $class;
197
-
198
- return new $class($record, $this->locales);
199
- }
200
-
201
- private function flatModelFor($class, $type, $ipAddress)
202
- {
203
- $record = $this->getRecord($class, $type, $ipAddress);
204
-
205
- $record['ip_address'] = $ipAddress;
206
- $class = "GeoIp2\\Model\\" . $class;
207
-
208
- return new $class($record);
209
- }
210
-
211
- private function getRecord($class, $type, $ipAddress)
212
- {
213
- if (strpos($this->metadata()->databaseType, $type) === false) {
214
- $method = lcfirst($class);
215
- throw new \BadMethodCallException(
216
- "The $method method cannot be used to open a "
217
- . $this->metadata()->databaseType . " database"
218
- );
219
- }
220
- $record = $this->dbReader->get($ipAddress);
221
- if ($record === null) {
222
- throw new AddressNotFoundException(
223
- "The address $ipAddress is not in the database."
224
- );
225
- }
226
- return $record;
227
- }
228
-
229
- /**
230
- * @throws \InvalidArgumentException if arguments are passed to the method.
231
- * @throws \BadMethodCallException if the database has been closed.
232
- * @return \MaxMind\Db\Reader\Metadata object for the database.
233
- */
234
- public function metadata()
235
- {
236
- return $this->dbReader->metadata();
237
- }
238
-
239
- /**
240
- * Closes the GeoIP2 database and returns the resources to the system.
241
- */
242
- public function close()
243
- {
244
- $this->dbReader->close();
245
- }
246
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/geoip2/geoip2/src/Exception/AddressNotFoundException.php DELETED
@@ -1,10 +0,0 @@
1
- <?php
2
-
3
- namespace GeoIp2\Exception;
4
-
5
- /**
6
- * This class represents a generic error.
7
- */
8
- class AddressNotFoundException extends GeoIp2Exception
9
- {
10
- }
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/geoip2/geoip2/src/Exception/AuthenticationException.php DELETED
@@ -1,10 +0,0 @@
1
- <?php
2
-
3
- namespace GeoIp2\Exception;
4
-
5
- /**
6
- * This class represents a generic error.
7
- */
8
- class AuthenticationException extends GeoIp2Exception
9
- {
10
- }
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/geoip2/geoip2/src/Exception/GeoIp2Exception.php DELETED
@@ -1,10 +0,0 @@
1
- <?php
2
-
3
- namespace GeoIp2\Exception;
4
-
5
- /**
6
- * This class represents a generic error.
7
- */
8
- class GeoIp2Exception extends \Exception
9
- {
10
- }
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/geoip2/geoip2/src/Exception/HttpException.php DELETED
@@ -1,25 +0,0 @@
1
- <?php
2
-
3
- namespace GeoIp2\Exception;
4
-
5
- /**
6
- * This class represents an HTTP transport error.
7
- */
8
-
9
- class HttpException extends GeoIp2Exception
10
- {
11
- /**
12
- * The URI queried
13
- */
14
- public $uri;
15
-
16
- public function __construct(
17
- $message,
18
- $httpStatus,
19
- $uri,
20
- \Exception $previous = null
21
- ) {
22
- $this->uri = $uri;
23
- parent::__construct($message, $httpStatus, $previous);
24
- }
25
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/geoip2/geoip2/src/Exception/InvalidRequestException.php DELETED
@@ -1,26 +0,0 @@
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
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/geoip2/geoip2/src/Exception/OutOfQueriesException.php DELETED
@@ -1,10 +0,0 @@
1
- <?php
2
-
3
- namespace GeoIp2\Exception;
4
-
5
- /**
6
- * This class represents a generic error.
7
- */
8
- class OutOfQueriesException extends GeoIp2Exception
9
- {
10
- }
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/geoip2/geoip2/src/Model/AbstractModel.php DELETED
@@ -1,62 +0,0 @@
1
- <?php
2
-
3
- namespace GeoIp2\Model;
4
-
5
- use GeoIp2\Compat\JsonSerializable;
6
-
7
- /**
8
- * @ignore
9
- */
10
- abstract class AbstractModel implements JsonSerializable
11
- {
12
- protected $raw;
13
-
14
- /**
15
- * @ignore
16
- */
17
- public function __construct($raw)
18
- {
19
- $this->raw = $raw;
20
- }
21
-
22
- /**
23
- * @ignore
24
- */
25
- protected function get($field)
26
- {
27
- if (isset($this->raw[$field])) {
28
- return $this->raw[$field];
29
- } else {
30
- if (preg_match('/^is_/', $field)) {
31
- return false;
32
- } else {
33
- return null;
34
- }
35
- }
36
- }
37
-
38
- /**
39
- * @ignore
40
- */
41
- public function __get($attr)
42
- {
43
- if ($attr != "instance" && property_exists($this, $attr)) {
44
- return $this->$attr;
45
- }
46
-
47
- throw new \RuntimeException("Unknown attribute: $attr");
48
- }
49
-
50
- /**
51
- * @ignore
52
- */
53
- public function __isset($attr)
54
- {
55
- return $attr != "instance" && isset($this->$attr);
56
- }
57
-
58
- public function jsonSerialize()
59
- {
60
- return $this->raw;
61
- }
62
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/geoip2/geoip2/src/Model/AnonymousIp.php DELETED
@@ -1,50 +0,0 @@
1
- <?php
2
-
3
- namespace GeoIp2\Model;
4
-
5
- /**
6
- * This class provides the GeoIP2 Anonymous IP model.
7
- *
8
- * @property-read boolean $isAnonymous This is true if the IP address belongs to
9
- * any sort of anonymous network.
10
- *
11
- * @property-read boolean $isAnonymousVpn This is true if the IP address belongs to
12
- * an anonymous VPN system.
13
- *
14
- * @property-read boolean $isHostingProvider This is true if the IP address belongs
15
- * to a hosting provider.
16
- *
17
- * @property-read boolean $isPublicProxy This is true if the IP address belongs to
18
- * a public proxy.
19
- *
20
- * @property-read boolean $isTorExitNode This is true if the IP address is a Tor
21
- * exit node.
22
- *
23
- * @property-read string $ipAddress The IP address that the data in the model is
24
- * for.
25
- *
26
- */
27
- class AnonymousIp extends AbstractModel
28
- {
29
- protected $isAnonymous;
30
- protected $isAnonymousVpn;
31
- protected $isHostingProvider;
32
- protected $isPublicProxy;
33
- protected $isTorExitNode;
34
- protected $ipAddress;
35
-
36
- /**
37
- * @ignore
38
- */
39
- public function __construct($raw)
40
- {
41
- parent::__construct($raw);
42
-
43
- $this->isAnonymous = $this->get('is_anonymous');
44
- $this->isAnonymousVpn = $this->get('is_anonymous_vpn');
45
- $this->isHostingProvider = $this->get('is_hosting_provider');
46
- $this->isPublicProxy = $this->get('is_public_proxy');
47
- $this->isTorExitNode = $this->get('is_tor_exit_node');
48
- $this->ipAddress = $this->get('ip_address');
49
- }
50
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/geoip2/geoip2/src/Model/City.php DELETED
@@ -1,136 +0,0 @@
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
- *
15
- * @property-read \GeoIp2\Record\Continent $continent Continent data for the
16
- * requested IP address.
17
- *
18
- * @property-read \GeoIp2\Record\Country $country Country data for the requested
19
- * IP address. This object represents the country where MaxMind believes the
20
- * end user is located.
21
- *
22
- * @property-read \GeoIp2\Record\Location $location Location data for the
23
- * requested IP address.
24
- *
25
- * @property-read \GeoIp2\Record\Postal $postal Postal data for the
26
- * requested IP address.
27
- *
28
- * @property-read \GeoIp2\Record\MaxMind $maxmind Data related to your MaxMind
29
- * account.
30
- *
31
- * @property-read \GeoIp2\Record\Country $registeredCountry Registered country
32
- * data for the requested IP address. This record represents the country
33
- * where the ISP has registered a given IP block and may differ from the
34
- * user's country.
35
- *
36
- * @property-read \GeoIp2\Record\RepresentedCountry $representedCountry
37
- * Represented country data for the requested IP address. The represented
38
- * country is used for things like military bases. It is only present when
39
- * the represented country differs from the country.
40
- *
41
- * @property-read array $subdivisions An array of {@link \GeoIp2\Record\Subdivision}
42
- * objects representing the country subdivisions for the requested IP
43
- * address. The number and type of subdivisions varies by country, but a
44
- * subdivision is typically a state, province, county, etc. Subdivisions
45
- * are ordered from most general (largest) to most specific (smallest).
46
- * If the response did not contain any subdivisions, this method returns
47
- * an empty array.
48
- *
49
- * @property-read \GeoIp2\Record\Subdivision $mostSpecificSubdivision An object
50
- * representing the most specific subdivision returned. If the response
51
- * did not contain any subdivisions, this method returns an empty
52
- * {@link \GeoIp2\Record\Subdivision} object.
53
- *
54
- * @property-read \GeoIp2\Record\Traits $traits Data for the traits of the
55
- * requested IP address.
56
- */
57
- class City extends Country
58
- {
59
- /**
60
- * @ignore
61
- */
62
- protected $city;
63
- /**
64
- * @ignore
65
- */
66
- protected $location;
67
- /**
68
- * @ignore
69
- */
70
- protected $postal;
71
- /**
72
- * @ignore
73
- */
74
- protected $subdivisions = array();
75
-
76
- /**
77
- * @ignore
78
- */
79
- public function __construct($raw, $locales = array('en'))
80
- {
81
- parent::__construct($raw, $locales);
82
-
83
- $this->city = new \GeoIp2\Record\City($this->get('city'), $locales);
84
- $this->location = new \GeoIp2\Record\Location($this->get('location'));
85
- $this->postal = new \GeoIp2\Record\Postal($this->get('postal'));
86
-
87
- $this->createSubdivisions($raw, $locales);
88
- }
89
-
90
- private function createSubdivisions($raw, $locales)
91
- {
92
- if (!isset($raw['subdivisions'])) {
93
- return;
94
- }
95
-
96
- foreach ($raw['subdivisions'] as $sub) {
97
- array_push(
98
- $this->subdivisions,
99
- new \GeoIp2\Record\Subdivision($sub, $locales)
100
- );
101
- }
102
- }
103
-
104
- /**
105
- * @ignore
106
- */
107
- public function __get($attr)
108
- {
109
- if ($attr == 'mostSpecificSubdivision') {
110
- return $this->$attr();
111
- } else {
112
- return parent::__get($attr);
113
- }
114
- }
115
-
116
- /**
117
- * @ignore
118
- */
119
- public function __isset($attr)
120
- {
121
- if ($attr == 'mostSpecificSubdivision') {
122
- // We always return a mostSpecificSubdivision, even if it is the
123
- // empty subdivision
124
- return true;
125
- } else {
126
- return parent::__isset($attr);
127
- }
128
- }
129
-
130
- private function mostSpecificSubdivision()
131
- {
132
- return empty($this->subdivisions) ?
133
- new \GeoIp2\Record\Subdivision(array(), $this->locales) :
134
- end($this->subdivisions);
135
- }
136
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/geoip2/geoip2/src/Model/ConnectionType.php DELETED
@@ -1,31 +0,0 @@
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
- *
12
- * @property-read string $ipAddress The IP address that the data in the model is
13
- * for.
14
- *
15
- */
16
- class ConnectionType extends AbstractModel
17
- {
18
- protected $connectionType;
19
- protected $ipAddress;
20
-
21
- /**
22
- * @ignore
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
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/geoip2/geoip2/src/Model/Country.php DELETED
@@ -1,73 +0,0 @@
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
- *
15
- * @property-read \GeoIp2\Record\Country $country Country data for the requested
16
- * IP address. This object represents the country where MaxMind believes the
17
- * end user is located.
18
- *
19
- * @property-read \GeoIp2\Record\MaxMind $maxmind Data related to your MaxMind
20
- * account.
21
- *
22
- * @property-read \GeoIp2\Record\Country $registeredCountry Registered country
23
- * data for the requested IP address. This record represents the country
24
- * where the ISP has registered a given IP block and may differ from the
25
- * user's country.
26
- *
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
- *
32
- * @property-read \GeoIp2\Record\Traits $traits Data for the traits of the
33
- * requested IP address.
34
- */
35
- class Country extends AbstractModel
36
- {
37
- protected $continent;
38
- protected $country;
39
- protected $locales;
40
- protected $maxmind;
41
- protected $registeredCountry;
42
- protected $representedCountry;
43
- protected $traits;
44
-
45
- /**
46
- * @ignore
47
- */
48
- public function __construct($raw, $locales = array('en'))
49
- {
50
- parent::__construct($raw);
51
-
52
- $this->continent = new \GeoIp2\Record\Continent(
53
- $this->get('continent'),
54
- $locales
55
- );
56
- $this->country = new \GeoIp2\Record\Country(
57
- $this->get('country'),
58
- $locales
59
- );
60
- $this->maxmind = new \GeoIp2\Record\MaxMind($this->get('maxmind'));
61
- $this->registeredCountry = new \GeoIp2\Record\Country(
62
- $this->get('registered_country'),
63
- $locales
64
- );
65
- $this->representedCountry = new \GeoIp2\Record\RepresentedCountry(
66
- $this->get('represented_country'),
67
- $locales
68
- );
69
- $this->traits = new \GeoIp2\Record\Traits($this->get('traits'));
70
-
71
- $this->locales = $locales;
72
- }
73
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/geoip2/geoip2/src/Model/Domain.php DELETED
@@ -1,31 +0,0 @@
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
- *
12
- * @property-read string $ipAddress The IP address that the data in the model is
13
- * for.
14
- *
15
- */
16
- class Domain extends AbstractModel
17
- {
18
- protected $domain;
19
- protected $ipAddress;
20
-
21
- /**
22
- * @ignore
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
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/geoip2/geoip2/src/Model/Enterprise.php DELETED
@@ -1,56 +0,0 @@
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
- *
15
- * @property-read \GeoIp2\Record\Continent $continent Continent data for the
16
- * requested IP address.
17
- *
18
- * @property-read \GeoIp2\Record\Country $country Country data for the requested
19
- * IP address. This object represents the country where MaxMind believes the
20
- * end user is located.
21
- *
22
- * @property-read \GeoIp2\Record\Location $location Location data for the
23
- * requested IP address.
24
- *
25
- * @property-read \GeoIp2\Record\MaxMind $maxmind Data related to your MaxMind
26
- * account.
27
- *
28
- * @property-read \GeoIp2\Record\Country $registeredCountry Registered country
29
- * data for the requested IP address. This record represents the country
30
- * where the ISP has registered a given IP block and may differ from the
31
- * user's country.
32
- *
33
- * @property-read \GeoIp2\Record\RepresentedCountry $representedCountry
34
- * Represented country data for the requested IP address. The represented
35
- * country is used for things like military bases. It is only present when
36
- * the represented country differs from the country.
37
- *
38
- * @property-read array $subdivisions An array of {@link \GeoIp2\Record\Subdivision}
39
- * objects representing the country subdivisions for the requested IP
40
- * address. The number and type of subdivisions varies by country, but a
41
- * subdivision is typically a state, province, county, etc. Subdivisions
42
- * are ordered from most general (largest) to most specific (smallest).
43
- * If the response did not contain any subdivisions, this method returns
44
- * an empty array.
45
- *
46
- * @property-read \GeoIp2\Record\Subdivision $mostSpecificSubdivision An object
47
- * representing the most specific subdivision returned. If the response
48
- * did not contain any subdivisions, this method returns an empty
49
- * {@link \GeoIp2\Record\Subdivision} object.
50
- *
51
- * @property-read \GeoIp2\Record\Traits $traits Data for the traits of the
52
- * requested IP address.
53
- */
54
- class Enterprise extends City
55
- {
56
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/geoip2/geoip2/src/Model/Insights.php DELETED
@@ -1,56 +0,0 @@
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
- *
15
- * @property-read \GeoIp2\Record\Continent $continent Continent data for the
16
- * requested IP address.
17
- *
18
- * @property-read \GeoIp2\Record\Country $country Country data for the requested
19
- * IP address. This object represents the country where MaxMind believes the
20
- * end user is located.
21
- *
22
- * @property-read \GeoIp2\Record\Location $location Location data for the
23
- * requested IP address.
24
- *
25
- * @property-read \GeoIp2\Record\MaxMind $maxmind Data related to your MaxMind
26
- * account.
27
- *
28
- * @property-read \GeoIp2\Record\Country $registeredCountry Registered country
29
- * data for the requested IP address. This record represents the country
30
- * where the ISP has registered a given IP block and may differ from the
31
- * user's country.
32
- *
33
- * @property-read \GeoIp2\Record\RepresentedCountry $representedCountry
34
- * Represented country data for the requested IP address. The represented
35
- * country is used for things like military bases. It is only present when
36
- * the represented country differs from the country.
37
- *
38
- * @property-read array $subdivisions An array of {@link \GeoIp2\Record\Subdivision}
39
- * objects representing the country subdivisions for the requested IP
40
- * address. The number and type of subdivisions varies by country, but a
41
- * subdivision is typically a state, province, county, etc. Subdivisions
42
- * are ordered from most general (largest) to most specific (smallest).
43
- * If the response did not contain any subdivisions, this method returns
44
- * an empty array.
45
- *
46
- * @property-read \GeoIp2\Record\Subdivision $mostSpecificSubdivision An object
47
- * representing the most specific subdivision returned. If the response
48
- * did not contain any subdivisions, this method returns an empty
49
- * {@link \GeoIp2\Record\Subdivision} object.
50
- *
51
- * @property-read \GeoIp2\Record\Traits $traits Data for the traits of the
52
- * requested IP address.
53
- */
54
- class Insights extends City
55
- {
56
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/geoip2/geoip2/src/Model/Isp.php DELETED
@@ -1,47 +0,0 @@
1
- <?php
2
-
3
- namespace GeoIp2\Model;
4
-
5
- /**
6
- * This class provides the GeoIP2 Connection-Type model.
7
- *
8
- * @property-read integer|null $autonomousSystemNumber The autonomous system number
9
- * associated with the IP address.
10
- *
11
- * @property-read string|null $autonomousSystemOrganization The organization
12
- * associated with the registered autonomous system number for the IP
13
- * address.
14
- *
15
- * @property-read string|null $isp The name of the ISP associated with the IP
16
- * address.
17
- *
18
- * @property-read string|null $organization The name of the organization associated
19
- * with the IP address.
20
- *
21
- * @property-read string $ipAddress The IP address that the data in the model is
22
- * for.
23
- *
24
- */
25
- class Isp extends AbstractModel
26
- {
27
- protected $autonomousSystemNumber;
28
- protected $autonomousSystemOrganization;
29
- protected $isp;
30
- protected $organization;
31
- protected $ipAddress;
32
-
33
- /**
34
- * @ignore
35
- */
36
- public function __construct($raw)
37
- {
38
- parent::__construct($raw);
39
- $this->autonomousSystemNumber = $this->get('autonomous_system_number');
40
- $this->autonomousSystemOrganization =
41
- $this->get('autonomous_system_organization');
42
- $this->isp = $this->get('isp');
43
- $this->organization = $this->get('organization');
44
-
45
- $this->ipAddress = $this->get('ip_address');
46
- }
47
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/geoip2/geoip2/src/ProviderInterface.php DELETED
@@ -1,20 +0,0 @@
1
- <?php
2
-
3
- namespace GeoIp2;
4
-
5
- interface ProviderInterface
6
- {
7
- /**
8
- * @param ipAddress
9
- * IPv4 or IPv6 address to lookup.
10
- * @return \GeoIp2\Model\Country A Country model for the requested IP address.
11
- */
12
- public function country($ipAddress);
13
-
14
- /**
15
- * @param ipAddress
16
- * IPv4 or IPv6 address to lookup.
17
- * @return \GeoIp2\Model\City A City model for the requested IP address.
18
- */
19
- public function city($ipAddress);
20
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/geoip2/geoip2/src/Record/AbstractPlaceRecord.php DELETED
@@ -1,57 +0,0 @@
1
- <?php
2
-
3
- namespace GeoIp2\Record;
4
-
5
- abstract class AbstractPlaceRecord extends AbstractRecord
6
- {
7
- private $locales;
8
-
9
- /**
10
- * @ignore
11
- */
12
- public function __construct($record, $locales = array('en'))
13
- {
14
- $this->locales = $locales;
15
- parent::__construct($record);
16
- }
17
-
18
- /**
19
- * @ignore
20
- */
21
- public function __get($attr)
22
- {
23
- if ($attr == 'name') {
24
- return $this->name();
25
- } else {
26
- return parent::__get($attr);
27
- }
28
- }
29
-
30
- /**
31
- * @ignore
32
- */
33
- public function __isset($attr)
34
- {
35
- if ($attr == 'name') {
36
- return $this->firstSetNameLocale() == null ? false : true;
37
- } else {
38
- return parent::__isset($attr);
39
- }
40
- }
41
-
42
- private function name()
43
- {
44
- $locale = $this->firstSetNameLocale();
45
- return $locale === null ? null : $this->names[$locale];
46
- }
47
-
48
- private function firstSetNameLocale()
49
- {
50
- foreach ($this->locales as $locale) {
51
- if (isset($this->names[$locale])) {
52
- return $locale;
53
- }
54
- }
55
- return null;
56
- }
57
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/geoip2/geoip2/src/Record/AbstractRecord.php DELETED
@@ -1,60 +0,0 @@
1
- <?php
2
-
3
- namespace GeoIp2\Record;
4
-
5
- use GeoIp2\Compat\JsonSerializable;
6
-
7
- abstract class AbstractRecord implements JsonSerializable
8
- {
9
- private $record;
10
-
11
- /**
12
- * @ignore
13
- */
14
- public function __construct($record)
15
- {
16
- $this->record = isset($record) ? $record : array();
17
- }
18
-
19
- /**
20
- * @ignore
21
- */
22
- public function __get($attr)
23
- {
24
- // XXX - kind of ugly but greatly reduces boilerplate code
25
- $key = $this->attributeToKey($attr);
26
-
27
- if ($this->__isset($attr)) {
28
- return $this->record[$key];
29
- } elseif ($this->validAttribute($attr)) {
30
- if (preg_match('/^is_/', $key)) {
31
- return false;
32
- } else {
33
- return null;
34
- }
35
- } else {
36
- throw new \RuntimeException("Unknown attribute: $attr");
37
- }
38
- }
39
-
40
- public function __isset($attr)
41
- {
42
- return $this->validAttribute($attr) &&
43
- isset($this->record[$this->attributeToKey($attr)]);
44
- }
45
-
46
- private function attributeToKey($attr)
47
- {
48
- return strtolower(preg_replace('/([A-Z])/', '_\1', $attr));
49
- }
50
-
51
- private function validAttribute($attr)
52
- {
53
- return in_array($attr, $this->validAttributes);
54
- }
55
-
56
- public function jsonSerialize()
57
- {
58
- return $this->record;
59
- }
60
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/geoip2/geoip2/src/Record/City.php DELETED
@@ -1,32 +0,0 @@
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
- *
15
- * @property-read int|null $geonameId The GeoName ID for the city. This attribute
16
- * is returned by all location services and databases.
17
- *
18
- * @property-read string|null $name The name of the city based on the locales list
19
- * passed to the constructor. This attribute is returned by all location
20
- * services and databases.
21
- *
22
- * @property-read array|null $names A 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 City extends AbstractPlaceRecord
27
- {
28
- /**
29
- * @ignore
30
- */
31
- protected $validAttributes = array('confidence', 'geonameId', 'names');
32
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/geoip2/geoip2/src/Record/Continent.php DELETED
@@ -1,35 +0,0 @@
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
- *
14
- * @property-read int|null $geonameId The GeoName ID for the continent. This
15
- * attribute is returned by all location services and databases.
16
- *
17
- * @property-read string|null $name Returns the name of the continent based on the
18
- * locales list passed to the constructor. This attribute is returned by all location
19
- * services and databases.
20
- *
21
- * @property-read array|null $names An array map where the keys are locale codes
22
- * and the values are names. This attribute is returned by all location
23
- * services and databases.
24
- */
25
- class Continent extends AbstractPlaceRecord
26
- {
27
- /**
28
- * @ignore
29
- */
30
- protected $validAttributes = array(
31
- 'code',
32
- 'geonameId',
33
- 'names'
34
- );
35
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/geoip2/geoip2/src/Record/Country.php DELETED
@@ -1,41 +0,0 @@
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
- *
14
- * @property-read int|null $geonameId The GeoName ID for the country. This
15
- * attribute is returned by location services and databases.
16
- *
17
- * @property-read string|null $isoCode The {@link
18
- * http://en.wikipedia.org/wiki/ISO_3166-1 two-character ISO 3166-1 alpha
19
- * code} for the country. This attribute is returned by all location services
20
- * and databases.
21
- *
22
- * @property-read string|null $name The name of the country based on the locales
23
- * list passed to the constructor. This attribute is returned by all location
24
- * services and databases.
25
- *
26
- * @property-read array|null $names An array map where the keys are locale codes
27
- * and the values are names. This attribute is returned by all location
28
- * services and databases.
29
- */
30
- class Country extends AbstractPlaceRecord
31
- {
32
- /**
33
- * @ignore
34
- */
35
- protected $validAttributes = array(
36
- 'confidence',
37
- 'geonameId',
38
- 'isoCode',
39
- 'names'
40
- );
41
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/geoip2/geoip2/src/Record/Location.php DELETED
@@ -1,59 +0,0 @@
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
- *
15
- * @property-read int|null $accuracyRadius The approximate accuracy radius in
16
- * kilometers around the latitude and longitude for the IP address. This is
17
- * the radius where we have a 67% confidence that the device using the IP
18
- * address resides within the circle centered at the latitude and longitude
19
- * with the provided radius.
20
- *
21
- * @property-read float|null $latitude The approximate latitude of the location
22
- * associated with the IP address. This value is not precise and should not be
23
- * used to identify a particular address or household.
24
- *
25
- * @property-read float|null $longitude The approximate longitude of the location
26
- * associated with the IP address. This value is not precise and should not be
27
- * used to identify a particular address or household.
28
- *
29
- * @property-read int|null $populationDensity The estimated population per square
30
- * kilometer associated with the IP address. This attribute is only available
31
- * from the Insights service.
32
- *
33
- * @property-read int|null $metroCode The metro code of the location if the location
34
- * is in the US. MaxMind returns the same metro codes as the
35
- * {@link
36
- * https://developers.google.com/adwords/api/docs/appendix/cities-DMAregions
37
- * Google AdWords API}.
38
- *
39
- * @property-read string|null $timeZone The time zone associated with location, as
40
- * specified by the {@link http://www.iana.org/time-zones IANA Time Zone
41
- * Database}, e.g., "America/New_York".
42
- */
43
- class Location extends AbstractRecord
44
- {
45
- /**
46
- * @ignore
47
- */
48
- protected $validAttributes = array(
49
- 'averageIncome',
50
- 'accuracyRadius',
51
- 'latitude',
52
- 'longitude',
53
- 'metroCode',
54
- 'populationDensity',
55
- 'postalCode',
56
- 'postalConfidence',
57
- 'timeZone'
58
- );
59
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/geoip2/geoip2/src/Record/MaxMind.php DELETED
@@ -1,19 +0,0 @@
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 = array('queriesRemaining');
19
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/geoip2/geoip2/src/Record/Postal.php DELETED
@@ -1,27 +0,0 @@
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
- *
16
- * @property-read int|null $confidence A value from 0-100 indicating MaxMind's
17
- * confidence that the postal code is correct. This attribute is only
18
- * available from the Insights service and the GeoIP2 Enterprise
19
- * database.
20
- */
21
- class Postal extends AbstractRecord
22
- {
23
- /**
24
- * @ignore
25
- */
26
- protected $validAttributes = array('code', 'confidence');
27
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/geoip2/geoip2/src/Record/RepresentedCountry.php DELETED
@@ -1,40 +0,0 @@
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
- *
16
- * @property-read int|null $geonameId The GeoName ID for the country.
17
- *
18
- * @property-read string|null $isoCode The {@link http://en.wikipedia.org/wiki/ISO_3166-1
19
- * two-character ISO 3166-1 alpha code} for the country.
20
- *
21
- * @property-read string|null $name The name of the country based on the locales list
22
- * passed to the constructor.
23
- *
24
- * @property-read array|null $names An array map where the keys are locale codes and
25
- * the values are names.
26
- *
27
- * @property-read string|null $type A string indicating the type of entity that is
28
- * representing the country. Currently we only return <code>military</code>
29
- * but this could expand to include other types in the future.
30
- */
31
- class RepresentedCountry extends Country
32
- {
33
- protected $validAttributes = array(
34
- 'confidence',
35
- 'geonameId',
36
- 'isoCode',
37
- 'names',
38
- 'type'
39
- );
40
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/geoip2/geoip2/src/Record/Subdivision.php DELETED
@@ -1,45 +0,0 @@
1
- <?php
2
-
3
- namespace GeoIp2\Record;
4
-
5
- /**
6
- *
7
- * Contains data for the subdivisions associated with an IP address
8
- *
9
- * This record is returned by all location databases and services besides
10
- * Country.
11
- *
12
- * @property-read int|null $confidence This is a value from 0-100 indicating
13
- * MaxMind's confidence that the subdivision is correct. This attribute is
14
- * only available from the Insights service and the GeoIP2 Enterprise
15
- * database.
16
- *
17
- * @property-read int|null $geonameId This is a GeoName ID for the subdivision.
18
- * This attribute is returned by all location databases and services besides
19
- * Country.
20
- *
21
- * @property-read string|null $isoCode This is a string up to three characters long
22
- * contain the subdivision portion of the {@link
23
- * http://en.wikipedia.org/wiki/ISO_3166-2 ISO 3166-2 code}. This attribute
24
- * is returned by all location databases and services except Country.
25
- *
26
- * @property-read string|null $name The name of the subdivision based on the
27
- * locales list passed to the constructor. This attribute is returned by all
28
- * location databases and services besides Country.
29
- *
30
- * @property-read array|null $names An array map where the keys are locale codes
31
- * and the values are names. This attribute is returned by all location
32
- * databases and services besides Country.
33
- */
34
- class Subdivision extends AbstractPlaceRecord
35
- {
36
- /**
37
- * @ignore
38
- */
39
- protected $validAttributes = array(
40
- 'confidence',
41
- 'geonameId',
42
- 'isoCode',
43
- 'names'
44
- );
45
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/geoip2/geoip2/src/Record/Traits.php DELETED
@@ -1,107 +0,0 @@
1
- <?php
2
-
3
- namespace GeoIp2\Record;
4
-
5
- /**
6
- *
7
- * Contains data for the traits record associated with an IP address
8
- *
9
- * This record is returned by all location services and databases.
10
- *
11
- * @property-read int|null $autonomousSystemNumber The {@link
12
- * http://en.wikipedia.org/wiki/Autonomous_system_(Internet) autonomous
13
- * system number} associated with the IP address. This attribute is only
14
- * available from the City and Insights web service and the GeoIP2
15
- * Enterprise database.
16
- *
17
- * @property-read string|null $autonomousSystemOrganization The organization
18
- * associated with the registered {@link
19
- * http://en.wikipedia.org/wiki/Autonomous_system_(Internet) autonomous
20
- * system number} for the IP address. This attribute is only available from
21
- * the City and Insights web service and the GeoIP2 Enterprise
22
- * database.
23
- *
24
- * @property-read string|null $connectionType The connection type may take the
25
- * following values: "Dialup", "Cable/DSL", "Corporate", "Cellular".
26
- * Additional values may be added in the future. This attribute is only
27
- * available in the GeoIP2 Enterprise database.
28
- *
29
- * @property-read string|null $domain The second level domain associated with the
30
- * IP address. This will be something like "example.com" or "example.co.uk",
31
- * not "foo.example.com". This attribute is only available from the
32
- * City and Insights web service and the GeoIP2 Enterprise
33
- * database.
34
- *
35
- * @property-read string $ipAddress The IP address that the data in the model
36
- * is for. If you performed a "me" lookup against the web service, this
37
- * will be the externally routable IP address for the system the code is
38
- * running on. If the system is behind a NAT, this may differ from the IP
39
- * address locally assigned to it. This attribute is returned by all end
40
- * points.
41
- *
42
- * @property-read boolean $isAnonymousProxy *Deprecated.* Please see our {@link
43
- * https://www.maxmind.com/en/geoip2-anonymous-ip-database GeoIP2
44
- * Anonymous IP database} to determine whether the IP address is used by an
45
- * anonymizing service.
46
- *
47
- * @property-read boolean $isLegitimateProxy This attribute is true if MaxMind
48
- * believes this IP address to be a legitimate proxy, such as an internal
49
- * VPN used by a corporation. This attribute is only available in the GeoIP2
50
- * Enterprise database.
51
- *
52
- * @property-read boolean $isSatelliteProvider *Deprecated.* Due to the
53
- * increased coverage by mobile carriers, very few satellite providers now
54
- * serve multiple countries. As a result, the output does not provide
55
- * sufficiently relevant data for us to maintain it.
56
- *
57
- * @property-read string|null $isp The name of the ISP associated with the IP
58
- * address. This attribute is only available from the City and Insights web
59
- * services and the GeoIP2 Enterprise database.
60
- *
61
- * @property-read string|null $organization The name of the organization associated
62
- * with the IP address. This attribute is only available from the City and
63
- * Insights web services and the GeoIP2 Enterprise database.
64
- *
65
- * @property-read string|null $userType <p>The user type associated with the IP
66
- * address. This can be one of the following values:</p>
67
- * <ul>
68
- * <li>business
69
- * <li>cafe
70
- * <li>cellular
71
- * <li>college
72
- * <li>content_delivery_network
73
- * <li>dialup
74
- * <li>government
75
- * <li>hosting
76
- * <li>library
77
- * <li>military
78
- * <li>residential
79
- * <li>router
80
- * <li>school
81
- * <li>search_engine_spider
82
- * <li>traveler
83
- * </ul>
84
- * <p>
85
- * This attribute is only available from the Insights web service and the
86
- * GeoIP2 Enterprise database.
87
- * </p>
88
- */
89
- class Traits extends AbstractRecord
90
- {
91
- /**
92
- * @ignore
93
- */
94
- protected $validAttributes = array(
95
- 'autonomousSystemNumber',
96
- 'autonomousSystemOrganization',
97
- 'connectionType',
98
- 'domain',
99
- 'isAnonymousProxy',
100
- 'isLegitimateProxy',
101
- 'isSatelliteProvider',
102
- 'isp',
103
- 'ipAddress',
104
- 'organization',
105
- 'userType'
106
- );
107
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/geoip2/geoip2/src/WebService/Client.php DELETED
@@ -1,242 +0,0 @@
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\Exception\InvalidInputException;
13
- use MaxMind\WebService\Client as WsClient;
14
-
15
- /**
16
- * This class provides a client API for all the GeoIP2 Precision web services.
17
- * The services are Country, City, and Insights. Each service returns a
18
- * different set of data about an IP address, with Country returning the
19
- * least data and Insights the most.
20
- *
21
- * Each web service is represented by a different model class, and these model
22
- * classes in turn contain multiple record classes. The record classes have
23
- * attributes which contain data about the IP address.
24
- *
25
- * If the web service does not return a particular piece of data for an IP
26
- * address, the associated attribute is not populated.
27
- *
28
- * The web service may not return any information for an entire record, in
29
- * which case all of the attributes for that record class will be empty.
30
- *
31
- * ## Usage ##
32
- *
33
- * The basic API for this class is the same for all of the web service end
34
- * points. First you create a web service object with your MaxMind `$userId`
35
- * and `$licenseKey`, then you call the method corresponding to a specific end
36
- * point, passing it the IP address you want to look up.
37
- *
38
- * If the request succeeds, the method call will return a model class for
39
- * the service you called. This model in turn contains multiple record
40
- * classes, each of which represents part of the data returned by the web
41
- * service.
42
- *
43
- * If the request fails, the client class throws an exception.
44
- */
45
- class Client implements ProviderInterface
46
- {
47
- private $locales;
48
- private $client;
49
- private static $basePath = '/geoip/v2.1';
50
-
51
- const VERSION = 'v2.4.4';
52
-
53
- /**
54
- * Constructor.
55
- *
56
- * @param int $userId Your MaxMind user ID
57
- * @param string $licenseKey Your MaxMind license key
58
- * @param array $locales List of locale codes to use in name property
59
- * from most preferred to least preferred.
60
- * @param array $options Array of options. Valid options include:
61
- * * `host` - The host to use when querying the web service.
62
- * * `timeout` - Timeout in seconds.
63
- * * `connectTimeout` - Initial connection timeout in seconds.
64
- * * `proxy` - The HTTP proxy to use. May include a schema, port,
65
- * username, and password, e.g.,
66
- * `http://username:password@127.0.0.1:10`.
67
- */
68
- public function __construct(
69
- $userId,
70
- $licenseKey,
71
- $locales = array('en'),
72
- $options = array()
73
- ) {
74
- $this->locales = $locales;
75
-
76
- // This is for backwards compatibility. Do not remove except for a
77
- // major version bump.
78
- if (is_string($options)) {
79
- $options = array( 'host' => $options );
80
- }
81
-
82
- if (!isset($options['host'])) {
83
- $options['host'] = 'geoip.maxmind.com';
84
- }
85
-
86
- $options['userAgent'] = $this->userAgent();
87
-
88
- $this->client = new WsClient($userId, $licenseKey, $options);
89
- }
90
-
91
- private function userAgent()
92
- {
93
- return 'GeoIP2-API/' . Client::VERSION;
94
- }
95
-
96
- /**
97
- * This method calls the GeoIP2 Precision: City service.
98
- *
99
- * @param string $ipAddress IPv4 or IPv6 address as a string. If no
100
- * address is provided, the address that the web service is called
101
- * from will be used.
102
- *
103
- * @return \GeoIp2\Model\City
104
- *
105
- * @throws \GeoIp2\Exception\AddressNotFoundException if the address you
106
- * provided is not in our database (e.g., a private address).
107
- * @throws \GeoIp2\Exception\AuthenticationException if there is a problem
108
- * with the user ID or license key that you provided.
109
- * @throws \GeoIp2\Exception\OutOfQueriesException if your account is out
110
- * of queries.
111
- * @throws \GeoIp2\Exception\InvalidRequestException} if your request was
112
- * received by the web service but is invalid for some other reason.
113
- * This may indicate an issue with this API. Please report the error to
114
- * MaxMind.
115
- * @throws \GeoIp2\Exception\HttpException if an unexpected HTTP error
116
- * code or message was returned. This could indicate a problem with the
117
- * connection between your server and the web service or that the web
118
- * service returned an invalid document or 500 error code.
119
- * @throws \GeoIp2\Exception\GeoIp2Exception This serves as the parent
120
- * class to the above exceptions. It will be thrown directly if a 200
121
- * status code is returned but the body is invalid.
122
- */
123
- public function city($ipAddress = 'me')
124
- {
125
- return $this->responseFor('city', 'City', $ipAddress);
126
- }
127
-
128
- /**
129
- * This method calls the GeoIP2 Precision: Country service.
130
- *
131
- * @param string $ipAddress IPv4 or IPv6 address as a string. If no
132
- * address is provided, the address that the web service is called
133
- * from will be used.
134
- *
135
- * @return \GeoIp2\Model\Country
136
- *
137
- * @throws \GeoIp2\Exception\AddressNotFoundException if the address you
138
- * provided is not in our database (e.g., a private address).
139
- * @throws \GeoIp2\Exception\AuthenticationException if there is a problem
140
- * with the user ID or license key that you provided.
141
- * @throws \GeoIp2\Exception\OutOfQueriesException if your account is out
142
- * of queries.
143
- * @throws \GeoIp2\Exception\InvalidRequestException} if your request was
144
- * received by the web service but is invalid for some other reason.
145
- * This may indicate an issue with this API. Please report the error to
146
- * MaxMind.
147
- * @throws \GeoIp2\Exception\HttpException if an unexpected HTTP error
148
- * code or message was returned. This could indicate a problem with the
149
- * connection between your server and the web service or that the web
150
- * service returned an invalid document or 500 error code.
151
- * @throws \GeoIp2\Exception\GeoIp2Exception This serves as the parent
152
- * class to the above exceptions. It will be thrown directly if a 200
153
- * status code is returned but the body is invalid.
154
- */
155
- public function country($ipAddress = 'me')
156
- {
157
- return $this->responseFor('country', 'Country', $ipAddress);
158
- }
159
-
160
- /**
161
- * This method calls the GeoIP2 Precision: Insights service.
162
- *
163
- * @param string $ipAddress IPv4 or IPv6 address as a string. If no
164
- * address is provided, the address that the web service is called
165
- * from will be used.
166
- *
167
- * @return \GeoIp2\Model\Insights
168
- *
169
- * @throws \GeoIp2\Exception\AddressNotFoundException if the address you
170
- * provided is not in our database (e.g., a private address).
171
- * @throws \GeoIp2\Exception\AuthenticationException if there is a problem
172
- * with the user ID or license key that you provided.
173
- * @throws \GeoIp2\Exception\OutOfQueriesException if your account is out
174
- * of queries.
175
- * @throws \GeoIp2\Exception\InvalidRequestException} if your request was
176
- * received by the web service but is invalid for some other reason.
177
- * This may indicate an issue with this API. Please report the error to
178
- * MaxMind.
179
- * @throws \GeoIp2\Exception\HttpException if an unexpected HTTP error
180
- * code or message was returned. This could indicate a problem with the
181
- * connection between your server and the web service or that the web
182
- * service returned an invalid document or 500 error code.
183
- * @throws \GeoIp2\Exception\GeoIp2Exception This serves as the parent
184
- * class to the above exceptions. It will be thrown directly if a 200
185
- * status code is returned but the body is invalid.
186
- */
187
- public function insights($ipAddress = 'me')
188
- {
189
- return $this->responseFor('insights', 'Insights', $ipAddress);
190
- }
191
-
192
- private function responseFor($endpoint, $class, $ipAddress)
193
- {
194
- $path = implode('/', array(self::$basePath, $endpoint, $ipAddress));
195
-
196
- try {
197
- $body = $this->client->get('GeoIP2 ' . $class, $path);
198
- } catch (\MaxMind\Exception\IpAddressNotFoundException $ex) {
199
- throw new AddressNotFoundException(
200
- $ex->getMessage(),
201
- $ex->getStatusCode(),
202
- $ex
203
- );
204
- } catch (\MaxMind\Exception\AuthenticationException $ex) {
205
- throw new AuthenticationException(
206
- $ex->getMessage(),
207
- $ex->getStatusCode(),
208
- $ex
209
- );
210
- } catch (\MaxMind\Exception\InsufficientFundsException $ex) {
211
- throw new OutOfQueriesException(
212
- $ex->getMessage(),
213
- $ex->getStatusCode(),
214
- $ex
215
- );
216
- } catch (\MaxMind\Exception\InvalidRequestException $ex) {
217
- throw new InvalidRequestException(
218
- $ex->getMessage(),
219
- $ex->getErrorCode(),
220
- $ex->getStatusCode(),
221
- $ex->getUri(),
222
- $ex
223
- );
224
- } catch (\MaxMind\Exception\HttpException $ex) {
225
- throw new HttpException(
226
- $ex->getMessage(),
227
- $ex->getStatusCode(),
228
- $ex->getUri(),
229
- $ex
230
- );
231
- } catch (\MaxMind\Exception\WebServiceException $ex) {
232
- throw new GeoIp2Exception(
233
- $ex->getMessage(),
234
- $ex->getCode(),
235
- $ex
236
- );
237
- }
238
-
239
- $class = "GeoIp2\\Model\\" . $class;
240
- return new $class($body, $this->locales);
241
- }
242
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/.gitignore DELETED
@@ -1,5 +0,0 @@
1
- bin
2
- composer.lock
3
- composer.phar
4
- phpunit.xml
5
- vendor
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/.travis.yml DELETED
@@ -1,25 +0,0 @@
1
- language: php
2
-
3
- php:
4
- - 5.4
5
- - 5.5
6
-
7
- env: TEST_SERVER="http://127.0.0.1:8080/server.php" TEST_PROXY="127.0.0.1:3128" PHP_FCGI_CHILDREN=10 PHP_FCGI_MAX_REQUESTS=10
8
-
9
- before_install:
10
- - echo "" | sudo add-apt-repository ppa:nginx/stable > /dev/null 2>&1
11
- - sudo apt-get -qq update
12
- - sudo apt-get -qq install nginx squid
13
- - sudo stop squid3
14
- - curl --version
15
-
16
- before_script:
17
- - sudo cp ~/.phpenv/versions/$(phpenv version-name)/etc/php-fpm.conf.default ~/.phpenv/versions/$(phpenv version-name)/etc/php-fpm.conf
18
- - echo "cgi.fix_pathinfo = 1" >> ~/.phpenv/versions/$(phpenv version-name)/etc/php.ini
19
- - ~/.phpenv/versions/$(phpenv version-name)/sbin/php-fpm
20
- - sudo nginx -p test -c etc/nginx.conf
21
- - sudo squid3 -f test/etc/squid.conf
22
- - composer self-update
23
- - composer install --dev
24
-
25
- script: ./bin/phpunit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/CHANGELOG.md DELETED
@@ -1,10 +0,0 @@
1
- ## 0.15 (June 25, 2015)
2
-
3
- * Moved cookie jar implementation from `FileGetContents` client to a browser
4
- listener
5
- * Added `DigestAuthListener`
6
-
7
- ## 0.14 (June 2, 2015)
8
-
9
- * Changed default HTTP protocol version to 1.1
10
- * Added verify host control to `AbstractClient`
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/LICENSE DELETED
@@ -1,19 +0,0 @@
1
- Copyright (c) 2010-2011 Kris Wallsmith
2
-
3
- Permission is hereby granted, free of charge, to any person obtaining a copy
4
- of this software and associated documentation files (the "Software"), to deal
5
- in the Software without restriction, including without limitation the rights
6
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
- copies of the Software, and to permit persons to whom the Software is furnished
8
- to do 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
19
- THE SOFTWARE.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/README.md DELETED
@@ -1,28 +0,0 @@
1
- [![Build Status](https://secure.travis-ci.org/kriswallsmith/Buzz.png?branch=master)](http://travis-ci.org/kriswallsmith/Buzz)
2
-
3
- Buzz is a lightweight PHP 5.3 library for issuing HTTP requests.
4
-
5
- ```php
6
- <?php
7
-
8
- $browser = new Buzz\Browser();
9
- $response = $browser->get('http://www.google.com');
10
-
11
- echo $browser->getLastRequest()."\n";
12
- echo $response;
13
- ```
14
-
15
- You can also use the low-level HTTP classes directly.
16
-
17
- ```php
18
- <?php
19
-
20
- $request = new Buzz\Message\Request('HEAD', '/', 'http://google.com');
21
- $response = new Buzz\Message\Response();
22
-
23
- $client = new Buzz\Client\FileGetContents();
24
- $client->send($request, $response);
25
-
26
- echo $request;
27
- echo $response;
28
- ```
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/composer.json DELETED
@@ -1,32 +0,0 @@
1
- {
2
- "name": "kriswallsmith/buzz",
3
- "description": "Lightweight HTTP client",
4
- "keywords": ["http client", "curl"],
5
- "homepage": "https://github.com/kriswallsmith/Buzz",
6
- "type": "library",
7
- "license": "MIT",
8
- "authors": [
9
- {
10
- "name": "Kris Wallsmith",
11
- "email": "kris.wallsmith@gmail.com",
12
- "homepage": "http://kriswallsmith.net/"
13
- }
14
- ],
15
- "require": {
16
- "php": ">=5.3.0"
17
- },
18
- "require-dev": {
19
- "phpunit/phpunit": "3.7.*"
20
- },
21
- "suggest": {
22
- "ext-curl": "*"
23
- },
24
- "config": {
25
- "bin-dir": "bin"
26
- },
27
- "autoload": {
28
- "psr-0": {
29
- "Buzz": "lib/"
30
- }
31
- }
32
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/examples/CookieListener.php DELETED
@@ -1,37 +0,0 @@
1
- <?php
2
-
3
- require('../vendor/autoload.php');
4
-
5
- use Buzz\Browser;
6
- use Buzz\Client\Curl;
7
- use Buzz\Listener\CookieListener;
8
-
9
- $browser = new Browser();
10
-
11
- $client = new Curl();
12
- $client->setMaxRedirects(0);
13
- $browser->setClient($client);
14
-
15
- // Create CookieListener
16
- $listener = new CookieListener();
17
- $browser->addListener($listener);
18
-
19
- // This URL set two Cookies, k1=v1 and k2=v2
20
- $response = $browser->get('http://httpbin.org/cookies/set?k1=v1&k2=v2');
21
-
22
- // This URL will return the two set Cookies
23
- $response = $browser->get('http://httpbin.org/cookies');
24
- echo $response;
25
-
26
- // Should output
27
- /*
28
- {
29
- "cookies": {
30
- "k1": "v1",
31
- "k2": "v2"
32
- }
33
- }
34
- */
35
-
36
- // The Cookies are able to be retrieved and set using getCookies and setCookies on the Listener.
37
- print_r($listener->getCookies());
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/examples/DigestAuthListener.php DELETED
@@ -1,40 +0,0 @@
1
- <?php
2
-
3
- require('../vendor/autoload.php');
4
-
5
- use Buzz\Browser;
6
- use Buzz\Client\Curl;
7
- use Buzz\Listener\DigestAuthListener;
8
-
9
- $username = 'user1';
10
- $password = 'user1';
11
-
12
- //
13
- // This URL will Authenticate usernames user1 through user9, password is the same as the username.
14
- //
15
- $url = 'http://test.webdav.org/auth-digest/';
16
-
17
- // Create Curl Client
18
- $curl = new Curl();
19
-
20
- $browser = new Browser();
21
- $browser->setClient($curl);
22
-
23
- // Create DigestAuthListener
24
- $browser->addListener(new DigestAuthListener($username, $password));
25
-
26
- //
27
- // This URL will Authenticate any username and password that matches those in the URL.
28
- // It requires the Browser/Client to respond with the same Cookie in order to Authenticate.
29
- //
30
- // $url = 'http://httpbin.org/digest-auth/auth-int/' . $username . '/' . $password;
31
-
32
- $response = $browser->get($url);
33
- echo $response;
34
-
35
- $statusCode = $response->getStatusCode();
36
- if($statusCode == 401) {
37
- $response = $browser->get($url);
38
- }
39
-
40
- echo $response;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/lib/Buzz/Browser.php DELETED
@@ -1,195 +0,0 @@
1
- <?php
2
-
3
- namespace Buzz;
4
-
5
- use Buzz\Client\ClientInterface;
6
- use Buzz\Client\FileGetContents;
7
- use Buzz\Listener\ListenerChain;
8
- use Buzz\Listener\ListenerInterface;
9
- use Buzz\Message\Factory\Factory;
10
- use Buzz\Message\Factory\FactoryInterface;
11
- use Buzz\Message\MessageInterface;
12
- use Buzz\Message\RequestInterface;
13
- use Buzz\Util\Url;
14
-
15
- class Browser
16
- {
17
- private $client;
18
- private $factory;
19
- private $listener;
20
- private $lastRequest;
21
- private $lastResponse;
22
-
23
- public function __construct(ClientInterface $client = null, FactoryInterface $factory = null)
24
- {
25
- $this->client = $client ?: new FileGetContents();
26
- $this->factory = $factory ?: new Factory();
27
- }
28
-
29
- public function get($url, $headers = array())
30
- {
31
- return $this->call($url, RequestInterface::METHOD_GET, $headers);
32
- }
33
-
34
- public function post($url, $headers = array(), $content = '')
35
- {
36
- return $this->call($url, RequestInterface::METHOD_POST, $headers, $content);
37
- }
38
-
39
- public function head($url, $headers = array())
40
- {
41
- return $this->call($url, RequestInterface::METHOD_HEAD, $headers);
42
- }
43
-
44
- public function patch($url, $headers = array(), $content = '')
45
- {
46
- return $this->call($url, RequestInterface::METHOD_PATCH, $headers, $content);
47
- }
48
-
49
- public function put($url, $headers = array(), $content = '')
50
- {
51
- return $this->call($url, RequestInterface::METHOD_PUT, $headers, $content);
52
- }
53
-
54
- public function delete($url, $headers = array(), $content = '')
55
- {
56
- return $this->call($url, RequestInterface::METHOD_DELETE, $headers, $content);
57
- }
58
-
59
- /**
60
- * Sends a request.
61
- *
62
- * @param string $url The URL to call
63
- * @param string $method The request method to use
64
- * @param array $headers An array of request headers
65
- * @param string $content The request content
66
- *
67
- * @return MessageInterface The response object
68
- */
69
- public function call($url, $method, $headers = array(), $content = '')
70
- {
71
- $request = $this->factory->createRequest($method);
72
-
73
- if (!$url instanceof Url) {
74
- $url = new Url($url);
75
- }
76
-
77
- $url->applyToRequest($request);
78
-
79
- $request->addHeaders($headers);
80
- $request->setContent($content);
81
-
82
- return $this->send($request);
83
- }
84
-
85
- /**
86
- * Sends a form request.
87
- *
88
- * @param string $url The URL to submit to
89
- * @param array $fields An array of fields
90
- * @param string $method The request method to use
91
- * @param array $headers An array of request headers
92
- *
93
- * @return MessageInterface The response object
94
- */
95
- public function submit($url, array $fields, $method = RequestInterface::METHOD_POST, $headers = array())
96
- {
97
- $request = $this->factory->createFormRequest();
98
-
99
- if (!$url instanceof Url) {
100
- $url = new Url($url);
101
- }
102
-
103
- $url->applyToRequest($request);
104
-
105
- $request->addHeaders($headers);
106
- $request->setMethod($method);
107
- $request->setFields($fields);
108
-
109
- return $this->send($request);
110
- }
111
-
112
- /**
113
- * Sends a request.
114
- *
115
- * @param RequestInterface $request A request object
116
- * @param MessageInterface $response A response object
117
- *
118
- * @return MessageInterface The response
119
- */
120
- public function send(RequestInterface $request, MessageInterface $response = null)
121
- {
122
- if (null === $response) {
123
- $response = $this->factory->createResponse();
124
- }
125
-
126
- if ($this->listener) {
127
- $this->listener->preSend($request);
128
- }
129
-
130
- $this->client->send($request, $response);
131
-
132
- $this->lastRequest = $request;
133
- $this->lastResponse = $response;
134
-
135
- if ($this->listener) {
136
- $this->listener->postSend($request, $response);
137
- }
138
-
139
- return $response;
140
- }
141
-
142
- public function getLastRequest()
143
- {
144
- return $this->lastRequest;
145
- }
146
-
147
- public function getLastResponse()
148
- {
149
- return $this->lastResponse;
150
- }
151
-
152
- public function setClient(ClientInterface $client)
153
- {
154
- $this->client = $client;
155
- }
156
-
157
- public function getClient()
158
- {
159
- return $this->client;
160
- }
161
-
162
- public function setMessageFactory(FactoryInterface $factory)
163
- {
164
- $this->factory = $factory;
165
- }
166
-
167
- public function getMessageFactory()
168
- {
169
- return $this->factory;
170
- }
171
-
172
- public function setListener(ListenerInterface $listener)
173
- {
174
- $this->listener = $listener;
175
- }
176
-
177
- public function getListener()
178
- {
179
- return $this->listener;
180
- }
181
-
182
- public function addListener(ListenerInterface $listener)
183
- {
184
- if (!$this->listener) {
185
- $this->listener = $listener;
186
- } elseif ($this->listener instanceof ListenerChain) {
187
- $this->listener->addListener($listener);
188
- } else {
189
- $this->listener = new ListenerChain(array(
190
- $this->listener,
191
- $listener,
192
- ));
193
- }
194
- }
195
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/lib/Buzz/Client/AbstractClient.php DELETED
@@ -1,73 +0,0 @@
1
- <?php
2
-
3
- namespace Buzz\Client;
4
-
5
- abstract class AbstractClient implements ClientInterface
6
- {
7
- protected $ignoreErrors = true;
8
- protected $maxRedirects = 5;
9
- protected $timeout = 5;
10
- protected $verifyPeer = true;
11
- protected $verifyHost = 2;
12
- protected $proxy;
13
-
14
- public function setIgnoreErrors($ignoreErrors)
15
- {
16
- $this->ignoreErrors = $ignoreErrors;
17
- }
18
-
19
- public function getIgnoreErrors()
20
- {
21
- return $this->ignoreErrors;
22
- }
23
-
24
- public function setMaxRedirects($maxRedirects)
25
- {
26
- $this->maxRedirects = $maxRedirects;
27
- }
28
-
29
- public function getMaxRedirects()
30
- {
31
- return $this->maxRedirects;
32
- }
33
-
34
- public function setTimeout($timeout)
35
- {
36
- $this->timeout = $timeout;
37
- }
38
-
39
- public function getTimeout()
40
- {
41
- return $this->timeout;
42
- }
43
-
44
- public function setVerifyPeer($verifyPeer)
45
- {
46
- $this->verifyPeer = $verifyPeer;
47
- }
48
-
49
- public function getVerifyPeer()
50
- {
51
- return $this->verifyPeer;
52
- }
53
-
54
- public function getVerifyHost()
55
- {
56
- return $this->verifyHost;
57
- }
58
-
59
- public function setVerifyHost($verifyHost)
60
- {
61
- $this->verifyHost = $verifyHost;
62
- }
63
-
64
- public function setProxy($proxy)
65
- {
66
- $this->proxy = $proxy;
67
- }
68
-
69
- public function getProxy()
70
- {
71
- return $this->proxy;
72
- }
73
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/lib/Buzz/Client/AbstractCurl.php DELETED
@@ -1,232 +0,0 @@
1
- <?php
2
-
3
- namespace Buzz\Client;
4
-
5
- use Buzz\Message\Form\FormRequestInterface;
6
- use Buzz\Message\Form\FormUploadInterface;
7
- use Buzz\Message\MessageInterface;
8
- use Buzz\Message\RequestInterface;
9
- use Buzz\Exception\ClientException;
10
-
11
- /**
12
- * Base client class with helpers for working with cURL.
13
- */
14
- abstract class AbstractCurl extends AbstractClient
15
- {
16
- protected $options = array();
17
-
18
- public function __construct()
19
- {
20
- if (defined('CURLOPT_PROTOCOLS')) {
21
- $this->options = array(
22
- CURLOPT_PROTOCOLS => CURLPROTO_HTTP | CURLPROTO_HTTPS,
23
- CURLOPT_REDIR_PROTOCOLS => CURLPROTO_HTTP | CURLPROTO_HTTPS,
24
- );
25
- }
26
- }
27
-
28
- /**
29
- * Creates a new cURL resource.
30
- *
31
- * @see curl_init()
32
- *
33
- * @return resource A new cURL resource
34
- *
35
- * @throws ClientException If unable to create a cURL resource
36
- */
37
- protected static function createCurlHandle()
38
- {
39
- if (false === $curl = curl_init()) {
40
- throw new ClientException('Unable to create a new cURL handle');
41
- }
42
-
43
- curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
44
- curl_setopt($curl, CURLOPT_HEADER, true);
45
-
46
- return $curl;
47
- }
48
-
49
- /**
50
- * Populates a response object.
51
- *
52
- * @param resource $curl A cURL resource
53
- * @param string $raw The raw response string
54
- * @param MessageInterface $response The response object
55
- */
56
- protected static function populateResponse($curl, $raw, MessageInterface $response)
57
- {
58
- // fixes bug https://sourceforge.net/p/curl/bugs/1204/
59
- $version = curl_version();
60
- if (version_compare($version['version'], '7.30.0', '<')) {
61
- $pos = strlen($raw) - curl_getinfo($curl, CURLINFO_SIZE_DOWNLOAD);
62
- } else {
63
- $pos = curl_getinfo($curl, CURLINFO_HEADER_SIZE);
64
- }
65
-
66
- $response->setHeaders(static::getLastHeaders(rtrim(substr($raw, 0, $pos))));
67
- $response->setContent(strlen($raw) > $pos ? substr($raw, $pos) : '');
68
- }
69
-
70
- /**
71
- * Sets options on a cURL resource based on a request.
72
- */
73
- private static function setOptionsFromRequest($curl, RequestInterface $request)
74
- {
75
- $options = array(
76
- CURLOPT_HTTP_VERSION => $request->getProtocolVersion() == 1.0 ? CURL_HTTP_VERSION_1_0 : CURL_HTTP_VERSION_1_1,
77
- CURLOPT_CUSTOMREQUEST => $request->getMethod(),
78
- CURLOPT_URL => $request->getHost().$request->getResource(),
79
- CURLOPT_HTTPHEADER => $request->getHeaders(),
80
- );
81
-
82
- switch ($request->getMethod()) {
83
- case RequestInterface::METHOD_HEAD:
84
- $options[CURLOPT_NOBODY] = true;
85
- break;
86
-
87
- case RequestInterface::METHOD_GET:
88
- $options[CURLOPT_HTTPGET] = true;
89
- break;
90
-
91
- case RequestInterface::METHOD_POST:
92
- case RequestInterface::METHOD_PUT:
93
- case RequestInterface::METHOD_DELETE:
94
- case RequestInterface::METHOD_PATCH:
95
- case RequestInterface::METHOD_OPTIONS:
96
- $options[CURLOPT_POSTFIELDS] = $fields = static::getPostFields($request);
97
-
98
- // remove the content-type header
99
- if (is_array($fields)) {
100
- $options[CURLOPT_HTTPHEADER] = array_filter($options[CURLOPT_HTTPHEADER], function($header) {
101
- return 0 !== stripos($header, 'Content-Type: ');
102
- });
103
- }
104
-
105
- break;
106
- }
107
-
108
- curl_setopt_array($curl, $options);
109
- }
110
-
111
- /**
112
- * Returns a value for the CURLOPT_POSTFIELDS option.
113
- *
114
- * @return string|array A post fields value
115
- */
116
- private static function getPostFields(RequestInterface $request)
117
- {
118
- if (!$request instanceof FormRequestInterface) {
119
- return $request->getContent();
120
- }
121
-
122
- $fields = $request->getFields();
123
- $multipart = false;
124
-
125
- foreach ($fields as $name => $value) {
126
- if (!$value instanceof FormUploadInterface) {
127
- continue;
128
- }
129
-
130
- if (!$file = $value->getFile()) {
131
- return $request->getContent();
132
- }
133
-
134
- $multipart = true;
135
-
136
- if (version_compare(PHP_VERSION, '5.5', '>=')) {
137
- $curlFile = new \CURLFile($file);
138
- if ($contentType = $value->getContentType()) {
139
- $curlFile->setMimeType($contentType);
140
- }
141
-
142
- if (basename($file) != $value->getFilename()) {
143
- $curlFile->setPostFilename($value->getFilename());
144
- }
145
-
146
- $fields[$name] = $curlFile;
147
- } else {
148
- // replace value with upload string
149
- $fields[$name] = '@'.$file;
150
-
151
- if ($contentType = $value->getContentType()) {
152
- $fields[$name] .= ';type='.$contentType;
153
- }
154
- if (basename($file) != $value->getFilename()) {
155
- $fields[$name] .= ';filename='.$value->getFilename();
156
- }
157
- }
158
- }
159
-
160
- return $multipart ? $fields : http_build_query($fields, '', '&');
161
- }
162
-
163
- /**
164
- * A helper for getting the last set of headers.
165
- *
166
- * @param string $raw A string of many header chunks
167
- *
168
- * @return array An array of header lines
169
- */
170
- private static function getLastHeaders($raw)
171
- {
172
- $headers = array();
173
- foreach (preg_split('/(\\r?\\n)/', $raw) as $header) {
174
- if ($header) {
175
- $headers[] = $header;
176
- } else {
177
- $headers = array();
178
- }
179
- }
180
-
181
- return $headers;
182
- }
183
-
184
- /**
185
- * Stashes a cURL option to be set on send, when the resource is created.
186
- *
187
- * If the supplied value it set to null the option will be removed.
188
- *
189
- * @param integer $option The option
190
- * @param mixed $value The value
191
- *
192
- * @see curl_setopt()
193
- */
194
- public function setOption($option, $value)
195
- {
196
- if (null === $value) {
197
- unset($this->options[$option]);
198
- } else {
199
- $this->options[$option] = $value;
200
- }
201
- }
202
-
203
- /**
204
- * Prepares a cURL resource to send a request.
205
- */
206
- protected function prepare($curl, RequestInterface $request, array $options = array())
207
- {
208
- static::setOptionsFromRequest($curl, $request);
209
-
210
- // apply settings from client
211
- if ($this->getTimeout() < 1) {
212
- curl_setopt($curl, CURLOPT_TIMEOUT_MS, $this->getTimeout() * 1000);
213
- } else {
214
- curl_setopt($curl, CURLOPT_TIMEOUT, $this->getTimeout());
215
- }
216
-
217
- if ($this->proxy) {
218
- curl_setopt($curl, CURLOPT_PROXY, $this->proxy);
219
- }
220
-
221
- $canFollow = !ini_get('safe_mode') && !ini_get('open_basedir');
222
-
223
- curl_setopt($curl, CURLOPT_FOLLOWLOCATION, $canFollow && $this->getMaxRedirects() > 0);
224
- curl_setopt($curl, CURLOPT_MAXREDIRS, $canFollow ? $this->getMaxRedirects() : 0);
225
- curl_setopt($curl, CURLOPT_FAILONERROR, !$this->getIgnoreErrors());
226
- curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, $this->getVerifyPeer());
227
- curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, $this->getVerifyHost());
228
-
229
- // apply additional options
230
- curl_setopt_array($curl, $options + $this->options);
231
- }
232
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/lib/Buzz/Client/AbstractStream.php DELETED
@@ -1,45 +0,0 @@
1
- <?php
2
-
3
- namespace Buzz\Client;
4
-
5
- use Buzz\Message\RequestInterface;
6
-
7
- abstract class AbstractStream extends AbstractClient
8
- {
9
- /**
10
- * Converts a request into an array for stream_context_create().
11
- *
12
- * @param RequestInterface $request A request object
13
- *
14
- * @return array An array for stream_context_create()
15
- */
16
- public function getStreamContextArray(RequestInterface $request)
17
- {
18
- $options = array(
19
- 'http' => array(
20
- // values from the request
21
- 'method' => $request->getMethod(),
22
- 'header' => implode("\r\n", $request->getHeaders()),
23
- 'content' => $request->getContent(),
24
- 'protocol_version' => $request->getProtocolVersion(),
25
-
26
- // values from the current client
27
- 'ignore_errors' => $this->getIgnoreErrors(),
28
- 'follow_location' => $this->getMaxRedirects() > 0,
29
- 'max_redirects' => $this->getMaxRedirects() + 1,
30
- 'timeout' => $this->getTimeout(),
31
- ),
32
- 'ssl' => array(
33
- 'verify_peer' => $this->getVerifyPeer(),
34
- 'verify_host' => $this->getVerifyHost(),
35
- ),
36
- );
37
-
38
- if ($this->proxy) {
39
- $options['http']['proxy'] = $this->proxy;
40
- $options['http']['request_fulluri'] = true;
41
- }
42
-
43
- return $options;
44
- }
45
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/lib/Buzz/Client/BatchClientInterface.php DELETED
@@ -1,27 +0,0 @@
1
- <?php
2
-
3
- namespace Buzz\Client;
4
-
5
- use Buzz\Exception\ClientException;
6
-
7
- /**
8
- * A client capable of running batches of requests.
9
- *
10
- * The Countable implementation should return the number of queued requests.
11
- */
12
- interface BatchClientInterface extends ClientInterface, \Countable
13
- {
14
- /**
15
- * Processes all queued requests.
16
- *
17
- * @throws ClientException If something goes wrong
18
- */
19
- public function flush();
20
-
21
- /**
22
- * Processes zero or more queued requests.
23
- *
24
- * @throws ClientException If something goes wrong
25
- */
26
- public function proceed();
27
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/lib/Buzz/Client/ClientInterface.php DELETED
@@ -1,20 +0,0 @@
1
- <?php
2
-
3
- namespace Buzz\Client;
4
-
5
- use Buzz\Exception\ClientException;
6
- use Buzz\Message\MessageInterface;
7
- use Buzz\Message\RequestInterface;
8
-
9
- interface ClientInterface
10
- {
11
- /**
12
- * Populates the supplied response with the response for the supplied request.
13
- *
14
- * @param RequestInterface $request A request object
15
- * @param MessageInterface $response A response object
16
- *
17
- * @throws ClientException If something goes wrong
18
- */
19
- public function send(RequestInterface $request, MessageInterface $response);
20
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/lib/Buzz/Client/Curl.php DELETED
@@ -1,60 +0,0 @@
1
- <?php
2
-
3
- namespace Buzz\Client;
4
-
5
- use Buzz\Exception\RequestException;
6
- use Buzz\Message\MessageInterface;
7
- use Buzz\Message\RequestInterface;
8
- use Buzz\Exception\LogicException;
9
-
10
- class Curl extends AbstractCurl
11
- {
12
- private $lastCurl;
13
-
14
- public function send(RequestInterface $request, MessageInterface $response, array $options = array())
15
- {
16
- if (is_resource($this->lastCurl)) {
17
- curl_close($this->lastCurl);
18
- }
19
-
20
- $this->lastCurl = static::createCurlHandle();
21
- $this->prepare($this->lastCurl, $request, $options);
22
-
23
- $data = curl_exec($this->lastCurl);
24
-
25
- if (false === $data) {
26
- $errorMsg = curl_error($this->lastCurl);
27
- $errorNo = curl_errno($this->lastCurl);
28
-
29
- $e = new RequestException($errorMsg, $errorNo);
30
- $e->setRequest($request);
31
-
32
- throw $e;
33
- }
34
-
35
- static::populateResponse($this->lastCurl, $data, $response);
36
- }
37
-
38
- /**
39
- * Introspects the last cURL request.
40
- *
41
- * @see curl_getinfo()
42
- *
43
- * @throws LogicException If there is no cURL resource
44
- */
45
- public function getInfo($opt = 0)
46
- {
47
- if (!is_resource($this->lastCurl)) {
48
- throw new LogicException('There is no cURL resource');
49
- }
50
-
51
- return 0 === $opt ? curl_getinfo($this->lastCurl) : curl_getinfo($this->lastCurl, $opt);
52
- }
53
-
54
- public function __destruct()
55
- {
56
- if (is_resource($this->lastCurl)) {
57
- curl_close($this->lastCurl);
58
- }
59
- }
60
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/lib/Buzz/Client/FileGetContents.php DELETED
@@ -1,51 +0,0 @@
1
- <?php
2
-
3
- namespace Buzz\Client;
4
-
5
- use Buzz\Exception\RequestException;
6
- use Buzz\Message\MessageInterface;
7
- use Buzz\Message\RequestInterface;
8
-
9
- use Buzz\Exception\ClientException;
10
-
11
- class FileGetContents extends AbstractStream
12
- {
13
- /**
14
- * @see ClientInterface
15
- *
16
- * @throws ClientException If file_get_contents() fires an error
17
- */
18
- public function send(RequestInterface $request, MessageInterface $response)
19
- {
20
- $context = stream_context_create($this->getStreamContextArray($request));
21
- $url = $request->getHost().$request->getResource();
22
-
23
- $level = error_reporting(0);
24
- $content = file_get_contents($url, 0, $context);
25
- error_reporting($level);
26
- if (false === $content) {
27
- $error = error_get_last();
28
- $e = new RequestException($error['message']);
29
- $e->setRequest($request);
30
-
31
- throw $e;
32
- }
33
-
34
- $response->setHeaders($this->filterHeaders((array) $http_response_header));
35
- $response->setContent($content);
36
- }
37
-
38
- private function filterHeaders(array $headers)
39
- {
40
- $filtered = array();
41
- foreach ($headers as $header) {
42
- if (0 === stripos($header, 'http/')) {
43
- $filtered = array();
44
- }
45
-
46
- $filtered[] = $header;
47
- }
48
-
49
- return $filtered;
50
- }
51
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/lib/Buzz/Client/MultiCurl.php DELETED
@@ -1,114 +0,0 @@
1
- <?php
2
-
3
- namespace Buzz\Client;
4
-
5
- use Buzz\Message\MessageInterface;
6
- use Buzz\Message\RequestInterface;
7
- use Buzz\Exception\ClientException;
8
-
9
- class MultiCurl extends AbstractCurl implements BatchClientInterface
10
- {
11
- private $queue = array();
12
- private $curlm;
13
-
14
- /**
15
- * Populates the supplied response with the response for the supplied request.
16
- *
17
- * The array of options will be passed to curl_setopt_array().
18
- *
19
- * If a "callback" option is supplied, its value will be called when the
20
- * request completes. The callable should have the following signature:
21
- *
22
- * $callback = function($client, $request, $response, $options, $error) {
23
- * if (!$error) {
24
- * // success
25
- * } else {
26
- * // error ($error is one of the CURLE_* constants)
27
- * }
28
- * };
29
- *
30
- * @param RequestInterface $request A request object
31
- * @param MessageInterface $response A response object
32
- * @param array $options An array of options
33
- */
34
- public function send(RequestInterface $request, MessageInterface $response, array $options = array())
35
- {
36
- $this->queue[] = array($request, $response, $options);
37
- }
38
-
39
- public function count()
40
- {
41
- return count($this->queue);
42
- }
43
-
44
- public function flush()
45
- {
46
- while ($this->queue) {
47
- $this->proceed();
48
- }
49
- }
50
-
51
- public function proceed()
52
- {
53
- if (!$this->queue) {
54
- return;
55
- }
56
-
57
- if (!$this->curlm && false === $this->curlm = curl_multi_init()) {
58
- throw new ClientException('Unable to create a new cURL multi handle');
59
- }
60
-
61
- foreach (array_keys($this->queue) as $i) {
62
- if (3 == count($this->queue[$i])) {
63
- // prepare curl handle
64
- list($request, , $options) = $this->queue[$i];
65
- $curl = static::createCurlHandle();
66
-
67
- // remove custom option
68
- unset($options['callback']);
69
-
70
- $this->prepare($curl, $request, $options);
71
- $this->queue[$i][] = $curl;
72
- curl_multi_add_handle($this->curlm, $curl);
73
- }
74
- }
75
-
76
- // process outstanding perform
77
- $active = null;
78
- do {
79
- $mrc = curl_multi_exec($this->curlm, $active);
80
- } while ($active && CURLM_CALL_MULTI_PERFORM == $mrc);
81
-
82
- // handle any completed requests
83
- while ($done = curl_multi_info_read($this->curlm)) {
84
- foreach (array_keys($this->queue) as $i) {
85
- list($request, $response, $options, $curl) = $this->queue[$i];
86
-
87
- if ($curl !== $done['handle']) {
88
- continue;
89
- }
90
-
91
- // populate the response object
92
- if (CURLE_OK === $done['result']) {
93
- static::populateResponse($curl, curl_multi_getcontent($curl), $response);
94
- }
95
-
96
- // remove from queue
97
- curl_multi_remove_handle($this->curlm, $curl);
98
- curl_close($curl);
99
- unset($this->queue[$i]);
100
-
101
- // callback
102
- if (isset($options['callback'])) {
103
- call_user_func($options['callback'], $this, $request, $response, $options, $done['result']);
104
- }
105
- }
106
- }
107
-
108
- // cleanup
109
- if (!$this->queue) {
110
- curl_multi_close($this->curlm);
111
- $this->curlm = null;
112
- }
113
- }
114
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/lib/Buzz/Exception/ClientException.php DELETED
@@ -1,10 +0,0 @@
1
- <?php
2
-
3
- namespace Buzz\Exception;
4
-
5
- /**
6
- * Thrown whenever a client process fails.
7
- */
8
- class ClientException extends RuntimeException
9
- {
10
- }
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/lib/Buzz/Exception/ExceptionInterface.php DELETED
@@ -1,10 +0,0 @@
1
- <?php
2
-
3
- namespace Buzz\Exception;
4
-
5
- /**
6
- * Marker interface to denote exceptions thrown from the Buzz context.
7
- */
8
- interface ExceptionInterface
9
- {
10
- }
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/lib/Buzz/Exception/InvalidArgumentException.php DELETED
@@ -1,10 +0,0 @@
1
- <?php
2
-
3
- namespace Buzz\Exception;
4
-
5
- /**
6
- * Thrown when an invalid argument is provided.
7
- */
8
- class InvalidArgumentException extends \InvalidArgumentException implements ExceptionInterface
9
- {
10
- }
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/lib/Buzz/Exception/LogicException.php DELETED
@@ -1,10 +0,0 @@
1
- <?php
2
-
3
- namespace Buzz\Exception;
4
-
5
- /**
6
- * Thrown whenever a required call-flow is not respected.
7
- */
8
- class LogicException extends \LogicException implements ExceptionInterface
9
- {
10
- }
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/lib/Buzz/Exception/RequestException.php DELETED
@@ -1,32 +0,0 @@
1
- <?php
2
-
3
- namespace Buzz\Exception;
4
-
5
- use Buzz\Message\RequestInterface;
6
-
7
- class RequestException extends ClientException
8
- {
9
- /**
10
- * Request object
11
- *
12
- * @var RequestInterface
13
- */
14
- private $request;
15
-
16
- /**
17
- * @return RequestInterface
18
- */
19
- public function getRequest()
20
- {
21
- return $this->request;
22
- }
23
-
24
- /**
25
- * @param RequestInterface $request
26
- */
27
- public function setRequest(RequestInterface $request)
28
- {
29
- $this->request = $request;
30
- }
31
-
32
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/lib/Buzz/Exception/RuntimeException.php DELETED
@@ -1,7 +0,0 @@
1
- <?php
2
-
3
- namespace Buzz\Exception;
4
-
5
- class RuntimeException extends \RuntimeException implements ExceptionInterface
6
- {
7
- }
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/lib/Buzz/Listener/BasicAuthListener.php DELETED
@@ -1,27 +0,0 @@
1
- <?php
2
-
3
- namespace Buzz\Listener;
4
-
5
- use Buzz\Message\MessageInterface;
6
- use Buzz\Message\RequestInterface;
7
-
8
- class BasicAuthListener implements ListenerInterface
9
- {
10
- private $username;
11
- private $password;
12
-
13
- public function __construct($username, $password)
14
- {
15
- $this->username = $username;
16
- $this->password = $password;
17
- }
18
-
19
- public function preSend(RequestInterface $request)
20
- {
21
- $request->addHeader('Authorization: Basic '.base64_encode($this->username.':'.$this->password));
22
- }
23
-
24
- public function postSend(RequestInterface $request, MessageInterface $response)
25
- {
26
- }
27
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/lib/Buzz/Listener/CallbackListener.php DELETED
@@ -1,49 +0,0 @@
1
- <?php
2
-
3
- namespace Buzz\Listener;
4
-
5
- use Buzz\Message\MessageInterface;
6
- use Buzz\Message\RequestInterface;
7
- use Buzz\Exception\InvalidArgumentException;
8
-
9
- class CallbackListener implements ListenerInterface
10
- {
11
- private $callable;
12
-
13
- /**
14
- * Constructor.
15
- *
16
- * The callback should expect either one or two arguments, depending on
17
- * whether it is receiving a pre or post send notification.
18
- *
19
- * $listener = new CallbackListener(function($request, $response = null) {
20
- * if ($response) {
21
- * // postSend
22
- * } else {
23
- * // preSend
24
- * }
25
- * });
26
- *
27
- * @param mixed $callable A PHP callable
28
- *
29
- * @throws InvalidArgumentException If the argument is not callable
30
- */
31
- public function __construct($callable)
32
- {
33
- if (!is_callable($callable)) {
34
- throw new InvalidArgumentException('The argument is not callable.');
35
- }
36
-
37
- $this->callable = $callable;
38
- }
39
-
40
- public function preSend(RequestInterface $request)
41
- {
42
- call_user_func($this->callable, $request);
43
- }
44
-
45
- public function postSend(RequestInterface $request, MessageInterface $response)
46
- {
47
- call_user_func($this->callable, $request, $response);
48
- }
49
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/lib/Buzz/Listener/CookieListener.php DELETED
@@ -1,50 +0,0 @@
1
- <?php
2
-
3
- namespace Buzz\Listener;
4
-
5
- use Buzz\Message\RequestInterface;
6
- use Buzz\Message\MessageInterface;
7
-
8
- use Buzz\Util\Cookie;
9
- use Buzz\Util\CookieJar;
10
-
11
- class CookieListener implements ListenerInterface
12
- {
13
- private $cookieJar;
14
-
15
- public function __construct()
16
- {
17
- $this->cookieJar = new CookieJar();
18
- }
19
-
20
- public function setCookies($cookies)
21
- {
22
- $this->cookieJar->setCookies($cookies);
23
- }
24
-
25
- public function getCookies()
26
- {
27
- return $this->cookieJar->getCookies();
28
- }
29
-
30
- /**
31
- * Adds a cookie to the current cookie jar.
32
- *
33
- * @param Cookie $cookie A cookie object
34
- */
35
- public function addCookie(Cookie $cookie)
36
- {
37
- $this->cookieJar->addCookie($cookie);
38
- }
39
-
40
- public function preSend(RequestInterface $request)
41
- {
42
- $this->cookieJar->clearExpiredCookies();
43
- $this->cookieJar->addCookieHeaders($request);
44
- }
45
-
46
- public function postSend(RequestInterface $request, MessageInterface $response)
47
- {
48
- $this->cookieJar->processSetCookieHeaders($request, $response);
49
- }
50
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/lib/Buzz/Listener/DigestAuthListener.php DELETED
@@ -1,837 +0,0 @@
1
- <?php
2
-
3
- namespace Buzz\Listener;
4
-
5
- use Buzz\Message\MessageInterface;
6
- use Buzz\Message\RequestInterface;
7
-
8
- class DigestAuthListener implements ListenerInterface
9
- {
10
- private $username;
11
- private $password;
12
- private $realm;
13
-
14
- private $algorithm;
15
- private $authenticationMethod;
16
- private $clientNonce;
17
- private $domain;
18
- private $entityBody;
19
- private $method;
20
- private $nonce;
21
- private $nonceCount;
22
- private $opaque;
23
- private $uri;
24
-
25
- /**
26
- * QOP options: Only one of the following can be set at any time. setOptions will throw an exception otherwise.
27
- * OPTION_QOP_AUTH_INT - Always use auth-int (if available)
28
- * OPTION_QOP_AUTH - Always use auth (even if auth-int available)
29
- */
30
- const OPTION_QOP_AUTH_INT = 1;
31
- const OPTION_QOP_AUTH = 2;
32
- /**
33
- * Ignore server request to downgrade authentication from Digest to Basic.
34
- * Breaks RFC compatibility, but ensures passwords are never sent using base64 which is trivial for an attacker to decode.
35
- */
36
- const OPTION_IGNORE_DOWNGRADE_REQUEST = 4;
37
- /**
38
- * Discard Client Nonce on each request.
39
- */
40
- const OPTION_DISCARD_CLIENT_NONCE = 8;
41
-
42
- private $options;
43
-
44
- /**
45
- * Set OPTION_QOP_BEST_AVAILABLE and OPTION_DISCARD_CLIENT_NONCE by default.
46
- */
47
- public function __construct($username = null, $password = null, $realm = null)
48
- {
49
- $this->setUsername($username);
50
- $this->setPassword($password);
51
- $this->setRealm($realm);
52
- $this->setOptions(DigestAuthListener::OPTION_QOP_AUTH_INT & DigestAuthListener::OPTION_DISCARD_CLIENT_NONCE);
53
- }
54
-
55
- /**
56
- * Passes the returned server headers to parseServerHeaders() to check if any authentication variables need to be set.
57
- * Inteprets the returned status code and attempts authentication if status is 401 (Authentication Required) by resending
58
- * the last request with an Authentication header.
59
- *
60
- * @param RequestInterface $request A request object
61
- * @param MessageInterface $response A response object
62
- */
63
- public function postSend(RequestInterface $request, MessageInterface $response)
64
- {
65
- $statusCode = $response->getStatusCode();
66
- $this->parseServerHeaders($response->getHeaders(), $statusCode);
67
- }
68
-
69
- /**
70
- * Populates uri, method and entityBody used to generate the Authentication header using the specified request object.
71
- * Appends the Authentication header if it is present and has been able to be calculated.
72
- *
73
- * @param RequestInterface $request A request object
74
- */
75
- public function preSend(RequestInterface $request)
76
- {
77
- $this->setUri($request->getResource());
78
- $this->setMethod($request->getMethod());
79
- $this->setEntityBody($request->getContent());
80
-
81
- $header = $this->getHeader();
82
- if($header) {
83
- $request->addHeader($header);
84
- }
85
- }
86
-
87
- /**
88
- * Sets the password to be used to authenticate the client.
89
- *
90
- * @param string $password The password
91
- *
92
- * @return void
93
- */
94
- public function setPassword($password)
95
- {
96
- $this->password = $password;
97
- }
98
-
99
- /**
100
- * Sets the realm to be used to authenticate the client.
101
- *
102
- * @param string $realm The realm
103
- *
104
- * @return void
105
- */
106
- public function setRealm($realm)
107
- {
108
- $this->realm = $realm;
109
- }
110
-
111
- /**
112
- * Sets the username to be used to authenticate the client.
113
- *
114
- * @param string $username The username
115
- *
116
- * @return void
117
- */
118
- public function setUsername($username)
119
- {
120
- $this->username = $username;
121
- }
122
-
123
- /**
124
- * Sets the options to be used by this class.
125
- *
126
- * @param int $options A bitmask of the constants defined in this class.
127
- *
128
- * @return void
129
- */
130
- public function setOptions($options)
131
- {
132
- if(($options & DigestAuthListener::OPTION_QOP_AUTH_INT) === true) {
133
- if(($options & DigestAuthListener::OPTION_QOP_AUTH) === true) {
134
- throw new \InvalidArgumentException('DigestAuthListener: Only one value of OPTION_QOP_AUTH_INT or OPTION_QOP_AUTH may be set.');
135
- }
136
- $this->options = $this->options | DigestAuthListener::OPTION_QOP_AUTH_INT;
137
- } else {
138
- if(($options & DigestAuthListener::OPTION_QOP_AUTH) === true) {
139
- $this->options = $this->options | DigestAuthListener::OPTION_QOP_AUTH;
140
- }
141
- }
142
-
143
- if(($options & DigestAuthListener::OPTION_IGNORE_DOWNGRADE_REQUEST) === true) {
144
- $this->options = $this->options | DigestAuthListener::OPTION_IGNORE_DOWNGRADE_REQUEST;
145
- }
146
-
147
- if(($options & DigestAuthListener::OPTION_DISCARD_CLIENT_NONCE) === true) {
148
- $this->options = $this->options | DigestAuthListener::OPTION_DISCARD_CLIENT_NONCE;
149
- }
150
- }
151
-
152
- /**
153
- * Discards the Client Nonce forcing the generation of a new Client Nonce on the next request.
154
- *
155
- * @return void
156
- */
157
- private function discardClientNonce()
158
- {
159
- $this->clientNonce = null;
160
- }
161
-
162
- /**
163
- * Returns the hashing algorithm to be used to generate the digest value. Currently only returns MD5.
164
- *
165
- * @return string The hashing algorithm to be used.
166
- */
167
- private function getAlgorithm()
168
- {
169
- if($this->algorithm == null) {
170
- $this->algorithm = 'MD5';
171
- }
172
- return $this->algorithm;
173
- }
174
-
175
- /**
176
- * Returns the authentication method requested by the server.
177
- * If OPTION_IGNORE_DOWNGRADE_REQUEST is set this will always return "Digest"
178
- *
179
- * @return string Returns either "Digest" or "Basic".
180
- */
181
- private function getAuthenticationMethod()
182
- {
183
- if(($this->options & DigestAuthListener::OPTION_IGNORE_DOWNGRADE_REQUEST) === true) {
184
- return "Digest";
185
- }
186
- return $this->authenticationMethod;
187
- }
188
-
189
- /**
190
- * Returns either the current value of clientNonce or generates a new value if clientNonce is null.
191
- * Also increments nonceCount.
192
- *
193
- * @return string Returns either the current value of clientNonce the newly generated clientNonce;
194
- */
195
- private function getClientNonce()
196
- {
197
- if($this->clientNonce == null) {
198
- $this->clientNonce = uniqid();
199
-
200
- if($this->nonceCount == null) {
201
- // If nonceCount is not set then set it to 00000001.
202
- $this->nonceCount = '00000001';
203
- } else {
204
- // If it is set then increment it.
205
- $this->nonceCount++;
206
- // Ensure nonceCount is zero-padded at the start of the string to a length of 8
207
- while(strlen($this->nonceCount) < 8) {
208
- $this->nonceCount = '0' . $this->nonceCount;
209
- }
210
- }
211
- }
212
- return $this->clientNonce;
213
- }
214
-
215
- /**
216
- * Returns a space separated list of uris that the server nonce can be used to generate an authentication response against.
217
- *
218
- * @return string Space separated list of uris.
219
- */
220
- private function getDomain()
221
- {
222
- return $this->domain;
223
- }
224
-
225
- /**
226
- * Returns the entity body of the current request.
227
- * The entity body is the request before it has been encoded with the content-encoding and minus the request headers.
228
- *
229
- * @return string The full entity-body.
230
- */
231
- private function getEntityBody()
232
- {
233
- return (string)$this->entityBody;
234
- }
235
-
236
- /**
237
- * Calculates the value of HA1 according to RFC 2617 and RFC 2069.
238
- *
239
- * @return string The value of HA1
240
- */
241
- private function getHA1()
242
- {
243
- $username = $this->getUsername();
244
- $password = $this->getPassword();
245
- $realm = $this->getRealm();
246
-
247
- if(($username) AND ($password) AND ($realm)) {
248
- $algorithm = $this->getAlgorithm();
249
-
250
- if(!isset($algorithm) OR ($algorithm == "MD5")) {
251
-
252
- $A1 = "{$username}:{$realm}:{$password}";
253
- }
254
- if($this->algorithm == "MD5-sess") {
255
-
256
- $nonce = $this->getNonce();
257
- $cnonce = $this->getClientNonce();
258
- if(($nonce) AND ($cnonce)) {
259
- $A1 = $this->hash("{$username}:{$realm}:{$password}") . ":{$nonce}:{$cnonce}";
260
- }
261
- }
262
- if(isset($A1)) {
263
- $HA1 = $this->hash($A1);
264
- return $HA1;
265
- }
266
- }
267
- return null;
268
- }
269
-
270
- /**
271
- * Calculates the value of HA2 according to RFC 2617 and RFC 2069.
272
- *
273
- * @return string The value of HA2
274
- */
275
- private function getHA2()
276
- {
277
- $method = $this->getMethod();
278
- $uri = $this->getUri();
279
-
280
- if(($method) AND ($uri)) {
281
- $qop = $this->getQOP();
282
-
283
- if(!isset($qop) OR ($qop == 'auth')) {
284
- $A2 = "{$method}:{$uri}";
285
- }
286
- if($qop == 'auth-int') {
287
- $entityBody = $this->getEntityBody();
288
- $A2 = "{$method}:{$uri}:" . $this->hash($entityBody);
289
- }
290
-
291
- if(isset($A2)) {
292
- $HA2 = $this->hash($A2);
293
- return $HA2;
294
- }
295
- }
296
- return null;
297
- }
298
-
299
- /**
300
- * Returns the full Authentication header for use in authenticating the client with either Digest or Basic authentication.
301
- *
302
- * @return string The Authentication header to be sent to the server.
303
- */
304
- private function getHeader()
305
- {
306
- if($this->getAuthenticationMethod() == 'Digest') {
307
- $username = $this->getUsername();
308
- $realm = $this->getRealm();
309
- $nonce = $this->getNonce();
310
- $response = $this->getResponse();
311
- if(($username) AND ($realm) AND ($nonce) AND ($response)) {
312
- $uri = $this->getUri();
313
- $opaque = $this->getOpaque();
314
- $domain = $this->getDomain();
315
- $qop = $this->getQOP();
316
-
317
- $header = "Authorization: Digest";
318
- $header .= " username=\"" . $username . "\",";
319
- $header .= " realm=\"" . $realm . "\",";
320
- $header .= " nonce=\"" . $nonce . "\",";
321
- $header .= " response=\"" . $response . "\",";
322
-
323
- if($uri) {
324
- $header .= " uri=\"" . $uri . "\",";
325
- }
326
- if($opaque) {
327
- $header .= " opaque=\"" . $opaque . "\",";
328
- }
329
-
330
- if($qop) {
331
- $header .= " qop=" . $qop . ",";
332
-
333
- $cnonce = $this->getClientNonce();
334
- $nc = $this->getNonceCount();
335
-
336
- if($cnonce) {
337
- $header .= " nc=" . $nc . ",";
338
- }
339
- if($cnonce) {
340
- $header .= " cnonce=\"" . $cnonce . "\",";
341
- }
342
- }
343
-
344
- // Remove the last comma from the header
345
- $header = substr($header, 0, strlen($header) - 1);
346
- // Discard the Client Nonce if OPTION_DISCARD_CLIENT_NONCE is set.
347
- if(($this->options & DigestAuthListener::OPTION_DISCARD_CLIENT_NONCE) === true) {
348
- $this->discardClientNonce();
349
- }
350
- return $header;
351
- }
352
- }
353
- if($this->getAuthenticationMethod() == 'Basic') {
354
- $username = $this->getUsername();
355
- $password = $this->getPassword();
356
- if(($username) AND ($password)) {
357
- $header = 'Authorization: Basic ' . base64_encode("{$username}:{$password}");
358
- return $header;
359
- }
360
- }
361
- return null;
362
- }
363
-
364
- /**
365
- * Returns the HTTP method used in the current request.
366
- *
367
- * @return string One of GET,POST,PUT,DELETE or HEAD.
368
- */
369
- private function getMethod()
370
- {
371
- return $this->method;
372
- }
373
-
374
- /**
375
- * Returns the value of nonce we have received in the server headers.
376
- *
377
- * @return string The value of the server nonce.
378
- */
379
- private function getNonce()
380
- {
381
- return $this->nonce;
382
- }
383
-
384
- /**
385
- * Returns the current nonce counter for the client nonce.
386
- *
387
- * @return string An eight digit zero-padded string which reflects the number of times the clientNonce has been generated.
388
- */
389
- private function getNonceCount()
390
- {
391
- return $this->nonceCount;
392
- }
393
-
394
- /**
395
- * Returns the opaque value that was sent to us from the server.
396
- *
397
- * @return string The value of opaque.
398
- */
399
- private function getOpaque()
400
- {
401
- return $this->opaque;
402
- }
403
-
404
- /**
405
- * Returns the plaintext password for the client.
406
- *
407
- * @return string The value of password.
408
- */
409
- private function getPassword()
410
- {
411
- return $this->password;
412
- }
413
-
414
- /**
415
- * Returns either the realm specified by the client, or the realm specified by the server.
416
- * If the server set the value of realm then anything set by our client is overwritten.
417
- *
418
- * @return string The value of realm.
419
- */
420
- private function getRealm()
421
- {
422
- return $this->realm;
423
- }
424
-
425
- /**
426
- * Calculates the value of response according to RFC 2617 and RFC 2069.
427
- *
428
- * @return string The value of response
429
- */
430
- private function getResponse()
431
- {
432
- $HA1 = $this->getHA1();
433
- $nonce = $this->getNonce();
434
- $HA2 = $this->getHA2();
435
-
436
- if(($HA1) AND ($nonce) AND ($HA2)) {
437
- $qop = $this->getQOP();
438
-
439
- if(!isset($qop)) {
440
- $response = $this->hash("{$HA1}:{$nonce}:{$HA2}");
441
- return $response;
442
- } else {
443
- $cnonce = $this->getClientNonce();
444
- $nc = $this->getNonceCount();
445
- if(($cnonce) AND ($nc)) {
446
- $response = $this->hash("{$HA1}:{$nonce}:{$nc}:{$cnonce}:{$qop}:{$HA2}");
447
- return $response;
448
- }
449
- }
450
- }
451
- return null;
452
- }
453
-
454
- /**
455
- * Returns the Quality of Protection to be used when authenticating with the server.
456
- *
457
- * @return string This will either be auth-int or auth.
458
- */
459
- private function getQOP()
460
- {
461
- // Has the server specified any options for Quality of Protection
462
- if(isset($this->qop) AND count($this->qop)) {
463
- if(($this->options & DigestAuthListener::OPTION_QOP_AUTH_INT) === true) {
464
- if(in_array('auth-int', $this->qop)) {
465
- return 'auth-int';
466
- }
467
- if(in_array('auth', $this->qop)) {
468
- return 'auth';
469
- }
470
- }
471
- if(($this->options & DigestAuthListener::OPTION_QOP_AUTH) === true) {
472
- if(in_array('auth', $this->qop)) {
473
- return 'auth';
474
- }
475
- if(in_array('auth-int', $this->qop)) {
476
- return 'auth-int';
477
- }
478
- }
479
- }
480
- // Server has not specified any value for Quality of Protection so return null
481
- return null;
482
- }
483
-
484
- /**
485
- * Returns the username set by the client to authenticate with the server.
486
- *
487
- * @return string The value of username
488
- */
489
- private function getUsername()
490
- {
491
- return $this->username;
492
- }
493
-
494
- /**
495
- * Returns the uri that we are requesting access to.
496
- *
497
- * @return string The value of uri
498
- */
499
- private function getUri()
500
- {
501
- return $this->uri;
502
- }
503
-
504
- /**
505
- * Calculates the hash for a given value using the algorithm specified by the server.
506
- *
507
- * @param string $value The value to be hashed
508
- *
509
- * @return string The hashed value.
510
- */
511
- private function hash($value)
512
- {
513
- $algorithm = $this->getAlgorithm();
514
- if(($algorithm == 'MD5') OR ($algorithm == 'MD5-sess')) {
515
- return hash('md5', $value);
516
- }
517
- return null;
518
- }
519
-
520
- /**
521
- * Parses the Authentication-Info header received from the server and calls the relevant setter method on each variable received.
522
- *
523
- * @param string $authenticationInfo The full Authentication-Info header.
524
- *
525
- * @return void
526
- */
527
- private function parseAuthenticationInfoHeader($authenticationInfo)
528
- {
529
- // Remove "Authentication-Info: " from start of header
530
- $wwwAuthenticate = substr($wwwAuthenticate, 21, strlen($wwwAuthenticate) - 21);
531
-
532
- $nameValuePairs = $this->parseNameValuePairs($wwwAuthenticate);
533
- foreach($nameValuePairs as $name => $value) {
534
- switch($name) {
535
- case 'message-qop':
536
-
537
- break;
538
- case 'nextnonce':
539
- // This function needs to only set the Nonce once the rspauth has been verified.
540
- $this->setNonce($value);
541
- break;
542
- case 'rspauth':
543
- // Check server rspauth value
544
- break;
545
- }
546
- }
547
- }
548
-
549
- /**
550
- * Parses a string of name=value pairs separated by commas and returns and array with the name as the index.
551
- *
552
- * @param string $nameValuePairs The string containing the name=value pairs.
553
- *
554
- * @return array An array with the name used as the index and the values stored within.
555
- */
556
- private function parseNameValuePairs($nameValuePairs)
557
- {
558
- $parsedNameValuePairs = array();
559
- $nameValuePairs = explode(',', $nameValuePairs);
560
- foreach($nameValuePairs as $nameValuePair) {
561
- // Trim the Whitespace from the start and end of the name value pair string
562
- $nameValuePair = trim($nameValuePair);
563
- // Split $nameValuePair (name=value) into $name and $value
564
- list($name, $value) = explode('=', $nameValuePair, 2);
565
- // Remove quotes if the string is quoted
566
- $value = $this->unquoteString($value);
567
- // Add pair to array[name] => value
568
- $parsedNameValuePairs[$name] = $value;
569
- }
570
- return $parsedNameValuePairs;
571
- }
572
-
573
- /**
574
- * Parses the server headers received and checks for WWW-Authenticate and Authentication-Info headers.
575
- * Calls parseWwwAuthenticateHeader() and parseAuthenticationInfoHeader() respectively if either of these headers are present.
576
- *
577
- * @param array $headers An array of the headers received by the client.
578
- *
579
- * @return void
580
- */
581
- private function parseServerHeaders(array $headers)
582
- {
583
- foreach($headers as $header) {
584
- // Check to see if the WWW-Authenticate header is present and if so set $authHeader
585
- if(strtolower(substr($header, 0, 18)) == 'www-authenticate: ') {
586
- $wwwAuthenticate = $header;
587
- $this->parseWwwAuthenticateHeader($wwwAuthenticate);
588
- }
589
- // Check to see if the Authentication-Info header is present and if so set $authInfo
590
- if(strtolower(substr($header, 0, 21)) == 'authentication-info: ') {
591
- $authenticationInfo = $header;
592
- $this->parseAuthenticationInfoHeader($wwwAuthenticate);
593
- }
594
- }
595
- }
596
-
597
- /**
598
- * Parses the WWW-Authenticate header received from the server and calls the relevant setter method on each variable received.
599
- *
600
- * @param string $wwwAuthenticate The full WWW-Authenticate header.
601
- *
602
- * @return void
603
- */
604
- private function parseWwwAuthenticateHeader($wwwAuthenticate)
605
- {
606
- // Remove "WWW-Authenticate: " from start of header
607
- $wwwAuthenticate = substr($wwwAuthenticate, 18, strlen($wwwAuthenticate) - 18);
608
- if(substr($wwwAuthenticate, 0, 7) == 'Digest ') {
609
- $this->setAuthenticationMethod('Digest');
610
- // Remove "Digest " from start of header
611
- $wwwAuthenticate = substr($wwwAuthenticate, 7, strlen($wwwAuthenticate) - 7);
612
-
613
- $nameValuePairs = $this->parseNameValuePairs($wwwAuthenticate);
614
-
615
- foreach($nameValuePairs as $name => $value) {
616
- switch($name) {
617
- case 'algorithm':
618
- $this->setAlgorithm($value);
619
- break;
620
- case 'domain':
621
- $this->setDomain($value);
622
- break;
623
- case 'nonce':
624
- $this->setNonce($value);
625
- break;
626
- case 'realm':
627
- $this->setRealm($value);
628
- break;
629
- case 'opaque':
630
- $this->setOpaque($value);
631
- break;
632
- case 'qop':
633
- $this->setQOP(explode(',', $value));
634
- break;
635
- }
636
- }
637
- }
638
- if (substr($wwwAuthenticate, 0, 6) == 'Basic ') {
639
- $this->setAuthenticationMethod('Basic');
640
- // Remove "Basic " from start of header
641
- $wwwAuthenticate = substr($wwwAuthenticate, 6, strlen($wwwAuthenticate) - 6);
642
-
643
- $nameValuePairs = $this->parseNameValuePairs($wwwAuthenticate);
644
-
645
- foreach($nameValuePairs as $name => $value) {
646
- switch($name) {
647
- case 'realm':
648
- $this->setRealm($value);
649
- break;
650
- }
651
- }
652
- }
653
- }
654
-
655
- /**
656
- * Sets the hashing algorithm to be used. Currently only uses MD5 specified by either MD5 or MD5-sess.
657
- * RFCs are currently in draft stage for the proposal of SHA-256 and SHA-512-256.
658
- * Support will be added once the RFC leaves the draft stage.
659
- *
660
- * @param string $algorithm The algorithm the server has requested to use.
661
- *
662
- * @throws \InvalidArgumentException If $algorithm is set to anything other than MD5 or MD5-sess.
663
- *
664
- * @return void
665
- */
666
- private function setAlgorithm($algorithm)
667
- {
668
- if(($algorithm == 'MD5') OR ($algorithm == 'MD5-sess')) {
669
- $this->algorithm = $algorithm;
670
- } else {
671
- throw new \InvalidArgumentException('DigestAuthListener: Only MD5 and MD5-sess algorithms are currently supported.');
672
- }
673
- }
674
-
675
- /**
676
- * Sets authentication method to be used. Options are "Digest" and "Basic".
677
- * If the server and the client are unable to authenticate using Digest then the RFCs state that the server should attempt
678
- * to authenticate the client using Basic authentication. This ensures that we adhere to that behaviour.
679
- * This does however create the possibilty of a downgrade attack so it may be an idea to add a way of disabling this functionality
680
- * as Basic authentication is trivial to decrypt and exposes the username/password to a man-in-the-middle attack.
681
- *
682
- * @param string $authenticationMethod The authentication method requested by the server.
683
- *
684
- * @throws \InvalidArgumentException If $authenticationMethod is set to anything other than Digest or Basic
685
- *
686
- * @return void
687
- */
688
- private function setAuthenticationMethod($authenticationMethod)
689
- {
690
- if(($authenticationMethod == 'Digest') OR ($authenticationMethod == 'Basic')) {
691
- $this->authenticationMethod = $authenticationMethod;
692
- } else {
693
- throw new \InvalidArgumentException('DigestAuthListener: Only Digest and Basic authentication methods are currently supported.');
694
- }
695
- }
696
-
697
- /**
698
- * Sets the domain to be authenticated against. THIS IS NOT TO BE CONFUSED WITH THE HOSTNAME/DOMAIN.
699
- * This is specified by the RFC to be a list of uris separated by spaces that the client will be allowed to access.
700
- * An RFC in draft stage is proposing the removal of this functionality, it does not seem to be in widespread use.
701
- *
702
- * @param string $domain The list of uris separated by spaces that the client will be able to access upon successful authentication.
703
- *
704
- * @return void
705
- */
706
- private function setDomain($value)
707
- {
708
- $this->domain = $value;
709
- }
710
-
711
- /**
712
- * Sets the Entity Body of the Request for use with qop=auth-int
713
- *
714
- * @param string $entityBody The body of the entity (The unencoded request minus the headers).
715
- *
716
- * @return void
717
- */
718
- private function setEntityBody($entityBody = null)
719
- {
720
- $this->entityBody = $entityBody;
721
- }
722
-
723
- /**
724
- * Sets the HTTP method being used for the request
725
- *
726
- * @param string $method The HTTP method
727
- *
728
- * @throws \InvalidArgumentException If $method is set to anything other than GET,POST,PUT,DELETE or HEAD.
729
- *
730
- * @return void
731
- */
732
- private function setMethod($method = null)
733
- {
734
- if($method == 'GET') {
735
- $this->method = 'GET';
736
- return;
737
- }
738
- if($method == 'POST') {
739
- $this->method = 'POST';
740
- return;
741
- }
742
- if($method == 'PUT') {
743
- $this->method = 'PUT';
744
- return;
745
- }
746
- if($method == 'DELETE') {
747
- $this->method = 'DELETE';
748
- return;
749
- }
750
- if($method == 'HEAD') {
751
- $this->method = 'HEAD';
752
- return;
753
- }
754
- throw new \InvalidArgumentException('DigestAuthListener: Only GET,POST,PUT,DELETE,HEAD HTTP methods are currently supported.');
755
- }
756
-
757
- /**
758
- * Sets the value of nonce
759
- *
760
- * @param string $opaque The server nonce value
761
- *
762
- * @return void
763
- */
764
- private function setNonce($nonce = null)
765
- {
766
- $this->nonce = $nonce;
767
- }
768
-
769
- /**
770
- * Sets the value of opaque
771
- *
772
- * @param string $opaque The opaque value
773
- *
774
- * @return void
775
- */
776
- private function setOpaque($opaque)
777
- {
778
- $this->opaque = $opaque;
779
- }
780
-
781
- /**
782
- * Sets the acceptable value(s) for the quality of protection used by the server. Supported values are auth and auth-int.
783
- * TODO: This method should give precedence to using qop=auth-int first as this offers integrity protection.
784
- *
785
- * @param array $qop An array with the values of qop that the server has specified it will accept.
786
- *
787
- * @throws \InvalidArgumentException If $qop contains any values other than auth-int or auth.
788
- *
789
- * @return void
790
- */
791
- private function setQOP(array $qop = array())
792
- {
793
- $this->qop = array();
794
- foreach($qop as $protection) {
795
- $protection = trim($protection);
796
- if($protection == 'auth-int') {
797
- $this->qop[] = 'auth-int';
798
- } elseif($protection == 'auth') {
799
- $this->qop[] = 'auth';
800
- } else {
801
- throw new \InvalidArgumentException('DigestAuthListener: Only auth-int and auth are supported Quality of Protection mechanisms.');
802
- }
803
- }
804
- }
805
-
806
- /**
807
- * Sets the value of uri
808
- *
809
- * @param string $uri The uri
810
- *
811
- * @return void
812
- */
813
- private function setUri($uri = null)
814
- {
815
- $this->uri = $uri;
816
- }
817
-
818
- /**
819
- * If a string contains quotation marks at either end this function will strip them. Otherwise it will remain unchanged.
820
- *
821
- * @param string $str The string to be stripped of quotation marks.
822
- *
823
- * @return string Returns the original string without the quotation marks at either end.
824
- */
825
- private function unquoteString($str = null)
826
- {
827
- if($str) {
828
- if(substr($str, 0, 1) == '"') {
829
- $str = substr($str, 1, strlen($str) - 1);
830
- }
831
- if(substr($str, strlen($str) - 1, 1) == '"') {
832
- $str = substr($str, 0, strlen($str) - 1);
833
- }
834
- }
835
- return $str;
836
- }
837
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/lib/Buzz/Listener/History/Entry.php DELETED
@@ -1,42 +0,0 @@
1
- <?php
2
-
3
- namespace Buzz\Listener\History;
4
-
5
- use Buzz\Message\MessageInterface;
6
- use Buzz\Message\RequestInterface;
7
-
8
- class Entry
9
- {
10
- private $request;
11
- private $response;
12
- private $duration;
13
-
14
- /**
15
- * Constructor.
16
- *
17
- * @param RequestInterface $request The request
18
- * @param MessageInterface $response The response
19
- * @param integer $duration The duration in seconds
20
- */
21
- public function __construct(RequestInterface $request, MessageInterface $response, $duration = null)
22
- {
23
- $this->request = $request;
24
- $this->response = $response;
25
- $this->duration = $duration;
26
- }
27
-
28
- public function getRequest()
29
- {
30
- return $this->request;
31
- }
32
-
33
- public function getResponse()
34
- {
35
- return $this->response;
36
- }
37
-
38
- public function getDuration()
39
- {
40
- return $this->duration;
41
- }
42
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/lib/Buzz/Listener/History/Journal.php DELETED
@@ -1,76 +0,0 @@
1
- <?php
2
-
3
- namespace Buzz\Listener\History;
4
-
5
- use Buzz\Message\MessageInterface;
6
- use Buzz\Message\RequestInterface;
7
-
8
- class Journal implements \Countable, \IteratorAggregate
9
- {
10
- private $entries = array();
11
- private $limit = 10;
12
-
13
- /**
14
- * Records an entry in the journal.
15
- *
16
- * @param RequestInterface $request The request
17
- * @param MessageInterface $response The response
18
- * @param integer $duration The duration in seconds
19
- */
20
- public function record(RequestInterface $request, MessageInterface $response, $duration = null)
21
- {
22
- $this->addEntry(new Entry($request, $response, $duration));
23
- }
24
-
25
- public function addEntry(Entry $entry)
26
- {
27
- array_push($this->entries, $entry);
28
- $this->entries = array_slice($this->entries, $this->getLimit() * -1);
29
- end($this->entries);
30
- }
31
-
32
- public function getEntries()
33
- {
34
- return $this->entries;
35
- }
36
-
37
- public function getLast()
38
- {
39
- return end($this->entries);
40
- }
41
-
42
- public function getLastRequest()
43
- {
44
- return $this->getLast()->getRequest();
45
- }
46
-
47
- public function getLastResponse()
48
- {
49
- return $this->getLast()->getResponse();
50
- }
51
-
52
- public function clear()
53
- {
54
- $this->entries = array();
55
- }
56
-
57
- public function count()
58
- {
59
- return count($this->entries);
60
- }
61
-
62
- public function setLimit($limit)
63
- {
64
- $this->limit = $limit;
65
- }
66
-
67
- public function getLimit()
68
- {
69
- return $this->limit;
70
- }
71
-
72
- public function getIterator()
73
- {
74
- return new \ArrayIterator(array_reverse($this->entries));
75
- }
76
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/lib/Buzz/Listener/HistoryListener.php DELETED
@@ -1,33 +0,0 @@
1
- <?php
2
-
3
- namespace Buzz\Listener;
4
-
5
- use Buzz\Listener\History\Journal;
6
- use Buzz\Message\MessageInterface;
7
- use Buzz\Message\RequestInterface;
8
-
9
- class HistoryListener implements ListenerInterface
10
- {
11
- private $journal;
12
- private $startTime;
13
-
14
- public function __construct(Journal $journal)
15
- {
16
- $this->journal = $journal;
17
- }
18
-
19
- public function getJournal()
20
- {
21
- return $this->journal;
22
- }
23
-
24
- public function preSend(RequestInterface $request)
25
- {
26
- $this->startTime = microtime(true);
27
- }
28
-
29
- public function postSend(RequestInterface $request, MessageInterface $response)
30
- {
31
- $this->journal->record($request, $response, microtime(true) - $this->startTime);
32
- }
33
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/lib/Buzz/Listener/ListenerChain.php DELETED
@@ -1,40 +0,0 @@
1
- <?php
2
-
3
- namespace Buzz\Listener;
4
-
5
- use Buzz\Message\MessageInterface;
6
- use Buzz\Message\RequestInterface;
7
-
8
- class ListenerChain implements ListenerInterface
9
- {
10
- private $listeners;
11
-
12
- public function __construct(array $listeners = array())
13
- {
14
- $this->listeners = $listeners;
15
- }
16
-
17
- public function addListener(ListenerInterface $listener)
18
- {
19
- $this->listeners[] = $listener;
20
- }
21
-
22
- public function getListeners()
23
- {
24
- return $this->listeners;
25
- }
26
-
27
- public function preSend(RequestInterface $request)
28
- {
29
- foreach ($this->listeners as $listener) {
30
- $listener->preSend($request);
31
- }
32
- }
33
-
34
- public function postSend(RequestInterface $request, MessageInterface $response)
35
- {
36
- foreach ($this->listeners as $listener) {
37
- $listener->postSend($request, $response);
38
- }
39
- }
40
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/lib/Buzz/Listener/ListenerInterface.php DELETED
@@ -1,12 +0,0 @@
1
- <?php
2
-
3
- namespace Buzz\Listener;
4
-
5
- use Buzz\Message\MessageInterface;
6
- use Buzz\Message\RequestInterface;
7
-
8
- interface ListenerInterface
9
- {
10
- public function preSend(RequestInterface $request);
11
- public function postSend(RequestInterface $request, MessageInterface $response);
12
- }
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/lib/Buzz/Listener/LoggerListener.php DELETED
@@ -1,36 +0,0 @@
1
- <?php
2
-
3
- namespace Buzz\Listener;
4
-
5
- use Buzz\Message\MessageInterface;
6
- use Buzz\Message\RequestInterface;
7
- use Buzz\Exception\InvalidArgumentException;
8
-
9
- class LoggerListener implements ListenerInterface
10
- {
11
- private $logger;
12
- private $prefix;
13
- private $startTime;
14
-
15
- public function __construct($logger, $prefix = null)
16
- {
17
- if (!is_callable($logger)) {
18
- throw new InvalidArgumentException('The logger must be a callable.');
19
- }
20
-
21
- $this->logger = $logger;
22
- $this->prefix = $prefix;
23
- }
24
-
25
- public function preSend(RequestInterface $request)
26
- {
27
- $this->startTime = microtime(true);
28
- }
29
-
30
- public function postSend(RequestInterface $request, MessageInterface $response)
31
- {
32
- $seconds = microtime(true) - $this->startTime;
33
-
34
- call_user_func($this->logger, sprintf('%sSent "%s %s%s" in %dms', $this->prefix, $request->getMethod(), $request->getHost(), $request->getResource(), round($seconds * 1000)));
35
- }
36
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/lib/Buzz/Message/AbstractMessage.php DELETED
@@ -1,154 +0,0 @@
1
- <?php
2
-
3
- namespace Buzz\Message;
4
-
5
- abstract class AbstractMessage implements MessageInterface
6
- {
7
- private $headers = array();
8
- private $content;
9
-
10
- /**
11
- * Returns the value of a header.
12
- *
13
- * @param string $name
14
- * @param string|boolean $glue Glue for implode, or false to return an array
15
- *
16
- * @return string|array|null
17
- */
18
- public function getHeader($name, $glue = "\r\n")
19
- {
20
- $needle = $name.':';
21
-
22
- $values = array();
23
- foreach ($this->getHeaders() as $header) {
24
- if (0 === stripos($header, $needle)) {
25
- $values[] = trim(substr($header, strlen($needle)));
26
- }
27
- }
28
-
29
- if (false === $glue) {
30
- return $values;
31
- } else {
32
- return count($values) ? implode($glue, $values) : null;
33
- }
34
- }
35
-
36
- /**
37
- * Returns a header's attributes.
38
- *
39
- * @param string $name A header name
40
- *
41
- * @return array An associative array of attributes
42
- */
43
- public function getHeaderAttributes($name)
44
- {
45
- $attributes = array();
46
- foreach ($this->getHeader($name, false) as $header) {
47
- if (false !== strpos($header, ';')) {
48
- // remove header value
49
- list(, $header) = explode(';', $header, 2);
50
-
51
- // loop through attribute key=value pairs
52
- foreach (array_map('trim', explode(';', trim($header))) as $pair) {
53
- list($key, $value) = explode('=', $pair);
54
- $attributes[$key] = $value;
55
- }
56
- }
57
- }
58
-
59
- return $attributes;
60
- }
61
-
62
- /**
63
- * Returns the value of a particular header attribute.
64
- *
65
- * @param string $header A header name
66
- * @param string $attribute An attribute name
67
- *
68
- * @return string|null The value of the attribute or null if it isn't set
69
- */
70
- public function getHeaderAttribute($header, $attribute)
71
- {
72
- $attributes = $this->getHeaderAttributes($header);
73
-
74
- if (isset($attributes[$attribute])) {
75
- return $attributes[$attribute];
76
- }
77
- }
78
-
79
- /**
80
- * Returns the current message as a DOMDocument.
81
- *
82
- * @return \DOMDocument
83
- */
84
- public function toDomDocument()
85
- {
86
- $revert = libxml_use_internal_errors(true);
87
-
88
- $document = new \DOMDocument('1.0', $this->getHeaderAttribute('Content-Type', 'charset') ?: 'UTF-8');
89
- if (0 === strpos($this->getHeader('Content-Type'), 'text/xml')) {
90
- $document->loadXML($this->getContent());
91
- } else {
92
- $document->loadHTML($this->getContent());
93
- }
94
-
95
- libxml_use_internal_errors($revert);
96
-
97
- return $document;
98
- }
99
-
100
- public function setHeaders(array $headers)
101
- {
102
- $this->headers = $this->flattenHeaders($headers);
103
- }
104
-
105
- public function addHeader($header)
106
- {
107
- $this->headers[] = $header;
108
- }
109
-
110
- public function addHeaders(array $headers)
111
- {
112
- $this->headers = array_merge($this->headers, $this->flattenHeaders($headers));
113
- }
114
-
115
- public function getHeaders()
116
- {
117
- return $this->headers;
118
- }
119
-
120
- public function setContent($content)
121
- {
122
- $this->content = $content;
123
- }
124
-
125
- public function getContent()
126
- {
127
- return $this->content;
128
- }
129
-
130
- public function __toString()
131
- {
132
- $string = implode("\r\n", $this->getHeaders())."\r\n";
133
-
134
- if ($content = $this->getContent()) {
135
- $string .= "\r\n$content\r\n";
136
- }
137
-
138
- return $string;
139
- }
140
-
141
- protected function flattenHeaders(array $headers)
142
- {
143
- $flattened = array();
144
- foreach ($headers as $key => $header) {
145
- if (is_int($key)) {
146
- $flattened[] = $header;
147
- } else {
148
- $flattened[] = $key.': '.$header;
149
- }
150
- }
151
-
152
- return $flattened;
153
- }
154
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/lib/Buzz/Message/Factory/Factory.php DELETED
@@ -1,26 +0,0 @@
1
- <?php
2
-
3
- namespace Buzz\Message\Factory;
4
-
5
- use Buzz\Message\Form\FormRequest;
6
- use Buzz\Message\Request;
7
- use Buzz\Message\RequestInterface;
8
- use Buzz\Message\Response;
9
-
10
- class Factory implements FactoryInterface
11
- {
12
- public function createRequest($method = RequestInterface::METHOD_GET, $resource = '/', $host = null)
13
- {
14
- return new Request($method, $resource, $host);
15
- }
16
-
17
- public function createFormRequest($method = RequestInterface::METHOD_POST, $resource = '/', $host = null)
18
- {
19
- return new FormRequest($method, $resource, $host);
20
- }
21
-
22
- public function createResponse()
23
- {
24
- return new Response();
25
- }
26
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/lib/Buzz/Message/Factory/FactoryInterface.php DELETED
@@ -1,12 +0,0 @@
1
- <?php
2
-
3
- namespace Buzz\Message\Factory;
4
-
5
- use Buzz\Message\RequestInterface;
6
-
7
- interface FactoryInterface
8
- {
9
- public function createRequest($method = RequestInterface::METHOD_GET, $resource = '/', $host = null);
10
- public function createFormRequest($method = RequestInterface::METHOD_POST, $resource = '/', $host = null);
11
- public function createResponse();
12
- }
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/lib/Buzz/Message/Form/FormRequest.php DELETED
@@ -1,187 +0,0 @@
1
- <?php
2
-
3
- namespace Buzz\Message\Form;
4
-
5
- use Buzz\Message\Request;
6
- use Buzz\Exception\LogicException;
7
-
8
- /**
9
- * FormRequest.
10
- *
11
- * $request = new FormRequest();
12
- * $request->setField('user[name]', 'Kris Wallsmith');
13
- * $request->setField('user[image]', new FormUpload('/path/to/image.jpg'));
14
- *
15
- * @author Marc Weistroff <marc.weistroff@sensio.com>
16
- * @author Kris Wallsmith <kris.wallsmith@gmail.com>
17
- */
18
- class FormRequest extends Request implements FormRequestInterface
19
- {
20
- private $fields = array();
21
- private $boundary;
22
-
23
- /**
24
- * Constructor.
25
- *
26
- * Defaults to POST rather than GET.
27
- */
28
- public function __construct($method = self::METHOD_POST, $resource = '/', $host = null)
29
- {
30
- parent::__construct($method, $resource, $host);
31
- }
32
-
33
- /**
34
- * Sets the value of a form field.
35
- *
36
- * If the value is an array it will be flattened and one field value will
37
- * be added for each leaf.
38
- */
39
- public function setField($name, $value)
40
- {
41
- if (is_array($value)) {
42
- $this->addFields(array($name => $value));
43
-
44
- return;
45
- }
46
-
47
- if ('[]' == substr($name, -2)) {
48
- $this->fields[substr($name, 0, -2)][] = $value;
49
- } else {
50
- $this->fields[$name] = $value;
51
- }
52
- }
53
-
54
- public function addFields(array $fields)
55
- {
56
- foreach ($this->flattenArray($fields) as $name => $value) {
57
- $this->setField($name, $value);
58
- }
59
- }
60
-
61
- public function setFields(array $fields)
62
- {
63
- $this->fields = array();
64
- $this->addFields($fields);
65
- }
66
-
67
- public function getFields()
68
- {
69
- return $this->fields;
70
- }
71
-
72
- public function getResource()
73
- {
74
- $resource = parent::getResource();
75
-
76
- if (!$this->isSafe() || !$this->fields) {
77
- return $resource;
78
- }
79
-
80
- // append the query string
81
- $resource .= false === strpos($resource, '?') ? '?' : '&';
82
- $resource .= http_build_query($this->fields);
83
-
84
- return $resource;
85
- }
86
-
87
- public function setContent($content)
88
- {
89
- throw new \BadMethodCallException('It is not permitted to set the content.');
90
- }
91
-
92
- public function getHeaders()
93
- {
94
- $headers = parent::getHeaders();
95
-
96
- if ($this->isSafe()) {
97
- return $headers;
98
- }
99
-
100
- if ($this->isMultipart()) {
101
- $headers[] = 'Content-Type: multipart/form-data; boundary='.$this->getBoundary();
102
- } else {
103
- $headers[] = 'Content-Type: application/x-www-form-urlencoded';
104
- }
105
-
106
- return $headers;
107
- }
108
-
109
- public function getContent()
110
- {
111
- if ($this->isSafe()) {
112
- return;
113
- }
114
-
115
- if (!$this->isMultipart()) {
116
- return http_build_query($this->fields, '', '&');
117
- }
118
-
119
- $content = '';
120
-
121
- foreach ($this->fields as $name => $values) {
122
- $content .= '--'.$this->getBoundary()."\r\n";
123
- if ($values instanceof FormUploadInterface) {
124
- if (!$values->getFilename()) {
125
- throw new LogicException(sprintf('Form upload at "%s" does not include a filename.', $name));
126
- }
127
-
128
- $values->setName($name);
129
- $content .= (string) $values;
130
- } else {
131
- foreach (is_array($values) ? $values : array($values) as $value) {
132
- $content .= "Content-Disposition: form-data; name=\"$name\"\r\n";
133
- $content .= "\r\n";
134
- $content .= $value."\r\n";
135
- }
136
- }
137
- }
138
-
139
- $content .= '--'.$this->getBoundary().'--';
140
-
141
- return $content;
142
- }
143
-
144
- // private
145
-
146
- private function flattenArray(array $values, $prefix = '', $format = '%s')
147
- {
148
- $flat = array();
149
-
150
- foreach ($values as $name => $value) {
151
- $flatName = $prefix.sprintf($format, $name);
152
-
153
- if (is_array($value)) {
154
- $flat += $this->flattenArray($value, $flatName, '[%s]');
155
- } else {
156
- $flat[$flatName] = $value;
157
- }
158
- }
159
-
160
- return $flat;
161
- }
162
-
163
- private function isSafe()
164
- {
165
- return in_array($this->getMethod(), array(self::METHOD_GET, self::METHOD_HEAD));
166
- }
167
-
168
- private function isMultipart()
169
- {
170
- foreach ($this->fields as $name => $value) {
171
- if (is_object($value) && $value instanceof FormUploadInterface) {
172
- return true;
173
- }
174
- }
175
-
176
- return false;
177
- }
178
-
179
- private function getBoundary()
180
- {
181
- if (!$this->boundary) {
182
- $this->boundary = sha1(rand(11111, 99999).time().uniqid());
183
- }
184
-
185
- return $this->boundary;
186
- }
187
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/lib/Buzz/Message/Form/FormRequestInterface.php DELETED
@@ -1,27 +0,0 @@
1
- <?php
2
-
3
- namespace Buzz\Message\Form;
4
-
5
- use Buzz\Message\RequestInterface;
6
-
7
- /**
8
- * An HTTP request message sent by a web form.
9
- *
10
- * @author Kris Wallsmith <kris.wallsmith@gmail.com>
11
- */
12
- interface FormRequestInterface extends RequestInterface
13
- {
14
- /**
15
- * Returns an array of field names and values.
16
- *
17
- * @return array A array of names and values
18
- */
19
- public function getFields();
20
-
21
- /**
22
- * Sets the form fields for the current request.
23
- *
24
- * @param array $fields An array of field names and values
25
- */
26
- public function setFields(array $fields);
27
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/lib/Buzz/Message/Form/FormUpload.php DELETED
@@ -1,118 +0,0 @@
1
- <?php
2
-
3
- namespace Buzz\Message\Form;
4
-
5
- use Buzz\Message\AbstractMessage;
6
-
7
- class FormUpload extends AbstractMessage implements FormUploadInterface
8
- {
9
- private $name;
10
- private $filename;
11
- private $contentType;
12
- private $file;
13
-
14
- public function __construct($file = null, $contentType = null)
15
- {
16
- if ($file) {
17
- $this->loadContent($file);
18
- }
19
-
20
- $this->contentType = $contentType;
21
- }
22
-
23
- public function getName()
24
- {
25
- return $this->name;
26
- }
27
-
28
- public function setName($name)
29
- {
30
- $this->name = $name;
31
- }
32
-
33
- public function getFilename()
34
- {
35
- if ($this->filename) {
36
- return $this->filename;
37
- } elseif ($this->file) {
38
- return basename($this->file);
39
- }
40
- }
41
-
42
- public function setFilename($filename)
43
- {
44
- $this->filename = $filename;
45
- }
46
-
47
- public function getContentType()
48
- {
49
- return $this->contentType ?: $this->detectContentType() ?: 'application/octet-stream';
50
- }
51
-
52
- public function setContentType($contentType)
53
- {
54
- $this->contentType = $contentType;
55
- }
56
-
57
- /**
58
- * Prepends Content-Disposition and Content-Type headers.
59
- */
60
- public function getHeaders()
61
- {
62
- $headers = array('Content-Disposition: form-data');
63
-
64
- if ($name = $this->getName()) {
65
- $headers[0] .= sprintf('; name="%s"', $name);
66
- }
67
-
68
- if ($filename = $this->getFilename()) {
69
- $headers[0] .= sprintf('; filename="%s"', $filename);
70
- }
71
-
72
- if ($contentType = $this->getContentType()) {
73
- $headers[] = 'Content-Type: '.$contentType;
74
- }
75
-
76
- return array_merge($headers, parent::getHeaders());
77
- }
78
-
79
- /**
80
- * Loads the content from a file.
81
- */
82
- public function loadContent($file)
83
- {
84
- $this->file = $file;
85
-
86
- parent::setContent(null);
87
- }
88
-
89
- public function setContent($content)
90
- {
91
- parent::setContent($content);
92
-
93
- $this->file = null;
94
- }
95
-
96
- public function getFile()
97
- {
98
- return $this->file;
99
- }
100
-
101
- public function getContent()
102
- {
103
- return $this->file ? file_get_contents($this->file) : parent::getContent();
104
- }
105
-
106
- // private
107
-
108
- private function detectContentType()
109
- {
110
- if (!class_exists('finfo', false)) {
111
- return false;
112
- }
113
-
114
- $finfo = new \finfo(FILEINFO_MIME_TYPE);
115
-
116
- return $this->file ? $finfo->file($this->file) : $finfo->buffer(parent::getContent());
117
- }
118
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/lib/Buzz/Message/Form/FormUploadInterface.php DELETED
@@ -1,13 +0,0 @@
1
- <?php
2
-
3
- namespace Buzz\Message\Form;
4
-
5
- use Buzz\Message\MessageInterface;
6
-
7
- interface FormUploadInterface extends MessageInterface
8
- {
9
- public function setName($name);
10
- public function getFile();
11
- public function getFilename();
12
- public function getContentType();
13
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/lib/Buzz/Message/MessageInterface.php DELETED
@@ -1,74 +0,0 @@
1
- <?php
2
-
3
- namespace Buzz\Message;
4
-
5
- /**
6
- * An HTTP message.
7
- *
8
- * @author Kris Wallsmith <kris.wallsmith@gmail.com>
9
- */
10
- interface MessageInterface
11
- {
12
- /**
13
- * Returns a header value.
14
- *
15
- * @param string $name A header name
16
- * @param string|boolean $glue Glue for implode, or false to return an array
17
- *
18
- * @return string|array|null The header value(s)
19
- */
20
- public function getHeader($name, $glue = "\r\n");
21
-
22
- /**
23
- * Returns an array of header lines.
24
- *
25
- * @return array An array of header lines (integer indexes, e.g. ["Header: value"])
26
- */
27
- public function getHeaders();
28
-
29
- /**
30
- * Sets all headers on the current message.
31
- *
32
- * Headers can be complete ["Header: value"] pairs or an associative array ["Header" => "value"]
33
- *
34
- * @param array $headers An array of header lines
35
- */
36
- public function setHeaders(array $headers);
37
-
38
- /**
39
- * Adds a header to this message.
40
- *
41
- * @param string $header A header line
42
- */
43
- public function addHeader($header);
44
-
45
- /**
46
- * Adds a set of headers to this message.
47
- *
48
- * Headers can be complete ["Header: value"] pairs or an associative array ["Header" => "value"]
49
- *
50
- * @param array $headers Headers
51
- */
52
- public function addHeaders(array $headers);
53
-
54
- /**
55
- * Returns the content of the message.
56
- *
57
- * @return string The message content
58
- */
59
- public function getContent();
60
-
61
- /**
62
- * Sets the content of the message.
63
- *
64
- * @param string $content The message content
65
- */
66
- public function setContent($content);
67
-
68
- /**
69
- * Returns the message document.
70
- *
71
- * @return string The message
72
- */
73
- public function __toString();
74
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/lib/Buzz/Message/Request.php DELETED
@@ -1,174 +0,0 @@
1
- <?php
2
-
3
- namespace Buzz\Message;
4
-
5
- use Buzz\Util\Url;
6
-
7
- class Request extends AbstractMessage implements RequestInterface
8
- {
9
- private $method;
10
- private $resource;
11
- private $host;
12
- private $protocolVersion = 1.1;
13
-
14
- /**
15
- * Constructor.
16
- *
17
- * @param string $method
18
- * @param string $resource
19
- * @param string $host
20
- */
21
- public function __construct($method = self::METHOD_GET, $resource = '/', $host = null)
22
- {
23
- $this->method = strtoupper($method);
24
- $this->resource = $resource;
25
- $this->host = $host;
26
- }
27
-
28
- public function setHeaders(array $headers)
29
- {
30
- parent::setHeaders(array());
31
-
32
- foreach ($this->flattenHeaders($headers) as $header) {
33
- $this->addHeader($header);
34
- }
35
- }
36
-
37
- public function addHeader($header)
38
- {
39
- if (0 === stripos(substr($header, -8), 'HTTP/1.') && 3 == count($parts = explode(' ', $header))) {
40
- list($method, $resource, $protocolVersion) = $parts;
41
-
42
- $this->setMethod($method);
43
- $this->setResource($resource);
44
- $this->setProtocolVersion((float) substr($protocolVersion, 5));
45
- } else {
46
- parent::addHeader($header);
47
- }
48
- }
49
-
50
- public function setMethod($method)
51
- {
52
- $this->method = strtoupper($method);
53
- }
54
-
55
- public function getMethod()
56
- {
57
- return $this->method;
58
- }
59
-
60
- public function setResource($resource)
61
- {
62
- $this->resource = $resource;
63
- }
64
-
65
- public function getResource()
66
- {
67
- return $this->resource;
68
- }
69
-
70
- public function setHost($host)
71
- {
72
- $this->host = $host;
73
- }
74
-
75
- public function getHost()
76
- {
77
- return $this->host;
78
- }
79
-
80
- public function setProtocolVersion($protocolVersion)
81
- {
82
- $this->protocolVersion = $protocolVersion;
83
- }
84
-
85
- public function getProtocolVersion()
86
- {
87
- return $this->protocolVersion;
88
- }
89
-
90
- /**
91
- * A convenience method for getting the full URL of the current request.
92
- *
93
- * @return string
94
- */
95
- public function getUrl()
96
- {
97
- return $this->getHost().$this->getResource();
98
- }
99
-
100
- /**
101
- * A convenience method for populating the current request from a URL.
102
- *
103
- * @param Url|string $url An URL
104
- */
105
- public function fromUrl($url)
106
- {
107
- if (!$url instanceof Url) {
108
- $url = new Url($url);
109
- }
110
-
111
- $url->applyToRequest($this);
112
- }
113
-
114
- /**
115
- * Returns true if the current request is secure.
116
- *
117
- * @return boolean
118
- */
119
- public function isSecure()
120
- {
121
- return 'https' == parse_url($this->getHost(), PHP_URL_SCHEME);
122
- }
123
-
124
- /**
125
- * Merges cookie headers on the way out.
126
- */
127
- public function getHeaders()
128
- {
129
- return $this->mergeCookieHeaders(parent::getHeaders());
130
- }
131
-
132
- /**
133
- * Returns a string representation of the current request.
134
- *
135
- * @return string
136
- */
137
- public function __toString()
138
- {
139
- $string = sprintf("%s %s HTTP/%.1f\r\n", $this->getMethod(), $this->getResource(), $this->getProtocolVersion());
140
-
141
- if ($host = $this->getHost()) {
142
- $string .= 'Host: '.$host."\r\n";
143
- }
144
-
145
- if ($parent = trim(parent::__toString())) {
146
- $string .= $parent."\r\n";
147
- }
148
-
149
- return $string;
150
- }
151
-
152
- // private
153
-
154
- private function mergeCookieHeaders(array $headers)
155
- {
156
- $cookieHeader = null;
157
- $needle = 'Cookie:';
158
-
159
- foreach ($headers as $i => $header) {
160
- if (0 !== stripos($header, $needle)) {
161
- continue;
162
- }
163
-
164
- if (null === $cookieHeader) {
165
- $cookieHeader = $i;
166
- } else {
167
- $headers[$cookieHeader] .= '; '.trim(substr($header, strlen($needle)));
168
- unset($headers[$i]);
169
- }
170
- }
171
-
172
- return array_values($headers);
173
- }
174
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/lib/Buzz/Message/RequestInterface.php DELETED
@@ -1,75 +0,0 @@
1
- <?php
2
-
3
- namespace Buzz\Message;
4
-
5
- /**
6
- * An HTTP request message.
7
- *
8
- * @author Kris Wallsmith <kris.wallsmith@gmail.com>
9
- */
10
- interface RequestInterface extends MessageInterface
11
- {
12
- const METHOD_OPTIONS = 'OPTIONS';
13
- const METHOD_GET = 'GET';
14
- const METHOD_HEAD = 'HEAD';
15
- const METHOD_POST = 'POST';
16
- const METHOD_PUT = 'PUT';
17
- const METHOD_DELETE = 'DELETE';
18
- const METHOD_PATCH = 'PATCH';
19
-
20
- /**
21
- * Returns the HTTP method of the current request.
22
- *
23
- * @return string An HTTP method
24
- */
25
- public function getMethod();
26
-
27
- /**
28
- * Sets the HTTP method of the current request.
29
- *
30
- * @param string $method The request method
31
- */
32
- public function setMethod($method);
33
-
34
- /**
35
- * Returns the resource portion of the request line.
36
- *
37
- * @return string The resource requested
38
- */
39
- public function getResource();
40
-
41
- /**
42
- * Sets the resource for the current request.
43
- *
44
- * @param string $resource The resource being requested
45
- */
46
- public function setResource($resource);
47
-
48
- /**
49
- * Returns the protocol version of the current request.
50
- *
51
- * @return float The protocol version
52
- */
53
- public function getProtocolVersion();
54
-
55
- /**
56
- * Returns the value of the host header.
57
- *
58
- * @return string|null The host
59
- */
60
- public function getHost();
61
-
62
- /**
63
- * Sets the host for the current request.
64
- *
65
- * @param string $host The host
66
- */
67
- public function setHost($host);
68
-
69
- /**
70
- * Checks if the current request is secure.
71
- *
72
- * @return Boolean True if the request is secure
73
- */
74
- public function isSecure();
75
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/lib/Buzz/Message/Response.php DELETED
@@ -1,193 +0,0 @@
1
- <?php
2
-
3
- namespace Buzz\Message;
4
-
5
- class Response extends AbstractMessage
6
- {
7
- private $protocolVersion;
8
- private $statusCode;
9
- private $reasonPhrase;
10
-
11
- /**
12
- * Returns the protocol version of the current response.
13
- *
14
- * @return float
15
- */
16
- public function getProtocolVersion()
17
- {
18
- if (null === $this->protocolVersion) {
19
- $this->parseStatusLine();
20
- }
21
-
22
- return $this->protocolVersion ?: null;
23
- }
24
-
25
- /**
26
- * Returns the status code of the current response.
27
- *
28
- * @return integer
29
- */
30
- public function getStatusCode()
31
- {
32
- if (null === $this->statusCode) {
33
- $this->parseStatusLine();
34
- }
35
-
36
- return $this->statusCode ?: null;
37
- }
38
-
39
- /**
40
- * Returns the reason phrase for the current response.
41
- *
42
- * @return string
43
- */
44
- public function getReasonPhrase()
45
- {
46
- if (null === $this->reasonPhrase) {
47
- $this->parseStatusLine();
48
- }
49
-
50
- return $this->reasonPhrase ?: null;
51
- }
52
-
53
- public function setHeaders(array $headers)
54
- {
55
- parent::setHeaders($headers);
56
-
57
- $this->resetStatusLine();
58
- }
59
-
60
- public function addHeader($header)
61
- {
62
- parent::addHeader($header);
63
-
64
- $this->resetStatusLine();
65
- }
66
-
67
- public function addHeaders(array $headers)
68
- {
69
- parent::addHeaders($headers);
70
-
71
- $this->resetStatusLine();
72
- }
73
-
74
- /**
75
- * Is response invalid?
76
- *
77
- * @return Boolean
78
- */
79
- public function isInvalid()
80
- {
81
- return $this->getStatusCode() < 100 || $this->getStatusCode() >= 600;
82
- }
83
-
84
- /**
85
- * Is response informative?
86
- *
87
- * @return Boolean
88
- */
89
- public function isInformational()
90
- {
91
- return $this->getStatusCode() >= 100 && $this->getStatusCode() < 200;
92
- }
93
-
94
- /**
95
- * Is response successful?
96
- *
97
- * @return Boolean
98
- */
99
- public function isSuccessful()
100
- {
101
- return $this->getStatusCode() >= 200 && $this->getStatusCode() < 300;
102
- }
103
-
104
- /**
105
- * Is the response a redirect?
106
- *
107
- * @return Boolean
108
- */
109
- public function isRedirection()
110
- {
111
- return $this->getStatusCode() >= 300 && $this->getStatusCode() < 400;
112
- }
113
-
114
- /**
115
- * Is there a client error?
116
- *
117
- * @return Boolean
118
- */
119
- public function isClientError()
120
- {
121
- return $this->getStatusCode() >= 400 && $this->getStatusCode() < 500;
122
- }
123
-
124
- /**
125
- * Was there a server side error?
126
- *
127
- * @return Boolean
128
- */
129
- public function isServerError()
130
- {
131
- return $this->getStatusCode() >= 500 && $this->getStatusCode() < 600;
132
- }
133
-
134
- /**
135
- * Is the response OK?
136
- *
137
- * @return Boolean
138
- */
139
- public function isOk()
140
- {
141
- return 200 === $this->getStatusCode();
142
- }
143
-
144
- /**
145
- * Is the reponse forbidden?
146
- *
147
- * @return Boolean
148
- */
149
- public function isForbidden()
150
- {
151
- return 403 === $this->getStatusCode();
152
- }
153
-
154
- /**
155
- * Is the response a not found error?
156
- *
157
- * @return Boolean
158
- */
159
- public function isNotFound()
160
- {
161
- return 404 === $this->getStatusCode();
162
- }
163
-
164
- /**
165
- * Is the response empty?
166
- *
167
- * @return Boolean
168
- */
169
- public function isEmpty()
170
- {
171
- return in_array($this->getStatusCode(), array(201, 204, 304));
172
- }
173
-
174
- // private
175
-
176
- private function parseStatusLine()
177
- {
178
- $headers = $this->getHeaders();
179
-
180
- if (isset($headers[0]) && 3 == count($parts = explode(' ', $headers[0], 3))) {
181
- $this->protocolVersion = (float) substr($parts[0], 5);
182
- $this->statusCode = (integer) $parts[1];
183
- $this->reasonPhrase = $parts[2];
184
- } else {
185
- $this->protocolVersion = $this->statusCode = $this->reasonPhrase = false;
186
- }
187
- }
188
-
189
- private function resetStatusLine()
190
- {
191
- $this->protocolVersion = $this->statusCode = $this->reasonPhrase = null;
192
- }
193
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/lib/Buzz/Util/Cookie.php DELETED
@@ -1,216 +0,0 @@
1
- <?php
2
-
3
- namespace Buzz\Util;
4
-
5
- use Buzz\Message\RequestInterface;
6
-
7
- class Cookie
8
- {
9
- const ATTR_DOMAIN = 'domain';
10
- const ATTR_PATH = 'path';
11
- const ATTR_SECURE = 'secure';
12
- const ATTR_MAX_AGE = 'max-age';
13
- const ATTR_EXPIRES = 'expires';
14
-
15
- protected $name;
16
- protected $value;
17
- protected $attributes = array();
18
- protected $createdAt;
19
-
20
- /**
21
- * Constructor.
22
- */
23
- public function __construct()
24
- {
25
- $this->createdAt = time();
26
- }
27
-
28
- /**
29
- * Returns true if the current cookie matches the supplied request.
30
- *
31
- * @return boolean
32
- */
33
- public function matchesRequest(RequestInterface $request)
34
- {
35
- // domain
36
- if (!$this->matchesDomain(parse_url($request->getHost(), PHP_URL_HOST))) {
37
- return false;
38
- }
39
-
40
- // path
41
- if (!$this->matchesPath($request->getResource())) {
42
- return false;
43
- }
44
-
45
- // secure
46
- if ($this->hasAttribute(static::ATTR_SECURE) && !$request->isSecure()) {
47
- return false;
48
- }
49
-
50
- return true;
51
- }
52
-
53
- /**
54
- * Returns true of the current cookie has expired.
55
- *
56
- * Checks the max-age and expires attributes.
57
- *
58
- * @return boolean Whether the current cookie has expired
59
- */
60
- public function isExpired()
61
- {
62
- $maxAge = $this->getAttribute(static::ATTR_MAX_AGE);
63
- if ($maxAge && time() - $this->getCreatedAt() > $maxAge) {
64
- return true;
65
- }
66
-
67
- $expires = $this->getAttribute(static::ATTR_EXPIRES);
68
- if ($expires && strtotime($expires) < time()) {
69
- return true;
70
- }
71
-
72
- return false;
73
- }
74
-
75
- /**
76
- * Returns true if the current cookie matches the supplied domain.
77
- *
78
- * @param string $domain A domain hostname
79
- *
80
- * @return boolean
81
- */
82
- public function matchesDomain($domain)
83
- {
84
- $cookieDomain = $this->getAttribute(static::ATTR_DOMAIN);
85
-
86
- if (0 === strpos($cookieDomain, '.')) {
87
- $pattern = '/\b'.preg_quote(substr($cookieDomain, 1), '/').'$/i';
88
-
89
- return (boolean) preg_match($pattern, $domain);
90
- } else {
91
- return 0 == strcasecmp($cookieDomain, $domain);
92
- }
93
- }
94
-
95
- /**
96
- * Returns true if the current cookie matches the supplied path.
97
- *
98
- * @param string $path A path
99
- *
100
- * @return boolean
101
- */
102
- public function matchesPath($path)
103
- {
104
- $needle = $this->getAttribute(static::ATTR_PATH);
105
-
106
- return null === $needle || 0 === strpos($path, $needle);
107
- }
108
-
109
- /**
110
- * Populates the current cookie with data from the supplied Set-Cookie header.
111
- *
112
- * @param string $header A Set-Cookie header
113
- * @param string $issuingDomain The domain that issued the header
114
- */
115
- public function fromSetCookieHeader($header, $issuingDomain)
116
- {
117
- list($this->name, $header) = explode('=', $header, 2);
118
- if (false === strpos($header, ';')) {
119
- $this->value = $header;
120
- $header = null;
121
- } else {
122
- list($this->value, $header) = explode(';', $header, 2);
123
- }
124
-
125
- $this->clearAttributes();
126
- foreach (array_map('trim', explode(';', trim($header))) as $pair) {
127
- if (false === strpos($pair, '=')) {
128
- $name = $pair;
129
- $value = null;
130
- } else {
131
- list($name, $value) = explode('=', $pair);
132
- }
133
-
134
- $this->setAttribute($name, $value);
135
- }
136
-
137
- if (!$this->getAttribute(static::ATTR_DOMAIN)) {
138
- $this->setAttribute(static::ATTR_DOMAIN, $issuingDomain);
139
- }
140
- }
141
-
142
- /**
143
- * Formats a Cookie header for the current cookie.
144
- *
145
- * @return string An HTTP request Cookie header
146
- */
147
- public function toCookieHeader()
148
- {
149
- return 'Cookie: '.$this->getName().'='.$this->getValue();
150
- }
151
-
152
- public function setName($name)
153
- {
154
- $this->name = $name;
155
- }
156
-
157
- public function getName()
158
- {
159
- return $this->name;
160
- }
161
-
162
- public function setValue($value)
163
- {
164
- $this->value = $value;
165
- }
166
-
167
- public function getValue()
168
- {
169
- return $this->value;
170
- }
171
-
172
- public function setAttributes(array $attributes)
173
- {
174
- // attributes are case insensitive
175
- $this->attributes = array_change_key_case($attributes);
176
- }
177
-
178
- public function setAttribute($name, $value)
179
- {
180
- $this->attributes[strtolower($name)] = $value;
181
- }
182
-
183
- public function getAttributes()
184
- {
185
- return $this->attributes;
186
- }
187
-
188
- public function getAttribute($name)
189
- {
190
- $name = strtolower($name);
191
-
192
- if (isset($this->attributes[$name])) {
193
- return $this->attributes[$name];
194
- }
195
- }
196
-
197
- public function hasAttribute($name)
198
- {
199
- return array_key_exists($name, $this->attributes);
200
- }
201
-
202
- public function clearAttributes()
203
- {
204
- $this->setAttributes(array());
205
- }
206
-
207
- public function setCreatedAt($createdAt)
208
- {
209
- $this->createdAt = $createdAt;
210
- }
211
-
212
- public function getCreatedAt()
213
- {
214
- return $this->createdAt;
215
- }
216
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/lib/Buzz/Util/CookieJar.php DELETED
@@ -1,79 +0,0 @@
1
- <?php
2
-
3
- namespace Buzz\Util;
4
-
5
- use Buzz\Message\MessageInterface;
6
- use Buzz\Message\RequestInterface;
7
-
8
- class CookieJar
9
- {
10
- protected $cookies = array();
11
-
12
- public function setCookies($cookies)
13
- {
14
- $this->cookies = array();
15
- foreach ($cookies as $cookie) {
16
- $this->addCookie($cookie);
17
- }
18
- }
19
-
20
- public function getCookies()
21
- {
22
- return $this->cookies;
23
- }
24
-
25
- /**
26
- * Adds a cookie to the current cookie jar.
27
- *
28
- * @param Cookie $cookie A cookie object
29
- */
30
- public function addCookie(Cookie $cookie)
31
- {
32
- $this->cookies[] = $cookie;
33
- }
34
-
35
- /**
36
- * Adds Cookie headers to the supplied request.
37
- *
38
- * @param RequestInterface $request A request object
39
- */
40
- public function addCookieHeaders(RequestInterface $request)
41
- {
42
- foreach ($this->cookies as $cookie) {
43
- if ($cookie->matchesRequest($request)) {
44
- $request->addHeader($cookie->toCookieHeader());
45
- }
46
- }
47
- }
48
-
49
- /**
50
- * Processes Set-Cookie headers from a request/response pair.
51
- *
52
- * @param RequestInterface $request A request object
53
- * @param MessageInterface $response A response object
54
- */
55
- public function processSetCookieHeaders(RequestInterface $request, MessageInterface $response)
56
- {
57
- foreach ($response->getHeader('Set-Cookie', false) as $header) {
58
- $cookie = new Cookie();
59
- $cookie->fromSetCookieHeader($header, parse_url($request->getHost(), PHP_URL_HOST));
60
-
61
- $this->addCookie($cookie);
62
- }
63
- }
64
-
65
- /**
66
- * Removes expired cookies.
67
- */
68
- public function clearExpiredCookies()
69
- {
70
- foreach ($this->cookies as $i => $cookie) {
71
- if ($cookie->isExpired()) {
72
- unset($this->cookies[$i]);
73
- }
74
- }
75
-
76
- // reset array keys
77
- $this->cookies = array_values($this->cookies);
78
- }
79
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/lib/Buzz/Util/Url.php DELETED
@@ -1,190 +0,0 @@
1
- <?php
2
-
3
- namespace Buzz\Util;
4
-
5
- use Buzz\Message\RequestInterface;
6
- use Buzz\Exception\InvalidArgumentException;
7
-
8
- class Url
9
- {
10
- private static $defaultPorts = array(
11
- 'http' => 80,
12
- 'https' => 443,
13
- );
14
-
15
- private $url;
16
- private $components;
17
-
18
- /**
19
- * Constructor.
20
- *
21
- * @param string $url The URL
22
- *
23
- * @throws InvalidArgumentException If the URL is invalid
24
- */
25
- public function __construct($url)
26
- {
27
- $components = parse_url($url);
28
-
29
- if (false === $components) {
30
- throw new InvalidArgumentException(sprintf('The URL "%s" is invalid.', $url));
31
- }
32
-
33
- // support scheme-less URLs
34
- if (!isset($components['host']) && isset($components['path'])) {
35
- $pos = strpos($components['path'], '/');
36
- if (false === $pos) {
37
- $components['host'] = $components['path'];
38
- unset($components['path']);
39
- } elseif (0 !== $pos) {
40
- list($host, $path) = explode('/', $components['path'], 2);
41
- $components['host'] = $host;
42
- $components['path'] = '/'.$path;
43
- }
44
- }
45
-
46
- // default port
47
- if (isset($components['scheme']) && !isset($components['port']) && isset(self::$defaultPorts[$components['scheme']])) {
48
- $components['port'] = self::$defaultPorts[$components['scheme']];
49
- }
50
-
51
- $this->url = $url;
52
- $this->components = $components;
53
- }
54
-
55
- public function getScheme()
56
- {
57
- return $this->parseUrl('scheme');
58
- }
59
-
60
- public function getHostname()
61
- {
62
- return $this->parseUrl('host');
63
- }
64
-
65
- public function getPort()
66
- {
67
- return $this->parseUrl('port');
68
- }
69
-
70
- public function getUser()
71
- {
72
- return $this->parseUrl('user');
73
- }
74
-
75
- public function getPassword()
76
- {
77
- return $this->parseUrl('pass');
78
- }
79
-
80
- public function getPath()
81
- {
82
- return $this->parseUrl('path');
83
- }
84
-
85
- public function getQueryString()
86
- {
87
- return $this->parseUrl('query');
88
- }
89
-
90
- public function getFragment()
91
- {
92
- return $this->parseUrl('fragment');
93
- }
94
-
95
- /**
96
- * Returns a host string that combines scheme, hostname and port.
97
- *
98
- * @return string A host value for an HTTP message
99
- */
100
- public function getHost()
101
- {
102
- if ($hostname = $this->parseUrl('host')) {
103
- $host = $scheme = $this->parseUrl('scheme', 'http');
104
- $host .= '://';
105
- $host .= $hostname;
106
-
107
- $port = $this->parseUrl('port');
108
- if ($port && (!isset(self::$defaultPorts[$scheme]) || self::$defaultPorts[$scheme] != $port)) {
109
- $host .= ':'.$port;
110
- }
111
-
112
- return $host;
113
- }
114
- }
115
-
116
- /**
117
- * Returns a resource string that combines path and query string.
118
- *
119
- * @return string A resource value for an HTTP message
120
- */
121
- public function getResource()
122
- {
123
- $resource = $this->parseUrl('path', '/');
124
-
125
- if ($query = $this->parseUrl('query')) {
126
- $resource .= '?'.$query;
127
- }
128
-
129
- return $resource;
130
- }
131
-
132
- /**
133
- * Returns a formatted URL.
134
- */
135
- public function format($pattern)
136
- {
137
- static $map = array(
138
- 's' => 'getScheme',
139
- 'u' => 'getUser',
140
- 'a' => 'getPassword',
141
- 'h' => 'getHostname',
142
- 'o' => 'getPort',
143
- 'p' => 'getPath',
144
- 'q' => 'getQueryString',
145
- 'f' => 'getFragment',
146
- 'H' => 'getHost',
147
- 'R' => 'getResource',
148
- );
149
-
150
- $url = '';
151
-
152
- $parts = str_split($pattern);
153
- while ($part = current($parts)) {
154
- if (isset($map[$part])) {
155
- $method = $map[$part];
156
- $url .= $this->$method();
157
- } elseif ('\\' == $part) {
158
- $url .= next($parts);
159
- } elseif (!ctype_alpha($part)) {
160
- $url .= $part;
161
- } else {
162
- throw new InvalidArgumentException(sprintf('The format character "%s" is invalid.', $part));
163
- }
164
-
165
- next($parts);
166
- }
167
-
168
- return $url;
169
- }
170
-
171
- /**
172
- * Applies the current URL to the supplied request.
173
- */
174
- public function applyToRequest(RequestInterface $request)
175
- {
176
- $request->setResource($this->getResource());
177
- $request->setHost($this->getHost());
178
- }
179
-
180
- private function parseUrl($component = null, $default = null)
181
- {
182
- if (null === $component) {
183
- return $this->components;
184
- } elseif (isset($this->components[$component])) {
185
- return $this->components[$component];
186
- } else {
187
- return $default;
188
- }
189
- }
190
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/phpunit.xml.dist DELETED
@@ -1,20 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
-
3
- <phpunit backupGlobals="false" bootstrap="vendor/autoload.php" colors="true">
4
- <testsuites>
5
- <testsuite name="Buzz Test Suite">
6
- <directory suffix="Test.php">./test/Buzz/</directory>
7
- </testsuite>
8
- </testsuites>
9
-
10
- <php>
11
- <!-- <server name="TEST_SERVER" value="http://localhost/buzz/test/server.php" /> -->
12
- <!-- <server name="TEST_PROXY" value="localhost:3128" /> -->
13
- </php>
14
-
15
- <filter>
16
- <whitelist>
17
- <directory suffix=".php">./lib/Buzz/</directory>
18
- </whitelist>
19
- </filter>
20
- </phpunit>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/test/Buzz/Test/BrowserTest.php DELETED
@@ -1,182 +0,0 @@
1
- <?php
2
-
3
- namespace Buzz\Test;
4
-
5
- use Buzz\Browser;
6
-
7
- class BrowserTest extends \PHPUnit_Framework_TestCase
8
- {
9
- private $client;
10
- private $factory;
11
- private $browser;
12
-
13
- protected function setUp()
14
- {
15
- $this->client = $this->getMock('Buzz\Client\ClientInterface');
16
- $this->factory = $this->getMock('Buzz\Message\Factory\FactoryInterface');
17
-
18
- $this->browser = new Browser($this->client, $this->factory);
19
- }
20
-
21
- /**
22
- * @dataProvider provideMethods
23
- */
24
- public function testBasicMethods($method, $content)
25
- {
26
- $request = $this->getMock('Buzz\Message\RequestInterface');
27
- $response = $this->getMock('Buzz\Message\MessageInterface');
28
- $headers = array('X-Foo: bar');
29
-
30
- $this->factory->expects($this->once())
31
- ->method('createRequest')
32
- ->with(strtoupper($method))
33
- ->will($this->returnValue($request));
34
- $request->expects($this->once())
35
- ->method('setHost')
36
- ->with('http://google.com');
37
- $request->expects($this->once())
38
- ->method('setResource')
39
- ->with('/');
40
- $request->expects($this->once())
41
- ->method('addHeaders')
42
- ->with($headers);
43
- $request->expects($this->once())
44
- ->method('setContent')
45
- ->with($content);
46
- $this->factory->expects($this->once())
47
- ->method('createResponse')
48
- ->will($this->returnValue($response));
49
- $this->client->expects($this->once())
50
- ->method('send')
51
- ->with($request, $response);
52
-
53
- $actual = $this->browser->$method('http://google.com/', $headers, $content);
54
-
55
- $this->assertSame($response, $actual);
56
- }
57
-
58
- public function provideMethods()
59
- {
60
- return array(
61
- array('get', ''),
62
- array('head', ''),
63
- array('post', 'content'),
64
- array('put', 'content'),
65
- array('delete', 'content'),
66
- );
67
- }
68
-
69
- public function testSubmit()
70
- {
71
- $request = $this->getMock('Buzz\Message\Form\FormRequestInterface');
72
- $response = $this->getMock('Buzz\Message\MessageInterface');
73
- $headers = array('X-Foo: bar');
74
-
75
- $this->factory->expects($this->once())
76
- ->method('createFormRequest')
77
- ->will($this->returnValue($request));
78
- $request->expects($this->once())
79
- ->method('setMethod')
80
- ->with('PUT');
81
- $request->expects($this->once())
82
- ->method('setHost')
83
- ->with('http://google.com');
84
- $request->expects($this->once())
85
- ->method('setResource')
86
- ->with('/');
87
- $request->expects($this->once())
88
- ->method('addHeaders')
89
- ->with($headers);
90
- $request->expects($this->once())
91
- ->method('setFields')
92
- ->with(array('foo' => 'bar', 'bar' => 'foo'));
93
- $this->factory->expects($this->once())
94
- ->method('createResponse')
95
- ->will($this->returnValue($response));
96
- $this->client->expects($this->once())
97
- ->method('send')
98
- ->with($request, $response);
99
-
100
- $actual = $this->browser->submit('http://google.com', array('foo' => 'bar', 'bar' => 'foo'), 'PUT', $headers);
101
-
102
- $this->assertSame($response, $actual);
103
- }
104
-
105
- public function testListener()
106
- {
107
- $listener = $this->getMock('Buzz\Listener\ListenerInterface');
108
- $request = $this->getMock('Buzz\Message\RequestInterface');
109
- $response = $this->getMock('Buzz\Message\MessageInterface');
110
-
111
- $listener->expects($this->once())
112
- ->method('preSend')
113
- ->with($request);
114
- $listener->expects($this->once())
115
- ->method('postSend')
116
- ->with($request, $response);
117
-
118
- $this->browser->setListener($listener);
119
- $this->assertSame($listener, $this->browser->getListener());
120
-
121
- $this->browser->send($request, $response);
122
- }
123
-
124
- public function testLastMessages()
125
- {
126
- $request = $this->getMock('Buzz\Message\RequestInterface');
127
- $response = $this->getMock('Buzz\Message\MessageInterface');
128
-
129
- $this->browser->send($request, $response);
130
-
131
- $this->assertSame($request, $this->browser->getLastRequest());
132
- $this->assertSame($response, $this->browser->getLastResponse());
133
- }
134
-
135
- public function testClientMethods()
136
- {
137
- $client = $this->getMock('Buzz\Client\ClientInterface');
138
- $this->browser->setClient($client);
139
- $this->assertSame($client, $this->browser->getClient());
140
- }
141
-
142
- public function testFactoryMethods()
143
- {
144
- $factory = $this->getMock('Buzz\Message\Factory\FactoryInterface');
145
- $this->browser->setMessageFactory($factory);
146
- $this->assertSame($factory, $this->browser->getMessageFactory());
147
- }
148
-
149
- public function testAddFirstListener()
150
- {
151
- $listener = $this->getMock('Buzz\Listener\ListenerInterface');
152
- $this->browser->addListener($listener);
153
- $this->assertEquals($listener, $this->browser->getListener());
154
- }
155
-
156
- public function testAddSecondListener()
157
- {
158
- $listener = $this->getMock('Buzz\Listener\ListenerInterface');
159
-
160
- $this->browser->addListener($listener);
161
- $this->browser->addListener($listener);
162
-
163
- $listenerChain = $this->browser->getListener();
164
-
165
- $this->assertInstanceOf('Buzz\Listener\ListenerChain', $listenerChain);
166
- $this->assertEquals(2, count($listenerChain->getListeners()));
167
- }
168
-
169
- public function testAddThirdListener()
170
- {
171
- $listener = $this->getMock('Buzz\Listener\ListenerInterface');
172
-
173
- $this->browser->addListener($listener);
174
- $this->browser->addListener($listener);
175
- $this->browser->addListener($listener);
176
-
177
- $listenerChain = $this->browser->getListener();
178
-
179
- $this->assertInstanceOf('Buzz\Listener\ListenerChain', $listenerChain);
180
- $this->assertEquals(3, count($listenerChain->getListeners()));
181
- }
182
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/test/Buzz/Test/Client/AbstractStreamTest.php DELETED
@@ -1,58 +0,0 @@
1
- <?php
2
-
3
- namespace Buzz\Test\Client;
4
-
5
- use Buzz\Client\AbstractStream;
6
- use Buzz\Message\Request;
7
- use Buzz\Message\RequestInterface;
8
- use Buzz\Message\MessageInterface;
9
-
10
- class StreamClient extends AbstractStream
11
- {
12
- public function send(RequestInterface $request, MessageInterface $response)
13
- {
14
- }
15
- }
16
-
17
- class AbstractStreamTest extends \PHPUnit_Framework_TestCase
18
- {
19
- public function testConvertsARequestToAContextArray()
20
- {
21
- $request = new Request('POST', '/resource/123', 'http://example.com');
22
- $request->addHeader('Content-Type: application/x-www-form-urlencoded');
23
- $request->addHeader('Content-Length: 15');
24
- $request->setContent('foo=bar&bar=baz');
25
-
26
- $client = new StreamClient();
27
- $client->setMaxRedirects(5);
28
- $client->setIgnoreErrors(false);
29
- $client->setTimeout(10);
30
- $expected = array(
31
- 'http' => array(
32
- 'method' => 'POST',
33
- 'header' => "Content-Type: application/x-www-form-urlencoded\r\nContent-Length: 15",
34
- 'content' => 'foo=bar&bar=baz',
35
- 'protocol_version' => 1.1,
36
- 'ignore_errors' => false,
37
- 'follow_location' => true,
38
- 'max_redirects' => 6,
39
- 'timeout' => 10,
40
- ),
41
- 'ssl' => array(
42
- 'verify_peer' => true,
43
- 'verify_host' => 2,
44
- ),
45
- );
46
-
47
- $this->assertEquals($expected, $client->getStreamContextArray($request));
48
-
49
- $client->setVerifyPeer(true);
50
- $expected['ssl']['verify_peer'] = true;
51
- $this->assertEquals($expected, $client->getStreamContextArray($request));
52
-
53
- $client->setMaxRedirects(0);
54
- $expected['http']['follow_location'] = false;
55
- $expected['http']['max_redirects'] = 1;
56
- $this->assertEquals($expected, $client->getStreamContextArray($request));
57
- }
58
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/test/Buzz/Test/Client/ClientTest.php DELETED
@@ -1,36 +0,0 @@
1
- <?php
2
-
3
- namespace Buzz\Test\Client;
4
-
5
- use Buzz\Message;
6
-
7
- class ClientTest extends \PHPUnit_Framework_TestCase
8
- {
9
- /**
10
- * @dataProvider provideInvalidHosts
11
- */
12
- public function testSendToInvalidUrl($host, $client)
13
- {
14
- $this->setExpectedException('Buzz\\Exception\\ClientException');
15
-
16
- $request = new Message\Request();
17
- $request->fromUrl('http://'.$host.':12345');
18
-
19
- $response = new Message\Response();
20
-
21
- $client = new $client();
22
- $client->setTimeout(0.05);
23
- $client->send($request, $response);
24
- }
25
-
26
- public function provideInvalidHosts()
27
- {
28
- return array(
29
- array('invalid_domain', 'Buzz\\Client\\Curl'),
30
- array('invalid_domain.buzz', 'Buzz\\Client\\Curl'),
31
-
32
- array('invalid_domain', 'Buzz\\Client\\FileGetContents'),
33
- array('invalid_domain.buzz', 'Buzz\\Client\\FileGetContents'),
34
- );
35
- }
36
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/test/Buzz/Test/Client/FunctionalTest.php DELETED
@@ -1,287 +0,0 @@
1
- <?php
2
-
3
- namespace Buzz\Test\Client;
4
-
5
- use Buzz\Client\BatchClientInterface;
6
- use Buzz\Client\ClientInterface;
7
- use Buzz\Client\Curl;
8
- use Buzz\Client\FileGetContents;
9
- use Buzz\Client\MultiCurl;
10
- use Buzz\Message\Form\FormRequest;
11
- use Buzz\Message\Form\FormUpload;
12
- use Buzz\Message\Request;
13
- use Buzz\Message\RequestInterface;
14
- use Buzz\Message\Response;
15
-
16
- class FunctionalTest extends \PHPUnit_Framework_TestCase
17
- {
18
- protected function setUp()
19
- {
20
- if (!isset($_SERVER['TEST_SERVER'])) {
21
- $this->markTestSkipped('The test server is not configured.');
22
- }
23
- }
24
-
25
- /**
26
- * @dataProvider provideClientAndMethod
27
- */
28
- public function testRequestMethods($client, $method)
29
- {
30
- $request = new Request($method);
31
- $request->fromUrl($_SERVER['TEST_SERVER']);
32
- $request->setContent('test');
33
- $response = $this->send($client, $request);
34
-
35
- $data = json_decode($response->getContent(), true);
36
-
37
- $this->assertEquals($method, $data['SERVER']['REQUEST_METHOD']);
38
- }
39
-
40
- /**
41
- * @dataProvider provideClient
42
- */
43
- public function testGetContentType($client)
44
- {
45
- $request = new Request();
46
- $request->fromUrl($_SERVER['TEST_SERVER']);
47
- $response = $this->send($client, $request);
48
-
49
- $data = json_decode($response->getContent(), true);
50
-
51
- $this->assertArrayNotHasKey('CONTENT_TYPE', $data['SERVER']);
52
- }
53
-
54
- /**
55
- * @dataProvider provideClient
56
- */
57
- public function testFormPost($client)
58
- {
59
- $request = new FormRequest();
60
- $request->fromUrl($_SERVER['TEST_SERVER']);
61
- $request->setField('company[name]', 'Google');
62
- $response = $this->send($client, $request);
63
-
64
- $data = json_decode($response->getContent(), true);
65
-
66
- $this->assertStringStartsWith('application/x-www-form-urlencoded', $data['SERVER']['CONTENT_TYPE']);
67
- $this->assertEquals('Google', $data['POST']['company']['name']);
68
- }
69
-
70
- /**
71
- * @dataProvider provideClient
72
- */
73
- public function testFormGet($client)
74
- {
75
- $request = new FormRequest(FormRequest::METHOD_GET);
76
- $request->fromUrl($_SERVER['TEST_SERVER']);
77
- $request->setField('search[query]', 'cats');
78
- $response = $this->send($client, $request);
79
-
80
- $data = json_decode($response->getContent(), true);
81
-
82
- $this->assertArrayNotHasKey('CONTENT_TYPE', $data['SERVER']);
83
- $this->assertEquals('cats', $data['GET']['search']['query']);
84
- }
85
-
86
- /**
87
- * @dataProvider provideClientAndUpload
88
- */
89
- public function testFileUpload($client, $upload)
90
- {
91
- $request = new FormRequest();
92
- $request->fromUrl($_SERVER['TEST_SERVER']);
93
- $request->setField('company[name]', 'Google');
94
- $request->setField('company[logo]', $upload);
95
- $response = $this->send($client, $request);
96
-
97
- $data = json_decode($response->getContent(), true);
98
-
99
- $this->assertStringStartsWith('multipart/form-data', $data['SERVER']['CONTENT_TYPE']);
100
- $this->assertEquals('Google', $data['POST']['company']['name']);
101
- $this->assertEquals('google.png', $data['FILES']['company']['name']['logo']);
102
- }
103
-
104
- /**
105
- * @dataProvider provideClient
106
- */
107
- public function testJsonPayload($client)
108
- {
109
- $request = new Request(RequestInterface::METHOD_POST);
110
- $request->fromUrl($_SERVER['TEST_SERVER']);
111
- $request->addHeader('Content-Type: application/json');
112
- $request->setContent(json_encode(array('foo' => 'bar')));
113
- $response = $this->send($client, $request);
114
-
115
- $data = json_decode($response->getContent(), true);
116
-
117
- $this->assertEquals('application/json', $data['SERVER']['CONTENT_TYPE']);
118
- $this->assertEquals('{"foo":"bar"}', $data['INPUT']);
119
- }
120
-
121
- /**
122
- * @dataProvider provideClient
123
- */
124
- public function testConsecutiveRequests($client)
125
- {
126
- // request 1
127
- $request = new Request(RequestInterface::METHOD_PUT);
128
- $request->fromUrl($_SERVER['TEST_SERVER']);
129
- $request->addHeader('Content-Type: application/json');
130
- $request->setContent(json_encode(array('foo' => 'bar')));
131
- $response = $this->send($client, $request);
132
-
133
- $data = json_decode($response->getContent(), true);
134
-
135
- $this->assertEquals('PUT', $data['SERVER']['REQUEST_METHOD']);
136
- $this->assertEquals('application/json', $data['SERVER']['CONTENT_TYPE']);
137
- $this->assertEquals('{"foo":"bar"}', $data['INPUT']);
138
-
139
- // request 2
140
- $request = new Request(RequestInterface::METHOD_GET);
141
- $request->fromUrl($_SERVER['TEST_SERVER']);
142
- $response = $this->send($client, $request);
143
-
144
- $data = json_decode($response->getContent(), true);
145
-
146
- $this->assertEquals('GET', $data['SERVER']['REQUEST_METHOD']);
147
- $this->assertEmpty($data['INPUT']);
148
- }
149
-
150
- /**
151
- * @dataProvider provideClient
152
- */
153
- public function testPlus($client)
154
- {
155
- $request = new FormRequest();
156
- $request->fromUrl($_SERVER['TEST_SERVER']);
157
- $request->setField('math', '1+1=2');
158
- $response = $this->send($client, $request);
159
-
160
- $data = json_decode($response->getContent(), true);
161
- parse_str($data['INPUT'], $fields);
162
-
163
- $this->assertEquals(array('math' => '1+1=2'), $fields);
164
- }
165
-
166
- /**
167
- * @dataProvider provideClient
168
- */
169
- public function testRedirectedResponse($client)
170
- {
171
- $request = new Request();
172
- $request->fromUrl($_SERVER['TEST_SERVER'].'?redirect_to='.$_SERVER['TEST_SERVER']);
173
- $response = $this->send($client, $request);
174
-
175
- $headers = $response->getHeaders();
176
- $this->assertContains('200', $headers[0]);
177
- }
178
-
179
- /**
180
- * @dataProvider provideClient
181
- */
182
- public function testProxy($client)
183
- {
184
- if (!isset($_SERVER['TEST_PROXY'])) {
185
- $this->markTestSkipped('The proxy server is not configured.');
186
- }
187
-
188
- $client->setProxy($_SERVER['TEST_PROXY']);
189
-
190
- $request = new Request();
191
- $request->fromUrl($_SERVER['TEST_SERVER']);
192
- $response = $this->send($client, $request);
193
-
194
- $data = json_decode($response->getContent(), true);
195
- $this->assertArrayHasKey('HTTP_VIA', $data['SERVER']);
196
- }
197
-
198
- /**
199
- * @expectedException RuntimeException
200
- * @expectedExceptionMessage Protocol pop3 not supported or disabled in libcurl
201
- */
202
- public function testRedirectedToForbiddenProtocol()
203
- {
204
- $client = new Curl();
205
- $request = new Request();
206
- $request->fromUrl($_SERVER['TEST_SERVER'].'?redirect_to=pop3://localhost/');
207
- $response = $this->send($client, $request);
208
- }
209
-
210
- public function testMultiCurlExecutesRequestsConcurently()
211
- {
212
- $client = new MultiCurl();
213
- $client->setTimeout(10);
214
-
215
- $calls = array();
216
- $callback = function($client, $request, $response, $options, $error) use(&$calls) {
217
- $calls[] = func_get_args();
218
- };
219
-
220
- for ($i = 3; $i > 0; $i--) {
221
- $request = new Request();
222
- $request->fromUrl($_SERVER['TEST_SERVER'].'?delay='.$i);
223
- $client->send($request, new Response(), array('callback' => $callback));
224
- }
225
-
226
- $client->flush();
227
- $this->assertCount(3, $calls);
228
- }
229
-
230
- public function provideClient()
231
- {
232
- return array(
233
- array(new Curl()),
234
- array(new FileGetContents()),
235
- array(new MultiCurl()),
236
- );
237
- }
238
-
239
- public function provideClientAndMethod()
240
- {
241
- // HEAD is intentionally omitted
242
- // http://stackoverflow.com/questions/2603104/does-mod-php-honor-head-requests-properly
243
-
244
- $methods = array('GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'OPTIONS');
245
- $clients = $this->provideClient();
246
-
247
- $data = array();
248
- foreach ($clients as $client) {
249
- foreach ($methods as $method) {
250
- $data[] = array($client[0], $method);
251
- }
252
- }
253
-
254
- return $data;
255
- }
256
-
257
- public function provideClientAndUpload()
258
- {
259
- $stringUpload = new FormUpload();
260
- $stringUpload->setFilename('google.png');
261
- $stringUpload->setContent(file_get_contents(__DIR__.'/../Message/Fixtures/google.png'));
262
-
263
- $uploads = array($stringUpload, new FormUpload(__DIR__.'/../Message/Fixtures/google.png'));
264
- $clients = $this->provideClient();
265
-
266
- $data = array();
267
- foreach ($clients as $client) {
268
- foreach ($uploads as $upload) {
269
- $data[] = array($client[0], $upload);
270
- }
271
- }
272
-
273
- return $data;
274
- }
275
-
276
- private function send(ClientInterface $client, RequestInterface $request)
277
- {
278
- $response = new Response();
279
- $client->send($request, $response);
280
-
281
- if ($client instanceof BatchClientInterface) {
282
- $client->flush();
283
- }
284
-
285
- return $response;
286
- }
287
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/test/Buzz/Test/Listener/BasicAuthListenerTest.php DELETED
@@ -1,20 +0,0 @@
1
- <?php
2
-
3
- namespace Buzz\Test\Listener;
4
-
5
- use Buzz\Listener\BasicAuthListener;
6
- use Buzz\Message;
7
-
8
- class BasicAuthListenerTest extends \PHPUnit_Framework_TestCase
9
- {
10
- public function testBasicAuthHeader()
11
- {
12
- $request = new Message\Request();
13
- $this->assertEmpty($request->getHeader('Authorization'));
14
-
15
- $listener = new BasicAuthListener('foo', 'bar');
16
- $listener->preSend($request);
17
-
18
- $this->assertEquals('Basic '.base64_encode('foo:bar'), $request->getHeader('Authorization'));
19
- }
20
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/test/Buzz/Test/Listener/CallbackListenerTest.php DELETED
@@ -1,34 +0,0 @@
1
- <?php
2
-
3
- namespace Buzz\Test\Listener;
4
-
5
- use Buzz\Listener\CallbackListener;
6
- use Buzz\Message;
7
-
8
- class CallbackListenerTest extends \PHPUnit_Framework_TestCase
9
- {
10
- public function testCallback()
11
- {
12
- $calls = array();
13
- $listener = new CallbackListener(function() use (& $calls) {
14
- $calls[] = func_get_args();
15
- });
16
-
17
- $request = new Message\Request();
18
- $response = new Message\Response();
19
-
20
- $listener->preSend($request);
21
- $listener->postSend($request, $response);
22
-
23
- $this->assertEquals(array(
24
- array($request),
25
- array($request, $response),
26
- ), $calls);
27
- }
28
-
29
- public function testInvalidCallback()
30
- {
31
- $this->setExpectedException('Buzz\Exception\InvalidArgumentException');
32
- $listener = new CallbackListener(array(1, 2, 3));
33
- }
34
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/test/Buzz/Test/Listener/DigestAuthListenerTest.php DELETED
@@ -1,60 +0,0 @@
1
- <?php
2
-
3
- namespace Buzz\Test\Listener;
4
-
5
- use Buzz\Listener\DigestAuthListener;
6
- use Buzz\Message;
7
-
8
- class DigestAuthListenerTest extends \PHPUnit_Framework_TestCase
9
- {
10
- public function testDigestAuthHeader()
11
- {
12
- $request = new Message\Request();
13
- $request->setMethod('GET');
14
- $request->setResource('/auth-digest');
15
- $request->setHost('http://test.webdav.org');
16
- $request->setProtocolVersion('1.1');
17
-
18
- $response = new Message\Response();
19
- $response->setHeaders(array(
20
- "Date: Wed, 24 Jun 2015 21:49:39 GMT",
21
- "Server: Apache/2.0.54 (Debian GNU/Linux) DAV/2 SVN/1.3.2",
22
- "WWW-Authenticate: Digest realm=\"test\", nonce=\"5PvRe0oZBQA=874ad6aea3519069f30dfc704e594dde6e01b2a6\", algorithm=MD5, domain=\"/auth-digest/\", qop=\"auth\"",
23
- "Content-Length: 401",
24
- "Content-Type: text/html; charset=iso-8859-1"
25
- ));
26
- $response->setContent("<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML 2.0//EN\">
27
- <html><head>
28
- <title>401 Authorization Required</title>
29
- </head><body>
30
- <h1>Authorization Required</h1>
31
- <p>This server could not verify that you
32
- are authorized to access the document
33
- requested. Either you supplied the wrong
34
- credentials (e.g., bad password), or your
35
- browser doesn\'t understand how to supply
36
- the credentials required.</p>
37
- </body></html>");
38
-
39
- // Simulate the First Request/Response, where the server returns 401
40
- $listener = new DigestAuthListener('user1', 'user1');
41
- $listener->preSend($request);
42
- $listener->postSend($request, $response);
43
-
44
- // Simulate sending the second Request using the calculated Authorization Header
45
- $request = new Message\Request();
46
- $request->setMethod('GET');
47
- $request->setResource('/auth-digest');
48
- $request->setHost('http://test.webdav.org');
49
- $request->setProtocolVersion('1.1');
50
-
51
- $this->assertEmpty($request->getHeader('Authorization'));
52
-
53
- $listener->preSend($request);
54
-
55
- $this->assertEquals(
56
- 'Digest username="user1", realm="test", nonce="5PvRe0oZBQA=874ad6aea3519069f30dfc704e594dde6e01b2a6", response="b2cf05a5d3f51d84a8866309aed6cb5d", uri="/auth-digest"',
57
- $request->getHeader('Authorization')
58
- );
59
- }
60
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/test/Buzz/Test/Listener/History/EntryTest.php DELETED
@@ -1,15 +0,0 @@
1
- <?php
2
-
3
- namespace Buzz\Test\History;
4
-
5
- use Buzz\Listener\History\Entry;
6
- use Buzz\Message;
7
-
8
- class EntryTest extends \PHPUnit_Framework_TestCase
9
- {
10
- public function testDuration()
11
- {
12
- $entry = new Entry(new Message\Request(), new Message\Response(), 123);
13
- $this->assertEquals(123, $entry->getDuration());
14
- }
15
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/test/Buzz/Test/Listener/History/JournalTest.php DELETED
@@ -1,119 +0,0 @@
1
- <?php
2
-
3
- namespace Buzz\Test\History;
4
-
5
- use Buzz\Listener\History\Journal;
6
- use Buzz\Message;
7
-
8
- class JournalTest extends \PHPUnit_Framework_TestCase
9
- {
10
- protected $request1;
11
- protected $request2;
12
- protected $request3;
13
-
14
- protected $response1;
15
- protected $response2;
16
- protected $response3;
17
-
18
- protected function setUp()
19
- {
20
- $this->request1 = new Message\Request();
21
- $this->request1->setContent('request1');
22
- $this->request2 = new Message\Request();
23
- $this->request2->setContent('request2');
24
- $this->request3 = new Message\Request();
25
- $this->request3->setContent('request3');
26
-
27
- $this->response1 = new Message\Response();
28
- $this->response1->setContent('response1');
29
- $this->response2 = new Message\Response();
30
- $this->response2->setContent('response2');
31
- $this->response3 = new Message\Response();
32
- $this->response3->setContent('response3');
33
- }
34
-
35
- protected function tearDown()
36
- {
37
- $this->request1 = null;
38
- $this->request2 = null;
39
- $this->request3 = null;
40
-
41
- $this->response1 = null;
42
- $this->response2 = null;
43
- $this->response3 = null;
44
- }
45
-
46
- public function testRecordEnforcesLimit()
47
- {
48
- $journal = new Journal();
49
- $journal->setLimit(2);
50
-
51
- $journal->record($this->request1, $this->response1);
52
- $journal->record($this->request2, $this->response2);
53
- $journal->record($this->request3, $this->response3);
54
-
55
- $this->assertEquals(2, count($journal));
56
- }
57
-
58
- public function testGetLastReturnsTheLastEntry()
59
- {
60
- $journal = new Journal();
61
-
62
- $journal->record($this->request1, $this->response1);
63
- $journal->record($this->request2, $this->response2);
64
-
65
- $this->assertEquals($this->request2, $journal->getLast()->getRequest());
66
-
67
- return $journal;
68
- }
69
-
70
- /**
71
- * @depends testGetLastReturnsTheLastEntry
72
- */
73
- public function testGetLastRequestReturnsTheLastRequest(Journal $journal)
74
- {
75
- $this->assertEquals($this->request2, $journal->getLastRequest());
76
- }
77
-
78
- /**
79
- * @depends testGetLastReturnsTheLastEntry
80
- */
81
- public function testGetLastResponseReturnsTheLastResponse(Journal $journal)
82
- {
83
- $this->assertEquals($this->response2, $journal->getLastResponse());
84
- }
85
-
86
- /**
87
- * @depends testGetLastReturnsTheLastEntry
88
- */
89
- public function testClearRemovesEntries(Journal $journal)
90
- {
91
- $journal->clear();
92
- $this->assertEquals(0, count($journal));
93
- }
94
-
95
- /**
96
- * @depends testGetLastReturnsTheLastEntry
97
- */
98
- public function testForeachIteratesReversedEntries(Journal $journal)
99
- {
100
- $requests = array($this->request2, $this->request1);
101
- $responses = array($this->response2, $this->response1);
102
-
103
- foreach ($journal as $index => $entry) {
104
- $this->assertEquals($requests[$index], $entry->getRequest());
105
- $this->assertEquals($responses[$index], $entry->getResponse());
106
- }
107
- }
108
-
109
- /**
110
- * @depends testGetLastReturnsTheLastEntry
111
- */
112
- public function testDuration()
113
- {
114
- $journal = new Journal();
115
- $journal->record($this->request1, $this->response1, 100);
116
-
117
- $this->assertEquals($journal->getLast()->getDuration(), 100);
118
- }
119
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/test/Buzz/Test/Listener/HistoryListenerTest.php DELETED
@@ -1,39 +0,0 @@
1
- <?php
2
-
3
- namespace Buzz\Test\Listener;
4
-
5
- use Buzz\Listener\HistoryListener;
6
- use Buzz\Message;
7
-
8
- class HistoryListenerTest extends \PHPUnit_Framework_TestCase
9
- {
10
- private $journal;
11
- private $listener;
12
-
13
- protected function setUp()
14
- {
15
- $this->journal = $this->getMockBuilder('Buzz\Listener\History\Journal')
16
- ->disableOriginalConstructor()
17
- ->getMock();
18
-
19
- $this->listener = new HistoryListener($this->journal);
20
- }
21
-
22
- public function testHistory()
23
- {
24
- $request = new Message\Request();
25
- $response = new Message\Response();
26
-
27
- $this->journal->expects($this->once())
28
- ->method('record')
29
- ->with($request, $response, $this->isType('float'));
30
-
31
- $this->listener->preSend($request);
32
- $this->listener->postSend($request, $response);
33
- }
34
-
35
- public function testGetter()
36
- {
37
- $this->assertSame($this->journal, $this->listener->getJournal());
38
- }
39
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/test/Buzz/Test/Listener/ListenerChainTest.php DELETED
@@ -1,36 +0,0 @@
1
- <?php
2
-
3
- namespace Buzz\Test\Listener;
4
-
5
- use Buzz\Listener\ListenerChain;
6
- use Buzz\Message;
7
-
8
- class ListenerChainTest extends \PHPUnit_Framework_TestCase
9
- {
10
- public function testListeners()
11
- {
12
- $listener = new ListenerChain(array($this->getMock('Buzz\Listener\ListenerInterface')));
13
- $this->assertEquals(1, count($listener->getListeners()));
14
-
15
- $listener->addListener($this->getMock('Buzz\Listener\ListenerInterface'));
16
- $this->assertEquals(2, count($listener->getListeners()));
17
- }
18
-
19
- public function testChain()
20
- {
21
- $delegate = $this->getMock('Buzz\Listener\ListenerInterface');
22
- $request = new Message\Request();
23
- $response = new Message\Response();
24
-
25
- $delegate->expects($this->once())
26
- ->method('preSend')
27
- ->with($request);
28
- $delegate->expects($this->once())
29
- ->method('postSend')
30
- ->with($request, $response);
31
-
32
- $listener = new ListenerChain(array($delegate));
33
- $listener->preSend($request);
34
- $listener->postSend($request, $response);
35
- }
36
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/test/Buzz/Test/Listener/LoggerListenerTest.php DELETED
@@ -1,31 +0,0 @@
1
- <?php
2
-
3
- namespace Buzz\Test\Listener;
4
-
5
- use Buzz\Listener\LoggerListener;
6
- use Buzz\Message;
7
-
8
- class LoggerListenerTest extends \PHPUnit_Framework_TestCase
9
- {
10
- public function testLogger()
11
- {
12
- $test = $this;
13
- $logger = function($line) use ($test) {
14
- $test->assertRegExp('~^Sent "GET http://google.com/" in \d+ms$~', $line);
15
- };
16
-
17
- $request = new Message\Request();
18
- $request->fromUrl('http://google.com/');
19
- $response = new Message\Response();
20
-
21
- $listener = new LoggerListener($logger);
22
- $listener->preSend($request);
23
- $listener->postSend($request, $response);
24
- }
25
-
26
- public function testInvalidLogger()
27
- {
28
- $this->setExpectedException('Buzz\Exception\InvalidArgumentException');
29
- $listener = new LoggerListener(array(1, 2, 3));
30
- }
31
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/test/Buzz/Test/Message/AbstractMessageTest.php DELETED
@@ -1,129 +0,0 @@
1
- <?php
2
-
3
- namespace Buzz\Test\Message;
4
-
5
- use Buzz\Message\AbstractMessage;
6
-
7
- class Message extends AbstractMessage
8
- {
9
- }
10
-
11
- class AbstractMessageTest extends \PHPUnit_Framework_TestCase
12
- {
13
- public function testGetHeaderGluesHeadersTogether()
14
- {
15
- $message = new Message();
16
- $message->addHeader('X-My-Header: foo');
17
- $message->addHeader('X-My-Header: bar');
18
-
19
- $this->assertEquals('foo'."\r\n".'bar', $message->getHeader('X-My-Header'));
20
- $this->assertEquals('foo,bar', $message->getHeader('X-My-Header', ','));
21
- $this->assertEquals(array('foo', 'bar'), $message->getHeader('X-My-Header', false));
22
- }
23
-
24
- public function testGetHeaderReturnsNullIfHeaderDoesNotExist()
25
- {
26
- $message = new Message();
27
-
28
- $this->assertNull($message->getHeader('X-Nonexistant'));
29
- }
30
-
31
- public function testGetHeaderIsCaseInsensitive()
32
- {
33
- $message = new Message();
34
- $message->addHeader('X-zomg: test');
35
-
36
- $this->assertEquals('test', $message->getHeader('X-ZOMG'));
37
- }
38
-
39
- public function testToStringFormatsTheMessage()
40
- {
41
- $message = new Message();
42
- $message->addHeader('Foo: Bar');
43
- $message->setContent('==CONTENT==');
44
-
45
- $expected = "Foo: Bar\r\n\r\n==CONTENT==\r\n";
46
-
47
- $this->assertEquals($expected, (string) $message);
48
- }
49
-
50
- public function testGetHeaderAttributesReturnsHeaderAttributes()
51
- {
52
- $message = new Message();
53
- $message->addHeader('Content-Type: text/xml; charset=utf8');
54
-
55
- $this->assertEquals('utf8', $message->getHeaderAttribute('Content-Type', 'charset'));
56
- }
57
-
58
- public function testGetNotFoundHeaderAttribute()
59
- {
60
- $message = new Message();
61
- $this->assertNull($message->getHeaderAttribute('Content-Type', 'charset'));
62
- }
63
-
64
- public function testAddHeaders()
65
- {
66
- $message = new Message();
67
- $message->addHeaders(array('Content-Type: text/xml; charset=utf8', 'Foo' => 'test'));
68
- $message->addHeaders(array('Test' => 'foo', 'Foo' => 'test'));
69
-
70
- $expected = array('Content-Type: text/xml; charset=utf8', 'Foo: test', 'Test: foo', 'Foo: test');
71
- $this->assertEquals($expected, $message->getHeaders());
72
- }
73
-
74
- public function testSetHeaders()
75
- {
76
- $message = new Message();
77
- $message->setHeaders(array('Content-Type: text/xml; charset=utf8', 'Foo' => 'test'));
78
- $message->setHeaders(array('Test: foo', 'Foo' => 'test'));
79
-
80
- $expected = array('Test: foo', 'Foo: test');
81
- $this->assertEquals($expected, $message->getHeaders());
82
- }
83
-
84
- public function testToDomDocumentWithContentTypeTextXmlReturnsDomDocument()
85
- {
86
- $message = new Message();
87
-
88
- $message->setHeaders(array('Content-Type: text/xml'));
89
- $message->setContent('<foo><bar></bar></foo>');
90
- $this->assertInstanceOf('DOMDocument', $message->toDomDocument());
91
- }
92
-
93
- public function testToDomDocumentWithContentTypeTextHtmlReturnsDomDocument()
94
- {
95
- $message = new Message();
96
-
97
- $message->setHeaders(array('Content-Type: text/html'));
98
- $message->setContent('<foo><bar></bar></foo>');
99
- $this->assertInstanceOf('DOMDocument', $message->toDomDocument());
100
- }
101
-
102
- public function testToDomDocumentWithContentTypeTextXmlReturnsXmlString()
103
- {
104
- $message = new Message();
105
- $expected = <<<XML
106
- <?xml version="1.0"?>
107
- <foo><bar/></foo>
108
-
109
- XML;
110
-
111
- $message->setHeaders(array('Content-Type: text/xml'));
112
- $message->setContent('<foo><bar></bar></foo>');
113
- $this->assertEquals($expected, $message->toDomDocument()->saveXML());
114
- }
115
-
116
- public function testToDomDocumentWithContentTypeTextHTMLReturnsHTMLString()
117
- {
118
- $message = new Message();
119
- $expected = <<<HTML
120
- <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
121
- <html><body><foo><bar></bar></foo></body></html>
122
-
123
- HTML;
124
-
125
- $message->setHeaders(array('Content-Type: text/html'));
126
- $message->setContent('<foo><bar></bar></foo>');
127
- $this->assertEquals($expected, $message->toDomDocument()->saveHTML());
128
- }
129
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/test/Buzz/Test/Message/FactoryTest.php DELETED
@@ -1,61 +0,0 @@
1
- <?php
2
-
3
- namespace Buzz\Test\Message;
4
-
5
- use Buzz\Message\Factory\Factory;
6
- use Buzz\Message\Request;
7
- use Buzz\Message\RequestInterface;
8
-
9
- class FactoryTest extends \PHPUnit_Framework_TestCase
10
- {
11
- private $factory;
12
-
13
- protected function setUp()
14
- {
15
- $this->factory = new Factory();
16
- }
17
-
18
- public function testCreateRequestDefaults()
19
- {
20
- $request = $this->factory->createRequest();
21
-
22
- $this->assertInstanceOf('Buzz\Message\Request', $request);
23
- $this->assertEquals(RequestInterface::METHOD_GET, $request->getMethod());
24
- $this->assertEquals('/', $request->getResource());
25
- $this->assertNull($request->getHost());
26
- }
27
-
28
- public function testCreateRequestArguments()
29
- {
30
- $request = $this->factory->createRequest(RequestInterface::METHOD_POST, '/foo', 'http://example.com');
31
-
32
- $this->assertEquals(RequestInterface::METHOD_POST, $request->getMethod());
33
- $this->assertEquals('/foo', $request->getResource());
34
- $this->assertEquals('http://example.com', $request->getHost());
35
- }
36
-
37
- public function testCreateFormRequestDefaults()
38
- {
39
- $request = $this->factory->createFormRequest();
40
-
41
- $this->assertInstanceOf('Buzz\Message\Form\FormRequest', $request);
42
- $this->assertEquals(RequestInterface::METHOD_POST, $request->getMethod());
43
- $this->assertEquals('/', $request->getResource());
44
- $this->assertNull($request->getHost());
45
- }
46
-
47
- public function testCreateFormRequestArguments()
48
- {
49
- $request = $this->factory->createFormRequest(RequestInterface::METHOD_PUT, '/foo', 'http://example.com');
50
-
51
- $this->assertInstanceOf('Buzz\Message\Form\FormRequest', $request);
52
- $this->assertEquals(RequestInterface::METHOD_PUT, $request->getMethod());
53
- $this->assertEquals('/foo', $request->getResource());
54
- $this->assertEquals('http://example.com', $request->getHost());
55
- }
56
-
57
- public function testCreateResponse()
58
- {
59
- $this->assertInstanceOf('Buzz\Message\Response', $this->factory->createResponse());
60
- }
61
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/test/Buzz/Test/Message/Fixtures/google.png DELETED
Binary file
app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/test/Buzz/Test/Message/FormRequestTest.php DELETED
@@ -1,137 +0,0 @@
1
- <?php
2
-
3
- namespace Buzz\Test\Message;
4
-
5
- use Buzz\Message\Form\FormRequest;
6
- use Buzz\Message\Form\FormUpload;
7
-
8
- /**
9
- * FormRequestTest
10
- *
11
- * @author Marc Weistroff <marc.weistroff@sensio.com>
12
- */
13
- class FormRequestTest extends \PHPUnit_Framework_TestCase
14
- {
15
- public function testGetContentGeneratesContent()
16
- {
17
- $message = new FormRequest();
18
- $message->setField('foo', 'bar');
19
- $message->setField('bar', 'foo');
20
-
21
- $expected = "foo=bar&bar=foo";
22
- $this->assertEquals($expected, $message->getContent());
23
- }
24
-
25
- public function testGetContentGeneratesContentWithCustomArgSeparatorOutput()
26
- {
27
-
28
- $argSeparatorOutput = ini_get('arg_separator.output');
29
- ini_set('arg_separator.output', '&amp;');
30
-
31
- $message = new FormRequest();
32
- $message->setField('foo', 'bar');
33
- $message->setField('bar', 'foo');
34
-
35
- $expected = "foo=bar&bar=foo";
36
- $this->assertEquals($expected, $message->getContent());
37
-
38
- ini_set('arg_separator.output', $argSeparatorOutput);
39
- }
40
-
41
-
42
- public function testAddDataAddsData()
43
- {
44
- $message = new FormRequest();
45
- $message->setField('foo', 'bar');
46
-
47
- $this->assertEquals(array('foo' => 'bar'), $message->getFields());
48
- }
49
-
50
- /**
51
- * @expectedException \BadMethodCallException
52
- */
53
- public function testSetContentIsNotPermitted()
54
- {
55
- $message = new FormRequest();
56
- $message->setContent('foobar');
57
- }
58
-
59
- public function testSetFields()
60
- {
61
- $request = new FormRequest();
62
- $request->setFields(array('foo' => 'bar'));
63
- $this->assertEquals(array('foo' => 'bar'), $request->getFields());
64
- }
65
-
66
- public function testContentType()
67
- {
68
- $request = new FormRequest();
69
- $this->assertEquals('application/x-www-form-urlencoded', $request->getHeader('Content-Type'));
70
- }
71
-
72
- public function testDeepArray()
73
- {
74
- $request = new FormRequest();
75
- $request->setField('person', array('fname' => 'John', 'lname' => 'Doe'));
76
-
77
- $this->assertEquals('person%5Bfname%5D=John&person%5Blname%5D=Doe', $request->getContent());
78
- }
79
-
80
- public function testFieldPush()
81
- {
82
- $request = new FormRequest();
83
- $request->setField('colors[]', 'red');
84
- $request->setField('colors[]', 'blue');
85
-
86
- $this->assertEquals('colors%5B0%5D=red&colors%5B1%5D=blue', $request->getContent());
87
- }
88
-
89
- public function testMultipartHeaders()
90
- {
91
- $request = new FormRequest();
92
- $request->setField('foo', array('bar' => new FormUpload()));
93
-
94
- $headers = $request->getHeaders();
95
-
96
- $this->assertStringStartsWith('Content-Type: multipart/form-data; boundary=', $headers[0]);
97
- }
98
-
99
- public function testMultipartContent()
100
- {
101
- $upload = new FormUpload();
102
- $upload->setFilename('image.jpg');
103
- $upload->setContent('foobar');
104
-
105
- $request = new FormRequest();
106
- $request->setField('user[name]', 'Kris');
107
- $request->setField('user[image]', $upload);
108
-
109
- $content = $request->getContent();
110
-
111
- $this->assertContains("Content-Disposition: form-data; name=\"user[name]\"\r\n\r\nKris\r\n", $content);
112
- $this->assertContains("Content-Disposition: form-data; name=\"user[image]\"; filename=\"image.jpg\"\r\nContent-Type: text/plain\r\n\r\nfoobar\r\n", $content);
113
- }
114
-
115
- public function testFilenamelessUpload()
116
- {
117
- $this->setExpectedException('LogicException');
118
-
119
- $upload = new FormUpload();
120
- $upload->setContent('foobar');
121
-
122
- $request = new FormRequest();
123
- $request->setField('user[name]', 'Kris');
124
- $request->setField('user[image]', $upload);
125
-
126
- $content = $request->getContent();
127
- }
128
-
129
- public function testGetRequest()
130
- {
131
- $request = new FormRequest(FormRequest::METHOD_GET, '/search');
132
- $request->setField('q', 'cats');
133
-
134
- $this->assertEquals('/search?q=cats', $request->getResource());
135
- $this->assertEmpty($request->getContent());
136
- }
137
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/test/Buzz/Test/Message/FormUploadTest.php DELETED
@@ -1,44 +0,0 @@
1
- <?php
2
-
3
- namespace Buzz\Test\Message;
4
-
5
- use Buzz\Message\Form\FormUpload;
6
-
7
- class FormUploadTest extends \PHPUnit_Framework_TestCase
8
- {
9
- public function testStringContent()
10
- {
11
- $upload = new FormUpload();
12
- $upload->setName('company[logo]');
13
- $upload->setFilename('google.png');
14
- $upload->setContent(file_get_contents(__DIR__.'/Fixtures/google.png'));
15
-
16
- $this->assertEquals(array(
17
- 'Content-Disposition: form-data; name="company[logo]"; filename="google.png"',
18
- 'Content-Type: image/png',
19
- ), $upload->getHeaders());
20
- }
21
-
22
- public function testFileContent()
23
- {
24
- $upload = new FormUpload(__DIR__.'/Fixtures/google.png');
25
- $upload->setName('company[logo]');
26
-
27
- $this->assertEquals(array(
28
- 'Content-Disposition: form-data; name="company[logo]"; filename="google.png"',
29
- 'Content-Type: image/png',
30
- ), $upload->getHeaders());
31
- }
32
-
33
- public function testContentType()
34
- {
35
- $upload = new FormUpload(__DIR__.'/Fixtures/google.png');
36
- $upload->setName('company[logo]');
37
- $upload->setContentType('foo/bar');
38
-
39
- $this->assertEquals(array(
40
- 'Content-Disposition: form-data; name="company[logo]"; filename="google.png"',
41
- 'Content-Type: foo/bar',
42
- ), $upload->getHeaders());
43
- }
44
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/test/Buzz/Test/Message/RequestTest.php DELETED
@@ -1,141 +0,0 @@
1
- <?php
2
-
3
- namespace Buzz\Test\Message;
4
-
5
- use Buzz\Message\Request;
6
-
7
- class RequestTest extends \PHPUnit_Framework_TestCase
8
- {
9
- public function testConstructorSetsMethodResourceAndHost()
10
- {
11
- $request = new Request('HEAD', '/resource/123', 'http://example.com');
12
-
13
- $this->assertEquals('HEAD', $request->getMethod());
14
- $this->assertEquals('/resource/123', $request->getResource());
15
- $this->assertEquals('http://example.com', $request->getHost());
16
- }
17
-
18
- public function testGetUrlFormatsAUrl()
19
- {
20
- $request = new Request();
21
- $request->setHost('http://example.com');
22
- $request->setResource('/resource/123');
23
-
24
- $this->assertEquals('http://example.com/resource/123', $request->getUrl());
25
- }
26
-
27
- public function testFromUrlSetsRequestValues()
28
- {
29
- $request = new Request();
30
- $request->fromUrl('http://example.com/resource/123?foo=bar#foobar');
31
-
32
- $this->assertEquals('http://example.com', $request->getHost());
33
- $this->assertEquals('/resource/123?foo=bar', $request->getResource());
34
- }
35
-
36
- public function testFromUrlSetsADefaultResource()
37
- {
38
- $request = new Request();
39
- $request->fromUrl('http://example.com');
40
-
41
- $this->assertEquals('/', $request->getResource());
42
-
43
- $request = new Request();
44
- $request->fromUrl('http://example.com?foo=bar');
45
-
46
- $this->assertEquals('/?foo=bar', $request->getResource());
47
- }
48
-
49
- public function testFromUrlSetsADefaultScheme()
50
- {
51
- $request = new Request();
52
- $request->fromUrl('example.com/foo/bar');
53
-
54
- $this->assertEquals('http://example.com', $request->getHost());
55
- $this->assertEquals('/foo/bar', $request->getResource());
56
- }
57
-
58
- public function testFromUrlLeaveHostEmptyIfNoneIsProvided()
59
- {
60
- $request = new Request();
61
- $request->fromUrl('/foo');
62
-
63
- $this->assertNull($request->getHost());
64
- }
65
-
66
- public function testFromUrlAcceptsPort()
67
- {
68
- $request = new Request();
69
- $request->fromUrl('http://localhost:3000/foo');
70
-
71
- $this->assertEquals('http://localhost:3000', $request->getHost());
72
- $this->assertEquals('/foo', $request->getResource());
73
- }
74
-
75
- public function testFromUrlRejectsInvalidUrl()
76
- {
77
- $this->setExpectedException('InvalidArgumentException');
78
-
79
- // port number is too high
80
- $request = new Request();
81
- $request->fromUrl('http://localhost:123456');
82
- }
83
-
84
- public function testIsSecureChecksScheme()
85
- {
86
- $request = new Request('GET', '/resource/123', 'http://example.com');
87
- $this->assertFalse($request->isSecure());
88
-
89
- $request = new Request('GET', '/resource/123', 'https://example.com');
90
- $this->assertTrue($request->isSecure());
91
- }
92
-
93
- public function testToStringFormatsTheRequest()
94
- {
95
- $request = new Request('POST', '/resource/123', 'http://example.com');
96
- $request->setProtocolVersion(1.1);
97
- $request->addHeader('Content-Type: application/x-www-form-urlencoded');
98
- $request->setContent('foo=bar&bar=baz');
99
-
100
- $expected = "POST /resource/123 HTTP/1.1\r\n";
101
- $expected .= "Host: http://example.com\r\n";
102
- $expected .= "Content-Type: application/x-www-form-urlencoded\r\n";
103
- $expected .= "\r\n";
104
- $expected .= "foo=bar&bar=baz\r\n";
105
-
106
- $this->assertEquals($expected, (string) $request);
107
- }
108
-
109
- public function testMethodIsAlwaysUppercased()
110
- {
111
- $request = new Request('post', '/resource/123', 'http://example.com');
112
-
113
- $this->assertEquals('POST', $request->getMethod());
114
- }
115
-
116
- public function testSetMethod()
117
- {
118
- $request = new Request();
119
- $request->setMethod('get');
120
- $this->assertEquals('GET', $request->getMethod());
121
- }
122
-
123
- public function testCookieMerge()
124
- {
125
- $request = new Request();
126
- $request->addHeader('Cookie: foo=bar');
127
- $request->addHeader('Content-Type: text/plain');
128
- $request->addHeader('Cookie: bar=foo');
129
-
130
- $this->assertEquals(array(
131
- 'Cookie: foo=bar; bar=foo',
132
- 'Content-Type: text/plain',
133
- ), $request->getHeaders());
134
-
135
- $expected = "GET / HTTP/1.1\r\n";
136
- $expected .= "Cookie: foo=bar; bar=foo\r\n";
137
- $expected .= "Content-Type: text/plain\r\n";
138
-
139
- $this->assertEquals($expected, (string) $request);
140
- }
141
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/test/Buzz/Test/Message/ResponseTest.php DELETED
@@ -1,114 +0,0 @@
1
- <?php
2
-
3
- namespace Buzz\Test\Message;
4
-
5
- use Buzz\Message\Response;
6
-
7
- class ResponseTest extends \PHPUnit_Framework_TestCase
8
- {
9
- public function testGetProtocolVersionReturnsTheProtocolVersion()
10
- {
11
- $response = new Response();
12
-
13
- $this->assertNull($response->getProtocolVersion());
14
-
15
- $response->addHeader('HTTP/1.0 200 OK');
16
-
17
- $this->assertEquals(1.0, $response->getProtocolVersion());
18
- }
19
-
20
- public function testGetStatusCodeReturnsTheStatusCode()
21
- {
22
- $response = new Response();
23
-
24
- $this->assertNull($response->getStatusCode());
25
-
26
- $response->addHeader('HTTP/1.0 200 OK');
27
-
28
- $this->assertEquals(200, $response->getStatusCode());
29
- }
30
-
31
- public function testGetReasonPhraseReturnsTheReasonPhrase()
32
- {
33
- $response = new Response();
34
-
35
- $this->assertEquals($response->getReasonPhrase(), null);
36
-
37
- $response->addHeader('HTTP/1.0 200 OK');
38
-
39
- $this->assertEquals('OK', $response->getReasonPhrase());
40
- }
41
-
42
- public function testGetReasonPhraseReturnsAMultiwordReasonPhrase()
43
- {
44
- $response = new Response();
45
-
46
- $this->assertNull($response->getReasonPhrase());
47
-
48
- $response->addHeader('HTTP/1.0 500 Internal Server Error');
49
-
50
- $this->assertEquals('Internal Server Error', $response->getReasonPhrase());
51
- }
52
-
53
- public function testAddHeadersResetsStatusLine()
54
- {
55
- $response = new Response();
56
- $this->assertNull($response->getStatusCode());
57
- $response->addHeaders(array('HTTP/1.0 200 OK'));
58
- $this->assertEquals(200, $response->getStatusCode());
59
- }
60
-
61
- /**
62
- * @dataProvider statusProvider
63
- *
64
- *
65
- */
66
- public function testIssers($code, $method, $expected)
67
- {
68
- $response = new Response();
69
- $response->addHeaders(array('HTTP/1.0 '.$code.' Status'));
70
- $this->assertEquals($expected, $response->{$method}());
71
- }
72
-
73
- public function statusProvider()
74
- {
75
- return array(
76
- array(50, 'isInvalid', true),
77
- array(700, 'isInvalid', true),
78
- array(100, 'isInvalid', false),
79
-
80
- array(100, 'isInformational', true),
81
- array(199, 'isInformational', true),
82
- array(200, 'isInformational', false),
83
-
84
- array(200, 'isSuccessful', true),
85
- array(299, 'isSuccessful', true),
86
- array(300, 'isSuccessful', false),
87
-
88
- array(301, 'isRedirection', true),
89
- array(302, 'isRedirection', true),
90
- array(400, 'isRedirection', false),
91
-
92
- array(404, 'isClientError', true),
93
- array(401, 'isClientError', true),
94
- array(500, 'isClientError', false),
95
-
96
- array(500, 'isServerError', true),
97
- array(400, 'isServerError', false),
98
-
99
- array(200, 'isOk', true),
100
- array(201, 'isOk', false),
101
-
102
- array(403, 'isForbidden', true),
103
- array(404, 'isForbidden', false),
104
-
105
- array(404, 'isNotFound', true),
106
- array(403, 'isNotFound', false),
107
-
108
- array(201, 'isEmpty', true),
109
- array(204, 'isEmpty', true),
110
- array(304, 'isEmpty', true),
111
- array(203, 'isEmpty', false),
112
- );
113
- }
114
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/test/Buzz/Test/Util/CookieJarTest.php DELETED
@@ -1,73 +0,0 @@
1
- <?php
2
-
3
- namespace Buzz\Test\Cookie;
4
-
5
- use Buzz\Util\Cookie;
6
- use Buzz\Util\CookieJar;
7
- use Buzz\Message;
8
-
9
- class CookieJarTest extends \PHPUnit_Framework_TestCase
10
- {
11
- public function testProcessSetCookieHeadersSetsCookies()
12
- {
13
- $request = new Message\Request();
14
- $request->setHost('http://www.example.com');
15
-
16
- $response = new Message\Response();
17
- $response->addHeader('Set-Cookie: SESSION2=qwerty');
18
- $response->addHeader('Set-Cookie: SESSION1=asdf');
19
-
20
- $jar = new CookieJar();
21
- $jar->processSetCookieHeaders($request, $response);
22
-
23
- $cookies = $jar->getCookies();
24
-
25
- $this->assertEquals(2, count($cookies));
26
- foreach ($cookies as $cookie) {
27
- $this->assertEquals('www.example.com', $cookie->getAttribute(Cookie::ATTR_DOMAIN));
28
- $this->assertTrue(in_array($cookie->getName(), array('SESSION1', 'SESSION2')));
29
- }
30
- }
31
-
32
- public function testAddCookieHeadersAddsCookieHeaders()
33
- {
34
- $request = new Message\Request();
35
- $request->setHost('http://www.example.com');
36
-
37
- $cookie = new Cookie();
38
- $cookie->setName('SESSION');
39
- $cookie->setValue('asdf');
40
- $cookie->setAttribute(Cookie::ATTR_DOMAIN, '.example.com');
41
-
42
- $jar = new CookieJar();
43
- $jar->setCookies(array($cookie));
44
- $jar->addCookieHeaders($request);
45
-
46
- $this->assertEquals('SESSION=asdf', $request->getHeader('Cookie'));
47
- }
48
-
49
- public function testClearExpiredCookiesRemovesExpiredCookies()
50
- {
51
- $cookie = new Cookie();
52
- $cookie->setName('SESSION');
53
- $cookie->setValue('asdf');
54
- $cookie->setAttribute(Cookie::ATTR_EXPIRES, 'Fri, 01-Dec-1999 00:00:00 GMT');
55
-
56
- $jar = new CookieJar();
57
- $jar->addCookie($cookie);
58
- $jar->clearExpiredCookies();
59
-
60
- $this->assertEquals(0, count($jar->getCookies()));
61
-
62
- $cookie = new Cookie();
63
- $cookie->setName('SESSION');
64
- $cookie->setValue('asdf');
65
- $cookie->setAttribute(Cookie::ATTR_MAX_AGE, '-60');
66
-
67
- $jar = new CookieJar();
68
- $jar->addCookie($cookie);
69
- $jar->clearExpiredCookies();
70
-
71
- $this->assertEquals(0, count($jar->getCookies()));
72
- }
73
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/test/Buzz/Test/Util/CookieTest.php DELETED
@@ -1,151 +0,0 @@
1
- <?php
2
-
3
- namespace Buzz\Test\Cookie;
4
-
5
- use Buzz\Util\Cookie;
6
- use Buzz\Message;
7
-
8
- class CookieTest extends \PHPUnit_Framework_TestCase
9
- {
10
- public function testFromSetCookieHeaderSetsCookieAttributes()
11
- {
12
- $cookie = new Cookie();
13
- $cookie->fromSetCookieHeader('SESSION=asdf; expires='.date('r', strtotime('2000-01-01 00:00:00')).'; path=/; domain=.example.com; secure', 'www.example.com');
14
-
15
- $this->assertEquals('SESSION', $cookie->getName());
16
- $this->assertEquals('asdf', $cookie->getValue());
17
- $this->assertEquals(array(
18
- 'expires' => date('r', strtotime('2000-01-01 00:00:00')),
19
- 'path' => '/',
20
- 'domain' => '.example.com',
21
- 'secure' => null,
22
- ), $cookie->getAttributes());
23
- }
24
-
25
- public function testFromSetCookieHeaderFallsBackToIssuingDomain()
26
- {
27
- $cookie = new Cookie();
28
- $cookie->fromSetCookieHeader('SESSION=asdf', 'example.com');
29
-
30
- $this->assertEquals('example.com', $cookie->getAttribute(Cookie::ATTR_DOMAIN));
31
- }
32
-
33
- public function testToCookieHeaderFormatsACookieHeader()
34
- {
35
- $cookie = new Cookie();
36
- $cookie->setName('SESSION');
37
- $cookie->setValue('asdf');
38
-
39
- $this->assertEquals('Cookie: SESSION=asdf', $cookie->toCookieHeader());
40
- }
41
-
42
- public function testMatchesDomainMatchesSimpleDomains()
43
- {
44
- $cookie = new Cookie();
45
- $cookie->setAttribute('domain', 'nytimes.com');
46
-
47
- $this->assertTrue($cookie->matchesDomain('nytimes.com'));
48
- $this->assertFalse($cookie->matchesDomain('google.com'));
49
- }
50
-
51
- public function testMatchesDomainMatchesSubdomains()
52
- {
53
- $cookie = new Cookie();
54
- $cookie->setAttribute('domain', '.nytimes.com');
55
-
56
- $this->assertTrue($cookie->matchesDomain('nytimes.com'));
57
- $this->assertTrue($cookie->matchesDomain('blogs.nytimes.com'));
58
- $this->assertFalse($cookie->matchesDomain('google.com'));
59
- }
60
-
61
- public function testIsExpiredChecksMaxAge()
62
- {
63
- $cookie = new Cookie();
64
- $cookie->setAttribute('max-age', 60);
65
-
66
- $this->assertFalse($cookie->isExpired());
67
-
68
- $cookie = new Cookie();
69
- $cookie->setCreatedAt(strtotime('-1 hour'));
70
- $cookie->setAttribute('max-age', 60);
71
-
72
- $this->assertTrue($cookie->isExpired());
73
- }
74
-
75
- public function testIsExpiredChecksExpires()
76
- {
77
- $cookie = new Cookie();
78
- $cookie->setAttribute('expires', date('r', strtotime('+1 week')));
79
-
80
- $this->assertFalse($cookie->isExpired());
81
-
82
- $cookie = new Cookie();
83
- $cookie->setAttribute('expires', date('r', strtotime('-1 month')));
84
-
85
- $this->assertTrue($cookie->isExpired());
86
- }
87
-
88
- public function testMatchesPathChecksPath()
89
- {
90
- $cookie = new Cookie();
91
- $cookie->setAttribute('path', '/resource');
92
-
93
- $this->assertTrue($cookie->matchesPath('/resource/123'));
94
- $this->assertFalse($cookie->matchesPath('/login'));
95
-
96
- $cookie = new Cookie();
97
- $this->assertTrue($cookie->matchesPath('/resource/123'));
98
- }
99
-
100
- public function testMatchesRequestChecksDomain()
101
- {
102
- $request = new Message\Request();
103
- $request->setHost('http://example.com');
104
-
105
- $cookie = new Cookie();
106
- $cookie->setAttribute(Cookie::ATTR_DOMAIN, 'example.com');
107
-
108
- $this->assertTrue($cookie->matchesRequest($request));
109
-
110
- $cookie = new Cookie();
111
- $cookie->setAttribute(Cookie::ATTR_DOMAIN, 'foo.com');
112
-
113
- $this->assertFalse($cookie->matchesRequest($request));
114
- }
115
-
116
- public function testMatchesRequestChecksPath()
117
- {
118
- $request = new Message\Request();
119
- $request->setHost('http://example.com');
120
- $request->setResource('/foo/bar');
121
-
122
- $cookie = new Cookie();
123
- $cookie->setAttribute(Cookie::ATTR_DOMAIN, 'example.com');
124
- $cookie->setAttribute(Cookie::ATTR_PATH, '/foo');
125
-
126
- $this->assertTrue($cookie->matchesRequest($request));
127
-
128
- $cookie = new Cookie();
129
- $cookie->setAttribute(Cookie::ATTR_DOMAIN, 'example.com');
130
- $cookie->setAttribute(Cookie::ATTR_PATH, '/foo/bar/baz');
131
-
132
- $this->assertFalse($cookie->matchesRequest($request));
133
- }
134
-
135
- public function testMatchesRequestChecksSecureAttribute()
136
- {
137
- $request = new Message\Request();
138
- $request->setHost('https://example.com');
139
-
140
- $cookie = new Cookie();
141
- $cookie->setAttribute(Cookie::ATTR_DOMAIN, 'example.com');
142
- $cookie->setAttribute(Cookie::ATTR_SECURE, null);
143
-
144
- $this->assertTrue($cookie->matchesRequest($request));
145
-
146
- $request = new Message\Request();
147
- $request->setHost('http://example.com');
148
-
149
- $this->assertFalse($cookie->matchesRequest($request));
150
- }
151
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/test/Buzz/Test/Util/UrlTest.php DELETED
@@ -1,57 +0,0 @@
1
- <?php
2
-
3
- namespace Buzz\Test\Util;
4
-
5
- use Buzz\Util\Url;
6
-
7
- class UrlTest extends \PHPUnit_Framework_TestCase
8
- {
9
- /**
10
- * @dataProvider provideUrlAndHost
11
- */
12
- public function testGetHost($urlStr, $host, $resource)
13
- {
14
- $url = new Url($urlStr);
15
- $this->assertEquals($host, $url->getHost());
16
- $this->assertEquals($resource, $url->getResource());
17
- }
18
-
19
- public function provideUrlAndHost()
20
- {
21
- return array(
22
- array('https://example.com/resource/123?foo=bar#foobar', 'https://example.com', '/resource/123?foo=bar'),
23
- array('http://example.com', 'http://example.com', '/'),
24
- array('http://example.com?foo=bar', 'http://example.com', '/?foo=bar'),
25
- array('example.com/foo/bar', 'http://example.com', '/foo/bar'),
26
- array('/foo', null, '/foo'),
27
- array('http://localhost:3000/foo', 'http://localhost:3000', '/foo'),
28
- );
29
- }
30
-
31
- public function testInvalidUrl()
32
- {
33
- $this->setExpectedException('InvalidArgumentException');
34
- new Url('http://localhost:123456');
35
- }
36
-
37
- /**
38
- * @dataProvider providePattern
39
- */
40
- public function testFormat($input, $pattern, $expected)
41
- {
42
- $url = new Url($input);
43
- $this->assertEquals($expected, $url->format($pattern));
44
- }
45
-
46
- public function providePattern()
47
- {
48
- $full = 'http://foo:bar@example.com:123/asdf?tweedle=dee#dum';
49
- $host = 'example.com';
50
-
51
- return array(
52
- array($full, 's://u:a@h:op?q#f', 'http://foo:bar@example.com:123/asdf?tweedle=dee#dum'),
53
- array($full, 'HR', 'http://example.com:123/asdf?tweedle=dee'),
54
- array($host, 'HR', 'http://example.com/'),
55
- );
56
- }
57
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/test/etc/nginx.conf DELETED
@@ -1,49 +0,0 @@
1
- events {
2
- worker_connections 1024;
3
- }
4
-
5
- http {
6
- keepalive_timeout 65;
7
-
8
- fastcgi_connect_timeout 60;
9
- fastcgi_send_timeout 180;
10
- fastcgi_read_timeout 180;
11
- fastcgi_buffer_size 32k;
12
- fastcgi_buffers 16 16k;
13
- fastcgi_intercept_errors on;
14
-
15
- upstream php {
16
- server 127.0.0.1:9000;
17
- }
18
-
19
- access_log /var/log/nginx/access.log;
20
- error_log /var/log/nginx/error.log;
21
-
22
- server {
23
- listen 8080 default_server;
24
- server_name .localhost;
25
-
26
- charset utf-8;
27
-
28
- root .;
29
-
30
- location ~ \.php$ {
31
- fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
32
-
33
- fastcgi_param QUERY_STRING $query_string;
34
- fastcgi_param REQUEST_METHOD $request_method;
35
- fastcgi_param CONTENT_TYPE $content_type if_not_empty;
36
-
37
- fastcgi_param CONTENT_LENGTH $content_length;
38
-
39
- fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
40
- fastcgi_param SCRIPT_NAME $fastcgi_script_name;
41
- fastcgi_param REQUEST_URI $request_uri;
42
- fastcgi_param DOCUMENT_URI $document_uri;
43
- fastcgi_param DOCUMENT_ROOT $document_root;
44
- fastcgi_param SERVER_PROTOCOL $server_protocol;
45
-
46
- fastcgi_pass php;
47
- }
48
- }
49
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/test/etc/squid.conf DELETED
@@ -1,2 +0,0 @@
1
- http_access allow all
2
- http_port 3128
 
 
app/code/community/Webinterpret/Connector/Lib/kriswallsmith/buzz/test/server.php DELETED
@@ -1,18 +0,0 @@
1
- <?php
2
-
3
- if (isset($_GET['redirect_to'])) {
4
- header('Location: '.$_GET['redirect_to']);
5
- die;
6
- }
7
-
8
- if (isset($_GET['delay'])) {
9
- sleep($_GET['delay']);
10
- }
11
-
12
- echo json_encode(array(
13
- 'SERVER' => $_SERVER,
14
- 'GET' => $_GET,
15
- 'POST' => $_POST,
16
- 'FILES' => $_FILES,
17
- 'INPUT' => file_get_contents('php://input'),
18
- ));
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/maxmind-db/reader/CHANGELOG.md DELETED
@@ -1,87 +0,0 @@
1
- CHANGELOG
2
- =========
3
-
4
- 1.1.1 (2016-09-15)
5
- ------------------
6
-
7
- * Development files were added to the `.gitattributes` as `export-ignore` so
8
- that they are not part of the Composer release. Pull request by Michele
9
- Locati. GitHub #39.
10
-
11
- 1.1.0 (2016-01-04)
12
- ------------------
13
-
14
- * The MaxMind DB extension now supports PHP 7. Pull request by John Boehr.
15
- GitHub #27.
16
-
17
- 1.0.3 (2015-03-13)
18
- ------------------
19
-
20
- * All uses of `strlen` were removed. This should prevent issues in situations
21
- where the function is overloaded or otherwise broken.
22
-
23
- 1.0.2 (2015-01-19)
24
- ------------------
25
-
26
- * Previously the MaxMind DB extension would cause a segfault if the Reader
27
- object's destructor was called without first having called the constructor.
28
- (Reported by Matthias Saou & Juan Peri. GitHub #20.)
29
-
30
- 1.0.1 (2015-01-12)
31
- ------------------
32
-
33
- * In the last several releases, the version number in the extension was
34
- incorrect. This release is being done to correct it. No other code changes
35
- are included.
36
-
37
- 1.0.0 (2014-09-22)
38
- ------------------
39
-
40
- * First production release.
41
- * In the pure PHP reader, a string length test after `fread()` was replaced
42
- with the difference between the start pointer and the end pointer. This
43
- provided a 15% speed increase.
44
-
45
- 0.3.3 (2014-09-15)
46
- ------------------
47
-
48
- * Clarified behavior of 128-bit type in documentation.
49
- * Updated phpunit and fixed some test breakage from the newer version.
50
-
51
- 0.3.2 (2014-09-10)
52
- ------------------
53
-
54
- * Fixed invalid reference to global class RuntimeException from namespaced
55
- code. Fixed by Steven Don. GitHub issue #15.
56
- * Additional documentation of `Metadata` class as well as misc. documentation
57
- cleanup.
58
-
59
- 0.3.1 (2014-05-01)
60
- ------------------
61
-
62
- * The API now works when `mbstring.func_overload` is set.
63
- * BCMath is no longer required. If the decoder encounters a big integer,
64
- it will try to use GMP and then BCMath. If both of those fail, it will
65
- throw an exception. No databases released by MaxMind currently use big
66
- integers.
67
- * The API now officially supports HHVM when using the pure PHP reader.
68
-
69
- 0.3.0 (2014-02-19)
70
- ------------------
71
-
72
- * This API is now licensed under the Apache License, Version 2.0.
73
- * The code for the C extension was cleaned up, fixing several potential
74
- issues.
75
-
76
- 0.2.0 (2013-10-21)
77
- ------------------
78
-
79
- * Added optional C extension for using libmaxminddb in place of the pure PHP
80
- reader.
81
- * Significantly improved error handling in pure PHP reader.
82
- * Improved performance for IPv4 lookups in an IPv6 database.
83
-
84
- 0.1.0 (2013-07-16)
85
- ------------------
86
-
87
- * Initial release
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/maxmind-db/reader/LICENSE DELETED
@@ -1,202 +0,0 @@
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.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/maxmind-db/reader/README.md DELETED
@@ -1,140 +0,0 @@
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 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.3 or greater. Older versions of PHP are not
121
- supported. The pure PHP reader included with this library is works and is
122
- tested with HHVM.
123
-
124
- The GMP or BCMath extension may be required to read some databases
125
- using the pure PHP API.
126
-
127
- ## Contributing ##
128
-
129
- Patches and pull requests are encouraged. All code should follow the PSR-1 and
130
- PSR-2 style guidelines. Please include unit tests whenever possible.
131
-
132
- ## Versioning ##
133
-
134
- The MaxMind DB Reader PHP API uses [Semantic Versioning](http://semver.org/).
135
-
136
- ## Copyright and License ##
137
-
138
- This software is Copyright (c) 2014 by MaxMind, Inc.
139
-
140
- This is free software, licensed under the Apache License, Version 2.0.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/maxmind-db/reader/composer.json DELETED
@@ -1,28 +0,0 @@
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.3.1"
17
- },
18
- "require-dev": {
19
- "phpunit/phpunit": "4.2.*",
20
- "satooshi/php-coveralls": "1.0.*",
21
- "squizlabs/php_codesniffer": "2.*"
22
- },
23
- "autoload": {
24
- "psr-0": {
25
- "MaxMind": "src/"
26
- }
27
- }
28
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/maxmind-db/reader/ext/config.m4 DELETED
@@ -1,19 +0,0 @@
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
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/maxmind-db/reader/ext/maxminddb.c DELETED
@@ -1,565 +0,0 @@
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
- maxminddb_ce->ce_flags |= ZEND_ACC_FINAL;
539
- memcpy(&maxminddb_obj_handlers,
540
- zend_get_std_object_handlers(), sizeof(zend_object_handlers));
541
- maxminddb_obj_handlers.clone_obj = NULL;
542
- #ifdef ZEND_ENGINE_3
543
- maxminddb_obj_handlers.offset = XtOffsetOf(maxminddb_obj, std);
544
- maxminddb_obj_handlers.free_obj = maxminddb_free_storage;
545
- #endif
546
-
547
- return SUCCESS;
548
- }
549
-
550
- zend_module_entry maxminddb_module_entry = {
551
- STANDARD_MODULE_HEADER,
552
- PHP_MAXMINDDB_EXTNAME,
553
- NULL,
554
- PHP_MINIT(maxminddb),
555
- NULL,
556
- NULL,
557
- NULL,
558
- NULL,
559
- PHP_MAXMINDDB_VERSION,
560
- STANDARD_MODULE_PROPERTIES
561
- };
562
-
563
- #ifdef COMPILE_DL_MAXMINDDB
564
- ZEND_GET_MODULE(maxminddb)
565
- #endif
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/maxmind-db/reader/ext/php_maxminddb.h DELETED
@@ -1,24 +0,0 @@
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.1.1"
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
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/maxmind-db/reader/ext/tests/001-load.phpt DELETED
@@ -1,10 +0,0 @@
1
- --TEST--
2
- Check for maxminddb presence
3
- --SKIPIF--
4
- <?php if (!extension_loaded("maxminddb")) print "skip"; ?>
5
- --FILE--
6
- <?php
7
- echo "maxminddb extension is available";
8
- ?>
9
- --EXPECT--
10
- maxminddb extension is available
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/maxmind-db/reader/src/MaxMind/Db/Reader.php DELETED
@@ -1,296 +0,0 @@
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
-
20
- private $decoder;
21
- private $fileHandle;
22
- private $fileSize;
23
- private $ipV4Start;
24
- private $metadata;
25
-
26
- /**
27
- * Constructs a Reader for the MaxMind DB format. The file passed to it must
28
- * be a valid MaxMind DB file such as a GeoIp2 database file.
29
- *
30
- * @param string $database
31
- * the MaxMind DB file to use.
32
- * @throws \InvalidArgumentException for invalid database path or unknown arguments
33
- * @throws \MaxMind\Db\Reader\InvalidDatabaseException
34
- * if the database is invalid or there is an error reading
35
- * from it.
36
- */
37
- public function __construct($database)
38
- {
39
- if (func_num_args() != 1) {
40
- throw new \InvalidArgumentException(
41
- 'The constructor takes exactly one argument.'
42
- );
43
- }
44
-
45
- if (!is_readable($database)) {
46
- throw new \InvalidArgumentException(
47
- "The file \"$database\" does not exist or is not readable."
48
- );
49
- }
50
- $this->fileHandle = @fopen($database, 'rb');
51
- if ($this->fileHandle === false) {
52
- throw new \InvalidArgumentException(
53
- "Error opening \"$database\"."
54
- );
55
- }
56
- $this->fileSize = @filesize($database);
57
- if ($this->fileSize === false) {
58
- throw new \UnexpectedValueException(
59
- "Error determining the size of \"$database\"."
60
- );
61
- }
62
-
63
- $start = $this->findMetadataStart($database);
64
- $metadataDecoder = new Decoder($this->fileHandle, $start);
65
- list($metadataArray) = $metadataDecoder->decode($start);
66
- $this->metadata = new Metadata($metadataArray);
67
- $this->decoder = new Decoder(
68
- $this->fileHandle,
69
- $this->metadata->searchTreeSize + self::$DATA_SECTION_SEPARATOR_SIZE
70
- );
71
- }
72
-
73
- /**
74
- * Looks up the <code>address</code> in the MaxMind DB.
75
- *
76
- * @param string $ipAddress
77
- * the IP address to look up.
78
- * @return array the record for the IP address.
79
- * @throws \BadMethodCallException if this method is called on a closed database.
80
- * @throws \InvalidArgumentException if something other than a single IP address is passed to the method.
81
- * @throws InvalidDatabaseException
82
- * if the database is invalid or there is an error reading
83
- * from it.
84
- */
85
- public function get($ipAddress)
86
- {
87
- if (func_num_args() != 1) {
88
- throw new \InvalidArgumentException(
89
- 'Method takes exactly one argument.'
90
- );
91
- }
92
-
93
- if (!is_resource($this->fileHandle)) {
94
- throw new \BadMethodCallException(
95
- 'Attempt to read from a closed MaxMind DB.'
96
- );
97
- }
98
-
99
- if (!filter_var($ipAddress, FILTER_VALIDATE_IP)) {
100
- throw new \InvalidArgumentException(
101
- "The value \"$ipAddress\" is not a valid IP address."
102
- );
103
- }
104
-
105
- if ($this->metadata->ipVersion == 4 && strrpos($ipAddress, ':')) {
106
- throw new \InvalidArgumentException(
107
- "Error looking up $ipAddress. You attempted to look up an"
108
- . " IPv6 address in an IPv4-only database."
109
- );
110
- }
111
- $pointer = $this->findAddressInTree($ipAddress);
112
- if ($pointer == 0) {
113
- return null;
114
- }
115
- return $this->resolveDataPointer($pointer);
116
- }
117
-
118
- private function findAddressInTree($ipAddress)
119
- {
120
- // XXX - could simplify. Done as a byte array to ease porting
121
- $rawAddress = array_merge(unpack('C*', inet_pton($ipAddress)));
122
-
123
- $bitCount = count($rawAddress) * 8;
124
-
125
- // The first node of the tree is always node 0, at the beginning of the
126
- // value
127
- $node = $this->startNode($bitCount);
128
-
129
- for ($i = 0; $i < $bitCount; $i++) {
130
- if ($node >= $this->metadata->nodeCount) {
131
- break;
132
- }
133
- $tempBit = 0xFF & $rawAddress[$i >> 3];
134
- $bit = 1 & ($tempBit >> 7 - ($i % 8));
135
-
136
- $node = $this->readNode($node, $bit);
137
- }
138
- if ($node == $this->metadata->nodeCount) {
139
- // Record is empty
140
- return 0;
141
- } elseif ($node > $this->metadata->nodeCount) {
142
- // Record is a data pointer
143
- return $node;
144
- }
145
- throw new InvalidDatabaseException("Something bad happened");
146
- }
147
-
148
-
149
- private function startNode($length)
150
- {
151
- // Check if we are looking up an IPv4 address in an IPv6 tree. If this
152
- // is the case, we can skip over the first 96 nodes.
153
- if ($this->metadata->ipVersion == 6 && $length == 32) {
154
- return $this->ipV4StartNode();
155
- }
156
- // The first node of the tree is always node 0, at the beginning of the
157
- // value
158
- return 0;
159
- }
160
-
161
- private function ipV4StartNode()
162
- {
163
- // This is a defensive check. There is no reason to call this when you
164
- // have an IPv4 tree.
165
- if ($this->metadata->ipVersion == 4) {
166
- return 0;
167
- }
168
-
169
- if ($this->ipV4Start != 0) {
170
- return $this->ipV4Start;
171
- }
172
- $node = 0;
173
-
174
- for ($i = 0; $i < 96 && $node < $this->metadata->nodeCount; $i++) {
175
- $node = $this->readNode($node, 0);
176
- }
177
- $this->ipV4Start = $node;
178
- return $node;
179
- }
180
-
181
- private function readNode($nodeNumber, $index)
182
- {
183
- $baseOffset = $nodeNumber * $this->metadata->nodeByteSize;
184
-
185
- // XXX - probably could condense this.
186
- switch ($this->metadata->recordSize) {
187
- case 24:
188
- $bytes = Util::read($this->fileHandle, $baseOffset + $index * 3, 3);
189
- list(, $node) = unpack('N', "\x00" . $bytes);
190
- return $node;
191
- case 28:
192
- $middleByte = Util::read($this->fileHandle, $baseOffset + 3, 1);
193
- list(, $middle) = unpack('C', $middleByte);
194
- if ($index == 0) {
195
- $middle = (0xF0 & $middle) >> 4;
196
- } else {
197
- $middle = 0x0F & $middle;
198
- }
199
- $bytes = Util::read($this->fileHandle, $baseOffset + $index * 4, 3);
200
- list(, $node) = unpack('N', chr($middle) . $bytes);
201
- return $node;
202
- case 32:
203
- $bytes = Util::read($this->fileHandle, $baseOffset + $index * 4, 4);
204
- list(, $node) = unpack('N', $bytes);
205
- return $node;
206
- default:
207
- throw new InvalidDatabaseException(
208
- 'Unknown record size: '
209
- . $this->metadata->recordSize
210
- );
211
- }
212
- }
213
-
214
- private function resolveDataPointer($pointer)
215
- {
216
- $resolved = $pointer - $this->metadata->nodeCount
217
- + $this->metadata->searchTreeSize;
218
- if ($resolved > $this->fileSize) {
219
- throw new InvalidDatabaseException(
220
- "The MaxMind DB file's search tree is corrupt"
221
- );
222
- }
223
-
224
- list($data) = $this->decoder->decode($resolved);
225
- return $data;
226
- }
227
-
228
- /*
229
- * This is an extremely naive but reasonably readable implementation. There
230
- * are much faster algorithms (e.g., Boyer-Moore) for this if speed is ever
231
- * an issue, but I suspect it won't be.
232
- */
233
- private function findMetadataStart($filename)
234
- {
235
- $handle = $this->fileHandle;
236
- $fstat = fstat($handle);
237
- $fileSize = $fstat['size'];
238
- $marker = self::$METADATA_START_MARKER;
239
- $markerLength = self::$METADATA_START_MARKER_LENGTH;
240
-
241
- for ($i = 0; $i < $fileSize - $markerLength + 1; $i++) {
242
- for ($j = 0; $j < $markerLength; $j++) {
243
- fseek($handle, $fileSize - $i - $j - 1);
244
- $matchBit = fgetc($handle);
245
- if ($matchBit != $marker[$markerLength - $j - 1]) {
246
- continue 2;
247
- }
248
- }
249
- return $fileSize - $i;
250
- }
251
- throw new InvalidDatabaseException(
252
- "Error opening database file ($filename). " .
253
- 'Is this a valid MaxMind DB file?'
254
- );
255
- }
256
-
257
- /**
258
- * @throws \InvalidArgumentException if arguments are passed to the method.
259
- * @throws \BadMethodCallException if the database has been closed.
260
- * @return Metadata object for the database.
261
- */
262
- public function metadata()
263
- {
264
- if (func_num_args()) {
265
- throw new \InvalidArgumentException(
266
- 'Method takes no arguments.'
267
- );
268
- }
269
-
270
- // Not technically required, but this makes it consistent with
271
- // C extension and it allows us to change our implementation later.
272
- if (!is_resource($this->fileHandle)) {
273
- throw new \BadMethodCallException(
274
- 'Attempt to read from a closed MaxMind DB.'
275
- );
276
- }
277
-
278
- return $this->metadata;
279
- }
280
-
281
- /**
282
- * Closes the MaxMind DB and returns resources to the system.
283
- *
284
- * @throws \Exception
285
- * if an I/O error occurs.
286
- */
287
- public function close()
288
- {
289
- if (!is_resource($this->fileHandle)) {
290
- throw new \BadMethodCallException(
291
- 'Attempt to close a closed MaxMind DB.'
292
- );
293
- }
294
- fclose($this->fileHandle);
295
- }
296
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/maxmind-db/reader/src/MaxMind/Db/Reader/Decoder.php DELETED
@@ -1,309 +0,0 @@
1
- <?php
2
-
3
- namespace MaxMind\Db\Reader;
4
-
5
- use MaxMind\Db\Reader\InvalidDatabaseException;
6
- use MaxMind\Db\Reader\Util;
7
-
8
- class Decoder
9
- {
10
-
11
- private $fileStream;
12
- private $pointerBase;
13
- // This is only used for unit testing
14
- private $pointerTestHack;
15
- private $switchByteOrder;
16
-
17
- private $types = array(
18
- 0 => 'extended',
19
- 1 => 'pointer',
20
- 2 => 'utf8_string',
21
- 3 => 'double',
22
- 4 => 'bytes',
23
- 5 => 'uint16',
24
- 6 => 'uint32',
25
- 7 => 'map',
26
- 8 => 'int32',
27
- 9 => 'uint64',
28
- 10 => 'uint128',
29
- 11 => 'array',
30
- 12 => 'container',
31
- 13 => 'end_marker',
32
- 14 => 'boolean',
33
- 15 => 'float',
34
- );
35
-
36
- public function __construct(
37
- $fileStream,
38
- $pointerBase = 0,
39
- $pointerTestHack = false
40
- ) {
41
- $this->fileStream = $fileStream;
42
- $this->pointerBase = $pointerBase;
43
- $this->pointerTestHack = $pointerTestHack;
44
-
45
- $this->switchByteOrder = $this->isPlatformLittleEndian();
46
- }
47
-
48
-
49
- public function decode($offset)
50
- {
51
- list(, $ctrlByte) = unpack(
52
- 'C',
53
- Util::read($this->fileStream, $offset, 1)
54
- );
55
- $offset++;
56
-
57
- $type = $this->types[$ctrlByte >> 5];
58
-
59
- // Pointers are a special case, we don't read the next $size bytes, we
60
- // use the size to determine the length of the pointer and then follow
61
- // it.
62
- if ($type == 'pointer') {
63
- list($pointer, $offset) = $this->decodePointer($ctrlByte, $offset);
64
-
65
- // for unit testing
66
- if ($this->pointerTestHack) {
67
- return array($pointer);
68
- }
69
-
70
- list($result) = $this->decode($pointer);
71
-
72
- return array($result, $offset);
73
- }
74
-
75
- if ($type == 'extended') {
76
- list(, $nextByte) = unpack(
77
- 'C',
78
- Util::read($this->fileStream, $offset, 1)
79
- );
80
-
81
- $typeNum = $nextByte + 7;
82
-
83
- if ($typeNum < 8) {
84
- throw new InvalidDatabaseException(
85
- "Something went horribly wrong in the decoder. An extended type "
86
- . "resolved to a type number < 8 ("
87
- . $this->types[$typeNum]
88
- . ")"
89
- );
90
- }
91
-
92
- $type = $this->types[$typeNum];
93
- $offset++;
94
- }
95
-
96
- list($size, $offset) = $this->sizeFromCtrlByte($ctrlByte, $offset);
97
-
98
- return $this->decodeByType($type, $offset, $size);
99
- }
100
-
101
- private function decodeByType($type, $offset, $size)
102
- {
103
- switch ($type) {
104
- case 'map':
105
- return $this->decodeMap($size, $offset);
106
- case 'array':
107
- return $this->decodeArray($size, $offset);
108
- case 'boolean':
109
- return array($this->decodeBoolean($size), $offset);
110
- }
111
-
112
- $newOffset = $offset + $size;
113
- $bytes = Util::read($this->fileStream, $offset, $size);
114
- switch ($type) {
115
- case 'utf8_string':
116
- return array($this->decodeString($bytes), $newOffset);
117
- case 'double':
118
- $this->verifySize(8, $size);
119
- return array($this->decodeDouble($bytes), $newOffset);
120
- case 'float':
121
- $this->verifySize(4, $size);
122
- return array($this->decodeFloat($bytes), $newOffset);
123
- case 'bytes':
124
- return array($bytes, $newOffset);
125
- case 'uint16':
126
- case 'uint32':
127
- return array($this->decodeUint($bytes), $newOffset);
128
- case 'int32':
129
- return array($this->decodeInt32($bytes), $newOffset);
130
- case 'uint64':
131
- case 'uint128':
132
- return array($this->decodeBigUint($bytes, $size), $newOffset);
133
- default:
134
- throw new InvalidDatabaseException(
135
- "Unknown or unexpected type: " . $type
136
- );
137
- }
138
- }
139
-
140
- private function verifySize($expected, $actual)
141
- {
142
- if ($expected != $actual) {
143
- throw new InvalidDatabaseException(
144
- "The MaxMind DB file's data section contains bad data (unknown data type or corrupt data)"
145
- );
146
- }
147
- }
148
-
149
- private function decodeArray($size, $offset)
150
- {
151
- $array = array();
152
-
153
- for ($i = 0; $i < $size; $i++) {
154
- list($value, $offset) = $this->decode($offset);
155
- array_push($array, $value);
156
- }
157
-
158
- return array($array, $offset);
159
- }
160
-
161
- private function decodeBoolean($size)
162
- {
163
- return $size == 0 ? false : true;
164
- }
165
-
166
- private function decodeDouble($bits)
167
- {
168
- // XXX - Assumes IEEE 754 double on platform
169
- list(, $double) = unpack('d', $this->maybeSwitchByteOrder($bits));
170
- return $double;
171
- }
172
-
173
- private function decodeFloat($bits)
174
- {
175
- // XXX - Assumes IEEE 754 floats on platform
176
- list(, $float) = unpack('f', $this->maybeSwitchByteOrder($bits));
177
- return $float;
178
- }
179
-
180
- private function decodeInt32($bytes)
181
- {
182
- $bytes = $this->zeroPadLeft($bytes, 4);
183
- list(, $int) = unpack('l', $this->maybeSwitchByteOrder($bytes));
184
- return $int;
185
- }
186
-
187
- private function decodeMap($size, $offset)
188
- {
189
-
190
- $map = array();
191
-
192
- for ($i = 0; $i < $size; $i++) {
193
- list($key, $offset) = $this->decode($offset);
194
- list($value, $offset) = $this->decode($offset);
195
- $map[$key] = $value;
196
- }
197
-
198
- return array($map, $offset);
199
- }
200
-
201
- private $pointerValueOffset = array(
202
- 1 => 0,
203
- 2 => 2048,
204
- 3 => 526336,
205
- 4 => 0,
206
- );
207
-
208
- private function decodePointer($ctrlByte, $offset)
209
- {
210
- $pointerSize = (($ctrlByte >> 3) & 0x3) + 1;
211
-
212
- $buffer = Util::read($this->fileStream, $offset, $pointerSize);
213
- $offset = $offset + $pointerSize;
214
-
215
- $packed = $pointerSize == 4
216
- ? $buffer
217
- : (pack('C', $ctrlByte & 0x7)) . $buffer;
218
-
219
- $unpacked = $this->decodeUint($packed);
220
- $pointer = $unpacked + $this->pointerBase
221
- + $this->pointerValueOffset[$pointerSize];
222
-
223
- return array($pointer, $offset);
224
- }
225
-
226
- private function decodeUint($bytes)
227
- {
228
- list(, $int) = unpack('N', $this->zeroPadLeft($bytes, 4));
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
- return $integer;
265
- }
266
-
267
- private function decodeString($bytes)
268
- {
269
- // XXX - NOOP. As far as I know, the end user has to explicitly set the
270
- // encoding in PHP. Strings are just bytes.
271
- return $bytes;
272
- }
273
-
274
- private function sizeFromCtrlByte($ctrlByte, $offset)
275
- {
276
- $size = $ctrlByte & 0x1f;
277
- $bytesToRead = $size < 29 ? 0 : $size - 28;
278
- $bytes = Util::read($this->fileStream, $offset, $bytesToRead);
279
- $decoded = $this->decodeUint($bytes);
280
-
281
- if ($size == 29) {
282
- $size = 29 + $decoded;
283
- } elseif ($size == 30) {
284
- $size = 285 + $decoded;
285
- } elseif ($size > 30) {
286
- $size = ($decoded & (0x0FFFFFFF >> (32 - (8 * $bytesToRead))))
287
- + 65821;
288
- }
289
-
290
- return array($size, $offset + $bytesToRead);
291
- }
292
-
293
- private function zeroPadLeft($content, $desiredLength)
294
- {
295
- return str_pad($content, $desiredLength, "\x00", STR_PAD_LEFT);
296
- }
297
-
298
- private function maybeSwitchByteOrder($bytes)
299
- {
300
- return $this->switchByteOrder ? strrev($bytes) : $bytes;
301
- }
302
-
303
- private function isPlatformLittleEndian()
304
- {
305
- $testint = 0x00FF;
306
- $packed = pack('S', $testint);
307
- return $testint === current(unpack('v', $packed));
308
- }
309
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/maxmind-db/reader/src/MaxMind/Db/Reader/InvalidDatabaseException.php DELETED
@@ -1,10 +0,0 @@
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
- }
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/maxmind-db/reader/src/MaxMind/Db/Reader/Metadata.php DELETED
@@ -1,77 +0,0 @@
1
- <?php
2
-
3
- namespace MaxMind\Db\Reader;
4
-
5
- /**
6
- * This class provides the metadata for the MaxMind DB file.
7
- *
8
- * @property integer nodeCount This is an unsigned 32-bit integer indicating
9
- * the number of nodes in the search tree.
10
- *
11
- * @property integer recordSize This is an unsigned 16-bit integer. It
12
- * indicates the number of bits in a record in the search tree. Note that each
13
- * node consists of two records.
14
- *
15
- * @property integer ipVersion This is an unsigned 16-bit integer which is
16
- * always 4 or 6. It indicates whether the database contains IPv4 or IPv6
17
- * address data.
18
- *
19
- * @property string databaseType This is a string that indicates the structure
20
- * of each data record associated with an IP address. The actual definition of
21
- * these structures is left up to the database creator.
22
- *
23
- * @property array languages An array of strings, each of which is a language
24
- * code. A given record may contain data items that have been localized to
25
- * some or all of these languages. This may be undefined.
26
- *
27
- * @property integer binaryFormatMajorVersion This is an unsigned 16-bit
28
- * integer indicating the major version number for the database's binary
29
- * format.
30
- *
31
- * @property integer binaryFormatMinorVersion This is an unsigned 16-bit
32
- * integer indicating the minor version number for the database's binary format.
33
- *
34
- * @property integer buildEpoch This is an unsigned 64-bit integer that
35
- * contains the database build timestamp as a Unix epoch value.
36
- *
37
- * @property array description This key will always point to a map
38
- * (associative array). The keys of that map will be language codes, and the
39
- * values will be a description in that language as a UTF-8 string. May be
40
- * undefined for some databases.
41
- */
42
- class Metadata
43
- {
44
- private $binaryFormatMajorVersion;
45
- private $binaryFormatMinorVersion;
46
- private $buildEpoch;
47
- private $databaseType;
48
- private $description;
49
- private $ipVersion;
50
- private $languages;
51
- private $nodeByteSize;
52
- private $nodeCount;
53
- private $recordSize;
54
- private $searchTreeSize;
55
-
56
- public function __construct($metadata)
57
- {
58
- $this->binaryFormatMajorVersion =
59
- $metadata['binary_format_major_version'];
60
- $this->binaryFormatMinorVersion =
61
- $metadata['binary_format_minor_version'];
62
- $this->buildEpoch = $metadata['build_epoch'];
63
- $this->databaseType = $metadata['database_type'];
64
- $this->languages = $metadata['languages'];
65
- $this->description = $metadata['description'];
66
- $this->ipVersion = $metadata['ip_version'];
67
- $this->nodeCount = $metadata['node_count'];
68
- $this->recordSize = $metadata['record_size'];
69
- $this->nodeByteSize = $this->recordSize / 4;
70
- $this->searchTreeSize = $this->nodeCount * $this->nodeByteSize;
71
- }
72
-
73
- public function __get($var)
74
- {
75
- return $this->$var;
76
- }
77
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/maxmind-db/reader/src/MaxMind/Db/Reader/Util.php DELETED
@@ -1,28 +0,0 @@
1
- <?php
2
-
3
- namespace MaxMind\Db\Reader;
4
-
5
- use MaxMind\Db\Reader\InvalidDatabaseException;
6
-
7
- class Util
8
- {
9
- public static function read($stream, $offset, $numberOfBytes)
10
- {
11
- if ($numberOfBytes == 0) {
12
- return '';
13
- }
14
- if (fseek($stream, $offset) == 0) {
15
- $value = fread($stream, $numberOfBytes);
16
-
17
- // We check that the number of bytes read is equal to the number
18
- // asked for. We use ftell as getting the length of $value is
19
- // much slower.
20
- if (ftell($stream) - $offset === $numberOfBytes) {
21
- return $value;
22
- }
23
- }
24
- throw new InvalidDatabaseException(
25
- "The MaxMind DB file contains bad data"
26
- );
27
- }
28
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/maxmind/web-service-common/CHANGELOG.md DELETED
@@ -1,69 +0,0 @@
1
- CHANGELOG
2
- =========
3
-
4
- 0.3.1 (2016-08-10)
5
- ------------------
6
-
7
- * On Mac OS X when using a curl built against SecureTransport, the certs
8
- in the system's keychain will now be used instead of the CA bundle on
9
- the file system.
10
-
11
- 0.3.0 (2016-08-09)
12
- ------------------
13
-
14
- * This package now uses `composer/ca-bundle` by default rather than a CA
15
- bundle distributed with this package. `composer/ca-bundle` will first try
16
- to use the system CA bundle and will fall back to the Mozilla CA bundle
17
- when no system bundle is available. You may still specify your own bundle
18
- using the `caBundle` option.
19
-
20
- 0.2.1 (2016-06-13)
21
- ------------------
22
-
23
- * Fix typo in code to copy cert to temp directory.
24
-
25
- 0.2.0 (2016-06-10)
26
- ------------------
27
-
28
- * Added handling of additional error codes that the web service may return.
29
- * A `USER_ID_UNKNOWN` error will now throw a
30
- `MaxMind\Exception\AuthenticationException`.
31
- * Added support for `proxy` option. Closes #6.
32
-
33
- 0.1.0 (2016-05-23)
34
- ------------------
35
-
36
- * A `PERMISSION_REQUIRED` error will now throw a `PermissionRequiredException`
37
- exception.
38
- * Added a `.gitattributes` file to exclude tests from Composer releases.
39
- GitHub #7.
40
- * Updated included cert bundle.
41
-
42
- 0.0.4 (2015-07-21)
43
- ------------------
44
-
45
- * Added extremely basic tests for the curl calls.
46
- * Fixed broken POSTs.
47
-
48
- 0.0.3 (2015-06-30)
49
- ------------------
50
-
51
- * Floats now work with the `timeout` and `connectTimeout` options. Fix by
52
- Benjamin Pick. GitHub PR #2.
53
- * `curl_error` is now used instead of `curl_strerror`. The latter is only
54
- available for PHP 5.5 or later. Fix by Benjamin Pick. GitHub PR #1.
55
-
56
-
57
- 0.0.2 (2015-06-09)
58
- ------------------
59
-
60
- * An exception is now immediately thrown curl error rather than letting later
61
- status code checks throw an exception. This improves the exception message
62
- greatly.
63
- * If this library is inside a phar archive, the CA certs are copied out of the
64
- archive to a temporary file so that curl can use them.
65
-
66
- 0.0.1 (2015-06-01)
67
- ------------------
68
-
69
- * Initial release.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/maxmind/web-service-common/LICENSE DELETED
@@ -1,202 +0,0 @@
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.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/maxmind/web-service-common/README.md DELETED
@@ -1,26 +0,0 @@
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
- This code requires PHP 5.3 or greater. Older versions of PHP are not
9
- supported. This library works and is tested 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 by MaxMind, Inc.
25
-
26
- This is free software, licensed under the Apache License, Version 2.0.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/maxmind/web-service-common/composer.json DELETED
@@ -1,29 +0,0 @@
1
- {
2
- "name": "maxmind/web-service-common",
3
- "description": "Internal MaxMind Web Service API",
4
- "minimum-stability": "stable",
5
- "homepage": "https://github.com/maxmind/mm-web-service-api-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.3",
16
- "composer/ca-bundle": "^1.0.3",
17
- "ext-curl": "*",
18
- "ext-json": "*"
19
- },
20
- "require-dev": {
21
- "phpunit/phpunit": "4.*",
22
- "squizlabs/php_codesniffer": "2.*"
23
- },
24
- "autoload": {
25
- "psr-4": {
26
- "MaxMind\\": "src"
27
- }
28
- }
29
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/maxmind/web-service-common/src/Exception/AuthenticationException.php DELETED
@@ -1,10 +0,0 @@
1
- <?php
2
-
3
- namespace MaxMind\Exception;
4
-
5
- /**
6
- * This class represents an error authenticating
7
- */
8
- class AuthenticationException extends InvalidRequestException
9
- {
10
- }
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/maxmind/web-service-common/src/Exception/HttpException.php DELETED
@@ -1,40 +0,0 @@
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
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/maxmind/web-service-common/src/Exception/InsufficientFundsException.php DELETED
@@ -1,10 +0,0 @@
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
- }
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/maxmind/web-service-common/src/Exception/InvalidInputException.php DELETED
@@ -1,12 +0,0 @@
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
- }
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/maxmind/web-service-common/src/Exception/InvalidRequestException.php DELETED
@@ -1,37 +0,0 @@
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
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/maxmind/web-service-common/src/Exception/IpAddressNotFoundException.php DELETED
@@ -1,7 +0,0 @@
1
- <?php
2
-
3
- namespace MaxMind\Exception;
4
-
5
- class IpAddressNotFoundException extends InvalidRequestException
6
- {
7
- }
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/maxmind/web-service-common/src/Exception/PermissionRequiredException.php DELETED
@@ -1,10 +0,0 @@
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
- }
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/maxmind/web-service-common/src/Exception/WebServiceException.php DELETED
@@ -1,10 +0,0 @@
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
- }
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/maxmind/web-service-common/src/WebService/Client.php DELETED
@@ -1,457 +0,0 @@
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
- * @package MaxMind\WebService
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
- *
42
- * * `host` - The host to use when connecting to the web service.
43
- * * `userAgent` - The prefix of the User-Agent to use in the request.
44
- * * `caBundle` - The bundle of CA root certificates to use in the request.
45
- * * `connectTimeout` - The connect timeout to use for the request.
46
- * * `timeout` - The timeout to use for the request.
47
- * * `proxy` - The HTTP proxy to use. May include a schema, port,
48
- * username, and password, e.g., `http://username:password@127.0.0.1:10`.
49
- */
50
- public function __construct(
51
- $userId,
52
- $licenseKey,
53
- $options = array()
54
- ) {
55
- $this->userId = $userId;
56
- $this->licenseKey = $licenseKey;
57
-
58
- $this->httpRequestFactory = isset($options['httpRequestFactory'])
59
- ? $options['httpRequestFactory']
60
- : new RequestFactory();
61
-
62
- if (isset($options['host'])) {
63
- $this->host = $options['host'];
64
- }
65
- if (isset($options['userAgent'])) {
66
- $this->userAgentPrefix = $options['userAgent'] . ' ';
67
- }
68
-
69
- $this->caBundle = isset($options['caBundle']) ?
70
- $this->caBundle = $options['caBundle'] : $this->getCaBundle();
71
-
72
- if (isset($options['connectTimeout'])) {
73
- $this->connectTimeout = $options['connectTimeout'];
74
- }
75
- if (isset($options['timeout'])) {
76
- $this->timeout = $options['timeout'];
77
- }
78
-
79
- if (isset($options['proxy'])) {
80
- $this->proxy = $options['proxy'];
81
- }
82
- }
83
-
84
- /**
85
- * @param string $service name of the service querying
86
- * @param string $path the URI path to use
87
- * @param array $input the data to be posted as JSON
88
- * @return array The decoded content of a successful response
89
- * @throws InvalidInputException when the request has missing or invalid
90
- * data.
91
- * @throws AuthenticationException when there is an issue authenticating the
92
- * request.
93
- * @throws InsufficientFundsException when your account is out of funds.
94
- * @throws InvalidRequestException when the request is invalid for some
95
- * other reason, e.g., invalid JSON in the POST.
96
- * @throws HttpException when an unexpected HTTP error occurs.
97
- * @throws WebServiceException when some other error occurs. This also
98
- * serves as the base class for the above exceptions.
99
- */
100
- public function post($service, $path, $input)
101
- {
102
- $body = json_encode($input);
103
- if ($body === false) {
104
- throw new InvalidInputException(
105
- 'Error encoding input as JSON: '
106
- . $this->jsonErrorDescription()
107
- );
108
- }
109
-
110
- $request = $this->createRequest(
111
- $path,
112
- array('Content-Type: application/json')
113
- );
114
-
115
- list($statusCode, $contentType, $body) = $request->post($body);
116
- return $this->handleResponse(
117
- $statusCode,
118
- $contentType,
119
- $body,
120
- $service,
121
- $path
122
- );
123
- }
124
-
125
- public function get($service, $path)
126
- {
127
- $request = $this->createRequest($path);
128
-
129
- list($statusCode, $contentType, $body) = $request->get();
130
-
131
- return $this->handleResponse(
132
- $statusCode,
133
- $contentType,
134
- $body,
135
- $service,
136
- $path
137
- );
138
- }
139
-
140
-
141
- private function userAgent()
142
- {
143
- $curlVersion = curl_version();
144
- return $this->userAgentPrefix . 'MaxMind-WS-API/' . Client::VERSION . ' PHP/' . PHP_VERSION .
145
- ' curl/' . $curlVersion['version'];
146
- }
147
-
148
- private function createRequest($path, $headers = array())
149
- {
150
- array_push(
151
- $headers,
152
- 'Authorization: Basic '
153
- . base64_encode($this->userId . ':' . $this->licenseKey),
154
- 'Accept: application/json'
155
- );
156
-
157
- return $this->httpRequestFactory->request(
158
- $this->urlFor($path),
159
- array(
160
- 'caBundle' => $this->caBundle,
161
- 'connectTimeout' => $this->connectTimeout,
162
- 'headers' => $headers,
163
- 'proxy' => $this->proxy,
164
- 'timeout' => $this->timeout,
165
- 'userAgent' => $this->userAgent(),
166
- )
167
- );
168
- }
169
-
170
- /**
171
- * @param integer $statusCode the HTTP status code of the response
172
- * @param string $contentType the Content-Type of the response
173
- * @param string $body the response body
174
- * @param string $service the name of the service
175
- * @param string $path the path used in the request
176
- * @return array The decoded content of a successful response
177
- * @throws AuthenticationException when there is an issue authenticating the
178
- * request.
179
- * @throws InsufficientFundsException when your account is out of funds.
180
- * @throws InvalidRequestException when the request is invalid for some
181
- * other reason, e.g., invalid JSON in the POST.
182
- * @throws HttpException when an unexpected HTTP error occurs.
183
- * @throws WebServiceException when some other error occurs. This also
184
- * serves as the base class for the above exceptions
185
- */
186
- private function handleResponse(
187
- $statusCode,
188
- $contentType,
189
- $body,
190
- $service,
191
- $path
192
- ) {
193
- if ($statusCode >= 400 && $statusCode <= 499) {
194
- $this->handle4xx($statusCode, $contentType, $body, $service, $path);
195
- } elseif ($statusCode >= 500) {
196
- $this->handle5xx($statusCode, $service, $path);
197
- } elseif ($statusCode != 200) {
198
- $this->handleUnexpectedStatus($statusCode, $service, $path);
199
- }
200
- return $this->handleSuccess($body, $service);
201
- }
202
-
203
- /**
204
- * @return string describing the JSON error
205
- */
206
- private function jsonErrorDescription()
207
- {
208
- $errno = json_last_error();
209
- switch ($errno) {
210
- case JSON_ERROR_DEPTH:
211
- return 'The maximum stack depth has been exceeded.';
212
- case JSON_ERROR_STATE_MISMATCH:
213
- return 'Invalid or malformed JSON.';
214
- case JSON_ERROR_CTRL_CHAR:
215
- return 'Control character error.';
216
- case JSON_ERROR_SYNTAX:
217
- return 'Syntax error.';
218
- case JSON_ERROR_UTF8:
219
- return 'Malformed UTF-8 characters.';
220
- default:
221
- return "Other JSON error ($errno).";
222
- }
223
- }
224
-
225
- /**
226
- * @param string $path The path to use in the URL
227
- * @return string The constructed URL
228
- */
229
- private function urlFor($path)
230
- {
231
- return 'https://' . $this->host . $path;
232
- }
233
-
234
- /**
235
- * @param int $statusCode The HTTP status code
236
- * @param string $contentType The response content-type
237
- * @param string $body The response body
238
- * @param string $service The service name
239
- * @param string $path The path used in the request
240
- * @throws AuthenticationException
241
- * @throws HttpException
242
- * @throws InsufficientFundsException
243
- * @throws InvalidRequestException
244
- */
245
- private function handle4xx(
246
- $statusCode,
247
- $contentType,
248
- $body,
249
- $service,
250
- $path
251
- ) {
252
- if (strlen($body) === 0) {
253
- throw new HttpException(
254
- "Received a $statusCode error for $service with no body",
255
- $statusCode,
256
- $this->urlFor($path)
257
- );
258
- }
259
- if (!strstr($contentType, 'json')) {
260
- throw new HttpException(
261
- "Received a $statusCode error for $service with " .
262
- "the following body: " . $body,
263
- $statusCode,
264
- $this->urlFor($path)
265
- );
266
- }
267
-
268
- $message = json_decode($body, true);
269
- if ($message === null) {
270
- throw new HttpException(
271
- "Received a $statusCode error for $service but could " .
272
- 'not decode the response as JSON: '
273
- . $this->jsonErrorDescription() . ' Body: ' . $body,
274
- $statusCode,
275
- $this->urlFor($path)
276
- );
277
- }
278
-
279
- if (!isset($message['code']) || !isset($message['error'])) {
280
- throw new HttpException(
281
- 'Error response contains JSON but it does not ' .
282
- 'specify code or error keys: ' . $body,
283
- $statusCode,
284
- $this->urlFor($path)
285
- );
286
- }
287
-
288
- $this->handleWebServiceError(
289
- $message['error'],
290
- $message['code'],
291
- $statusCode,
292
- $path
293
- );
294
- }
295
-
296
- /**
297
- * @param string $message The error message from the web service
298
- * @param string $code The error code from the web service
299
- * @param int $statusCode The HTTP status code
300
- * @param string $path The path used in the request
301
- * @throws AuthenticationException
302
- * @throws InvalidRequestException
303
- * @throws InsufficientFundsException
304
- */
305
- private function handleWebServiceError(
306
- $message,
307
- $code,
308
- $statusCode,
309
- $path
310
- ) {
311
- switch ($code) {
312
- case 'IP_ADDRESS_NOT_FOUND':
313
- case 'IP_ADDRESS_RESERVED':
314
- throw new IpAddressNotFoundException(
315
- $message,
316
- $code,
317
- $statusCode,
318
- $this->urlFor($path)
319
- );
320
- case 'AUTHORIZATION_INVALID':
321
- case 'LICENSE_KEY_REQUIRED':
322
- case 'USER_ID_REQUIRED':
323
- case 'USER_ID_UNKNOWN':
324
- throw new AuthenticationException(
325
- $message,
326
- $code,
327
- $statusCode,
328
- $this->urlFor($path)
329
- );
330
- case 'OUT_OF_QUERIES':
331
- case 'INSUFFICIENT_FUNDS':
332
- throw new InsufficientFundsException(
333
- $message,
334
- $code,
335
- $statusCode,
336
- $this->urlFor($path)
337
- );
338
- case 'PERMISSION_REQUIRED':
339
- throw new PermissionRequiredException(
340
- $message,
341
- $code,
342
- $statusCode,
343
- $this->urlFor($path)
344
- );
345
- default:
346
- throw new InvalidRequestException(
347
- $message,
348
- $code,
349
- $statusCode,
350
- $this->urlFor($path)
351
- );
352
- }
353
- }
354
-
355
- /**
356
- * @param int $statusCode The HTTP status code
357
- * @param string $service The service name
358
- * @param string $path The URI path used in the request
359
- * @throws HttpException
360
- */
361
- private function handle5xx($statusCode, $service, $path)
362
- {
363
- throw new HttpException(
364
- "Received a server error ($statusCode) for $service",
365
- $statusCode,
366
- $this->urlFor($path)
367
- );
368
- }
369
-
370
- /**
371
- * @param int $statusCode The HTTP status code
372
- * @param string $service The service name
373
- * @param string $path The URI path used in the request
374
- * @throws HttpException
375
- */
376
- private function handleUnexpectedStatus($statusCode, $service, $path)
377
- {
378
- throw new HttpException(
379
- 'Received an unexpected HTTP status ' .
380
- "($statusCode) for $service",
381
- $statusCode,
382
- $this->urlFor($path)
383
- );
384
- }
385
-
386
- /**
387
- * @param string $body The successful request body
388
- * @param string $service The service name
389
- * @return array The decoded request body
390
- * @throws WebServiceException if the request body cannot be decoded as
391
- * JSON
392
- */
393
- private function handleSuccess($body, $service)
394
- {
395
- if (strlen($body) == 0) {
396
- throw new WebServiceException(
397
- "Received a 200 response for $service but did not " .
398
- "receive a HTTP body."
399
- );
400
- }
401
-
402
- $decodedContent = json_decode($body, true);
403
- if ($decodedContent === null) {
404
- throw new WebServiceException(
405
- "Received a 200 response for $service but could " .
406
- 'not decode the response as JSON: '
407
- . $this->jsonErrorDescription() . ' Body: ' . $body
408
- );
409
- }
410
-
411
- return $decodedContent;
412
- }
413
-
414
- private function getCaBundle()
415
- {
416
- $curlVersion = curl_version();
417
-
418
- // On OS X, when the SSL version is "SecureTransport", the system's
419
- // keychain will be used.
420
- if ($curlVersion['ssl_version'] ==='SecureTransport') {
421
- return;
422
- }
423
- $cert = CaBundle::getSystemCaRootBundlePath();
424
-
425
- // Check if the cert is inside a phar. If so, we need to copy the cert
426
- // to a temp file so that curl can see it.
427
- if (substr($cert, 0, 7) == 'phar://') {
428
- $tempDir = sys_get_temp_dir();
429
- $newCert = tempnam($tempDir, 'geoip2-');
430
- if ($newCert === false) {
431
- throw new \RuntimeException(
432
- "Unable to create temporary file in $tempDir"
433
- );
434
- }
435
- if (!copy($cert, $newCert)) {
436
- throw new \RuntimeException(
437
- "Could not copy $cert to $newCert: "
438
- . var_export(error_get_last(), true)
439
- );
440
- }
441
-
442
- // We use a shutdown function rather than the destructor as the
443
- // destructor isn't called on a fatal error such as an uncaught
444
- // exception.
445
- register_shutdown_function(
446
- function () use ($newCert) {
447
- unlink($newCert);
448
- }
449
- );
450
- $cert = $newCert;
451
- }
452
- if (!file_exists($cert)) {
453
- throw new \RuntimeException("CA cert does not exist at $cert");
454
- }
455
- return $cert;
456
- }
457
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/maxmind/web-service-common/src/WebService/Http/CurlRequest.php DELETED
@@ -1,109 +0,0 @@
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
- * @package MaxMind\WebService\Http
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
- * @return array
30
- */
31
- public function post($body)
32
- {
33
- $curl = $this->createCurl();
34
-
35
- curl_setopt($curl, CURLOPT_POST, true);
36
- curl_setopt($curl, CURLOPT_POSTFIELDS, $body);
37
-
38
- return $this->execute($curl);
39
- }
40
-
41
- public function get()
42
- {
43
- $curl = $this->createCurl();
44
-
45
- curl_setopt($curl, CURLOPT_HTTPGET, true);
46
-
47
- return $this->execute($curl);
48
- }
49
-
50
- /**
51
- * @return resource
52
- */
53
- private function createCurl()
54
- {
55
- $curl = curl_init($this->url);
56
-
57
- if (!empty($this->options['caBundle'])) {
58
- $opts[CURLOPT_CAINFO] = $this->options['caBundle'];
59
- }
60
- $opts[CURLOPT_SSL_VERIFYHOST] = 2;
61
- $opts[CURLOPT_FOLLOWLOCATION] = false;
62
- $opts[CURLOPT_SSL_VERIFYPEER] = true;
63
- $opts[CURLOPT_RETURNTRANSFER] = true;
64
-
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
- return $curl;
88
- }
89
-
90
- private function execute($curl)
91
- {
92
- $body = curl_exec($curl);
93
- if ($errno = curl_errno($curl)) {
94
- $errorMessage = curl_error($curl);
95
-
96
- throw new HttpException(
97
- "cURL error ({$errno}): {$errorMessage}",
98
- 0,
99
- $this->url
100
- );
101
- }
102
-
103
- $statusCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
104
- $contentType = curl_getinfo($curl, CURLINFO_CONTENT_TYPE);
105
- curl_close($curl);
106
-
107
- return array($statusCode, $contentType, $body);
108
- }
109
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/maxmind/web-service-common/src/WebService/Http/Request.php DELETED
@@ -1,28 +0,0 @@
1
- <?php
2
-
3
- namespace MaxMind\WebService\Http;
4
-
5
- /**
6
- * Interface Request
7
- * @package MaxMind\WebService\Http
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
- * @return mixed
21
- */
22
- public function post($body);
23
-
24
- /**
25
- * @return mixed
26
- */
27
- public function get();
28
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Lib/maxmind/web-service-common/src/WebService/Http/RequestFactory.php DELETED
@@ -1,25 +0,0 @@
1
- <?php
2
-
3
- namespace MaxMind\WebService\Http;
4
-
5
- /**
6
- * Class RequestFactory
7
- * @package MaxMind\WebService\Http
8
- * @internal
9
- */
10
- class RequestFactory
11
- {
12
- public function __construct()
13
- {
14
- }
15
-
16
- /**
17
- * @param $url
18
- * @param $options
19
- * @return CurlRequest
20
- */
21
- public function request($url, $options)
22
- {
23
- return new CurlRequest($url, $options);
24
- }
25
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Model/BackendRedirector.php DELETED
@@ -1,182 +0,0 @@
1
- <?php
2
-
3
- use Buzz\Browser;
4
- use Buzz\Client\Curl;
5
- use Buzz\Client\FileGetContents;
6
- use GeoIp2\Database\Reader;
7
- use WebinterpretConnector\Webinterpret\InventoryManagerClient;
8
- use WebinterpretConnector\Webinterpret\InventoryManagerProductInfo;
9
- use WebinterpretConnector\Webinterpret\Toolkit\GeoIP;
10
-
11
-
12
- /**
13
- * StoreExtender
14
- *
15
- * @category Webinterpret
16
- * @package Webinterpret_Connector
17
- * @author Webinterpret Team <info@webinterpret.com>
18
- * @license http://opensource.org/licenses/osl-3.0.php
19
- */
20
- class Webinterpret_Connector_Model_BackendRedirector extends Varien_Object
21
- {
22
- /** @var GeoIP */
23
- private $geoIp;
24
-
25
- /** @var InventoryManagerClient */
26
- private $inventoryManagerClient;
27
-
28
- /** @var string */
29
- private $storeUrl;
30
-
31
- public function __construct()
32
- {
33
- require_once(Mage::getModuleDir('', 'Webinterpret_Connector') . '/Lib/autoload.php');
34
- spl_autoload_register(array($this, 'loadWebinterpretConnectorLib'), true, true);
35
-
36
- $this->storeUrl = Mage::helper('webinterpret_connector')->getStoreBaseUrl();
37
-
38
- $reader = new Reader(Mage::helper('webinterpret_connector')->getGeoip2DbPath());
39
- $this->geoIp = new GeoIP($reader);
40
-
41
- $browser = new Browser($this->getBrowserClient());
42
- $browser->getClient()->setTimeout(1);
43
-
44
- $this->inventoryManagerClient = new InventoryManagerClient(
45
- $browser,
46
- $this->storeUrl,
47
- Mage::getStoreConfig('webinterpret_connector/inventory_manager_url'));
48
-
49
- parent::__construct();
50
- }
51
-
52
- public function generateInternationalRedirectionUrlIfAvailable($productId)
53
- {
54
- // collect user information
55
- $clientIp = $this->geoIp->getClientIp();
56
- $clientCountryCode = $this->geoIp->getClientCountryCode();
57
-
58
- if ($clientIp === false || $clientCountryCode === false) {
59
- return null;
60
- }
61
-
62
- // only redirect international traffic
63
- if ($this->isDomesticTraffic($clientCountryCode)) {
64
- return null;
65
- }
66
-
67
- // check if product is available in Inventory Manager
68
- $productInfo = $this->inventoryManagerClient->fetchProductInfo($productId, $clientIp, $clientCountryCode);
69
-
70
- if (!($productInfo instanceof InventoryManagerProductInfo)) {
71
- return null;
72
- }
73
-
74
- // don't redirect if the product is not available in the international store or auto_redirect is not enabled
75
- if (!$productInfo->isProductAvailable()|| !$productInfo->isAutoRedirectEnabled()) {
76
- return null;
77
- };
78
-
79
- return $this->generateRedirectUrl($productInfo, $this->storeUrl, $productId);
80
- }
81
-
82
- public static function loadWebinterpretConnectorLib($class)
83
- {
84
- if (preg_match( '/^WebinterpretConnector\\\\/', $class)) {
85
- $path = Mage::getModuleDir('', 'Webinterpret_Connector');
86
- $libClassName = str_replace('\\', '/', substr($class, strlen('WebinterpretConnector\\')));
87
- require_once($path . '/Lib/' . $libClassName . '.php');
88
- }
89
- }
90
-
91
- /**
92
- * Checks if traffic is domestic based on store and user country codes
93
- *
94
- * @param $clientCountryCode
95
- *
96
- * @return bool
97
- */
98
- private function isDomesticTraffic($clientCountryCode) {
99
- $storeCountryCode = Mage::getStoreConfig('general/country/default');
100
-
101
- if ($clientCountryCode === $storeCountryCode) {
102
- return true;
103
- }
104
-
105
- return false;
106
- }
107
-
108
- /**
109
- * Generates URL BackendRedirector should redirect the user to
110
- *
111
- * @param InventoryManagerProductInfo $productInfo
112
- * @param $storeUrl
113
- * @param $productId
114
- *
115
- * @return string
116
- */
117
- private function generateRedirectUrl(InventoryManagerProductInfo $productInfo, $storeUrl, $productId) {
118
- // store extender?
119
- if (Mage::helper('webinterpret_connector')->isStoreExtenderEnabled()) {
120
- $redirectUrl = $this->generateUrlForStoreExtender($productInfo, $storeUrl, $productId);
121
- } else {
122
- $redirectUrl = $productInfo->getProductUrl();
123
- }
124
-
125
- if (is_null($redirectUrl)) {
126
- throw new \InvalidArgumentException('Missing redirect URL');
127
- }
128
-
129
- $redirectUrl = $this->appendUtmParamsToUrl($redirectUrl);
130
-
131
- return $redirectUrl;
132
- }
133
-
134
- /**
135
- * @param InventoryManagerProductInfo $productInfo
136
- * @param $storeUrl
137
- * @param $productId
138
- *
139
- * @return string
140
- */
141
- private function generateUrlForStoreExtender(
142
- InventoryManagerProductInfo $productInfo,
143
- $storeUrl,
144
- $productId
145
- ) {
146
- $localeCode = $productInfo->getLocaleCode();
147
-
148
- if (is_null($localeCode)) {
149
- throw new \InvalidArgumentException( 'Missing locale or URL' );
150
- }
151
-
152
- return $storeUrl . '/glopal/' . $localeCode . '/p-' . $productId . '.html';
153
- }
154
-
155
- /**
156
- * Appends utm_source, utm_medium and utm_campaign params to URL provided
157
- *
158
- * @param string $redirectUrl URL to append utm_* params to
159
- *
160
- * @return string
161
- */
162
- private function appendUtmParamsToUrl($redirectUrl) {
163
- $params = array(
164
- 'utm_source' => parse_url($this->storeUrl, PHP_URL_HOST),
165
- 'utm_medium' => 'br', // br = backend redirector
166
- 'utm_campaign' => Mage::getStoreConfig('general/country/default'),
167
- );
168
-
169
- $argSeparator = (strpos( $redirectUrl, '?') === false ? '?' : '&');
170
-
171
- return $redirectUrl . $argSeparator . http_build_query($params);
172
- }
173
-
174
- private function getBrowserClient()
175
- {
176
- if (function_exists('curl_version')) {
177
- return new Curl();
178
- } else {
179
- return new FileGetContents();
180
- }
181
- }
182
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/Model/Observer.php CHANGED
@@ -1,4 +1,5 @@
1
  <?php
 
2
  /**
3
  * Observer
4
  *
@@ -27,8 +28,7 @@ class Webinterpret_Connector_Model_Observer
27
  public function hookIntoAdminhtmlInitSystemConfig($observer)
28
  {
29
  try {
30
- $session = Mage::getSingleton('admin/session');
31
- if ($session) {
32
  $session->setAcl(Mage::getResourceModel('admin/acl')->loadAcl());
33
  }
34
  } catch (Exception $e) {}
@@ -41,46 +41,15 @@ class Webinterpret_Connector_Model_Observer
41
  */
42
  public function hookIntoWebinterpretConnectorNotificationsBefore($observer)
43
  {
44
- if (!Mage::helper('webinterpret_connector')->isGlobalNotificationsEnabled()) {
45
- return $observer;
46
- }
47
-
48
- $notifications = Mage::getSingleton('webinterpret_connector/notification');
49
-
50
- if (Mage::helper('webinterpret_connector')->isEnabled()) {
51
- if (Mage::getSingleton('admin/session')->isAllowed('system/config')) {
52
- if (Mage::helper('webinterpret_connector')->isInstallationMode()) {
53
- $url = Mage::getModel('adminhtml/url')->getUrl('/system_config/edit/section/webinterpret_connector');
54
- $notifications->addMessage(Mage::helper('webinterpret_connector')->__("To continue installing Webinterpret, <a href=\"%s\">click here</a>", $url));
55
- }
56
- }
57
- }
58
-
59
- return $observer;
60
- }
61
-
62
- public function hookIntoProductInit($observer)
63
- {
64
- try {
65
- /** @var Webinterpret_Connector_Model_BackendRedirector $backendRedirector */
66
- $backendRedirector = Mage::getModel('webinterpret_connector/backendRedirector');
67
- /** @var Webinterpret_Connector_Helper_Data $helper */
68
- $helper = Mage::helper('webinterpret_connector');
69
- $productId = Mage::registry('current_product')->getId();
70
-
71
- if (!$helper->isSessionStarted() || !$helper->isBackendRedirectorEnabled()) {
72
- return $observer;
73
- }
74
-
75
- $redirectionUrl = $backendRedirector->generateInternationalRedirectionUrlIfAvailable($productId);
76
- } catch (\Exception $e) {
77
- return $observer;
78
- }
79
-
80
- if (!is_null($redirectionUrl)) {
81
- Mage::app()->getFrontController()->getResponse()->setRedirect($redirectionUrl);
82
- Mage::app()->getResponse()->sendResponse();
83
- exit;
84
  }
85
 
86
  return $observer;
1
  <?php
2
+
3
  /**
4
  * Observer
5
  *
28
  public function hookIntoAdminhtmlInitSystemConfig($observer)
29
  {
30
  try {
31
+ if ($session = Mage::getSingleton('admin/session')) {
 
32
  $session->setAcl(Mage::getResourceModel('admin/acl')->loadAcl());
33
  }
34
  } catch (Exception $e) {}
41
  */
42
  public function hookIntoWebinterpretConnectorNotificationsBefore($observer)
43
  {
44
+ if (
45
+ Mage::helper('webinterpret_connector')->isEnabled() &&
46
+ Mage::helper('webinterpret_connector')->isGlobalNotificationsEnabled() &&
47
+ Mage::getSingleton('admin/session')->isAllowed('system/config') &&
48
+ Mage::helper('webinterpret_connector')->isInstallationMode()
49
+ ) {
50
+ $url = Mage::getModel('adminhtml/url')->getUrl('/system_config/edit/section/webinterpret_connector');
51
+ $notifications = Mage::getSingleton('webinterpret_connector/notification');
52
+ $notifications->addMessage(Mage::helper('webinterpret_connector')->__("To continue installing Webinterpret, <a href=\"%s\">click here</a>", $url));
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
53
  }
54
 
55
  return $observer;
app/code/community/Webinterpret/Connector/Model/SignatureException.php ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * @category Webinterpret
5
+ * @package Webinterpret_Connector
6
+ * @author Webinterpret Team <info@webinterpret.com>
7
+ * @license http://opensource.org/licenses/osl-3.0.php
8
+ */
9
+ class Webinterpret_Connector_Model_SignatureException extends \Exception
10
+ {
11
+ }
app/code/community/Webinterpret/Connector/Model/StoreExtender.php DELETED
@@ -1,201 +0,0 @@
1
- <?php
2
-
3
- use Buzz\Browser;
4
- use Buzz\Client\Curl;
5
- use Buzz\Client\FileGetContents;
6
- use Buzz\Exception\ClientException;
7
- use Buzz\Message\Response;
8
-
9
- /**
10
- * StoreExtender
11
- *
12
- * @category Webinterpret
13
- * @package Webinterpret_Connector
14
- * @author Webinterpret Team <info@webinterpret.com>
15
- * @license http://opensource.org/licenses/osl-3.0.php
16
- */
17
- class Webinterpret_Connector_Model_StoreExtender extends Varien_Object
18
- {
19
- /**
20
- * @var string Prefix for cookies that should be forwarded to store extender proxy
21
- */
22
- private $cookiePrefix = 'wi_ws_store_ext_';
23
-
24
- public function __construct()
25
- {
26
- require_once(Mage::getModuleDir('', 'Webinterpret_Connector') . '/Lib/autoload.php');
27
- spl_autoload_register(array($this, 'loadStoreExtenderDependencies'), true, true);
28
-
29
- parent::__construct();
30
- }
31
-
32
- public static function loadStoreExtenderDependencies($class)
33
- {
34
- if (preg_match( '/^WebinterpretConnector\\\\/', $class)) {
35
- $path = Mage::getModuleDir('', 'Webinterpret_Connector');
36
- $libClassName = str_replace('\\', '/', substr($class, strlen('WebinterpretConnector\\')));
37
- require_once($path . '/Lib/' . $libClassName . '.php');
38
- }
39
- }
40
-
41
- public function parseRequest()
42
- {
43
- $storeExtenderUrl = Mage::getStoreConfig('webinterpret_connector/store_extender_url');
44
- $storeExtenderUrl .= '?originalUrl=' . urlencode(Mage::helper('core/url')->getCurrentUrl());
45
-
46
- $browser = new Browser($this->getBrowserClient());
47
- $browser->getClient()->setMaxRedirects(0);
48
-
49
- $method = $_SERVER['REQUEST_METHOD'];
50
-
51
- try {
52
- $response = $browser->call(
53
- $storeExtenderUrl,
54
- $_SERVER['REQUEST_METHOD'],
55
- $this->getRequestHeaders(),
56
- $this->getRequestContent($method)
57
- );
58
- } catch (ClientException $e) {
59
- // fallback - redirect to base store URL if there is problem with proxy
60
- header('Location: ' . Mage::getBaseUrl());
61
- die();
62
- }
63
-
64
- $this->outputResponseCode($response->getStatusCode());
65
- $this->outputHeaders($this->parseResponseHeadersToArray($response));
66
- echo $response->getContent();
67
- die;
68
- }
69
-
70
- /**
71
- * @param $method
72
- * @return string
73
- */
74
- private function getRequestContent($method)
75
- {
76
- $content = '';
77
-
78
- if (in_array($method, array('PUT', 'PATCH', 'DELETE'))) {
79
- $content = file_get_contents("php://input");
80
- } elseif ($method === 'POST') {
81
- $content = http_build_query($_POST);
82
- }
83
- return $content;
84
- }
85
-
86
- /**
87
- * @return array
88
- */
89
- private function getRequestHeaders()
90
- {
91
- $headers = array();
92
-
93
- $supportedHeaders = array(
94
- 'HTTP_X_REQUESTED_WITH' => 'X-Requested-With',
95
- 'HTTP_CONTENT_TYPE' => 'Content-Type',
96
- 'HTTP_CONNECTION' => 'Connection',
97
- 'HTTP_CACHE_CONTROL' => 'Cache-Control',
98
- 'HTTP_USER_AGENT' => 'User-Agent',
99
- 'HTTP_ACCEPT' => 'Accept',
100
- 'HTTP_ACCEPT_LANGUAGE' => 'Accept-Language',
101
- );
102
-
103
- foreach ($supportedHeaders as $supportedHeader => $supportedHeaderKey) {
104
- if (isset($_SERVER[$supportedHeader])) {
105
- $headers[$supportedHeaderKey] = $_SERVER[$supportedHeader];
106
- }
107
- }
108
-
109
- $cookies = $this->parseRequestCookies();
110
- if (!empty($cookies)) {
111
- $headers['Cookie'] = $cookies;
112
- }
113
-
114
- return $headers;
115
- }
116
-
117
- private function parseRequestCookies()
118
- {
119
- $cookies = array();
120
- if (isset($_SERVER['HTTP_COOKIE'])) {
121
- $cookies = array_map('trim', explode(';', $_SERVER['HTTP_COOKIE']));
122
- $cookiePrefix = $this->cookiePrefix;
123
- $cookies = array_filter($cookies, function($cookie) use ($cookiePrefix) {
124
- return (strpos($cookie, $cookiePrefix) === 0);
125
- });
126
- }
127
-
128
- return implode('; ', $cookies);
129
- }
130
-
131
- /**
132
- * @param \Buzz\Message\Response $response
133
- * @return array
134
- */
135
- private function parseResponseHeadersToArray(Response $response)
136
- {
137
- $supportedHeaders = array(
138
- 'Date',
139
- 'Content-Type',
140
- 'Content-Length',
141
- 'Connection',
142
- 'Keep-Alive',
143
- 'Location',
144
- 'Set-Cookie',
145
- );
146
-
147
- //reformat response headers
148
- $responseHeaders = array();
149
-
150
- foreach ($response->getHeaders() as $header) {
151
- list($headerName, $headerValue) = explode(':', $header, 2);
152
- if ($headerValue) {
153
- $responseHeaders[$headerName] = trim($headerValue);
154
- }
155
- }
156
-
157
- foreach ($responseHeaders as $header => $contents) {
158
- if (in_array($header, $supportedHeaders)) {
159
- $responseHeaders[] = $header . ': ' . $contents;
160
- }
161
- unset($responseHeaders[$header]);
162
- }
163
-
164
- return $responseHeaders;
165
- }
166
-
167
- /**
168
- * @param array $responseHeaders
169
- */
170
- private function outputHeaders($responseHeaders)
171
- {
172
- // remove previously set headers
173
- header_remove();
174
-
175
- foreach ($responseHeaders as $responseHeader) {
176
- header($responseHeader);
177
- }
178
- }
179
-
180
- /**
181
- * @param $code
182
- */
183
- private function outputResponseCode($code)
184
- {
185
- if (function_exists( 'http_response_code')) {
186
- http_response_code($code);
187
- } else {
188
- // X-PHP-Response-Code is a fake header name, we rely on the webserver to handle the 3rd parameter accordingly
189
- header('X-PHP-Response-Code: ' . $code, true, $code);
190
- }
191
- }
192
-
193
- private function getBrowserClient()
194
- {
195
- if (function_exists('curl_version')) {
196
- return new Curl();
197
- } else {
198
- return new FileGetContents();
199
- }
200
- }
201
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Webinterpret/Connector/{Lib/Webinterpret/Toolkit/StatusApi → StatusApi}/AbstractStatusApiDiagnostics.php RENAMED
@@ -1,10 +1,13 @@
1
  <?php
2
 
3
- namespace WebInterpret\Toolkit\StatusApi;
4
-
5
- abstract class AbstractStatusApiDiagnostics
 
 
 
 
6
  {
7
-
8
  /**
9
  * @var bool
10
  */
1
  <?php
2
 
3
+ /**
4
+ * @category Webinterpret
5
+ * @package Webinterpret_Connector
6
+ * @author Webinterpret Team <info@webinterpret.com>
7
+ * @license http://opensource.org/licenses/osl-3.0.php
8
+ */
9
+ abstract class Webinterpret_Connector_StatusApi_AbstractStatusApiDiagnostics
10
  {
 
11
  /**
12
  * @var bool
13
  */
app/code/community/Webinterpret/Connector/{Lib/Webinterpret/Toolkit/StatusApi → StatusApi}/PlatformDiagnostics.php RENAMED
@@ -1,13 +1,14 @@
1
  <?php
2
 
3
- namespace WebInterpret\Toolkit\StatusApi;
4
-
5
- use WebInterpret\Bridge\eCommercePlatformBridge;
6
- use WebInterpret\Bridge\WordpressBridge;
7
-
8
- class PlatformDiagnostics extends AbstractStatusApiDiagnostics
 
 
9
  {
10
-
11
  /**
12
  * @inheritdoc
13
  */
@@ -23,7 +24,7 @@ class PlatformDiagnostics extends AbstractStatusApiDiagnostics
23
  {
24
  return array(
25
  'platform_name' => 'magento',
26
- 'platform_version' => \Mage::getVersion(),
27
  'magento' => $this->getMagentoInfo(),
28
  );
29
  }
@@ -45,13 +46,10 @@ class PlatformDiagnostics extends AbstractStatusApiDiagnostics
45
  {
46
  $storesInfo = array();
47
 
48
- $stores = \Mage::app()->getStores();
49
- /**
50
- * @var \Mage_Core_Model_Store $store
51
- */
52
- foreach ($stores as $store) {
53
- $storeLocale = \Mage::getStoreConfig(\Mage_Core_Model_Locale::XML_PATH_DEFAULT_LOCALE, $store->getId());
54
- $storeBaseCountry = \Mage::getStoreConfig('general/country/default', $store->getId());
55
 
56
  $storesInfo[] = array(
57
  'store_id' => $store->getId(),
@@ -73,11 +71,8 @@ class PlatformDiagnostics extends AbstractStatusApiDiagnostics
73
  {
74
  $websitesInfo = array();
75
 
76
- $websites = \Mage::app()->getWebsites();
77
- /**
78
- * @var \Mage_Core_Model_Website $website
79
- */
80
- foreach ($websites as $website) {
81
  $websitesInfo = array(
82
  'website_id' => $website->getId(),
83
  'website_code' => $website->getCode(),
@@ -91,7 +86,7 @@ class PlatformDiagnostics extends AbstractStatusApiDiagnostics
91
 
92
  private function getModulesInfo()
93
  {
94
- $modules = (array)\Mage::getConfig()->getNode('modules')->children();
95
 
96
  return array_keys($modules);
97
  }
1
  <?php
2
 
3
+ /**
4
+ * @category Webinterpret
5
+ * @package Webinterpret_Connector
6
+ * @author Webinterpret Team <info@webinterpret.com>
7
+ * @license http://opensource.org/licenses/osl-3.0.php
8
+ */
9
+ class Webinterpret_Connector_StatusApi_PlatformDiagnostics
10
+ extends Webinterpret_Connector_StatusApi_AbstractStatusApiDiagnostics
11
  {
 
12
  /**
13
  * @inheritdoc
14
  */
24
  {
25
  return array(
26
  'platform_name' => 'magento',
27
+ 'platform_version' => Mage::getVersion(),
28
  'magento' => $this->getMagentoInfo(),
29
  );
30
  }
46
  {
47
  $storesInfo = array();
48
 
49
+ /** @var Mage_Core_Model_Store $store */
50
+ foreach (Mage::app()->getStores() as $store) {
51
+ $storeLocale = Mage::getStoreConfig(Mage_Core_Model_Locale::XML_PATH_DEFAULT_LOCALE, $store->getId());
52
+ $storeBaseCountry = Mage::getStoreConfig('general/country/default', $store->getId());
 
 
 
53
 
54
  $storesInfo[] = array(
55
  'store_id' => $store->getId(),
71
  {
72
  $websitesInfo = array();
73
 
74
+ /** @var Mage_Core_Model_Website $website */
75
+ foreach (Mage::app()->getWebsites() as $website) {
 
 
 
76
  $websitesInfo = array(
77
  'website_id' => $website->getId(),
78
  'website_code' => $website->getCode(),
86
 
87
  private function getModulesInfo()
88
  {
89
+ $modules = (array)Mage::getConfig()->getNode('modules')->children();
90
 
91
  return array_keys($modules);
92
  }
app/code/community/Webinterpret/Connector/{Lib/Webinterpret/Toolkit/StatusApi → StatusApi}/PluginDiagnostics.php RENAMED
@@ -1,24 +1,28 @@
1
  <?php
2
 
3
- namespace WebInterpret\Toolkit\StatusApi;
4
-
5
- class PluginDiagnostics extends AbstractStatusApiDiagnostics
 
 
 
 
 
6
  {
7
-
8
  /**
9
- * @var \Mage_Core_Model_App
10
  */
11
  private $app;
12
 
13
  /**
14
- * @var \Mage_Core_Model_Config
15
  */
16
  private $config;
17
 
18
  /**
19
- * @param \Mage_Core_Model_Config $config
20
  */
21
- public function __construct(\Mage_Core_Model_App $app, \Mage_Core_Model_Config $config)
22
  {
23
  $this->app = $app;
24
  $this->config = $config;
@@ -41,8 +45,6 @@ class PluginDiagnostics extends AbstractStatusApiDiagnostics
41
  'plugin_version' => $this->getPluginVersion(),
42
  'plugin_enabled' => $this->isPluginEnabled(),
43
  'store_token' => $this->getStoreToken(),
44
- 'store_extender_enabled' => $this->isStoreExtenderEnabled(),
45
- 'backend_redirector_enabled' => $this->isBackendRedirectorEnabled(),
46
  'updates_dir' => null,
47
  'is_updatable' => $this->isUpdatable(),
48
  'active_settings' => $this->getDatabaseSettings(),
@@ -81,27 +83,14 @@ class PluginDiagnostics extends AbstractStatusApiDiagnostics
81
  return (string)$this->app->getStore()->getConfig('webinterpret_connector/key');
82
  }
83
 
84
- /**
85
- * @return bool
86
- */
87
- private function isStoreExtenderEnabled()
88
- {
89
- return (bool)$this->app->getStore()->getConfig('webinterpret_connector/store_extender_enabled"');
90
- }
91
-
92
- /**
93
- * @return bool
94
- */
95
- private function isBackendRedirectorEnabled()
96
- {
97
- return (bool)$this->app->getStore()->getConfig('webinterpret_connector/backend_redirector_enabled');
98
- }
99
-
100
  /**
101
  * @return array
102
  */
103
  private function getDatabaseSettings()
104
  {
105
- return $this->app->getStore()->getConfig('webinterpret_connector');
 
 
 
106
  }
107
  }
1
  <?php
2
 
3
+ /**
4
+ * @category Webinterpret
5
+ * @package Webinterpret_Connector
6
+ * @author Webinterpret Team <info@webinterpret.com>
7
+ * @license http://opensource.org/licenses/osl-3.0.php
8
+ */
9
+ class Webinterpret_Connector_StatusApi_PluginDiagnostics
10
+ extends Webinterpret_Connector_StatusApi_AbstractStatusApiDiagnostics
11
  {
 
12
  /**
13
+ * @var Mage_Core_Model_App
14
  */
15
  private $app;
16
 
17
  /**
18
+ * @var Mage_Core_Model_Config
19
  */
20
  private $config;
21
 
22
  /**
23
+ * @param Mage_Core_Model_Config $config
24
  */
25
+ public function __construct(Mage_Core_Model_App $app, Mage_Core_Model_Config $config)
26
  {
27
  $this->app = $app;
28
  $this->config = $config;
45
  'plugin_version' => $this->getPluginVersion(),
46
  'plugin_enabled' => $this->isPluginEnabled(),
47
  'store_token' => $this->getStoreToken(),
 
 
48
  'updates_dir' => null,
49
  'is_updatable' => $this->isUpdatable(),
50
  'active_settings' => $this->getDatabaseSettings(),
83
  return (string)$this->app->getStore()->getConfig('webinterpret_connector/key');
84
  }
85
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
86
  /**
87
  * @return array
88
  */
89
  private function getDatabaseSettings()
90
  {
91
+ $config = (array)$this->app->getStore()->getConfig('webinterpret_connector');
92
+ $config['remote_assets_url'] = Mage::helper('webinterpret_connector')->getRemoteAssetsUrl();
93
+
94
+ return $config;
95
  }
96
  }
app/code/community/Webinterpret/Connector/{Lib/Webinterpret/Toolkit/StatusApi → StatusApi}/StatusApi.php RENAMED
@@ -1,10 +1,13 @@
1
  <?php
2
 
3
- namespace WebInterpret\Toolkit\StatusApi;
4
-
5
- class StatusApi
 
 
 
 
6
  {
7
-
8
  /**
9
  * @var array of AbstractStatusApiDiagnostics testers
10
  */
@@ -18,9 +21,9 @@ class StatusApi
18
  /**
19
  * Adds a tester to the testing suite
20
  *
21
- * @param AbstractStatusApiDiagnostics $tester
22
  */
23
- public function addTester(AbstractStatusApiDiagnostics $tester)
24
  {
25
  $this->testers[] = $tester;
26
  }
1
  <?php
2
 
3
+ /**
4
+ * @category Webinterpret
5
+ * @package Webinterpret_Connector
6
+ * @author Webinterpret Team <info@webinterpret.com>
7
+ * @license http://opensource.org/licenses/osl-3.0.php
8
+ */
9
+ class Webinterpret_Connector_StatusApi_StatusApi
10
  {
 
11
  /**
12
  * @var array of AbstractStatusApiDiagnostics testers
13
  */
21
  /**
22
  * Adds a tester to the testing suite
23
  *
24
+ * @param Webinterpret_Connector_StatusApi_AbstractStatusApiDiagnostics $tester
25
  */
26
+ public function addTester(Webinterpret_Connector_StatusApi_AbstractStatusApiDiagnostics $tester)
27
  {
28
  $this->testers[] = $tester;
29
  }
app/code/community/Webinterpret/Connector/StatusApi/StatusApiConfigurator.php ADDED
@@ -0,0 +1,43 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Factory for preconfigured StatusApi objects
5
+ *
6
+ * @category Webinterpret
7
+ * @package Webinterpret_Connector
8
+ * @author Webinterpret Team <info@webinterpret.com>
9
+ * @license http://opensource.org/licenses/osl-3.0.php
10
+ */
11
+ class Webinterpret_Connector_StatusApi_StatusApiConfigurator
12
+ {
13
+ /**
14
+ * @var Mage_Core_Model_App
15
+ */
16
+ private $app;
17
+
18
+ /**
19
+ * @var Mage_Core_Model_Config
20
+ */
21
+ private $config;
22
+
23
+ public function __construct(Mage_Core_Model_App $app, Mage_Core_Model_Config $config)
24
+ {
25
+ $this->app = $app;
26
+ $this->config = $config;
27
+ }
28
+
29
+ /**
30
+ * Returns StatusApi with full suite of diagnostics testers preconfigured
31
+ *
32
+ * @return Webinterpret_Connector_StatusApi_StatusApi
33
+ */
34
+ public function getExtendedStatusApi()
35
+ {
36
+ $statusApi = new Webinterpret_Connector_StatusApi_StatusApi();
37
+ $statusApi->addTester(new Webinterpret_Connector_StatusApi_PluginDiagnostics($this->app, $this->config));
38
+ $statusApi->addTester(new Webinterpret_Connector_StatusApi_PlatformDiagnostics());
39
+ $statusApi->addTester(new Webinterpret_Connector_StatusApi_SystemDiagnostics());
40
+
41
+ return $statusApi;
42
+ }
43
+ }
app/code/community/Webinterpret/Connector/{Lib/Webinterpret/Toolkit/StatusApi → StatusApi}/SystemDiagnostics.php RENAMED
@@ -1,9 +1,14 @@
1
  <?php
2
 
3
- namespace WebInterpret\Toolkit\StatusApi;
4
-
5
- class SystemDiagnostics extends AbstractStatusApiDiagnostics {
6
-
 
 
 
 
 
7
  /**
8
  * @inheritdoc
9
  */
1
  <?php
2
 
3
+ /**
4
+ * @category Webinterpret
5
+ * @package Webinterpret_Connector
6
+ * @author Webinterpret Team <info@webinterpret.com>
7
+ * @license http://opensource.org/licenses/osl-3.0.php
8
+ */
9
+ class Webinterpret_Connector_StatusApi_SystemDiagnostics
10
+ extends Webinterpret_Connector_StatusApi_AbstractStatusApiDiagnostics
11
+ {
12
  /**
13
  * @inheritdoc
14
  */
app/code/community/Webinterpret/Connector/bridge2cart/bridge.php CHANGED
@@ -1,7 +1,5 @@
1
  <?php
2
 
3
- require_once 'preloader.php';
4
-
5
  /*-----------------------------------------------------------------------------+
6
  | MagneticOne |
7
  | Copyright (c) 2012 MagneticOne.com <contact@magneticone.com> |
@@ -48,149 +46,149 @@ require_once 'preloader.php';
48
  */
49
  class M1_Bridge_Action_Update
50
  {
51
- private $_pathToTmpDir;
52
- private $_pathToFile = __FILE__;
53
-
54
- /**
55
- * M1_Bridge_Action_Update constructor.
56
- */
57
- public function __construct()
58
- {
59
- $this->_pathToTmpDir = dirname(__FILE__) . DIRECTORY_SEPARATOR . "temp_c2c";
60
- }
61
-
62
- /**
63
- * @param M1_Bridge $bridge
64
- */
65
- public function perform(M1_Bridge $bridge)
66
- {
67
- $response = new stdClass();
68
- if (!($this->_checkBridgeDirPermission() && $this->_checkBridgeFilePermission())) {
69
- $response->code = 1;
70
- $response->message = "Bridge Update couldn't be performed. " .
71
- "Please change permission for bridge folder to 777 and bridge.php file inside it to 666";
72
- echo serialize($response);
73
- die;
74
- }
75
-
76
- if (($data = $this->_downloadFile()) === false) {
77
- $response->code = 1;
78
- $response->message = "Bridge Version is outdated. Files couldn't be updated automatically. ".
79
- "Please set write permission or re-upload files manually.";
80
- echo serialize($response);
81
- die;
82
- }
83
-
84
- if (!$this->_writeToFile($data, $this->_pathToFile)) {
85
- $response->code = 1;
86
- $response->message = "Couln't create file in temporary folder or file is write protected.";
87
- echo serialize($response);
88
- die;
89
- }
90
-
91
- $response->code = 0;
92
- $response->message = "Bridge successfully updated to latest version";
93
- echo json_encode($response);
94
- die;
95
- }
96
-
97
- /**
98
- * @param $uri
99
- * @return stdClass
100
- */
101
- private function _fetch($uri)
102
- {
103
- $ch = curl_init();
104
-
105
- curl_setopt($ch, CURLOPT_URL, $uri);
106
- curl_setopt($ch, CURLOPT_HEADER, 0);
107
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
108
-
109
- $response = new stdClass();
110
-
111
- $response->body = curl_exec($ch);
112
- $response->httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
113
- $response->contentType = curl_getinfo($ch, CURLINFO_CONTENT_TYPE);
114
- $response->contentLength = curl_getinfo($ch, CURLINFO_CONTENT_LENGTH_DOWNLOAD);
115
-
116
- curl_close($ch);
117
-
118
- return $response;
119
- }
120
-
121
- /**
122
- * @return bool
123
- */
124
- private function _checkBridgeDirPermission()
125
- {
126
- if (!is_writeable(dirname(__FILE__))) {
127
- @chmod(dirname(__FILE__), 0777);
128
- }
129
- return is_writeable(dirname(__FILE__));
130
- }
131
-
132
- /**
133
- * @return bool
134
- */
135
- private function _checkBridgeFilePermission()
136
- {
137
- $pathToFile = dirname(__FILE__) . DIRECTORY_SEPARATOR . "bridge.php";
138
- if (!is_writeable($pathToFile)) {
139
- @chmod($pathToFile, 0666);
140
- }
141
- return is_writeable($pathToFile);
142
- }
143
-
144
- /**
145
- * @return bool
146
- */
147
- public function _createTempDir()
148
- {
149
- @mkdir($this->_pathToTmpDir, 0777);
150
- return file_exists($this->_pathToTmpDir);
151
- }
152
-
153
- /**
154
- * @return bool
155
- */
156
- public function _removeTempDir()
157
- {
158
- @unlink($this->_pathToTmpDir . DIRECTORY_SEPARATOR . "bridge.php_c2c");
159
- @rmdir($this->_pathToTmpDir);
160
- return !file_exists($this->_pathToTmpDir);
161
- }
162
-
163
- /**
164
- * @return bool|stdClass
165
- */
166
- private function _downloadFile()
167
- {
168
- $file = $this->_fetch(M1_BRIDGE_DOWNLOAD_LINK);
169
- if ($file->httpCode == 200) {
170
- return $file;
171
  }
172
- return false;
173
- }
174
 
175
- /**
176
- * @param $data
177
- * @param $file
178
- * @return bool
179
- */
180
- private function _writeToFile($data, $file)
181
- {
182
- if (function_exists("file_put_contents")) {
183
- $bytes = file_put_contents($file, $data->body);
184
- return $bytes == $data->contentLength;
185
  }
186
 
187
- $handle = @fopen($file, 'w+');
188
- $bytes = fwrite($handle, $data->body);
189
- @fclose($handle);
 
 
 
 
 
 
 
 
 
 
 
 
190
 
191
- return $bytes == $data->contentLength;
192
 
193
- }
194
 
195
  }
196
 
@@ -200,33 +198,33 @@ class M1_Bridge_Action_Update
200
  class M1_Bridge_Action_Query
201
  {
202
 
203
- /**
204
- * @param M1_Bridge $bridge
205
- * @return bool
206
- */
207
- public function perform(M1_Bridge $bridge)
208
- {
209
- if (isset($_POST['query']) && isset($_POST['fetchMode'])) {
210
- $query = base64_decode($_POST['query']);
211
-
212
- $res = $bridge->query($query, (int)$_POST['fetchMode']);
213
-
214
- if (is_array($res['result']) || is_bool($res['result'])) {
215
- $result = serialize(array(
216
- 'res' => $res['result'],
217
- 'fetchedFields' => @$res['fetchedFields'],
218
- 'insertId' => $bridge->getLink()->getLastInsertId(),
219
- 'affectedRows' => $bridge->getLink()->getAffectedRows(),
220
- ));
221
-
222
- echo base64_encode($result);
223
- } else {
224
- echo base64_encode($res['message']);
225
- }
226
- } else {
227
- return false;
228
- }
229
- }
230
  }
231
 
232
  /**
@@ -235,99 +233,101 @@ class M1_Bridge_Action_Query
235
  class M1_Bridge_Action_Getconfig
236
  {
237
 
238
- /**
239
- * @param $val
240
- * @return int
241
- */
242
- private function parseMemoryLimit($val)
243
- {
244
- $last = strtolower($val[strlen($val)-1]);
245
- switch($last) {
246
- case 'g':
247
- $val *= 1024;
248
- case 'm':
249
- $val *= 1024;
250
- case 'k':
251
- $val *= 1024;
252
- }
253
-
254
- return $val;
255
- }
256
-
257
- /**
258
- * @return mixed
259
- */
260
- private function getMemoryLimit()
261
- {
262
- $memoryLimit = trim(@ini_get('memory_limit'));
263
- if (strlen($memoryLimit) === 0) {
264
- $memoryLimit = "0";
265
- }
266
- $memoryLimit = $this->parseMemoryLimit($memoryLimit);
267
-
268
- $maxPostSize = trim(@ini_get('post_max_size'));
269
- if (strlen($maxPostSize) === 0) {
270
- $maxPostSize = "0";
271
- }
272
- $maxPostSize = $this->parseMemoryLimit($maxPostSize);
273
-
274
- $suhosinMaxPostSize = trim(@ini_get('suhosin.post.max_value_length'));
275
- if (strlen($suhosinMaxPostSize) === 0) {
276
- $suhosinMaxPostSize = "0";
277
- }
278
- $suhosinMaxPostSize = $this->parseMemoryLimit($suhosinMaxPostSize);
279
-
280
- if ($suhosinMaxPostSize == 0) {
281
- $suhosinMaxPostSize = $maxPostSize;
282
- }
283
-
284
- if ($maxPostSize == 0) {
285
- $suhosinMaxPostSize = $maxPostSize = $memoryLimit;
286
- }
287
-
288
- return min($suhosinMaxPostSize, $maxPostSize, $memoryLimit);
289
- }
290
-
291
- /**
292
- * @return bool
293
- */
294
- private function isZlibSupported()
295
- {
296
- return function_exists('gzdecode');
297
- }
298
-
299
- /**
300
- * @param $bridge
301
- */
302
- public function perform(M1_Bridge $bridge)
303
- {
304
- if (!defined("DEFAULT_LANGUAGE_ISO2")) {
305
- define("DEFAULT_LANGUAGE_ISO2", ""); //variable for Interspire cart
306
- }
307
-
308
- $result = array(
309
- "images" => array(
310
- "imagesPath" => $bridge->config->imagesDir, // path to images folder - relative to store root
311
- "categoriesImagesPath" => $bridge->config->categoriesImagesDir,
312
- "categoriesImagesPaths" => $bridge->config->categoriesImagesDirs,
313
- "productsImagesPath" => $bridge->config->productsImagesDir,
314
- "productsImagesPaths" => $bridge->config->productsImagesDirs,
315
- "manufacturersImagesPath" => $bridge->config->manufacturersImagesDir,
316
- "manufacturersImagesPaths" => $bridge->config->manufacturersImagesDirs,
317
- ),
318
- "languages" => $bridge->config->languages,
319
- "baseDirFs" => M1_STORE_BASE_DIR, // filesystem path to store root
320
- "bridgeVersion" => M1_BRIDGE_VERSION,
321
- "defaultLanguageIso2" => DEFAULT_LANGUAGE_ISO2,
322
- "databaseName" => $bridge->config->dbname,
323
- "memoryLimit" => $this->getMemoryLimit(),
324
- "zlibSupported" => $this->isZlibSupported(),
325
- //"orderStatus" => $bridge->config->orderStatus,
326
- "cartVars" => $bridge->config->cartVars,
327
- );
328
-
329
- echo serialize($result);
330
- }
 
 
331
 
332
  }
333
 
@@ -337,26 +337,26 @@ class M1_Bridge_Action_Getconfig
337
  class M1_Bridge_Action_Batchsavefile extends M1_Bridge_Action_Savefile
338
  {
339
 
340
- /**
341
- * @param M1_Bridge $bridge
342
- */
343
- public function perform(M1_Bridge $bridge)
344
- {
345
- $result = array();
 
 
 
 
 
 
 
 
 
 
346
 
347
- foreach ($_POST['files'] as $fileInfo) {
348
- $result[$fileInfo['id']] = $this->_saveFile(
349
- $fileInfo['source'],
350
- $fileInfo['target'],
351
- (int)$fileInfo['width'],
352
- (int)$fileInfo['height'],
353
- $fileInfo['local_source']
354
- );
355
  }
356
 
357
- echo serialize($result);
358
- }
359
-
360
  }
361
 
362
  /**
@@ -365,143 +365,160 @@ class M1_Bridge_Action_Batchsavefile extends M1_Bridge_Action_Savefile
365
  class M1_Bridge_Action_Deleteimages
366
  {
367
 
368
- /**
369
- * @param M1_Bridge $bridge
370
- */
371
- public function perform(M1_Bridge $bridge)
372
- {
373
- switch($bridge->config->cartType) {
374
- case "Pinnacle361":
375
- $this->_pinnacleDeleteImages($bridge);
376
- break;
377
- case "Prestashop11":
378
- $this->_prestaShopDeleteImages($bridge);
379
- break;
380
- case 'Summercart3' :
381
- $this->_summercartDeleteImages($bridge);
382
- break;
383
- }
384
- }
385
-
386
- /**
387
- * @param $bridge
388
- */
389
- private function _pinnacleDeleteImages(M1_Bridge $bridge)
390
- {
391
- $dirs = array(
392
- M1_STORE_BASE_DIR . $bridge->config->imagesDir . 'catalog/',
393
- M1_STORE_BASE_DIR . $bridge->config->imagesDir . 'manufacturers/',
394
- M1_STORE_BASE_DIR . $bridge->config->imagesDir . 'products/',
395
- M1_STORE_BASE_DIR . $bridge->config->imagesDir . 'products/thumbs/',
396
- M1_STORE_BASE_DIR . $bridge->config->imagesDir . 'products/secondary/',
397
- M1_STORE_BASE_DIR . $bridge->config->imagesDir . 'products/preview/',
398
- );
399
-
400
- $ok = true;
401
 
402
- foreach ($dirs as $dir) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
403
 
404
- if (!file_exists($dir)) {
405
- continue;
406
- }
 
 
 
 
 
 
 
 
 
 
 
407
 
408
- $dirHandle = opendir($dir);
409
 
410
- while (false !== ($file = readdir($dirHandle))) {
411
- if ($file != "." && $file != ".." && !preg_match("/^readme\.txt?$/",$file) && !preg_match("/\.bak$/i",$file)) {
412
- $file_path = $dir . $file;
413
- if( is_file($file_path) ) {
414
- if(!rename($file_path, $file_path.".bak")) $ok = false;
415
- }
416
  }
417
- }
418
-
419
- closedir($dirHandle);
420
 
 
 
 
 
 
421
  }
422
 
423
- if ($ok) print "OK";
424
- else print "ERROR";
425
- }
 
 
 
 
 
 
 
426
 
427
- /**
428
- * @param $bridge
429
- */
430
- private function _prestaShopDeleteImages(M1_Bridge $bridge)
431
- {
432
- $dirs = array(
433
- M1_STORE_BASE_DIR . $bridge->config->imagesDir . 'c/',
434
- M1_STORE_BASE_DIR . $bridge->config->imagesDir . 'p/',
435
- M1_STORE_BASE_DIR . $bridge->config->imagesDir . 'm/',
436
- );
437
 
438
- $ok = true;
439
 
440
- foreach ($dirs as $dir) {
 
 
441
 
442
- if (!file_exists($dir)) {
443
- continue;
444
- }
 
 
 
 
 
 
 
 
 
445
 
446
- $dirHandle = opendir($dir);
447
 
448
- while (false !== ($file = readdir($dirHandle))) {
449
- if ($file != "." && $file != ".." && preg_match("/(\d+).*\.jpg?$/", $file)) {
450
- $file_path = $dir . $file;
451
- if (is_file($file_path)) {
452
- if (!rename($file_path, $file_path . ".bak")) $ok = false;
453
- }
454
  }
455
- }
456
-
457
- closedir($dirHandle);
458
 
 
 
 
 
 
459
  }
460
 
461
- if ($ok) print "OK";
462
- else print "ERROR";
463
- }
464
-
465
- /**
466
- * @param $bridge
467
- */
468
- private function _summercartDeleteImages(M1_Bridge $bridge)
469
- {
470
- $dirs = array(
471
- M1_STORE_BASE_DIR . $bridge->config->imagesDir . 'categoryimages/',
472
- M1_STORE_BASE_DIR . $bridge->config->imagesDir . 'manufacturer/',
473
- M1_STORE_BASE_DIR . $bridge->config->imagesDir . 'productimages/',
474
- M1_STORE_BASE_DIR . $bridge->config->imagesDir . 'productthumbs/',
475
- M1_STORE_BASE_DIR . $bridge->config->imagesDir . 'productboximages/',
476
- M1_STORE_BASE_DIR . $bridge->config->imagesDir . 'productlargeimages/',
477
- );
478
-
479
- $ok = true;
480
-
481
- foreach ($dirs as $dir) {
482
 
483
- if (!file_exists($dir)) {
484
- continue;
485
- }
 
 
 
 
 
 
 
 
 
486
 
487
- $dirHandle = opendir($dir);
488
 
489
- while (false !== ($file = readdir($dirHandle))) {
490
- if (($file != ".") && ($file != "..") && !preg_match("/\.bak$/i",$file) ) {
491
- $file_path = $dir . $file;
492
- if( is_file($file_path) ) {
493
- if(!rename($file_path, $file_path.".bak")) $ok = false;
494
- }
495
  }
496
- }
497
-
498
- closedir($dirHandle);
499
 
 
 
 
 
 
500
  }
501
-
502
- if ($ok) print "OK";
503
- else print "ERROR";
504
- }
505
  }
506
 
507
  /**
@@ -510,46 +527,46 @@ class M1_Bridge_Action_Deleteimages
510
  class M1_Bridge_Action_Cubecart
511
  {
512
 
513
- /**
514
- * @param M1_Bridge $bridge
515
- */
516
- public function perform(M1_Bridge $bridge)
517
- {
518
- $dirHandle = opendir(M1_STORE_BASE_DIR . 'language/');
519
 
520
- $languages = array();
521
 
522
- while ($dirEntry = readdir($dirHandle)) {
523
- if (!is_dir(M1_STORE_BASE_DIR . 'language/' . $dirEntry) || $dirEntry == '.'
524
- || $dirEntry == '..' || strpos($dirEntry, "_") !== false
525
- ) {
526
- continue;
527
- }
528
 
529
- $lang['id'] = $dirEntry;
530
- $lang['iso2'] = $dirEntry;
531
 
532
- $cnfile = "config.inc.php";
533
 
534
- if (!file_exists(M1_STORE_BASE_DIR . 'language/' . $dirEntry . '/'. $cnfile)) {
535
- $cnfile = "config.php";
536
- }
537
 
538
- if (!file_exists( M1_STORE_BASE_DIR . 'language/' . $dirEntry . '/'. $cnfile)) {
539
- continue;
540
- }
541
 
542
- $str = file_get_contents(M1_STORE_BASE_DIR . 'language/' . $dirEntry . '/'.$cnfile);
543
- preg_match("/".preg_quote('$langName')."[\s]*=[\s]*[\"\'](.*)[\"\'];/", $str, $match);
544
 
545
- if (isset($match[1])) {
546
- $lang['name'] = $match[1];
547
- $languages[] = $lang;
548
- }
549
- }
550
 
551
- echo serialize($languages);
552
- }
553
  }
554
 
555
  /**
@@ -558,15 +575,15 @@ class M1_Bridge_Action_Cubecart
558
  class M1_Bridge_Action_Mysqlver
559
  {
560
 
561
- /**
562
- * @param $bridge
563
- */
564
- public function perform(M1_Bridge $bridge)
565
- {
566
- $message = array();
567
- preg_match('/^(\d+)\.(\d+)\.(\d+)/', mysql_get_server_info($bridge->getLink()), $message);
568
- echo sprintf("%d%02d%02d", $message[1], $message[2], $message[3]);
569
- }
570
  }
571
 
572
  /**
@@ -575,1139 +592,1151 @@ class M1_Bridge_Action_Mysqlver
575
  class M1_Bridge_Action_Clearcache
576
  {
577
 
578
- /**
579
- * @param M1_Bridge $bridge
580
- */
581
- public function perform(M1_Bridge $bridge)
582
- {
583
- switch($bridge->config->cartType) {
584
- case "Cubecart":
585
- $this->_CubecartClearCache();
586
- break;
587
- case "Prestashop11":
588
- $this->_PrestashopClearCache();
589
- break;
590
- case "Interspire":
591
- $this->_InterspireClearCache();
592
- break;
593
- case "Opencart14" :
594
- $this->_OpencartClearCache();
595
- break;
596
- case "XtcommerceVeyton" :
597
- $this->_Xtcommerce4ClearCache();
598
- break;
599
- case "Ubercart" :
600
- $this->_ubercartClearCache();
601
- break;
602
- case "Tomatocart" :
603
- $this->_tomatocartClearCache();
604
- break;
605
- case "Virtuemart113" :
606
- $this->_virtuemartClearCache();
607
- break;
608
- case "Magento1212" :
609
- //$this->_magentoClearCache();
610
- break;
611
- case "Oscommerce3":
612
- $this->_Oscommerce3ClearCache();
613
- break;
614
- case "Oxid":
615
- $this->_OxidClearCache();
616
- break;
617
- case "XCart":
618
- $this->_XcartClearCache();
619
- break;
620
- case "Cscart203":
621
- $this->_CscartClearCache();
622
- break;
623
- case "Prestashop15":
624
- $this->_Prestashop15ClearCache();
625
- break;
626
- case "Gambio":
627
- $this->_GambioClearCache();
628
- break;
629
- }
630
- }
631
-
632
- /**
633
- * @param array $dirs
634
- * @param string $fileExclude - name file in format pregmatch
635
- * @return bool
636
- */
637
- private function _removeGarbage($dirs = array(), $fileExclude = '')
638
- {
639
- $result = true;
640
-
641
- foreach ($dirs as $dir) {
642
-
643
- if (!file_exists($dir)) {
644
- continue;
645
- }
646
-
647
- $dirHandle = opendir($dir);
648
-
649
- while (false !== ($file = readdir($dirHandle))) {
650
- if ($file == "." || $file == "..") {
651
- continue;
652
- }
653
-
654
- if ((trim($fileExclude) != '') && preg_match("/^" .$fileExclude . "?$/", $file)) {
655
- continue;
656
- }
657
-
658
- if (is_dir($dir . $file)) {
659
- continue;
660
- }
661
-
662
- if (!unlink($dir . $file)) {
663
- $result = false;
664
- }
665
- }
666
-
667
- closedir($dirHandle);
668
- }
669
-
670
- if ($result) {
671
- echo 'OK';
672
- } else {
673
- echo 'ERROR';
674
- }
675
-
676
- return $result;
677
- }
678
-
679
- private function _magentoClearCache()
680
- {
681
- chdir('../');
682
-
683
- $indexes = array(
684
- 'catalog_product_attribute',
685
- 'catalog_product_price',
686
- 'catalog_url',
687
- 'catalog_product_flat',
688
- 'catalog_category_flat',
689
- 'catalog_category_product',
690
- 'catalogsearch_fulltext',
691
- 'cataloginventory_stock',
692
- 'tag_summary'
693
- );
694
-
695
- $phpExecutable = getPHPExecutable();
696
- if ($phpExecutable) {
697
- foreach ($indexes as $index) {
698
- exec($phpExecutable . " shell/indexer.php --reindex $index", $out);
699
- }
700
- echo 'OK';
701
- } else {
702
- echo 'Error: can not find PHP executable file.';
703
- }
704
-
705
- echo 'OK';
706
- }
707
-
708
- private function _InterspireClearCache()
709
- {
710
- $res = true;
711
- $file = M1_STORE_BASE_DIR . 'cache' . DIRECTORY_SEPARATOR . 'datastore' . DIRECTORY_SEPARATOR . 'RootCategories.php';
712
- if (file_exists($file)) {
713
- if (!unlink($file)) {
714
- $res = false;
715
- }
716
- }
717
- if ($res === true) {
718
- echo "OK";
719
- } else {
720
- echo "ERROR";
721
  }
722
- }
723
 
724
- private function _CubecartClearCache()
725
- {
726
- $ok = true;
 
 
 
 
 
727
 
728
- if (file_exists(M1_STORE_BASE_DIR . 'cache')) {
729
- $dirHandle = opendir(M1_STORE_BASE_DIR . 'cache/');
730
 
731
- while (false !== ($file = readdir($dirHandle))) {
732
- if ($file != "." && $file != ".." && !preg_match("/^index\.html?$/", $file) && !preg_match("/^\.htaccess?$/", $file)) {
733
- if (is_file( M1_STORE_BASE_DIR . 'cache/' . $file)) {
734
- if (!unlink(M1_STORE_BASE_DIR . 'cache/' . $file)) {
735
- $ok = false;
736
  }
737
- }
738
- }
739
- }
740
-
741
- closedir($dirHandle);
742
- }
743
-
744
- if (file_exists(M1_STORE_BASE_DIR.'includes/extra/admin_cat_cache.txt')) {
745
- unlink(M1_STORE_BASE_DIR.'includes/extra/admin_cat_cache.txt');
746
- }
747
-
748
- if ($ok) {
749
- echo 'OK';
750
- } else {
751
- echo 'ERROR';
752
- }
753
- }
754
-
755
- private function _PrestashopClearCache()
756
- {
757
- $dirs = array(
758
- M1_STORE_BASE_DIR . 'tools/smarty/compile/',
759
- M1_STORE_BASE_DIR . 'tools/smarty/cache/',
760
- M1_STORE_BASE_DIR . 'img/tmp/'
761
- );
762
-
763
- $this->_removeGarbage($dirs, 'index\.php');
764
- }
765
-
766
- private function _OpencartClearCache()
767
- {
768
- $dirs = array(
769
- M1_STORE_BASE_DIR . 'system/cache/',
770
- );
771
-
772
- $this->_removeGarbage($dirs, 'index\.html');
773
- }
774
-
775
- private function _Xtcommerce4ClearCache()
776
- {
777
- $dirs = array(
778
- M1_STORE_BASE_DIR . 'cache/',
779
- );
780
-
781
- $this->_removeGarbage($dirs, 'index\.html');
782
- }
783
-
784
- private function _ubercartClearCache()
785
- {
786
- $dirs = array(
787
- M1_STORE_BASE_DIR . 'sites/default/files/imagecache/product/',
788
- M1_STORE_BASE_DIR . 'sites/default/files/imagecache/product_full/',
789
- M1_STORE_BASE_DIR . 'sites/default/files/imagecache/product_list/',
790
- M1_STORE_BASE_DIR . 'sites/default/files/imagecache/uc_category/',
791
- M1_STORE_BASE_DIR . 'sites/default/files/imagecache/uc_thumbnail/',
792
- );
793
-
794
- $this->_removeGarbage($dirs);
795
- }
796
-
797
- private function _tomatocartClearCache()
798
- {
799
- $dirs = array(
800
- M1_STORE_BASE_DIR . 'includes/work/',
801
- );
802
-
803
- $this->_removeGarbage($dirs, '\.htaccess');
804
- }
805
-
806
- /**
807
- * Try chage permissions actually :)
808
- */
809
- private function _virtuemartClearCache()
810
- {
811
- $pathToImages = 'components/com_virtuemart/shop_image';
812
-
813
- $dirParts = explode("/", $pathToImages);
814
- $path = M1_STORE_BASE_DIR;
815
- foreach ($dirParts as $item) {
816
- if ($item == '') {
817
- continue;
818
- }
819
-
820
- $path .= $item . DIRECTORY_SEPARATOR;
821
- @chmod($path, 0755);
822
- }
823
- }
824
-
825
- private function _Oscommerce3ClearCache()
826
- {
827
- $dirs = array(
828
- M1_STORE_BASE_DIR . 'osCommerce/OM/Work/Cache/',
829
- );
830
-
831
- $this->_removeGarbage($dirs, '\.htaccess');
832
- }
833
-
834
- private function _GambioClearCache()
835
- {
836
- $dirs = array(
837
- M1_STORE_BASE_DIR . 'cache/',
838
- );
839
-
840
- $this->_removeGarbage($dirs, 'index\.html');
841
- }
842
-
843
- private function _OxidClearCache()
844
- {
845
- $dirs = array(
846
- M1_STORE_BASE_DIR . 'tmp/',
847
- );
848
-
849
- $this->_removeGarbage($dirs, '\.htaccess');
850
- }
851
-
852
- private function _XcartClearCache()
853
- {
854
- $dirs = array(
855
- M1_STORE_BASE_DIR . 'var/cache/',
856
- );
857
-
858
- $this->_removeGarbage($dirs, '\.htaccess');
859
- }
860
-
861
- private function _CscartClearCache()
862
- {
863
- $dir = M1_STORE_BASE_DIR . 'var/cache/';
864
- $res = $this->removeDirRec($dir);
865
-
866
- if ($res) {
867
- echo 'OK';
868
- } else {
869
- echo 'ERROR';
870
- }
871
- }
872
-
873
- private function _Prestashop15ClearCache()
874
- {
875
- $dirs = array(
876
- M1_STORE_BASE_DIR . 'cache/smarty/compile/',
877
- M1_STORE_BASE_DIR . 'cache/smarty/cache/',
878
- M1_STORE_BASE_DIR . 'img/tmp/'
879
- );
880
-
881
- $this->_removeGarbage($dirs, 'index\.php');
882
- }
883
-
884
- /**
885
- * @param $dir
886
- * @return bool
887
- */
888
- private function removeDirRec($dir)
889
- {
890
- $result = true;
891
-
892
- if ($objs = glob($dir."/*")) {
893
- foreach ($objs as $obj) {
894
- if (is_dir($obj)) {
895
- //print "IS DIR! START RECURSIVE FUNCTION.\n";
896
- $this->removeDirRec($obj);
897
- } else {
898
- if (!unlink($obj)) {
899
- //print "!UNLINK FILE: ".$obj."\n";
900
- $result = false;
901
- }
902
- }
903
- }
904
- }
905
- if (!rmdir($dir)) {
906
- //print "ERROR REMOVE DIR: ".$dir."\n";
907
- $result = false;
908
- }
909
 
910
- return $result;
911
- }
912
- }
913
-
914
- /**
915
- * @author: Ihor Liubarskiy i.lybarskuy@magneticone.com
916
- * Date: 16.11.16 17:02
917
- */
918
 
919
- class M1_Bridge_Action_Multiquery
920
- {
921
- protected $_lastInsertIds = array();
 
922
 
923
- /**
924
- * @param M1_Bridge $bridge
925
- * @return bool|null
926
- */
927
- public function perform(M1_Bridge $bridge)
928
- {
929
- if (isset($_POST['queries']) && isset($_POST['fetchMode'])) {
930
 
931
- $queries = unserialize(base64_decode($_POST['queries']));
932
- $result = false;
933
- $count = 0;
934
 
935
- foreach ($queries as $queryId => $query) {
 
 
 
936
 
937
- if ($count++ > 0) {
938
- $query = preg_replace_callback('/_A2C_LAST_\{([a-zA-Z0-9_\-]{1,32})\}_INSERT_ID_/', array($this, '_replace'), $query);
939
  }
940
 
941
- $res = $bridge->query($query, (int)$_POST['fetchMode']);
942
- if (is_array($res['result']) || is_bool($res['result'])) {
 
 
 
943
 
944
- $queryRes = array(
945
- 'res' => $res['result'],
946
- 'fetchedFields' => @$res['fetchedFields'],
947
- 'insertId' => $bridge->getLink()->getLastInsertId(),
948
- 'affectedRows' => $bridge->getLink()->getAffectedRows(),
949
- );
950
 
951
- $result[$queryId] = $queryRes;
952
- $this->_lastInsertIds[$queryId] = $queryRes['insertId'];
953
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
954
  } else {
955
- echo base64_encode($res['message']);
956
- return false;
957
  }
958
- }
959
- echo base64_encode(serialize($result));
960
- } else {
961
- return false;
962
- }
963
- }
964
 
965
- protected function _replace($matches)
966
- {
967
- return $this->_lastInsertIds[$matches[1]];
968
- }
969
- }
970
 
971
- /**
972
- * Class M1_Bridge_Action_Basedirfs
973
- */
974
- class M1_Bridge_Action_Basedirfs
975
- {
 
 
 
 
 
 
 
 
 
 
976
 
977
- /**
978
- * @param M1_Bridge $bridge
979
- */
980
- public function perform(M1_Bridge $bridge)
981
- {
982
- echo M1_STORE_BASE_DIR;
983
- }
984
- }
985
 
986
- /**
987
- * Class M1_Bridge_Action_Phpinfo
988
- */
989
- class M1_Bridge_Action_Phpinfo
990
- {
991
 
992
- /**
993
- * @param M1_Bridge $bridge
994
- */
995
- public function perform(M1_Bridge $bridge)
996
- {
997
- phpinfo();
998
- }
999
- }
 
 
 
1000
 
 
 
1001
 
1002
- /**
1003
- * Class M1_Bridge_Action_Savefile
1004
- */
1005
- class M1_Bridge_Action_Savefile
1006
- {
1007
- protected $_imageType = null;
1008
-
1009
- /**
1010
- * @param $bridge
1011
- */
1012
- public function perform(M1_Bridge $bridge)
1013
- {
1014
- $source = $_POST['src'];
1015
- $destination = $_POST['dst'];
1016
- $width = (int)$_POST['width'];
1017
- $height = (int)$_POST['height'];
1018
- $local = $_POST['local_source'];
1019
-
1020
- echo $this->_saveFile($source, $destination, $width, $height, $local);
1021
- }
1022
-
1023
- /**
1024
- * @param $source
1025
- * @param $destination
1026
- * @param $width
1027
- * @param $height
1028
- * @param string $local
1029
- * @return string
1030
- */
1031
- public function _saveFile($source, $destination, $width, $height, $local = '')
1032
- {
1033
- if (trim($local) != '') {
1034
-
1035
- if ($this->_copyLocal($local, $destination, $width, $height)) {
1036
- return "OK";
1037
- }
1038
 
 
 
 
 
 
1039
  }
1040
 
1041
- if (!preg_match('/^https?:\/\//i', $source)) {
1042
- $result = $this->_createFile($source, $destination);
1043
- } elseif ($this->_isSameHost($source)) {
1044
- $result = $this->_saveFileLocal($source, $destination);
1045
- } else {
1046
- $result = $this->_saveFileCurl($source, $destination);
1047
- }
1048
 
1049
- if ($result != "OK") {
1050
- return $result;
1051
  }
1052
 
1053
- $destination = M1_STORE_BASE_DIR . $destination;
 
 
 
 
1054
 
1055
- if ($width != 0 && $height != 0) {
1056
- $this->_scaled2( $destination, $width, $height );
1057
  }
1058
 
1059
- if ($this->cartType == "Prestashop11") {
1060
- // convert destination.gif(png) to destination.jpg
1061
- $imageGd = $this->_loadImage($destination);
 
 
1062
 
1063
- if ($imageGd === false) {
1064
- return $result;
1065
- }
1066
-
1067
- if (!$this->_convert($imageGd, $destination, IMAGETYPE_JPEG, 'jpg')) {
1068
- return "CONVERT FAILED";
1069
- }
1070
- }
1071
-
1072
- return $result;
1073
- }
1074
-
1075
- /**
1076
- * @param $source
1077
- * @param $destination
1078
- * @param $width
1079
- * @param $height
1080
- * @return bool
1081
- */
1082
- private function _copyLocal($source, $destination, $width, $height)
1083
- {
1084
- $source = M1_STORE_BASE_DIR . $source;
1085
- $destination = M1_STORE_BASE_DIR . $destination;
1086
-
1087
- if (!@copy($source, $destination)) {
1088
- return false;
1089
- }
1090
-
1091
- if ($width != 0 && $height != 0) {
1092
- $this->_scaled2($destination, $width, $height);
1093
- }
1094
-
1095
- return true;
1096
- }
1097
-
1098
- /**
1099
- * @param $filename
1100
- * @param bool $skipJpg
1101
- * @return bool|resource
1102
- */
1103
- private function _loadImage($filename, $skipJpg = true)
1104
- {
1105
- $imageInfo = @getimagesize($filename);
1106
- if ($imageInfo === false) {
1107
- return false;
1108
- }
1109
-
1110
- $this->_imageType = $imageInfo[2];
1111
-
1112
- switch ($this->_imageType) {
1113
- case IMAGETYPE_JPEG:
1114
- $image = imagecreatefromjpeg($filename);
1115
- break;
1116
- case IMAGETYPE_GIF:
1117
- $image = imagecreatefromgif($filename);
1118
- break;
1119
- case IMAGETYPE_PNG:
1120
- $image = imagecreatefrompng($filename);
1121
- break;
1122
- default:
1123
- return false;
1124
  }
1125
 
1126
- if ($skipJpg && ($this->_imageType == IMAGETYPE_JPEG)) {
1127
- return false;
1128
- }
1129
-
1130
- return $image;
1131
- }
1132
-
1133
- /**
1134
- * @param $image
1135
- * @param $filename
1136
- * @param int $imageType
1137
- * @param int $compression
1138
- * @param null $permissions
1139
- * @return bool
1140
- */
1141
- private function _saveImage($image, $filename, $imageType = IMAGETYPE_JPEG, $compression = 85, $permissions = null)
1142
- {
1143
- $result = true;
1144
- if ($imageType == IMAGETYPE_JPEG) {
1145
- $result = imagejpeg($image, $filename, $compression);
1146
- } elseif ($imageType == IMAGETYPE_GIF) {
1147
- $result = imagegif($image, $filename);
1148
- } elseif ($imageType == IMAGETYPE_PNG) {
1149
- $result = imagepng($image, $filename);
1150
- }
1151
-
1152
- if ($permissions != null) {
1153
- chmod($filename, $permissions);
1154
- }
1155
-
1156
- imagedestroy($image);
1157
-
1158
- return $result;
1159
- }
1160
-
1161
- /**
1162
- * @param $source
1163
- * @param $destination
1164
- * @return string
1165
- */
1166
- private function _createFile($source, $destination)
1167
- {
1168
- if ($this->_createDir(dirname($destination)) !== false) {
1169
- $destination = M1_STORE_BASE_DIR . $destination;
1170
- $body = base64_decode($source);
1171
- if ($body === false || file_put_contents($destination, $body) === false) {
1172
- return '[BRIDGE ERROR] File save failed!';
1173
- }
1174
-
1175
- return 'OK';
1176
- }
1177
-
1178
- return '[BRIDGE ERROR] Directory creation failed!';
1179
- }
1180
-
1181
- /**
1182
- * @param $source
1183
- * @param $destination
1184
- * @return string
1185
- */
1186
- private function _saveFileLocal($source, $destination)
1187
- {
1188
- $srcInfo = parse_url($source);
1189
- $src = rtrim($_SERVER['DOCUMENT_ROOT'], "/") . $srcInfo['path'];
1190
-
1191
- if ($this->_createDir(dirname($destination)) !== false) {
1192
- $dst = M1_STORE_BASE_DIR . $destination;
1193
-
1194
- if (!@copy($src, $dst)) {
1195
- return $this->_saveFileCurl($source, $destination);
1196
- }
1197
-
1198
- } else {
1199
- return "[BRIDGE ERROR] Directory creation failed!";
1200
- }
1201
-
1202
- return "OK";
1203
- }
1204
-
1205
- /**
1206
- * @param $source
1207
- * @param $destination
1208
- * @return string
1209
- */
1210
- private function _saveFileCurl($source, $destination)
1211
- {
1212
- $source = $this->_escapeSource($source);
1213
- if ($this->_createDir(dirname($destination)) !== false) {
1214
- $destination = M1_STORE_BASE_DIR . $destination;
1215
-
1216
- $ch = curl_init();
1217
- curl_setopt($ch, CURLOPT_URL, $source);
1218
- curl_setopt($ch, CURLOPT_HEADER, 0);
1219
- curl_setopt($ch, CURLOPT_TIMEOUT, 60);
1220
- curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1");
1221
- curl_setopt($ch, CURLOPT_NOBODY, true);
1222
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
1223
- curl_exec($ch);
1224
- $httpResponseCode = (int)curl_getinfo($ch, CURLINFO_HTTP_CODE);
1225
-
1226
- if ($httpResponseCode != 200) {
1227
- curl_close($ch);
1228
- return "[BRIDGE ERROR] Bad response received from source, HTTP code $httpResponseCode!";
1229
- }
1230
-
1231
- $dst = @fopen($destination, "wb");
1232
- if ($dst === false) {
1233
- return "[BRIDGE ERROR] Can't create $destination!";
1234
- }
1235
- curl_setopt($ch, CURLOPT_NOBODY, false);
1236
- curl_setopt($ch, CURLOPT_FILE, $dst);
1237
- curl_setopt($ch, CURLOPT_HTTPGET, true);
1238
- curl_exec($ch);
1239
- if (($error_no = curl_errno($ch)) != CURLE_OK) {
1240
- return "[BRIDGE ERROR] $error_no: " . curl_error($ch);
1241
- }
1242
- curl_close($ch);
1243
- @chmod($destination, 0755);
1244
-
1245
- return "OK";
1246
-
1247
- } else {
1248
- return "[BRIDGE ERROR] Directory creation failed!";
1249
- }
1250
- }
1251
-
1252
- /**
1253
- * @param $source
1254
- * @return mixed
1255
- */
1256
- private function _escapeSource($source)
1257
- {
1258
- return str_replace(" ", "%20", $source);
1259
- }
1260
-
1261
- /**
1262
- * @param $dir
1263
- * @return bool
1264
- */
1265
- private function _createDir($dir)
1266
- {
1267
- $dirParts = explode("/", $dir);
1268
- $path = M1_STORE_BASE_DIR;
1269
- foreach ($dirParts as $item) {
1270
- if ($item == '') {
1271
- continue;
1272
- }
1273
- $path .= $item . DIRECTORY_SEPARATOR;
1274
- if (!is_dir($path)) {
1275
- $res = @mkdir($path);
1276
- if (!$res) {
1277
- return false;
1278
- }
1279
- }
1280
- @chmod($path, 0777);
1281
- }
1282
- return true;
1283
- }
1284
-
1285
- /**
1286
- * @param $source
1287
- * @return bool
1288
- */
1289
- private function _isSameHost($source)
1290
- {
1291
- $srcInfo = parse_url($source);
1292
-
1293
- if (preg_match('/\.php$/', $srcInfo['path'])) {
1294
- return false;
1295
- }
1296
-
1297
- $hostInfo = parse_url("http://" . $_SERVER['HTTP_HOST']);
1298
- if (@$srcInfo['host'] == $hostInfo['host']) {
1299
- return true;
1300
- }
1301
 
1302
- return false;
1303
- }
1304
 
1305
- /**
1306
- * @param resource $image - GD image object
1307
- * @param string $filename - store sorce pathfile ex. M1_STORE_BASE_DIR . '/img/c/2.gif';
1308
- * @param int $type - IMAGETYPE_JPEG, IMAGETYPE_GIF or IMAGETYPE_PNG
1309
- * @param string $extension - file extension, this use for jpg or jpeg extension in prestashop
1310
- *
1311
- * @return true if success or false if no
1312
- */
1313
- private function _convert($image, $filename, $type = IMAGETYPE_JPEG, $extension = '')
1314
- {
1315
- $end = pathinfo($filename, PATHINFO_EXTENSION);
1316
 
1317
- if ($extension == '') {
1318
- $extension = image_type_to_extension($type, false);
1319
  }
1320
 
1321
- if ($end == $extension) {
1322
- return true;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1323
  }
1324
 
1325
- $width = imagesx($image);
1326
- $height = imagesy($image);
 
 
 
1327
 
1328
- $newImage = imagecreatetruecolor($width, $height);
 
1329
 
1330
- /* Allow to keep nice look even if resized */
1331
- $white = imagecolorallocate($newImage, 255, 255, 255);
1332
- imagefill($newImage, 0, 0, $white);
1333
- imagecopyresampled($newImage, $image, 0, 0, 0, 0, $width, $height, $width, $height );
1334
- imagecolortransparent($newImage, $white);
1335
 
1336
- $pathSave = rtrim($filename, $end);
 
1337
 
1338
- $pathSave .= $extension;
 
 
 
 
1339
 
1340
- return $this->_saveImage($newImage, $pathSave, $type);
1341
- }
1342
 
1343
- /**
1344
- * @param $destination
1345
- * @param $width
1346
- * @param $height
1347
- * @return string|void
1348
- */
1349
- private function _scaled($destination, $width, $height)
1350
- {
1351
- $image = $this->_loadImage($destination, false);
1352
 
1353
- if ($image === false) {
1354
- return;
1355
  }
1356
 
1357
- $originWidth = imagesx( $image );
1358
- $originHeight = imagesy( $image );
1359
-
1360
- $rw = (int)$height * (int)$originWidth / (int)$originHeight;
1361
- $useHeight = ($rw <= $width);
1362
 
1363
- if ($useHeight) {
1364
- $width = (int)$rw;
1365
- } else {
1366
- $height = (int)((int)($width) * (int)($originHeight) / (int)($originWidth));
 
1367
  }
1368
 
1369
- $newImage = imagecreatetruecolor($width, $height);
1370
- $white = imagecolorallocate($newImage, 255, 255, 255);
1371
- imagefill($newImage, 0, 0, $white);
1372
- imagecopyresampled($newImage, $image, 0, 0, 0, 0, $width, $height, $originWidth, $originHeight);
1373
- imagecolortransparent($newImage, $white);
 
 
1374
 
1375
- return $this->_saveImage($newImage, $destination, $this->_imageType, 100) ? "OK" : "CAN'T SCALE IMAGE";
1376
- }
1377
-
1378
- /**
1379
- * scaled2 method optimizet for prestashop
1380
- *
1381
- * @param $destination
1382
- * @param $destWidth
1383
- * @param $destHeight
1384
- * @return string
1385
- */
1386
- private function _scaled2($destination, $destWidth, $destHeight)
1387
- {
1388
- $method = 0;
1389
 
1390
- $sourceImage = $this->_loadImage($destination, false);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1391
 
1392
- if ($sourceImage === false) {
1393
- return "IMAGE NOT SUPPORTED";
1394
  }
 
 
 
 
1395
 
1396
- $sourceWidth = imagesx($sourceImage);
1397
- $sourceHeight = imagesy($sourceImage);
1398
 
1399
- $widthDiff = $destWidth / $sourceWidth;
1400
- $heightDiff = $destHeight / $sourceHeight;
 
 
 
 
 
1401
 
1402
- if ($widthDiff > 1 && $heightDiff > 1) {
1403
- $nextWidth = $sourceWidth;
1404
- $nextHeight = $sourceHeight;
1405
- } else {
1406
- if (intval($method) == 2 || (intval($method) == 0 AND $widthDiff > $heightDiff)) {
1407
- $nextHeight = $destHeight;
1408
- $nextWidth = intval(($sourceWidth * $nextHeight) / $sourceHeight);
1409
- $destWidth = ((intval($method) == 0 ) ? $destWidth : $nextWidth);
1410
- } else {
1411
- $nextWidth = $destWidth;
1412
- $nextHeight = intval($sourceHeight * $destWidth / $sourceWidth);
1413
- $destHeight = (intval($method) == 0 ? $destHeight : $nextHeight);
1414
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1415
  }
1416
 
1417
- $borderWidth = intval(($destWidth - $nextWidth) / 2);
1418
- $borderHeight = intval(($destHeight - $nextHeight) / 2);
1419
-
1420
- $destImage = imagecreatetruecolor($destWidth, $destHeight);
1421
 
1422
- $white = imagecolorallocate($destImage, 255, 255, 255);
1423
- imagefill($destImage, 0, 0, $white);
 
 
 
 
 
 
1424
 
1425
- imagecopyresampled($destImage, $sourceImage, $borderWidth, $borderHeight, 0, 0, $nextWidth, $nextHeight, $sourceWidth, $sourceHeight);
1426
- imagecolortransparent($destImage, $white);
1427
 
1428
- return $this->_saveImage($destImage, $destination, $this->_imageType, 100) ? "OK" : "CAN'T SCALE IMAGE";
1429
- }
1430
  }
1431
 
1432
  /**
1433
- * @package api2cart
1434
- * @author Vasul Babiy (v.babyi@magneticone.com)
1435
- * @license Not public license
1436
- * @link https://www.api2cart.com
1437
  */
1438
-
1439
- class M1_Mysqli
1440
  {
1441
- public $config = null; // config adapter
1442
- public $result = array();
1443
- public $dataBaseHandle = null;
1444
-
1445
- /**
1446
- * mysql constructor
1447
- *
1448
- * @param M1_Config_Adapter $config
1449
- * @return M1_Mysql
1450
- */
1451
- public function __construct($config)
1452
- {
1453
- $this->config = $config;
1454
- }
1455
 
1456
- /**
1457
- * @return bool|null|resource
1458
- */
1459
- private function getDataBaseHandle()
1460
- {
1461
- if ($this->dataBaseHandle) {
1462
- return $this->dataBaseHandle;
1463
- }
1464
-
1465
- $this->dataBaseHandle = $this->connect();
1466
-
1467
- if (!$this->dataBaseHandle) {
1468
- exit('[ERROR] MySQLi Query Error: Can not connect to DB');
1469
- }
1470
-
1471
- return $this->dataBaseHandle;
1472
- }
1473
-
1474
- /**
1475
- * @return bool|null|resource
1476
- */
1477
- private function connect()
1478
- {
1479
- $triesCount = 10;
1480
- $link = null;
1481
- $host = $this->config->host . ($this->config->port ? ':' . $this->config->port : '');
1482
- $password = stripslashes($this->config->password);
1483
-
1484
- while (!$link) {
1485
- if (!$triesCount--) {
1486
- break;
1487
- }
1488
-
1489
- $link = @mysqli_connect($host, $this->config->username, $password);
1490
- if (!$link) {
1491
- sleep(5);
1492
- }
1493
- }
1494
-
1495
- if ($link) {
1496
- mysqli_select_db($link, $this->config->dbname);
1497
- } else {
1498
- return false;
1499
- }
1500
-
1501
- return $link;
1502
- }
1503
-
1504
- /**
1505
- * @param $sql
1506
- *
1507
- * @return array|bool|mysqli_result
1508
- */
1509
- public function localQuery($sql)
1510
- {
1511
- $result = array();
1512
- $dataBaseHandle = $this->getDataBaseHandle();
1513
-
1514
- $sth = mysqli_query($dataBaseHandle, $sql);
1515
-
1516
- if (is_bool($sth)) {
1517
- return $sth;
1518
- }
1519
-
1520
- while (($row = mysqli_fetch_assoc($sth))) {
1521
- $result[] = $row;
1522
- }
1523
-
1524
- return $result;
1525
- }
1526
-
1527
- /**
1528
- * @param $sql
1529
- * @param $fetchType
1530
- *
1531
- * @return array
1532
- */
1533
- public function query($sql, $fetchType)
1534
- {
1535
- $result = array(
1536
- 'result' => null,
1537
- 'message' => '',
1538
- 'fetchedFields' => ''
1539
- );
1540
-
1541
- $dataBaseHandle = $this->getDataBaseHandle();
1542
-
1543
- if (!$dataBaseHandle) {
1544
- $result['message'] = '[ERROR] MySQLi Query Error: Can not connect to DB';
1545
- return $result;
1546
- }
1547
-
1548
- if (isset($_GET['disable_checks'])) {
1549
- $this->localQuery('SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0');
1550
- $this->localQuery("SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO'");
1551
  }
 
1552
 
1553
- if (isset($_REQUEST['set_names'])) {
1554
- @mysqli_query($dataBaseHandle, "SET NAMES " . @mysqli_real_escape_string($dataBaseHandle, $_REQUEST['set_names']));
1555
- @mysqli_query($dataBaseHandle, "SET CHARACTER SET " . @mysqli_real_escape_string($dataBaseHandle, $_REQUEST['set_names']));
1556
- @mysqli_query($dataBaseHandle, "SET CHARACTER_SET_CONNECTION=" . @mysqli_real_escape_string($dataBaseHandle, $_REQUEST['set_names']));
1557
- }
1558
 
1559
- $fetchMode = MYSQLI_ASSOC;
1560
- switch ($fetchType) {
1561
- case 3:
1562
- $fetchMode = MYSQLI_BOTH;
1563
- break;
1564
- case 2:
1565
- $fetchMode = MYSQLI_NUM;
1566
- break;
1567
- case 1:
1568
- $fetchMode = MYSQLI_ASSOC;
1569
- break;
1570
- default:
1571
- break;
1572
  }
 
1573
 
1574
- $res = mysqli_query($dataBaseHandle, $sql);
1575
 
1576
- $triesCount = 10;
1577
- while (mysqli_errno($dataBaseHandle) == 2013) {
1578
- if (!$triesCount--) {
1579
- break;
1580
- }
1581
- // reconnect
1582
- $dataBaseHandle = $this->getDataBaseHandle();
1583
- if ($dataBaseHandle) {
1584
 
1585
- if (isset($_REQUEST['set_names'])) {
1586
- @mysqli_query($dataBaseHandle, "SET NAMES " . @mysqli_real_escape_string($dataBaseHandle, $_REQUEST['set_names']));
1587
- @mysqli_query($dataBaseHandle, "SET CHARACTER SET " . @mysqli_real_escape_string($dataBaseHandle, $_REQUEST['set_names']));
1588
- @mysqli_query($dataBaseHandle, "SET CHARACTER_SET_CONNECTION=" . @mysqli_real_escape_string($dataBaseHandle, $_REQUEST['set_names']));
1589
- }
 
 
 
 
 
1590
 
1591
- // execute query once again
1592
- $res = mysqli_query($dataBaseHandle, $sql);
1593
- }
1594
  }
1595
 
1596
- if (($errno = mysqli_errno($dataBaseHandle)) != 0) {
1597
- $result['message'] = '[ERROR] MySQLi Query Error: ' . $errno . ', ' . mysqli_error($dataBaseHandle);
1598
- return $result;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1599
  }
1600
 
1601
- if (is_bool($res)) {
1602
- $result['result'] = $res;
1603
- return $result;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1604
  }
1605
 
1606
- $fetchedFields = array();
1607
- while ($field = mysqli_fetch_field($res)) {
1608
- $fetchedFields[] = $field;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1609
  }
1610
 
1611
- $rows = array();
1612
- while ($row = mysqli_fetch_array($res, $fetchMode)) {
1613
- $rows[] = $row;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1614
  }
1615
 
1616
- if (isset($_GET['disable_checks'])) {
1617
- $this->localQuery("SET SQL_MODE=IFNULL(@OLD_SQL_MODE,'')");
1618
- $this->localQuery("SET FOREIGN_KEY_CHECKS=IFNULL(@OLD_FOREIGN_KEY_CHECKS,0)");
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1619
  }
1620
 
1621
- $result['result'] = $rows;
1622
- $result['fetchedFields'] = $fetchedFields;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1623
 
1624
- mysqli_free_result($res);
 
1625
 
1626
- return $result;
1627
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1628
 
1629
- /**
1630
- * @return int
1631
- */
1632
- public function getLastInsertId()
1633
- {
1634
- return mysqli_insert_id($this->dataBaseHandle);
1635
- }
 
 
 
 
 
 
1636
 
1637
- /**
1638
- * @return int
1639
- */
1640
- public function getAffectedRows()
1641
- {
1642
- return mysqli_affected_rows($this->dataBaseHandle);
1643
- }
1644
 
1645
- /**
1646
- * @return void
1647
- */
1648
- public function __destruct()
1649
- {
1650
- if ($this->dataBaseHandle) {
1651
- mysqli_close($this->dataBaseHandle);
1652
  }
1653
 
1654
- $this->dataBaseHandle = null;
1655
- }
 
 
 
 
 
 
1656
 
1657
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1658
 
 
 
 
 
 
 
 
1659
 
1660
- /**
1661
- * Class M1_Config_Adapter_Ubercart
1662
- */
1663
- class M1_Config_Adapter_Ubercart extends M1_Config_Adapter
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1664
  {
 
 
 
1665
 
1666
- /**
1667
- * M1_Config_Adapter_Ubercart constructor.
1668
- */
1669
- public function __construct()
1670
- {
1671
- @include_once M1_STORE_BASE_DIR . "sites/default/settings.php";
 
 
 
 
1672
 
1673
- $url = parse_url($db_url);
 
 
 
 
 
 
 
1674
 
1675
- $url['user'] = urldecode($url['user']);
1676
- // Test if database url has a password.
1677
- $url['pass'] = isset($url['pass']) ? urldecode($url['pass']) : '';
1678
- $url['host'] = urldecode($url['host']);
1679
- $url['path'] = urldecode($url['path']);
1680
- // Allow for non-standard MySQL port.
1681
- if (isset($url['port'])) {
1682
- $url['host'] = $url['host'] .':'. $url['port'];
1683
  }
1684
 
1685
- $this->setHostPort( $url['host'] );
1686
- $this->dbname = ltrim( $url['path'], '/' );
1687
- $this->username = $url['user'];
1688
- $this->password = $url['pass'];
 
 
 
 
 
 
 
 
 
1689
 
1690
- $this->imagesDir = "/sites/default/files/";
1691
- if (!file_exists(M1_STORE_BASE_DIR . $this->imagesDir)) {
1692
- $this->imagesDir = "/files";
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1693
  }
1694
 
1695
- if (file_exists(M1_STORE_BASE_DIR . "/modules/ubercart/uc_cart/uc_cart.info")) {
1696
- $str = file_get_contents(M1_STORE_BASE_DIR . "/modules/ubercart/uc_cart/uc_cart.info");
1697
- if (preg_match('/version\s+=\s+".+-(.+)"/', $str, $match) != 0) {
1698
- $this->cartVars['dbVersion'] = $match[1];
1699
- unset($match);
1700
- }
1701
  }
1702
 
1703
- $this->categoriesImagesDir = $this->imagesDir;
1704
- $this->productsImagesDir = $this->imagesDir;
1705
- $this->manufacturersImagesDir = $this->imagesDir;
1706
- }
 
 
 
 
 
 
 
1707
 
1708
  }
1709
 
1710
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1711
 
1712
  /**
1713
  * Class M1_Config_Adapter_Cubecart3
@@ -1715,23 +1744,23 @@ class M1_Config_Adapter_Ubercart extends M1_Config_Adapter
1715
  class M1_Config_Adapter_Cubecart3 extends M1_Config_Adapter
1716
  {
1717
 
1718
- /**
1719
- * M1_Config_Adapter_Cubecart3 constructor.
1720
- */
1721
- public function __construct()
1722
- {
1723
- include_once(M1_STORE_BASE_DIR . 'includes/global.inc.php');
1724
-
1725
- $this->setHostPort($glob['dbhost']);
1726
- $this->dbname = $glob['dbdatabase'];
1727
- $this->username = $glob['dbusername'];
1728
- $this->password = $glob['dbpassword'];
1729
-
1730
- $this->imagesDir = 'images/uploads';
1731
- $this->categoriesImagesDir = $this->imagesDir;
1732
- $this->productsImagesDir = $this->imagesDir;
1733
- $this->manufacturersImagesDir = $this->imagesDir;
1734
- }
1735
  }
1736
 
1737
  /**
@@ -1740,35 +1769,35 @@ class M1_Config_Adapter_Cubecart3 extends M1_Config_Adapter
1740
  class M1_Config_Adapter_JooCart extends M1_Config_Adapter
1741
  {
1742
 
1743
- /**
1744
- * M1_Config_Adapter_JooCart constructor.
1745
- */
1746
- public function __construct()
1747
- {
1748
- require_once M1_STORE_BASE_DIR . "/configuration.php";
1749
 
1750
- if (class_exists("JConfig")) {
1751
 
1752
- $jconfig = new JConfig();
1753
 
1754
- $this->setHostPort($jconfig->host);
1755
- $this->dbname = $jconfig->db;
1756
- $this->username = $jconfig->user;
1757
- $this->password = $jconfig->password;
1758
 
1759
- } else {
1760
 
1761
- $this->setHostPort($mosConfig_host);
1762
- $this->dbname = $mosConfig_db;
1763
- $this->username = $mosConfig_user;
1764
- $this->password = $mosConfig_password;
1765
- }
1766
 
1767
- $this->imagesDir = "components/com_opencart/image/";
1768
- $this->categoriesImagesDir = $this->imagesDir;
1769
- $this->productsImagesDir = $this->imagesDir;
1770
- $this->manufacturersImagesDir = $this->imagesDir;
1771
- }
1772
 
1773
  }
1774
 
@@ -1779,122 +1808,121 @@ class M1_Config_Adapter_JooCart extends M1_Config_Adapter
1779
  class M1_Config_Adapter_Prestashop11 extends M1_Config_Adapter
1780
  {
1781
 
1782
- /**
1783
- * M1_Config_Adapter_Prestashop11 constructor.
1784
- */
1785
- public function __construct()
1786
- {
1787
- $confFileOne = file_get_contents(M1_STORE_BASE_DIR . "/config/settings.inc.php");
1788
- $confFileTwo = file_get_contents(M1_STORE_BASE_DIR . "/config/config.inc.php");
1789
-
1790
- $filesLines = array_merge(explode("\n", $confFileOne), explode("\n", $confFileTwo));
1791
-
1792
- $execute = '$currentDir = \'\';';
1793
-
1794
- $isComment = false;
1795
- foreach ($filesLines as $line) {
1796
- $startComment = preg_match("/^(\/\*)/", $line);
1797
- $endComment = preg_match("/(\*\/)$/", $line);
1798
-
1799
- if ($isComment) {
1800
- if ($endComment) {
1801
- $isComment = false;
1802
- }
1803
- continue;
1804
- } elseif ($startComment) {
1805
- $isComment = true;
1806
- if ($endComment) {
1807
- $isComment = false;
1808
- }
1809
- continue;
1810
- }
1811
 
1812
- if (preg_match("/^(\s*)define\(/i", $line)) {
1813
- if ((strpos($line, '_DB_') !== false) || (strpos($line, '_PS_IMG_DIR_') !== false)
1814
- || (strpos($line, '_PS_VERSION_') !== false)
1815
- ) {
1816
- $execute .= " " . $line;
 
 
1817
  }
1818
- }
1819
- }
1820
 
1821
- define( '_PS_ROOT_DIR_', M1_STORE_BASE_DIR );
1822
- eval($execute);
1823
 
1824
- $this->setHostPort(_DB_SERVER_);
1825
- $this->dbname = _DB_NAME_;
1826
- $this->username = _DB_USER_;
1827
- $this->password = _DB_PASSWD_;
1828
 
1829
- if (defined('_PS_IMG_DIR_') && defined('_PS_ROOT_DIR_')) {
1830
 
1831
- preg_match("/(\/\w+\/)$/i", _PS_IMG_DIR_, $m);
1832
- $this->imagesDir = $m[1];
1833
 
1834
- } else {
1835
- $this->imagesDir = "/img/";
1836
- }
1837
 
1838
- $this->categoriesImagesDir = $this->imagesDir;
1839
- $this->productsImagesDir = $this->imagesDir;
1840
- $this->manufacturersImagesDir = $this->imagesDir;
1841
 
1842
- if (defined('_PS_VERSION_')) {
1843
- $this->cartVars['dbVersion'] = _PS_VERSION_;
 
1844
  }
1845
- }
1846
 
1847
  }
1848
 
1849
 
1850
-
1851
  /**
1852
  * Class M1_Config_Adapter_Ubercart3
1853
  */
1854
  class M1_Config_Adapter_Ubercart3 extends M1_Config_Adapter
1855
  {
1856
 
1857
- /**
1858
- * M1_Config_Adapter_Ubercart3 constructor.
1859
- */
1860
- public function __construct()
1861
- {
1862
- @include_once M1_STORE_BASE_DIR . "sites/default/settings.php";
1863
-
1864
- $url = $databases['default']['default'];
 
 
 
 
 
 
 
 
1865
 
1866
- $url['username'] = urldecode($url['username']);
1867
- $url['password'] = isset($url['password']) ? urldecode($url['password']) : '';
1868
- $url['host'] = urldecode($url['host']);
1869
- $url['database'] = urldecode($url['database']);
1870
- if (isset($url['port'])) {
1871
- $url['host'] = $url['host'] .':'. $url['port'];
1872
- }
1873
 
1874
- $this->setHostPort( $url['host'] );
1875
- $this->dbname = ltrim( $url['database'], '/' );
1876
- $this->username = $url['username'];
1877
- $this->password = $url['password'];
1878
 
1879
- $this->imagesDir = "/sites/default/files/";
1880
- if (!file_exists( M1_STORE_BASE_DIR . $this->imagesDir )) {
1881
- $this->imagesDir = "/files";
1882
- }
 
 
 
 
1883
 
1884
- $fileInfo = M1_STORE_BASE_DIR . "/modules/ubercart/uc_cart/uc_cart.info";
1885
- if (file_exists( $fileInfo )) {
1886
- $str = file_get_contents( $fileInfo );
1887
- if (preg_match('/version\s+=\s+".+-(.+)"/', $str, $match) != 0) {
1888
- $this->cartVars['dbVersion'] = $match[1];
1889
- unset($match);
1890
- }
1891
  }
1892
 
1893
- $this->categoriesImagesDir = $this->imagesDir;
1894
- $this->productsImagesDir = $this->imagesDir;
1895
- $this->manufacturersImagesDir = $this->imagesDir;
1896
- }
1897
-
1898
  }
1899
 
1900
 
@@ -1904,39 +1932,39 @@ class M1_Config_Adapter_Ubercart3 extends M1_Config_Adapter
1904
  class M1_Config_Adapter_XCart extends M1_Config_Adapter
1905
  {
1906
 
1907
- /**
1908
- * M1_Config_Adapter_XCart constructor.
1909
- */
1910
- public function __construct()
1911
- {
1912
- define('XCART_START', 1);
1913
-
1914
- $config = file_get_contents(M1_STORE_BASE_DIR . "config.php");
1915
-
1916
- try {
1917
- preg_match('/\$sql_host.+\'(.+)\';/', $config, $match);
1918
- $this->setHostPort($match[1]);
1919
- preg_match('/\$sql_user.+\'(.+)\';/', $config, $match);
1920
- $this->username = $match[1];
1921
- preg_match('/\$sql_db.+\'(.+)\';/', $config, $match);
1922
- $this->dbname = $match[1];
1923
- preg_match('/\$sql_password.+\'(.*)\';/', $config, $match);
1924
- $this->password = $match[1];
1925
- } catch (Exception $e) {
1926
- die('ERROR_READING_STORE_CONFIG_FILE');
1927
- }
1928
-
1929
- $this->imagesDir = 'images/'; // xcart starting from 4.1.x hardcodes images location
1930
- $this->categoriesImagesDir = $this->imagesDir;
1931
- $this->productsImagesDir = $this->imagesDir;
1932
- $this->manufacturersImagesDir = $this->imagesDir;
1933
-
1934
- if (file_exists(M1_STORE_BASE_DIR . "VERSION")) {
1935
- $version = file_get_contents(M1_STORE_BASE_DIR . "VERSION");
1936
- $this->cartVars['dbVersion'] = preg_replace('/(Version| |\\n)/', '', $version);
1937
- }
1938
-
1939
- }
1940
  }
1941
 
1942
  /**
@@ -1945,101 +1973,70 @@ class M1_Config_Adapter_XCart extends M1_Config_Adapter
1945
  class M1_Config_Adapter_Cubecart extends M1_Config_Adapter
1946
  {
1947
 
1948
- /**
1949
- * M1_Config_Adapter_Cubecart constructor.
1950
- */
1951
- public function __construct()
1952
- {
1953
- include_once(M1_STORE_BASE_DIR . 'includes/global.inc.php');
1954
-
1955
- $this->setHostPort($glob['dbhost']);
1956
- $this->dbname = $glob['dbdatabase'];
1957
- $this->username = $glob['dbusername'];
1958
- $this->password = $glob['dbpassword'];
1959
-
1960
- $this->imagesDir = 'images';
1961
- $this->categoriesImagesDir = $this->imagesDir;
1962
- $this->productsImagesDir = $this->imagesDir;
1963
- $this->manufacturersImagesDir = $this->imagesDir;
1964
- $dirHandle = opendir(M1_STORE_BASE_DIR . 'language/');
1965
- //settings for cube 5
1966
- $languages = array();
1967
- while ($dirEntry = readdir($dirHandle)) {
1968
- $info = pathinfo($dirEntry);
1969
- $xmlflag = false;
1970
-
1971
- if (isset($info['extension'])) {
1972
- $xmlflag = strtoupper($info['extension']) != "XML" ? true : false;
1973
- }
1974
- if (is_dir(M1_STORE_BASE_DIR . 'language/' . $dirEntry) || $dirEntry == '.' || $dirEntry == '..' || strpos($dirEntry, "_") !== false || $xmlflag) {
1975
- continue;
1976
- }
1977
- $configXml = simplexml_load_file(M1_STORE_BASE_DIR . 'language/'.$dirEntry);
1978
- if ($configXml->info->title) {
1979
- $lang['name'] = (string)$configXml->info->title;
1980
- $lang['code'] = substr((string)$configXml->info->code, 0, 2);
1981
- $lang['locale'] = substr((string)$configXml->info->code, 0, 2);
1982
- $lang['currency'] = (string)$configXml->info->default_currency;
1983
- $lang['fileName'] = str_replace(".xml", "", $dirEntry);
1984
- $languages[] = $lang;
1985
- }
1986
- }
1987
- if (!empty($languages)) {
1988
- $this->cartVars['languages'] = $languages;
1989
- }
1990
- if (file_exists(M1_STORE_BASE_DIR . 'ini.inc.php')) {
1991
- $conf = file_get_contents (M1_STORE_BASE_DIR . 'ini.inc.php');
1992
- preg_match("/ini\['ver'\].*/", $conf, $match);
1993
- if (isset($match[0]) && !empty($match[0])) {
1994
- preg_match("/\d.*/", $match[0], $project);
1995
- if (isset($project[0]) && !empty($project[0])) {
1996
- $version = $project[0];
1997
- $version = str_replace(array(" ","-","_","'",");",";",")"), "", $version);
1998
- if ($version != '') {
1999
- $this->cartVars['dbVersion'] = strtolower($version);
2000
- }
2001
- }
2002
- } else {
2003
- preg_match("/define\('CC_VERSION.*/", $conf, $match);
2004
- if (isset($match[0]) && !empty($match[0])) {
2005
- preg_match("/\d.*/", $match[0], $project);
2006
- if (isset($project[0]) && !empty($project[0])) {
2007
- $version = $project[0];
2008
- $version = str_replace(array(" ","-","_","'",");",";",")"), "", $version);
2009
- if ($version != '') {
2010
- $this->cartVars['dbVersion'] = strtolower($version);
2011
  }
2012
- }
2013
- }
2014
-
2015
- }
2016
- } elseif (file_exists(M1_STORE_BASE_DIR . "includes" . DIRECTORY_SEPARATOR . 'ini.inc.php')) {
2017
- $conf = file_get_contents (M1_STORE_BASE_DIR . "includes" . DIRECTORY_SEPARATOR . 'ini.inc.php');
2018
- preg_match("/ini\['ver'\].*/", $conf, $match);
2019
- if (isset($match[0]) && !empty($match[0])) {
2020
- preg_match("/\d.*/", $match[0], $project);
2021
- if (isset($project[0]) && !empty($project[0])) {
2022
- $version = $project[0];
2023
- $version = str_replace(array(" ","-","_","'",");",";",")"), "", $version);
2024
- if ($version != '') {
2025
- $this->cartVars['dbVersion'] = strtolower($version);
2026
- }
2027
- }
2028
- } else {
2029
- preg_match("/define\('CC_VERSION.*/", $conf, $match);
2030
- if (isset($match[0]) && !empty($match[0])) {
2031
- preg_match("/\d.*/", $match[0], $project);
2032
- if (isset($project[0]) && !empty($project[0])) {
2033
- $version = $project[0];
2034
- $version = str_replace(array(" ","-","_","'",");",";",")"), "", $version);
2035
- if ($version != '') {
2036
- $this->cartVars['dbVersion'] = strtolower($version);
 
 
 
 
 
 
 
 
 
 
2037
  }
2038
- }
2039
  }
2040
- }
2041
  }
2042
- }
2043
  }
2044
 
2045
  /**
@@ -2048,33 +2045,33 @@ class M1_Config_Adapter_Cubecart extends M1_Config_Adapter
2048
  class M1_Config_Adapter_WebAsyst extends M1_Config_Adapter
2049
  {
2050
 
2051
- /**
2052
- * M1_Config_Adapter_WebAsyst constructor.
2053
- */
2054
- public function __construct()
2055
- {
2056
- $config = simplexml_load_file(M1_STORE_BASE_DIR . 'kernel/wbs.xml');
2057
 
2058
- $dbKey = (string)$config->FRONTEND['dbkey'];
2059
 
2060
- $config = simplexml_load_file(M1_STORE_BASE_DIR . 'dblist'. '/' . strtoupper($dbKey) . '.xml');
2061
 
2062
- $host = (string)$config->DBSETTINGS['SQLSERVER'];
2063
 
2064
- $this->setHostPort($host);
2065
- $this->dbname = (string)$config->DBSETTINGS['DB_NAME'];
2066
- $this->username = (string)$config->DBSETTINGS['DB_USER'];
2067
- $this->password = (string)$config->DBSETTINGS['DB_PASSWORD'];
2068
 
2069
- $this->imagesDir = 'published/publicdata/'.strtoupper($dbKey).'/attachments/SC/products_pictures';
2070
- $this->categoriesImagesDir = $this->imagesDir;
2071
- $this->productsImagesDir = $this->imagesDir;
2072
- $this->manufacturersImagesDir = $this->imagesDir;
2073
 
2074
- if (isset($config->VERSIONS['SYSTEM'])) {
2075
- $this->cartVars['dbVersion'] = (string)$config->VERSIONS['SYSTEM'];
 
2076
  }
2077
- }
2078
 
2079
  }
2080
 
@@ -2084,28 +2081,28 @@ class M1_Config_Adapter_WebAsyst extends M1_Config_Adapter
2084
  class M1_Config_Adapter_Squirrelcart242 extends M1_Config_Adapter
2085
  {
2086
 
2087
- /**
2088
- * M1_Config_Adapter_Squirrelcart242 constructor.
2089
- */
2090
- public function __construct()
2091
- {
2092
- include_once(M1_STORE_BASE_DIR . 'squirrelcart/config.php');
2093
-
2094
- $this->setHostPort($sql_host);
2095
- $this->dbname = $db;
2096
- $this->username = $sql_username;
2097
- $this->password = $sql_password;
2098
-
2099
- $this->imagesDir = $img_path;
2100
- $this->categoriesImagesDir = $img_path . "/categories";
2101
- $this->productsImagesDir = $img_path . "/products";
2102
- $this->manufacturersImagesDir = $img_path;
2103
-
2104
- $version = $this->getCartVersionFromDb("DB_Version", "Store_Information", "record_number = 1");
2105
- if ($version != '' ) {
2106
- $this->cartVars['dbVersion'] = $version;
 
2107
  }
2108
- }
2109
  }
2110
 
2111
  /**
@@ -2114,106 +2111,104 @@ class M1_Config_Adapter_Squirrelcart242 extends M1_Config_Adapter
2114
  class M1_Config_Adapter_Opencart14 extends M1_Config_Adapter
2115
  {
2116
 
2117
- /**
2118
- * M1_Config_Adapter_Opencart14 constructor.
2119
- */
2120
- public function __construct()
2121
- {
2122
- include_once (M1_STORE_BASE_DIR . "/config.php");
2123
 
2124
- if (defined('DB_HOST')) {
2125
- $this->setHostPort(DB_HOST);
2126
- } else {
2127
- $this->setHostPort(DB_HOSTNAME);
2128
- }
2129
 
2130
- if (defined('DB_USER')) {
2131
- $this->username = DB_USER;
2132
- } else {
2133
- $this->username = DB_USERNAME;
2134
- }
2135
 
2136
- $this->password = DB_PASSWORD;
2137
 
2138
- if (defined('DB_NAME')) {
2139
- $this->dbname = DB_NAME;
2140
- } else {
2141
- $this->dbname = DB_DATABASE;
2142
- }
2143
 
2144
- $indexFileContent = '';
2145
- $startupFileContent = '';
2146
 
2147
- if (file_exists(M1_STORE_BASE_DIR . "/index.php")) {
2148
- $indexFileContent = file_get_contents(M1_STORE_BASE_DIR . "/index.php");
2149
- }
2150
 
2151
- if (file_exists(M1_STORE_BASE_DIR . "/system/startup.php")) {
2152
- $startupFileContent = file_get_contents(M1_STORE_BASE_DIR . "/system/startup.php");
2153
- }
2154
 
2155
- if (preg_match("/define\('\VERSION\'\, \'(.+)\'\)/", $indexFileContent, $match) == 0 ) {
2156
- preg_match("/define\('\VERSION\'\, \'(.+)\'\)/", $startupFileContent, $match);
2157
- }
2158
 
2159
- if (count($match) > 0) {
2160
- $this->cartVars['dbVersion'] = $match[1];
2161
- unset($match);
2162
- }
2163
 
2164
- $this->imagesDir = "/image/";
2165
- $this->categoriesImagesDir = $this->imagesDir;
2166
- $this->productsImagesDir = $this->imagesDir;
2167
- $this->manufacturersImagesDir = $this->imagesDir;
2168
 
2169
- }
2170
 
2171
  }
2172
 
2173
 
2174
-
2175
  /**
2176
  * Class M1_Config_Adapter_Litecommerce
2177
  */
2178
  class M1_Config_Adapter_Litecommerce extends M1_Config_Adapter
2179
  {
2180
 
2181
- /**
2182
- * M1_Config_Adapter_Litecommerce constructor.
2183
- */
2184
- public function __construct()
2185
- {
2186
- if ((file_exists(M1_STORE_BASE_DIR .'/etc/config.php'))) {
2187
- $file = M1_STORE_BASE_DIR .'/etc/config.php';
2188
- $this->imagesDir = "/images";
2189
- $this->categoriesImagesDir = $this->imagesDir."/category";
2190
- $this->productsImagesDir = $this->imagesDir."/product";
2191
- $this->manufacturersImagesDir = $this->imagesDir;
2192
- } elseif (file_exists(M1_STORE_BASE_DIR .'/modules/lc_connector/litecommerce/etc/config.php')) {
2193
- $file = M1_STORE_BASE_DIR .'/modules/lc_connector/litecommerce/etc/config.php';
2194
- $this->imagesDir = "/modules/lc_connector/litecommerce/images";
2195
- $this->categoriesImagesDir = $this->imagesDir."/category";
2196
- $this->productsImagesDir = $this->imagesDir."/product";
2197
- $this->manufacturersImagesDir = $this->imagesDir;
2198
- }
2199
-
2200
- $settings = parse_ini_file($file, true);
2201
- $settings = $settings['database_details'];
2202
- $this->host = $settings['hostspec'];
2203
- $this->setHostPort($settings['hostspec']);
2204
- $this->username = $settings['username'];
2205
- $this->password = $settings['password'];
2206
- $this->dbname = $settings['database'];
2207
- $this->tblPrefix = $settings['table_prefix'];
2208
-
2209
- $version = $this->getCartVersionFromDb("value", "config", "name = 'version'");
2210
- if ($version != '') {
2211
- $this->cartVars['dbVersion'] = $version;
2212
- }
2213
- }
2214
 
2215
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
2216
 
 
2217
 
2218
 
2219
  /**
@@ -2222,45 +2217,44 @@ class M1_Config_Adapter_Litecommerce extends M1_Config_Adapter
2222
  class M1_Config_Adapter_Oxid extends M1_Config_Adapter
2223
  {
2224
 
2225
- /**
2226
- * M1_Config_Adapter_Oxid constructor.
2227
- */
2228
- public function __construct()
2229
- {
2230
- //@include_once M1_STORE_BASE_DIR . "config.inc.php";
2231
- $config = file_get_contents(M1_STORE_BASE_DIR . "config.inc.php");
2232
- try {
2233
- preg_match("/dbName(.+)?=(.+)?\'(.+)\';/", $config, $match);
2234
- $this->dbname = $match[3];
2235
- preg_match("/dbUser(.+)?=(.+)?\'(.+)\';/", $config, $match);
2236
- $this->username = $match[3];
2237
- preg_match("/dbPwd(.+)?=(.+)?\'(.+)\';/", $config, $match);
2238
- $this->password = isset($match[3]) ? $match[3] : '';
2239
- preg_match("/dbHost(.+)?=(.+)?\'(.*)\';/", $config, $match);
2240
- $this->setHostPort($match[3]);
2241
- } catch (Exception $e) {
2242
- die('ERROR_READING_STORE_CONFIG_FILE');
2243
- }
2244
-
2245
- //check about last slash
2246
- $this->imagesDir = "out/pictures/";
2247
- $this->categoriesImagesDir = $this->imagesDir;
2248
- $this->productsImagesDir = $this->imagesDir;
2249
- $this->manufacturersImagesDir = $this->imagesDir;
2250
-
2251
- //add key for decoding config values in oxid db
2252
- //check slash
2253
- $keyConfigFile = file_get_contents(M1_STORE_BASE_DIR . '/core/oxconfk.php');
2254
- preg_match("/sConfigKey(.+)?=(.+)?\"(.+)?\";/", $keyConfigFile, $match);
2255
- $this->cartVars['sConfigKey'] = $match[3];
2256
- $version = $this->getCartVersionFromDb("OXVERSION", "oxshops", "OXACTIVE=1 LIMIT 1" );
2257
- if ($version != '') {
2258
- $this->cartVars['dbVersion'] = $version;
2259
- }
2260
- }
2261
 
2262
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2263
 
 
2264
 
2265
 
2266
  /**
@@ -2269,39 +2263,39 @@ class M1_Config_Adapter_Oxid extends M1_Config_Adapter
2269
  class M1_Config_Adapter_XtcommerceVeyton extends M1_Config_Adapter
2270
  {
2271
 
2272
- /**
2273
- * M1_Config_Adapter_XtcommerceVeyton constructor.
2274
- */
2275
- public function __construct()
2276
- {
2277
- define('_VALID_CALL','TRUE');
2278
- define('_SRV_WEBROOT','TRUE');
2279
- require_once M1_STORE_BASE_DIR
2280
- . 'conf'
2281
- . DIRECTORY_SEPARATOR
2282
- . 'config.php';
2283
-
2284
- require_once M1_STORE_BASE_DIR
2285
- . 'conf'
2286
- . DIRECTORY_SEPARATOR
2287
- . 'paths.php';
2288
-
2289
- $this->setHostPort(_SYSTEM_DATABASE_HOST);
2290
- $this->dbname = _SYSTEM_DATABASE_DATABASE;
2291
- $this->username = _SYSTEM_DATABASE_USER;
2292
- $this->password = _SYSTEM_DATABASE_PWD;
2293
- $this->imagesDir = _SRV_WEB_IMAGES;
2294
- $this->tblPrefix = DB_PREFIX . "_";
2295
-
2296
- $version = $this->getCartVersionFromDb("config_value", "config", "config_key = '_SYSTEM_VERSION'");
2297
- if ($version != '') {
2298
- $this->cartVars['dbVersion'] = $version;
2299
- }
2300
-
2301
- $this->categoriesImagesDir = $this->imagesDir;
2302
- $this->productsImagesDir = $this->imagesDir;
2303
- $this->manufacturersImagesDir = $this->imagesDir;
2304
- }
2305
 
2306
  }
2307
 
@@ -2312,47 +2306,47 @@ class M1_Config_Adapter_XtcommerceVeyton extends M1_Config_Adapter
2312
  class M1_Config_Adapter_SSPremium extends M1_Config_Adapter
2313
  {
2314
 
2315
- /**
2316
- * M1_Config_Adapter_SSPremium constructor.
2317
- */
2318
- public function __construct()
2319
- {
2320
- if (file_exists(M1_STORE_BASE_DIR . 'cfg/connect.inc.php')) {
2321
- $config = file_get_contents(M1_STORE_BASE_DIR . 'cfg/connect.inc.php');
2322
- preg_match("/define\(\'DB_NAME\', \'(.+)\'\);/", $config, $match);
2323
- $this->dbname = $match[1];
2324
- preg_match("/define\(\'DB_USER\', \'(.+)\'\);/", $config, $match);
2325
- $this->username = $match[1];
2326
- preg_match("/define\(\'DB_PASS\', \'(.*)\'\);/", $config, $match);
2327
- $this->password = $match[1];
2328
- preg_match("/define\(\'DB_HOST\', \'(.+)\'\);/", $config, $match);
2329
- $this->setHostPort( $match[1] );
2330
-
2331
- $this->imagesDir = "products_pictures/";
2332
- $this->categoriesImagesDir = $this->imagesDir;
2333
- $this->productsImagesDir = $this->imagesDir;
2334
- $this->manufacturersImagesDir = $this->imagesDir;
2335
-
2336
- $version = $this->getCartVersionFromDb("value", "SS_system", "varName = 'version_number'");
2337
- if ($version != '') {
2338
- $this->cartVars['dbVersion'] = $version;
2339
- }
2340
- } else {
2341
- $config = include M1_STORE_BASE_DIR . "wa-config/db.php";
2342
- $this->dbname = $config['default']['database'];
2343
- $this->username = $config['default']['user'];
2344
- $this->password = $config['default']['password'];
2345
- $this->setHostPort($config['default']['host']);
 
 
 
 
 
 
 
2346
 
2347
- $this->imagesDir = "products_pictures/";
2348
- $this->categoriesImagesDir = $this->imagesDir;
2349
- $this->productsImagesDir = $this->imagesDir;
2350
- $this->manufacturersImagesDir = $this->imagesDir;
2351
- $this->cartVars['dbVersion'] = '5.0';
2352
  }
2353
 
2354
- }
2355
-
2356
  }
2357
 
2358
  /**
@@ -2361,50 +2355,50 @@ class M1_Config_Adapter_SSPremium extends M1_Config_Adapter
2361
  class M1_Config_Adapter_Virtuemart113 extends M1_Config_Adapter
2362
  {
2363
 
2364
- /**
2365
- * M1_Config_Adapter_Virtuemart113 constructor.
2366
- */
2367
- public function __construct()
2368
- {
2369
- require_once M1_STORE_BASE_DIR . "/configuration.php";
2370
 
2371
- if (class_exists("JConfig")) {
2372
 
2373
- $jconfig = new JConfig();
2374
 
2375
- $this->setHostPort($jconfig->host);
2376
- $this->dbname = $jconfig->db;
2377
- $this->username = $jconfig->user;
2378
- $this->password = $jconfig->password;
2379
 
2380
- } else {
2381
 
2382
- $this->setHostPort($mosConfig_host);
2383
- $this->dbname = $mosConfig_db;
2384
- $this->username = $mosConfig_user;
2385
- $this->password = $mosConfig_password;
2386
- }
2387
 
2388
- if (file_exists(M1_STORE_BASE_DIR . "/administrator/components/com_virtuemart/version.php")) {
2389
- $ver = file_get_contents(M1_STORE_BASE_DIR . "/administrator/components/com_virtuemart/version.php");
2390
- if (preg_match('/\$RELEASE.+\'(.+)\'/', $ver, $match) != 0) {
2391
- $this->cartVars['dbVersion'] = $match[1];
2392
- unset($match);
2393
- }
2394
- }
2395
 
2396
- $this->imagesDir = "components/com_virtuemart/shop_image";
2397
- $this->categoriesImagesDir = $this->imagesDir;
2398
- $this->productsImagesDir = $this->imagesDir;
2399
- $this->manufacturersImagesDir = $this->imagesDir;
2400
 
2401
- if (is_dir( M1_STORE_BASE_DIR . 'images/stories/virtuemart/product')) {
2402
- $this->imagesDir = 'images/stories/virtuemart';
2403
- $this->productsImagesDir = $this->imagesDir . '/product';
2404
- $this->categoriesImagesDir = $this->imagesDir . '/category';
2405
- $this->manufacturersImagesDir = $this->imagesDir . '/manufacturer';
 
2406
  }
2407
- }
2408
 
2409
  }
2410
 
@@ -2415,41 +2409,41 @@ class M1_Config_Adapter_Virtuemart113 extends M1_Config_Adapter
2415
  class M1_Config_Adapter_Hhgmultistore extends M1_Config_Adapter
2416
  {
2417
 
2418
- /**
2419
- * M1_Config_Adapter_Hhgmultistore constructor.
2420
- */
2421
- public function __construct()
2422
- {
2423
- define('SITE_PATH', '');
2424
- define('WEB_PATH', '');
2425
- require_once M1_STORE_BASE_DIR . "core/config/configure.php";
2426
- require_once M1_STORE_BASE_DIR . "core/config/paths.php";
2427
-
2428
- $baseDir = "/store_files/1/";
2429
- $this->imagesDir = $baseDir . DIR_WS_IMAGES;
2430
-
2431
- $this->categoriesImagesDir = $baseDir . DIR_WS_CATEGORIE_IMAGES;
2432
- $this->productsImagesDirs['info'] = $baseDir . DIR_WS_PRODUCT_INFO_IMAGES;
2433
- $this->productsImagesDirs['org'] = $baseDir . DIR_WS_PRODUCT_ORG_IMAGES;
2434
- $this->productsImagesDirs['thumb'] = $baseDir . DIR_WS_PRODUCT_THUMBNAIL_IMAGES;
2435
- $this->productsImagesDirs['popup'] = $baseDir . DIR_WS_PRODUCT_POPUP_IMAGES;
2436
-
2437
- $this->manufacturersImagesDirs['img'] = $baseDir . DIR_WS_MANUFACTURERS_IMAGES;
2438
- $this->manufacturersImagesDirs['org'] = $baseDir . DIR_WS_MANUFACTURERS_ORG_IMAGES;
2439
-
2440
- $this->host = DB_SERVER;
2441
- $this->username = DB_SERVER_USERNAME;
2442
- $this->password = DB_SERVER_PASSWORD;
2443
- $this->dbname = DB_DATABASE;
2444
-
2445
- if (file_exists(M1_STORE_BASE_DIR . "/core/config/conf.hhg_startup.php")) {
2446
- $ver = file_get_contents(M1_STORE_BASE_DIR . "/core/config/conf.hhg_startup.php");
2447
- if (preg_match('/PROJECT_VERSION.+\((.+)\)\'\)/', $ver, $match) != 0) {
2448
- $this->cartVars['dbVersion'] = $match[1];
2449
- unset($match);
2450
- }
2451
- }
2452
- }
2453
 
2454
  }
2455
 
@@ -2460,161 +2454,174 @@ class M1_Config_Adapter_Hhgmultistore extends M1_Config_Adapter
2460
  class M1_Config_Adapter_Wordpress extends M1_Config_Adapter
2461
  {
2462
 
2463
- /**
2464
- * M1_Config_Adapter_Wordpress constructor.
2465
- */
2466
- public function __construct()
2467
- {
2468
- if (file_exists(M1_STORE_BASE_DIR . 'wp-config.php')) {
2469
- $config = file_get_contents(M1_STORE_BASE_DIR . 'wp-config.php');
2470
- } else {
2471
- $config = file_get_contents(dirname(M1_STORE_BASE_DIR) . '/wp-config.php');
2472
- }
2473
-
2474
- preg_match('/define\s*\(\s*[\'"]DB_NAME[\'"],\s*[\'"](.+)[\'"]\s*\)\s*;/', $config, $dbnameMatch);
2475
- preg_match('/define\s*\(\s*[\'"]DB_USER[\'"],\s*[\'"](.+)[\'"]\s*\)\s*;/', $config, $usernameMatch);
2476
- preg_match('/define\s*\(\s*[\'"]DB_PASS(WORD)?[\'"],\s*[\'"](.*)[\'"]\s*\)\s*;/', $config, $passwordMatch);
2477
- preg_match('/define\s*\(\s*[\'"]DB_HOST[\'"],\s*[\'"](.+)[\'"]\s*\)\s*;/', $config, $hostMatch);
2478
- preg_match('/\$table_prefix\s*=\s*\'(.*)\'\s*;/', $config, $tblPrefixMatch);
2479
- if (preg_match('/define\s*\(\s*[\'"]UPLOADS[\'"],\s*[\'"](.+)[\'"]\s*\)\s*;/', $config, $match) && isset($match[1])) {
2480
- $this->imagesDir = preg_replace('/\'\.\'/', '', $match[1]);
2481
- } else {
2482
- $this->imagesDir = 'wp-content' . DIRECTORY_SEPARATOR . 'uploads';
2483
- }
2484
-
2485
- if (isset($dbnameMatch[1]) && isset($usernameMatch[1])
2486
- && isset($passwordMatch[2]) && isset($hostMatch[1]) && isset($tblPrefixMatch[1])) {
2487
- $this->dbname = $dbnameMatch[1];
2488
- $this->username = $usernameMatch[1];
2489
- $this->password = $passwordMatch[2];
2490
- $this->setHostPort($hostMatch[1]);
2491
- $this->tblPrefix = $tblPrefixMatch[1];
2492
- } elseif (!$this->_tryLoadConfigs()) {
2493
- die('ERROR_READING_STORE_CONFIG_FILE');
2494
- }
2495
-
2496
- $cartPlugins = $this->getCartVersionFromDb("option_value", "options", "option_name = 'active_plugins'");
2497
- if ($cartPlugins) {
2498
- $cartPlugins = unserialize($cartPlugins);
2499
- foreach ($cartPlugins as $plugin) {
2500
- switch ($plugin) {
2501
- case 'woocommerce/woocommerce.php':
2502
- $this->_setWoocommerceData();
2503
- return;
2504
- case 'wp-e-commerce/wp-shopping-cart.php':
2505
- $this->_setWpecommerceData();
2506
- return;
2507
  }
2508
- }
2509
- }
2510
-
2511
- die ("CART_PLUGIN_IS_NOT_DETECTED");
2512
- }
2513
-
2514
- protected function _setWoocommerceData()
2515
- {
2516
- $version = $this->getCartVersionFromDb("option_value", "options", "option_name = 'woocommerce_db_version'");
2517
-
2518
- if ($version != '') {
2519
- $this->cartVars['dbVersion'] = $version;
2520
- }
2521
-
2522
- $this->cartVars['categoriesDirRelative'] = 'images/categories/';
2523
- $this->cartVars['productsDirRelative'] = 'images/products/';
2524
- $this->imagesDir = "wp-content/uploads/images/";
2525
- $this->categoriesImagesDir = $this->imagesDir . 'categories/';
2526
- $this->productsImagesDir = $this->imagesDir . 'products/';
2527
- $this->manufacturersImagesDir = $this->imagesDir;
2528
-
2529
- }
2530
-
2531
- protected function _setWpecommerceData()
2532
- {
2533
- $version = $this->getCartVersionFromDb("option_value", "options", "option_name = 'wpsc_version'");
2534
- if ($version != '') {
2535
- $this->cartVars['dbVersion'] = $version;
2536
- } else {
2537
- $filePath = M1_STORE_BASE_DIR . "wp-content" . DIRECTORY_SEPARATOR . "plugins" . DIRECTORY_SEPARATOR
2538
- . "wp-shopping-cart" . DIRECTORY_SEPARATOR . "wp-shopping-cart.php";
2539
- if (file_exists($filePath)) {
2540
- $conf = file_get_contents ($filePath);
2541
- preg_match("/define\('WPSC_VERSION.*/", $conf, $match);
2542
- if (isset($match[0]) && !empty($match[0])) {
2543
- preg_match("/\d.*/", $match[0], $project);
2544
- if (isset($project[0]) && !empty($project[0])) {
2545
- $version = $project[0];
2546
- $version = str_replace(array(" ","-","_","'",");",")",";"), "", $version);
2547
- if ($version != '') {
2548
- $this->cartVars['dbVersion'] = strtolower($version);
 
 
 
 
 
 
 
 
 
 
 
 
2549
  }
2550
- }
2551
- }
2552
- }
2553
- }
2554
-
2555
- if (file_exists(M1_STORE_BASE_DIR . "wp-content/plugins/shopp/Shopp.php")
2556
- || file_exists(M1_STORE_BASE_DIR . "wp-content/plugins/wp-e-commerce/editor.php")) {
2557
- $this->imagesDir = "wp-content/uploads/wpsc/";
2558
- $this->categoriesImagesDir = $this->imagesDir.'category_images/';
2559
- $this->productsImagesDir = $this->imagesDir.'product_images/';
2560
- $this->manufacturersImagesDir = $this->imagesDir;
2561
- } elseif (file_exists(M1_STORE_BASE_DIR . "wp-content/plugins/wp-e-commerce/wp-shopping-cart.php")) {
2562
- $this->imagesDir = "wp-content/uploads/";
2563
- $this->categoriesImagesDir = $this->imagesDir."wpsc/category_images/";
2564
- $this->productsImagesDir = $this->imagesDir;
2565
- $this->manufacturersImagesDir = $this->imagesDir;
2566
- } else {
2567
- $this->imagesDir = "images/";
2568
- $this->categoriesImagesDir = $this->imagesDir;
2569
- $this->productsImagesDir = $this->imagesDir;
2570
- $this->manufacturersImagesDir = $this->imagesDir;
2571
- }
2572
- }
2573
-
2574
- protected function _tryLoadConfigs()
2575
- {
2576
- try {
2577
- if (file_exists(M1_STORE_BASE_DIR . 'wp-config.php')) {
2578
- require_once(M1_STORE_BASE_DIR . 'wp-config.php');
2579
- } else {
2580
- require_once(dirname(M1_STORE_BASE_DIR) . '/wp-config.php');
2581
- }
2582
-
2583
- if (defined('DB_NAME') && defined('DB_USER') && defined('DB_HOST')) {
2584
- $this->dbname = DB_NAME;
2585
- $this->username = DB_USER;
2586
- $this->setHostPort(DB_HOST);
2587
- } else {
2588
- return false;
2589
- }
2590
 
2591
- if (defined('DB_PASSWORD')) {
2592
- $this->password = DB_PASSWORD;
2593
- } elseif (defined('DB_PASS')) {
2594
- $this->password = DB_PASS;
2595
- } else {
2596
- return false;
2597
- }
2598
 
2599
- if (defined('WP_CONTENT_DIR')) {
2600
- $this->imagesDir = WP_CONTENT_DIR . DIRECTORY_SEPARATOR . 'uploads';
2601
- } elseif (defined('UPLOADS')) {
2602
- $this->imagesDir = UPLOADS;
2603
- } else {
2604
- $this->imagesDir = 'wp-content' . DIRECTORY_SEPARATOR . 'uploads';
2605
- }
2606
 
2607
- if (isset($table_prefix)) {
2608
- $this->tblPrefix = $table_prefix;
2609
- }
2610
- } catch (Exception $e) {
2611
- return false;
2612
  }
2613
 
2614
- return true;
2615
- }
2616
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2617
 
 
 
 
2618
 
2619
 
2620
  /**
@@ -2623,103 +2630,105 @@ class M1_Config_Adapter_Wordpress extends M1_Config_Adapter
2623
  class M1_Config_Adapter_Magento1212 extends M1_Config_Adapter
2624
  {
2625
 
2626
- /**
2627
- * M1_Config_Adapter_Magento1212 constructor.
2628
- */
2629
- public function __construct()
2630
- {
2631
- // MAGENTO 2.X
2632
- if (file_exists(M1_STORE_BASE_DIR . 'app/etc/env.php')) {
2633
- /**
2634
- * @var array
2635
- */
2636
- $config = @include(M1_STORE_BASE_DIR . 'app/etc/env.php');
2637
-
2638
- $this->cartVars['AdminUrl'] = (string)$config['backend']['frontName'];
2639
-
2640
- $db = array();
2641
- foreach ($config['db']['connection'] as $connection) {
2642
- if ($connection['active'] == 1) {
2643
- $db = $connection;
2644
- break;
2645
- }
2646
- }
2647
-
2648
- $this->setHostPort((string)$db['host']);
2649
- $this->username = (string)$db['username'];
2650
- $this->dbname = (string)$db['dbname'];
2651
- $this->password = (string)$db['password'];
2652
-
2653
- if (file_exists(M1_STORE_BASE_DIR . 'composer.json')) {
2654
- $string = file_get_contents(M1_STORE_BASE_DIR . 'composer.json');
2655
- $json = json_decode($string, true);
2656
- $this->cartVars['dbVersion'] = $json['version'];
2657
- } else {
2658
- if (file_exists(M1_STORE_BASE_DIR . 'vendor/magento/framework/AppInterface.php')) {
2659
- @include M1_STORE_BASE_DIR . 'vendor/magento/framework/AppInterface.php';
2660
-
2661
- if (defined('\Magento\Framework\AppInterface::VERSION')) {
2662
- $this->cartVars['dbVersion'] = \Magento\Framework\AppInterface::VERSION;
2663
- } else {
2664
- $this->cartVars['dbVersion'] = '2.0';
2665
- }
2666
- } else {
2667
- $this->cartVars['dbVersion'] = '2.0';
2668
- }
2669
- }
2670
 
2671
- if (isset($db['initStatements']) && $db['initStatements'] != '') {
2672
- $this->cartVars['dbCharSet'] = $db['initStatements'];
2673
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2674
 
2675
- $this->imagesDir = 'pub/media/';
2676
- $this->categoriesImagesDir = $this->imagesDir . 'catalog/category/';
2677
- $this->productsImagesDir = $this->imagesDir . 'catalog/product/';
2678
- $this->manufacturersImagesDir = $this->imagesDir;
2679
 
2680
- return;
2681
- }
 
 
2682
 
2683
- /**
2684
- * @var SimpleXMLElement
2685
- */
2686
- $config = simplexml_load_file(M1_STORE_BASE_DIR . 'app/etc/local.xml');
2687
- $statuses = simplexml_load_file(M1_STORE_BASE_DIR . 'app/code/core/Mage/Sales/etc/config.xml');
2688
 
2689
- $version = $statuses->modules->Mage_Sales->version;
 
 
 
 
2690
 
2691
- $result = array();
2692
 
2693
- if (version_compare($version, '1.4.0.25') < 0) {
2694
- $statuses = $statuses->global->sales->order->statuses;
2695
- foreach ( $statuses->children() as $status ) {
2696
- $result[$status->getName()] = (string)$status->label;
2697
- }
2698
- }
2699
 
2700
- if (file_exists(M1_STORE_BASE_DIR . "app/Mage.php")) {
2701
- $ver = file_get_contents(M1_STORE_BASE_DIR . "app/Mage.php");
2702
- if (preg_match("/getVersionInfo[^}]+\'major\' *=> *\'(\d+)\'[^}]+\'minor\' *=> *\'(\d+)\'[^}]+\'revision\' *=> *\'(\d+)\'[^}]+\'patch\' *=> *\'(\d+)\'[^}]+}/s", $ver, $match) == 1 ) {
2703
- $mageVersion = $match[1] . '.' . $match[2] . '.' . $match[3] . '.' . $match[4];
2704
- $this->cartVars['dbVersion'] = $mageVersion;
2705
- unset($match);
2706
- }
2707
- }
 
 
 
 
 
 
 
 
 
2708
 
2709
- $this->cartVars['orderStatus'] = $result;
2710
- $this->cartVars['AdminUrl'] = (string)$config->admin->routers->adminhtml->args->frontName;
2711
 
2712
- $this->setHostPort((string)$config->global->resources->default_setup->connection->host);
2713
- $this->username = (string)$config->global->resources->default_setup->connection->username;
2714
- $this->dbname = (string)$config->global->resources->default_setup->connection->dbname;
2715
- $this->password = (string)$config->global->resources->default_setup->connection->password;
2716
 
2717
- $this->imagesDir = 'media/';
2718
- $this->categoriesImagesDir = $this->imagesDir . "catalog/category/";
2719
- $this->productsImagesDir = $this->imagesDir . "catalog/product/";
2720
- $this->manufacturersImagesDir = $this->imagesDir;
2721
- @unlink(M1_STORE_BASE_DIR . 'app/etc/use_cache.ser');
2722
- }
2723
  }
2724
 
2725
  /**
@@ -2728,30 +2737,30 @@ class M1_Config_Adapter_Magento1212 extends M1_Config_Adapter
2728
  class M1_Config_Adapter_Interspire extends M1_Config_Adapter
2729
  {
2730
 
2731
- /**
2732
- * M1_Config_Adapter_Interspire constructor.
2733
- */
2734
- public function __construct()
2735
- {
2736
- require_once M1_STORE_BASE_DIR . "config/config.php";
2737
 
2738
- $this->setHostPort($GLOBALS['ISC_CFG']["dbServer"]);
2739
- $this->username = $GLOBALS['ISC_CFG']["dbUser"];
2740
- $this->password = $GLOBALS['ISC_CFG']["dbPass"];
2741
- $this->dbname = $GLOBALS['ISC_CFG']["dbDatabase"];
2742
 
2743
- $this->imagesDir = $GLOBALS['ISC_CFG']["ImageDirectory"];
2744
- $this->categoriesImagesDir = $this->imagesDir;
2745
- $this->productsImagesDir = $this->imagesDir;
2746
- $this->manufacturersImagesDir = $this->imagesDir;
2747
 
2748
- define('DEFAULT_LANGUAGE_ISO2',$GLOBALS['ISC_CFG']["Language"]);
2749
 
2750
- $version = $this->getCartVersionFromDb("database_version", $GLOBALS['ISC_CFG']["tablePrefix"] . "config", '1');
2751
- if ($version != '') {
2752
- $this->cartVars['dbVersion'] = $version;
 
2753
  }
2754
- }
2755
  }
2756
 
2757
  /**
@@ -2760,33 +2769,33 @@ class M1_Config_Adapter_Interspire extends M1_Config_Adapter
2760
  class M1_Config_Adapter_Pinnacle361 extends M1_Config_Adapter
2761
  {
2762
 
2763
- /**
2764
- * M1_Config_Adapter_Pinnacle361 constructor.
2765
- */
2766
- public function __construct()
2767
- {
2768
- include_once M1_STORE_BASE_DIR . 'content/engine/engine_config.php';
2769
-
2770
- $this->imagesDir = 'images/';
2771
- $this->categoriesImagesDir = $this->imagesDir;
2772
- $this->productsImagesDir = $this->imagesDir;
2773
- $this->manufacturersImagesDir = $this->imagesDir;
2774
-
2775
- //$this->Host = DB_HOST;
2776
- $this->setHostPort(DB_HOST);
2777
- $this->dbname = DB_NAME;
2778
- $this->username = DB_USER;
2779
- $this->password = DB_PASSWORD;
2780
-
2781
- $version = $this->getCartVersionFromDb(
2782
- "value",
2783
- (defined('DB_PREFIX') ? DB_PREFIX : '') . "settings",
2784
- "name = 'AppVer'"
2785
- );
2786
- if ($version != '') {
2787
- $this->cartVars['dbVersion'] = $version;
2788
- }
2789
- }
2790
 
2791
  }
2792
 
@@ -2797,226 +2806,224 @@ class M1_Config_Adapter_Pinnacle361 extends M1_Config_Adapter
2797
  class M1_Config_Adapter_Oscommerce22ms2 extends M1_Config_Adapter
2798
  {
2799
 
2800
- /**
2801
- * M1_Config_Adapter_Oscommerce22ms2 constructor.
2802
- */
2803
- public function __construct()
2804
- {
2805
- $curDir = getcwd();
2806
 
2807
- chdir(M1_STORE_BASE_DIR);
2808
 
2809
- @require_once M1_STORE_BASE_DIR
2810
- . "includes" . DIRECTORY_SEPARATOR
2811
- . "configure.php";
2812
-
2813
- chdir($curDir);
2814
-
2815
- $this->imagesDir = DIR_WS_IMAGES;
2816
-
2817
- $this->categoriesImagesDir = $this->imagesDir;
2818
- $this->productsImagesDir = $this->imagesDir;
2819
- if (defined('DIR_WS_PRODUCT_IMAGES') ) {
2820
- $this->productsImagesDir = DIR_WS_PRODUCT_IMAGES;
2821
- }
2822
- if (defined('DIR_WS_ORIGINAL_IMAGES')) {
2823
- $this->productsImagesDir = DIR_WS_ORIGINAL_IMAGES;
2824
- }
2825
- $this->manufacturersImagesDir = $this->imagesDir;
2826
-
2827
- //$this->Host = DB_SERVER;
2828
- $this->setHostPort(DB_SERVER);
2829
- $this->username = DB_SERVER_USERNAME;
2830
- $this->password = DB_SERVER_PASSWORD;
2831
- $this->dbname = DB_DATABASE;
2832
- chdir(M1_STORE_BASE_DIR);
2833
- if (file_exists(M1_STORE_BASE_DIR . "includes" . DIRECTORY_SEPARATOR . 'application_top.php')) {
2834
- $conf = file_get_contents (M1_STORE_BASE_DIR . "includes" . DIRECTORY_SEPARATOR . "application_top.php");
2835
- preg_match("/define\('PROJECT_VERSION.*/", $conf, $match);
2836
- if (isset($match[0]) && !empty($match[0])) {
2837
- preg_match("/\d.*/", $match[0], $project);
2838
- if (isset($project[0]) && !empty($project[0])) {
2839
- $version = $project[0];
2840
- $version = str_replace(array(" ","-","_","'",");"), "", $version);
2841
- if ($version != '') {
2842
- $this->cartVars['dbVersion'] = strtolower($version);
2843
- }
2844
- }
2845
- } else {
2846
- //if another oscommerce based cart
2847
- if (file_exists(M1_STORE_BASE_DIR . "includes" . DIRECTORY_SEPARATOR . 'version.php')) {
2848
- @require_once M1_STORE_BASE_DIR . "includes" . DIRECTORY_SEPARATOR . "version.php";
2849
- if (defined('PROJECT_VERSION') && PROJECT_VERSION != '' ) {
2850
- $version = PROJECT_VERSION;
2851
- preg_match("/\d.*/", $version, $vers);
2852
- if (isset($vers[0]) && !empty($vers[0])) {
2853
- $version = $vers[0];
2854
- $version = str_replace(array(" ","-","_"), "", $version);
2855
- if ($version != '') {
2856
- $this->cartVars['dbVersion'] = strtolower($version);
2857
- }
2858
- }
2859
- //if zen_cart
2860
- } else {
2861
- if (defined('PROJECT_VERSION_MAJOR') && PROJECT_VERSION_MAJOR != '' ) {
2862
- $this->cartVars['dbVersion'] = PROJECT_VERSION_MAJOR;
2863
- }
2864
- if (defined('PROJECT_VERSION_MINOR') && PROJECT_VERSION_MINOR != '' ) {
2865
- $this->cartVars['dbVersion'] .= '.' . PROJECT_VERSION_MINOR;
 
 
 
2866
  }
2867
- }
2868
  }
2869
- }
2870
  }
2871
- chdir($curDir);
2872
- }
2873
 
2874
  }
2875
 
2876
 
2877
-
2878
  /**
2879
  * Class M1_Config_Adapter_Tomatocart
2880
  */
2881
  class M1_Config_Adapter_Tomatocart extends M1_Config_Adapter
2882
  {
2883
 
2884
- /**
2885
- * M1_Config_Adapter_Tomatocart constructor.
2886
- */
2887
- public function __construct()
2888
- {
2889
- $config = file_get_contents(M1_STORE_BASE_DIR . "includes/configure.php");
2890
- preg_match("/define\(\'DB_DATABASE\', \'(.+)\'\);/", $config, $match);
2891
- $this->dbname = $match[1];
2892
- preg_match("/define\(\'DB_SERVER_USERNAME\', \'(.+)\'\);/", $config, $match);
2893
- $this->username = $match[1];
2894
- preg_match("/define\(\'DB_SERVER_PASSWORD\', \'(.*)\'\);/", $config, $match);
2895
- $this->password = $match[1];
2896
- preg_match("/define\(\'DB_SERVER\', \'(.+)\'\);/", $config, $match);
2897
- $this->setHostPort( $match[1] );
2898
-
2899
- preg_match("/define\(\'DIR_WS_IMAGES\', \'(.+)\'\);/", $config, $match);
2900
- $this->imagesDir = $match[1];
2901
-
2902
- $this->categoriesImagesDir = $this->imagesDir.'categories/';
2903
- $this->productsImagesDir = $this->imagesDir.'products/';
2904
- $this->manufacturersImagesDir = $this->imagesDir . 'manufacturers/';
2905
- if (file_exists(M1_STORE_BASE_DIR . "includes" . DIRECTORY_SEPARATOR . 'application_top.php')) {
2906
- $conf = file_get_contents (M1_STORE_BASE_DIR . "includes" . DIRECTORY_SEPARATOR . "application_top.php");
2907
- preg_match("/define\('PROJECT_VERSION.*/", $conf, $match);
2908
-
2909
- if (isset($match[0]) && !empty($match[0])) {
2910
- preg_match("/\d.*/", $match[0], $project);
2911
- if (isset($project[0]) && !empty($project[0])) {
2912
- $version = $project[0];
2913
- $version = str_replace(array(" ","-","_","'",");"), "", $version);
2914
- if ($version != '') {
2915
- $this->cartVars['dbVersion'] = strtolower($version);
2916
- }
2917
- }
2918
- } else {
2919
- //if another version
2920
- if (file_exists(M1_STORE_BASE_DIR . "includes" . DIRECTORY_SEPARATOR . 'version.php')) {
2921
- @require_once M1_STORE_BASE_DIR . "includes" . DIRECTORY_SEPARATOR . "version.php";
2922
- if (defined('PROJECT_VERSION') && PROJECT_VERSION != '' ) {
2923
- $version = PROJECT_VERSION;
2924
- preg_match("/\d.*/", $version, $vers);
2925
- if (isset($vers[0]) && !empty($vers[0])) {
2926
- $version = $vers[0];
2927
- $version = str_replace(array(" ","-","_"), "", $version);
2928
- if ($version != '') {
2929
- $this->cartVars['dbVersion'] = strtolower($version);
2930
- }
 
 
 
2931
  }
2932
- }
2933
  }
2934
- }
2935
  }
2936
- }
2937
 
2938
  }
2939
 
2940
 
2941
-
2942
  /**
2943
  * Class M1_Config_Adapter_Sunshop4
2944
  */
2945
  class M1_Config_Adapter_Sunshop4 extends M1_Config_Adapter
2946
  {
2947
 
2948
- /**
2949
- * M1_Config_Adapter_Sunshop4 constructor.
2950
- */
2951
- public function __construct()
2952
- {
2953
- @require_once M1_STORE_BASE_DIR
2954
- . "include" . DIRECTORY_SEPARATOR
2955
- . "config.php";
2956
 
2957
- $this->imagesDir = "images/products/";
2958
 
2959
- $this->categoriesImagesDir = $this->imagesDir;
2960
- $this->productsImagesDir = $this->imagesDir;
2961
- $this->manufacturersImagesDir = $this->imagesDir;
2962
 
2963
- if (defined('ADMIN_DIR')) {
2964
- $this->cartVars['AdminUrl'] = ADMIN_DIR;
2965
- }
2966
 
2967
- $this->setHostPort($servername);
2968
- $this->username = $dbusername;
2969
- $this->password = $dbpassword;
2970
- $this->dbname = $dbname;
2971
 
2972
- if (isset($dbprefix)) {
2973
- $this->tblPrefix = $dbprefix;
2974
- }
2975
 
2976
- $version = $this->getCartVersionFromDb("value", "settings", "name = 'version'");
2977
- if ($version != '') {
2978
- $this->cartVars['dbVersion'] = $version;
 
2979
  }
2980
- }
2981
 
2982
  }
2983
 
2984
 
2985
-
2986
  /**
2987
  * Class miSettings
2988
  */
2989
- class miSettings {
2990
-
2991
- protected $_arr;
2992
-
2993
- /**
2994
- * @return miSettings|null
2995
- */
2996
- public function singleton()
2997
- {
2998
- static $instance = null;
2999
- if ($instance == null) {
3000
- $instance = new miSettings();
3001
- }
3002
- return $instance;
3003
- }
3004
-
3005
- /**
3006
- * @param $arr
3007
- */
3008
- public function setArray($arr)
3009
- {
3010
- $this->_arr[] = $arr;
3011
- }
3012
-
3013
- /**
3014
- * @return mixed
3015
- */
3016
- public function getArray()
3017
- {
3018
- return $this->_arr;
3019
- }
 
3020
 
3021
  }
3022
 
@@ -3026,247 +3033,257 @@ class miSettings {
3026
  class M1_Config_Adapter_Summercart3 extends M1_Config_Adapter
3027
  {
3028
 
3029
- /**
3030
- * M1_Config_Adapter_Summercart3 constructor.
3031
- */
3032
- public function __construct()
3033
- {
3034
- @include_once M1_STORE_BASE_DIR . "include/miphpf/Config.php";
3035
 
3036
- $miSettings = new miSettings();
3037
- $instance = $miSettings->singleton();
3038
 
3039
- $data = $instance->getArray();
3040
 
3041
- $this->setHostPort($data[0]['MI_DEFAULT_DB_HOST']);
3042
- $this->dbname = $data[0]['MI_DEFAULT_DB_NAME'];
3043
- $this->username = $data[0]['MI_DEFAULT_DB_USER'];
3044
- $this->password = $data[0]['MI_DEFAULT_DB_PASS'];
3045
- $this->imagesDir = "/userfiles/";
3046
 
3047
- $this->categoriesImagesDir = $this->imagesDir . "categoryimages";
3048
- $this->productsImagesDir = $this->imagesDir . "productimages";
3049
- $this->manufacturersImagesDir = $this->imagesDir . "manufacturer";
3050
 
3051
- if (file_exists(M1_STORE_BASE_DIR . "/include/VERSION")) {
3052
- $indexFileContent = file_get_contents(M1_STORE_BASE_DIR . "/include/VERSION");
3053
- $this->cartVars['dbVersion'] = trim($indexFileContent);
 
3054
  }
3055
- }
3056
 
3057
  }
3058
 
3059
 
3060
-
3061
  /**
3062
  * Class M1_Config_Adapter_Oscommerce3
3063
  */
3064
  class M1_Config_Adapter_Oscommerce3 extends M1_Config_Adapter
3065
  {
3066
 
3067
- /**
3068
- * M1_Config_Adapter_Oscommerce3 constructor.
3069
- */
3070
- public function __construct()
3071
- {
3072
- $file = M1_STORE_BASE_DIR .'/osCommerce/OM/Config/settings.ini';
3073
- $settings = parse_ini_file($file);
3074
- $this->imagesDir = "/public/";
3075
- $this->categoriesImagesDir = $this->imagesDir."/categories";
3076
- $this->productsImagesDir = $this->imagesDir."/products";
3077
- $this->manufacturersImagesDir = $this->imagesDir;
3078
-
3079
- $this->host = $settings['db_server'];
3080
- $this->setHostPort($settings['db_server_port']);
3081
- $this->username = $settings['db_server_username'];
3082
- $this->password = $settings['db_server_password'];
3083
- $this->dbname = $settings['db_database'];
3084
- }
3085
 
3086
  }
3087
 
3088
 
3089
-
3090
  /**
3091
  * Class M1_Config_Adapter_Prestashop15
3092
  */
3093
  class M1_Config_Adapter_Prestashop15 extends M1_Config_Adapter
3094
  {
3095
 
3096
- /**
3097
- * M1_Config_Adapter_Prestashop15 constructor.
3098
- */
3099
- public function __construct()
3100
- {
3101
- $confFileOne = file_get_contents(M1_STORE_BASE_DIR . "/config/settings.inc.php");
3102
- $confFileTwo = file_get_contents(M1_STORE_BASE_DIR . "/config/config.inc.php");
3103
-
3104
- $filesLines = array_merge(explode("\n", $confFileOne), explode("\n", $confFileTwo));
3105
-
3106
- $execute = '$currentDir = \'\';';
3107
- $constArray = array();
3108
- $isComment = false;
3109
- foreach ($filesLines as $line) {
3110
- $startComment = preg_match("/^(\/\*)/", $line);
3111
- $endComment = preg_match("/(\*\/)$/", $line);
3112
-
3113
- if ($isComment) {
3114
- if ($endComment) {
3115
- $isComment = false;
3116
- }
3117
- continue;
3118
- } elseif ($startComment) {
3119
- $isComment = true;
3120
- if ($endComment) {
3121
- $isComment = false;
3122
- }
3123
- continue;
3124
- }
3125
-
3126
- if (preg_match("/^(\s*)define\(/i", $line)) {
3127
- if ((strpos($line, '_DB_') !== false) || (strpos($line, '_PS_IMG_DIR_') !== false)
3128
- || (strpos($line, '_PS_VERSION_') !== false)
3129
- ) {
3130
- $const = substr($line, strrpos($line, "'_"));
3131
- $const = substr($const, 0, strrpos($const, ", "));
3132
- if (!in_array($const, $constArray)) {
3133
- $execute .= " " . $line;
3134
- $constArray[] = $const;
3135
- }
3136
- }
3137
- }
3138
- }
 
 
3139
 
3140
- define( '_PS_ROOT_DIR_', M1_STORE_BASE_DIR );
3141
- eval($execute);
 
 
 
 
 
 
3142
 
3143
- $this->setHostPort(_DB_SERVER_);
3144
- $this->dbname = _DB_NAME_;
3145
- $this->username = _DB_USER_;
3146
- $this->password = _DB_PASSWD_;
3147
 
3148
- if (defined('_PS_IMG_DIR_') && defined('_PS_ROOT_DIR_')) {
3149
 
3150
- preg_match("/(\/\w+\/)$/i", _PS_IMG_DIR_, $m);
3151
- $this->imagesDir = $m[1];
3152
 
3153
- } else {
3154
- $this->imagesDir = "/img/";
3155
- }
3156
 
3157
- $this->categoriesImagesDir = $this->imagesDir;
3158
- $this->productsImagesDir = $this->imagesDir;
3159
- $this->manufacturersImagesDir = $this->imagesDir;
3160
 
3161
- if (defined('_PS_VERSION_')) {
3162
- $this->cartVars['dbVersion'] = _PS_VERSION_;
 
3163
  }
3164
- }
3165
 
3166
  }
3167
 
3168
 
3169
-
3170
  /**
3171
  * Class M1_Config_Adapter_Gambio
3172
  */
3173
  class M1_Config_Adapter_Gambio extends M1_Config_Adapter
3174
  {
3175
 
3176
- /**
3177
- * M1_Config_Adapter_Gambio constructor.
3178
- */
3179
- public function __construct()
3180
- {
3181
- $curDir = getcwd();
3182
-
3183
- chdir(M1_STORE_BASE_DIR);
3184
-
3185
- @require_once M1_STORE_BASE_DIR . "includes/configure.php";
3186
-
3187
- chdir($curDir);
3188
-
3189
- $this->imagesDir = DIR_WS_IMAGES;
3190
-
3191
- $this->categoriesImagesDir = $this->imagesDir;
3192
- $this->productsImagesDir = $this->imagesDir;
3193
- if (defined('DIR_WS_PRODUCT_IMAGES')) {
3194
- $this->productsImagesDir = DIR_WS_PRODUCT_IMAGES;
3195
- }
3196
- if (defined('DIR_WS_ORIGINAL_IMAGES')) {
3197
- $this->productsImagesDir = DIR_WS_ORIGINAL_IMAGES;
3198
- }
3199
- $this->manufacturersImagesDir = $this->imagesDir;
3200
-
3201
- $this->host = DB_SERVER;
3202
- //$this->setHostPort(DB_SERVER);
3203
- $this->username = DB_SERVER_USERNAME;
3204
- $this->password = DB_SERVER_PASSWORD;
3205
- $this->dbname = DB_DATABASE;
3206
-
3207
- chdir(M1_STORE_BASE_DIR);
3208
- if (file_exists(M1_STORE_BASE_DIR . "includes" . DIRECTORY_SEPARATOR . 'application_top.php')) {
3209
- $conf = file_get_contents (M1_STORE_BASE_DIR . "includes" . DIRECTORY_SEPARATOR . "application_top.php");
3210
- preg_match("/define\('PROJECT_VERSION.*/", $conf, $match);
3211
- if (isset($match[0]) && !empty($match[0])) {
3212
- preg_match("/\d.*/", $match[0], $project);
3213
- if (isset($project[0]) && !empty($project[0])) {
3214
- $version = $project[0];
3215
- $version = str_replace(array(" ","-","_","'",");"), "", $version);
3216
- if ($version != '') {
3217
- $this->cartVars['dbVersion'] = strtolower($version);
3218
- }
3219
- }
3220
- } else {
3221
- //if another oscommerce based cart
3222
- if (file_exists(M1_STORE_BASE_DIR . DIRECTORY_SEPARATOR . 'version_info.php')) {
3223
- @require_once M1_STORE_BASE_DIR . DIRECTORY_SEPARATOR . "version_info.php";
3224
- if (defined('PROJECT_VERSION') && PROJECT_VERSION != '' ) {
3225
- $version = PROJECT_VERSION;
3226
- preg_match("/\d.*/", $version, $vers);
3227
- if (isset($vers[0]) && !empty($vers[0])) {
3228
- $version = $vers[0];
3229
- $version = str_replace(array(" ","-","_"), "", $version);
3230
- if ($version != '') {
3231
- $this->cartVars['dbVersion'] = strtolower($version);
3232
- }
3233
- }
3234
- //if zen_cart
3235
- } else {
3236
- if (defined('PROJECT_VERSION_MAJOR') && PROJECT_VERSION_MAJOR != '' ) {
3237
- $this->cartVars['dbVersion'] = PROJECT_VERSION_MAJOR;
3238
- }
3239
- if (defined('PROJECT_VERSION_MINOR') && PROJECT_VERSION_MINOR != '' ) {
3240
- $this->cartVars['dbVersion'] .= '.' . PROJECT_VERSION_MINOR;
 
 
 
3241
  }
3242
- }
3243
  }
3244
- }
3245
  }
3246
- chdir($curDir);
3247
- }
3248
 
3249
  }
3250
 
3251
 
3252
-
3253
  /**
3254
  * Class M1_Config_Adapter_Shopware
3255
  */
3256
  class M1_Config_Adapter_Shopware extends M1_Config_Adapter
3257
  {
 
 
 
 
 
 
 
 
 
 
 
3258
 
3259
- /**
3260
- * M1_Config_Adapter_Shopware constructor.
3261
- */
3262
- public function __construct()
3263
- {
3264
- $configs = include(M1_STORE_BASE_DIR . "config.php");
3265
- $this->setHostPort($configs['db']['host']);
3266
- $this->username = $configs['db']['username'];
3267
- $this->password = $configs['db']['password'];
3268
- $this->dbname = $configs['db']['dbname'];
3269
- }
3270
  }
3271
 
3272
  /**
@@ -3275,36 +3292,36 @@ class M1_Config_Adapter_Shopware extends M1_Config_Adapter
3275
  class M1_Config_Adapter_AceShop extends M1_Config_Adapter
3276
  {
3277
 
3278
- /**
3279
- * M1_Config_Adapter_AceShop constructor.
3280
- */
3281
- public function __construct()
3282
- {
3283
- require_once M1_STORE_BASE_DIR . "/configuration.php";
 
 
3284
 
3285
- if (class_exists("JConfig")) {
3286
 
3287
- $jconfig = new JConfig();
 
 
 
3288
 
3289
- $this->setHostPort($jconfig->host);
3290
- $this->dbname = $jconfig->db;
3291
- $this->username = $jconfig->user;
3292
- $this->password = $jconfig->password;
3293
 
3294
- } else {
 
 
 
 
3295
 
3296
- $this->setHostPort($mosConfig_host);
3297
- $this->dbname = $mosConfig_db;
3298
- $this->username = $mosConfig_user;
3299
- $this->password = $mosConfig_password;
3300
  }
3301
 
3302
- $this->imagesDir = "components/com_aceshop/opencart/image/";
3303
- $this->categoriesImagesDir = $this->imagesDir;
3304
- $this->productsImagesDir = $this->imagesDir;
3305
- $this->manufacturersImagesDir = $this->imagesDir;
3306
- }
3307
-
3308
  }
3309
 
3310
 
@@ -3314,49 +3331,49 @@ class M1_Config_Adapter_AceShop extends M1_Config_Adapter
3314
  class M1_Config_Adapter_Cscart203 extends M1_Config_Adapter
3315
  {
3316
 
3317
- /**
3318
- * M1_Config_Adapter_Cscart203 constructor.
3319
- */
3320
- public function __construct()
3321
- {
3322
- define("IN_CSCART", 1);
3323
- define("CSCART_DIR", M1_STORE_BASE_DIR);
3324
- define("AREA", 1);
3325
- define("DIR_ROOT", M1_STORE_BASE_DIR);
3326
- define("DIR_CSCART", M1_STORE_BASE_DIR);
3327
- define('DS', DIRECTORY_SEPARATOR);
3328
- define('BOOTSTRAP', '');
3329
- require_once M1_STORE_BASE_DIR . 'config.php';
3330
- defined('DIR_IMAGES') or define('DIR_IMAGES', DIR_ROOT . '/images/');
3331
-
3332
- //For CS CART 1.3.x
3333
- if (isset($db_host) && isset($db_name) && isset($db_user) && isset($db_password)) {
3334
- $this->setHostPort($db_host);
3335
- $this->dbname = $db_name;
3336
- $this->username = $db_user;
3337
- $this->password = $db_password;
3338
- $this->imagesDir = str_replace(M1_STORE_BASE_DIR, '', IMAGES_STORAGE_DIR );
3339
- } else {
3340
-
3341
- $this->setHostPort($config['db_host']);
3342
- $this->dbname = $config['db_name'];
3343
- $this->username = $config['db_user'];
3344
- $this->password = $config['db_password'];
3345
- $this->imagesDir = str_replace(M1_STORE_BASE_DIR, '', DIR_IMAGES);
3346
- }
3347
-
3348
- $this->categoriesImagesDir = $this->imagesDir;
3349
- $this->productsImagesDir = $this->imagesDir;
3350
- $this->manufacturersImagesDir = $this->imagesDir;
3351
-
3352
- if (defined('MAX_FILES_IN_DIR')) {
3353
- $this->cartVars['cs_max_files_in_dir'] = MAX_FILES_IN_DIR;
3354
- }
3355
-
3356
- if (defined('PRODUCT_VERSION')) {
3357
- $this->cartVars['dbVersion'] = PRODUCT_VERSION;
3358
- }
3359
- }
3360
 
3361
  }
3362
 
@@ -3367,65 +3384,66 @@ class M1_Config_Adapter_Cscart203 extends M1_Config_Adapter
3367
  class M1_Config_Adapter_LemonStand extends M1_Config_Adapter
3368
  {
3369
 
3370
- /**
3371
- * M1_Config_Adapter_LemonStand constructor.
3372
- */
3373
- public function __construct()
3374
- {
3375
- include (M1_STORE_BASE_DIR . 'phproad/system/phpr.php');
3376
- include (M1_STORE_BASE_DIR . 'phproad/modules/phpr/classes/phpr_securityframework.php');
3377
 
3378
- define('PATH_APP','');
3379
 
3380
- if (phpversion() > 5) {
3381
- eval ('Phpr::$config = new MockConfig();
3382
  Phpr::$config->set("SECURE_CONFIG_PATH", M1_STORE_BASE_DIR . "config/config.dat");
3383
  $framework = Phpr_SecurityFramework::create();');
3384
- }
3385
 
3386
- $config_content = $framework->get_config_content();
3387
 
3388
- $this->setHostPort($config_content['mysql_params']['host']);
3389
- $this->dbname = $config_content['mysql_params']['database'];
3390
- $this->username = $config_content['mysql_params']['user'];
3391
- $this->password = $config_content['mysql_params']['password'];
3392
 
3393
- $this->categoriesImagesDir = '/uploaded/thumbnails/';
3394
- $this->productsImagesDir = '/uploaded/';
3395
- $this->manufacturersImagesDir = '/uploaded/thumbnails/';
3396
 
3397
- $version = $this->getCartVersionFromDb("version_str", "core_versions", "moduleId = 'shop'");
3398
- $this->cartVars['dbVersion'] = $version;
3399
 
3400
- }
3401
 
3402
  }
3403
 
3404
  /**
3405
  * Class MockConfig
3406
  */
3407
- class MockConfig {
3408
-
3409
- protected $_data = array();
3410
-
3411
- /**
3412
- * @param $key
3413
- * @param $value
3414
- */
3415
- public function set($key, $value)
3416
- {
3417
- $this->_data[$key] = $value;
3418
- }
3419
-
3420
- /**
3421
- * @param $key
3422
- * @param string $default
3423
- * @return mixed|string
3424
- */
3425
- public function get($key, $default = 'default')
3426
- {
3427
- return isset($this->_data[$key]) ? $this->_data[$key] : $default;
3428
- }
 
3429
  }
3430
 
3431
  /**
@@ -3434,46 +3452,46 @@ class MockConfig {
3434
  class M1_Config_Adapter_DrupalCommerce extends M1_Config_Adapter
3435
  {
3436
 
3437
- /**
3438
- * M1_Config_Adapter_DrupalCommerce constructor.
3439
- */
3440
- public function __construct()
3441
- {
3442
- @include_once M1_STORE_BASE_DIR . "sites/default/settings.php";
3443
-
3444
- $url = $databases['default']['default'];
 
 
 
 
 
 
 
 
3445
 
3446
- $url['username'] = urldecode($url['username']);
3447
- $url['password'] = isset($url['password']) ? urldecode($url['password']) : '';
3448
- $url['host'] = urldecode($url['host']);
3449
- $url['database'] = urldecode($url['database']);
3450
- if (isset($url['port'])) {
3451
- $url['host'] = $url['host'] .':'. $url['port'];
3452
- }
3453
 
3454
- $this->setHostPort( $url['host'] );
3455
- $this->dbname = ltrim( $url['database'], '/' );
3456
- $this->username = $url['username'];
3457
- $this->password = $url['password'];
3458
 
3459
- $this->imagesDir = "/sites/default/files/";
3460
- if (!file_exists(M1_STORE_BASE_DIR . $this->imagesDir)) {
3461
- $this->imagesDir = "/files";
3462
- }
 
 
 
 
3463
 
3464
- $fileInfo = M1_STORE_BASE_DIR . "/sites/all/modules/commerce/commerce.info";
3465
- if (file_exists($fileInfo)) {
3466
- $str = file_get_contents($fileInfo);
3467
- if (preg_match('/version\s+=\s+".+-(.+)"/', $str, $match) != 0) {
3468
- $this->cartVars['dbVersion'] = $match[1];
3469
- unset($match);
3470
- }
3471
  }
3472
-
3473
- $this->categoriesImagesDir = $this->imagesDir;
3474
- $this->productsImagesDir = $this->imagesDir;
3475
- $this->manufacturersImagesDir = $this->imagesDir;
3476
- }
3477
  }
3478
 
3479
  /**
@@ -3482,43 +3500,43 @@ class M1_Config_Adapter_DrupalCommerce extends M1_Config_Adapter
3482
  class M1_Config_Adapter_SSFree extends M1_Config_Adapter
3483
  {
3484
 
3485
- /**
3486
- * M1_Config_Adapter_SSFree constructor.
3487
- */
3488
- public function __construct()
3489
- {
3490
- $config = file_get_contents(M1_STORE_BASE_DIR . 'cfg/connect.inc.php');
3491
- preg_match("/define\(\'DB_NAME\', \'(.+)\'\);/", $config, $match);
3492
- $this->dbname = $match[1];
3493
- preg_match("/define\(\'DB_USER\', \'(.+)\'\);/", $config, $match);
3494
- $this->username = $match[1];
3495
- preg_match("/define\(\'DB_PASS\', \'(.*)\'\);/", $config, $match);
3496
- $this->password = $match[1];
3497
- preg_match("/define\(\'DB_HOST\', \'(.+)\'\);/", $config, $match);
3498
- $this->setHostPort( $match[1] );
3499
-
3500
- $this->imagesDir = "products_pictures/";
3501
- $this->categoriesImagesDir = $this->imagesDir;
3502
- $this->productsImagesDir = $this->imagesDir;
3503
- $this->manufacturersImagesDir = $this->imagesDir;
3504
-
3505
- $generalInc = file_get_contents(M1_STORE_BASE_DIR . 'cfg/general.inc.php');
3506
-
3507
- preg_match("/define\(\'CONF_CURRENCY_ISO3\', \'(.+)\'\);/", $generalInc, $match);
3508
- if (count($match) != 0) {
3509
- $this->cartVars['iso3Currency'] = $match[1];
3510
- }
3511
 
3512
- preg_match("/define\(\'CONF_CURRENCY_ID_LEFT\', \'(.+)\'\);/", $generalInc, $match);
3513
- if (count($match) != 0) {
3514
- $this->cartVars['currencySymbolLeft'] = $match[1];
3515
- }
3516
 
3517
- preg_match("/define\(\'CONF_CURRENCY_ID_RIGHT\', \'(.+)\'\);/", $generalInc, $match);
3518
- if (count($match) != 0) {
3519
- $this->cartVars['currencySymbolRight'] = $match[1];
 
3520
  }
3521
- }
3522
 
3523
  }
3524
 
@@ -3528,1020 +3546,997 @@ class M1_Config_Adapter_SSFree extends M1_Config_Adapter
3528
  class M1_Config_Adapter_Zencart137 extends M1_Config_Adapter
3529
  {
3530
 
3531
- /**
3532
- * M1_Config_Adapter_Zencart137 constructor.
3533
- */
3534
- public function __construct()
3535
- {
3536
- $curDir = getcwd();
3537
-
3538
- chdir(M1_STORE_BASE_DIR);
3539
 
3540
- @require_once M1_STORE_BASE_DIR
3541
- . "includes" . DIRECTORY_SEPARATOR
3542
- . "configure.php";
3543
 
3544
- chdir($curDir);
 
 
 
3545
 
3546
- $this->imagesDir = DIR_WS_IMAGES;
3547
 
3548
- $this->categoriesImagesDir = $this->imagesDir;
3549
- $this->productsImagesDir = $this->imagesDir;
3550
- if (defined('DIR_WS_PRODUCT_IMAGES')) {
3551
- $this->productsImagesDir = DIR_WS_PRODUCT_IMAGES;
3552
- }
3553
- if (defined('DIR_WS_ORIGINAL_IMAGES')) {
3554
- $this->productsImagesDir = DIR_WS_ORIGINAL_IMAGES;
3555
- }
3556
- $this->manufacturersImagesDir = $this->imagesDir;
3557
 
3558
- //$this->Host = DB_SERVER;
3559
- $this->setHostPort(DB_SERVER);
3560
- $this->username = DB_SERVER_USERNAME;
3561
- $this->password = DB_SERVER_PASSWORD;
3562
- $this->dbname = DB_DATABASE;
3563
- if (file_exists(M1_STORE_BASE_DIR . "includes" . DIRECTORY_SEPARATOR . 'version.php')) {
3564
- @require_once M1_STORE_BASE_DIR
3565
- . "includes" . DIRECTORY_SEPARATOR
3566
- . "version.php";
3567
- $major = PROJECT_VERSION_MAJOR;
3568
- $minor = PROJECT_VERSION_MINOR;
3569
- if (defined('EXPECTED_DATABASE_VERSION_MAJOR') && EXPECTED_DATABASE_VERSION_MAJOR != '' ) {
3570
- $major = EXPECTED_DATABASE_VERSION_MAJOR;
3571
- }
3572
- if (defined('EXPECTED_DATABASE_VERSION_MINOR') && EXPECTED_DATABASE_VERSION_MINOR != '' ) {
3573
- $minor = EXPECTED_DATABASE_VERSION_MINOR;
3574
- }
 
 
 
 
 
 
 
 
 
 
3575
 
3576
- if ($major != '' && $minor != '') {
3577
- $this->cartVars['dbVersion'] = $major.'.'.$minor;
3578
- }
3579
 
 
3580
  }
3581
- }
3582
 
3583
  }
3584
 
3585
 
3586
-
3587
- /**
3588
- * @package Api2cart
3589
- * @author Babyak Roman <r.babyak@magneticone.com>
3590
- * @license Not public license
3591
- * @link https://www.api2cart.com
3592
- */
3593
-
3594
  class M1_Config_Adapter
3595
  {
3596
- public $host = 'localhost';
3597
- public $port = null;//"3306";
3598
- public $username = 'root';
3599
- public $password = '';
3600
- public $dbname = '';
3601
- public $tblPrefix = '';
3602
-
3603
- public $cartType = 'Oscommerce22ms2';
3604
- public $imagesDir = '';
3605
- public $categoriesImagesDir = '';
3606
- public $productsImagesDir = '';
3607
- public $manufacturersImagesDir = '';
3608
- public $categoriesImagesDirs = '';
3609
- public $productsImagesDirs = '';
3610
- public $manufacturersImagesDirs = '';
3611
-
3612
- public $languages = array();
3613
- public $cartVars = array();
3614
-
3615
- /**
3616
- * @return mixed
3617
- */
3618
- public function create()
3619
- {
3620
- $cartType = $this->_detectCartType();
3621
- $className = "M1_Config_Adapter_" . $cartType;
3622
-
3623
- $obj = new $className();
3624
- $obj->cartType = $cartType;
3625
-
3626
- return $obj;
3627
- }
3628
-
3629
- /**
3630
- * @return string
3631
- */
3632
- private function _detectCartType()
3633
- {
3634
- // Zencart137
3635
- if (file_exists(M1_STORE_BASE_DIR . "includes" . DIRECTORY_SEPARATOR . "configure.php")
3636
- && file_exists(M1_STORE_BASE_DIR . "ipn_main_handler.php")
3637
- ) {
3638
- return "Zencart137";
3639
- }
3640
-
3641
- //osCommerce
3642
- /* is if not tomatocart */
3643
- if (file_exists(M1_STORE_BASE_DIR . "includes" . DIRECTORY_SEPARATOR . "configure.php")
3644
- && !file_exists(M1_STORE_BASE_DIR . "includes" . DIRECTORY_SEPARATOR . "toc_constants.php")
3645
- ) {
3646
- return "Oscommerce22ms2";
3647
- }
3648
-
3649
- if (file_exists(M1_STORE_BASE_DIR . "/includes/configure.php")) {
3650
- return "Gambio";
3651
- }
3652
-
3653
- //JooCart
3654
- if (file_exists(M1_STORE_BASE_DIR . '/components/com_opencart/opencart.php')) {
3655
- return 'JooCart';
3656
- }
3657
-
3658
- //ACEShop
3659
- if (file_exists(M1_STORE_BASE_DIR . '/components/com_aceshop/aceshop.php')) {
3660
- return 'AceShop';
3661
- }
3662
-
3663
- //Litecommerce
3664
- if ((file_exists(M1_STORE_BASE_DIR .'/etc/config.php'))
3665
- || (file_exists(M1_STORE_BASE_DIR .'/modules/lc_connector/litecommerce/etc/config.php'))
3666
- ) {
3667
- return "Litecommerce";
3668
- }
3669
-
3670
- //Prestashop11
3671
- if (file_exists(M1_STORE_BASE_DIR . "config/config.inc.php")) {
3672
- if (file_exists(M1_STORE_BASE_DIR . "cache/class_index.php")) {
3673
- return "Prestashop15";
3674
- }
3675
- return "Prestashop11";
3676
- }
3677
-
3678
- /*
3679
- * Virtuemart113
3680
  */
3681
- if (file_exists(M1_STORE_BASE_DIR . "configuration.php")) {
3682
- return "Virtuemart113";
 
 
 
 
 
 
 
3683
  }
3684
 
3685
- /*
3686
- * Pinnacle361
3687
  */
3688
- if (file_exists(M1_STORE_BASE_DIR . 'content/engine/engine_config.php')) {
3689
- return "Pinnacle361";
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3690
  }
3691
 
3692
- // Magento1212, we can be sure that PHP is >= 5.2.0
3693
- if (file_exists(M1_STORE_BASE_DIR . 'app/etc/local.xml')
3694
- || @file_exists(M1_STORE_BASE_DIR . 'app/etc/env.php')
3695
- ) {
3696
- return "Magento1212";
 
 
 
 
 
3697
  }
3698
 
3699
- //Cubecart3
3700
- if (file_exists(M1_STORE_BASE_DIR . 'includes/global.inc.php')) {
3701
- return "Cubecart";
3702
- }
 
 
3703
 
3704
- //Cscart203 - 3
3705
- if (file_exists(M1_STORE_BASE_DIR . "config.local.php") || file_exists(M1_STORE_BASE_DIR . "partner.php")) {
3706
- return "Cscart203";
3707
- }
3708
 
3709
- //Opencart14
3710
- if ((file_exists(M1_STORE_BASE_DIR . "system/startup.php")
3711
- || (file_exists(M1_STORE_BASE_DIR . "common.php"))
3712
- || (file_exists(M1_STORE_BASE_DIR . "library/locator.php"))
3713
- ) && file_exists(M1_STORE_BASE_DIR . "config.php")
3714
- ) {
3715
- return "Opencart14";
3716
- }
3717
 
3718
- //Shopware
3719
- if (file_exists(M1_STORE_BASE_DIR . "config.php") && file_exists(M1_STORE_BASE_DIR . "shopware.php")) {
3720
- return "Shopware";
3721
- }
3722
 
3723
- //LemonStand
3724
- if (file_exists(M1_STORE_BASE_DIR . "boot.php")) {
3725
- return "LemonStand";
3726
- }
3727
 
3728
- //Interspire
3729
- if (file_exists(M1_STORE_BASE_DIR . "config/config.php")) {
3730
- return "Interspire";
3731
- }
3732
 
3733
- //Squirrelcart242
3734
- if (file_exists(M1_STORE_BASE_DIR . 'squirrelcart/config.php')) {
3735
- return "Squirrelcart242";
 
 
 
 
 
 
3736
  }
3737
 
3738
- //Shopscript WebAsyst
3739
- if (file_exists(M1_STORE_BASE_DIR . 'kernel/wbs.xml')) {
3740
- return "WebAsyst";
3741
- }
 
 
 
 
 
 
 
 
 
 
3742
 
3743
- //Shopscript Premium
3744
- if (file_exists(M1_STORE_BASE_DIR . 'cfg/general.inc.php') && file_exists(M1_STORE_BASE_DIR . 'cfg/connect.inc.php')) {
3745
- return "SSFree";
3746
  }
3747
 
3748
- //Shopscript Premium
3749
- if (file_exists(M1_STORE_BASE_DIR . 'cfg/connect.inc.php')) {
3750
- return "SSPremium";
3751
- }
 
 
 
 
 
3752
 
3753
- //ShopScript5
3754
- if (file_exists(M1_STORE_BASE_DIR . 'wa.php') && file_exists(M1_STORE_BASE_DIR . 'wa-config/db.php')) {
3755
- return "SSPremium";
3756
- }
3757
 
3758
- //Summercart3
3759
- if (file_exists(M1_STORE_BASE_DIR . 'sclic.lic') && file_exists(M1_STORE_BASE_DIR . 'include/miphpf/Config.php')) {
3760
- return "Summercart3";
3761
- }
 
3762
 
3763
- //XtcommerceVeyton
3764
- if (file_exists(M1_STORE_BASE_DIR . 'conf/config.php')) {
3765
- return "XtcommerceVeyton";
3766
- }
3767
 
3768
- //Woocommerce, WPecommerce
3769
- if (file_exists(M1_STORE_BASE_DIR . 'wp-config.php') || file_exists(dirname(M1_STORE_BASE_DIR) . '/wp-config.php')
3770
- ) {
3771
- return 'Wordpress';
3772
  }
 
3773
 
3774
- //Ubercart
3775
- if (file_exists(M1_STORE_BASE_DIR . 'sites/default/settings.php' )) {
3776
- if (file_exists( M1_STORE_BASE_DIR . '/modules/ubercart/uc_store/includes/coder_review_uc3x.inc')) {
3777
- return "Ubercart3";
3778
- } elseif (file_exists(M1_STORE_BASE_DIR . 'sites/all/modules/commerce/includes/commerce.controller.inc')) {
3779
- return "DrupalCommerce";
3780
- }
3781
 
3782
- return "Ubercart";
3783
- }
 
 
 
 
 
 
 
3784
 
3785
- //XCart
3786
- if (file_exists(M1_STORE_BASE_DIR . "config.php")) {
3787
- return "XCart";
3788
  }
3789
 
3790
- //OXID e-shop
3791
- if (file_exists( M1_STORE_BASE_DIR . 'config.inc.php')) {
3792
- return 'Oxid';
 
 
 
3793
  }
3794
 
3795
- //HHGMultistore
3796
- if (file_exists(M1_STORE_BASE_DIR . 'core/config/configure.php')) {
3797
- return 'Hhgmultistore';
 
 
 
3798
  }
3799
 
3800
- //SunShop
3801
- if (file_exists(M1_STORE_BASE_DIR . "include" . DIRECTORY_SEPARATOR . "config.php")
3802
- || file_exists(M1_STORE_BASE_DIR . "include" . DIRECTORY_SEPARATOR . "db_mysql.php")
3803
- ) {
3804
- return "Sunshop4";
 
 
 
3805
  }
3806
 
3807
- //Tomatocart
3808
- if (file_exists(M1_STORE_BASE_DIR . "includes" . DIRECTORY_SEPARATOR . "configure.php")
3809
- && file_exists(M1_STORE_BASE_DIR. "includes" . DIRECTORY_SEPARATOR . "toc_constants.php")
3810
- ) {
3811
- return 'Tomatocart';
3812
- }
 
 
3813
 
3814
- die ("BRIDGE_ERROR_CONFIGURATION_NOT_FOUND");
3815
- }
3816
 
3817
- /**
3818
- * @param $cartType
3819
- * @return string
3820
- */
3821
- public function getAdapterPath($cartType)
3822
- {
3823
- return M1_STORE_BASE_DIR . M1_BRIDGE_DIRECTORY_NAME . DIRECTORY_SEPARATOR
3824
- . "app" . DIRECTORY_SEPARATOR
3825
- . "class" . DIRECTORY_SEPARATOR
3826
- . "config_adapter" . DIRECTORY_SEPARATOR . $cartType . ".php";
3827
- }
3828
 
3829
- /**
3830
- * @param $source
3831
- */
3832
- public function setHostPort($source)
3833
- {
3834
- $source = trim($source);
3835
 
3836
- if ($source == '') {
3837
- $this->host = 'localhost';
3838
- return;
3839
- }
3840
 
3841
- $conf = explode(":", $source);
 
 
3842
 
3843
- if (isset($conf[0]) && isset($conf[1])) {
3844
- $this->host = $conf[0];
3845
- $this->port = $conf[1];
3846
- } elseif ($source[0] == '/') {
3847
- $this->host = 'localhost';
3848
- $this->port = $source;
3849
- } else {
3850
- $this->host = $source;
3851
- }
3852
- }
3853
 
3854
- /**
3855
- * @return bool|M1_Mysql|M1_Mysqli|M1_Pdo
3856
- */
3857
- public function connect()
3858
- {
3859
- if (function_exists('mysql_connect')) {
3860
- $link = new M1_Mysql($this);
3861
- } elseif (function_exists('mysqli_connect')) {
3862
- $link = new M1_Mysqli($this);
3863
- } elseif (extension_loaded('pdo_mysql')) {
3864
- $link = new M1_Pdo($this);
3865
- } else {
3866
- $link = false;
3867
  }
3868
 
3869
- return $link;
3870
- }
3871
-
3872
- /**
3873
- * @param $field
3874
- * @param $tableName
3875
- * @param $where
3876
- * @return string
3877
- */
3878
- public function getCartVersionFromDb($field, $tableName, $where)
3879
- {
3880
- $version = '';
3881
 
3882
- $link = $this->connect();
3883
- if (!$link) {
3884
- return '[ERROR] MySQL Query Error: Can not connect to DB';
3885
- }
3886
-
3887
- $result = $link->localQuery("
3888
- SELECT " . $field . " AS version
3889
- FROM " . $this->tblPrefix . $tableName . "
3890
- WHERE " . $where
3891
- );
3892
 
3893
- if (is_array($result) && isset($result[0]['version'])) {
3894
- $version = $result[0]['version'];
3895
- }
3896
 
3897
- return $version;
3898
- }
3899
- }
 
3900
 
3901
- /**
3902
- * @package Api2cart
3903
- * @author Babyak Roman <r.babyak@magneticone.com>
3904
- * @license Not public license
3905
- * @link https://www.api2cart.com
3906
- */
3907
 
3908
- class M1_Bridge
3909
- {
3910
- protected $_link = null; //mysql connection link
3911
- public $config = null; //config adapter
3912
 
3913
- /**
3914
- * Bridge constructor
3915
- *
3916
- * M1_Bridge constructor.
3917
- * @param $config
3918
- */
3919
- public function __construct(M1_Config_Adapter $config)
3920
- {
3921
- $this->config = $config;
3922
 
3923
- if ($this->getAction() != "savefile") {
3924
- $this->_link = $this->config->connect();
 
3925
  }
3926
- }
3927
 
3928
- /**
3929
- * @return mixed
3930
- */
3931
- public function getTablesPrefix()
3932
- {
3933
- return $this->config->tblPrefix;
3934
- }
3935
 
3936
- /**
3937
- * @return null
3938
- */
3939
- public function getLink()
3940
- {
3941
- return $this->_link;
3942
- }
3943
 
3944
- /**
3945
- * @param $sql
3946
- * @param $fetchMode
3947
- * @return mixed
3948
- */
3949
- public function query($sql, $fetchMode)
3950
- {
3951
- return $this->_link->query($sql, $fetchMode);
3952
- }
3953
 
3954
- /**
3955
- * @return mixed|string
3956
- */
3957
- private function getAction()
3958
- {
3959
- if (isset($_GET['action'])) {
3960
- return str_replace('.', '', $_GET['action']);
 
 
 
 
3961
  }
3962
 
3963
- return '';
3964
- }
3965
 
3966
- public function run()
3967
- {
3968
- $action = $this->getAction();
3969
 
3970
- if ($action == "checkbridge") {
3971
- echo "BRIDGE_OK";
3972
- return;
3973
- }
 
3974
 
3975
- if ($action != "update") {
3976
- $this->_selfTest();
 
 
 
 
 
 
 
3977
  }
3978
 
3979
- if ($action == "update") {
3980
- $this->_checkPossibilityUpdate();
3981
- }
 
 
 
 
 
3982
 
3983
- $className = "M1_Bridge_Action_" . ucfirst($action);
3984
- if (!class_exists($className)) {
3985
- echo 'ACTION_DO_NOT EXIST' . PHP_EOL;
3986
- die;
3987
- }
3988
 
3989
- $actionObj = new $className();
3990
- @$actionObj->cartType = @$this->config->cartType;
3991
- $actionObj->perform($this);
3992
- $this->_destroy();
3993
- }
3994
 
3995
- /**
3996
- * @param $dir
3997
- * @return bool
3998
- */
3999
- private function isWritable($dir)
4000
- {
4001
- if (!@is_dir($dir)) {
4002
- return false;
4003
  }
4004
 
4005
- $dh = @opendir($dir);
 
 
 
 
 
 
 
 
 
 
 
4006
 
4007
- if ($dh === false) {
4008
- return false;
4009
- }
4010
 
4011
- while (($entry = readdir($dh)) !== false) {
4012
- if ($entry == "." || $entry == ".." || !@is_dir($dir . DIRECTORY_SEPARATOR . $entry)) {
4013
- continue;
4014
- }
4015
 
4016
- if (!$this->isWritable($dir . DIRECTORY_SEPARATOR . $entry)) {
4017
- return false;
4018
- }
4019
- }
 
4020
 
4021
- if (!is_writable($dir)) {
4022
- return false;
 
 
 
 
 
4023
  }
4024
 
4025
- return true;
4026
- }
 
 
 
 
 
 
 
4027
 
4028
- private function _destroy()
4029
- {
4030
- $this->_link = null;
4031
- }
4032
 
4033
- private function _checkPossibilityUpdate()
4034
- {
4035
- if (!is_writable(M1_STORE_BASE_DIR . "/" . M1_BRIDGE_DIRECTORY_NAME . "/")) {
4036
- die("ERROR_TRIED_TO_PERMISSION" . M1_STORE_BASE_DIR . "/" . M1_BRIDGE_DIRECTORY_NAME . "/");
4037
- }
4038
 
4039
- if (isset($_GET['hash']) && $_GET['hash'] === M1_TOKEN) {
4040
- // good :)
4041
- } else {
4042
- die('ERROR_INVALID_TOKEN');
4043
- }
4044
 
4045
- if (!is_writable(M1_STORE_BASE_DIR . "/". M1_BRIDGE_DIRECTORY_NAME . "/bridge.php")) {
4046
- die("ERROR_TRIED_TO_PERMISSION_BRIDGE_FILE" . M1_STORE_BASE_DIR . "/" . M1_BRIDGE_DIRECTORY_NAME . "/bridge.php");
4047
  }
4048
- }
4049
-
4050
- private function _selfTest()
4051
- {
4052
- if (((!isset($_GET['storetype']) || $_GET['storetype'] == 'target') && $this->getAction() == 'checkbridge') || !isset($_GET['action'])) {
4053
 
4054
- if (trim($this->config->imagesDir) != "") {
4055
- if (!file_exists(M1_STORE_BASE_DIR . $this->config->imagesDir) && is_writable(M1_STORE_BASE_DIR)) {
4056
- if (!@mkdir(M1_STORE_BASE_DIR . $this->config->imagesDir, 0777, true)) {
4057
- die('ERROR_TRIED_TO_CREATE_IMAGE_DIR' . M1_STORE_BASE_DIR . $this->config->imagesDir);
4058
- }
 
 
 
 
 
 
 
 
 
 
 
 
4059
  }
4060
 
4061
- if (!$this->isWritable(M1_STORE_BASE_DIR . $this->config->imagesDir)) {
4062
- die('ERROR_NO_IMAGES_DIR '. M1_STORE_BASE_DIR . $this->config->imagesDir);
 
4063
  }
4064
- }
4065
 
4066
- if (trim($this->config->categoriesImagesDir) != "") {
4067
- if (!file_exists(M1_STORE_BASE_DIR . $this->config->categoriesImagesDir) && is_writable(M1_STORE_BASE_DIR)) {
4068
- if (!@mkdir(M1_STORE_BASE_DIR . $this->config->categoriesImagesDir, 0777, true)) {
4069
- die('ERROR_TRIED_TO_CREATE_IMAGE_DIR' . M1_STORE_BASE_DIR . $this->config->categoriesImagesDir);
4070
- }
4071
  }
4072
 
4073
- if (!$this->isWritable(M1_STORE_BASE_DIR . $this->config->categoriesImagesDir)) {
4074
- die('ERROR_NO_IMAGES_DIR '. M1_STORE_BASE_DIR . $this->config->categoriesImagesDir);
 
 
 
 
 
 
 
 
 
 
 
4075
  }
4076
- }
4077
 
4078
- if (trim($this->config->productsImagesDir) != "") {
4079
- if (!file_exists(M1_STORE_BASE_DIR . $this->config->productsImagesDir) && is_writable(M1_STORE_BASE_DIR)) {
4080
- if (!@mkdir(M1_STORE_BASE_DIR . $this->config->productsImagesDir, 0777, true)) {
4081
- die('ERROR_TRIED_TO_CREATE_IMAGE_DIR' . M1_STORE_BASE_DIR . $this->config->productsImagesDir);
4082
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
4083
  }
4084
 
4085
- if (!$this->isWritable(M1_STORE_BASE_DIR . $this->config->productsImagesDir)) {
4086
- die('ERROR_NO_IMAGES_DIR '. M1_STORE_BASE_DIR . $this->config->productsImagesDir);
 
4087
  }
4088
- }
4089
 
4090
- if (trim($this->config->manufacturersImagesDir) != "") {
4091
- if (!file_exists(M1_STORE_BASE_DIR . $this->config->manufacturersImagesDir) && is_writable(M1_STORE_BASE_DIR)) {
4092
- if (!@mkdir(M1_STORE_BASE_DIR . $this->config->manufacturersImagesDir, 0777, true)) {
4093
- die('ERROR_TRIED_TO_CREATE_IMAGE_DIR' . M1_STORE_BASE_DIR . $this->config->manufacturersImagesDir);
4094
- }
4095
  }
4096
 
4097
- if (!$this->isWritable(M1_STORE_BASE_DIR . $this->config->manufacturersImagesDir)) {
4098
- die('ERROR_NO_IMAGES_DIR ' . M1_STORE_BASE_DIR . $this->config->manufacturersImagesDir);
 
4099
  }
4100
- }
4101
- }
4102
 
4103
- if (isset($_GET['token'])) {
4104
- if ($_GET['token'] === M1_TOKEN) {
4105
- // good :)
4106
- } else {
4107
- die('ERROR_INVALID_TOKEN');
4108
- }
4109
- } else{
4110
- die('BRIDGE INSTALLED.<br /> Version: ' . M1_BRIDGE_VERSION );
4111
- }
4112
- }
4113
 
4114
- }
 
 
 
4115
 
 
 
4116
 
4117
- /**
4118
- * @package api2cart
4119
- * @author Vasul Babiy (v.babyi@magneticone.com)
4120
- * @license Not public license
4121
- * @link https://www.api2cart.com
4122
- */
4123
 
4124
- class M1_Mysql
4125
- {
4126
- public $config = null; // config adapter
4127
- public $result = array();
4128
- public $dataBaseHandle = null;
4129
-
4130
- /**
4131
- * mysql constructor
4132
- *
4133
- * @param M1_Config_Adapter $config
4134
- * @return M1_Mysql
4135
- */
4136
- public function __construct($config)
4137
- {
4138
- $this->config = $config;
4139
- }
4140
 
4141
- /**
4142
- * @return bool|null|resource
4143
- */
4144
- private function getDataBaseHandle()
4145
- {
4146
- if ($this->dataBaseHandle) {
4147
- return $this->dataBaseHandle;
4148
- }
4149
-
4150
- $this->dataBaseHandle = $this->connect();
4151
-
4152
- if (!$this->dataBaseHandle) {
4153
- exit('[ERROR] MySQL Query Error: Can not connect to DB');
4154
- }
4155
-
4156
- return $this->dataBaseHandle;
4157
- }
4158
-
4159
- /**
4160
- * @return bool|null|resource
4161
- */
4162
- private function connect()
4163
- {
4164
- $triesCount = 10;
4165
- $link = null;
4166
- $host = $this->config->host . ($this->config->port ? ':' . $this->config->port : '');
4167
- $password = stripslashes($this->config->password);
4168
-
4169
- while (!$link) {
4170
- if (!$triesCount--) {
4171
- break;
4172
- }
4173
-
4174
- $link = @mysql_connect($host, $this->config->username, $password);
4175
- if (!$link) {
4176
- sleep(5);
4177
- }
4178
- }
4179
-
4180
- if ($link) {
4181
- mysql_select_db($this->config->dbname, $link);
4182
- } else {
4183
- return false;
4184
- }
4185
-
4186
- return $link;
4187
- }
4188
-
4189
- /**
4190
- * @param string $sql sql query
4191
- *
4192
- * @return array
4193
- */
4194
- public function localQuery($sql)
4195
- {
4196
- $result = array();
4197
- $dataBaseHandle = $this->getDataBaseHandle();
4198
-
4199
- $sth = mysql_query($sql, $dataBaseHandle);
4200
-
4201
- if (is_bool($sth)) {
4202
- return $sth;
4203
- }
4204
-
4205
- while (($row = mysql_fetch_assoc($sth)) != false) {
4206
- $result[] = $row;
4207
- }
4208
-
4209
- return $result;
4210
- }
4211
-
4212
- /**
4213
- * @param string $sql sql query
4214
- * @param int $fetchType fetch Type
4215
- *
4216
- * @return array
4217
- */
4218
- public function query($sql, $fetchType)
4219
- {
4220
- $result = array(
4221
- 'result' => null,
4222
- 'message' => '',
4223
- );
4224
- $dataBaseHandle = $this->getDataBaseHandle();
4225
-
4226
- if (!$dataBaseHandle) {
4227
- $result['message'] = '[ERROR] MySQL Query Error: Can not connect to DB';
4228
- return $result;
4229
- }
4230
-
4231
- if (isset($_GET['disable_checks'])) {
4232
- $this->localQuery('SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0');
4233
- $this->localQuery("SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO'");
4234
- }
4235
-
4236
- if (isset($_REQUEST['set_names'])) {
4237
- @mysql_query("SET NAMES " . @mysql_real_escape_string($_REQUEST['set_names']), $dataBaseHandle);
4238
- @mysql_query("SET CHARACTER SET " . @mysql_real_escape_string($_REQUEST['set_names']), $dataBaseHandle);
4239
- @mysql_query("SET CHARACTER_SET_CONNECTION=" . @mysql_real_escape_string($_REQUEST['set_names']), $dataBaseHandle);
4240
  }
4241
 
4242
- $fetchMode = MYSQL_ASSOC;
4243
- switch ($fetchType) {
4244
- case 3:
4245
- $fetchMode = MYSQL_BOTH;
4246
- break;
4247
- case 2:
4248
- $fetchMode = MYSQL_NUM;
4249
- break;
4250
- case 1:
4251
- $fetchMode = MYSQL_ASSOC;
4252
- break;
4253
- default:
4254
- break;
4255
  }
4256
 
4257
- $res = mysql_query($sql, $dataBaseHandle);
4258
 
4259
- $triesCount = 10;
4260
- while (mysql_errno($dataBaseHandle) == 2013) {
4261
- if (!$triesCount--) {
4262
- break;
4263
- }
4264
- // reconnect
4265
- $dataBaseHandle = $this->getDataBaseHandle();
4266
- if ($dataBaseHandle) {
4267
 
4268
- if (isset($_REQUEST['set_names'])) {
4269
- @mysql_query("SET NAMES " . @mysql_real_escape_string($_REQUEST['set_names']), $dataBaseHandle);
4270
- @mysql_query("SET CHARACTER SET " . @mysql_real_escape_string($_REQUEST['set_names']), $dataBaseHandle);
4271
- @mysql_query("SET CHARACTER_SET_CONNECTION=" . @mysql_real_escape_string($_REQUEST['set_names']), $dataBaseHandle);
4272
- }
4273
 
4274
- // execute query once again
4275
- $res = mysql_query($sql, $dataBaseHandle);
4276
- }
4277
- }
4278
 
4279
- if (($errno = mysql_errno($dataBaseHandle)) != 0) {
4280
- $result['message'] = '[ERROR] Mysql Query Error: ' . $errno . ', ' . mysql_error($dataBaseHandle);
4281
- return $result;
 
 
 
 
 
 
4282
  }
4283
 
4284
- if (!is_resource($res)) {
4285
- $result['result'] = $res;
4286
- return $result;
4287
- }
 
 
 
 
4288
 
4289
- $fetchedFields = array();
4290
- while (($field = mysql_fetch_field($res)) !== false) {
4291
- $fetchedFields[] = $field;
4292
- }
 
4293
 
4294
- $rows = array();
4295
- while (($row = mysql_fetch_array($res, $fetchMode)) !== false) {
4296
- $rows[] = $row;
4297
  }
4298
 
4299
- if (isset($_GET['disable_checks'])) {
4300
- $this->localQuery("SET SQL_MODE=IFNULL(@OLD_SQL_MODE,'')");
4301
- $this->localQuery("SET FOREIGN_KEY_CHECKS=IFNULL(@OLD_FOREIGN_KEY_CHECKS,0)");
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4302
  }
4303
 
4304
- $result['result'] = $rows;
4305
- $result['fetchedFields'] = $fetchedFields;
 
 
 
 
 
 
 
4306
 
4307
- mysql_free_result($res);
4308
- return $result;
4309
- }
4310
 
4311
- /**
4312
- * @return int
4313
- */
4314
- public function getLastInsertId()
4315
- {
4316
- return mysql_insert_id($this->dataBaseHandle);
4317
- }
4318
 
4319
- /**
4320
- * @return int
4321
- */
4322
- public function getAffectedRows()
4323
- {
4324
- return mysql_affected_rows($this->dataBaseHandle);
4325
- }
4326
 
4327
- /**
4328
- * @return void
4329
- */
4330
- public function __destruct()
4331
- {
4332
- if ($this->dataBaseHandle) {
4333
- mysql_close($this->dataBaseHandle);
4334
  }
4335
 
4336
- $this->dataBaseHandle = null;
4337
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4338
 
4339
- }
 
 
 
 
4340
 
 
 
 
 
 
 
 
 
 
 
 
 
4341
 
4342
- /**
4343
- * @package api2cart
4344
- * @author Vasul Babiy (v.babyi@magneticone.com)
4345
- * @license Not public license
4346
- * @link https://www.api2cart.com
4347
- */
 
 
4348
 
4349
- class M1_Pdo
4350
- {
4351
- public $config = null; // config adapter
4352
- public $noResult = array('delete', 'update', 'move', 'truncate', 'insert', 'set', 'create', 'drop');
4353
- public $dataBaseHandle = null;
4354
-
4355
- private $_insertedId = 0;
4356
- private $_affectedRows = 0;
4357
-
4358
- /**
4359
- * pdo constructor
4360
- *
4361
- * @param M1_Config_Adapter $config configuration
4362
- * @return M1_Pdo
4363
- */
4364
- public function __construct($config)
4365
- {
4366
- $this->config = $config;
4367
- }
4368
-
4369
- /**
4370
- * @return bool|null|PDO
4371
- */
4372
- private function getDataBaseHandle()
4373
- {
4374
- if ($this->dataBaseHandle) {
4375
- return $this->dataBaseHandle;
4376
- }
4377
-
4378
- $this->dataBaseHandle = $this->connect();
4379
-
4380
- if (!$this->dataBaseHandle) {
4381
- exit('[ERROR] MySQL Query Error: Can not connect to DB');
4382
- }
4383
-
4384
- return $this->dataBaseHandle;
4385
- }
4386
-
4387
- /**
4388
- * @return bool|PDO
4389
- */
4390
- private function connect()
4391
- {
4392
- $triesCount = 3;
4393
- $host = $this->config->host . ($this->config->port ? ':' . $this->config->port : '');
4394
- $password = stripslashes($this->config->password);
4395
- $dbName = $this->config->dbname;
4396
-
4397
- while ($triesCount) {
4398
- try {
4399
- $link = new PDO("mysql:host=$host; dbname=$dbName", $this->config->username, $password);
4400
- $link->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
4401
 
4402
- return $link;
 
 
 
4403
 
4404
- } catch (PDOException $e) {
4405
- $triesCount--;
 
 
4406
 
4407
- // fix invalid port
4408
- $host = $this->config->host;
4409
- }
4410
- }
4411
- return false;
4412
- }
4413
-
4414
- /**
4415
- * @param string $sql sql query
4416
- *
4417
- * @return array|bool
4418
- */
4419
- public function localQuery($sql)
4420
- {
4421
- $result = array();
4422
- $dataBaseHandle = $this->getDataBaseHandle();
4423
-
4424
- $sth = $dataBaseHandle->query($sql);
4425
-
4426
- foreach ($this->noResult as $statement) {
4427
- if (!$sth || strpos(strtolower(trim($sql)), $statement) === 0) {
4428
- return true;
4429
- }
4430
- }
4431
-
4432
- while (($row = $sth->fetch(PDO::FETCH_ASSOC)) != false) {
4433
- $result[] = $row;
4434
- }
4435
-
4436
- return $result;
4437
- }
4438
-
4439
- /**
4440
- * @param string $sql sql query
4441
- * @param int $fetchType fetch Type
4442
- *
4443
- * @return array
4444
- */
4445
- public function query($sql, $fetchType)
4446
- {
4447
- $result = array(
4448
- 'result' => null,
4449
- 'message' => '',
4450
- 'fetchedFields' => array()
4451
- );
4452
- $dataBaseHandle = $this->getDataBaseHandle();
4453
-
4454
- if (isset($_GET['disable_checks'])) {
4455
- $dataBaseHandle->exec('SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0');
4456
- $dataBaseHandle->exec("SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO'");
4457
- }
4458
-
4459
- if (isset($_REQUEST['set_names'])) {
4460
- $dataBaseHandle->exec("SET NAMES '" . ($_REQUEST['set_names']) . "'");
4461
- $dataBaseHandle->exec("SET CHARACTER SET '" . ($_REQUEST['set_names']) . "'");
4462
- $dataBaseHandle->exec("SET CHARACTER_SET_CONNECTION = '" . ($_REQUEST['set_names']) . "'");
4463
- }
4464
-
4465
- switch ($fetchType) {
4466
- case 3:
4467
- $dataBaseHandle->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_BOTH);
4468
- break;
4469
- case 2:
4470
- $dataBaseHandle->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_NUM);
4471
- break;
4472
- case 1:
4473
- default:
4474
- $dataBaseHandle->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
4475
- break;
4476
- }
4477
-
4478
- try {
4479
- $res = $dataBaseHandle->query($sql);
4480
- $this->_affectedRows = $res->rowCount();
4481
- $this->_insertedId = $dataBaseHandle->lastInsertId();
4482
- } catch (PDOException $e) {
4483
- $result['message'] = '[ERROR] Mysql Query Error: ' . $e->getCode() . ', ' . $e->getMessage();
4484
- return $result;
4485
- }
4486
-
4487
- foreach ($this->noResult as $statement) {
4488
- if (!$res || strpos(strtolower(trim($sql)), $statement) === 0) {
4489
- $result['result'] = true;
4490
  return $result;
4491
- }
4492
  }
4493
 
4494
- $rows = array();
4495
- while (($row = $res->fetch()) !== false) {
4496
- $rows[] = $row;
 
 
 
4497
  }
4498
 
4499
- if (isset($_GET['disable_checks'])) {
4500
- $this->localQuery("SET SQL_MODE=IFNULL(@OLD_SQL_MODE,'')");
4501
- $this->localQuery("SET FOREIGN_KEY_CHECKS=IFNULL(@OLD_FOREIGN_KEY_CHECKS,0)");
 
 
 
4502
  }
4503
 
4504
- $result['result'] = $rows;
4505
-
4506
- unset($res);
4507
- return $result;
4508
- }
4509
-
4510
- /**
4511
- * @return string|int
4512
- */
4513
- public function getLastInsertId()
4514
- {
4515
- return $this->_insertedId;
4516
- }
4517
-
4518
- /**
4519
- * @return int
4520
- */
4521
- public function getAffectedRows()
4522
- {
4523
- return $this->_affectedRows;
4524
- }
4525
-
4526
- /**
4527
- * @return void
4528
- */
4529
- public function __destruct()
4530
- {
4531
- $this->dataBaseHandle = null;
4532
- }
4533
  }
4534
 
4535
 
4536
- define('M1_BRIDGE_VERSION', '25');
4537
  define('M1_BRIDGE_DOWNLOAD_LINK', 'https://api.api2cart.com/v1.0/bridge.download.file?update');
4538
  define('M1_BRIDGE_DIRECTORY_NAME', basename(getcwd()));
4539
 
4540
- ini_set('display_errors', 1);
4541
  if (substr(phpversion(), 0, 1) == 5) {
4542
- error_reporting(E_ALL & ~E_STRICT);
4543
  } else {
4544
- error_reporting(E_ALL);
4545
  }
4546
 
4547
  require_once 'config.php';
@@ -4552,16 +4547,17 @@ require_once 'config.php';
4552
  */
4553
  function stripslashes_array($array)
4554
  {
4555
- return is_array($array) ? array_map('stripslashes_array', $array) : stripslashes($array);
4556
  }
4557
 
4558
- function exceptions_error_handler($severity, $message, $filename, $lineno) {
4559
- if (error_reporting() == 0) {
4560
- return;
4561
- }
4562
- if (error_reporting() & $severity) {
4563
- throw new ErrorException($message, 0, $severity, $filename, $lineno);
4564
- }
 
4565
  }
4566
 
4567
  set_error_handler('exceptions_error_handler');
@@ -4571,54 +4567,57 @@ set_error_handler('exceptions_error_handler');
4571
  */
4572
  function getPHPExecutable()
4573
  {
4574
- $paths = explode(PATH_SEPARATOR, getenv('PATH'));
4575
- $paths[] = PHP_BINDIR;
4576
- foreach ($paths as $path) {
4577
- // we need this for XAMPP (Windows)
4578
- if (isset($_SERVER["WINDIR"]) && strstr($path, 'php.exe') && file_exists($path) && is_file($path)) {
4579
- return $path;
4580
- } else {
4581
- $phpExecutable = $path . DIRECTORY_SEPARATOR . "php" . (isset($_SERVER["WINDIR"]) ? ".exe" : "");
4582
- if (file_exists($phpExecutable) && is_file($phpExecutable)) {
4583
- return $phpExecutable;
4584
- }
4585
- }
4586
- }
4587
- return false;
4588
  }
4589
 
4590
  if (!isset($_SERVER)) {
4591
- $_GET = &$HTTP_GET_VARS;
4592
- $_POST = &$HTTP_POST_VARS;
4593
- $_ENV = &$HTTP_ENV_VARS;
4594
- $_SERVER = &$HTTP_SERVER_VARS;
4595
- $_COOKIE = &$HTTP_COOKIE_VARS;
4596
- $_REQUEST = array_merge($_GET, $_POST, $_COOKIE);
4597
  }
4598
 
4599
  if (get_magic_quotes_gpc()) {
4600
- $_COOKIE = stripslashes_array($_COOKIE);
4601
- $_FILES = stripslashes_array($_FILES);
4602
- $_GET = stripslashes_array($_GET);
4603
- $_POST = stripslashes_array($_POST);
4604
- $_REQUEST = stripslashes_array($_REQUEST);
4605
  }
4606
 
4607
- if (isset($_SERVER['SCRIPT_FILENAME'])) {
4608
- $scriptPath = $_SERVER['SCRIPT_FILENAME'];
4609
- if (isset($_SERVER['PATH_TRANSLATED']) && $_SERVER['PATH_TRANSLATED'] != "" ) {
4610
- $scriptPath = $_SERVER['PATH_TRANSLATED'];
4611
- }
4612
- define("M1_STORE_BASE_DIR", preg_replace('/[^\/\\\]*[\/\\\][^\/\\\]*$/', '', $scriptPath));
 
 
4613
  } else {
4614
- //Windows IIS
4615
- define("M1_STORE_BASE_DIR", preg_replace('/[^\/\\\]*[\/\\\][^\/\\\]*$/', '', realpath(dirname(__FILE__) . "/../")));
4616
  }
 
4617
  $adapter = new M1_Config_Adapter();
4618
  $bridge = new M1_Bridge($adapter->create());
4619
 
4620
  if (!$bridge->getLink()) {
4621
- die ('ERROR_BRIDGE_CANT_CONNECT_DB');
4622
  }
4623
 
4624
  $bridge->run();
1
  <?php
2
 
 
 
3
  /*-----------------------------------------------------------------------------+
4
  | MagneticOne |
5
  | Copyright (c) 2012 MagneticOne.com <contact@magneticone.com> |
46
  */
47
  class M1_Bridge_Action_Update
48
  {
49
+ private $_pathToTmpDir;
50
+ private $_pathToFile = __FILE__;
51
+
52
+ /**
53
+ * M1_Bridge_Action_Update constructor.
54
+ */
55
+ public function __construct()
56
+ {
57
+ $this->_pathToTmpDir = dirname(__FILE__) . DIRECTORY_SEPARATOR . "temp_c2c";
58
+ }
59
+
60
+ /**
61
+ * @param M1_Bridge $bridge
62
+ */
63
+ public function perform(M1_Bridge $bridge)
64
+ {
65
+ $response = new stdClass();
66
+ if (!($this->_checkBridgeDirPermission() && $this->_checkBridgeFilePermission())) {
67
+ $response->code = 1;
68
+ $response->message = "Bridge Update couldn't be performed. " .
69
+ "Please change permission for bridge folder to 777 and bridge.php file inside it to 666";
70
+ echo serialize($response);
71
+ die;
72
+ }
73
+
74
+ if (($data = $this->_downloadFile()) === false) {
75
+ $response->code = 1;
76
+ $response->message = "Bridge Version is outdated. Files couldn't be updated automatically. " .
77
+ "Please set write permission or re-upload files manually.";
78
+ echo serialize($response);
79
+ die;
80
+ }
81
+
82
+ if (!$this->_writeToFile($data, $this->_pathToFile)) {
83
+ $response->code = 1;
84
+ $response->message = "Couln't create file in temporary folder or file is write protected.";
85
+ echo serialize($response);
86
+ die;
87
+ }
88
+
89
+ $response->code = 0;
90
+ $response->message = "Bridge successfully updated to latest version";
91
+ echo json_encode($response);
92
+ die;
93
+ }
94
+
95
+ /**
96
+ * @param $uri
97
+ * @return stdClass
98
+ */
99
+ private function _fetch($uri)
100
+ {
101
+ $ch = curl_init();
102
+
103
+ curl_setopt($ch, CURLOPT_URL, $uri);
104
+ curl_setopt($ch, CURLOPT_HEADER, 0);
105
+ curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
106
+
107
+ $response = new stdClass();
108
+
109
+ $response->body = curl_exec($ch);
110
+ $response->httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
111
+ $response->contentType = curl_getinfo($ch, CURLINFO_CONTENT_TYPE);
112
+ $response->contentLength = curl_getinfo($ch, CURLINFO_CONTENT_LENGTH_DOWNLOAD);
113
+
114
+ curl_close($ch);
115
+
116
+ return $response;
117
+ }
118
+
119
+ /**
120
+ * @return bool
121
+ */
122
+ private function _checkBridgeDirPermission()
123
+ {
124
+ if (!is_writeable(dirname(__FILE__))) {
125
+ @chmod(dirname(__FILE__), 0777);
126
+ }
127
+ return is_writeable(dirname(__FILE__));
128
+ }
129
+
130
+ /**
131
+ * @return bool
132
+ */
133
+ private function _checkBridgeFilePermission()
134
+ {
135
+ $pathToFile = dirname(__FILE__) . DIRECTORY_SEPARATOR . "bridge.php";
136
+ if (!is_writeable($pathToFile)) {
137
+ @chmod($pathToFile, 0666);
138
+ }
139
+ return is_writeable($pathToFile);
140
+ }
141
+
142
+ /**
143
+ * @return bool
144
+ */
145
+ public function _createTempDir()
146
+ {
147
+ @mkdir($this->_pathToTmpDir, 0777);
148
+ return file_exists($this->_pathToTmpDir);
149
+ }
150
+
151
+ /**
152
+ * @return bool
153
+ */
154
+ public function _removeTempDir()
155
+ {
156
+ @unlink($this->_pathToTmpDir . DIRECTORY_SEPARATOR . "bridge.php_c2c");
157
+ @rmdir($this->_pathToTmpDir);
158
+ return !file_exists($this->_pathToTmpDir);
 
 
 
 
 
 
 
 
 
 
159
  }
 
 
160
 
161
+ /**
162
+ * @return bool|stdClass
163
+ */
164
+ private function _downloadFile()
165
+ {
166
+ $file = $this->_fetch(M1_BRIDGE_DOWNLOAD_LINK);
167
+ if ($file->httpCode == 200) {
168
+ return $file;
169
+ }
170
+ return false;
171
  }
172
 
173
+ /**
174
+ * @param $data
175
+ * @param $file
176
+ * @return bool
177
+ */
178
+ private function _writeToFile($data, $file)
179
+ {
180
+ if (function_exists("file_put_contents")) {
181
+ $bytes = file_put_contents($file, $data->body);
182
+ return $bytes == $data->contentLength;
183
+ }
184
+
185
+ $handle = @fopen($file, 'w+');
186
+ $bytes = fwrite($handle, $data->body);
187
+ @fclose($handle);
188
 
189
+ return $bytes == $data->contentLength;
190
 
191
+ }
192
 
193
  }
194
 
198
  class M1_Bridge_Action_Query
199
  {
200
 
201
+ /**
202
+ * @param M1_Bridge $bridge
203
+ * @return bool
204
+ */
205
+ public function perform(M1_Bridge $bridge)
206
+ {
207
+ if (isset($_POST['query']) && isset($_POST['fetchMode'])) {
208
+ $query = base64_decode($_POST['query']);
209
+
210
+ $res = $bridge->query($query, (int)$_POST['fetchMode']);
211
+
212
+ if (is_array($res['result']) || is_bool($res['result'])) {
213
+ $result = serialize(array(
214
+ 'res' => $res['result'],
215
+ 'fetchedFields' => @$res['fetchedFields'],
216
+ 'insertId' => $bridge->getLink()->getLastInsertId(),
217
+ 'affectedRows' => $bridge->getLink()->getAffectedRows(),
218
+ ));
219
+
220
+ echo base64_encode($result);
221
+ } else {
222
+ echo base64_encode($res['message']);
223
+ }
224
+ } else {
225
+ return false;
226
+ }
227
+ }
228
  }
229
 
230
  /**
233
  class M1_Bridge_Action_Getconfig
234
  {
235
 
236
+ /**
237
+ * @param $val
238
+ * @return int
239
+ */
240
+ private function parseMemoryLimit($val)
241
+ {
242
+ $valInt = (int)$val;
243
+ $last = strtolower($val[strlen($val) - 1]);
244
+
245
+ switch ($last) {
246
+ case 'g':
247
+ $valInt *= 1024;
248
+ case 'm':
249
+ $valInt *= 1024;
250
+ case 'k':
251
+ $valInt *= 1024;
252
+ }
253
+
254
+ return $valInt;
255
+ }
256
+
257
+ /**
258
+ * @return mixed
259
+ */
260
+ private function getMemoryLimit()
261
+ {
262
+ $memoryLimit = trim(@ini_get('memory_limit'));
263
+ if (strlen($memoryLimit) === 0) {
264
+ $memoryLimit = "0";
265
+ }
266
+ $memoryLimit = $this->parseMemoryLimit($memoryLimit);
267
+
268
+ $maxPostSize = trim(@ini_get('post_max_size'));
269
+ if (strlen($maxPostSize) === 0) {
270
+ $maxPostSize = "0";
271
+ }
272
+ $maxPostSize = $this->parseMemoryLimit($maxPostSize);
273
+
274
+ $suhosinMaxPostSize = trim(@ini_get('suhosin.post.max_value_length'));
275
+ if (strlen($suhosinMaxPostSize) === 0) {
276
+ $suhosinMaxPostSize = "0";
277
+ }
278
+ $suhosinMaxPostSize = $this->parseMemoryLimit($suhosinMaxPostSize);
279
+
280
+ if ($suhosinMaxPostSize == 0) {
281
+ $suhosinMaxPostSize = $maxPostSize;
282
+ }
283
+
284
+ if ($maxPostSize == 0) {
285
+ $suhosinMaxPostSize = $maxPostSize = $memoryLimit;
286
+ }
287
+
288
+ return min($suhosinMaxPostSize, $maxPostSize, $memoryLimit);
289
+ }
290
+
291
+ /**
292
+ * @return bool
293
+ */
294
+ private function isZlibSupported()
295
+ {
296
+ return function_exists('gzdecode');
297
+ }
298
+
299
+ /**
300
+ * @param $bridge
301
+ */
302
+ public function perform(M1_Bridge $bridge)
303
+ {
304
+ if (!defined("DEFAULT_LANGUAGE_ISO2")) {
305
+ define("DEFAULT_LANGUAGE_ISO2", ""); //variable for Interspire cart
306
+ }
307
+
308
+ $result = array(
309
+ "images" => array(
310
+ "imagesPath" => $bridge->config->imagesDir, // path to images folder - relative to store root
311
+ "categoriesImagesPath" => $bridge->config->categoriesImagesDir,
312
+ "categoriesImagesPaths" => $bridge->config->categoriesImagesDirs,
313
+ "productsImagesPath" => $bridge->config->productsImagesDir,
314
+ "productsImagesPaths" => $bridge->config->productsImagesDirs,
315
+ "manufacturersImagesPath" => $bridge->config->manufacturersImagesDir,
316
+ "manufacturersImagesPaths" => $bridge->config->manufacturersImagesDirs,
317
+ ),
318
+ "languages" => $bridge->config->languages,
319
+ "baseDirFs" => M1_STORE_BASE_DIR, // filesystem path to store root
320
+ "bridgeVersion" => M1_BRIDGE_VERSION,
321
+ "defaultLanguageIso2" => DEFAULT_LANGUAGE_ISO2,
322
+ "databaseName" => $bridge->config->dbname,
323
+ "memoryLimit" => $this->getMemoryLimit(),
324
+ "zlibSupported" => $this->isZlibSupported(),
325
+ //"orderStatus" => $bridge->config->orderStatus,
326
+ "cartVars" => $bridge->config->cartVars,
327
+ );
328
+
329
+ echo serialize($result);
330
+ }
331
 
332
  }
333
 
337
  class M1_Bridge_Action_Batchsavefile extends M1_Bridge_Action_Savefile
338
  {
339
 
340
+ /**
341
+ * @param M1_Bridge $bridge
342
+ */
343
+ public function perform(M1_Bridge $bridge)
344
+ {
345
+ $result = array();
346
+
347
+ foreach ($_POST['files'] as $fileInfo) {
348
+ $result[$fileInfo['id']] = $this->_saveFile(
349
+ $fileInfo['source'],
350
+ $fileInfo['target'],
351
+ (int)$fileInfo['width'],
352
+ (int)$fileInfo['height'],
353
+ $fileInfo['local_source']
354
+ );
355
+ }
356
 
357
+ echo serialize($result);
 
 
 
 
 
 
 
358
  }
359
 
 
 
 
360
  }
361
 
362
  /**
365
  class M1_Bridge_Action_Deleteimages
366
  {
367
 
368
+ /**
369
+ * @param M1_Bridge $bridge
370
+ */
371
+ public function perform(M1_Bridge $bridge)
372
+ {
373
+ switch ($bridge->config->cartType) {
374
+ case "Pinnacle361":
375
+ $this->_pinnacleDeleteImages($bridge);
376
+ break;
377
+ case "Prestashop11":
378
+ $this->_prestaShopDeleteImages($bridge);
379
+ break;
380
+ case 'Summercart3' :
381
+ $this->_summercartDeleteImages($bridge);
382
+ break;
383
+ }
384
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
385
 
386
+ /**
387
+ * @param $bridge
388
+ */
389
+ private function _pinnacleDeleteImages(M1_Bridge $bridge)
390
+ {
391
+ $dirs = array(
392
+ M1_STORE_BASE_DIR . $bridge->config->imagesDir . 'catalog/',
393
+ M1_STORE_BASE_DIR . $bridge->config->imagesDir . 'manufacturers/',
394
+ M1_STORE_BASE_DIR . $bridge->config->imagesDir . 'products/',
395
+ M1_STORE_BASE_DIR . $bridge->config->imagesDir . 'products/thumbs/',
396
+ M1_STORE_BASE_DIR . $bridge->config->imagesDir . 'products/secondary/',
397
+ M1_STORE_BASE_DIR . $bridge->config->imagesDir . 'products/preview/',
398
+ );
399
+
400
+ $ok = true;
401
+
402
+ foreach ($dirs as $dir) {
403
+
404
+ if (!file_exists($dir)) {
405
+ continue;
406
+ }
407
 
408
+ $dirHandle = opendir($dir);
409
+
410
+ while (false !== ($file = readdir($dirHandle))) {
411
+ if ($file != "." && $file != ".." && !preg_match("/^readme\.txt?$/", $file) && !preg_match("/\.bak$/i",
412
+ $file)
413
+ ) {
414
+ $file_path = $dir . $file;
415
+ if (is_file($file_path)) {
416
+ if (!rename($file_path, $file_path . ".bak")) {
417
+ $ok = false;
418
+ }
419
+ }
420
+ }
421
+ }
422
 
423
+ closedir($dirHandle);
424
 
 
 
 
 
 
 
425
  }
 
 
 
426
 
427
+ if ($ok) {
428
+ print "OK";
429
+ } else {
430
+ print "ERROR";
431
+ }
432
  }
433
 
434
+ /**
435
+ * @param $bridge
436
+ */
437
+ private function _prestaShopDeleteImages(M1_Bridge $bridge)
438
+ {
439
+ $dirs = array(
440
+ M1_STORE_BASE_DIR . $bridge->config->imagesDir . 'c/',
441
+ M1_STORE_BASE_DIR . $bridge->config->imagesDir . 'p/',
442
+ M1_STORE_BASE_DIR . $bridge->config->imagesDir . 'm/',
443
+ );
444
 
445
+ $ok = true;
 
 
 
 
 
 
 
 
 
446
 
447
+ foreach ($dirs as $dir) {
448
 
449
+ if (!file_exists($dir)) {
450
+ continue;
451
+ }
452
 
453
+ $dirHandle = opendir($dir);
454
+
455
+ while (false !== ($file = readdir($dirHandle))) {
456
+ if ($file != "." && $file != ".." && preg_match("/(\d+).*\.jpg?$/", $file)) {
457
+ $file_path = $dir . $file;
458
+ if (is_file($file_path)) {
459
+ if (!rename($file_path, $file_path . ".bak")) {
460
+ $ok = false;
461
+ }
462
+ }
463
+ }
464
+ }
465
 
466
+ closedir($dirHandle);
467
 
 
 
 
 
 
 
468
  }
 
 
 
469
 
470
+ if ($ok) {
471
+ print "OK";
472
+ } else {
473
+ print "ERROR";
474
+ }
475
  }
476
 
477
+ /**
478
+ * @param $bridge
479
+ */
480
+ private function _summercartDeleteImages(M1_Bridge $bridge)
481
+ {
482
+ $dirs = array(
483
+ M1_STORE_BASE_DIR . $bridge->config->imagesDir . 'categoryimages/',
484
+ M1_STORE_BASE_DIR . $bridge->config->imagesDir . 'manufacturer/',
485
+ M1_STORE_BASE_DIR . $bridge->config->imagesDir . 'productimages/',
486
+ M1_STORE_BASE_DIR . $bridge->config->imagesDir . 'productthumbs/',
487
+ M1_STORE_BASE_DIR . $bridge->config->imagesDir . 'productboximages/',
488
+ M1_STORE_BASE_DIR . $bridge->config->imagesDir . 'productlargeimages/',
489
+ );
490
+
491
+ $ok = true;
492
+
493
+ foreach ($dirs as $dir) {
494
+
495
+ if (!file_exists($dir)) {
496
+ continue;
497
+ }
498
 
499
+ $dirHandle = opendir($dir);
500
+
501
+ while (false !== ($file = readdir($dirHandle))) {
502
+ if (($file != ".") && ($file != "..") && !preg_match("/\.bak$/i", $file)) {
503
+ $file_path = $dir . $file;
504
+ if (is_file($file_path)) {
505
+ if (!rename($file_path, $file_path . ".bak")) {
506
+ $ok = false;
507
+ }
508
+ }
509
+ }
510
+ }
511
 
512
+ closedir($dirHandle);
513
 
 
 
 
 
 
 
514
  }
 
 
 
515
 
516
+ if ($ok) {
517
+ print "OK";
518
+ } else {
519
+ print "ERROR";
520
+ }
521
  }
 
 
 
 
522
  }
523
 
524
  /**
527
  class M1_Bridge_Action_Cubecart
528
  {
529
 
530
+ /**
531
+ * @param M1_Bridge $bridge
532
+ */
533
+ public function perform(M1_Bridge $bridge)
534
+ {
535
+ $dirHandle = opendir(M1_STORE_BASE_DIR . 'language/');
536
 
537
+ $languages = array();
538
 
539
+ while ($dirEntry = readdir($dirHandle)) {
540
+ if (!is_dir(M1_STORE_BASE_DIR . 'language/' . $dirEntry) || $dirEntry == '.'
541
+ || $dirEntry == '..' || strpos($dirEntry, "_") !== false
542
+ ) {
543
+ continue;
544
+ }
545
 
546
+ $lang['id'] = $dirEntry;
547
+ $lang['iso2'] = $dirEntry;
548
 
549
+ $cnfile = "config.inc.php";
550
 
551
+ if (!file_exists(M1_STORE_BASE_DIR . 'language/' . $dirEntry . '/' . $cnfile)) {
552
+ $cnfile = "config.php";
553
+ }
554
 
555
+ if (!file_exists(M1_STORE_BASE_DIR . 'language/' . $dirEntry . '/' . $cnfile)) {
556
+ continue;
557
+ }
558
 
559
+ $str = file_get_contents(M1_STORE_BASE_DIR . 'language/' . $dirEntry . '/' . $cnfile);
560
+ preg_match("/" . preg_quote('$langName') . "[\s]*=[\s]*[\"\'](.*)[\"\'];/", $str, $match);
561
 
562
+ if (isset($match[1])) {
563
+ $lang['name'] = $match[1];
564
+ $languages[] = $lang;
565
+ }
566
+ }
567
 
568
+ echo serialize($languages);
569
+ }
570
  }
571
 
572
  /**
575
  class M1_Bridge_Action_Mysqlver
576
  {
577
 
578
+ /**
579
+ * @param $bridge
580
+ */
581
+ public function perform(M1_Bridge $bridge)
582
+ {
583
+ $message = array();
584
+ preg_match('/^(\d+)\.(\d+)\.(\d+)/', mysql_get_server_info($bridge->getLink()), $message);
585
+ echo sprintf("%d%02d%02d", $message[1], $message[2], $message[3]);
586
+ }
587
  }
588
 
589
  /**
592
  class M1_Bridge_Action_Clearcache
593
  {
594
 
595
+ /**
596
+ * @param M1_Bridge $bridge
597
+ */
598
+ public function perform(M1_Bridge $bridge)
599
+ {
600
+ switch ($bridge->config->cartType) {
601
+ case "Cubecart":
602
+ $this->_CubecartClearCache();
603
+ break;
604
+ case "Prestashop11":
605
+ $this->_PrestashopClearCache();
606
+ break;
607
+ case "Interspire":
608
+ $this->_InterspireClearCache();
609
+ break;
610
+ case "Opencart14" :
611
+ $this->_OpencartClearCache();
612
+ break;
613
+ case "XtcommerceVeyton" :
614
+ $this->_Xtcommerce4ClearCache();
615
+ break;
616
+ case "Ubercart" :
617
+ $this->_ubercartClearCache();
618
+ break;
619
+ case "Tomatocart" :
620
+ $this->_tomatocartClearCache();
621
+ break;
622
+ case "Virtuemart113" :
623
+ $this->_virtuemartClearCache();
624
+ break;
625
+ case "Magento1212" :
626
+ //$this->_magentoClearCache();
627
+ break;
628
+ case "Oscommerce3":
629
+ $this->_Oscommerce3ClearCache();
630
+ break;
631
+ case "Oxid":
632
+ $this->_OxidClearCache();
633
+ break;
634
+ case "XCart":
635
+ $this->_XcartClearCache();
636
+ break;
637
+ case "Cscart203":
638
+ $this->_CscartClearCache();
639
+ break;
640
+ case "Prestashop15":
641
+ $this->_Prestashop15ClearCache();
642
+ break;
643
+ case "Gambio":
644
+ $this->_GambioClearCache();
645
+ break;
646
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
647
  }
 
648
 
649
+ /**
650
+ * @param array $dirs
651
+ * @param string $fileExclude - name file in format pregmatch
652
+ * @return bool
653
+ */
654
+ private function _removeGarbage($dirs = array(), $fileExclude = '')
655
+ {
656
+ $result = true;
657
 
658
+ foreach ($dirs as $dir) {
 
659
 
660
+ if (!file_exists($dir)) {
661
+ continue;
 
 
 
662
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
663
 
664
+ $dirHandle = opendir($dir);
 
 
 
 
 
 
 
665
 
666
+ while (false !== ($file = readdir($dirHandle))) {
667
+ if ($file == "." || $file == "..") {
668
+ continue;
669
+ }
670
 
671
+ if ((trim($fileExclude) != '') && preg_match("/^" . $fileExclude . "?$/", $file)) {
672
+ continue;
673
+ }
 
 
 
 
674
 
675
+ if (is_dir($dir . $file)) {
676
+ continue;
677
+ }
678
 
679
+ if (!unlink($dir . $file)) {
680
+ $result = false;
681
+ }
682
+ }
683
 
684
+ closedir($dirHandle);
 
685
  }
686
 
687
+ if ($result) {
688
+ echo 'OK';
689
+ } else {
690
+ echo 'ERROR';
691
+ }
692
 
693
+ return $result;
694
+ }
 
 
 
 
695
 
696
+ private function _magentoClearCache()
697
+ {
698
+ chdir('../');
699
+
700
+ $indexes = array(
701
+ 'catalog_product_attribute',
702
+ 'catalog_product_price',
703
+ 'catalog_url',
704
+ 'catalog_product_flat',
705
+ 'catalog_category_flat',
706
+ 'catalog_category_product',
707
+ 'catalogsearch_fulltext',
708
+ 'cataloginventory_stock',
709
+ 'tag_summary'
710
+ );
711
+
712
+ $phpExecutable = getPHPExecutable();
713
+ if ($phpExecutable) {
714
+ foreach ($indexes as $index) {
715
+ exec($phpExecutable . " shell/indexer.php --reindex $index", $out);
716
+ }
717
+ echo 'OK';
718
  } else {
719
+ echo 'Error: can not find PHP executable file.';
 
720
  }
 
 
 
 
 
 
721
 
722
+ echo 'OK';
723
+ }
 
 
 
724
 
725
+ private function _InterspireClearCache()
726
+ {
727
+ $res = true;
728
+ $file = M1_STORE_BASE_DIR . 'cache' . DIRECTORY_SEPARATOR . 'datastore' . DIRECTORY_SEPARATOR . 'RootCategories.php';
729
+ if (file_exists($file)) {
730
+ if (!unlink($file)) {
731
+ $res = false;
732
+ }
733
+ }
734
+ if ($res === true) {
735
+ echo "OK";
736
+ } else {
737
+ echo "ERROR";
738
+ }
739
+ }
740
 
741
+ private function _CubecartClearCache()
742
+ {
743
+ $ok = true;
 
 
 
 
 
744
 
745
+ if (file_exists(M1_STORE_BASE_DIR . 'cache')) {
746
+ $dirHandle = opendir(M1_STORE_BASE_DIR . 'cache/');
 
 
 
747
 
748
+ while (false !== ($file = readdir($dirHandle))) {
749
+ if ($file != "." && $file != ".." && !preg_match("/^index\.html?$/",
750
+ $file) && !preg_match("/^\.htaccess?$/", $file)
751
+ ) {
752
+ if (is_file(M1_STORE_BASE_DIR . 'cache/' . $file)) {
753
+ if (!unlink(M1_STORE_BASE_DIR . 'cache/' . $file)) {
754
+ $ok = false;
755
+ }
756
+ }
757
+ }
758
+ }
759
 
760
+ closedir($dirHandle);
761
+ }
762
 
763
+ if (file_exists(M1_STORE_BASE_DIR . 'includes/extra/admin_cat_cache.txt')) {
764
+ unlink(M1_STORE_BASE_DIR . 'includes/extra/admin_cat_cache.txt');
765
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
766
 
767
+ if ($ok) {
768
+ echo 'OK';
769
+ } else {
770
+ echo 'ERROR';
771
+ }
772
  }
773
 
774
+ private function _PrestashopClearCache()
775
+ {
776
+ $dirs = array(
777
+ M1_STORE_BASE_DIR . 'tools/smarty/compile/',
778
+ M1_STORE_BASE_DIR . 'tools/smarty/cache/',
779
+ M1_STORE_BASE_DIR . 'img/tmp/'
780
+ );
781
 
782
+ $this->_removeGarbage($dirs, 'index\.php');
 
783
  }
784
 
785
+ private function _OpencartClearCache()
786
+ {
787
+ $dirs = array(
788
+ M1_STORE_BASE_DIR . 'system/cache/',
789
+ );
790
 
791
+ $this->_removeGarbage($dirs, 'index\.html');
 
792
  }
793
 
794
+ private function _Xtcommerce4ClearCache()
795
+ {
796
+ $dirs = array(
797
+ M1_STORE_BASE_DIR . 'cache/',
798
+ );
799
 
800
+ $this->_removeGarbage($dirs, 'index\.html');
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
801
  }
802
 
803
+ private function _ubercartClearCache()
804
+ {
805
+ $dirs = array(
806
+ M1_STORE_BASE_DIR . 'sites/default/files/imagecache/product/',
807
+ M1_STORE_BASE_DIR . 'sites/default/files/imagecache/product_full/',
808
+ M1_STORE_BASE_DIR . 'sites/default/files/imagecache/product_list/',
809
+ M1_STORE_BASE_DIR . 'sites/default/files/imagecache/uc_category/',
810
+ M1_STORE_BASE_DIR . 'sites/default/files/imagecache/uc_thumbnail/',
811
+ );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
812
 
813
+ $this->_removeGarbage($dirs);
814
+ }
815
 
816
+ private function _tomatocartClearCache()
817
+ {
818
+ $dirs = array(
819
+ M1_STORE_BASE_DIR . 'includes/work/',
820
+ );
 
 
 
 
 
 
821
 
822
+ $this->_removeGarbage($dirs, '\.htaccess');
 
823
  }
824
 
825
+ /**
826
+ * Try chage permissions actually :)
827
+ */
828
+ private function _virtuemartClearCache()
829
+ {
830
+ $pathToImages = 'components/com_virtuemart/shop_image';
831
+
832
+ $dirParts = explode("/", $pathToImages);
833
+ $path = M1_STORE_BASE_DIR;
834
+ foreach ($dirParts as $item) {
835
+ if ($item == '') {
836
+ continue;
837
+ }
838
+
839
+ $path .= $item . DIRECTORY_SEPARATOR;
840
+ @chmod($path, 0755);
841
+ }
842
  }
843
 
844
+ private function _Oscommerce3ClearCache()
845
+ {
846
+ $dirs = array(
847
+ M1_STORE_BASE_DIR . 'osCommerce/OM/Work/Cache/',
848
+ );
849
 
850
+ $this->_removeGarbage($dirs, '\.htaccess');
851
+ }
852
 
853
+ private function _GambioClearCache()
854
+ {
855
+ $dirs = array(
856
+ M1_STORE_BASE_DIR . 'cache/',
857
+ );
858
 
859
+ $this->_removeGarbage($dirs, 'index\.html');
860
+ }
861
 
862
+ private function _OxidClearCache()
863
+ {
864
+ $dirs = array(
865
+ M1_STORE_BASE_DIR . 'tmp/',
866
+ );
867
 
868
+ $this->_removeGarbage($dirs, '\.htaccess');
869
+ }
870
 
871
+ private function _XcartClearCache()
872
+ {
873
+ $dirs = array(
874
+ M1_STORE_BASE_DIR . 'var/cache/',
875
+ );
 
 
 
 
876
 
877
+ $this->_removeGarbage($dirs, '\.htaccess');
 
878
  }
879
 
880
+ private function _CscartClearCache()
881
+ {
882
+ $dir = M1_STORE_BASE_DIR . 'var/cache/';
883
+ $res = $this->removeDirRec($dir);
 
884
 
885
+ if ($res) {
886
+ echo 'OK';
887
+ } else {
888
+ echo 'ERROR';
889
+ }
890
  }
891
 
892
+ private function _Prestashop15ClearCache()
893
+ {
894
+ $dirs = array(
895
+ M1_STORE_BASE_DIR . 'cache/smarty/compile/',
896
+ M1_STORE_BASE_DIR . 'cache/smarty/cache/',
897
+ M1_STORE_BASE_DIR . 'img/tmp/'
898
+ );
899
 
900
+ $this->_removeGarbage($dirs, 'index\.php');
901
+ }
 
 
 
 
 
 
 
 
 
 
 
 
902
 
903
+ /**
904
+ * @param $dir
905
+ * @return bool
906
+ */
907
+ private function removeDirRec($dir)
908
+ {
909
+ $result = true;
910
+
911
+ if ($objs = glob($dir . "/*")) {
912
+ foreach ($objs as $obj) {
913
+ if (is_dir($obj)) {
914
+ //print "IS DIR! START RECURSIVE FUNCTION.\n";
915
+ $this->removeDirRec($obj);
916
+ } else {
917
+ if (!unlink($obj)) {
918
+ //print "!UNLINK FILE: ".$obj."\n";
919
+ $result = false;
920
+ }
921
+ }
922
+ }
923
+ }
924
+ if (!rmdir($dir)) {
925
+ //print "ERROR REMOVE DIR: ".$dir."\n";
926
+ $result = false;
927
+ }
928
 
929
+ return $result;
 
930
  }
931
+ }
932
+
933
+ class M1_Bridge_Action_Multiquery
934
+ {
935
 
936
+ protected $_lastInsertIds = array();
937
+ protected $_result = false;
938
 
939
+ /**
940
+ * @param M1_Bridge $bridge
941
+ * @return bool|null
942
+ */
943
+ public function perform(M1_Bridge $bridge)
944
+ {
945
+ if (isset($_POST['queries']) && isset($_POST['fetchMode'])) {
946
 
947
+ $queries = unserialize(base64_decode($_POST['queries']));
948
+ $result = false;
949
+ $count = 0;
950
+
951
+ foreach ($queries as $queryId => $query) {
952
+
953
+ if ($count++ > 0) {
954
+ $query = preg_replace_callback('/_A2C_LAST_\{([a-zA-Z0-9_\-]{1,32})\}_INSERT_ID_/',
955
+ array($this, '_replace'), $query);
956
+ $query = preg_replace_callback('/A2C_USE_FIELD_\{([\w\d\s\-]+)\}_FROM_\{([a-zA-Z0-9_\-]{1,32})\}_QUERY/',
957
+ array($this, '_replaceWithValues'), $query);
958
+ }
959
+
960
+ $res = $bridge->query($query, (int)$_POST['fetchMode']);
961
+ if (is_array($res['result']) || is_bool($res['result'])) {
962
+
963
+ $queryRes = array(
964
+ 'res' => $res['result'],
965
+ 'fetchedFields' => @$res['fetchedFields'],
966
+ 'insertId' => $bridge->getLink()->getLastInsertId(),
967
+ 'affectedRows' => $bridge->getLink()->getAffectedRows(),
968
+ );
969
+
970
+ $this->_result[$queryId] = $queryRes;
971
+ $this->_lastInsertIds[$queryId] = $queryRes['insertId'];
972
+
973
+ } else {
974
+ echo base64_encode($res['message']);
975
+ return false;
976
+ }
977
+ }
978
+ echo base64_encode(serialize($this->_result));
979
+ } else {
980
+ return false;
981
+ }
982
  }
983
 
984
+ protected function _replace($matches)
985
+ {
986
+ return $this->_lastInsertIds[$matches[1]];
987
+ }
988
 
989
+ protected function _replaceWithValues($matches)
990
+ {
991
+ $values = array();
992
+ if (isset($this->_result[$matches[2]]['res'])) {
993
+ foreach ($this->_result[$matches[2]]['res'] as $row) {
994
+ $values[] = addslashes($row[$matches[1]]);
995
+ }
996
+ }
997
 
998
+ return '"' . implode('","', array_unique($values)) . '"';
999
+ }
1000
 
 
 
1001
  }
1002
 
1003
  /**
1004
+ * Class M1_Bridge_Action_Basedirfs
 
 
 
1005
  */
1006
+ class M1_Bridge_Action_Basedirfs
 
1007
  {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1008
 
1009
+ /**
1010
+ * @param M1_Bridge $bridge
1011
+ */
1012
+ public function perform(M1_Bridge $bridge)
1013
+ {
1014
+ echo M1_STORE_BASE_DIR;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1015
  }
1016
+ }
1017
 
1018
+ /**
1019
+ * Class M1_Bridge_Action_Phpinfo
1020
+ */
1021
+ class M1_Bridge_Action_Phpinfo
1022
+ {
1023
 
1024
+ /**
1025
+ * @param M1_Bridge $bridge
1026
+ */
1027
+ public function perform(M1_Bridge $bridge)
1028
+ {
1029
+ phpinfo();
 
 
 
 
 
 
 
1030
  }
1031
+ }
1032
 
 
1033
 
1034
+ /**
1035
+ * Class M1_Bridge_Action_Savefile
1036
+ */
1037
+ class M1_Bridge_Action_Savefile
1038
+ {
1039
+ protected $_imageType = null;
 
 
1040
 
1041
+ /**
1042
+ * @param $bridge
1043
+ */
1044
+ public function perform(M1_Bridge $bridge)
1045
+ {
1046
+ $source = $_POST['src'];
1047
+ $destination = $_POST['dst'];
1048
+ $width = (int)$_POST['width'];
1049
+ $height = (int)$_POST['height'];
1050
+ $local = $_POST['local_source'];
1051
 
1052
+ echo $this->_saveFile($source, $destination, $width, $height, $local);
 
 
1053
  }
1054
 
1055
+ /**
1056
+ * @param $source
1057
+ * @param $destination
1058
+ * @param $width
1059
+ * @param $height
1060
+ * @param string $local
1061
+ * @return string
1062
+ */
1063
+ public function _saveFile($source, $destination, $width, $height, $local = '')
1064
+ {
1065
+ if (trim($local) != '') {
1066
+
1067
+ if ($this->_copyLocal($local, $destination, $width, $height)) {
1068
+ return "OK";
1069
+ }
1070
+
1071
+ }
1072
+
1073
+ if (!preg_match('/^https?:\/\//i', $source)) {
1074
+ $result = $this->_createFile($source, $destination);
1075
+ } elseif ($this->_isSameHost($source)) {
1076
+ $result = $this->_saveFileLocal($source, $destination);
1077
+ } else {
1078
+ $result = $this->_saveFileCurl($source, $destination);
1079
+ }
1080
+
1081
+ if ($result != "OK") {
1082
+ return $result;
1083
+ }
1084
+
1085
+ $destination = M1_STORE_BASE_DIR . $destination;
1086
+
1087
+ if ($width != 0 && $height != 0) {
1088
+ $this->_scaled2($destination, $width, $height);
1089
+ }
1090
+
1091
+ if ($this->cartType == "Prestashop11") {
1092
+ // convert destination.gif(png) to destination.jpg
1093
+ $imageGd = $this->_loadImage($destination);
1094
+
1095
+ if ($imageGd === false) {
1096
+ return $result;
1097
+ }
1098
+
1099
+ if (!$this->_convert($imageGd, $destination, IMAGETYPE_JPEG, 'jpg')) {
1100
+ return "CONVERT FAILED";
1101
+ }
1102
+ }
1103
+
1104
+ return $result;
1105
  }
1106
 
1107
+ /**
1108
+ * @param $source
1109
+ * @param $destination
1110
+ * @param $width
1111
+ * @param $height
1112
+ * @return bool
1113
+ */
1114
+ private function _copyLocal($source, $destination, $width, $height)
1115
+ {
1116
+ $source = M1_STORE_BASE_DIR . $source;
1117
+ $destination = M1_STORE_BASE_DIR . $destination;
1118
+
1119
+ if (!@copy($source, $destination)) {
1120
+ return false;
1121
+ }
1122
+
1123
+ if ($width != 0 && $height != 0) {
1124
+ $this->_scaled2($destination, $width, $height);
1125
+ }
1126
+
1127
+ return true;
1128
  }
1129
 
1130
+ /**
1131
+ * @param $filename
1132
+ * @param bool $skipJpg
1133
+ * @return bool|resource
1134
+ */
1135
+ private function _loadImage($filename, $skipJpg = true)
1136
+ {
1137
+ $imageInfo = @getimagesize($filename);
1138
+ if ($imageInfo === false) {
1139
+ return false;
1140
+ }
1141
+
1142
+ $this->_imageType = $imageInfo[2];
1143
+
1144
+ switch ($this->_imageType) {
1145
+ case IMAGETYPE_JPEG:
1146
+ $image = imagecreatefromjpeg($filename);
1147
+ break;
1148
+ case IMAGETYPE_GIF:
1149
+ $image = imagecreatefromgif($filename);
1150
+ break;
1151
+ case IMAGETYPE_PNG:
1152
+ $image = imagecreatefrompng($filename);
1153
+ break;
1154
+ default:
1155
+ return false;
1156
+ }
1157
+
1158
+ if ($skipJpg && ($this->_imageType == IMAGETYPE_JPEG)) {
1159
+ return false;
1160
+ }
1161
+
1162
+ return $image;
1163
  }
1164
 
1165
+ /**
1166
+ * @param $image
1167
+ * @param $filename
1168
+ * @param int $imageType
1169
+ * @param int $compression
1170
+ * @param null $permissions
1171
+ * @return bool
1172
+ */
1173
+ private function _saveImage($image, $filename, $imageType = IMAGETYPE_JPEG, $compression = 85, $permissions = null)
1174
+ {
1175
+ $result = true;
1176
+ if ($imageType == IMAGETYPE_JPEG) {
1177
+ $result = imagejpeg($image, $filename, $compression);
1178
+ } elseif ($imageType == IMAGETYPE_GIF) {
1179
+ $result = imagegif($image, $filename);
1180
+ } elseif ($imageType == IMAGETYPE_PNG) {
1181
+ $result = imagepng($image, $filename);
1182
+ }
1183
+
1184
+ if ($permissions != null) {
1185
+ chmod($filename, $permissions);
1186
+ }
1187
+
1188
+ imagedestroy($image);
1189
+
1190
+ return $result;
1191
  }
1192
 
1193
+ /**
1194
+ * @param $source
1195
+ * @param $destination
1196
+ * @return string
1197
+ */
1198
+ private function _createFile($source, $destination)
1199
+ {
1200
+ if ($this->_createDir(dirname($destination)) !== false) {
1201
+ $destination = M1_STORE_BASE_DIR . $destination;
1202
+ $body = base64_decode($source);
1203
+ if ($body === false || file_put_contents($destination, $body) === false) {
1204
+ return '[BRIDGE ERROR] File save failed!';
1205
+ }
1206
+
1207
+ return 'OK';
1208
+ }
1209
+
1210
+ return '[BRIDGE ERROR] Directory creation failed!';
1211
  }
1212
 
1213
+ /**
1214
+ * @param $source
1215
+ * @param $destination
1216
+ * @return string
1217
+ */
1218
+ private function _saveFileLocal($source, $destination)
1219
+ {
1220
+ $srcInfo = parse_url($source);
1221
+ $src = rtrim($_SERVER['DOCUMENT_ROOT'], "/") . $srcInfo['path'];
1222
+
1223
+ if ($this->_createDir(dirname($destination)) !== false) {
1224
+ $dst = M1_STORE_BASE_DIR . $destination;
1225
+
1226
+ if (!@copy($src, $dst)) {
1227
+ return $this->_saveFileCurl($source, $destination);
1228
+ }
1229
+
1230
+ } else {
1231
+ return "[BRIDGE ERROR] Directory creation failed!";
1232
+ }
1233
 
1234
+ return "OK";
1235
+ }
1236
 
1237
+ /**
1238
+ * @param $source
1239
+ * @param $destination
1240
+ * @return string
1241
+ */
1242
+ private function _saveFileCurl($source, $destination)
1243
+ {
1244
+ $source = $this->_escapeSource($source);
1245
+ if ($this->_createDir(dirname($destination)) !== false) {
1246
+ $destination = M1_STORE_BASE_DIR . $destination;
1247
+
1248
+ $ch = curl_init();
1249
+ curl_setopt($ch, CURLOPT_URL, $source);
1250
+ curl_setopt($ch, CURLOPT_HEADER, 0);
1251
+ curl_setopt($ch, CURLOPT_TIMEOUT, 60);
1252
+ curl_setopt($ch, CURLOPT_USERAGENT,
1253
+ "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1");
1254
+ curl_setopt($ch, CURLOPT_NOBODY, true);
1255
+ curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
1256
+ curl_exec($ch);
1257
+ $httpResponseCode = (int)curl_getinfo($ch, CURLINFO_HTTP_CODE);
1258
+
1259
+ if ($httpResponseCode != 200) {
1260
+ curl_close($ch);
1261
+ return "[BRIDGE ERROR] Bad response received from source, HTTP code $httpResponseCode!";
1262
+ }
1263
 
1264
+ $dst = @fopen($destination, "wb");
1265
+ if ($dst === false) {
1266
+ return "[BRIDGE ERROR] Can't create $destination!";
1267
+ }
1268
+ curl_setopt($ch, CURLOPT_NOBODY, false);
1269
+ curl_setopt($ch, CURLOPT_FILE, $dst);
1270
+ curl_setopt($ch, CURLOPT_HTTPGET, true);
1271
+ curl_exec($ch);
1272
+ if (($error_no = curl_errno($ch)) != CURLE_OK) {
1273
+ return "[BRIDGE ERROR] $error_no: " . curl_error($ch);
1274
+ }
1275
+ curl_close($ch);
1276
+ @chmod($destination, 0755);
1277
 
1278
+ return "OK";
 
 
 
 
 
 
1279
 
1280
+ } else {
1281
+ return "[BRIDGE ERROR] Directory creation failed!";
1282
+ }
 
 
 
 
1283
  }
1284
 
1285
+ /**
1286
+ * @param $source
1287
+ * @return mixed
1288
+ */
1289
+ private function _escapeSource($source)
1290
+ {
1291
+ return str_replace(" ", "%20", $source);
1292
+ }
1293
 
1294
+ /**
1295
+ * @param $dir
1296
+ * @return bool
1297
+ */
1298
+ private function _createDir($dir)
1299
+ {
1300
+ $dirParts = explode("/", $dir);
1301
+ $path = M1_STORE_BASE_DIR;
1302
+ foreach ($dirParts as $item) {
1303
+ if ($item == '') {
1304
+ continue;
1305
+ }
1306
+ $path .= $item . DIRECTORY_SEPARATOR;
1307
+ if (!is_dir($path)) {
1308
+ $res = @mkdir($path);
1309
+ if (!$res) {
1310
+ return false;
1311
+ }
1312
+ }
1313
+ @chmod($path, 0777);
1314
+ }
1315
+ return true;
1316
+ }
1317
 
1318
+ /**
1319
+ * @param $source
1320
+ * @return bool
1321
+ */
1322
+ private function _isSameHost($source)
1323
+ {
1324
+ $srcInfo = parse_url($source);
1325
 
1326
+ if (preg_match('/\.php$/', $srcInfo['path'])) {
1327
+ return false;
1328
+ }
1329
+
1330
+ $hostInfo = parse_url("http://" . $_SERVER['HTTP_HOST']);
1331
+ if (@$srcInfo['host'] == $hostInfo['host']) {
1332
+ return true;
1333
+ }
1334
+
1335
+ return false;
1336
+ }
1337
+
1338
+ /**
1339
+ * @param resource $image - GD image object
1340
+ * @param string $filename - store sorce pathfile ex. M1_STORE_BASE_DIR . '/img/c/2.gif';
1341
+ * @param int $type - IMAGETYPE_JPEG, IMAGETYPE_GIF or IMAGETYPE_PNG
1342
+ * @param string $extension - file extension, this use for jpg or jpeg extension in prestashop
1343
+ *
1344
+ * @return true if success or false if no
1345
+ */
1346
+ private function _convert($image, $filename, $type = IMAGETYPE_JPEG, $extension = '')
1347
+ {
1348
+ $end = pathinfo($filename, PATHINFO_EXTENSION);
1349
+
1350
+ if ($extension == '') {
1351
+ $extension = image_type_to_extension($type, false);
1352
+ }
1353
+
1354
+ if ($end == $extension) {
1355
+ return true;
1356
+ }
1357
+
1358
+ $width = imagesx($image);
1359
+ $height = imagesy($image);
1360
+
1361
+ $newImage = imagecreatetruecolor($width, $height);
1362
+
1363
+ /* Allow to keep nice look even if resized */
1364
+ $white = imagecolorallocate($newImage, 255, 255, 255);
1365
+ imagefill($newImage, 0, 0, $white);
1366
+ imagecopyresampled($newImage, $image, 0, 0, 0, 0, $width, $height, $width, $height);
1367
+ imagecolortransparent($newImage, $white);
1368
+
1369
+ $pathSave = rtrim($filename, $end);
1370
+
1371
+ $pathSave .= $extension;
1372
+
1373
+ return $this->_saveImage($newImage, $pathSave, $type);
1374
+ }
1375
+
1376
+ /**
1377
+ * @param $destination
1378
+ * @param $width
1379
+ * @param $height
1380
+ * @return string|void
1381
+ */
1382
+ private function _scaled($destination, $width, $height)
1383
+ {
1384
+ $image = $this->_loadImage($destination, false);
1385
+
1386
+ if ($image === false) {
1387
+ return;
1388
+ }
1389
+
1390
+ $originWidth = imagesx($image);
1391
+ $originHeight = imagesy($image);
1392
+
1393
+ $rw = (int)$height * (int)$originWidth / (int)$originHeight;
1394
+ $useHeight = ($rw <= $width);
1395
+
1396
+ if ($useHeight) {
1397
+ $width = (int)$rw;
1398
+ } else {
1399
+ $height = (int)((int)($width) * (int)($originHeight) / (int)($originWidth));
1400
+ }
1401
+
1402
+ $newImage = imagecreatetruecolor($width, $height);
1403
+ $white = imagecolorallocate($newImage, 255, 255, 255);
1404
+ imagefill($newImage, 0, 0, $white);
1405
+ imagecopyresampled($newImage, $image, 0, 0, 0, 0, $width, $height, $originWidth, $originHeight);
1406
+ imagecolortransparent($newImage, $white);
1407
+
1408
+ return $this->_saveImage($newImage, $destination, $this->_imageType, 100) ? "OK" : "CAN'T SCALE IMAGE";
1409
+ }
1410
+
1411
+ /**
1412
+ * scaled2 method optimizet for prestashop
1413
+ *
1414
+ * @param $destination
1415
+ * @param $destWidth
1416
+ * @param $destHeight
1417
+ * @return string
1418
+ */
1419
+ private function _scaled2($destination, $destWidth, $destHeight)
1420
+ {
1421
+ $method = 0;
1422
+
1423
+ $sourceImage = $this->_loadImage($destination, false);
1424
+
1425
+ if ($sourceImage === false) {
1426
+ return "IMAGE NOT SUPPORTED";
1427
+ }
1428
+
1429
+ $sourceWidth = imagesx($sourceImage);
1430
+ $sourceHeight = imagesy($sourceImage);
1431
+
1432
+ $widthDiff = $destWidth / $sourceWidth;
1433
+ $heightDiff = $destHeight / $sourceHeight;
1434
+
1435
+ if ($widthDiff > 1 && $heightDiff > 1) {
1436
+ $nextWidth = $sourceWidth;
1437
+ $nextHeight = $sourceHeight;
1438
+ } else {
1439
+ if (intval($method) == 2 || (intval($method) == 0 AND $widthDiff > $heightDiff)) {
1440
+ $nextHeight = $destHeight;
1441
+ $nextWidth = intval(($sourceWidth * $nextHeight) / $sourceHeight);
1442
+ $destWidth = ((intval($method) == 0) ? $destWidth : $nextWidth);
1443
+ } else {
1444
+ $nextWidth = $destWidth;
1445
+ $nextHeight = intval($sourceHeight * $destWidth / $sourceWidth);
1446
+ $destHeight = (intval($method) == 0 ? $destHeight : $nextHeight);
1447
+ }
1448
+ }
1449
+
1450
+ $borderWidth = intval(($destWidth - $nextWidth) / 2);
1451
+ $borderHeight = intval(($destHeight - $nextHeight) / 2);
1452
+
1453
+ $destImage = imagecreatetruecolor($destWidth, $destHeight);
1454
+
1455
+ $white = imagecolorallocate($destImage, 255, 255, 255);
1456
+ imagefill($destImage, 0, 0, $white);
1457
+
1458
+ imagecopyresampled($destImage, $sourceImage, $borderWidth, $borderHeight, 0, 0, $nextWidth, $nextHeight,
1459
+ $sourceWidth, $sourceHeight);
1460
+ imagecolortransparent($destImage, $white);
1461
+
1462
+ return $this->_saveImage($destImage, $destination, $this->_imageType, 100) ? "OK" : "CAN'T SCALE IMAGE";
1463
+ }
1464
+ }
1465
+
1466
+ class M1_Mysqli
1467
  {
1468
+ public $config = null; // config adapter
1469
+ public $result = array();
1470
+ public $dataBaseHandle = null;
1471
 
1472
+ /**
1473
+ * mysql constructor
1474
+ *
1475
+ * @param M1_Config_Adapter $config
1476
+ * @return M1_Mysql
1477
+ */
1478
+ public function __construct($config)
1479
+ {
1480
+ $this->config = $config;
1481
+ }
1482
 
1483
+ /**
1484
+ * @return bool|null|resource
1485
+ */
1486
+ private function getDataBaseHandle()
1487
+ {
1488
+ if ($this->dataBaseHandle) {
1489
+ return $this->dataBaseHandle;
1490
+ }
1491
 
1492
+ $this->dataBaseHandle = $this->connect();
1493
+
1494
+ if (!$this->dataBaseHandle) {
1495
+ exit('[ERROR] MySQLi Query Error: Can not connect to DB');
1496
+ }
1497
+
1498
+ return $this->dataBaseHandle;
 
1499
  }
1500
 
1501
+ /**
1502
+ * @return bool|null|resource
1503
+ */
1504
+ private function connect()
1505
+ {
1506
+ $triesCount = 5;
1507
+ $link = null;
1508
+ $password = stripslashes($this->config->password);
1509
+
1510
+ while (!$link) {
1511
+ if (!$triesCount--) {
1512
+ break;
1513
+ }
1514
 
1515
+ $link = @mysqli_connect(
1516
+ $this->config->host,
1517
+ $this->config->username,
1518
+ $password,
1519
+ $this->config->dbname,
1520
+ $this->config->port ? $this->config->port : null,
1521
+ $this->config->sock
1522
+ );
1523
+
1524
+ if (!$link) {
1525
+ sleep(2);
1526
+ }
1527
+ }
1528
+
1529
+ if ($link) {
1530
+ mysqli_select_db($link, $this->config->dbname);
1531
+ } else {
1532
+ return false;
1533
+ }
1534
+
1535
+ return $link;
1536
+ }
1537
+
1538
+ /**
1539
+ * @param $sql
1540
+ *
1541
+ * @return array|bool|mysqli_result
1542
+ */
1543
+ public function localQuery($sql)
1544
+ {
1545
+ $result = array();
1546
+ $dataBaseHandle = $this->getDataBaseHandle();
1547
+
1548
+ $sth = mysqli_query($dataBaseHandle, $sql);
1549
+
1550
+ if (is_bool($sth)) {
1551
+ return $sth;
1552
+ }
1553
+
1554
+ while (($row = mysqli_fetch_assoc($sth))) {
1555
+ $result[] = $row;
1556
+ }
1557
+
1558
+ return $result;
1559
+ }
1560
+
1561
+ /**
1562
+ * @param $sql
1563
+ * @param $fetchType
1564
+ *
1565
+ * @return array
1566
+ */
1567
+ public function query($sql, $fetchType)
1568
+ {
1569
+ $result = array(
1570
+ 'result' => null,
1571
+ 'message' => '',
1572
+ 'fetchedFields' => ''
1573
+ );
1574
+
1575
+ $dataBaseHandle = $this->getDataBaseHandle();
1576
+
1577
+ if (!$dataBaseHandle) {
1578
+ $result['message'] = '[ERROR] MySQLi Query Error: Can not connect to DB';
1579
+ return $result;
1580
+ }
1581
+
1582
+ if (isset($_GET['disable_checks'])) {
1583
+ $this->localQuery('SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0');
1584
+ $this->localQuery("SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO'");
1585
+ }
1586
+
1587
+ if (isset($_REQUEST['set_names'])) {
1588
+ mysqli_set_charset($dataBaseHandle, $_REQUEST['set_names']);
1589
+ }
1590
+
1591
+ $fetchMode = MYSQLI_ASSOC;
1592
+ switch ($fetchType) {
1593
+ case 3:
1594
+ $fetchMode = MYSQLI_BOTH;
1595
+ break;
1596
+ case 2:
1597
+ $fetchMode = MYSQLI_NUM;
1598
+ break;
1599
+ case 1:
1600
+ $fetchMode = MYSQLI_ASSOC;
1601
+ break;
1602
+ default:
1603
+ break;
1604
+ }
1605
+
1606
+ $res = mysqli_query($dataBaseHandle, $sql);
1607
+
1608
+ $triesCount = 10;
1609
+ while (mysqli_errno($dataBaseHandle) == 2013) {
1610
+ if (!$triesCount--) {
1611
+ break;
1612
+ }
1613
+ // reconnect
1614
+ $dataBaseHandle = $this->getDataBaseHandle();
1615
+ if ($dataBaseHandle) {
1616
+
1617
+ if (isset($_REQUEST['set_names'])) {
1618
+ mysqli_set_charset($dataBaseHandle, $_REQUEST['set_names']);
1619
+ }
1620
+
1621
+ // execute query once again
1622
+ $res = mysqli_query($dataBaseHandle, $sql);
1623
+ }
1624
+ }
1625
+
1626
+ if (($errno = mysqli_errno($dataBaseHandle)) != 0) {
1627
+ $result['message'] = '[ERROR] MySQLi Query Error: ' . $errno . ', ' . mysqli_error($dataBaseHandle);
1628
+ return $result;
1629
+ }
1630
+
1631
+ if (is_bool($res)) {
1632
+ $result['result'] = $res;
1633
+ return $result;
1634
+ }
1635
+
1636
+ $fetchedFields = array();
1637
+ while ($field = mysqli_fetch_field($res)) {
1638
+ $fetchedFields[] = $field;
1639
+ }
1640
+
1641
+ $rows = array();
1642
+ while ($row = mysqli_fetch_array($res, $fetchMode)) {
1643
+ $rows[] = $row;
1644
+ }
1645
+
1646
+ if (isset($_GET['disable_checks'])) {
1647
+ $this->localQuery("SET SQL_MODE=IFNULL(@OLD_SQL_MODE,'')");
1648
+ $this->localQuery("SET FOREIGN_KEY_CHECKS=IFNULL(@OLD_FOREIGN_KEY_CHECKS,0)");
1649
+ }
1650
+
1651
+ $result['result'] = $rows;
1652
+ $result['fetchedFields'] = $fetchedFields;
1653
+
1654
+ mysqli_free_result($res);
1655
+
1656
+ return $result;
1657
+ }
1658
+
1659
+ /**
1660
+ * @return int
1661
+ */
1662
+ public function getLastInsertId()
1663
+ {
1664
+ return mysqli_insert_id($this->dataBaseHandle);
1665
  }
1666
 
1667
+ /**
1668
+ * @return int
1669
+ */
1670
+ public function getAffectedRows()
1671
+ {
1672
+ return mysqli_affected_rows($this->dataBaseHandle);
1673
  }
1674
 
1675
+ /**
1676
+ * @return void
1677
+ */
1678
+ public function __destruct()
1679
+ {
1680
+ if ($this->dataBaseHandle) {
1681
+ mysqli_close($this->dataBaseHandle);
1682
+ }
1683
+
1684
+ $this->dataBaseHandle = null;
1685
+ }
1686
 
1687
  }
1688
 
1689
 
1690
+ /**
1691
+ * Class M1_Config_Adapter_Ubercart
1692
+ */
1693
+ class M1_Config_Adapter_Ubercart extends M1_Config_Adapter
1694
+ {
1695
+
1696
+ /**
1697
+ * M1_Config_Adapter_Ubercart constructor.
1698
+ */
1699
+ public function __construct()
1700
+ {
1701
+ @include_once M1_STORE_BASE_DIR . "sites/default/settings.php";
1702
+
1703
+ $url = parse_url($db_url);
1704
+
1705
+ $url['user'] = urldecode($url['user']);
1706
+ // Test if database url has a password.
1707
+ $url['pass'] = isset($url['pass']) ? urldecode($url['pass']) : '';
1708
+ $url['host'] = urldecode($url['host']);
1709
+ $url['path'] = urldecode($url['path']);
1710
+ // Allow for non-standard MySQL port.
1711
+ if (isset($url['port'])) {
1712
+ $url['host'] = $url['host'] . ':' . $url['port'];
1713
+ }
1714
+
1715
+ $this->setHostPort($url['host']);
1716
+ $this->dbname = ltrim($url['path'], '/');
1717
+ $this->username = $url['user'];
1718
+ $this->password = $url['pass'];
1719
+
1720
+ $this->imagesDir = "/sites/default/files/";
1721
+ if (!file_exists(M1_STORE_BASE_DIR . $this->imagesDir)) {
1722
+ $this->imagesDir = "/files";
1723
+ }
1724
+
1725
+ if (file_exists(M1_STORE_BASE_DIR . "/modules/ubercart/uc_cart/uc_cart.info")) {
1726
+ $str = file_get_contents(M1_STORE_BASE_DIR . "/modules/ubercart/uc_cart/uc_cart.info");
1727
+ if (preg_match('/version\s+=\s+".+-(.+)"/', $str, $match) != 0) {
1728
+ $this->cartVars['dbVersion'] = $match[1];
1729
+ unset($match);
1730
+ }
1731
+ }
1732
+
1733
+ $this->categoriesImagesDir = $this->imagesDir;
1734
+ $this->productsImagesDir = $this->imagesDir;
1735
+ $this->manufacturersImagesDir = $this->imagesDir;
1736
+ }
1737
+
1738
+ }
1739
+
1740
 
1741
  /**
1742
  * Class M1_Config_Adapter_Cubecart3
1744
  class M1_Config_Adapter_Cubecart3 extends M1_Config_Adapter
1745
  {
1746
 
1747
+ /**
1748
+ * M1_Config_Adapter_Cubecart3 constructor.
1749
+ */
1750
+ public function __construct()
1751
+ {
1752
+ include_once(M1_STORE_BASE_DIR . 'includes/global.inc.php');
1753
+
1754
+ $this->setHostPort($glob['dbhost']);
1755
+ $this->dbname = $glob['dbdatabase'];
1756
+ $this->username = $glob['dbusername'];
1757
+ $this->password = $glob['dbpassword'];
1758
+
1759
+ $this->imagesDir = 'images/uploads';
1760
+ $this->categoriesImagesDir = $this->imagesDir;
1761
+ $this->productsImagesDir = $this->imagesDir;
1762
+ $this->manufacturersImagesDir = $this->imagesDir;
1763
+ }
1764
  }
1765
 
1766
  /**
1769
  class M1_Config_Adapter_JooCart extends M1_Config_Adapter
1770
  {
1771
 
1772
+ /**
1773
+ * M1_Config_Adapter_JooCart constructor.
1774
+ */
1775
+ public function __construct()
1776
+ {
1777
+ require_once M1_STORE_BASE_DIR . "/configuration.php";
1778
 
1779
+ if (class_exists("JConfig")) {
1780
 
1781
+ $jconfig = new JConfig();
1782
 
1783
+ $this->setHostPort($jconfig->host);
1784
+ $this->dbname = $jconfig->db;
1785
+ $this->username = $jconfig->user;
1786
+ $this->password = $jconfig->password;
1787
 
1788
+ } else {
1789
 
1790
+ $this->setHostPort($mosConfig_host);
1791
+ $this->dbname = $mosConfig_db;
1792
+ $this->username = $mosConfig_user;
1793
+ $this->password = $mosConfig_password;
1794
+ }
1795
 
1796
+ $this->imagesDir = "components/com_opencart/image/";
1797
+ $this->categoriesImagesDir = $this->imagesDir;
1798
+ $this->productsImagesDir = $this->imagesDir;
1799
+ $this->manufacturersImagesDir = $this->imagesDir;
1800
+ }
1801
 
1802
  }
1803
 
1808
  class M1_Config_Adapter_Prestashop11 extends M1_Config_Adapter
1809
  {
1810
 
1811
+ /**
1812
+ * M1_Config_Adapter_Prestashop11 constructor.
1813
+ */
1814
+ public function __construct()
1815
+ {
1816
+ $confFileOne = file_get_contents(M1_STORE_BASE_DIR . "/config/settings.inc.php");
1817
+ $confFileTwo = file_get_contents(M1_STORE_BASE_DIR . "/config/config.inc.php");
1818
+
1819
+ $filesLines = array_merge(explode("\n", $confFileOne), explode("\n", $confFileTwo));
1820
+
1821
+ $execute = '$currentDir = \'\';';
1822
+
1823
+ $isComment = false;
1824
+ foreach ($filesLines as $line) {
1825
+ $startComment = preg_match("/^(\/\*)/", $line);
1826
+ $endComment = preg_match("/(\*\/)$/", $line);
1827
+
1828
+ if ($isComment) {
1829
+ if ($endComment) {
1830
+ $isComment = false;
1831
+ }
1832
+ continue;
1833
+ } elseif ($startComment) {
1834
+ $isComment = true;
1835
+ if ($endComment) {
1836
+ $isComment = false;
1837
+ }
1838
+ continue;
1839
+ }
1840
 
1841
+ if (preg_match("/^(\s*)define\(/i", $line)) {
1842
+ if ((strpos($line, '_DB_') !== false) || (strpos($line, '_PS_IMG_DIR_') !== false)
1843
+ || (strpos($line, '_PS_VERSION_') !== false)
1844
+ ) {
1845
+ $execute .= " " . $line;
1846
+ }
1847
+ }
1848
  }
 
 
1849
 
1850
+ define('_PS_ROOT_DIR_', M1_STORE_BASE_DIR);
1851
+ eval($execute);
1852
 
1853
+ $this->setHostPort(_DB_SERVER_);
1854
+ $this->dbname = _DB_NAME_;
1855
+ $this->username = _DB_USER_;
1856
+ $this->password = _DB_PASSWD_;
1857
 
1858
+ if (defined('_PS_IMG_DIR_') && defined('_PS_ROOT_DIR_')) {
1859
 
1860
+ preg_match("/(\/\w+\/)$/i", _PS_IMG_DIR_, $m);
1861
+ $this->imagesDir = $m[1];
1862
 
1863
+ } else {
1864
+ $this->imagesDir = "/img/";
1865
+ }
1866
 
1867
+ $this->categoriesImagesDir = $this->imagesDir;
1868
+ $this->productsImagesDir = $this->imagesDir;
1869
+ $this->manufacturersImagesDir = $this->imagesDir;
1870
 
1871
+ if (defined('_PS_VERSION_')) {
1872
+ $this->cartVars['dbVersion'] = _PS_VERSION_;
1873
+ }
1874
  }
 
1875
 
1876
  }
1877
 
1878
 
 
1879
  /**
1880
  * Class M1_Config_Adapter_Ubercart3
1881
  */
1882
  class M1_Config_Adapter_Ubercart3 extends M1_Config_Adapter
1883
  {
1884
 
1885
+ /**
1886
+ * M1_Config_Adapter_Ubercart3 constructor.
1887
+ */
1888
+ public function __construct()
1889
+ {
1890
+ @include_once M1_STORE_BASE_DIR . "sites/default/settings.php";
1891
+
1892
+ $url = $databases['default']['default'];
1893
+
1894
+ $url['username'] = urldecode($url['username']);
1895
+ $url['password'] = isset($url['password']) ? urldecode($url['password']) : '';
1896
+ $url['host'] = urldecode($url['host']);
1897
+ $url['database'] = urldecode($url['database']);
1898
+ if (isset($url['port'])) {
1899
+ $url['host'] = $url['host'] . ':' . $url['port'];
1900
+ }
1901
 
1902
+ $this->setHostPort($url['host']);
1903
+ $this->dbname = ltrim($url['database'], '/');
1904
+ $this->username = $url['username'];
1905
+ $this->password = $url['password'];
 
 
 
1906
 
1907
+ $this->imagesDir = "/sites/default/files/";
1908
+ if (!file_exists(M1_STORE_BASE_DIR . $this->imagesDir)) {
1909
+ $this->imagesDir = "/files";
1910
+ }
1911
 
1912
+ $fileInfo = M1_STORE_BASE_DIR . "/modules/ubercart/uc_cart/uc_cart.info";
1913
+ if (file_exists($fileInfo)) {
1914
+ $str = file_get_contents($fileInfo);
1915
+ if (preg_match('/version\s+=\s+".+-(.+)"/', $str, $match) != 0) {
1916
+ $this->cartVars['dbVersion'] = $match[1];
1917
+ unset($match);
1918
+ }
1919
+ }
1920
 
1921
+ $this->categoriesImagesDir = $this->imagesDir;
1922
+ $this->productsImagesDir = $this->imagesDir;
1923
+ $this->manufacturersImagesDir = $this->imagesDir;
 
 
 
 
1924
  }
1925
 
 
 
 
 
 
1926
  }
1927
 
1928
 
1932
  class M1_Config_Adapter_XCart extends M1_Config_Adapter
1933
  {
1934
 
1935
+ /**
1936
+ * M1_Config_Adapter_XCart constructor.
1937
+ */
1938
+ public function __construct()
1939
+ {
1940
+ define('XCART_START', 1);
1941
+
1942
+ $config = file_get_contents(M1_STORE_BASE_DIR . "config.php");
1943
+
1944
+ try {
1945
+ preg_match('/\$sql_host.+\'(.+)\';/', $config, $match);
1946
+ $this->setHostPort($match[1]);
1947
+ preg_match('/\$sql_user.+\'(.+)\';/', $config, $match);
1948
+ $this->username = $match[1];
1949
+ preg_match('/\$sql_db.+\'(.+)\';/', $config, $match);
1950
+ $this->dbname = $match[1];
1951
+ preg_match('/\$sql_password.+\'(.*)\';/', $config, $match);
1952
+ $this->password = $match[1];
1953
+ } catch (Exception $e) {
1954
+ die('ERROR_READING_STORE_CONFIG_FILE');
1955
+ }
1956
+
1957
+ $this->imagesDir = 'images/'; // xcart starting from 4.1.x hardcodes images location
1958
+ $this->categoriesImagesDir = $this->imagesDir;
1959
+ $this->productsImagesDir = $this->imagesDir;
1960
+ $this->manufacturersImagesDir = $this->imagesDir;
1961
+
1962
+ if (file_exists(M1_STORE_BASE_DIR . "VERSION")) {
1963
+ $version = file_get_contents(M1_STORE_BASE_DIR . "VERSION");
1964
+ $this->cartVars['dbVersion'] = preg_replace('/(Version| |\\n)/', '', $version);
1965
+ }
1966
+
1967
+ }
1968
  }
1969
 
1970
  /**
1973
  class M1_Config_Adapter_Cubecart extends M1_Config_Adapter
1974
  {
1975
 
1976
+ /**
1977
+ * M1_Config_Adapter_Cubecart constructor.
1978
+ */
1979
+ public function __construct()
1980
+ {
1981
+ include_once(M1_STORE_BASE_DIR . 'includes/global.inc.php');
1982
+
1983
+ $this->setHostPort($glob['dbhost']);
1984
+ $this->dbname = $glob['dbdatabase'];
1985
+ $this->username = $glob['dbusername'];
1986
+ $this->password = $glob['dbpassword'];
1987
+
1988
+ $this->imagesDir = 'images';
1989
+ $this->categoriesImagesDir = $this->imagesDir;
1990
+ $this->productsImagesDir = $this->imagesDir;
1991
+ $this->manufacturersImagesDir = $this->imagesDir;
1992
+ $dirHandle = opendir(M1_STORE_BASE_DIR . 'language/');
1993
+ //settings for cube 5
1994
+ $languages = array();
1995
+ while ($dirEntry = readdir($dirHandle)) {
1996
+ $info = pathinfo($dirEntry);
1997
+ $xmlflag = false;
1998
+
1999
+ if (isset($info['extension'])) {
2000
+ $xmlflag = strtoupper($info['extension']) != "XML" ? true : false;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2001
  }
2002
+ if (is_dir(M1_STORE_BASE_DIR . 'language/' . $dirEntry) || $dirEntry == '.' || $dirEntry == '..' || strpos($dirEntry,
2003
+ "_") !== false || $xmlflag
2004
+ ) {
2005
+ continue;
2006
+ }
2007
+ $configXml = simplexml_load_file(M1_STORE_BASE_DIR . 'language/' . $dirEntry);
2008
+ if ($configXml->info->title) {
2009
+ $lang['name'] = (string)$configXml->info->title;
2010
+ $lang['code'] = substr((string)$configXml->info->code, 0, 2);
2011
+ $lang['locale'] = substr((string)$configXml->info->code, 0, 2);
2012
+ $lang['currency'] = (string)$configXml->info->default_currency;
2013
+ $lang['fileName'] = str_replace(".xml", "", $dirEntry);
2014
+ $languages[] = $lang;
2015
+ }
2016
+ }
2017
+ if (!empty($languages)) {
2018
+ $this->cartVars['languages'] = $languages;
2019
+ }
2020
+
2021
+ $conf = false;
2022
+ if (file_exists(M1_STORE_BASE_DIR . 'ini.inc.php')) {
2023
+ $conf = file_get_contents(M1_STORE_BASE_DIR . 'ini.inc.php');
2024
+ } elseif (file_exists(M1_STORE_BASE_DIR . "includes" . DIRECTORY_SEPARATOR . 'ini.inc.php')) {
2025
+ $conf = file_get_contents(M1_STORE_BASE_DIR . "includes" . DIRECTORY_SEPARATOR . 'ini.inc.php');
2026
+ }
2027
+
2028
+ if ($conf !== false) {
2029
+ preg_match('/\$ini\[[\'"]ver[\'"]\]\s*=\s*[\'"](.*?)[\'"]\s*;/', $conf, $match);
2030
+ if (isset($match[1]) && !empty($match[1])) {
2031
+ $this->cartVars['dbVersion'] = strtolower($match[1]);
2032
+ } else {
2033
+ preg_match("/define\(['\"]CC_VERSION['\"]\s*,\s*['\"](.*?)['\"]\)/", $conf, $match);
2034
+ if (isset($match[1]) && !empty($match[1])) {
2035
+ $this->cartVars['dbVersion'] = strtolower($match[1]);
2036
+ }
2037
  }
 
2038
  }
 
2039
  }
 
2040
  }
2041
 
2042
  /**
2045
  class M1_Config_Adapter_WebAsyst extends M1_Config_Adapter
2046
  {
2047
 
2048
+ /**
2049
+ * M1_Config_Adapter_WebAsyst constructor.
2050
+ */
2051
+ public function __construct()
2052
+ {
2053
+ $config = simplexml_load_file(M1_STORE_BASE_DIR . 'kernel/wbs.xml');
2054
 
2055
+ $dbKey = (string)$config->FRONTEND['dbkey'];
2056
 
2057
+ $config = simplexml_load_file(M1_STORE_BASE_DIR . 'dblist' . '/' . strtoupper($dbKey) . '.xml');
2058
 
2059
+ $host = (string)$config->DBSETTINGS['SQLSERVER'];
2060
 
2061
+ $this->setHostPort($host);
2062
+ $this->dbname = (string)$config->DBSETTINGS['DB_NAME'];
2063
+ $this->username = (string)$config->DBSETTINGS['DB_USER'];
2064
+ $this->password = (string)$config->DBSETTINGS['DB_PASSWORD'];
2065
 
2066
+ $this->imagesDir = 'published/publicdata/' . strtoupper($dbKey) . '/attachments/SC/products_pictures';
2067
+ $this->categoriesImagesDir = $this->imagesDir;
2068
+ $this->productsImagesDir = $this->imagesDir;
2069
+ $this->manufacturersImagesDir = $this->imagesDir;
2070
 
2071
+ if (isset($config->VERSIONS['SYSTEM'])) {
2072
+ $this->cartVars['dbVersion'] = (string)$config->VERSIONS['SYSTEM'];
2073
+ }
2074
  }
 
2075
 
2076
  }
2077
 
2081
  class M1_Config_Adapter_Squirrelcart242 extends M1_Config_Adapter
2082
  {
2083
 
2084
+ /**
2085
+ * M1_Config_Adapter_Squirrelcart242 constructor.
2086
+ */
2087
+ public function __construct()
2088
+ {
2089
+ include_once(M1_STORE_BASE_DIR . 'squirrelcart/config.php');
2090
+
2091
+ $this->setHostPort($sql_host);
2092
+ $this->dbname = $db;
2093
+ $this->username = $sql_username;
2094
+ $this->password = $sql_password;
2095
+
2096
+ $this->imagesDir = $img_path;
2097
+ $this->categoriesImagesDir = $img_path . "/categories";
2098
+ $this->productsImagesDir = $img_path . "/products";
2099
+ $this->manufacturersImagesDir = $img_path;
2100
+
2101
+ $version = $this->getCartVersionFromDb("DB_Version", "Store_Information", "record_number = 1");
2102
+ if ($version != '') {
2103
+ $this->cartVars['dbVersion'] = $version;
2104
+ }
2105
  }
 
2106
  }
2107
 
2108
  /**
2111
  class M1_Config_Adapter_Opencart14 extends M1_Config_Adapter
2112
  {
2113
 
2114
+ /**
2115
+ * M1_Config_Adapter_Opencart14 constructor.
2116
+ */
2117
+ public function __construct()
2118
+ {
2119
+ include_once(M1_STORE_BASE_DIR . "/config.php");
2120
 
2121
+ if (defined('DB_HOST')) {
2122
+ $this->setHostPort(DB_HOST);
2123
+ } else {
2124
+ $this->setHostPort(DB_HOSTNAME);
2125
+ }
2126
 
2127
+ if (defined('DB_USER')) {
2128
+ $this->username = DB_USER;
2129
+ } else {
2130
+ $this->username = DB_USERNAME;
2131
+ }
2132
 
2133
+ $this->password = DB_PASSWORD;
2134
 
2135
+ if (defined('DB_NAME')) {
2136
+ $this->dbname = DB_NAME;
2137
+ } else {
2138
+ $this->dbname = DB_DATABASE;
2139
+ }
2140
 
2141
+ $indexFileContent = '';
2142
+ $startupFileContent = '';
2143
 
2144
+ if (file_exists(M1_STORE_BASE_DIR . "/index.php")) {
2145
+ $indexFileContent = file_get_contents(M1_STORE_BASE_DIR . "/index.php");
2146
+ }
2147
 
2148
+ if (file_exists(M1_STORE_BASE_DIR . "/system/startup.php")) {
2149
+ $startupFileContent = file_get_contents(M1_STORE_BASE_DIR . "/system/startup.php");
2150
+ }
2151
 
2152
+ if (preg_match("/define\('\VERSION\'\, \'(.+)\'\)/", $indexFileContent, $match) == 0) {
2153
+ preg_match("/define\('\VERSION\'\, \'(.+)\'\)/", $startupFileContent, $match);
2154
+ }
2155
 
2156
+ if (count($match) > 0) {
2157
+ $this->cartVars['dbVersion'] = $match[1];
2158
+ unset($match);
2159
+ }
2160
 
2161
+ $this->imagesDir = "/image/";
2162
+ $this->categoriesImagesDir = $this->imagesDir;
2163
+ $this->productsImagesDir = $this->imagesDir;
2164
+ $this->manufacturersImagesDir = $this->imagesDir;
2165
 
2166
+ }
2167
 
2168
  }
2169
 
2170
 
 
2171
  /**
2172
  * Class M1_Config_Adapter_Litecommerce
2173
  */
2174
  class M1_Config_Adapter_Litecommerce extends M1_Config_Adapter
2175
  {
2176
 
2177
+ /**
2178
+ * M1_Config_Adapter_Litecommerce constructor.
2179
+ */
2180
+ public function __construct()
2181
+ {
2182
+ if ((file_exists(M1_STORE_BASE_DIR . '/etc/config.php'))) {
2183
+ $file = M1_STORE_BASE_DIR . '/etc/config.php';
2184
+ $this->imagesDir = "/images";
2185
+ $this->categoriesImagesDir = $this->imagesDir . "/category";
2186
+ $this->productsImagesDir = $this->imagesDir . "/product";
2187
+ $this->manufacturersImagesDir = $this->imagesDir;
2188
+ } elseif (file_exists(M1_STORE_BASE_DIR . '/modules/lc_connector/litecommerce/etc/config.php')) {
2189
+ $file = M1_STORE_BASE_DIR . '/modules/lc_connector/litecommerce/etc/config.php';
2190
+ $this->imagesDir = "/modules/lc_connector/litecommerce/images";
2191
+ $this->categoriesImagesDir = $this->imagesDir . "/category";
2192
+ $this->productsImagesDir = $this->imagesDir . "/product";
2193
+ $this->manufacturersImagesDir = $this->imagesDir;
2194
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2195
 
2196
+ $settings = parse_ini_file($file, true);
2197
+ $settings = $settings['database_details'];
2198
+ $this->host = $settings['hostspec'];
2199
+ $this->setHostPort($settings['hostspec']);
2200
+ $this->username = $settings['username'];
2201
+ $this->password = $settings['password'];
2202
+ $this->dbname = $settings['database'];
2203
+ $this->tblPrefix = $settings['table_prefix'];
2204
+
2205
+ $version = $this->getCartVersionFromDb("value", "config", "name = 'version'");
2206
+ if ($version != '') {
2207
+ $this->cartVars['dbVersion'] = $version;
2208
+ }
2209
+ }
2210
 
2211
+ }
2212
 
2213
 
2214
  /**
2217
  class M1_Config_Adapter_Oxid extends M1_Config_Adapter
2218
  {
2219
 
2220
+ /**
2221
+ * M1_Config_Adapter_Oxid constructor.
2222
+ */
2223
+ public function __construct()
2224
+ {
2225
+ //@include_once M1_STORE_BASE_DIR . "config.inc.php";
2226
+ $config = file_get_contents(M1_STORE_BASE_DIR . "config.inc.php");
2227
+ try {
2228
+ preg_match("/dbName(.+)?=(.+)?\'(.+)\';/", $config, $match);
2229
+ $this->dbname = $match[3];
2230
+ preg_match("/dbUser(.+)?=(.+)?\'(.+)\';/", $config, $match);
2231
+ $this->username = $match[3];
2232
+ preg_match("/dbPwd(.+)?=(.+)?\'(.+)\';/", $config, $match);
2233
+ $this->password = isset($match[3]) ? $match[3] : '';
2234
+ preg_match("/dbHost(.+)?=(.+)?\'(.*)\';/", $config, $match);
2235
+ $this->setHostPort($match[3]);
2236
+ } catch (Exception $e) {
2237
+ die('ERROR_READING_STORE_CONFIG_FILE');
2238
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2239
 
2240
+ //check about last slash
2241
+ $this->imagesDir = "out/pictures/";
2242
+ $this->categoriesImagesDir = $this->imagesDir;
2243
+ $this->productsImagesDir = $this->imagesDir;
2244
+ $this->manufacturersImagesDir = $this->imagesDir;
2245
+
2246
+ //add key for decoding config values in oxid db
2247
+ //check slash
2248
+ $keyConfigFile = file_get_contents(M1_STORE_BASE_DIR . '/core/oxconfk.php');
2249
+ preg_match("/sConfigKey(.+)?=(.+)?\"(.+)?\";/", $keyConfigFile, $match);
2250
+ $this->cartVars['sConfigKey'] = $match[3];
2251
+ $version = $this->getCartVersionFromDb("OXVERSION", "oxshops", "OXACTIVE=1 LIMIT 1");
2252
+ if ($version != '') {
2253
+ $this->cartVars['dbVersion'] = $version;
2254
+ }
2255
+ }
2256
 
2257
+ }
2258
 
2259
 
2260
  /**
2263
  class M1_Config_Adapter_XtcommerceVeyton extends M1_Config_Adapter
2264
  {
2265
 
2266
+ /**
2267
+ * M1_Config_Adapter_XtcommerceVeyton constructor.
2268
+ */
2269
+ public function __construct()
2270
+ {
2271
+ define('_VALID_CALL', 'TRUE');
2272
+ define('_SRV_WEBROOT', 'TRUE');
2273
+ require_once M1_STORE_BASE_DIR
2274
+ . 'conf'
2275
+ . DIRECTORY_SEPARATOR
2276
+ . 'config.php';
2277
+
2278
+ require_once M1_STORE_BASE_DIR
2279
+ . 'conf'
2280
+ . DIRECTORY_SEPARATOR
2281
+ . 'paths.php';
2282
+
2283
+ $this->setHostPort(_SYSTEM_DATABASE_HOST);
2284
+ $this->dbname = _SYSTEM_DATABASE_DATABASE;
2285
+ $this->username = _SYSTEM_DATABASE_USER;
2286
+ $this->password = _SYSTEM_DATABASE_PWD;
2287
+ $this->imagesDir = _SRV_WEB_IMAGES;
2288
+ $this->tblPrefix = DB_PREFIX . "_";
2289
+
2290
+ $version = $this->getCartVersionFromDb("config_value", "config", "config_key = '_SYSTEM_VERSION'");
2291
+ if ($version != '') {
2292
+ $this->cartVars['dbVersion'] = $version;
2293
+ }
2294
+
2295
+ $this->categoriesImagesDir = $this->imagesDir;
2296
+ $this->productsImagesDir = $this->imagesDir;
2297
+ $this->manufacturersImagesDir = $this->imagesDir;
2298
+ }
2299
 
2300
  }
2301
 
2306
  class M1_Config_Adapter_SSPremium extends M1_Config_Adapter
2307
  {
2308
 
2309
+ /**
2310
+ * M1_Config_Adapter_SSPremium constructor.
2311
+ */
2312
+ public function __construct()
2313
+ {
2314
+ if (file_exists(M1_STORE_BASE_DIR . 'cfg/connect.inc.php')) {
2315
+ $config = file_get_contents(M1_STORE_BASE_DIR . 'cfg/connect.inc.php');
2316
+ preg_match("/define\(\'DB_NAME\', \'(.+)\'\);/", $config, $match);
2317
+ $this->dbname = $match[1];
2318
+ preg_match("/define\(\'DB_USER\', \'(.+)\'\);/", $config, $match);
2319
+ $this->username = $match[1];
2320
+ preg_match("/define\(\'DB_PASS\', \'(.*)\'\);/", $config, $match);
2321
+ $this->password = $match[1];
2322
+ preg_match("/define\(\'DB_HOST\', \'(.+)\'\);/", $config, $match);
2323
+ $this->setHostPort($match[1]);
2324
+
2325
+ $this->imagesDir = "products_pictures/";
2326
+ $this->categoriesImagesDir = $this->imagesDir;
2327
+ $this->productsImagesDir = $this->imagesDir;
2328
+ $this->manufacturersImagesDir = $this->imagesDir;
2329
+
2330
+ $version = $this->getCartVersionFromDb("value", "SS_system", "varName = 'version_number'");
2331
+ if ($version != '') {
2332
+ $this->cartVars['dbVersion'] = $version;
2333
+ }
2334
+ } else {
2335
+ $config = include M1_STORE_BASE_DIR . "wa-config/db.php";
2336
+ $this->dbname = $config['default']['database'];
2337
+ $this->username = $config['default']['user'];
2338
+ $this->password = $config['default']['password'];
2339
+ $this->setHostPort($config['default']['host']);
2340
+
2341
+ $this->imagesDir = "products_pictures/";
2342
+ $this->categoriesImagesDir = $this->imagesDir;
2343
+ $this->productsImagesDir = $this->imagesDir;
2344
+ $this->manufacturersImagesDir = $this->imagesDir;
2345
+ $this->cartVars['dbVersion'] = '5.0';
2346
+ }
2347
 
 
 
 
 
 
2348
  }
2349
 
 
 
2350
  }
2351
 
2352
  /**
2355
  class M1_Config_Adapter_Virtuemart113 extends M1_Config_Adapter
2356
  {
2357
 
2358
+ /**
2359
+ * M1_Config_Adapter_Virtuemart113 constructor.
2360
+ */
2361
+ public function __construct()
2362
+ {
2363
+ require_once M1_STORE_BASE_DIR . "/configuration.php";
2364
 
2365
+ if (class_exists("JConfig")) {
2366
 
2367
+ $jconfig = new JConfig();
2368
 
2369
+ $this->setHostPort($jconfig->host);
2370
+ $this->dbname = $jconfig->db;
2371
+ $this->username = $jconfig->user;
2372
+ $this->password = $jconfig->password;
2373
 
2374
+ } else {
2375
 
2376
+ $this->setHostPort($mosConfig_host);
2377
+ $this->dbname = $mosConfig_db;
2378
+ $this->username = $mosConfig_user;
2379
+ $this->password = $mosConfig_password;
2380
+ }
2381
 
2382
+ if (file_exists(M1_STORE_BASE_DIR . "/administrator/components/com_virtuemart/version.php")) {
2383
+ $ver = file_get_contents(M1_STORE_BASE_DIR . "/administrator/components/com_virtuemart/version.php");
2384
+ if (preg_match('/\$RELEASE.+\'(.+)\'/', $ver, $match) != 0) {
2385
+ $this->cartVars['dbVersion'] = $match[1];
2386
+ unset($match);
2387
+ }
2388
+ }
2389
 
2390
+ $this->imagesDir = "components/com_virtuemart/shop_image";
2391
+ $this->categoriesImagesDir = $this->imagesDir;
2392
+ $this->productsImagesDir = $this->imagesDir;
2393
+ $this->manufacturersImagesDir = $this->imagesDir;
2394
 
2395
+ if (is_dir(M1_STORE_BASE_DIR . 'images/stories/virtuemart/product')) {
2396
+ $this->imagesDir = 'images/stories/virtuemart';
2397
+ $this->productsImagesDir = $this->imagesDir . '/product';
2398
+ $this->categoriesImagesDir = $this->imagesDir . '/category';
2399
+ $this->manufacturersImagesDir = $this->imagesDir . '/manufacturer';
2400
+ }
2401
  }
 
2402
 
2403
  }
2404
 
2409
  class M1_Config_Adapter_Hhgmultistore extends M1_Config_Adapter
2410
  {
2411
 
2412
+ /**
2413
+ * M1_Config_Adapter_Hhgmultistore constructor.
2414
+ */
2415
+ public function __construct()
2416
+ {
2417
+ define('SITE_PATH', '');
2418
+ define('WEB_PATH', '');
2419
+ require_once M1_STORE_BASE_DIR . "core/config/configure.php";
2420
+ require_once M1_STORE_BASE_DIR . "core/config/paths.php";
2421
+
2422
+ $baseDir = "/store_files/1/";
2423
+ $this->imagesDir = $baseDir . DIR_WS_IMAGES;
2424
+
2425
+ $this->categoriesImagesDir = $baseDir . DIR_WS_CATEGORIE_IMAGES;
2426
+ $this->productsImagesDirs['info'] = $baseDir . DIR_WS_PRODUCT_INFO_IMAGES;
2427
+ $this->productsImagesDirs['org'] = $baseDir . DIR_WS_PRODUCT_ORG_IMAGES;
2428
+ $this->productsImagesDirs['thumb'] = $baseDir . DIR_WS_PRODUCT_THUMBNAIL_IMAGES;
2429
+ $this->productsImagesDirs['popup'] = $baseDir . DIR_WS_PRODUCT_POPUP_IMAGES;
2430
+
2431
+ $this->manufacturersImagesDirs['img'] = $baseDir . DIR_WS_MANUFACTURERS_IMAGES;
2432
+ $this->manufacturersImagesDirs['org'] = $baseDir . DIR_WS_MANUFACTURERS_ORG_IMAGES;
2433
+
2434
+ $this->host = DB_SERVER;
2435
+ $this->username = DB_SERVER_USERNAME;
2436
+ $this->password = DB_SERVER_PASSWORD;
2437
+ $this->dbname = DB_DATABASE;
2438
+
2439
+ if (file_exists(M1_STORE_BASE_DIR . "/core/config/conf.hhg_startup.php")) {
2440
+ $ver = file_get_contents(M1_STORE_BASE_DIR . "/core/config/conf.hhg_startup.php");
2441
+ if (preg_match('/PROJECT_VERSION.+\((.+)\)\'\)/', $ver, $match) != 0) {
2442
+ $this->cartVars['dbVersion'] = $match[1];
2443
+ unset($match);
2444
+ }
2445
+ }
2446
+ }
2447
 
2448
  }
2449
 
2454
  class M1_Config_Adapter_Wordpress extends M1_Config_Adapter
2455
  {
2456
 
2457
+ /**
2458
+ * M1_Config_Adapter_Wordpress constructor.
2459
+ */
2460
+ public function __construct()
2461
+ {
2462
+ if (file_exists(M1_STORE_BASE_DIR . 'wp-config.php')) {
2463
+ $config = file_get_contents(M1_STORE_BASE_DIR . 'wp-config.php');
2464
+ } else {
2465
+ $config = file_get_contents(dirname(M1_STORE_BASE_DIR) . '/wp-config.php');
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2466
  }
2467
+
2468
+ preg_match('/define\s*\(\s*[\'"]DB_NAME[\'"],\s*[\'"](.+)[\'"]\s*\)\s*;/', $config, $dbnameMatch);
2469
+ preg_match('/define\s*\(\s*[\'"]DB_USER[\'"],\s*[\'"](.+)[\'"]\s*\)\s*;/', $config, $usernameMatch);
2470
+ preg_match('/define\s*\(\s*[\'"]DB_PASS(WORD)?[\'"],\s*[\'"](.*)[\'"]\s*\)\s*;/', $config, $passwordMatch);
2471
+ preg_match('/define\s*\(\s*[\'"]DB_HOST[\'"],\s*[\'"](.+)[\'"]\s*\)\s*;/', $config, $hostMatch);
2472
+ preg_match('/\$table_prefix\s*=\s*\'(.*)\'\s*;/', $config, $tblPrefixMatch);
2473
+ if (preg_match('/define\s*\(\s*[\'"]UPLOADS[\'"],\s*[\'"](.+)[\'"]\s*\)\s*;/', $config,
2474
+ $match) && isset($match[1])
2475
+ ) {
2476
+ $this->imagesDir = preg_replace('/\'\.\'/', '', $match[1]);
2477
+ } else {
2478
+ $this->imagesDir = 'wp-content' . DIRECTORY_SEPARATOR . 'uploads';
2479
+ }
2480
+
2481
+ if (isset($dbnameMatch[1]) && isset($usernameMatch[1])
2482
+ && isset($passwordMatch[2]) && isset($hostMatch[1]) && isset($tblPrefixMatch[1])
2483
+ ) {
2484
+ $this->dbname = $dbnameMatch[1];
2485
+ $this->username = $usernameMatch[1];
2486
+ $this->password = $passwordMatch[2];
2487
+ $this->setHostPort($hostMatch[1]);
2488
+ $this->tblPrefix = $tblPrefixMatch[1];
2489
+ } elseif (!$this->_tryLoadConfigs()) {
2490
+ die('ERROR_READING_STORE_CONFIG_FILE');
2491
+ }
2492
+
2493
+
2494
+ $cartPlugins = $this->getCartVersionFromDb("option_value", "options",
2495
+ "option_name = 'active_plugins'");
2496
+
2497
+ if ($cartPlugins) {
2498
+ $cartPlugins = unserialize($cartPlugins);
2499
+
2500
+ foreach ($cartPlugins as $plugin) {
2501
+ if (isset($_GET['cart_id'])) {
2502
+ if ($_GET['cart_id'] == 'Woocommerce' && strpos($plugin, 'woocommerce') !== false) {
2503
+ $this->_setWoocommerceData();
2504
+ return;
2505
+ } elseif ($_GET['cart_id'] == 'WPecommerce' && strpos($plugin, 'wp-e-commerce') !== false
2506
+ || $_GET['cart_id'] == 'WPecommerce' && strpos($plugin, 'wp-ecommerce') !== false
2507
+ ) {
2508
+ $this->_setWpecommerceData();
2509
+ return;
2510
+ }
2511
+ } else {
2512
+ if (strpos($plugin, 'woocommerce') !== false) {
2513
+ $this->_setWoocommerceData();
2514
+ return;
2515
+ } elseif (strpos($plugin, 'wp-e-commerce') !== false || strpos($plugin, 'wp-ecommerce') !== false) {
2516
+ $this->_setWpecommerceData();
2517
+ return;
2518
+ }
2519
+ }
2520
  }
2521
+ }
2522
+ die ("CART_PLUGIN_IS_NOT_DETECTED");
2523
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2524
 
2525
+ protected function _setWoocommerceData()
2526
+ {
2527
+ $version = $this->getCartVersionFromDb("option_value", "options", "option_name = 'woocommerce_db_version'");
 
 
 
 
2528
 
2529
+ if ($version != '') {
2530
+ $this->cartVars['dbVersion'] = $version;
2531
+ }
 
 
 
 
2532
 
2533
+ $this->cartVars['categoriesDirRelative'] = 'images/categories/';
2534
+ $this->cartVars['productsDirRelative'] = 'images/products/';
2535
+ $this->imagesDir = "wp-content/uploads/";
 
 
2536
  }
2537
 
2538
+ protected function _setWpecommerceData()
2539
+ {
2540
+ $version = $this->getCartVersionFromDb("option_value", "options", "option_name = 'wpsc_version'");
2541
+ if ($version != '') {
2542
+ $this->cartVars['dbVersion'] = $version;
2543
+ } else {
2544
+ $filePath = M1_STORE_BASE_DIR . "wp-content" . DIRECTORY_SEPARATOR . "plugins" . DIRECTORY_SEPARATOR
2545
+ . "wp-shopping-cart" . DIRECTORY_SEPARATOR . "wp-shopping-cart.php";
2546
+ if (file_exists($filePath)) {
2547
+ $conf = file_get_contents($filePath);
2548
+ preg_match("/define\('WPSC_VERSION.*/", $conf, $match);
2549
+ if (isset($match[0]) && !empty($match[0])) {
2550
+ preg_match("/\d.*/", $match[0], $project);
2551
+ if (isset($project[0]) && !empty($project[0])) {
2552
+ $version = $project[0];
2553
+ $version = str_replace(array(" ", "-", "_", "'", ");", ")", ";"), "", $version);
2554
+ if ($version != '') {
2555
+ $this->cartVars['dbVersion'] = strtolower($version);
2556
+ }
2557
+ }
2558
+ }
2559
+ }
2560
+ }
2561
+
2562
+ if (file_exists(M1_STORE_BASE_DIR . "wp-content/plugins/shopp/Shopp.php")
2563
+ || file_exists(M1_STORE_BASE_DIR . "wp-content/plugins/wp-e-commerce/editor.php")
2564
+ ) {
2565
+ $this->imagesDir = "wp-content/uploads/wpsc/";
2566
+ $this->categoriesImagesDir = $this->imagesDir . 'category_images/';
2567
+ $this->productsImagesDir = $this->imagesDir . 'product_images/';
2568
+ $this->manufacturersImagesDir = $this->imagesDir;
2569
+ } elseif (file_exists(M1_STORE_BASE_DIR . "wp-content/plugins/wp-e-commerce/wp-shopping-cart.php")) {
2570
+ $this->imagesDir = "wp-content/uploads/";
2571
+ $this->categoriesImagesDir = $this->imagesDir . "wpsc/category_images/";
2572
+ $this->productsImagesDir = $this->imagesDir;
2573
+ $this->manufacturersImagesDir = $this->imagesDir;
2574
+ } else {
2575
+ $this->imagesDir = "images/";
2576
+ $this->categoriesImagesDir = $this->imagesDir;
2577
+ $this->productsImagesDir = $this->imagesDir;
2578
+ $this->manufacturersImagesDir = $this->imagesDir;
2579
+ }
2580
+ }
2581
+
2582
+ protected function _tryLoadConfigs()
2583
+ {
2584
+ try {
2585
+ if (file_exists(M1_STORE_BASE_DIR . 'wp-config.php')) {
2586
+ require_once(M1_STORE_BASE_DIR . 'wp-config.php');
2587
+ } else {
2588
+ require_once(dirname(M1_STORE_BASE_DIR) . '/wp-config.php');
2589
+ }
2590
+
2591
+ if (defined('DB_NAME') && defined('DB_USER') && defined('DB_HOST')) {
2592
+ $this->dbname = DB_NAME;
2593
+ $this->username = DB_USER;
2594
+ $this->setHostPort(DB_HOST);
2595
+ } else {
2596
+ return false;
2597
+ }
2598
+
2599
+ if (defined('DB_PASSWORD')) {
2600
+ $this->password = DB_PASSWORD;
2601
+ } elseif (defined('DB_PASS')) {
2602
+ $this->password = DB_PASS;
2603
+ } else {
2604
+ return false;
2605
+ }
2606
+
2607
+ if (defined('WP_CONTENT_DIR')) {
2608
+ $this->imagesDir = WP_CONTENT_DIR . DIRECTORY_SEPARATOR . 'uploads';
2609
+ } elseif (defined('UPLOADS')) {
2610
+ $this->imagesDir = UPLOADS;
2611
+ } else {
2612
+ $this->imagesDir = 'wp-content' . DIRECTORY_SEPARATOR . 'uploads';
2613
+ }
2614
+
2615
+ if (isset($table_prefix)) {
2616
+ $this->tblPrefix = $table_prefix;
2617
+ }
2618
+ } catch (Exception $e) {
2619
+ return false;
2620
+ }
2621
 
2622
+ return true;
2623
+ }
2624
+ }
2625
 
2626
 
2627
  /**
2630
  class M1_Config_Adapter_Magento1212 extends M1_Config_Adapter
2631
  {
2632
 
2633
+ /**
2634
+ * M1_Config_Adapter_Magento1212 constructor.
2635
+ */
2636
+ public function __construct()
2637
+ {
2638
+ // MAGENTO 2.X
2639
+ if (file_exists(M1_STORE_BASE_DIR . 'app/etc/env.php')) {
2640
+ /**
2641
+ * @var array
2642
+ */
2643
+ $config = @include(M1_STORE_BASE_DIR . 'app/etc/env.php');
2644
+
2645
+ $this->cartVars['AdminUrl'] = (string)$config['backend']['frontName'];
2646
+
2647
+ $db = array();
2648
+ foreach ($config['db']['connection'] as $connection) {
2649
+ if ($connection['active'] == 1) {
2650
+ $db = $connection;
2651
+ break;
2652
+ }
2653
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2654
 
2655
+ $this->setHostPort((string)$db['host']);
2656
+ $this->username = (string)$db['username'];
2657
+ $this->dbname = (string)$db['dbname'];
2658
+ $this->password = (string)$db['password'];
2659
+
2660
+ if (file_exists(M1_STORE_BASE_DIR . 'composer.json')) {
2661
+ $string = file_get_contents(M1_STORE_BASE_DIR . 'composer.json');
2662
+ $json = json_decode($string, true);
2663
+ $this->cartVars['dbVersion'] = $json['version'];
2664
+ } else {
2665
+ if (file_exists(M1_STORE_BASE_DIR . 'vendor/magento/framework/AppInterface.php')) {
2666
+ @include M1_STORE_BASE_DIR . 'vendor/magento/framework/AppInterface.php';
2667
+
2668
+ if (defined('\Magento\Framework\AppInterface::VERSION')) {
2669
+ $this->cartVars['dbVersion'] = \Magento\Framework\AppInterface::VERSION;
2670
+ } else {
2671
+ $this->cartVars['dbVersion'] = '2.0';
2672
+ }
2673
+ } else {
2674
+ $this->cartVars['dbVersion'] = '2.0';
2675
+ }
2676
+ }
2677
 
2678
+ if (isset($db['initStatements']) && $db['initStatements'] != '') {
2679
+ $this->cartVars['dbCharSet'] = $db['initStatements'];
2680
+ }
 
2681
 
2682
+ $this->imagesDir = 'pub/media/';
2683
+ $this->categoriesImagesDir = $this->imagesDir . 'catalog/category/';
2684
+ $this->productsImagesDir = $this->imagesDir . 'catalog/product/';
2685
+ $this->manufacturersImagesDir = $this->imagesDir;
2686
 
2687
+ return;
2688
+ }
 
 
 
2689
 
2690
+ /**
2691
+ * @var SimpleXMLElement
2692
+ */
2693
+ $config = simplexml_load_file(M1_STORE_BASE_DIR . 'app/etc/local.xml');
2694
+ $statuses = simplexml_load_file(M1_STORE_BASE_DIR . 'app/code/core/Mage/Sales/etc/config.xml');
2695
 
2696
+ $version = $statuses->modules->Mage_Sales->version;
2697
 
2698
+ $result = array();
 
 
 
 
 
2699
 
2700
+ if (version_compare($version, '1.4.0.25') < 0) {
2701
+ $statuses = $statuses->global->sales->order->statuses;
2702
+ foreach ($statuses->children() as $status) {
2703
+ $result[$status->getName()] = (string)$status->label;
2704
+ }
2705
+ }
2706
+
2707
+ if (file_exists(M1_STORE_BASE_DIR . "app/Mage.php")) {
2708
+ $ver = file_get_contents(M1_STORE_BASE_DIR . "app/Mage.php");
2709
+ if (preg_match("/getVersionInfo[^}]+\'major\' *=> *\'(\d+)\'[^}]+\'minor\' *=> *\'(\d+)\'[^}]+\'revision\' *=> *\'(\d+)\'[^}]+\'patch\' *=> *\'(\d+)\'[^}]+}/s",
2710
+ $ver, $match) == 1
2711
+ ) {
2712
+ $mageVersion = $match[1] . '.' . $match[2] . '.' . $match[3] . '.' . $match[4];
2713
+ $this->cartVars['dbVersion'] = $mageVersion;
2714
+ unset($match);
2715
+ }
2716
+ }
2717
 
2718
+ $this->cartVars['orderStatus'] = $result;
2719
+ $this->cartVars['AdminUrl'] = (string)$config->admin->routers->adminhtml->args->frontName;
2720
 
2721
+ $this->setHostPort((string)$config->global->resources->default_setup->connection->host);
2722
+ $this->username = (string)$config->global->resources->default_setup->connection->username;
2723
+ $this->dbname = (string)$config->global->resources->default_setup->connection->dbname;
2724
+ $this->password = (string)$config->global->resources->default_setup->connection->password;
2725
 
2726
+ $this->imagesDir = 'media/';
2727
+ $this->categoriesImagesDir = $this->imagesDir . "catalog/category/";
2728
+ $this->productsImagesDir = $this->imagesDir . "catalog/product/";
2729
+ $this->manufacturersImagesDir = $this->imagesDir;
2730
+ @unlink(M1_STORE_BASE_DIR . 'app/etc/use_cache.ser');
2731
+ }
2732
  }
2733
 
2734
  /**
2737
  class M1_Config_Adapter_Interspire extends M1_Config_Adapter
2738
  {
2739
 
2740
+ /**
2741
+ * M1_Config_Adapter_Interspire constructor.
2742
+ */
2743
+ public function __construct()
2744
+ {
2745
+ require_once M1_STORE_BASE_DIR . "config/config.php";
2746
 
2747
+ $this->setHostPort($GLOBALS['ISC_CFG']["dbServer"]);
2748
+ $this->username = $GLOBALS['ISC_CFG']["dbUser"];
2749
+ $this->password = $GLOBALS['ISC_CFG']["dbPass"];
2750
+ $this->dbname = $GLOBALS['ISC_CFG']["dbDatabase"];
2751
 
2752
+ $this->imagesDir = $GLOBALS['ISC_CFG']["ImageDirectory"];
2753
+ $this->categoriesImagesDir = $this->imagesDir;
2754
+ $this->productsImagesDir = $this->imagesDir;
2755
+ $this->manufacturersImagesDir = $this->imagesDir;
2756
 
2757
+ define('DEFAULT_LANGUAGE_ISO2', $GLOBALS['ISC_CFG']["Language"]);
2758
 
2759
+ $version = $this->getCartVersionFromDb("database_version", $GLOBALS['ISC_CFG']["tablePrefix"] . "config", '1');
2760
+ if ($version != '') {
2761
+ $this->cartVars['dbVersion'] = $version;
2762
+ }
2763
  }
 
2764
  }
2765
 
2766
  /**
2769
  class M1_Config_Adapter_Pinnacle361 extends M1_Config_Adapter
2770
  {
2771
 
2772
+ /**
2773
+ * M1_Config_Adapter_Pinnacle361 constructor.
2774
+ */
2775
+ public function __construct()
2776
+ {
2777
+ include_once M1_STORE_BASE_DIR . 'content/engine/engine_config.php';
2778
+
2779
+ $this->imagesDir = 'images/';
2780
+ $this->categoriesImagesDir = $this->imagesDir;
2781
+ $this->productsImagesDir = $this->imagesDir;
2782
+ $this->manufacturersImagesDir = $this->imagesDir;
2783
+
2784
+ //$this->Host = DB_HOST;
2785
+ $this->setHostPort(DB_HOST);
2786
+ $this->dbname = DB_NAME;
2787
+ $this->username = DB_USER;
2788
+ $this->password = DB_PASSWORD;
2789
+
2790
+ $version = $this->getCartVersionFromDb(
2791
+ "value",
2792
+ (defined('DB_PREFIX') ? DB_PREFIX : '') . "settings",
2793
+ "name = 'AppVer'"
2794
+ );
2795
+ if ($version != '') {
2796
+ $this->cartVars['dbVersion'] = $version;
2797
+ }
2798
+ }
2799
 
2800
  }
2801
 
2806
  class M1_Config_Adapter_Oscommerce22ms2 extends M1_Config_Adapter
2807
  {
2808
 
2809
+ /**
2810
+ * M1_Config_Adapter_Oscommerce22ms2 constructor.
2811
+ */
2812
+ public function __construct()
2813
+ {
2814
+ $curDir = getcwd();
2815
 
2816
+ chdir(M1_STORE_BASE_DIR);
2817
 
2818
+ @require_once M1_STORE_BASE_DIR
2819
+ . "includes" . DIRECTORY_SEPARATOR
2820
+ . "configure.php";
2821
+
2822
+ chdir($curDir);
2823
+
2824
+ $this->imagesDir = DIR_WS_IMAGES;
2825
+
2826
+ $this->categoriesImagesDir = $this->imagesDir;
2827
+ $this->productsImagesDir = $this->imagesDir;
2828
+ if (defined('DIR_WS_PRODUCT_IMAGES')) {
2829
+ $this->productsImagesDir = DIR_WS_PRODUCT_IMAGES;
2830
+ }
2831
+ if (defined('DIR_WS_ORIGINAL_IMAGES')) {
2832
+ $this->productsImagesDir = DIR_WS_ORIGINAL_IMAGES;
2833
+ }
2834
+ $this->manufacturersImagesDir = $this->imagesDir;
2835
+
2836
+ //$this->Host = DB_SERVER;
2837
+ $this->setHostPort(DB_SERVER);
2838
+ $this->username = DB_SERVER_USERNAME;
2839
+ $this->password = DB_SERVER_PASSWORD;
2840
+ $this->dbname = DB_DATABASE;
2841
+ chdir(M1_STORE_BASE_DIR);
2842
+ if (file_exists(M1_STORE_BASE_DIR . "includes" . DIRECTORY_SEPARATOR . 'application_top.php')) {
2843
+ $conf = file_get_contents(M1_STORE_BASE_DIR . "includes" . DIRECTORY_SEPARATOR . "application_top.php");
2844
+ preg_match("/define\('PROJECT_VERSION.*/", $conf, $match);
2845
+ if (isset($match[0]) && !empty($match[0])) {
2846
+ preg_match("/\d.*/", $match[0], $project);
2847
+ if (isset($project[0]) && !empty($project[0])) {
2848
+ $version = $project[0];
2849
+ $version = str_replace(array(" ", "-", "_", "'", ");"), "", $version);
2850
+ if ($version != '') {
2851
+ $this->cartVars['dbVersion'] = strtolower($version);
2852
+ }
2853
+ }
2854
+ } else {
2855
+ //if another oscommerce based cart
2856
+ if (file_exists(M1_STORE_BASE_DIR . "includes" . DIRECTORY_SEPARATOR . 'version.php')) {
2857
+ @require_once M1_STORE_BASE_DIR . "includes" . DIRECTORY_SEPARATOR . "version.php";
2858
+ if (defined('PROJECT_VERSION') && PROJECT_VERSION != '') {
2859
+ $version = PROJECT_VERSION;
2860
+ preg_match("/\d.*/", $version, $vers);
2861
+ if (isset($vers[0]) && !empty($vers[0])) {
2862
+ $version = $vers[0];
2863
+ $version = str_replace(array(" ", "-", "_"), "", $version);
2864
+ if ($version != '') {
2865
+ $this->cartVars['dbVersion'] = strtolower($version);
2866
+ }
2867
+ }
2868
+ //if zen_cart
2869
+ } else {
2870
+ if (defined('PROJECT_VERSION_MAJOR') && PROJECT_VERSION_MAJOR != '') {
2871
+ $this->cartVars['dbVersion'] = PROJECT_VERSION_MAJOR;
2872
+ }
2873
+ if (defined('PROJECT_VERSION_MINOR') && PROJECT_VERSION_MINOR != '') {
2874
+ $this->cartVars['dbVersion'] .= '.' . PROJECT_VERSION_MINOR;
2875
+ }
2876
+ }
2877
+ }
2878
  }
 
2879
  }
2880
+ chdir($curDir);
2881
  }
 
 
2882
 
2883
  }
2884
 
2885
 
 
2886
  /**
2887
  * Class M1_Config_Adapter_Tomatocart
2888
  */
2889
  class M1_Config_Adapter_Tomatocart extends M1_Config_Adapter
2890
  {
2891
 
2892
+ /**
2893
+ * M1_Config_Adapter_Tomatocart constructor.
2894
+ */
2895
+ public function __construct()
2896
+ {
2897
+ $config = file_get_contents(M1_STORE_BASE_DIR . "includes/configure.php");
2898
+ preg_match("/define\(\'DB_DATABASE\', \'(.+)\'\);/", $config, $match);
2899
+ $this->dbname = $match[1];
2900
+ preg_match("/define\(\'DB_SERVER_USERNAME\', \'(.+)\'\);/", $config, $match);
2901
+ $this->username = $match[1];
2902
+ preg_match("/define\(\'DB_SERVER_PASSWORD\', \'(.*)\'\);/", $config, $match);
2903
+ $this->password = $match[1];
2904
+ preg_match("/define\(\'DB_SERVER\', \'(.+)\'\);/", $config, $match);
2905
+ $this->setHostPort($match[1]);
2906
+
2907
+ preg_match("/define\(\'DIR_WS_IMAGES\', \'(.+)\'\);/", $config, $match);
2908
+ $this->imagesDir = $match[1];
2909
+
2910
+ $this->categoriesImagesDir = $this->imagesDir . 'categories/';
2911
+ $this->productsImagesDir = $this->imagesDir . 'products/';
2912
+ $this->manufacturersImagesDir = $this->imagesDir . 'manufacturers/';
2913
+ if (file_exists(M1_STORE_BASE_DIR . "includes" . DIRECTORY_SEPARATOR . 'application_top.php')) {
2914
+ $conf = file_get_contents(M1_STORE_BASE_DIR . "includes" . DIRECTORY_SEPARATOR . "application_top.php");
2915
+ preg_match("/define\('PROJECT_VERSION.*/", $conf, $match);
2916
+
2917
+ if (isset($match[0]) && !empty($match[0])) {
2918
+ preg_match("/\d.*/", $match[0], $project);
2919
+ if (isset($project[0]) && !empty($project[0])) {
2920
+ $version = $project[0];
2921
+ $version = str_replace(array(" ", "-", "_", "'", ");"), "", $version);
2922
+ if ($version != '') {
2923
+ $this->cartVars['dbVersion'] = strtolower($version);
2924
+ }
2925
+ }
2926
+ } else {
2927
+ //if another version
2928
+ if (file_exists(M1_STORE_BASE_DIR . "includes" . DIRECTORY_SEPARATOR . 'version.php')) {
2929
+ @require_once M1_STORE_BASE_DIR . "includes" . DIRECTORY_SEPARATOR . "version.php";
2930
+ if (defined('PROJECT_VERSION') && PROJECT_VERSION != '') {
2931
+ $version = PROJECT_VERSION;
2932
+ preg_match("/\d.*/", $version, $vers);
2933
+ if (isset($vers[0]) && !empty($vers[0])) {
2934
+ $version = $vers[0];
2935
+ $version = str_replace(array(" ", "-", "_"), "", $version);
2936
+ if ($version != '') {
2937
+ $this->cartVars['dbVersion'] = strtolower($version);
2938
+ }
2939
+ }
2940
+ }
2941
+ }
2942
  }
 
2943
  }
 
2944
  }
 
2945
 
2946
  }
2947
 
2948
 
 
2949
  /**
2950
  * Class M1_Config_Adapter_Sunshop4
2951
  */
2952
  class M1_Config_Adapter_Sunshop4 extends M1_Config_Adapter
2953
  {
2954
 
2955
+ /**
2956
+ * M1_Config_Adapter_Sunshop4 constructor.
2957
+ */
2958
+ public function __construct()
2959
+ {
2960
+ @require_once M1_STORE_BASE_DIR
2961
+ . "include" . DIRECTORY_SEPARATOR
2962
+ . "config.php";
2963
 
2964
+ $this->imagesDir = "images/products/";
2965
 
2966
+ $this->categoriesImagesDir = $this->imagesDir;
2967
+ $this->productsImagesDir = $this->imagesDir;
2968
+ $this->manufacturersImagesDir = $this->imagesDir;
2969
 
2970
+ if (defined('ADMIN_DIR')) {
2971
+ $this->cartVars['AdminUrl'] = ADMIN_DIR;
2972
+ }
2973
 
2974
+ $this->setHostPort($servername);
2975
+ $this->username = $dbusername;
2976
+ $this->password = $dbpassword;
2977
+ $this->dbname = $dbname;
2978
 
2979
+ if (isset($dbprefix)) {
2980
+ $this->tblPrefix = $dbprefix;
2981
+ }
2982
 
2983
+ $version = $this->getCartVersionFromDb("value", "settings", "name = 'version'");
2984
+ if ($version != '') {
2985
+ $this->cartVars['dbVersion'] = $version;
2986
+ }
2987
  }
 
2988
 
2989
  }
2990
 
2991
 
 
2992
  /**
2993
  * Class miSettings
2994
  */
2995
+ class miSettings
2996
+ {
2997
+
2998
+ protected $_arr;
2999
+
3000
+ /**
3001
+ * @return miSettings|null
3002
+ */
3003
+ public function singleton()
3004
+ {
3005
+ static $instance = null;
3006
+ if ($instance == null) {
3007
+ $instance = new miSettings();
3008
+ }
3009
+ return $instance;
3010
+ }
3011
+
3012
+ /**
3013
+ * @param $arr
3014
+ */
3015
+ public function setArray($arr)
3016
+ {
3017
+ $this->_arr[] = $arr;
3018
+ }
3019
+
3020
+ /**
3021
+ * @return mixed
3022
+ */
3023
+ public function getArray()
3024
+ {
3025
+ return $this->_arr;
3026
+ }
3027
 
3028
  }
3029
 
3033
  class M1_Config_Adapter_Summercart3 extends M1_Config_Adapter
3034
  {
3035
 
3036
+ /**
3037
+ * M1_Config_Adapter_Summercart3 constructor.
3038
+ */
3039
+ public function __construct()
3040
+ {
3041
+ @include_once M1_STORE_BASE_DIR . "include/miphpf/Config.php";
3042
 
3043
+ $miSettings = new miSettings();
3044
+ $instance = $miSettings->singleton();
3045
 
3046
+ $data = $instance->getArray();
3047
 
3048
+ $this->setHostPort($data[0]['MI_DEFAULT_DB_HOST']);
3049
+ $this->dbname = $data[0]['MI_DEFAULT_DB_NAME'];
3050
+ $this->username = $data[0]['MI_DEFAULT_DB_USER'];
3051
+ $this->password = $data[0]['MI_DEFAULT_DB_PASS'];
3052
+ $this->imagesDir = "/userfiles/";
3053
 
3054
+ $this->categoriesImagesDir = $this->imagesDir . "categoryimages";
3055
+ $this->productsImagesDir = $this->imagesDir . "productimages";
3056
+ $this->manufacturersImagesDir = $this->imagesDir . "manufacturer";
3057
 
3058
+ if (file_exists(M1_STORE_BASE_DIR . "/include/VERSION")) {
3059
+ $indexFileContent = file_get_contents(M1_STORE_BASE_DIR . "/include/VERSION");
3060
+ $this->cartVars['dbVersion'] = trim($indexFileContent);
3061
+ }
3062
  }
 
3063
 
3064
  }
3065
 
3066
 
 
3067
  /**
3068
  * Class M1_Config_Adapter_Oscommerce3
3069
  */
3070
  class M1_Config_Adapter_Oscommerce3 extends M1_Config_Adapter
3071
  {
3072
 
3073
+ /**
3074
+ * M1_Config_Adapter_Oscommerce3 constructor.
3075
+ */
3076
+ public function __construct()
3077
+ {
3078
+ $file = M1_STORE_BASE_DIR . '/osCommerce/OM/Config/settings.ini';
3079
+ $settings = parse_ini_file($file);
3080
+ $this->imagesDir = "/public/";
3081
+ $this->categoriesImagesDir = $this->imagesDir . "/categories";
3082
+ $this->productsImagesDir = $this->imagesDir . "/products";
3083
+ $this->manufacturersImagesDir = $this->imagesDir;
3084
+
3085
+ $this->host = $settings['db_server'];
3086
+ $this->setHostPort($settings['db_server_port']);
3087
+ $this->username = $settings['db_server_username'];
3088
+ $this->password = $settings['db_server_password'];
3089
+ $this->dbname = $settings['db_database'];
3090
+ }
3091
 
3092
  }
3093
 
3094
 
 
3095
  /**
3096
  * Class M1_Config_Adapter_Prestashop15
3097
  */
3098
  class M1_Config_Adapter_Prestashop15 extends M1_Config_Adapter
3099
  {
3100
 
3101
+ /**
3102
+ * M1_Config_Adapter_Prestashop15 constructor.
3103
+ */
3104
+ public function __construct()
3105
+ {
3106
+ $confFileOne = file_get_contents(M1_STORE_BASE_DIR . "/config/settings.inc.php");
3107
+
3108
+ if (strpos($confFileOne, '_DB_SERVER_') !== false) {
3109
+ $confFileTwo = file_get_contents(M1_STORE_BASE_DIR . "/config/config.inc.php");
3110
+
3111
+ $filesLines = array_merge(explode("\n", $confFileOne), explode("\n", $confFileTwo));
3112
+
3113
+ $execute = '$currentDir = \'\';';
3114
+ $constArray = array();
3115
+ $isComment = false;
3116
+ foreach ($filesLines as $line) {
3117
+ $startComment = preg_match("/^(\/\*)/", $line);
3118
+ $endComment = preg_match("/(\*\/)$/", $line);
3119
+
3120
+ if ($isComment) {
3121
+ if ($endComment) {
3122
+ $isComment = false;
3123
+ }
3124
+ continue;
3125
+ } elseif ($startComment) {
3126
+ $isComment = true;
3127
+ if ($endComment) {
3128
+ $isComment = false;
3129
+ }
3130
+ continue;
3131
+ }
3132
+
3133
+ if (preg_match("/^(\s*)define\(/i", $line)) {
3134
+ if ((strpos($line, '_DB_') !== false) || (strpos($line, '_PS_IMG_DIR_') !== false)
3135
+ || (strpos($line, '_PS_VERSION_') !== false)
3136
+ ) {
3137
+ $const = substr($line, strrpos($line, "'_"));
3138
+ $const = substr($const, 0, strrpos($const, ", "));
3139
+ if (!in_array($const, $constArray)) {
3140
+ $execute .= " " . $line;
3141
+ $constArray[] = $const;
3142
+ }
3143
+ }
3144
+ }
3145
+ }
3146
 
3147
+ define('_PS_ROOT_DIR_', M1_STORE_BASE_DIR);
3148
+ eval($execute);
3149
+ } else {
3150
+ //load configs
3151
+ require_once(M1_STORE_BASE_DIR . "config/defines.inc.php");
3152
+ require_once(M1_STORE_BASE_DIR . "config/autoload.php");
3153
+ require_once(M1_STORE_BASE_DIR . "config/bootstrap.php");
3154
+ }
3155
 
3156
+ $this->setHostPort(_DB_SERVER_);
3157
+ $this->dbname = _DB_NAME_;
3158
+ $this->username = _DB_USER_;
3159
+ $this->password = _DB_PASSWD_;
3160
 
3161
+ if (defined('_PS_IMG_DIR_') && defined('_PS_ROOT_DIR_')) {
3162
 
3163
+ preg_match("/(\/\w+\/)$/i", _PS_IMG_DIR_, $m);
3164
+ $this->imagesDir = $m[1];
3165
 
3166
+ } else {
3167
+ $this->imagesDir = "/img/";
3168
+ }
3169
 
3170
+ $this->categoriesImagesDir = $this->imagesDir;
3171
+ $this->productsImagesDir = $this->imagesDir;
3172
+ $this->manufacturersImagesDir = $this->imagesDir;
3173
 
3174
+ if (defined('_PS_VERSION_')) {
3175
+ $this->cartVars['dbVersion'] = _PS_VERSION_;
3176
+ }
3177
  }
 
3178
 
3179
  }
3180
 
3181
 
 
3182
  /**
3183
  * Class M1_Config_Adapter_Gambio
3184
  */
3185
  class M1_Config_Adapter_Gambio extends M1_Config_Adapter
3186
  {
3187
 
3188
+ /**
3189
+ * M1_Config_Adapter_Gambio constructor.
3190
+ */
3191
+ public function __construct()
3192
+ {
3193
+ $curDir = getcwd();
3194
+
3195
+ chdir(M1_STORE_BASE_DIR);
3196
+
3197
+ @require_once M1_STORE_BASE_DIR . "includes/configure.php";
3198
+
3199
+ chdir($curDir);
3200
+
3201
+ $this->imagesDir = DIR_WS_IMAGES;
3202
+
3203
+ $this->categoriesImagesDir = $this->imagesDir;
3204
+ $this->productsImagesDir = $this->imagesDir;
3205
+ if (defined('DIR_WS_PRODUCT_IMAGES')) {
3206
+ $this->productsImagesDir = DIR_WS_PRODUCT_IMAGES;
3207
+ }
3208
+ if (defined('DIR_WS_ORIGINAL_IMAGES')) {
3209
+ $this->productsImagesDir = DIR_WS_ORIGINAL_IMAGES;
3210
+ }
3211
+ $this->manufacturersImagesDir = $this->imagesDir;
3212
+
3213
+ $this->host = DB_SERVER;
3214
+ //$this->setHostPort(DB_SERVER);
3215
+ $this->username = DB_SERVER_USERNAME;
3216
+ $this->password = DB_SERVER_PASSWORD;
3217
+ $this->dbname = DB_DATABASE;
3218
+
3219
+ chdir(M1_STORE_BASE_DIR);
3220
+ if (file_exists(M1_STORE_BASE_DIR . "includes" . DIRECTORY_SEPARATOR . 'application_top.php')) {
3221
+ $conf = file_get_contents(M1_STORE_BASE_DIR . "includes" . DIRECTORY_SEPARATOR . "application_top.php");
3222
+ preg_match("/define\('PROJECT_VERSION.*/", $conf, $match);
3223
+ if (isset($match[0]) && !empty($match[0])) {
3224
+ preg_match("/\d.*/", $match[0], $project);
3225
+ if (isset($project[0]) && !empty($project[0])) {
3226
+ $version = $project[0];
3227
+ $version = str_replace(array(" ", "-", "_", "'", ");"), "", $version);
3228
+ if ($version != '') {
3229
+ $this->cartVars['dbVersion'] = strtolower($version);
3230
+ }
3231
+ }
3232
+ } else {
3233
+ //if another oscommerce based cart
3234
+ if (file_exists(M1_STORE_BASE_DIR . DIRECTORY_SEPARATOR . 'version_info.php')) {
3235
+ @require_once M1_STORE_BASE_DIR . DIRECTORY_SEPARATOR . "version_info.php";
3236
+ if (defined('PROJECT_VERSION') && PROJECT_VERSION != '') {
3237
+ $version = PROJECT_VERSION;
3238
+ preg_match("/\d.*/", $version, $vers);
3239
+ if (isset($vers[0]) && !empty($vers[0])) {
3240
+ $version = $vers[0];
3241
+ $version = str_replace(array(" ", "-", "_"), "", $version);
3242
+ if ($version != '') {
3243
+ $this->cartVars['dbVersion'] = strtolower($version);
3244
+ }
3245
+ }
3246
+ //if zen_cart
3247
+ } else {
3248
+ if (defined('PROJECT_VERSION_MAJOR') && PROJECT_VERSION_MAJOR != '') {
3249
+ $this->cartVars['dbVersion'] = PROJECT_VERSION_MAJOR;
3250
+ }
3251
+ if (defined('PROJECT_VERSION_MINOR') && PROJECT_VERSION_MINOR != '') {
3252
+ $this->cartVars['dbVersion'] .= '.' . PROJECT_VERSION_MINOR;
3253
+ }
3254
+ }
3255
+ }
3256
  }
 
3257
  }
3258
+ chdir($curDir);
3259
  }
 
 
3260
 
3261
  }
3262
 
3263
 
 
3264
  /**
3265
  * Class M1_Config_Adapter_Shopware
3266
  */
3267
  class M1_Config_Adapter_Shopware extends M1_Config_Adapter
3268
  {
3269
+ /**
3270
+ * M1_Config_Adapter_Shopware constructor.
3271
+ */
3272
+ public function __construct()
3273
+ {
3274
+ if (file_exists(M1_STORE_BASE_DIR . 'engine/Shopware/Application.php')) {
3275
+ $file = file_get_contents(M1_STORE_BASE_DIR . 'engine/Shopware/Application.php');
3276
+ if (preg_match('/const\s+VERSION\s*=\s*[\'"]([0-9.]+)[\'"]/', $file, $matches) && isset($matches[1])) {
3277
+ $this->cartVars['dbVersion'] = $matches[1];
3278
+ }
3279
+ }
3280
 
3281
+ $configs = include(M1_STORE_BASE_DIR . "config.php");
3282
+ $this->setHostPort($configs['db']['host']);
3283
+ $this->username = $configs['db']['username'];
3284
+ $this->password = $configs['db']['password'];
3285
+ $this->dbname = $configs['db']['dbname'];
3286
+ }
 
 
 
 
 
3287
  }
3288
 
3289
  /**
3292
  class M1_Config_Adapter_AceShop extends M1_Config_Adapter
3293
  {
3294
 
3295
+ /**
3296
+ * M1_Config_Adapter_AceShop constructor.
3297
+ */
3298
+ public function __construct()
3299
+ {
3300
+ require_once M1_STORE_BASE_DIR . "/configuration.php";
3301
+
3302
+ if (class_exists("JConfig")) {
3303
 
3304
+ $jconfig = new JConfig();
3305
 
3306
+ $this->setHostPort($jconfig->host);
3307
+ $this->dbname = $jconfig->db;
3308
+ $this->username = $jconfig->user;
3309
+ $this->password = $jconfig->password;
3310
 
3311
+ } else {
 
 
 
3312
 
3313
+ $this->setHostPort($mosConfig_host);
3314
+ $this->dbname = $mosConfig_db;
3315
+ $this->username = $mosConfig_user;
3316
+ $this->password = $mosConfig_password;
3317
+ }
3318
 
3319
+ $this->imagesDir = "components/com_aceshop/opencart/image/";
3320
+ $this->categoriesImagesDir = $this->imagesDir;
3321
+ $this->productsImagesDir = $this->imagesDir;
3322
+ $this->manufacturersImagesDir = $this->imagesDir;
3323
  }
3324
 
 
 
 
 
 
 
3325
  }
3326
 
3327
 
3331
  class M1_Config_Adapter_Cscart203 extends M1_Config_Adapter
3332
  {
3333
 
3334
+ /**
3335
+ * M1_Config_Adapter_Cscart203 constructor.
3336
+ */
3337
+ public function __construct()
3338
+ {
3339
+ define("IN_CSCART", 1);
3340
+ define("CSCART_DIR", M1_STORE_BASE_DIR);
3341
+ define("AREA", 1);
3342
+ define("DIR_ROOT", M1_STORE_BASE_DIR);
3343
+ define("DIR_CSCART", M1_STORE_BASE_DIR);
3344
+ define('DS', DIRECTORY_SEPARATOR);
3345
+ define('BOOTSTRAP', '');
3346
+ require_once M1_STORE_BASE_DIR . 'config.php';
3347
+ defined('DIR_IMAGES') or define('DIR_IMAGES', DIR_ROOT . '/images/');
3348
+
3349
+ //For CS CART 1.3.x
3350
+ if (isset($db_host) && isset($db_name) && isset($db_user) && isset($db_password)) {
3351
+ $this->setHostPort($db_host);
3352
+ $this->dbname = $db_name;
3353
+ $this->username = $db_user;
3354
+ $this->password = $db_password;
3355
+ $this->imagesDir = str_replace(M1_STORE_BASE_DIR, '', IMAGES_STORAGE_DIR);
3356
+ } else {
3357
+
3358
+ $this->setHostPort($config['db_host']);
3359
+ $this->dbname = $config['db_name'];
3360
+ $this->username = $config['db_user'];
3361
+ $this->password = $config['db_password'];
3362
+ $this->imagesDir = str_replace(M1_STORE_BASE_DIR, '', DIR_IMAGES);
3363
+ }
3364
+
3365
+ $this->categoriesImagesDir = $this->imagesDir;
3366
+ $this->productsImagesDir = $this->imagesDir;
3367
+ $this->manufacturersImagesDir = $this->imagesDir;
3368
+
3369
+ if (defined('MAX_FILES_IN_DIR')) {
3370
+ $this->cartVars['cs_max_files_in_dir'] = MAX_FILES_IN_DIR;
3371
+ }
3372
+
3373
+ if (defined('PRODUCT_VERSION')) {
3374
+ $this->cartVars['dbVersion'] = PRODUCT_VERSION;
3375
+ }
3376
+ }
3377
 
3378
  }
3379
 
3384
  class M1_Config_Adapter_LemonStand extends M1_Config_Adapter
3385
  {
3386
 
3387
+ /**
3388
+ * M1_Config_Adapter_LemonStand constructor.
3389
+ */
3390
+ public function __construct()
3391
+ {
3392
+ include(M1_STORE_BASE_DIR . 'phproad/system/phpr.php');
3393
+ include(M1_STORE_BASE_DIR . 'phproad/modules/phpr/classes/phpr_securityframework.php');
3394
 
3395
+ define('PATH_APP', '');
3396
 
3397
+ if (phpversion() > 5) {
3398
+ eval ('Phpr::$config = new MockConfig();
3399
  Phpr::$config->set("SECURE_CONFIG_PATH", M1_STORE_BASE_DIR . "config/config.dat");
3400
  $framework = Phpr_SecurityFramework::create();');
3401
+ }
3402
 
3403
+ $config_content = $framework->get_config_content();
3404
 
3405
+ $this->setHostPort($config_content['mysql_params']['host']);
3406
+ $this->dbname = $config_content['mysql_params']['database'];
3407
+ $this->username = $config_content['mysql_params']['user'];
3408
+ $this->password = $config_content['mysql_params']['password'];
3409
 
3410
+ $this->categoriesImagesDir = '/uploaded/thumbnails/';
3411
+ $this->productsImagesDir = '/uploaded/';
3412
+ $this->manufacturersImagesDir = '/uploaded/thumbnails/';
3413
 
3414
+ $version = $this->getCartVersionFromDb("version_str", "core_versions", "moduleId = 'shop'");
3415
+ $this->cartVars['dbVersion'] = $version;
3416
 
3417
+ }
3418
 
3419
  }
3420
 
3421
  /**
3422
  * Class MockConfig
3423
  */
3424
+ class MockConfig
3425
+ {
3426
+
3427
+ protected $_data = array();
3428
+
3429
+ /**
3430
+ * @param $key
3431
+ * @param $value
3432
+ */
3433
+ public function set($key, $value)
3434
+ {
3435
+ $this->_data[$key] = $value;
3436
+ }
3437
+
3438
+ /**
3439
+ * @param $key
3440
+ * @param string $default
3441
+ * @return mixed|string
3442
+ */
3443
+ public function get($key, $default = 'default')
3444
+ {
3445
+ return isset($this->_data[$key]) ? $this->_data[$key] : $default;
3446
+ }
3447
  }
3448
 
3449
  /**
3452
  class M1_Config_Adapter_DrupalCommerce extends M1_Config_Adapter
3453
  {
3454
 
3455
+ /**
3456
+ * M1_Config_Adapter_DrupalCommerce constructor.
3457
+ */
3458
+ public function __construct()
3459
+ {
3460
+ @include_once M1_STORE_BASE_DIR . "sites/default/settings.php";
3461
+
3462
+ $url = $databases['default']['default'];
3463
+
3464
+ $url['username'] = urldecode($url['username']);
3465
+ $url['password'] = isset($url['password']) ? urldecode($url['password']) : '';
3466
+ $url['host'] = urldecode($url['host']);
3467
+ $url['database'] = urldecode($url['database']);
3468
+ if (isset($url['port'])) {
3469
+ $url['host'] = $url['host'] . ':' . $url['port'];
3470
+ }
3471
 
3472
+ $this->setHostPort($url['host']);
3473
+ $this->dbname = ltrim($url['database'], '/');
3474
+ $this->username = $url['username'];
3475
+ $this->password = $url['password'];
 
 
 
3476
 
3477
+ $this->imagesDir = "/sites/default/files/";
3478
+ if (!file_exists(M1_STORE_BASE_DIR . $this->imagesDir)) {
3479
+ $this->imagesDir = "/files";
3480
+ }
3481
 
3482
+ $fileInfo = M1_STORE_BASE_DIR . "/sites/all/modules/commerce/commerce.info";
3483
+ if (file_exists($fileInfo)) {
3484
+ $str = file_get_contents($fileInfo);
3485
+ if (preg_match('/version\s+=\s+".+-(.+)"/', $str, $match) != 0) {
3486
+ $this->cartVars['dbVersion'] = $match[1];
3487
+ unset($match);
3488
+ }
3489
+ }
3490
 
3491
+ $this->categoriesImagesDir = $this->imagesDir;
3492
+ $this->productsImagesDir = $this->imagesDir;
3493
+ $this->manufacturersImagesDir = $this->imagesDir;
 
 
 
 
3494
  }
 
 
 
 
 
3495
  }
3496
 
3497
  /**
3500
  class M1_Config_Adapter_SSFree extends M1_Config_Adapter
3501
  {
3502
 
3503
+ /**
3504
+ * M1_Config_Adapter_SSFree constructor.
3505
+ */
3506
+ public function __construct()
3507
+ {
3508
+ $config = file_get_contents(M1_STORE_BASE_DIR . 'cfg/connect.inc.php');
3509
+ preg_match("/define\(\'DB_NAME\', \'(.+)\'\);/", $config, $match);
3510
+ $this->dbname = $match[1];
3511
+ preg_match("/define\(\'DB_USER\', \'(.+)\'\);/", $config, $match);
3512
+ $this->username = $match[1];
3513
+ preg_match("/define\(\'DB_PASS\', \'(.*)\'\);/", $config, $match);
3514
+ $this->password = $match[1];
3515
+ preg_match("/define\(\'DB_HOST\', \'(.+)\'\);/", $config, $match);
3516
+ $this->setHostPort($match[1]);
3517
+
3518
+ $this->imagesDir = "products_pictures/";
3519
+ $this->categoriesImagesDir = $this->imagesDir;
3520
+ $this->productsImagesDir = $this->imagesDir;
3521
+ $this->manufacturersImagesDir = $this->imagesDir;
3522
+
3523
+ $generalInc = file_get_contents(M1_STORE_BASE_DIR . 'cfg/general.inc.php');
3524
+
3525
+ preg_match("/define\(\'CONF_CURRENCY_ISO3\', \'(.+)\'\);/", $generalInc, $match);
3526
+ if (count($match) != 0) {
3527
+ $this->cartVars['iso3Currency'] = $match[1];
3528
+ }
3529
 
3530
+ preg_match("/define\(\'CONF_CURRENCY_ID_LEFT\', \'(.+)\'\);/", $generalInc, $match);
3531
+ if (count($match) != 0) {
3532
+ $this->cartVars['currencySymbolLeft'] = $match[1];
3533
+ }
3534
 
3535
+ preg_match("/define\(\'CONF_CURRENCY_ID_RIGHT\', \'(.+)\'\);/", $generalInc, $match);
3536
+ if (count($match) != 0) {
3537
+ $this->cartVars['currencySymbolRight'] = $match[1];
3538
+ }
3539
  }
 
3540
 
3541
  }
3542
 
3546
  class M1_Config_Adapter_Zencart137 extends M1_Config_Adapter
3547
  {
3548
 
3549
+ /**
3550
+ * M1_Config_Adapter_Zencart137 constructor.
3551
+ */
3552
+ public function __construct()
3553
+ {
3554
+ $curDir = getcwd();
 
 
3555
 
3556
+ chdir(M1_STORE_BASE_DIR);
 
 
3557
 
3558
+ @require_once M1_STORE_BASE_DIR . "includes" . DIRECTORY_SEPARATOR . "configure.php";
3559
+ if (file_exists(M1_STORE_BASE_DIR . "includes" . DIRECTORY_SEPARATOR . 'defined_paths.php')) {
3560
+ @require_once M1_STORE_BASE_DIR . "includes" . DIRECTORY_SEPARATOR . "defined_paths.php";
3561
+ }
3562
 
3563
+ chdir($curDir);
3564
 
3565
+ $this->imagesDir = DIR_WS_IMAGES;
 
 
 
 
 
 
 
 
3566
 
3567
+ $this->categoriesImagesDir = $this->imagesDir;
3568
+ $this->productsImagesDir = $this->imagesDir;
3569
+ if (defined('DIR_WS_PRODUCT_IMAGES')) {
3570
+ $this->productsImagesDir = DIR_WS_PRODUCT_IMAGES;
3571
+ }
3572
+ if (defined('DIR_WS_ORIGINAL_IMAGES')) {
3573
+ $this->productsImagesDir = DIR_WS_ORIGINAL_IMAGES;
3574
+ }
3575
+ $this->manufacturersImagesDir = $this->imagesDir;
3576
+
3577
+ //$this->Host = DB_SERVER;
3578
+ $this->setHostPort(DB_SERVER);
3579
+ $this->username = DB_SERVER_USERNAME;
3580
+ $this->password = DB_SERVER_PASSWORD;
3581
+ $this->dbname = DB_DATABASE;
3582
+ if (file_exists(M1_STORE_BASE_DIR . "includes" . DIRECTORY_SEPARATOR . 'version.php')) {
3583
+ @require_once M1_STORE_BASE_DIR
3584
+ . "includes" . DIRECTORY_SEPARATOR
3585
+ . "version.php";
3586
+ $major = PROJECT_VERSION_MAJOR;
3587
+ $minor = PROJECT_VERSION_MINOR;
3588
+ if (defined('EXPECTED_DATABASE_VERSION_MAJOR') && EXPECTED_DATABASE_VERSION_MAJOR != '') {
3589
+ $major = EXPECTED_DATABASE_VERSION_MAJOR;
3590
+ }
3591
+ if (defined('EXPECTED_DATABASE_VERSION_MINOR') && EXPECTED_DATABASE_VERSION_MINOR != '') {
3592
+ $minor = EXPECTED_DATABASE_VERSION_MINOR;
3593
+ }
3594
 
3595
+ if ($major != '' && $minor != '') {
3596
+ $this->cartVars['dbVersion'] = $major . '.' . $minor;
3597
+ }
3598
 
3599
+ }
3600
  }
 
3601
 
3602
  }
3603
 
3604
 
 
 
 
 
 
 
 
 
3605
  class M1_Config_Adapter
3606
  {
3607
+ public $host = 'localhost';
3608
+ public $port = null;//"3306";
3609
+ public $sock = null;
3610
+ public $username = 'root';
3611
+ public $password = '';
3612
+ public $dbname = '';
3613
+ public $tblPrefix = '';
3614
+
3615
+ public $cartType = 'Oscommerce22ms2';
3616
+ public $imagesDir = '';
3617
+ public $categoriesImagesDir = '';
3618
+ public $productsImagesDir = '';
3619
+ public $manufacturersImagesDir = '';
3620
+ public $categoriesImagesDirs = '';
3621
+ public $productsImagesDirs = '';
3622
+ public $manufacturersImagesDirs = '';
3623
+
3624
+ public $languages = array();
3625
+ public $cartVars = array();
3626
+
3627
+ /**
3628
+ * @return mixed
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3629
  */
3630
+ public function create()
3631
+ {
3632
+ $cartType = $this->_detectCartType();
3633
+ $className = "M1_Config_Adapter_" . $cartType;
3634
+
3635
+ $obj = new $className();
3636
+ $obj->cartType = $cartType;
3637
+
3638
+ return $obj;
3639
  }
3640
 
3641
+ /**
3642
+ * @return string
3643
  */
3644
+ private function _detectCartType()
3645
+ {
3646
+ if (isset($_GET['cart_id'])) {
3647
+ $cartId = $_GET['cart_id'];
3648
+ } else {
3649
+ $cartId = '';
3650
+ }
3651
+ switch ($cartId) {
3652
+ default :
3653
+ case 'Prestashop':
3654
+ if (file_exists(M1_STORE_BASE_DIR . "config/config.inc.php")) {
3655
+ if (file_exists(M1_STORE_BASE_DIR . "cache/class_index.php")
3656
+ || file_exists(M1_STORE_BASE_DIR . "app/config/parameters.php")
3657
+ ) {
3658
+ return "Prestashop15";
3659
+ }
3660
+ return "Prestashop11";
3661
+ }
3662
+ case 'Ubercart':
3663
+ if (file_exists(M1_STORE_BASE_DIR . 'sites/default/settings.php')) {
3664
+ if (file_exists(
3665
+ M1_STORE_BASE_DIR
3666
+ . '/modules/ubercart/uc_store/includes/coder_review_uc3x.inc'
3667
+ )) {
3668
+ return "Ubercart3";
3669
+ } elseif (file_exists(
3670
+ M1_STORE_BASE_DIR
3671
+ . 'sites/all/modules/commerce/includes/commerce.controller.inc'
3672
+ )) {
3673
+ return "DrupalCommerce";
3674
+ }
3675
+ return "Ubercart";
3676
+ }
3677
+ case 'Woocommerce':
3678
+ if (file_exists(M1_STORE_BASE_DIR . 'wp-config.php')
3679
+ && file_exists(
3680
+ M1_STORE_BASE_DIR . 'wp-content/plugins/woocommerce/woocommerce.php'
3681
+ )
3682
+ ) {
3683
+ return 'Wordpress';
3684
+ }
3685
+ case 'WPecommerce':
3686
+ if (file_exists(M1_STORE_BASE_DIR . 'wp-config.php')) {
3687
+ return 'Wordpress';
3688
+ }
3689
+ case 'Zencart137':
3690
+ if (file_exists(
3691
+ M1_STORE_BASE_DIR . "includes" . DIRECTORY_SEPARATOR
3692
+ . "configure.php"
3693
+ )
3694
+ && file_exists(M1_STORE_BASE_DIR . "ipn_main_handler.php")
3695
+ ) {
3696
+ return "Zencart137";
3697
+ }
3698
+ case 'Oscommerce22ms2':
3699
+ if (file_exists(
3700
+ M1_STORE_BASE_DIR . "includes" . DIRECTORY_SEPARATOR
3701
+ . "configure.php"
3702
+ )
3703
+ && !file_exists(
3704
+ M1_STORE_BASE_DIR . "includes" . DIRECTORY_SEPARATOR
3705
+ . "toc_constants.php"
3706
+ )
3707
+ ) {
3708
+ return "Oscommerce22ms2";
3709
+ }
3710
+ case 'Gambio':
3711
+ if (file_exists(M1_STORE_BASE_DIR . "/includes/configure.php")) {
3712
+ return "Gambio";
3713
+ }
3714
+ case 'JooCart':
3715
+ if (file_exists(
3716
+ M1_STORE_BASE_DIR . '/components/com_opencart/opencart.php'
3717
+ )) {
3718
+ return 'JooCart';
3719
+ }
3720
+ case 'AceShop':
3721
+ if (file_exists(
3722
+ M1_STORE_BASE_DIR . '/components/com_aceshop/aceshop.php'
3723
+ )) {
3724
+ return 'AceShop';
3725
+ }
3726
+ case 'Oxid':
3727
+ if (file_exists(M1_STORE_BASE_DIR . 'config.inc.php')) {
3728
+ return 'Oxid';
3729
+ }
3730
+ case 'Virtuemart113':
3731
+ if (file_exists(M1_STORE_BASE_DIR . "configuration.php")) {
3732
+ return "Virtuemart113";
3733
+ }
3734
+ case 'Pinnacle361':
3735
+ if (file_exists(
3736
+ M1_STORE_BASE_DIR . 'content/engine/engine_config.php'
3737
+ )) {
3738
+ return "Pinnacle361";
3739
+ }
3740
+ case 'Magento1212':
3741
+ if (file_exists(M1_STORE_BASE_DIR . 'app/etc/local.xml')
3742
+ || @file_exists(M1_STORE_BASE_DIR . 'app/etc/env.php')
3743
+ ) {
3744
+ return "Magento1212";
3745
+ }
3746
+ case 'Cubecart':
3747
+ if (file_exists(M1_STORE_BASE_DIR . 'includes/global.inc.php')) {
3748
+ return "Cubecart";
3749
+ }
3750
+ case 'Cscart203':
3751
+ if (file_exists(M1_STORE_BASE_DIR . "config.local.php")
3752
+ || file_exists(
3753
+ M1_STORE_BASE_DIR . "partner.php"
3754
+ )
3755
+ ) {
3756
+ return "Cscart203";
3757
+ }
3758
+ case 'Opencart14':
3759
+ if ((file_exists(M1_STORE_BASE_DIR . "system/startup.php")
3760
+ || (file_exists(M1_STORE_BASE_DIR . "common.php"))
3761
+ || (file_exists(M1_STORE_BASE_DIR . "library/locator.php"))
3762
+ )
3763
+ && file_exists(M1_STORE_BASE_DIR . "config.php")
3764
+ ) {
3765
+ return "Opencart14";
3766
+ }
3767
+ case 'Shopware':
3768
+ if (file_exists(M1_STORE_BASE_DIR . "config.php")
3769
+ && file_exists(
3770
+ M1_STORE_BASE_DIR . "shopware.php"
3771
+ )
3772
+ ) {
3773
+ return "Shopware";
3774
+ }
3775
+ case 'LemonStand':
3776
+ if (file_exists(M1_STORE_BASE_DIR . "boot.php")) {
3777
+ return "LemonStand";
3778
+ }
3779
+ case 'Interspire':
3780
+ if (file_exists(M1_STORE_BASE_DIR . "config/config.php")) {
3781
+ return "Interspire";
3782
+ }
3783
+ case 'Squirrelcart242':
3784
+ if (file_exists(M1_STORE_BASE_DIR . 'squirrelcart/config.php')) {
3785
+ return "Squirrelcart242";
3786
+ }
3787
+ case 'WebAsyst':
3788
+ if (file_exists(M1_STORE_BASE_DIR . 'kernel/wbs.xml')) {
3789
+ return "WebAsyst";
3790
+ }
3791
+ case 'SSFree':
3792
+ if (file_exists(M1_STORE_BASE_DIR . 'cfg/general.inc.php')
3793
+ && file_exists(
3794
+ M1_STORE_BASE_DIR . 'cfg/connect.inc.php'
3795
+ )
3796
+ ) {
3797
+ return "SSFree";
3798
+ }
3799
+ case 'SSPremium':
3800
+ //Shopscript Premium
3801
+ if (file_exists(M1_STORE_BASE_DIR . 'cfg/connect.inc.php')) {
3802
+ return "SSPremium";
3803
+ }
3804
+
3805
+ //ShopScript5
3806
+ if (file_exists(M1_STORE_BASE_DIR . 'wa.php')
3807
+ && file_exists(
3808
+ M1_STORE_BASE_DIR . 'wa-config/db.php'
3809
+ )
3810
+ ) {
3811
+ return "SSPremium";
3812
+ }
3813
+ case 'Summercart3':
3814
+ if (file_exists(M1_STORE_BASE_DIR . 'sclic.lic')
3815
+ && file_exists(
3816
+ M1_STORE_BASE_DIR . 'include/miphpf/Config.php'
3817
+ )
3818
+ ) {
3819
+ return "Summercart3";
3820
+ }
3821
+ case 'XtcommerceVeyton':
3822
+ if (file_exists(M1_STORE_BASE_DIR . 'conf/config.php')) {
3823
+ return "XtcommerceVeyton";
3824
+ }
3825
+ case 'XCart':
3826
+ if (file_exists(M1_STORE_BASE_DIR . "config.php")) {
3827
+ return "XCart";
3828
+ }
3829
+ case 'Litecommerce':
3830
+ if ((file_exists(M1_STORE_BASE_DIR . '/etc/config.php'))
3831
+ || (file_exists(
3832
+ M1_STORE_BASE_DIR
3833
+ . '/modules/lc_connector/litecommerce/etc/config.php'
3834
+ ))
3835
+ ) {
3836
+ return "Litecommerce";
3837
+ }
3838
+ case 'Hhgmultistore':
3839
+ if (file_exists(M1_STORE_BASE_DIR . 'core/config/configure.php')) {
3840
+ return 'Hhgmultistore';
3841
+ }
3842
+ case 'Sunshop4':
3843
+ if (file_exists(
3844
+ M1_STORE_BASE_DIR . "include" . DIRECTORY_SEPARATOR . "config.php"
3845
+ )
3846
+ || file_exists(
3847
+ M1_STORE_BASE_DIR . "include" . DIRECTORY_SEPARATOR
3848
+ . "db_mysql.php"
3849
+ )
3850
+ ) {
3851
+ return "Sunshop4";
3852
+ }
3853
+ case 'Tomatocart':
3854
+ if (file_exists(
3855
+ M1_STORE_BASE_DIR . "includes" . DIRECTORY_SEPARATOR
3856
+ . "configure.php"
3857
+ )
3858
+ && file_exists(
3859
+ M1_STORE_BASE_DIR . "includes" . DIRECTORY_SEPARATOR
3860
+ . "toc_constants.php"
3861
+ )
3862
+ ) {
3863
+ return 'Tomatocart';
3864
+ }
3865
+ }
3866
+ die ("BRIDGE_ERROR_CONFIGURATION_NOT_FOUND");
3867
  }
3868
 
3869
+ /**
3870
+ * @param $cartType
3871
+ * @return string
3872
+ */
3873
+ public function getAdapterPath($cartType)
3874
+ {
3875
+ return M1_STORE_BASE_DIR . M1_BRIDGE_DIRECTORY_NAME . DIRECTORY_SEPARATOR
3876
+ . "app" . DIRECTORY_SEPARATOR
3877
+ . "class" . DIRECTORY_SEPARATOR
3878
+ . "config_adapter" . DIRECTORY_SEPARATOR . $cartType . ".php";
3879
  }
3880
 
3881
+ /**
3882
+ * @param $source
3883
+ */
3884
+ public function setHostPort($source)
3885
+ {
3886
+ $source = trim($source);
3887
 
3888
+ if ($source == '') {
3889
+ $this->host = 'localhost';
3890
+ return;
3891
+ }
3892
 
3893
+ if (strpos($source, '.sock') !== false) {
3894
+ $socket = ltrim($source, 'localhost:');
3895
+ $socket = ltrim($socket, '127.0.0.1:');
 
 
 
 
 
3896
 
3897
+ $this->host = 'localhost';
3898
+ $this->sock = $socket;
 
 
3899
 
3900
+ return;
3901
+ }
 
 
3902
 
3903
+ $conf = explode(":", $source);
 
 
 
3904
 
3905
+ if (isset($conf[0]) && isset($conf[1])) {
3906
+ $this->host = $conf[0];
3907
+ $this->port = $conf[1];
3908
+ } elseif ($source[0] == '/') {
3909
+ $this->host = 'localhost';
3910
+ $this->port = $source;
3911
+ } else {
3912
+ $this->host = $source;
3913
+ }
3914
  }
3915
 
3916
+ /**
3917
+ * @return bool|M1_Mysql|M1_Mysqli|M1_Pdo
3918
+ */
3919
+ public function connect()
3920
+ {
3921
+ if (function_exists('mysql_connect')) {
3922
+ $link = new M1_Mysql($this);
3923
+ } elseif (function_exists('mysqli_connect')) {
3924
+ $link = new M1_Mysqli($this);
3925
+ } elseif (extension_loaded('pdo_mysql')) {
3926
+ $link = new M1_Pdo($this);
3927
+ } else {
3928
+ $link = false;
3929
+ }
3930
 
3931
+ return $link;
 
 
3932
  }
3933
 
3934
+ /**
3935
+ * @param $field
3936
+ * @param $tableName
3937
+ * @param $where
3938
+ * @return string
3939
+ */
3940
+ public function getCartVersionFromDb($field, $tableName, $where)
3941
+ {
3942
+ $version = '';
3943
 
3944
+ $link = $this->connect();
3945
+ if (!$link) {
3946
+ return '[ERROR] MySQL Query Error: Can not connect to DB';
3947
+ }
3948
 
3949
+ $result = $link->localQuery("
3950
+ SELECT " . $field . " AS version
3951
+ FROM " . $this->tblPrefix . $tableName . "
3952
+ WHERE " . $where
3953
+ );
3954
 
3955
+ if (is_array($result) && isset($result[0]['version'])) {
3956
+ $version = $result[0]['version'];
3957
+ }
 
3958
 
3959
+ return $version;
 
 
 
3960
  }
3961
+ }
3962
 
3963
+ class M1_Bridge
3964
+ {
3965
+ protected $_link = null; //mysql connection link
3966
+ public $config = null; //config adapter
 
 
 
3967
 
3968
+ /**
3969
+ * Bridge constructor
3970
+ *
3971
+ * M1_Bridge constructor.
3972
+ * @param $config
3973
+ */
3974
+ public function __construct(M1_Config_Adapter $config)
3975
+ {
3976
+ $this->config = $config;
3977
 
3978
+ if ($this->getAction() != "savefile") {
3979
+ $this->_link = $this->config->connect();
3980
+ }
3981
  }
3982
 
3983
+ /**
3984
+ * @return mixed
3985
+ */
3986
+ public function getTablesPrefix()
3987
+ {
3988
+ return $this->config->tblPrefix;
3989
  }
3990
 
3991
+ /**
3992
+ * @return null
3993
+ */
3994
+ public function getLink()
3995
+ {
3996
+ return $this->_link;
3997
  }
3998
 
3999
+ /**
4000
+ * @param $sql
4001
+ * @param $fetchMode
4002
+ * @return mixed
4003
+ */
4004
+ public function query($sql, $fetchMode)
4005
+ {
4006
+ return $this->_link->query($sql, $fetchMode);
4007
  }
4008
 
4009
+ /**
4010
+ * @return mixed|string
4011
+ */
4012
+ private function getAction()
4013
+ {
4014
+ if (isset($_GET['action'])) {
4015
+ return str_replace('.', '', $_GET['action']);
4016
+ }
4017
 
4018
+ return '';
4019
+ }
4020
 
4021
+ public function run()
4022
+ {
4023
+ $action = $this->getAction();
 
 
 
 
 
 
 
 
4024
 
4025
+ if ($action == "checkbridge") {
4026
+ echo "BRIDGE_OK";
4027
+ return;
4028
+ }
 
 
4029
 
4030
+ if ($action != "update") {
4031
+ $this->_selfTest();
4032
+ }
 
4033
 
4034
+ if ($action == "update") {
4035
+ $this->_checkPossibilityUpdate();
4036
+ }
4037
 
4038
+ $className = "M1_Bridge_Action_" . ucfirst($action);
4039
+ if (!class_exists($className)) {
4040
+ echo 'ACTION_DO_NOT EXIST' . PHP_EOL;
4041
+ die;
4042
+ }
 
 
 
 
 
4043
 
4044
+ $actionObj = new $className();
4045
+ @$actionObj->cartType = @$this->config->cartType;
4046
+ $actionObj->perform($this);
4047
+ $this->_destroy();
 
 
 
 
 
 
 
 
 
4048
  }
4049
 
4050
+ /**
4051
+ * @param $dir
4052
+ * @return bool
4053
+ */
4054
+ private function isWritable($dir)
4055
+ {
4056
+ if (!@is_dir($dir)) {
4057
+ return false;
4058
+ }
 
 
 
4059
 
4060
+ $dh = @opendir($dir);
 
 
 
 
 
 
 
 
 
4061
 
4062
+ if ($dh === false) {
4063
+ return false;
4064
+ }
4065
 
4066
+ while (($entry = readdir($dh)) !== false) {
4067
+ if ($entry == "." || $entry == ".." || !@is_dir($dir . DIRECTORY_SEPARATOR . $entry)) {
4068
+ continue;
4069
+ }
4070
 
4071
+ if (!$this->isWritable($dir . DIRECTORY_SEPARATOR . $entry)) {
4072
+ return false;
4073
+ }
4074
+ }
 
 
4075
 
4076
+ if (!is_writable($dir)) {
4077
+ return false;
4078
+ }
 
4079
 
4080
+ return true;
4081
+ }
 
 
 
 
 
 
 
4082
 
4083
+ private function _destroy()
4084
+ {
4085
+ $this->_link = null;
4086
  }
 
4087
 
4088
+ private function _checkPossibilityUpdate()
4089
+ {
4090
+ if (!is_writable(M1_STORE_BASE_DIR . "/" . M1_BRIDGE_DIRECTORY_NAME . "/")) {
4091
+ die("ERROR_TRIED_TO_PERMISSION" . M1_STORE_BASE_DIR . "/" . M1_BRIDGE_DIRECTORY_NAME . "/");
4092
+ }
 
 
4093
 
4094
+ if (isset($_GET['hash']) && $_GET['hash'] === M1_TOKEN) {
4095
+ // good :)
4096
+ } else {
4097
+ die('ERROR_INVALID_TOKEN');
4098
+ }
 
 
4099
 
4100
+ if (!is_writable(M1_STORE_BASE_DIR . "/" . M1_BRIDGE_DIRECTORY_NAME . "/bridge.php")) {
4101
+ die("ERROR_TRIED_TO_PERMISSION_BRIDGE_FILE" . M1_STORE_BASE_DIR . "/" . M1_BRIDGE_DIRECTORY_NAME . "/bridge.php");
4102
+ }
4103
+ }
 
 
 
 
 
4104
 
4105
+ private function _selfTest()
4106
+ {
4107
+ if (isset($_GET['token'])) {
4108
+ if ($_GET['token'] === M1_TOKEN) {
4109
+ // good :)
4110
+ } else {
4111
+ die('ERROR_INVALID_TOKEN');
4112
+ }
4113
+ } else {
4114
+ die('BRIDGE INSTALLED.<br /> Version: ' . M1_BRIDGE_VERSION);
4115
+ }
4116
  }
4117
 
4118
+ }
 
4119
 
 
 
 
4120
 
4121
+ class M1_Mysql
4122
+ {
4123
+ public $config = null; // config adapter
4124
+ public $result = array();
4125
+ public $dataBaseHandle = null;
4126
 
4127
+ /**
4128
+ * mysql constructor
4129
+ *
4130
+ * @param M1_Config_Adapter $config
4131
+ * @return M1_Mysql
4132
+ */
4133
+ public function __construct($config)
4134
+ {
4135
+ $this->config = $config;
4136
  }
4137
 
4138
+ /**
4139
+ * @return bool|null|resource
4140
+ */
4141
+ private function getDataBaseHandle()
4142
+ {
4143
+ if ($this->dataBaseHandle) {
4144
+ return $this->dataBaseHandle;
4145
+ }
4146
 
4147
+ $this->dataBaseHandle = $this->connect();
 
 
 
 
4148
 
4149
+ if (!$this->dataBaseHandle) {
4150
+ exit('[ERROR] MySQL Query Error: Can not connect to DB');
4151
+ }
 
 
4152
 
4153
+ return $this->dataBaseHandle;
 
 
 
 
 
 
 
4154
  }
4155
 
4156
+ /**
4157
+ * @return bool|null|resource
4158
+ */
4159
+ private function connect()
4160
+ {
4161
+ $triesCount = 10;
4162
+ $link = null;
4163
+ $host = $this->config->host . ($this->config->port ? ':' . $this->config->port : '');
4164
+
4165
+ if ($this->config->sock !== null) {
4166
+ $host = $this->config->host . ':' . $this->config->sock;
4167
+ }
4168
 
4169
+ $password = stripslashes($this->config->password);
 
 
4170
 
4171
+ while (!$link) {
4172
+ if (!$triesCount--) {
4173
+ break;
4174
+ }
4175
 
4176
+ $link = @mysql_connect($host, $this->config->username, $password);
4177
+ if (!$link) {
4178
+ sleep(5);
4179
+ }
4180
+ }
4181
 
4182
+ if ($link) {
4183
+ mysql_select_db($this->config->dbname, $link);
4184
+ } else {
4185
+ return false;
4186
+ }
4187
+
4188
+ return $link;
4189
  }
4190
 
4191
+ /**
4192
+ * @param string $sql sql query
4193
+ *
4194
+ * @return array
4195
+ */
4196
+ public function localQuery($sql)
4197
+ {
4198
+ $result = array();
4199
+ $dataBaseHandle = $this->getDataBaseHandle();
4200
 
4201
+ $sth = mysql_query($sql, $dataBaseHandle);
 
 
 
4202
 
4203
+ if (is_bool($sth)) {
4204
+ return $sth;
4205
+ }
 
 
4206
 
4207
+ while (($row = mysql_fetch_assoc($sth)) != false) {
4208
+ $result[] = $row;
4209
+ }
 
 
4210
 
4211
+ return $result;
 
4212
  }
 
 
 
 
 
4213
 
4214
+ /**
4215
+ * @param string $sql sql query
4216
+ * @param int $fetchType fetch Type
4217
+ *
4218
+ * @return array
4219
+ */
4220
+ public function query($sql, $fetchType)
4221
+ {
4222
+ $result = array(
4223
+ 'result' => null,
4224
+ 'message' => '',
4225
+ );
4226
+ $dataBaseHandle = $this->getDataBaseHandle();
4227
+
4228
+ if (!$dataBaseHandle) {
4229
+ $result['message'] = '[ERROR] MySQL Query Error: Can not connect to DB';
4230
+ return $result;
4231
  }
4232
 
4233
+ if (isset($_GET['disable_checks'])) {
4234
+ $this->localQuery('SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0');
4235
+ $this->localQuery("SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO'");
4236
  }
 
4237
 
4238
+ if (isset($_REQUEST['set_names'])) {
4239
+ mysql_set_charset($_REQUEST['set_names'], $dataBaseHandle);
 
 
 
4240
  }
4241
 
4242
+ $fetchMode = MYSQL_ASSOC;
4243
+ switch ($fetchType) {
4244
+ case 3:
4245
+ $fetchMode = MYSQL_BOTH;
4246
+ break;
4247
+ case 2:
4248
+ $fetchMode = MYSQL_NUM;
4249
+ break;
4250
+ case 1:
4251
+ $fetchMode = MYSQL_ASSOC;
4252
+ break;
4253
+ default:
4254
+ break;
4255
  }
 
4256
 
4257
+ $res = mysql_query($sql, $dataBaseHandle);
4258
+
4259
+ $triesCount = 10;
4260
+ while (mysql_errno($dataBaseHandle) == 2013) {
4261
+ if (!$triesCount--) {
4262
+ break;
4263
+ }
4264
+ // reconnect
4265
+ $dataBaseHandle = $this->getDataBaseHandle();
4266
+ if ($dataBaseHandle) {
4267
+
4268
+ if (isset($_REQUEST['set_names'])) {
4269
+ mysql_set_charset($_REQUEST['set_names'], $dataBaseHandle);
4270
+ }
4271
+
4272
+ // execute query once again
4273
+ $res = mysql_query($sql, $dataBaseHandle);
4274
+ }
4275
  }
4276
 
4277
+ if (($errno = mysql_errno($dataBaseHandle)) != 0) {
4278
+ $result['message'] = '[ERROR] Mysql Query Error: ' . $errno . ', ' . mysql_error($dataBaseHandle);
4279
+ return $result;
4280
  }
 
4281
 
4282
+ if (!is_resource($res)) {
4283
+ $result['result'] = $res;
4284
+ return $result;
 
 
4285
  }
4286
 
4287
+ $fetchedFields = array();
4288
+ while (($field = mysql_fetch_field($res)) !== false) {
4289
+ $fetchedFields[] = $field;
4290
  }
 
 
4291
 
4292
+ $rows = array();
4293
+ while (($row = mysql_fetch_array($res, $fetchMode)) !== false) {
4294
+ $rows[] = $row;
4295
+ }
 
 
 
 
 
 
4296
 
4297
+ if (isset($_GET['disable_checks'])) {
4298
+ $this->localQuery("SET SQL_MODE=IFNULL(@OLD_SQL_MODE,'')");
4299
+ $this->localQuery("SET FOREIGN_KEY_CHECKS=IFNULL(@OLD_FOREIGN_KEY_CHECKS,0)");
4300
+ }
4301
 
4302
+ $result['result'] = $rows;
4303
+ $result['fetchedFields'] = $fetchedFields;
4304
 
4305
+ mysql_free_result($res);
4306
+ return $result;
4307
+ }
 
 
 
4308
 
4309
+ /**
4310
+ * @return int
4311
+ */
4312
+ public function getLastInsertId()
4313
+ {
4314
+ return mysql_insert_id($this->dataBaseHandle);
4315
+ }
 
 
 
 
 
 
 
 
 
4316
 
4317
+ /**
4318
+ * @return int
4319
+ */
4320
+ public function getAffectedRows()
4321
+ {
4322
+ return mysql_affected_rows($this->dataBaseHandle);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4323
  }
4324
 
4325
+ /**
4326
+ * @return void
4327
+ */
4328
+ public function __destruct()
4329
+ {
4330
+ if ($this->dataBaseHandle) {
4331
+ mysql_close($this->dataBaseHandle);
4332
+ }
4333
+
4334
+ $this->dataBaseHandle = null;
 
 
 
4335
  }
4336
 
4337
+ }
4338
 
 
 
 
 
 
 
 
 
4339
 
4340
+ class M1_Pdo
4341
+ {
4342
+ public $config = null; // config adapter
4343
+ public $noResult = array('delete', 'update', 'move', 'truncate', 'insert', 'set', 'create', 'drop');
4344
+ public $dataBaseHandle = null;
4345
 
4346
+ private $_insertedId = 0;
4347
+ private $_affectedRows = 0;
 
 
4348
 
4349
+ /**
4350
+ * pdo constructor
4351
+ *
4352
+ * @param M1_Config_Adapter $config configuration
4353
+ * @return M1_Pdo
4354
+ */
4355
+ public function __construct($config)
4356
+ {
4357
+ $this->config = $config;
4358
  }
4359
 
4360
+ /**
4361
+ * @return bool|null|PDO
4362
+ */
4363
+ private function getDataBaseHandle()
4364
+ {
4365
+ if ($this->dataBaseHandle) {
4366
+ return $this->dataBaseHandle;
4367
+ }
4368
 
4369
+ $this->dataBaseHandle = $this->connect();
4370
+
4371
+ if (!$this->dataBaseHandle) {
4372
+ exit('[ERROR] MySQL Query Error: Can not connect to DB');
4373
+ }
4374
 
4375
+ return $this->dataBaseHandle;
 
 
4376
  }
4377
 
4378
+ /**
4379
+ * @return bool|PDO
4380
+ */
4381
+ private function connect()
4382
+ {
4383
+ $triesCount = 3;
4384
+ $password = stripslashes($this->config->password);
4385
+
4386
+ while ($triesCount) {
4387
+ try {
4388
+ $dsn = 'mysql:dbname=' . $this->config->dbname . ';host=' . $this->config->host;
4389
+ if ($this->config->port) {
4390
+ $dsn .= ';port=' . $this->config->port;
4391
+ }
4392
+ if ($this->config->sock != null) {
4393
+ $dsn .= ';unix_socket=' . $this->config->sock;
4394
+ }
4395
+
4396
+ $link = new PDO($dsn, $this->config->username, $password);
4397
+ $link->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
4398
+
4399
+ return $link;
4400
+
4401
+ } catch (PDOException $e) {
4402
+ $triesCount--;
4403
+ sleep(1);
4404
+ }
4405
+ }
4406
+ return false;
4407
  }
4408
 
4409
+ /**
4410
+ * @param string $sql sql query
4411
+ *
4412
+ * @return array|bool
4413
+ */
4414
+ public function localQuery($sql)
4415
+ {
4416
+ $result = array();
4417
+ $dataBaseHandle = $this->getDataBaseHandle();
4418
 
4419
+ $sth = $dataBaseHandle->query($sql);
 
 
4420
 
4421
+ foreach ($this->noResult as $statement) {
4422
+ if (!$sth || strpos(strtolower(trim($sql)), $statement) === 0) {
4423
+ return true;
4424
+ }
4425
+ }
 
 
4426
 
4427
+ while (($row = $sth->fetch(PDO::FETCH_ASSOC)) != false) {
4428
+ $result[] = $row;
4429
+ }
 
 
 
 
4430
 
4431
+ return $result;
 
 
 
 
 
 
4432
  }
4433
 
4434
+ /**
4435
+ * @param string $sql sql query
4436
+ * @param int $fetchType fetch Type
4437
+ *
4438
+ * @return array
4439
+ */
4440
+ public function query($sql, $fetchType)
4441
+ {
4442
+ $result = array(
4443
+ 'result' => null,
4444
+ 'message' => '',
4445
+ 'fetchedFields' => array()
4446
+ );
4447
+ $dataBaseHandle = $this->getDataBaseHandle();
4448
+
4449
+ if (isset($_GET['disable_checks'])) {
4450
+ $dataBaseHandle->exec('SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0');
4451
+ $dataBaseHandle->exec("SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO'");
4452
+ }
4453
 
4454
+ if (isset($_REQUEST['set_names'])) {
4455
+ $dataBaseHandle->exec("SET NAMES '" . ($_REQUEST['set_names']) . "'");
4456
+ $dataBaseHandle->exec("SET CHARACTER SET '" . ($_REQUEST['set_names']) . "'");
4457
+ $dataBaseHandle->exec("SET CHARACTER_SET_CONNECTION = '" . ($_REQUEST['set_names']) . "'");
4458
+ }
4459
 
4460
+ switch ($fetchType) {
4461
+ case 3:
4462
+ $dataBaseHandle->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_BOTH);
4463
+ break;
4464
+ case 2:
4465
+ $dataBaseHandle->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_NUM);
4466
+ break;
4467
+ case 1:
4468
+ default:
4469
+ $dataBaseHandle->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
4470
+ break;
4471
+ }
4472
 
4473
+ try {
4474
+ $res = $dataBaseHandle->query($sql);
4475
+ $this->_affectedRows = $res->rowCount();
4476
+ $this->_insertedId = $dataBaseHandle->lastInsertId();
4477
+ } catch (PDOException $e) {
4478
+ $result['message'] = '[ERROR] Mysql Query Error: ' . $e->getCode() . ', ' . $e->getMessage();
4479
+ return $result;
4480
+ }
4481
 
4482
+ foreach ($this->noResult as $statement) {
4483
+ if (!$res || strpos(strtolower(trim($sql)), $statement) === 0) {
4484
+ $result['result'] = true;
4485
+ return $result;
4486
+ }
4487
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4488
 
4489
+ $rows = array();
4490
+ while (($row = $res->fetch()) !== false) {
4491
+ $rows[] = $row;
4492
+ }
4493
 
4494
+ if (isset($_GET['disable_checks'])) {
4495
+ $this->localQuery("SET SQL_MODE=IFNULL(@OLD_SQL_MODE,'')");
4496
+ $this->localQuery("SET FOREIGN_KEY_CHECKS=IFNULL(@OLD_FOREIGN_KEY_CHECKS,0)");
4497
+ }
4498
 
4499
+ $result['result'] = $rows;
4500
+
4501
+ unset($res);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4502
  return $result;
 
4503
  }
4504
 
4505
+ /**
4506
+ * @return string|int
4507
+ */
4508
+ public function getLastInsertId()
4509
+ {
4510
+ return $this->_insertedId;
4511
  }
4512
 
4513
+ /**
4514
+ * @return int
4515
+ */
4516
+ public function getAffectedRows()
4517
+ {
4518
+ return $this->_affectedRows;
4519
  }
4520
 
4521
+ /**
4522
+ * @return void
4523
+ */
4524
+ public function __destruct()
4525
+ {
4526
+ $this->dataBaseHandle = null;
4527
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4528
  }
4529
 
4530
 
4531
+ define('M1_BRIDGE_VERSION', '29');
4532
  define('M1_BRIDGE_DOWNLOAD_LINK', 'https://api.api2cart.com/v1.0/bridge.download.file?update');
4533
  define('M1_BRIDGE_DIRECTORY_NAME', basename(getcwd()));
4534
 
4535
+ @ini_set('display_errors', 1);
4536
  if (substr(phpversion(), 0, 1) == 5) {
4537
+ error_reporting(E_ALL & ~E_STRICT);
4538
  } else {
4539
+ error_reporting(E_ALL);
4540
  }
4541
 
4542
  require_once 'config.php';
4547
  */
4548
  function stripslashes_array($array)
4549
  {
4550
+ return is_array($array) ? array_map('stripslashes_array', $array) : stripslashes($array);
4551
  }
4552
 
4553
+ function exceptions_error_handler($severity, $message, $filename, $lineno)
4554
+ {
4555
+ if (error_reporting() == 0) {
4556
+ return;
4557
+ }
4558
+ if (error_reporting() & $severity) {
4559
+ throw new ErrorException($message, 0, $severity, $filename, $lineno);
4560
+ }
4561
  }
4562
 
4563
  set_error_handler('exceptions_error_handler');
4567
  */
4568
  function getPHPExecutable()
4569
  {
4570
+ $paths = explode(PATH_SEPARATOR, getenv('PATH'));
4571
+ $paths[] = PHP_BINDIR;
4572
+ foreach ($paths as $path) {
4573
+ // we need this for XAMPP (Windows)
4574
+ if (isset($_SERVER["WINDIR"]) && strstr($path, 'php.exe') && file_exists($path) && is_file($path)) {
4575
+ return $path;
4576
+ } else {
4577
+ $phpExecutable = $path . DIRECTORY_SEPARATOR . "php" . (isset($_SERVER["WINDIR"]) ? ".exe" : "");
4578
+ if (file_exists($phpExecutable) && is_file($phpExecutable)) {
4579
+ return $phpExecutable;
4580
+ }
4581
+ }
4582
+ }
4583
+ return false;
4584
  }
4585
 
4586
  if (!isset($_SERVER)) {
4587
+ $_GET = &$HTTP_GET_VARS;
4588
+ $_POST = &$HTTP_POST_VARS;
4589
+ $_ENV = &$HTTP_ENV_VARS;
4590
+ $_SERVER = &$HTTP_SERVER_VARS;
4591
+ $_COOKIE = &$HTTP_COOKIE_VARS;
4592
+ $_REQUEST = array_merge($_GET, $_POST, $_COOKIE);
4593
  }
4594
 
4595
  if (get_magic_quotes_gpc()) {
4596
+ $_COOKIE = stripslashes_array($_COOKIE);
4597
+ $_FILES = stripslashes_array($_FILES);
4598
+ $_GET = stripslashes_array($_GET);
4599
+ $_POST = stripslashes_array($_POST);
4600
+ $_REQUEST = stripslashes_array($_REQUEST);
4601
  }
4602
 
4603
+ if (isset($_POST['store_root'])) {
4604
+ define("M1_STORE_BASE_DIR", $_POST['store_root'] . DIRECTORY_SEPARATOR);
4605
+ } elseif (isset($_SERVER['SCRIPT_FILENAME'])) {
4606
+ $scriptPath = $_SERVER['SCRIPT_FILENAME'];
4607
+ if (isset($_SERVER['PATH_TRANSLATED']) && $_SERVER['PATH_TRANSLATED'] != "") {
4608
+ $scriptPath = $_SERVER['PATH_TRANSLATED'];
4609
+ }
4610
+ define("M1_STORE_BASE_DIR", preg_replace('/[^\/\\\]*[\/\\\][^\/\\\]*$/', '', $scriptPath));
4611
  } else {
4612
+ //Windows IIS
4613
+ define("M1_STORE_BASE_DIR", preg_replace('/[^\/\\\]*[\/\\\][^\/\\\]*$/', '', realpath(dirname(__FILE__) . "/../")));
4614
  }
4615
+
4616
  $adapter = new M1_Config_Adapter();
4617
  $bridge = new M1_Bridge($adapter->create());
4618
 
4619
  if (!$bridge->getLink()) {
4620
+ die ('ERROR_BRIDGE_CANT_CONNECT_DB');
4621
  }
4622
 
4623
  $bridge->run();
app/code/community/Webinterpret/Connector/bridge2cart/config.php CHANGED
@@ -8,13 +8,5 @@
8
  * @license http://opensource.org/licenses/osl-3.0.php
9
  */
10
 
11
- // Load helper
12
- if (!class_exists('Webinterpret_Bridge2Cart_Helper')) {
13
- if (!defined('WI_HELPER_CALL_HANDLE_REQUEST')) {
14
- define('WI_HELPER_CALL_HANDLE_REQUEST', false);
15
- }
16
- require_once 'helper.php';
17
- }
18
-
19
  // Set M1 token
20
- define("M1_TOKEN", Webinterpret_Bridge2Cart_Helper::getWebinterpretKey());
8
  * @license http://opensource.org/licenses/osl-3.0.php
9
  */
10
 
 
 
 
 
 
 
 
 
11
  // Set M1 token
12
+ //define("M1_TOKEN", '');
app/code/community/Webinterpret/Connector/bridge2cart/helper.php DELETED
@@ -1,1108 +0,0 @@
1
- <?php
2
- /**
3
- * Bridge helper
4
- *
5
- * @category Webinterpret
6
- * @package Webinterpret_Connector
7
- * @author Webinterpret Team <info@webinterpret.com>
8
- * @license http://opensource.org/licenses/osl-3.0.php
9
- */
10
-
11
- if (!defined('DS')) {
12
- define('DS', DIRECTORY_SEPARATOR);
13
- }
14
-
15
- if (!function_exists('stripslashes_array')) {
16
- function stripslashes_array($array) {
17
- return is_array($array) ? array_map('stripslashes_array', $array) : stripslashes($array);
18
- }
19
- }
20
-
21
- if (!function_exists('lcfirst')) {
22
- f