Version Notes
Instant account security with effortless, email-based two-factor authentication. No tokens.
Download this release
Release Info
Developer | Rublon Team |
Extension | rublon2factor |
Version | 2.0.0 |
Comparing to | |
See all releases |
Version 2.0.0
- app/code/community/Rublon/RublonModule/Block/Adminhtml/Header.php +28 -0
- app/code/community/Rublon/RublonModule/Block/Adminhtml/Menu.php +55 -0
- app/code/community/Rublon/RublonModule/Block/Seal.php +60 -0
- app/code/community/Rublon/RublonModule/Helper/Data.php +1050 -0
- app/code/community/Rublon/RublonModule/Model/Observer.php +107 -0
- app/code/community/Rublon/RublonModule/Model/Resource/User.php +31 -0
- app/code/community/Rublon/RublonModule/Model/Resource/User/Collection.php +26 -0
- app/code/community/Rublon/RublonModule/Model/User.php +42 -0
- app/code/community/Rublon/RublonModule/controllers/Adminhtml/ActivationController.php +93 -0
- app/code/community/Rublon/RublonModule/controllers/Adminhtml/SettingsController.php +84 -0
- app/code/community/Rublon/RublonModule/controllers/CallbackController.php +129 -0
- app/code/community/Rublon/RublonModule/controllers/RegistrationController.php +71 -0
- app/code/community/Rublon/RublonModule/etc/adminhtml.xml +41 -0
- app/code/community/Rublon/RublonModule/etc/config.xml +114 -0
- app/code/community/Rublon/RublonModule/etc/system.xml +60 -0
- app/code/community/Rublon/RublonModule/img/index.php +35 -0
- app/code/community/Rublon/RublonModule/img/rublon_logo_16x16.png +0 -0
- app/code/community/Rublon/RublonModule/img/rublon_logo_16x16@2x.png +0 -0
- app/code/community/Rublon/RublonModule/img/rublon_logo_32x32.png +0 -0
- app/code/community/Rublon/RublonModule/img/rublon_logo_32x32@2x.png +0 -0
- app/code/community/Rublon/RublonModule/img/rublon_visual.gif +0 -0
- app/code/community/Rublon/RublonModule/img/rublon_visual@2x.gif +0 -0
- app/code/community/Rublon/RublonModule/lib/Rublon/Rublon2Factor.php +158 -0
- app/code/community/Rublon/RublonModule/lib/Rublon/Rublon2FactorCallback.php +311 -0
- app/code/community/Rublon/RublonModule/lib/Rublon/Rublon2FactorGUI.php +64 -0
- app/code/community/Rublon/RublonModule/lib/Rublon/cert/cacert.pem +3895 -0
- app/code/community/Rublon/RublonModule/lib/Rublon/core/API/RublonAPIBeginTransaction.php +82 -0
- app/code/community/Rublon/RublonModule/lib/Rublon/core/API/RublonAPICheckUserDevice.php +69 -0
- app/code/community/Rublon/RublonModule/lib/Rublon/core/API/RublonAPIClient.php +519 -0
- app/code/community/Rublon/RublonModule/lib/Rublon/core/API/RublonAPICredentials.php +148 -0
- app/code/community/Rublon/RublonModule/lib/Rublon/core/API/RublonAPIGetAvailableFeatures.php +69 -0
- app/code/community/Rublon/RublonModule/lib/Rublon/core/API/RublonAPINotification.php +94 -0
- app/code/community/Rublon/RublonModule/lib/Rublon/core/HTML/RublonBadge.php +28 -0
- app/code/community/Rublon/RublonModule/lib/Rublon/core/HTML/RublonButton.php +309 -0
- app/code/community/Rublon/RublonModule/lib/Rublon/core/HTML/RublonConsumerScript.php +178 -0
- app/code/community/Rublon/RublonModule/lib/Rublon/core/HTML/RublonDeviceWidget.php +19 -0
- app/code/community/Rublon/RublonModule/lib/Rublon/core/HTML/RublonLoginBox.php +36 -0
- app/code/community/Rublon/RublonModule/lib/Rublon/core/HTML/RublonShareAccessWidget.php +20 -0
- app/code/community/Rublon/RublonModule/lib/Rublon/core/HTML/RublonSubscribeWidget.php +19 -0
- app/code/community/Rublon/RublonModule/lib/Rublon/core/HTML/RublonWidget.php +78 -0
- app/code/community/Rublon/RublonModule/lib/Rublon/core/RublonAuthParams.php +445 -0
- app/code/community/Rublon/RublonModule/lib/Rublon/core/RublonConsumer.php +236 -0
- app/code/community/Rublon/RublonModule/lib/Rublon/core/RublonException.php +85 -0
- app/code/community/Rublon/RublonModule/lib/Rublon/core/RublonGUI.php +78 -0
- app/code/community/Rublon/RublonModule/lib/Rublon/core/RublonNative.php +58 -0
- app/code/community/Rublon/RublonModule/lib/Rublon/core/RublonSignatureWrapper.php +325 -0
- app/code/community/Rublon/RublonModule/lib/RublonConsumerRegistration/RublonConsumerRegistration.php +440 -0
- app/code/community/Rublon/RublonModule/lib/RublonConsumerRegistration/RublonConsumerRegistrationCommon.php +284 -0
- app/code/community/Rublon/RublonModule/lib/RublonConsumerRegistration/RublonConsumerRegistrationTemplate.php +463 -0
- app/code/community/Rublon/RublonModule/lib/RublonConsumerRegistration/index.php +35 -0
- app/code/community/Rublon/RublonModule/lib/RublonImplemented/Rublon2FactorCallbackMagento.php +44 -0
- app/code/community/Rublon/RublonModule/lib/RublonImplemented/Rublon2FactorGUIMagento.php +118 -0
- app/code/community/Rublon/RublonModule/lib/RublonImplemented/Rublon2FactorGUIPrestaShop.php +117 -0
- app/code/community/Rublon/RublonModule/lib/RublonImplemented/Rublon2FactorMagento.php +29 -0
- app/code/community/Rublon/RublonModule/lib/RublonImplemented/Rublon2FactorPrestaShop.php +29 -0
- app/code/community/Rublon/RublonModule/lib/RublonImplemented/RublonAPICheckProtection.php +100 -0
- app/code/community/Rublon/RublonModule/lib/RublonImplemented/RublonAPINewsletterSignup.php +65 -0
- app/code/community/Rublon/RublonModule/lib/RublonImplemented/RublonAPIPluginHistory.php +60 -0
- app/code/community/Rublon/RublonModule/lib/RublonImplemented/RublonConsumerRegistrationMagento.php +491 -0
- app/code/community/Rublon/RublonModule/lib/RublonImplemented/RublonFeature.php +169 -0
- app/code/community/Rublon/RublonModule/lib/RublonImplemented/RublonRequests.php +106 -0
- app/code/community/Rublon/RublonModule/lib/RublonIssueNotifier/RublonIssueNotifier.php +306 -0
- app/code/community/Rublon/RublonModule/lib/RublonIssueNotifier/RublonMagentoIssueNotifier.php +111 -0
- app/code/community/Rublon/RublonModule/lib/RublonIssueNotifier/RublonPrestaShopIssueNotifier.php +104 -0
- app/code/community/Rublon/RublonModule/lib/RublonIssueNotifier/index.php +35 -0
- app/design/adminhtml/default/default/layout/rublonmodule.xml +49 -0
- app/design/adminhtml/default/default/template/RublonModule/activation.phtml +60 -0
- app/design/adminhtml/default/default/template/RublonModule/apiRegistration.phtml +41 -0
- app/design/adminhtml/default/default/template/RublonModule/index.phtml +54 -0
- app/design/adminhtml/default/default/template/RublonModule/registration.phtml +25 -0
- app/etc/modules/Rublon_RublonModule.xml +14 -0
- app/locale/pl_PL/Rublon_RublonModule.csv +41 -0
- js/Rublon/rublon.js +36 -0
- package.xml +18 -0
- skin/adminhtml/base/default/Rublon/css/rublon.css +201 -0
- skin/adminhtml/default/default/Rublon/img/rublon_badge.svg +32 -0
- skin/adminhtml/default/default/Rublon/img/rublon_logo_16x16.png +0 -0
- skin/adminhtml/default/default/Rublon/img/rublon_logo_16x16@2x.png +0 -0
- skin/adminhtml/default/default/Rublon/img/rublon_logo_32x32.png +0 -0
- skin/adminhtml/default/default/Rublon/img/rublon_logo_32x32@2x.png +0 -0
- skin/adminhtml/default/default/Rublon/img/rublon_visual.gif +0 -0
- skin/adminhtml/default/default/Rublon/img/rublon_visual@2x.gif +0 -0
app/code/community/Rublon/RublonModule/Block/Adminhtml/Header.php
ADDED
@@ -0,0 +1,28 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Header of the admin page (backend)
|
5 |
+
*
|
6 |
+
*/
|
7 |
+
|
8 |
+
|
9 |
+
class Rublon_RublonModule_Block_Adminhtml_Header extends Mage_Adminhtml_Block_Page_Header {
|
10 |
+
|
11 |
+
public function __() {
|
12 |
+
|
13 |
+
$args = func_get_args();
|
14 |
+
$result = call_user_func_array('parent::__', $args);
|
15 |
+
|
16 |
+
if (!empty($args[0]) AND $args[0] == "Logged in as %s") {
|
17 |
+
$helper = Mage::helper('rublonmodule');
|
18 |
+
$helper->setModule(RublonMagentoModule::ADMIN);
|
19 |
+
|
20 |
+
if ($helper->isRublonSecuredAccount()) {
|
21 |
+
$result .= ' '. $helper->getRublonIcon();
|
22 |
+
}
|
23 |
+
}
|
24 |
+
return $result;
|
25 |
+
}
|
26 |
+
|
27 |
+
|
28 |
+
}
|
app/code/community/Rublon/RublonModule/Block/Adminhtml/Menu.php
ADDED
@@ -0,0 +1,55 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Menu of the admin page (backend)
|
5 |
+
*
|
6 |
+
*/
|
7 |
+
class Rublon_RublonModule_Block_Adminhtml_Menu extends Mage_Adminhtml_Block_Page_Menu {
|
8 |
+
|
9 |
+
|
10 |
+
/**
|
11 |
+
* Append Rublon menu item
|
12 |
+
*
|
13 |
+
* @see Mage_Adminhtml_Block_Page_Menu::getMenuArray()
|
14 |
+
* @return array
|
15 |
+
*/
|
16 |
+
public function getMenuArray() {
|
17 |
+
|
18 |
+
$result = parent::getMenuArray();
|
19 |
+
|
20 |
+
$helper = Mage::helper('rublonmodule');
|
21 |
+
$helper->setModule(RublonMagentoModule::ADMIN);
|
22 |
+
|
23 |
+
if (!empty($result['rublonmodule']) && !empty($result['rublonmodule']['children'])) {
|
24 |
+
foreach ($result['rublonmodule']['children'] as &$child) {
|
25 |
+
if ($child['label'] == 'Settings') {
|
26 |
+
if (!$helper->isRublonConfigured()) {
|
27 |
+
$child['label'] = 'Activation';
|
28 |
+
}
|
29 |
+
}
|
30 |
+
}
|
31 |
+
} elseif($helper->isRublonConfigured()) {
|
32 |
+
$result['rublonmodule'] = array(
|
33 |
+
'label' => 'Rublon',
|
34 |
+
'sort_order' => '10',
|
35 |
+
'url' => '',
|
36 |
+
'active' => '',
|
37 |
+
'level' => 0,
|
38 |
+
'children' => array(
|
39 |
+
'settings' => array(
|
40 |
+
'label' => $this->__('Trusted Devices'),
|
41 |
+
'sort_order' => '10',
|
42 |
+
'url' => $helper->getSettingsPageUrl(),
|
43 |
+
'active' => '',
|
44 |
+
'level' => 0
|
45 |
+
)
|
46 |
+
)
|
47 |
+
);
|
48 |
+
}
|
49 |
+
|
50 |
+
return $result;
|
51 |
+
|
52 |
+
}
|
53 |
+
|
54 |
+
|
55 |
+
}
|
app/code/community/Rublon/RublonModule/Block/Seal.php
ADDED
@@ -0,0 +1,60 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Rublon Seal logo
|
4 |
+
*
|
5 |
+
* @package rublon/rublon2factor
|
6 |
+
* @author Adips Sp. z o.o.
|
7 |
+
* @copyright Adips Sp. z o.o.
|
8 |
+
* @license http://opensource.org/licenses/gpl-license.php GNU Public License, version 2
|
9 |
+
*/
|
10 |
+
|
11 |
+
/**
|
12 |
+
* Rublon Seal logo block
|
13 |
+
*/
|
14 |
+
class Rublon_RublonModule_Block_Seal extends Mage_Core_Block_Template
|
15 |
+
{
|
16 |
+
/**
|
17 |
+
* Returns the html code of Rublon seal
|
18 |
+
*
|
19 |
+
* @return string
|
20 |
+
*/
|
21 |
+
protected function _toHtml() {
|
22 |
+
|
23 |
+
$whereIam = Mage::getDesign()->getArea();
|
24 |
+
|
25 |
+
if ($whereIam == 'adminhtml') {
|
26 |
+
$sealCSS = 'position:relative;top:35px;text-align:center;width:96px;';
|
27 |
+
} else {
|
28 |
+
$sealCSS = 'margin-top: 30px; float: right;top:25px;';
|
29 |
+
}
|
30 |
+
|
31 |
+
$badgeImgUrl = Mage::getDesign()->getSkinBaseUrl() . 'Rublon/img/rublon_badge.svg';
|
32 |
+
|
33 |
+
$helper = Mage::helper('rublonmodule');
|
34 |
+
return sprintf(<<<'END'
|
35 |
+
|
36 |
+
<div style="%s" id="RublonSeal">
|
37 |
+
<div id="rublon-seal"><div class="rublon-seal-link"><div id="RublonBadgeWidget"><img src="%s"></div><a style="color:#0073aa;text-decoration:none;font-size:10px" id="RublonBadgeLink" href="https://rublon.com" target="_blank">Rublon 2FA</a></div></div>
|
38 |
+
</div>
|
39 |
+
<script type="text/javascript">
|
40 |
+
|
41 |
+
(function (d, s, id) { var js; if (d.getElementById(id)) return; js = d.createElement(s); js.id = id; js.src = "https://code.rublon.com/rublon-sdk-js-sa"; var p = d.getElementsByTagName(s)[0]; p.parentNode.insertBefore(js, p); })(document, "script", "RublonConsumerJs-sdk");
|
42 |
+
|
43 |
+
if (document.addEventListener) {
|
44 |
+
document.addEventListener("DOMContentLoaded", function() {
|
45 |
+
if (document.getElementById("loginForm")) { // admin login
|
46 |
+
var seal = document.getElementById("RublonSeal");
|
47 |
+
var node = seal.parentNode;
|
48 |
+
node.removeChild(seal);
|
49 |
+
node.appendChild(seal);
|
50 |
+
}
|
51 |
+
});
|
52 |
+
}
|
53 |
+
</script>
|
54 |
+
END
|
55 |
+
, $sealCSS, $badgeImgUrl );
|
56 |
+
}
|
57 |
+
}
|
58 |
+
|
59 |
+
|
60 |
+
?>
|
app/code/community/Rublon/RublonModule/Helper/Data.php
ADDED
@@ -0,0 +1,1050 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Rublon helper
|
4 |
+
*
|
5 |
+
* @package rublon/rublon2factor
|
6 |
+
* @author Adips Sp. z o.o.
|
7 |
+
* @copyright Adips Sp. z o.o.
|
8 |
+
* @license http://opensource.org/licenses/gpl-license.php GNU Public License, version 2
|
9 |
+
*/
|
10 |
+
|
11 |
+
// Include required Rublon modules
|
12 |
+
require_once (Mage::getBaseDir('code') . DS . 'community' . DS . 'Rublon' . DS . RublonMagentoModule::MODULE_NAME . DS . 'lib' . DS . 'RublonImplemented' . DS . 'Rublon2FactorMagento.php');
|
13 |
+
require_once (Mage::getBaseDir('code') . DS . 'community' . DS . 'Rublon' . DS . RublonMagentoModule::MODULE_NAME . DS . 'lib' . DS . 'RublonIssueNotifier' . DS . 'RublonMagentoIssueNotifier.php');
|
14 |
+
require_once (Mage::getBaseDir('code') . DS . 'community' . DS . 'Rublon' . DS . RublonMagentoModule::MODULE_NAME . DS . 'lib' . DS . 'RublonImplemented' . DS . 'RublonConsumerRegistrationMagento.php');
|
15 |
+
require_once (Mage::getBaseDir('code') . DS . 'community' . DS . 'Rublon' . DS . RublonMagentoModule::MODULE_NAME . DS . 'lib' . DS . 'RublonImplemented' . DS . 'RublonRequests.php');
|
16 |
+
require_once (Mage::getBaseDir('code') . DS . 'community' . DS . 'Rublon' . DS . RublonMagentoModule::MODULE_NAME . DS . 'lib' . DS . 'Rublon' . DS . 'core' . DS . 'API' . DS . 'RublonAPIGetAvailableFeatures.php');
|
17 |
+
require_once (Mage::getBaseDir('code') . DS . 'community' . DS . 'Rublon' . DS . RublonMagentoModule::MODULE_NAME . DS . 'lib' . DS . 'RublonImplemented' . DS . 'RublonFeature.php');
|
18 |
+
|
19 |
+
/**
|
20 |
+
* Magento modules constants wrapper class
|
21 |
+
*
|
22 |
+
*/
|
23 |
+
class RublonMagentoModule {
|
24 |
+
|
25 |
+
const FRONT = 'front';
|
26 |
+
|
27 |
+
const ADMIN = 'admin';
|
28 |
+
|
29 |
+
const CONNECT = 'connect';
|
30 |
+
|
31 |
+
const YES = 'yes';
|
32 |
+
|
33 |
+
const NO = 'no';
|
34 |
+
|
35 |
+
const PROTECTION_TYPE_MOBILE = 'mobile';
|
36 |
+
|
37 |
+
const PROTECTION_TYPE_EMAIL = 'email';
|
38 |
+
|
39 |
+
const RUBLON_NOTIFY_TYPE_ERROR = 'error';
|
40 |
+
|
41 |
+
const RUBLON_NOTIFY_TYPE_STATS = 'statistics';
|
42 |
+
|
43 |
+
const RUBLON_SUPPORT_EMAIL = 'support@rublon.com';
|
44 |
+
|
45 |
+
const FLUSHED_CACHE = 'rublon_flushed_cache';
|
46 |
+
|
47 |
+
/**
|
48 |
+
* Module name
|
49 |
+
* @var string
|
50 |
+
*/
|
51 |
+
const MODULE_NAME = 'RublonModule';
|
52 |
+
}
|
53 |
+
|
54 |
+
|
55 |
+
|
56 |
+
/**
|
57 |
+
* Main RublonModule for Magento helper class
|
58 |
+
*/
|
59 |
+
class Rublon_RublonModule_Helper_Data extends Mage_Core_Helper_Abstract {
|
60 |
+
|
61 |
+
/**
|
62 |
+
* Version of the plugin.
|
63 |
+
*/
|
64 |
+
const PLUGIN_VERSION = '2.0.0';
|
65 |
+
|
66 |
+
/**
|
67 |
+
* Rublon API domain
|
68 |
+
*
|
69 |
+
* @var string
|
70 |
+
*/
|
71 |
+
const RUBLON_DOMAIN = 'https://code.rublon.com';
|
72 |
+
|
73 |
+
/**
|
74 |
+
* Rublon module registration API domain
|
75 |
+
*
|
76 |
+
* @var string
|
77 |
+
*/
|
78 |
+
const RUBLON_REGISTER_DOMAIN = 'https://developers.rublon.com';
|
79 |
+
|
80 |
+
/**
|
81 |
+
* Rublon email sales
|
82 |
+
* @var string
|
83 |
+
*/
|
84 |
+
const RUBLON_EMAIL_SALES = 'sales@rublon.com';
|
85 |
+
|
86 |
+
/**
|
87 |
+
* Technology tag
|
88 |
+
*
|
89 |
+
* @var string
|
90 |
+
*/
|
91 |
+
const TECHNOLOGY = 'magento';
|
92 |
+
|
93 |
+
/**
|
94 |
+
* ACL path for Rublon configuration permissions
|
95 |
+
*
|
96 |
+
* @var string
|
97 |
+
*/
|
98 |
+
const ACL_RUBLON_CONFIG = 'admin/system/config/rublon2factor_options';
|
99 |
+
|
100 |
+
/**
|
101 |
+
* Registration initialize URL
|
102 |
+
*
|
103 |
+
* @var string
|
104 |
+
*/
|
105 |
+
const URL_REGISTRATION_INIT = 'rublon/registration/initialize';
|
106 |
+
|
107 |
+
/**
|
108 |
+
* Administrator role name
|
109 |
+
*
|
110 |
+
* @var string
|
111 |
+
*/
|
112 |
+
const ADMIN_ROLE_NAME = 'Administrators';
|
113 |
+
|
114 |
+
/**
|
115 |
+
* Setting key name for project owner email
|
116 |
+
* @var string
|
117 |
+
*/
|
118 |
+
const SETTING_PROJECT_OWNER_EMAIL = 'rublon_project_owner_email';
|
119 |
+
|
120 |
+
/**
|
121 |
+
* Module name to authenticate for
|
122 |
+
*
|
123 |
+
* @var string
|
124 |
+
*/
|
125 |
+
public $module;
|
126 |
+
|
127 |
+
/**
|
128 |
+
* Rublon instance
|
129 |
+
*
|
130 |
+
* @var Rublon2Factor
|
131 |
+
*/
|
132 |
+
private $service = null;
|
133 |
+
|
134 |
+
/**
|
135 |
+
* Is Rublon enabled and configured
|
136 |
+
*
|
137 |
+
* @var bool
|
138 |
+
*/
|
139 |
+
private $isEnabled;
|
140 |
+
|
141 |
+
/**
|
142 |
+
* Magento user ID to authenticate
|
143 |
+
*
|
144 |
+
* @var int
|
145 |
+
*/
|
146 |
+
private $authUserId = null;
|
147 |
+
|
148 |
+
/**
|
149 |
+
* Magento user Email to authenticate
|
150 |
+
*
|
151 |
+
* @var int
|
152 |
+
*/
|
153 |
+
private $authUserEmail = null;
|
154 |
+
|
155 |
+
/**
|
156 |
+
* Instance of the Rublon Issue Notifier
|
157 |
+
*
|
158 |
+
* @var RublonMagentoIssueNotifier
|
159 |
+
*/
|
160 |
+
private $issueNotifier;
|
161 |
+
|
162 |
+
|
163 |
+
|
164 |
+
/**
|
165 |
+
* Initialize object
|
166 |
+
*/
|
167 |
+
public function __construct() {
|
168 |
+
|
169 |
+
$this->issueNotifier = new RublonMagentoIssueNotifier($this);
|
170 |
+
|
171 |
+
$this->isEnabled = ($this->getSystemToken() AND $this->getSecretKey());
|
172 |
+
|
173 |
+
if ($this->isRublonConfigured()) {
|
174 |
+
$this->service = new Rublon2FactorMagento($this->getSystemToken(), $this->getSecretKey());
|
175 |
+
}
|
176 |
+
}
|
177 |
+
|
178 |
+
public function getIssueNotifier() {
|
179 |
+
return $this->issueNotifier;
|
180 |
+
}
|
181 |
+
|
182 |
+
/**
|
183 |
+
* Returns Rublon2Factor instance.
|
184 |
+
*
|
185 |
+
* @return object <Rublon2Factor>
|
186 |
+
*/
|
187 |
+
public function getRublon() {
|
188 |
+
if ( $this->service instanceof Rublon2FactorMagento && $this->isRublonConfigured()) {
|
189 |
+
$rublon = $this->service;
|
190 |
+
} else {
|
191 |
+
$rublon = $this->service = new Rublon2FactorMagento($this->getSystemToken(), $this->getSecretKey());
|
192 |
+
}
|
193 |
+
|
194 |
+
return $rublon;
|
195 |
+
}
|
196 |
+
|
197 |
+
/**
|
198 |
+
* Get module's technology tag
|
199 |
+
*
|
200 |
+
* @return string
|
201 |
+
*/
|
202 |
+
public function getTechnology() {
|
203 |
+
return self::TECHNOLOGY;
|
204 |
+
}
|
205 |
+
|
206 |
+
|
207 |
+
/**
|
208 |
+
* Initializes Rublon registration.
|
209 |
+
*/
|
210 |
+
public function initRegistration() {
|
211 |
+
$this->registration = new RublonConsumerRegistrationMagento();
|
212 |
+
$this->registration->setDomain(self::RUBLON_REGISTER_DOMAIN);
|
213 |
+
}
|
214 |
+
|
215 |
+
public function getApiRegDomain() {
|
216 |
+
return self::RUBLON_REGISTER_DOMAIN;
|
217 |
+
}
|
218 |
+
|
219 |
+
/**
|
220 |
+
* Start Rublon registration process.
|
221 |
+
*
|
222 |
+
* @param string $back Back to the My Account or Configuration page
|
223 |
+
*/
|
224 |
+
public function runRublonRegistration($back = null) {
|
225 |
+
if (!empty($back)) {
|
226 |
+
Mage::getSingleton('core/session')->setReturnBack($back);
|
227 |
+
}
|
228 |
+
$this->consumerRegistrationAction(RublonConsumerRegistration::ACTION_INITIALIZE);
|
229 |
+
}
|
230 |
+
|
231 |
+
/**
|
232 |
+
* Handle action of the Rublon registration process.
|
233 |
+
*
|
234 |
+
* @param string $action
|
235 |
+
* @return void
|
236 |
+
*/
|
237 |
+
public function consumerRegistrationAction($action) {
|
238 |
+
$this->initRegistration();
|
239 |
+
if (! $this->isRublonEnabled()) {
|
240 |
+
try {
|
241 |
+
$this->registration->action($action);
|
242 |
+
} catch (RublonException $e) {
|
243 |
+
$this->addError($e->getMessage(), array(
|
244 |
+
'method' => __METHOD__,
|
245 |
+
'file' => __FILE__
|
246 |
+
));
|
247 |
+
$this->returnToPage($this->getSettingsPageUrl());
|
248 |
+
}
|
249 |
+
} else {
|
250 |
+
$this->addError('Error', array(
|
251 |
+
'method' => __METHOD__,
|
252 |
+
'file' => __FILE__
|
253 |
+
));
|
254 |
+
$this->returnToPage($this->getSettingsPageUrl());
|
255 |
+
}
|
256 |
+
}
|
257 |
+
|
258 |
+
/**
|
259 |
+
* Wrap JS into DOMContentLoaded event
|
260 |
+
*
|
261 |
+
* @param string $content
|
262 |
+
* @return string
|
263 |
+
*/
|
264 |
+
public function getScriptOnload($content) {
|
265 |
+
return '<script type="text/javascript">if (document.addEventListener) {
|
266 |
+
document.addEventListener("DOMContentLoaded", function() {
|
267 |
+
'. $content .'
|
268 |
+
});
|
269 |
+
}
|
270 |
+
</script>';
|
271 |
+
}
|
272 |
+
|
273 |
+
/**
|
274 |
+
* Checks whether Rublon is enabled and configured.
|
275 |
+
*
|
276 |
+
* @return boolean
|
277 |
+
*/
|
278 |
+
public function isRublonEnabled() {
|
279 |
+
return $this->isEnabled;
|
280 |
+
}
|
281 |
+
|
282 |
+
/**
|
283 |
+
* Checks whether Rublon is configured.
|
284 |
+
*
|
285 |
+
* @return boolean
|
286 |
+
*/
|
287 |
+
public function isRublonConfigured() {
|
288 |
+
return ($this->getSystemToken() AND $this->getSecretKey());
|
289 |
+
}
|
290 |
+
|
291 |
+
|
292 |
+
/**
|
293 |
+
* Get URL called before authentication
|
294 |
+
*
|
295 |
+
* @return string
|
296 |
+
*/
|
297 |
+
public function getBeforeAuthUrl() {
|
298 |
+
switch ($this->getModule()) {
|
299 |
+
case RublonMagentoModule::FRONT:
|
300 |
+
$session = Mage::getSingleton('customer/session');
|
301 |
+
$helper = Mage::helper('customer');
|
302 |
+
break;
|
303 |
+
default:
|
304 |
+
$session = Mage::getSingleton('admin/session');
|
305 |
+
$helper = Mage::helper('admin');
|
306 |
+
}
|
307 |
+
if (!$session->getBeforeAuthUrl() || $session->getBeforeAuthUrl() == Mage::getBaseUrl()) {
|
308 |
+
return $this->getAfterLoginUrl();
|
309 |
+
} else {
|
310 |
+
return $session->getBeforeAuthUrl();
|
311 |
+
}
|
312 |
+
}
|
313 |
+
|
314 |
+
|
315 |
+
/**
|
316 |
+
* Get Rublon Settings page URL
|
317 |
+
*
|
318 |
+
* @return string
|
319 |
+
*/
|
320 |
+
public function getSettingsPageUrl() {
|
321 |
+
switch ($this->getModule()) {
|
322 |
+
case RublonMagentoModule::ADMIN:
|
323 |
+
return Mage::helper("adminhtml")->getUrl('rublon/adminhtml_settings');
|
324 |
+
case RublonMagentoModule::CONNECT:
|
325 |
+
return $this->getMagentoConnectUrl();
|
326 |
+
// default:
|
327 |
+
// return Mage::getUrl('rublon/customer/settings');
|
328 |
+
}
|
329 |
+
}
|
330 |
+
|
331 |
+
|
332 |
+
/**
|
333 |
+
* Get URL that should be called after login
|
334 |
+
*
|
335 |
+
* @return string
|
336 |
+
*/
|
337 |
+
public function getAfterLoginUrl() {
|
338 |
+
switch ($this->getModule()) {
|
339 |
+
case RublonMagentoModule::ADMIN:
|
340 |
+
return Mage::helper("adminhtml")->getUrl('adminhtml');
|
341 |
+
case RublonMagentoModule::CONNECT:
|
342 |
+
return $this->getMagentoConnectUrl();
|
343 |
+
default:
|
344 |
+
return Mage::getUrl('customer/account');
|
345 |
+
}
|
346 |
+
}
|
347 |
+
|
348 |
+
|
349 |
+
|
350 |
+
/**
|
351 |
+
* Login an user with given id, as a current user.
|
352 |
+
*
|
353 |
+
* @return void
|
354 |
+
*/
|
355 |
+
public function loginUser($userId) {
|
356 |
+
if ($this->isAdmin()) {
|
357 |
+
$this->loginAdmin($userId);
|
358 |
+
} else {
|
359 |
+
$this->loginCustomer($userId);
|
360 |
+
}
|
361 |
+
}
|
362 |
+
|
363 |
+
/**
|
364 |
+
* Login an user with given id, as a current administrator.
|
365 |
+
*
|
366 |
+
* @return void
|
367 |
+
*/
|
368 |
+
private function loginAdmin($userId) {
|
369 |
+
$session = $this->getUserSession();
|
370 |
+
$model = $this->getUserModel();
|
371 |
+
$session->setUser($model->load($userId));
|
372 |
+
}
|
373 |
+
|
374 |
+
/**
|
375 |
+
* Login an user with given id, as a current customer.
|
376 |
+
*
|
377 |
+
* @return void
|
378 |
+
*/
|
379 |
+
private function loginCustomer($userId) {
|
380 |
+
$session = $this->getUserSession();
|
381 |
+
$model = $this->getUserModel();
|
382 |
+
$session->setCustomer($model->load($userId));
|
383 |
+
}
|
384 |
+
|
385 |
+
/**
|
386 |
+
* Perform second factor authentication for an administrator
|
387 |
+
* login action.
|
388 |
+
*
|
389 |
+
* @return void
|
390 |
+
*/
|
391 |
+
public function authenticateAdmin($observer) {
|
392 |
+
|
393 |
+
$this->authUserId = $observer->getUser()->getId();
|
394 |
+
$this->authUserEmail = $observer->getUser()->getEmail();
|
395 |
+
|
396 |
+
$this->authenticateSecondFactor();
|
397 |
+
}
|
398 |
+
|
399 |
+
/**
|
400 |
+
* Perform second factor authentication for a customer
|
401 |
+
* login action.
|
402 |
+
*
|
403 |
+
* @return void
|
404 |
+
*/
|
405 |
+
public function authenticateCustomer($observer) {
|
406 |
+
$this->authUserId = $observer->getCustomer()->getId();
|
407 |
+
$this->authenticateSecondFactor();
|
408 |
+
}
|
409 |
+
|
410 |
+
/**
|
411 |
+
* Start authenticating an user (administrator or customer) using
|
412 |
+
* second factor service.
|
413 |
+
*
|
414 |
+
* @return void
|
415 |
+
*/
|
416 |
+
public function authenticateSecondFactor() {
|
417 |
+
|
418 |
+
$module = $this->getModule();
|
419 |
+
|
420 |
+
$authParams = array(
|
421 |
+
'module' => $module,
|
422 |
+
);
|
423 |
+
|
424 |
+
if ($module == RublonMagentoModule::CONNECT) {
|
425 |
+
$callbackUrl = $this->getCallbackUrl($connect = true);
|
426 |
+
} else {
|
427 |
+
$callbackUrl = $this->getCallbackUrl();
|
428 |
+
}
|
429 |
+
|
430 |
+
$userId = $this->getAuthUserId();
|
431 |
+
$email = $this->getAuthUserEmail();
|
432 |
+
|
433 |
+
$this->clearLoggedUser();
|
434 |
+
|
435 |
+
try {
|
436 |
+
|
437 |
+
$authUrl = $this->service->auth($callbackUrl, $userId, $email, $authParams);
|
438 |
+
if (!empty($authUrl)) {
|
439 |
+
|
440 |
+
// Retrive cached rublon features
|
441 |
+
RublonFeature::getFeatures();
|
442 |
+
|
443 |
+
$this->redirect($authUrl);
|
444 |
+
} else {
|
445 |
+
// do nothing
|
446 |
+
}
|
447 |
+
|
448 |
+
} catch (RublonException $e) {
|
449 |
+
|
450 |
+
$notifierOptions = array(
|
451 |
+
'Method' => __METHOD__,
|
452 |
+
'Line' => __LINE__,
|
453 |
+
'Trace' => $e->getTraceAsString()
|
454 |
+
);
|
455 |
+
|
456 |
+
$this->addError($e, $notifierOptions);
|
457 |
+
}
|
458 |
+
}
|
459 |
+
|
460 |
+
|
461 |
+
/**
|
462 |
+
* Return proper session, according to the login process
|
463 |
+
* side (administrator or customer);
|
464 |
+
*
|
465 |
+
* @return Mage_Admin_Model_Session/Mage_Customer_Model_Session
|
466 |
+
*/
|
467 |
+
public function getUserSession() {
|
468 |
+
return ($this->isAdmin()) ? Mage::getSingleton('admin/session') : Mage::getSingleton('customer/session');
|
469 |
+
}
|
470 |
+
|
471 |
+
/**
|
472 |
+
* Return proper user model, according to the login process
|
473 |
+
* side (administrator or customer);
|
474 |
+
*
|
475 |
+
* @return Mage_Admin_Model_User/Mage_Customer_Model_Customer
|
476 |
+
*/
|
477 |
+
public function getUserModel() {
|
478 |
+
return ($this->isAdmin()) ? Mage::getSingleton('admin/user') : Mage::getSingleton('customer/customer');
|
479 |
+
}
|
480 |
+
|
481 |
+
/**
|
482 |
+
* Unset currently logged user after authenticating with
|
483 |
+
* username/password, to allow second factor authentication.
|
484 |
+
*/
|
485 |
+
private function clearLoggedUser() {
|
486 |
+
$session = $this->getUserSession();
|
487 |
+
if ($this->isAdmin()) {
|
488 |
+
$session->setUser($this->getUserModel());
|
489 |
+
} else {
|
490 |
+
$session->setCustomer($this->getUserModel());
|
491 |
+
}
|
492 |
+
}
|
493 |
+
|
494 |
+
/**
|
495 |
+
* Answer whether it is on administrator or customer login action.
|
496 |
+
*
|
497 |
+
* @return boolean
|
498 |
+
*/
|
499 |
+
public function isAdmin() {
|
500 |
+
return ($this->getModule() != RublonMagentoModule::FRONT);
|
501 |
+
}
|
502 |
+
|
503 |
+
|
504 |
+
/**
|
505 |
+
* Get Magento Connect URL
|
506 |
+
*
|
507 |
+
* @return string
|
508 |
+
*/
|
509 |
+
public function getMagentoConnectUrl() {
|
510 |
+
return Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_WEB) . 'downloader/';
|
511 |
+
}
|
512 |
+
|
513 |
+
|
514 |
+
/**
|
515 |
+
* Return an id of user, which need to be authenticated by Rublon second factor
|
516 |
+
*
|
517 |
+
* @return void
|
518 |
+
*/
|
519 |
+
public function getAuthUserId() {
|
520 |
+
return (!empty($this->authUserId)?$this->authUserId:Mage::getSingleton('admin/session')->getUser()->getId());
|
521 |
+
}
|
522 |
+
|
523 |
+
public function getAuthUserEmail() {
|
524 |
+
return (!empty($this->authUserEmail)?$this->authUserEmail:Mage::getSingleton('admin/session')->getUser()->getEmail());
|
525 |
+
}
|
526 |
+
|
527 |
+
/**
|
528 |
+
* Returns the html code of Rublon script
|
529 |
+
*
|
530 |
+
* @return string
|
531 |
+
*/
|
532 |
+
public function getRublonScript() {
|
533 |
+
if ($this->isRublonEnabled()) {
|
534 |
+
require_once (Mage::getBaseDir('code') . DS . 'community' . DS . 'Rublon' . DS . 'Rublon2Factor' . DS . 'lib' . DS . 'Rublon' . DS . 'HTML' . DS . 'RublonConsumerScript.php');
|
535 |
+
return new RublonConsumerScript($this->service);
|
536 |
+
}
|
537 |
+
}
|
538 |
+
|
539 |
+
/**
|
540 |
+
* Get current URL
|
541 |
+
*
|
542 |
+
* @return string
|
543 |
+
*/
|
544 |
+
public function getCurrentURL() {
|
545 |
+
return Mage::helper('core/url')->getCurrentUrl();
|
546 |
+
}
|
547 |
+
|
548 |
+
|
549 |
+
/**
|
550 |
+
* Convert local relative URL into absolute
|
551 |
+
*
|
552 |
+
* @param string $url
|
553 |
+
* @return string
|
554 |
+
*/
|
555 |
+
public function getAbsoluteURL($url) {
|
556 |
+
if (!parse_url($url, PHP_URL_HOST)) {
|
557 |
+
$request = Mage::app()->getRequest();
|
558 |
+
$port = $request->getServer('SERVER_PORT');
|
559 |
+
if ($port) {
|
560 |
+
$defaultPorts = array(
|
561 |
+
Mage_Core_Controller_Request_Http::DEFAULT_HTTP_PORT,
|
562 |
+
Mage_Core_Controller_Request_Http::DEFAULT_HTTPS_PORT
|
563 |
+
);
|
564 |
+
$port = (in_array($port, $defaultPorts)) ? '' : ':' . $port;
|
565 |
+
}
|
566 |
+
return $request->getScheme() . '://' . $request->getHttpHost() . $port . $url;
|
567 |
+
}
|
568 |
+
}
|
569 |
+
|
570 |
+
|
571 |
+
/**
|
572 |
+
* Add error message and notify Rublon team if needed
|
573 |
+
*
|
574 |
+
* @param mixed $error
|
575 |
+
* @param string $notifierOptions
|
576 |
+
* @return void
|
577 |
+
*/
|
578 |
+
public function addError($error, $notifierOptions = array()) {
|
579 |
+
|
580 |
+
// Prepare error message
|
581 |
+
if (is_object($error) AND $error instanceof Exception) {
|
582 |
+
//$message = $error->getMessage();
|
583 |
+
$errorClassName = get_class($error);
|
584 |
+
$errorMessage = $error->getMessage();
|
585 |
+
$errorCode = $error->getCode();
|
586 |
+
|
587 |
+
$personalEditionLimitationError = ($error instanceof PersonalEditionLimited_RublonApiException);
|
588 |
+
|
589 |
+
if ($personalEditionLimitationError) {
|
590 |
+
$messages[] = array('type' => 'notice', 'msg' => $error->getMessage());
|
591 |
+
} else {
|
592 |
+
$messages[] = sprintf($this->__('An error accured during authentication process. Please try again or contact us at <a href="mailto:%s">%s</a>.'), RublonMagentoModule::RUBLON_SUPPORT_EMAIL, RublonMagentoModule::RUBLON_SUPPORT_EMAIL);
|
593 |
+
if ($errorMessage) {
|
594 |
+
$messages[] = $this->__('Rublon error message') .':' . $error->getMessage();
|
595 |
+
}
|
596 |
+
$messages[] = $this->__('Rublon error code') .': ' . $errorClassName;
|
597 |
+
}
|
598 |
+
} else {
|
599 |
+
$message = $this->__((string)$error);
|
600 |
+
if (!strlen($message)) {
|
601 |
+
$message = $this->__('An error has occurred.');
|
602 |
+
}
|
603 |
+
$messages[] = $message;
|
604 |
+
}
|
605 |
+
|
606 |
+
// Add flash message
|
607 |
+
if ($messages) {
|
608 |
+
foreach ($messages as $message) {
|
609 |
+
if (isset($message['type']) && $message['type'] == 'notice') {
|
610 |
+
self::addMessage($message['msg'], 'notice');
|
611 |
+
} else {
|
612 |
+
self::addMessage($message, 'error');
|
613 |
+
}
|
614 |
+
}
|
615 |
+
}
|
616 |
+
|
617 |
+
// Send notify
|
618 |
+
if (!empty($notifierOptions) && !$personalEditionLimitationError) {
|
619 |
+
if ($this->isTrackingAllowed()) {
|
620 |
+
$this->issueNotifier->notify($error, $notifierOptions);
|
621 |
+
}
|
622 |
+
}
|
623 |
+
|
624 |
+
}
|
625 |
+
|
626 |
+
public static function addMessage($content, $type = 'success') {
|
627 |
+
switch($type) {
|
628 |
+
case 'notice':
|
629 |
+
Mage::getSingleton('core/session')->addNotice($content);
|
630 |
+
break;
|
631 |
+
case 'error':
|
632 |
+
Mage::getSingleton('core/session')->addError($content);
|
633 |
+
break;
|
634 |
+
default:
|
635 |
+
Mage::getSingleton('core/session')->addSuccess($content);
|
636 |
+
}
|
637 |
+
}
|
638 |
+
|
639 |
+
/**
|
640 |
+
* Return currently logged user.
|
641 |
+
*
|
642 |
+
* @return object
|
643 |
+
*/
|
644 |
+
public function getLoggedUser() {
|
645 |
+
$session = $this->getUserSession();
|
646 |
+
return ($this->isAdmin()) ? $session->getUser() : $session->getCustomer();
|
647 |
+
}
|
648 |
+
|
649 |
+
/**
|
650 |
+
* Checks whether currently logged user account is secured by Rublon
|
651 |
+
* second factor.
|
652 |
+
*
|
653 |
+
* @return boolean
|
654 |
+
*/
|
655 |
+
public function isRublonSecuredAccount() {
|
656 |
+
return $this->isRublonConfigured() && ($this->isProjectOwner() || RublonFeature::isBusinessEdition());
|
657 |
+
}
|
658 |
+
|
659 |
+
|
660 |
+
/**
|
661 |
+
* Get current user's ID
|
662 |
+
*
|
663 |
+
* @return int
|
664 |
+
*/
|
665 |
+
public function getUserId() {
|
666 |
+
$currentUser = $this->getLoggedUser();
|
667 |
+
if ($currentUser) {
|
668 |
+
return $currentUser->getId();
|
669 |
+
}
|
670 |
+
}
|
671 |
+
|
672 |
+
/**
|
673 |
+
* Checks whether an user with given id is secured by Rublon
|
674 |
+
* second factor.
|
675 |
+
*
|
676 |
+
* @param int $userId
|
677 |
+
* @return boolean
|
678 |
+
*/
|
679 |
+
public function isRublonSecuredUser($userId = null) {
|
680 |
+
return ($this->isRublonConfigured()
|
681 |
+
AND $this->isRublonEnabled()
|
682 |
+
);
|
683 |
+
}
|
684 |
+
|
685 |
+
|
686 |
+
/**
|
687 |
+
* Redirect to a page with given url.
|
688 |
+
*
|
689 |
+
* @param string $returnUrl
|
690 |
+
*/
|
691 |
+
public function returnToPage($returnUrl) {
|
692 |
+
header('location: '. $returnUrl);
|
693 |
+
exit;
|
694 |
+
}
|
695 |
+
|
696 |
+
public function redirect($url) {
|
697 |
+
$this->returnToPage($url);
|
698 |
+
}
|
699 |
+
|
700 |
+
/**
|
701 |
+
* Check whether currently logged user is at administrator side.
|
702 |
+
*
|
703 |
+
* @return boolean
|
704 |
+
*/
|
705 |
+
public function checkIsAdmin() {
|
706 |
+
return Mage::getSingleton('admin/session')->isLoggedIn();
|
707 |
+
}
|
708 |
+
|
709 |
+
|
710 |
+
|
711 |
+
|
712 |
+
/**
|
713 |
+
* Get system token
|
714 |
+
*
|
715 |
+
* @return string|NULL
|
716 |
+
*/
|
717 |
+
public function getSystemToken() {
|
718 |
+
return Mage::getStoreConfig('rublon_system_token', Mage::app()->getStore());
|
719 |
+
}
|
720 |
+
|
721 |
+
/**
|
722 |
+
* Get secret key
|
723 |
+
*
|
724 |
+
* @return string|NULL
|
725 |
+
*/
|
726 |
+
public function getSecretKey() {
|
727 |
+
return Mage::getStoreConfig('rublon_secret_key', Mage::app()->getStore());
|
728 |
+
}
|
729 |
+
|
730 |
+
/**
|
731 |
+
* Get current language code
|
732 |
+
*
|
733 |
+
* @return string
|
734 |
+
*/
|
735 |
+
public function getLang() {
|
736 |
+
return substr(Mage::app()->getLocale()->getLocaleCode(), 0, 2);
|
737 |
+
}
|
738 |
+
|
739 |
+
|
740 |
+
/**
|
741 |
+
* Get Magento module name
|
742 |
+
*
|
743 |
+
* @return string
|
744 |
+
*/
|
745 |
+
public function getModule() {
|
746 |
+
return $this->module;
|
747 |
+
}
|
748 |
+
|
749 |
+
|
750 |
+
/**
|
751 |
+
* Set Magento module name
|
752 |
+
*
|
753 |
+
* @param string $module
|
754 |
+
* @return Rublon_Rublon2Factor_Helper_Data
|
755 |
+
*/
|
756 |
+
public function setModule($module) {
|
757 |
+
$this->module = $module;
|
758 |
+
return $this;
|
759 |
+
}
|
760 |
+
|
761 |
+
|
762 |
+
/**
|
763 |
+
* Check whether this is Magento Connect
|
764 |
+
*
|
765 |
+
* @return boolean
|
766 |
+
*/
|
767 |
+
public function isMagentoConnect() {
|
768 |
+
return ($this->getModule() == RublonMagentoModule::CONNECT);
|
769 |
+
}
|
770 |
+
|
771 |
+
|
772 |
+
|
773 |
+
|
774 |
+
|
775 |
+
/**
|
776 |
+
* Returns registration initialize URL
|
777 |
+
*
|
778 |
+
* @return string
|
779 |
+
*/
|
780 |
+
public function getRegistrationInitURL() {
|
781 |
+
return Mage::helper("adminhtml")->getUrl(self::URL_REGISTRATION_INIT);
|
782 |
+
}
|
783 |
+
|
784 |
+
|
785 |
+
/**
|
786 |
+
* Get HTML code with Rublon icon for welcome message
|
787 |
+
*
|
788 |
+
* @return string
|
789 |
+
*/
|
790 |
+
public function getRublonIcon() {
|
791 |
+
$rublonIconImg = Mage::getDesign()->getSkinBaseUrl() . 'Rublon/img/rublon_logo_16x16.png';
|
792 |
+
return sprintf('<span title="%s"
|
793 |
+
style="width:16px;height:16px;background:url(%s) 0px 0px no-repeat;vertical-align:middle;display:inline-block;"
|
794 |
+
class="rublon-protected-icon"></span>',
|
795 |
+
htmlspecialchars($this->__('Your account is protected by Rublon')),
|
796 |
+
$rublonIconImg
|
797 |
+
);
|
798 |
+
}
|
799 |
+
|
800 |
+
|
801 |
+
/**
|
802 |
+
* Returns Rublon API domain
|
803 |
+
*
|
804 |
+
* @return string
|
805 |
+
*/
|
806 |
+
public function getRublonDomain() {
|
807 |
+
return self::RUBLON_DOMAIN;
|
808 |
+
}
|
809 |
+
|
810 |
+
/**
|
811 |
+
* Check if a logged user owns an administration role.
|
812 |
+
*
|
813 |
+
* @return boolean
|
814 |
+
*/
|
815 |
+
public function isAdministrator() {
|
816 |
+
$adminuserId = Mage::getSingleton('admin/session')->getUser()->getUserId();
|
817 |
+
$role_data = Mage::getModel('admin/user')->load($adminuserId)->getRole()->getData();
|
818 |
+
|
819 |
+
return in_array(self::ADMIN_ROLE_NAME, $role_data);
|
820 |
+
}
|
821 |
+
|
822 |
+
/**
|
823 |
+
*
|
824 |
+
* @return boolean
|
825 |
+
*/
|
826 |
+
public function isLogoutListenerEnabled() {
|
827 |
+
return true;
|
828 |
+
}
|
829 |
+
|
830 |
+
/**
|
831 |
+
* Check wether user is protected by Rublon.
|
832 |
+
*
|
833 |
+
* @return string
|
834 |
+
*/
|
835 |
+
public function isUserProtected() {
|
836 |
+
$mobileStatus = $this->getMobileUserStatus($this->getAuthUserId(), $this->getAuthUserEmail());
|
837 |
+
return ($mobileStatus == RublonMagentoModule::YES ? RublonMagentoModule::PROTECTION_TYPE_MOBILE : RublonMagentoModule::PROTECTION_TYPE_EMAIL);
|
838 |
+
}
|
839 |
+
|
840 |
+
/**
|
841 |
+
* Check if a user has installed Rublon Mobile App.
|
842 |
+
*
|
843 |
+
* @param int $userId
|
844 |
+
* @param string $userEmail
|
845 |
+
* @param string $refresh
|
846 |
+
* @return Ambigous <mixed, string>
|
847 |
+
*/
|
848 |
+
public function getMobileUserStatus($userId, $userEmail, $refresh = false) {
|
849 |
+
|
850 |
+
$status_name = 'rublon_mobile_status_' . $this->getAuthUserId();
|
851 |
+
$mobile_user_status = Mage::getStoreConfig($status_name);
|
852 |
+
|
853 |
+
if ($refresh || empty($mobile_user_status)) {
|
854 |
+
$rublon_req = new RublonRequests();
|
855 |
+
$mobile_user_status = $rublon_req->checkMobileStatus($userId, $userEmail);
|
856 |
+
$config = Mage::getConfig();
|
857 |
+
$config->saveConfig($status_name, $mobile_user_status);
|
858 |
+
}
|
859 |
+
return $mobile_user_status;
|
860 |
+
|
861 |
+
}
|
862 |
+
|
863 |
+
/**
|
864 |
+
* Returns callback URL.
|
865 |
+
*
|
866 |
+
* @param string $connect
|
867 |
+
* @return string
|
868 |
+
*/
|
869 |
+
public function getCallbackUrl($connect = false) {
|
870 |
+
|
871 |
+
$url = Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_WEB).'rublon/callback/index/state/%state%/token/%token%/windowType/%windowType%';
|
872 |
+
|
873 |
+
if ($connect) {
|
874 |
+
$url = self::getMagentoConnectUrl().'?rublon=callback&state=%state%&token=%token%&windowType=%windowType%';
|
875 |
+
}
|
876 |
+
|
877 |
+
return $url;
|
878 |
+
}
|
879 |
+
|
880 |
+
/**
|
881 |
+
* Check if error trucking is allowed.
|
882 |
+
*
|
883 |
+
* @return boolean
|
884 |
+
*/
|
885 |
+
public function isTrackingAllowed() {
|
886 |
+
$data = Mage::getStoreConfig('rublon_allow_tracking');
|
887 |
+
|
888 |
+
return !empty($data)?true:false;
|
889 |
+
}
|
890 |
+
|
891 |
+
/**
|
892 |
+
* Returns version of the plugin
|
893 |
+
* @return string
|
894 |
+
*/
|
895 |
+
public function getModuleVersion() {
|
896 |
+
return self::PLUGIN_VERSION;
|
897 |
+
}
|
898 |
+
|
899 |
+
/**
|
900 |
+
* Prepare plugin meta data to be reported
|
901 |
+
*
|
902 |
+
* @return array
|
903 |
+
*/
|
904 |
+
public function prepareModuleMeta() {
|
905 |
+
|
906 |
+
$pluginVersion = $this->getModuleVersion();
|
907 |
+
|
908 |
+
// Other info
|
909 |
+
$moduleMeta = array(
|
910 |
+
'magento-version' => Mage::getVersion(),
|
911 |
+
'plugin-version' => $pluginVersion
|
912 |
+
);
|
913 |
+
|
914 |
+
// Backend users
|
915 |
+
$roles = Mage::getModel('admin/roles')->getCollection();
|
916 |
+
|
917 |
+
if (!empty($roles)) {
|
918 |
+
foreach($roles as $role) {
|
919 |
+
$moduleMeta['registered-'.strtolower($role->getRoleName()).'-users'] = count(Mage::getModel('admin/roles')->load($role->getId())->getRoleUsers());
|
920 |
+
}
|
921 |
+
}
|
922 |
+
|
923 |
+
// Frontend users
|
924 |
+
$users = Mage::getModel('customer/customer')->getCollection();
|
925 |
+
|
926 |
+
$moduleMeta['registered-customers'] = count($users);
|
927 |
+
|
928 |
+
$metaHeader = array(
|
929 |
+
'meta' => $moduleMeta,
|
930 |
+
);
|
931 |
+
return $metaHeader;
|
932 |
+
}
|
933 |
+
|
934 |
+
/**
|
935 |
+
* Send a request with module's history to Rublon servers
|
936 |
+
*
|
937 |
+
* @param array $data Module's history data
|
938 |
+
*/
|
939 |
+
public function moduleHistoryRequest($data) {
|
940 |
+
|
941 |
+
require_once (Mage::getBaseDir('code') . DS . 'community' . DS . 'Rublon' . DS . RublonMagentoModule::MODULE_NAME . DS . 'lib' . DS . 'RublonImplemented' . DS . 'RublonAPIPluginHistory.php');
|
942 |
+
|
943 |
+
$rublon = $this->getRublon();
|
944 |
+
$data['systemToken'] = $this->getSystemToken();
|
945 |
+
$request = new RublonAPIPluginHistory($rublon, $data);
|
946 |
+
|
947 |
+
try {
|
948 |
+
$response = $request->perform();
|
949 |
+
} catch (Exception $e) {
|
950 |
+
print_r($e); die('test');
|
951 |
+
$this->addError('History request faild: '.$e->getMessage());
|
952 |
+
}
|
953 |
+
|
954 |
+
if (!empty($response) && $response->historyHasBeenAdded()) {
|
955 |
+
return true;
|
956 |
+
}
|
957 |
+
return false;
|
958 |
+
}
|
959 |
+
|
960 |
+
/**
|
961 |
+
* Prepare url pieces needed for the plugin history request
|
962 |
+
*
|
963 |
+
* @return array
|
964 |
+
*/
|
965 |
+
public function getConsumerRegistrationData() {
|
966 |
+
|
967 |
+
$consumerRegistration = new RublonConsumerRegistrationMagento();
|
968 |
+
$consumerRegistration->setDomain(self::RUBLON_REGISTER_DOMAIN);
|
969 |
+
return array(
|
970 |
+
'url' => $consumerRegistration->getAPIDomain(),
|
971 |
+
'action' => $consumerRegistration->getConsumerActionURL()
|
972 |
+
);
|
973 |
+
|
974 |
+
}
|
975 |
+
|
976 |
+
public function getBuyBusinessEditionURL() {
|
977 |
+
$systemToken = $this->getSystemToken();
|
978 |
+
$url = '';
|
979 |
+
|
980 |
+
if ($systemToken) {
|
981 |
+
|
982 |
+
$data = array(
|
983 |
+
RublonConsumerRegistrationCommon::FIELD_SYSTEM_TOKEN => $systemToken,
|
984 |
+
RublonConsumerRegistrationCommon::FIELD_PARTNER_KEY => ''//$partnerKey
|
985 |
+
);
|
986 |
+
|
987 |
+
$url = sprintf(self::RUBLON_REGISTER_DOMAIN . '/store/buy/%s', urlencode(base64_encode(serialize($data))));
|
988 |
+
} else {
|
989 |
+
$url = sprintf('mailto:%s?subject=%s', self::RUBLON_EMAIL_SALES, __('Rublon Business Edition'));
|
990 |
+
}
|
991 |
+
|
992 |
+
return $url;
|
993 |
+
}
|
994 |
+
|
995 |
+
public function getProjectOwnerEmail() {
|
996 |
+
return Mage::getStoreConfig(self::SETTING_PROJECT_OWNER_EMAIL, Mage::app()->getStore());
|
997 |
+
}
|
998 |
+
|
999 |
+
public function isProjectOwner($userId = 0) {
|
1000 |
+
|
1001 |
+
$projectOwnerEmail = $this->getProjectOwnerEmail();
|
1002 |
+
|
1003 |
+
if (!empty($userId)) {
|
1004 |
+
$userEmail = Mage::getModel('admin/user')->load($userId)->getData('email');
|
1005 |
+
} else {
|
1006 |
+
$userId = Mage::getSingleton('admin/session')->getUser()->getUserId();
|
1007 |
+
$userEmail = Mage::getModel('admin/user')->load($userId)->getData('email');
|
1008 |
+
}
|
1009 |
+
|
1010 |
+
return !empty($userEmail) && !empty($projectOwnerEmail) && ($projectOwnerEmail == $userEmail);
|
1011 |
+
}
|
1012 |
+
|
1013 |
+
public function canShowTDMWidget() {
|
1014 |
+
return RublonFeature::isBusinessEdition() || $this->isProjectOwner();
|
1015 |
+
}
|
1016 |
+
|
1017 |
+
public function saveProjectOwner($userEmail = null) {
|
1018 |
+
|
1019 |
+
if (empty($userEmail)) {
|
1020 |
+
$userEmail = $this->getAuthUserEmail();
|
1021 |
+
}
|
1022 |
+
if ($userEmail) {
|
1023 |
+
$config = Mage::getConfig();
|
1024 |
+
return $config->saveConfig(self::SETTING_PROJECT_OWNER_EMAIL, $userEmail);
|
1025 |
+
}
|
1026 |
+
}
|
1027 |
+
|
1028 |
+
/**
|
1029 |
+
* Delete selected config key from database
|
1030 |
+
* @param unknown $key
|
1031 |
+
*/
|
1032 |
+
public function deleteConfig($key) {
|
1033 |
+
$config = Mage::getConfig();
|
1034 |
+
$config->deleteConfig($key);
|
1035 |
+
}
|
1036 |
+
|
1037 |
+
public function cleanCache() {
|
1038 |
+
// clear cache
|
1039 |
+
$cache1 = Mage::app()->getCacheInstance()->flush();
|
1040 |
+
$cache2 = Mage::app()->cleanCache();
|
1041 |
+
|
1042 |
+
$config = Mage::getConfig();
|
1043 |
+
$config->saveConfig(RublonMagentoModule::FLUSHED_CACHE, 1);
|
1044 |
+
|
1045 |
+
}
|
1046 |
+
}
|
1047 |
+
|
1048 |
+
|
1049 |
+
|
1050 |
+
|
app/code/community/Rublon/RublonModule/Model/Observer.php
ADDED
@@ -0,0 +1,107 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Rublon2Factor for magento event listener
|
4 |
+
*
|
5 |
+
* @package rublon/rublonmodule
|
6 |
+
* @author Adips Sp. z o.o.
|
7 |
+
* @copyright Adips Sp. z o.o.
|
8 |
+
* @license http://opensource.org/licenses/gpl-license.php GNU Public License, version 2
|
9 |
+
*/
|
10 |
+
|
11 |
+
/**
|
12 |
+
* Rublon events observer class
|
13 |
+
*/
|
14 |
+
class Rublon_RublonModule_Model_Observer extends Mage_Core_Model_Abstract {
|
15 |
+
|
16 |
+
/**
|
17 |
+
* Implements customer_login hook to apply customer second
|
18 |
+
* factor authentication, if it is enabled.
|
19 |
+
*/
|
20 |
+
public function customerLogin($observer) {
|
21 |
+
if ($customerId = $observer->getCustomer()->getId()) {
|
22 |
+
$helper = Mage::helper('rublonmodule');
|
23 |
+
$helper->setModule(RublonMagentoModule::FRONT);
|
24 |
+
if ($helper->isRublonConfigured() AND $helper->isRublonEnabled() AND $helper->isRublonSecuredUser($customerId)) {
|
25 |
+
$helper->authenticateCustomer($observer);
|
26 |
+
}
|
27 |
+
}
|
28 |
+
}
|
29 |
+
|
30 |
+
/**
|
31 |
+
* After admin login
|
32 |
+
*
|
33 |
+
* @param unknown $observer
|
34 |
+
*/
|
35 |
+
public function afterAdminLogin($observer) {
|
36 |
+
if ($observer->getResult() AND $userId = $observer->getUser()->getId()) { // successful login
|
37 |
+
$connect = (strpos(parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH), 'downloader') !== false);
|
38 |
+
$helper = Mage::helper('rublonmodule');
|
39 |
+
|
40 |
+
$helper->setModule($connect ? RublonMagentoModule::CONNECT : RublonMagentoModule::ADMIN);
|
41 |
+
|
42 |
+
if ($helper->isRublonEnabled()) {
|
43 |
+
$helper->authenticateAdmin($observer);
|
44 |
+
}
|
45 |
+
}
|
46 |
+
}
|
47 |
+
|
48 |
+
|
49 |
+
/**
|
50 |
+
* Magento Connect custom callback URL
|
51 |
+
*
|
52 |
+
* Because Magento Connect has own session and cookie restricted to directory "/downloader"
|
53 |
+
* the Rublon callback must be called in this location.
|
54 |
+
*
|
55 |
+
* @param object $observer
|
56 |
+
*/
|
57 |
+
public function controllerInit($observer) {
|
58 |
+
|
59 |
+
$helper = Mage::helper('rublonmodule');
|
60 |
+
|
61 |
+
if ($helper->isRublonEnabled() AND isset($_GET['rublon']) AND $_GET['rublon'] == 'callback') {
|
62 |
+
|
63 |
+
require_once (Mage::getBaseDir('code') . DS . 'community' . DS . 'Rublon' . DS . 'RublonModule' . DS . 'lib' . DS . 'RublonImplemented' . DS .'Rublon2FactorCallbackMagento.php');
|
64 |
+
|
65 |
+
$helper->setModule(RublonMagentoModule::CONNECT);
|
66 |
+
|
67 |
+
$state = isset($_GET['state']) ? $_GET['state'] : '';
|
68 |
+
$token = isset($_GET['token']) ? $_GET['token'] : null;
|
69 |
+
|
70 |
+
try {
|
71 |
+
$callback = new Rublon2FactorCallbackMagento($helper->getRublon());
|
72 |
+
$callback->setState($state);
|
73 |
+
$callback->setAccessToken($token);
|
74 |
+
|
75 |
+
$callback->call(array($this, 'callbackSuccess'), array($this, 'callbackFailure'));
|
76 |
+
die('test');
|
77 |
+
|
78 |
+
} catch (RublonException $e) {
|
79 |
+
$helper->addError($e, array('method' => __METHOD__, 'file' => __FILE__));
|
80 |
+
$helper->returnToPage($helper->getSettingsPageUrl());
|
81 |
+
}
|
82 |
+
|
83 |
+
}
|
84 |
+
}
|
85 |
+
|
86 |
+
public function callbackSuccess($user_id, Rublon2FactorCallback $callback) {
|
87 |
+
|
88 |
+
$sessionId = Mage::getSingleton("admin/session")->getEncryptedSessionId();
|
89 |
+
$helper = Mage::helper('rublonmodule');
|
90 |
+
$user = Mage::getModel('admin/user')->load($user_id);
|
91 |
+
|
92 |
+
Mage::getSingleton('admin/session')->setUser($user);
|
93 |
+
Mage::getSingleton('admin/session')->refreshAcl();
|
94 |
+
|
95 |
+
$url = $helper->getMagentoConnectUrl();
|
96 |
+
$helper->returnToPage($url);
|
97 |
+
}
|
98 |
+
|
99 |
+
public function callbackFailure() {
|
100 |
+
Mage::helper('rublonmodule')->addError(sprintf($this->__('An error accured during authentication process. Please try again or contact us at <a href="mailto:%s">%s</a>.'), RublonMagentoModule::RUBLON_SUPPORT_EMAIL, RublonMagentoModule::RUBLON_SUPPORT_EMAIL), array(
|
101 |
+
'method' => __METHOD__,
|
102 |
+
'file' => __FILE__
|
103 |
+
));
|
104 |
+
}
|
105 |
+
|
106 |
+
}
|
107 |
+
?>
|
app/code/community/Rublon/RublonModule/Model/Resource/User.php
ADDED
@@ -0,0 +1,31 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Rublon customer resource model
|
4 |
+
*
|
5 |
+
* @package rublon/rublonmodule
|
6 |
+
* @author Adips Sp. z o.o.
|
7 |
+
* @copyright Adips Sp. z o.o.
|
8 |
+
* @license http://opensource.org/licenses/gpl-license.php GNU Public License, version 2
|
9 |
+
*/
|
10 |
+
|
11 |
+
/**
|
12 |
+
* Rublon administrator resource model class
|
13 |
+
*/
|
14 |
+
class Rublon_RublonModule_Model_Resource_User extends Mage_Core_Model_Resource_Db_Abstract
|
15 |
+
{
|
16 |
+
/**
|
17 |
+
* Default constructor
|
18 |
+
*
|
19 |
+
*/
|
20 |
+
protected function _construct()
|
21 |
+
{
|
22 |
+
//Set table and primary key
|
23 |
+
$this->_init('rublon2factor/rublon_user', 'user_id');
|
24 |
+
|
25 |
+
//Set primary key as not auto increment - is is also foreign key to admin/user table
|
26 |
+
$this->_isPkAutoIncrement = false;
|
27 |
+
}
|
28 |
+
}
|
29 |
+
|
30 |
+
|
31 |
+
?>
|
app/code/community/Rublon/RublonModule/Model/Resource/User/Collection.php
ADDED
@@ -0,0 +1,26 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Rublon admin user resource collection
|
4 |
+
*
|
5 |
+
* @package rublon/rublon2factor
|
6 |
+
* @author Adips Sp. z o.o.
|
7 |
+
* @copyright Adips Sp. z o.o.
|
8 |
+
* @license http://opensource.org/licenses/gpl-license.php GNU Public License, version 2
|
9 |
+
*/
|
10 |
+
|
11 |
+
/**
|
12 |
+
* Rublon administrator resource collection class
|
13 |
+
*/
|
14 |
+
class Rublon_Rublon2Factor_Model_Resource_User_Collection extends Mage_Core_Model_Resource_Db_Collection_Abstract
|
15 |
+
{
|
16 |
+
/**
|
17 |
+
* Default constructor
|
18 |
+
*/
|
19 |
+
protected function _construct()
|
20 |
+
{
|
21 |
+
$this->_init('rublon2factor/user');
|
22 |
+
}
|
23 |
+
}
|
24 |
+
|
25 |
+
|
26 |
+
?>
|
app/code/community/Rublon/RublonModule/Model/User.php
ADDED
@@ -0,0 +1,42 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Rublon administrator model
|
4 |
+
*
|
5 |
+
* @package rublon/rublonmodule
|
6 |
+
* @author Adips Sp. z o.o.
|
7 |
+
* @copyright Adips Sp. z o.o.
|
8 |
+
* @license http://opensource.org/licenses/gpl-license.php GNU Public License, version 2
|
9 |
+
*/
|
10 |
+
|
11 |
+
/**
|
12 |
+
* Rublon administrator model class
|
13 |
+
*
|
14 |
+
* This entity contains all customer scoped rublon data including profile ID.
|
15 |
+
*/
|
16 |
+
class Rublon_RublonModule_Model_User extends Mage_Core_Model_Abstract
|
17 |
+
{
|
18 |
+
/**
|
19 |
+
* Default constructor
|
20 |
+
*
|
21 |
+
*/
|
22 |
+
protected function _construct()
|
23 |
+
{
|
24 |
+
$this->_init('rublon2factor/user');
|
25 |
+
}
|
26 |
+
|
27 |
+
/**
|
28 |
+
* loads by Rublon profile id
|
29 |
+
*
|
30 |
+
* @param int $rublonProfileId
|
31 |
+
* @return Rublon_Rublon2Factor_Model_User
|
32 |
+
*/
|
33 |
+
public function loadByRublonProfileId($rublonProfileId)
|
34 |
+
{
|
35 |
+
return $this->load($rublonProfileId,'rublon_profile_id');
|
36 |
+
}
|
37 |
+
|
38 |
+
|
39 |
+
|
40 |
+
}
|
41 |
+
|
42 |
+
?>
|
app/code/community/Rublon/RublonModule/controllers/Adminhtml/ActivationController.php
ADDED
@@ -0,0 +1,93 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class Rublon_RublonModule_Adminhtml_ActivationController extends Mage_Adminhtml_Controller_Action {
|
4 |
+
|
5 |
+
/**
|
6 |
+
*
|
7 |
+
* @var Rublon_RublonModule_Helper_Data
|
8 |
+
*/
|
9 |
+
private $helper;
|
10 |
+
|
11 |
+
public function _construct() {
|
12 |
+
$this->helper = Mage::helper('rublonmodule');
|
13 |
+
}
|
14 |
+
|
15 |
+
public function indexAction() {
|
16 |
+
|
17 |
+
$this->loadLayout()
|
18 |
+
->_setActiveMenu('rublonmodule')
|
19 |
+
->_title($this->__('Rublon Two-Factor authentication'));
|
20 |
+
|
21 |
+
$email = Mage::helper('rublonmodule')->getAuthUserEmail();
|
22 |
+
$profilePageUrl = Mage::helper('adminhtml')->getUrl('adminhtml/system_account');
|
23 |
+
|
24 |
+
$data = array(
|
25 |
+
'logo_url' => Mage::getDesign()->getSkinBaseUrl() . 'Rublon/img/rublon_logo_32x32.png',
|
26 |
+
'rublon_visual_url' => Mage::getDesign()->getSkinBaseUrl() . 'Rublon/img/rublon_visual.gif',
|
27 |
+
'path' => $this->__('Rublon Two-Factor authentication activation'),
|
28 |
+
'title' => $this->__('Help improve Rublon Account Security'),
|
29 |
+
'allow_message' => $this->__('Thank you for installing Rublon Account Security for Magento! Please help us improve it by allowing us to gather configuration data that give us the possibility to maintain high compatibility with different servers, plugins and themes.'),
|
30 |
+
'api_message' => array(
|
31 |
+
$this->__('Rublon Account Security works by talking to the Rublon API. This requires an API key, which needs to be generated specifically for your website.'),
|
32 |
+
sprintf($this->__('Due to security reasons, this requires a registration with your email address: <strong>%s</strong>. In order to register with a different email address, change it in your <a href="%s">profile settings</a>.'), $email, $profilePageUrl)
|
33 |
+
),
|
34 |
+
'registration_init_action' => Mage::helper('adminhtml')->getUrl('rublon/adminhtml_activation/initialize')
|
35 |
+
);
|
36 |
+
|
37 |
+
$this->getLayout()->getBlock('RublonModule')->assign($data);
|
38 |
+
|
39 |
+
$this->renderLayout();
|
40 |
+
|
41 |
+
}
|
42 |
+
|
43 |
+
public function initializeAction() {
|
44 |
+
|
45 |
+
if (!$this->helper->isRublonConfigured()) {
|
46 |
+
// Load Rublon activation layout
|
47 |
+
$this->loadLayout()
|
48 |
+
->_setActiveMenu('rublonmodule')
|
49 |
+
->_title($this->__('Index Action'));
|
50 |
+
|
51 |
+
// Create registration object instance
|
52 |
+
$consumer_registration = new RublonConsumerRegistrationMagento();
|
53 |
+
|
54 |
+
// Get request data
|
55 |
+
$request = $this -> getRequest() -> getParams();
|
56 |
+
|
57 |
+
if (!empty($request['apiregAllowTracking'])) {
|
58 |
+
|
59 |
+
// Save allow tracking
|
60 |
+
$consumer_registration->saveAllowTracking($request['apiregAllowTracking']);
|
61 |
+
|
62 |
+
// Notify about tracking enabled
|
63 |
+
try {
|
64 |
+
$this->helper->getIssueNotifier()->setSilence(true);
|
65 |
+
$this->helper->getIssueNotifier()->notify('Preliminary statistics from a Magento store.', array('message-type' => RublonMagentoModule::RUBLON_NOTIFY_TYPE_STATS));
|
66 |
+
$this->helper->getIssueNotifier()->setSilence(false);
|
67 |
+
} catch (Exception $e) {
|
68 |
+
// Do nothing.
|
69 |
+
}
|
70 |
+
}
|
71 |
+
|
72 |
+
if (!empty($request['apiregNewsletterSignup'])) {
|
73 |
+
// Save newsletter signup
|
74 |
+
$consumer_registration->saveNewsletterSignUp($request['apiregNewsletterSignup']);
|
75 |
+
}
|
76 |
+
|
77 |
+
// Wrap registration form to submit registration data
|
78 |
+
$data = array(
|
79 |
+
'logo_url' => Mage::getDesign()->getSkinBaseUrl() . 'Rublon/img/rublon_logo_32x32.png',
|
80 |
+
'rublon_visual_url' => Mage::getDesign()->getSkinBaseUrl() . 'Rublon/img/rublon_visual.gif',
|
81 |
+
'path' => $this->__('Rublon Two-Factor authentication activation'),
|
82 |
+
'registration_form_hidden' => $consumer_registration->retrieveRegistrationForm()
|
83 |
+
);
|
84 |
+
// $block = $this->getLayout()->createBlock('core/text')->setText($consumer_registration->retrieveRegistrationForm());
|
85 |
+
// $this->_addContent($block);
|
86 |
+
// var_dump($data); die();
|
87 |
+
$this->getLayout()->getBlock('RublonModule')->assign($data);
|
88 |
+
|
89 |
+
$this->renderLayout();
|
90 |
+
}
|
91 |
+
}
|
92 |
+
|
93 |
+
}
|
app/code/community/Rublon/RublonModule/controllers/Adminhtml/SettingsController.php
ADDED
@@ -0,0 +1,84 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
require_once (Mage::getBaseDir('code') . DS . 'community' . DS . 'Rublon' . DS . 'RublonModule' . DS . 'lib' . DS . 'Rublon' . DS . 'core' . DS . 'API' . DS . 'RublonAPIGetAvailableFeatures.php');
|
4 |
+
require_once (Mage::getBaseDir('code') . DS . 'community' . DS . 'Rublon' . DS . 'RublonModule' . DS . 'lib' . DS . 'RublonImplemented' . DS . 'RublonFeature.php');
|
5 |
+
require_once (Mage::getBaseDir('code') . DS . 'community' . DS . 'Rublon' . DS . 'RublonModule' . DS . 'lib' . DS . 'RublonImplemented' . DS . 'Rublon2FactorGUIMagento.php');
|
6 |
+
|
7 |
+
class Rublon_RublonModule_Adminhtml_SettingsController extends Mage_Adminhtml_Controller_Action {
|
8 |
+
|
9 |
+
/**
|
10 |
+
*
|
11 |
+
* @var Rublon_RublonModule_Helper_Data
|
12 |
+
*/
|
13 |
+
private $helper;
|
14 |
+
|
15 |
+
public function _construct() {
|
16 |
+
$this->helper = Mage::helper('rublonmodule');
|
17 |
+
}
|
18 |
+
|
19 |
+
public function indexAction() {
|
20 |
+
|
21 |
+
$this->initialize();
|
22 |
+
|
23 |
+
$isAdministrator = $this->helper->isAdministrator();
|
24 |
+
$isProjectOwner = $this->helper->isProjectOwner();
|
25 |
+
$showNotProtectedMessage = !RublonFeature::isBusinessEdition() && !$this->helper->isAdministrator();
|
26 |
+
|
27 |
+
if ($showNotProtectedMessage) {
|
28 |
+
$this->helper->addMessage($this->__('Due the Rublon Personal Edition limitation your account is not protected.'), 'notice');
|
29 |
+
}
|
30 |
+
|
31 |
+
$this->loadLayout()
|
32 |
+
->_setActiveMenu('rublonmodule')
|
33 |
+
->_title($this->__('Index Action'));
|
34 |
+
|
35 |
+
|
36 |
+
$gui = Rublon2FactorGUIMagento::getInstance();
|
37 |
+
|
38 |
+
$data = array(
|
39 |
+
'showUpgradeBox' => (!RublonFeature::isBusinessEdition() && $isAdministrator) ,
|
40 |
+
'isProjectOwner' => $isProjectOwner,
|
41 |
+
'isBusinessEdition' => RublonFeature::isBusinessEdition(),
|
42 |
+
'showNotProtectedMessage' => $showNotProtectedMessage,
|
43 |
+
'canShowTrustedDeviceWidget' => $this->helper->canShowTDMWidget(),
|
44 |
+
'businessEditionActivatedText' => $this->__('Thank you for using Rublon Business Edition.'),
|
45 |
+
'deviceWidget' => $gui->getDeviceWidget(),
|
46 |
+
'upgradeNowURL' => $this->helper->getBuyBusinessEditionURL(),
|
47 |
+
'boxTitle' => $isProjectOwner?$this->__('Only your account is protected! Need Rublon for more accounts?'):$this->__('Your account is not protected! Need Rublon for more accounts?'),
|
48 |
+
'line1Text' => $this->__('You are currently using the Rublon Personal API, which limits protection to 1 account per website (the administrator who has installed and activated the plugin).'),
|
49 |
+
'line2Text' => $this->__('If you\'d like to protect more accounts, you need to upgrade to the Rublon Business API.'),
|
50 |
+
'line3Text' => $this->__('You can easily order online.'),
|
51 |
+
'upgradeNowText' => $this->__('Upgrade Now'),
|
52 |
+
'smallHintText' => $this->__('After purchasing the upgrade, please logout and login again to activate your license.'),
|
53 |
+
'notProtectedBoxTitle' => $this->__('Your accunt is not protected!'),
|
54 |
+
'notProtectedText' => $this->__('Rublon Personal Edition secures only the administrator account. Please contact your administrator to upgrade to the Business Edition.'),
|
55 |
+
'flushCacheUrl' => Mage::helper("adminhtml")->getUrl('rublon/adminhtml_settings/flush'),
|
56 |
+
'flushCacheText' => $this->__('Clear cache')
|
57 |
+
);
|
58 |
+
|
59 |
+
$this->getLayout()->getBlock('RublonModule')->assign('data', $data);
|
60 |
+
// my stuff
|
61 |
+
|
62 |
+
$this->renderLayout();
|
63 |
+
|
64 |
+
}
|
65 |
+
|
66 |
+
protected function initialize() {
|
67 |
+
|
68 |
+
if (!$this->helper->isRublonConfigured()) {
|
69 |
+
$this->_redirect('rublon/adminhtml_activation');
|
70 |
+
} else {
|
71 |
+
// Retrive rublon features
|
72 |
+
RublonFeature::getFeatures(false);
|
73 |
+
}
|
74 |
+
}
|
75 |
+
|
76 |
+
public function flushAction() {
|
77 |
+
$this->helper->cleanCache();
|
78 |
+
|
79 |
+
// Retrive rublon features
|
80 |
+
RublonFeature::getFeatures(false);
|
81 |
+
|
82 |
+
$this->_redirect('rublon/adminhtml_settings');
|
83 |
+
}
|
84 |
+
}
|
app/code/community/Rublon/RublonModule/controllers/CallbackController.php
ADDED
@@ -0,0 +1,129 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Rublon callback controller
|
4 |
+
*
|
5 |
+
* @package rublon/rublon2factor
|
6 |
+
* @author Adips Sp. z o.o.
|
7 |
+
* @copyright Adips Sp. z o.o.
|
8 |
+
* @license http://opensource.org/licenses/gpl-license.php GNU Public License, version 2
|
9 |
+
*/
|
10 |
+
|
11 |
+
/**
|
12 |
+
* Rublon Callback for frontend and backend
|
13 |
+
*
|
14 |
+
* Magento Connect has own callback in Observer - this callback will redirect to proper URL if needed.
|
15 |
+
*/
|
16 |
+
class Rublon_RublonModule_CallbackController extends Mage_Core_Controller_Front_Action {
|
17 |
+
|
18 |
+
|
19 |
+
/**
|
20 |
+
* Rublon Callback instance
|
21 |
+
*
|
22 |
+
* @var RublonCallback
|
23 |
+
*/
|
24 |
+
protected $callback;
|
25 |
+
|
26 |
+
|
27 |
+
/**
|
28 |
+
* Pre-dispatch
|
29 |
+
*/
|
30 |
+
public function preDispatch() {
|
31 |
+
|
32 |
+
$helper = Mage::helper('rublonmodule');
|
33 |
+
|
34 |
+
if ($helper->isRublonEnabled()) {
|
35 |
+
|
36 |
+
require_once (Mage::getBaseDir('code') . DS . 'community' . DS . 'Rublon' . DS . 'RublonModule' . DS . 'lib' . DS . 'RublonImplemented' . DS .'Rublon2FactorCallbackMagento.php');
|
37 |
+
|
38 |
+
try {
|
39 |
+
|
40 |
+
$rublonCallbackParams = $this -> getRequest() -> getParams();
|
41 |
+
|
42 |
+
$state = isset($rublonCallbackParams['state']) ? $rublonCallbackParams['state'] : '';
|
43 |
+
$token = isset($rublonCallbackParams['token']) ? $rublonCallbackParams['token'] : null;
|
44 |
+
|
45 |
+
$callback = new Rublon2FactorCallbackMagento($helper->getRublon());
|
46 |
+
$callback->setState($state);
|
47 |
+
$callback->setAccessToken($token);
|
48 |
+
|
49 |
+
$module = 'admin';
|
50 |
+
|
51 |
+
// set session namespace
|
52 |
+
$this->_sessionNamespace = ($helper->isAdmin()) ? 'adminhtml' : 'frontend';
|
53 |
+
|
54 |
+
parent::preDispatch();
|
55 |
+
|
56 |
+
// Set module
|
57 |
+
$helper->setModule($module);
|
58 |
+
|
59 |
+
// run Rublon authentication
|
60 |
+
$callback->call(array($this, 'callbackSuccess'), array($this, 'callbackFailure'));
|
61 |
+
|
62 |
+
|
63 |
+
} catch(RublonException $e) {
|
64 |
+
$helper->addError($e, array('method' => __METHOD__, 'file' => __FILE__));
|
65 |
+
$helper->returnToPage($helper->getSettingsPageUrl());
|
66 |
+
}
|
67 |
+
|
68 |
+
}
|
69 |
+
|
70 |
+
}
|
71 |
+
|
72 |
+
/**
|
73 |
+
* Redirect after Rublon Callback
|
74 |
+
*/
|
75 |
+
public function indexAction() {
|
76 |
+
$helper = Mage::helper('rublonmodule');
|
77 |
+
|
78 |
+
// Get Rublon settings page URL
|
79 |
+
$url = $helper->getSettingsPageUrl();
|
80 |
+
|
81 |
+
// get Dashboard URL
|
82 |
+
$url = $helper->getAfterLoginUrl();
|
83 |
+
|
84 |
+
// Redirect
|
85 |
+
$helper->returnToPage($url);
|
86 |
+
}
|
87 |
+
|
88 |
+
|
89 |
+
/**
|
90 |
+
* Set session namespace and call parent preDispatch method
|
91 |
+
*
|
92 |
+
* Called from Rublon Callback instance to initialize admin or frontend session.
|
93 |
+
*
|
94 |
+
* @return void
|
95 |
+
*/
|
96 |
+
public function setSessionNamespace() {
|
97 |
+
if (Mage::helper('rublonmodule')->isAdmin()) {
|
98 |
+
$this->_sessionNamespace = 'admin';
|
99 |
+
} else {
|
100 |
+
$this->_sessionNamespace = 'frontend';
|
101 |
+
}
|
102 |
+
parent::preDispatch();
|
103 |
+
}
|
104 |
+
|
105 |
+
public function callbackSuccess($user_id, Rublon2FactorCallback $callback) {
|
106 |
+
|
107 |
+
$user = Mage::getModel('admin/user')->load($user_id);
|
108 |
+
Mage::getSingleton('admin/session')->setUser($user);
|
109 |
+
Mage::getSingleton('admin/session')->refreshAcl();
|
110 |
+
|
111 |
+
// Save info about project owner
|
112 |
+
$projectOwner = $callback->getConsumerParam(RublonAPICredentials::FIELD_PROJECT_OWNER);
|
113 |
+
if ($projectOwner === -1) { // Personal edition disabled - clear cashed features
|
114 |
+
RublonFeature::deleteFeaturesFromCache();
|
115 |
+
} elseif ($projectOwner) {
|
116 |
+
$userEmail = $user->getEmail();
|
117 |
+
Mage::helper('rublonmodule')->saveProjectOwner($userEmail);
|
118 |
+
}
|
119 |
+
|
120 |
+
return true;
|
121 |
+
}
|
122 |
+
|
123 |
+
public function callbackFailure() {
|
124 |
+
Mage::helper('rublonmodule')->addError(sprintf($this->__('An error accured during authentication process. Please try again or contact us at <a href="mailto:%s">%s</a>.'), RublonMagentoModule::RUBLON_SUPPORT_EMAIL, RublonMagentoModule::RUBLON_SUPPORT_EMAIL), array(
|
125 |
+
'method' => __METHOD__,
|
126 |
+
'file' => __FILE__
|
127 |
+
));
|
128 |
+
}
|
129 |
+
}
|
app/code/community/Rublon/RublonModule/controllers/RegistrationController.php
ADDED
@@ -0,0 +1,71 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Rublon registration controller
|
4 |
+
*
|
5 |
+
* @package rublon/rublon2factor
|
6 |
+
* @author Adips Sp. z o.o.
|
7 |
+
* @copyright Adips Sp. z o.o.
|
8 |
+
* @license http://opensource.org/licenses/gpl-license.php GNU Public License, version 2
|
9 |
+
*/
|
10 |
+
|
11 |
+
/**
|
12 |
+
* Rublon registration controller class
|
13 |
+
*/
|
14 |
+
class Rublon_RublonModule_RegistrationController extends Mage_Adminhtml_Controller_Action {
|
15 |
+
|
16 |
+
|
17 |
+
protected $_publicActions = array('callback');
|
18 |
+
|
19 |
+
/**
|
20 |
+
* Rublon helper instance
|
21 |
+
*
|
22 |
+
* @var Rublon_Rublon2Factor_Helper_Data
|
23 |
+
*/
|
24 |
+
protected $helper;
|
25 |
+
|
26 |
+
|
27 |
+
|
28 |
+
/**
|
29 |
+
* Pre dispatch controller actions.
|
30 |
+
* Sets session namespace to admin side.
|
31 |
+
*/
|
32 |
+
public function preDispatch() {
|
33 |
+
$this->_sessionNamespace = 'adminhtml';
|
34 |
+
parent::preDispatch();
|
35 |
+
$this->helper = Mage::helper('rublonmodule');
|
36 |
+
$this->helper->initRegistration();
|
37 |
+
}
|
38 |
+
|
39 |
+
/**
|
40 |
+
* Initialize consumer registration
|
41 |
+
*/
|
42 |
+
public function initializeAction() {
|
43 |
+
$this->run(RublonConsumerRegistrationMagento::ACTION_INITIALIZE);
|
44 |
+
}
|
45 |
+
|
46 |
+
|
47 |
+
|
48 |
+
/**
|
49 |
+
* Communication URL for consumer registration
|
50 |
+
*
|
51 |
+
* Without checking magento secret.
|
52 |
+
*/
|
53 |
+
public function callbackAction() {
|
54 |
+
$registrationParams = $this -> getRequest() -> getParams();
|
55 |
+
$action = isset($registrationParams['action']) ? $registrationParams['action'] : null;
|
56 |
+
$this->run($action);
|
57 |
+
}
|
58 |
+
|
59 |
+
|
60 |
+
/**
|
61 |
+
* Run specific action
|
62 |
+
*
|
63 |
+
* @param string $action
|
64 |
+
*/
|
65 |
+
protected function run($action) {
|
66 |
+
$helper = Mage::helper('rublonmodule');
|
67 |
+
$helper->setModule(RublonMagentoModule::ADMIN);
|
68 |
+
$helper->consumerRegistrationAction($action);
|
69 |
+
}
|
70 |
+
|
71 |
+
}
|
app/code/community/Rublon/RublonModule/etc/adminhtml.xml
ADDED
@@ -0,0 +1,41 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0"?>
|
2 |
+
<config>
|
3 |
+
|
4 |
+
<menu>
|
5 |
+
<rublonmodule translate="label" module="rublonmodule">
|
6 |
+
<title>Rublon</title>
|
7 |
+
<sort_order>100</sort_order>
|
8 |
+
<children>
|
9 |
+
<rublonmodule_item1 translate="label" module="rublonmodule">
|
10 |
+
<title>Settings</title>
|
11 |
+
<sort_order>1</sort_order>
|
12 |
+
<action>rublon/adminhtml_settings</action>
|
13 |
+
</rublonmodule_item1>
|
14 |
+
</children>
|
15 |
+
</rublonmodule>
|
16 |
+
</menu>
|
17 |
+
|
18 |
+
<acl>
|
19 |
+
<resources>
|
20 |
+
<all>
|
21 |
+
<title>Allow Everything</title>
|
22 |
+
</all>
|
23 |
+
<admin>
|
24 |
+
<children>
|
25 |
+
<system>
|
26 |
+
<children>
|
27 |
+
<config>
|
28 |
+
<children>
|
29 |
+
<rublonmodule_options translate="title" module="rublonmodule">
|
30 |
+
<title>RublonModule</title>
|
31 |
+
<sort_order>100</sort_order>
|
32 |
+
</rublonmodule_options>
|
33 |
+
</children>
|
34 |
+
</config>
|
35 |
+
</children>
|
36 |
+
</system>
|
37 |
+
</children>
|
38 |
+
</admin>
|
39 |
+
</resources>
|
40 |
+
</acl>
|
41 |
+
</config>
|
app/code/community/Rublon/RublonModule/etc/config.xml
ADDED
@@ -0,0 +1,114 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0"?>
|
2 |
+
<config>
|
3 |
+
|
4 |
+
<modules>
|
5 |
+
<Rublon_RublonModule>
|
6 |
+
<version>2.0.0</version>
|
7 |
+
</Rublon_RublonModule>
|
8 |
+
</modules>
|
9 |
+
|
10 |
+
<default>
|
11 |
+
<rublonmodule_options>
|
12 |
+
<general>
|
13 |
+
<rublon_enabled>1</rublon_enabled>
|
14 |
+
<rublon_system_token></rublon_system_token>
|
15 |
+
<rublon_secret_key></rublon_secret_key>
|
16 |
+
</general>
|
17 |
+
</rublonmodule_options>
|
18 |
+
</default>
|
19 |
+
|
20 |
+
<adminhtml>
|
21 |
+
|
22 |
+
<layout>
|
23 |
+
<updates>
|
24 |
+
<rublonmodule>
|
25 |
+
<file>rublonmodule.xml</file>
|
26 |
+
</rublonmodule>
|
27 |
+
</updates>
|
28 |
+
</layout>
|
29 |
+
<translate>
|
30 |
+
<modules>
|
31 |
+
<Rublon_RublonModule>
|
32 |
+
<files>
|
33 |
+
<default>Rublon_RublonModule.csv</default>
|
34 |
+
</files>
|
35 |
+
</Rublon_RublonModule>
|
36 |
+
</modules>
|
37 |
+
</translate>
|
38 |
+
|
39 |
+
</adminhtml>
|
40 |
+
|
41 |
+
<admin>
|
42 |
+
<secure_url>
|
43 |
+
<rublonmodule>/rublon</rublonmodule>
|
44 |
+
</secure_url>
|
45 |
+
<routers>
|
46 |
+
<rublonmodule>
|
47 |
+
<use>admin</use>
|
48 |
+
<args>
|
49 |
+
<module>Rublon_RublonModule</module>
|
50 |
+
<frontName>rublon</frontName>
|
51 |
+
</args>
|
52 |
+
</rublonmodule>
|
53 |
+
</routers>
|
54 |
+
</admin>
|
55 |
+
|
56 |
+
<global>
|
57 |
+
<helpers>
|
58 |
+
<rublonmodule>
|
59 |
+
<class>Rublon_RublonModule_Helper</class>
|
60 |
+
</rublonmodule>
|
61 |
+
</helpers>
|
62 |
+
<resources>
|
63 |
+
<rublonmodule_setup>
|
64 |
+
<setup>
|
65 |
+
<module>Rublon_RublonModule</module>
|
66 |
+
</setup>
|
67 |
+
</rublonmodule_setup>
|
68 |
+
</resources>
|
69 |
+
<blocks>
|
70 |
+
<adminhtml>
|
71 |
+
<rewrite>
|
72 |
+
<page_header>Rublon_RublonModule_Block_Adminhtml_Header</page_header>
|
73 |
+
<page_menu>Rublon_RublonModule_Block_Adminhtml_Menu</page_menu>
|
74 |
+
</rewrite>
|
75 |
+
</adminhtml>
|
76 |
+
<rublonmodule>
|
77 |
+
<class>Rublon_RublonModule_Block</class>
|
78 |
+
</rublonmodule>
|
79 |
+
</blocks>
|
80 |
+
<models>
|
81 |
+
<rublonmodule>
|
82 |
+
<class>Rublon_RublonModule_Model</class>
|
83 |
+
<resourceModel>rublonmodule_resource</resourceModel>
|
84 |
+
</rublonmodule>
|
85 |
+
<rublonmodule_resource>
|
86 |
+
<class>Rublon_RublonModule_Model_Resource</class>
|
87 |
+
<entities>
|
88 |
+
<rublon_user>
|
89 |
+
<table>Rublon_RublonModule_user</table>
|
90 |
+
</rublon_user>
|
91 |
+
</entities>
|
92 |
+
</rublonmodule_resource>
|
93 |
+
</models>
|
94 |
+
<events>
|
95 |
+
<admin_user_authenticate_after>
|
96 |
+
<observers>
|
97 |
+
<rublonmodule>
|
98 |
+
<class>rublonmodule/observer</class>
|
99 |
+
<method>afterAdminLogin</method>
|
100 |
+
</rublonmodule>
|
101 |
+
</observers>
|
102 |
+
</admin_user_authenticate_after>
|
103 |
+
<controller_front_init_before>
|
104 |
+
<observers>
|
105 |
+
<rublon2factor>
|
106 |
+
<class>rublonmodule/observer</class>
|
107 |
+
<method>controllerInit</method>
|
108 |
+
</rublon2factor>
|
109 |
+
</observers>
|
110 |
+
</controller_front_init_before>
|
111 |
+
</events>
|
112 |
+
</global>
|
113 |
+
|
114 |
+
</config>
|
app/code/community/Rublon/RublonModule/etc/system.xml
ADDED
@@ -0,0 +1,60 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0"?>
|
2 |
+
<config>
|
3 |
+
<!--
|
4 |
+
<tabs>
|
5 |
+
<rublonconfig translate="label" module="rublon2factor">
|
6 |
+
<label>Rublon</label>
|
7 |
+
<sort_order>1</sort_order>
|
8 |
+
</rublonconfig>
|
9 |
+
</tabs>
|
10 |
+
<sections>
|
11 |
+
<rublon2factor_options translate="label" module="rublon2factor">
|
12 |
+
<label>Rublon</label>
|
13 |
+
<tab>rublonconfig</tab>
|
14 |
+
<frontend_type>text</frontend_type>
|
15 |
+
<sort_order>10000</sort_order>
|
16 |
+
<show_in_default>0</show_in_default>
|
17 |
+
<show_in_website>0</show_in_website>
|
18 |
+
<show_in_store>0</show_in_store>
|
19 |
+
<groups>
|
20 |
+
<activation translate="label" module="rublon2factor">
|
21 |
+
<label>Rublon</label>
|
22 |
+
<frontend_type>text</frontend_type>
|
23 |
+
<sort_order>100</sort_order>
|
24 |
+
<show_in_default>1</show_in_default>
|
25 |
+
<show_in_website>0</show_in_website>
|
26 |
+
<show_in_store>0</show_in_store>
|
27 |
+
<fields>
|
28 |
+
<rublon_registration translate="label comment" module="rublon2factor">
|
29 |
+
<frontend_type>button</frontend_type>
|
30 |
+
<frontend_model>rublon2factor/activation</frontend_model>
|
31 |
+
<sort_order>8</sort_order>
|
32 |
+
<show_in_default>1</show_in_default>
|
33 |
+
<show_in_website>0</show_in_website>
|
34 |
+
<show_in_store>0</show_in_store>
|
35 |
+
</rublon_registration>
|
36 |
+
</fields>
|
37 |
+
</activation>
|
38 |
+
<protection translate="label" module="rublon2factor">
|
39 |
+
<label>Account Protection</label>
|
40 |
+
<frontend_type>text</frontend_type>
|
41 |
+
<sort_order>101</sort_order>
|
42 |
+
<show_in_default>1</show_in_default>
|
43 |
+
<show_in_website>0</show_in_website>
|
44 |
+
<show_in_store>0</show_in_store>
|
45 |
+
<fields>
|
46 |
+
<rublon_protection translate="label comment" module="rublon2factor">
|
47 |
+
<frontend_type>button</frontend_type>
|
48 |
+
<frontend_model>rublon2factor/protection</frontend_model>
|
49 |
+
<sort_order>8</sort_order>
|
50 |
+
<show_in_default>1</show_in_default>
|
51 |
+
<show_in_website>0</show_in_website>
|
52 |
+
<show_in_store>0</show_in_store>
|
53 |
+
</rublon_protection>
|
54 |
+
</fields>
|
55 |
+
</protection>
|
56 |
+
</groups>
|
57 |
+
</rublon2factor_options>
|
58 |
+
</sections>
|
59 |
+
-->
|
60 |
+
</config>
|
app/code/community/Rublon/RublonModule/img/index.php
ADDED
@@ -0,0 +1,35 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* 2013 Rublon
|
4 |
+
*
|
5 |
+
* NOTICE OF LICENSE
|
6 |
+
*
|
7 |
+
* This source file is subject to the Academic Free License (AFL 3.0)
|
8 |
+
* that is bundled with this package in the file LICENSE.txt.
|
9 |
+
* It is also available through the world-wide-web at this URL:
|
10 |
+
* http://opensource.org/licenses/afl-3.0.php
|
11 |
+
* If you did not receive a copy of the license and are unable to
|
12 |
+
* obtain it through the world-wide-web, please send an email
|
13 |
+
* to license@prestashop.com so we can send you a copy immediately.
|
14 |
+
*
|
15 |
+
* DISCLAIMER
|
16 |
+
*
|
17 |
+
* Do not edit or add to this file if you wish to upgrade Rublon to newer
|
18 |
+
* versions in the future. If you wish to customize Rublon for your
|
19 |
+
* needs please contact us at support@rublon.com for more information.
|
20 |
+
*
|
21 |
+
* @author Rublon <support@rublon.com>
|
22 |
+
* @copyright 2013 Adips
|
23 |
+
* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
|
24 |
+
* Property of Adips Sp. z o. o., Poland
|
25 |
+
*/
|
26 |
+
|
27 |
+
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
|
28 |
+
header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");
|
29 |
+
|
30 |
+
header("Cache-Control: no-store, no-cache, must-revalidate");
|
31 |
+
header("Cache-Control: post-check=0, pre-check=0", false);
|
32 |
+
header("Pragma: no-cache");
|
33 |
+
|
34 |
+
header("Location: ../");
|
35 |
+
exit;
|
app/code/community/Rublon/RublonModule/img/rublon_logo_16x16.png
ADDED
Binary file
|
app/code/community/Rublon/RublonModule/img/rublon_logo_16x16@2x.png
ADDED
Binary file
|
app/code/community/Rublon/RublonModule/img/rublon_logo_32x32.png
ADDED
Binary file
|
app/code/community/Rublon/RublonModule/img/rublon_logo_32x32@2x.png
ADDED
Binary file
|
app/code/community/Rublon/RublonModule/img/rublon_visual.gif
ADDED
Binary file
|
app/code/community/Rublon/RublonModule/img/rublon_visual@2x.gif
ADDED
Binary file
|
app/code/community/Rublon/RublonModule/lib/Rublon/Rublon2Factor.php
ADDED
@@ -0,0 +1,158 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
require_once 'core/RublonConsumer.php';
|
4 |
+
require_once 'Rublon2FactorCallback.php';
|
5 |
+
require_once 'Rublon2FactorGUI.php';
|
6 |
+
require_once 'core/HTML/RublonButton.php';
|
7 |
+
require_once 'core/API/RublonAPICredentials.php';
|
8 |
+
require_once 'core/API/RublonAPIBeginTransaction.php';
|
9 |
+
require_once 'core/API/RublonAPINotification.php';
|
10 |
+
require_once 'core/API/RublonAPIGetAvailableFeatures.php';
|
11 |
+
|
12 |
+
/**
|
13 |
+
* Class provides methods used by `Rublon Two Factor` service process.
|
14 |
+
*
|
15 |
+
*/
|
16 |
+
class Rublon2Factor extends RublonConsumer {
|
17 |
+
|
18 |
+
/**
|
19 |
+
* Service name.
|
20 |
+
*
|
21 |
+
* @var string
|
22 |
+
*/
|
23 |
+
protected $serviceName = '2factor';
|
24 |
+
|
25 |
+
/**
|
26 |
+
* Cached credentials.
|
27 |
+
*
|
28 |
+
* @var array
|
29 |
+
*/
|
30 |
+
protected $cacheCredentials = array();
|
31 |
+
|
32 |
+
|
33 |
+
|
34 |
+
/**
|
35 |
+
* Initializes the Rublon authentication transaction
|
36 |
+
* and returns the URL address to redirect user's browser
|
37 |
+
* or NULL if user's account is not protected.
|
38 |
+
*
|
39 |
+
* First, method checks the account's protection status in the Rublon server for current user.
|
40 |
+
* If user has protected this account, method returns the URL address.
|
41 |
+
* Redirect user's browser to this URL to start the Rublon authentication process.
|
42 |
+
*
|
43 |
+
* If Rublon user has deleted his Rublon account or Rublon API is not available at this time,
|
44 |
+
* method returns false. If so, just bypass Rublon and sign in the user.
|
45 |
+
*
|
46 |
+
* Notice: to use this method the configurations values (system token and secret key)
|
47 |
+
* must be provided to the constructor. If not, function will trigger an E_USER_ERROR.
|
48 |
+
*
|
49 |
+
* @param string $callbackUrl Callback URL address.
|
50 |
+
* @param string $userId User's ID in local system.
|
51 |
+
* @param string $userEmail User's email address.
|
52 |
+
* @param array $consumerParams Custom consumer parameters array (optional).
|
53 |
+
* @return Ambigous <string, NULL> URL to redirect or NULL if user is not protected.
|
54 |
+
* @throws RublonException
|
55 |
+
*/
|
56 |
+
public function auth($callbackUrl, $userId, $userEmail, array $consumerParams = array()) {
|
57 |
+
|
58 |
+
$this->log(__METHOD__);
|
59 |
+
|
60 |
+
if (!$this->isConfigured()) {
|
61 |
+
trigger_error(RublonConsumer::TEMPLATE_CONFIG_ERROR, E_USER_ERROR);
|
62 |
+
return null;
|
63 |
+
}
|
64 |
+
|
65 |
+
if ($lang = $this->getLang()) {
|
66 |
+
$consumerParams[RublonAuthParams::FIELD_LANG] = $lang;
|
67 |
+
}
|
68 |
+
|
69 |
+
try {
|
70 |
+
$beginTransaction = new RublonAPIBeginTransaction($this, $callbackUrl, $userEmail, $userId, $consumerParams);
|
71 |
+
$beginTransaction->perform();
|
72 |
+
return $beginTransaction->getWebURI();
|
73 |
+
} catch (UserNotFound_RublonAPIException $e) {
|
74 |
+
// bypass Rublon
|
75 |
+
return null;
|
76 |
+
} catch (RublonException $e) {
|
77 |
+
throw $e;
|
78 |
+
}
|
79 |
+
|
80 |
+
}
|
81 |
+
|
82 |
+
|
83 |
+
/**
|
84 |
+
* Authenticate user and perform an additional confirmation of the transaction.
|
85 |
+
*
|
86 |
+
* This method requires user to use the Rublon mobile app
|
87 |
+
* (even if the Trusted Device is available)
|
88 |
+
* and confirm transaction to maintain higher security level.
|
89 |
+
* The message passed in the $customMessage argument will be displayed
|
90 |
+
* in the confirmation dialog on the user's mobile.
|
91 |
+
*
|
92 |
+
* @param string $callbackUrl
|
93 |
+
* @param string $userId
|
94 |
+
* @param string $userEmail
|
95 |
+
* @param string $confirmMessage
|
96 |
+
* @param array $consumerParams
|
97 |
+
* @return Ambigous <string, NULL> URL to redirect or NULL if user is not protected.
|
98 |
+
* @throws RublonException
|
99 |
+
* @see RublonAPICredentials::getConfirmResult()
|
100 |
+
*/
|
101 |
+
public function confirm($callbackUrl, $userId, $userEmail, $confirmMessage, array $consumerParams = array()) {
|
102 |
+
$consumerParams[RublonAuthParams::FIELD_CONFIRM_MESSAGE] = $confirmMessage;
|
103 |
+
if ($lang = $this->getLang()) {
|
104 |
+
$consumerParams[RublonAuthParams::FIELD_LANG] = $lang;
|
105 |
+
}
|
106 |
+
return $this->auth($callbackUrl, $userId, $userEmail, $consumerParams);
|
107 |
+
}
|
108 |
+
|
109 |
+
|
110 |
+
/**
|
111 |
+
* Perform a confirmation of the transaction without user's action needed
|
112 |
+
* if the time buffer after previous confirmation has not been reached.
|
113 |
+
*
|
114 |
+
* If the amount of seconds after the previous transaction is less than
|
115 |
+
* given time buffer, Rublon will confirm the transaction without user's action.
|
116 |
+
* In other cases, this method will behave the same as the Rublon2Factor::confirm() method.
|
117 |
+
*
|
118 |
+
* @param string $callbackUrl
|
119 |
+
* @param string $userId
|
120 |
+
* @param string $userEmail
|
121 |
+
* @param string $confirmMessage
|
122 |
+
* @param int $timeBuffer
|
123 |
+
* @param array $consumerParams
|
124 |
+
* @return Ambigous <string, NULL> URL to redirect or NULL if user is not protected.
|
125 |
+
* @throws RublonException
|
126 |
+
* @see Rublon2Factor::confirm()
|
127 |
+
* @see RublonAPICredentials::getConfirmResult()
|
128 |
+
*/
|
129 |
+
public function confirmWithBuffer($callbackUrl, $userId, $userEmail, $confirmMessage, $timeBuffer, array $consumerParams = array()) {
|
130 |
+
$consumerParams[RublonAuthParams::FIELD_CONFIRM_TIME_BUFFER] = $timeBuffer;
|
131 |
+
return $this->confirm($callbackUrl, $userId, $userEmail, $confirmMessage, $consumerParams);
|
132 |
+
}
|
133 |
+
|
134 |
+
|
135 |
+
/**
|
136 |
+
* Authenticate user and get user's credentials using one-time use access token and expected user's profile ID.
|
137 |
+
*
|
138 |
+
* One-time use access token is a session identifier which will be deleted after first usage.
|
139 |
+
* This method can be called only once in authentication process.
|
140 |
+
*
|
141 |
+
* @param string $accessToken One-time use access token
|
142 |
+
* @return RublonAPICredentials
|
143 |
+
* @throws RublonException
|
144 |
+
*/
|
145 |
+
public function getCredentials($accessToken) {
|
146 |
+
if (isset($this->cacheCredentials[$accessToken])) {
|
147 |
+
$this->log('return cached credentials');
|
148 |
+
return $this->cacheCredentials[$accessToken];
|
149 |
+
} else {
|
150 |
+
$credentials = new RublonAPICredentials($this, $accessToken);
|
151 |
+
$credentials->perform();
|
152 |
+
$this->cacheCredentials[$accessToken] = $credentials;
|
153 |
+
return $credentials;
|
154 |
+
}
|
155 |
+
}
|
156 |
+
|
157 |
+
|
158 |
+
}
|
app/code/community/Rublon/RublonModule/lib/Rublon/Rublon2FactorCallback.php
ADDED
@@ -0,0 +1,311 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Class to handle the Rublon callback action.
|
5 |
+
*
|
6 |
+
*/
|
7 |
+
class Rublon2FactorCallback {
|
8 |
+
|
9 |
+
/**
|
10 |
+
* State GET parameter name.
|
11 |
+
*/
|
12 |
+
const PARAMETER_STATE = 'state';
|
13 |
+
|
14 |
+
/**
|
15 |
+
* Access token GET parameter name.
|
16 |
+
*/
|
17 |
+
const PARAMETER_ACCESS_TOKEN = 'token';
|
18 |
+
|
19 |
+
/**
|
20 |
+
* Custom URI param GET parameter name.
|
21 |
+
*/
|
22 |
+
const PARAMETER_CUSTOM_URI_PARAM = 'custom';
|
23 |
+
|
24 |
+
/**
|
25 |
+
* Success state value.
|
26 |
+
*/
|
27 |
+
const STATE_OK = 'ok';
|
28 |
+
|
29 |
+
/**
|
30 |
+
* Error state value.
|
31 |
+
*/
|
32 |
+
const STATE_ERROR = 'error';
|
33 |
+
|
34 |
+
/**
|
35 |
+
* Logout state value.
|
36 |
+
*/
|
37 |
+
const STATE_LOGOUT = 'logout';
|
38 |
+
|
39 |
+
const FIELD_LOGOUT_ACCESS_TOKEN = 'accessToken';
|
40 |
+
const FIELD_LOGOUT_USER_ID = 'userId';
|
41 |
+
const FIELD_LOGOUT_DEVICE_ID = 'deviceId';
|
42 |
+
|
43 |
+
|
44 |
+
/**
|
45 |
+
* Instance of the Rublon2Factor class.
|
46 |
+
*
|
47 |
+
* @var Rublon2Factor
|
48 |
+
*/
|
49 |
+
protected $rublon;
|
50 |
+
|
51 |
+
/**
|
52 |
+
* Handler to finalize authentication.
|
53 |
+
*
|
54 |
+
* @var callable
|
55 |
+
*/
|
56 |
+
protected $successHandler;
|
57 |
+
|
58 |
+
/**
|
59 |
+
* Handler on cancel.
|
60 |
+
*
|
61 |
+
* @var callable
|
62 |
+
*/
|
63 |
+
protected $cancelHandler;
|
64 |
+
|
65 |
+
/**
|
66 |
+
* Rublon API response instance.
|
67 |
+
*
|
68 |
+
* @var RublonAPICredentials
|
69 |
+
*/
|
70 |
+
protected $credentials;
|
71 |
+
|
72 |
+
|
73 |
+
|
74 |
+
/**
|
75 |
+
* Constructor.
|
76 |
+
*
|
77 |
+
* @param Rublon2Factor $rublon
|
78 |
+
*/
|
79 |
+
public function __construct(Rublon2Factor $rublon) {
|
80 |
+
if (!$rublon->isConfigured()) {
|
81 |
+
trigger_error(RublonConsumer::TEMPLATE_CONFIG_ERROR, E_USER_ERROR);
|
82 |
+
}
|
83 |
+
$this->rublon = $rublon;
|
84 |
+
$this->log(__METHOD__);
|
85 |
+
}
|
86 |
+
|
87 |
+
|
88 |
+
/**
|
89 |
+
* Invoke the callback.
|
90 |
+
*
|
91 |
+
* @param callable $successHandler
|
92 |
+
* Function to handle successful authentication
|
93 |
+
* with arguments: (int) $userId, Rublon2FactorCallback $thisInstance.
|
94 |
+
* @param callable $cancelHandler
|
95 |
+
* Function to handle cancel request
|
96 |
+
* with argument: Rublon2FactorCallback $thisInstance.
|
97 |
+
* @throws RublonException
|
98 |
+
* Method may throws exception on state=error
|
99 |
+
* or other API request errors.
|
100 |
+
* @return void
|
101 |
+
*/
|
102 |
+
public function call($successHandler, $cancelHandler) {
|
103 |
+
|
104 |
+
$this->successHandler = $successHandler;
|
105 |
+
$this->cancelHandler = $cancelHandler;
|
106 |
+
|
107 |
+
$state = strtolower($this->getState());
|
108 |
+
$this->log(__METHOD__ . ' -- state=' . $state);
|
109 |
+
|
110 |
+
switch ($state) {
|
111 |
+
|
112 |
+
case self::STATE_OK:
|
113 |
+
$this->handleStateOK();
|
114 |
+
break;
|
115 |
+
|
116 |
+
case self::STATE_ERROR:
|
117 |
+
throw new RublonCallbackException('Rublon error status.', RublonCallbackException::ERROR_API_ERROR);
|
118 |
+
break;
|
119 |
+
|
120 |
+
case self::STATE_LOGOUT:
|
121 |
+
$this->handleStateLogout();
|
122 |
+
break;
|
123 |
+
|
124 |
+
default:
|
125 |
+
if (is_callable($cancelHandler)) {
|
126 |
+
call_user_func($cancelHandler, $this);
|
127 |
+
} else {
|
128 |
+
trigger_error('Cancel handler must be a valid callback.', E_USER_ERROR);
|
129 |
+
}
|
130 |
+
|
131 |
+
}
|
132 |
+
|
133 |
+
}
|
134 |
+
|
135 |
+
|
136 |
+
/**
|
137 |
+
* Handle state "OK" - run authentication.
|
138 |
+
*
|
139 |
+
* @return void
|
140 |
+
*/
|
141 |
+
protected function handleStateOK() {
|
142 |
+
$this->log(__METHOD__);
|
143 |
+
|
144 |
+
if ($accessToken = $this->getAccessToken()) {
|
145 |
+
|
146 |
+
try /* to connect to the Rublon API and get user's ID to authenticate */ {
|
147 |
+
$this->credentials = $this->getRublon()->getCredentials($accessToken);
|
148 |
+
} catch (RublonException $e) {
|
149 |
+
throw new RublonCallbackException("Rublon API credentials error [".$e->getMessage()."]", RublonCallbackException::ERROR_REST_CREDENTIALS, $e);
|
150 |
+
}
|
151 |
+
|
152 |
+
// Authenticate user:
|
153 |
+
$this->success($this->credentials->getUserId());
|
154 |
+
|
155 |
+
} else {
|
156 |
+
throw new RublonCallbackException("Missing access token.", RublonCallbackException::ERROR_MISSING_ACCESS_TOKEN);
|
157 |
+
}
|
158 |
+
|
159 |
+
}
|
160 |
+
|
161 |
+
|
162 |
+
/**
|
163 |
+
* Finalize authentication.
|
164 |
+
*
|
165 |
+
* @param string $userId
|
166 |
+
* @return void
|
167 |
+
*/
|
168 |
+
protected function success($userId) {
|
169 |
+
if (!empty($this->successHandler) AND is_callable($this->successHandler)) {
|
170 |
+
call_user_func($this->successHandler, $userId, $this);
|
171 |
+
} else {
|
172 |
+
trigger_error('Success handler must be a valid callback.', E_USER_ERROR);
|
173 |
+
}
|
174 |
+
}
|
175 |
+
|
176 |
+
|
177 |
+
/**
|
178 |
+
* Handle state logout: parse input and call logout for given user.
|
179 |
+
*
|
180 |
+
* @throws MissingField_RublonClientException
|
181 |
+
* @throws RublonException
|
182 |
+
*/
|
183 |
+
protected function handleStateLogout() {
|
184 |
+
|
185 |
+
if ($input = file_get_contents("php://input")) {
|
186 |
+
|
187 |
+
$message = RublonSignatureWrapper::parseMessage($input, $this->getRublon()->getSecretKey());
|
188 |
+
$requiredFields = array(self::FIELD_LOGOUT_ACCESS_TOKEN, self::FIELD_LOGOUT_USER_ID, self::FIELD_LOGOUT_DEVICE_ID);
|
189 |
+
foreach ($requiredFields as $field) {
|
190 |
+
if (empty($message[$field])) {
|
191 |
+
$response = array('status' => 'ERROR', 'msg' => 'Missing field.', 'field' => $field);
|
192 |
+
break;
|
193 |
+
}
|
194 |
+
}
|
195 |
+
|
196 |
+
if (empty($response)) {
|
197 |
+
$this->handleLogout($message['userId'], $message['deviceId']);
|
198 |
+
$response = array('status' => 'OK', 'msg' => 'Success');
|
199 |
+
}
|
200 |
+
|
201 |
+
} else {
|
202 |
+
$response = array('status' => 'ERROR', 'msg' => 'Empty JSON input.');
|
203 |
+
}
|
204 |
+
|
205 |
+
header('content-type: application/json');
|
206 |
+
echo json_encode($response);
|
207 |
+
exit;
|
208 |
+
|
209 |
+
}
|
210 |
+
|
211 |
+
|
212 |
+
/**
|
213 |
+
* Handle logout in the local system: logout given user for given deviceId.
|
214 |
+
*
|
215 |
+
* If you want to implement this feature, please override method in a subclass.
|
216 |
+
*
|
217 |
+
* @param string $userId
|
218 |
+
* @param int $deviceId
|
219 |
+
*/
|
220 |
+
protected function handleLogout($userId, $deviceId) {
|
221 |
+
// to override in a subclass
|
222 |
+
}
|
223 |
+
|
224 |
+
|
225 |
+
/* ---------------------------------------------------------------------------------------------------
|
226 |
+
* Helper methods
|
227 |
+
*/
|
228 |
+
|
229 |
+
|
230 |
+
/**
|
231 |
+
* Get Rublon instance.
|
232 |
+
*
|
233 |
+
* @return Rublon2Factor
|
234 |
+
*/
|
235 |
+
protected function getRublon() {
|
236 |
+
return $this->rublon;
|
237 |
+
}
|
238 |
+
|
239 |
+
/**
|
240 |
+
* Log message.
|
241 |
+
*
|
242 |
+
* @param mixed $msg
|
243 |
+
* @return Rublon2FactorCallback
|
244 |
+
*/
|
245 |
+
protected function log($msg) {
|
246 |
+
$this->getRublon()->log($msg);
|
247 |
+
return $this;
|
248 |
+
}
|
249 |
+
|
250 |
+
/**
|
251 |
+
* Get state from GET parameters or NULL if not present.
|
252 |
+
*
|
253 |
+
* @return string|NULL
|
254 |
+
*/
|
255 |
+
protected function getState() {
|
256 |
+
if (isset($_GET[self::PARAMETER_STATE])) {
|
257 |
+
return $_GET[self::PARAMETER_STATE];
|
258 |
+
}
|
259 |
+
}
|
260 |
+
|
261 |
+
/**
|
262 |
+
* Get access token from GET parameters or NULL if not present.
|
263 |
+
*
|
264 |
+
* @return string|NULL
|
265 |
+
*/
|
266 |
+
protected function getAccessToken() {
|
267 |
+
if (isset($_GET[self::PARAMETER_ACCESS_TOKEN])) {
|
268 |
+
return $_GET[self::PARAMETER_ACCESS_TOKEN];
|
269 |
+
}
|
270 |
+
}
|
271 |
+
|
272 |
+
|
273 |
+
/**
|
274 |
+
* Get the credentials response object.
|
275 |
+
*
|
276 |
+
* @return RublonAPICredentials
|
277 |
+
*/
|
278 |
+
public function getCredentials() {
|
279 |
+
return $this->credentials;
|
280 |
+
}
|
281 |
+
|
282 |
+
|
283 |
+
/**
|
284 |
+
* Get consumer param from credentials response.
|
285 |
+
*
|
286 |
+
* @param string $key
|
287 |
+
* @return mixed
|
288 |
+
*/
|
289 |
+
public function getConsumerParam($key) {
|
290 |
+
if ($credentials = $this->getCredentials()) {
|
291 |
+
$consumerParams = $credentials->getResponse();
|
292 |
+
if (isset($consumerParams[RublonAPIClient::FIELD_RESULT]) AND isset($consumerParams[RublonAPIClient::FIELD_RESULT][$key])) {
|
293 |
+
return $consumerParams[RublonAPIClient::FIELD_RESULT][$key];
|
294 |
+
}
|
295 |
+
}
|
296 |
+
}
|
297 |
+
|
298 |
+
|
299 |
+
}
|
300 |
+
|
301 |
+
|
302 |
+
class RublonCallbackException extends RublonException {
|
303 |
+
|
304 |
+
// Defined errors
|
305 |
+
const ERROR_MISSING_ACCESS_TOKEN = 1;
|
306 |
+
const ERROR_REST_CREDENTIALS = 2;
|
307 |
+
const ERROR_USER_NOT_AUTHORIZED = 5;
|
308 |
+
const ERROR_DIFFERENT_USER = 6;
|
309 |
+
const ERROR_API_ERROR = 7;
|
310 |
+
|
311 |
+
}
|
app/code/community/Rublon/RublonModule/lib/Rublon/Rublon2FactorGUI.php
ADDED
@@ -0,0 +1,64 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
require_once('Rublon2Factor.php');
|
4 |
+
require_once('core/RublonGUI.php');
|
5 |
+
|
6 |
+
|
7 |
+
/**
|
8 |
+
* Class to create Rublon GUI elements.
|
9 |
+
*
|
10 |
+
* To display the Rublon GUI you can just echo the class instance.
|
11 |
+
*
|
12 |
+
*/
|
13 |
+
class Rublon2FactorGUI extends RublonGUI {
|
14 |
+
|
15 |
+
|
16 |
+
/**
|
17 |
+
* Template for user box container.
|
18 |
+
*/
|
19 |
+
const TEMPLATE_BOX_CONTAINER = '<div class="rublon-box" data-configured="%d" data-can-activate="%d">%s</div>';
|
20 |
+
|
21 |
+
|
22 |
+
/**
|
23 |
+
* Create user box.
|
24 |
+
*
|
25 |
+
* @return string
|
26 |
+
*/
|
27 |
+
public function userBox() {
|
28 |
+
return $this->getConsumerScript()
|
29 |
+
. $this->getUserBoxContainer();
|
30 |
+
}
|
31 |
+
|
32 |
+
|
33 |
+
/**
|
34 |
+
* Cast object into string.
|
35 |
+
*
|
36 |
+
* @return string
|
37 |
+
*/
|
38 |
+
public function __toString() {
|
39 |
+
try {
|
40 |
+
return $this->userBox();
|
41 |
+
} catch (Exception $e) {
|
42 |
+
return $e->getMessage();
|
43 |
+
}
|
44 |
+
}
|
45 |
+
|
46 |
+
|
47 |
+
/**
|
48 |
+
* Get container of the user box.
|
49 |
+
*
|
50 |
+
* @param string $content HTML content
|
51 |
+
* @return string
|
52 |
+
*/
|
53 |
+
protected function getUserBoxContainer($content = '') {
|
54 |
+
return sprintf(self::TEMPLATE_BOX_CONTAINER,
|
55 |
+
(int)$this->getRublon()->isConfigured(),
|
56 |
+
(int)$this->getRublon()->canUserActivate(),
|
57 |
+
(string)$content
|
58 |
+
)
|
59 |
+
. new RublonDeviceWidget()
|
60 |
+
. new RublonShareAccessWidget();
|
61 |
+
}
|
62 |
+
|
63 |
+
|
64 |
+
}
|
app/code/community/Rublon/RublonModule/lib/Rublon/cert/cacert.pem
ADDED
@@ -0,0 +1,3895 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
##
|
2 |
+
## ca-bundle.crt -- Bundle of CA Root Certificates
|
3 |
+
##
|
4 |
+
## Certificate data from Mozilla as of: Sat Dec 29 20:03:40 2012
|
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://mxr.mozilla.org/mozilla/source/security/nss/lib/ckfw/builtins/certdata.txt?raw=1
|
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 |
+
|
17 |
+
# @(#) $RCSfile: certdata.txt,v $ $Revision: 1.87 $ $Date: 2012/12/29 16:32:45 $
|
18 |
+
|
19 |
+
GTE CyberTrust Global Root
|
20 |
+
==========================
|
21 |
+
-----BEGIN CERTIFICATE-----
|
22 |
+
MIICWjCCAcMCAgGlMA0GCSqGSIb3DQEBBAUAMHUxCzAJBgNVBAYTAlVTMRgwFgYDVQQKEw9HVEUg
|
23 |
+
Q29ycG9yYXRpb24xJzAlBgNVBAsTHkdURSBDeWJlclRydXN0IFNvbHV0aW9ucywgSW5jLjEjMCEG
|
24 |
+
A1UEAxMaR1RFIEN5YmVyVHJ1c3QgR2xvYmFsIFJvb3QwHhcNOTgwODEzMDAyOTAwWhcNMTgwODEz
|
25 |
+
MjM1OTAwWjB1MQswCQYDVQQGEwJVUzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQL
|
26 |
+
Ex5HVEUgQ3liZXJUcnVzdCBTb2x1dGlvbnMsIEluYy4xIzAhBgNVBAMTGkdURSBDeWJlclRydXN0
|
27 |
+
IEdsb2JhbCBSb290MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCVD6C28FCc6HrHiM3dFw4u
|
28 |
+
sJTQGz0O9pTAipTHBsiQl8i4ZBp6fmw8U+E3KHNgf7KXUwefU/ltWJTSr41tiGeA5u2ylc9yMcql
|
29 |
+
HHK6XALnZELn+aks1joNrI1CqiQBOeacPwGFVw1Yh0X404Wqk2kmhXBIgD8SFcd5tB8FLztimQID
|
30 |
+
AQABMA0GCSqGSIb3DQEBBAUAA4GBAG3rGwnpXtlR22ciYaQqPEh346B8pt5zohQDhT37qw4wxYMW
|
31 |
+
M4ETCJ57NE7fQMh017l93PR2VX2bY1QY6fDq81yx2YtCHrnAlU66+tXifPVoYb+O7AWXX1uw16OF
|
32 |
+
NMQkpw0PlZPvy5TYnh+dXIVtx6quTx8itc2VrbqnzPmrC3p/
|
33 |
+
-----END CERTIFICATE-----
|
34 |
+
|
35 |
+
Thawte Server CA
|
36 |
+
================
|
37 |
+
-----BEGIN CERTIFICATE-----
|
38 |
+
MIIDEzCCAnygAwIBAgIBATANBgkqhkiG9w0BAQQFADCBxDELMAkGA1UEBhMCWkExFTATBgNVBAgT
|
39 |
+
DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29uc3Vs
|
40 |
+
dGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcGA1UE
|
41 |
+
AxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5j
|
42 |
+
b20wHhcNOTYwODAxMDAwMDAwWhcNMjAxMjMxMjM1OTU5WjCBxDELMAkGA1UEBhMCWkExFTATBgNV
|
43 |
+
BAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29u
|
44 |
+
c3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcG
|
45 |
+
A1UEAxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0
|
46 |
+
ZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANOkUG7I/1Zr5s9dtuoMaHVHoqrC2oQl
|
47 |
+
/Kj0R1HahbUgdJSGHg91yekIYfUGbTBuFRkC6VLAYttNmZ7iagxEOM3+vuNkCXDF/rFrKbYvScg7
|
48 |
+
1CcEJRCXL+eQbcAoQpnXTEPew/UhbVSfXcNY4cDk2VuwuNy0e982OsK1ZiIS1ocNAgMBAAGjEzAR
|
49 |
+
MA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAB/pMaVz7lcxG7oWDTSEwjsrZqG9J
|
50 |
+
GubaUeNgcGyEYRGhGshIPllDfU+VPaGLtwtimHp1it2ITk6eQNuozDJ0uW8NxuOzRAvZim+aKZuZ
|
51 |
+
GCg70eNAKJpaPNW15yAbi8qkq43pUdniTCxZqdq5snUb9kLy78fyGPmJvKP/iiMucEc=
|
52 |
+
-----END CERTIFICATE-----
|
53 |
+
|
54 |
+
Thawte Premium Server CA
|
55 |
+
========================
|
56 |
+
-----BEGIN CERTIFICATE-----
|
57 |
+
MIIDJzCCApCgAwIBAgIBATANBgkqhkiG9w0BAQQFADCBzjELMAkGA1UEBhMCWkExFTATBgNVBAgT
|
58 |
+
DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29uc3Vs
|
59 |
+
dGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UE
|
60 |
+
AxMYVGhhd3RlIFByZW1pdW0gU2VydmVyIENBMSgwJgYJKoZIhvcNAQkBFhlwcmVtaXVtLXNlcnZl
|
61 |
+
ckB0aGF3dGUuY29tMB4XDTk2MDgwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgc4xCzAJBgNVBAYT
|
62 |
+
AlpBMRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsGA1UEChMU
|
63 |
+
VGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRpb24gU2VydmljZXMgRGl2
|
64 |
+
aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQcmVtaXVtIFNlcnZlciBDQTEoMCYGCSqGSIb3DQEJARYZ
|
65 |
+
cHJlbWl1bS1zZXJ2ZXJAdGhhd3RlLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0jY2
|
66 |
+
aovXwlue2oFBYo847kkEVdbQ7xwblRZH7xhINTpS9CtqBo87L+pW46+GjZ4X9560ZXUCTe/LCaIh
|
67 |
+
Udib0GfQug2SBhRz1JPLlyoAnFxODLz6FVL88kRu2hFKbgifLy3j+ao6hnO2RlNYyIkFvYMRuHM/
|
68 |
+
qgeN9EJN50CdHDcCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQQFAAOBgQAm
|
69 |
+
SCwWwlj66BZ0DKqqX1Q/8tfJeGBeXm43YyJ3Nn6yF8Q0ufUIhfzJATj/Tb7yFkJD57taRvvBxhEf
|
70 |
+
8UqwKEbJw8RCfbz6q1lu1bdRiBHjpIUZa4JMpAwSremkrj/xw0llmozFyD4lt5SZu5IycQfwhl7t
|
71 |
+
UCemDaYj+bvLpgcUQg==
|
72 |
+
-----END CERTIFICATE-----
|
73 |
+
|
74 |
+
Equifax Secure CA
|
75 |
+
=================
|
76 |
+
-----BEGIN CERTIFICATE-----
|
77 |
+
MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJVUzEQMA4GA1UE
|
78 |
+
ChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5
|
79 |
+
MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoT
|
80 |
+
B0VxdWlmYXgxLTArBgNVBAsTJEVxdWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTCB
|
81 |
+
nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2RFGiYCh7+2gRvE4RiIcPR
|
82 |
+
fM6fBeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP/PvwDN1Dulsr4R+AcJkVV5MW
|
83 |
+
8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/FP3gx7kCAwEAAaOCAQkwggEFMHAG
|
84 |
+
A1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UE
|
85 |
+
CxMkRXF1aWZheCBTZWN1cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoG
|
86 |
+
A1UdEAQTMBGBDzIwMTgwODIyMTY0MTUxWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvS
|
87 |
+
spXXR9gjIBBPM5iQn9QwHQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQFMAMB
|
88 |
+
Af8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUAA4GBAFjOKer89961
|
89 |
+
zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y7qj/WsjTVbJmcVfewCHrPSqnI0kB
|
90 |
+
BIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee95
|
91 |
+
70+sB3c4
|
92 |
+
-----END CERTIFICATE-----
|
93 |
+
|
94 |
+
Digital Signature Trust Co. Global CA 1
|
95 |
+
=======================================
|
96 |
+
-----BEGIN CERTIFICATE-----
|
97 |
+
MIIDKTCCApKgAwIBAgIENnAVljANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJVUzEkMCIGA1UE
|
98 |
+
ChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMREwDwYDVQQLEwhEU1RDQSBFMTAeFw05ODEy
|
99 |
+
MTAxODEwMjNaFw0xODEyMTAxODQwMjNaMEYxCzAJBgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFs
|
100 |
+
IFNpZ25hdHVyZSBUcnVzdCBDby4xETAPBgNVBAsTCERTVENBIEUxMIGdMA0GCSqGSIb3DQEBAQUA
|
101 |
+
A4GLADCBhwKBgQCgbIGpzzQeJN3+hijM3oMv+V7UQtLodGBmE5gGHKlREmlvMVW5SXIACH7TpWJE
|
102 |
+
NySZj9mDSI+ZbZUTu0M7LklOiDfBu1h//uG9+LthzfNHwJmm8fOR6Hh8AMthyUQncWlVSn5JTe2i
|
103 |
+
o74CTADKAqjuAQIxZA9SLRN0dja1erQtcQIBA6OCASQwggEgMBEGCWCGSAGG+EIBAQQEAwIABzBo
|
104 |
+
BgNVHR8EYTBfMF2gW6BZpFcwVTELMAkGA1UEBhMCVVMxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0
|
105 |
+
dXJlIFRydXN0IENvLjERMA8GA1UECxMIRFNUQ0EgRTExDTALBgNVBAMTBENSTDEwKwYDVR0QBCQw
|
106 |
+
IoAPMTk5ODEyMTAxODEwMjNagQ8yMDE4MTIxMDE4MTAyM1owCwYDVR0PBAQDAgEGMB8GA1UdIwQY
|
107 |
+
MBaAFGp5fpFpRhgTCgJ3pVlbYJglDqL4MB0GA1UdDgQWBBRqeX6RaUYYEwoCd6VZW2CYJQ6i+DAM
|
108 |
+
BgNVHRMEBTADAQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqGSIb3DQEBBQUAA4GB
|
109 |
+
ACIS2Hod3IEGtgllsofIH160L+nEHvI8wbsEkBFKg05+k7lNQseSJqBcNJo4cvj9axY+IO6CizEq
|
110 |
+
kzaFI4iKPANo08kJD038bKTaKHKTDomAsH3+gG9lbRgzl4vCa4nuYD3Im+9/KzJic5PLPON74nZ4
|
111 |
+
RbyhkwS7hp86W0N6w4pl
|
112 |
+
-----END CERTIFICATE-----
|
113 |
+
|
114 |
+
Digital Signature Trust Co. Global CA 3
|
115 |
+
=======================================
|
116 |
+
-----BEGIN CERTIFICATE-----
|
117 |
+
MIIDKTCCApKgAwIBAgIENm7TzjANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJVUzEkMCIGA1UE
|
118 |
+
ChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMREwDwYDVQQLEwhEU1RDQSBFMjAeFw05ODEy
|
119 |
+
MDkxOTE3MjZaFw0xODEyMDkxOTQ3MjZaMEYxCzAJBgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFs
|
120 |
+
IFNpZ25hdHVyZSBUcnVzdCBDby4xETAPBgNVBAsTCERTVENBIEUyMIGdMA0GCSqGSIb3DQEBAQUA
|
121 |
+
A4GLADCBhwKBgQC/k48Xku8zExjrEH9OFr//Bo8qhbxe+SSmJIi2A7fBw18DW9Fvrn5C6mYjuGOD
|
122 |
+
VvsoLeE4i7TuqAHhzhy2iCoiRoX7n6dwqUcUP87eZfCocfdPJmyMvMa1795JJ/9IKn3oTQPMx7JS
|
123 |
+
xhcxEzu1TdvIxPbDDyQq2gyd55FbgM2UnQIBA6OCASQwggEgMBEGCWCGSAGG+EIBAQQEAwIABzBo
|
124 |
+
BgNVHR8EYTBfMF2gW6BZpFcwVTELMAkGA1UEBhMCVVMxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0
|
125 |
+
dXJlIFRydXN0IENvLjERMA8GA1UECxMIRFNUQ0EgRTIxDTALBgNVBAMTBENSTDEwKwYDVR0QBCQw
|
126 |
+
IoAPMTk5ODEyMDkxOTE3MjZagQ8yMDE4MTIwOTE5MTcyNlowCwYDVR0PBAQDAgEGMB8GA1UdIwQY
|
127 |
+
MBaAFB6CTShlgDzJQW6sNS5ay97u+DlbMB0GA1UdDgQWBBQegk0oZYA8yUFurDUuWsve7vg5WzAM
|
128 |
+
BgNVHRMEBTADAQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqGSIb3DQEBBQUAA4GB
|
129 |
+
AEeNg61i8tuwnkUiBbmi1gMOOHLnnvx75pO2mqWilMg0HZHRxdf0CiUPPXiBng+xZ8SQTGPdXqfi
|
130 |
+
up/1902lMXucKS1M/mQ+7LZT/uqb7YLbdHVLB3luHtgZg3Pe9T7Qtd7nS2h9Qy4qIOF+oHhEngj1
|
131 |
+
mPnHfxsb1gYgAlihw6ID
|
132 |
+
-----END CERTIFICATE-----
|
133 |
+
|
134 |
+
Verisign Class 3 Public Primary Certification Authority
|
135 |
+
=======================================================
|
136 |
+
-----BEGIN CERTIFICATE-----
|
137 |
+
MIICPDCCAaUCEHC65B0Q2Sk0tjjKewPMur8wDQYJKoZIhvcNAQECBQAwXzELMAkGA1UEBhMCVVMx
|
138 |
+
FzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmltYXJ5
|
139 |
+
IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVow
|
140 |
+
XzELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAz
|
141 |
+
IFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUA
|
142 |
+
A4GNADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhEBarsAx94
|
143 |
+
f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/isI19wKTakyYbnsZogy1Ol
|
144 |
+
hec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0GCSqGSIb3DQEBAgUAA4GBALtMEivPLCYA
|
145 |
+
TxQT3ab7/AoRhIzzKBxnki98tsX63/Dolbwdj2wsqFHMc9ikwFPwTtYmwHYBV4GSXiHx0bH/59Ah
|
146 |
+
WM1pF+NEHJwZRDmJXNycAA9WjQKZ7aKQRUzkuxCkPfAyAw7xzvjoyVGM5mKf5p/AfbdynMk2Omuf
|
147 |
+
Tqj/ZA1k
|
148 |
+
-----END CERTIFICATE-----
|
149 |
+
|
150 |
+
Verisign Class 1 Public Primary Certification Authority - G2
|
151 |
+
============================================================
|
152 |
+
-----BEGIN CERTIFICATE-----
|
153 |
+
MIIDAjCCAmsCEEzH6qqYPnHTkxD4PTqJkZIwDQYJKoZIhvcNAQEFBQAwgcExCzAJBgNVBAYTAlVT
|
154 |
+
MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMSBQdWJsaWMgUHJpbWFy
|
155 |
+
eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln
|
156 |
+
biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz
|
157 |
+
dCBOZXR3b3JrMB4XDTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVT
|
158 |
+
MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMSBQdWJsaWMgUHJpbWFy
|
159 |
+
eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln
|
160 |
+
biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz
|
161 |
+
dCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCq0Lq+Fi24g9TK0g+8djHKlNgd
|
162 |
+
k4xWArzZbxpvUjZudVYKVdPfQ4chEWWKfo+9Id5rMj8bhDSVBZ1BNeuS65bdqlk/AVNtmU/t5eIq
|
163 |
+
WpDBucSmFc/IReumXY6cPvBkJHalzasab7bYe1FhbqZ/h8jit+U03EGI6glAvnOSPWvndQIDAQAB
|
164 |
+
MA0GCSqGSIb3DQEBBQUAA4GBAKlPww3HZ74sy9mozS11534Vnjty637rXC0Jh9ZrbWB85a7FkCMM
|
165 |
+
XErQr7Fd88e2CtvgFZMN3QO8x3aKtd1Pw5sTdbgBwObJW2uluIncrKTdcu1OofdPvAbT6shkdHvC
|
166 |
+
lUGcZXNY8ZCaPGqxmMnEh7zPRW1F4m4iP/68DzFc6PLZ
|
167 |
+
-----END CERTIFICATE-----
|
168 |
+
|
169 |
+
Verisign Class 2 Public Primary Certification Authority - G2
|
170 |
+
============================================================
|
171 |
+
-----BEGIN CERTIFICATE-----
|
172 |
+
MIIDAzCCAmwCEQC5L2DMiJ+hekYJuFtwbIqvMA0GCSqGSIb3DQEBBQUAMIHBMQswCQYDVQQGEwJV
|
173 |
+
UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0NsYXNzIDIgUHVibGljIFByaW1h
|
174 |
+
cnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjE6MDgGA1UECxMxKGMpIDE5OTggVmVyaVNp
|
175 |
+
Z24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1
|
176 |
+
c3QgTmV0d29yazAeFw05ODA1MTgwMDAwMDBaFw0yODA4MDEyMzU5NTlaMIHBMQswCQYDVQQGEwJV
|
177 |
+
UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0NsYXNzIDIgUHVibGljIFByaW1h
|
178 |
+
cnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjE6MDgGA1UECxMxKGMpIDE5OTggVmVyaVNp
|
179 |
+
Z24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1
|
180 |
+
c3QgTmV0d29yazCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAp4gBIXQs5xoD8JjhlzwPIQjx
|
181 |
+
nNuX6Zr8wgQGE75fUsjMHiwSViy4AWkszJkfrbCWrnkE8hM5wXuYuggs6MKEEyyqaekJ9MepAqRC
|
182 |
+
wiNPStjwDqL7MWzJ5m+ZJwf15vRMeJ5t60aG+rmGyVTyssSv1EYcWskVMP8NbPUtDm3Of3cCAwEA
|
183 |
+
ATANBgkqhkiG9w0BAQUFAAOBgQByLvl/0fFx+8Se9sVeUYpAmLho+Jscg9jinb3/7aHmZuovCfTK
|
184 |
+
1+qlK5X2JGCGTUQug6XELaDTrnhpb3LabK4I8GOSN+a7xDAXrXfMSTWqz9iP0b63GJZHc2pUIjRk
|
185 |
+
LbYWm1lbtFFZOrMLFPQS32eg9K0yZF6xRnInjBJ7xUS0rg==
|
186 |
+
-----END CERTIFICATE-----
|
187 |
+
|
188 |
+
Verisign Class 3 Public Primary Certification Authority - G2
|
189 |
+
============================================================
|
190 |
+
-----BEGIN CERTIFICATE-----
|
191 |
+
MIIDAjCCAmsCEH3Z/gfPqB63EHln+6eJNMYwDQYJKoZIhvcNAQEFBQAwgcExCzAJBgNVBAYTAlVT
|
192 |
+
MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMgUHJpbWFy
|
193 |
+
eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln
|
194 |
+
biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz
|
195 |
+
dCBOZXR3b3JrMB4XDTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVT
|
196 |
+
MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMgUHJpbWFy
|
197 |
+
eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln
|
198 |
+
biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz
|
199 |
+
dCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDMXtERXVxp0KvTuWpMmR9ZmDCO
|
200 |
+
FoUgRm1HP9SFIIThbbP4pO0M8RcPO/mn+SXXwc+EY/J8Y8+iR/LGWzOOZEAEaMGAuWQcRXfH2G71
|
201 |
+
lSk8UOg013gfqLptQ5GVj0VXXn7F+8qkBOvqlzdUMG+7AUcyM83cV5tkaWH4mx0ciU9cZwIDAQAB
|
202 |
+
MA0GCSqGSIb3DQEBBQUAA4GBAFFNzb5cy5gZnBWyATl4Lk0PZ3BwmcYQWpSkU01UbSuvDV1Ai2TT
|
203 |
+
1+7eVmGSX6bEHRBhNtMsJzzoKQm5EWR0zLVznxxIqbxhAe7iF6YM40AIOw7n60RzKprxaZLvcRTD
|
204 |
+
Oaxxp5EJb+RxBrO6WVcmeQD2+A2iMzAo1KpYoJ2daZH9
|
205 |
+
-----END CERTIFICATE-----
|
206 |
+
|
207 |
+
GlobalSign Root CA
|
208 |
+
==================
|
209 |
+
-----BEGIN CERTIFICATE-----
|
210 |
+
MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkGA1UEBhMCQkUx
|
211 |
+
GTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jvb3QgQ0ExGzAZBgNVBAMTEkds
|
212 |
+
b2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAwMDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNV
|
213 |
+
BAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYD
|
214 |
+
VQQDExJHbG9iYWxTaWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDa
|
215 |
+
DuaZjc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavpxy0Sy6sc
|
216 |
+
THAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp1Wrjsok6Vjk4bwY8iGlb
|
217 |
+
Kk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdGsnUOhugZitVtbNV4FpWi6cgKOOvyJBNP
|
218 |
+
c1STE4U6G7weNLWLBYy5d4ux2x8gkasJU26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrX
|
219 |
+
gzT/LCrBbBlDSgeF59N89iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV
|
220 |
+
HRMBAf8EBTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0BAQUF
|
221 |
+
AAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOzyj1hTdNGCbM+w6Dj
|
222 |
+
Y1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE38NflNUVyRRBnMRddWQVDf9VMOyG
|
223 |
+
j/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymPAbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhH
|
224 |
+
hm4qxFYxldBniYUr+WymXUadDKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveC
|
225 |
+
X4XSQRjbgbMEHMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A==
|
226 |
+
-----END CERTIFICATE-----
|
227 |
+
|
228 |
+
GlobalSign Root CA - R2
|
229 |
+
=======================
|
230 |
+
-----BEGIN CERTIFICATE-----
|
231 |
+
MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4GA1UECxMXR2xv
|
232 |
+
YmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh
|
233 |
+
bFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT
|
234 |
+
aWduIFJvb3QgQ0EgLSBSMjETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln
|
235 |
+
bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6
|
236 |
+
ErPLv4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8eoLrvozp
|
237 |
+
s6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklqtTleiDTsvHgMCJiEbKjN
|
238 |
+
S7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzdC9XZzPnqJworc5HGnRusyMvo4KD0L5CL
|
239 |
+
TfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pazq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6C
|
240 |
+
ygPCm48CAwEAAaOBnDCBmTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E
|
241 |
+
FgQUm+IHV2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5nbG9i
|
242 |
+
YWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG3lm0mi3f3BmGLjAN
|
243 |
+
BgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4GsJ0/WwbgcQ3izDJr86iw8bmEbTUsp
|
244 |
+
9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu
|
245 |
+
01yiPqFbQfXf5WRDLenVOavSot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG7
|
246 |
+
9G+dwfCMNYxdAfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7
|
247 |
+
TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg==
|
248 |
+
-----END CERTIFICATE-----
|
249 |
+
|
250 |
+
ValiCert Class 1 VA
|
251 |
+
===================
|
252 |
+
-----BEGIN CERTIFICATE-----
|
253 |
+
MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRp
|
254 |
+
b24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
|
255 |
+
YXNzIDEgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZh
|
256 |
+
bGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNTIy
|
257 |
+
MjM0OFoXDTE5MDYyNTIyMjM0OFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0
|
258 |
+
d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDEg
|
259 |
+
UG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0
|
260 |
+
LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMIGfMA0GCSqGSIb3DQEBAQUA
|
261 |
+
A4GNADCBiQKBgQDYWYJ6ibiWuqYvaG9YLqdUHAZu9OqNSLwxlBfw8068srg1knaw0KWlAdcAAxIi
|
262 |
+
GQj4/xEjm84H9b9pGib+TunRf50sQB1ZaG6m+FiwnRqP0z/x3BkGgagO4DrdyFNFCQbmD3DD+kCm
|
263 |
+
DuJWBQ8YTfwggtFzVXSNdnKgHZ0dwN0/cQIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFBoPUn0LBwG
|
264 |
+
lN+VYH+Wexf+T3GtZMjdd9LvWVXoP+iOBSoh8gfStadS/pyxtuJbdxdA6nLWI8sogTLDAHkY7FkX
|
265 |
+
icnGah5xyf23dKUlRWnFSKsZ4UWKJWsZ7uW7EvV/96aNUcPwnXS3qT6gpf+2SQMT2iLM7XGCK5nP
|
266 |
+
Orf1LXLI
|
267 |
+
-----END CERTIFICATE-----
|
268 |
+
|
269 |
+
ValiCert Class 2 VA
|
270 |
+
===================
|
271 |
+
-----BEGIN CERTIFICATE-----
|
272 |
+
MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRp
|
273 |
+
b24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
|
274 |
+
YXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZh
|
275 |
+
bGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAw
|
276 |
+
MTk1NFoXDTE5MDYyNjAwMTk1NFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0
|
277 |
+
d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDIg
|
278 |
+
UG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0
|
279 |
+
LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMIGfMA0GCSqGSIb3DQEBAQUA
|
280 |
+
A4GNADCBiQKBgQDOOnHK5avIWZJV16vYdA757tn2VUdZZUcOBVXc65g2PFxTXdMwzzjsvUGJ7SVC
|
281 |
+
CSRrCl6zfN1SLUzm1NZ9WlmpZdRJEy0kTRxQb7XBhVQ7/nHk01xC+YDgkRoKWzk2Z/M/VXwbP7Rf
|
282 |
+
ZHM047QSv4dk+NoS/zcnwbNDu+97bi5p9wIDAQABMA0GCSqGSIb3DQEBBQUAA4GBADt/UG9vUJSZ
|
283 |
+
SWI4OB9L+KXIPqeCgfYrx+jFzug6EILLGACOTb2oWH+heQC1u+mNr0HZDzTuIYEZoDJJKPTEjlbV
|
284 |
+
UjP9UNV+mWwD5MlM/Mtsq2azSiGM5bUMMj4QssxsodyamEwCW/POuZ6lcg5Ktz885hZo+L7tdEy8
|
285 |
+
W9ViH0Pd
|
286 |
+
-----END CERTIFICATE-----
|
287 |
+
|
288 |
+
RSA Root Certificate 1
|
289 |
+
======================
|
290 |
+
-----BEGIN CERTIFICATE-----
|
291 |
+
MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRp
|
292 |
+
b24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
|
293 |
+
YXNzIDMgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZh
|
294 |
+
bGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAw
|
295 |
+
MjIzM1oXDTE5MDYyNjAwMjIzM1owgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0
|
296 |
+
d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDMg
|
297 |
+
UG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0
|
298 |
+
LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMIGfMA0GCSqGSIb3DQEBAQUA
|
299 |
+
A4GNADCBiQKBgQDjmFGWHOjVsQaBalfDcnWTq8+epvzzFlLWLU2fNUSoLgRNB0mKOCn1dzfnt6td
|
300 |
+
3zZxFJmP3MKS8edgkpfs2Ejcv8ECIMYkpChMMFp2bbFc893enhBxoYjHW5tBbcqwuI4V7q0zK89H
|
301 |
+
BFx1cQqYJJgpp0lZpd34t0NiYfPT4tBVPwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFa7AliEZwgs
|
302 |
+
3x/be0kz9dNnnfS0ChCzycUs4pJqcXgn8nCDQtM+z6lU9PHYkhaM0QTLS6vJn0WuPIqpsHEzXcjF
|
303 |
+
V9+vqDWzf4mH6eglkrh/hXqu1rweN1gqZ8mRzyqBPu3GOd/APhmcGcwTTYJBtYze4D1gCCAPRX5r
|
304 |
+
on+jjBXu
|
305 |
+
-----END CERTIFICATE-----
|
306 |
+
|
307 |
+
Verisign Class 1 Public Primary Certification Authority - G3
|
308 |
+
============================================================
|
309 |
+
-----BEGIN CERTIFICATE-----
|
310 |
+
MIIEGjCCAwICEQCLW3VWhFSFCwDPrzhIzrGkMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV
|
311 |
+
UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv
|
312 |
+
cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
|
313 |
+
IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDEgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh
|
314 |
+
dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw
|
315 |
+
CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy
|
316 |
+
dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv
|
317 |
+
cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDEgUHVibGljIFByaW1hcnkg
|
318 |
+
Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
|
319 |
+
ggEBAN2E1Lm0+afY8wR4nN493GwTFtl63SRRZsDHJlkNrAYIwpTRMx/wgzUfbhvI3qpuFU5UJ+/E
|
320 |
+
bRrsC+MO8ESlV8dAWB6jRx9x7GD2bZTIGDnt/kIYVt/kTEkQeE4BdjVjEjbdZrwBBDajVWjVojYJ
|
321 |
+
rKshJlQGrT/KFOCsyq0GHZXi+J3x4GD/wn91K0zM2v6HmSHquv4+VNfSWXjbPG7PoBMAGrgnoeS+
|
322 |
+
Z5bKoMWznN3JdZ7rMJpfo83ZrngZPyPpXNspva1VyBtUjGP26KbqxzcSXKMpHgLZ2x87tNcPVkeB
|
323 |
+
FQRKr4Mn0cVYiMHd9qqnoxjaaKptEVHhv2Vrn5Z20T0CAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA
|
324 |
+
q2aN17O6x5q25lXQBfGfMY1aqtmqRiYPce2lrVNWYgFHKkTp/j90CxObufRNG7LRX7K20ohcs5/N
|
325 |
+
y9Sn2WCVhDr4wTcdYcrnsMXlkdpUpqwxga6X3s0IrLjAl4B/bnKk52kTlWUfxJM8/XmPBNQ+T+r3
|
326 |
+
ns7NZ3xPZQL/kYVUc8f/NveGLezQXk//EZ9yBta4GvFMDSZl4kSAHsef493oCtrspSCAaWihT37h
|
327 |
+
a88HQfqDjrw43bAuEbFrskLMmrz5SCJ5ShkPshw+IHTZasO+8ih4E1Z5T21Q6huwtVexN2ZYI/Pc
|
328 |
+
D98Kh8TvhgXVOBRgmaNL3gaWcSzy27YfpO8/7g==
|
329 |
+
-----END CERTIFICATE-----
|
330 |
+
|
331 |
+
Verisign Class 2 Public Primary Certification Authority - G3
|
332 |
+
============================================================
|
333 |
+
-----BEGIN CERTIFICATE-----
|
334 |
+
MIIEGTCCAwECEGFwy0mMX5hFKeewptlQW3owDQYJKoZIhvcNAQEFBQAwgcoxCzAJBgNVBAYTAlVT
|
335 |
+
MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29y
|
336 |
+
azE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ug
|
337 |
+
b25seTFFMEMGA1UEAxM8VmVyaVNpZ24gQ2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0
|
338 |
+
aW9uIEF1dGhvcml0eSAtIEczMB4XDTk5MTAwMTAwMDAwMFoXDTM2MDcxNjIzNTk1OVowgcoxCzAJ
|
339 |
+
BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1
|
340 |
+
c3QgTmV0d29yazE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9y
|
341 |
+
aXplZCB1c2Ugb25seTFFMEMGA1UEAxM8VmVyaVNpZ24gQ2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBD
|
342 |
+
ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
|
343 |
+
AQEArwoNwtUs22e5LeWUJ92lvuCwTY+zYVY81nzD9M0+hsuiiOLh2KRpxbXiv8GmR1BeRjmL1Za6
|
344 |
+
tW8UvxDOJxOeBUebMXoT2B/Z0wI3i60sR/COgQanDTAM6/c8DyAd3HJG7qUCyFvDyVZpTMUYwZF7
|
345 |
+
C9UTAJu878NIPkZgIIUq1ZC2zYugzDLdt/1AVbJQHFauzI13TccgTacxdu9okoqQHgiBVrKtaaNS
|
346 |
+
0MscxCM9H5n+TOgWY47GCI72MfbS+uV23bUckqNJzc0BzWjNqWm6o+sdDZykIKbBoMXRRkwXbdKs
|
347 |
+
Zj+WjOCE1Db/IlnF+RFgqF8EffIa9iVCYQ/ESrg+iQIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQA0
|
348 |
+
JhU8wI1NQ0kdvekhktdmnLfexbjQ5F1fdiLAJvmEOjr5jLX77GDx6M4EsMjdpwOPMPOY36TmpDHf
|
349 |
+
0xwLRtxyID+u7gU8pDM/CzmscHhzS5kr3zDCVLCoO1Wh/hYozUK9dG6A2ydEp85EXdQbkJgNHkKU
|
350 |
+
sQAsBNB0owIFImNjzYO1+8FtYmtpdf1dcEG59b98377BMnMiIYtYgXsVkXq642RIsH/7NiXaldDx
|
351 |
+
JBQX3RiAa0YjOVT1jmIJBB2UkKab5iXiQkWquJCtvgiPqQtCGJTPcjnhsUPgKM+351psE2tJs//j
|
352 |
+
GHyJizNdrDPXp/naOlXJWBD5qu9ats9LS98q
|
353 |
+
-----END CERTIFICATE-----
|
354 |
+
|
355 |
+
Verisign Class 3 Public Primary Certification Authority - G3
|
356 |
+
============================================================
|
357 |
+
-----BEGIN CERTIFICATE-----
|
358 |
+
MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV
|
359 |
+
UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv
|
360 |
+
cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
|
361 |
+
IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh
|
362 |
+
dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw
|
363 |
+
CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy
|
364 |
+
dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv
|
365 |
+
cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkg
|
366 |
+
Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
|
367 |
+
ggEBAMu6nFL8eB8aHm8bN3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1
|
368 |
+
EUGO+i2tKmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGukxUc
|
369 |
+
cLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBmCC+Vk7+qRy+oRpfw
|
370 |
+
EuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJXwzw3sJ2zq/3avL6QaaiMxTJ5Xpj
|
371 |
+
055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWuimi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA
|
372 |
+
ERSWwauSCPc/L8my/uRan2Te2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5f
|
373 |
+
j267Cz3qWhMeDGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC
|
374 |
+
/Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565pF4ErWjfJXir0
|
375 |
+
xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGtTxzhT5yvDwyd93gN2PQ1VoDa
|
376 |
+
t20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ==
|
377 |
+
-----END CERTIFICATE-----
|
378 |
+
|
379 |
+
Verisign Class 4 Public Primary Certification Authority - G3
|
380 |
+
============================================================
|
381 |
+
-----BEGIN CERTIFICATE-----
|
382 |
+
MIIEGjCCAwICEQDsoKeLbnVqAc/EfMwvlF7XMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV
|
383 |
+
UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv
|
384 |
+
cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
|
385 |
+
IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh
|
386 |
+
dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw
|
387 |
+
CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy
|
388 |
+
dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv
|
389 |
+
cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDQgUHVibGljIFByaW1hcnkg
|
390 |
+
Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
|
391 |
+
ggEBAK3LpRFpxlmr8Y+1GQ9Wzsy1HyDkniYlS+BzZYlZ3tCD5PUPtbut8XzoIfzk6AzufEUiGXaS
|
392 |
+
tBO3IFsJ+mGuqPKljYXCKtbeZjbSmwL0qJJgfJxptI8kHtCGUvYynEFYHiK9zUVilQhu0GbdU6LM
|
393 |
+
8BDcVHOLBKFGMzNcF0C5nk3T875Vg+ixiY5afJqWIpA7iCXy0lOIAgwLePLmNxdLMEYH5IBtptiW
|
394 |
+
Lugs+BGzOA1mppvqySNb247i8xOOGlktqgLw7KSHZtzBP/XYufTsgsbSPZUd5cBPhMnZo0QoBmrX
|
395 |
+
Razwa2rvTl/4EYIeOGM0ZlDUPpNz+jDDZq3/ky2X7wMCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA
|
396 |
+
j/ola09b5KROJ1WrIhVZPMq1CtRK26vdoV9TxaBXOcLORyu+OshWv8LZJxA6sQU8wHcxuzrTBXtt
|
397 |
+
mhwwjIDLk5Mqg6sFUYICABFna/OIYUdfA5PVWw3g8dShMjWFsjrbsIKr0csKvE+MW8VLADsfKoKm
|
398 |
+
fjaF3H48ZwC15DtS4KjrXRX5xm3wrR0OhbepmnMUWluPQSjA1egtTaRezarZ7c7c2NU8Qh0XwRJd
|
399 |
+
RTjDOPP8hS6DRkiy1yBfkjaP53kPmF6Z6PDQpLv1U70qzlmwr25/bLvSHgCwIe34QWKCudiyxLtG
|
400 |
+
UPMxxY8BqHTr9Xgn2uf3ZkPznoM+IKrDNWCRzg==
|
401 |
+
-----END CERTIFICATE-----
|
402 |
+
|
403 |
+
Entrust.net Secure Server CA
|
404 |
+
============================
|
405 |
+
-----BEGIN CERTIFICATE-----
|
406 |
+
MIIE2DCCBEGgAwIBAgIEN0rSQzANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMCVVMxFDASBgNV
|
407 |
+
BAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5uZXQvQ1BTIGluY29ycC4gYnkg
|
408 |
+
cmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRl
|
409 |
+
ZDE6MDgGA1UEAxMxRW50cnVzdC5uZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhv
|
410 |
+
cml0eTAeFw05OTA1MjUxNjA5NDBaFw0xOTA1MjUxNjM5NDBaMIHDMQswCQYDVQQGEwJVUzEUMBIG
|
411 |
+
A1UEChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5jb3JwLiBi
|
412 |
+
eSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBFbnRydXN0Lm5ldCBMaW1p
|
413 |
+
dGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRpb24gQXV0
|
414 |
+
aG9yaXR5MIGdMA0GCSqGSIb3DQEBAQUAA4GLADCBhwKBgQDNKIM0VBuJ8w+vN5Ex/68xYMmo6LIQ
|
415 |
+
aO2f55M28Qpku0f1BBc/I0dNxScZgSYMVHINiC3ZH5oSn7yzcdOAGT9HZnuMNSjSuQrfJNqc1lB5
|
416 |
+
gXpa0zf3wkrYKZImZNHkmGw6AIr1NJtl+O3jEP/9uElY3KDegjlrgbEWGWG5VLbmQwIBA6OCAdcw
|
417 |
+
ggHTMBEGCWCGSAGG+EIBAQQEAwIABzCCARkGA1UdHwSCARAwggEMMIHeoIHboIHYpIHVMIHSMQsw
|
418 |
+
CQYDVQQGEwJVUzEUMBIGA1UEChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5l
|
419 |
+
dC9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBF
|
420 |
+
bnRydXN0Lm5ldCBMaW1pdGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENl
|
421 |
+
cnRpZmljYXRpb24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCmgJ6AlhiNodHRwOi8vd3d3LmVu
|
422 |
+
dHJ1c3QubmV0L0NSTC9uZXQxLmNybDArBgNVHRAEJDAigA8xOTk5MDUyNTE2MDk0MFqBDzIwMTkw
|
423 |
+
NTI1MTYwOTQwWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAU8BdiE1U9s/8KAGv7UISX8+1i0Bow
|
424 |
+
HQYDVR0OBBYEFPAXYhNVPbP/CgBr+1CEl/PtYtAaMAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EA
|
425 |
+
BAwwChsEVjQuMAMCBJAwDQYJKoZIhvcNAQEFBQADgYEAkNwwAvpkdMKnCqV8IY00F6j7Rw7/JXyN
|
426 |
+
Ewr75Ji174z4xRAN95K+8cPV1ZVqBLssziY2ZcgxxufuP+NXdYR6Ee9GTxj005i7qIcyunL2POI9
|
427 |
+
n9cd2cNgQ4xYDiKWL2KjLB+6rQXvqzJ4h6BUcxm1XAX5Uj5tLUUL9wqT6u0G+bI=
|
428 |
+
-----END CERTIFICATE-----
|
429 |
+
|
430 |
+
Entrust.net Premium 2048 Secure Server CA
|
431 |
+
=========================================
|
432 |
+
-----BEGIN CERTIFICATE-----
|
433 |
+
MIIEXDCCA0SgAwIBAgIEOGO5ZjANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChMLRW50cnVzdC5u
|
434 |
+
ZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBpbmNvcnAuIGJ5IHJlZi4gKGxp
|
435 |
+
bWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNV
|
436 |
+
BAMTKkVudHJ1c3QubmV0IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQx
|
437 |
+
NzUwNTFaFw0xOTEyMjQxODIwNTFaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3
|
438 |
+
d3d3LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTEl
|
439 |
+
MCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5u
|
440 |
+
ZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgpMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
|
441 |
+
MIIBCgKCAQEArU1LqRKGsuqjIAcVFmQqK0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOL
|
442 |
+
Gp18EzoOH1u3Hs/lJBQesYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSr
|
443 |
+
hRSGlVuXMlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVTXTzW
|
444 |
+
nLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/HoZdenoVve8AjhUi
|
445 |
+
VBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH4QIDAQABo3QwcjARBglghkgBhvhC
|
446 |
+
AQEEBAMCAAcwHwYDVR0jBBgwFoAUVeSB0RGAvtiJuQijMfmhJAkWuXAwHQYDVR0OBBYEFFXkgdER
|
447 |
+
gL7YibkIozH5oSQJFrlwMB0GCSqGSIb2fQdBAAQQMA4bCFY1LjA6NC4wAwIEkDANBgkqhkiG9w0B
|
448 |
+
AQUFAAOCAQEAWUesIYSKF8mciVMeuoCFGsY8Tj6xnLZ8xpJdGGQC49MGCBFhfGPjK50xA3B20qMo
|
449 |
+
oPS7mmNz7W3lKtvtFKkrxjYR0CvrB4ul2p5cGZ1WEvVUKcgF7bISKo30Axv/55IQh7A6tcOdBTcS
|
450 |
+
o8f0FbnVpDkWm1M6I5HxqIKiaohowXkCIryqptau37AUX7iH0N18f3v/rxzP5tsHrV7bhZ3QKw0z
|
451 |
+
2wTR5klAEyt2+z7pnIkPFc4YsIV4IU9rTw76NmfNB/L/CNDi3tm/Kq+4h4YhPATKt5Rof8886ZjX
|
452 |
+
OP/swNlQ8C5LWK5Gb9Auw2DaclVyvUxFnmG6v4SBkgPR0ml8xQ==
|
453 |
+
-----END CERTIFICATE-----
|
454 |
+
|
455 |
+
Baltimore CyberTrust Root
|
456 |
+
=========================
|
457 |
+
-----BEGIN CERTIFICATE-----
|
458 |
+
MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJRTESMBAGA1UE
|
459 |
+
ChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYDVQQDExlCYWx0aW1vcmUgQ3li
|
460 |
+
ZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoXDTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMC
|
461 |
+
SUUxEjAQBgNVBAoTCUJhbHRpbW9yZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFs
|
462 |
+
dGltb3JlIEN5YmVyVHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKME
|
463 |
+
uyKrmD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjrIZ3AQSsB
|
464 |
+
UnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeKmpYcqWe4PwzV9/lSEy/C
|
465 |
+
G9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSuXmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9
|
466 |
+
XbIGevOF6uvUA65ehD5f/xXtabz5OTZydc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjpr
|
467 |
+
l3RjM71oGDHweI12v/yejl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoI
|
468 |
+
VDaGezq1BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEB
|
469 |
+
BQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT929hkTI7gQCvlYpNRh
|
470 |
+
cL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3WgxjkzSswF07r51XgdIGn9w/xZchMB5
|
471 |
+
hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsa
|
472 |
+
Y71k5h+3zvDyny67G7fyUIhzksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9H
|
473 |
+
RCwBXbsdtTLSR9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp
|
474 |
+
-----END CERTIFICATE-----
|
475 |
+
|
476 |
+
Equifax Secure Global eBusiness CA
|
477 |
+
==================================
|
478 |
+
-----BEGIN CERTIFICATE-----
|
479 |
+
MIICkDCCAfmgAwIBAgIBATANBgkqhkiG9w0BAQQFADBaMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT
|
480 |
+
RXF1aWZheCBTZWN1cmUgSW5jLjEtMCsGA1UEAxMkRXF1aWZheCBTZWN1cmUgR2xvYmFsIGVCdXNp
|
481 |
+
bmVzcyBDQS0xMB4XDTk5MDYyMTA0MDAwMFoXDTIwMDYyMTA0MDAwMFowWjELMAkGA1UEBhMCVVMx
|
482 |
+
HDAaBgNVBAoTE0VxdWlmYXggU2VjdXJlIEluYy4xLTArBgNVBAMTJEVxdWlmYXggU2VjdXJlIEds
|
483 |
+
b2JhbCBlQnVzaW5lc3MgQ0EtMTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAuucXkAJlsTRV
|
484 |
+
PEnCUdXfp9E3j9HngXNBUmCbnaEXJnitx7HoJpQytd4zjTov2/KaelpzmKNc6fuKcxtc58O/gGzN
|
485 |
+
qfTWK8D3+ZmqY6KxRwIP1ORROhI8bIpaVIRw28HFkM9yRcuoWcDNM50/o5brhTMhHD4ePmBudpxn
|
486 |
+
hcXIw2ECAwEAAaNmMGQwEQYJYIZIAYb4QgEBBAQDAgAHMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0j
|
487 |
+
BBgwFoAUvqigdHJQa0S3ySPY+6j/s1draGwwHQYDVR0OBBYEFL6ooHRyUGtEt8kj2Puo/7NXa2hs
|
488 |
+
MA0GCSqGSIb3DQEBBAUAA4GBADDiAVGqx+pf2rnQZQ8w1j7aDRRJbpGTJxQx78T3LUX47Me/okEN
|
489 |
+
I7SS+RkAZ70Br83gcfxaz2TE4JaY0KNA4gGK7ycH8WUBikQtBmV1UsCGECAhX2xrD2yuCRyv8qIY
|
490 |
+
NMR1pHMc8Y3c7635s3a0kr/clRAevsvIO1qEYBlWlKlV
|
491 |
+
-----END CERTIFICATE-----
|
492 |
+
|
493 |
+
Equifax Secure eBusiness CA 1
|
494 |
+
=============================
|
495 |
+
-----BEGIN CERTIFICATE-----
|
496 |
+
MIICgjCCAeugAwIBAgIBBDANBgkqhkiG9w0BAQQFADBTMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT
|
497 |
+
RXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1c2luZXNzIENB
|
498 |
+
LTEwHhcNOTkwNjIxMDQwMDAwWhcNMjAwNjIxMDQwMDAwWjBTMQswCQYDVQQGEwJVUzEcMBoGA1UE
|
499 |
+
ChMTRXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1c2luZXNz
|
500 |
+
IENBLTEwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAM4vGbwXt3fek6lfWg0XTzQaDJj0ItlZ
|
501 |
+
1MRoRvC0NcWFAyDGr0WlIVFFQesWWDYyb+JQYmT5/VGcqiTZ9J2DKocKIdMSODRsjQBuWqDZQu4a
|
502 |
+
IZX5UkxVWsUPOE9G+m34LjXWHXzr4vCwdYDIqROsvojvOm6rXyo4YgKwEnv+j6YDAgMBAAGjZjBk
|
503 |
+
MBEGCWCGSAGG+EIBAQQEAwIABzAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFEp4MlIR21kW
|
504 |
+
Nl7fwRQ2QGpHfEyhMB0GA1UdDgQWBBRKeDJSEdtZFjZe38EUNkBqR3xMoTANBgkqhkiG9w0BAQQF
|
505 |
+
AAOBgQB1W6ibAxHm6VZMzfmpTMANmvPMZWnmJXbMWbfWVMMdzZmsGd20hdXgPfxiIKeES1hl8eL5
|
506 |
+
lSE/9dR+WB5Hh1Q+WKG1tfgq73HnvMP2sUlG4tega+VWeponmHxGYhTnyfxuAxJ5gDgdSIKN/Bf+
|
507 |
+
KpYrtWKmpj29f5JZzVoqgrI3eQ==
|
508 |
+
-----END CERTIFICATE-----
|
509 |
+
|
510 |
+
Equifax Secure eBusiness CA 2
|
511 |
+
=============================
|
512 |
+
-----BEGIN CERTIFICATE-----
|
513 |
+
MIIDIDCCAomgAwIBAgIEN3DPtTANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJVUzEXMBUGA1UE
|
514 |
+
ChMORXF1aWZheCBTZWN1cmUxJjAkBgNVBAsTHUVxdWlmYXggU2VjdXJlIGVCdXNpbmVzcyBDQS0y
|
515 |
+
MB4XDTk5MDYyMzEyMTQ0NVoXDTE5MDYyMzEyMTQ0NVowTjELMAkGA1UEBhMCVVMxFzAVBgNVBAoT
|
516 |
+
DkVxdWlmYXggU2VjdXJlMSYwJAYDVQQLEx1FcXVpZmF4IFNlY3VyZSBlQnVzaW5lc3MgQ0EtMjCB
|
517 |
+
nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA5Dk5kx5SBhsoNviyoynF7Y6yEb3+6+e0dMKP/wXn
|
518 |
+
2Z0GvxLIPw7y1tEkshHe0XMJitSxLJgJDR5QRrKDpkWNYmi7hRsgcDKqQM2mll/EcTc/BPO3QSQ5
|
519 |
+
BxoeLmFYoBIL5aXfxavqN3HMHMg3OrmXUqesxWoklE6ce8/AatbfIb0CAwEAAaOCAQkwggEFMHAG
|
520 |
+
A1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEXMBUGA1UEChMORXF1aWZheCBTZWN1cmUx
|
521 |
+
JjAkBgNVBAsTHUVxdWlmYXggU2VjdXJlIGVCdXNpbmVzcyBDQS0yMQ0wCwYDVQQDEwRDUkwxMBoG
|
522 |
+
A1UdEAQTMBGBDzIwMTkwNjIzMTIxNDQ1WjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUUJ4L6q9e
|
523 |
+
uSBIplBqy/3YIHqngnYwHQYDVR0OBBYEFFCeC+qvXrkgSKZQasv92CB6p4J2MAwGA1UdEwQFMAMB
|
524 |
+
Af8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUAA4GBAAyGgq3oThr1
|
525 |
+
jokn4jVYPSm0B482UJW/bsGe68SQsoWou7dC4A8HOd/7npCy0cE+U58DRLB+S/Rv5Hwf5+Kx5Lia
|
526 |
+
78O9zt4LMjTZ3ijtM2vE1Nc9ElirfQkty3D1E4qUoSek1nDFbZS1yX2doNLGCEnZZpum0/QL3MUm
|
527 |
+
V+GRMOrN
|
528 |
+
-----END CERTIFICATE-----
|
529 |
+
|
530 |
+
AddTrust Low-Value Services Root
|
531 |
+
================================
|
532 |
+
-----BEGIN CERTIFICATE-----
|
533 |
+
MIIEGDCCAwCgAwIBAgIBATANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
|
534 |
+
QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYDVQQDExhBZGRU
|
535 |
+
cnVzdCBDbGFzcyAxIENBIFJvb3QwHhcNMDAwNTMwMTAzODMxWhcNMjAwNTMwMTAzODMxWjBlMQsw
|
536 |
+
CQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBO
|
537 |
+
ZXR3b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwggEiMA0GCSqGSIb3DQEB
|
538 |
+
AQUAA4IBDwAwggEKAoIBAQCWltQhSWDia+hBBwzexODcEyPNwTXH+9ZOEQpnXvUGW2ulCDtbKRY6
|
539 |
+
54eyNAbFvAWlA3yCyykQruGIgb3WntP+LVbBFc7jJp0VLhD7Bo8wBN6ntGO0/7Gcrjyvd7ZWxbWr
|
540 |
+
oulpOj0OM3kyP3CCkplhbY0wCI9xP6ZIVxn4JdxLZlyldI+Yrsj5wAYi56xz36Uu+1LcsRVlIPo1
|
541 |
+
Zmne3yzxbrww2ywkEtvrNTVokMsAsJchPXQhI2U0K7t4WaPW4XY5mqRJjox0r26kmqPZm9I4XJui
|
542 |
+
GMx1I4S+6+JNM3GOGvDC+Mcdoq0Dlyz4zyXG9rgkMbFjXZJ/Y/AlyVMuH79NAgMBAAGjgdIwgc8w
|
543 |
+
HQYDVR0OBBYEFJWxtPCUtr3H2tERCSG+wa9J/RB7MAsGA1UdDwQEAwIBBjAPBgNVHRMBAf8EBTAD
|
544 |
+
AQH/MIGPBgNVHSMEgYcwgYSAFJWxtPCUtr3H2tERCSG+wa9J/RB7oWmkZzBlMQswCQYDVQQGEwJT
|
545 |
+
RTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEw
|
546 |
+
HwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBACxt
|
547 |
+
ZBsfzQ3duQH6lmM0MkhHma6X7f1yFqZzR1r0693p9db7RcwpiURdv0Y5PejuvE1Uhh4dbOMXJ0Ph
|
548 |
+
iVYrqW9yTkkz43J8KiOavD7/KCrto/8cI7pDVwlnTUtiBi34/2ydYB7YHEt9tTEv2dB8Xfjea4MY
|
549 |
+
eDdXL+gzB2ffHsdrKpV2ro9Xo/D0UrSpUwjP4E/TelOL/bscVjby/rK25Xa71SJlpz/+0WatC7xr
|
550 |
+
mYbvP33zGDLKe8bjq2RGlfgmadlVg3sslgf/WSxEo8bl6ancoWOAWiFeIc9TVPC6b4nbqKqVz4vj
|
551 |
+
ccweGyBECMB6tkD9xOQ14R0WHNC8K47Wcdk=
|
552 |
+
-----END CERTIFICATE-----
|
553 |
+
|
554 |
+
AddTrust External Root
|
555 |
+
======================
|
556 |
+
-----BEGIN CERTIFICATE-----
|
557 |
+
MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
|
558 |
+
QWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFsIFRUUCBOZXR3b3JrMSIwIAYD
|
559 |
+
VQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEw
|
560 |
+
NDgzOFowbzELMAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRU
|
561 |
+
cnVzdCBFeHRlcm5hbCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0Eg
|
562 |
+
Um9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvtH7xsD821
|
563 |
+
+iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9uMq/NzgtHj6RQa1wVsfw
|
564 |
+
Tz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzXmk6vBbOmcZSccbNQYArHE504B4YCqOmo
|
565 |
+
aSYYkKtMsE8jqzpPhNjfzp/haW+710LXa0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy
|
566 |
+
2xSoRcRdKn23tNbE7qzNE0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv7
|
567 |
+
7+ldU9U0WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYDVR0P
|
568 |
+
BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0Jvf6xCZU7wO94CTL
|
569 |
+
VBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEmMCQGA1UECxMdQWRk
|
570 |
+
VHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsxIjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENB
|
571 |
+
IFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZl
|
572 |
+
j7DYd7usQWxHYINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5
|
573 |
+
6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvCNr4TDea9Y355
|
574 |
+
e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEXc4g/VhsxOBi0cQ+azcgOno4u
|
575 |
+
G+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5amnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ=
|
576 |
+
-----END CERTIFICATE-----
|
577 |
+
|
578 |
+
AddTrust Public Services Root
|
579 |
+
=============================
|
580 |
+
-----BEGIN CERTIFICATE-----
|
581 |
+
MIIEFTCCAv2gAwIBAgIBATANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
|
582 |
+
QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSAwHgYDVQQDExdBZGRU
|
583 |
+
cnVzdCBQdWJsaWMgQ0EgUm9vdDAeFw0wMDA1MzAxMDQxNTBaFw0yMDA1MzAxMDQxNTBaMGQxCzAJ
|
584 |
+
BgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5l
|
585 |
+
dHdvcmsxIDAeBgNVBAMTF0FkZFRydXN0IFB1YmxpYyBDQSBSb290MIIBIjANBgkqhkiG9w0BAQEF
|
586 |
+
AAOCAQ8AMIIBCgKCAQEA6Rowj4OIFMEg2Dybjxt+A3S72mnTRqX4jsIMEZBRpS9mVEBV6tsfSlbu
|
587 |
+
nyNu9DnLoblv8n75XYcmYZ4c+OLspoH4IcUkzBEMP9smcnrHAZcHF/nXGCwwfQ56HmIexkvA/X1i
|
588 |
+
d9NEHif2P0tEs7c42TkfYNVRknMDtABp4/MUTu7R3AnPdzRGULD4EfL+OHn3Bzn+UZKXC1sIXzSG
|
589 |
+
Aa2Il+tmzV7R/9x98oTaunet3IAIx6eH1lWfl2royBFkuucZKT8Rs3iQhCBSWxHveNCD9tVIkNAw
|
590 |
+
HM+A+WD+eeSI8t0A65RF62WUaUC6wNW0uLp9BBGo6zEFlpROWCGOn9Bg/QIDAQABo4HRMIHOMB0G
|
591 |
+
A1UdDgQWBBSBPjfYkrAfd59ctKtzquf2NGAv+jALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB
|
592 |
+
/zCBjgYDVR0jBIGGMIGDgBSBPjfYkrAfd59ctKtzquf2NGAv+qFopGYwZDELMAkGA1UEBhMCU0Ux
|
593 |
+
FDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRUcnVzdCBUVFAgTmV0d29yazEgMB4G
|
594 |
+
A1UEAxMXQWRkVHJ1c3QgUHVibGljIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBAAP3FUr4
|
595 |
+
JNojVhaTdt02KLmuG7jD8WS6IBh4lSknVwW8fCr0uVFV2ocC3g8WFzH4qnkuCRO7r7IgGRLlk/lL
|
596 |
+
+YPoRNWyQSW/iHVv/xD8SlTQX/D67zZzfRs2RcYhbbQVuE7PnFylPVoAjgbjPGsye/Kf8Lb93/Ao
|
597 |
+
GEjwxrzQvzSAlsJKsW2Ox5BF3i9nrEUEo3rcVZLJR2bYGozH7ZxOmuASu7VqTITh4SINhwBk/ox9
|
598 |
+
Yjllpu9CtoAlEmEBqCQTcAARJl/6NVDFSMwGR+gn2HCNX2TmoUQmXiLsks3/QppEIW1cxeMiHV9H
|
599 |
+
EufOX1362KqxMy3ZdvJOOjMMK7MtkAY=
|
600 |
+
-----END CERTIFICATE-----
|
601 |
+
|
602 |
+
AddTrust Qualified Certificates Root
|
603 |
+
====================================
|
604 |
+
-----BEGIN CERTIFICATE-----
|
605 |
+
MIIEHjCCAwagAwIBAgIBATANBgkqhkiG9w0BAQUFADBnMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
|
606 |
+
QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSMwIQYDVQQDExpBZGRU
|
607 |
+
cnVzdCBRdWFsaWZpZWQgQ0EgUm9vdDAeFw0wMDA1MzAxMDQ0NTBaFw0yMDA1MzAxMDQ0NTBaMGcx
|
608 |
+
CzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQ
|
609 |
+
IE5ldHdvcmsxIzAhBgNVBAMTGkFkZFRydXN0IFF1YWxpZmllZCBDQSBSb290MIIBIjANBgkqhkiG
|
610 |
+
9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5B6a/twJWoekn0e+EV+vhDTbYjx5eLfpMLXsDBwqxBb/4Oxx
|
611 |
+
64r1EW7tTw2R0hIYLUkVAcKkIhPHEWT/IhKauY5cLwjPcWqzZwFZ8V1G87B4pfYOQnrjfxvM0PC3
|
612 |
+
KP0q6p6zsLkEqv32x7SxuCqg+1jxGaBvcCV+PmlKfw8i2O+tCBGaKZnhqkRFmhJePp1tUvznoD1o
|
613 |
+
L/BLcHwTOK28FSXx1s6rosAx1i+f4P8UWfyEk9mHfExUE+uf0S0R+Bg6Ot4l2ffTQO2kBhLEO+GR
|
614 |
+
wVY18BTcZTYJbqukB8c10cIDMzZbdSZtQvESa0NvS3GU+jQd7RNuyoB/mC9suWXY6QIDAQABo4HU
|
615 |
+
MIHRMB0GA1UdDgQWBBQ5lYtii1zJ1IC6WA+XPxUIQ8yYpzALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/
|
616 |
+
BAUwAwEB/zCBkQYDVR0jBIGJMIGGgBQ5lYtii1zJ1IC6WA+XPxUIQ8yYp6FrpGkwZzELMAkGA1UE
|
617 |
+
BhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRUcnVzdCBUVFAgTmV0d29y
|
618 |
+
azEjMCEGA1UEAxMaQWRkVHJ1c3QgUXVhbGlmaWVkIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQAD
|
619 |
+
ggEBABmrder4i2VhlRO6aQTvhsoToMeqT2QbPxj2qC0sVY8FtzDqQmodwCVRLae/DLPt7wh/bDxG
|
620 |
+
GuoYQ992zPlmhpwsaPXpF/gxsxjE1kh9I0xowX67ARRvxdlu3rsEQmr49lx95dr6h+sNNVJn0J6X
|
621 |
+
dgWTP5XHAeZpVTh/EGGZyeNfpso+gmNIquIISD6q8rKFYqa0p9m9N5xotS1WfbC3P6CxB9bpT9ze
|
622 |
+
RXEwMn8bLgn5v1Kh7sKAPgZcLlVAwRv1cEWw3F369nJad9Jjzc9YiQBCYz95OdBEsIJuQRno3eDB
|
623 |
+
iFrRHnGTHyQwdOUeqN48Jzd/g66ed8/wMLH/S5noxqE=
|
624 |
+
-----END CERTIFICATE-----
|
625 |
+
|
626 |
+
Entrust Root Certification Authority
|
627 |
+
====================================
|
628 |
+
-----BEGIN CERTIFICATE-----
|
629 |
+
MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMCVVMxFjAUBgNV
|
630 |
+
BAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0Lm5ldC9DUFMgaXMgaW5jb3Jw
|
631 |
+
b3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMWKGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsG
|
632 |
+
A1UEAxMkRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0
|
633 |
+
MloXDTI2MTEyNzIwNTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMu
|
634 |
+
MTkwNwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSByZWZlcmVu
|
635 |
+
Y2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNVBAMTJEVudHJ1c3QgUm9v
|
636 |
+
dCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
|
637 |
+
ALaVtkNC+sZtKm9I35RMOVcF7sN5EUFoNu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYsz
|
638 |
+
A9u3g3s+IIRe7bJWKKf44LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOww
|
639 |
+
Cj0Yzfv9KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGIrb68
|
640 |
+
j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi94DkZfs0Nw4pgHBN
|
641 |
+
rziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOBsDCBrTAOBgNVHQ8BAf8EBAMCAQYw
|
642 |
+
DwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAigA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1
|
643 |
+
MzQyWjAfBgNVHSMEGDAWgBRokORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DH
|
644 |
+
hmak8fdLQ/uEvW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA
|
645 |
+
A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9tO1KzKtvn1ISM
|
646 |
+
Y/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6ZuaAGAT/3B+XxFNSRuzFVJ7yVTa
|
647 |
+
v52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTS
|
648 |
+
W3iDVuycNsMm4hH2Z0kdkquM++v/eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0
|
649 |
+
tHuu2guQOHXvgR1m0vdXcDazv/wor3ElhVsT/h5/WrQ8
|
650 |
+
-----END CERTIFICATE-----
|
651 |
+
|
652 |
+
RSA Security 2048 v3
|
653 |
+
====================
|
654 |
+
-----BEGIN CERTIFICATE-----
|
655 |
+
MIIDYTCCAkmgAwIBAgIQCgEBAQAAAnwAAAAKAAAAAjANBgkqhkiG9w0BAQUFADA6MRkwFwYDVQQK
|
656 |
+
ExBSU0EgU2VjdXJpdHkgSW5jMR0wGwYDVQQLExRSU0EgU2VjdXJpdHkgMjA0OCBWMzAeFw0wMTAy
|
657 |
+
MjIyMDM5MjNaFw0yNjAyMjIyMDM5MjNaMDoxGTAXBgNVBAoTEFJTQSBTZWN1cml0eSBJbmMxHTAb
|
658 |
+
BgNVBAsTFFJTQSBTZWN1cml0eSAyMDQ4IFYzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
|
659 |
+
AQEAt49VcdKA3XtpeafwGFAyPGJn9gqVB93mG/Oe2dJBVGutn3y+Gc37RqtBaB4Y6lXIL5F4iSj7
|
660 |
+
Jylg/9+PjDvJSZu1pJTOAeo+tWN7fyb9Gd3AIb2E0S1PRsNO3Ng3OTsor8udGuorryGlwSMiuLgb
|
661 |
+
WhOHV4PR8CDn6E8jQrAApX2J6elhc5SYcSa8LWrg903w8bYqODGBDSnhAMFRD0xS+ARaqn1y07iH
|
662 |
+
KrtjEAMqs6FPDVpeRrc9DvV07Jmf+T0kgYim3WBU6JU2PcYJk5qjEoAAVZkZR73QpXzDuvsf9/UP
|
663 |
+
+Ky5tfQ3mBMY3oVbtwyCO4dvlTlYMNpuAWgXIszACwIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/
|
664 |
+
MA4GA1UdDwEB/wQEAwIBBjAfBgNVHSMEGDAWgBQHw1EwpKrpRa41JPr/JCwz0LGdjDAdBgNVHQ4E
|
665 |
+
FgQUB8NRMKSq6UWuNST6/yQsM9CxnYwwDQYJKoZIhvcNAQEFBQADggEBAF8+hnZuuDU8TjYcHnmY
|
666 |
+
v/3VEhF5Ug7uMYm83X/50cYVIeiKAVQNOvtUudZj1LGqlk2iQk3UUx+LEN5/Zb5gEydxiKRz44Rj
|
667 |
+
0aRV4VCT5hsOedBnvEbIvz8XDZXmxpBp3ue0L96VfdASPz0+f00/FGj1EVDVwfSQpQgdMWD/YIwj
|
668 |
+
VAqv/qFuxdF6Kmh4zx6CCiC0H63lhbJqaHVOrSU3lIW+vaHU6rcMSzyd6BIA8F+sDeGscGNz9395
|
669 |
+
nzIlQnQFgCi/vcEkllgVsRch6YlL2weIZ/QVrXA+L02FO8K32/6YaCOJ4XQP3vTFhGMpG8zLB8kA
|
670 |
+
pKnXwiJPZ9d37CAFYd4=
|
671 |
+
-----END CERTIFICATE-----
|
672 |
+
|
673 |
+
GeoTrust Global CA
|
674 |
+
==================
|
675 |
+
-----BEGIN CERTIFICATE-----
|
676 |
+
MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVTMRYwFAYDVQQK
|
677 |
+
Ew1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9iYWwgQ0EwHhcNMDIwNTIxMDQw
|
678 |
+
MDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5j
|
679 |
+
LjEbMBkGA1UEAxMSR2VvVHJ1c3QgR2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
|
680 |
+
CgKCAQEA2swYYzD99BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjo
|
681 |
+
BbdqfnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDviS2Aelet
|
682 |
+
8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU1XupGc1V3sjs0l44U+Vc
|
683 |
+
T4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+bw8HHa8sHo9gOeL6NlMTOdReJivbPagU
|
684 |
+
vTLrGAMoUgRx5aszPeE4uwc2hGKceeoWMPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTAD
|
685 |
+
AQH/MB0GA1UdDgQWBBTAephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVk
|
686 |
+
DBF9qn1luMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKInZ57Q
|
687 |
+
zxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfStQWVYrmm3ok9Nns4
|
688 |
+
d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcFPseKUgzbFbS9bZvlxrFUaKnjaZC2
|
689 |
+
mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Unhw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6p
|
690 |
+
XE0zX5IJL4hmXXeXxx12E6nV5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvm
|
691 |
+
Mw==
|
692 |
+
-----END CERTIFICATE-----
|
693 |
+
|
694 |
+
GeoTrust Global CA 2
|
695 |
+
====================
|
696 |
+
-----BEGIN CERTIFICATE-----
|
697 |
+
MIIDZjCCAk6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBEMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN
|
698 |
+
R2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFsIENBIDIwHhcNMDQwMzA0MDUw
|
699 |
+
MDAwWhcNMTkwMzA0MDUwMDAwWjBEMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5j
|
700 |
+
LjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFsIENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
|
701 |
+
ggEKAoIBAQDvPE1APRDfO1MA4Wf+lGAVPoWI8YkNkMgoI5kF6CsgncbzYEbYwbLVjDHZ3CB5JIG/
|
702 |
+
NTL8Y2nbsSpr7iFY8gjpeMtvy/wWUsiRxP89c96xPqfCfWbB9X5SJBri1WeR0IIQ13hLTytCOb1k
|
703 |
+
LUCgsBDTOEhGiKEMuzozKmKY+wCdE1l/bztyqu6mD4b5BWHqZ38MN5aL5mkWRxHCJ1kDs6ZgwiFA
|
704 |
+
Vvqgx306E+PsV8ez1q6diYD3Aecs9pYrEw15LNnA5IZ7S4wMcoKK+xfNAGw6EzywhIdLFnopsk/b
|
705 |
+
HdQL82Y3vdj2V7teJHq4PIu5+pIaGoSe2HSPqht/XvT+RSIhAgMBAAGjYzBhMA8GA1UdEwEB/wQF
|
706 |
+
MAMBAf8wHQYDVR0OBBYEFHE4NvICMVNHK266ZUapEBVYIAUJMB8GA1UdIwQYMBaAFHE4NvICMVNH
|
707 |
+
K266ZUapEBVYIAUJMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQUFAAOCAQEAA/e1K6tdEPx7
|
708 |
+
srJerJsOflN4WT5CBP51o62sgU7XAotexC3IUnbHLB/8gTKY0UvGkpMzNTEv/NgdRN3ggX+d6Yvh
|
709 |
+
ZJFiCzkIjKx0nVnZellSlxG5FntvRdOW2TF9AjYPnDtuzywNA0ZF66D0f0hExghAzN4bcLUprbqL
|
710 |
+
OzRldRtxIR0sFAqwlpW41uryZfspuk/qkZN0abby/+Ea0AzRdoXLiiW9l14sbxWZJue2Kf8i7MkC
|
711 |
+
x1YAzUm5s2x7UwQa4qjJqhIFI8LO57sEAszAR6LkxCkvW0VXiVHuPOtSCP8HNR6fNWpHSlaY0VqF
|
712 |
+
H4z1Ir+rzoPz4iIprn2DQKi6bA==
|
713 |
+
-----END CERTIFICATE-----
|
714 |
+
|
715 |
+
GeoTrust Universal CA
|
716 |
+
=====================
|
717 |
+
-----BEGIN CERTIFICATE-----
|
718 |
+
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
|
742 |
+
P/rmMuGNG2+k5o7Y+SlIis5z/iw=
|
743 |
+
-----END CERTIFICATE-----
|
744 |
+
|
745 |
+
GeoTrust Universal CA 2
|
746 |
+
=======================
|
747 |
+
-----BEGIN CERTIFICATE-----
|
748 |
+
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
|
772 |
+
X36vWkzaH6byHCx+rgIW0lbQL1dTR+iS
|
773 |
+
-----END CERTIFICATE-----
|
774 |
+
|
775 |
+
UTN-USER First-Network Applications
|
776 |
+
===================================
|
777 |
+
-----BEGIN CERTIFICATE-----
|
778 |
+
MIIEZDCCA0ygAwIBAgIQRL4Mi1AAJLQR0zYwS8AzdzANBgkqhkiG9w0BAQUFADCBozELMAkGA1UE
|
779 |
+
BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl
|
780 |
+
IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xKzAp
|
781 |
+
BgNVBAMTIlVUTi1VU0VSRmlyc3QtTmV0d29yayBBcHBsaWNhdGlvbnMwHhcNOTkwNzA5MTg0ODM5
|
782 |
+
WhcNMTkwNzA5MTg1NzQ5WjCBozELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5T
|
783 |
+
YWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho
|
784 |
+
dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xKzApBgNVBAMTIlVUTi1VU0VSRmlyc3QtTmV0d29yayBB
|
785 |
+
cHBsaWNhdGlvbnMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCz+5Gh5DZVhawGNFug
|
786 |
+
mliy+LUPBXeDrjKxdpJo7CNKyXY/45y2N3kDuatpjQclthln5LAbGHNhSuh+zdMvZOOmfAz6F4Cj
|
787 |
+
DUeJT1FxL+78P/m4FoCHiZMlIJpDgmkkdihZNaEdwH+DBmQWICzTSaSFtMBhf1EI+GgVkYDLpdXu
|
788 |
+
Ozr0hAReYFmnjDRy7rh4xdE7EkpvfmUnuaRVxblvQ6TFHSyZwFKkeEwVs0CYCGtDxgGwenv1axwi
|
789 |
+
P8vv/6jQOkt2FZ7S0cYu49tXGzKiuG/ohqY/cKvlcJKrRB5AUPuco2LkbG6gyN7igEL66S/ozjIE
|
790 |
+
j3yNtxyjNTwV3Z7DrpelAgMBAAGjgZEwgY4wCwYDVR0PBAQDAgHGMA8GA1UdEwEB/wQFMAMBAf8w
|
791 |
+
HQYDVR0OBBYEFPqGydvguul49Uuo1hXf8NPhahQ8ME8GA1UdHwRIMEYwRKBCoECGPmh0dHA6Ly9j
|
792 |
+
cmwudXNlcnRydXN0LmNvbS9VVE4tVVNFUkZpcnN0LU5ldHdvcmtBcHBsaWNhdGlvbnMuY3JsMA0G
|
793 |
+
CSqGSIb3DQEBBQUAA4IBAQCk8yXM0dSRgyLQzDKrm5ZONJFUICU0YV8qAhXhi6r/fWRRzwr/vH3Y
|
794 |
+
IWp4yy9Rb/hCHTO967V7lMPDqaAt39EpHx3+jz+7qEUqf9FuVSTiuwL7MT++6LzsQCv4AdRWOOTK
|
795 |
+
RIK1YSAhZ2X28AvnNPilwpyjXEAfhZOVBt5P1CeptqX8Fs1zMT+4ZSfP1FMa8Kxun08FDAOBp4Qp
|
796 |
+
xFq9ZFdyrTvPNximmMatBrTcCKME1SmklpoSZ0qMYEWd8SOasACcaLWYUNPvji6SZbFIPiG+FTAq
|
797 |
+
DbUMo2s/rn9X9R+WfN9v3YIwLGUbQErNaLly7HF27FSOH4UMAWr6pjisH8SE
|
798 |
+
-----END CERTIFICATE-----
|
799 |
+
|
800 |
+
America Online Root Certification Authority 1
|
801 |
+
=============================================
|
802 |
+
-----BEGIN CERTIFICATE-----
|
803 |
+
MIIDpDCCAoygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT
|
804 |
+
QW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBPbmxpbmUgUm9vdCBDZXJ0aWZp
|
805 |
+
Y2F0aW9uIEF1dGhvcml0eSAxMB4XDTAyMDUyODA2MDAwMFoXDTM3MTExOTIwNDMwMFowYzELMAkG
|
806 |
+
A1UEBhMCVVMxHDAaBgNVBAoTE0FtZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2Eg
|
807 |
+
T25saW5lIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMTCCASIwDQYJKoZIhvcNAQEBBQAD
|
808 |
+
ggEPADCCAQoCggEBAKgv6KRpBgNHw+kqmP8ZonCaxlCyfqXfaE0bfA+2l2h9LaaLl+lkhsmj76CG
|
809 |
+
v2BlnEtUiMJIxUo5vxTjWVXlGbR0yLQFOVwWpeKVBeASrlmLojNoWBym1BW32J/X3HGrfpq/m44z
|
810 |
+
DyL9Hy7nBzbvYjnF3cu6JRQj3gzGPTzOggjmZj7aUTsWOqMFf6Dch9Wc/HKpoH145LcxVR5lu9Rh
|
811 |
+
sCFg7RAycsWSJR74kEoYeEfffjA3PlAb2xzTa5qGUwew76wGePiEmf4hjUyAtgyC9mZweRrTT6PP
|
812 |
+
8c9GsEsPPt2IYriMqQkoO3rHl+Ee5fSfwMCuJKDIodkP1nsmgmkyPacCAwEAAaNjMGEwDwYDVR0T
|
813 |
+
AQH/BAUwAwEB/zAdBgNVHQ4EFgQUAK3Zo/Z59m50qX8zPYEX10zPM94wHwYDVR0jBBgwFoAUAK3Z
|
814 |
+
o/Z59m50qX8zPYEX10zPM94wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBBQUAA4IBAQB8itEf
|
815 |
+
GDeC4Liwo+1WlchiYZwFos3CYiZhzRAW18y0ZTTQEYqtqKkFZu90821fnZmv9ov761KyBZiibyrF
|
816 |
+
VL0lvV+uyIbqRizBs73B6UlwGBaXCBOMIOAbLjpHyx7kADCVW/RFo8AasAFOq73AI25jP4BKxQft
|
817 |
+
3OJvx8Fi8eNy1gTIdGcL+oiroQHIb/AUr9KZzVGTfu0uOMe9zkZQPXLjeSWdm4grECDdpbgyn43g
|
818 |
+
Kd8hdIaC2y+CMMbHNYaz+ZZfRtsMRf3zUMNvxsNIrUam4SdHCh0Om7bCd39j8uB9Gr784N/Xx6ds
|
819 |
+
sPmuujz9dLQR6FgNgLzTqIA6me11zEZ7
|
820 |
+
-----END CERTIFICATE-----
|
821 |
+
|
822 |
+
America Online Root Certification Authority 2
|
823 |
+
=============================================
|
824 |
+
-----BEGIN CERTIFICATE-----
|
825 |
+
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
|
850 |
+
cX/9XhmgD0uRuMRUvAawRY8mkaKO/qk=
|
851 |
+
-----END CERTIFICATE-----
|
852 |
+
|
853 |
+
Visa eCommerce Root
|
854 |
+
===================
|
855 |
+
-----BEGIN CERTIFICATE-----
|
856 |
+
MIIDojCCAoqgAwIBAgIQE4Y1TR0/BvLB+WUF1ZAcYjANBgkqhkiG9w0BAQUFADBrMQswCQYDVQQG
|
857 |
+
EwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2Ug
|
858 |
+
QXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNvbW1lcmNlIFJvb3QwHhcNMDIwNjI2MDIxODM2
|
859 |
+
WhcNMjIwNjI0MDAxNjEyWjBrMQswCQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMm
|
860 |
+
VmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNv
|
861 |
+
bW1lcmNlIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvV95WHm6h2mCxlCfL
|
862 |
+
F9sHP4CFT8icttD0b0/Pmdjh28JIXDqsOTPHH2qLJj0rNfVIsZHBAk4ElpF7sDPwsRROEW+1QK8b
|
863 |
+
RaVK7362rPKgH1g/EkZgPI2h4H3PVz4zHvtH8aoVlwdVZqW1LS7YgFmypw23RuwhY/81q6UCzyr0
|
864 |
+
TP579ZRdhE2o8mCP2w4lPJ9zcc+U30rq299yOIzzlr3xF7zSujtFWsan9sYXiwGd/BmoKoMWuDpI
|
865 |
+
/k4+oKsGGelT84ATB+0tvz8KPFUgOSwsAGl0lUq8ILKpeeUYiZGo3BxN77t+Nwtd/jmliFKMAGzs
|
866 |
+
GHxBvfaLdXe6YJ2E5/4tAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEG
|
867 |
+
MB0GA1UdDgQWBBQVOIMPPyw/cDMezUb+B4wg4NfDtzANBgkqhkiG9w0BAQUFAAOCAQEAX/FBfXxc
|
868 |
+
CLkr4NWSR/pnXKUTwwMhmytMiUbPWU3J/qVAtmPN3XEolWcRzCSs00Rsca4BIGsDoo8Ytyk6feUW
|
869 |
+
YFN4PMCvFYP3j1IzJL1kk5fui/fbGKhtcbP3LBfQdCVp9/5rPJS+TUtBjE7ic9DjkCJzQ83z7+pz
|
870 |
+
zkWKsKZJ/0x9nXGIxHYdkFsd7v3M9+79YKWxehZx0RbQfBI8bGmX265fOZpwLwU8GUYEmSA20GBu
|
871 |
+
YQa7FkKMcPcw++DbZqMAAb3mLNqRX6BGi01qnD093QVG/na/oAo85ADmJ7f/hC3euiInlhBx6yLt
|
872 |
+
398znM/jra6O1I7mT1GvFpLgXPYHDw==
|
873 |
+
-----END CERTIFICATE-----
|
874 |
+
|
875 |
+
Certum Root CA
|
876 |
+
==============
|
877 |
+
-----BEGIN CERTIFICATE-----
|
878 |
+
MIIDDDCCAfSgAwIBAgIDAQAgMA0GCSqGSIb3DQEBBQUAMD4xCzAJBgNVBAYTAlBMMRswGQYDVQQK
|
879 |
+
ExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBDQTAeFw0wMjA2MTExMDQ2Mzla
|
880 |
+
Fw0yNzA2MTExMDQ2MzlaMD4xCzAJBgNVBAYTAlBMMRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8u
|
881 |
+
by4xEjAQBgNVBAMTCUNlcnR1bSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM6x
|
882 |
+
wS7TT3zNJc4YPk/EjG+AanPIW1H4m9LcuwBcsaD8dQPugfCI7iNS6eYVM42sLQnFdvkrOYCJ5JdL
|
883 |
+
kKWoePhzQ3ukYbDYWMzhbGZ+nPMJXlVjhNWo7/OxLjBos8Q82KxujZlakE403Daaj4GIULdtlkIJ
|
884 |
+
89eVgw1BS7Bqa/j8D35in2fE7SZfECYPCE/wpFcozo+47UX2bu4lXapuOb7kky/ZR6By6/qmW6/K
|
885 |
+
Uz/iDsaWVhFu9+lmqSbYf5VT7QqFiLpPKaVCjF62/IUgAKpoC6EahQGcxEZjgoi2IrHu/qpGWX7P
|
886 |
+
NSzVttpd90gzFFS269lvzs2I1qsb2pY7HVkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkq
|
887 |
+
hkiG9w0BAQUFAAOCAQEAuI3O7+cUus/usESSbLQ5PqKEbq24IXfS1HeCh+YgQYHu4vgRt2PRFze+
|
888 |
+
GXYkHAQaTOs9qmdvLdTN/mUxcMUbpgIKumB7bVjCmkn+YzILa+M6wKyrO7Do0wlRjBCDxjTgxSvg
|
889 |
+
GrZgFCdsMneMvLJymM/NzD+5yCRCFNZX/OYmQ6kd5YCQzgNUKD73P9P4Te1qCjqTE5s7FCMTY5w/
|
890 |
+
0YcneeVMUeMBrYVdGjux1XMQpNPyvG5k9VpWkKjHDkx0Dy5xO/fIR/RpbxXyEV6DHpx8Uq79AtoS
|
891 |
+
qFlnGNu8cN2bsWntgM6JQEhqDjXKKWYVIZQs6GAqm4VKQPNriiTsBhYscw==
|
892 |
+
-----END CERTIFICATE-----
|
893 |
+
|
894 |
+
Comodo AAA Services root
|
895 |
+
========================
|
896 |
+
-----BEGIN CERTIFICATE-----
|
897 |
+
MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS
|
898 |
+
R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg
|
899 |
+
TGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAw
|
900 |
+
MFoXDTI4MTIzMTIzNTk1OVowezELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hl
|
901 |
+
c3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNV
|
902 |
+
BAMMGEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
|
903 |
+
ggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQuaBtDFcCLNSS1UY8y2bmhG
|
904 |
+
C1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe3M/vg4aijJRPn2jymJBGhCfHdr/jzDUs
|
905 |
+
i14HZGWCwEiwqJH5YZ92IFCokcdmtet4YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszW
|
906 |
+
Y19zjNoFmag4qMsXeDZRrOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjH
|
907 |
+
Ypy+g8cmez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQUoBEK
|
908 |
+
Iz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wewYDVR0f
|
909 |
+
BHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20vQUFBQ2VydGlmaWNhdGVTZXJ2aWNl
|
910 |
+
cy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29tb2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2Vz
|
911 |
+
LmNybDANBgkqhkiG9w0BAQUFAAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm
|
912 |
+
7l3sAg9g1o1QGE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz
|
913 |
+
Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2G9w84FoVxp7Z
|
914 |
+
8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsil2D4kF501KKaU73yqWjgom7C
|
915 |
+
12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg==
|
916 |
+
-----END CERTIFICATE-----
|
917 |
+
|
918 |
+
Comodo Secure Services root
|
919 |
+
===========================
|
920 |
+
-----BEGIN CERTIFICATE-----
|
921 |
+
MIIEPzCCAyegAwIBAgIBATANBgkqhkiG9w0BAQUFADB+MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS
|
922 |
+
R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg
|
923 |
+
TGltaXRlZDEkMCIGA1UEAwwbU2VjdXJlIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAw
|
924 |
+
MDAwMFoXDTI4MTIzMTIzNTk1OVowfjELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFu
|
925 |
+
Y2hlc3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxJDAi
|
926 |
+
BgNVBAMMG1NlY3VyZSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEP
|
927 |
+
ADCCAQoCggEBAMBxM4KK0HDrc4eCQNUd5MvJDkKQ+d40uaG6EfQlhfPMcm3ye5drswfxdySRXyWP
|
928 |
+
9nQ95IDC+DwN879A6vfIUtFyb+/Iq0G4bi4XKpVpDM3SHpR7LZQdqnXXs5jLrLxkU0C8j6ysNstc
|
929 |
+
rbvd4JQX7NFc0L/vpZXJkMWwrPsbQ996CF23uPJAGysnnlDOXmWCiIxe004MeuoIkbY2qitC++rC
|
930 |
+
oznl2yY4rYsK7hljxxwk3wN42ubqwUcaCwtGCd0C/N7Lh1/XMGNooa7cMqG6vv5Eq2i2pRcV/b3V
|
931 |
+
p6ea5EQz6YiO/O1R65NxTq0B50SOqy3LqP4BSUjwwN3HaNiS/j0CAwEAAaOBxzCBxDAdBgNVHQ4E
|
932 |
+
FgQUPNiTiMLAggnMAZkGkyDpnnAJY08wDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8w
|
933 |
+
gYEGA1UdHwR6MHgwO6A5oDeGNWh0dHA6Ly9jcmwuY29tb2RvY2EuY29tL1NlY3VyZUNlcnRpZmlj
|
934 |
+
YXRlU2VydmljZXMuY3JsMDmgN6A1hjNodHRwOi8vY3JsLmNvbW9kby5uZXQvU2VjdXJlQ2VydGlm
|
935 |
+
aWNhdGVTZXJ2aWNlcy5jcmwwDQYJKoZIhvcNAQEFBQADggEBAIcBbSMdflsXfcFhMs+P5/OKlFlm
|
936 |
+
4J4oqF7Tt/Q05qo5spcWxYJvMqTpjOev/e/C6LlLqqP05tqNZSH7uoDrJiiFGv45jN5bBAS0VPmj
|
937 |
+
Z55B+glSzAVIqMk/IQQezkhr/IXownuvf7fM+F86/TXGDe+X3EyrEeFryzHRbPtIgKvcnDe4IRRL
|
938 |
+
DXE97IMzbtFuMhbsmMcWi1mmNKsFVy2T96oTy9IT4rcuO81rUBcJaD61JlfutuC23bkpgHl9j6Pw
|
939 |
+
pCikFcSF9CfUa7/lXORlAnZUtOM3ZiTTGWHIUhDlizeauan5Hb/qmZJhlv8BzaFfDbxxvA6sCx1H
|
940 |
+
RR3B7Hzs/Sk=
|
941 |
+
-----END CERTIFICATE-----
|
942 |
+
|
943 |
+
Comodo Trusted Services root
|
944 |
+
============================
|
945 |
+
-----BEGIN CERTIFICATE-----
|
946 |
+
MIIEQzCCAyugAwIBAgIBATANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS
|
947 |
+
R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg
|
948 |
+
TGltaXRlZDElMCMGA1UEAwwcVHJ1c3RlZCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczAeFw0wNDAxMDEw
|
949 |
+
MDAwMDBaFw0yODEyMzEyMzU5NTlaMH8xCzAJBgNVBAYTAkdCMRswGQYDVQQIDBJHcmVhdGVyIE1h
|
950 |
+
bmNoZXN0ZXIxEDAOBgNVBAcMB1NhbGZvcmQxGjAYBgNVBAoMEUNvbW9kbyBDQSBMaW1pdGVkMSUw
|
951 |
+
IwYDVQQDDBxUcnVzdGVkIENlcnRpZmljYXRlIFNlcnZpY2VzMIIBIjANBgkqhkiG9w0BAQEFAAOC
|
952 |
+
AQ8AMIIBCgKCAQEA33FvNlhTWvI2VFeAxHQIIO0Yfyod5jWaHiWsnOWWfnJSoBVC21ndZHoa0Lh7
|
953 |
+
3TkVvFVIxO06AOoxEbrycXQaZ7jPM8yoMa+j49d/vzMtTGo87IvDktJTdyR0nAducPy9C1t2ul/y
|
954 |
+
/9c3S0pgePfw+spwtOpZqqPOSC+pw7ILfhdyFgymBwwbOM/JYrc/oJOlh0Hyt3BAd9i+FHzjqMB6
|
955 |
+
juljatEPmsbS9Is6FARW1O24zG71++IsWL1/T2sr92AkWCTOJu80kTrV44HQsvAEAtdbtz6SrGsS
|
956 |
+
ivnkBbA7kUlcsutT6vifR4buv5XAwAaf0lteERv0xwQ1KdJVXOTt6wIDAQABo4HJMIHGMB0GA1Ud
|
957 |
+
DgQWBBTFe1i97doladL3WRaoszLAeydb9DAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB
|
958 |
+
/zCBgwYDVR0fBHwwejA8oDqgOIY2aHR0cDovL2NybC5jb21vZG9jYS5jb20vVHJ1c3RlZENlcnRp
|
959 |
+
ZmljYXRlU2VydmljZXMuY3JsMDqgOKA2hjRodHRwOi8vY3JsLmNvbW9kby5uZXQvVHJ1c3RlZENl
|
960 |
+
cnRpZmljYXRlU2VydmljZXMuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQDIk4E7ibSvuIQSTI3S8Ntw
|
961 |
+
uleGFTQQuS9/HrCoiWChisJ3DFBKmwCL2Iv0QeLQg4pKHBQGsKNoBXAxMKdTmw7pSqBYaWcOrp32
|
962 |
+
pSxBvzwGa+RZzG0Q8ZZvH9/0BAKkn0U+yNj6NkZEUD+Cl5EfKNsYEYwq5GWDVxISjBc/lDb+XbDA
|
963 |
+
BHcTuPQV1T84zJQ6VdCsmPW6AF/ghhmBeC8owH7TzEIK9a5QoNE+xqFx7D+gIIxmOom0jtTYsU0l
|
964 |
+
R+4viMi14QVFwL4Ucd56/Y57fU0IlqUSc/AtyjcndBInTMu2l+nZrghtWjlA3QVHdWpaIbOjGM9O
|
965 |
+
9y5Xt5hwXsjEeLBi
|
966 |
+
-----END CERTIFICATE-----
|
967 |
+
|
968 |
+
QuoVadis Root CA
|
969 |
+
================
|
970 |
+
-----BEGIN CERTIFICATE-----
|
971 |
+
MIIF0DCCBLigAwIBAgIEOrZQizANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJCTTEZMBcGA1UE
|
972 |
+
ChMQUXVvVmFkaXMgTGltaXRlZDElMCMGA1UECxMcUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
|
973 |
+
eTEuMCwGA1UEAxMlUXVvVmFkaXMgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMTAz
|
974 |
+
MTkxODMzMzNaFw0yMTAzMTcxODMzMzNaMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRp
|
975 |
+
cyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQD
|
976 |
+
EyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEF
|
977 |
+
AAOCAQ8AMIIBCgKCAQEAv2G1lVO6V/z68mcLOhrfEYBklbTRvM16z/Ypli4kVEAkOPcahdxYTMuk
|
978 |
+
J0KX0J+DisPkBgNbAKVRHnAEdOLB1Dqr1607BxgFjv2DrOpm2RgbaIr1VxqYuvXtdj182d6UajtL
|
979 |
+
F8HVj71lODqV0D1VNk7feVcxKh7YWWVJWCCYfqtffp/p1k3sg3Spx2zY7ilKhSoGFPlU5tPaZQeL
|
980 |
+
YzcS19Dsw3sgQUSj7cugF+FxZc4dZjH3dgEZyH0DWLaVSR2mEiboxgx24ONmy+pdpibu5cxfvWen
|
981 |
+
AScOospUxbF6lR1xHkopigPcakXBpBlebzbNw6Kwt/5cOOJSvPhEQ+aQuwIDAQABo4ICUjCCAk4w
|
982 |
+
PQYIKwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwczovL29jc3AucXVvdmFkaXNvZmZzaG9y
|
983 |
+
ZS5jb20wDwYDVR0TAQH/BAUwAwEB/zCCARoGA1UdIASCAREwggENMIIBCQYJKwYBBAG+WAABMIH7
|
984 |
+
MIHUBggrBgEFBQcCAjCBxxqBxFJlbGlhbmNlIG9uIHRoZSBRdW9WYWRpcyBSb290IENlcnRpZmlj
|
985 |
+
YXRlIGJ5IGFueSBwYXJ0eSBhc3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJs
|
986 |
+
ZSBzdGFuZGFyZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRpb24gcHJh
|
987 |
+
Y3RpY2VzLCBhbmQgdGhlIFF1b1ZhZGlzIENlcnRpZmljYXRlIFBvbGljeS4wIgYIKwYBBQUHAgEW
|
988 |
+
Fmh0dHA6Ly93d3cucXVvdmFkaXMuYm0wHQYDVR0OBBYEFItLbe3TKbkGGew5Oanwl4Rqy+/fMIGu
|
989 |
+
BgNVHSMEgaYwgaOAFItLbe3TKbkGGew5Oanwl4Rqy+/foYGEpIGBMH8xCzAJBgNVBAYTAkJNMRkw
|
990 |
+
FwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0
|
991 |
+
aG9yaXR5MS4wLAYDVQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggQ6
|
992 |
+
tlCLMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAitQUtf70mpKnGdSkfnIYj9lo
|
993 |
+
fFIk3WdvOXrEql494liwTXCYhGHoG+NpGA7O+0dQoE7/8CQfvbLO9Sf87C9TqnN7Az10buYWnuul
|
994 |
+
LsS/VidQK2K6vkscPFVcQR0kvoIgR13VRH56FmjffU1RcHhXHTMe/QKZnAzNCgVPx7uOpHX6Sm2x
|
995 |
+
gI4JVrmcGmD+XcHXetwReNDWXcG31a0ymQM6isxUJTkxgXsTIlG6Rmyhu576BGxJJnSP0nPrzDCi
|
996 |
+
5upZIof4l/UO/erMkqQWxFIY6iHOsfHmhIHluqmGKPJDWl0Snawe2ajlCmqnf6CHKc/yiU3U7MXi
|
997 |
+
5nrQNiOKSnQ2+Q==
|
998 |
+
-----END CERTIFICATE-----
|
999 |
+
|
1000 |
+
QuoVadis Root CA 2
|
1001 |
+
==================
|
1002 |
+
-----BEGIN CERTIFICATE-----
|
1003 |
+
MIIFtzCCA5+gAwIBAgICBQkwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoT
|
1004 |
+
EFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJvb3QgQ0EgMjAeFw0wNjExMjQx
|
1005 |
+
ODI3MDBaFw0zMTExMjQxODIzMzNaMEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM
|
1006 |
+
aW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4IC
|
1007 |
+
DwAwggIKAoICAQCaGMpLlA0ALa8DKYrwD4HIrkwZhR0In6spRIXzL4GtMh6QRr+jhiYaHv5+HBg6
|
1008 |
+
XJxgFyo6dIMzMH1hVBHL7avg5tKifvVrbxi3Cgst/ek+7wrGsxDp3MJGF/hd/aTa/55JWpzmM+Yk
|
1009 |
+
lvc/ulsrHHo1wtZn/qtmUIttKGAr79dgw8eTvI02kfN/+NsRE8Scd3bBrrcCaoF6qUWD4gXmuVbB
|
1010 |
+
lDePSHFjIuwXZQeVikvfj8ZaCuWw419eaxGrDPmF60Tp+ARz8un+XJiM9XOva7R+zdRcAitMOeGy
|
1011 |
+
lZUtQofX1bOQQ7dsE/He3fbE+Ik/0XX1ksOR1YqI0JDs3G3eicJlcZaLDQP9nL9bFqyS2+r+eXyt
|
1012 |
+
66/3FsvbzSUr5R/7mp/iUcw6UwxI5g69ybR2BlLmEROFcmMDBOAENisgGQLodKcftslWZvB1Jdxn
|
1013 |
+
wQ5hYIizPtGo/KPaHbDRsSNU30R2be1B2MGyIrZTHN81Hdyhdyox5C315eXbyOD/5YDXC2Og/zOh
|
1014 |
+
D7osFRXql7PSorW+8oyWHhqPHWykYTe5hnMz15eWniN9gqRMgeKh0bpnX5UHoycR7hYQe7xFSkyy
|
1015 |
+
BNKr79X9DFHOUGoIMfmR2gyPZFwDwzqLID9ujWc9Otb+fVuIyV77zGHcizN300QyNQliBJIWENie
|
1016 |
+
J0f7OyHj+OsdWwIDAQABo4GwMIGtMA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1Ud
|
1017 |
+
DgQWBBQahGK8SEwzJQTU7tD2A8QZRtGUazBuBgNVHSMEZzBlgBQahGK8SEwzJQTU7tD2A8QZRtGU
|
1018 |
+
a6FJpEcwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMT
|
1019 |
+
ElF1b1ZhZGlzIFJvb3QgQ0EgMoICBQkwDQYJKoZIhvcNAQEFBQADggIBAD4KFk2fBluornFdLwUv
|
1020 |
+
Z+YTRYPENvbzwCYMDbVHZF34tHLJRqUDGCdViXh9duqWNIAXINzng/iN/Ae42l9NLmeyhP3ZRPx3
|
1021 |
+
UIHmfLTJDQtyU/h2BwdBR5YM++CCJpNVjP4iH2BlfF/nJrP3MpCYUNQ3cVX2kiF495V5+vgtJodm
|
1022 |
+
VjB3pjd4M1IQWK4/YY7yarHvGH5KWWPKjaJW1acvvFYfzznB4vsKqBUsfU16Y8Zsl0Q80m/DShcK
|
1023 |
+
+JDSV6IZUaUtl0HaB0+pUNqQjZRG4T7wlP0QADj1O+hA4bRuVhogzG9Yje0uRY/W6ZM/57Es3zrW
|
1024 |
+
IozchLsib9D45MY56QSIPMO661V6bYCZJPVsAfv4l7CUW+v90m/xd2gNNWQjrLhVoQPRTUIZ3Ph1
|
1025 |
+
WVaj+ahJefivDrkRoHy3au000LYmYjgahwz46P0u05B/B5EqHdZ+XIWDmbA4CD/pXvk1B+TJYm5X
|
1026 |
+
f6dQlfe6yJvmjqIBxdZmv3lh8zwc4bmCXF2gw+nYSL0ZohEUGW6yhhtoPkg3Goi3XZZenMfvJ2II
|
1027 |
+
4pEZXNLxId26F0KCl3GBUzGpn/Z9Yr9y4aOTHcyKJloJONDO1w2AFrR4pTqHTI2KpdVGl/IsELm8
|
1028 |
+
VCLAAVBpQ570su9t+Oza8eOx79+Rj1QqCyXBJhnEUhAFZdWCEOrCMc0u
|
1029 |
+
-----END CERTIFICATE-----
|
1030 |
+
|
1031 |
+
QuoVadis Root CA 3
|
1032 |
+
==================
|
1033 |
+
-----BEGIN CERTIFICATE-----
|
1034 |
+
MIIGnTCCBIWgAwIBAgICBcYwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoT
|
1035 |
+
EFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJvb3QgQ0EgMzAeFw0wNjExMjQx
|
1036 |
+
OTExMjNaFw0zMTExMjQxOTA2NDRaMEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM
|
1037 |
+
aW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4IC
|
1038 |
+
DwAwggIKAoICAQDMV0IWVJzmmNPTTe7+7cefQzlKZbPoFog02w1ZkXTPkrgEQK0CSzGrvI2RaNgg
|
1039 |
+
DhoB4hp7Thdd4oq3P5kazethq8Jlph+3t723j/z9cI8LoGe+AaJZz3HmDyl2/7FWeUUrH556VOij
|
1040 |
+
KTVopAFPD6QuN+8bv+OPEKhyq1hX51SGyMnzW9os2l2ObjyjPtr7guXd8lyyBTNvijbO0BNO/79K
|
1041 |
+
DDRMpsMhvVAEVeuxu537RR5kFd5VAYwCdrXLoT9CabwvvWhDFlaJKjdhkf2mrk7AyxRllDdLkgbv
|
1042 |
+
BNDInIjbC3uBr7E9KsRlOni27tyAsdLTmZw67mtaa7ONt9XOnMK+pUsvFrGeaDsGb659n/je7Mwp
|
1043 |
+
p5ijJUMv7/FfJuGITfhebtfZFG4ZM2mnO4SJk8RTVROhUXhA+LjJou57ulJCg54U7QVSWllWp5f8
|
1044 |
+
nT8KKdjcT5EOE7zelaTfi5m+rJsziO+1ga8bxiJTyPbH7pcUsMV8eFLI8M5ud2CEpukqdiDtWAEX
|
1045 |
+
MJPpGovgc2PZapKUSU60rUqFxKMiMPwJ7Wgic6aIDFUhWMXhOp8q3crhkODZc6tsgLjoC2SToJyM
|
1046 |
+
Gf+z0gzskSaHirOi4XCPLArlzW1oUevaPwV/izLmE1xr/l9A4iLItLRkT9a6fUg+qGkM17uGcclz
|
1047 |
+
uD87nSVL2v9A6wIDAQABo4IBlTCCAZEwDwYDVR0TAQH/BAUwAwEB/zCB4QYDVR0gBIHZMIHWMIHT
|
1048 |
+
BgkrBgEEAb5YAAMwgcUwgZMGCCsGAQUFBwICMIGGGoGDQW55IHVzZSBvZiB0aGlzIENlcnRpZmlj
|
1049 |
+
YXRlIGNvbnN0aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlIFF1b1ZhZGlzIFJvb3QgQ0EgMyBDZXJ0
|
1050 |
+
aWZpY2F0ZSBQb2xpY3kgLyBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVudC4wLQYIKwYB
|
1051 |
+
BQUHAgEWIWh0dHA6Ly93d3cucXVvdmFkaXNnbG9iYWwuY29tL2NwczALBgNVHQ8EBAMCAQYwHQYD
|
1052 |
+
VR0OBBYEFPLAE+CCQz777i9nMpY1XNu4ywLQMG4GA1UdIwRnMGWAFPLAE+CCQz777i9nMpY1XNu4
|
1053 |
+
ywLQoUmkRzBFMQswCQYDVQQGEwJCTTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDEbMBkGA1UE
|
1054 |
+
AxMSUXVvVmFkaXMgUm9vdCBDQSAzggIFxjANBgkqhkiG9w0BAQUFAAOCAgEAT62gLEz6wPJv92ZV
|
1055 |
+
qyM07ucp2sNbtrCD2dDQ4iH782CnO11gUyeim/YIIirnv6By5ZwkajGxkHon24QRiSemd1o417+s
|
1056 |
+
hvzuXYO8BsbRd2sPbSQvS3pspweWyuOEn62Iix2rFo1bZhfZFvSLgNLd+LJ2w/w4E6oM3kJpK27z
|
1057 |
+
POuAJ9v1pkQNn1pVWQvVDVJIxa6f8i+AxeoyUDUSly7B4f/xI4hROJ/yZlZ25w9Rl6VSDE1JUZU2
|
1058 |
+
Pb+iSwwQHYaZTKrzchGT5Or2m9qoXadNt54CrnMAyNojA+j56hl0YgCUyyIgvpSnWbWCar6ZeXqp
|
1059 |
+
8kokUvd0/bpO5qgdAm6xDYBEwa7TIzdfu4V8K5Iu6H6li92Z4b8nby1dqnuH/grdS/yO9SbkbnBC
|
1060 |
+
bjPsMZ57k8HkyWkaPcBrTiJt7qtYTcbQQcEr6k8Sh17rRdhs9ZgC06DYVYoGmRmioHfRMJ6szHXu
|
1061 |
+
g/WwYjnPbFfiTNKRCw51KBuav/0aQ/HKd/s7j2G4aSgWQgRecCocIdiP4b0jWy10QJLZYxkNc91p
|
1062 |
+
vGJHvOB0K7Lrfb5BG7XARsWhIstfTsEokt4YutUqKLsRixeTmJlglFwjz1onl14LBQaTNx47aTbr
|
1063 |
+
qZ5hHY8y2o4M1nQ+ewkk2gF3R8Q7zTSMmfXK4SVhM7JZG+Ju1zdXtg2pEto=
|
1064 |
+
-----END CERTIFICATE-----
|
1065 |
+
|
1066 |
+
Security Communication Root CA
|
1067 |
+
==============================
|
1068 |
+
-----BEGIN CERTIFICATE-----
|
1069 |
+
MIIDWjCCAkKgAwIBAgIBADANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP
|
1070 |
+
U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw
|
1071 |
+
HhcNMDMwOTMwMDQyMDQ5WhcNMjMwOTMwMDQyMDQ5WjBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP
|
1072 |
+
U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw
|
1073 |
+
ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCzs/5/022x7xZ8V6UMbXaKL0u/ZPtM7orw
|
1074 |
+
8yl89f/uKuDp6bpbZCKamm8sOiZpUQWZJtzVHGpxxpp9Hp3dfGzGjGdnSj74cbAZJ6kJDKaVv0uM
|
1075 |
+
DPpVmDvY6CKhS3E4eayXkmmziX7qIWgGmBSWh9JhNrxtJ1aeV+7AwFb9Ms+k2Y7CI9eNqPPYJayX
|
1076 |
+
5HA49LY6tJ07lyZDo6G8SVlyTCMwhwFY9k6+HGhWZq/NQV3Is00qVUarH9oe4kA92819uZKAnDfd
|
1077 |
+
DJZkndwi92SL32HeFZRSFaB9UslLqCHJxrHty8OVYNEP8Ktw+N/LTX7s1vqr2b1/VPKl6Xn62dZ2
|
1078 |
+
JChzAgMBAAGjPzA9MB0GA1UdDgQWBBSgc0mZaNyFW2XjmygvV5+9M7wHSDALBgNVHQ8EBAMCAQYw
|
1079 |
+
DwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAaECpqLvkT115swW1F7NgE+vGkl3g
|
1080 |
+
0dNq/vu+m22/xwVtWSDEHPC32oRYAmP6SBbvT6UL90qY8j+eG61Ha2POCEfrUj94nK9NrvjVT8+a
|
1081 |
+
mCoQQTlSxN3Zmw7vkwGusi7KaEIkQmywszo+zenaSMQVy+n5Bw+SUEmK3TGXX8npN6o7WWWXlDLJ
|
1082 |
+
s58+OmJYxUmtYg5xpTKqL8aJdkNAExNnPaJUJRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ
|
1083 |
+
6rBK+1YWc26sTfcioU+tHXotRSflMMFe8toTyyVCUZVHA4xsIcx0Qu1T/zOLjw9XARYvz6buyXAi
|
1084 |
+
FL39vmwLAw==
|
1085 |
+
-----END CERTIFICATE-----
|
1086 |
+
|
1087 |
+
Sonera Class 1 Root CA
|
1088 |
+
======================
|
1089 |
+
-----BEGIN CERTIFICATE-----
|
1090 |
+
MIIDIDCCAgigAwIBAgIBJDANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEPMA0GA1UEChMG
|
1091 |
+
U29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MxIENBMB4XDTAxMDQwNjEwNDkxM1oXDTIxMDQw
|
1092 |
+
NjEwNDkxM1owOTELMAkGA1UEBhMCRkkxDzANBgNVBAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJh
|
1093 |
+
IENsYXNzMSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALWJHytPZwp5/8Ue+H88
|
1094 |
+
7dF+2rDNbS82rDTG29lkFwhjMDMiikzujrsPDUJVyZ0upe/3p4zDq7mXy47vPxVnqIJyY1MPQYx9
|
1095 |
+
EJUkoVqlBvqSV536pQHydekfvFYmUk54GWVYVQNYwBSujHxVX3BbdyMGNpfzJLWaRpXk3w0LBUXl
|
1096 |
+
0fIdgrvGE+D+qnr9aTCU89JFhfzyMlsy3uhsXR/LpCJ0sICOXZT3BgBLqdReLjVQCfOAl/QMF645
|
1097 |
+
2F/NM8EcyonCIvdFEu1eEpOdY6uCLrnrQkFEy0oaAIINnvmLVz5MxxftLItyM19yejhW1ebZrgUa
|
1098 |
+
HXVFsculJRwSVzb9IjcCAwEAAaMzMDEwDwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQIR+IMi/ZT
|
1099 |
+
iFIwCwYDVR0PBAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQCLGrLJXWG04bkruVPRsoWdd44W7hE9
|
1100 |
+
28Jj2VuXZfsSZ9gqXLar5V7DtxYvyOirHYr9qxp81V9jz9yw3Xe5qObSIjiHBxTZ/75Wtf0HDjxV
|
1101 |
+
yhbMp6Z3N/vbXB9OWQaHowND9Rart4S9Tu+fMTfwRvFAttEMpWT4Y14h21VOTzF2nBBhjrZTOqMR
|
1102 |
+
vq9tfB69ri3iDGnHhVNoomG6xT60eVR4ngrHAr5i0RGCS2UvkVrCqIexVmiUefkl98HVrhq4uz2P
|
1103 |
+
qYo4Ffdz0Fpg0YCw8NzVUM1O7pJIae2yIx4wzMiUyLb1O4Z/P6Yun/Y+LLWSlj7fLJOK/4GMDw9Z
|
1104 |
+
IRlXvVWa
|
1105 |
+
-----END CERTIFICATE-----
|
1106 |
+
|
1107 |
+
Sonera Class 2 Root CA
|
1108 |
+
======================
|
1109 |
+
-----BEGIN CERTIFICATE-----
|
1110 |
+
MIIDIDCCAgigAwIBAgIBHTANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEPMA0GA1UEChMG
|
1111 |
+
U29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MyIENBMB4XDTAxMDQwNjA3Mjk0MFoXDTIxMDQw
|
1112 |
+
NjA3Mjk0MFowOTELMAkGA1UEBhMCRkkxDzANBgNVBAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJh
|
1113 |
+
IENsYXNzMiBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJAXSjWdyvANlsdE+hY3
|
1114 |
+
/Ei9vX+ALTU74W+oZ6m/AxxNjG8yR9VBaKQTBME1DJqEQ/xcHf+Js+gXGM2RX/uJ4+q/Tl18GybT
|
1115 |
+
dXnt5oTjV+WtKcT0OijnpXuENmmz/V52vaMtmdOQTiMofRhj8VQ7Jp12W5dCsv+u8E7s3TmVToMG
|
1116 |
+
f+dJQMjFAbJUWmYdPfz56TwKnoG4cPABi+QjVHzIrviQHgCWctRUz2EjvOr7nQKV0ba5cTppCD8P
|
1117 |
+
tOFCx4j1P5iop7oc4HFx71hXgVB6XGt0Rg6DA5jDjqhu8nYybieDwnPz3BjotJPqdURrBGAgcVeH
|
1118 |
+
nfO+oJAjPYok4doh28MCAwEAAaMzMDEwDwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQISqCqWITT
|
1119 |
+
XjwwCwYDVR0PBAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQBazof5FnIVV0sd2ZvnoiYw7JNn39Yt
|
1120 |
+
0jSv9zilzqsWuasvfDXLrNAPtEwr/IDva4yRXzZ299uzGxnq9LIR/WFxRL8oszodv7ND6J+/3DEI
|
1121 |
+
cbCdjdY0RzKQxmUk96BKfARzjzlvF4xytb1LyHr4e4PDKE6cCepnP7JnBBvDFNr450kkkdAdavph
|
1122 |
+
Oe9r5yF1BgfYErQhIHBCcYHaPJo2vqZbDWpsmh+Re/n570K6Tk6ezAyNlNzZRZxe7EJQY670XcSx
|
1123 |
+
EtzKO6gunRRaBXW37Ndj4ro1tgQIkejanZz2ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLH
|
1124 |
+
llpwrN9M
|
1125 |
+
-----END CERTIFICATE-----
|
1126 |
+
|
1127 |
+
Staat der Nederlanden Root CA
|
1128 |
+
=============================
|
1129 |
+
-----BEGIN CERTIFICATE-----
|
1130 |
+
MIIDujCCAqKgAwIBAgIEAJiWijANBgkqhkiG9w0BAQUFADBVMQswCQYDVQQGEwJOTDEeMBwGA1UE
|
1131 |
+
ChMVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSYwJAYDVQQDEx1TdGFhdCBkZXIgTmVkZXJsYW5kZW4g
|
1132 |
+
Um9vdCBDQTAeFw0wMjEyMTcwOTIzNDlaFw0xNTEyMTYwOTE1MzhaMFUxCzAJBgNVBAYTAk5MMR4w
|
1133 |
+
HAYDVQQKExVTdGFhdCBkZXIgTmVkZXJsYW5kZW4xJjAkBgNVBAMTHVN0YWF0IGRlciBOZWRlcmxh
|
1134 |
+
bmRlbiBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmNK1URF6gaYUmHFt
|
1135 |
+
vsznExvWJw56s2oYHLZhWtVhCb/ekBPHZ+7d89rFDBKeNVU+LCeIQGv33N0iYfXCxw719tV2U02P
|
1136 |
+
jLwYdjeFnejKScfST5gTCaI+Ioicf9byEGW07l8Y1Rfj+MX94p2i71MOhXeiD+EwR+4A5zN9RGca
|
1137 |
+
C1Hoi6CeUJhoNFIfLm0B8mBF8jHrqTFoKbt6QZ7GGX+UtFE5A3+y3qcym7RHjm+0Sq7lr7HcsBth
|
1138 |
+
vJly3uSJt3omXdozSVtSnA71iq3DuD3oBmrC1SoLbHuEvVYFy4ZlkuxEK7COudxwC0barbxjiDn6
|
1139 |
+
22r+I/q85Ej0ZytqERAhSQIDAQABo4GRMIGOMAwGA1UdEwQFMAMBAf8wTwYDVR0gBEgwRjBEBgRV
|
1140 |
+
HSAAMDwwOgYIKwYBBQUHAgEWLmh0dHA6Ly93d3cucGtpb3ZlcmhlaWQubmwvcG9saWNpZXMvcm9v
|
1141 |
+
dC1wb2xpY3kwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBSofeu8Y6R0E3QA7Jbg0zTBLL9s+DAN
|
1142 |
+
BgkqhkiG9w0BAQUFAAOCAQEABYSHVXQ2YcG70dTGFagTtJ+k/rvuFbQvBgwp8qiSpGEN/KtcCFtR
|
1143 |
+
EytNwiphyPgJWPwtArI5fZlmgb9uXJVFIGzmeafR2Bwp/MIgJ1HI8XxdNGdphREwxgDS1/PTfLbw
|
1144 |
+
MVcoEoJz6TMvplW0C5GUR5z6u3pCMuiufi3IvKwUv9kP2Vv8wfl6leF9fpb8cbDCTMjfRTTJzg3y
|
1145 |
+
nGQI0DvDKcWy7ZAEwbEpkcUwb8GpcjPM/l0WFywRaed+/sWDCN+83CI6LiBpIzlWYGeQiy52OfsR
|
1146 |
+
iJf2fL1LuCAWZwWN4jvBcj+UlTfHXbme2JOhF4//DGYVwSR8MnwDHTuhWEUykw==
|
1147 |
+
-----END CERTIFICATE-----
|
1148 |
+
|
1149 |
+
TDC Internet Root CA
|
1150 |
+
====================
|
1151 |
+
-----BEGIN CERTIFICATE-----
|
1152 |
+
MIIEKzCCAxOgAwIBAgIEOsylTDANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQGEwJESzEVMBMGA1UE
|
1153 |
+
ChMMVERDIEludGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQgUm9vdCBDQTAeFw0wMTA0MDUx
|
1154 |
+
NjMzMTdaFw0yMTA0MDUxNzAzMTdaMEMxCzAJBgNVBAYTAkRLMRUwEwYDVQQKEwxUREMgSW50ZXJu
|
1155 |
+
ZXQxHTAbBgNVBAsTFFREQyBJbnRlcm5ldCBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
|
1156 |
+
MIIBCgKCAQEAxLhAvJHVYx/XmaCLDEAedLdInUaMArLgJF/wGROnN4NrXceO+YQwzho7+vvOi20j
|
1157 |
+
xsNuZp+Jpd/gQlBn+h9sHvTQBda/ytZO5GhgbEaqHF1j4QeGDmUApy6mcca8uYGoOn0a0vnRrEvL
|
1158 |
+
znWv3Hv6gXPU/Lq9QYjUdLP5Xjg6PEOo0pVOd20TDJ2PeAG3WiAfAzc14izbSysseLlJ28TQx5yc
|
1159 |
+
5IogCSEWVmb/Bexb4/DPqyQkXsN/cHoSxNK1EKC2IeGNeGlVRGn1ypYcNIUXJXfi9i8nmHj9eQY6
|
1160 |
+
otZaQ8H/7AQ77hPv01ha/5Lr7K7a8jcDR0G2l8ktCkEiu7vmpwIDAQABo4IBJTCCASEwEQYJYIZI
|
1161 |
+
AYb4QgEBBAQDAgAHMGUGA1UdHwReMFwwWqBYoFakVDBSMQswCQYDVQQGEwJESzEVMBMGA1UEChMM
|
1162 |
+
VERDIEludGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQgUm9vdCBDQTENMAsGA1UEAxMEQ1JM
|
1163 |
+
MTArBgNVHRAEJDAigA8yMDAxMDQwNTE2MzMxN1qBDzIwMjEwNDA1MTcwMzE3WjALBgNVHQ8EBAMC
|
1164 |
+
AQYwHwYDVR0jBBgwFoAUbGQBx/2FbazI2p5QCIUItTxWqFAwHQYDVR0OBBYEFGxkAcf9hW2syNqe
|
1165 |
+
UAiFCLU8VqhQMAwGA1UdEwQFMAMBAf8wHQYJKoZIhvZ9B0EABBAwDhsIVjUuMDo0LjADAgSQMA0G
|
1166 |
+
CSqGSIb3DQEBBQUAA4IBAQBOQ8zR3R0QGwZ/t6T609lN+yOfI1Rb5osvBCiLtSdtiaHsmGnc540m
|
1167 |
+
gwV5dOy0uaOXwTUA/RXaOYE6lTGQ3pfphqiZdwzlWqCE/xIWrG64jcN7ksKsLtB9KOy282A4aW8+
|
1168 |
+
2ARVPp7MVdK6/rtHBNcK2RYKNCn1WBPVT8+PVkuzHu7TmHnaCB4Mb7j4Fifvwm899qNLPg7kbWzb
|
1169 |
+
O0ESm70NRyN/PErQr8Cv9u8btRXE64PECV90i9kR+8JWsTz4cMo0jUNAE4z9mQNUecYu6oah9jrU
|
1170 |
+
Cbz0vGbMPVjQV0kK7iXiQe4T+Zs4NNEA9X7nlB38aQNiuJkFBT1reBK9sG9l
|
1171 |
+
-----END CERTIFICATE-----
|
1172 |
+
|
1173 |
+
TDC OCES Root CA
|
1174 |
+
================
|
1175 |
+
-----BEGIN CERTIFICATE-----
|
1176 |
+
MIIFGTCCBAGgAwIBAgIEPki9xDANBgkqhkiG9w0BAQUFADAxMQswCQYDVQQGEwJESzEMMAoGA1UE
|
1177 |
+
ChMDVERDMRQwEgYDVQQDEwtUREMgT0NFUyBDQTAeFw0wMzAyMTEwODM5MzBaFw0zNzAyMTEwOTA5
|
1178 |
+
MzBaMDExCzAJBgNVBAYTAkRLMQwwCgYDVQQKEwNUREMxFDASBgNVBAMTC1REQyBPQ0VTIENBMIIB
|
1179 |
+
IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArGL2YSCyz8DGhdfjeebM7fI5kqSXLmSjhFuH
|
1180 |
+
nEz9pPPEXyG9VhDr2y5h7JNp46PMvZnDBfwGuMo2HP6QjklMxFaaL1a8z3sM8W9Hpg1DTeLpHTk0
|
1181 |
+
zY0s2RKY+ePhwUp8hjjEqcRhiNJerxomTdXkoCJHhNlktxmW/OwZ5LKXJk5KTMuPJItUGBxIYXvV
|
1182 |
+
iGjaXbXqzRowwYCDdlCqT9HU3Tjw7xb04QxQBr/q+3pJoSgrHPb8FTKjdGqPqcNiKXEx5TukYBde
|
1183 |
+
dObaE+3pHx8b0bJoc8YQNHVGEBDjkAB2QMuLt0MJIf+rTpPGWOmlgtt3xDqZsXKVSQTwtyv6e1mO
|
1184 |
+
3QIDAQABo4ICNzCCAjMwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwgewGA1UdIASB
|
1185 |
+
5DCB4TCB3gYIKoFQgSkBAQEwgdEwLwYIKwYBBQUHAgEWI2h0dHA6Ly93d3cuY2VydGlmaWthdC5k
|
1186 |
+
ay9yZXBvc2l0b3J5MIGdBggrBgEFBQcCAjCBkDAKFgNUREMwAwIBARqBgUNlcnRpZmlrYXRlciBm
|
1187 |
+
cmEgZGVubmUgQ0EgdWRzdGVkZXMgdW5kZXIgT0lEIDEuMi4yMDguMTY5LjEuMS4xLiBDZXJ0aWZp
|
1188 |
+
Y2F0ZXMgZnJvbSB0aGlzIENBIGFyZSBpc3N1ZWQgdW5kZXIgT0lEIDEuMi4yMDguMTY5LjEuMS4x
|
1189 |
+
LjARBglghkgBhvhCAQEEBAMCAAcwgYEGA1UdHwR6MHgwSKBGoESkQjBAMQswCQYDVQQGEwJESzEM
|
1190 |
+
MAoGA1UEChMDVERDMRQwEgYDVQQDEwtUREMgT0NFUyBDQTENMAsGA1UEAxMEQ1JMMTAsoCqgKIYm
|
1191 |
+
aHR0cDovL2NybC5vY2VzLmNlcnRpZmlrYXQuZGsvb2Nlcy5jcmwwKwYDVR0QBCQwIoAPMjAwMzAy
|
1192 |
+
MTEwODM5MzBagQ8yMDM3MDIxMTA5MDkzMFowHwYDVR0jBBgwFoAUYLWF7FZkfhIZJ2cdUBVLc647
|
1193 |
+
+RIwHQYDVR0OBBYEFGC1hexWZH4SGSdnHVAVS3OuO/kSMB0GCSqGSIb2fQdBAAQQMA4bCFY2LjA6
|
1194 |
+
NC4wAwIEkDANBgkqhkiG9w0BAQUFAAOCAQEACromJkbTc6gJ82sLMJn9iuFXehHTuJTXCRBuo7E4
|
1195 |
+
A9G28kNBKWKnctj7fAXmMXAnVBhOinxO5dHKjHiIzxvTkIvmI/gLDjNDfZziChmPyQE+dF10yYsc
|
1196 |
+
A+UYyAFMP8uXBV2YcaaYb7Z8vTd/vuGTJW1v8AqtFxjhA7wHKcitJuj4YfD9IQl+mo6paH1IYnK9
|
1197 |
+
AOoBmbgGglGBTvH1tJFUuSN6AJqfXY3gPGS5GhKSKseCRHI53OI8xthV9RVOyAUO28bQYqbsFbS1
|
1198 |
+
AoLbrIyigfCbmTH1ICCoiGEKB5+U/NDXG8wuF/MEJ3Zn61SD/aSQfgY9BKNDLdr8C2LqL19iUw==
|
1199 |
+
-----END CERTIFICATE-----
|
1200 |
+
|
1201 |
+
UTN DATACorp SGC Root CA
|
1202 |
+
========================
|
1203 |
+
-----BEGIN CERTIFICATE-----
|
1204 |
+
MIIEXjCCA0agAwIBAgIQRL4Mi1AAIbQR0ypoBqmtaTANBgkqhkiG9w0BAQUFADCBkzELMAkGA1UE
|
1205 |
+
BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl
|
1206 |
+
IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xGzAZ
|
1207 |
+
BgNVBAMTElVUTiAtIERBVEFDb3JwIFNHQzAeFw05OTA2MjQxODU3MjFaFw0xOTA2MjQxOTA2MzBa
|
1208 |
+
MIGTMQswCQYDVQQGEwJVUzELMAkGA1UECBMCVVQxFzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4w
|
1209 |
+
HAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cudXNlcnRy
|
1210 |
+
dXN0LmNvbTEbMBkGA1UEAxMSVVROIC0gREFUQUNvcnAgU0dDMIIBIjANBgkqhkiG9w0BAQEFAAOC
|
1211 |
+
AQ8AMIIBCgKCAQEA3+5YEKIrblXEjr8uRgnn4AgPLit6E5Qbvfa2gI5lBZMAHryv4g+OGQ0SR+ys
|
1212 |
+
raP6LnD43m77VkIVni5c7yPeIbkFdicZD0/Ww5y0vpQZY/KmEQrrU0icvvIpOxboGqBMpsn0GFlo
|
1213 |
+
wHDyUwDAXlCCpVZvNvlK4ESGoE1O1kduSUrLZ9emxAW5jh70/P/N5zbgnAVssjMiFdC04MwXwLLA
|
1214 |
+
9P4yPykqlXvY8qdOD1R8oQ2AswkDwf9c3V6aPryuvEeKaq5xyh+xKrhfQgUL7EYw0XILyulWbfXv
|
1215 |
+
33i+Ybqypa4ETLyorGkVl73v67SMvzX41MPRKA5cOp9wGDMgd8SirwIDAQABo4GrMIGoMAsGA1Ud
|
1216 |
+
DwQEAwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRTMtGzz3/64PGgXYVOktKeRR20TzA9
|
1217 |
+
BgNVHR8ENjA0MDKgMKAuhixodHRwOi8vY3JsLnVzZXJ0cnVzdC5jb20vVVROLURBVEFDb3JwU0dD
|
1218 |
+
LmNybDAqBgNVHSUEIzAhBggrBgEFBQcDAQYKKwYBBAGCNwoDAwYJYIZIAYb4QgQBMA0GCSqGSIb3
|
1219 |
+
DQEBBQUAA4IBAQAnNZcAiosovcYzMB4p/OL31ZjUQLtgyr+rFywJNn9Q+kHcrpY6CiM+iVnJowft
|
1220 |
+
Gzet/Hy+UUla3joKVAgWRcKZsYfNjGjgaQPpxE6YsjuMFrMOoAyYUJuTqXAJyCyjj98C5OBxOvG0
|
1221 |
+
I3KgqgHf35g+FFCgMSa9KOlaMCZ1+XtgHI3zzVAmbQQnmt/VDUVHKWss5nbZqSl9Mt3JNjy9rjXx
|
1222 |
+
EZ4du5A/EkdOjtd+D2JzHVImOBwYSf0wdJrE5SIv2MCN7ZF6TACPcn9d2t0bi0Vr591pl6jFVkwP
|
1223 |
+
DPafepE39peC4N1xaf92P2BNPM/3mfnGV/TJVTl4uix5yaaIK/QI
|
1224 |
+
-----END CERTIFICATE-----
|
1225 |
+
|
1226 |
+
UTN USERFirst Email Root CA
|
1227 |
+
===========================
|
1228 |
+
-----BEGIN CERTIFICATE-----
|
1229 |
+
MIIEojCCA4qgAwIBAgIQRL4Mi1AAJLQR0zYlJWfJiTANBgkqhkiG9w0BAQUFADCBrjELMAkGA1UE
|
1230 |
+
BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl
|
1231 |
+
IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xNjA0
|
1232 |
+
BgNVBAMTLVVUTi1VU0VSRmlyc3QtQ2xpZW50IEF1dGhlbnRpY2F0aW9uIGFuZCBFbWFpbDAeFw05
|
1233 |
+
OTA3MDkxNzI4NTBaFw0xOTA3MDkxNzM2NThaMIGuMQswCQYDVQQGEwJVUzELMAkGA1UECBMCVVQx
|
1234 |
+
FzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsx
|
1235 |
+
ITAfBgNVBAsTGGh0dHA6Ly93d3cudXNlcnRydXN0LmNvbTE2MDQGA1UEAxMtVVROLVVTRVJGaXJz
|
1236 |
+
dC1DbGllbnQgQXV0aGVudGljYXRpb24gYW5kIEVtYWlsMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
|
1237 |
+
MIIBCgKCAQEAsjmFpPJ9q0E7YkY3rs3BYHW8OWX5ShpHornMSMxqmNVNNRm5pELlzkniii8efNIx
|
1238 |
+
B8dOtINknS4p1aJkxIW9hVE1eaROaJB7HHqkkqgX8pgV8pPMyaQylbsMTzC9mKALi+VuG6JG+ni8
|
1239 |
+
om+rWV6lL8/K2m2qL+usobNqqrcuZzWLeeEeaYji5kbNoKXqvgvOdjp6Dpvq/NonWz1zHyLmSGHG
|
1240 |
+
TPNpsaguG7bUMSAsvIKKjqQOpdeJQ/wWWq8dcdcRWdq6hw2v+vPhwvCkxWeM1tZUOt4KpLoDd7Nl
|
1241 |
+
yP0e03RiqhjKaJMeoYV+9Udly/hNVyh00jT/MLbu9mIwFIws6wIDAQABo4G5MIG2MAsGA1UdDwQE
|
1242 |
+
AwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBSJgmd9xJ0mcABLtFBIfN49rgRufTBYBgNV
|
1243 |
+
HR8EUTBPME2gS6BJhkdodHRwOi8vY3JsLnVzZXJ0cnVzdC5jb20vVVROLVVTRVJGaXJzdC1DbGll
|
1244 |
+
bnRBdXRoZW50aWNhdGlvbmFuZEVtYWlsLmNybDAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUH
|
1245 |
+
AwQwDQYJKoZIhvcNAQEFBQADggEBALFtYV2mGn98q0rkMPxTbyUkxsrt4jFcKw7u7mFVbwQ+zzne
|
1246 |
+
xRtJlOTrIEy05p5QLnLZjfWqo7NK2lYcYJeA3IKirUq9iiv/Cwm0xtcgBEXkzYABurorbs6q15L+
|
1247 |
+
5K/r9CYdFip/bDCVNy8zEqx/3cfREYxRmLLQo5HQrfafnoOTHh1CuEava2bwm3/q4wMC5QJRwarV
|
1248 |
+
NZ1yQAOJujEdxRBoUp7fooXFXAimeOZTT7Hot9MUnpOmw2TjrH5xzbyf6QMbzPvprDHBr3wVdAKZ
|
1249 |
+
w7JHpsIyYdfHb0gkUSeh1YdV8nuPmD0Wnu51tvjQjvLzxq4oW6fw8zYX/MMF08oDSlQ=
|
1250 |
+
-----END CERTIFICATE-----
|
1251 |
+
|
1252 |
+
UTN USERFirst Hardware Root CA
|
1253 |
+
==============================
|
1254 |
+
-----BEGIN CERTIFICATE-----
|
1255 |
+
MIIEdDCCA1ygAwIBAgIQRL4Mi1AAJLQR0zYq/mUK/TANBgkqhkiG9w0BAQUFADCBlzELMAkGA1UE
|
1256 |
+
BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl
|
1257 |
+
IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHzAd
|
1258 |
+
BgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdhcmUwHhcNOTkwNzA5MTgxMDQyWhcNMTkwNzA5MTgx
|
1259 |
+
OTIyWjCBlzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0
|
1260 |
+
eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVz
|
1261 |
+
ZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdhcmUwggEiMA0GCSqGSIb3
|
1262 |
+
DQEBAQUAA4IBDwAwggEKAoIBAQCx98M4P7Sof885glFn0G2f0v9Y8+efK+wNiVSZuTiZFvfgIXlI
|
1263 |
+
wrthdBKWHTxqctU8EGc6Oe0rE81m65UJM6Rsl7HoxuzBdXmcRl6Nq9Bq/bkqVRcQVLMZ8Jr28bFd
|
1264 |
+
tqdt++BxF2uiiPsA3/4aMXcMmgF6sTLjKwEHOG7DpV4jvEWbe1DByTCP2+UretNb+zNAHqDVmBe8
|
1265 |
+
i4fDidNdoI6yqqr2jmmIBsX6iSHzCJ1pLgkzmykNRg+MzEk0sGlRvfkGzWitZky8PqxhvQqIDsjf
|
1266 |
+
Pe58BEydCl5rkdbux+0ojatNh4lz0G6k0B4WixThdkQDf2Os5M1JnMWS9KsyoUhbAgMBAAGjgbkw
|
1267 |
+
gbYwCwYDVR0PBAQDAgHGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFKFyXyYbKJhDlV0HN9WF
|
1268 |
+
lp1L0sNFMEQGA1UdHwQ9MDswOaA3oDWGM2h0dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9VVE4tVVNF
|
1269 |
+
UkZpcnN0LUhhcmR3YXJlLmNybDAxBgNVHSUEKjAoBggrBgEFBQcDAQYIKwYBBQUHAwUGCCsGAQUF
|
1270 |
+
BwMGBggrBgEFBQcDBzANBgkqhkiG9w0BAQUFAAOCAQEARxkP3nTGmZev/K0oXnWO6y1n7k57K9cM
|
1271 |
+
//bey1WiCuFMVGWTYGufEpytXoMs61quwOQt9ABjHbjAbPLPSbtNk28GpgoiskliCE7/yMgUsogW
|
1272 |
+
XecB5BKV5UU0s4tpvc+0hY91UZ59Ojg6FEgSxvunOxqNDYJAB+gECJChicsZUN/KHAG8HQQZexB2
|
1273 |
+
lzvukJDKxA4fFm517zP4029bHpbj4HR3dHuKom4t3XbWOTCC8KucUvIqx69JXn7HaOWCgchqJ/kn
|
1274 |
+
iCrVWFCVH/A7HFe7fRQ5YiuayZSSKqMiDP+JJn1fIytH1xUdqWqeUQ0qUZ6B+dQ7XnASfxAynB67
|
1275 |
+
nfhmqA==
|
1276 |
+
-----END CERTIFICATE-----
|
1277 |
+
|
1278 |
+
UTN USERFirst Object Root CA
|
1279 |
+
============================
|
1280 |
+
-----BEGIN CERTIFICATE-----
|
1281 |
+
MIIEZjCCA06gAwIBAgIQRL4Mi1AAJLQR0zYt4LNfGzANBgkqhkiG9w0BAQUFADCBlTELMAkGA1UE
|
1282 |
+
BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl
|
1283 |
+
IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHTAb
|
1284 |
+
BgNVBAMTFFVUTi1VU0VSRmlyc3QtT2JqZWN0MB4XDTk5MDcwOTE4MzEyMFoXDTE5MDcwOTE4NDAz
|
1285 |
+
NlowgZUxCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJVVDEXMBUGA1UEBxMOU2FsdCBMYWtlIENpdHkx
|
1286 |
+
HjAcBgNVBAoTFVRoZSBVU0VSVFJVU1QgTmV0d29yazEhMB8GA1UECxMYaHR0cDovL3d3dy51c2Vy
|
1287 |
+
dHJ1c3QuY29tMR0wGwYDVQQDExRVVE4tVVNFUkZpcnN0LU9iamVjdDCCASIwDQYJKoZIhvcNAQEB
|
1288 |
+
BQADggEPADCCAQoCggEBAM6qgT+jo2F4qjEAVZURnicPHxzfOpuCaDDASmEd8S8O+r5596Uj71VR
|
1289 |
+
loTN2+O5bj4x2AogZ8f02b+U60cEPgLOKqJdhwQJ9jCdGIqXsqoc/EHSoTbL+z2RuufZcDX65OeQ
|
1290 |
+
w5ujm9M89RKZd7G3CeBo5hy485RjiGpq/gt2yb70IuRnuasaXnfBhQfdDWy/7gbHd2pBnqcP1/vu
|
1291 |
+
lBe3/IW+pKvEHDHd17bR5PDv3xaPslKT16HUiaEHLr/hARJCHhrh2JU022R5KP+6LhHC5ehbkkj7
|
1292 |
+
RwvCbNqtMoNB86XlQXD9ZZBt+vpRxPm9lisZBCzTbafc8H9vg2XiaquHhnUCAwEAAaOBrzCBrDAL
|
1293 |
+
BgNVHQ8EBAMCAcYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU2u1kdBScFDyr3ZmpvVsoTYs8
|
1294 |
+
ydgwQgYDVR0fBDswOTA3oDWgM4YxaHR0cDovL2NybC51c2VydHJ1c3QuY29tL1VUTi1VU0VSRmly
|
1295 |
+
c3QtT2JqZWN0LmNybDApBgNVHSUEIjAgBggrBgEFBQcDAwYIKwYBBQUHAwgGCisGAQQBgjcKAwQw
|
1296 |
+
DQYJKoZIhvcNAQEFBQADggEBAAgfUrE3RHjb/c652pWWmKpVZIC1WkDdIaXFwfNfLEzIR1pp6ujw
|
1297 |
+
NTX00CXzyKakh0q9G7FzCL3Uw8q2NbtZhncxzaeAFK4T7/yxSPlrJSUtUbYsbUXBmMiKVl0+7kNO
|
1298 |
+
PmsnjtA6S4ULX9Ptaqd1y9Fahy85dRNacrACgZ++8A+EVCBibGnU4U3GDZlDAQ0Slox4nb9QorFE
|
1299 |
+
qmrPF3rPbw/U+CRVX/A0FklmPlBGyWNxODFiuGK581OtbLUrohKqGU8J2l7nk8aOFAj+8DCAGKCG
|
1300 |
+
hU3IfdeLA/5u1fedFqySLKAj5ZyRUh+U3xeUc8OzwcFxBSAAeL0TUh2oPs0AH8g=
|
1301 |
+
-----END CERTIFICATE-----
|
1302 |
+
|
1303 |
+
Camerfirma Chambers of Commerce Root
|
1304 |
+
====================================
|
1305 |
+
-----BEGIN CERTIFICATE-----
|
1306 |
+
MIIEvTCCA6WgAwIBAgIBADANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJFVTEnMCUGA1UEChMe
|
1307 |
+
QUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1i
|
1308 |
+
ZXJzaWduLm9yZzEiMCAGA1UEAxMZQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdDAeFw0wMzA5MzAx
|
1309 |
+
NjEzNDNaFw0zNzA5MzAxNjEzNDRaMH8xCzAJBgNVBAYTAkVVMScwJQYDVQQKEx5BQyBDYW1lcmZp
|
1310 |
+
cm1hIFNBIENJRiBBODI3NDMyODcxIzAhBgNVBAsTGmh0dHA6Ly93d3cuY2hhbWJlcnNpZ24ub3Jn
|
1311 |
+
MSIwIAYDVQQDExlDaGFtYmVycyBvZiBDb21tZXJjZSBSb290MIIBIDANBgkqhkiG9w0BAQEFAAOC
|
1312 |
+
AQ0AMIIBCAKCAQEAtzZV5aVdGDDg2olUkfzIx1L4L1DZ77F1c2VHfRtbunXF/KGIJPov7coISjlU
|
1313 |
+
xFF6tdpg6jg8gbLL8bvZkSM/SAFwdakFKq0fcfPJVD0dBmpAPrMMhe5cG3nCYsS4No41XQEMIwRH
|
1314 |
+
NaqbYE6gZj3LJgqcQKH0XZi/caulAGgq7YN6D6IUtdQis4CwPAxaUWktWBiP7Zme8a7ileb2R6jW
|
1315 |
+
DA+wWFjbw2Y3npuRVDM30pQcakjJyfKl2qUMI/cjDpwyVV5xnIQFUZot/eZOKjRa3spAN2cMVCFV
|
1316 |
+
d9oKDMyXroDclDZK9D7ONhMeU+SsTjoF7Nuucpw4i9A5O4kKPnf+dQIBA6OCAUQwggFAMBIGA1Ud
|
1317 |
+
EwEB/wQIMAYBAf8CAQwwPAYDVR0fBDUwMzAxoC+gLYYraHR0cDovL2NybC5jaGFtYmVyc2lnbi5v
|
1318 |
+
cmcvY2hhbWJlcnNyb290LmNybDAdBgNVHQ4EFgQU45T1sU3p26EpW1eLTXYGduHRooowDgYDVR0P
|
1319 |
+
AQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzAnBgNVHREEIDAegRxjaGFtYmVyc3Jvb3RAY2hh
|
1320 |
+
bWJlcnNpZ24ub3JnMCcGA1UdEgQgMB6BHGNoYW1iZXJzcm9vdEBjaGFtYmVyc2lnbi5vcmcwWAYD
|
1321 |
+
VR0gBFEwTzBNBgsrBgEEAYGHLgoDATA+MDwGCCsGAQUFBwIBFjBodHRwOi8vY3BzLmNoYW1iZXJz
|
1322 |
+
aWduLm9yZy9jcHMvY2hhbWJlcnNyb290Lmh0bWwwDQYJKoZIhvcNAQEFBQADggEBAAxBl8IahsAi
|
1323 |
+
fJ/7kPMa0QOx7xP5IV8EnNrJpY0nbJaHkb5BkAFyk+cefV/2icZdp0AJPaxJRUXcLo0waLIJuvvD
|
1324 |
+
L8y6C98/d3tGfToSJI6WjzwFCm/SlCgdbQzALogi1djPHRPH8EjX1wWnz8dHnjs8NMiAT9QUu/wN
|
1325 |
+
UPf6s+xCX6ndbcj0dc97wXImsQEcXCz9ek60AcUFV7nnPKoF2YjpB0ZBzu9Bga5Y34OirsrXdx/n
|
1326 |
+
ADydb47kMgkdTXg0eDQ8lJsm7U9xxhl6vSAiSFr+S30Dt+dYvsYyTnQeaN2oaFuzPu5ifdmA6Ap1
|
1327 |
+
erfutGWaIZDgqtCYvDi1czyL+Nw=
|
1328 |
+
-----END CERTIFICATE-----
|
1329 |
+
|
1330 |
+
Camerfirma Global Chambersign Root
|
1331 |
+
==================================
|
1332 |
+
-----BEGIN CERTIFICATE-----
|
1333 |
+
MIIExTCCA62gAwIBAgIBADANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJFVTEnMCUGA1UEChMe
|
1334 |
+
QUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1i
|
1335 |
+
ZXJzaWduLm9yZzEgMB4GA1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwHhcNMDMwOTMwMTYx
|
1336 |
+
NDE4WhcNMzcwOTMwMTYxNDE4WjB9MQswCQYDVQQGEwJFVTEnMCUGA1UEChMeQUMgQ2FtZXJmaXJt
|
1337 |
+
YSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEg
|
1338 |
+
MB4GA1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwggEgMA0GCSqGSIb3DQEBAQUAA4IBDQAw
|
1339 |
+
ggEIAoIBAQCicKLQn0KuWxfH2H3PFIP8T8mhtxOviteePgQKkotgVvq0Mi+ITaFgCPS3CU6gSS9J
|
1340 |
+
1tPfnZdan5QEcOw/Wdm3zGaLmFIoCQLfxS+EjXqXd7/sQJ0lcqu1PzKY+7e3/HKE5TWH+VX6ox8O
|
1341 |
+
by4o3Wmg2UIQxvi1RMLQQ3/bvOSiPGpVeAp3qdjqGTK3L/5cPxvusZjsyq16aUXjlg9V9ubtdepl
|
1342 |
+
6DJWk0aJqCWKZQbua795B9Dxt6/tLE2Su8CoX6dnfQTyFQhwrJLWfQTSM/tMtgsL+xrJxI0DqX5c
|
1343 |
+
8lCrEqWhz0hQpe/SyBoT+rB/sYIcd2oPX9wLlY/vQ37mRQklAgEDo4IBUDCCAUwwEgYDVR0TAQH/
|
1344 |
+
BAgwBgEB/wIBDDA/BgNVHR8EODA2MDSgMqAwhi5odHRwOi8vY3JsLmNoYW1iZXJzaWduLm9yZy9j
|
1345 |
+
aGFtYmVyc2lnbnJvb3QuY3JsMB0GA1UdDgQWBBRDnDafsJ4wTcbOX60Qq+UDpfqpFDAOBgNVHQ8B
|
1346 |
+
Af8EBAMCAQYwEQYJYIZIAYb4QgEBBAQDAgAHMCoGA1UdEQQjMCGBH2NoYW1iZXJzaWducm9vdEBj
|
1347 |
+
aGFtYmVyc2lnbi5vcmcwKgYDVR0SBCMwIYEfY2hhbWJlcnNpZ25yb290QGNoYW1iZXJzaWduLm9y
|
1348 |
+
ZzBbBgNVHSAEVDBSMFAGCysGAQQBgYcuCgEBMEEwPwYIKwYBBQUHAgEWM2h0dHA6Ly9jcHMuY2hh
|
1349 |
+
bWJlcnNpZ24ub3JnL2Nwcy9jaGFtYmVyc2lnbnJvb3QuaHRtbDANBgkqhkiG9w0BAQUFAAOCAQEA
|
1350 |
+
PDtwkfkEVCeR4e3t/mh/YV3lQWVPMvEYBZRqHN4fcNs+ezICNLUMbKGKfKX0j//U2K0X1S0E0T9Y
|
1351 |
+
gOKBWYi+wONGkyT+kL0mojAt6JcmVzWJdJYY9hXiryQZVgICsroPFOrGimbBhkVVi76SvpykBMdJ
|
1352 |
+
PJ7oKXqJ1/6v/2j1pReQvayZzKWGVwlnRtvWFsJG8eSpUPWP0ZIV018+xgBJOm5YstHRJw0lyDL4
|
1353 |
+
IBHNfTIzSJRUTN3cecQwn+uOuFW114hcxWokPbLTBQNRxgfvzBRydD1ucs4YKIxKoHflCStFREes
|
1354 |
+
t2d/AYoFWpO+ocH/+OcOZ6RHSXZddZAa9SaP8A==
|
1355 |
+
-----END CERTIFICATE-----
|
1356 |
+
|
1357 |
+
NetLock Qualified (Class QA) Root
|
1358 |
+
=================================
|
1359 |
+
-----BEGIN CERTIFICATE-----
|
1360 |
+
MIIG0TCCBbmgAwIBAgIBezANBgkqhkiG9w0BAQUFADCByTELMAkGA1UEBhMCSFUxETAPBgNVBAcT
|
1361 |
+
CEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0b25zYWdpIEtmdC4xGjAYBgNV
|
1362 |
+
BAsTEVRhbnVzaXR2YW55a2lhZG9rMUIwQAYDVQQDEzlOZXRMb2NrIE1pbm9zaXRldHQgS296amVn
|
1363 |
+
eXpvaSAoQ2xhc3MgUUEpIFRhbnVzaXR2YW55a2lhZG8xHjAcBgkqhkiG9w0BCQEWD2luZm9AbmV0
|
1364 |
+
bG9jay5odTAeFw0wMzAzMzAwMTQ3MTFaFw0yMjEyMTUwMTQ3MTFaMIHJMQswCQYDVQQGEwJIVTER
|
1365 |
+
MA8GA1UEBxMIQnVkYXBlc3QxJzAlBgNVBAoTHk5ldExvY2sgSGFsb3phdGJpenRvbnNhZ2kgS2Z0
|
1366 |
+
LjEaMBgGA1UECxMRVGFudXNpdHZhbnlraWFkb2sxQjBABgNVBAMTOU5ldExvY2sgTWlub3NpdGV0
|
1367 |
+
dCBLb3pqZWd5em9pIChDbGFzcyBRQSkgVGFudXNpdHZhbnlraWFkbzEeMBwGCSqGSIb3DQEJARYP
|
1368 |
+
aW5mb0BuZXRsb2NrLmh1MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx1Ilstg91IRV
|
1369 |
+
CacbvWy5FPSKAtt2/GoqeKvld/Bu4IwjZ9ulZJm53QE+b+8tmjwi8F3JV6BVQX/yQ15YglMxZc4e
|
1370 |
+
8ia6AFQer7C8HORSjKAyr7c3sVNnaHRnUPYtLmTeriZ539+Zhqurf4XsoPuAzPS4DB6TRWO53Lhb
|
1371 |
+
m+1bOdRfYrCnjnxmOCyqsQhjF2d9zL2z8cM/z1A57dEZgxXbhxInlrfa6uWdvLrqOU+L73Sa58XQ
|
1372 |
+
0uqGURzk/mQIKAR5BevKxXEOC++r6uwSEaEYBTJp0QwsGj0lmT+1fMptsK6ZmfoIYOcZwvK9UdPM
|
1373 |
+
0wKswREMgM6r3JSda6M5UzrWhQIDAMV9o4ICwDCCArwwEgYDVR0TAQH/BAgwBgEB/wIBBDAOBgNV
|
1374 |
+
HQ8BAf8EBAMCAQYwggJ1BglghkgBhvhCAQ0EggJmFoICYkZJR1lFTEVNISBFemVuIHRhbnVzaXR2
|
1375 |
+
YW55IGEgTmV0TG9jayBLZnQuIE1pbm9zaXRldHQgU3pvbGdhbHRhdGFzaSBTemFiYWx5emF0YWJh
|
1376 |
+
biBsZWlydCBlbGphcmFzb2sgYWxhcGphbiBrZXN6dWx0LiBBIG1pbm9zaXRldHQgZWxla3Ryb25p
|
1377 |
+
a3VzIGFsYWlyYXMgam9naGF0YXMgZXJ2ZW55ZXN1bGVzZW5laywgdmFsYW1pbnQgZWxmb2dhZGFz
|
1378 |
+
YW5hayBmZWx0ZXRlbGUgYSBNaW5vc2l0ZXR0IFN6b2xnYWx0YXRhc2kgU3phYmFseXphdGJhbiwg
|
1379 |
+
YXogQWx0YWxhbm9zIFN6ZXJ6b2Rlc2kgRmVsdGV0ZWxla2JlbiBlbG9pcnQgZWxsZW5vcnplc2kg
|
1380 |
+
ZWxqYXJhcyBtZWd0ZXRlbGUuIEEgZG9rdW1lbnR1bW9rIG1lZ3RhbGFsaGF0b2sgYSBodHRwczov
|
1381 |
+
L3d3dy5uZXRsb2NrLmh1L2RvY3MvIGNpbWVuIHZhZ3kga2VyaGV0b2sgYXogaW5mb0BuZXRsb2Nr
|
1382 |
+
Lm5ldCBlLW1haWwgY2ltZW4uIFdBUk5JTkchIFRoZSBpc3N1YW5jZSBhbmQgdGhlIHVzZSBvZiB0
|
1383 |
+
aGlzIGNlcnRpZmljYXRlIGFyZSBzdWJqZWN0IHRvIHRoZSBOZXRMb2NrIFF1YWxpZmllZCBDUFMg
|
1384 |
+
YXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3Lm5ldGxvY2suaHUvZG9jcy8gb3IgYnkgZS1tYWlsIGF0
|
1385 |
+
IGluZm9AbmV0bG9jay5uZXQwHQYDVR0OBBYEFAlqYhaSsFq7VQ7LdTI6MuWyIckoMA0GCSqGSIb3
|
1386 |
+
DQEBBQUAA4IBAQCRalCc23iBmz+LQuM7/KbD7kPgz/PigDVJRXYC4uMvBcXxKufAQTPGtpvQMznN
|
1387 |
+
wNuhrWw3AkxYQTvyl5LGSKjN5Yo5iWH5Upfpvfb5lHTocQ68d4bDBsxafEp+NFAwLvt/MpqNPfMg
|
1388 |
+
W/hqyobzMUwsWYACff44yTB1HLdV47yfuqhthCgFdbOLDcCRVCHnpgu0mfVRQdzNo0ci2ccBgcTc
|
1389 |
+
R08m6h/t280NmPSjnLRzMkqWmf68f8glWPhY83ZmiVSkpj7EUFy6iRiCdUgh0k8T6GB+B3bbELVR
|
1390 |
+
5qq5aKrN9p2QdRLqOBrKROi3macqaJVmlaut74nLYKkGEsaUR+ko
|
1391 |
+
-----END CERTIFICATE-----
|
1392 |
+
|
1393 |
+
NetLock Notary (Class A) Root
|
1394 |
+
=============================
|
1395 |
+
-----BEGIN CERTIFICATE-----
|
1396 |
+
MIIGfTCCBWWgAwIBAgICAQMwDQYJKoZIhvcNAQEEBQAwga8xCzAJBgNVBAYTAkhVMRAwDgYDVQQI
|
1397 |
+
EwdIdW5nYXJ5MREwDwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6
|
1398 |
+
dG9uc2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9j
|
1399 |
+
ayBLb3pqZWd5em9pIChDbGFzcyBBKSBUYW51c2l0dmFueWtpYWRvMB4XDTk5MDIyNDIzMTQ0N1oX
|
1400 |
+
DTE5MDIxOTIzMTQ0N1owga8xCzAJBgNVBAYTAkhVMRAwDgYDVQQIEwdIdW5nYXJ5MREwDwYDVQQH
|
1401 |
+
EwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6dG9uc2FnaSBLZnQuMRowGAYD
|
1402 |
+
VQQLExFUYW51c2l0dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9jayBLb3pqZWd5em9pIChDbGFz
|
1403 |
+
cyBBKSBUYW51c2l0dmFueWtpYWRvMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvHSM
|
1404 |
+
D7tM9DceqQWC2ObhbHDqeLVu0ThEDaiDzl3S1tWBxdRL51uUcCbbO51qTGL3cfNk1mE7PetzozfZ
|
1405 |
+
z+qMkjvN9wfcZnSX9EUi3fRc4L9t875lM+QVOr/bmJBVOMTtplVjC7B4BPTjbsE/jvxReB+SnoPC
|
1406 |
+
/tmwqcm8WgD/qaiYdPv2LD4VOQ22BFWoDpggQrOxJa1+mm9dU7GrDPzr4PN6s6iz/0b2Y6LYOph7
|
1407 |
+
tqyF/7AlT3Rj5xMHpQqPBffAZG9+pyeAlt7ULoZgx2srXnN7F+eRP2QM2EsiNCubMvJIH5+hCoR6
|
1408 |
+
4sKtlz2O1cH5VqNQ6ca0+pii7pXmKgOM3wIDAQABo4ICnzCCApswDgYDVR0PAQH/BAQDAgAGMBIG
|
1409 |
+
A1UdEwEB/wQIMAYBAf8CAQQwEQYJYIZIAYb4QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaC
|
1410 |
+
Ak1GSUdZRUxFTSEgRXplbiB0YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFub3MgU3pv
|
1411 |
+
bGdhbHRhdGFzaSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBhbGFwamFuIGtlc3p1bHQu
|
1412 |
+
IEEgaGl0ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExvY2sgS2Z0LiB0ZXJtZWtmZWxlbG9zc2Vn
|
1413 |
+
LWJpenRvc2l0YXNhIHZlZGkuIEEgZGlnaXRhbGlzIGFsYWlyYXMgZWxmb2dhZGFzYW5hayBmZWx0
|
1414 |
+
ZXRlbGUgYXogZWxvaXJ0IGVsbGVub3J6ZXNpIGVsamFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFz
|
1415 |
+
IGxlaXJhc2EgbWVndGFsYWxoYXRvIGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGphbiBh
|
1416 |
+
IGh0dHBzOi8vd3d3Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJoZXRvIGF6IGVsbGVu
|
1417 |
+
b3J6ZXNAbmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBPUlRBTlQhIFRoZSBpc3N1YW5jZSBh
|
1418 |
+
bmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGlzIHN1YmplY3QgdG8gdGhlIE5ldExvY2sg
|
1419 |
+
Q1BTIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFp
|
1420 |
+
bCBhdCBjcHNAbmV0bG9jay5uZXQuMA0GCSqGSIb3DQEBBAUAA4IBAQBIJEb3ulZv+sgoA0BO5TE5
|
1421 |
+
ayZrU3/b39/zcT0mwBQOxmd7I6gMc90Bu8bKbjc5VdXHjFYgDigKDtIqpLBJUsY4B/6+CgmM0ZjP
|
1422 |
+
ytoUMaFP0jn8DxEsQ8Pdq5PHVT5HfBgaANzze9jyf1JsIPQLX2lS9O74silg6+NJMSEN1rUQQeJB
|
1423 |
+
CWziGppWS3cC9qCbmieH6FUpccKQn0V4GuEVZD3QDtigdp+uxdAu6tYPVuxkf1qbFFgBJ34TUMdr
|
1424 |
+
KuZoPL9coAob4Q566eKAw+np9v1sEZ7Q5SgnK1QyQhSCdeZK8CtmdWOMovsEPoMOmzbwGOQmIMOM
|
1425 |
+
8CgHrTwXZoi1/baI
|
1426 |
+
-----END CERTIFICATE-----
|
1427 |
+
|
1428 |
+
NetLock Business (Class B) Root
|
1429 |
+
===============================
|
1430 |
+
-----BEGIN CERTIFICATE-----
|
1431 |
+
MIIFSzCCBLSgAwIBAgIBaTANBgkqhkiG9w0BAQQFADCBmTELMAkGA1UEBhMCSFUxETAPBgNVBAcT
|
1432 |
+
CEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0b25zYWdpIEtmdC4xGjAYBgNV
|
1433 |
+
BAsTEVRhbnVzaXR2YW55a2lhZG9rMTIwMAYDVQQDEylOZXRMb2NrIFV6bGV0aSAoQ2xhc3MgQikg
|
1434 |
+
VGFudXNpdHZhbnlraWFkbzAeFw05OTAyMjUxNDEwMjJaFw0xOTAyMjAxNDEwMjJaMIGZMQswCQYD
|
1435 |
+
VQQGEwJIVTERMA8GA1UEBxMIQnVkYXBlc3QxJzAlBgNVBAoTHk5ldExvY2sgSGFsb3phdGJpenRv
|
1436 |
+
bnNhZ2kgS2Z0LjEaMBgGA1UECxMRVGFudXNpdHZhbnlraWFkb2sxMjAwBgNVBAMTKU5ldExvY2sg
|
1437 |
+
VXpsZXRpIChDbGFzcyBCKSBUYW51c2l0dmFueWtpYWRvMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCB
|
1438 |
+
iQKBgQCx6gTsIKAjwo84YM/HRrPVG/77uZmeBNwcf4xKgZjupNTKihe5In+DCnVMm8Bp2GQ5o+2S
|
1439 |
+
o/1bXHQawEfKOml2mrriRBf8TKPV/riXiK+IA4kfpPIEPsgHC+b5sy96YhQJRhTKZPWLgLViqNhr
|
1440 |
+
1nGTLbO/CVRY7QbrqHvcQ7GhaQIDAQABo4ICnzCCApswEgYDVR0TAQH/BAgwBgEB/wIBBDAOBgNV
|
1441 |
+
HQ8BAf8EBAMCAAYwEQYJYIZIAYb4QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaCAk1GSUdZ
|
1442 |
+
RUxFTSEgRXplbiB0YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFub3MgU3pvbGdhbHRh
|
1443 |
+
dGFzaSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBhbGFwamFuIGtlc3p1bHQuIEEgaGl0
|
1444 |
+
ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExvY2sgS2Z0LiB0ZXJtZWtmZWxlbG9zc2VnLWJpenRv
|
1445 |
+
c2l0YXNhIHZlZGkuIEEgZGlnaXRhbGlzIGFsYWlyYXMgZWxmb2dhZGFzYW5hayBmZWx0ZXRlbGUg
|
1446 |
+
YXogZWxvaXJ0IGVsbGVub3J6ZXNpIGVsamFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFzIGxlaXJh
|
1447 |
+
c2EgbWVndGFsYWxoYXRvIGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGphbiBhIGh0dHBz
|
1448 |
+
Oi8vd3d3Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJoZXRvIGF6IGVsbGVub3J6ZXNA
|
1449 |
+
bmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBPUlRBTlQhIFRoZSBpc3N1YW5jZSBhbmQgdGhl
|
1450 |
+
IHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGlzIHN1YmplY3QgdG8gdGhlIE5ldExvY2sgQ1BTIGF2
|
1451 |
+
YWlsYWJsZSBhdCBodHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFpbCBhdCBj
|
1452 |
+
cHNAbmV0bG9jay5uZXQuMA0GCSqGSIb3DQEBBAUAA4GBAATbrowXr/gOkDFOzT4JwG06sPgzTEdM
|
1453 |
+
43WIEJessDgVkcYplswhwG08pXTP2IKlOcNl40JwuyKQ433bNXbhoLXan3BukxowOR0w2y7jfLKR
|
1454 |
+
stE3Kfq51hdcR0/jHTjrn9V7lagonhVK0dHQKwCXoOKSNitjrFgBazMpUIaD8QFI
|
1455 |
+
-----END CERTIFICATE-----
|
1456 |
+
|
1457 |
+
NetLock Express (Class C) Root
|
1458 |
+
==============================
|
1459 |
+
-----BEGIN CERTIFICATE-----
|
1460 |
+
MIIFTzCCBLigAwIBAgIBaDANBgkqhkiG9w0BAQQFADCBmzELMAkGA1UEBhMCSFUxETAPBgNVBAcT
|
1461 |
+
CEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0b25zYWdpIEtmdC4xGjAYBgNV
|
1462 |
+
BAsTEVRhbnVzaXR2YW55a2lhZG9rMTQwMgYDVQQDEytOZXRMb2NrIEV4cHJlc3N6IChDbGFzcyBD
|
1463 |
+
KSBUYW51c2l0dmFueWtpYWRvMB4XDTk5MDIyNTE0MDgxMVoXDTE5MDIyMDE0MDgxMVowgZsxCzAJ
|
1464 |
+
BgNVBAYTAkhVMREwDwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6
|
1465 |
+
dG9uc2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE0MDIGA1UEAxMrTmV0TG9j
|
1466 |
+
ayBFeHByZXNzeiAoQ2xhc3MgQykgVGFudXNpdHZhbnlraWFkbzCBnzANBgkqhkiG9w0BAQEFAAOB
|
1467 |
+
jQAwgYkCgYEA6+ywbGGKIyWvYCDj2Z/8kwvbXY2wobNAOoLO/XXgeDIDhlqGlZHtU/qdQPzm6N3Z
|
1468 |
+
W3oDvV3zOwzDUXmbrVWg6dADEK8KuhRC2VImESLH0iDMgqSaqf64gXadarfSNnU+sYYJ9m5tfk63
|
1469 |
+
euyucYT2BDMIJTLrdKwWRMbkQJMdf60CAwEAAaOCAp8wggKbMBIGA1UdEwEB/wQIMAYBAf8CAQQw
|
1470 |
+
DgYDVR0PAQH/BAQDAgAGMBEGCWCGSAGG+EIBAQQEAwIABzCCAmAGCWCGSAGG+EIBDQSCAlEWggJN
|
1471 |
+
RklHWUVMRU0hIEV6ZW4gdGFudXNpdHZhbnkgYSBOZXRMb2NrIEtmdC4gQWx0YWxhbm9zIFN6b2xn
|
1472 |
+
YWx0YXRhc2kgRmVsdGV0ZWxlaWJlbiBsZWlydCBlbGphcmFzb2sgYWxhcGphbiBrZXN6dWx0LiBB
|
1473 |
+
IGhpdGVsZXNpdGVzIGZvbHlhbWF0YXQgYSBOZXRMb2NrIEtmdC4gdGVybWVrZmVsZWxvc3NlZy1i
|
1474 |
+
aXp0b3NpdGFzYSB2ZWRpLiBBIGRpZ2l0YWxpcyBhbGFpcmFzIGVsZm9nYWRhc2FuYWsgZmVsdGV0
|
1475 |
+
ZWxlIGF6IGVsb2lydCBlbGxlbm9yemVzaSBlbGphcmFzIG1lZ3RldGVsZS4gQXogZWxqYXJhcyBs
|
1476 |
+
ZWlyYXNhIG1lZ3RhbGFsaGF0byBhIE5ldExvY2sgS2Z0LiBJbnRlcm5ldCBob25sYXBqYW4gYSBo
|
1477 |
+
dHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIGNpbWVuIHZhZ3kga2VyaGV0byBheiBlbGxlbm9y
|
1478 |
+
emVzQG5ldGxvY2submV0IGUtbWFpbCBjaW1lbi4gSU1QT1JUQU5UISBUaGUgaXNzdWFuY2UgYW5k
|
1479 |
+
IHRoZSB1c2Ugb2YgdGhpcyBjZXJ0aWZpY2F0ZSBpcyBzdWJqZWN0IHRvIHRoZSBOZXRMb2NrIENQ
|
1480 |
+
UyBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cubmV0bG9jay5uZXQvZG9jcyBvciBieSBlLW1haWwg
|
1481 |
+
YXQgY3BzQG5ldGxvY2submV0LjANBgkqhkiG9w0BAQQFAAOBgQAQrX/XDDKACtiG8XmYta3UzbM2
|
1482 |
+
xJZIwVzNmtkFLp++UOv0JhQQLdRmF/iewSf98e3ke0ugbLWrmldwpu2gpO0u9f38vf5NNwgMvOOW
|
1483 |
+
gyL1SRt/Syu0VMGAfJlOHdCM7tCs5ZL6dVb+ZKATj7i4Fp1hBWeAyNDYpQcCNJgEjTME1A==
|
1484 |
+
-----END CERTIFICATE-----
|
1485 |
+
|
1486 |
+
XRamp Global CA Root
|
1487 |
+
====================
|
1488 |
+
-----BEGIN CERTIFICATE-----
|
1489 |
+
MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UE
|
1490 |
+
BhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2Vj
|
1491 |
+
dXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB
|
1492 |
+
dXRob3JpdHkwHhcNMDQxMTAxMTcxNDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMx
|
1493 |
+
HjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkg
|
1494 |
+
U2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
|
1495 |
+
dHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS638eMpSe2OAtp87ZOqCwu
|
1496 |
+
IR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCPKZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMx
|
1497 |
+
foArtYzAQDsRhtDLooY2YKTVMIJt2W7QDxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FE
|
1498 |
+
zG+gSqmUsE3a56k0enI4qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqs
|
1499 |
+
AxcZZPRaJSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNViPvry
|
1500 |
+
xS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud
|
1501 |
+
EwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASsjVy16bYbMDYGA1UdHwQvMC0wK6Ap
|
1502 |
+
oCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMC
|
1503 |
+
AQEwDQYJKoZIhvcNAQEFBQADggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc
|
1504 |
+
/Kh4ZzXxHfARvbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt
|
1505 |
+
qZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLaIR9NmXmd4c8n
|
1506 |
+
nxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSyi6mx5O+aGtA9aZnuqCij4Tyz
|
1507 |
+
8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQO+7ETPTsJ3xCwnR8gooJybQDJbw=
|
1508 |
+
-----END CERTIFICATE-----
|
1509 |
+
|
1510 |
+
Go Daddy Class 2 CA
|
1511 |
+
===================
|
1512 |
+
-----BEGIN CERTIFICATE-----
|
1513 |
+
MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMY
|
1514 |
+
VGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRp
|
1515 |
+
ZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkG
|
1516 |
+
A1UEBhMCVVMxITAfBgNVBAoTGFRoZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28g
|
1517 |
+
RGFkZHkgQ2xhc3MgMiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQAD
|
1518 |
+
ggENADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCAPVYYYwhv
|
1519 |
+
2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6wwdhFJ2+qN1j3hybX2C32
|
1520 |
+
qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXiEqITLdiOr18SPaAIBQi2XKVlOARFmR6j
|
1521 |
+
YGB0xUGlcmIbYsUfb18aQr4CUWWoriMYavx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmY
|
1522 |
+
vLEHZ6IVDd2gWMZEewo+YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0O
|
1523 |
+
BBYEFNLEsNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h/t2o
|
1524 |
+
atTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMu
|
1525 |
+
MTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwG
|
1526 |
+
A1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wim
|
1527 |
+
PQoZ+YeAEW5p5JYXMP80kWNyOO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKt
|
1528 |
+
I3lpjbi2Tc7PTMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ
|
1529 |
+
HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mERdEr/VxqHD3VI
|
1530 |
+
Ls9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5CufReYNnyicsbkqWletNw+vHX/b
|
1531 |
+
vZ8=
|
1532 |
+
-----END CERTIFICATE-----
|
1533 |
+
|
1534 |
+
Starfield Class 2 CA
|
1535 |
+
====================
|
1536 |
+
-----BEGIN CERTIFICATE-----
|
1537 |
+
MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzElMCMGA1UEChMc
|
1538 |
+
U3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZpZWxkIENsYXNzIDIg
|
1539 |
+
Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQwNjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBo
|
1540 |
+
MQswCQYDVQQGEwJVUzElMCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAG
|
1541 |
+
A1UECxMpU3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqG
|
1542 |
+
SIb3DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf8MOh2tTY
|
1543 |
+
bitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN+lq2cwQlZut3f+dZxkqZ
|
1544 |
+
JRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVm
|
1545 |
+
epsZGD3/cVE8MC5fvj13c7JdBmzDI1aaK4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSN
|
1546 |
+
F4Azbl5KXZnJHoe0nRrA1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HF
|
1547 |
+
MIHCMB0GA1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fRzt0f
|
1548 |
+
hvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNo
|
1549 |
+
bm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBDbGFzcyAyIENlcnRpZmljYXRpb24g
|
1550 |
+
QXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGs
|
1551 |
+
afPzWdqbAYcaT1epoXkJKtv3L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLM
|
1552 |
+
PUxA2IGvd56Deruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl
|
1553 |
+
xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynpVSJYACPq4xJD
|
1554 |
+
KVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEYWQPJIrSPnNVeKtelttQKbfi3
|
1555 |
+
QBFGmh95DmK/D5fs4C8fF5Q=
|
1556 |
+
-----END CERTIFICATE-----
|
1557 |
+
|
1558 |
+
StartCom Certification Authority
|
1559 |
+
================================
|
1560 |
+
-----BEGIN CERTIFICATE-----
|
1561 |
+
MIIHyTCCBbGgAwIBAgIBATANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMN
|
1562 |
+
U3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmlu
|
1563 |
+
ZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0
|
1564 |
+
NjM2WhcNMzYwOTE3MTk0NjM2WjB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRk
|
1565 |
+
LjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMg
|
1566 |
+
U3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw
|
1567 |
+
ggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZkpMyONvg45iPwbm2xPN1y
|
1568 |
+
o4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rfOQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/
|
1569 |
+
Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/CJi/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/d
|
1570 |
+
eMotHweXMAEtcnn6RtYTKqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt
|
1571 |
+
2PZE4XNiHzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMMAv+Z
|
1572 |
+
6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w+2OqqGwaVLRcJXrJ
|
1573 |
+
osmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/
|
1574 |
+
untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVc
|
1575 |
+
UjyJthkqcwEKDwOzEmDyei+B26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT
|
1576 |
+
37uMdBNSSwIDAQABo4ICUjCCAk4wDAYDVR0TBAUwAwEB/zALBgNVHQ8EBAMCAa4wHQYDVR0OBBYE
|
1577 |
+
FE4L7xqkQFulF2mHMMo0aEPQQa7yMGQGA1UdHwRdMFswLKAqoCiGJmh0dHA6Ly9jZXJ0LnN0YXJ0
|
1578 |
+
Y29tLm9yZy9zZnNjYS1jcmwuY3JsMCugKaAnhiVodHRwOi8vY3JsLnN0YXJ0Y29tLm9yZy9zZnNj
|
1579 |
+
YS1jcmwuY3JsMIIBXQYDVR0gBIIBVDCCAVAwggFMBgsrBgEEAYG1NwEBATCCATswLwYIKwYBBQUH
|
1580 |
+
AgEWI2h0dHA6Ly9jZXJ0LnN0YXJ0Y29tLm9yZy9wb2xpY3kucGRmMDUGCCsGAQUFBwIBFilodHRw
|
1581 |
+
Oi8vY2VydC5zdGFydGNvbS5vcmcvaW50ZXJtZWRpYXRlLnBkZjCB0AYIKwYBBQUHAgIwgcMwJxYg
|
1582 |
+
U3RhcnQgQ29tbWVyY2lhbCAoU3RhcnRDb20pIEx0ZC4wAwIBARqBl0xpbWl0ZWQgTGlhYmlsaXR5
|
1583 |
+
LCByZWFkIHRoZSBzZWN0aW9uICpMZWdhbCBMaW1pdGF0aW9ucyogb2YgdGhlIFN0YXJ0Q29tIENl
|
1584 |
+
cnRpZmljYXRpb24gQXV0aG9yaXR5IFBvbGljeSBhdmFpbGFibGUgYXQgaHR0cDovL2NlcnQuc3Rh
|
1585 |
+
cnRjb20ub3JnL3BvbGljeS5wZGYwEQYJYIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilT
|
1586 |
+
dGFydENvbSBGcmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQUFAAOC
|
1587 |
+
AgEAFmyZ9GYMNPXQhV59CuzaEE44HF7fpiUFS5Eyweg78T3dRAlbB0mKKctmArexmvclmAk8jhvh
|
1588 |
+
3TaHK0u7aNM5Zj2gJsfyOZEdUauCe37Vzlrk4gNXcGmXCPleWKYK34wGmkUWFjgKXlf2Ysd6AgXm
|
1589 |
+
vB618p70qSmD+LIU424oh0TDkBreOKk8rENNZEXO3SipXPJzewT4F+irsfMuXGRuczE6Eri8sxHk
|
1590 |
+
fY+BUZo7jYn0TZNmezwD7dOaHZrzZVD1oNB1ny+v8OqCQ5j4aZyJecRDjkZy42Q2Eq/3JR44iZB3
|
1591 |
+
fsNrarnDy0RLrHiQi+fHLB5LEUTINFInzQpdn4XBidUaePKVEFMy3YCEZnXZtWgo+2EuvoSoOMCZ
|
1592 |
+
EoalHmdkrQYuL6lwhceWD3yJZfWOQ1QOq92lgDmUYMA0yZZwLKMS9R9Ie70cfmu3nZD0Ijuu+Pwq
|
1593 |
+
yvqCUqDvr0tVk+vBtfAii6w0TiYiBKGHLHVKt+V9E9e4DGTANtLJL4YSjCMJwRuCO3NJo2pXh5Tl
|
1594 |
+
1njFmUNj403gdy3hZZlyaQQaRwnmDwFWJPsfvw55qVguucQJAX6Vum0ABj6y6koQOdjQK/W/7HW/
|
1595 |
+
lwLFCRsI3FU34oH7N4RDYiDK51ZLZer+bMEkkyShNOsF/5oirpt9P/FlUQqmMGqz9IgcgA38coro
|
1596 |
+
g14=
|
1597 |
+
-----END CERTIFICATE-----
|
1598 |
+
|
1599 |
+
Taiwan GRCA
|
1600 |
+
===========
|
1601 |
+
-----BEGIN CERTIFICATE-----
|
1602 |
+
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
|
1627 |
+
-----END CERTIFICATE-----
|
1628 |
+
|
1629 |
+
Firmaprofesional Root CA
|
1630 |
+
========================
|
1631 |
+
-----BEGIN CERTIFICATE-----
|
1632 |
+
MIIEVzCCAz+gAwIBAgIBATANBgkqhkiG9w0BAQUFADCBnTELMAkGA1UEBhMCRVMxIjAgBgNVBAcT
|
1633 |
+
GUMvIE11bnRhbmVyIDI0NCBCYXJjZWxvbmExQjBABgNVBAMTOUF1dG9yaWRhZCBkZSBDZXJ0aWZp
|
1634 |
+
Y2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2MjYzNDA2ODEmMCQGCSqGSIb3DQEJARYXY2FA
|
1635 |
+
ZmlybWFwcm9mZXNpb25hbC5jb20wHhcNMDExMDI0MjIwMDAwWhcNMTMxMDI0MjIwMDAwWjCBnTEL
|
1636 |
+
MAkGA1UEBhMCRVMxIjAgBgNVBAcTGUMvIE11bnRhbmVyIDI0NCBCYXJjZWxvbmExQjBABgNVBAMT
|
1637 |
+
OUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2MjYzNDA2
|
1638 |
+
ODEmMCQGCSqGSIb3DQEJARYXY2FAZmlybWFwcm9mZXNpb25hbC5jb20wggEiMA0GCSqGSIb3DQEB
|
1639 |
+
AQUAA4IBDwAwggEKAoIBAQDnIwNvbyOlXnjOlSztlB5uCp4Bx+ow0Syd3Tfom5h5VtP8c9/Qit5V
|
1640 |
+
j1H5WuretXDE7aTt/6MNbg9kUDGvASdYrv5sp0ovFy3Tc9UTHI9ZpTQsHVQERc1ouKDAA6XPhUJH
|
1641 |
+
lShbz++AbOCQl4oBPB3zhxAwJkh91/zpnZFx/0GaqUC1N5wpIE8fUuOgfRNtVLcK3ulqTgesrBlf
|
1642 |
+
3H5idPayBQC6haD9HThuy1q7hryUZzM1gywfI834yJFxzJeL764P3CkDG8A563DtwW4O2GcLiam8
|
1643 |
+
NeTvtjS0pbbELaW+0MOUJEjb35bTALVmGotmBQ/dPz/LP6pemkr4tErvlTcbAgMBAAGjgZ8wgZww
|
1644 |
+
KgYDVR0RBCMwIYYfaHR0cDovL3d3dy5maXJtYXByb2Zlc2lvbmFsLmNvbTASBgNVHRMBAf8ECDAG
|
1645 |
+
AQH/AgEBMCsGA1UdEAQkMCKADzIwMDExMDI0MjIwMDAwWoEPMjAxMzEwMjQyMjAwMDBaMA4GA1Ud
|
1646 |
+
DwEB/wQEAwIBBjAdBgNVHQ4EFgQUMwugZtHq2s7eYpMEKFK1FH84aLcwDQYJKoZIhvcNAQEFBQAD
|
1647 |
+
ggEBAEdz/o0nVPD11HecJ3lXV7cVVuzH2Fi3AQL0M+2TUIiefEaxvT8Ub/GzR0iLjJcG1+p+o1wq
|
1648 |
+
u00vR+L4OQbJnC4xGgN49Lw4xiKLMzHwFgQEffl25EvXwOaD7FnMP97/T2u3Z36mhoEyIwOdyPdf
|
1649 |
+
wUpgpZKpsaSgYMN4h7Mi8yrrW6ntBas3D7Hi05V2Y1Z0jFhyGzflZKG+TQyTmAyX9odtsz/ny4Cm
|
1650 |
+
7YjHX1BiAuiZdBbQ5rQ58SfLyEDW44YQqSMSkuBpQWOnryULwMWSyx6Yo1q6xTMPoJcB3X/ge9YG
|
1651 |
+
VM+h4k0460tQtcsm9MracEpqoeJ5quGnM/b9Sh/22WA=
|
1652 |
+
-----END CERTIFICATE-----
|
1653 |
+
|
1654 |
+
Wells Fargo Root CA
|
1655 |
+
===================
|
1656 |
+
-----BEGIN CERTIFICATE-----
|
1657 |
+
MIID5TCCAs2gAwIBAgIEOeSXnjANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UEBhMCVVMxFDASBgNV
|
1658 |
+
BAoTC1dlbGxzIEZhcmdvMSwwKgYDVQQLEyNXZWxscyBGYXJnbyBDZXJ0aWZpY2F0aW9uIEF1dGhv
|
1659 |
+
cml0eTEvMC0GA1UEAxMmV2VsbHMgRmFyZ28gUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcN
|
1660 |
+
MDAxMDExMTY0MTI4WhcNMjEwMTE0MTY0MTI4WjCBgjELMAkGA1UEBhMCVVMxFDASBgNVBAoTC1dl
|
1661 |
+
bGxzIEZhcmdvMSwwKgYDVQQLEyNXZWxscyBGYXJnbyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEv
|
1662 |
+
MC0GA1UEAxMmV2VsbHMgRmFyZ28gUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0GCSqG
|
1663 |
+
SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDVqDM7Jvk0/82bfuUER84A4n135zHCLielTWi5MbqNQ1mX
|
1664 |
+
x3Oqfz1cQJ4F5aHiidlMuD+b+Qy0yGIZLEWukR5zcUHESxP9cMIlrCL1dQu3U+SlK93OvRw6esP3
|
1665 |
+
E48mVJwWa2uv+9iWsWCaSOAlIiR5NM4OJgALTqv9i86C1y8IcGjBqAr5dE8Hq6T54oN+J3N0Prj5
|
1666 |
+
OEL8pahbSCOz6+MlsoCultQKnMJ4msZoGK43YjdeUXWoWGPAUe5AeH6orxqg4bB4nVCMe+ez/I4j
|
1667 |
+
sNtlAHCEAQgAFG5Uhpq6zPk3EPbg3oQtnaSFN9OH4xXQwReQfhkhahKpdv0SAulPIV4XAgMBAAGj
|
1668 |
+
YTBfMA8GA1UdEwEB/wQFMAMBAf8wTAYDVR0gBEUwQzBBBgtghkgBhvt7hwcBCzAyMDAGCCsGAQUF
|
1669 |
+
BwIBFiRodHRwOi8vd3d3LndlbGxzZmFyZ28uY29tL2NlcnRwb2xpY3kwDQYJKoZIhvcNAQEFBQAD
|
1670 |
+
ggEBANIn3ZwKdyu7IvICtUpKkfnRLb7kuxpo7w6kAOnu5+/u9vnldKTC2FJYxHT7zmu1Oyl5GFrv
|
1671 |
+
m+0fazbuSCUlFLZWohDo7qd/0D+j0MNdJu4HzMPBJCGHHt8qElNvQRbn7a6U+oxy+hNH8Dx+rn0R
|
1672 |
+
OhPs7fpvcmR7nX1/Jv16+yWt6j4pf0zjAFcysLPp7VMX2YuyFA4w6OXVE8Zkr8QA1dhYJPz1j+zx
|
1673 |
+
x32l2w8n0cbyQIjmH/ZhqPRCyLk306m+LFZ4wnKbWV01QIroTmMatukgalHizqSQ33ZwmVxwQ023
|
1674 |
+
tqcZZE6St8WRPH9IFmV7Fv3L/PvZ1dZPIWU7Sn9Ho/s=
|
1675 |
+
-----END CERTIFICATE-----
|
1676 |
+
|
1677 |
+
Swisscom Root CA 1
|
1678 |
+
==================
|
1679 |
+
-----BEGIN CERTIFICATE-----
|
1680 |
+
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
|
1706 |
+
NY6E0F/6MBr1mmz0DlP5OlvRHA==
|
1707 |
+
-----END CERTIFICATE-----
|
1708 |
+
|
1709 |
+
DigiCert Assured ID Root CA
|
1710 |
+
===========================
|
1711 |
+
-----BEGIN CERTIFICATE-----
|
1712 |
+
MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQG
|
1713 |
+
EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQw
|
1714 |
+
IgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzEx
|
1715 |
+
MTEwMDAwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQL
|
1716 |
+
ExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0Ew
|
1717 |
+
ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7cJpSIqvTO
|
1718 |
+
9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYPmDI2dsze3Tyoou9q+yHy
|
1719 |
+
UmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW
|
1720 |
+
/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpy
|
1721 |
+
oeb6pNnVFzF1roV9Iq4/AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whf
|
1722 |
+
GHdPAgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRF
|
1723 |
+
66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYunpyGd823IDzANBgkq
|
1724 |
+
hkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRCdWKuh+vy1dneVrOfzM4UKLkNl2Bc
|
1725 |
+
EkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTffwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38Fn
|
1726 |
+
SbNd67IJKusm7Xi+fT8r87cmNW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i
|
1727 |
+
8b5QZ7dsvfPxH2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe
|
1728 |
+
+o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g==
|
1729 |
+
-----END CERTIFICATE-----
|
1730 |
+
|
1731 |
+
DigiCert Global Root CA
|
1732 |
+
=======================
|
1733 |
+
-----BEGIN CERTIFICATE-----
|
1734 |
+
MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBhMQswCQYDVQQG
|
1735 |
+
EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAw
|
1736 |
+
HgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBDQTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAw
|
1737 |
+
MDAwMDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3
|
1738 |
+
dy5kaWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkq
|
1739 |
+
hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsBCSDMAZOn
|
1740 |
+
TjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97nh6Vfe63SKMI2tavegw5
|
1741 |
+
BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt43C/dxC//AH2hdmoRBBYMql1GNXRor5H
|
1742 |
+
4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7PT19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y
|
1743 |
+
7vrTC0LUq7dBMtoM1O/4gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQAB
|
1744 |
+
o2MwYTAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbRTLtm
|
1745 |
+
8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUwDQYJKoZIhvcNAQEF
|
1746 |
+
BQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/EsrhMAtudXH/vTBH1jLuG2cenTnmCmr
|
1747 |
+
EbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIt
|
1748 |
+
tep3Sp+dWOIrWcBAI+0tKIJFPnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886
|
1749 |
+
UAb3LujEV0lsYSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk
|
1750 |
+
CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=
|
1751 |
+
-----END CERTIFICATE-----
|
1752 |
+
|
1753 |
+
DigiCert High Assurance EV Root CA
|
1754 |
+
==================================
|
1755 |
+
-----BEGIN CERTIFICATE-----
|
1756 |
+
MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBsMQswCQYDVQQG
|
1757 |
+
EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSsw
|
1758 |
+
KQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5jZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAw
|
1759 |
+
MFoXDTMxMTExMDAwMDAwMFowbDELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZ
|
1760 |
+
MBcGA1UECxMQd3d3LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFu
|
1761 |
+
Y2UgRVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm+9S75S0t
|
1762 |
+
Mqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTWPNt0OKRKzE0lgvdKpVMS
|
1763 |
+
OO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEMxChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3
|
1764 |
+
MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFBIk5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQ
|
1765 |
+
NAQTXKFx01p8VdteZOE3hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUe
|
1766 |
+
h10aUAsgEsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQFMAMB
|
1767 |
+
Af8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaAFLE+w2kD+L9HAdSY
|
1768 |
+
JhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3NecnzyIZgYIVyHbIUf4KmeqvxgydkAQ
|
1769 |
+
V8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6zeM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFp
|
1770 |
+
myPInngiK3BD41VHMWEZ71jFhS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkK
|
1771 |
+
mNEVX58Svnw2Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe
|
1772 |
+
vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep+OkuE6N36B9K
|
1773 |
+
-----END CERTIFICATE-----
|
1774 |
+
|
1775 |
+
Certplus Class 2 Primary CA
|
1776 |
+
===========================
|
1777 |
+
-----BEGIN CERTIFICATE-----
|
1778 |
+
MIIDkjCCAnqgAwIBAgIRAIW9S/PY2uNp9pTXX8OlRCMwDQYJKoZIhvcNAQEFBQAwPTELMAkGA1UE
|
1779 |
+
BhMCRlIxETAPBgNVBAoTCENlcnRwbHVzMRswGQYDVQQDExJDbGFzcyAyIFByaW1hcnkgQ0EwHhcN
|
1780 |
+
OTkwNzA3MTcwNTAwWhcNMTkwNzA2MjM1OTU5WjA9MQswCQYDVQQGEwJGUjERMA8GA1UEChMIQ2Vy
|
1781 |
+
dHBsdXMxGzAZBgNVBAMTEkNsYXNzIDIgUHJpbWFyeSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEP
|
1782 |
+
ADCCAQoCggEBANxQltAS+DXSCHh6tlJw/W/uz7kRy1134ezpfgSN1sxvc0NXYKwzCkTsA18cgCSR
|
1783 |
+
5aiRVhKC9+Ar9NuuYS6JEI1rbLqzAr3VNsVINyPi8Fo3UjMXEuLRYE2+L0ER4/YXJQyLkcAbmXuZ
|
1784 |
+
Vg2v7tK8R1fjeUl7NIknJITesezpWE7+Tt9avkGtrAjFGA7v0lPubNCdEgETjdyAYveVqUSISnFO
|
1785 |
+
YFWe2yMZeVYHDD9jC1yw4r5+FfyUM1hBOHTE4Y+L3yasH7WLO7dDWWuwJKZtkIvEcupdM5i3y95e
|
1786 |
+
e++U8Rs+yskhwcWYAqqi9lt3m/V+llU0HGdpwPFC40es/CgcZlUCAwEAAaOBjDCBiTAPBgNVHRME
|
1787 |
+
CDAGAQH/AgEKMAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQU43Mt38sOKAze3bOkynm4jrvoMIkwEQYJ
|
1788 |
+
YIZIAYb4QgEBBAQDAgEGMDcGA1UdHwQwMC4wLKAqoCiGJmh0dHA6Ly93d3cuY2VydHBsdXMuY29t
|
1789 |
+
L0NSTC9jbGFzczIuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQCnVM+IRBnL39R/AN9WM2K191EBkOvD
|
1790 |
+
P9GIROkkXe/nFL0gt5o8AP5tn9uQ3Nf0YtaLcF3n5QRIqWh8yfFC82x/xXp8HVGIutIKPidd3i1R
|
1791 |
+
TtMTZGnkLuPT55sJmabglZvOGtd/vjzOUrMRFcEPF80Du5wlFbqidon8BvEY0JNLDnyCt6X09l/+
|
1792 |
+
7UCmnYR0ObncHoUW2ikbhiMAybuJfm6AiB4vFLQDJKgybwOaRywwvlbGp0ICcBvqQNi6BQNwB6SW
|
1793 |
+
//1IMwrh3KWBkJtN3X3n57LNXMhqlfil9o3EXXgIvnsG1knPGTZQIy4I5p4FTUcY1Rbpsda2ENW7
|
1794 |
+
l7+ijrRU
|
1795 |
+
-----END CERTIFICATE-----
|
1796 |
+
|
1797 |
+
DST Root CA X3
|
1798 |
+
==============
|
1799 |
+
-----BEGIN CERTIFICATE-----
|
1800 |
+
MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/MSQwIgYDVQQK
|
1801 |
+
ExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMTDkRTVCBSb290IENBIFgzMB4X
|
1802 |
+
DTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVowPzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1
|
1803 |
+
cmUgVHJ1c3QgQ28uMRcwFQYDVQQDEw5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQAD
|
1804 |
+
ggEPADCCAQoCggEBAN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmT
|
1805 |
+
rE4Orz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEqOLl5CjH9
|
1806 |
+
UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9bxiqKqy69cK3FCxolkHRy
|
1807 |
+
xXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40d
|
1808 |
+
utolucbY38EVAjqr2m7xPi71XAicPNaDaeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0T
|
1809 |
+
AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQ
|
1810 |
+
MA0GCSqGSIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69ikug
|
1811 |
+
dB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXrAvHRAosZy5Q6XkjE
|
1812 |
+
GB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZzR8srzJmwN0jP41ZL9c8PDHIyh8bw
|
1813 |
+
RLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubS
|
1814 |
+
fZGL+T0yjWW06XyxV3bqxbYoOb8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ
|
1815 |
+
-----END CERTIFICATE-----
|
1816 |
+
|
1817 |
+
DST ACES CA X6
|
1818 |
+
==============
|
1819 |
+
-----BEGIN CERTIFICATE-----
|
1820 |
+
MIIECTCCAvGgAwIBAgIQDV6ZCtadt3js2AdWO4YV2TANBgkqhkiG9w0BAQUFADBbMQswCQYDVQQG
|
1821 |
+
EwJVUzEgMB4GA1UEChMXRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QxETAPBgNVBAsTCERTVCBBQ0VT
|
1822 |
+
MRcwFQYDVQQDEw5EU1QgQUNFUyBDQSBYNjAeFw0wMzExMjAyMTE5NThaFw0xNzExMjAyMTE5NTha
|
1823 |
+
MFsxCzAJBgNVBAYTAlVTMSAwHgYDVQQKExdEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdDERMA8GA1UE
|
1824 |
+
CxMIRFNUIEFDRVMxFzAVBgNVBAMTDkRTVCBBQ0VTIENBIFg2MIIBIjANBgkqhkiG9w0BAQEFAAOC
|
1825 |
+
AQ8AMIIBCgKCAQEAuT31LMmU3HWKlV1j6IR3dma5WZFcRt2SPp/5DgO0PWGSvSMmtWPuktKe1jzI
|
1826 |
+
DZBfZIGxqAgNTNj50wUoUrQBJcWVHAx+PhCEdc/BGZFjz+iokYi5Q1K7gLFViYsx+tC3dr5BPTCa
|
1827 |
+
pCIlF3PoHuLTrCq9Wzgh1SpL11V94zpVvddtawJXa+ZHfAjIgrrep4c9oW24MFbCswKBXy314pow
|
1828 |
+
GCi4ZtPLAZZv6opFVdbgnf9nKxcCpk4aahELfrd755jWjHZvwTvbUJN+5dCOHze4vbrGn2zpfDPy
|
1829 |
+
MjwmR/onJALJfh1biEITajV8fTXpLmaRcpPVMibEdPVTo7NdmvYJywIDAQABo4HIMIHFMA8GA1Ud
|
1830 |
+
EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgHGMB8GA1UdEQQYMBaBFHBraS1vcHNAdHJ1c3Rkc3Qu
|
1831 |
+
Y29tMGIGA1UdIARbMFkwVwYKYIZIAWUDAgEBATBJMEcGCCsGAQUFBwIBFjtodHRwOi8vd3d3LnRy
|
1832 |
+
dXN0ZHN0LmNvbS9jZXJ0aWZpY2F0ZXMvcG9saWN5L0FDRVMtaW5kZXguaHRtbDAdBgNVHQ4EFgQU
|
1833 |
+
CXIGThhDD+XWzMNqizF7eI+og7gwDQYJKoZIhvcNAQEFBQADggEBAKPYjtay284F5zLNAdMEA+V2
|
1834 |
+
5FYrnJmQ6AgwbN99Pe7lv7UkQIRJ4dEorsTCOlMwiPH1d25Ryvr/ma8kXxug/fKshMrfqfBfBC6t
|
1835 |
+
Fr8hlxCBPeP/h40y3JTlR4peahPJlJU90u7INJXQgNStMgiAVDzgvVJT11J8smk/f3rPanTK+gQq
|
1836 |
+
nExaBqXpIK1FZg9p8d2/6eMyi/rgwYZNcjwu2JN4Cir42NInPRmJX1p7ijvMDNpRrscL9yuwNwXs
|
1837 |
+
vFcj4jjSm2jzVhKIT0J8uDHEtdvkyCE06UgRNe76x5JXxZ805Mf29w4LTJxoeHtxMcfrHuBnQfO3
|
1838 |
+
oKfN5XozNmr6mis=
|
1839 |
+
-----END CERTIFICATE-----
|
1840 |
+
|
1841 |
+
TURKTRUST Certificate Services Provider Root 1
|
1842 |
+
==============================================
|
1843 |
+
-----BEGIN CERTIFICATE-----
|
1844 |
+
MIID+zCCAuOgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBtzE/MD0GA1UEAww2VMOcUktUUlVTVCBF
|
1845 |
+
bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGDAJUUjEP
|
1846 |
+
MA0GA1UEBwwGQU5LQVJBMVYwVAYDVQQKDE0oYykgMjAwNSBUw5xSS1RSVVNUIEJpbGdpIMSwbGV0
|
1847 |
+
acWfaW0gdmUgQmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLjAeFw0wNTA1MTMx
|
1848 |
+
MDI3MTdaFw0xNTAzMjIxMDI3MTdaMIG3MT8wPQYDVQQDDDZUw5xSS1RSVVNUIEVsZWt0cm9uaWsg
|
1849 |
+
U2VydGlmaWthIEhpem1ldCBTYcSfbGF5xLFjxLFzxLExCzAJBgNVBAYMAlRSMQ8wDQYDVQQHDAZB
|
1850 |
+
TktBUkExVjBUBgNVBAoMTShjKSAyMDA1IFTDnFJLVFJVU1QgQmlsZ2kgxLBsZXRpxZ9pbSB2ZSBC
|
1851 |
+
aWxpxZ9pbSBHw7x2ZW5sacSfaSBIaXptZXRsZXJpIEEuxZ4uMIIBIjANBgkqhkiG9w0BAQEFAAOC
|
1852 |
+
AQ8AMIIBCgKCAQEAylIF1mMD2Bxf3dJ7XfIMYGFbazt0K3gNfUW9InTojAPBxhEqPZW8qZSwu5GX
|
1853 |
+
yGl8hMW0kWxsE2qkVa2kheiVfrMArwDCBRj1cJ02i67L5BuBf5OI+2pVu32Fks66WJ/bMsW9Xe8i
|
1854 |
+
Si9BB35JYbOG7E6mQW6EvAPs9TscyB/C7qju6hJKjRTP8wrgUDn5CDX4EVmt5yLqS8oUBt5CurKZ
|
1855 |
+
8y1UiBAG6uEaPj1nH/vO+3yC6BFdSsG5FOpU2WabfIl9BJpiyelSPJ6c79L1JuTm5Rh8i27fbMx4
|
1856 |
+
W09ysstcP4wFjdFMjK2Sx+F4f2VsSQZQLJ4ywtdKxnWKWU51b0dewQIDAQABoxAwDjAMBgNVHRME
|
1857 |
+
BTADAQH/MA0GCSqGSIb3DQEBBQUAA4IBAQAV9VX/N5aAWSGk/KEVTCD21F/aAyT8z5Aa9CEKmu46
|
1858 |
+
sWrv7/hg0Uw2ZkUd82YCdAR7kjCo3gp2D++Vbr3JN+YaDayJSFvMgzbC9UZcWYJWtNX+I7TYVBxE
|
1859 |
+
q8Sn5RTOPEFhfEPmzcSBCYsk+1Ql1haolgxnB2+zUEfjHCQo3SqYpGH+2+oSN7wBGjSFvW5P55Fy
|
1860 |
+
B0SFHljKVETd96y5y4khctuPwGkplyqjrhgjlxxBKot8KsF8kOipKMDTkcatKIdAaLX/7KfS0zgY
|
1861 |
+
nNN9aV3wxqUeJBujR/xpB2jn5Jq07Q+hh4cCzofSSE7hvP/L8XKSRGQDJereW26fyfJOrN3H
|
1862 |
+
-----END CERTIFICATE-----
|
1863 |
+
|
1864 |
+
TURKTRUST Certificate Services Provider Root 2
|
1865 |
+
==============================================
|
1866 |
+
-----BEGIN CERTIFICATE-----
|
1867 |
+
MIIEPDCCAySgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBvjE/MD0GA1UEAww2VMOcUktUUlVTVCBF
|
1868 |
+
bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJUUjEP
|
1869 |
+
MA0GA1UEBwwGQW5rYXJhMV0wWwYDVQQKDFRUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUg
|
1870 |
+
QmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLiAoYykgS2FzxLFtIDIwMDUwHhcN
|
1871 |
+
MDUxMTA3MTAwNzU3WhcNMTUwOTE2MTAwNzU3WjCBvjE/MD0GA1UEAww2VMOcUktUUlVTVCBFbGVr
|
1872 |
+
dHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJUUjEPMA0G
|
1873 |
+
A1UEBwwGQW5rYXJhMV0wWwYDVQQKDFRUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmls
|
1874 |
+
acWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLiAoYykgS2FzxLFtIDIwMDUwggEiMA0G
|
1875 |
+
CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCpNn7DkUNMwxmYCMjHWHtPFoylzkkBH3MOrHUTpvqe
|
1876 |
+
LCDe2JAOCtFp0if7qnefJ1Il4std2NiDUBd9irWCPwSOtNXwSadktx4uXyCcUHVPr+G1QRT0mJKI
|
1877 |
+
x+XlZEdhR3n9wFHxwZnn3M5q+6+1ATDcRhzviuyV79z/rxAc653YsKpqhRgNF8k+v/Gb0AmJQv2g
|
1878 |
+
QrSdiVFVKc8bcLyEVK3BEx+Y9C52YItdP5qtygy/p1Zbj3e41Z55SZI/4PGXJHpsmxcPbe9TmJEr
|
1879 |
+
5A++WXkHeLuXlfSfadRYhwqp48y2WBmfJiGxxFmNskF1wK1pzpwACPI2/z7woQ8arBT9pmAPAgMB
|
1880 |
+
AAGjQzBBMB0GA1UdDgQWBBTZN7NOBf3Zz58SFq62iS/rJTqIHDAPBgNVHQ8BAf8EBQMDBwYAMA8G
|
1881 |
+
A1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAHJglrfJ3NgpXiOFX7KzLXb7iNcX/ntt
|
1882 |
+
Rbj2hWyfIvwqECLsqrkw9qtY1jkQMZkpAL2JZkH7dN6RwRgLn7Vhy506vvWolKMiVW4XSf/SKfE4
|
1883 |
+
Jl3vpao6+XF75tpYHdN0wgH6PmlYX63LaL4ULptswLbcoCb6dxriJNoaN+BnrdFzgw2lGh1uEpJ+
|
1884 |
+
hGIAF728JRhX8tepb1mIvDS3LoV4nZbcFMMsilKbloxSZj2GFotHuFEJjOp9zYhys2AzsfAKRO8P
|
1885 |
+
9Qk3iCQOLGsgOqL6EfJANZxEaGM7rDNvY7wsu/LSy3Z9fYjYHcgFHW68lKlmjHdxx/qR+i9Rnuk5
|
1886 |
+
UrbnBEI=
|
1887 |
+
-----END CERTIFICATE-----
|
1888 |
+
|
1889 |
+
SwissSign Platinum CA - G2
|
1890 |
+
==========================
|
1891 |
+
-----BEGIN CERTIFICATE-----
|
1892 |
+
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
|
1918 |
+
-----END CERTIFICATE-----
|
1919 |
+
|
1920 |
+
SwissSign Gold CA - G2
|
1921 |
+
======================
|
1922 |
+
-----BEGIN CERTIFICATE-----
|
1923 |
+
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
|
1949 |
+
-----END CERTIFICATE-----
|
1950 |
+
|
1951 |
+
SwissSign Silver CA - G2
|
1952 |
+
========================
|
1953 |
+
-----BEGIN CERTIFICATE-----
|
1954 |
+
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
|
1980 |
+
-----END CERTIFICATE-----
|
1981 |
+
|
1982 |
+
GeoTrust Primary Certification Authority
|
1983 |
+
========================================
|
1984 |
+
-----BEGIN CERTIFICATE-----
|
1985 |
+
MIIDfDCCAmSgAwIBAgIQGKy1av1pthU6Y2yv2vrEoTANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQG
|
1986 |
+
EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjExMC8GA1UEAxMoR2VvVHJ1c3QgUHJpbWFyeSBD
|
1987 |
+
ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjExMjcwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMFgx
|
1988 |
+
CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTEwLwYDVQQDEyhHZW9UcnVzdCBQ
|
1989 |
+
cmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
|
1990 |
+
CgKCAQEAvrgVe//UfH1nrYNke8hCUy3f9oQIIGHWAVlqnEQRr+92/ZV+zmEwu3qDXwK9AWbK7hWN
|
1991 |
+
b6EwnL2hhZ6UOvNWiAAxz9juapYC2e0DjPt1befquFUWBRaa9OBesYjAZIVcFU2Ix7e64HXprQU9
|
1992 |
+
nceJSOC7KMgD4TCTZF5SwFlwIjVXiIrxlQqD17wxcwE07e9GceBrAqg1cmuXm2bgyxx5X9gaBGge
|
1993 |
+
RwLmnWDiNpcB3841kt++Z8dtd1k7j53WkBWUvEI0EME5+bEnPn7WinXFsq+W06Lem+SYvn3h6YGt
|
1994 |
+
tm/81w7a4DSwDRp35+MImO9Y+pyEtzavwt+s0vQQBnBxNQIDAQABo0IwQDAPBgNVHRMBAf8EBTAD
|
1995 |
+
AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQULNVQQZcVi/CPNmFbSvtr2ZnJM5IwDQYJKoZI
|
1996 |
+
hvcNAQEFBQADggEBAFpwfyzdtzRP9YZRqSa+S7iq8XEN3GHHoOo0Hnp3DwQ16CePbJC/kRYkRj5K
|
1997 |
+
Ts4rFtULUh38H2eiAkUxT87z+gOneZ1TatnaYzr4gNfTmeGl4b7UVXGYNTq+k+qurUKykG/g/CFN
|
1998 |
+
NWMziUnWm07Kx+dOCQD32sfvmWKZd7aVIl6KoKv0uHiYyjgZmclynnjNS6yvGaBzEi38wkG6gZHa
|
1999 |
+
Floxt/m0cYASSJlyc1pZU8FjUjPtp8nSOQJw+uCxQmYpqptR7TBUIhRf2asdweSU8Pj1K/fqynhG
|
2000 |
+
1riR/aYNKxoUAT6A8EKglQdebc3MS6RFjasS6LPeWuWgfOgPIh1a6Vk=
|
2001 |
+
-----END CERTIFICATE-----
|
2002 |
+
|
2003 |
+
thawte Primary Root CA
|
2004 |
+
======================
|
2005 |
+
-----BEGIN CERTIFICATE-----
|
2006 |
+
MIIEIDCCAwigAwIBAgIQNE7VVyDV7exJ9C/ON9srbTANBgkqhkiG9w0BAQUFADCBqTELMAkGA1UE
|
2007 |
+
BhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2
|
2008 |
+
aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhv
|
2009 |
+
cml6ZWQgdXNlIG9ubHkxHzAdBgNVBAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwHhcNMDYxMTE3
|
2010 |
+
MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCBqTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwg
|
2011 |
+
SW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMv
|
2012 |
+
KGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNVBAMT
|
2013 |
+
FnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCs
|
2014 |
+
oPD7gFnUnMekz52hWXMJEEUMDSxuaPFsW0hoSVk3/AszGcJ3f8wQLZU0HObrTQmnHNK4yZc2AreJ
|
2015 |
+
1CRfBsDMRJSUjQJib+ta3RGNKJpchJAQeg29dGYvajig4tVUROsdB58Hum/u6f1OCyn1PoSgAfGc
|
2016 |
+
q/gcfomk6KHYcWUNo1F77rzSImANuVud37r8UVsLr5iy6S7pBOhih94ryNdOwUxkHt3Ph1i6Sk/K
|
2017 |
+
aAcdHJ1KxtUvkcx8cXIcxcBn6zL9yZJclNqFwJu/U30rCfSMnZEfl2pSy94JNqR32HuHUETVPm4p
|
2018 |
+
afs5SSYeCaWAe0At6+gnhcn+Yf1+5nyXHdWdAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYD
|
2019 |
+
VR0PAQH/BAQDAgEGMB0GA1UdDgQWBBR7W0XPr87Lev0xkhpqtvNG61dIUDANBgkqhkiG9w0BAQUF
|
2020 |
+
AAOCAQEAeRHAS7ORtvzw6WfUDW5FvlXok9LOAz/t2iWwHVfLHjp2oEzsUHboZHIMpKnxuIvW1oeE
|
2021 |
+
uzLlQRHAd9mzYJ3rG9XRbkREqaYB7FViHXe4XI5ISXycO1cRrK1zN44veFyQaEfZYGDm/Ac9IiAX
|
2022 |
+
xPcW6cTYcvnIc3zfFi8VqT79aie2oetaupgf1eNNZAqdE8hhuvU5HIe6uL17In/2/qxAeeWsEG89
|
2023 |
+
jxt5dovEN7MhGITlNgDrYyCZuen+MwS7QcjBAvlEYyCegc5C09Y/LHbTY5xZ3Y+m4Q6gLkH3LpVH
|
2024 |
+
z7z9M/P2C2F+fpErgUfCJzDupxBdN49cOSvkBPB7jVaMaA==
|
2025 |
+
-----END CERTIFICATE-----
|
2026 |
+
|
2027 |
+
VeriSign Class 3 Public Primary Certification Authority - G5
|
2028 |
+
============================================================
|
2029 |
+
-----BEGIN CERTIFICATE-----
|
2030 |
+
MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCByjELMAkGA1UE
|
2031 |
+
BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBO
|
2032 |
+
ZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVk
|
2033 |
+
IHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRp
|
2034 |
+
ZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCB
|
2035 |
+
yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2ln
|
2036 |
+
biBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZvciBh
|
2037 |
+
dXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmlt
|
2038 |
+
YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
|
2039 |
+
ggEKAoIBAQCvJAgIKXo1nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKz
|
2040 |
+
j/i5Vbext0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIzSdhD
|
2041 |
+
Y2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQGBO+QueQA5N06tRn/
|
2042 |
+
Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+rCpSx4/VBEnkjWNHiDxpg8v+R70r
|
2043 |
+
fk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/
|
2044 |
+
BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2Uv
|
2045 |
+
Z2lmMCEwHzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy
|
2046 |
+
aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKvMzEzMA0GCSqG
|
2047 |
+
SIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzEp6B4Eq1iDkVwZMXnl2YtmAl+
|
2048 |
+
X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKE
|
2049 |
+
KQsTb47bDN0lAtukixlE0kF6BWlKWE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiC
|
2050 |
+
Km0oHw0LxOXnGiYZ4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vE
|
2051 |
+
ZV8NhnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq
|
2052 |
+
-----END CERTIFICATE-----
|
2053 |
+
|
2054 |
+
SecureTrust CA
|
2055 |
+
==============
|
2056 |
+
-----BEGIN CERTIFICATE-----
|
2057 |
+
MIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBIMQswCQYDVQQG
|
2058 |
+
EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xFzAVBgNVBAMTDlNlY3VyZVRy
|
2059 |
+
dXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIzMTE5NDA1NVowSDELMAkGA1UEBhMCVVMxIDAe
|
2060 |
+
BgNVBAoTF1NlY3VyZVRydXN0IENvcnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTCC
|
2061 |
+
ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7CT8rU4niVWJxB4Q2ZQCQX
|
2062 |
+
OZEzZum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/jep4G6pkjGnx29vo6pQT64lO0pGtSO0gMdA+9t
|
2063 |
+
DWccV9cGrcrI9f4Or2YlSASWC12juhbDCE/RRvgUXPLIXgGZbf2IzIaowW8xQmxSPmjL8xk037uH
|
2064 |
+
GFaAJsTQ3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj7DaUaHp3pLHnDi+BeuK1cobvomuL8A/b
|
2065 |
+
01k/unK8RCSc43Oz969XL0Imnal0ugBS8kvNU3xHCzaFDmapCJcWNFfBZveA4+1wVMeT4C4oFVmH
|
2066 |
+
ursCAwEAAaOBnTCBmjATBgkrBgEEAYI3FAIEBh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/
|
2067 |
+
BAUwAwEB/zAdBgNVHQ4EFgQUQjK2FvoE/f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCegJYYj
|
2068 |
+
aHR0cDovL2NybC5zZWN1cmV0cnVzdC5jb20vU1RDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQAwDQYJ
|
2069 |
+
KoZIhvcNAQEFBQADggEBADDtT0rhWDpSclu1pqNlGKa7UTt36Z3q059c4EVlew3KW+JwULKUBRSu
|
2070 |
+
SceNQQcSc5R+DCMh/bwQf2AQWnL1mA6s7Ll/3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHf
|
2071 |
+
mbx8IVQr5Fiiu1cprp6poxkmD5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZ
|
2072 |
+
nMUFdAvnZyPSCPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR
|
2073 |
+
3ItHuuG51WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShLHZ4swrhovO0C7jE=
|
2074 |
+
-----END CERTIFICATE-----
|
2075 |
+
|
2076 |
+
Secure Global CA
|
2077 |
+
================
|
2078 |
+
-----BEGIN CERTIFICATE-----
|
2079 |
+
MIIDvDCCAqSgAwIBAgIQB1YipOjUiolN9BPI8PjqpTANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQG
|
2080 |
+
EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBH
|
2081 |
+
bG9iYWwgQ0EwHhcNMDYxMTA3MTk0MjI4WhcNMjkxMjMxMTk1MjA2WjBKMQswCQYDVQQGEwJVUzEg
|
2082 |
+
MB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwg
|
2083 |
+
Q0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvNS7YrGxVaQZx5RNoJLNP2MwhR/jx
|
2084 |
+
YDiJiQPpvepeRlMJ3Fz1Wuj3RSoC6zFh1ykzTM7HfAo3fg+6MpjhHZevj8fcyTiW89sa/FHtaMbQ
|
2085 |
+
bqR8JNGuQsiWUGMu4P51/pinX0kuleM5M2SOHqRfkNJnPLLZ/kG5VacJjnIFHovdRIWCQtBJwB1g
|
2086 |
+
8NEXLJXr9qXBkqPFwqcIYA1gBBCWeZ4WNOaptvolRTnIHmX5k/Wq8VLcmZg9pYYaDDUz+kulBAYV
|
2087 |
+
HDGA76oYa8J719rO+TMg1fW9ajMtgQT7sFzUnKPiXB3jqUJ1XnvUd+85VLrJChgbEplJL4hL/VBi
|
2088 |
+
0XPnj3pDAgMBAAGjgZ0wgZowEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud
|
2089 |
+
EwEB/wQFMAMBAf8wHQYDVR0OBBYEFK9EBMJBfkiD2045AuzshHrmzsmkMDQGA1UdHwQtMCswKaAn
|
2090 |
+
oCWGI2h0dHA6Ly9jcmwuc2VjdXJldHJ1c3QuY29tL1NHQ0EuY3JsMBAGCSsGAQQBgjcVAQQDAgEA
|
2091 |
+
MA0GCSqGSIb3DQEBBQUAA4IBAQBjGghAfaReUw132HquHw0LURYD7xh8yOOvaliTFGCRsoTciE6+
|
2092 |
+
OYo68+aCiV0BN7OrJKQVDpI1WkpEXk5X+nXOH0jOZvQ8QCaSmGwb7iRGDBezUqXbpZGRzzfTb+cn
|
2093 |
+
CDpOGR86p1hcF895P4vkp9MmI50mD1hp/Ed+stCNi5O/KU9DaXR2Z0vPB4zmAve14bRDtUstFJ/5
|
2094 |
+
3CYNv6ZHdAbYiNE6KTCEztI5gGIbqMdXSbxqVVFnFUq+NQfk1XWYN3kwFNspnWzFacxHVaIw98xc
|
2095 |
+
f8LDmBxrThaA63p4ZUWiABqvDA1VZDRIuJK58bRQKfJPIx/abKwfROHdI3hRW8cW
|
2096 |
+
-----END CERTIFICATE-----
|
2097 |
+
|
2098 |
+
COMODO Certification Authority
|
2099 |
+
==============================
|
2100 |
+
-----BEGIN CERTIFICATE-----
|
2101 |
+
MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCBgTELMAkGA1UE
|
2102 |
+
BhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgG
|
2103 |
+
A1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNVBAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1
|
2104 |
+
dGhvcml0eTAeFw0wNjEyMDEwMDAwMDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEb
|
2105 |
+
MBkGA1UECBMSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFD
|
2106 |
+
T01PRE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0aG9yaXR5
|
2107 |
+
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3UcEbVASY06m/weaKXTuH
|
2108 |
+
+7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI2GqGd0S7WWaXUF601CxwRM/aN5VCaTww
|
2109 |
+
xHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV
|
2110 |
+
4EajcNxo2f8ESIl33rXp+2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA
|
2111 |
+
1KGzqSX+DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5OnKVI
|
2112 |
+
rLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW/zAOBgNVHQ8BAf8E
|
2113 |
+
BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6gPKA6hjhodHRwOi8vY3JsLmNvbW9k
|
2114 |
+
b2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9uQXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOC
|
2115 |
+
AQEAPpiem/Yb6dc5t3iuHXIYSdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CP
|
2116 |
+
OGEIqB6BCsAvIC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/
|
2117 |
+
RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4zJVSk/BwJVmc
|
2118 |
+
IGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5ddBA6+C4OmF4O5MBKgxTMVBbkN
|
2119 |
+
+8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IBZQ==
|
2120 |
+
-----END CERTIFICATE-----
|
2121 |
+
|
2122 |
+
Network Solutions Certificate Authority
|
2123 |
+
=======================================
|
2124 |
+
-----BEGIN CERTIFICATE-----
|
2125 |
+
MIID5jCCAs6gAwIBAgIQV8szb8JcFuZHFhfjkDFo4DANBgkqhkiG9w0BAQUFADBiMQswCQYDVQQG
|
2126 |
+
EwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMuMTAwLgYDVQQDEydOZXR3b3Jr
|
2127 |
+
IFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDYxMjAxMDAwMDAwWhcNMjkxMjMx
|
2128 |
+
MjM1OTU5WjBiMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMu
|
2129 |
+
MTAwLgYDVQQDEydOZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0G
|
2130 |
+
CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkvH6SMG3G2I4rC7xGzuAnlt7e+foS0zwzc7MEL7xx
|
2131 |
+
jOWftiJgPl9dzgn/ggwbmlFQGiaJ3dVhXRncEg8tCqJDXRfQNJIg6nPPOCwGJgl6cvf6UDL4wpPT
|
2132 |
+
aaIjzkGxzOTVHzbRijr4jGPiFFlp7Q3Tf2vouAPlT2rlmGNpSAW+Lv8ztumXWWn4Zxmuk2GWRBXT
|
2133 |
+
crA/vGp97Eh/jcOrqnErU2lBUzS1sLnFBgrEsEX1QV1uiUV7PTsmjHTC5dLRfbIR1PtYMiKagMnc
|
2134 |
+
/Qzpf14Dl847ABSHJ3A4qY5usyd2mFHgBeMhqxrVhSI8KbWaFsWAqPS7azCPL0YCorEMIuDTAgMB
|
2135 |
+
AAGjgZcwgZQwHQYDVR0OBBYEFCEwyfsA106Y2oeqKtCnLrFAMadMMA4GA1UdDwEB/wQEAwIBBjAP
|
2136 |
+
BgNVHRMBAf8EBTADAQH/MFIGA1UdHwRLMEkwR6BFoEOGQWh0dHA6Ly9jcmwubmV0c29sc3NsLmNv
|
2137 |
+
bS9OZXR3b3JrU29sdXRpb25zQ2VydGlmaWNhdGVBdXRob3JpdHkuY3JsMA0GCSqGSIb3DQEBBQUA
|
2138 |
+
A4IBAQC7rkvnt1frf6ott3NHhWrB5KUd5Oc86fRZZXe1eltajSU24HqXLjjAV2CDmAaDn7l2em5Q
|
2139 |
+
4LqILPxFzBiwmZVRDuwduIj/h1AcgsLj4DKAv6ALR8jDMe+ZZzKATxcheQxpXN5eNK4CtSbqUN9/
|
2140 |
+
GGUsyfJj4akH/nxxH2szJGoeBfcFaMBqEssuXmHLrijTfsK0ZpEmXzwuJF/LWA/rKOyvEZbz3Htv
|
2141 |
+
wKeI8lN3s2Berq4o2jUsbzRF0ybh3uxbTydrFny9RAQYgrOJeRcQcT16ohZO9QHNpGxlaKFJdlxD
|
2142 |
+
ydi8NmdspZS11My5vWo1ViHe2MPr+8ukYEywVaCge1ey
|
2143 |
+
-----END CERTIFICATE-----
|
2144 |
+
|
2145 |
+
WellsSecure Public Root Certificate Authority
|
2146 |
+
=============================================
|
2147 |
+
-----BEGIN CERTIFICATE-----
|
2148 |
+
MIIEvTCCA6WgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoM
|
2149 |
+
F1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYw
|
2150 |
+
NAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcN
|
2151 |
+
MDcxMjEzMTcwNzU0WhcNMjIxMjE0MDAwNzU0WjCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoMF1dl
|
2152 |
+
bGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYD
|
2153 |
+
VQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0G
|
2154 |
+
CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDub7S9eeKPCCGeOARBJe+rWxxTkqxtnt3CxC5FlAM1
|
2155 |
+
iGd0V+PfjLindo8796jE2yljDpFoNoqXjopxaAkH5OjUDk/41itMpBb570OYj7OeUt9tkTmPOL13
|
2156 |
+
i0Nj67eT/DBMHAGTthP796EfvyXhdDcsHqRePGj4S78NuR4uNuip5Kf4D8uCdXw1LSLWwr8L87T8
|
2157 |
+
bJVhHlfXBIEyg1J55oNjz7fLY4sR4r1e6/aN7ZVyKLSsEmLpSjPmgzKuBXWVvYSV2ypcm44uDLiB
|
2158 |
+
K0HmOFafSZtsdvqKXfcBeYF8wYNABf5x/Qw/zE5gCQ5lRxAvAcAFP4/4s0HvWkJ+We/SlwxlAgMB
|
2159 |
+
AAGjggE0MIIBMDAPBgNVHRMBAf8EBTADAQH/MDkGA1UdHwQyMDAwLqAsoCqGKGh0dHA6Ly9jcmwu
|
2160 |
+
cGtpLndlbGxzZmFyZ28uY29tL3dzcHJjYS5jcmwwDgYDVR0PAQH/BAQDAgHGMB0GA1UdDgQWBBQm
|
2161 |
+
lRkQ2eihl5H/3BnZtQQ+0nMKajCBsgYDVR0jBIGqMIGngBQmlRkQ2eihl5H/3BnZtQQ+0nMKaqGB
|
2162 |
+
i6SBiDCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoMF1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRww
|
2163 |
+
GgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMg
|
2164 |
+
Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHmCAQEwDQYJKoZIhvcNAQEFBQADggEBALkVsUSRzCPI
|
2165 |
+
K0134/iaeycNzXK7mQDKfGYZUMbVmO2rvwNa5U3lHshPcZeG1eMd/ZDJPHV3V3p9+N701NX3leZ0
|
2166 |
+
bh08rnyd2wIDBSxxSyU+B+NemvVmFymIGjifz6pBA4SXa5M4esowRBskRDPQ5NHcKDj0E0M1NSlj
|
2167 |
+
qHyita04pO2t/caaH/+Xc/77szWnk4bGdpEA5qxRFsQnMlzbc9qlk1eOPm01JghZ1edE13YgY+es
|
2168 |
+
E2fDbbFwRnzVlhE9iW9dqKHrjQrawx0zbKPqZxmamX9LPYNRKh3KL4YMon4QLSvUFpULB6ouFJJJ
|
2169 |
+
tylv2G0xffX8oRAHh84vWdw+WNs=
|
2170 |
+
-----END CERTIFICATE-----
|
2171 |
+
|
2172 |
+
COMODO ECC Certification Authority
|
2173 |
+
==================================
|
2174 |
+
-----BEGIN CERTIFICATE-----
|
2175 |
+
MIICiTCCAg+gAwIBAgIQH0evqmIAcFBUTAGem2OZKjAKBggqhkjOPQQDAzCBhTELMAkGA1UEBhMC
|
2176 |
+
R0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UE
|
2177 |
+
ChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBB
|
2178 |
+
dXRob3JpdHkwHhcNMDgwMzA2MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0Ix
|
2179 |
+
GzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMR
|
2180 |
+
Q09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRo
|
2181 |
+
b3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQDR3svdcmCFYX7deSRFtSrYpn1PlILBs5BAH+X
|
2182 |
+
4QokPB0BBO490o0JlwzgdeT6+3eKKvUDYEs2ixYjFq0JcfRK9ChQtP6IHG4/bC8vCVlbpVsLM5ni
|
2183 |
+
wz2J+Wos77LTBumjQjBAMB0GA1UdDgQWBBR1cacZSBm8nZ3qQUfflMRId5nTeTAOBgNVHQ8BAf8E
|
2184 |
+
BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjEA7wNbeqy3eApyt4jf/7VG
|
2185 |
+
FAkK+qDmfQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdvGDeA
|
2186 |
+
U/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY=
|
2187 |
+
-----END CERTIFICATE-----
|
2188 |
+
|
2189 |
+
IGC/A
|
2190 |
+
=====
|
2191 |
+
-----BEGIN CERTIFICATE-----
|
2192 |
+
MIIEAjCCAuqgAwIBAgIFORFFEJQwDQYJKoZIhvcNAQEFBQAwgYUxCzAJBgNVBAYTAkZSMQ8wDQYD
|
2193 |
+
VQQIEwZGcmFuY2UxDjAMBgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQTS9TR0ROMQ4wDAYDVQQLEwVE
|
2194 |
+
Q1NTSTEOMAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2LmZy
|
2195 |
+
MB4XDTAyMTIxMzE0MjkyM1oXDTIwMTAxNzE0MjkyMlowgYUxCzAJBgNVBAYTAkZSMQ8wDQYDVQQI
|
2196 |
+
EwZGcmFuY2UxDjAMBgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQTS9TR0ROMQ4wDAYDVQQLEwVEQ1NT
|
2197 |
+
STEOMAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2LmZyMIIB
|
2198 |
+
IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsh/R0GLFMzvABIaIs9z4iPf930Pfeo2aSVz2
|
2199 |
+
TqrMHLmh6yeJ8kbpO0px1R2OLc/mratjUMdUC24SyZA2xtgv2pGqaMVy/hcKshd+ebUyiHDKcMCW
|
2200 |
+
So7kVc0dJ5S/znIq7Fz5cyD+vfcuiWe4u0dzEvfRNWk68gq5rv9GQkaiv6GFGvm/5P9JhfejcIYy
|
2201 |
+
HF2fYPepraX/z9E0+X1bF8bc1g4oa8Ld8fUzaJ1O/Id8NhLWo4DoQw1VYZTqZDdH6nfK0LJYBcNd
|
2202 |
+
frGoRpAxVs5wKpayMLh35nnAvSk7/ZR3TL0gzUEl4C7HG7vupARB0l2tEmqKm0f7yd1GQOGdPDPQ
|
2203 |
+
tQIDAQABo3cwdTAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIBRjAVBgNVHSAEDjAMMAoGCCqB
|
2204 |
+
egF5AQEBMB0GA1UdDgQWBBSjBS8YYFDCiQrdKyFP/45OqDAxNjAfBgNVHSMEGDAWgBSjBS8YYFDC
|
2205 |
+
iQrdKyFP/45OqDAxNjANBgkqhkiG9w0BAQUFAAOCAQEABdwm2Pp3FURo/C9mOnTgXeQp/wYHE4RK
|
2206 |
+
q89toB9RlPhJy3Q2FLwV3duJL92PoF189RLrn544pEfMs5bZvpwlqwN+Mw+VgQ39FuCIvjfwbF3Q
|
2207 |
+
MZsyK10XZZOYYLxuj7GoPB7ZHPOpJkL5ZB3C55L29B5aqhlSXa/oovdgoPaN8In1buAKBQGVyYsg
|
2208 |
+
Crpa/JosPL3Dt8ldeCUFP1YUmwza+zpI/pdpXsoQhvdOlgQITeywvl3cO45Pwf2aNjSaTFR+FwNI
|
2209 |
+
lQgRHAdvhQh+XU3Endv7rs6y0bO4g2wdsrN58dhwmX7wEwLOXt1R0982gaEbeC9xs/FZTEYYKKuF
|
2210 |
+
0mBWWg==
|
2211 |
+
-----END CERTIFICATE-----
|
2212 |
+
|
2213 |
+
Security Communication EV RootCA1
|
2214 |
+
=================================
|
2215 |
+
-----BEGIN CERTIFICATE-----
|
2216 |
+
MIIDfTCCAmWgAwIBAgIBADANBgkqhkiG9w0BAQUFADBgMQswCQYDVQQGEwJKUDElMCMGA1UEChMc
|
2217 |
+
U0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEqMCgGA1UECxMhU2VjdXJpdHkgQ29tbXVuaWNh
|
2218 |
+
dGlvbiBFViBSb290Q0ExMB4XDTA3MDYwNjAyMTIzMloXDTM3MDYwNjAyMTIzMlowYDELMAkGA1UE
|
2219 |
+
BhMCSlAxJTAjBgNVBAoTHFNFQ09NIFRydXN0IFN5c3RlbXMgQ08uLExURC4xKjAoBgNVBAsTIVNl
|
2220 |
+
Y3VyaXR5IENvbW11bmljYXRpb24gRVYgUm9vdENBMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
|
2221 |
+
AQoCggEBALx/7FebJOD+nLpCeamIivqA4PUHKUPqjgo0No0c+qe1OXj/l3X3L+SqawSERMqm4miO
|
2222 |
+
/VVQYg+kcQ7OBzgtQoVQrTyWb4vVog7P3kmJPdZkLjjlHmy1V4qe70gOzXppFodEtZDkBp2uoQSX
|
2223 |
+
WHnvIEqCa4wiv+wfD+mEce3xDuS4GBPMVjZd0ZoeUWs5bmB2iDQL87PRsJ3KYeJkHcFGB7hj3R4z
|
2224 |
+
ZbOOCVVSPbW9/wfrrWFVGCypaZhKqkDFMxRldAD5kd6vA0jFQFTcD4SQaCDFkpbcLuUCRarAX1T4
|
2225 |
+
bepJz11sS6/vmsJWXMY1VkJqMF/Cq/biPT+zyRGPMUzXn0kCAwEAAaNCMEAwHQYDVR0OBBYEFDVK
|
2226 |
+
9U2vP9eCOKyrcWUXdYydVZPmMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqG
|
2227 |
+
SIb3DQEBBQUAA4IBAQCoh+ns+EBnXcPBZsdAS5f8hxOQWsTvoMpfi7ent/HWtWS3irO4G8za+6xm
|
2228 |
+
iEHO6Pzk2x6Ipu0nUBsCMCRGef4Eh3CXQHPRwMFXGZpppSeZq51ihPZRwSzJIxXYKLerJRO1RuGG
|
2229 |
+
Av8mjMSIkh1W/hln8lXkgKNrnKt34VFxDSDbEJrbvXZ5B3eZKK2aXtqxT0QsNY6llsf9g/BYxnnW
|
2230 |
+
mHyojf6GPgcWkuF75x3sM3Z+Qi5KhfmRiWiEA4Glm5q+4zfFVKtWOxgtQaQM+ELbmaDgcm+7XeEW
|
2231 |
+
T1MKZPlO9L9OVL14bIjqv5wTJMJwaaJ/D8g8rQjJsJhAoyrniIPtd490
|
2232 |
+
-----END CERTIFICATE-----
|
2233 |
+
|
2234 |
+
OISTE WISeKey Global Root GA CA
|
2235 |
+
===============================
|
2236 |
+
-----BEGIN CERTIFICATE-----
|
2237 |
+
MIID8TCCAtmgAwIBAgIQQT1yx/RrH4FDffHSKFTfmjANBgkqhkiG9w0BAQUFADCBijELMAkGA1UE
|
2238 |
+
BhMCQ0gxEDAOBgNVBAoTB1dJU2VLZXkxGzAZBgNVBAsTEkNvcHlyaWdodCAoYykgMjAwNTEiMCAG
|
2239 |
+
A1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNlZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBH
|
2240 |
+
bG9iYWwgUm9vdCBHQSBDQTAeFw0wNTEyMTExNjAzNDRaFw0zNzEyMTExNjA5NTFaMIGKMQswCQYD
|
2241 |
+
VQQGEwJDSDEQMA4GA1UEChMHV0lTZUtleTEbMBkGA1UECxMSQ29weXJpZ2h0IChjKSAyMDA1MSIw
|
2242 |
+
IAYDVQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5
|
2243 |
+
IEdsb2JhbCBSb290IEdBIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAy0+zAJs9
|
2244 |
+
Nt350UlqaxBJH+zYK7LG+DKBKUOVTJoZIyEVRd7jyBxRVVuuk+g3/ytr6dTqvirdqFEr12bDYVxg
|
2245 |
+
Asj1znJ7O7jyTmUIms2kahnBAbtzptf2w93NvKSLtZlhuAGio9RN1AU9ka34tAhxZK9w8RxrfvbD
|
2246 |
+
d50kc3vkDIzh2TbhmYsFmQvtRTEJysIA2/dyoJaqlYfQjse2YXMNdmaM3Bu0Y6Kff5MTMPGhJ9vZ
|
2247 |
+
/yxViJGg4E8HsChWjBgbl0SOid3gF27nKu+POQoxhILYQBRJLnpB5Kf+42TMwVlxSywhp1t94B3R
|
2248 |
+
LoGbw9ho972WG6xwsRYUC9tguSYBBQIDAQABo1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUw
|
2249 |
+
AwEB/zAdBgNVHQ4EFgQUswN+rja8sHnR3JQmthG+IbJphpQwEAYJKwYBBAGCNxUBBAMCAQAwDQYJ
|
2250 |
+
KoZIhvcNAQEFBQADggEBAEuh/wuHbrP5wUOxSPMowB0uyQlB+pQAHKSkq0lPjz0e701vvbyk9vIm
|
2251 |
+
MMkQyh2I+3QZH4VFvbBsUfk2ftv1TDI6QU9bR8/oCy22xBmddMVHxjtqD6wU2zz0c5ypBd8A3HR4
|
2252 |
+
+vg1YFkCExh8vPtNsCBtQ7tgMHpnM1zFmdH4LTlSc/uMqpclXHLZCB6rTjzjgTGfA6b7wP4piFXa
|
2253 |
+
hNVQA7bihKOmNqoROgHhGEvWRGizPflTdISzRpFGlgC3gCy24eMQ4tui5yiPAZZiFj4A4xylNoEY
|
2254 |
+
okxSdsARo27mHbrjWr42U8U+dY+GaSlYU7Wcu2+fXMUY7N0v4ZjJ/L7fCg0=
|
2255 |
+
-----END CERTIFICATE-----
|
2256 |
+
|
2257 |
+
S-TRUST Authentication and Encryption Root CA 2005 PN
|
2258 |
+
=====================================================
|
2259 |
+
-----BEGIN CERTIFICATE-----
|
2260 |
+
MIIEezCCA2OgAwIBAgIQNxkY5lNUfBq1uMtZWts1tzANBgkqhkiG9w0BAQUFADCBrjELMAkGA1UE
|
2261 |
+
BhMCREUxIDAeBgNVBAgTF0JhZGVuLVd1ZXJ0dGVtYmVyZyAoQlcpMRIwEAYDVQQHEwlTdHV0dGdh
|
2262 |
+
cnQxKTAnBgNVBAoTIERldXRzY2hlciBTcGFya2Fzc2VuIFZlcmxhZyBHbWJIMT4wPAYDVQQDEzVT
|
2263 |
+
LVRSVVNUIEF1dGhlbnRpY2F0aW9uIGFuZCBFbmNyeXB0aW9uIFJvb3QgQ0EgMjAwNTpQTjAeFw0w
|
2264 |
+
NTA2MjIwMDAwMDBaFw0zMDA2MjEyMzU5NTlaMIGuMQswCQYDVQQGEwJERTEgMB4GA1UECBMXQmFk
|
2265 |
+
ZW4tV3VlcnR0ZW1iZXJnIChCVykxEjAQBgNVBAcTCVN0dXR0Z2FydDEpMCcGA1UEChMgRGV1dHNj
|
2266 |
+
aGVyIFNwYXJrYXNzZW4gVmVybGFnIEdtYkgxPjA8BgNVBAMTNVMtVFJVU1QgQXV0aGVudGljYXRp
|
2267 |
+
b24gYW5kIEVuY3J5cHRpb24gUm9vdCBDQSAyMDA1OlBOMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
|
2268 |
+
MIIBCgKCAQEA2bVKwdMz6tNGs9HiTNL1toPQb9UY6ZOvJ44TzbUlNlA0EmQpoVXhOmCTnijJ4/Ob
|
2269 |
+
4QSwI7+Vio5bG0F/WsPoTUzVJBY+h0jUJ67m91MduwwA7z5hca2/OnpYH5Q9XIHV1W/fuJvS9eXL
|
2270 |
+
g3KSwlOyggLrra1fFi2SU3bxibYs9cEv4KdKb6AwajLrmnQDaHgTncovmwsdvs91DSaXm8f1Xgqf
|
2271 |
+
eN+zvOyauu9VjxuapgdjKRdZYgkqeQd3peDRF2npW932kKvimAoA0SVtnteFhy+S8dF2g08LOlk3
|
2272 |
+
KC8zpxdQ1iALCvQm+Z845y2kuJuJja2tyWp9iRe79n+Ag3rm7QIDAQABo4GSMIGPMBIGA1UdEwEB
|
2273 |
+
/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQDAgEGMCkGA1UdEQQiMCCkHjAcMRowGAYDVQQDExFTVFJv
|
2274 |
+
bmxpbmUxLTIwNDgtNTAdBgNVHQ4EFgQUD8oeXHngovMpttKFswtKtWXsa1IwHwYDVR0jBBgwFoAU
|
2275 |
+
D8oeXHngovMpttKFswtKtWXsa1IwDQYJKoZIhvcNAQEFBQADggEBAK8B8O0ZPCjoTVy7pWMciDMD
|
2276 |
+
pwCHpB8gq9Yc4wYfl35UvbfRssnV2oDsF9eK9XvCAPbpEW+EoFolMeKJ+aQAPzFoLtU96G7m1R08
|
2277 |
+
P7K9n3frndOMusDXtk3sU5wPBG7qNWdX4wple5A64U8+wwCSersFiXOMy6ZNwPv2AtawB6MDwidA
|
2278 |
+
nwzkhYItr5pCHdDHjfhA7p0GVxzZotiAFP7hYy0yh9WUUpY6RsZxlj33mA6ykaqP2vROJAA5Veit
|
2279 |
+
F7nTNCtKqUDMFypVZUF0Qn71wK/Ik63yGFs9iQzbRzkk+OBM8h+wPQrKBU6JIRrjKpms/H+h8Q8b
|
2280 |
+
Hz2eBIPdltkdOpQ=
|
2281 |
+
-----END CERTIFICATE-----
|
2282 |
+
|
2283 |
+
Microsec e-Szigno Root CA
|
2284 |
+
=========================
|
2285 |
+
-----BEGIN CERTIFICATE-----
|
2286 |
+
MIIHqDCCBpCgAwIBAgIRAMy4579OKRr9otxmpRwsDxEwDQYJKoZIhvcNAQEFBQAwcjELMAkGA1UE
|
2287 |
+
BhMCSFUxETAPBgNVBAcTCEJ1ZGFwZXN0MRYwFAYDVQQKEw1NaWNyb3NlYyBMdGQuMRQwEgYDVQQL
|
2288 |
+
EwtlLVN6aWdubyBDQTEiMCAGA1UEAxMZTWljcm9zZWMgZS1Temlnbm8gUm9vdCBDQTAeFw0wNTA0
|
2289 |
+
MDYxMjI4NDRaFw0xNzA0MDYxMjI4NDRaMHIxCzAJBgNVBAYTAkhVMREwDwYDVQQHEwhCdWRhcGVz
|
2290 |
+
dDEWMBQGA1UEChMNTWljcm9zZWMgTHRkLjEUMBIGA1UECxMLZS1Temlnbm8gQ0ExIjAgBgNVBAMT
|
2291 |
+
GU1pY3Jvc2VjIGUtU3ppZ25vIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
|
2292 |
+
AQDtyADVgXvNOABHzNuEwSFpLHSQDCHZU4ftPkNEU6+r+ICbPHiN1I2uuO/TEdyB5s87lozWbxXG
|
2293 |
+
d36hL+BfkrYn13aaHUM86tnsL+4582pnS4uCzyL4ZVX+LMsvfUh6PXX5qqAnu3jCBspRwn5mS6/N
|
2294 |
+
oqdNAoI/gqyFxuEPkEeZlApxcpMqyabAvjxWTHOSJ/FrtfX9/DAFYJLG65Z+AZHCabEeHXtTRbjc
|
2295 |
+
QR/Ji3HWVBTji1R4P770Yjtb9aPs1ZJ04nQw7wHb4dSrmZsqa/i9phyGI0Jf7Enemotb9HI6QMVJ
|
2296 |
+
PqW+jqpx62z69Rrkav17fVVA71hu5tnVvCSrwe+3AgMBAAGjggQ3MIIEMzBnBggrBgEFBQcBAQRb
|
2297 |
+
MFkwKAYIKwYBBQUHMAGGHGh0dHBzOi8vcmNhLmUtc3ppZ25vLmh1L29jc3AwLQYIKwYBBQUHMAKG
|
2298 |
+
IWh0dHA6Ly93d3cuZS1zemlnbm8uaHUvUm9vdENBLmNydDAPBgNVHRMBAf8EBTADAQH/MIIBcwYD
|
2299 |
+
VR0gBIIBajCCAWYwggFiBgwrBgEEAYGoGAIBAQEwggFQMCgGCCsGAQUFBwIBFhxodHRwOi8vd3d3
|
2300 |
+
LmUtc3ppZ25vLmh1L1NaU1ovMIIBIgYIKwYBBQUHAgIwggEUHoIBEABBACAAdABhAG4A+gBzAO0A
|
2301 |
+
dAB2AOEAbgB5ACAA6QByAHQAZQBsAG0AZQB6AOkAcwDpAGgAZQB6ACAA6QBzACAAZQBsAGYAbwBn
|
2302 |
+
AGEAZADhAHMA4QBoAG8AegAgAGEAIABTAHoAbwBsAGcA4QBsAHQAYQB0APMAIABTAHoAbwBsAGcA
|
2303 |
+
4QBsAHQAYQB0AOEAcwBpACAAUwB6AGEAYgDhAGwAeQB6AGEAdABhACAAcwB6AGUAcgBpAG4AdAAg
|
2304 |
+
AGsAZQBsAGwAIABlAGwAagDhAHIAbgBpADoAIABoAHQAdABwADoALwAvAHcAdwB3AC4AZQAtAHMA
|
2305 |
+
egBpAGcAbgBvAC4AaAB1AC8AUwBaAFMAWgAvMIHIBgNVHR8EgcAwgb0wgbqggbeggbSGIWh0dHA6
|
2306 |
+
Ly93d3cuZS1zemlnbm8uaHUvUm9vdENBLmNybIaBjmxkYXA6Ly9sZGFwLmUtc3ppZ25vLmh1L0NO
|
2307 |
+
PU1pY3Jvc2VjJTIwZS1Temlnbm8lMjBSb290JTIwQ0EsT1U9ZS1Temlnbm8lMjBDQSxPPU1pY3Jv
|
2308 |
+
c2VjJTIwTHRkLixMPUJ1ZGFwZXN0LEM9SFU/Y2VydGlmaWNhdGVSZXZvY2F0aW9uTGlzdDtiaW5h
|
2309 |
+
cnkwDgYDVR0PAQH/BAQDAgEGMIGWBgNVHREEgY4wgYuBEGluZm9AZS1zemlnbm8uaHWkdzB1MSMw
|
2310 |
+
IQYDVQQDDBpNaWNyb3NlYyBlLVN6aWduw7MgUm9vdCBDQTEWMBQGA1UECwwNZS1TemlnbsOzIEhT
|
2311 |
+
WjEWMBQGA1UEChMNTWljcm9zZWMgS2Z0LjERMA8GA1UEBxMIQnVkYXBlc3QxCzAJBgNVBAYTAkhV
|
2312 |
+
MIGsBgNVHSMEgaQwgaGAFMegSXUWYYTbMUuE0vE3QJDvTtz3oXakdDByMQswCQYDVQQGEwJIVTER
|
2313 |
+
MA8GA1UEBxMIQnVkYXBlc3QxFjAUBgNVBAoTDU1pY3Jvc2VjIEx0ZC4xFDASBgNVBAsTC2UtU3pp
|
2314 |
+
Z25vIENBMSIwIAYDVQQDExlNaWNyb3NlYyBlLVN6aWdubyBSb290IENBghEAzLjnv04pGv2i3Gal
|
2315 |
+
HCwPETAdBgNVHQ4EFgQUx6BJdRZhhNsxS4TS8TdAkO9O3PcwDQYJKoZIhvcNAQEFBQADggEBANMT
|
2316 |
+
nGZjWS7KXHAM/IO8VbH0jgdsZifOwTsgqRy7RlRw7lrMoHfqaEQn6/Ip3Xep1fvj1KcExJW4C+FE
|
2317 |
+
aGAHQzAxQmHl7tnlJNUb3+FKG6qfx1/4ehHqE5MAyopYse7tDk2016g2JnzgOsHVV4Lxdbb9iV/a
|
2318 |
+
86g4nzUGCM4ilb7N1fy+W955a9x6qWVmvrElWl/tftOsRm1M9DKHtCAE4Gx4sHfRhUZLphK3dehK
|
2319 |
+
yVZs15KrnfVJONJPU+NVkBHbmJbGSfI+9J8b4PeI3CVimUTYc78/MPMMNz7UwiiAc7EBt51alhQB
|
2320 |
+
S6kRnSlqLtBdgcDPsiBDxwPgN05dCtxZICU=
|
2321 |
+
-----END CERTIFICATE-----
|
2322 |
+
|
2323 |
+
Certigna
|
2324 |
+
========
|
2325 |
+
-----BEGIN CERTIFICATE-----
|
2326 |
+
MIIDqDCCApCgAwIBAgIJAP7c4wEPyUj/MA0GCSqGSIb3DQEBBQUAMDQxCzAJBgNVBAYTAkZSMRIw
|
2327 |
+
EAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hMB4XDTA3MDYyOTE1MTMwNVoXDTI3
|
2328 |
+
MDYyOTE1MTMwNVowNDELMAkGA1UEBhMCRlIxEjAQBgNVBAoMCURoaW15b3RpczERMA8GA1UEAwwI
|
2329 |
+
Q2VydGlnbmEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDIaPHJ1tazNHUmgh7stL7q
|
2330 |
+
XOEm7RFHYeGifBZ4QCHkYJ5ayGPhxLGWkv8YbWkj4Sti993iNi+RB7lIzw7sebYs5zRLcAglozyH
|
2331 |
+
GxnygQcPOJAZ0xH+hrTy0V4eHpbNgGzOOzGTtvKg0KmVEn2lmsxryIRWijOp5yIVUxbwzBfsV1/p
|
2332 |
+
ogqYCd7jX5xv3EjjhQsVWqa6n6xI4wmy9/Qy3l40vhx4XUJbzg4ij02Q130yGLMLLGq/jj8UEYkg
|
2333 |
+
DncUtT2UCIf3JR7VsmAA7G8qKCVuKj4YYxclPz5EIBb2JsglrgVKtOdjLPOMFlN+XPsRGgjBRmKf
|
2334 |
+
Irjxwo1p3Po6WAbfAgMBAAGjgbwwgbkwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUGu3+QTmQ
|
2335 |
+
tCRZvgHyUtVF9lo53BEwZAYDVR0jBF0wW4AUGu3+QTmQtCRZvgHyUtVF9lo53BGhOKQ2MDQxCzAJ
|
2336 |
+
BgNVBAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hggkA/tzjAQ/J
|
2337 |
+
SP8wDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG9w0BAQUFAAOCAQEA
|
2338 |
+
hQMeknH2Qq/ho2Ge6/PAD/Kl1NqV5ta+aDY9fm4fTIrv0Q8hbV6lUmPOEvjvKtpv6zf+EwLHyzs+
|
2339 |
+
ImvaYS5/1HI93TDhHkxAGYwP15zRgzB7mFncfca5DClMoTOi62c6ZYTTluLtdkVwj7Ur3vkj1klu
|
2340 |
+
PBS1xp81HlDQwY9qcEQCYsuuHWhBp6pX6FOqB9IG9tUUBguRA3UsbHK1YZWaDYu5Def131TN3ubY
|
2341 |
+
1gkIl2PlwS6wt0QmwCbAr1UwnjvVNioZBPRcHv/PLLf/0P2HQBHVESO7SMAhqaQoLf0V+LBOK/Qw
|
2342 |
+
WyH8EZE0vkHve52Xdf+XlcCWWC/qu0bXu+TZLg==
|
2343 |
+
-----END CERTIFICATE-----
|
2344 |
+
|
2345 |
+
AC Ra\xC3\xADz Certic\xC3\xA1mara S.A.
|
2346 |
+
======================================
|
2347 |
+
-----BEGIN CERTIFICATE-----
|
2348 |
+
MIIGZjCCBE6gAwIBAgIPB35Sk3vgFeNX8GmMy+wMMA0GCSqGSIb3DQEBBQUAMHsxCzAJBgNVBAYT
|
2349 |
+
AkNPMUcwRQYDVQQKDD5Tb2NpZWRhZCBDYW1lcmFsIGRlIENlcnRpZmljYWNpw7NuIERpZ2l0YWwg
|
2350 |
+
LSBDZXJ0aWPDoW1hcmEgUy5BLjEjMCEGA1UEAwwaQUMgUmHDrXogQ2VydGljw6FtYXJhIFMuQS4w
|
2351 |
+
HhcNMDYxMTI3MjA0NjI5WhcNMzAwNDAyMjE0MjAyWjB7MQswCQYDVQQGEwJDTzFHMEUGA1UECgw+
|
2352 |
+
U29jaWVkYWQgQ2FtZXJhbCBkZSBDZXJ0aWZpY2FjacOzbiBEaWdpdGFsIC0gQ2VydGljw6FtYXJh
|
2353 |
+
IFMuQS4xIzAhBgNVBAMMGkFDIFJhw616IENlcnRpY8OhbWFyYSBTLkEuMIICIjANBgkqhkiG9w0B
|
2354 |
+
AQEFAAOCAg8AMIICCgKCAgEAq2uJo1PMSCMI+8PPUZYILrgIem08kBeGqentLhM0R7LQcNzJPNCN
|
2355 |
+
yu5LF6vQhbCnIwTLqKL85XXbQMpiiY9QngE9JlsYhBzLfDe3fezTf3MZsGqy2IiKLUV0qPezuMDU
|
2356 |
+
2s0iiXRNWhU5cxh0T7XrmafBHoi0wpOQY5fzp6cSsgkiBzPZkc0OnB8OIMfuuzONj8LSWKdf/WU3
|
2357 |
+
4ojC2I+GdV75LaeHM/J4Ny+LvB2GNzmxlPLYvEqcgxhaBvzz1NS6jBUJJfD5to0EfhcSM2tXSExP
|
2358 |
+
2yYe68yQ54v5aHxwD6Mq0Do43zeX4lvegGHTgNiRg0JaTASJaBE8rF9ogEHMYELODVoqDA+bMMCm
|
2359 |
+
8Ibbq0nXl21Ii/kDwFJnmxL3wvIumGVC2daa49AZMQyth9VXAnow6IYm+48jilSH5L887uvDdUhf
|
2360 |
+
HjlvgWJsxS3EF1QZtzeNnDeRyPYL1epjb4OsOMLzP96a++EjYfDIJss2yKHzMI+ko6Kh3VOz3vCa
|
2361 |
+
Mh+DkXkwwakfU5tTohVTP92dsxA7SH2JD/ztA/X7JWR1DhcZDY8AFmd5ekD8LVkH2ZD6mq093ICK
|
2362 |
+
5lw1omdMEWux+IBkAC1vImHFrEsm5VoQgpukg3s0956JkSCXjrdCx2bD0Omk1vUgjcTDlaxECp1b
|
2363 |
+
czwmPS9KvqfJpxAe+59QafMCAwEAAaOB5jCB4zAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQE
|
2364 |
+
AwIBBjAdBgNVHQ4EFgQU0QnQ6dfOeXRU+Tows/RtLAMDG2gwgaAGA1UdIASBmDCBlTCBkgYEVR0g
|
2365 |
+
ADCBiTArBggrBgEFBQcCARYfaHR0cDovL3d3dy5jZXJ0aWNhbWFyYS5jb20vZHBjLzBaBggrBgEF
|
2366 |
+
BQcCAjBOGkxMaW1pdGFjaW9uZXMgZGUgZ2FyYW507WFzIGRlIGVzdGUgY2VydGlmaWNhZG8gc2Ug
|
2367 |
+
cHVlZGVuIGVuY29udHJhciBlbiBsYSBEUEMuMA0GCSqGSIb3DQEBBQUAA4ICAQBclLW4RZFNjmEf
|
2368 |
+
AygPU3zmpFmps4p6xbD/CHwso3EcIRNnoZUSQDWDg4902zNc8El2CoFS3UnUmjIz75uny3XlesuX
|
2369 |
+
EpBcunvFm9+7OSPI/5jOCk0iAUgHforA1SBClETvv3eiiWdIG0ADBaGJ7M9i4z0ldma/Jre7Ir5v
|
2370 |
+
/zlXdLp6yQGVwZVR6Kss+LGGIOk/yzVb0hfpKv6DExdA7ohiZVvVO2Dpezy4ydV/NgIlqmjCMRW3
|
2371 |
+
MGXrfx1IebHPOeJCgBbT9ZMj/EyXyVo3bHwi2ErN0o42gzmRkBDI8ck1fj+404HGIGQatlDCIaR4
|
2372 |
+
3NAvO2STdPCWkPHv+wlaNECW8DYSwaN0jJN+Qd53i+yG2dIPPy3RzECiiWZIHiCznCNZc6lEc7wk
|
2373 |
+
eZBWN7PGKX6jD/EpOe9+XCgycDWs2rjIdWb8m0w5R44bb5tNAlQiM+9hup4phO9OSzNHdpdqy35f
|
2374 |
+
/RWmnkJDW2ZaiogN9xa5P1FlK2Zqi9E4UqLWRhH6/JocdJ6PlwsCT2TG9WjTSy3/pDceiz+/RL5h
|
2375 |
+
RqGEPQgnTIEgd4kI6mdAXmwIUV80WoyWaM3X94nCHNMyAK9Sy9NgWyo6R35rMDOhYil/SrnhLecU
|
2376 |
+
Iw4OGEfhefwVVdCx/CVxY3UzHCMrr1zZ7Ud3YA47Dx7SwNxkBYn8eNZcLCZDqQ==
|
2377 |
+
-----END CERTIFICATE-----
|
2378 |
+
|
2379 |
+
TC TrustCenter Class 2 CA II
|
2380 |
+
============================
|
2381 |
+
-----BEGIN CERTIFICATE-----
|
2382 |
+
MIIEqjCCA5KgAwIBAgIOLmoAAQACH9dSISwRXDswDQYJKoZIhvcNAQEFBQAwdjELMAkGA1UEBhMC
|
2383 |
+
REUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNVBAsTGVRDIFRydXN0Q2VudGVy
|
2384 |
+
IENsYXNzIDIgQ0ExJTAjBgNVBAMTHFRDIFRydXN0Q2VudGVyIENsYXNzIDIgQ0EgSUkwHhcNMDYw
|
2385 |
+
MTEyMTQzODQzWhcNMjUxMjMxMjI1OTU5WjB2MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1
|
2386 |
+
c3RDZW50ZXIgR21iSDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQTElMCMGA1UE
|
2387 |
+
AxMcVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQSBJSTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
|
2388 |
+
AQoCggEBAKuAh5uO8MN8h9foJIIRszzdQ2Lu+MNF2ujhoF/RKrLqk2jftMjWQ+nEdVl//OEd+DFw
|
2389 |
+
IxuInie5e/060smp6RQvkL4DUsFJzfb95AhmC1eKokKguNV/aVyQMrKXDcpK3EY+AlWJU+MaWss2
|
2390 |
+
xgdW94zPEfRMuzBwBJWl9jmM/XOBCH2JXjIeIqkiRUuwZi4wzJ9l/fzLganx4Duvo4bRierERXlQ
|
2391 |
+
Xa7pIXSSTYtZgo+U4+lK8edJsBTj9WLL1XK9H7nSn6DNqPoByNkN39r8R52zyFTfSUrxIan+GE7u
|
2392 |
+
SNQZu+995OKdy1u2bv/jzVrndIIFuoAlOMvkaZ6vQaoahPUCAwEAAaOCATQwggEwMA8GA1UdEwEB
|
2393 |
+
/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTjq1RMgKHbVkO3kUrL84J6E1wIqzCB
|
2394 |
+
7QYDVR0fBIHlMIHiMIHfoIHcoIHZhjVodHRwOi8vd3d3LnRydXN0Y2VudGVyLmRlL2NybC92Mi90
|
2395 |
+
Y19jbGFzc18yX2NhX0lJLmNybIaBn2xkYXA6Ly93d3cudHJ1c3RjZW50ZXIuZGUvQ049VEMlMjBU
|
2396 |
+
cnVzdENlbnRlciUyMENsYXNzJTIwMiUyMENBJTIwSUksTz1UQyUyMFRydXN0Q2VudGVyJTIwR21i
|
2397 |
+
SCxPVT1yb290Y2VydHMsREM9dHJ1c3RjZW50ZXIsREM9ZGU/Y2VydGlmaWNhdGVSZXZvY2F0aW9u
|
2398 |
+
TGlzdD9iYXNlPzANBgkqhkiG9w0BAQUFAAOCAQEAjNfffu4bgBCzg/XbEeprS6iSGNn3Bzn1LL4G
|
2399 |
+
dXpoUxUc6krtXvwjshOg0wn/9vYua0Fxec3ibf2uWWuFHbhOIprtZjluS5TmVfwLG4t3wVMTZonZ
|
2400 |
+
KNaL80VKY7f9ewthXbhtvsPcW3nS7Yblok2+XnR8au0WOB9/WIFaGusyiC2y8zl3gK9etmF1Kdsj
|
2401 |
+
TYjKUCjLhdLTEKJZbtOTVAB6okaVhgWcqRmY5TFyDADiZ9lA4CQze28suVyrZZ0srHbqNZn1l7kP
|
2402 |
+
JOzHdiEoZa5X6AeIdUpWoNIFOqTmjZKILPPy4cHGYdtBxceb9w4aUUXCYWvcZCcXjFq32nQozZfk
|
2403 |
+
vQ==
|
2404 |
+
-----END CERTIFICATE-----
|
2405 |
+
|
2406 |
+
TC TrustCenter Class 3 CA II
|
2407 |
+
============================
|
2408 |
+
-----BEGIN CERTIFICATE-----
|
2409 |
+
MIIEqjCCA5KgAwIBAgIOSkcAAQAC5aBd1j8AUb8wDQYJKoZIhvcNAQEFBQAwdjELMAkGA1UEBhMC
|
2410 |
+
REUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNVBAsTGVRDIFRydXN0Q2VudGVy
|
2411 |
+
IENsYXNzIDMgQ0ExJTAjBgNVBAMTHFRDIFRydXN0Q2VudGVyIENsYXNzIDMgQ0EgSUkwHhcNMDYw
|
2412 |
+
MTEyMTQ0MTU3WhcNMjUxMjMxMjI1OTU5WjB2MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1
|
2413 |
+
c3RDZW50ZXIgR21iSDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMyBDQTElMCMGA1UE
|
2414 |
+
AxMcVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMyBDQSBJSTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
|
2415 |
+
AQoCggEBALTgu1G7OVyLBMVMeRwjhjEQY0NVJz/GRcekPewJDRoeIMJWHt4bNwcwIi9v8Qbxq63W
|
2416 |
+
yKthoy9DxLCyLfzDlml7forkzMA5EpBCYMnMNWju2l+QVl/NHE1bWEnrDgFPZPosPIlY2C8u4rBo
|
2417 |
+
6SI7dYnWRBpl8huXJh0obazovVkdKyT21oQDZogkAHhg8fir/gKya/si+zXmFtGt9i4S5Po1auUZ
|
2418 |
+
uV3bOx4a+9P/FRQI2AlqukWdFHlgfa9Aigdzs5OW03Q0jTo3Kd5c7PXuLjHCINy+8U9/I1LZW+Jk
|
2419 |
+
2ZyqBwi1Rb3R0DHBq1SfqdLDYmAD8bs5SpJKPQq5ncWg/jcCAwEAAaOCATQwggEwMA8GA1UdEwEB
|
2420 |
+
/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTUovyfs8PYA9NXXAek0CSnwPIA1DCB
|
2421 |
+
7QYDVR0fBIHlMIHiMIHfoIHcoIHZhjVodHRwOi8vd3d3LnRydXN0Y2VudGVyLmRlL2NybC92Mi90
|
2422 |
+
Y19jbGFzc18zX2NhX0lJLmNybIaBn2xkYXA6Ly93d3cudHJ1c3RjZW50ZXIuZGUvQ049VEMlMjBU
|
2423 |
+
cnVzdENlbnRlciUyMENsYXNzJTIwMyUyMENBJTIwSUksTz1UQyUyMFRydXN0Q2VudGVyJTIwR21i
|
2424 |
+
SCxPVT1yb290Y2VydHMsREM9dHJ1c3RjZW50ZXIsREM9ZGU/Y2VydGlmaWNhdGVSZXZvY2F0aW9u
|
2425 |
+
TGlzdD9iYXNlPzANBgkqhkiG9w0BAQUFAAOCAQEANmDkcPcGIEPZIxpC8vijsrlNirTzwppVMXzE
|
2426 |
+
O2eatN9NDoqTSheLG43KieHPOh6sHfGcMrSOWXaiQYUlN6AT0PV8TtXqluJucsG7Kv5sbviRmEb8
|
2427 |
+
yRtXW+rIGjs/sFGYPAfaLFkB2otE6OF0/ado3VS6g0bsyEa1+K+XwDsJHI/OcpY9M1ZwvJbL2NV9
|
2428 |
+
IJqDnxrcOfHFcqMRA/07QlIp2+gB95tejNaNhk4Z+rwcvsUhpYeeeC422wlxo3I0+GzjBgnyXlal
|
2429 |
+
092Y+tTmBvTwtiBjS+opvaqCZh77gaqnN60TGOaSw4HBM7uIHqHn4rS9MWwOUT1v+5ZWgOI2F9Hc
|
2430 |
+
5A==
|
2431 |
+
-----END CERTIFICATE-----
|
2432 |
+
|
2433 |
+
TC TrustCenter Universal CA I
|
2434 |
+
=============================
|
2435 |
+
-----BEGIN CERTIFICATE-----
|
2436 |
+
MIID3TCCAsWgAwIBAgIOHaIAAQAC7LdggHiNtgYwDQYJKoZIhvcNAQEFBQAweTELMAkGA1UEBhMC
|
2437 |
+
REUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxJDAiBgNVBAsTG1RDIFRydXN0Q2VudGVy
|
2438 |
+
IFVuaXZlcnNhbCBDQTEmMCQGA1UEAxMdVEMgVHJ1c3RDZW50ZXIgVW5pdmVyc2FsIENBIEkwHhcN
|
2439 |
+
MDYwMzIyMTU1NDI4WhcNMjUxMjMxMjI1OTU5WjB5MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMg
|
2440 |
+
VHJ1c3RDZW50ZXIgR21iSDEkMCIGA1UECxMbVEMgVHJ1c3RDZW50ZXIgVW5pdmVyc2FsIENBMSYw
|
2441 |
+
JAYDVQQDEx1UQyBUcnVzdENlbnRlciBVbml2ZXJzYWwgQ0EgSTCCASIwDQYJKoZIhvcNAQEBBQAD
|
2442 |
+
ggEPADCCAQoCggEBAKR3I5ZEr5D0MacQ9CaHnPM42Q9e3s9B6DGtxnSRJJZ4Hgmgm5qVSkr1YnwC
|
2443 |
+
qMqs+1oEdjneX/H5s7/zA1hV0qq34wQi0fiU2iIIAI3TfCZdzHd55yx4Oagmcw6iXSVphU9VDprv
|
2444 |
+
xrlE4Vc93x9UIuVvZaozhDrzznq+VZeujRIPFDPiUHDDSYcTvFHe15gSWu86gzOSBnWLknwSaHtw
|
2445 |
+
ag+1m7Z3W0hZneTvWq3zwZ7U10VOylY0Ibw+F1tvdwxIAUMpsN0/lm7mlaoMwCC2/T42J5zjXM9O
|
2446 |
+
gdwZu5GQfezmlwQek8wiSdeXhrYTCjxDI3d+8NzmzSQfO4ObNDqDNOMCAwEAAaNjMGEwHwYDVR0j
|
2447 |
+
BBgwFoAUkqR1LKSevoFE63n8isWVpesQdXMwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
|
2448 |
+
AYYwHQYDVR0OBBYEFJKkdSyknr6BROt5/IrFlaXrEHVzMA0GCSqGSIb3DQEBBQUAA4IBAQAo0uCG
|
2449 |
+
1eb4e/CX3CJrO5UUVg8RMKWaTzqwOuAGy2X17caXJ/4l8lfmXpWMPmRgFVp/Lw0BxbFg/UU1z/Cy
|
2450 |
+
vwbZ71q+s2IhtNerNXxTPqYn8aEt2hojnczd7Dwtnic0XQ/CNnm8yUpiLe1r2X1BQ3y2qsrtYbE3
|
2451 |
+
ghUJGooWMNjsydZHcnhLEEYUjl8Or+zHL6sQ17bxbuyGssLoDZJz3KL0Dzq/YSMQiZxIQG5wALPT
|
2452 |
+
ujdEWBF6AmqI8Dc08BnprNRlc/ZpjGSUOnmFKbAWKwyCPwacx/0QK54PLLae4xW/2TYcuiUaUj0a
|
2453 |
+
7CIMHOCkoj3w6DnPgcB77V0fb8XQC9eY
|
2454 |
+
-----END CERTIFICATE-----
|
2455 |
+
|
2456 |
+
Deutsche Telekom Root CA 2
|
2457 |
+
==========================
|
2458 |
+
-----BEGIN CERTIFICATE-----
|
2459 |
+
MIIDnzCCAoegAwIBAgIBJjANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJERTEcMBoGA1UEChMT
|
2460 |
+
RGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxlU2VjIFRydXN0IENlbnRlcjEjMCEG
|
2461 |
+
A1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290IENBIDIwHhcNOTkwNzA5MTIxMTAwWhcNMTkwNzA5
|
2462 |
+
MjM1OTAwWjBxMQswCQYDVQQGEwJERTEcMBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0G
|
2463 |
+
A1UECxMWVC1UZWxlU2VjIFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBS
|
2464 |
+
b290IENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCrC6M14IspFLEUha88EOQ5
|
2465 |
+
bzVdSq7d6mGNlUn0b2SjGmBmpKlAIoTZ1KXleJMOaAGtuU1cOs7TuKhCQN/Po7qCWWqSG6wcmtoI
|
2466 |
+
KyUn+WkjR/Hg6yx6m/UTAtB+NHzCnjwAWav12gz1MjwrrFDa1sPeg5TKqAyZMg4ISFZbavva4VhY
|
2467 |
+
AUlfckE8FQYBjl2tqriTtM2e66foai1SNNs671x1Udrb8zH57nGYMsRUFUQM+ZtV7a3fGAigo4aK
|
2468 |
+
Se5TBY8ZTNXeWHmb0mocQqvF1afPaA+W5OFhmHZhyJF81j4A4pFQh+GdCuatl9Idxjp9y7zaAzTV
|
2469 |
+
jlsB9WoHtxa2bkp/AgMBAAGjQjBAMB0GA1UdDgQWBBQxw3kbuvVT1xfgiXotF2wKsyudMzAPBgNV
|
2470 |
+
HRMECDAGAQH/AgEFMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAlGRZrTlk5ynr
|
2471 |
+
E/5aw4sTV8gEJPB0d8Bg42f76Ymmg7+Wgnxu1MM9756AbrsptJh6sTtU6zkXR34ajgv8HzFZMQSy
|
2472 |
+
zhfzLMdiNlXiItiJVbSYSKpk+tYcNthEeFpaIzpXl/V6ME+un2pMSyuOoAPjPuCp1NJ70rOo4nI8
|
2473 |
+
rZ7/gFnkm0W09juwzTkZmDLl6iFhkOQxIY40sfcvNUqFENrnijchvllj4PKFiDFT1FQUhXB59C4G
|
2474 |
+
dyd1Lx+4ivn+xbrYNuSD7Odlt79jWvNGr4GUN9RBjNYj1h7P9WgbRGOiWrqnNVmh5XAFmw4jV5mU
|
2475 |
+
Cm26OWMohpLzGITY+9HPBVZkVw==
|
2476 |
+
-----END CERTIFICATE-----
|
2477 |
+
|
2478 |
+
ComSign CA
|
2479 |
+
==========
|
2480 |
+
-----BEGIN CERTIFICATE-----
|
2481 |
+
MIIDkzCCAnugAwIBAgIQFBOWgxRVjOp7Y+X8NId3RDANBgkqhkiG9w0BAQUFADA0MRMwEQYDVQQD
|
2482 |
+
EwpDb21TaWduIENBMRAwDgYDVQQKEwdDb21TaWduMQswCQYDVQQGEwJJTDAeFw0wNDAzMjQxMTMy
|
2483 |
+
MThaFw0yOTAzMTkxNTAyMThaMDQxEzARBgNVBAMTCkNvbVNpZ24gQ0ExEDAOBgNVBAoTB0NvbVNp
|
2484 |
+
Z24xCzAJBgNVBAYTAklMMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA8ORUaSvTx49q
|
2485 |
+
ROR+WCf4C9DklBKK8Rs4OC8fMZwG1Cyn3gsqrhqg455qv588x26i+YtkbDqthVVRVKU4VbirgwTy
|
2486 |
+
P2Q298CNQ0NqZtH3FyrV7zb6MBBC11PN+fozc0yz6YQgitZBJzXkOPqUm7h65HkfM/sb2CEJKHxN
|
2487 |
+
GGleZIp6GZPKfuzzcuc3B1hZKKxC+cX/zT/npfo4sdAMx9lSGlPWgcxCejVb7Us6eva1jsz/D3zk
|
2488 |
+
YDaHL63woSV9/9JLEYhwVKZBqGdTUkJe5DSe5L6j7KpiXd3DTKaCQeQzC6zJMw9kglcq/QytNuEM
|
2489 |
+
rkvF7zuZ2SOzW120V+x0cAwqTwIDAQABo4GgMIGdMAwGA1UdEwQFMAMBAf8wPQYDVR0fBDYwNDAy
|
2490 |
+
oDCgLoYsaHR0cDovL2ZlZGlyLmNvbXNpZ24uY28uaWwvY3JsL0NvbVNpZ25DQS5jcmwwDgYDVR0P
|
2491 |
+
AQH/BAQDAgGGMB8GA1UdIwQYMBaAFEsBmz5WGmU2dst7l6qSBe4y5ygxMB0GA1UdDgQWBBRLAZs+
|
2492 |
+
VhplNnbLe5eqkgXuMucoMTANBgkqhkiG9w0BAQUFAAOCAQEA0Nmlfv4pYEWdfoPPbrxHbvUanlR2
|
2493 |
+
QnG0PFg/LUAlQvaBnPGJEMgOqnhPOAlXsDzACPw1jvFIUY0McXS6hMTXcpuEfDhOZAYnKuGntewI
|
2494 |
+
mbQKDdSFc8gS4TXt8QUxHXOZDOuWyt3T5oWq8Ir7dcHyCTxlZWTzTNity4hp8+SDtwy9F1qWF8pb
|
2495 |
+
/627HOkthIDYIb6FUtnUdLlphbpN7Sgy6/lhSuTENh4Z3G+EER+V9YMoGKgzkkMn3V0TBEVPh9VG
|
2496 |
+
zT2ouvDzuFYkRes3x+F2T3I5GN9+dHLHcy056mDmrRGiVod7w2ia/viMcKjfZTL0pECMocJEAw6U
|
2497 |
+
AGegcQCCSA==
|
2498 |
+
-----END CERTIFICATE-----
|
2499 |
+
|
2500 |
+
ComSign Secured CA
|
2501 |
+
==================
|
2502 |
+
-----BEGIN CERTIFICATE-----
|
2503 |
+
MIIDqzCCApOgAwIBAgIRAMcoRwmzuGxFjB36JPU2TukwDQYJKoZIhvcNAQEFBQAwPDEbMBkGA1UE
|
2504 |
+
AxMSQ29tU2lnbiBTZWN1cmVkIENBMRAwDgYDVQQKEwdDb21TaWduMQswCQYDVQQGEwJJTDAeFw0w
|
2505 |
+
NDAzMjQxMTM3MjBaFw0yOTAzMTYxNTA0NTZaMDwxGzAZBgNVBAMTEkNvbVNpZ24gU2VjdXJlZCBD
|
2506 |
+
QTEQMA4GA1UEChMHQ29tU2lnbjELMAkGA1UEBhMCSUwwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
|
2507 |
+
ggEKAoIBAQDGtWhfHZQVw6QIVS3joFd67+l0Kru5fFdJGhFeTymHDEjWaueP1H5XJLkGieQcPOqs
|
2508 |
+
49ohgHMhCu95mGwfCP+hUH3ymBvJVG8+pSjsIQQPRbsHPaHA+iqYHU4Gk/v1iDurX8sWv+bznkqH
|
2509 |
+
7Rnqwp9D5PGBpX8QTz7RSmKtUxvLg/8HZaWSLWapW7ha9B20IZFKF3ueMv5WJDmyVIRD9YTC2LxB
|
2510 |
+
kMyd1mja6YJQqTtoz7VdApRgFrFD2UNd3V2Hbuq7s8lr9gOUCXDeFhF6K+h2j0kQmHe5Y1yLM5d1
|
2511 |
+
9guMsqtb3nQgJT/j8xH5h2iGNXHDHYwt6+UarA9z1YJZQIDTAgMBAAGjgacwgaQwDAYDVR0TBAUw
|
2512 |
+
AwEB/zBEBgNVHR8EPTA7MDmgN6A1hjNodHRwOi8vZmVkaXIuY29tc2lnbi5jby5pbC9jcmwvQ29t
|
2513 |
+
U2lnblNlY3VyZWRDQS5jcmwwDgYDVR0PAQH/BAQDAgGGMB8GA1UdIwQYMBaAFMFL7XC29z58ADsA
|
2514 |
+
j8c+DkWfHl3sMB0GA1UdDgQWBBTBS+1wtvc+fAA7AI/HPg5Fnx5d7DANBgkqhkiG9w0BAQUFAAOC
|
2515 |
+
AQEAFs/ukhNQq3sUnjO2QiBq1BW9Cav8cujvR3qQrFHBZE7piL1DRYHjZiM/EoZNGeQFsOY3wo3a
|
2516 |
+
BijJD4mkU6l1P7CW+6tMM1X5eCZGbxs2mPtCdsGCuY7e+0X5YxtiOzkGynd6qDwJz2w2PQ8KRUtp
|
2517 |
+
FhpFfTMDZflScZAmlaxMDPWLkz/MdXSFmLr/YnpNH4n+rr2UAJm/EaXc4HnFFgt9AmEd6oX5AhVP
|
2518 |
+
51qJThRv4zdLhfXBPGHg/QVBspJ/wx2g0K5SZGBrGMYmnNj1ZOQ2GmKfig8+/21OGVZOIJFsnzQz
|
2519 |
+
OjRXUDpvgV4GxvU+fE6OK85lBi5d0ipTdF7Tbieejw==
|
2520 |
+
-----END CERTIFICATE-----
|
2521 |
+
|
2522 |
+
Cybertrust Global Root
|
2523 |
+
======================
|
2524 |
+
-----BEGIN CERTIFICATE-----
|
2525 |
+
MIIDoTCCAomgAwIBAgILBAAAAAABD4WqLUgwDQYJKoZIhvcNAQEFBQAwOzEYMBYGA1UEChMPQ3li
|
2526 |
+
ZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2JhbCBSb290MB4XDTA2MTIxNTA4
|
2527 |
+
MDAwMFoXDTIxMTIxNTA4MDAwMFowOzEYMBYGA1UEChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQD
|
2528 |
+
ExZDeWJlcnRydXN0IEdsb2JhbCBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
|
2529 |
+
+Mi8vRRQZhP/8NN57CPytxrHjoXxEnOmGaoQ25yiZXRadz5RfVb23CO21O1fWLE3TdVJDm71aofW
|
2530 |
+
0ozSJ8bi/zafmGWgE07GKmSb1ZASzxQG9Dvj1Ci+6A74q05IlG2OlTEQXO2iLb3VOm2yHLtgwEZL
|
2531 |
+
AfVJrn5GitB0jaEMAs7u/OePuGtm839EAL9mJRQr3RAwHQeWP032a7iPt3sMpTjr3kfb1V05/Iin
|
2532 |
+
89cqdPHoWqI7n1C6poxFNcJQZZXcY4Lv3b93TZxiyWNzFtApD0mpSPCzqrdsxacwOUBdrsTiXSZT
|
2533 |
+
8M4cIwhhqJQZugRiQOwfOHB3EgZxpzAYXSUnpQIDAQABo4GlMIGiMA4GA1UdDwEB/wQEAwIBBjAP
|
2534 |
+
BgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBS2CHsNesysIEyGVjJez6tuhS1wVzA/BgNVHR8EODA2
|
2535 |
+
MDSgMqAwhi5odHRwOi8vd3d3Mi5wdWJsaWMtdHJ1c3QuY29tL2NybC9jdC9jdHJvb3QuY3JsMB8G
|
2536 |
+
A1UdIwQYMBaAFLYIew16zKwgTIZWMl7Pq26FLXBXMA0GCSqGSIb3DQEBBQUAA4IBAQBW7wojoFRO
|
2537 |
+
lZfJ+InaRcHUowAl9B8Tq7ejhVhpwjCt2BWKLePJzYFa+HMjWqd8BfP9IjsO0QbE2zZMcwSO5bAi
|
2538 |
+
5MXzLqXZI+O4Tkogp24CJJ8iYGd7ix1yCcUxXOl5n4BHPa2hCwcUPUf/A2kaDAtE52Mlp3+yybh2
|
2539 |
+
hO0j9n0Hq0V+09+zv+mKts2oomcrUtW3ZfA5TGOgkXmTUg9U3YO7n9GPp1Nzw8v/MOx8BLjYRB+T
|
2540 |
+
X3EJIrduPuocA06dGiBh+4E37F78CkWr1+cXVdCg6mCbpvbjjFspwgZgFJ0tl0ypkxWdYcQBX0jW
|
2541 |
+
WL1WMRJOEcgh4LMRkWXbtKaIOM5V
|
2542 |
+
-----END CERTIFICATE-----
|
2543 |
+
|
2544 |
+
ePKI Root Certification Authority
|
2545 |
+
=================================
|
2546 |
+
-----BEGIN CERTIFICATE-----
|
2547 |
+
MIIFsDCCA5igAwIBAgIQFci9ZUdcr7iXAF7kBtK8nTANBgkqhkiG9w0BAQUFADBeMQswCQYDVQQG
|
2548 |
+
EwJUVzEjMCEGA1UECgwaQ2h1bmdod2EgVGVsZWNvbSBDby4sIEx0ZC4xKjAoBgNVBAsMIWVQS0kg
|
2549 |
+
Um9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNDEyMjAwMjMxMjdaFw0zNDEyMjAwMjMx
|
2550 |
+
MjdaMF4xCzAJBgNVBAYTAlRXMSMwIQYDVQQKDBpDaHVuZ2h3YSBUZWxlY29tIENvLiwgTHRkLjEq
|
2551 |
+
MCgGA1UECwwhZVBLSSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0B
|
2552 |
+
AQEFAAOCAg8AMIICCgKCAgEA4SUP7o3biDN1Z82tH306Tm2d0y8U82N0ywEhajfqhFAHSyZbCUNs
|
2553 |
+
IZ5qyNUD9WBpj8zwIuQf5/dqIjG3LBXy4P4AakP/h2XGtRrBp0xtInAhijHyl3SJCRImHJ7K2RKi
|
2554 |
+
lTza6We/CKBk49ZCt0Xvl/T29de1ShUCWH2YWEtgvM3XDZoTM1PRYfl61dd4s5oz9wCGzh1NlDiv
|
2555 |
+
qOx4UXCKXBCDUSH3ET00hl7lSM2XgYI1TBnsZfZrxQWh7kcT1rMhJ5QQCtkkO7q+RBNGMD+XPNjX
|
2556 |
+
12ruOzjjK9SXDrkb5wdJfzcq+Xd4z1TtW0ado4AOkUPB1ltfFLqfpo0kR0BZv3I4sjZsN/+Z0V0O
|
2557 |
+
WQqraffAsgRFelQArr5T9rXn4fg8ozHSqf4hUmTFpmfwdQcGlBSBVcYn5AGPF8Fqcde+S/uUWH1+
|
2558 |
+
ETOxQvdibBjWzwloPn9s9h6PYq2lY9sJpx8iQkEeb5mKPtf5P0B6ebClAZLSnT0IFaUQAS2zMnao
|
2559 |
+
lQ2zepr7BxB4EW/hj8e6DyUadCrlHJhBmd8hh+iVBmoKs2pHdmX2Os+PYhcZewoozRrSgx4hxyy/
|
2560 |
+
vv9haLdnG7t4TY3OZ+XkwY63I2binZB1NJipNiuKmpS5nezMirH4JYlcWrYvjB9teSSnUmjDhDXi
|
2561 |
+
Zo1jDiVN1Rmy5nk3pyKdVDECAwEAAaNqMGgwHQYDVR0OBBYEFB4M97Zn8uGSJglFwFU5Lnc/Qkqi
|
2562 |
+
MAwGA1UdEwQFMAMBAf8wOQYEZyoHAAQxMC8wLQIBADAJBgUrDgMCGgUAMAcGBWcqAwAABBRFsMLH
|
2563 |
+
ClZ87lt4DJX5GFPBphzYEDANBgkqhkiG9w0BAQUFAAOCAgEACbODU1kBPpVJufGBuvl2ICO1J2B0
|
2564 |
+
1GqZNF5sAFPZn/KmsSQHRGoqxqWOeBLoR9lYGxMqXnmbnwoqZ6YlPwZpVnPDimZI+ymBV3QGypzq
|
2565 |
+
KOg4ZyYr8dW1P2WT+DZdjo2NQCCHGervJ8A9tDkPJXtoUHRVnAxZfVo9QZQlUgjgRywVMRnVvwdV
|
2566 |
+
xrsStZf0X4OFunHB2WyBEXYKCrC/gpf36j36+uwtqSiUO1bd0lEursC9CBWMd1I0ltabrNMdjmEP
|
2567 |
+
NXubrjlpC2JgQCA2j6/7Nu4tCEoduL+bXPjqpRugc6bY+G7gMwRfaKonh+3ZwZCc7b3jajWvY9+r
|
2568 |
+
GNm65ulK6lCKD2GTHuItGeIwlDWSXQ62B68ZgI9HkFFLLk3dheLSClIKF5r8GrBQAuUBo2M3IUxE
|
2569 |
+
xJtRmREOc5wGj1QupyheRDmHVi03vYVElOEMSyycw5KFNGHLD7ibSkNS/jQ6fbjpKdx2qcgw+BRx
|
2570 |
+
gMYeNkh0IkFch4LoGHGLQYlE535YW6i4jRPpp2zDR+2zGp1iro2C6pSe3VkQw63d4k3jMdXH7Ojy
|
2571 |
+
sP6SHhYKGvzZ8/gntsm+HbRsZJB/9OTEW9c3rkIO3aQab3yIVMUWbuF6aC74Or8NpDyJO3inTmOD
|
2572 |
+
BCEIZ43ygknQW/2xzQ+DhNQ+IIX3Sj0rnP0qCglN6oH4EZw=
|
2573 |
+
-----END CERTIFICATE-----
|
2574 |
+
|
2575 |
+
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
|
2576 |
+
=============================================================================================================================
|
2577 |
+
-----BEGIN CERTIFICATE-----
|
2578 |
+
MIIFFzCCA/+gAwIBAgIBETANBgkqhkiG9w0BAQUFADCCASsxCzAJBgNVBAYTAlRSMRgwFgYDVQQH
|
2579 |
+
DA9HZWJ6ZSAtIEtvY2FlbGkxRzBFBgNVBAoMPlTDvHJraXllIEJpbGltc2VsIHZlIFRla25vbG9q
|
2580 |
+
aWsgQXJhxZ90xLFybWEgS3VydW11IC0gVMOcQsSwVEFLMUgwRgYDVQQLDD9VbHVzYWwgRWxla3Ry
|
2581 |
+
b25payB2ZSBLcmlwdG9sb2ppIEFyYcWfdMSxcm1hIEVuc3RpdMO8c8O8IC0gVUVLQUUxIzAhBgNV
|
2582 |
+
BAsMGkthbXUgU2VydGlmaWthc3lvbiBNZXJrZXppMUowSAYDVQQDDEFUw5xCxLBUQUsgVUVLQUUg
|
2583 |
+
S8O2ayBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsSAtIFPDvHLDvG0gMzAeFw0wNzA4
|
2584 |
+
MjQxMTM3MDdaFw0xNzA4MjExMTM3MDdaMIIBKzELMAkGA1UEBhMCVFIxGDAWBgNVBAcMD0dlYnpl
|
2585 |
+
IC0gS29jYWVsaTFHMEUGA1UECgw+VMO8cmtpeWUgQmlsaW1zZWwgdmUgVGVrbm9sb2ppayBBcmHF
|
2586 |
+
n3TEsXJtYSBLdXJ1bXUgLSBUw5xCxLBUQUsxSDBGBgNVBAsMP1VsdXNhbCBFbGVrdHJvbmlrIHZl
|
2587 |
+
IEtyaXB0b2xvamkgQXJhxZ90xLFybWEgRW5zdGl0w7xzw7wgLSBVRUtBRTEjMCEGA1UECwwaS2Ft
|
2588 |
+
dSBTZXJ0aWZpa2FzeW9uIE1lcmtlemkxSjBIBgNVBAMMQVTDnELEsFRBSyBVRUtBRSBLw7ZrIFNl
|
2589 |
+
cnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxIC0gU8O8csO8bSAzMIIBIjANBgkqhkiG9w0B
|
2590 |
+
AQEFAAOCAQ8AMIIBCgKCAQEAim1L/xCIOsP2fpTo6iBkcK4hgb46ezzb8R1Sf1n68yJMlaCQvEhO
|
2591 |
+
Eav7t7WNeoMojCZG2E6VQIdhn8WebYGHV2yKO7Rm6sxA/OOqbLLLAdsyv9Lrhc+hDVXDWzhXcLh1
|
2592 |
+
xnnRFDDtG1hba+818qEhTsXOfJlfbLm4IpNQp81McGq+agV/E5wrHur+R84EpW+sky58K5+eeROR
|
2593 |
+
6Oqeyjh1jmKwlZMq5d/pXpduIF9fhHpEORlAHLpVK/swsoHvhOPc7Jg4OQOFCKlUAwUp8MmPi+oL
|
2594 |
+
hmUZEdPpCSPeaJMDyTYcIW7OjGbxmTDY17PDHfiBLqi9ggtm/oLL4eAagsNAgQIDAQABo0IwQDAd
|
2595 |
+
BgNVHQ4EFgQUvYiHyY/2pAoLquvF/pEjnatKijIwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF
|
2596 |
+
MAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAB18+kmPNOm3JpIWmgV050vQbTlswyb2zrgxvMTfvCr4
|
2597 |
+
N5EY3ATIZJkrGG2AA1nJrvhY0D7twyOfaTyGOBye79oneNGEN3GKPEs5z35FBtYt2IpNeBLWrcLT
|
2598 |
+
y9LQQfMmNkqblWwM7uXRQydmwYj3erMgbOqwaSvHIOgMA8RBBZniP+Rr+KCGgceExh/VS4ESshYh
|
2599 |
+
LBOhgLJeDEoTniDYYkCrkOpkSi+sDQESeUWoL4cZaMjihccwsnX5OD+ywJO0a+IDRM5noN+J1q2M
|
2600 |
+
dqMTw5RhK2vZbMEHCiIHhWyFJEapvj+LeISCfiQMnf2BN+MlqO02TpUsyZyQ2uypQjyttgI=
|
2601 |
+
-----END CERTIFICATE-----
|
2602 |
+
|
2603 |
+
Buypass Class 2 CA 1
|
2604 |
+
====================
|
2605 |
+
-----BEGIN CERTIFICATE-----
|
2606 |
+
MIIDUzCCAjugAwIBAgIBATANBgkqhkiG9w0BAQUFADBLMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU
|
2607 |
+
QnV5cGFzcyBBUy05ODMxNjMzMjcxHTAbBgNVBAMMFEJ1eXBhc3MgQ2xhc3MgMiBDQSAxMB4XDTA2
|
2608 |
+
MTAxMzEwMjUwOVoXDTE2MTAxMzEwMjUwOVowSzELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBh
|
2609 |
+
c3MgQVMtOTgzMTYzMzI3MR0wGwYDVQQDDBRCdXlwYXNzIENsYXNzIDIgQ0EgMTCCASIwDQYJKoZI
|
2610 |
+
hvcNAQEBBQADggEPADCCAQoCggEBAIs8B0XY9t/mx8q6jUPFR42wWsE425KEHK8T1A9vNkYgxC7M
|
2611 |
+
cXA0ojTTNy7Y3Tp3L8DrKehc0rWpkTSHIln+zNvnma+WwajHQN2lFYxuyHyXA8vmIPLXl18xoS83
|
2612 |
+
0r7uvqmtqEyeIWZDO6i88wmjONVZJMHCR3axiFyCO7srpgTXjAePzdVBHfCuuCkslFJgNJQ72uA4
|
2613 |
+
0Z0zPhX0kzLFANq1KWYOOngPIVJfAuWSeyXTkh4vFZ2B5J2O6O+JzhRMVB0cgRJNcKi+EAUXfh/R
|
2614 |
+
uFdV7c27UsKwHnjCTTZoy1YmwVLBvXb3WNVyfh9EdrsAiR0WnVE1703CVu9r4Iw7DekCAwEAAaNC
|
2615 |
+
MEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUP42aWYv8e3uco684sDntkHGA1sgwDgYDVR0P
|
2616 |
+
AQH/BAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQAVGn4TirnoB6NLJzKyQJHyIdFkhb5jatLPgcIV
|
2617 |
+
1Xp+DCmsNx4cfHZSldq1fyOhKXdlyTKdqC5Wq2B2zha0jX94wNWZUYN/Xtm+DKhQ7SLHrQVMdvvt
|
2618 |
+
7h5HZPb3J31cKA9FxVxiXqaakZG3Uxcu3K1gnZZkOb1naLKuBctN518fV4bVIJwo+28TOPX2EZL2
|
2619 |
+
fZleHwzoq0QkKXJAPTZSr4xYkHPB7GEseaHsh7U/2k3ZIQAw3pDaDtMaSKk+hQsUi4y8QZ5q9w5w
|
2620 |
+
wDX3OaJdZtB7WZ+oRxKaJyOkLY4ng5IgodcVf/EuGO70SH8vf/GhGLWhC5SgYiAynB321O+/TIho
|
2621 |
+
-----END CERTIFICATE-----
|
2622 |
+
|
2623 |
+
Buypass Class 3 CA 1
|
2624 |
+
====================
|
2625 |
+
-----BEGIN CERTIFICATE-----
|
2626 |
+
MIIDUzCCAjugAwIBAgIBAjANBgkqhkiG9w0BAQUFADBLMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU
|
2627 |
+
QnV5cGFzcyBBUy05ODMxNjMzMjcxHTAbBgNVBAMMFEJ1eXBhc3MgQ2xhc3MgMyBDQSAxMB4XDTA1
|
2628 |
+
MDUwOTE0MTMwM1oXDTE1MDUwOTE0MTMwM1owSzELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBh
|
2629 |
+
c3MgQVMtOTgzMTYzMzI3MR0wGwYDVQQDDBRCdXlwYXNzIENsYXNzIDMgQ0EgMTCCASIwDQYJKoZI
|
2630 |
+
hvcNAQEBBQADggEPADCCAQoCggEBAKSO13TZKWTeXx+HgJHqTjnmGcZEC4DVC69TB4sSveZn8AKx
|
2631 |
+
ifZgisRbsELRwCGoy+Gb72RRtqfPFfV0gGgEkKBYouZ0plNTVUhjP5JW3SROjvi6K//zNIqeKNc0
|
2632 |
+
n6wv1g/xpC+9UrJJhW05NfBEMJNGJPO251P7vGGvqaMU+8IXF4Rs4HyI+MkcVyzwPX6UvCWThOia
|
2633 |
+
AJpFBUJXgPROztmuOfbIUxAMZTpHe2DC1vqRycZxbL2RhzyRhkmr8w+gbCZ2Xhysm3HljbybIR6c
|
2634 |
+
1jh+JIAVMYKWsUnTYjdbiAwKYjT+p0h+mbEwi5A3lRyoH6UsjfRVyNvdWQrCrXig9IsCAwEAAaNC
|
2635 |
+
MEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUOBTmyPCppAP0Tj4io1vy1uCtQHQwDgYDVR0P
|
2636 |
+
AQH/BAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQABZ6OMySU9E2NdFm/soT4JXJEVKirZgCFPBdy7
|
2637 |
+
pYmrEzMqnji3jG8CcmPHc3ceCQa6Oyh7pEfJYWsICCD8igWKH7y6xsL+z27sEzNxZy5p+qksP2bA
|
2638 |
+
EllNC1QCkoS72xLvg3BweMhT+t/Gxv/ciC8HwEmdMldg0/L2mSlf56oBzKwzqBwKu5HEA6BvtjT5
|
2639 |
+
htOzdlSY9EqBs1OdTUDs5XcTRa9bqh/YL0yCe/4qxFi7T/ye/QNlGioOw6UgFpRreaaiErS7GqQj
|
2640 |
+
el/wroQk5PMr+4okoyeYZdowdXb8GZHo2+ubPzK/QJcHJrrM85SFSnonk8+QQtS4Wxam58tAA915
|
2641 |
+
-----END CERTIFICATE-----
|
2642 |
+
|
2643 |
+
EBG Elektronik Sertifika Hizmet Sa\xC4\x9Flay\xc4\xb1\x63\xc4\xb1s\xc4\xb1
|
2644 |
+
==========================================================================
|
2645 |
+
-----BEGIN CERTIFICATE-----
|
2646 |
+
MIIF5zCCA8+gAwIBAgIITK9zQhyOdAIwDQYJKoZIhvcNAQEFBQAwgYAxODA2BgNVBAMML0VCRyBF
|
2647 |
+
bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMTcwNQYDVQQKDC5FQkcg
|
2648 |
+
QmlsacWfaW0gVGVrbm9sb2ppbGVyaSB2ZSBIaXptZXRsZXJpIEEuxZ4uMQswCQYDVQQGEwJUUjAe
|
2649 |
+
Fw0wNjA4MTcwMDIxMDlaFw0xNjA4MTQwMDMxMDlaMIGAMTgwNgYDVQQDDC9FQkcgRWxla3Ryb25p
|
2650 |
+
ayBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsTE3MDUGA1UECgwuRUJHIEJpbGnFn2lt
|
2651 |
+
IFRla25vbG9qaWxlcmkgdmUgSGl6bWV0bGVyaSBBLsWeLjELMAkGA1UEBhMCVFIwggIiMA0GCSqG
|
2652 |
+
SIb3DQEBAQUAA4ICDwAwggIKAoICAQDuoIRh0DpqZhAy2DE4f6en5f2h4fuXd7hxlugTlkaDT7by
|
2653 |
+
X3JWbhNgpQGR4lvFzVcfd2NR/y8927k/qqk153nQ9dAktiHq6yOU/im/+4mRDGSaBUorzAzu8T2b
|
2654 |
+
gmmkTPiab+ci2hC6X5L8GCcKqKpE+i4stPtGmggDg3KriORqcsnlZR9uKg+ds+g75AxuetpX/dfr
|
2655 |
+
eYteIAbTdgtsApWjluTLdlHRKJ2hGvxEok3MenaoDT2/F08iiFD9rrbskFBKW5+VQarKD7JK/oCZ
|
2656 |
+
TqNGFav4c0JqwmZ2sQomFd2TkuzbqV9UIlKRcF0T6kjsbgNs2d1s/OsNA/+mgxKb8amTD8UmTDGy
|
2657 |
+
Y5lhcucqZJnSuOl14nypqZoaqsNW2xCaPINStnuWt6yHd6i58mcLlEOzrz5z+kI2sSXFCjEmN1Zn
|
2658 |
+
uqMLfdb3ic1nobc6HmZP9qBVFCVMLDMNpkGMvQQxahByCp0OLna9XvNRiYuoP1Vzv9s6xiQFlpJI
|
2659 |
+
qkuNKgPlV5EQ9GooFW5Hd4RcUXSfGenmHmMWOeMRFeNYGkS9y8RsZteEBt8w9DeiQyJ50hBs37vm
|
2660 |
+
ExH8nYQKE3vwO9D8owrXieqWfo1IhR5kX9tUoqzVegJ5a9KK8GfaZXINFHDk6Y54jzJ0fFfy1tb0
|
2661 |
+
Nokb+Clsi7n2l9GkLqq+CxnCRelwXQIDAJ3Zo2MwYTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB
|
2662 |
+
/wQEAwIBBjAdBgNVHQ4EFgQU587GT/wWZ5b6SqMHwQSny2re2kcwHwYDVR0jBBgwFoAU587GT/wW
|
2663 |
+
Z5b6SqMHwQSny2re2kcwDQYJKoZIhvcNAQEFBQADggIBAJuYml2+8ygjdsZs93/mQJ7ANtyVDR2t
|
2664 |
+
FcU22NU57/IeIl6zgrRdu0waypIN30ckHrMk2pGI6YNw3ZPX6bqz3xZaPt7gyPvT/Wwp+BVGoGgm
|
2665 |
+
zJNSroIBk5DKd8pNSe/iWtkqvTDOTLKBtjDOWU/aWR1qeqRFsIImgYZ29fUQALjuswnoT4cCB64k
|
2666 |
+
XPBfrAowzIpAoHMEwfuJJPaaHFy3PApnNgUIMbOv2AFoKuB4j3TeuFGkjGwgPaL7s9QJ/XvCgKqT
|
2667 |
+
bCmYIai7FvOpEl90tYeY8pUm3zTvilORiF0alKM/fCL414i6poyWqD1SNGKfAB5UVUJnxk1Gj7sU
|
2668 |
+
RT0KlhaOEKGXmdXTMIXM3rRyt7yKPBgpaP3ccQfuJDlq+u2lrDgv+R4QDgZxGhBM/nV+/x5XOULK
|
2669 |
+
1+EVoVZVWRvRo68R2E7DpSvvkL/A7IITW43WciyTTo9qKd+FPNMN4KIYEsxVL0e3p5sC/kH2iExt
|
2670 |
+
2qkBR4NkJ2IQgtYSe14DHzSpyZH+r11thie3I6p1GMog57AP14kOpmciY/SDQSsGS7tY1dHXt7kQ
|
2671 |
+
Y9iJSrSq3RZj9W6+YKH47ejWkE8axsWgKdOnIaj1Wjz3x0miIZpKlVIglnKaZsv30oZDfCK+lvm9
|
2672 |
+
AahH3eU7QPl1K5srRmSGjR70j/sHd9DqSaIcjVIUpgqT
|
2673 |
+
-----END CERTIFICATE-----
|
2674 |
+
|
2675 |
+
certSIGN ROOT CA
|
2676 |
+
================
|
2677 |
+
-----BEGIN CERTIFICATE-----
|
2678 |
+
MIIDODCCAiCgAwIBAgIGIAYFFnACMA0GCSqGSIb3DQEBBQUAMDsxCzAJBgNVBAYTAlJPMREwDwYD
|
2679 |
+
VQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBDQTAeFw0wNjA3MDQxNzIwMDRa
|
2680 |
+
Fw0zMTA3MDQxNzIwMDRaMDsxCzAJBgNVBAYTAlJPMREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UE
|
2681 |
+
CxMQY2VydFNJR04gUk9PVCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALczuX7I
|
2682 |
+
JUqOtdu0KBuqV5Do0SLTZLrTk+jUrIZhQGpgV2hUhE28alQCBf/fm5oqrl0Hj0rDKH/v+yv6efHH
|
2683 |
+
rfAQUySQi2bJqIirr1qjAOm+ukbuW3N7LBeCgV5iLKECZbO9xSsAfsT8AzNXDe3i+s5dRdY4zTW2
|
2684 |
+
ssHQnIFKquSyAVwdj1+ZxLGt24gh65AIgoDzMKND5pCCrlUoSe1b16kQOA7+j0xbm0bqQfWwCHTD
|
2685 |
+
0IgztnzXdN/chNFDDnU5oSVAKOp4yw4sLjmdjItuFhwvJoIQ4uNllAoEwF73XVv4EOLQunpL+943
|
2686 |
+
AAAaWyjj0pxzPjKHmKHJUS/X3qwzs08CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8B
|
2687 |
+
Af8EBAMCAcYwHQYDVR0OBBYEFOCMm9slSbPxfIbWskKHC9BroNnkMA0GCSqGSIb3DQEBBQUAA4IB
|
2688 |
+
AQA+0hyJLjX8+HXd5n9liPRyTMks1zJO890ZeUe9jjtbkw9QSSQTaxQGcu8J06Gh40CEyecYMnQ8
|
2689 |
+
SG4Pn0vU9x7Tk4ZkVJdjclDVVc/6IJMCopvDI5NOFlV2oHB5bc0hH88vLbwZ44gx+FkagQnIl6Z0
|
2690 |
+
x2DEW8xXjrJ1/RsCCdtZb3KTafcxQdaIOL+Hsr0Wefmq5L6IJd1hJyMctTEHBDa0GpC9oHRxUIlt
|
2691 |
+
vBTjD4au8as+x6AJzKNI0eDbZOeStc+vckNwi/nDhDwTqn6Sm1dTk/pwwpEOMfmbZ13pljheX7Nz
|
2692 |
+
TogVZ96edhBiIL5VaZVDADlN9u6wWk5JRFRYX0KD
|
2693 |
+
-----END CERTIFICATE-----
|
2694 |
+
|
2695 |
+
CNNIC ROOT
|
2696 |
+
==========
|
2697 |
+
-----BEGIN CERTIFICATE-----
|
2698 |
+
MIIDVTCCAj2gAwIBAgIESTMAATANBgkqhkiG9w0BAQUFADAyMQswCQYDVQQGEwJDTjEOMAwGA1UE
|
2699 |
+
ChMFQ05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1QwHhcNMDcwNDE2MDcwOTE0WhcNMjcwNDE2MDcw
|
2700 |
+
OTE0WjAyMQswCQYDVQQGEwJDTjEOMAwGA1UEChMFQ05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1Qw
|
2701 |
+
ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDTNfc/c3et6FtzF8LRb+1VvG7q6KR5smzD
|
2702 |
+
o+/hn7E7SIX1mlwhIhAsxYLO2uOabjfhhyzcuQxauohV3/2q2x8x6gHx3zkBwRP9SFIhxFXf2tiz
|
2703 |
+
VHa6dLG3fdfA6PZZxU3Iva0fFNrfWEQlMhkqx35+jq44sDB7R3IJMfAw28Mbdim7aXZOV/kbZKKT
|
2704 |
+
VrdvmW7bCgScEeOAH8tjlBAKqeFkgjH5jCftppkA9nCTGPihNIaj3XrCGHn2emU1z5DrvTOTn1Or
|
2705 |
+
czvmmzQgLx3vqR1jGqCA2wMv+SYahtKNu6m+UjqHZ0gNv7Sg2Ca+I19zN38m5pIEo3/PIKe38zrK
|
2706 |
+
y5nLAgMBAAGjczBxMBEGCWCGSAGG+EIBAQQEAwIABzAfBgNVHSMEGDAWgBRl8jGtKvf33VKWCscC
|
2707 |
+
wQ7vptU7ETAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIB/jAdBgNVHQ4EFgQUZfIxrSr3991S
|
2708 |
+
lgrHAsEO76bVOxEwDQYJKoZIhvcNAQEFBQADggEBAEs17szkrr/Dbq2flTtLP1se31cpolnKOOK5
|
2709 |
+
Gv+e5m4y3R6u6jW39ZORTtpC4cMXYFDy0VwmuYK36m3knITnA3kXr5g9lNvHugDnuL8BV8F3RTIM
|
2710 |
+
O/G0HAiw/VGgod2aHRM2mm23xzy54cXZF/qD1T0VoDy7HgviyJA/qIYM/PmLXoXLT1tLYhFHxUV8
|
2711 |
+
BS9BsZ4QaRuZluBVeftOhpm4lNqGOGqTo+fLbuXf6iFViZx9fX+Y9QCJ7uOEwFyWtcVG6kbghVW2
|
2712 |
+
G8kS1sHNzYDzAgE8yGnLRUhj2JTQ7IUOO04RZfSCjKY9ri4ilAnIXOo8gV0WKgOXFlUJ24pBgp5m
|
2713 |
+
mxE=
|
2714 |
+
-----END CERTIFICATE-----
|
2715 |
+
|
2716 |
+
ApplicationCA - Japanese Government
|
2717 |
+
===================================
|
2718 |
+
-----BEGIN CERTIFICATE-----
|
2719 |
+
MIIDoDCCAoigAwIBAgIBMTANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQGEwJKUDEcMBoGA1UEChMT
|
2720 |
+
SmFwYW5lc2UgR292ZXJubWVudDEWMBQGA1UECxMNQXBwbGljYXRpb25DQTAeFw0wNzEyMTIxNTAw
|
2721 |
+
MDBaFw0xNzEyMTIxNTAwMDBaMEMxCzAJBgNVBAYTAkpQMRwwGgYDVQQKExNKYXBhbmVzZSBHb3Zl
|
2722 |
+
cm5tZW50MRYwFAYDVQQLEw1BcHBsaWNhdGlvbkNBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
|
2723 |
+
CgKCAQEAp23gdE6Hj6UG3mii24aZS2QNcfAKBZuOquHMLtJqO8F6tJdhjYq+xpqcBrSGUeQ3DnR4
|
2724 |
+
fl+Kf5Sk10cI/VBaVuRorChzoHvpfxiSQE8tnfWuREhzNgaeZCw7NCPbXCbkcXmP1G55IrmTwcrN
|
2725 |
+
wVbtiGrXoDkhBFcsovW8R0FPXjQilbUfKW1eSvNNcr5BViCH/OlQR9cwFO5cjFW6WY2H/CPek9AE
|
2726 |
+
jP3vbb3QesmlOmpyM8ZKDQUXKi17safY1vC+9D/qDihtQWEjdnjDuGWk81quzMKq2edY3rZ+nYVu
|
2727 |
+
nyoKb58DKTCXKB28t89UKU5RMfkntigm/qJj5kEW8DOYRwIDAQABo4GeMIGbMB0GA1UdDgQWBBRU
|
2728 |
+
WssmP3HMlEYNllPqa0jQk/5CdTAOBgNVHQ8BAf8EBAMCAQYwWQYDVR0RBFIwUKROMEwxCzAJBgNV
|
2729 |
+
BAYTAkpQMRgwFgYDVQQKDA/ml6XmnKzlm73mlL/lupwxIzAhBgNVBAsMGuOCouODl+ODquOCseOD
|
2730 |
+
vOOCt+ODp+ODs0NBMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBADlqRHZ3ODrs
|
2731 |
+
o2dGD/mLBqj7apAxzn7s2tGJfHrrLgy9mTLnsCTWw//1sogJhyzjVOGjprIIC8CFqMjSnHH2HZ9g
|
2732 |
+
/DgzE+Ge3Atf2hZQKXsvcJEPmbo0NI2VdMV+eKlmXb3KIXdCEKxmJj3ekav9FfBv7WxfEPjzFvYD
|
2733 |
+
io+nEhEMy/0/ecGc/WLuo89UDNErXxc+4z6/wCs+CZv+iKZ+tJIX/COUgb1up8WMwusRRdv4QcmW
|
2734 |
+
dupwX3kSa+SjB1oF7ydJzyGfikwJcGapJsErEU4z0g781mzSDjJkaP+tBXhfAx2o45CsJOAPQKdL
|
2735 |
+
rosot4LKGAfmt1t06SAZf7IbiVQ=
|
2736 |
+
-----END CERTIFICATE-----
|
2737 |
+
|
2738 |
+
GeoTrust Primary Certification Authority - G3
|
2739 |
+
=============================================
|
2740 |
+
-----BEGIN CERTIFICATE-----
|
2741 |
+
MIID/jCCAuagAwIBAgIQFaxulBmyeUtB9iepwxgPHzANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UE
|
2742 |
+
BhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChjKSAyMDA4IEdlb1RydXN0
|
2743 |
+
IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFy
|
2744 |
+
eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEczMB4XDTA4MDQwMjAwMDAwMFoXDTM3MTIwMTIz
|
2745 |
+
NTk1OVowgZgxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAo
|
2746 |
+
YykgMjAwOCBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNVBAMT
|
2747 |
+
LUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZI
|
2748 |
+
hvcNAQEBBQADggEPADCCAQoCggEBANziXmJYHTNXOTIz+uvLh4yn1ErdBojqZI4xmKU4kB6Yzy5j
|
2749 |
+
K/BGvESyiaHAKAxJcCGVn2TAppMSAmUmhsalifD614SgcK9PGpc/BkTVyetyEH3kMSj7HGHmKAdE
|
2750 |
+
c5IiaacDiGydY8hS2pgn5whMcD60yRLBxWeDXTPzAxHsatBT4tG6NmCUgLthY2xbF37fQJQeqw3C
|
2751 |
+
IShwiP/WJmxsYAQlTlV+fe+/lEjetx3dcI0FX4ilm/LC7urRQEFtYjgdVgbFA0dRIBn8exALDmKu
|
2752 |
+
dlW/X3e+PkkBUz2YJQN2JFodtNuJ6nnltrM7P7pMKEF/BqxqjsHQ9gUdfeZChuOl1UcCAwEAAaNC
|
2753 |
+
MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMR5yo6hTgMdHNxr
|
2754 |
+
2zFblD4/MH8tMA0GCSqGSIb3DQEBCwUAA4IBAQAtxRPPVoB7eni9n64smefv2t+UXglpp+duaIy9
|
2755 |
+
cr5HqQ6XErhK8WTTOd8lNNTBzU6B8A8ExCSzNJbGpqow32hhc9f5joWJ7w5elShKKiePEI4ufIbE
|
2756 |
+
Ap7aDHdlDkQNkv39sxY2+hENHYwOB4lqKVb3cvTdFZx3NWZXqxNT2I7BQMXXExZacse3aQHEerGD
|
2757 |
+
AWh9jUGhlBjBJVz88P6DAod8DQ3PLghcSkANPuyBYeYk28rgDi0Hsj5W3I31QYUHSJsMC8tJP33s
|
2758 |
+
t/3LjWeJGqvtux6jAAgIFyqCXDFdRootD4abdNlF+9RAsXqqaC2Gspki4cErx5z481+oghLrGREt
|
2759 |
+
-----END CERTIFICATE-----
|
2760 |
+
|
2761 |
+
thawte Primary Root CA - G2
|
2762 |
+
===========================
|
2763 |
+
-----BEGIN CERTIFICATE-----
|
2764 |
+
MIICiDCCAg2gAwIBAgIQNfwmXNmET8k9Jj1Xm67XVjAKBggqhkjOPQQDAzCBhDELMAkGA1UEBhMC
|
2765 |
+
VVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjE4MDYGA1UECxMvKGMpIDIwMDcgdGhhd3RlLCBJbmMu
|
2766 |
+
IC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAiBgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3Qg
|
2767 |
+
Q0EgLSBHMjAeFw0wNzExMDUwMDAwMDBaFw0zODAxMTgyMzU5NTlaMIGEMQswCQYDVQQGEwJVUzEV
|
2768 |
+
MBMGA1UEChMMdGhhd3RlLCBJbmMuMTgwNgYDVQQLEy8oYykgMjAwNyB0aGF3dGUsIEluYy4gLSBG
|
2769 |
+
b3IgYXV0aG9yaXplZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAt
|
2770 |
+
IEcyMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEotWcgnuVnfFSeIf+iha/BebfowJPDQfGAFG6DAJS
|
2771 |
+
LSKkQjnE/o/qycG+1E3/n3qe4rF8mq2nhglzh9HnmuN6papu+7qzcMBniKI11KOasf2twu8x+qi5
|
2772 |
+
8/sIxpHR+ymVo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQU
|
2773 |
+
mtgAMADna3+FGO6Lts6KDPgR4bswCgYIKoZIzj0EAwMDaQAwZgIxAN344FdHW6fmCsO99YCKlzUN
|
2774 |
+
G4k8VIZ3KMqh9HneteY4sPBlcIx/AlTCv//YoT7ZzwIxAMSNlPzcU9LcnXgWHxUzI1NS41oxXZ3K
|
2775 |
+
rr0TKUQNJ1uo52icEvdYPy5yAlejj6EULg==
|
2776 |
+
-----END CERTIFICATE-----
|
2777 |
+
|
2778 |
+
thawte Primary Root CA - G3
|
2779 |
+
===========================
|
2780 |
+
-----BEGIN CERTIFICATE-----
|
2781 |
+
MIIEKjCCAxKgAwIBAgIQYAGXt0an6rS0mtZLL/eQ+zANBgkqhkiG9w0BAQsFADCBrjELMAkGA1UE
|
2782 |
+
BhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2
|
2783 |
+
aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIwMDggdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhv
|
2784 |
+
cml6ZWQgdXNlIG9ubHkxJDAiBgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMzAeFw0w
|
2785 |
+
ODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIGuMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhh
|
2786 |
+
d3RlLCBJbmMuMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNlcnZpY2VzIERpdmlzaW9uMTgwNgYD
|
2787 |
+
VQQLEy8oYykgMjAwOCB0aGF3dGUsIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEkMCIG
|
2788 |
+
A1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAtIEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
|
2789 |
+
MIIBCgKCAQEAsr8nLPvb2FvdeHsbnndmgcs+vHyu86YnmjSjaDFxODNi5PNxZnmxqWWjpYvVj2At
|
2790 |
+
P0LMqmsywCPLLEHd5N/8YZzic7IilRFDGF/Eth9XbAoFWCLINkw6fKXRz4aviKdEAhN0cXMKQlkC
|
2791 |
+
+BsUa0Lfb1+6a4KinVvnSr0eAXLbS3ToO39/fR8EtCab4LRarEc9VbjXsCZSKAExQGbY2SS99irY
|
2792 |
+
7CFJXJv2eul/VTV+lmuNk5Mny5K76qxAwJ/C+IDPXfRa3M50hqY+bAtTyr2SzhkGcuYMXDhpxwTW
|
2793 |
+
vGzOW/b3aJzcJRVIiKHpqfiYnODz1TEoYRFsZ5aNOZnLwkUkOQIDAQABo0IwQDAPBgNVHRMBAf8E
|
2794 |
+
BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUrWyqlGCc7eT/+j4KdCtjA/e2Wb8wDQYJ
|
2795 |
+
KoZIhvcNAQELBQADggEBABpA2JVlrAmSicY59BDlqQ5mU1143vokkbvnRFHfxhY0Cu9qRFHqKweK
|
2796 |
+
A3rD6z8KLFIWoCtDuSWQP3CpMyVtRRooOyfPqsMpQhvfO0zAMzRbQYi/aytlryjvsvXDqmbOe1bu
|
2797 |
+
t8jLZ8HJnBoYuMTDSQPxYA5QzUbF83d597YV4Djbxy8ooAw/dyZ02SUS2jHaGh7cKUGRIjxpp7sC
|
2798 |
+
8rZcJwOJ9Abqm+RyguOhCcHpABnTPtRwa7pxpqpYrvS76Wy274fMm7v/OeZWYdMKp8RcTGB7BXcm
|
2799 |
+
er/YB1IsYvdwY9k5vG8cwnncdimvzsUsZAReiDZuMdRAGmI0Nj81Aa6sY6A=
|
2800 |
+
-----END CERTIFICATE-----
|
2801 |
+
|
2802 |
+
GeoTrust Primary Certification Authority - G2
|
2803 |
+
=============================================
|
2804 |
+
-----BEGIN CERTIFICATE-----
|
2805 |
+
MIICrjCCAjWgAwIBAgIQPLL0SAoA4v7rJDteYD7DazAKBggqhkjOPQQDAzCBmDELMAkGA1UEBhMC
|
2806 |
+
VVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChjKSAyMDA3IEdlb1RydXN0IElu
|
2807 |
+
Yy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBD
|
2808 |
+
ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMB4XDTA3MTEwNTAwMDAwMFoXDTM4MDExODIzNTk1
|
2809 |
+
OVowgZgxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykg
|
2810 |
+
MjAwNyBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNVBAMTLUdl
|
2811 |
+
b1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjB2MBAGByqGSM49AgEG
|
2812 |
+
BSuBBAAiA2IABBWx6P0DFUPlrOuHNxFi79KDNlJ9RVcLSo17VDs6bl8VAsBQps8lL33KSLjHUGMc
|
2813 |
+
KiEIfJo22Av+0SbFWDEwKCXzXV2juLaltJLtbCyf691DiaI8S0iRHVDsJt/WYC69IaNCMEAwDwYD
|
2814 |
+
VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBVfNVdRVfslsq0DafwBo/q+
|
2815 |
+
EVXVMAoGCCqGSM49BAMDA2cAMGQCMGSWWaboCd6LuvpaiIjwH5HTRqjySkwCY/tsXzjbLkGTqQ7m
|
2816 |
+
ndwxHLKgpxgceeHHNgIwOlavmnRs9vuD4DPTCF+hnMJbn0bWtsuRBmOiBuczrD6ogRLQy7rQkgu2
|
2817 |
+
npaqBA+K
|
2818 |
+
-----END CERTIFICATE-----
|
2819 |
+
|
2820 |
+
VeriSign Universal Root Certification Authority
|
2821 |
+
===============================================
|
2822 |
+
-----BEGIN CERTIFICATE-----
|
2823 |
+
MIIEuTCCA6GgAwIBAgIQQBrEZCGzEyEDDrvkEhrFHTANBgkqhkiG9w0BAQsFADCBvTELMAkGA1UE
|
2824 |
+
BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBO
|
2825 |
+
ZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVk
|
2826 |
+
IHVzZSBvbmx5MTgwNgYDVQQDEy9WZXJpU2lnbiBVbml2ZXJzYWwgUm9vdCBDZXJ0aWZpY2F0aW9u
|
2827 |
+
IEF1dGhvcml0eTAeFw0wODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIG9MQswCQYDVQQGEwJV
|
2828 |
+
UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv
|
2829 |
+
cmsxOjA4BgNVBAsTMShjKSAyMDA4IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
|
2830 |
+
IG9ubHkxODA2BgNVBAMTL1ZlcmlTaWduIFVuaXZlcnNhbCBSb290IENlcnRpZmljYXRpb24gQXV0
|
2831 |
+
aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx2E3XrEBNNti1xWb/1hajCMj
|
2832 |
+
1mCOkdeQmIN65lgZOIzF9uVkhbSicfvtvbnazU0AtMgtc6XHaXGVHzk8skQHnOgO+k1KxCHfKWGP
|
2833 |
+
MiJhgsWHH26MfF8WIFFE0XBPV+rjHOPMee5Y2A7Cs0WTwCznmhcrewA3ekEzeOEz4vMQGn+HLL72
|
2834 |
+
9fdC4uW/h2KJXwBL38Xd5HVEMkE6HnFuacsLdUYI0crSK5XQz/u5QGtkjFdN/BMReYTtXlT2NJ8I
|
2835 |
+
AfMQJQYXStrxHXpma5hgZqTZ79IugvHw7wnqRMkVauIDbjPTrJ9VAMf2CGqUuV/c4DPxhGD5WycR
|
2836 |
+
tPwW8rtWaoAljQIDAQABo4GyMIGvMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMG0G
|
2837 |
+
CCsGAQUFBwEMBGEwX6FdoFswWTBXMFUWCWltYWdlL2dpZjAhMB8wBwYFKw4DAhoEFI/l0xqGrI2O
|
2838 |
+
a8PPgGrUSBgsexkuMCUWI2h0dHA6Ly9sb2dvLnZlcmlzaWduLmNvbS92c2xvZ28uZ2lmMB0GA1Ud
|
2839 |
+
DgQWBBS2d/ppSEefUxLVwuoHMnYH0ZcHGTANBgkqhkiG9w0BAQsFAAOCAQEASvj4sAPmLGd75JR3
|
2840 |
+
Y8xuTPl9Dg3cyLk1uXBPY/ok+myDjEedO2Pzmvl2MpWRsXe8rJq+seQxIcaBlVZaDrHC1LGmWazx
|
2841 |
+
Y8u4TB1ZkErvkBYoH1quEPuBUDgMbMzxPcP1Y+Oz4yHJJDnp/RVmRvQbEdBNc6N9Rvk97ahfYtTx
|
2842 |
+
P/jgdFcrGJ2BtMQo2pSXpXDrrB2+BxHw1dvd5Yzw1TKwg+ZX4o+/vqGqvz0dtdQ46tewXDpPaj+P
|
2843 |
+
wGZsY6rp2aQW9IHRlRQOfc2VNNnSj3BzgXucfr2YYdhFh5iQxeuGMMY1v/D/w1WIg0vvBZIGcfK4
|
2844 |
+
mJO37M2CYfE45k+XmCpajQ==
|
2845 |
+
-----END CERTIFICATE-----
|
2846 |
+
|
2847 |
+
VeriSign Class 3 Public Primary Certification Authority - G4
|
2848 |
+
============================================================
|
2849 |
+
-----BEGIN CERTIFICATE-----
|
2850 |
+
MIIDhDCCAwqgAwIBAgIQL4D+I4wOIg9IZxIokYesszAKBggqhkjOPQQDAzCByjELMAkGA1UEBhMC
|
2851 |
+
VVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3
|
2852 |
+
b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVz
|
2853 |
+
ZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmlj
|
2854 |
+
YXRpb24gQXV0aG9yaXR5IC0gRzQwHhcNMDcxMTA1MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCByjEL
|
2855 |
+
MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBU
|
2856 |
+
cnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRo
|
2857 |
+
b3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5
|
2858 |
+
IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzQwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASnVnp8
|
2859 |
+
Utpkmw4tXNherJI9/gHmGUo9FANL+mAnINmDiWn6VMaaGF5VKmTeBvaNSjutEDxlPZCIBIngMGGz
|
2860 |
+
rl0Bp3vefLK+ymVhAIau2o970ImtTR1ZmkGxvEeA3J5iw/mjgbIwga8wDwYDVR0TAQH/BAUwAwEB
|
2861 |
+
/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEw
|
2862 |
+
HzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVyaXNpZ24u
|
2863 |
+
Y29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFLMWkf3upm7ktS5Jj4d4gYDs5bG1MAoGCCqGSM49BAMD
|
2864 |
+
A2gAMGUCMGYhDBgmYFo4e1ZC4Kf8NoRRkSAsdk1DPcQdhCPQrNZ8NQbOzWm9kA3bbEhCHQ6qQgIx
|
2865 |
+
AJw9SDkjOVgaFRJZap7v1VmyHVIsmXHNxynfGyphe3HR3vPA5Q06Sqotp9iGKt0uEA==
|
2866 |
+
-----END CERTIFICATE-----
|
2867 |
+
|
2868 |
+
NetLock Arany (Class Gold) Főtanúsítvány
|
2869 |
+
============================================
|
2870 |
+
-----BEGIN CERTIFICATE-----
|
2871 |
+
MIIEFTCCAv2gAwIBAgIGSUEs5AAQMA0GCSqGSIb3DQEBCwUAMIGnMQswCQYDVQQGEwJIVTERMA8G
|
2872 |
+
A1UEBwwIQnVkYXBlc3QxFTATBgNVBAoMDE5ldExvY2sgS2Z0LjE3MDUGA1UECwwuVGFuw7pzw610
|
2873 |
+
dsOhbnlraWFkw7NrIChDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzKTE1MDMGA1UEAwwsTmV0TG9jayBB
|
2874 |
+
cmFueSAoQ2xhc3MgR29sZCkgRsWRdGFuw7pzw610dsOhbnkwHhcNMDgxMjExMTUwODIxWhcNMjgx
|
2875 |
+
MjA2MTUwODIxWjCBpzELMAkGA1UEBhMCSFUxETAPBgNVBAcMCEJ1ZGFwZXN0MRUwEwYDVQQKDAxO
|
2876 |
+
ZXRMb2NrIEtmdC4xNzA1BgNVBAsMLlRhbsO6c8OtdHbDoW55a2lhZMOzayAoQ2VydGlmaWNhdGlv
|
2877 |
+
biBTZXJ2aWNlcykxNTAzBgNVBAMMLE5ldExvY2sgQXJhbnkgKENsYXNzIEdvbGQpIEbFkXRhbsO6
|
2878 |
+
c8OtdHbDoW55MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxCRec75LbRTDofTjl5Bu
|
2879 |
+
0jBFHjzuZ9lk4BqKf8owyoPjIMHj9DrTlF8afFttvzBPhCf2nx9JvMaZCpDyD/V/Q4Q3Y1GLeqVw
|
2880 |
+
/HpYzY6b7cNGbIRwXdrzAZAj/E4wqX7hJ2Pn7WQ8oLjJM2P+FpD/sLj916jAwJRDC7bVWaaeVtAk
|
2881 |
+
H3B5r9s5VA1lddkVQZQBr17s9o3x/61k/iCa11zr/qYfCGSji3ZVrR47KGAuhyXoqq8fxmRGILdw
|
2882 |
+
fzzeSNuWU7c5d+Qa4scWhHaXWy+7GRWF+GmF9ZmnqfI0p6m2pgP8b4Y9VHx2BJtr+UBdADTHLpl1
|
2883 |
+
neWIA6pN+APSQnbAGwIDAKiLo0UwQzASBgNVHRMBAf8ECDAGAQH/AgEEMA4GA1UdDwEB/wQEAwIB
|
2884 |
+
BjAdBgNVHQ4EFgQUzPpnk/C2uNClwB7zU/2MU9+D15YwDQYJKoZIhvcNAQELBQADggEBAKt/7hwW
|
2885 |
+
qZw8UQCgwBEIBaeZ5m8BiFRhbvG5GK1Krf6BQCOUL/t1fC8oS2IkgYIL9WHxHG64YTjrgfpioTta
|
2886 |
+
YtOUZcTh5m2C+C8lcLIhJsFyUR+MLMOEkMNaj7rP9KdlpeuY0fsFskZ1FSNqb4VjMIDw1Z4fKRzC
|
2887 |
+
bLBQWV2QWzuoDTDPv31/zvGdg73JRm4gpvlhUbohL3u+pRVjodSVh/GeufOJ8z2FuLjbvrW5Kfna
|
2888 |
+
NwUASZQDhETnv0Mxz3WLJdH0pmT1kvarBes96aULNmLazAZfNou2XjG4Kvte9nHfRCaexOYNkbQu
|
2889 |
+
dZWAUWpLMKawYqGT8ZvYzsRjdT9ZR7E=
|
2890 |
+
-----END CERTIFICATE-----
|
2891 |
+
|
2892 |
+
Staat der Nederlanden Root CA - G2
|
2893 |
+
==================================
|
2894 |
+
-----BEGIN CERTIFICATE-----
|
2895 |
+
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
|
2921 |
+
66+KAQ==
|
2922 |
+
-----END CERTIFICATE-----
|
2923 |
+
|
2924 |
+
CA Disig
|
2925 |
+
========
|
2926 |
+
-----BEGIN CERTIFICATE-----
|
2927 |
+
MIIEDzCCAvegAwIBAgIBATANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQGEwJTSzETMBEGA1UEBxMK
|
2928 |
+
QnJhdGlzbGF2YTETMBEGA1UEChMKRGlzaWcgYS5zLjERMA8GA1UEAxMIQ0EgRGlzaWcwHhcNMDYw
|
2929 |
+
MzIyMDEzOTM0WhcNMTYwMzIyMDEzOTM0WjBKMQswCQYDVQQGEwJTSzETMBEGA1UEBxMKQnJhdGlz
|
2930 |
+
bGF2YTETMBEGA1UEChMKRGlzaWcgYS5zLjERMA8GA1UEAxMIQ0EgRGlzaWcwggEiMA0GCSqGSIb3
|
2931 |
+
DQEBAQUAA4IBDwAwggEKAoIBAQCS9jHBfYj9mQGp2HvycXXxMcbzdWb6UShGhJd4NLxs/LxFWYgm
|
2932 |
+
GErENx+hSkS943EE9UQX4j/8SFhvXJ56CbpRNyIjZkMhsDxkovhqFQ4/61HhVKndBpnXmjxUizkD
|
2933 |
+
Pw/Fzsbrg3ICqB9x8y34dQjbYkzo+s7552oftms1grrijxaSfQUMbEYDXcDtab86wYqg6I7ZuUUo
|
2934 |
+
hwjstMoVvoLdtUSLLa2GDGhibYVW8qwUYzrG0ZmsNHhWS8+2rT+MitcE5eN4TPWGqvWP+j1scaMt
|
2935 |
+
ymfraHtuM6kMgiioTGohQBUgDCZbg8KpFhXAJIJdKxatymP2dACw30PEEGBWZ2NFAgMBAAGjgf8w
|
2936 |
+
gfwwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUjbJJaJ1yCCW5wCf1UJNWSEZx+Y8wDgYDVR0P
|
2937 |
+
AQH/BAQDAgEGMDYGA1UdEQQvMC2BE2Nhb3BlcmF0b3JAZGlzaWcuc2uGFmh0dHA6Ly93d3cuZGlz
|
2938 |
+
aWcuc2svY2EwZgYDVR0fBF8wXTAtoCugKYYnaHR0cDovL3d3dy5kaXNpZy5zay9jYS9jcmwvY2Ff
|
2939 |
+
ZGlzaWcuY3JsMCygKqAohiZodHRwOi8vY2EuZGlzaWcuc2svY2EvY3JsL2NhX2Rpc2lnLmNybDAa
|
2940 |
+
BgNVHSAEEzARMA8GDSuBHpGT5goAAAABAQEwDQYJKoZIhvcNAQEFBQADggEBAF00dGFMrzvY/59t
|
2941 |
+
WDYcPQuBDRIrRhCA/ec8J9B6yKm2fnQwM6M6int0wHl5QpNt/7EpFIKrIYwvF/k/Ji/1WcbvgAa3
|
2942 |
+
mkkp7M5+cTxqEEHA9tOasnxakZzArFvITV734VP/Q3f8nktnbNfzg9Gg4H8l37iYC5oyOGwwoPP/
|
2943 |
+
CBUz91BKez6jPiCp3C9WgArtQVCwyfTssuMmRAAOb54GvCKWU3BlxFAKRmukLyeBEicTXxChds6K
|
2944 |
+
ezfqwzlhA5WYOudsiCUI/HloDYd9Yvi0X/vF2Ey9WLw/Q1vUHgFNPGO+I++MzVpQuGhU+QqZMxEA
|
2945 |
+
4Z7CRneC9VkGjCFMhwnN5ag=
|
2946 |
+
-----END CERTIFICATE-----
|
2947 |
+
|
2948 |
+
Juur-SK
|
2949 |
+
=======
|
2950 |
+
-----BEGIN CERTIFICATE-----
|
2951 |
+
MIIE5jCCA86gAwIBAgIEO45L/DANBgkqhkiG9w0BAQUFADBdMRgwFgYJKoZIhvcNAQkBFglwa2lA
|
2952 |
+
c2suZWUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKExlBUyBTZXJ0aWZpdHNlZXJpbWlza2Vza3VzMRAw
|
2953 |
+
DgYDVQQDEwdKdXVyLVNLMB4XDTAxMDgzMDE0MjMwMVoXDTE2MDgyNjE0MjMwMVowXTEYMBYGCSqG
|
2954 |
+
SIb3DQEJARYJcGtpQHNrLmVlMQswCQYDVQQGEwJFRTEiMCAGA1UEChMZQVMgU2VydGlmaXRzZWVy
|
2955 |
+
aW1pc2tlc2t1czEQMA4GA1UEAxMHSnV1ci1TSzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
|
2956 |
+
ggEBAIFxNj4zB9bjMI0TfncyRsvPGbJgMUaXhvSYRqTCZUXP00B841oiqBB4M8yIsdOBSvZiF3tf
|
2957 |
+
TQou0M+LI+5PAk676w7KvRhj6IAcjeEcjT3g/1tf6mTll+g/mX8MCgkzABpTpyHhOEvWgxutr2TC
|
2958 |
+
+Rx6jGZITWYfGAriPrsfB2WThbkasLnE+w0R9vXW+RvHLCu3GFH+4Hv2qEivbDtPL+/40UceJlfw
|
2959 |
+
UR0zlv/vWT3aTdEVNMfqPxZIe5EcgEMPPbgFPtGzlc3Yyg/CQ2fbt5PgIoIuvvVoKIO5wTtpeyDa
|
2960 |
+
Tpxt4brNj3pssAki14sL2xzVWiZbDcDq5WDQn/413z8CAwEAAaOCAawwggGoMA8GA1UdEwEB/wQF
|
2961 |
+
MAMBAf8wggEWBgNVHSAEggENMIIBCTCCAQUGCisGAQQBzh8BAQEwgfYwgdAGCCsGAQUFBwICMIHD
|
2962 |
+
HoHAAFMAZQBlACAAcwBlAHIAdABpAGYAaQBrAGEAYQB0ACAAbwBuACAAdgDkAGwAagBhAHMAdABh
|
2963 |
+
AHQAdQBkACAAQQBTAC0AaQBzACAAUwBlAHIAdABpAGYAaQB0AHMAZQBlAHIAaQBtAGkAcwBrAGUA
|
2964 |
+
cwBrAHUAcwAgAGEAbABhAG0ALQBTAEsAIABzAGUAcgB0AGkAZgBpAGsAYQBhAHQAaQBkAGUAIABr
|
2965 |
+
AGkAbgBuAGkAdABhAG0AaQBzAGUAawBzMCEGCCsGAQUFBwIBFhVodHRwOi8vd3d3LnNrLmVlL2Nw
|
2966 |
+
cy8wKwYDVR0fBCQwIjAgoB6gHIYaaHR0cDovL3d3dy5zay5lZS9qdXVyL2NybC8wHQYDVR0OBBYE
|
2967 |
+
FASqekej5ImvGs8KQKcYP2/v6X2+MB8GA1UdIwQYMBaAFASqekej5ImvGs8KQKcYP2/v6X2+MA4G
|
2968 |
+
A1UdDwEB/wQEAwIB5jANBgkqhkiG9w0BAQUFAAOCAQEAe8EYlFOiCfP+JmeaUOTDBS8rNXiRTHyo
|
2969 |
+
ERF5TElZrMj3hWVcRrs7EKACr81Ptcw2Kuxd/u+gkcm2k298gFTsxwhwDY77guwqYHhpNjbRxZyL
|
2970 |
+
abVAyJRld/JXIWY7zoVAtjNjGr95HvxcHdMdkxuLDF2FvZkwMhgJkVLpfKG6/2SSmuz+Ne6ML678
|
2971 |
+
IIbsSt4beDI3poHSna9aEhbKmVv8b20OxaAehsmR0FyYgl9jDIpaq9iVpszLita/ZEuOyoqysOkh
|
2972 |
+
Mp6qqIWYNIE5ITuoOlIyPfZrN4YGWhWY3PARZv40ILcD9EEQfTmEeZZyY7aWAuVrua0ZTbvGRNs2
|
2973 |
+
yyqcjg==
|
2974 |
+
-----END CERTIFICATE-----
|
2975 |
+
|
2976 |
+
Hongkong Post Root CA 1
|
2977 |
+
=======================
|
2978 |
+
-----BEGIN CERTIFICATE-----
|
2979 |
+
MIIDMDCCAhigAwIBAgICA+gwDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCSEsxFjAUBgNVBAoT
|
2980 |
+
DUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3QgUm9vdCBDQSAxMB4XDTAzMDUx
|
2981 |
+
NTA1MTMxNFoXDTIzMDUxNTA0NTIyOVowRzELMAkGA1UEBhMCSEsxFjAUBgNVBAoTDUhvbmdrb25n
|
2982 |
+
IFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3QgUm9vdCBDQSAxMIIBIjANBgkqhkiG9w0BAQEF
|
2983 |
+
AAOCAQ8AMIIBCgKCAQEArP84tulmAknjorThkPlAj3n54r15/gK97iSSHSL22oVyaf7XPwnU3ZG1
|
2984 |
+
ApzQjVrhVcNQhrkpJsLj2aDxaQMoIIBFIi1WpztUlVYiWR8o3x8gPW2iNr4joLFutbEnPzlTCeqr
|
2985 |
+
auh0ssJlXI6/fMN4hM2eFvz1Lk8gKgifd/PFHsSaUmYeSF7jEAaPIpjhZY4bXSNmO7ilMlHIhqqh
|
2986 |
+
qZ5/dpTCpmy3QfDVyAY45tQM4vM7TG1QjMSDJ8EThFk9nnV0ttgCXjqQesBCNnLsak3c78QA3xMY
|
2987 |
+
V18meMjWCnl3v/evt3a5pQuEF10Q6m/hq5URX208o1xNg1vysxmKgIsLhwIDAQABoyYwJDASBgNV
|
2988 |
+
HRMBAf8ECDAGAQH/AgEDMA4GA1UdDwEB/wQEAwIBxjANBgkqhkiG9w0BAQUFAAOCAQEADkbVPK7i
|
2989 |
+
h9legYsCmEEIjEy82tvuJxuC52pF7BaLT4Wg87JwvVqWuspube5Gi27nKi6Wsxkz67SfqLI37pio
|
2990 |
+
l7Yutmcn1KZJ/RyTZXaeQi/cImyaT/JaFTmxcdcrUehtHJjA2Sr0oYJ71clBoiMBdDhViw+5Lmei
|
2991 |
+
IAQ32pwL0xch4I+XeTRvhEgCIDMb5jREn5Fw9IBehEPCKdJsEhTkYY2sEJCehFC78JZvRZ+K88ps
|
2992 |
+
T/oROhUVRsPNH4NbLUES7VBnQRM9IauUiqpOfMGx+6fWtScvl6tu4B3i0RwsH0Ti/L6RoZz71ilT
|
2993 |
+
c4afU9hDDl3WY4JxHYB0yvbiAmvZWg==
|
2994 |
+
-----END CERTIFICATE-----
|
2995 |
+
|
2996 |
+
SecureSign RootCA11
|
2997 |
+
===================
|
2998 |
+
-----BEGIN CERTIFICATE-----
|
2999 |
+
MIIDbTCCAlWgAwIBAgIBATANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQGEwJKUDErMCkGA1UEChMi
|
3000 |
+
SmFwYW4gQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcywgSW5jLjEcMBoGA1UEAxMTU2VjdXJlU2lnbiBS
|
3001 |
+
b290Q0ExMTAeFw0wOTA0MDgwNDU2NDdaFw0yOTA0MDgwNDU2NDdaMFgxCzAJBgNVBAYTAkpQMSsw
|
3002 |
+
KQYDVQQKEyJKYXBhbiBDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzLCBJbmMuMRwwGgYDVQQDExNTZWN1
|
3003 |
+
cmVTaWduIFJvb3RDQTExMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA/XeqpRyQBTvL
|
3004 |
+
TJszi1oURaTnkBbR31fSIRCkF/3frNYfp+TbfPfs37gD2pRY/V1yfIw/XwFndBWW4wI8h9uuywGO
|
3005 |
+
wvNmxoVF9ALGOrVisq/6nL+k5tSAMJjzDbaTj6nU2DbysPyKyiyhFTOVMdrAG/LuYpmGYz+/3ZMq
|
3006 |
+
g6h2uRMft85OQoWPIucuGvKVCbIFtUROd6EgvanyTgp9UK31BQ1FT0Zx/Sg+U/sE2C3XZR1KG/rP
|
3007 |
+
O7AxmjVuyIsG0wCR8pQIZUyxNAYAeoni8McDWc/V1uinMrPmmECGxc0nEovMe863ETxiYAcjPitA
|
3008 |
+
bpSACW22s293bzUIUPsCh8U+iQIDAQABo0IwQDAdBgNVHQ4EFgQUW/hNT7KlhtQ60vFjmqC+CfZX
|
3009 |
+
t94wDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAKCh
|
3010 |
+
OBZmLqdWHyGcBvod7bkixTgm2E5P7KN/ed5GIaGHd48HCJqypMWvDzKYC3xmKbabfSVSSUOrTC4r
|
3011 |
+
bnpwrxYO4wJs+0LmGJ1F2FXI6Dvd5+H0LgscNFxsWEr7jIhQX5Ucv+2rIrVls4W6ng+4reV6G4pQ
|
3012 |
+
Oh29Dbx7VFALuUKvVaAYga1lme++5Jy/xIWrQbJUb9wlze144o4MjQlJ3WN7WmmWAiGovVJZ6X01
|
3013 |
+
y8hSyn+B/tlr0/cR7SXf+Of5pPpyl4RTDaXQMhhRdlkUbA/r7F+AjHVDg8OFmP9Mni0N5HeDk061
|
3014 |
+
lgeLKBObjBmNQSdJQO7e5iNEOdyhIta6A/I=
|
3015 |
+
-----END CERTIFICATE-----
|
3016 |
+
|
3017 |
+
ACEDICOM Root
|
3018 |
+
=============
|
3019 |
+
-----BEGIN CERTIFICATE-----
|
3020 |
+
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
|
3046 |
+
-----END CERTIFICATE-----
|
3047 |
+
|
3048 |
+
Verisign Class 1 Public Primary Certification Authority
|
3049 |
+
=======================================================
|
3050 |
+
-----BEGIN CERTIFICATE-----
|
3051 |
+
MIICPDCCAaUCED9pHoGc8JpK83P/uUii5N0wDQYJKoZIhvcNAQEFBQAwXzELMAkGA1UEBhMCVVMx
|
3052 |
+
FzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAxIFB1YmxpYyBQcmltYXJ5
|
3053 |
+
IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2MDEyOTAwMDAwMFoXDTI4MDgwMjIzNTk1OVow
|
3054 |
+
XzELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAx
|
3055 |
+
IFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUA
|
3056 |
+
A4GNADCBiQKBgQDlGb9to1ZhLZlIcfZn3rmN67eehoAKkQ76OCWvRoiC5XOooJskXQ0fzGVuDLDQ
|
3057 |
+
VoQYh5oGmxChc9+0WDlrbsH2FdWoqD+qEgaNMax/sDTXjzRniAnNFBHiTkVWaR94AoDa3EeRKbs2
|
3058 |
+
yWNcxeDXLYd7obcysHswuiovMaruo2fa2wIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFgVKTk8d6Pa
|
3059 |
+
XCUDfGD67gmZPCcQcMgMCeazh88K4hiWNWLMv5sneYlfycQJ9M61Hd8qveXbhpxoJeUwfLaJFf5n
|
3060 |
+
0a3hUKw8fGJLj7qE1xIVGx/KXQ/BUpQqEZnae88MNhPVNdwQGVnqlMEAv3WP2fr9dgTbYruQagPZ
|
3061 |
+
RjXZ+Hxb
|
3062 |
+
-----END CERTIFICATE-----
|
3063 |
+
|
3064 |
+
Verisign Class 3 Public Primary Certification Authority
|
3065 |
+
=======================================================
|
3066 |
+
-----BEGIN CERTIFICATE-----
|
3067 |
+
MIICPDCCAaUCEDyRMcsf9tAbDpq40ES/Er4wDQYJKoZIhvcNAQEFBQAwXzELMAkGA1UEBhMCVVMx
|
3068 |
+
FzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmltYXJ5
|
3069 |
+
IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2MDEyOTAwMDAwMFoXDTI4MDgwMjIzNTk1OVow
|
3070 |
+
XzELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAz
|
3071 |
+
IFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUA
|
3072 |
+
A4GNADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhEBarsAx94
|
3073 |
+
f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/isI19wKTakyYbnsZogy1Ol
|
3074 |
+
hec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBABByUqkFFBky
|
3075 |
+
CEHwxWsKzH4PIRnN5GfcX6kb5sroc50i2JhucwNhkcV8sEVAbkSdjbCxlnRhLQ2pRdKkkirWmnWX
|
3076 |
+
bj9T/UWZYB2oK0z5XqcJ2HUw19JlYD1n1khVdWk/kfVIC0dpImmClr7JyDiGSnoscxlIaU5rfGW/
|
3077 |
+
D/xwzoiQ
|
3078 |
+
-----END CERTIFICATE-----
|
3079 |
+
|
3080 |
+
Microsec e-Szigno Root CA 2009
|
3081 |
+
==============================
|
3082 |
+
-----BEGIN CERTIFICATE-----
|
3083 |
+
MIIECjCCAvKgAwIBAgIJAMJ+QwRORz8ZMA0GCSqGSIb3DQEBCwUAMIGCMQswCQYDVQQGEwJIVTER
|
3084 |
+
MA8GA1UEBwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jv
|
3085 |
+
c2VjIGUtU3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5o
|
3086 |
+
dTAeFw0wOTA2MTYxMTMwMThaFw0yOTEyMzAxMTMwMThaMIGCMQswCQYDVQQGEwJIVTERMA8GA1UE
|
3087 |
+
BwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUt
|
3088 |
+
U3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5odTCCASIw
|
3089 |
+
DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOn4j/NjrdqG2KfgQvvPkd6mJviZpWNwrZuuyjNA
|
3090 |
+
fW2WbqEORO7hE52UQlKavXWFdCyoDh2Tthi3jCyoz/tccbna7P7ofo/kLx2yqHWH2Leh5TvPmUpG
|
3091 |
+
0IMZfcChEhyVbUr02MelTTMuhTlAdX4UfIASmFDHQWe4oIBhVKZsTh/gnQ4H6cm6M+f+wFUoLAKA
|
3092 |
+
pxn1ntxVUwOXewdI/5n7N4okxFnMUBBjjqqpGrCEGob5X7uxUG6k0QrM1XF+H6cbfPVTbiJfyyvm
|
3093 |
+
1HxdrtbCxkzlBQHZ7Vf8wSN5/PrIJIOV87VqUQHQd9bpEqH5GoP7ghu5sJf0dgYzQ0mg/wu1+rUC
|
3094 |
+
AwEAAaOBgDB+MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTLD8bf
|
3095 |
+
QkPMPcu1SCOhGnqmKrs0aDAfBgNVHSMEGDAWgBTLD8bfQkPMPcu1SCOhGnqmKrs0aDAbBgNVHREE
|
3096 |
+
FDASgRBpbmZvQGUtc3ppZ25vLmh1MA0GCSqGSIb3DQEBCwUAA4IBAQDJ0Q5eLtXMs3w+y/w9/w0o
|
3097 |
+
lZMEyL/azXm4Q5DwpL7v8u8hmLzU1F0G9u5C7DBsoKqpyvGvivo/C3NqPuouQH4frlRheesuCDfX
|
3098 |
+
I/OMn74dseGkddug4lQUsbocKaQY9hK6ohQU4zE1yED/t+AFdlfBHFny+L/k7SViXITwfn4fs775
|
3099 |
+
tyERzAMBVnCnEJIeGzSBHq2cGsMEPO0CYdYeBvNfOofyK/FFh+U9rNHHV4S9a67c2Pm2G2JwCz02
|
3100 |
+
yULyMtd6YebS2z3PyKnJm9zbWETXbzivf3jTo60adbocwTZ8jx5tHMN1Rq41Bab2XD0h7lbwyYIi
|
3101 |
+
LXpUq3DDfSJlgnCW
|
3102 |
+
-----END CERTIFICATE-----
|
3103 |
+
|
3104 |
+
E-Guven Kok Elektronik Sertifika Hizmet Saglayicisi
|
3105 |
+
===================================================
|
3106 |
+
-----BEGIN CERTIFICATE-----
|
3107 |
+
MIIDtjCCAp6gAwIBAgIQRJmNPMADJ72cdpW56tustTANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQG
|
3108 |
+
EwJUUjEoMCYGA1UEChMfRWxla3Ryb25payBCaWxnaSBHdXZlbmxpZ2kgQS5TLjE8MDoGA1UEAxMz
|
3109 |
+
ZS1HdXZlbiBLb2sgRWxla3Ryb25payBTZXJ0aWZpa2EgSGl6bWV0IFNhZ2xheWljaXNpMB4XDTA3
|
3110 |
+
MDEwNDExMzI0OFoXDTE3MDEwNDExMzI0OFowdTELMAkGA1UEBhMCVFIxKDAmBgNVBAoTH0VsZWt0
|
3111 |
+
cm9uaWsgQmlsZ2kgR3V2ZW5saWdpIEEuUy4xPDA6BgNVBAMTM2UtR3V2ZW4gS29rIEVsZWt0cm9u
|
3112 |
+
aWsgU2VydGlmaWthIEhpem1ldCBTYWdsYXlpY2lzaTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
|
3113 |
+
AQoCggEBAMMSIJ6wXgBljU5Gu4Bc6SwGl9XzcslwuedLZYDBS75+PNdUMZTe1RK6UxYC6lhj71vY
|
3114 |
+
8+0qGqpxSKPcEC1fX+tcS5yWCEIlKBHMilpiAVDV6wlTL/jDj/6z/P2douNffb7tC+Bg62nsM+3Y
|
3115 |
+
jfsSSYMAyYuXjDtzKjKzEve5TfL0TW3H5tYmNwjy2f1rXKPlSFxYvEK+A1qBuhw1DADT9SN+cTAI
|
3116 |
+
JjjcJRFHLfO6IxClv7wC90Nex/6wN1CZew+TzuZDLMN+DfIcQ2Zgy2ExR4ejT669VmxMvLz4Bcpk
|
3117 |
+
9Ok0oSy1c+HCPujIyTQlCFzz7abHlJ+tiEMl1+E5YP6sOVkCAwEAAaNCMEAwDgYDVR0PAQH/BAQD
|
3118 |
+
AgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFJ/uRLOU1fqRTy7ZVZoEVtstxNulMA0GCSqG
|
3119 |
+
SIb3DQEBBQUAA4IBAQB/X7lTW2M9dTLn+sR0GstG30ZpHFLPqk/CaOv/gKlR6D1id4k9CnU58W5d
|
3120 |
+
F4dvaAXBlGzZXd/aslnLpRCKysw5zZ/rTt5S/wzw9JKp8mxTq5vSR6AfdPebmvEvFZ96ZDAYBzwq
|
3121 |
+
D2fK/A+JYZ1lpTzlvBNbCNvj/+27BrtqBrF6T2XGgv0enIu1De5Iu7i9qgi0+6N8y5/NkHZchpZ4
|
3122 |
+
Vwpm+Vganf2XKWDeEaaQHBkc7gGWIjQ0LpH5t8Qn0Xvmv/uARFoW5evg1Ao4vOSR49XrXMGs3xtq
|
3123 |
+
fJ7lddK2l4fbzIcrQzqECK+rPNv3PGYxhrCdU3nt+CPeQuMtgvEP5fqX
|
3124 |
+
-----END CERTIFICATE-----
|
3125 |
+
|
3126 |
+
GlobalSign Root CA - R3
|
3127 |
+
=======================
|
3128 |
+
-----BEGIN CERTIFICATE-----
|
3129 |
+
MIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4GA1UECxMXR2xv
|
3130 |
+
YmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh
|
3131 |
+
bFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4MTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT
|
3132 |
+
aWduIFJvb3QgQ0EgLSBSMzETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln
|
3133 |
+
bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWt
|
3134 |
+
iHL8RgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsTgHeMCOFJ
|
3135 |
+
0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmmKPZpO/bLyCiR5Z2KYVc3
|
3136 |
+
rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zdQQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjl
|
3137 |
+
OCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZXriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2
|
3138 |
+
xmmFghcCAwEAAaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE
|
3139 |
+
FI/wS3+oLkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZURUm7
|
3140 |
+
lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMpjjM5RcOO5LlXbKr8
|
3141 |
+
EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK6fBdRoyV3XpYKBovHd7NADdBj+1E
|
3142 |
+
bddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQXmcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18
|
3143 |
+
YIvDQVETI53O9zJrlAGomecsMx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7r
|
3144 |
+
kpeDMdmztcpHWD9f
|
3145 |
+
-----END CERTIFICATE-----
|
3146 |
+
|
3147 |
+
TC TrustCenter Universal CA III
|
3148 |
+
===============================
|
3149 |
+
-----BEGIN CERTIFICATE-----
|
3150 |
+
MIID4TCCAsmgAwIBAgIOYyUAAQACFI0zFQLkbPQwDQYJKoZIhvcNAQEFBQAwezELMAkGA1UEBhMC
|
3151 |
+
REUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxJDAiBgNVBAsTG1RDIFRydXN0Q2VudGVy
|
3152 |
+
IFVuaXZlcnNhbCBDQTEoMCYGA1UEAxMfVEMgVHJ1c3RDZW50ZXIgVW5pdmVyc2FsIENBIElJSTAe
|
3153 |
+
Fw0wOTA5MDkwODE1MjdaFw0yOTEyMzEyMzU5NTlaMHsxCzAJBgNVBAYTAkRFMRwwGgYDVQQKExNU
|
3154 |
+
QyBUcnVzdENlbnRlciBHbWJIMSQwIgYDVQQLExtUQyBUcnVzdENlbnRlciBVbml2ZXJzYWwgQ0Ex
|
3155 |
+
KDAmBgNVBAMTH1RDIFRydXN0Q2VudGVyIFVuaXZlcnNhbCBDQSBJSUkwggEiMA0GCSqGSIb3DQEB
|
3156 |
+
AQUAA4IBDwAwggEKAoIBAQDC2pxisLlxErALyBpXsq6DFJmzNEubkKLF5+cvAqBNLaT6hdqbJYUt
|
3157 |
+
QCggbergvbFIgyIpRJ9Og+41URNzdNW88jBmlFPAQDYvDIRlzg9uwliT6CwLOunBjvvya8o84pxO
|
3158 |
+
juT5fdMnnxvVZ3iHLX8LR7PH6MlIfK8vzArZQe+f/prhsq75U7Xl6UafYOPfjdN/+5Z+s7Vy+Eut
|
3159 |
+
CHnNaYlAJ/Uqwa1D7KRTyGG299J5KmcYdkhtWyUB0SbFt1dpIxVbYYqt8Bst2a9c8SaQaanVDED1
|
3160 |
+
M4BDj5yjdipFtK+/fz6HP3bFzSreIMUWWMv5G/UPyw0RUmS40nZid4PxWJ//AgMBAAGjYzBhMB8G
|
3161 |
+
A1UdIwQYMBaAFFbn4VslQ4Dg9ozhcbyO5YAvxEjiMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/
|
3162 |
+
BAQDAgEGMB0GA1UdDgQWBBRW5+FbJUOA4PaM4XG8juWAL8RI4jANBgkqhkiG9w0BAQUFAAOCAQEA
|
3163 |
+
g8ev6n9NCjw5sWi+e22JLumzCecYV42FmhfzdkJQEw/HkG8zrcVJYCtsSVgZ1OK+t7+rSbyUyKu+
|
3164 |
+
KGwWaODIl0YgoGhnYIg5IFHYaAERzqf2EQf27OysGh+yZm5WZ2B6dF7AbZc2rrUNXWZzwCUyRdhK
|
3165 |
+
BgePxLcHsU0GDeGl6/R1yrqc0L2z0zIkTO5+4nYES0lT2PLpVDP85XEfPRRclkvxOvIAu2y0+pZV
|
3166 |
+
CIgJwcyRGSmwIC3/yzikQOEXvnlhgP8HA4ZMTnsGnxGGjYnuJ8Tb4rwZjgvDwxPHLQNjO9Po5KIq
|
3167 |
+
woIIlBZU8O8fJ5AluA0OKBtHd0e9HKgl8ZS0Zg==
|
3168 |
+
-----END CERTIFICATE-----
|
3169 |
+
|
3170 |
+
Autoridad de Certificacion Firmaprofesional CIF A62634068
|
3171 |
+
=========================================================
|
3172 |
+
-----BEGIN CERTIFICATE-----
|
3173 |
+
MIIGFDCCA/ygAwIBAgIIU+w77vuySF8wDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCRVMxQjBA
|
3174 |
+
BgNVBAMMOUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2
|
3175 |
+
MjYzNDA2ODAeFw0wOTA1MjAwODM4MTVaFw0zMDEyMzEwODM4MTVaMFExCzAJBgNVBAYTAkVTMUIw
|
3176 |
+
QAYDVQQDDDlBdXRvcmlkYWQgZGUgQ2VydGlmaWNhY2lvbiBGaXJtYXByb2Zlc2lvbmFsIENJRiBB
|
3177 |
+
NjI2MzQwNjgwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKlmuO6vj78aI14H9M2uDD
|
3178 |
+
Utd9thDIAl6zQyrET2qyyhxdKJp4ERppWVevtSBC5IsP5t9bpgOSL/UR5GLXMnE42QQMcas9UX4P
|
3179 |
+
B99jBVzpv5RvwSmCwLTaUbDBPLutN0pcyvFLNg4kq7/DhHf9qFD0sefGL9ItWY16Ck6WaVICqjaY
|
3180 |
+
7Pz6FIMMNx/Jkjd/14Et5cS54D40/mf0PmbR0/RAz15iNA9wBj4gGFrO93IbJWyTdBSTo3OxDqqH
|
3181 |
+
ECNZXyAFGUftaI6SEspd/NYrspI8IM/hX68gvqB2f3bl7BqGYTM+53u0P6APjqK5am+5hyZvQWyI
|
3182 |
+
plD9amML9ZMWGxmPsu2bm8mQ9QEM3xk9Dz44I8kvjwzRAv4bVdZO0I08r0+k8/6vKtMFnXkIoctX
|
3183 |
+
MbScyJCyZ/QYFpM6/EfY0XiWMR+6KwxfXZmtY4laJCB22N/9q06mIqqdXuYnin1oKaPnirjaEbsX
|
3184 |
+
LZmdEyRG98Xi2J+Of8ePdG1asuhy9azuJBCtLxTa/y2aRnFHvkLfuwHb9H/TKI8xWVvTyQKmtFLK
|
3185 |
+
bpf7Q8UIJm+K9Lv9nyiqDdVF8xM6HdjAeI9BZzwelGSuewvF6NkBiDkal4ZkQdU7hwxu+g/GvUgU
|
3186 |
+
vzlN1J5Bto+WHWOWk9mVBngxaJ43BjuAiUVhOSPHG0SjFeUc+JIwuwIDAQABo4HvMIHsMBIGA1Ud
|
3187 |
+
EwEB/wQIMAYBAf8CAQEwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRlzeurNR4APn7VdMActHNH
|
3188 |
+
DhpkLzCBpgYDVR0gBIGeMIGbMIGYBgRVHSAAMIGPMC8GCCsGAQUFBwIBFiNodHRwOi8vd3d3LmZp
|
3189 |
+
cm1hcHJvZmVzaW9uYWwuY29tL2NwczBcBggrBgEFBQcCAjBQHk4AUABhAHMAZQBvACAAZABlACAA
|
3190 |
+
bABhACAAQgBvAG4AYQBuAG8AdgBhACAANAA3ACAAQgBhAHIAYwBlAGwAbwBuAGEAIAAwADgAMAAx
|
3191 |
+
ADcwDQYJKoZIhvcNAQEFBQADggIBABd9oPm03cXF661LJLWhAqvdpYhKsg9VSytXjDvlMd3+xDLx
|
3192 |
+
51tkljYyGOylMnfX40S2wBEqgLk9am58m9Ot/MPWo+ZkKXzR4Tgegiv/J2Wv+xYVxC5xhOW1//qk
|
3193 |
+
R71kMrv2JYSiJ0L1ILDCExARzRAVukKQKtJE4ZYm6zFIEv0q2skGz3QeqUvVhyj5eTSSPi5E6PaP
|
3194 |
+
T481PyWzOdxjKpBrIF/EUhJOlywqrJ2X3kjyo2bbwtKDlaZmp54lD+kLM5FlClrD2VQS3a/DTg4f
|
3195 |
+
Jl4N3LON7NWBcN7STyQF82xO9UxJZo3R/9ILJUFI/lGExkKvgATP0H5kSeTy36LssUzAKh3ntLFl
|
3196 |
+
osS88Zj0qnAHY7S42jtM+kAiMFsRpvAFDsYCA0irhpuF3dvd6qJ2gHN99ZwExEWN57kci57q13XR
|
3197 |
+
crHedUTnQn3iV2t93Jm8PYMo6oCTjcVMZcFwgbg4/EMxsvYDNEeyrPsiBsse3RdHHF9mudMaotoR
|
3198 |
+
saS8I8nkvof/uZS2+F0gStRf571oe2XyFR7SOqkt6dhrJKyXWERHrVkY8SFlcN7ONGCoQPHzPKTD
|
3199 |
+
KCOM/iczQ0CgFzzr6juwcqajuUpLXhZI9LK8yIySxZ2frHI2vDSANGupi5LAuBft7HZT9SQBjLMi
|
3200 |
+
6Et8Vcad+qMUu2WFbm5PEn4KPJ2V
|
3201 |
+
-----END CERTIFICATE-----
|
3202 |
+
|
3203 |
+
Izenpe.com
|
3204 |
+
==========
|
3205 |
+
-----BEGIN CERTIFICATE-----
|
3206 |
+
MIIF8TCCA9mgAwIBAgIQALC3WhZIX7/hy/WL1xnmfTANBgkqhkiG9w0BAQsFADA4MQswCQYDVQQG
|
3207 |
+
EwJFUzEUMBIGA1UECgwLSVpFTlBFIFMuQS4xEzARBgNVBAMMCkl6ZW5wZS5jb20wHhcNMDcxMjEz
|
3208 |
+
MTMwODI4WhcNMzcxMjEzMDgyNzI1WjA4MQswCQYDVQQGEwJFUzEUMBIGA1UECgwLSVpFTlBFIFMu
|
3209 |
+
QS4xEzARBgNVBAMMCkl6ZW5wZS5jb20wggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDJ
|
3210 |
+
03rKDx6sp4boFmVqscIbRTJxldn+EFvMr+eleQGPicPK8lVx93e+d5TzcqQsRNiekpsUOqHnJJAK
|
3211 |
+
ClaOxdgmlOHZSOEtPtoKct2jmRXagaKH9HtuJneJWK3W6wyyQXpzbm3benhB6QiIEn6HLmYRY2xU
|
3212 |
+
+zydcsC8Lv/Ct90NduM61/e0aL6i9eOBbsFGb12N4E3GVFWJGjMxCrFXuaOKmMPsOzTFlUFpfnXC
|
3213 |
+
PCDFYbpRR6AgkJOhkEvzTnyFRVSa0QUmQbC1TR0zvsQDyCV8wXDbO/QJLVQnSKwv4cSsPsjLkkxT
|
3214 |
+
OTcj7NMB+eAJRE1NZMDhDVqHIrytG6P+JrUV86f8hBnp7KGItERphIPzidF0BqnMC9bC3ieFUCbK
|
3215 |
+
F7jJeodWLBoBHmy+E60QrLUk9TiRodZL2vG70t5HtfG8gfZZa88ZU+mNFctKy6lvROUbQc/hhqfK
|
3216 |
+
0GqfvEyNBjNaooXlkDWgYlwWTvDjovoDGrQscbNYLN57C9saD+veIR8GdwYDsMnvmfzAuU8Lhij+
|
3217 |
+
0rnq49qlw0dpEuDb8PYZi+17cNcC1u2HGCgsBCRMd+RIihrGO5rUD8r6ddIBQFqNeb+Lz0vPqhbB
|
3218 |
+
leStTIo+F5HUsWLlguWABKQDfo2/2n+iD5dPDNMN+9fR5XJ+HMh3/1uaD7euBUbl8agW7EekFwID
|
3219 |
+
AQABo4H2MIHzMIGwBgNVHREEgagwgaWBD2luZm9AaXplbnBlLmNvbaSBkTCBjjFHMEUGA1UECgw+
|
3220 |
+
SVpFTlBFIFMuQS4gLSBDSUYgQTAxMzM3MjYwLVJNZXJjLlZpdG9yaWEtR2FzdGVpeiBUMTA1NSBG
|
3221 |
+
NjIgUzgxQzBBBgNVBAkMOkF2ZGEgZGVsIE1lZGl0ZXJyYW5lbyBFdG9yYmlkZWEgMTQgLSAwMTAx
|
3222 |
+
MCBWaXRvcmlhLUdhc3RlaXowDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0O
|
3223 |
+
BBYEFB0cZQ6o8iV7tJHP5LGx5r1VdGwFMA0GCSqGSIb3DQEBCwUAA4ICAQB4pgwWSp9MiDrAyw6l
|
3224 |
+
Fn2fuUhfGI8NYjb2zRlrrKvV9pF9rnHzP7MOeIWblaQnIUdCSnxIOvVFfLMMjlF4rJUT3sb9fbga
|
3225 |
+
kEyrkgPH7UIBzg/YsfqikuFgba56awmqxinuaElnMIAkejEWOVt+8Rwu3WwJrfIxwYJOubv5vr8q
|
3226 |
+
hT/AQKM6WfxZSzwoJNu0FXWuDYi6LnPAvViH5ULy617uHjAimcs30cQhbIHsvm0m5hzkQiCeR7Cs
|
3227 |
+
g1lwLDXWrzY0tM07+DKo7+N4ifuNRSzanLh+QBxh5z6ikixL8s36mLYp//Pye6kfLqCTVyvehQP5
|
3228 |
+
aTfLnnhqBbTFMXiJ7HqnheG5ezzevh55hM6fcA5ZwjUukCox2eRFekGkLhObNA5me0mrZJfQRsN5
|
3229 |
+
nXJQY6aYWwa9SG3YOYNw6DXwBdGqvOPbyALqfP2C2sJbUjWumDqtujWTI6cfSN01RpiyEGjkpTHC
|
3230 |
+
ClguGYEQyVB1/OpaFs4R1+7vUIgtYf8/QnMFlEPVjjxOAToZpR9GTnfQXeWBIiGH/pR9hNiTrdZo
|
3231 |
+
Q0iy2+tzJOeRf1SktoA+naM8THLCV8Sg1Mw4J87VBp6iSNnpn86CcDaTmjvfliHjWbcM2pE38P1Z
|
3232 |
+
WrOZyGlsQyYBNWNgVYkDOnXYukrZVP/u3oDYLdE41V4tC5h9Pmzb/CaIxw==
|
3233 |
+
-----END CERTIFICATE-----
|
3234 |
+
|
3235 |
+
Chambers of Commerce Root - 2008
|
3236 |
+
================================
|
3237 |
+
-----BEGIN CERTIFICATE-----
|
3238 |
+
MIIHTzCCBTegAwIBAgIJAKPaQn6ksa7aMA0GCSqGSIb3DQEBBQUAMIGuMQswCQYDVQQGEwJFVTFD
|
3239 |
+
MEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNv
|
3240 |
+
bS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMu
|
3241 |
+
QS4xKTAnBgNVBAMTIENoYW1iZXJzIG9mIENvbW1lcmNlIFJvb3QgLSAyMDA4MB4XDTA4MDgwMTEy
|
3242 |
+
Mjk1MFoXDTM4MDczMTEyMjk1MFowga4xCzAJBgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNl
|
3243 |
+
ZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNhbWVyZmlybWEuY29tL2FkZHJlc3MpMRIwEAYDVQQF
|
3244 |
+
EwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENhbWVyZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJl
|
3245 |
+
cnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDgwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC
|
3246 |
+
AQCvAMtwNyuAWko6bHiUfaN/Gh/2NdW928sNRHI+JrKQUrpjOyhYb6WzbZSm891kDFX29ufyIiKA
|
3247 |
+
XuFixrYp4YFs8r/lfTJqVKAyGVn+H4vXPWCGhSRv4xGzdz4gljUha7MI2XAuZPeEklPWDrCQiorj
|
3248 |
+
h40G072QDuKZoRuGDtqaCrsLYVAGUvGef3bsyw/QHg3PmTA9HMRFEFis1tPo1+XqxQEHd9ZR5gN/
|
3249 |
+
ikilTWh1uem8nk4ZcfUyS5xtYBkL+8ydddy/Js2Pk3g5eXNeJQ7KXOt3EgfLZEFHcpOrUMPrCXZk
|
3250 |
+
NNI5t3YRCQ12RcSprj1qr7V9ZS+UWBDsXHyvfuK2GNnQm05aSd+pZgvMPMZ4fKecHePOjlO+Bd5g
|
3251 |
+
D2vlGts/4+EhySnB8esHnFIbAURRPHsl18TlUlRdJQfKFiC4reRB7noI/plvg6aRArBsNlVq5331
|
3252 |
+
lubKgdaX8ZSD6e2wsWsSaR6s+12pxZjptFtYer49okQ6Y1nUCyXeG0+95QGezdIp1Z8XGQpvvwyQ
|
3253 |
+
0wlf2eOKNcx5Wk0ZN5K3xMGtr/R5JJqyAQuxr1yW84Ay+1w9mPGgP0revq+ULtlVmhduYJ1jbLhj
|
3254 |
+
ya6BXBg14JC7vjxPNyK5fuvPnnchpj04gftI2jE9K+OJ9dC1vX7gUMQSibMjmhAxhduub+84Mxh2
|
3255 |
+
EQIDAQABo4IBbDCCAWgwEgYDVR0TAQH/BAgwBgEB/wIBDDAdBgNVHQ4EFgQU+SSsD7K1+HnA+mCI
|
3256 |
+
G8TZTQKeFxkwgeMGA1UdIwSB2zCB2IAU+SSsD7K1+HnA+mCIG8TZTQKeFxmhgbSkgbEwga4xCzAJ
|
3257 |
+
BgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNlZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNh
|
3258 |
+
bWVyZmlybWEuY29tL2FkZHJlc3MpMRIwEAYDVQQFEwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENh
|
3259 |
+
bWVyZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDiC
|
3260 |
+
CQCj2kJ+pLGu2jAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUH
|
3261 |
+
AgEWHGh0dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZIhvcNAQEFBQADggIBAJASryI1
|
3262 |
+
wqM58C7e6bXpeHxIvj99RZJe6dqxGfwWPJ+0W2aeaufDuV2I6A+tzyMP3iU6XsxPpcG1Lawk0lgH
|
3263 |
+
3qLPaYRgM+gQDROpI9CF5Y57pp49chNyM/WqfcZjHwj0/gF/JM8rLFQJ3uIrbZLGOU8W6jx+ekbU
|
3264 |
+
RWpGqOt1glanq6B8aBMz9p0w8G8nOSQjKpD9kCk18pPfNKXG9/jvjA9iSnyu0/VU+I22mlaHFoI6
|
3265 |
+
M6taIgj3grrqLuBHmrS1RaMFO9ncLkVAO+rcf+g769HsJtg1pDDFOqxXnrN2pSB7+R5KBWIBpih1
|
3266 |
+
YJeSDW4+TTdDDZIVnBgizVGZoCkaPF+KMjNbMMeJL0eYD6MDxvbxrN8y8NmBGuScvfaAFPDRLLmF
|
3267 |
+
9dijscilIeUcE5fuDr3fKanvNFNb0+RqE4QGtjICxFKuItLcsiFCGtpA8CnJ7AoMXOLQusxI0zcK
|
3268 |
+
zBIKinmwPQN/aUv0NCB9szTqjktk9T79syNnFQ0EuPAtwQlRPLJsFfClI9eDdOTlLsn+mCdCxqvG
|
3269 |
+
nrDQWzilm1DefhiYtUU79nm06PcaewaD+9CL2rvHvRirCG88gGtAPxkZumWK5r7VXNM21+9AUiRg
|
3270 |
+
OGcEMeyP84LG3rlV8zsxkVrctQgVrXYlCg17LofiDKYGvCYQbTed7N14jHyAxfDZd0jQ
|
3271 |
+
-----END CERTIFICATE-----
|
3272 |
+
|
3273 |
+
Global Chambersign Root - 2008
|
3274 |
+
==============================
|
3275 |
+
-----BEGIN CERTIFICATE-----
|
3276 |
+
MIIHSTCCBTGgAwIBAgIJAMnN0+nVfSPOMA0GCSqGSIb3DQEBBQUAMIGsMQswCQYDVQQGEwJFVTFD
|
3277 |
+
MEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNv
|
3278 |
+
bS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMu
|
3279 |
+
QS4xJzAlBgNVBAMTHkdsb2JhbCBDaGFtYmVyc2lnbiBSb290IC0gMjAwODAeFw0wODA4MDExMjMx
|
3280 |
+
NDBaFw0zODA3MzExMjMxNDBaMIGsMQswCQYDVQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUg
|
3281 |
+
Y3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJ
|
3282 |
+
QTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xJzAlBgNVBAMTHkdsb2JhbCBD
|
3283 |
+
aGFtYmVyc2lnbiBSb290IC0gMjAwODCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMDf
|
3284 |
+
VtPkOpt2RbQT2//BthmLN0EYlVJH6xedKYiONWwGMi5HYvNJBL99RDaxccy9Wglz1dmFRP+RVyXf
|
3285 |
+
XjaOcNFccUMd2drvXNL7G706tcuto8xEpw2uIRU/uXpbknXYpBI4iRmKt4DS4jJvVpyR1ogQC7N0
|
3286 |
+
ZJJ0YPP2zxhPYLIj0Mc7zmFLmY/CDNBAspjcDahOo7kKrmCgrUVSY7pmvWjg+b4aqIG7HkF4ddPB
|
3287 |
+
/gBVsIdU6CeQNR1MM62X/JcumIS/LMmjv9GYERTtY/jKmIhYF5ntRQOXfjyGHoiMvvKRhI9lNNgA
|
3288 |
+
TH23MRdaKXoKGCQwoze1eqkBfSbW+Q6OWfH9GzO1KTsXO0G2Id3UwD2ln58fQ1DJu7xsepeY7s2M
|
3289 |
+
H/ucUa6LcL0nn3HAa6x9kGbo1106DbDVwo3VyJ2dwW3Q0L9R5OP4wzg2rtandeavhENdk5IMagfe
|
3290 |
+
Ox2YItaswTXbo6Al/3K1dh3ebeksZixShNBFks4c5eUzHdwHU1SjqoI7mjcv3N2gZOnm3b2u/GSF
|
3291 |
+
HTynyQbehP9r6GsaPMWis0L7iwk+XwhSx2LE1AVxv8Rk5Pihg+g+EpuoHtQ2TS9x9o0o9oOpE9Jh
|
3292 |
+
wZG7SMA0j0GMS0zbaRL/UJScIINZc+18ofLx/d33SdNDWKBWY8o9PeU1VlnpDsogzCtLkykPAgMB
|
3293 |
+
AAGjggFqMIIBZjASBgNVHRMBAf8ECDAGAQH/AgEMMB0GA1UdDgQWBBS5CcqcHtvTbDprru1U8VuT
|
3294 |
+
BjUuXjCB4QYDVR0jBIHZMIHWgBS5CcqcHtvTbDprru1U8VuTBjUuXqGBsqSBrzCBrDELMAkGA1UE
|
3295 |
+
BhMCRVUxQzBBBgNVBAcTOk1hZHJpZCAoc2VlIGN1cnJlbnQgYWRkcmVzcyBhdCB3d3cuY2FtZXJm
|
3296 |
+
aXJtYS5jb20vYWRkcmVzcykxEjAQBgNVBAUTCUE4Mjc0MzI4NzEbMBkGA1UEChMSQUMgQ2FtZXJm
|
3297 |
+
aXJtYSBTLkEuMScwJQYDVQQDEx5HbG9iYWwgQ2hhbWJlcnNpZ24gUm9vdCAtIDIwMDiCCQDJzdPp
|
3298 |
+
1X0jzjAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUHAgEWHGh0
|
3299 |
+
dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZIhvcNAQEFBQADggIBAICIf3DekijZBZRG
|
3300 |
+
/5BXqfEv3xoNa/p8DhxJJHkn2EaqbylZUohwEurdPfWbU1Rv4WCiqAm57OtZfMY18dwY6fFn5a+6
|
3301 |
+
ReAJ3spED8IXDneRRXozX1+WLGiLwUePmJs9wOzL9dWCkoQ10b42OFZyMVtHLaoXpGNR6woBrX/s
|
3302 |
+
dZ7LoR/xfxKxueRkf2fWIyr0uDldmOghp+G9PUIadJpwr2hsUF1Jz//7Dl3mLEfXgTpZALVza2Mg
|
3303 |
+
9jFFCDkO9HB+QHBaP9BrQql0PSgvAm11cpUJjUhjxsYjV5KTXjXBjfkK9yydYhz2rXzdpjEetrHH
|
3304 |
+
foUm+qRqtdpjMNHvkzeyZi99Bffnt0uYlDXA2TopwZ2yUDMdSqlapskD7+3056huirRXhOukP9Du
|
3305 |
+
qqqHW2Pok+JrqNS4cnhrG+055F3Lm6qH1U9OAP7Zap88MQ8oAgF9mOinsKJknnn4SPIVqczmyETr
|
3306 |
+
P3iZ8ntxPjzxmKfFGBI/5rsoM0LpRQp8bfKGeS/Fghl9CYl8slR2iK7ewfPM4W7bMdaTrpmg7yVq
|
3307 |
+
c5iJWzouE4gev8CSlDQb4ye3ix5vQv/n6TebUB0tovkC7stYWDpxvGjjqsGvHCgfotwjZT+B6q6Z
|
3308 |
+
09gwzxMNTxXJhLynSC34MCN32EZLeW32jO06f2ARePTpm67VVMB0gNELQp/B
|
3309 |
+
-----END CERTIFICATE-----
|
3310 |
+
|
3311 |
+
Go Daddy Root Certificate Authority - G2
|
3312 |
+
========================================
|
3313 |
+
-----BEGIN CERTIFICATE-----
|
3314 |
+
MIIDxTCCAq2gAwIBAgIBADANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMxEDAOBgNVBAgT
|
3315 |
+
B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoTEUdvRGFkZHkuY29tLCBJbmMu
|
3316 |
+
MTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5
|
3317 |
+
MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgYMxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6
|
3318 |
+
b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjExMC8G
|
3319 |
+
A1UEAxMoR28gRGFkZHkgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZI
|
3320 |
+
hvcNAQEBBQADggEPADCCAQoCggEBAL9xYgjx+lk09xvJGKP3gElY6SKDE6bFIEMBO4Tx5oVJnyfq
|
3321 |
+
9oQbTqC023CYxzIBsQU+B07u9PpPL1kwIuerGVZr4oAH/PMWdYA5UXvl+TW2dE6pjYIT5LY/qQOD
|
3322 |
+
+qK+ihVqf94Lw7YZFAXK6sOoBJQ7RnwyDfMAZiLIjWltNowRGLfTshxgtDj6AozO091GB94KPutd
|
3323 |
+
fMh8+7ArU6SSYmlRJQVhGkSBjCypQ5Yj36w6gZoOKcUcqeldHraenjAKOc7xiID7S13MMuyFYkMl
|
3324 |
+
NAJWJwGRtDtwKj9useiciAF9n9T521NtYJ2/LOdYq7hfRvzOxBsDPAnrSTFcaUaz4EcCAwEAAaNC
|
3325 |
+
MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFDqahQcQZyi27/a9
|
3326 |
+
BUFuIMGU2g/eMA0GCSqGSIb3DQEBCwUAA4IBAQCZ21151fmXWWcDYfF+OwYxdS2hII5PZYe096ac
|
3327 |
+
vNjpL9DbWu7PdIxztDhC2gV7+AJ1uP2lsdeu9tfeE8tTEH6KRtGX+rcuKxGrkLAngPnon1rpN5+r
|
3328 |
+
5N9ss4UXnT3ZJE95kTXWXwTrgIOrmgIttRD02JDHBHNA7XIloKmf7J6raBKZV8aPEjoJpL1E/QYV
|
3329 |
+
N8Gb5DKj7Tjo2GTzLH4U/ALqn83/B2gX2yKQOC16jdFU8WnjXzPKej17CuPKf1855eJ1usV2GDPO
|
3330 |
+
LPAvTK33sefOT6jEm0pUBsV/fdUID+Ic/n4XuKxe9tQWskMJDE32p2u0mYRlynqI4uJEvlz36hz1
|
3331 |
+
-----END CERTIFICATE-----
|
3332 |
+
|
3333 |
+
Starfield Root Certificate Authority - G2
|
3334 |
+
=========================================
|
3335 |
+
-----BEGIN CERTIFICATE-----
|
3336 |
+
MIID3TCCAsWgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBjzELMAkGA1UEBhMCVVMxEDAOBgNVBAgT
|
3337 |
+
B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9s
|
3338 |
+
b2dpZXMsIEluYy4xMjAwBgNVBAMTKVN0YXJmaWVsZCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0
|
3339 |
+
eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgY8xCzAJBgNVBAYTAlVTMRAw
|
3340 |
+
DgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQg
|
3341 |
+
VGVjaG5vbG9naWVzLCBJbmMuMTIwMAYDVQQDEylTdGFyZmllbGQgUm9vdCBDZXJ0aWZpY2F0ZSBB
|
3342 |
+
dXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL3twQP89o/8ArFv
|
3343 |
+
W59I2Z154qK3A2FWGMNHttfKPTUuiUP3oWmb3ooa/RMgnLRJdzIpVv257IzdIvpy3Cdhl+72WoTs
|
3344 |
+
bhm5iSzchFvVdPtrX8WJpRBSiUZV9Lh1HOZ/5FSuS/hVclcCGfgXcVnrHigHdMWdSL5stPSksPNk
|
3345 |
+
N3mSwOxGXn/hbVNMYq/NHwtjuzqd+/x5AJhhdM8mgkBj87JyahkNmcrUDnXMN/uLicFZ8WJ/X7Nf
|
3346 |
+
ZTD4p7dNdloedl40wOiWVpmKs/B/pM293DIxfJHP4F8R+GuqSVzRmZTRouNjWwl2tVZi4Ut0HZbU
|
3347 |
+
JtQIBFnQmA4O5t78w+wfkPECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
|
3348 |
+
AQYwHQYDVR0OBBYEFHwMMh+n2TB/xH1oo2Kooc6rB1snMA0GCSqGSIb3DQEBCwUAA4IBAQARWfol
|
3349 |
+
TwNvlJk7mh+ChTnUdgWUXuEok21iXQnCoKjUsHU48TRqneSfioYmUeYs0cYtbpUgSpIB7LiKZ3sx
|
3350 |
+
4mcujJUDJi5DnUox9g61DLu34jd/IroAow57UvtruzvE03lRTs2Q9GcHGcg8RnoNAX3FWOdt5oUw
|
3351 |
+
F5okxBDgBPfg8n/Uqgr/Qh037ZTlZFkSIHc40zI+OIF1lnP6aI+xy84fxez6nH7PfrHxBy22/L/K
|
3352 |
+
pL/QlwVKvOoYKAKQvVR4CSFx09F9HdkWsKlhPdAKACL8x3vLCWRFCztAgfd9fDL1mMpYjn0q7pBZ
|
3353 |
+
c2T5NnReJaH1ZgUufzkVqSr7UIuOhWn0
|
3354 |
+
-----END CERTIFICATE-----
|
3355 |
+
|
3356 |
+
Starfield Services Root Certificate Authority - G2
|
3357 |
+
==================================================
|
3358 |
+
-----BEGIN CERTIFICATE-----
|
3359 |
+
MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMxEDAOBgNVBAgT
|
3360 |
+
B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9s
|
3361 |
+
b2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVsZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRl
|
3362 |
+
IEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNV
|
3363 |
+
BAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxT
|
3364 |
+
dGFyZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2VydmljZXMg
|
3365 |
+
Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
|
3366 |
+
AQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20pOsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2
|
3367 |
+
h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm28xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4Pa
|
3368 |
+
hHQUw2eeBGg6345AWh1KTs9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLP
|
3369 |
+
LJGmpufehRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk6mFB
|
3370 |
+
rMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAwDwYDVR0TAQH/BAUw
|
3371 |
+
AwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+qAdcwKziIorhtSpzyEZGDMA0GCSqG
|
3372 |
+
SIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMIbw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPP
|
3373 |
+
E95Dz+I0swSdHynVv/heyNXBve6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTy
|
3374 |
+
xQGjhdByPq1zqwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkd
|
3375 |
+
iEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn0q23KXB56jza
|
3376 |
+
YyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCNsSi6
|
3377 |
+
-----END CERTIFICATE-----
|
3378 |
+
|
3379 |
+
AffirmTrust Commercial
|
3380 |
+
======================
|
3381 |
+
-----BEGIN CERTIFICATE-----
|
3382 |
+
MIIDTDCCAjSgAwIBAgIId3cGJyapsXwwDQYJKoZIhvcNAQELBQAwRDELMAkGA1UEBhMCVVMxFDAS
|
3383 |
+
BgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBDb21tZXJjaWFsMB4XDTEw
|
3384 |
+
MDEyOTE0MDYwNloXDTMwMTIzMTE0MDYwNlowRDELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmly
|
3385 |
+
bVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBDb21tZXJjaWFsMIIBIjANBgkqhkiG9w0BAQEF
|
3386 |
+
AAOCAQ8AMIIBCgKCAQEA9htPZwcroRX1BiLLHwGy43NFBkRJLLtJJRTWzsO3qyxPxkEylFf6Eqdb
|
3387 |
+
DuKPHx6GGaeqtS25Xw2Kwq+FNXkyLbscYjfysVtKPcrNcV/pQr6U6Mje+SJIZMblq8Yrba0F8PrV
|
3388 |
+
C8+a5fBQpIs7R6UjW3p6+DM/uO+Zl+MgwdYoic+U+7lF7eNAFxHUdPALMeIrJmqbTFeurCA+ukV6
|
3389 |
+
BfO9m2kVrn1OIGPENXY6BwLJN/3HR+7o8XYdcxXyl6S1yHp52UKqK39c/s4mT6NmgTWvRLpUHhww
|
3390 |
+
MmWd5jyTXlBOeuM61G7MGvv50jeuJCqrVwMiKA1JdX+3KNp1v47j3A55MQIDAQABo0IwQDAdBgNV
|
3391 |
+
HQ4EFgQUnZPGU4teyq8/nx4P5ZmVvCT2lI8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
|
3392 |
+
AQYwDQYJKoZIhvcNAQELBQADggEBAFis9AQOzcAN/wr91LoWXym9e2iZWEnStB03TX8nfUYGXUPG
|
3393 |
+
hi4+c7ImfU+TqbbEKpqrIZcUsd6M06uJFdhrJNTxFq7YpFzUf1GO7RgBsZNjvbz4YYCanrHOQnDi
|
3394 |
+
qX0GJX0nof5v7LMeJNrjS1UaADs1tDvZ110w/YETifLCBivtZ8SOyUOyXGsViQK8YvxO8rUzqrJv
|
3395 |
+
0wqiUOP2O+guRMLbZjipM1ZI8W0bM40NjD9gN53Tym1+NH4Nn3J2ixufcv1SNUFFApYvHLKac0kh
|
3396 |
+
sUlHRUe072o0EclNmsxZt9YCnlpOZbWUrhvfKbAW8b8Angc6F2S1BLUjIZkKlTuXfO8=
|
3397 |
+
-----END CERTIFICATE-----
|
3398 |
+
|
3399 |
+
AffirmTrust Networking
|
3400 |
+
======================
|
3401 |
+
-----BEGIN CERTIFICATE-----
|
3402 |
+
MIIDTDCCAjSgAwIBAgIIfE8EORzUmS0wDQYJKoZIhvcNAQEFBQAwRDELMAkGA1UEBhMCVVMxFDAS
|
3403 |
+
BgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBOZXR3b3JraW5nMB4XDTEw
|
3404 |
+
MDEyOTE0MDgyNFoXDTMwMTIzMTE0MDgyNFowRDELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmly
|
3405 |
+
bVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBOZXR3b3JraW5nMIIBIjANBgkqhkiG9w0BAQEF
|
3406 |
+
AAOCAQ8AMIIBCgKCAQEAtITMMxcua5Rsa2FSoOujz3mUTOWUgJnLVWREZY9nZOIG41w3SfYvm4SE
|
3407 |
+
Hi3yYJ0wTsyEheIszx6e/jarM3c1RNg1lho9Nuh6DtjVR6FqaYvZ/Ls6rnla1fTWcbuakCNrmreI
|
3408 |
+
dIcMHl+5ni36q1Mr3Lt2PpNMCAiMHqIjHNRqrSK6mQEubWXLviRmVSRLQESxG9fhwoXA3hA/Pe24
|
3409 |
+
/PHxI1Pcv2WXb9n5QHGNfb2V1M6+oF4nI979ptAmDgAp6zxG8D1gvz9Q0twmQVGeFDdCBKNwV6gb
|
3410 |
+
h+0t+nvujArjqWaJGctB+d1ENmHP4ndGyH329JKBNv3bNPFyfvMMFr20FQIDAQABo0IwQDAdBgNV
|
3411 |
+
HQ4EFgQUBx/S55zawm6iQLSwelAQUHTEyL0wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
|
3412 |
+
AQYwDQYJKoZIhvcNAQEFBQADggEBAIlXshZ6qML91tmbmzTCnLQyFE2npN/svqe++EPbkTfOtDIu
|
3413 |
+
UFUaNU52Q3Eg75N3ThVwLofDwR1t3Mu1J9QsVtFSUzpE0nPIxBsFZVpikpzuQY0x2+c06lkh1QF6
|
3414 |
+
12S4ZDnNye2v7UsDSKegmQGA3GWjNq5lWUhPgkvIZfFXHeVZLgo/bNjR9eUJtGxUAArgFU2HdW23
|
3415 |
+
WJZa3W3SAKD0m0i+wzekujbgfIeFlxoVot4uolu9rxj5kFDNcFn4J2dHy8egBzp90SxdbBk6ZrV9
|
3416 |
+
/ZFvgrG+CJPbFEfxojfHRZ48x3evZKiT3/Zpg4Jg8klCNO1aAFSFHBY2kgxc+qatv9s=
|
3417 |
+
-----END CERTIFICATE-----
|
3418 |
+
|
3419 |
+
AffirmTrust Premium
|
3420 |
+
===================
|
3421 |
+
-----BEGIN CERTIFICATE-----
|
3422 |
+
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
|
3446 |
+
-----END CERTIFICATE-----
|
3447 |
+
|
3448 |
+
AffirmTrust Premium ECC
|
3449 |
+
=======================
|
3450 |
+
-----BEGIN CERTIFICATE-----
|
3451 |
+
MIIB/jCCAYWgAwIBAgIIdJclisc/elQwCgYIKoZIzj0EAwMwRTELMAkGA1UEBhMCVVMxFDASBgNV
|
3452 |
+
BAoMC0FmZmlybVRydXN0MSAwHgYDVQQDDBdBZmZpcm1UcnVzdCBQcmVtaXVtIEVDQzAeFw0xMDAx
|
3453 |
+
MjkxNDIwMjRaFw00MDEyMzExNDIwMjRaMEUxCzAJBgNVBAYTAlVTMRQwEgYDVQQKDAtBZmZpcm1U
|
3454 |
+
cnVzdDEgMB4GA1UEAwwXQWZmaXJtVHJ1c3QgUHJlbWl1bSBFQ0MwdjAQBgcqhkjOPQIBBgUrgQQA
|
3455 |
+
IgNiAAQNMF4bFZ0D0KF5Nbc6PJJ6yhUczWLznCZcBz3lVPqj1swS6vQUX+iOGasvLkjmrBhDeKzQ
|
3456 |
+
N8O9ss0s5kfiGuZjuD0uL3jET9v0D6RoTFVya5UdThhClXjMNzyR4ptlKymjQjBAMB0GA1UdDgQW
|
3457 |
+
BBSaryl6wBE1NSZRMADDav5A1a7WPDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAK
|
3458 |
+
BggqhkjOPQQDAwNnADBkAjAXCfOHiFBar8jAQr9HX/VsaobgxCd05DhT1wV/GzTjxi+zygk8N53X
|
3459 |
+
57hG8f2h4nECMEJZh0PUUd+60wkyWs6Iflc9nF9Ca/UHLbXwgpP5WW+uZPpY5Yse42O+tYHNbwKM
|
3460 |
+
eQ==
|
3461 |
+
-----END CERTIFICATE-----
|
3462 |
+
|
3463 |
+
Certum Trusted Network CA
|
3464 |
+
=========================
|
3465 |
+
-----BEGIN CERTIFICATE-----
|
3466 |
+
MIIDuzCCAqOgAwIBAgIDBETAMA0GCSqGSIb3DQEBBQUAMH4xCzAJBgNVBAYTAlBMMSIwIAYDVQQK
|
3467 |
+
ExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlv
|
3468 |
+
biBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBUcnVzdGVkIE5ldHdvcmsgQ0EwHhcNMDgxMDIy
|
3469 |
+
MTIwNzM3WhcNMjkxMjMxMTIwNzM3WjB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBU
|
3470 |
+
ZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5
|
3471 |
+
MSIwIAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMIIBIjANBgkqhkiG9w0BAQEFAAOC
|
3472 |
+
AQ8AMIIBCgKCAQEA4/t9o3K6wvDJFIf1awFO4W5AB7ptJ11/91sts1rHUV+rpDKmYYe2bg+G0jAC
|
3473 |
+
l/jXaVehGDldamR5xgFZrDwxSjh80gTSSyjoIF87B6LMTXPb865Px1bVWqeWifrzq2jUI4ZZJ88J
|
3474 |
+
J7ysbnKDHDBy3+Ci6dLhdHUZvSqeexVUBBvXQzmtVSjF4hq79MDkrjhJM8x2hZ85RdKknvISjFH4
|
3475 |
+
fOQtf/WsX+sWn7Et0brMkUJ3TCXJkDhv2/DM+44el1k+1WBO5gUo7Ul5E0u6SNsv+XLTOcr+H9g0
|
3476 |
+
cvW0QM8xAcPs3hEtF10fuFDRXhmnad4HMyjKUJX5p1TLVIZQRan5SQIDAQABo0IwQDAPBgNVHRMB
|
3477 |
+
Af8EBTADAQH/MB0GA1UdDgQWBBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNVHQ8BAf8EBAMCAQYw
|
3478 |
+
DQYJKoZIhvcNAQEFBQADggEBAKaorSLOAT2mo/9i0Eidi15ysHhE49wcrwn9I0j6vSrEuVUEtRCj
|
3479 |
+
jSfeC4Jj0O7eDDd5QVsisrCaQVymcODU0HfLI9MA4GxWL+FpDQ3Zqr8hgVDZBqWo/5U30Kr+4rP1
|
3480 |
+
mS1FhIrlQgnXdAIv94nYmem8J9RHjboNRhx3zxSkHLmkMcScKHQDNP8zGSal6Q10tz6XxnboJ5aj
|
3481 |
+
Zt3hrvJBW8qYVoNzcOSGGtIxQbovvi0TWnZvTuhOgQ4/WwMioBK+ZlgRSssDxLQqKi2WF+A5VLxI
|
3482 |
+
03YnnZotBqbJ7DnSq9ufmgsnAjUpsUCV5/nonFWIGUbWtzT1fs45mtk48VH3Tyw=
|
3483 |
+
-----END CERTIFICATE-----
|
3484 |
+
|
3485 |
+
Certinomis - Autorité Racine
|
3486 |
+
=============================
|
3487 |
+
-----BEGIN CERTIFICATE-----
|
3488 |
+
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
|
3513 |
+
vgt2Fl43N+bYdJeimUV5
|
3514 |
+
-----END CERTIFICATE-----
|
3515 |
+
|
3516 |
+
Root CA Generalitat Valenciana
|
3517 |
+
==============================
|
3518 |
+
-----BEGIN CERTIFICATE-----
|
3519 |
+
MIIGizCCBXOgAwIBAgIEO0XlaDANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJFUzEfMB0GA1UE
|
3520 |
+
ChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UECxMGUEtJR1ZBMScwJQYDVQQDEx5Sb290
|
3521 |
+
IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmEwHhcNMDEwNzA2MTYyMjQ3WhcNMjEwNzAxMTUyMjQ3
|
3522 |
+
WjBoMQswCQYDVQQGEwJFUzEfMB0GA1UEChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UE
|
3523 |
+
CxMGUEtJR1ZBMScwJQYDVQQDEx5Sb290IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmEwggEiMA0G
|
3524 |
+
CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDGKqtXETcvIorKA3Qdyu0togu8M1JAJke+WmmmO3I2
|
3525 |
+
F0zo37i7L3bhQEZ0ZQKQUgi0/6iMweDHiVYQOTPvaLRfX9ptI6GJXiKjSgbwJ/BXufjpTjJ3Cj9B
|
3526 |
+
ZPPrZe52/lSqfR0grvPXdMIKX/UIKFIIzFVd0g/bmoGlu6GzwZTNVOAydTGRGmKy3nXiz0+J2ZGQ
|
3527 |
+
D0EbtFpKd71ng+CT516nDOeB0/RSrFOyA8dEJvt55cs0YFAQexvba9dHq198aMpunUEDEO5rmXte
|
3528 |
+
JajCq+TA81yc477OMUxkHl6AovWDfgzWyoxVjr7gvkkHD6MkQXpYHYTqWBLI4bft75PelAgxAgMB
|
3529 |
+
AAGjggM7MIIDNzAyBggrBgEFBQcBAQQmMCQwIgYIKwYBBQUHMAGGFmh0dHA6Ly9vY3NwLnBraS5n
|
3530 |
+
dmEuZXMwEgYDVR0TAQH/BAgwBgEB/wIBAjCCAjQGA1UdIASCAiswggInMIICIwYKKwYBBAG/VQIB
|
3531 |
+
ADCCAhMwggHoBggrBgEFBQcCAjCCAdoeggHWAEEAdQB0AG8AcgBpAGQAYQBkACAAZABlACAAQwBl
|
3532 |
+
AHIAdABpAGYAaQBjAGEAYwBpAPMAbgAgAFIAYQDtAHoAIABkAGUAIABsAGEAIABHAGUAbgBlAHIA
|
3533 |
+
YQBsAGkAdABhAHQAIABWAGEAbABlAG4AYwBpAGEAbgBhAC4ADQAKAEwAYQAgAEQAZQBjAGwAYQBy
|
3534 |
+
AGEAYwBpAPMAbgAgAGQAZQAgAFAAcgDhAGMAdABpAGMAYQBzACAAZABlACAAQwBlAHIAdABpAGYA
|
3535 |
+
aQBjAGEAYwBpAPMAbgAgAHEAdQBlACAAcgBpAGcAZQAgAGUAbAAgAGYAdQBuAGMAaQBvAG4AYQBt
|
3536 |
+
AGkAZQBuAHQAbwAgAGQAZQAgAGwAYQAgAHAAcgBlAHMAZQBuAHQAZQAgAEEAdQB0AG8AcgBpAGQA
|
3537 |
+
YQBkACAAZABlACAAQwBlAHIAdABpAGYAaQBjAGEAYwBpAPMAbgAgAHMAZQAgAGUAbgBjAHUAZQBu
|
3538 |
+
AHQAcgBhACAAZQBuACAAbABhACAAZABpAHIAZQBjAGMAaQDzAG4AIAB3AGUAYgAgAGgAdAB0AHAA
|
3539 |
+
OgAvAC8AdwB3AHcALgBwAGsAaQAuAGcAdgBhAC4AZQBzAC8AYwBwAHMwJQYIKwYBBQUHAgEWGWh0
|
3540 |
+
dHA6Ly93d3cucGtpLmd2YS5lcy9jcHMwHQYDVR0OBBYEFHs100DSHHgZZu90ECjcPk+yeAT8MIGV
|
3541 |
+
BgNVHSMEgY0wgYqAFHs100DSHHgZZu90ECjcPk+yeAT8oWykajBoMQswCQYDVQQGEwJFUzEfMB0G
|
3542 |
+
A1UEChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UECxMGUEtJR1ZBMScwJQYDVQQDEx5S
|
3543 |
+
b290IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmGCBDtF5WgwDQYJKoZIhvcNAQEFBQADggEBACRh
|
3544 |
+
TvW1yEICKrNcda3FbcrnlD+laJWIwVTAEGmiEi8YPyVQqHxK6sYJ2fR1xkDar1CdPaUWu20xxsdz
|
3545 |
+
Ckj+IHLtb8zog2EWRpABlUt9jppSCS/2bxzkoXHPjCpaF3ODR00PNvsETUlR4hTJZGH71BTg9J63
|
3546 |
+
NI8KJr2XXPR5OkowGcytT6CYirQxlyric21+eLj4iIlPsSKRZEv1UN4D2+XFducTZnV+ZfsBn5OH
|
3547 |
+
iJ35Rld8TWCvmHMTI6QgkYH60GFmuH3Rr9ZvHmw96RH9qfmCIoaZM3Fa6hlXPZHNqcCjbgcTpsnt
|
3548 |
+
+GijnsNacgmHKNHEc8RzGF9QdRYxn7fofMM=
|
3549 |
+
-----END CERTIFICATE-----
|
3550 |
+
|
3551 |
+
A-Trust-nQual-03
|
3552 |
+
================
|
3553 |
+
-----BEGIN CERTIFICATE-----
|
3554 |
+
MIIDzzCCAregAwIBAgIDAWweMA0GCSqGSIb3DQEBBQUAMIGNMQswCQYDVQQGEwJBVDFIMEYGA1UE
|
3555 |
+
Cgw/QS1UcnVzdCBHZXMuIGYuIFNpY2hlcmhlaXRzc3lzdGVtZSBpbSBlbGVrdHIuIERhdGVudmVy
|
3556 |
+
a2VociBHbWJIMRkwFwYDVQQLDBBBLVRydXN0LW5RdWFsLTAzMRkwFwYDVQQDDBBBLVRydXN0LW5R
|
3557 |
+
dWFsLTAzMB4XDTA1MDgxNzIyMDAwMFoXDTE1MDgxNzIyMDAwMFowgY0xCzAJBgNVBAYTAkFUMUgw
|
3558 |
+
RgYDVQQKDD9BLVRydXN0IEdlcy4gZi4gU2ljaGVyaGVpdHNzeXN0ZW1lIGltIGVsZWt0ci4gRGF0
|
3559 |
+
ZW52ZXJrZWhyIEdtYkgxGTAXBgNVBAsMEEEtVHJ1c3QtblF1YWwtMDMxGTAXBgNVBAMMEEEtVHJ1
|
3560 |
+
c3QtblF1YWwtMDMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtPWFuA/OQO8BBC4SA
|
3561 |
+
zewqo51ru27CQoT3URThoKgtUaNR8t4j8DRE/5TrzAUjlUC5B3ilJfYKvUWG6Nm9wASOhURh73+n
|
3562 |
+
yfrBJcyFLGM/BWBzSQXgYHiVEEvc+RFZznF/QJuKqiTfC0Li21a8StKlDJu3Qz7dg9MmEALP6iPE
|
3563 |
+
SU7l0+m0iKsMrmKS1GWH2WrX9IWf5DMiJaXlyDO6w8dB3F/GaswADm0yqLaHNgBid5seHzTLkDx4
|
3564 |
+
iHQF63n1k3Flyp3HaxgtPVxO59X4PzF9j4fsCiIvI+n+u33J4PTs63zEsMMtYrWacdaxaujs2e3V
|
3565 |
+
cuy+VwHOBVWf3tFgiBCzAgMBAAGjNjA0MA8GA1UdEwEB/wQFMAMBAf8wEQYDVR0OBAoECERqlWdV
|
3566 |
+
eRFPMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAVdRU0VlIXLOThaq/Yy/kgM40
|
3567 |
+
ozRiPvbY7meIMQQDbwvUB/tOdQ/TLtPAF8fGKOwGDREkDg6lXb+MshOWcdzUzg4NCmgybLlBMRmr
|
3568 |
+
sQd7TZjTXLDR8KdCoLXEjq/+8T/0709GAHbrAvv5ndJAlseIOrifEXnzgGWovR/TeIGgUUw3tKZd
|
3569 |
+
JXDRZslo+S4RFGjxVJgIrCaSD96JntT6s3kr0qN51OyLrIdTaEJMUVF0HhsnLuP1Hyl0Te2v9+GS
|
3570 |
+
mYHovjrHF1D2t8b8m7CKa9aIA5GPBnc6hQLdmNVDeD/GMBWsm2vLV7eJUYs66MmEDNuxUCAKGkq6
|
3571 |
+
ahq97BvIxYSazQ==
|
3572 |
+
-----END CERTIFICATE-----
|
3573 |
+
|
3574 |
+
TWCA Root Certification Authority
|
3575 |
+
=================================
|
3576 |
+
-----BEGIN CERTIFICATE-----
|
3577 |
+
MIIDezCCAmOgAwIBAgIBATANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQGEwJUVzESMBAGA1UECgwJ
|
3578 |
+
VEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NBIFJvb3QgQ2VydGlmaWNh
|
3579 |
+
dGlvbiBBdXRob3JpdHkwHhcNMDgwODI4MDcyNDMzWhcNMzAxMjMxMTU1OTU5WjBfMQswCQYDVQQG
|
3580 |
+
EwJUVzESMBAGA1UECgwJVEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NB
|
3581 |
+
IFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
|
3582 |
+
AoIBAQCwfnK4pAOU5qfeCTiRShFAh6d8WWQUe7UREN3+v9XAu1bihSX0NXIP+FPQQeFEAcK0HMMx
|
3583 |
+
QhZHhTMidrIKbw/lJVBPhYa+v5guEGcevhEFhgWQxFnQfHgQsIBct+HHK3XLfJ+utdGdIzdjp9xC
|
3584 |
+
oi2SBBtQwXu4PhvJVgSLL1KbralW6cH/ralYhzC2gfeXRfwZVzsrb+RH9JlF/h3x+JejiB03HFyP
|
3585 |
+
4HYlmlD4oFT/RJB2I9IyxsOrBr/8+7/zrX2SYgJbKdM1o5OaQ2RgXbL6Mv87BK9NQGr5x+PvI/1r
|
3586 |
+
y+UPizgN7gr8/g+YnzAx3WxSZfmLgb4i4RxYA7qRG4kHAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIB
|
3587 |
+
BjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqOFsmjd6LWvJPelSDGRjjCDWmujANBgkqhkiG
|
3588 |
+
9w0BAQUFAAOCAQEAPNV3PdrfibqHDAhUaiBQkr6wQT25JmSDCi/oQMCXKCeCMErJk/9q56YAf4lC
|
3589 |
+
mtYR5VPOL8zy2gXE/uJQxDqGfczafhAJO5I1KlOy/usrBdlsXebQ79NqZp4VKIV66IIArB6nCWlW
|
3590 |
+
QtNoURi+VJq/REG6Sb4gumlc7rh3zc5sH62Dlhh9DrUUOYTxKOkto557HnpyWoOzeW/vtPzQCqVY
|
3591 |
+
T0bf+215WfKEIlKuD8z7fDvnaspHYcN6+NOSBB+4IIThNlQWx0DeO4pz3N/GCUzf7Nr/1FNCocny
|
3592 |
+
Yh0igzyXxfkZYiesZSLX0zzG5Y6yU8xJzrww/nsOM5D77dIUkR8Hrw==
|
3593 |
+
-----END CERTIFICATE-----
|
3594 |
+
|
3595 |
+
Security Communication RootCA2
|
3596 |
+
==============================
|
3597 |
+
-----BEGIN CERTIFICATE-----
|
3598 |
+
MIIDdzCCAl+gAwIBAgIBADANBgkqhkiG9w0BAQsFADBdMQswCQYDVQQGEwJKUDElMCMGA1UEChMc
|
3599 |
+
U0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEnMCUGA1UECxMeU2VjdXJpdHkgQ29tbXVuaWNh
|
3600 |
+
dGlvbiBSb290Q0EyMB4XDTA5MDUyOTA1MDAzOVoXDTI5MDUyOTA1MDAzOVowXTELMAkGA1UEBhMC
|
3601 |
+
SlAxJTAjBgNVBAoTHFNFQ09NIFRydXN0IFN5c3RlbXMgQ08uLExURC4xJzAlBgNVBAsTHlNlY3Vy
|
3602 |
+
aXR5IENvbW11bmljYXRpb24gUm9vdENBMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
|
3603 |
+
ANAVOVKxUrO6xVmCxF1SrjpDZYBLx/KWvNs2l9amZIyoXvDjChz335c9S672XewhtUGrzbl+dp++
|
3604 |
+
+T42NKA7wfYxEUV0kz1XgMX5iZnK5atq1LXaQZAQwdbWQonCv/Q4EpVMVAX3NuRFg3sUZdbcDE3R
|
3605 |
+
3n4MqzvEFb46VqZab3ZpUql6ucjrappdUtAtCms1FgkQhNBqyjoGADdH5H5XTz+L62e4iKrFvlNV
|
3606 |
+
spHEfbmwhRkGeC7bYRr6hfVKkaHnFtWOojnflLhwHyg/i/xAXmODPIMqGplrz95Zajv8bxbXH/1K
|
3607 |
+
EOtOghY6rCcMU/Gt1SSwawNQwS08Ft1ENCcadfsCAwEAAaNCMEAwHQYDVR0OBBYEFAqFqXdlBZh8
|
3608 |
+
QIH4D5csOPEK7DzPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEB
|
3609 |
+
CwUAA4IBAQBMOqNErLlFsceTfsgLCkLfZOoc7llsCLqJX2rKSpWeeo8HxdpFcoJxDjrSzG+ntKEj
|
3610 |
+
u/Ykn8sX/oymzsLS28yN/HH8AynBbF0zX2S2ZTuJbxh2ePXcokgfGT+Ok+vx+hfuzU7jBBJV1uXk
|
3611 |
+
3fs+BXziHV7Gp7yXT2g69ekuCkO2r1dcYmh8t/2jioSgrGK+KwmHNPBqAbubKVY8/gA3zyNs8U6q
|
3612 |
+
tnRGEmyR7jTV7JqR50S+kDFy1UkC9gLl9B/rfNmWVan/7Ir5mUf/NVoCqgTLiluHcSmRvaS0eg29
|
3613 |
+
mvVXIwAHIRc/SjnRBUkLp7Y3gaVdjKozXoEofKd9J+sAro03
|
3614 |
+
-----END CERTIFICATE-----
|
3615 |
+
|
3616 |
+
EC-ACC
|
3617 |
+
======
|
3618 |
+
-----BEGIN CERTIFICATE-----
|
3619 |
+
MIIFVjCCBD6gAwIBAgIQ7is969Qh3hSoYqwE893EATANBgkqhkiG9w0BAQUFADCB8zELMAkGA1UE
|
3620 |
+
BhMCRVMxOzA5BgNVBAoTMkFnZW5jaWEgQ2F0YWxhbmEgZGUgQ2VydGlmaWNhY2lvIChOSUYgUS0w
|
3621 |
+
ODAxMTc2LUkpMSgwJgYDVQQLEx9TZXJ2ZWlzIFB1YmxpY3MgZGUgQ2VydGlmaWNhY2lvMTUwMwYD
|
3622 |
+
VQQLEyxWZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5ldC92ZXJhcnJlbCAoYykwMzE1MDMGA1UE
|
3623 |
+
CxMsSmVyYXJxdWlhIEVudGl0YXRzIGRlIENlcnRpZmljYWNpbyBDYXRhbGFuZXMxDzANBgNVBAMT
|
3624 |
+
BkVDLUFDQzAeFw0wMzAxMDcyMzAwMDBaFw0zMTAxMDcyMjU5NTlaMIHzMQswCQYDVQQGEwJFUzE7
|
3625 |
+
MDkGA1UEChMyQWdlbmNpYSBDYXRhbGFuYSBkZSBDZXJ0aWZpY2FjaW8gKE5JRiBRLTA4MDExNzYt
|
3626 |
+
SSkxKDAmBgNVBAsTH1NlcnZlaXMgUHVibGljcyBkZSBDZXJ0aWZpY2FjaW8xNTAzBgNVBAsTLFZl
|
3627 |
+
Z2V1IGh0dHBzOi8vd3d3LmNhdGNlcnQubmV0L3ZlcmFycmVsIChjKTAzMTUwMwYDVQQLEyxKZXJh
|
3628 |
+
cnF1aWEgRW50aXRhdHMgZGUgQ2VydGlmaWNhY2lvIENhdGFsYW5lczEPMA0GA1UEAxMGRUMtQUND
|
3629 |
+
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsyLHT+KXQpWIR4NA9h0X84NzJB5R85iK
|
3630 |
+
w5K4/0CQBXCHYMkAqbWUZRkiFRfCQ2xmRJoNBD45b6VLeqpjt4pEndljkYRm4CgPukLjbo73FCeT
|
3631 |
+
ae6RDqNfDrHrZqJyTxIThmV6PttPB/SnCWDaOkKZx7J/sxaVHMf5NLWUhdWZXqBIoH7nF2W4onW4
|
3632 |
+
HvPlQn2v7fOKSGRdghST2MDk/7NQcvJ29rNdQlB50JQ+awwAvthrDk4q7D7SzIKiGGUzE3eeml0a
|
3633 |
+
E9jD2z3Il3rucO2n5nzbcc8tlGLfbdb1OL4/pYUKGbio2Al1QnDE6u/LDsg0qBIimAy4E5S2S+zw
|
3634 |
+
0JDnJwIDAQABo4HjMIHgMB0GA1UdEQQWMBSBEmVjX2FjY0BjYXRjZXJ0Lm5ldDAPBgNVHRMBAf8E
|
3635 |
+
BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUoMOLRKo3pUW/l4Ba0fF4opvpXY0wfwYD
|
3636 |
+
VR0gBHgwdjB0BgsrBgEEAfV4AQMBCjBlMCwGCCsGAQUFBwIBFiBodHRwczovL3d3dy5jYXRjZXJ0
|
3637 |
+
Lm5ldC92ZXJhcnJlbDA1BggrBgEFBQcCAjApGidWZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5l
|
3638 |
+
dC92ZXJhcnJlbCAwDQYJKoZIhvcNAQEFBQADggEBAKBIW4IB9k1IuDlVNZyAelOZ1Vr/sXE7zDkJ
|
3639 |
+
lF7W2u++AVtd0x7Y/X1PzaBB4DSTv8vihpw3kpBWHNzrKQXlxJ7HNd+KDM3FIUPpqojlNcAZQmNa
|
3640 |
+
Al6kSBg6hW/cnbw/nZzBh7h6YQjpdwt/cKt63dmXLGQehb+8dJahw3oS7AwaboMMPOhyRp/7SNVe
|
3641 |
+
l+axofjk70YllJyJ22k4vuxcDlbHZVHlUIiIv0LVKz3l+bqeLrPK9HOSAgu+TGbrIP65y7WZf+a2
|
3642 |
+
E/rKS03Z7lNGBjvGTq2TWoF+bCpLagVFjPIhpDGQh2xlnJ2lYJU6Un/10asIbvPuW/mIPX64b24D
|
3643 |
+
5EI=
|
3644 |
+
-----END CERTIFICATE-----
|
3645 |
+
|
3646 |
+
Hellenic Academic and Research Institutions RootCA 2011
|
3647 |
+
=======================================================
|
3648 |
+
-----BEGIN CERTIFICATE-----
|
3649 |
+
MIIEMTCCAxmgAwIBAgIBADANBgkqhkiG9w0BAQUFADCBlTELMAkGA1UEBhMCR1IxRDBCBgNVBAoT
|
3650 |
+
O0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ2VydC4gQXV0aG9y
|
3651 |
+
aXR5MUAwPgYDVQQDEzdIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25z
|
3652 |
+
IFJvb3RDQSAyMDExMB4XDTExMTIwNjEzNDk1MloXDTMxMTIwMTEzNDk1MlowgZUxCzAJBgNVBAYT
|
3653 |
+
AkdSMUQwQgYDVQQKEztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25z
|
3654 |
+
IENlcnQuIEF1dGhvcml0eTFAMD4GA1UEAxM3SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNo
|
3655 |
+
IEluc3RpdHV0aW9ucyBSb290Q0EgMjAxMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
|
3656 |
+
AKlTAOMupvaO+mDYLZU++CwqVE7NuYRhlFhPjz2L5EPzdYmNUeTDN9KKiE15HrcS3UN4SoqS5tdI
|
3657 |
+
1Q+kOilENbgH9mgdVc04UfCMJDGFr4PJfel3r+0ae50X+bOdOFAPplp5kYCvN66m0zH7tSYJnTxa
|
3658 |
+
71HFK9+WXesyHgLacEnsbgzImjeN9/E2YEsmLIKe0HjzDQ9jpFEw4fkrJxIH2Oq9GGKYsFk3fb7u
|
3659 |
+
8yBRQlqD75O6aRXxYp2fmTmCobd0LovUxQt7L/DICto9eQqakxylKHJzkUOap9FNhYS5qXSPFEDH
|
3660 |
+
3N6sQWRstBmbAmNtJGSPRLIl6s5ddAxjMlyNh+UCAwEAAaOBiTCBhjAPBgNVHRMBAf8EBTADAQH/
|
3661 |
+
MAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQUppFC/RNhSiOeCKQp5dgTBCPuQSUwRwYDVR0eBEAwPqA8
|
3662 |
+
MAWCAy5ncjAFggMuZXUwBoIELmVkdTAGggQub3JnMAWBAy5ncjAFgQMuZXUwBoEELmVkdTAGgQQu
|
3663 |
+
b3JnMA0GCSqGSIb3DQEBBQUAA4IBAQAf73lB4XtuP7KMhjdCSk4cNx6NZrokgclPEg8hwAOXhiVt
|
3664 |
+
XdMiKahsog2p6z0GW5k6x8zDmjR/qw7IThzh+uTczQ2+vyT+bOdrwg3IBp5OjWEopmr95fZi6hg8
|
3665 |
+
TqBTnbI6nOulnJEWtk2C4AwFSKls9cz4y51JtPACpf1wA+2KIaWuE4ZJwzNzvoc7dIsXRSZMFpGD
|
3666 |
+
/md9zU1jZ/rzAxKWeAaNsWftjj++n08C9bMJL/NMh98qy5V8AcysNnq/onN694/BtZqhFLKPM58N
|
3667 |
+
7yLcZnuEvUUXBj08yrl3NI/K6s8/MT7jiOOASSXIl7WdmplNsDz4SgCbZN2fOUvRJ9e4
|
3668 |
+
-----END CERTIFICATE-----
|
3669 |
+
|
3670 |
+
Actalis Authentication Root CA
|
3671 |
+
==============================
|
3672 |
+
-----BEGIN CERTIFICATE-----
|
3673 |
+
MIIFuzCCA6OgAwIBAgIIVwoRl0LE48wwDQYJKoZIhvcNAQELBQAwazELMAkGA1UEBhMCSVQxDjAM
|
3674 |
+
BgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8wMzM1ODUyMDk2NzEnMCUGA1UE
|
3675 |
+
AwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290IENBMB4XDTExMDkyMjExMjIwMloXDTMwMDky
|
3676 |
+
MjExMjIwMlowazELMAkGA1UEBhMCSVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlz
|
3677 |
+
IFMucC5BLi8wMzM1ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290
|
3678 |
+
IENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAp8bEpSmkLO/lGMWwUKNvUTufClrJ
|
3679 |
+
wkg4CsIcoBh/kbWHuUA/3R1oHwiD1S0eiKD4j1aPbZkCkpAW1V8IbInX4ay8IMKx4INRimlNAJZa
|
3680 |
+
by/ARH6jDuSRzVju3PvHHkVH3Se5CAGfpiEd9UEtL0z9KK3giq0itFZljoZUj5NDKd45RnijMCO6
|
3681 |
+
zfB9E1fAXdKDa0hMxKufgFpbOr3JpyI/gCczWw63igxdBzcIy2zSekciRDXFzMwujt0q7bd9Zg1f
|
3682 |
+
YVEiVRvjRuPjPdA1YprbrxTIW6HMiRvhMCb8oJsfgadHHwTrozmSBp+Z07/T6k9QnBn+locePGX2
|
3683 |
+
oxgkg4YQ51Q+qDp2JE+BIcXjDwL4k5RHILv+1A7TaLndxHqEguNTVHnd25zS8gebLra8Pu2Fbe8l
|
3684 |
+
EfKXGkJh90qX6IuxEAf6ZYGyojnP9zz/GPvG8VqLWeICrHuS0E4UT1lF9gxeKF+w6D9Fz8+vm2/7
|
3685 |
+
hNN3WpVvrJSEnu68wEqPSpP4RCHiMUVhUE4Q2OM1fEwZtN4Fv6MGn8i1zeQf1xcGDXqVdFUNaBr8
|
3686 |
+
EBtiZJ1t4JWgw5QHVw0U5r0F+7if5t+L4sbnfpb2U8WANFAoWPASUHEXMLrmeGO89LKtmyuy/uE5
|
3687 |
+
jF66CyCU3nuDuP/jVo23Eek7jPKxwV2dpAtMK9myGPW1n0sCAwEAAaNjMGEwHQYDVR0OBBYEFFLY
|
3688 |
+
iDrIn3hm7YnzezhwlMkCAjbQMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUUtiIOsifeGbt
|
3689 |
+
ifN7OHCUyQICNtAwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4ICAQALe3KHwGCmSUyI
|
3690 |
+
WOYdiPcUZEim2FgKDk8TNd81HdTtBjHIgT5q1d07GjLukD0R0i70jsNjLiNmsGe+b7bAEzlgqqI0
|
3691 |
+
JZN1Ut6nna0Oh4lScWoWPBkdg/iaKWW+9D+a2fDzWochcYBNy+A4mz+7+uAwTc+G02UQGRjRlwKx
|
3692 |
+
K3JCaKygvU5a2hi/a5iB0P2avl4VSM0RFbnAKVy06Ij3Pjaut2L9HmLecHgQHEhb2rykOLpn7VU+
|
3693 |
+
Xlff1ANATIGk0k9jpwlCCRT8AKnCgHNPLsBA2RF7SOp6AsDT6ygBJlh0wcBzIm2Tlf05fbsq4/aC
|
3694 |
+
4yyXX04fkZT6/iyj2HYauE2yOE+b+h1IYHkm4vP9qdCa6HCPSXrW5b0KDtst842/6+OkfcvHlXHo
|
3695 |
+
2qN8xcL4dJIEG4aspCJTQLas/kx2z/uUMsA1n3Y/buWQbqCmJqK4LL7RK4X9p2jIugErsWx0Hbhz
|
3696 |
+
lefut8cl8ABMALJ+tguLHPPAUJ4lueAI3jZm/zel0btUZCzJJ7VLkn5l/9Mt4blOvH+kQSGQQXem
|
3697 |
+
OR/qnuOf0GZvBeyqdn6/axag67XH/JJULysRJyU3eExRarDzzFhdFPFqSBX/wge2sY0PjlxQRrM9
|
3698 |
+
vwGYT7JZVEc+NHt4bVaTLnPqZih4zR0Uv6CPLy64Lo7yFIrM6bV8+2ydDKXhlg==
|
3699 |
+
-----END CERTIFICATE-----
|
3700 |
+
|
3701 |
+
Trustis FPS Root CA
|
3702 |
+
===================
|
3703 |
+
-----BEGIN CERTIFICATE-----
|
3704 |
+
MIIDZzCCAk+gAwIBAgIQGx+ttiD5JNM2a/fH8YygWTANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQG
|
3705 |
+
EwJHQjEYMBYGA1UEChMPVHJ1c3RpcyBMaW1pdGVkMRwwGgYDVQQLExNUcnVzdGlzIEZQUyBSb290
|
3706 |
+
IENBMB4XDTAzMTIyMzEyMTQwNloXDTI0MDEyMTExMzY1NFowRTELMAkGA1UEBhMCR0IxGDAWBgNV
|
3707 |
+
BAoTD1RydXN0aXMgTGltaXRlZDEcMBoGA1UECxMTVHJ1c3RpcyBGUFMgUm9vdCBDQTCCASIwDQYJ
|
3708 |
+
KoZIhvcNAQEBBQADggEPADCCAQoCggEBAMVQe547NdDfxIzNjpvto8A2mfRC6qc+gIMPpqdZh8mQ
|
3709 |
+
RUN+AOqGeSoDvT03mYlmt+WKVoaTnGhLaASMk5MCPjDSNzoiYYkchU59j9WvezX2fihHiTHcDnlk
|
3710 |
+
H5nSW7r+f2C/revnPDgpai/lkQtV/+xvWNUtyd5MZnGPDNcE2gfmHhjjvSkCqPoc4Vu5g6hBSLwa
|
3711 |
+
cY3nYuUtsuvffM/bq1rKMfFMIvMFE/eC+XN5DL7XSxzA0RU8k0Fk0ea+IxciAIleH2ulrG6nS4zt
|
3712 |
+
o3Lmr2NNL4XSFDWaLk6M6jKYKIahkQlBOrTh4/L68MkKokHdqeMDx4gVOxzUGpTXn2RZEm0CAwEA
|
3713 |
+
AaNTMFEwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBS6+nEleYtXQSUhhgtx67JkDoshZzAd
|
3714 |
+
BgNVHQ4EFgQUuvpxJXmLV0ElIYYLceuyZA6LIWcwDQYJKoZIhvcNAQEFBQADggEBAH5Y//01GX2c
|
3715 |
+
GE+esCu8jowU/yyg2kdbw++BLa8F6nRIW/M+TgfHbcWzk88iNVy2P3UnXwmWzaD+vkAMXBJV+JOC
|
3716 |
+
yinpXj9WV4s4NvdFGkwozZ5BuO1WTISkQMi4sKUraXAEasP41BIy+Q7DsdwyhEQsb8tGD+pmQQ9P
|
3717 |
+
8Vilpg0ND2HepZ5dfWWhPBfnqFVO76DH7cZEf1T1o+CP8HxVIo8ptoGj4W1OLBuAZ+ytIJ8MYmHV
|
3718 |
+
l/9D7S3B2l0pKoU/rGXuhg8FjZBf3+6f9L/uHfuY5H+QK4R4EA5sSVPvFVtlRkpdr7r7OnIdzfYl
|
3719 |
+
iB6XzCGcKQENZetX2fNXlrtIzYE=
|
3720 |
+
-----END CERTIFICATE-----
|
3721 |
+
|
3722 |
+
StartCom Certification Authority
|
3723 |
+
================================
|
3724 |
+
-----BEGIN CERTIFICATE-----
|
3725 |
+
MIIHhzCCBW+gAwIBAgIBLTANBgkqhkiG9w0BAQsFADB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMN
|
3726 |
+
U3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmlu
|
3727 |
+
ZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0
|
3728 |
+
NjM3WhcNMzYwOTE3MTk0NjM2WjB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRk
|
3729 |
+
LjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMg
|
3730 |
+
U3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw
|
3731 |
+
ggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZkpMyONvg45iPwbm2xPN1y
|
3732 |
+
o4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rfOQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/
|
3733 |
+
Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/CJi/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/d
|
3734 |
+
eMotHweXMAEtcnn6RtYTKqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt
|
3735 |
+
2PZE4XNiHzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMMAv+Z
|
3736 |
+
6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w+2OqqGwaVLRcJXrJ
|
3737 |
+
osmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/
|
3738 |
+
untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVc
|
3739 |
+
UjyJthkqcwEKDwOzEmDyei+B26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT
|
3740 |
+
37uMdBNSSwIDAQABo4ICEDCCAgwwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYD
|
3741 |
+
VR0OBBYEFE4L7xqkQFulF2mHMMo0aEPQQa7yMB8GA1UdIwQYMBaAFE4L7xqkQFulF2mHMMo0aEPQ
|
3742 |
+
Qa7yMIIBWgYDVR0gBIIBUTCCAU0wggFJBgsrBgEEAYG1NwEBATCCATgwLgYIKwYBBQUHAgEWImh0
|
3743 |
+
dHA6Ly93d3cuc3RhcnRzc2wuY29tL3BvbGljeS5wZGYwNAYIKwYBBQUHAgEWKGh0dHA6Ly93d3cu
|
3744 |
+
c3RhcnRzc2wuY29tL2ludGVybWVkaWF0ZS5wZGYwgc8GCCsGAQUFBwICMIHCMCcWIFN0YXJ0IENv
|
3745 |
+
bW1lcmNpYWwgKFN0YXJ0Q29tKSBMdGQuMAMCAQEagZZMaW1pdGVkIExpYWJpbGl0eSwgcmVhZCB0
|
3746 |
+
aGUgc2VjdGlvbiAqTGVnYWwgTGltaXRhdGlvbnMqIG9mIHRoZSBTdGFydENvbSBDZXJ0aWZpY2F0
|
3747 |
+
aW9uIEF1dGhvcml0eSBQb2xpY3kgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuc3RhcnRzc2wuY29t
|
3748 |
+
L3BvbGljeS5wZGYwEQYJYIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilTdGFydENvbSBG
|
3749 |
+
cmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQsFAAOCAgEAjo/n3JR5
|
3750 |
+
fPGFf59Jb2vKXfuM/gTFwWLRfUKKvFO3lANmMD+x5wqnUCBVJX92ehQN6wQOQOY+2IirByeDqXWm
|
3751 |
+
N3PH/UvSTa0XQMhGvjt/UfzDtgUx3M2FIk5xt/JxXrAaxrqTi3iSSoX4eA+D/i+tLPfkpLst0OcN
|
3752 |
+
Org+zvZ49q5HJMqjNTbOx8aHmNrs++myziebiMMEofYLWWivydsQD032ZGNcpRJvkrKTlMeIFw6T
|
3753 |
+
tn5ii5B/q06f/ON1FE8qMt9bDeD1e5MNq6HPh+GlBEXoPBKlCcWw0bdT82AUuoVpaiF8H3VhFyAX
|
3754 |
+
e2w7QSlc4axa0c2Mm+tgHRns9+Ww2vl5GKVFP0lDV9LdJNUso/2RjSe15esUBppMeyG7Oq0wBhjA
|
3755 |
+
2MFrLH9ZXF2RsXAiV+uKa0hK1Q8p7MZAwC+ITGgBF3f0JBlPvfrhsiAhS90a2Cl9qrjeVOwhVYBs
|
3756 |
+
HvUwyKMQ5bLmKhQxw4UtjJixhlpPiVktucf3HMiKf8CdBUrmQk9io20ppB+Fq9vlgcitKj1MXVuE
|
3757 |
+
JnHEhV5xJMqlG2zYYdMa4FTbzrqpMrUi9nNBCV24F10OD5mQ1kfabwo6YigUZ4LZ8dCAWZvLMdib
|
3758 |
+
D4x3TrVoivJs9iQOLWxwxXPR3hTQcY+203sC9uO41Alua551hDnmfyWl8kgAwKQB2j8=
|
3759 |
+
-----END CERTIFICATE-----
|
3760 |
+
|
3761 |
+
StartCom Certification Authority G2
|
3762 |
+
===================================
|
3763 |
+
-----BEGIN CERTIFICATE-----
|
3764 |
+
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
|
3788 |
+
obp573PYtlNXLfbQ4ddI
|
3789 |
+
-----END CERTIFICATE-----
|
3790 |
+
|
3791 |
+
Buypass Class 2 Root CA
|
3792 |
+
=======================
|
3793 |
+
-----BEGIN CERTIFICATE-----
|
3794 |
+
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
|
3818 |
+
rJgWVqA=
|
3819 |
+
-----END CERTIFICATE-----
|
3820 |
+
|
3821 |
+
Buypass Class 3 Root CA
|
3822 |
+
=======================
|
3823 |
+
-----BEGIN CERTIFICATE-----
|
3824 |
+
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
|
3848 |
+
Cp/HuZc=
|
3849 |
+
-----END CERTIFICATE-----
|
3850 |
+
|
3851 |
+
T-TeleSec GlobalRoot Class 3
|
3852 |
+
============================
|
3853 |
+
-----BEGIN CERTIFICATE-----
|
3854 |
+
MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoM
|
3855 |
+
IlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBU
|
3856 |
+
cnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwHhcNMDgx
|
3857 |
+
MDAxMTAyOTU2WhcNMzMxMDAxMjM1OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lz
|
3858 |
+
dGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBD
|
3859 |
+
ZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwggEiMA0GCSqGSIb3
|
3860 |
+
DQEBAQUAA4IBDwAwggEKAoIBAQC9dZPwYiJvJK7genasfb3ZJNW4t/zN8ELg63iIVl6bmlQdTQyK
|
3861 |
+
9tPPcPRStdiTBONGhnFBSivwKixVA9ZIw+A5OO3yXDw/RLyTPWGrTs0NvvAgJ1gORH8EGoel15YU
|
3862 |
+
NpDQSXuhdfsaa3Ox+M6pCSzyU9XDFES4hqX2iys52qMzVNn6chr3IhUciJFrf2blw2qAsCTz34ZF
|
3863 |
+
iP0Zf3WHHx+xGwpzJFu5ZeAsVMhg02YXP+HMVDNzkQI6pn97djmiH5a2OK61yJN0HZ65tOVgnS9W
|
3864 |
+
0eDrXltMEnAMbEQgqxHY9Bn20pxSN+f6tsIxO0rUFJmtxxr1XV/6B7h8DR/Wgx6zAgMBAAGjQjBA
|
3865 |
+
MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS1A/d2O2GCahKqGFPr
|
3866 |
+
AyGUv/7OyjANBgkqhkiG9w0BAQsFAAOCAQEAVj3vlNW92nOyWL6ukK2YJ5f+AbGwUgC4TeQbIXQb
|
3867 |
+
fsDuXmkqJa9c1h3a0nnJ85cp4IaH3gRZD/FZ1GSFS5mvJQQeyUapl96Cshtwn5z2r3Ex3XsFpSzT
|
3868 |
+
ucpH9sry9uetuUg/vBa3wW306gmv7PO15wWeph6KU1HWk4HMdJP2udqmJQV0eVp+QD6CSyYRMG7h
|
3869 |
+
P0HHRwA11fXT91Q+gT3aSWqas+8QPebrb9HIIkfLzM8BMZLZGOMivgkeGj5asuRrDFR6fUNOuIml
|
3870 |
+
e9eiPZaGzPImNC1qkp2aGtAw4l1OBLBfiyB+d8E9lYLRRpo7PHi4b6HQDWSieB4pTpPDpFQUWw==
|
3871 |
+
-----END CERTIFICATE-----
|
3872 |
+
|
3873 |
+
EE Certification Centre Root CA
|
3874 |
+
===============================
|
3875 |
+
-----BEGIN CERTIFICATE-----
|
3876 |
+
MIIEAzCCAuugAwIBAgIQVID5oHPtPwBMyonY43HmSjANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQG
|
3877 |
+
EwJFRTEiMCAGA1UECgwZQVMgU2VydGlmaXRzZWVyaW1pc2tlc2t1czEoMCYGA1UEAwwfRUUgQ2Vy
|
3878 |
+
dGlmaWNhdGlvbiBDZW50cmUgUm9vdCBDQTEYMBYGCSqGSIb3DQEJARYJcGtpQHNrLmVlMCIYDzIw
|
3879 |
+
MTAxMDMwMTAxMDMwWhgPMjAzMDEyMTcyMzU5NTlaMHUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKDBlB
|
3880 |
+
UyBTZXJ0aWZpdHNlZXJpbWlza2Vza3VzMSgwJgYDVQQDDB9FRSBDZXJ0aWZpY2F0aW9uIENlbnRy
|
3881 |
+
ZSBSb290IENBMRgwFgYJKoZIhvcNAQkBFglwa2lAc2suZWUwggEiMA0GCSqGSIb3DQEBAQUAA4IB
|
3882 |
+
DwAwggEKAoIBAQDIIMDs4MVLqwd4lfNE7vsLDP90jmG7sWLqI9iroWUyeuuOF0+W2Ap7kaJjbMeM
|
3883 |
+
TC55v6kF/GlclY1i+blw7cNRfdCT5mzrMEvhvH2/UpvObntl8jixwKIy72KyaOBhU8E2lf/slLo2
|
3884 |
+
rpwcpzIP5Xy0xm90/XsY6KxX7QYgSzIwWFv9zajmofxwvI6Sc9uXp3whrj3B9UiHbCe9nyV0gVWw
|
3885 |
+
93X2PaRka9ZP585ArQ/dMtO8ihJTmMmJ+xAdTX7Nfh9WDSFwhfYggx/2uh8Ej+p3iDXE/+pOoYtN
|
3886 |
+
P2MbRMNE1CV2yreN1x5KZmTNXMWcg+HCCIia7E6j8T4cLNlsHaFLAgMBAAGjgYowgYcwDwYDVR0T
|
3887 |
+
AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBLyWj7qVhy/zQas8fElyalL1BSZ
|
3888 |
+
MEUGA1UdJQQ+MDwGCCsGAQUFBwMCBggrBgEFBQcDAQYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEF
|
3889 |
+
BQcDCAYIKwYBBQUHAwkwDQYJKoZIhvcNAQEFBQADggEBAHv25MANqhlHt01Xo/6tu7Fq1Q+e2+Rj
|
3890 |
+
xY6hUFaTlrg4wCQiZrxTFGGVv9DHKpY5P30osxBAIWrEr7BSdxjhlthWXePdNl4dp1BUoMUq5KqM
|
3891 |
+
lIpPnTX/dqQGE5Gion0ARD9V04I8GtVbvFZMIi5GQ4okQC3zErg7cBqklrkar4dBGmoYDQZPxz5u
|
3892 |
+
uSlNDUmJEYcyW+ZLBMjkXOZ0c5RdFpgTlf7727FE5TpwrDdr5rMzcijJs1eg9gIWiAYLtqZLICjU
|
3893 |
+
3j2LrTcFU3T+bsy8QxdxXvnFzBqpYe73dgzzcvRyrc9yAjYHR8/vGVCJYMzpJJUPwssd8m92kMfM
|
3894 |
+
dcGWxZ0=
|
3895 |
+
-----END CERTIFICATE-----
|
app/code/community/Rublon/RublonModule/lib/Rublon/core/API/RublonAPIBeginTransaction.php
ADDED
@@ -0,0 +1,82 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
require_once 'RublonAPIClient.php';
|
4 |
+
|
5 |
+
/**
|
6 |
+
* API request: Credentials.
|
7 |
+
*
|
8 |
+
*/
|
9 |
+
class RublonAPIBeginTransaction extends RublonAPIClient {
|
10 |
+
|
11 |
+
/**
|
12 |
+
* URL path of the request.
|
13 |
+
*
|
14 |
+
* @var string
|
15 |
+
*/
|
16 |
+
const URL_PATH = '/api/v3/beginTransaction';
|
17 |
+
|
18 |
+
|
19 |
+
const FIELD_USER_ID = 'userId';
|
20 |
+
const FIELD_USER_EMAIL_HASH = 'userEmailHash';
|
21 |
+
const FIELD_USER_EMAIL = 'userEmail';
|
22 |
+
const FIELD_SYSTEM_TOKEN = 'systemToken';
|
23 |
+
const FIELD_CALLBACK_URL = 'callbackUrl';
|
24 |
+
const FIELD_WEB_URI = 'webURI';
|
25 |
+
|
26 |
+
|
27 |
+
/**
|
28 |
+
* Constructor.
|
29 |
+
*
|
30 |
+
* @param RublonConsumer $rublon
|
31 |
+
* @param string $callbackUrl Callback URL address.
|
32 |
+
* @param string $userId User's ID in local system.
|
33 |
+
* @param string $userEmail User's email address.
|
34 |
+
* @param array $consumerParams Custom consumer parameters array (optional).
|
35 |
+
*/
|
36 |
+
public function __construct(RublonConsumer $rublon, $callbackUrl, $userEmail, $userId, array $consumerParams = array()) {
|
37 |
+
|
38 |
+
parent::__construct($rublon);
|
39 |
+
|
40 |
+
if (!$rublon->isConfigured()) {
|
41 |
+
trigger_error(RublonConsumer::TEMPLATE_CONFIG_ERROR, E_USER_ERROR);
|
42 |
+
}
|
43 |
+
|
44 |
+
$consumerParams[self::FIELD_SYSTEM_TOKEN] = $rublon->getSystemToken();
|
45 |
+
$consumerParams[self::FIELD_USER_ID] = $userId;
|
46 |
+
$consumerParams[self::FIELD_USER_EMAIL_HASH] = hash(self::HASH_ALG, strtolower($userEmail));
|
47 |
+
if (empty($consumerParams[RublonAuthParams::FIELD_FORCE_MOBILE_APP])) {
|
48 |
+
$consumerParams[self::FIELD_USER_EMAIL] = strtolower($userEmail);
|
49 |
+
}
|
50 |
+
$consumerParams[self::FIELD_CALLBACK_URL] = $callbackUrl;
|
51 |
+
|
52 |
+
// Set request URL and parameters
|
53 |
+
$url = $rublon->getAPIDomain() . self::URL_PATH;
|
54 |
+
$this->setRequestURL($url)->setRequestParams($consumerParams);
|
55 |
+
|
56 |
+
}
|
57 |
+
|
58 |
+
|
59 |
+
/**
|
60 |
+
* Returns URI to redirect to.
|
61 |
+
*
|
62 |
+
* @return string
|
63 |
+
*/
|
64 |
+
public function getWebURI() {
|
65 |
+
return $this->response[self::FIELD_RESULT][self::FIELD_WEB_URI];
|
66 |
+
}
|
67 |
+
|
68 |
+
|
69 |
+
/**
|
70 |
+
* (non-PHPdoc)
|
71 |
+
* @see RublonAPIClient::validateResponse()
|
72 |
+
*/
|
73 |
+
protected function validateResponse() {
|
74 |
+
if (parent::validateResponse()) {
|
75 |
+
if (!empty($this->response[self::FIELD_RESULT][self::FIELD_WEB_URI])) {
|
76 |
+
return true;
|
77 |
+
} else throw new MissingField_RublonClientException($this, self::FIELD_WEB_URI);
|
78 |
+
}
|
79 |
+
}
|
80 |
+
|
81 |
+
|
82 |
+
}
|
app/code/community/Rublon/RublonModule/lib/Rublon/core/API/RublonAPICheckUserDevice.php
ADDED
@@ -0,0 +1,69 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
require_once 'RublonAPIClient.php';
|
4 |
+
|
5 |
+
/**
|
6 |
+
* API request: CheckUserDevice.
|
7 |
+
*
|
8 |
+
*/
|
9 |
+
class RublonAPICheckUserDevice extends RublonAPIClient {
|
10 |
+
|
11 |
+
const FIELD_PROFILE_ID = 'profileId';
|
12 |
+
const FIELD_DEVICE_ID = 'deviceId';
|
13 |
+
const FIELD_DEVICE_STATUS = 'deviceActive';
|
14 |
+
|
15 |
+
|
16 |
+
/**
|
17 |
+
* URL path of the request.
|
18 |
+
*
|
19 |
+
* @var string
|
20 |
+
*/
|
21 |
+
protected $urlPath = '/api/v3/checkUserDevice';
|
22 |
+
|
23 |
+
|
24 |
+
/**
|
25 |
+
* Constructor.
|
26 |
+
*
|
27 |
+
* @param RublonConsumer $rublon Rublon instance.
|
28 |
+
* @param int $profileId Rublon user's ID.
|
29 |
+
* @param int $deviceId Device ID to check.
|
30 |
+
*/
|
31 |
+
public function __construct(RublonConsumer $rublon, $profileId, $deviceId) {
|
32 |
+
|
33 |
+
parent::__construct($rublon);
|
34 |
+
|
35 |
+
if (!$rublon->isConfigured()) {
|
36 |
+
trigger_error(RublonConsumer::TEMPLATE_CONFIG_ERROR, E_USER_ERROR);
|
37 |
+
}
|
38 |
+
|
39 |
+
// Set request URL and parameters
|
40 |
+
$this->setRequestURL($rublon->getAPIDomain() . $this->urlPath);
|
41 |
+
$this->setRequestParams(array(
|
42 |
+
self::FIELD_PROFILE_ID => $profileId,
|
43 |
+
self::FIELD_DEVICE_ID => $deviceId,
|
44 |
+
));
|
45 |
+
|
46 |
+
}
|
47 |
+
|
48 |
+
|
49 |
+
public function perform() {
|
50 |
+
$this->addRequestParams(array(
|
51 |
+
self::FIELD_SYSTEM_TOKEN => $this->getRublon()->getSystemToken(),
|
52 |
+
));
|
53 |
+
return parent::perform();
|
54 |
+
}
|
55 |
+
|
56 |
+
|
57 |
+
/**
|
58 |
+
* Check if device is active.
|
59 |
+
*
|
60 |
+
* @return boolean
|
61 |
+
*/
|
62 |
+
public function isDeviceActive() {
|
63 |
+
if (isset($this->response[self::FIELD_RESULT][self::FIELD_DEVICE_STATUS])) {
|
64 |
+
return !empty($this->response[self::FIELD_RESULT][self::FIELD_DEVICE_STATUS]);
|
65 |
+
}
|
66 |
+
}
|
67 |
+
|
68 |
+
|
69 |
+
}
|
app/code/community/Rublon/RublonModule/lib/Rublon/core/API/RublonAPIClient.php
ADDED
@@ -0,0 +1,519 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Rublon API Client.
|
5 |
+
*
|
6 |
+
*/
|
7 |
+
class RublonAPIClient {
|
8 |
+
|
9 |
+
/**
|
10 |
+
* Connection timeout in seconds.
|
11 |
+
*/
|
12 |
+
const TIMEOUT = 30; // sec
|
13 |
+
|
14 |
+
/**
|
15 |
+
* Hash algorithm name to compute the user's email hash.
|
16 |
+
*/
|
17 |
+
const HASH_ALG = 'sha256';
|
18 |
+
|
19 |
+
/**
|
20 |
+
* User agent string.
|
21 |
+
*/
|
22 |
+
const USER_AGENT = 'rublon-php-sdk';
|
23 |
+
|
24 |
+
/**
|
25 |
+
* HTTP Content-type header.
|
26 |
+
*/
|
27 |
+
const HEADER_CONTENT_TYPE = "Content-Type: application/json";
|
28 |
+
|
29 |
+
/**
|
30 |
+
* HTTP Accept header.
|
31 |
+
*/
|
32 |
+
const HEADER_ACCEPT = "Accept: application/json, text/javascript, */*; q=0.01";
|
33 |
+
|
34 |
+
const HEADER_TECHNOLOGY = "X-Rublon-Technology";
|
35 |
+
const HEADER_SIGNATURE = 'X-Rublon-Signature';
|
36 |
+
const HEADER_API_VERSION = 'X-Rublon-API-Version';
|
37 |
+
const HEADER_API_VERSION_DATE = 'X-Rublon-API-Version-Date';
|
38 |
+
|
39 |
+
const FIELD_ACCESS_TOKEN = 'accessToken';
|
40 |
+
const FIELD_SYSTEM_TOKEN = 'systemToken';
|
41 |
+
const FIELD_USER_EMAIL_HASH = 'userEmailHash';
|
42 |
+
const FIELD_USER_ID = 'userId';
|
43 |
+
const FIELD_CALLBACK_URL = 'callbackUrl';
|
44 |
+
const FIELD_STATUS = 'status';
|
45 |
+
const FIELD_RESULT = 'result';
|
46 |
+
const FIELD_ERROR_MSG = 'errorMessage';
|
47 |
+
const FIELD_EXCEPTION = 'exception';
|
48 |
+
const FIELD_NAME = 'name';
|
49 |
+
const FIELD_USING_EMAIL2FA = 'usingEmail2FA';
|
50 |
+
const FIELD_ACCESS_CONTROL_MANAGER_ALLOWED = 'accessControlManagerAllowed';
|
51 |
+
|
52 |
+
const STATUS_OK = 'OK';
|
53 |
+
const STATUS_ERROR = 'ERROR';
|
54 |
+
|
55 |
+
/**
|
56 |
+
* Path to the pem certificates.
|
57 |
+
*/
|
58 |
+
const PATH_CERT = 'cert/cacert.pem';
|
59 |
+
|
60 |
+
/**
|
61 |
+
* Rublon instance.
|
62 |
+
*
|
63 |
+
* @var Rublon
|
64 |
+
*/
|
65 |
+
protected $rublon = null;
|
66 |
+
|
67 |
+
/**
|
68 |
+
* Request URL.
|
69 |
+
*
|
70 |
+
* @var string
|
71 |
+
*/
|
72 |
+
protected $url = null;
|
73 |
+
|
74 |
+
/**
|
75 |
+
* Request POST params.
|
76 |
+
*
|
77 |
+
* @var array
|
78 |
+
*/
|
79 |
+
protected $params = array();
|
80 |
+
|
81 |
+
|
82 |
+
protected $rawPostBody = null;
|
83 |
+
|
84 |
+
protected $rawRequestHeader = null;
|
85 |
+
|
86 |
+
|
87 |
+
/**
|
88 |
+
* Raw response string.
|
89 |
+
*
|
90 |
+
* @var string
|
91 |
+
*/
|
92 |
+
protected $rawResponse = null;
|
93 |
+
protected $responseHTTPStatus = null;
|
94 |
+
protected $responseHTTPStatusCode = null;
|
95 |
+
protected $rawResponseHeader = null;
|
96 |
+
protected $responseHeaders = array();
|
97 |
+
protected $rawResponseBody = null;
|
98 |
+
|
99 |
+
/**
|
100 |
+
* Response data.
|
101 |
+
*
|
102 |
+
* @var array
|
103 |
+
*/
|
104 |
+
protected $response = null;
|
105 |
+
|
106 |
+
|
107 |
+
/**
|
108 |
+
* Constructor.
|
109 |
+
*
|
110 |
+
* @param RublonConsumer $rublon
|
111 |
+
*/
|
112 |
+
public function __construct(RublonConsumer $rublon) {
|
113 |
+
$rublon->log(__METHOD__);
|
114 |
+
$this->rublon = $rublon;
|
115 |
+
}
|
116 |
+
|
117 |
+
|
118 |
+
/**
|
119 |
+
* Perform the request.
|
120 |
+
*
|
121 |
+
* @throws RublonException
|
122 |
+
* @return RublonAPIClient
|
123 |
+
*/
|
124 |
+
public function perform() {
|
125 |
+
$this->getRublon()->log(__METHOD__);
|
126 |
+
|
127 |
+
$this->performRequest();
|
128 |
+
|
129 |
+
try {
|
130 |
+
$this->validateResponse();
|
131 |
+
} catch (RublonException $e) {
|
132 |
+
throw $e;
|
133 |
+
}
|
134 |
+
|
135 |
+
return $this;
|
136 |
+
|
137 |
+
}
|
138 |
+
|
139 |
+
|
140 |
+
|
141 |
+
protected function validateResponse() {
|
142 |
+
if ($this->responseHTTPStatusCode == 200) {
|
143 |
+
if (!empty($this->rawResponseBody)) {
|
144 |
+
$this->response = json_decode($this->rawResponseBody, true);
|
145 |
+
if (!empty($this->response) AND is_array($this->response)) {
|
146 |
+
if (!empty($this->response[self::FIELD_STATUS])) {
|
147 |
+
if ($this->response[self::FIELD_STATUS] == self::STATUS_OK) {
|
148 |
+
if ($signature = $this->getHeader(self::HEADER_SIGNATURE)) {
|
149 |
+
if ($this->validateSignature($signature, $this->rawResponseBody)) {
|
150 |
+
return true;
|
151 |
+
} else throw new InvalidSignature_RublonClientException($this, 'Invalid response signature: '. $signature);
|
152 |
+
} else throw new MissingHeader_RublonClientException($this, self::HEADER_SIGNATURE);
|
153 |
+
}
|
154 |
+
else if ($this->response[self::FIELD_STATUS] == self::STATUS_ERROR) {
|
155 |
+
if (!empty($this->response[self::FIELD_RESULT])) {
|
156 |
+
if (!empty($this->response[self::FIELD_RESULT][self::FIELD_EXCEPTION])) {
|
157 |
+
throw $this->constructException($this->response[self::FIELD_RESULT]);
|
158 |
+
}
|
159 |
+
else if (!empty($this->response[self::FIELD_RESULT][self::FIELD_ERROR_MSG])) {
|
160 |
+
throw new ErrorResponse_RublonClientException($this, $this->response[self::FIELD_RESULT][self::FIELD_ERROR_MSG]);
|
161 |
+
} else throw new ErrorResponse_RublonClientException($this, 'Server returns error status with empty error message.');
|
162 |
+
} else throw new ErrorResponse_RublonClientException($this, 'Server returns empty result.');
|
163 |
+
} else throw new InvalidResponse_RublonClientException($this, 'Invalid status field: '. $this->response[self::FIELD_STATUS]);
|
164 |
+
} else throw new MissingField_RublonClientException($this, self::FIELD_STATUS);
|
165 |
+
} else throw new InvalidJSON_RublonClientException($this);
|
166 |
+
} else throw new EmptyResponse_RublonClientException($this, 'Empty response body.');
|
167 |
+
} else throw new InvalidResponse_RublonClientException($this, 'Unexpected response HTTP status code: '. $this->responseHTTPStatusCode);
|
168 |
+
}
|
169 |
+
|
170 |
+
|
171 |
+
|
172 |
+
protected function constructException(array $data) {
|
173 |
+
$className = $data[self::FIELD_EXCEPTION];
|
174 |
+
if (!class_exists($className) OR !is_subclass_of($className, 'RublonAPIException')) {
|
175 |
+
$className = 'RublonAPIException';
|
176 |
+
}
|
177 |
+
if (!empty($data[self::FIELD_NAME])) {
|
178 |
+
$arg = $data[self::FIELD_NAME];
|
179 |
+
}
|
180 |
+
else if (!empty($data[self::FIELD_ERROR_MSG])) {
|
181 |
+
$arg = $data[self::FIELD_ERROR_MSG];
|
182 |
+
} else {
|
183 |
+
$arg = null;
|
184 |
+
}
|
185 |
+
return new $className($this, $arg);
|
186 |
+
}
|
187 |
+
|
188 |
+
|
189 |
+
protected function getHeader($name) {
|
190 |
+
if (isset($this->responseHeaders[$name])) {
|
191 |
+
return $this->responseHeaders[$name];
|
192 |
+
}
|
193 |
+
}
|
194 |
+
|
195 |
+
|
196 |
+
/**
|
197 |
+
* Perform a request and set rawResponse field.
|
198 |
+
*
|
199 |
+
* @throws RublonException
|
200 |
+
*/
|
201 |
+
protected function performRequest() {
|
202 |
+
$this->getRublon()->log(__METHOD__);
|
203 |
+
|
204 |
+
if (empty($this->rawPostBody) AND !empty($this->params)) {
|
205 |
+
$this->rawPostBody = json_encode($this->params);
|
206 |
+
}
|
207 |
+
$response = $this->request($this->url, $this->rawPostBody);
|
208 |
+
|
209 |
+
$this->rawResponse = implode('', $response);
|
210 |
+
|
211 |
+
$this->getRublon()->log($this->rawResponse);
|
212 |
+
|
213 |
+
$this->rawResponseHeader = trim(array_shift($response));
|
214 |
+
$this->rawResponseBody = trim(array_shift($response));
|
215 |
+
|
216 |
+
$header = explode("\n", $this->rawResponseHeader);
|
217 |
+
$this->responseHTTPStatus = array_shift($header);
|
218 |
+
preg_match('/^HTTP\/\d\.\d (\d+)/', $this->responseHTTPStatus, $match);
|
219 |
+
if (isset($match[1])) {
|
220 |
+
$this->responseHTTPStatusCode = $match[1];
|
221 |
+
}
|
222 |
+
foreach ($header as $headerLine) {
|
223 |
+
if (strpos($headerLine, ':') !== false) {
|
224 |
+
list($name, $value) = explode(':', $headerLine, 2);
|
225 |
+
$this->responseHeaders[trim($name)] = trim($value);
|
226 |
+
}
|
227 |
+
}
|
228 |
+
|
229 |
+
return $this;
|
230 |
+
|
231 |
+
}
|
232 |
+
|
233 |
+
|
234 |
+
/**
|
235 |
+
* Set parameters of the request.
|
236 |
+
*
|
237 |
+
* @param array $params
|
238 |
+
* @return RublonRequest
|
239 |
+
*/
|
240 |
+
public function setRequestParams(array $params) {
|
241 |
+
if (!is_array($params)) $params = array();
|
242 |
+
$this->params = $params;
|
243 |
+
return $this;
|
244 |
+
}
|
245 |
+
|
246 |
+
|
247 |
+
public function addRequestParams(array $params) {
|
248 |
+
foreach ($params as $name => $field) {
|
249 |
+
$this->params[$name] = $field;
|
250 |
+
}
|
251 |
+
return $this;
|
252 |
+
}
|
253 |
+
|
254 |
+
|
255 |
+
/**
|
256 |
+
* Set the URL of the request.
|
257 |
+
*
|
258 |
+
* @param string $url
|
259 |
+
* @return RublonAPIClient
|
260 |
+
*/
|
261 |
+
public function setRequestURL($url) {
|
262 |
+
$this->url = $url;
|
263 |
+
return $this;
|
264 |
+
}
|
265 |
+
|
266 |
+
|
267 |
+
/**
|
268 |
+
* Get raw response body string.
|
269 |
+
*
|
270 |
+
* @return string
|
271 |
+
*/
|
272 |
+
public function getRawResponseBody() {
|
273 |
+
return $this->rawResponseBody;
|
274 |
+
}
|
275 |
+
|
276 |
+
|
277 |
+
public function getRawResponseHeader() {
|
278 |
+
return $this->rawResponseHeader;
|
279 |
+
}
|
280 |
+
|
281 |
+
|
282 |
+
public function getRawRequest() {
|
283 |
+
return $this->getRawRequestHeader() . $this->getRawRequestBody();
|
284 |
+
}
|
285 |
+
|
286 |
+
|
287 |
+
public function getRawRequestHeader() {
|
288 |
+
return $this->rawRequestHeader;
|
289 |
+
}
|
290 |
+
|
291 |
+
|
292 |
+
public function getRawRequestBody() {
|
293 |
+
return $this->rawPostBody;
|
294 |
+
}
|
295 |
+
|
296 |
+
|
297 |
+
/**
|
298 |
+
* Get raw response string.
|
299 |
+
*
|
300 |
+
* @return string
|
301 |
+
*/
|
302 |
+
public function getRawResponse() {
|
303 |
+
return $this->rawResponse;
|
304 |
+
}
|
305 |
+
|
306 |
+
|
307 |
+
/**
|
308 |
+
* Get parsed response data.
|
309 |
+
*
|
310 |
+
* @return array
|
311 |
+
*/
|
312 |
+
public function getResponse() {
|
313 |
+
return $this->response;
|
314 |
+
}
|
315 |
+
|
316 |
+
|
317 |
+
/**
|
318 |
+
* Perform HTTP request.
|
319 |
+
*
|
320 |
+
* @param string $url URL address
|
321 |
+
* @param string $rawPostBody
|
322 |
+
* @return string Response
|
323 |
+
* @throws RublonException
|
324 |
+
*/
|
325 |
+
protected function request($url, $rawPostBody = null) {
|
326 |
+
$this->getRublon()->log(__METHOD__ . ' -- ' . $url);
|
327 |
+
|
328 |
+
if (!function_exists('curl_init')) {
|
329 |
+
throw new RublonClientException($this, 'cURL functions are not available.');
|
330 |
+
}
|
331 |
+
|
332 |
+
$ch = curl_init($url);
|
333 |
+
$headers = array(
|
334 |
+
self::HEADER_CONTENT_TYPE,
|
335 |
+
self::HEADER_ACCEPT,
|
336 |
+
'Expect: 200-OK',
|
337 |
+
sprintf('%s: %s', self::HEADER_SIGNATURE, $this->signMessage($rawPostBody)),
|
338 |
+
sprintf('%s: %s', self::HEADER_TECHNOLOGY, $this->getRublon()->getTechnology()),
|
339 |
+
sprintf('%s: %s', self::HEADER_API_VERSION, $this->getRublon()->getVersion()),
|
340 |
+
sprintf('%s: %s', self::HEADER_API_VERSION_DATE, $this->getRublon()->getVersionDate()),
|
341 |
+
);
|
342 |
+
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
|
343 |
+
|
344 |
+
$curl_timeout = self::TIMEOUT;
|
345 |
+
$php_execution_time = ini_get('max_execution_time');
|
346 |
+
if (!empty($php_execution_time) && is_numeric($php_execution_time)) {
|
347 |
+
if ($php_execution_time < 36 && $php_execution_time > 9) {
|
348 |
+
$curl_timeout = $php_execution_time - 5;
|
349 |
+
} elseif ($php_execution_time < 10) {
|
350 |
+
$curl_timeout = 5;
|
351 |
+
}
|
352 |
+
}
|
353 |
+
|
354 |
+
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $curl_timeout);
|
355 |
+
curl_setopt($ch, CURLOPT_TIMEOUT, $curl_timeout);
|
356 |
+
curl_setopt($ch, CURLOPT_HEADER, true);
|
357 |
+
curl_setopt($ch, CURLINFO_HEADER_OUT, true);
|
358 |
+
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
359 |
+
curl_setopt($ch, CURLOPT_USERAGENT, self::USER_AGENT);
|
360 |
+
|
361 |
+
if (isset($_COOKIE['XDEBUG_SESSION'])) {
|
362 |
+
curl_setopt($ch, CURLOPT_COOKIE, 'XDEBUG_SESSION=' . $_COOKIE['XDEBUG_SESSION']);
|
363 |
+
}
|
364 |
+
|
365 |
+
// POST body
|
366 |
+
if (!empty($rawPostBody)) {
|
367 |
+
curl_setopt($ch, CURLOPT_POST, true);
|
368 |
+
curl_setopt($ch, CURLOPT_POSTFIELDS, $rawPostBody);
|
369 |
+
$this->getRublon()->log($rawPostBody);
|
370 |
+
}
|
371 |
+
|
372 |
+
// SSL options
|
373 |
+
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
|
374 |
+
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
|
375 |
+
if (function_exists('ini_get') AND ini_get('curl.cainfo')) {
|
376 |
+
// cURL CAinfo from PHP ini
|
377 |
+
} else {
|
378 |
+
curl_setopt($ch, CURLOPT_CAINFO, $this->getCertPath());
|
379 |
+
}
|
380 |
+
|
381 |
+
// Execute request
|
382 |
+
$response = curl_exec($ch);
|
383 |
+
$this->rawRequestHeader = curl_getinfo($ch, CURLINFO_HEADER_OUT );
|
384 |
+
|
385 |
+
if ($error = curl_error($ch)) {
|
386 |
+
$errno = curl_errno($ch);
|
387 |
+
curl_close($ch);
|
388 |
+
throw new RublonClientException($this, $error .' ('. $errno .')');
|
389 |
+
} else {
|
390 |
+
|
391 |
+
$headerSize = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
|
392 |
+
$header = substr($response, 0, $headerSize);
|
393 |
+
$body = substr($response, $headerSize, strlen($response));
|
394 |
+
curl_close($ch);
|
395 |
+
|
396 |
+
return array($header, $body);
|
397 |
+
|
398 |
+
}
|
399 |
+
|
400 |
+
}
|
401 |
+
|
402 |
+
|
403 |
+
|
404 |
+
protected function validateSignature($signature, $input, $secret = null) {
|
405 |
+
$check = $this->signMessage($input, $secret);
|
406 |
+
return ($check == $signature);
|
407 |
+
}
|
408 |
+
|
409 |
+
|
410 |
+
protected function signMessage($data, $secret = null) {
|
411 |
+
if (is_null($secret)) {
|
412 |
+
$secret = $this->getRublon()->getSecretKey();
|
413 |
+
}
|
414 |
+
return hash_hmac(self::HASH_ALG, $data, $secret);
|
415 |
+
}
|
416 |
+
|
417 |
+
|
418 |
+
/**
|
419 |
+
* Get absolute path to the pem certificates.
|
420 |
+
*
|
421 |
+
* @return string
|
422 |
+
*/
|
423 |
+
protected function getCertPath() {
|
424 |
+
$ds = DIRECTORY_SEPARATOR;
|
425 |
+
$certPath = explode($ds, __FILE__);
|
426 |
+
array_pop($certPath);
|
427 |
+
array_pop($certPath);
|
428 |
+
array_pop($certPath);
|
429 |
+
$certPath = implode($ds, $certPath) . $ds . str_replace('/', DIRECTORY_SEPARATOR, self::PATH_CERT);
|
430 |
+
return $certPath;
|
431 |
+
}
|
432 |
+
|
433 |
+
|
434 |
+
/**
|
435 |
+
* Get the Rublon instance.
|
436 |
+
*
|
437 |
+
* @return Rublon
|
438 |
+
*/
|
439 |
+
public function getRublon() {
|
440 |
+
return $this->rublon;
|
441 |
+
}
|
442 |
+
|
443 |
+
|
444 |
+
|
445 |
+
|
446 |
+
}
|
447 |
+
|
448 |
+
|
449 |
+
// ------------------------------------------------------------------------------------------------------------------------
|
450 |
+
// Clients exceptions
|
451 |
+
|
452 |
+
class RublonClientException extends RublonException {
|
453 |
+
protected $client = null;
|
454 |
+
function __construct(RublonAPIClient $client, $msg = null) {
|
455 |
+
parent::__construct($msg);
|
456 |
+
$this->client = $client;
|
457 |
+
}
|
458 |
+
public function getClient() {
|
459 |
+
return $this->client;
|
460 |
+
}
|
461 |
+
}
|
462 |
+
|
463 |
+
class RublonClientResponseException extends RublonClientException {}
|
464 |
+
|
465 |
+
class InvalidSignature_RublonClientException extends RublonClientResponseException {}
|
466 |
+
class MissingField_RublonClientException extends RublonClientResponseException {
|
467 |
+
protected $itemName;
|
468 |
+
function __construct(RublonAPIClient $client, $itemName) {
|
469 |
+
parent::__construct($client, '['. get_class($this) .'] '. $itemName);
|
470 |
+
$this->itemName = $itemName;
|
471 |
+
}
|
472 |
+
function getName() {
|
473 |
+
return $this->itemName;
|
474 |
+
}
|
475 |
+
}
|
476 |
+
class MissingHeader_RublonClientException extends MissingField_RublonClientException {}
|
477 |
+
class ErrorResponse_RublonClientException extends RublonClientResponseException {}
|
478 |
+
class EmptyResponse_RublonClientException extends RublonClientResponseException {}
|
479 |
+
class InvalidResponse_RublonClientException extends RublonClientResponseException {}
|
480 |
+
class InvalidJSON_RublonClientException extends InvalidResponse_RublonClientException {}
|
481 |
+
|
482 |
+
|
483 |
+
// ------------------------------------------------------------------------------------------------------------------------
|
484 |
+
// API exceptions
|
485 |
+
|
486 |
+
class RublonAPIException extends RublonException {
|
487 |
+
protected $client = null;
|
488 |
+
function __construct(RublonAPIClient $client, $msg = null) {
|
489 |
+
parent::__construct($msg);
|
490 |
+
$this->client = $client;
|
491 |
+
}
|
492 |
+
public function getClient() {
|
493 |
+
return $this->client;
|
494 |
+
}
|
495 |
+
}
|
496 |
+
class MissingField_RublonAPIException extends RublonAPIException {
|
497 |
+
protected $itemName;
|
498 |
+
function __construct(RublonAPIClient $client, $itemName) {
|
499 |
+
parent::__construct($client, '['. get_class($this) .'] '. $itemName);
|
500 |
+
$this->itemName = $itemName;
|
501 |
+
}
|
502 |
+
function getName() {
|
503 |
+
return $this->itemName;
|
504 |
+
}
|
505 |
+
}
|
506 |
+
class MissingHeader_RublonAPIException extends MissingField_RublonAPIException {}
|
507 |
+
class UnsupportedRequestMethod_RublonAPIException extends RublonAPIException {}
|
508 |
+
class EmptyInput_RublonAPIException extends RublonAPIException {}
|
509 |
+
class InvalidJSON_RublonAPIException extends RublonAPIException {}
|
510 |
+
class InvalidSignature_RublonAPIException extends RublonAPIException {}
|
511 |
+
class ConsumerNotFound_RublonAPIException extends RublonAPIException {}
|
512 |
+
class UnsupportedVersion_RublonAPIException extends RublonAPIException {}
|
513 |
+
class UserNotFound_RublonAPIException extends RublonAPIException {}
|
514 |
+
class AccessTokenExpired_RublonAPIException extends RublonAPIException {}
|
515 |
+
class UnknownAccessToken_RublonAPIException extends RublonAPIException {}
|
516 |
+
class SessionRestore_RublonAPIException extends RublonAPIException {}
|
517 |
+
class UnauthorizedUser_RublonAPIException extends RublonAPIException {}
|
518 |
+
class ForbiddenMethod_RublonAPIException extends RublonAPIException {}
|
519 |
+
class PersonalEditionLimited_RublonApiException extends RublonAPIException {}
|
app/code/community/Rublon/RublonModule/lib/Rublon/core/API/RublonAPICredentials.php
ADDED
@@ -0,0 +1,148 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
require_once 'RublonAPIClient.php';
|
4 |
+
|
5 |
+
/**
|
6 |
+
* API request: Credentials.
|
7 |
+
*
|
8 |
+
*/
|
9 |
+
class RublonAPICredentials extends RublonAPIClient {
|
10 |
+
|
11 |
+
/**
|
12 |
+
* Invalid access token error.
|
13 |
+
*/
|
14 |
+
const ERROR_ACCESS_TOKEN = 'Invalid access token.';
|
15 |
+
|
16 |
+
/**
|
17 |
+
* Field name with the additional confirmation result.
|
18 |
+
*/
|
19 |
+
const FIELD_CONFIRM_RESULT = 'answer';
|
20 |
+
|
21 |
+
/**
|
22 |
+
* Field name for the Rublon profile ID.
|
23 |
+
*/
|
24 |
+
const FIELD_PROFILE_ID = 'profileId';
|
25 |
+
|
26 |
+
/**
|
27 |
+
* Field name for the Rublon user's email.
|
28 |
+
*/
|
29 |
+
const FIELD_EMAIL = 'email';
|
30 |
+
|
31 |
+
/**
|
32 |
+
* Field name for device ID.
|
33 |
+
*/
|
34 |
+
const FIELD_DEVICE_ID = 'deviceId';
|
35 |
+
|
36 |
+
/**
|
37 |
+
* Field name for keeping info wether is project owner or not
|
38 |
+
* @var unknown
|
39 |
+
*/
|
40 |
+
const FIELD_PROJECT_OWNER = 'projectOwner';
|
41 |
+
|
42 |
+
/**
|
43 |
+
* User pressed the "Yes" button on the additional confirmation of the transaction.
|
44 |
+
*/
|
45 |
+
const CONFIRM_RESULT_YES = 'true';
|
46 |
+
|
47 |
+
/**
|
48 |
+
* User pressed the "No" button on the additional confirmation of the transaction.
|
49 |
+
*/
|
50 |
+
const CONFIRM_RESULT_NO = 'false';
|
51 |
+
|
52 |
+
/**
|
53 |
+
* URL path of the request.
|
54 |
+
*
|
55 |
+
* @var string
|
56 |
+
*/
|
57 |
+
protected $urlPath = '/api/v3/credentials';
|
58 |
+
|
59 |
+
|
60 |
+
/**
|
61 |
+
* Constructor.
|
62 |
+
*
|
63 |
+
* @param RublonConsumer $rublon
|
64 |
+
* @param string $accessToken
|
65 |
+
*/
|
66 |
+
public function __construct(RublonConsumer $rublon, $accessToken) {
|
67 |
+
|
68 |
+
parent::__construct($rublon);
|
69 |
+
|
70 |
+
if (!$rublon->isConfigured()) {
|
71 |
+
trigger_error(RublonConsumer::TEMPLATE_CONFIG_ERROR, E_USER_ERROR);
|
72 |
+
}
|
73 |
+
if (!preg_match('/[a-z0-9]{100}/i', $accessToken)) {
|
74 |
+
throw new RublonException(self::ERROR_ACCESS_TOKEN, RublonException::CODE_INVALID_ACCESS_TOKEN);
|
75 |
+
}
|
76 |
+
|
77 |
+
// Set request URL and parameters
|
78 |
+
$url = $rublon->getAPIDomain() . $this->urlPath;
|
79 |
+
$params = array(
|
80 |
+
self::FIELD_SYSTEM_TOKEN => $rublon->getSystemToken(),
|
81 |
+
self::FIELD_ACCESS_TOKEN => $accessToken,
|
82 |
+
);
|
83 |
+
$this->setRequestURL($url)->setRequestParams($params);
|
84 |
+
|
85 |
+
}
|
86 |
+
|
87 |
+
/**
|
88 |
+
* Get local user's ID.
|
89 |
+
*
|
90 |
+
* @return string
|
91 |
+
*/
|
92 |
+
public function getUserId() {
|
93 |
+
if (isset($this->response[self::FIELD_RESULT][self::FIELD_USER_ID])) {
|
94 |
+
return $this->response[self::FIELD_RESULT][self::FIELD_USER_ID];
|
95 |
+
}
|
96 |
+
}
|
97 |
+
|
98 |
+
|
99 |
+
/**
|
100 |
+
* Get the additional confirmation of the transaction result.
|
101 |
+
*
|
102 |
+
* Method returns a result only if the Rublon2Factor::confirm()
|
103 |
+
* method was used to initialize the auth transaction.
|
104 |
+
*
|
105 |
+
* @return string
|
106 |
+
* @see Rublon2Factor::confirm()
|
107 |
+
* @see RublonAPICredentials::CONFIRM_RESULT_YES
|
108 |
+
* @see RublonAPICredentials::CONFIRM_RESULT_NO
|
109 |
+
*/
|
110 |
+
public function getConfirmResult() {
|
111 |
+
if (isset($this->response[self::FIELD_RESULT][self::FIELD_CONFIRM_RESULT])) {
|
112 |
+
return $this->response[self::FIELD_RESULT][self::FIELD_CONFIRM_RESULT];
|
113 |
+
}
|
114 |
+
}
|
115 |
+
|
116 |
+
|
117 |
+
/**
|
118 |
+
* Get Rublon user's ID.
|
119 |
+
*
|
120 |
+
* @return int
|
121 |
+
*/
|
122 |
+
public function getProfileId() {
|
123 |
+
if (isset($this->response[self::FIELD_RESULT][self::FIELD_PROFILE_ID])) {
|
124 |
+
return $this->response[self::FIELD_RESULT][self::FIELD_PROFILE_ID];
|
125 |
+
}
|
126 |
+
}
|
127 |
+
|
128 |
+
|
129 |
+
/**
|
130 |
+
* Get Rublon user's email address.
|
131 |
+
*
|
132 |
+
* @return string
|
133 |
+
*/
|
134 |
+
public function getUserEmail() {
|
135 |
+
if (isset($this->response[self::FIELD_RESULT][self::FIELD_EMAIL])) {
|
136 |
+
return $this->response[self::FIELD_RESULT][self::FIELD_EMAIL];
|
137 |
+
}
|
138 |
+
}
|
139 |
+
|
140 |
+
|
141 |
+
public function getDeviceId() {
|
142 |
+
if (isset($this->response[self::FIELD_RESULT][self::FIELD_DEVICE_ID])) {
|
143 |
+
return $this->response[self::FIELD_RESULT][self::FIELD_DEVICE_ID];
|
144 |
+
}
|
145 |
+
}
|
146 |
+
|
147 |
+
|
148 |
+
}
|
app/code/community/Rublon/RublonModule/lib/Rublon/core/API/RublonAPIGetAvailableFeatures.php
ADDED
@@ -0,0 +1,69 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
require_once 'RublonAPIClient.php';
|
4 |
+
|
5 |
+
/**
|
6 |
+
* API request: GetAvailableFeatures.
|
7 |
+
*
|
8 |
+
*/
|
9 |
+
class RublonAPIGetAvailableFeatures extends RublonAPIClient {
|
10 |
+
|
11 |
+
const FIELD_FEATURES = 'features';
|
12 |
+
|
13 |
+
const FEATURE_FORCE_MOBILE_APP = 'forceMobileApp';
|
14 |
+
const FEATURE_IGNORE_TRUSTED_DEVICE = 'ignoreTrustedDevice';
|
15 |
+
const FEATURE_OPERATION_CONFIRMATION = 'operationConfirmation';
|
16 |
+
const FEATURE_BUFFERED_CONFIRMATION = 'bufferedAutoConfirmation';
|
17 |
+
const FEATURE_IDENTITY_PROVIDING = 'accessControlManager';
|
18 |
+
const FEATURE_REMOTE_LOGOUT = 'remoteLogout';
|
19 |
+
const FEATURE_FLAG_BUSINESS_EDITION = 'businessEdition';
|
20 |
+
|
21 |
+
|
22 |
+
/**
|
23 |
+
* URL path of the request.
|
24 |
+
*
|
25 |
+
* @var string
|
26 |
+
*/
|
27 |
+
protected $urlPath = '/api/v3/getAvailableFeatures';
|
28 |
+
|
29 |
+
|
30 |
+
/**
|
31 |
+
* Constructor.
|
32 |
+
*
|
33 |
+
* @param RublonConsumer $rublon
|
34 |
+
*/
|
35 |
+
public function __construct(RublonConsumer $rublon) {
|
36 |
+
|
37 |
+
parent::__construct($rublon);
|
38 |
+
|
39 |
+
if (!$rublon->isConfigured()) {
|
40 |
+
trigger_error(RublonConsumer::TEMPLATE_CONFIG_ERROR, E_USER_ERROR);
|
41 |
+
}
|
42 |
+
|
43 |
+
// Set request URL and parameters
|
44 |
+
$this->setRequestURL($rublon->getAPIDomain() . $this->urlPath);
|
45 |
+
|
46 |
+
}
|
47 |
+
|
48 |
+
|
49 |
+
public function perform() {
|
50 |
+
$this->addRequestParams(array(
|
51 |
+
self::FIELD_SYSTEM_TOKEN => $this->getRublon()->getSystemToken(),
|
52 |
+
));
|
53 |
+
return parent::perform();
|
54 |
+
}
|
55 |
+
|
56 |
+
|
57 |
+
/**
|
58 |
+
* Get features list from response.
|
59 |
+
*
|
60 |
+
* @return array|NULL
|
61 |
+
*/
|
62 |
+
public function getFeatures() {
|
63 |
+
if (isset($this->response[self::FIELD_RESULT][self::FIELD_FEATURES])) {
|
64 |
+
return $this->response[self::FIELD_RESULT][self::FIELD_FEATURES];
|
65 |
+
}
|
66 |
+
}
|
67 |
+
|
68 |
+
|
69 |
+
}
|
app/code/community/Rublon/RublonModule/lib/Rublon/core/API/RublonAPINotification.php
ADDED
@@ -0,0 +1,94 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
require_once 'RublonAPIClient.php';
|
4 |
+
|
5 |
+
/**
|
6 |
+
* API request: Credentials.
|
7 |
+
*
|
8 |
+
*/
|
9 |
+
class RublonAPINotification extends RublonAPIClient {
|
10 |
+
|
11 |
+
const FIELD_NOTIFICATION_CHANNEL = 'channel';
|
12 |
+
const FIELD_NOTIFICATION_TITLE = 'title';
|
13 |
+
const FIELD_NOTIFICATION_URL = 'url';
|
14 |
+
const FIELD_NOTIFICATION_TYPE = 'type';
|
15 |
+
|
16 |
+
const TYPE_URL = 'URL';
|
17 |
+
|
18 |
+
|
19 |
+
/**
|
20 |
+
* URL path of the request.
|
21 |
+
*
|
22 |
+
* @var string
|
23 |
+
*/
|
24 |
+
protected $urlPath = '/api/v3/notification';
|
25 |
+
|
26 |
+
|
27 |
+
protected $notificationChannel = null;
|
28 |
+
|
29 |
+
protected $notificationTitle = null;
|
30 |
+
|
31 |
+
protected $notificationUrl = null;
|
32 |
+
|
33 |
+
|
34 |
+
/**
|
35 |
+
* Constructor.
|
36 |
+
*
|
37 |
+
* @param RublonConsumer $rublon
|
38 |
+
*/
|
39 |
+
public function __construct(RublonConsumer $rublon) {
|
40 |
+
|
41 |
+
parent::__construct($rublon);
|
42 |
+
|
43 |
+
if (!$rublon->isConfigured()) {
|
44 |
+
trigger_error(RublonConsumer::TEMPLATE_CONFIG_ERROR, E_USER_ERROR);
|
45 |
+
}
|
46 |
+
|
47 |
+
// Set request URL and parameters
|
48 |
+
$this->setRequestURL($rublon->getAPIDomain() . $this->urlPath);
|
49 |
+
|
50 |
+
}
|
51 |
+
|
52 |
+
|
53 |
+
public function setNotificationChannel($channel) {
|
54 |
+
$this->notificationChannel = $channel;
|
55 |
+
return $this;
|
56 |
+
}
|
57 |
+
|
58 |
+
|
59 |
+
public function initUrlNotification($title, $url) {
|
60 |
+
$this->setNotificationType(self::TYPE_URL);
|
61 |
+
$this->setNotificationTitle($title);
|
62 |
+
$this->setNotificationUrl($url);
|
63 |
+
}
|
64 |
+
|
65 |
+
|
66 |
+
public function setNotificationTitle($title) {
|
67 |
+
$this->notificationTitle = $title;
|
68 |
+
return $this;
|
69 |
+
}
|
70 |
+
|
71 |
+
public function setNotificationUrl($url) {
|
72 |
+
$this->notificationUrl = $url;
|
73 |
+
return $this;
|
74 |
+
}
|
75 |
+
|
76 |
+
public function setNotificationType($type) {
|
77 |
+
$this->notificationType = $type;
|
78 |
+
return $this;
|
79 |
+
}
|
80 |
+
|
81 |
+
|
82 |
+
public function perform() {
|
83 |
+
$this->addRequestParams(array(
|
84 |
+
self::FIELD_SYSTEM_TOKEN => $this->getRublon()->getSystemToken(),
|
85 |
+
self::FIELD_NOTIFICATION_CHANNEL => $this->notificationChannel,
|
86 |
+
self::FIELD_NOTIFICATION_TITLE => $this->notificationTitle,
|
87 |
+
self::FIELD_NOTIFICATION_URL => $this->notificationUrl,
|
88 |
+
self::FIELD_NOTIFICATION_TYPE => $this->notificationType,
|
89 |
+
));
|
90 |
+
return parent::perform();
|
91 |
+
}
|
92 |
+
|
93 |
+
|
94 |
+
}
|
app/code/community/Rublon/RublonModule/lib/Rublon/core/HTML/RublonBadge.php
ADDED
@@ -0,0 +1,28 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
require_once 'RublonWidget.php';
|
4 |
+
|
5 |
+
class RublonBadge extends RublonWidget {
|
6 |
+
|
7 |
+
|
8 |
+
|
9 |
+
|
10 |
+
/**
|
11 |
+
* Create Rublon Login Box
|
12 |
+
*
|
13 |
+
*/
|
14 |
+
function __construct() {}
|
15 |
+
|
16 |
+
|
17 |
+
/**
|
18 |
+
* Widget's HTML iframe attributes.
|
19 |
+
*
|
20 |
+
* @return array
|
21 |
+
*/
|
22 |
+
protected function getWidgetAttributes() {
|
23 |
+
return array(
|
24 |
+
'id' => 'RublonBadgeWidget'
|
25 |
+
);
|
26 |
+
}
|
27 |
+
|
28 |
+
}
|
app/code/community/Rublon/RublonModule/lib/Rublon/core/HTML/RublonButton.php
ADDED
@@ -0,0 +1,309 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Rublon button class.
|
5 |
+
*
|
6 |
+
* This class can be utilized to prepare a HTML container
|
7 |
+
* for the Rublon buttons. The containers embedded in the website
|
8 |
+
* will be filled with proper Rublon buttons once the consumer script
|
9 |
+
* is executed.
|
10 |
+
*
|
11 |
+
* @see RublonConsumerScript
|
12 |
+
*/
|
13 |
+
class RublonButton {
|
14 |
+
|
15 |
+
|
16 |
+
/**
|
17 |
+
* Default CSS class of the button.
|
18 |
+
*/
|
19 |
+
const ATTR_CLASS = 'rublon-button';
|
20 |
+
|
21 |
+
/**
|
22 |
+
* Prefix of the button's CSS "size" class.
|
23 |
+
*/
|
24 |
+
const ATTR_CLASS_SIZE_PREFIX = 'rublon-button-size-';
|
25 |
+
|
26 |
+
/**
|
27 |
+
* Prefix of the button's CSS "color" class.
|
28 |
+
*/
|
29 |
+
const ATTR_CLASS_COLOR_PREFIX = 'rublon-button-color-';
|
30 |
+
|
31 |
+
/**
|
32 |
+
* HTML attribute name to put the consumer params.
|
33 |
+
*/
|
34 |
+
const ATTR_CONSUMER_PARAMS = 'data-rublonconsumerparams';
|
35 |
+
|
36 |
+
|
37 |
+
|
38 |
+
// Available sizes
|
39 |
+
const SIZE_MINI = 'mini';
|
40 |
+
const SIZE_SMALL = 'small';
|
41 |
+
const SIZE_MEDIUM = 'medium';
|
42 |
+
const SIZE_LARGE = 'large';
|
43 |
+
|
44 |
+
// Available colors
|
45 |
+
const COLOR_DARK = 'dark';
|
46 |
+
const COLOR_LIGHT = 'light';
|
47 |
+
|
48 |
+
|
49 |
+
|
50 |
+
/**
|
51 |
+
* Rublon instance.
|
52 |
+
*
|
53 |
+
* An istance of the Rublon class or its descendant. Necessary
|
54 |
+
* for the class to work.
|
55 |
+
*
|
56 |
+
* @var Rublon
|
57 |
+
*/
|
58 |
+
protected $rublon = null;
|
59 |
+
|
60 |
+
|
61 |
+
|
62 |
+
/**
|
63 |
+
* Label of the button.
|
64 |
+
*
|
65 |
+
* Label displayed on the button and as its "title" attribute.
|
66 |
+
*
|
67 |
+
* @var string $label
|
68 |
+
*/
|
69 |
+
protected $label = null;
|
70 |
+
|
71 |
+
/**
|
72 |
+
* Size of the button.
|
73 |
+
*
|
74 |
+
* One of the predefined button size constants.
|
75 |
+
*
|
76 |
+
* @var string $size
|
77 |
+
*/
|
78 |
+
protected $size = null;
|
79 |
+
|
80 |
+
/**
|
81 |
+
* Color of the button.
|
82 |
+
*
|
83 |
+
* One of the predefined button color constants.
|
84 |
+
*
|
85 |
+
* @var string $color
|
86 |
+
*/
|
87 |
+
protected $color = null;
|
88 |
+
|
89 |
+
|
90 |
+
|
91 |
+
/**
|
92 |
+
* HTML attributes of the button's container.
|
93 |
+
*
|
94 |
+
* Any additional HTML attributes that will be added to the
|
95 |
+
* button upon its creation, e.g. class, style, data-attributes.
|
96 |
+
*
|
97 |
+
* @var array $attributes
|
98 |
+
*/
|
99 |
+
protected $attributes = array();
|
100 |
+
|
101 |
+
|
102 |
+
/**
|
103 |
+
* HTML content of the button.
|
104 |
+
*
|
105 |
+
* @var string
|
106 |
+
*/
|
107 |
+
protected $content = '<a href="https://rublon.com/">Rublon</a>';
|
108 |
+
|
109 |
+
|
110 |
+
/**
|
111 |
+
* Initialize object with Rublon instance.
|
112 |
+
*
|
113 |
+
* A Rublon class instance is required for
|
114 |
+
* the object to work.
|
115 |
+
*
|
116 |
+
* @param RublonConsumer $rublon An instance of the Rublon class
|
117 |
+
*/
|
118 |
+
public function __construct(RublonConsumer $rublon) {
|
119 |
+
$rublon->log(__METHOD__);
|
120 |
+
$this->rublon = $rublon;
|
121 |
+
$this->setSize(self::SIZE_MEDIUM);
|
122 |
+
$this->setColor(self::COLOR_DARK);
|
123 |
+
}
|
124 |
+
|
125 |
+
|
126 |
+
/**
|
127 |
+
* Convert object into string.
|
128 |
+
*
|
129 |
+
* Returns HTML container of the button that can be
|
130 |
+
* embedded in the website.
|
131 |
+
*
|
132 |
+
* @return string
|
133 |
+
*/
|
134 |
+
public function __toString() {
|
135 |
+
$this->getRublon()->log(__METHOD__);
|
136 |
+
|
137 |
+
$attributes = $this->attributes;
|
138 |
+
|
139 |
+
$buttonClass = self::ATTR_CLASS;
|
140 |
+
if (isset($attributes['class'])) {
|
141 |
+
$attributes['class'] = $buttonClass . ' ' . $attributes['class'];
|
142 |
+
} else {
|
143 |
+
$attributes['class'] = $buttonClass;
|
144 |
+
}
|
145 |
+
|
146 |
+
$attributes['class'] .= ' ' . self::ATTR_CLASS_SIZE_PREFIX . $this->getSize();
|
147 |
+
$attributes['class'] .= ' ' . self::ATTR_CLASS_COLOR_PREFIX . $this->getColor();
|
148 |
+
|
149 |
+
if ($title = $this->getLabel()) {
|
150 |
+
$attributes['title'] = $title;
|
151 |
+
}
|
152 |
+
|
153 |
+
$result = '<div';
|
154 |
+
foreach ($attributes as $name => $val) {
|
155 |
+
$result .= ' ' . $name . '="' . htmlspecialchars($val) . '"';
|
156 |
+
}
|
157 |
+
$result .= '>' . $this->getContent() . '</div>';
|
158 |
+
|
159 |
+
return $result;
|
160 |
+
|
161 |
+
}
|
162 |
+
|
163 |
+
|
164 |
+
/**
|
165 |
+
* Get HTML content of the button.
|
166 |
+
*
|
167 |
+
* @return string
|
168 |
+
*/
|
169 |
+
public function getContent() {
|
170 |
+
return $this->content;
|
171 |
+
}
|
172 |
+
|
173 |
+
|
174 |
+
/**
|
175 |
+
* Set HTML content of the button.
|
176 |
+
*
|
177 |
+
* @param string $content
|
178 |
+
* @return RublonButton
|
179 |
+
*/
|
180 |
+
public function setContent($content) {
|
181 |
+
$this->content = $content;
|
182 |
+
return $this;
|
183 |
+
}
|
184 |
+
|
185 |
+
|
186 |
+
/**
|
187 |
+
* Set label of the button.
|
188 |
+
*
|
189 |
+
* Button label property setter.
|
190 |
+
*
|
191 |
+
* @param string $label Text to be set as the button's label.
|
192 |
+
* @return RublonButton
|
193 |
+
*/
|
194 |
+
public function setLabel($label) {
|
195 |
+
$this->label = $label;
|
196 |
+
return $this;
|
197 |
+
}
|
198 |
+
|
199 |
+
/**
|
200 |
+
* Get label of the button.
|
201 |
+
*
|
202 |
+
* Button label property getter.
|
203 |
+
*
|
204 |
+
* @return string
|
205 |
+
*/
|
206 |
+
public function getLabel() {
|
207 |
+
return $this->label;
|
208 |
+
}
|
209 |
+
|
210 |
+
|
211 |
+
/**
|
212 |
+
* Set size of the button.
|
213 |
+
*
|
214 |
+
* Button size property setter.
|
215 |
+
* Get available size from RublonButton::SIZE_... constant.
|
216 |
+
*
|
217 |
+
* @param string $size One of the button size constants.
|
218 |
+
* @return RublonButton
|
219 |
+
*/
|
220 |
+
public function setSize($size) {
|
221 |
+
$this->size = $size;
|
222 |
+
return $this;
|
223 |
+
}
|
224 |
+
|
225 |
+
/**
|
226 |
+
* Get size of the button.
|
227 |
+
*
|
228 |
+
* Button size property getter.
|
229 |
+
*
|
230 |
+
* @return string
|
231 |
+
*/
|
232 |
+
public function getSize() {
|
233 |
+
return $this->size;
|
234 |
+
}
|
235 |
+
|
236 |
+
|
237 |
+
/**
|
238 |
+
* Set color of the button.
|
239 |
+
*
|
240 |
+
* Button color property setter.
|
241 |
+
* Get available color from RublonButton::COLOR_... constant.
|
242 |
+
*
|
243 |
+
* @param string $color One of the button color constants.
|
244 |
+
* @return RublonButton
|
245 |
+
*/
|
246 |
+
public function setColor($color) {
|
247 |
+
$this->color = $color;
|
248 |
+
return $this;
|
249 |
+
}
|
250 |
+
|
251 |
+
|
252 |
+
/**
|
253 |
+
* Get color of the button.
|
254 |
+
*
|
255 |
+
* Button color property getter.
|
256 |
+
*
|
257 |
+
* @return string
|
258 |
+
*/
|
259 |
+
public function getColor() {
|
260 |
+
return $this->color;
|
261 |
+
}
|
262 |
+
|
263 |
+
|
264 |
+
/**
|
265 |
+
* Set HTML attribute of the button's container.
|
266 |
+
*
|
267 |
+
* Add a single HTML attribute to the button's container.
|
268 |
+
*
|
269 |
+
* @param string $name Attribute's name
|
270 |
+
* @param string $value Attribute's value
|
271 |
+
* @return RublonButton
|
272 |
+
*/
|
273 |
+
public function setAttribute($name, $value) {
|
274 |
+
$this->attributes[$name] = $value;
|
275 |
+
return $this;
|
276 |
+
}
|
277 |
+
|
278 |
+
|
279 |
+
/**
|
280 |
+
* Get HTML attribute of the button's container.
|
281 |
+
*
|
282 |
+
* Returns the button's container single HTML attribute.
|
283 |
+
* Null if the attribute doesn't exist.
|
284 |
+
*
|
285 |
+
* @param string $name Attribute's name
|
286 |
+
* @return string|NULL
|
287 |
+
*/
|
288 |
+
public function getAttribute($name) {
|
289 |
+
if (isset($this->attributes[$name])) {
|
290 |
+
return $this->attributes[$name];
|
291 |
+
} else {
|
292 |
+
return null;
|
293 |
+
}
|
294 |
+
}
|
295 |
+
|
296 |
+
|
297 |
+
/**
|
298 |
+
* Get Rublon instance.
|
299 |
+
*
|
300 |
+
* Returns the Rublon instance.
|
301 |
+
*
|
302 |
+
* @return Rublon
|
303 |
+
*/
|
304 |
+
public function getRublon() {
|
305 |
+
return $this->rublon;
|
306 |
+
}
|
307 |
+
|
308 |
+
|
309 |
+
}
|
app/code/community/Rublon/RublonModule/lib/Rublon/core/HTML/RublonConsumerScript.php
ADDED
@@ -0,0 +1,178 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Class for generating script tag that embeds consumer's JavaScript library.
|
5 |
+
*
|
6 |
+
* The so-called "consumer script" is an individualized JavaScript library
|
7 |
+
* that allows the website to use Rublon JavaScript elements - usually
|
8 |
+
* the Rublon buttons. The library searches Rublon button HTML containers
|
9 |
+
* in the website's DOM tree and fills them with proper buttons.
|
10 |
+
*
|
11 |
+
* @see RublonButton
|
12 |
+
*/
|
13 |
+
class RublonConsumerScript {
|
14 |
+
|
15 |
+
/**
|
16 |
+
* Template for script tag.
|
17 |
+
*/
|
18 |
+
const TEMPLATE_SCRIPT = '<script type="text/javascript" src="%s?t=%s"></script>';
|
19 |
+
|
20 |
+
/**
|
21 |
+
* Consumer script URL.
|
22 |
+
*/
|
23 |
+
const URL_CONSUMER_SCRIPT = '/native/consumer_script_2factor';
|
24 |
+
|
25 |
+
/**
|
26 |
+
* Rublon instance.
|
27 |
+
*
|
28 |
+
* @var RublonConsumer
|
29 |
+
*/
|
30 |
+
protected $rublon = null;
|
31 |
+
|
32 |
+
/**
|
33 |
+
* Current user's ID.
|
34 |
+
*
|
35 |
+
* @var string
|
36 |
+
*/
|
37 |
+
protected $userId;
|
38 |
+
|
39 |
+
/**
|
40 |
+
* Current user's email address.
|
41 |
+
*
|
42 |
+
* @var string
|
43 |
+
*/
|
44 |
+
protected $userEmail;
|
45 |
+
|
46 |
+
/**
|
47 |
+
* Wheter to listen on user's logout.
|
48 |
+
*
|
49 |
+
* @var boolean
|
50 |
+
*/
|
51 |
+
protected $logoutListener = false;
|
52 |
+
|
53 |
+
|
54 |
+
/**
|
55 |
+
* Initialize object with Rublon instance.
|
56 |
+
*
|
57 |
+
* A Rublon class instance is required for
|
58 |
+
* the object to work.
|
59 |
+
*
|
60 |
+
* @param RublonConsumer $rublon An instance of the Rublon class
|
61 |
+
* @param string $userId User's ID in the local system.
|
62 |
+
* @param string $userEmail User's email address.
|
63 |
+
* @param boolean $logoutListener Wheter to listen on user's logout.
|
64 |
+
*/
|
65 |
+
public function __construct(RublonConsumer $rublon, $userId = null, $userEmail = null, $logoutListener = false) {
|
66 |
+
$rublon->log(__METHOD__);
|
67 |
+
$this->rublon = $rublon;
|
68 |
+
$this->userId = $userId;
|
69 |
+
$this->userEmail = $userEmail;
|
70 |
+
$this->logoutListener = $logoutListener;
|
71 |
+
}
|
72 |
+
|
73 |
+
|
74 |
+
/**
|
75 |
+
* Set whether to listen on user's logout.
|
76 |
+
*
|
77 |
+
* @param boolean $listen
|
78 |
+
* @return RublonConsumerScript
|
79 |
+
*/
|
80 |
+
public function setLogoutListener($listen) {
|
81 |
+
$this->logoutListener = $listen;
|
82 |
+
return $this;
|
83 |
+
}
|
84 |
+
|
85 |
+
/**
|
86 |
+
* Generate a HTML code of this object.
|
87 |
+
*
|
88 |
+
* Returns a HTML script tag that will load the consumer
|
89 |
+
* script from the Rublon servers.
|
90 |
+
*
|
91 |
+
* @return string
|
92 |
+
*/
|
93 |
+
public function __toString() {
|
94 |
+
$this->getRublon()->log(__METHOD__);
|
95 |
+
return sprintf(self::TEMPLATE_SCRIPT,
|
96 |
+
$this->getConsumerScriptURL(),
|
97 |
+
md5(microtime())
|
98 |
+
);
|
99 |
+
}
|
100 |
+
|
101 |
+
|
102 |
+
/**
|
103 |
+
* Get consumer's script URL.
|
104 |
+
*
|
105 |
+
* Returns the URL address of the consumer script on
|
106 |
+
* the Rublon servers.
|
107 |
+
*
|
108 |
+
* @return string
|
109 |
+
*/
|
110 |
+
protected function getConsumerScriptURL() {
|
111 |
+
$this->getRublon()->log(__METHOD__);
|
112 |
+
return $this->getRublon()->getAPIDomain()
|
113 |
+
. self::URL_CONSUMER_SCRIPT . '/'
|
114 |
+
. urlencode(base64_encode($this->getParamsWrapper())) . '/'
|
115 |
+
. rand(1, 99999);
|
116 |
+
}
|
117 |
+
|
118 |
+
|
119 |
+
|
120 |
+
/**
|
121 |
+
* Get script input parameters.
|
122 |
+
*
|
123 |
+
* @return array
|
124 |
+
*/
|
125 |
+
protected function getParams() {
|
126 |
+
$params = array(
|
127 |
+
RublonAuthParams::FIELD_ORIGIN_URL => $this->getRublon()->getCurrentUrl(),
|
128 |
+
RublonAuthParams::FIELD_SYSTEM_TOKEN => $this->getRublon()->getSystemToken(),
|
129 |
+
RublonAuthParams::FIELD_VERSION => str_replace('-', '', $this->getRublon()->getVersionDate()),
|
130 |
+
RublonAuthParams::FIELD_SERVICE => $this->getRublon()->getServiceName(),
|
131 |
+
);
|
132 |
+
|
133 |
+
if (!empty($this->userEmail)) {
|
134 |
+
$params[RublonAuthParams::FIELD_USER_EMAIL_HASH] = hash(RublonAuthParams::HASH_ALG, strtolower($this->userEmail));
|
135 |
+
}
|
136 |
+
if (!empty($this->userId)) {
|
137 |
+
$params[RublonAuthParams::FIELD_USER_ID] = $this->userId;
|
138 |
+
}
|
139 |
+
if ($this->logoutListener) {
|
140 |
+
$params[RublonAuthParams::FIELD_LOGOUT_LISTENER] = $this->logoutListener;
|
141 |
+
}
|
142 |
+
if ($lang = $this->getRublon()->getLang()) {
|
143 |
+
$params[RublonAuthParams::FIELD_LANG] = $lang;
|
144 |
+
}
|
145 |
+
|
146 |
+
return $params;
|
147 |
+
|
148 |
+
}
|
149 |
+
|
150 |
+
|
151 |
+
/**
|
152 |
+
* Get signed script input parameters.
|
153 |
+
*
|
154 |
+
* @return string
|
155 |
+
*/
|
156 |
+
protected function getParamsWrapper() {
|
157 |
+
if ($this->getRublon()->isConfigured()) {
|
158 |
+
$wrapper = new RublonSignatureWrapper;
|
159 |
+
$wrapper->setSecretKey($this->getRublon()->getSecretKey());
|
160 |
+
$wrapper->setBody($this->getParams());
|
161 |
+
return (string)$wrapper;
|
162 |
+
} else {
|
163 |
+
return json_encode($this->getParams());
|
164 |
+
}
|
165 |
+
}
|
166 |
+
|
167 |
+
|
168 |
+
/**
|
169 |
+
* Get Rublon instance.
|
170 |
+
*
|
171 |
+
* @return RublonConsumer
|
172 |
+
*/
|
173 |
+
public function getRublon() {
|
174 |
+
return $this->rublon;
|
175 |
+
}
|
176 |
+
|
177 |
+
|
178 |
+
}
|
app/code/community/Rublon/RublonModule/lib/Rublon/core/HTML/RublonDeviceWidget.php
ADDED
@@ -0,0 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
require_once 'RublonWidget.php';
|
4 |
+
|
5 |
+
class RublonDeviceWidget extends RublonWidget {
|
6 |
+
|
7 |
+
|
8 |
+
/**
|
9 |
+
* Device Widget HTML iframe attributes.
|
10 |
+
*
|
11 |
+
* @return array
|
12 |
+
*/
|
13 |
+
protected function getWidgetAttributes() {
|
14 |
+
return array(
|
15 |
+
'id' => 'RublonDeviceWidget',
|
16 |
+
);
|
17 |
+
}
|
18 |
+
|
19 |
+
}
|
app/code/community/Rublon/RublonModule/lib/Rublon/core/HTML/RublonLoginBox.php
ADDED
@@ -0,0 +1,36 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
require_once 'RublonWidget.php';
|
4 |
+
|
5 |
+
class RublonLoginBox extends RublonWidget {
|
6 |
+
|
7 |
+
|
8 |
+
protected $loginUrl;
|
9 |
+
protected $size;
|
10 |
+
|
11 |
+
|
12 |
+
/**
|
13 |
+
* Create Rublon Login Box
|
14 |
+
*
|
15 |
+
* @param string $loginUrl
|
16 |
+
*/
|
17 |
+
function __construct($loginUrl, $size = 'small') {
|
18 |
+
$this->loginUrl = $loginUrl;
|
19 |
+
$this->size = $size;
|
20 |
+
}
|
21 |
+
|
22 |
+
|
23 |
+
/**
|
24 |
+
* Widget's HTML iframe attributes.
|
25 |
+
*
|
26 |
+
* @return array
|
27 |
+
*/
|
28 |
+
protected function getWidgetAttributes() {
|
29 |
+
return array(
|
30 |
+
'id' => 'RublonLoginBoxWidget',
|
31 |
+
'data-login-url' => $this->loginUrl,
|
32 |
+
'data-size' => $this->size
|
33 |
+
);
|
34 |
+
}
|
35 |
+
|
36 |
+
}
|
app/code/community/Rublon/RublonModule/lib/Rublon/core/HTML/RublonShareAccessWidget.php
ADDED
@@ -0,0 +1,20 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
require_once 'RublonWidget.php';
|
4 |
+
|
5 |
+
class RublonShareAccessWidget extends RublonWidget {
|
6 |
+
|
7 |
+
|
8 |
+
/**
|
9 |
+
* Device Widget HTML iframe attributes.
|
10 |
+
*
|
11 |
+
* @return array
|
12 |
+
*/
|
13 |
+
protected function getWidgetAttributes() {
|
14 |
+
return array(
|
15 |
+
'id' => 'RublonShareAccessWidget',
|
16 |
+
);
|
17 |
+
}
|
18 |
+
|
19 |
+
|
20 |
+
}
|
app/code/community/Rublon/RublonModule/lib/Rublon/core/HTML/RublonSubscribeWidget.php
ADDED
@@ -0,0 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
require_once 'RublonWidget.php';
|
4 |
+
|
5 |
+
class RublonSubscribeWidget extends RublonWidget {
|
6 |
+
|
7 |
+
|
8 |
+
/**
|
9 |
+
* Device Widget HTML iframe attributes.
|
10 |
+
*
|
11 |
+
* @return array
|
12 |
+
*/
|
13 |
+
protected function getWidgetAttributes() {
|
14 |
+
return array(
|
15 |
+
'class' => 'rublon-subscribe-widget',
|
16 |
+
);
|
17 |
+
}
|
18 |
+
|
19 |
+
}
|
app/code/community/Rublon/RublonModule/lib/Rublon/core/HTML/RublonWidget.php
ADDED
@@ -0,0 +1,78 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
abstract class RublonWidget {
|
4 |
+
|
5 |
+
|
6 |
+
// Device Widget CSS attributes.
|
7 |
+
const WIDGET_CSS_FONT_COLOR = 'font-color';
|
8 |
+
const WIDGET_CSS_FONT_SIZE = 'font-size';
|
9 |
+
const WIDGET_CSS_FONT_FAMILY = 'font-family';
|
10 |
+
const WIDGET_CSS_BACKGROUND_COLOR = 'background-color';
|
11 |
+
|
12 |
+
|
13 |
+
/**
|
14 |
+
* Get iframe to load the Device Widget.
|
15 |
+
*
|
16 |
+
* @return string
|
17 |
+
*/
|
18 |
+
function __toString() {
|
19 |
+
return '<iframe '. self::createAttributesString(array_merge(
|
20 |
+
$this->getWidgetAttributes(),
|
21 |
+
$this->getWidgetCSSAttribsData()
|
22 |
+
)) .'></iframe>';
|
23 |
+
}
|
24 |
+
|
25 |
+
|
26 |
+
|
27 |
+
/**
|
28 |
+
* Creates HTML attributes string.
|
29 |
+
*
|
30 |
+
* @param array $attr
|
31 |
+
* @return string
|
32 |
+
*/
|
33 |
+
static function createAttributesString($attr) {
|
34 |
+
$result = '';
|
35 |
+
foreach ($attr as $name => $value) {
|
36 |
+
$result .= ' ' . htmlspecialchars($name) .'="'. htmlspecialchars($value) .'"';
|
37 |
+
}
|
38 |
+
return $result;
|
39 |
+
}
|
40 |
+
|
41 |
+
|
42 |
+
|
43 |
+
/**
|
44 |
+
* Creates HTML attributes array for a widget CSS attributes.
|
45 |
+
*
|
46 |
+
* @return array
|
47 |
+
*/
|
48 |
+
private function getWidgetCSSAttribsData() {
|
49 |
+
$result = array();
|
50 |
+
$attribs = $this->getWidgetCSSAttribs();
|
51 |
+
foreach ($attribs as $name => $value) {
|
52 |
+
$result['data-' . $name] = $value;
|
53 |
+
}
|
54 |
+
return $result;
|
55 |
+
}
|
56 |
+
|
57 |
+
|
58 |
+
/**
|
59 |
+
* Returns CSS attributes for a widget.
|
60 |
+
*
|
61 |
+
* @return array
|
62 |
+
*/
|
63 |
+
protected function getWidgetCSSAttribs() {
|
64 |
+
return array();
|
65 |
+
}
|
66 |
+
|
67 |
+
|
68 |
+
/**
|
69 |
+
* Get widget's iframe HTML attributes.
|
70 |
+
*
|
71 |
+
* @return array
|
72 |
+
*/
|
73 |
+
protected function getWidgetAttributes() {
|
74 |
+
return array();
|
75 |
+
}
|
76 |
+
|
77 |
+
|
78 |
+
}
|
app/code/community/Rublon/RublonModule/lib/Rublon/core/RublonAuthParams.php
ADDED
@@ -0,0 +1,445 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Parameters wrapper of the Rublon authentication process.
|
5 |
+
*
|
6 |
+
* This class is used to prepare the parameters for the authentication
|
7 |
+
* process. This includes both the parameters used for the authentication
|
8 |
+
* itself as well as any additional parameters that would be used by the
|
9 |
+
* integrated website in the callback. An object of this class can also
|
10 |
+
* be used to embed the authentication parameters in a Rublon button.
|
11 |
+
*
|
12 |
+
* @see RublonButton
|
13 |
+
*/
|
14 |
+
class RublonAuthParams {
|
15 |
+
|
16 |
+
/**
|
17 |
+
* Hash algorithm name to compute the user's email hash.
|
18 |
+
*/
|
19 |
+
const HASH_ALG = 'sha256';
|
20 |
+
|
21 |
+
/**
|
22 |
+
* Rublon instance.
|
23 |
+
*
|
24 |
+
* An istance of the Rublon class. Necessary for
|
25 |
+
* the class to work.
|
26 |
+
*
|
27 |
+
* @var Rublon
|
28 |
+
*/
|
29 |
+
protected $rublon = null;
|
30 |
+
|
31 |
+
/**
|
32 |
+
* Consumer parameters store.
|
33 |
+
*
|
34 |
+
* These optional parameters can be set by the integrated website.
|
35 |
+
* They will be signed with the Signature Wrapper (RublonSignatureWrapper class)
|
36 |
+
* using the website's secret key and can be retrieved in the callback via
|
37 |
+
* the getResponse() method of the RublonAPIClient class.
|
38 |
+
*
|
39 |
+
* @var array
|
40 |
+
*/
|
41 |
+
protected $consumerParams = array();
|
42 |
+
|
43 |
+
/**
|
44 |
+
* Action flag.
|
45 |
+
*
|
46 |
+
* @var string
|
47 |
+
*/
|
48 |
+
protected $actionFlag;
|
49 |
+
|
50 |
+
|
51 |
+
/**
|
52 |
+
* Field name for access token parameter
|
53 |
+
*/
|
54 |
+
const FIELD_ACCESS_TOKEN = "accessToken";
|
55 |
+
|
56 |
+
/**
|
57 |
+
* Name of the field with profile ID.
|
58 |
+
*/
|
59 |
+
const FIELD_PROFILE_ID = 'profileId';
|
60 |
+
|
61 |
+
/**
|
62 |
+
* Field name for "service" parameter
|
63 |
+
*/
|
64 |
+
const FIELD_SERVICE = "service";
|
65 |
+
|
66 |
+
/**
|
67 |
+
* Field name for "systemToken" parameter
|
68 |
+
*/
|
69 |
+
const FIELD_SYSTEM_TOKEN = "systemToken";
|
70 |
+
|
71 |
+
/**
|
72 |
+
* Field name for origin URL.
|
73 |
+
*/
|
74 |
+
const FIELD_ORIGIN_URL = "originUrl";
|
75 |
+
|
76 |
+
/**
|
77 |
+
* Field name for language parameter
|
78 |
+
*/
|
79 |
+
const FIELD_LANG = "lang";
|
80 |
+
|
81 |
+
/**
|
82 |
+
* Field name for window type.
|
83 |
+
*/
|
84 |
+
const FIELD_WINDOW_TYPE = 'windowType';
|
85 |
+
|
86 |
+
/**
|
87 |
+
* Field name for return URL.
|
88 |
+
*/
|
89 |
+
const FIELD_RETURN_URL = 'returnUrl';
|
90 |
+
|
91 |
+
/**
|
92 |
+
* Field name for consumer parameters
|
93 |
+
*/
|
94 |
+
const FIELD_CONSUMER_PARAMS = "consumerParams";
|
95 |
+
|
96 |
+
/**
|
97 |
+
* Field name for callback URL.
|
98 |
+
*/
|
99 |
+
const FIELD_CALLBACK_URL = 'callbackUrl';
|
100 |
+
|
101 |
+
/**
|
102 |
+
* Field name for local user ID.
|
103 |
+
*/
|
104 |
+
const FIELD_USER_ID = "userId";
|
105 |
+
|
106 |
+
/**
|
107 |
+
* Field name for local user email address.
|
108 |
+
*/
|
109 |
+
const FIELD_USER_EMAIL_HASH = "userEmailHash";
|
110 |
+
|
111 |
+
/**
|
112 |
+
* Field name for logout listener boolean flag.
|
113 |
+
*/
|
114 |
+
const FIELD_LOGOUT_LISTENER = "logoutListener";
|
115 |
+
|
116 |
+
/**
|
117 |
+
* Field name for required Rublon user's profile ID.
|
118 |
+
*/
|
119 |
+
const FIELD_REQUIRE_PROFILE_ID = "requireProfileId";
|
120 |
+
|
121 |
+
/**
|
122 |
+
* Field name for action flag.
|
123 |
+
*/
|
124 |
+
const FIELD_ACTION_FLAG = "actionFlag";
|
125 |
+
|
126 |
+
/**
|
127 |
+
* Field name for version parameter.
|
128 |
+
*/
|
129 |
+
const FIELD_VERSION = "version";
|
130 |
+
|
131 |
+
/**
|
132 |
+
* Field name to require Rublon to authenticate
|
133 |
+
* by mobile app only, not using Email 2-factor.
|
134 |
+
*/
|
135 |
+
const FIELD_FORCE_MOBILE_APP = 'forceMobileApp';
|
136 |
+
|
137 |
+
/**
|
138 |
+
* Field name to force ignoring the existing Trusted Device
|
139 |
+
* during the authentication.
|
140 |
+
*/
|
141 |
+
const FIELD_IGNORE_TRUSTED_DEVICE = 'ignoreTrustedDevice';
|
142 |
+
|
143 |
+
/**
|
144 |
+
* Field name to add a custom URI query parameter to the callback URL.
|
145 |
+
*/
|
146 |
+
const FIELD_CUSTOM_URI_PARAM = 'customURIParam';
|
147 |
+
|
148 |
+
/**
|
149 |
+
* Field name to define a message for a transaction.
|
150 |
+
*/
|
151 |
+
const FIELD_CONFIRM_MESSAGE = 'confirmMessage';
|
152 |
+
|
153 |
+
/**
|
154 |
+
* Field name to set the time buffer in seconds from previous confirmation
|
155 |
+
* which allow Rublon to confirm the custom transaction
|
156 |
+
* without user's action.
|
157 |
+
*/
|
158 |
+
const FIELD_CONFIRM_TIME_BUFFER = 'confirmTimeBuffer';
|
159 |
+
|
160 |
+
/**
|
161 |
+
* URL path to authentication code
|
162 |
+
*/
|
163 |
+
const URL_PATH_CODE = "/code/native/";
|
164 |
+
|
165 |
+
/**
|
166 |
+
* Action flag for login action.
|
167 |
+
*/
|
168 |
+
const ACTION_FLAG_LOGIN = 'login';
|
169 |
+
|
170 |
+
/**
|
171 |
+
* Action flag for enable protection action.
|
172 |
+
*/
|
173 |
+
const ACTION_FLAG_LINK_ACCOUNTS = 'link_accounts';
|
174 |
+
|
175 |
+
/**
|
176 |
+
* Action flag for disable protection action.
|
177 |
+
*/
|
178 |
+
const ACTION_FLAG_UNLINK_ACCOUNTS = 'unlink_accounts';
|
179 |
+
|
180 |
+
|
181 |
+
/**
|
182 |
+
* Initialize object with Rublon instance.
|
183 |
+
*
|
184 |
+
* A Rublon class instance is required for
|
185 |
+
* the object to work.
|
186 |
+
*
|
187 |
+
* @param RublonConsumer $rublon An instance of the Rublon class
|
188 |
+
*/
|
189 |
+
public function __construct(RublonConsumer $rublon) {
|
190 |
+
$rublon->log(__METHOD__);
|
191 |
+
$this->rublon = $rublon;
|
192 |
+
}
|
193 |
+
|
194 |
+
|
195 |
+
/**
|
196 |
+
* Get URL of the authentication request to perform simple HTTP redirection.
|
197 |
+
*
|
198 |
+
* Returns a URL address that will start the Rublon
|
199 |
+
* authentication process if redirected to.
|
200 |
+
*
|
201 |
+
* @return string URL address
|
202 |
+
*/
|
203 |
+
public function getUrl() {
|
204 |
+
$this->getRublon()->log(__METHOD__);
|
205 |
+
return $this->getRublon()->getAPIDomain() .
|
206 |
+
self::URL_PATH_CODE .
|
207 |
+
urlencode($this->getUrlParamsString());
|
208 |
+
}
|
209 |
+
|
210 |
+
|
211 |
+
|
212 |
+
/**
|
213 |
+
* Get parameters string to apply in the authentication URL address.
|
214 |
+
*
|
215 |
+
* Returns the authentication parameters as a base64-encoded JSON string
|
216 |
+
* that will be passed with the URL address to the Rublon code window.
|
217 |
+
*
|
218 |
+
* @return string
|
219 |
+
*/
|
220 |
+
protected function getUrlParamsString() {
|
221 |
+
return base64_encode(json_encode($this->getUrlParams()));
|
222 |
+
}
|
223 |
+
|
224 |
+
|
225 |
+
/**
|
226 |
+
* Get ready-made authentication parameters object to apply in the authentication URL address.
|
227 |
+
*
|
228 |
+
* Returns the authentication process parameters as an object
|
229 |
+
* (including the Signature Wrapper-signed consumer params)
|
230 |
+
* that will be passed with the URL address to the Rublon code window.
|
231 |
+
*
|
232 |
+
* @return array
|
233 |
+
*/
|
234 |
+
public function getUrlParams() {
|
235 |
+
|
236 |
+
$consumerParams = $this->getConsumerParams();
|
237 |
+
$params = array();
|
238 |
+
|
239 |
+
if (!empty($consumerParams)) {
|
240 |
+
$wrapper = RublonSignatureWrapper::wrap(
|
241 |
+
$this->getRublon()->getSecretKey(),
|
242 |
+
$consumerParams
|
243 |
+
);
|
244 |
+
$params[self::FIELD_CONSUMER_PARAMS] = $wrapper;
|
245 |
+
}
|
246 |
+
|
247 |
+
return $params;
|
248 |
+
|
249 |
+
}
|
250 |
+
|
251 |
+
/**
|
252 |
+
* Get the consumer parameters wrapper to apply in the Rublon button.
|
253 |
+
*
|
254 |
+
* Returns the Signature Wrapper-signed consumer params
|
255 |
+
* to apply in the HTML wrapper of the Rublon button.
|
256 |
+
*
|
257 |
+
* @return array|NULL
|
258 |
+
*/
|
259 |
+
public function getConsumerParamsWrapper() {
|
260 |
+
$consumerParams = $this->getConsumerParams();
|
261 |
+
|
262 |
+
if (!empty($consumerParams)) {
|
263 |
+
return RublonSignatureWrapper::wrap(
|
264 |
+
$this->getRublon()->getSecretKey(),
|
265 |
+
$consumerParams
|
266 |
+
);
|
267 |
+
} else {
|
268 |
+
return null;
|
269 |
+
}
|
270 |
+
}
|
271 |
+
|
272 |
+
|
273 |
+
/**
|
274 |
+
* Get the consumer parameters string to apply in the Rublon button.
|
275 |
+
*
|
276 |
+
* Returns the Signature Wrapped-signed consumer params
|
277 |
+
* as a JSON string.
|
278 |
+
*
|
279 |
+
* @return string|NULL
|
280 |
+
*/
|
281 |
+
public function getConsumerParamsWrapperString() {
|
282 |
+
return json_encode($this->getConsumerParamsWrapper());
|
283 |
+
}
|
284 |
+
|
285 |
+
|
286 |
+
/**
|
287 |
+
* Set action flag.
|
288 |
+
*
|
289 |
+
* @param string $actionFlag
|
290 |
+
* @return RublonAuthParams
|
291 |
+
*/
|
292 |
+
public function setActionFlag($actionFlag) {
|
293 |
+
$this->actionFlag = $actionFlag;
|
294 |
+
return $this;
|
295 |
+
}
|
296 |
+
|
297 |
+
/**
|
298 |
+
* Get action flag.
|
299 |
+
*
|
300 |
+
* @return string
|
301 |
+
*/
|
302 |
+
public function getActionFlag() {
|
303 |
+
return $this->actionFlag;
|
304 |
+
}
|
305 |
+
|
306 |
+
|
307 |
+
/**
|
308 |
+
* Set consumer parameters.
|
309 |
+
*
|
310 |
+
* Sets the consumer parameters using the given array.
|
311 |
+
*
|
312 |
+
* @param array $consumerParams An array of consumer parameters
|
313 |
+
* @return RublonAuthParams
|
314 |
+
*/
|
315 |
+
public function setConsumerParams($consumerParams) {
|
316 |
+
$this->consumerParams = $consumerParams;
|
317 |
+
return $this;
|
318 |
+
}
|
319 |
+
|
320 |
+
/**
|
321 |
+
* Set single consumer parameter.
|
322 |
+
*
|
323 |
+
* Allows to add a single consumer param to the consumer
|
324 |
+
* params array.
|
325 |
+
*
|
326 |
+
* @param string $name Param key in the array.
|
327 |
+
* @param mixed $value Param value.
|
328 |
+
* @return RublonAuthParams
|
329 |
+
*/
|
330 |
+
public function setConsumerParam($name, $value) {
|
331 |
+
$this->consumerParams[$name] = $value;
|
332 |
+
return $this;
|
333 |
+
}
|
334 |
+
|
335 |
+
|
336 |
+
/**
|
337 |
+
* Get consumer parameters.
|
338 |
+
*
|
339 |
+
* @return array
|
340 |
+
*/
|
341 |
+
public function getConsumerParams() {
|
342 |
+
|
343 |
+
$consumerParams = $this->consumerParams;
|
344 |
+
|
345 |
+
// Now set some default required parameters.
|
346 |
+
|
347 |
+
// Service name:
|
348 |
+
if ($serviceName = $this->getRublon()->getServiceName()) {
|
349 |
+
$consumerParams[self::FIELD_SERVICE] = $serviceName;
|
350 |
+
}
|
351 |
+
|
352 |
+
// Language code:
|
353 |
+
if ($lang = $this->getRublon()->getLang()) {
|
354 |
+
$consumerParams[self::FIELD_LANG] = $lang;
|
355 |
+
}
|
356 |
+
|
357 |
+
// Action flag:
|
358 |
+
if ($actionFlag = $this->getActionFlag()) {
|
359 |
+
$consumerParams[self::FIELD_ACTION_FLAG] = $actionFlag;
|
360 |
+
}
|
361 |
+
|
362 |
+
// Consumer's system token:
|
363 |
+
$consumerParams[self::FIELD_SYSTEM_TOKEN] = $this->getRublon()->getSystemToken();
|
364 |
+
|
365 |
+
// Protocol version:
|
366 |
+
$consumerParams[self::FIELD_VERSION] = $this->getRublon()->getVersionDate();
|
367 |
+
|
368 |
+
return $consumerParams;
|
369 |
+
|
370 |
+
}
|
371 |
+
|
372 |
+
|
373 |
+
/**
|
374 |
+
* Get single consumer parameter.
|
375 |
+
*
|
376 |
+
* Returns a single consumer param from the consumer params
|
377 |
+
* array or null if the requested param doesn't exist.
|
378 |
+
*
|
379 |
+
* @param string $name Param key in the array.
|
380 |
+
* @return mixed|NULL
|
381 |
+
*/
|
382 |
+
public function getConsumerParam($name) {
|
383 |
+
$consumerParams = $this->getConsumerParams();
|
384 |
+
if (isset($consumerParams[$name])) {
|
385 |
+
return $consumerParams[$name];
|
386 |
+
} else {
|
387 |
+
return NULL;
|
388 |
+
}
|
389 |
+
}
|
390 |
+
|
391 |
+
|
392 |
+
/**
|
393 |
+
* Get Rublon instance.
|
394 |
+
*
|
395 |
+
* @return Rublon
|
396 |
+
*/
|
397 |
+
public function getRublon() {
|
398 |
+
return $this->rublon;
|
399 |
+
}
|
400 |
+
|
401 |
+
|
402 |
+
/**
|
403 |
+
* Create instance of the RublonAuthParams by given configuration.
|
404 |
+
*
|
405 |
+
* @param RublonConsumer $rublon
|
406 |
+
* @param string $callbackUrl Callback URL address.
|
407 |
+
* @param array $params Existing instance of the RublonAuthParams to configure or consumer parameters array (optional)
|
408 |
+
* @return RublonAuthParams
|
409 |
+
*/
|
410 |
+
static public function initAuthParams(RublonConsumer $rublon, $callbackUrl, $params = null) {
|
411 |
+
if (is_object($params) AND $params instanceof RublonAuthParams) {
|
412 |
+
$authParams = $params;
|
413 |
+
} else {
|
414 |
+
$authParams = new RublonAuthParams($rublon);
|
415 |
+
if (is_array($params) AND !empty($params)) {
|
416 |
+
$authParams->setConsumerParams($params);
|
417 |
+
}
|
418 |
+
}
|
419 |
+
|
420 |
+
$authParams->setConsumerParam(self::FIELD_CALLBACK_URL, $callbackUrl);
|
421 |
+
|
422 |
+
return $authParams;
|
423 |
+
|
424 |
+
}
|
425 |
+
|
426 |
+
|
427 |
+
/**
|
428 |
+
* Create instance of the RublonAuthParams configured for 2-factor login.
|
429 |
+
*
|
430 |
+
* @param RublonConsumer $rublon
|
431 |
+
* @param string $callbackUrl Callback URL address.
|
432 |
+
* @param string $userId
|
433 |
+
* @param string $userEmail
|
434 |
+
* @param RublonAuthParams|array $params Instance of the RublonAuthParams or consumer parameters array (optional)
|
435 |
+
* @return RublonAuthParams
|
436 |
+
*/
|
437 |
+
static public function initAuthParamsLogin(RublonConsumer $rublon, $callbackUrl, $userId, $userEmail, $params = null) {
|
438 |
+
$authParams = self::initAuthParams($rublon, $callbackUrl, $params);
|
439 |
+
$authParams->setConsumerParam(RublonAuthParams::FIELD_USER_ID, $userId);
|
440 |
+
$authParams->setConsumerParam(RublonAuthParams::FIELD_USER_EMAIL_HASH, hash(self::HASH_ALG, strtolower($userEmail)));
|
441 |
+
return $authParams;
|
442 |
+
}
|
443 |
+
|
444 |
+
|
445 |
+
}
|
app/code/community/Rublon/RublonModule/lib/Rublon/core/RublonConsumer.php
ADDED
@@ -0,0 +1,236 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
if (!defined('DIRECTORY_SEPARATOR')) {
|
4 |
+
define('DIRECTORY_SEPARATOR', '/');
|
5 |
+
}
|
6 |
+
|
7 |
+
require_once 'RublonException.php';
|
8 |
+
require_once 'RublonAuthParams.php';
|
9 |
+
require_once 'RublonSignatureWrapper.php';
|
10 |
+
|
11 |
+
|
12 |
+
/**
|
13 |
+
* Abstract class for Rublon services.
|
14 |
+
*
|
15 |
+
* Class defines common interface for given Rublon service instance.
|
16 |
+
*
|
17 |
+
* @abstract
|
18 |
+
*/
|
19 |
+
abstract class RublonConsumer {
|
20 |
+
|
21 |
+
/**
|
22 |
+
* Latest version release of this library.
|
23 |
+
*/
|
24 |
+
const VERSION = '3.7.0';
|
25 |
+
|
26 |
+
/**
|
27 |
+
* Latest version release date of this library.
|
28 |
+
*/
|
29 |
+
const VERSION_DATE = '2015-05-06';
|
30 |
+
|
31 |
+
/**
|
32 |
+
* Default API domain.
|
33 |
+
*/
|
34 |
+
const DEFAULT_API_DOMAIN = "https://code.rublon.com";
|
35 |
+
|
36 |
+
/**
|
37 |
+
* Default technology code name.
|
38 |
+
*/
|
39 |
+
const DEFAULT_TECHNOLOGY = "rublon-php-sdk";
|
40 |
+
|
41 |
+
/**
|
42 |
+
* Configuration error message template.
|
43 |
+
*/
|
44 |
+
const TEMPLATE_CONFIG_ERROR = 'Before calling Rublon authentication you have to pass the consumer\'s system token and secret key to the Rublon class constructor.';
|
45 |
+
|
46 |
+
/**
|
47 |
+
* System token.
|
48 |
+
*
|
49 |
+
* @var string
|
50 |
+
*/
|
51 |
+
protected $systemToken;
|
52 |
+
|
53 |
+
/**
|
54 |
+
* Secret key.
|
55 |
+
*
|
56 |
+
* @var string
|
57 |
+
*/
|
58 |
+
protected $secretKey;
|
59 |
+
|
60 |
+
/**
|
61 |
+
* Service name.
|
62 |
+
*
|
63 |
+
* @var string
|
64 |
+
*/
|
65 |
+
protected $serviceName = '';
|
66 |
+
|
67 |
+
/**
|
68 |
+
* API server name.
|
69 |
+
*
|
70 |
+
* @var string
|
71 |
+
*/
|
72 |
+
protected $apiServer;
|
73 |
+
|
74 |
+
|
75 |
+
|
76 |
+
/**
|
77 |
+
* Construct the object.
|
78 |
+
*
|
79 |
+
* @param string $systemToken Consumer's system token string.
|
80 |
+
* @param string $secretKey Consumer's secret key string.
|
81 |
+
* @param string $apiServer API server's URI
|
82 |
+
*/
|
83 |
+
public function __construct($systemToken = null, $secretKey = null, $apiServer = null) {
|
84 |
+
$this->log(__METHOD__);
|
85 |
+
$this->systemToken = $systemToken;
|
86 |
+
$this->secretKey = $secretKey;
|
87 |
+
$this->apiServer = $apiServer;
|
88 |
+
}
|
89 |
+
|
90 |
+
|
91 |
+
/**
|
92 |
+
* Get secret key.
|
93 |
+
*
|
94 |
+
* @return string
|
95 |
+
*/
|
96 |
+
public function getSecretKey() {
|
97 |
+
return $this->secretKey;
|
98 |
+
}
|
99 |
+
|
100 |
+
|
101 |
+
/**
|
102 |
+
* Get system token.
|
103 |
+
*
|
104 |
+
* @return string
|
105 |
+
*/
|
106 |
+
public function getSystemToken() {
|
107 |
+
return $this->systemToken;
|
108 |
+
}
|
109 |
+
|
110 |
+
|
111 |
+
/**
|
112 |
+
* Get Rublon API domain.
|
113 |
+
*
|
114 |
+
* @return string
|
115 |
+
*/
|
116 |
+
public function getAPIDomain() {
|
117 |
+
if (empty($this->apiServer)) {
|
118 |
+
return self::DEFAULT_API_DOMAIN;
|
119 |
+
} else {
|
120 |
+
return $this->apiServer;
|
121 |
+
}
|
122 |
+
}
|
123 |
+
|
124 |
+
|
125 |
+
/**
|
126 |
+
* Get language to use in Rublon GUI.
|
127 |
+
* If null then language will be forecast from the HTTP headers
|
128 |
+
* sent by user's browser to the Rublon server.
|
129 |
+
*
|
130 |
+
* @return string
|
131 |
+
*/
|
132 |
+
public function getLang() {
|
133 |
+
return null;
|
134 |
+
}
|
135 |
+
|
136 |
+
|
137 |
+
/**
|
138 |
+
* Perform a redirection and exit.
|
139 |
+
*
|
140 |
+
* @param string $url
|
141 |
+
* @return void
|
142 |
+
*/
|
143 |
+
public function redirect($url) {
|
144 |
+
header('Location: ' . $url);
|
145 |
+
exit;
|
146 |
+
}
|
147 |
+
|
148 |
+
|
149 |
+
/**
|
150 |
+
* Get the version date.
|
151 |
+
*
|
152 |
+
* @return string
|
153 |
+
*/
|
154 |
+
public function getVersionDate() {
|
155 |
+
return self::VERSION_DATE;
|
156 |
+
}
|
157 |
+
|
158 |
+
/**
|
159 |
+
* Get the version.
|
160 |
+
*
|
161 |
+
* @return string
|
162 |
+
*/
|
163 |
+
public function getVersion() {
|
164 |
+
return self::VERSION;
|
165 |
+
}
|
166 |
+
|
167 |
+
|
168 |
+
/**
|
169 |
+
* Get the module's technology.
|
170 |
+
*
|
171 |
+
* @return string
|
172 |
+
*/
|
173 |
+
public function getTechnology() {
|
174 |
+
return self::DEFAULT_TECHNOLOGY;
|
175 |
+
}
|
176 |
+
|
177 |
+
|
178 |
+
/**
|
179 |
+
* Get the service name.
|
180 |
+
*
|
181 |
+
* @return string
|
182 |
+
*/
|
183 |
+
public function getServiceName() {
|
184 |
+
return $this->serviceName;
|
185 |
+
}
|
186 |
+
|
187 |
+
|
188 |
+
/**
|
189 |
+
* Check whether service is configured.
|
190 |
+
*
|
191 |
+
* @return boolean
|
192 |
+
*/
|
193 |
+
public function isConfigured() {
|
194 |
+
$systemToken = $this->getSystemToken();
|
195 |
+
$secretKey = $this->getSecretKey();
|
196 |
+
return (!empty($systemToken) AND !empty($secretKey));
|
197 |
+
}
|
198 |
+
|
199 |
+
|
200 |
+
/**
|
201 |
+
* Log a message.
|
202 |
+
*
|
203 |
+
* @param mixed $msg
|
204 |
+
* @return RublonConsumer
|
205 |
+
*/
|
206 |
+
public function log($msg) {
|
207 |
+
return $this;
|
208 |
+
}
|
209 |
+
|
210 |
+
|
211 |
+
/**
|
212 |
+
* Check if current user has permission to activate/register Rublon module.
|
213 |
+
* Override if your module uses the consumer registration API.
|
214 |
+
* Otherwise return null.
|
215 |
+
*
|
216 |
+
* @return boolean
|
217 |
+
*/
|
218 |
+
public function canUserActivate() {
|
219 |
+
return false;
|
220 |
+
}
|
221 |
+
|
222 |
+
|
223 |
+
/**
|
224 |
+
* Returns current URL.
|
225 |
+
*
|
226 |
+
* @return string
|
227 |
+
*/
|
228 |
+
public function getCurrentUrl() {
|
229 |
+
if (!empty($_SERVER['HTTP_HOST'])) {
|
230 |
+
$ssl = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off');
|
231 |
+
return ($ssl ? 'https' : 'http') .'://'. $_SERVER['HTTP_HOST'] . (empty($_SERVER['REQUEST_URI']) ? '/' : $_SERVER['REQUEST_URI']);
|
232 |
+
}
|
233 |
+
}
|
234 |
+
|
235 |
+
|
236 |
+
}
|
app/code/community/Rublon/RublonModule/lib/Rublon/core/RublonException.php
ADDED
@@ -0,0 +1,85 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Exception class.
|
5 |
+
*
|
6 |
+
*/
|
7 |
+
class RublonException extends Exception {
|
8 |
+
|
9 |
+
/**
|
10 |
+
* CURL library is not available.
|
11 |
+
*/
|
12 |
+
const CODE_CURL_NOT_AVAILABLE = 1;
|
13 |
+
|
14 |
+
/**
|
15 |
+
* Invalid response.
|
16 |
+
*/
|
17 |
+
const CODE_INVALID_RESPONSE = 2;
|
18 |
+
|
19 |
+
/**
|
20 |
+
* Response error.
|
21 |
+
*/
|
22 |
+
const CODE_RESPONSE_ERROR = 3;
|
23 |
+
|
24 |
+
/**
|
25 |
+
* CURL error.
|
26 |
+
*/
|
27 |
+
const CODE_CURL_ERROR = 4;
|
28 |
+
|
29 |
+
/**
|
30 |
+
* Connection error.
|
31 |
+
*/
|
32 |
+
const CODE_CONNECTION_ERROR = 5;
|
33 |
+
|
34 |
+
/**
|
35 |
+
* Timestamp error.
|
36 |
+
*/
|
37 |
+
const CODE_TIMESTAMP_ERROR = 6;
|
38 |
+
|
39 |
+
/**
|
40 |
+
* Invalid access token.
|
41 |
+
*/
|
42 |
+
const CODE_INVALID_ACCESS_TOKEN = 7;
|
43 |
+
|
44 |
+
|
45 |
+
/**
|
46 |
+
* For backward compatibility: manually store previous exception.
|
47 |
+
*
|
48 |
+
* @var Exception
|
49 |
+
*/
|
50 |
+
protected $previous = null;
|
51 |
+
|
52 |
+
|
53 |
+
/**
|
54 |
+
* Constructor.
|
55 |
+
*
|
56 |
+
* @param string $msg (optional)
|
57 |
+
* @param int $code (optional)
|
58 |
+
* @param Exception $prev (optional)
|
59 |
+
*/
|
60 |
+
public function __construct($msg = "", $code = 0, Exception $prev = null) {
|
61 |
+
|
62 |
+
// For backward compatibility check if getPrevious() method exists
|
63 |
+
if (method_exists($this, 'getPrevious')) {
|
64 |
+
parent::__construct($msg, $code, $prev);
|
65 |
+
} else {
|
66 |
+
parent::__construct($msg, $code);
|
67 |
+
$this->previous = $prev;
|
68 |
+
}
|
69 |
+
}
|
70 |
+
|
71 |
+
/**
|
72 |
+
* Handler for non-existing methods.
|
73 |
+
*
|
74 |
+
* @param string $method
|
75 |
+
* @param array $args
|
76 |
+
* @return Exception
|
77 |
+
*/
|
78 |
+
public function __call($method, $args = array()) {
|
79 |
+
// For backward compatibility handle non-existing method getPrevious()
|
80 |
+
if ($method == 'getPrevious') {
|
81 |
+
return $this->previous;
|
82 |
+
}
|
83 |
+
}
|
84 |
+
|
85 |
+
}
|
app/code/community/Rublon/RublonModule/lib/Rublon/core/RublonGUI.php
ADDED
@@ -0,0 +1,78 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
require_once('HTML/RublonButton.php');
|
4 |
+
require_once('HTML/RublonConsumerScript.php');
|
5 |
+
require_once('HTML/RublonDeviceWidget.php');
|
6 |
+
require_once('HTML/RublonShareAccessWidget.php');
|
7 |
+
|
8 |
+
|
9 |
+
class RublonGUI {
|
10 |
+
|
11 |
+
|
12 |
+
/**
|
13 |
+
* Rublon instance.
|
14 |
+
*
|
15 |
+
* @var RublonConsumer
|
16 |
+
*/
|
17 |
+
protected $rublon;
|
18 |
+
|
19 |
+
/**
|
20 |
+
* Current user's ID.
|
21 |
+
*
|
22 |
+
* @var string
|
23 |
+
*/
|
24 |
+
protected $userId;
|
25 |
+
|
26 |
+
/**
|
27 |
+
* Current user's email address.
|
28 |
+
*
|
29 |
+
* @var string
|
30 |
+
*/
|
31 |
+
protected $userEmail;
|
32 |
+
|
33 |
+
/**
|
34 |
+
* Wheter to listen on user's logout.
|
35 |
+
*
|
36 |
+
* @var boolean
|
37 |
+
*/
|
38 |
+
protected $logoutListener = false;
|
39 |
+
|
40 |
+
|
41 |
+
/**
|
42 |
+
* Constructor.
|
43 |
+
*
|
44 |
+
* @param Rublon2Factor $rublon Rublon instance.
|
45 |
+
* @param string $userId Current user's ID.
|
46 |
+
* @param string $userEmail Current user's email.
|
47 |
+
* @param boolean $logoutListener Set whether to listen on user's logout.
|
48 |
+
*/
|
49 |
+
public function __construct(RublonConsumer $rublon, $userId, $userEmail, $logoutListener = false) {
|
50 |
+
$this->rublon = $rublon;
|
51 |
+
$this->userId = $userId;
|
52 |
+
$this->userEmail = $userEmail;
|
53 |
+
$this->logoutListener = $logoutListener;
|
54 |
+
}
|
55 |
+
|
56 |
+
|
57 |
+
/**
|
58 |
+
* Returns HTML code to embed consumer script.
|
59 |
+
*
|
60 |
+
* @return string
|
61 |
+
*/
|
62 |
+
public function getConsumerScript() {
|
63 |
+
return (string)new RublonConsumerScript($this->getRublon(), $this->userId, $this->userEmail, $this->logoutListener);
|
64 |
+
}
|
65 |
+
|
66 |
+
|
67 |
+
/**
|
68 |
+
* Get Rublon instance.
|
69 |
+
*
|
70 |
+
* @return RublonConsumer
|
71 |
+
*/
|
72 |
+
protected function getRublon() {
|
73 |
+
return $this->rublon;
|
74 |
+
}
|
75 |
+
|
76 |
+
|
77 |
+
|
78 |
+
}
|
app/code/community/Rublon/RublonModule/lib/Rublon/core/RublonNative.php
ADDED
@@ -0,0 +1,58 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
require_once 'RublonConsumer.php';
|
4 |
+
|
5 |
+
class RublonNative extends RublonConsumer {
|
6 |
+
|
7 |
+
/**
|
8 |
+
* Service name.
|
9 |
+
*
|
10 |
+
* @var string
|
11 |
+
*/
|
12 |
+
protected $serviceName = 'native';
|
13 |
+
|
14 |
+
/**
|
15 |
+
* URL path to redirect.
|
16 |
+
*
|
17 |
+
* @var string
|
18 |
+
*/
|
19 |
+
protected $urlPath = '/code/native/';
|
20 |
+
|
21 |
+
|
22 |
+
/**
|
23 |
+
* Get authentication URL.
|
24 |
+
*
|
25 |
+
* @param array $params Auth parameters.
|
26 |
+
* @return string
|
27 |
+
*/
|
28 |
+
function getAuthURL(array $params = array()) {
|
29 |
+
|
30 |
+
$params[RublonAuthParams::FIELD_VERSION] = $this->getVersionDate();
|
31 |
+
$authString = array();
|
32 |
+
|
33 |
+
if (!empty($params)) {
|
34 |
+
$authString['consumerParams'] = RublonSignatureWrapper::wrap($this->getSecretKey(), $params);
|
35 |
+
}
|
36 |
+
|
37 |
+
$authString[RublonAuthParams::FIELD_SYSTEM_TOKEN] = $this->getSystemToken();
|
38 |
+
$authString[RublonAuthParams::FIELD_LANG] = $this->getLang();
|
39 |
+
$authString[RublonAuthParams::FIELD_WINDOW_TYPE] = 'window';
|
40 |
+
|
41 |
+
return $this->getAPIDomain() . $this->urlPath . urlencode(base64_encode(json_encode($authString)));
|
42 |
+
|
43 |
+
}
|
44 |
+
|
45 |
+
|
46 |
+
/**
|
47 |
+
* Get credentials after authentication.
|
48 |
+
*
|
49 |
+
* @param string $accessToken
|
50 |
+
* @return RublonAPICredentials
|
51 |
+
*/
|
52 |
+
function getCredentials($accessToken) {
|
53 |
+
$credentials = new RublonAPICredentials($this, $accessToken);
|
54 |
+
$credentials->perform();
|
55 |
+
return $credentials;
|
56 |
+
}
|
57 |
+
|
58 |
+
}
|
app/code/community/Rublon/RublonModule/lib/Rublon/core/RublonSignatureWrapper.php
ADDED
@@ -0,0 +1,325 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Signature wrapper for input and output data.
|
5 |
+
*
|
6 |
+
* Body of the message is signed by the HMAC-SHA256 hash of the string formed of
|
7 |
+
* concatenation of the consumer's secret key and the body string.
|
8 |
+
* Body and its signature are wrapped into a JSON structure.
|
9 |
+
*
|
10 |
+
* To verify the input message it's necessary to compute the HMAC-SHA256 hash
|
11 |
+
* of the consumer's secret key concatenated with the message body string
|
12 |
+
* and compare with the signature of the message.
|
13 |
+
*
|
14 |
+
*/
|
15 |
+
class RublonSignatureWrapper {
|
16 |
+
|
17 |
+
|
18 |
+
/**
|
19 |
+
* Rublon message life time
|
20 |
+
*/
|
21 |
+
const MESSAGE_LIFETIME = 300;
|
22 |
+
|
23 |
+
/**
|
24 |
+
* Hash algorithm name for HMAC.
|
25 |
+
*/
|
26 |
+
const HASH_ALG = 'SHA256';
|
27 |
+
|
28 |
+
/**
|
29 |
+
* Field name for wrapper data.
|
30 |
+
*/
|
31 |
+
const FIELD_DATA = 'data';
|
32 |
+
|
33 |
+
/**
|
34 |
+
* Field name for message body.
|
35 |
+
*/
|
36 |
+
const FIELD_BODY = 'body';
|
37 |
+
|
38 |
+
/**
|
39 |
+
* Field name for message header.
|
40 |
+
*/
|
41 |
+
const FIELD_HEAD = 'head';
|
42 |
+
|
43 |
+
/**
|
44 |
+
* Field name for size.
|
45 |
+
*/
|
46 |
+
const FIELD_HEAD_SIZE = 'size';
|
47 |
+
|
48 |
+
/**
|
49 |
+
* Field name for size.
|
50 |
+
*/
|
51 |
+
const FIELD_HEAD_TIME = 'time';
|
52 |
+
|
53 |
+
/**
|
54 |
+
* Field name for signature.
|
55 |
+
*/
|
56 |
+
const FIELD_SIGN = 'sign';
|
57 |
+
|
58 |
+
/**
|
59 |
+
* Field name for status.
|
60 |
+
*/
|
61 |
+
const FIELD_STATUS = 'status';
|
62 |
+
|
63 |
+
/**
|
64 |
+
* Field name for message content.
|
65 |
+
*/
|
66 |
+
const FIELD_MSG = 'msg';
|
67 |
+
|
68 |
+
/**
|
69 |
+
* Error status.
|
70 |
+
*/
|
71 |
+
const STATUS_ERROR = 'ERROR';
|
72 |
+
|
73 |
+
/**
|
74 |
+
* Config key to skip time validation.
|
75 |
+
*/
|
76 |
+
const CONFIG_SKIP_TIME = 'skipTime';
|
77 |
+
|
78 |
+
|
79 |
+
/**
|
80 |
+
* Secret key for verifying signature.
|
81 |
+
*
|
82 |
+
* @var string
|
83 |
+
*/
|
84 |
+
protected $secretKey = null;
|
85 |
+
|
86 |
+
/**
|
87 |
+
* Body of data.
|
88 |
+
*
|
89 |
+
* @var array
|
90 |
+
*/
|
91 |
+
protected $body = null;
|
92 |
+
|
93 |
+
/**
|
94 |
+
* Raw data string.
|
95 |
+
*
|
96 |
+
* @var string
|
97 |
+
*/
|
98 |
+
protected $rawData = null;
|
99 |
+
|
100 |
+
|
101 |
+
|
102 |
+
|
103 |
+
/**
|
104 |
+
* Get object's string - JSON with signed data.
|
105 |
+
*
|
106 |
+
* @return string
|
107 |
+
*/
|
108 |
+
public function __toString() {
|
109 |
+
return json_encode($this->getWrapper());
|
110 |
+
}
|
111 |
+
|
112 |
+
|
113 |
+
|
114 |
+
/**
|
115 |
+
* Set raw input.
|
116 |
+
*
|
117 |
+
* @param string $input
|
118 |
+
* @return RublonSignatureWrapper
|
119 |
+
*/
|
120 |
+
public function setInput($input) {
|
121 |
+
$this->rawData = $input;
|
122 |
+
@ $data = json_decode($input, true);
|
123 |
+
@ $data = json_decode($data[self::FIELD_DATA], true);
|
124 |
+
@ $this->body = json_decode($data[self::FIELD_BODY], true);
|
125 |
+
return $this;
|
126 |
+
}
|
127 |
+
|
128 |
+
|
129 |
+
|
130 |
+
/**
|
131 |
+
* Set secret key.
|
132 |
+
*
|
133 |
+
* @param string $secretKey
|
134 |
+
* @return RublonSignatureWrapper
|
135 |
+
*/
|
136 |
+
public function setSecretKey($secretKey) {
|
137 |
+
$this->secretKey = $secretKey;
|
138 |
+
return $this;
|
139 |
+
}
|
140 |
+
|
141 |
+
|
142 |
+
/**
|
143 |
+
* Set body of data.
|
144 |
+
*
|
145 |
+
* @param array $body
|
146 |
+
* @return RublonSignatureWrapper
|
147 |
+
*/
|
148 |
+
public function setBody($body) {
|
149 |
+
$this->body = $body;
|
150 |
+
return $this;
|
151 |
+
}
|
152 |
+
|
153 |
+
|
154 |
+
/**
|
155 |
+
* Get body data.
|
156 |
+
*
|
157 |
+
* @return array
|
158 |
+
*/
|
159 |
+
public function getBody() {
|
160 |
+
return $this->body;
|
161 |
+
}
|
162 |
+
|
163 |
+
/**
|
164 |
+
* Get wrapper with data and signature generated from body.
|
165 |
+
*
|
166 |
+
* @return array
|
167 |
+
*/
|
168 |
+
public function getWrapper() {
|
169 |
+
return self::wrap($this->secretKey, $this->body);
|
170 |
+
}
|
171 |
+
|
172 |
+
|
173 |
+
|
174 |
+
|
175 |
+
|
176 |
+
// ------------------------------------------------------------------------------------------------------------------------------
|
177 |
+
// Static methods
|
178 |
+
// ------------------------------------------------------------------------------------------------------------------------------
|
179 |
+
|
180 |
+
|
181 |
+
/**
|
182 |
+
* Verify data by signature and secret key.
|
183 |
+
*
|
184 |
+
* @param mixed $data Data to sign
|
185 |
+
* @param string $secretKey Secret key used to create the signature
|
186 |
+
* @param string $sign Computed signature
|
187 |
+
* @return bool
|
188 |
+
*/
|
189 |
+
public static function verifyData($data, $secretKey, $sign) {
|
190 |
+
$dataSign = self::signData($data, $secretKey);
|
191 |
+
return ($dataSign == $sign);
|
192 |
+
}
|
193 |
+
|
194 |
+
|
195 |
+
|
196 |
+
|
197 |
+
/**
|
198 |
+
* Sign data by secret key.
|
199 |
+
*
|
200 |
+
* @param string $data Data to sign
|
201 |
+
* @param string $secretKey Secret key to create the signature
|
202 |
+
* @return string
|
203 |
+
*/
|
204 |
+
public static function signData($data, $secretKey) {
|
205 |
+
return hash_hmac(self::HASH_ALG, $data, $secretKey);
|
206 |
+
}
|
207 |
+
|
208 |
+
|
209 |
+
|
210 |
+
/**
|
211 |
+
* Wrap string message into wrapper with signature.
|
212 |
+
*
|
213 |
+
* @param string $secretKey Secret key used to create a signature
|
214 |
+
* @param string|array $body Body of the message
|
215 |
+
* @return array Wrapper with signature and data fields (data is JSON with head and body fields)
|
216 |
+
*/
|
217 |
+
public static function wrap($secretKey, $body) {
|
218 |
+
|
219 |
+
if (!is_string($body)) $body = json_encode($body);
|
220 |
+
|
221 |
+
$data = array();
|
222 |
+
|
223 |
+
$data[self::FIELD_HEAD] = array(
|
224 |
+
self::FIELD_HEAD_SIZE => strlen($body),
|
225 |
+
self::FIELD_HEAD_TIME => time(),
|
226 |
+
);
|
227 |
+
$data[self::FIELD_BODY] = $body;
|
228 |
+
|
229 |
+
$data = json_encode($data);
|
230 |
+
|
231 |
+
return array(
|
232 |
+
self::FIELD_DATA => $data,
|
233 |
+
self::FIELD_SIGN => self::signData($data, $secretKey),
|
234 |
+
);
|
235 |
+
|
236 |
+
}
|
237 |
+
|
238 |
+
|
239 |
+
|
240 |
+
/**
|
241 |
+
* Parse signed message.
|
242 |
+
*
|
243 |
+
* @throws Exception
|
244 |
+
* @param mixed $jsonStr
|
245 |
+
* @param string $secretKey
|
246 |
+
* @param array $config
|
247 |
+
* @return mixed
|
248 |
+
*/
|
249 |
+
static function parseMessage($jsonStr, $secretKey, $config = array()) {
|
250 |
+
|
251 |
+
if (empty($secretKey)) {
|
252 |
+
throw new RublonException('Empty secret');
|
253 |
+
}
|
254 |
+
if (empty($jsonStr)) {
|
255 |
+
throw new RublonException('Empty response', RublonException::CODE_INVALID_RESPONSE);
|
256 |
+
}
|
257 |
+
|
258 |
+
// Verify response JSON
|
259 |
+
$response = json_decode($jsonStr, true);
|
260 |
+
if (empty($response)) {
|
261 |
+
throw new RublonException('Invalid response: '. $jsonStr, RublonException::CODE_INVALID_RESPONSE);
|
262 |
+
}
|
263 |
+
if (!empty($response[self::FIELD_STATUS]) AND $response[self::FIELD_STATUS] == self::STATUS_ERROR) {
|
264 |
+
$msg = isset($response[self::FIELD_MSG]) ? $response[self::FIELD_STATUS] : 'Error response: '. $jsonStr;
|
265 |
+
throw new RublonException($msg, RublonException::CODE_INVALID_RESPONSE);
|
266 |
+
}
|
267 |
+
if (empty($response[self::FIELD_DATA])) {
|
268 |
+
throw new RublonException('Missing data field', RublonException::CODE_INVALID_RESPONSE);
|
269 |
+
}
|
270 |
+
if (empty($response[self::FIELD_SIGN])) {
|
271 |
+
throw new RublonException('Missing sign field', RublonException::CODE_INVALID_RESPONSE);
|
272 |
+
}
|
273 |
+
if (!RublonSignatureWrapper::verifyData($response[self::FIELD_DATA], $secretKey, $response[self::FIELD_SIGN])) {
|
274 |
+
throw new RublonException('Invalid signature', RublonException::CODE_INVALID_RESPONSE);
|
275 |
+
}
|
276 |
+
|
277 |
+
// Verify data field
|
278 |
+
$data = json_decode($response[self::FIELD_DATA], true);
|
279 |
+
if (empty($data) OR !is_array($data)) {
|
280 |
+
throw new RublonException('Invalid response', RublonException::CODE_INVALID_RESPONSE);
|
281 |
+
}
|
282 |
+
if (!isset($data[self::FIELD_HEAD]) OR !is_array($data[self::FIELD_HEAD]) OR empty($data[self::FIELD_HEAD])) {
|
283 |
+
throw new RublonException('Invalid response data (invalid header)', RublonException::CODE_INVALID_RESPONSE);
|
284 |
+
}
|
285 |
+
|
286 |
+
// Verify head field
|
287 |
+
$head = $data[self::FIELD_HEAD];
|
288 |
+
if (empty($config[self::CONFIG_SKIP_TIME]) AND !(isset($head[self::FIELD_HEAD_TIME]) AND abs(time() - $head[self::FIELD_HEAD_TIME]) <= self::MESSAGE_LIFETIME)) {
|
289 |
+
throw new RublonException('Invalid message time', RublonException::CODE_TIMESTAMP_ERROR);
|
290 |
+
}
|
291 |
+
if (!isset($data[self::FIELD_BODY]) OR !is_string($data[self::FIELD_BODY])) {
|
292 |
+
throw new RublonException('Invalid response data (no body)', RublonException::CODE_INVALID_RESPONSE);
|
293 |
+
}
|
294 |
+
|
295 |
+
// Verify body field
|
296 |
+
$body = json_decode($data[self::FIELD_BODY], true);
|
297 |
+
if (is_array($body) AND !empty($body)) {
|
298 |
+
return $body;
|
299 |
+
} else {
|
300 |
+
return $data[self::FIELD_BODY];
|
301 |
+
}
|
302 |
+
|
303 |
+
}
|
304 |
+
|
305 |
+
|
306 |
+
|
307 |
+
|
308 |
+
/**
|
309 |
+
* Generate random string.
|
310 |
+
*
|
311 |
+
* @param int $len (optional)
|
312 |
+
* @return string
|
313 |
+
*/
|
314 |
+
static public function generateRandomString($len = 100) {
|
315 |
+
$chars = '1234567890qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM';
|
316 |
+
$max = strlen($chars) - 1;
|
317 |
+
$result = '';
|
318 |
+
for ($i=0; $i<$len; $i++) {
|
319 |
+
$result .= $chars[mt_rand(0, $max)];
|
320 |
+
}
|
321 |
+
return $result;
|
322 |
+
}
|
323 |
+
|
324 |
+
|
325 |
+
}
|
app/code/community/Rublon/RublonModule/lib/RublonConsumerRegistration/RublonConsumerRegistration.php
ADDED
@@ -0,0 +1,440 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* 2013 Rublon
|
4 |
+
*
|
5 |
+
* NOTICE OF LICENSE
|
6 |
+
*
|
7 |
+
* This source file is subject to the Academic Free License (AFL 3.0)
|
8 |
+
* that is bundled with this package in the file LICENSE.txt.
|
9 |
+
* It is also available through the world-wide-web at this URL:
|
10 |
+
* http://opensource.org/licenses/afl-3.0.php
|
11 |
+
* If you did not receive a copy of the license and are unable to
|
12 |
+
* obtain it through the world-wide-web, please send an email
|
13 |
+
* to license@prestashop.com so we can send you a copy immediately.
|
14 |
+
*
|
15 |
+
* DISCLAIMER
|
16 |
+
*
|
17 |
+
* Do not edit or add to this file if you wish to upgrade Rublon to newer
|
18 |
+
* versions in the future. If you wish to customize Rublon for your
|
19 |
+
* needs please contact us at support@rublon.com for more information.
|
20 |
+
*
|
21 |
+
* @author Rublon <support@rublon.com>
|
22 |
+
* @copyright 2013 Adips
|
23 |
+
* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
|
24 |
+
* Property of Adips Sp. z o. o., Poland
|
25 |
+
*/
|
26 |
+
|
27 |
+
require_once 'RublonConsumerRegistrationTemplate.php';
|
28 |
+
|
29 |
+
class RublonConsumerRegistration extends RublonConsumerRegistrationTemplate {
|
30 |
+
|
31 |
+
|
32 |
+
/**
|
33 |
+
* Final method when registration process was successful
|
34 |
+
*
|
35 |
+
* Clean some variables.
|
36 |
+
* Update Rublon using 'systemToken' and 'secretKey' from
|
37 |
+
* successfully registered project and to Rublon setting
|
38 |
+
* page
|
39 |
+
*
|
40 |
+
* @return void
|
41 |
+
*/
|
42 |
+
protected function finalSuccess() {
|
43 |
+
|
44 |
+
parent::finalSuccess();
|
45 |
+
|
46 |
+
$adminProfileId = $this->getAdminProfileId();
|
47 |
+
$this->updateRublonSettings();
|
48 |
+
|
49 |
+
$currentUser = Context::getContext()->employee->id;;
|
50 |
+
if (!empty($adminProfileId) && !RublonHelper::isUserProtected($currentUser))
|
51 |
+
$success = RublonHelper::connectRublon2Factor($currentUser, $adminProfileId);
|
52 |
+
|
53 |
+
if ($success) {
|
54 |
+
$updateMessage = 'PLUGIN_REGISTERED';
|
55 |
+
RublonHelper::setMessage($updateMessage, 'updated', 'CR');
|
56 |
+
} else {
|
57 |
+
$errorCode = 'PLUGIN_REGISTERED_NO_PROTECTION';
|
58 |
+
RublonHelper::setMessage($errorCode, 'error', 'CR');
|
59 |
+
}
|
60 |
+
|
61 |
+
// send module's meta info
|
62 |
+
$moduleMeta = RublonHelper::prepareModuleMeta();
|
63 |
+
$moduleMeta['action'] = 'activation';
|
64 |
+
RublonHelper::moduleHistoryRequest($moduleMeta);
|
65 |
+
|
66 |
+
$this->_redirect(RublonHelper::getCRReturnPage());
|
67 |
+
}
|
68 |
+
|
69 |
+
/**
|
70 |
+
* Final method when registration process was failed
|
71 |
+
*
|
72 |
+
* Clean some variables.
|
73 |
+
* Set an error message, an redirect to Rublon setting
|
74 |
+
* page
|
75 |
+
*
|
76 |
+
* @param string $msg
|
77 |
+
* @return void
|
78 |
+
*/
|
79 |
+
protected function finalError($msg = NULL) {
|
80 |
+
|
81 |
+
parent::finalError($msg);
|
82 |
+
|
83 |
+
if (!$msg)
|
84 |
+
$msg = $this->_get('error');
|
85 |
+
|
86 |
+
$errorCode = 'API_ERROR';
|
87 |
+
if (!empty($msg)) {
|
88 |
+
if (stripos($msg, 'ERROR_CODE:') !== false) {
|
89 |
+
$errorCode = str_replace('ERROR_CODE: ', '', $msg);
|
90 |
+
}
|
91 |
+
}
|
92 |
+
RublonHelper::setMessage($errorCode, 'error', 'CR');
|
93 |
+
|
94 |
+
$this->_redirect(RublonHelper::getRublonModuleLink());
|
95 |
+
|
96 |
+
}
|
97 |
+
|
98 |
+
|
99 |
+
/**
|
100 |
+
* Check whether user authenticated in current session can
|
101 |
+
* perform administrative operations such as registering
|
102 |
+
* the Rublon module.
|
103 |
+
*
|
104 |
+
* @return bool
|
105 |
+
*/
|
106 |
+
protected function isUserAuthorized() {
|
107 |
+
return Context::getContext()->employee->isLoggedBack();
|
108 |
+
}
|
109 |
+
|
110 |
+
/**
|
111 |
+
* Returns local-stored system token or NULL if empty.
|
112 |
+
*
|
113 |
+
* @return string/null
|
114 |
+
*/
|
115 |
+
protected function getSystemToken() {
|
116 |
+
$config = $this->getConfig();
|
117 |
+
return (isset($config['system_token']) ? $config['system_token'] : NULL);
|
118 |
+
}
|
119 |
+
|
120 |
+
/**
|
121 |
+
* Save system token to the local storage
|
122 |
+
*
|
123 |
+
* Returns true/false on success/failure.
|
124 |
+
*
|
125 |
+
* @param string $systemToken
|
126 |
+
* @return bool
|
127 |
+
*/
|
128 |
+
protected function saveSystemToken($systemToken) {
|
129 |
+
$config = $this->getConfig();
|
130 |
+
$config['system_token'] = $systemToken;
|
131 |
+
|
132 |
+
return $this->_saveConfig($config);
|
133 |
+
}
|
134 |
+
|
135 |
+
|
136 |
+
/**
|
137 |
+
* Save profileId of the admin who activated the plugin
|
138 |
+
*
|
139 |
+
* @param int $profileId
|
140 |
+
*/
|
141 |
+
protected function handleProfileId($profileId) {
|
142 |
+
|
143 |
+
$config = $this->getConfig();
|
144 |
+
$config['admin_profile_id'] = $profileId;
|
145 |
+
return $this->_saveConfig($config);
|
146 |
+
|
147 |
+
}
|
148 |
+
|
149 |
+
|
150 |
+
/**
|
151 |
+
* Return profileId of the admin who activated the plugin, if it was received
|
152 |
+
*
|
153 |
+
* @return string
|
154 |
+
*/
|
155 |
+
protected function getAdminProfileId() {
|
156 |
+
|
157 |
+
$config = $this->getConfig();
|
158 |
+
return (isset($config['admin_profile_id'])) ? $config['admin_profile_id'] : NULL;
|
159 |
+
|
160 |
+
}
|
161 |
+
|
162 |
+
|
163 |
+
/**
|
164 |
+
* Return local-stored secret key or NULL if empty.
|
165 |
+
*
|
166 |
+
* @return string/null
|
167 |
+
*/
|
168 |
+
protected function getSecretKey() {
|
169 |
+
$config = $this->getConfig();
|
170 |
+
return (isset($config['secret_key']) ? $config['secret_key'] : NULL);
|
171 |
+
}
|
172 |
+
|
173 |
+
/**
|
174 |
+
* Save secret key to the local storage
|
175 |
+
*
|
176 |
+
* Returns true/false on success/failure.
|
177 |
+
*
|
178 |
+
* @param string $secretKey
|
179 |
+
* @return bool
|
180 |
+
*/
|
181 |
+
protected function saveSecretKey($secretKey) {
|
182 |
+
$config = $this->getConfig();
|
183 |
+
$config['secret_key'] = $secretKey;
|
184 |
+
return $this->_saveConfig($config);
|
185 |
+
}
|
186 |
+
|
187 |
+
/**
|
188 |
+
* Returns local-stored temporary key or NULL if empty.
|
189 |
+
* Temporary key is used to sign communication with API instead of secret key which is not given.
|
190 |
+
*
|
191 |
+
* @return string
|
192 |
+
*/
|
193 |
+
protected function getTempKey() {
|
194 |
+
$config = $this->getConfig();
|
195 |
+
return (isset($config['temp_key']) ? $config['temp_key'] : NULL);
|
196 |
+
}
|
197 |
+
|
198 |
+
/**
|
199 |
+
* Save temporary key to the local storage
|
200 |
+
*
|
201 |
+
* Returns true/false on success/failure.
|
202 |
+
*
|
203 |
+
* @param string $tempKey
|
204 |
+
* @return bool
|
205 |
+
*/
|
206 |
+
protected function saveTempKey($tempKey) {
|
207 |
+
$config = $this->getConfig();
|
208 |
+
$config['temp_key'] = $tempKey;
|
209 |
+
return $this->_saveConfig($config['rublon']);
|
210 |
+
}
|
211 |
+
|
212 |
+
/**
|
213 |
+
* Save given temporary key and process start time into local storage.
|
214 |
+
*
|
215 |
+
* Returns true/false on success/failure.
|
216 |
+
*
|
217 |
+
* @param string $tempKey
|
218 |
+
* @param int $startTime
|
219 |
+
* @return bool
|
220 |
+
*/
|
221 |
+
protected function saveInitialParameters($tempKey, $startTime) {
|
222 |
+
$config = $this->getConfig();
|
223 |
+
$config['temp_key'] = $tempKey;
|
224 |
+
$config['start_time'] = $startTime;
|
225 |
+
|
226 |
+
return $this->_saveConfig($config);
|
227 |
+
}
|
228 |
+
|
229 |
+
/**
|
230 |
+
* Return local-stored start time of the process or NULL if empty.
|
231 |
+
* Start time is used to validate lifetime of the process.
|
232 |
+
*
|
233 |
+
* @return int/null
|
234 |
+
*/
|
235 |
+
protected function getStartTime() {
|
236 |
+
$config = $this->getConfig();
|
237 |
+
return (isset($config['start_time']) ? $config['start_time'] : NULL);
|
238 |
+
}
|
239 |
+
|
240 |
+
/**
|
241 |
+
* Get the communication URL of this Rublon module
|
242 |
+
*
|
243 |
+
* Returns public URL address of the communication script.
|
244 |
+
* API server calls the communication URL to communicate with local system by REST or browser redirections.
|
245 |
+
* The communication URL is supplied to the API during initialization.
|
246 |
+
*
|
247 |
+
* @return string
|
248 |
+
*/
|
249 |
+
protected function getCommunicationUrl() {
|
250 |
+
|
251 |
+
return $this->_getRublonActionUrl('register');
|
252 |
+
|
253 |
+
}
|
254 |
+
|
255 |
+
/**
|
256 |
+
* Get project's public webroot URL address
|
257 |
+
*
|
258 |
+
* Returns the main project URL address needful for registration consumer in API.
|
259 |
+
*
|
260 |
+
* @return string
|
261 |
+
*/
|
262 |
+
protected function getProjectUrl() {
|
263 |
+
return RublonHelper::getProjectUrl();
|
264 |
+
|
265 |
+
}
|
266 |
+
|
267 |
+
/**
|
268 |
+
* Get the callback URL of this Rublon module
|
269 |
+
*
|
270 |
+
* Returns public URL address of the Rublon consumer's callback script.
|
271 |
+
* API server calls the callback URL after valid authentication.
|
272 |
+
* The callback URL is needful for registration consumer in API.
|
273 |
+
*
|
274 |
+
* @return string
|
275 |
+
*/
|
276 |
+
protected function getCallbackUrl() {
|
277 |
+
|
278 |
+
return $this->_getRublonActionUrl('callback');
|
279 |
+
|
280 |
+
}
|
281 |
+
|
282 |
+
|
283 |
+
/**
|
284 |
+
* Prepare the URL for executing Rublon actions
|
285 |
+
*
|
286 |
+
* @param string $action Action to be passed in the URL via GET
|
287 |
+
*/
|
288 |
+
private function _getRublonActionUrl($action) {
|
289 |
+
|
290 |
+
$rublonActionUrl = RublonHelper::getProjectUrl();
|
291 |
+
if (strpos($rublonActionUrl, '?') !== false)
|
292 |
+
$rublonActionUrl .= 'controller=' . RublonHelper::getControllerName() . '&';
|
293 |
+
else
|
294 |
+
$rublonActionUrl .= '?controller=' . RublonHelper::getControllerName() . '&';
|
295 |
+
$rublonActionUrl .= 'rublon='.$action;
|
296 |
+
return $rublonActionUrl;
|
297 |
+
|
298 |
+
}
|
299 |
+
|
300 |
+
/**
|
301 |
+
* Save a given data in a local-stored configuration.
|
302 |
+
*
|
303 |
+
* @param array $data
|
304 |
+
* @return bool
|
305 |
+
*/
|
306 |
+
protected function _saveConfig($data) {
|
307 |
+
if (!is_array($data)) $data = array();
|
308 |
+
|
309 |
+
Configuration::updateValue('RUBLON_CONF', serialize($data));
|
310 |
+
|
311 |
+
return !empty($data)?true:false;
|
312 |
+
}
|
313 |
+
|
314 |
+
/**
|
315 |
+
* Sets the API domain for testing
|
316 |
+
*
|
317 |
+
* @param string $domain API domain
|
318 |
+
*/
|
319 |
+
public function setDomain($domain) {
|
320 |
+
$this->apiDomain = $domain;
|
321 |
+
}
|
322 |
+
|
323 |
+
/**
|
324 |
+
* Returns the API domain
|
325 |
+
*
|
326 |
+
* @return string
|
327 |
+
*/
|
328 |
+
public function getDomain() {
|
329 |
+
return $this->apiDomain;
|
330 |
+
}
|
331 |
+
|
332 |
+
/**
|
333 |
+
* Returns the consumer registration URL
|
334 |
+
*
|
335 |
+
* @return string
|
336 |
+
*/
|
337 |
+
public function getActionUrl() {
|
338 |
+
return $this->actionUrl;
|
339 |
+
}
|
340 |
+
|
341 |
+
/**
|
342 |
+
* Get a local-stored configuration.
|
343 |
+
*
|
344 |
+
* @return array
|
345 |
+
*/
|
346 |
+
private function getConfig() {
|
347 |
+
$config = unserialize(Configuration::get('RUBLON_CONF'));
|
348 |
+
return (isset($config)) ? $config : array();
|
349 |
+
}
|
350 |
+
|
351 |
+
|
352 |
+
/**
|
353 |
+
* Clear any temporary config data
|
354 |
+
*
|
355 |
+
*/
|
356 |
+
private function _clearConfig() {
|
357 |
+
$config = $this->getConfig();
|
358 |
+
unset($config['temp_key']);
|
359 |
+
unset($config['start_time']);
|
360 |
+
$this->_saveConfig($config);
|
361 |
+
}
|
362 |
+
|
363 |
+
|
364 |
+
/**
|
365 |
+
* Update Rublon plugin settings using 'systemToken' and 'secretKey' from
|
366 |
+
* successfully registered project
|
367 |
+
*/
|
368 |
+
private function updateRublonSettings() {
|
369 |
+
|
370 |
+
$settings = $this->getConfig();
|
371 |
+
$settings['system_token'] = $this->getSystemToken();
|
372 |
+
$settings['secret_key'] = $this->getSecretKey();
|
373 |
+
$this->_clearConfig();
|
374 |
+
|
375 |
+
$this->_saveConfig($settings);
|
376 |
+
|
377 |
+
}
|
378 |
+
|
379 |
+
/**
|
380 |
+
* Get project's additional data
|
381 |
+
*
|
382 |
+
* Adds additional project data related to WordPress
|
383 |
+
* blog's description, plugin's current version and
|
384 |
+
* blog's language.
|
385 |
+
*
|
386 |
+
* @return array
|
387 |
+
*/
|
388 |
+
protected function getProjectData() {
|
389 |
+
|
390 |
+
$projectData = parent::getProjectData();
|
391 |
+
$projectData['project-description'] = Configuration::get('PS_SHOP_NAME');
|
392 |
+
$projectData['plugin-version'] = Mage::helper('rublonhelper')->getModuleVersion();
|
393 |
+
$projectData['lang-code'] = Mage::helper('rublonhelper')->getLang();
|
394 |
+
return $projectData;
|
395 |
+
|
396 |
+
}
|
397 |
+
|
398 |
+
|
399 |
+
/**
|
400 |
+
* Get name of the project
|
401 |
+
*
|
402 |
+
* Returns name of the project that will be set in Rublon Developers Dashboard.
|
403 |
+
*
|
404 |
+
* @return string
|
405 |
+
*/
|
406 |
+
protected function getProjectName() {
|
407 |
+
|
408 |
+
return Configuration::get('PS_SHOP_NAME');
|
409 |
+
|
410 |
+
}
|
411 |
+
|
412 |
+
|
413 |
+
/**
|
414 |
+
* Get project's technology
|
415 |
+
*
|
416 |
+
* Returns technology, module or library name to set in project.
|
417 |
+
*
|
418 |
+
* @return string
|
419 |
+
*/
|
420 |
+
protected function getProjectTechnology() {
|
421 |
+
|
422 |
+
return RublonHelper::getTechnology();
|
423 |
+
|
424 |
+
}
|
425 |
+
|
426 |
+
|
427 |
+
/**
|
428 |
+
* Redirect to the given URL
|
429 |
+
*
|
430 |
+
* @param string $url
|
431 |
+
* @return void
|
432 |
+
*/
|
433 |
+
protected function _redirect($url) {
|
434 |
+
|
435 |
+
Tools::redirectAdmin($url);
|
436 |
+
|
437 |
+
}
|
438 |
+
|
439 |
+
|
440 |
+
}
|
app/code/community/Rublon/RublonModule/lib/RublonConsumerRegistration/RublonConsumerRegistrationCommon.php
ADDED
@@ -0,0 +1,284 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
abstract class RublonConsumerRegistrationCommon {
|
4 |
+
|
5 |
+
/**
|
6 |
+
* Library version date.
|
7 |
+
*/
|
8 |
+
const VERSION = '2014-05-20';
|
9 |
+
|
10 |
+
/**
|
11 |
+
* Default registration API domain.
|
12 |
+
*/
|
13 |
+
const DEFAULT_API_DOMAIN = 'https://developers.rublon.com';
|
14 |
+
|
15 |
+
/**
|
16 |
+
* URL path for API methods.
|
17 |
+
*/
|
18 |
+
const URL_PATH_ACTION = '/consumers_registration';
|
19 |
+
|
20 |
+
/**
|
21 |
+
* Field name for the system token.
|
22 |
+
*/
|
23 |
+
const FIELD_SYSTEM_TOKEN = 'systemToken';
|
24 |
+
|
25 |
+
/**
|
26 |
+
* Field name for the secret key.
|
27 |
+
*/
|
28 |
+
const FIELD_SECRET_KEY = 'secretKey';
|
29 |
+
|
30 |
+
|
31 |
+
/**
|
32 |
+
* Field name for the library version.
|
33 |
+
*/
|
34 |
+
const FIELD_LIB_VERSION = 'libVersion';
|
35 |
+
|
36 |
+
/**
|
37 |
+
* Field name for the project name.
|
38 |
+
*/
|
39 |
+
const FIELD_PROJECT_NAME = 'projectName';
|
40 |
+
|
41 |
+
/**
|
42 |
+
* Field name for the additional project data.
|
43 |
+
*/
|
44 |
+
const FIELD_PROJECT_DATA = 'projectData';
|
45 |
+
|
46 |
+
/**
|
47 |
+
* Field name for the project technology.
|
48 |
+
*/
|
49 |
+
const FIELD_PROJECT_TECHNOLOGY = 'projectTechnology';
|
50 |
+
|
51 |
+
/**
|
52 |
+
* Field name for the project URL.
|
53 |
+
*/
|
54 |
+
const FIELD_PROJECT_URL = 'projectUrl';
|
55 |
+
|
56 |
+
/**
|
57 |
+
* Field name for the project's callback URL.
|
58 |
+
*/
|
59 |
+
const FIELD_PROJECT_CALLBACK_URL = 'callbackUrl';
|
60 |
+
|
61 |
+
/**
|
62 |
+
* Length of the secret key.
|
63 |
+
*/
|
64 |
+
const SECRET_KEY_LENGTH = 100;
|
65 |
+
|
66 |
+
/**
|
67 |
+
* Field name for the user's ID.
|
68 |
+
*/
|
69 |
+
const FIELD_USER_ID = 'userId';
|
70 |
+
|
71 |
+
/**
|
72 |
+
* Field name for the user's email address.
|
73 |
+
*/
|
74 |
+
const FIELD_USER_EMAIL_HASH = 'userEmailHash';
|
75 |
+
|
76 |
+
const FIELD_PARTNER_KEY = 'partnerKey';
|
77 |
+
|
78 |
+
|
79 |
+
|
80 |
+
// Common technology flags
|
81 |
+
const TECHNOLOGY_PHP_SDK = 'rublon-php-sdk';
|
82 |
+
const TECHNOLOGY_OTHER = 'other';
|
83 |
+
|
84 |
+
|
85 |
+
protected $APIClient = null;
|
86 |
+
|
87 |
+
|
88 |
+
|
89 |
+
public function __construct() {}
|
90 |
+
|
91 |
+
|
92 |
+
/**
|
93 |
+
* Get registration API domain.
|
94 |
+
*
|
95 |
+
* @return string
|
96 |
+
*/
|
97 |
+
protected function getAPIDomain() {
|
98 |
+
return self::DEFAULT_API_DOMAIN;
|
99 |
+
}
|
100 |
+
|
101 |
+
|
102 |
+
/**
|
103 |
+
* Perform a HTTP request.
|
104 |
+
*
|
105 |
+
* @param string $url
|
106 |
+
* @param array $params
|
107 |
+
* @return array
|
108 |
+
*/
|
109 |
+
protected function request($url, array $params = array()) {
|
110 |
+
$client = $this->getAPIClient();
|
111 |
+
try {
|
112 |
+
return $client
|
113 |
+
->setRequestUrl($url)
|
114 |
+
->setRequestParams($params)
|
115 |
+
->perform()
|
116 |
+
->getResponse();
|
117 |
+
} catch (Exception $e) {
|
118 |
+
throw $e;
|
119 |
+
}
|
120 |
+
}
|
121 |
+
|
122 |
+
|
123 |
+
/**
|
124 |
+
* Get API client instance.
|
125 |
+
*
|
126 |
+
* @return RublonAPIClient
|
127 |
+
*/
|
128 |
+
protected function getAPIClient() {
|
129 |
+
if (empty($this->APIClient)) {
|
130 |
+
$this->APIClient = new RublonAPIClient($this->getRublon());
|
131 |
+
}
|
132 |
+
return $this->APIClient;
|
133 |
+
}
|
134 |
+
|
135 |
+
|
136 |
+
/**
|
137 |
+
* Get project's additional data.
|
138 |
+
*
|
139 |
+
* The data returned will be used upon consumer's registration
|
140 |
+
* and are required. If any additional data is needed,
|
141 |
+
* this method may be overwritten.
|
142 |
+
*
|
143 |
+
* @return string
|
144 |
+
*/
|
145 |
+
protected function getProjectData() {
|
146 |
+
return array(
|
147 |
+
self::FIELD_PROJECT_NAME => $this->getProjectName(),
|
148 |
+
self::FIELD_PROJECT_TECHNOLOGY => $this->getProjectTechnology(),
|
149 |
+
self::FIELD_USER_ID => $this->getUserId(),
|
150 |
+
self::FIELD_USER_EMAIL_HASH => self::hash($this->getUserEmail()),
|
151 |
+
self::FIELD_LIB_VERSION => self::VERSION,
|
152 |
+
self::FIELD_PROJECT_CALLBACK_URL => $this->getCallbackUrl(),
|
153 |
+
self::FIELD_PROJECT_URL => $this->getProjectUrl(),
|
154 |
+
);
|
155 |
+
}
|
156 |
+
|
157 |
+
|
158 |
+
/**
|
159 |
+
* Hash value.
|
160 |
+
*
|
161 |
+
* @param string $val
|
162 |
+
* @return string
|
163 |
+
*/
|
164 |
+
protected static function hash($val) {
|
165 |
+
return hash(RublonAPIClient::HASH_ALG, strtolower($val));
|
166 |
+
}
|
167 |
+
|
168 |
+
|
169 |
+
/**
|
170 |
+
* Save system token to the local storage.
|
171 |
+
*
|
172 |
+
* Save given system token into local storage.
|
173 |
+
* Note that parameter must be available for different browsers
|
174 |
+
* and IPs so cannot be stored in browser sesssion,
|
175 |
+
* but in database or configuration file.
|
176 |
+
*
|
177 |
+
* Returns true/false on success/failure.
|
178 |
+
*
|
179 |
+
* @param string $systemToken
|
180 |
+
* @return bool
|
181 |
+
* @abstract
|
182 |
+
*/
|
183 |
+
abstract protected function saveSystemToken($systemToken);
|
184 |
+
|
185 |
+
/**
|
186 |
+
* Save secret key to the local storage.
|
187 |
+
*
|
188 |
+
* Save given secret key into local storage.
|
189 |
+
* Note that parameter must be available for different browsers
|
190 |
+
* and IPs so cannot be stored in browser sesssion,
|
191 |
+
* but in database or configuration file.
|
192 |
+
*
|
193 |
+
* Returns true/false on success/failure.
|
194 |
+
*
|
195 |
+
* @param string $systemToken
|
196 |
+
* @return bool
|
197 |
+
* @abstract
|
198 |
+
*/
|
199 |
+
abstract protected function saveSecretKey($secretKey);
|
200 |
+
|
201 |
+
/**
|
202 |
+
* Get temporary key from local storage.
|
203 |
+
*
|
204 |
+
* Returns local-stored temporary key or NULL if empty.
|
205 |
+
* Temporary key is used to sign communication with API
|
206 |
+
* instead of secret key which is not given.
|
207 |
+
* Note that parameter must be available for different browsers
|
208 |
+
* and IPs so cannot be stored in browser sesssion,
|
209 |
+
* but in database or configuration file.
|
210 |
+
*
|
211 |
+
* @return string
|
212 |
+
*/
|
213 |
+
abstract protected function getTempKey();
|
214 |
+
|
215 |
+
|
216 |
+
/**
|
217 |
+
* Get project's public webroot URL address.
|
218 |
+
*
|
219 |
+
* Returns the main project URL address needful
|
220 |
+
* for registration consumer in API.
|
221 |
+
*
|
222 |
+
* @return string
|
223 |
+
* @abstract
|
224 |
+
*/
|
225 |
+
abstract protected function getProjectUrl();
|
226 |
+
|
227 |
+
/**
|
228 |
+
* Get the callback URL of this Rublon module.
|
229 |
+
*
|
230 |
+
* Returns public URL address of the Rublon consumer's callback script.
|
231 |
+
* API server calls the callback URL after valid authentication.
|
232 |
+
* The callback URL is needful for registration consumer in API.
|
233 |
+
*
|
234 |
+
* @return string
|
235 |
+
* @abstract
|
236 |
+
*/
|
237 |
+
abstract protected function getCallbackUrl();
|
238 |
+
|
239 |
+
|
240 |
+
/**
|
241 |
+
* Get name of the project.
|
242 |
+
*
|
243 |
+
* Returns name of the project that will be set in Rublon Developers Dashboard.
|
244 |
+
*
|
245 |
+
* @return string
|
246 |
+
*/
|
247 |
+
abstract protected function getProjectName();
|
248 |
+
|
249 |
+
|
250 |
+
|
251 |
+
/**
|
252 |
+
* Get project's technology.
|
253 |
+
*
|
254 |
+
* Returns technology, module or library name to set in project.
|
255 |
+
*
|
256 |
+
* @return string
|
257 |
+
*/
|
258 |
+
abstract protected function getProjectTechnology();
|
259 |
+
|
260 |
+
|
261 |
+
/**
|
262 |
+
* Get Rublon2Factor class instance.
|
263 |
+
*
|
264 |
+
* @return Rublon2Factor
|
265 |
+
*/
|
266 |
+
abstract protected function getRublon();
|
267 |
+
|
268 |
+
/**
|
269 |
+
* Get current user's ID.
|
270 |
+
*
|
271 |
+
* @return string
|
272 |
+
*/
|
273 |
+
abstract protected function getUserId();
|
274 |
+
|
275 |
+
|
276 |
+
/**
|
277 |
+
* Get current user's email.
|
278 |
+
*
|
279 |
+
* @return string
|
280 |
+
*/
|
281 |
+
abstract protected function getUserEmail();
|
282 |
+
|
283 |
+
|
284 |
+
}
|
app/code/community/Rublon/RublonModule/lib/RublonConsumerRegistration/RublonConsumerRegistrationTemplate.php
ADDED
@@ -0,0 +1,463 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
require_once dirname(__FILE__) . '/RublonConsumerRegistrationCommon.php';
|
4 |
+
|
5 |
+
/**
|
6 |
+
* Template method pattern abstract class to perform quick registration of the Rublon module.
|
7 |
+
*
|
8 |
+
* Class provides main methods for communication with module registration API.
|
9 |
+
*
|
10 |
+
*/
|
11 |
+
abstract class RublonConsumerRegistrationTemplate extends RublonConsumerRegistrationCommon {
|
12 |
+
|
13 |
+
|
14 |
+
/**
|
15 |
+
* Action to initialize process.
|
16 |
+
*/
|
17 |
+
const ACTION_INITIALIZE = 'initialize';
|
18 |
+
|
19 |
+
/**
|
20 |
+
* Action to update system token.
|
21 |
+
*/
|
22 |
+
const ACTION_UPDATE_SYSTEM_TOKEN = 'update_system_token';
|
23 |
+
|
24 |
+
/**
|
25 |
+
* Action to pull the secret key from API.
|
26 |
+
*/
|
27 |
+
const ACTION_PULL_SECRET_KEY = 'pull_secret_key';
|
28 |
+
|
29 |
+
/**
|
30 |
+
* Action final success.
|
31 |
+
*/
|
32 |
+
const ACTION_FINAL_SUCCESS = 'final_success';
|
33 |
+
|
34 |
+
/**
|
35 |
+
* Action final error.
|
36 |
+
*/
|
37 |
+
const ACTION_FINAL_ERROR = 'final_error';
|
38 |
+
|
39 |
+
/**
|
40 |
+
* Process lifetime in seconds.
|
41 |
+
*/
|
42 |
+
const PROCESS_LIFETIME = 3600; // seconds
|
43 |
+
|
44 |
+
/**
|
45 |
+
* GET parameter with error code.
|
46 |
+
*/
|
47 |
+
const PARAM_ERROR = 'error';
|
48 |
+
|
49 |
+
/**
|
50 |
+
* GET parameter with error message.
|
51 |
+
*/
|
52 |
+
const PARAM_ERROR_MSG = 'error_msg';
|
53 |
+
|
54 |
+
/**
|
55 |
+
* Field name for the registration's communication URL.
|
56 |
+
*/
|
57 |
+
const FIELD_COMMUNICATION_URL = 'communicationUrl';
|
58 |
+
|
59 |
+
/**
|
60 |
+
* Field name for the temporary secret key.
|
61 |
+
*/
|
62 |
+
const FIELD_TEMP_KEY = 'tempKey';
|
63 |
+
|
64 |
+
/**
|
65 |
+
* Rublon Developers error flag.
|
66 |
+
*/
|
67 |
+
const DEVELOPERS_ERROR = 'developers_error';
|
68 |
+
|
69 |
+
/**
|
70 |
+
* URL path for API methods.
|
71 |
+
*/
|
72 |
+
const URL_PATH_ACTION = '/consumers_registration';
|
73 |
+
|
74 |
+
/**
|
75 |
+
* Template HTML for the POST form.
|
76 |
+
*/
|
77 |
+
const TEMPLATE_FORM_POST = '<form action="%s" method="post" id="RublonConsumerRegistration">
|
78 |
+
%s
|
79 |
+
<script>document.getElementById("RublonConsumerRegistration").submit();</script>
|
80 |
+
<noscript><input type="submit" value="Register" /></noscript>
|
81 |
+
</form>';
|
82 |
+
|
83 |
+
/**
|
84 |
+
* Template HTML for the form's hidden input.
|
85 |
+
*/
|
86 |
+
const TEMPLATE_FORM_INPUT = '<input type="hidden" name="%s" value="%s" />';
|
87 |
+
|
88 |
+
|
89 |
+
// Common technology flags
|
90 |
+
const TECHNOLOGY_PHP_SDK = 'rublon-php-sdk';
|
91 |
+
const TECHNOLOGY_OTHER = 'other';
|
92 |
+
|
93 |
+
|
94 |
+
|
95 |
+
|
96 |
+
|
97 |
+
// --------------------------------------------------------------------------------------------------
|
98 |
+
// The only public method
|
99 |
+
|
100 |
+
|
101 |
+
/**
|
102 |
+
* Action to perform when the communication URL has been invoked.
|
103 |
+
*
|
104 |
+
* @param string $action Action name
|
105 |
+
* @final
|
106 |
+
*/
|
107 |
+
final public function action($action) {
|
108 |
+
switch ($action) {
|
109 |
+
case self::ACTION_INITIALIZE:
|
110 |
+
$this->initialize();
|
111 |
+
break;
|
112 |
+
case self::ACTION_UPDATE_SYSTEM_TOKEN: // Save the system token given for the module
|
113 |
+
$this->updateSystemToken();
|
114 |
+
break;
|
115 |
+
case self::ACTION_FINAL_SUCCESS: // Final success
|
116 |
+
$this->finalSuccess();
|
117 |
+
break;
|
118 |
+
case self::ACTION_FINAL_ERROR: // Final error
|
119 |
+
$this->finalError(self::DEVELOPERS_ERROR);
|
120 |
+
break;
|
121 |
+
}
|
122 |
+
}
|
123 |
+
|
124 |
+
|
125 |
+
|
126 |
+
|
127 |
+
|
128 |
+
// --------------------------------------------------------------------------------------------------
|
129 |
+
// Major protected methods to override
|
130 |
+
|
131 |
+
|
132 |
+
|
133 |
+
/**
|
134 |
+
* Final method when process was successful.
|
135 |
+
*
|
136 |
+
* To return to page and show an message please override this method in subclass.
|
137 |
+
* Don't forget to call the parent method first - it will clean some garbage.
|
138 |
+
*
|
139 |
+
* @return void
|
140 |
+
* @override
|
141 |
+
*/
|
142 |
+
protected function finalSuccess() {
|
143 |
+
if ($this->canUserActivate()) {
|
144 |
+
$this->saveInitialParameters(NULL, NULL);
|
145 |
+
}
|
146 |
+
}
|
147 |
+
|
148 |
+
|
149 |
+
/**
|
150 |
+
* Final method when process was failed.
|
151 |
+
*
|
152 |
+
* To return to page and show an message please override this method in subclass.
|
153 |
+
* Don't forget to call the parent method first - it will clean some garbage.
|
154 |
+
*
|
155 |
+
* @param string $msg
|
156 |
+
* @return void
|
157 |
+
* @override
|
158 |
+
*/
|
159 |
+
protected function finalError($msg = NULL) {
|
160 |
+
if ($this->canUserActivate()) {
|
161 |
+
// $this->saveSystemToken(NULL);
|
162 |
+
// $this->saveSecretKey(NULL);
|
163 |
+
// $this->saveInitialParameters(NULL, NULL);
|
164 |
+
}
|
165 |
+
}
|
166 |
+
|
167 |
+
|
168 |
+
|
169 |
+
// --------------------------------------------------------------------------------------------------
|
170 |
+
// Main actions final protected methods
|
171 |
+
|
172 |
+
|
173 |
+
|
174 |
+
/**
|
175 |
+
* Initialize the module's registration process by generating temporary key.
|
176 |
+
*
|
177 |
+
* @return bool
|
178 |
+
* @final
|
179 |
+
*/
|
180 |
+
final protected function initialize() {
|
181 |
+
if ($this->canUserActivate()) {
|
182 |
+
$tempKey = RublonSignatureWrapper::generateRandomString(self::SECRET_KEY_LENGTH);
|
183 |
+
$this->saveInitialParameters($tempKey, time());
|
184 |
+
$this->stdOut($this->getRegistrationForm());
|
185 |
+
|
186 |
+
} else {
|
187 |
+
throw new UserUnauthorized_RublonConsumerException;
|
188 |
+
}
|
189 |
+
}
|
190 |
+
|
191 |
+
|
192 |
+
|
193 |
+
/**
|
194 |
+
* Update system token.
|
195 |
+
*
|
196 |
+
* Save received by POST system token to local storage
|
197 |
+
* and call the secret key pulling method.
|
198 |
+
* To protect this method, the user have to be authorized
|
199 |
+
* in local system and this must be POST request.
|
200 |
+
*
|
201 |
+
* @return void
|
202 |
+
* @final
|
203 |
+
*/
|
204 |
+
final protected function updateSystemToken() {
|
205 |
+
if ($this->validateGeneral()) {
|
206 |
+
if ($this->canUserActivate()) {
|
207 |
+
try {
|
208 |
+
$systemToken = $this->parseSystemToken($this->inputGET(RublonAuthParams::FIELD_SYSTEM_TOKEN));
|
209 |
+
if (empty($systemToken)) {
|
210 |
+
throw new MissingField_RublonClientException($this->getAPIClient(), self::FIELD_SYSTEM_TOKEN);
|
211 |
+
}
|
212 |
+
} catch (RublonException $e) {
|
213 |
+
throw $e;
|
214 |
+
}
|
215 |
+
$this->saveSystemToken($systemToken);
|
216 |
+
$this->pullSecretKey($systemToken);
|
217 |
+
} else {
|
218 |
+
throw new UserUnauthorized_RublonConsumerException();
|
219 |
+
}
|
220 |
+
} else {
|
221 |
+
throw new InvalidProcess_RublonConsumerException();
|
222 |
+
}
|
223 |
+
}
|
224 |
+
|
225 |
+
|
226 |
+
/**
|
227 |
+
* Pull the secret key from API server.
|
228 |
+
*
|
229 |
+
* Perform REST request to get generated secret key and save it in local storage.
|
230 |
+
* Communication is signed by the temporary key.
|
231 |
+
*
|
232 |
+
* @param string $systemToken
|
233 |
+
* @return void
|
234 |
+
* @final
|
235 |
+
*/
|
236 |
+
final protected function pullSecretKey($systemToken) {
|
237 |
+
if ($this->validateGeneral()) {
|
238 |
+
$response = $this->pullSecretKeyRequest($systemToken);
|
239 |
+
if (!empty($response[RublonAPIClient::FIELD_RESULT][self::FIELD_SECRET_KEY])) {
|
240 |
+
$this->saveSecretKey($response[RublonAPIClient::FIELD_RESULT][self::FIELD_SECRET_KEY]);
|
241 |
+
$this->finalSuccess();
|
242 |
+
} else {
|
243 |
+
throw new MissingField_RublonClientException($this->getAPIClient(), self::FIELD_SECRET_KEY);
|
244 |
+
}
|
245 |
+
} else {
|
246 |
+
throw new InvalidProcess_RublonConsumerException();
|
247 |
+
}
|
248 |
+
}
|
249 |
+
|
250 |
+
|
251 |
+
// --------------------------------------------------------------------------------------------------
|
252 |
+
// Minor protected methods - can be overriden
|
253 |
+
|
254 |
+
|
255 |
+
|
256 |
+
/**
|
257 |
+
* Send string to the standard output.
|
258 |
+
*
|
259 |
+
* If your system have an ususual way to echo strings, override this method in a subclass.
|
260 |
+
*
|
261 |
+
* @param string $str
|
262 |
+
* @return void
|
263 |
+
*/
|
264 |
+
protected function stdOut($str) {
|
265 |
+
echo $str;
|
266 |
+
}
|
267 |
+
|
268 |
+
|
269 |
+
/**
|
270 |
+
* Get GET parameter.
|
271 |
+
*
|
272 |
+
* If your system have an ususual way to get GET parameters, override this method in a subclass.
|
273 |
+
*
|
274 |
+
* @param string $name
|
275 |
+
* @return mixed
|
276 |
+
*/
|
277 |
+
protected function inputGET($name) {
|
278 |
+
return (isset($_GET[$name]) ? $_GET[$name] : NULL);
|
279 |
+
}
|
280 |
+
|
281 |
+
/**
|
282 |
+
* Get POST parameter.
|
283 |
+
*
|
284 |
+
* If your system have an ususual way to get POST parameters, override this method in a subclass.
|
285 |
+
*
|
286 |
+
* @param string $name
|
287 |
+
* @return mixed
|
288 |
+
*/
|
289 |
+
protected function inputPOST($name) {
|
290 |
+
return (isset($_POST[$name]) ? $_POST[$name] : NULL);
|
291 |
+
}
|
292 |
+
|
293 |
+
|
294 |
+
/**
|
295 |
+
* Get the registration form.
|
296 |
+
*
|
297 |
+
* @return string
|
298 |
+
*/
|
299 |
+
protected function getRegistrationForm() {
|
300 |
+
|
301 |
+
$action = $this->getAPIDomain() . self::URL_PATH_ACTION . '/' . self::ACTION_INITIALIZE;
|
302 |
+
$action = htmlspecialchars($action);
|
303 |
+
|
304 |
+
$content = $this->getInputHidden(self::FIELD_PROJECT_URL, $this->getProjectUrl())
|
305 |
+
. $this->getInputHidden(self::FIELD_PROJECT_CALLBACK_URL, $this->getCallbackUrl())
|
306 |
+
. $this->getInputHidden(self::FIELD_PROJECT_DATA, json_encode($this->getProjectData()))
|
307 |
+
. $this->getInputHidden(self::FIELD_COMMUNICATION_URL, $this->getCommunicationUrl())
|
308 |
+
. $this->getInputHidden(self::FIELD_TEMP_KEY, $this->getTempKey());
|
309 |
+
|
310 |
+
return sprintf(self::TEMPLATE_FORM_POST, $action, $content);
|
311 |
+
|
312 |
+
}
|
313 |
+
|
314 |
+
|
315 |
+
/**
|
316 |
+
* Get hidden input field for POST form.
|
317 |
+
*
|
318 |
+
* @param string $name
|
319 |
+
* @param string $value
|
320 |
+
* @return string
|
321 |
+
*/
|
322 |
+
protected function getInputHidden($name, $value) {
|
323 |
+
return sprintf(self::TEMPLATE_FORM_INPUT, htmlspecialchars($name), htmlspecialchars($value));
|
324 |
+
}
|
325 |
+
|
326 |
+
|
327 |
+
|
328 |
+
// --------------------------------------------------------------------------------------------------
|
329 |
+
// Core private methods
|
330 |
+
|
331 |
+
|
332 |
+
/**
|
333 |
+
* Perform a HTTP request to pull the secret key.
|
334 |
+
*
|
335 |
+
* @param string $systemToken
|
336 |
+
* @return array
|
337 |
+
*/
|
338 |
+
protected function pullSecretKeyRequest($systemToken) {
|
339 |
+
|
340 |
+
// Prepare the request parameters
|
341 |
+
$url = $this->getAPIDomain() . self::URL_PATH_ACTION . '/' . self::ACTION_PULL_SECRET_KEY;
|
342 |
+
$params = array(
|
343 |
+
self::FIELD_SYSTEM_TOKEN => $systemToken,
|
344 |
+
self::FIELD_USER_ID => $this->getUserId(),
|
345 |
+
self::FIELD_USER_EMAIL_HASH => self::hash($this->getUserEmail()),
|
346 |
+
self::FIELD_LIB_VERSION => self::VERSION,
|
347 |
+
);
|
348 |
+
|
349 |
+
try /* to connect with Rublon API and pull secret key */ {
|
350 |
+
$response = $this->request($url, $params);
|
351 |
+
} catch (RublonException $e) {
|
352 |
+
throw $e;
|
353 |
+
}
|
354 |
+
|
355 |
+
return $response;
|
356 |
+
|
357 |
+
}
|
358 |
+
|
359 |
+
|
360 |
+
/**
|
361 |
+
* Validate general parameters of the registration process.
|
362 |
+
*
|
363 |
+
* Check temporary key and start time.
|
364 |
+
*
|
365 |
+
* @return boolean
|
366 |
+
*/
|
367 |
+
protected function validateGeneral() {
|
368 |
+
$tempKey = $this->getTempKey();
|
369 |
+
$time = $this->getStartTime();
|
370 |
+
return (
|
371 |
+
!empty($tempKey)
|
372 |
+
AND !empty($time)
|
373 |
+
AND preg_match('/[a-z0-9]{' . self::SECRET_KEY_LENGTH . '}/i', $tempKey)
|
374 |
+
AND is_integer($time)
|
375 |
+
AND abs(time() - $time) <= self::PROCESS_LIFETIME
|
376 |
+
);
|
377 |
+
}
|
378 |
+
|
379 |
+
|
380 |
+
/**
|
381 |
+
* Get System Token from base64 parameter.
|
382 |
+
*
|
383 |
+
* @param string $data Base64 decoded data
|
384 |
+
* @return bool If the sign is valid return true the false
|
385 |
+
* @throws RublonException
|
386 |
+
*/
|
387 |
+
protected function parseSystemToken($data) {
|
388 |
+
$body = RublonSignatureWrapper::parseMessage(base64_decode(urldecode($data)), $this->getTempKey());
|
389 |
+
return $body[self::FIELD_SYSTEM_TOKEN];
|
390 |
+
}
|
391 |
+
|
392 |
+
|
393 |
+
/**
|
394 |
+
* Check if current user is authorized to perform registration of the Rublon module.
|
395 |
+
*
|
396 |
+
* Check whether user authenticated in current session
|
397 |
+
* can perform administrative operations
|
398 |
+
* such as registering the Rublon module.
|
399 |
+
*/
|
400 |
+
protected function canUserActivate() {
|
401 |
+
return $this->getRublon()->canUserActivate();
|
402 |
+
}
|
403 |
+
|
404 |
+
|
405 |
+
|
406 |
+
// --------------------------------------------------------------------------------------------------
|
407 |
+
// Abstract methods necessary to implement
|
408 |
+
|
409 |
+
|
410 |
+
/**
|
411 |
+
* Save initial parameters to the local storage.
|
412 |
+
*
|
413 |
+
* Save given temporary key and process start time into
|
414 |
+
* local storage.
|
415 |
+
* Note that parameters must be available for different browsers
|
416 |
+
* and IPs so cannot be stored in browser sesssion,
|
417 |
+
* but in database or configuration file.
|
418 |
+
*
|
419 |
+
* Returns true/false on success/failure.
|
420 |
+
*
|
421 |
+
* @param string $tempKey
|
422 |
+
* @param int $startTime
|
423 |
+
* @return bool
|
424 |
+
* @abstract
|
425 |
+
*/
|
426 |
+
abstract protected function saveInitialParameters($tempKey, $startTime);
|
427 |
+
|
428 |
+
|
429 |
+
/**
|
430 |
+
* Get process start time from local storage.
|
431 |
+
*
|
432 |
+
* Return local-stored start time of the process or NULL if empty.
|
433 |
+
* Start time is used to validate lifetime of the process.
|
434 |
+
* Note that parameter must be available for different browsers
|
435 |
+
* and IPs so cannot be stored in browser sesssion,
|
436 |
+
* but in database or configuration file.
|
437 |
+
*
|
438 |
+
* @return int
|
439 |
+
* @abstract
|
440 |
+
*/
|
441 |
+
abstract protected function getStartTime();
|
442 |
+
|
443 |
+
|
444 |
+
/**
|
445 |
+
* Get the communication URL of this Rublon module.
|
446 |
+
*
|
447 |
+
* Returns public URL address of the communication script.
|
448 |
+
* API server calls the communication URL to communicate
|
449 |
+
* with local system by REST or browser redirections.
|
450 |
+
* The communication URL is supplied to the API during initialization.
|
451 |
+
*
|
452 |
+
* @return string
|
453 |
+
* @abstract
|
454 |
+
*/
|
455 |
+
abstract protected function getCommunicationUrl();
|
456 |
+
|
457 |
+
|
458 |
+
}
|
459 |
+
|
460 |
+
|
461 |
+
class RublonConsumerException extends RublonException {}
|
462 |
+
class InvalidProcess_RublonConsumerException extends RublonConsumerException {}
|
463 |
+
class UserUnauthorized_RublonConsumerException extends RublonConsumerException {}
|
app/code/community/Rublon/RublonModule/lib/RublonConsumerRegistration/index.php
ADDED
@@ -0,0 +1,35 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* 2013 Rublon
|
4 |
+
*
|
5 |
+
* NOTICE OF LICENSE
|
6 |
+
*
|
7 |
+
* This source file is subject to the Academic Free License (AFL 3.0)
|
8 |
+
* that is bundled with this package in the file LICENSE.txt.
|
9 |
+
* It is also available through the world-wide-web at this URL:
|
10 |
+
* http://opensource.org/licenses/afl-3.0.php
|
11 |
+
* If you did not receive a copy of the license and are unable to
|
12 |
+
* obtain it through the world-wide-web, please send an email
|
13 |
+
* to license@prestashop.com so we can send you a copy immediately.
|
14 |
+
*
|
15 |
+
* DISCLAIMER
|
16 |
+
*
|
17 |
+
* Do not edit or add to this file if you wish to upgrade Rublon to newer
|
18 |
+
* versions in the future. If you wish to customize Rublon for your
|
19 |
+
* needs please contact us at support@rublon.com for more information.
|
20 |
+
*
|
21 |
+
* @author Rublon <support@rublon.com>
|
22 |
+
* @copyright 2013 Adips
|
23 |
+
* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
|
24 |
+
* Property of Adips Sp. z o. o., Poland
|
25 |
+
*/
|
26 |
+
|
27 |
+
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
|
28 |
+
header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");
|
29 |
+
|
30 |
+
header("Cache-Control: no-store, no-cache, must-revalidate");
|
31 |
+
header("Cache-Control: post-check=0, pre-check=0", false);
|
32 |
+
header("Pragma: no-cache");
|
33 |
+
|
34 |
+
header("Location: ../");
|
35 |
+
exit;
|
app/code/community/Rublon/RublonModule/lib/RublonImplemented/Rublon2FactorCallbackMagento.php
ADDED
@@ -0,0 +1,44 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
require_once dirname (__FILE__) . '/../Rublon/Rublon2FactorCallback.php';
|
4 |
+
|
5 |
+
class Rublon2FactorCallbackMagento extends Rublon2FactorCallback {
|
6 |
+
|
7 |
+
private $state;
|
8 |
+
private $accessToken;
|
9 |
+
|
10 |
+
public function __construct(Rublon2Factor $rublon) {
|
11 |
+
parent::__construct($rublon);
|
12 |
+
}
|
13 |
+
|
14 |
+
public function setState($state) {
|
15 |
+
$this->state = $state;
|
16 |
+
}
|
17 |
+
|
18 |
+
public function getState() {
|
19 |
+
return $this->state;
|
20 |
+
}
|
21 |
+
|
22 |
+
public function setAccessToken($token) {
|
23 |
+
$this->accessToken = $token;
|
24 |
+
}
|
25 |
+
|
26 |
+
public function getAccessToken() {
|
27 |
+
return $this->accessToken;
|
28 |
+
}
|
29 |
+
|
30 |
+
public function handleLogout($userId, $deviceId) {
|
31 |
+
// $dir = Mage::getBaseDir('var') . '/session/';
|
32 |
+
// Mage::getSingleton("core/session")->getEncryptedSessionId();
|
33 |
+
// if (is_dir($dir)) {
|
34 |
+
// if ($dh = opendir($dir)) {
|
35 |
+
// while (($file = readdir($dh)) !== false) {
|
36 |
+
// echo "filename: $file : filetype: " . filetype($dir . $file) . "\n";
|
37 |
+
// }
|
38 |
+
// closedir($dh);
|
39 |
+
// }
|
40 |
+
// }
|
41 |
+
|
42 |
+
}
|
43 |
+
|
44 |
+
}
|
app/code/community/Rublon/RublonModule/lib/RublonImplemented/Rublon2FactorGUIMagento.php
ADDED
@@ -0,0 +1,118 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
require_once dirname (__FILE__) . '/../Rublon/Rublon2FactorGUI.php';
|
4 |
+
|
5 |
+
class Rublon2FactorGUIMagento extends Rublon2FactorGUI {
|
6 |
+
|
7 |
+
public static $instance;
|
8 |
+
|
9 |
+
public static function getInstance() {
|
10 |
+
$helper = Mage::helper('rublonmodule');
|
11 |
+
|
12 |
+
if (empty(self::$instance)) {
|
13 |
+
self::$instance = new self(
|
14 |
+
$helper->getRublon(),
|
15 |
+
$helper->getAuthUserId(),
|
16 |
+
$helper->getAuthUserEmail(),
|
17 |
+
$logout_listener = $helper->isLogoutListenerEnabled()
|
18 |
+
);
|
19 |
+
}
|
20 |
+
|
21 |
+
return self::$instance;
|
22 |
+
}
|
23 |
+
|
24 |
+
|
25 |
+
public function getConsumerScript() {
|
26 |
+
// Don't show consumer script, it will be embeded in the footer action using self::renderConsumerScript() method.
|
27 |
+
return '';
|
28 |
+
}
|
29 |
+
|
30 |
+
|
31 |
+
/**
|
32 |
+
* Returns Rublon Button for plugin's registration.
|
33 |
+
*
|
34 |
+
* Since the registration is now handled automatically,
|
35 |
+
* the button is not necessary.
|
36 |
+
*
|
37 |
+
* @return RublonButton
|
38 |
+
*/
|
39 |
+
protected function createActivationButton($activationURL) {
|
40 |
+
return '';
|
41 |
+
}
|
42 |
+
|
43 |
+
|
44 |
+
/**
|
45 |
+
* Create Trusted Devices Widget container for WP Dashboard
|
46 |
+
*
|
47 |
+
* @return string
|
48 |
+
*/
|
49 |
+
public function getTDMWidget() {
|
50 |
+
$helper = Mage::helper('rublonmodule');
|
51 |
+
$result = '';
|
52 |
+
|
53 |
+
if ($helper->isRublonConfigured()) {
|
54 |
+
|
55 |
+
|
56 |
+
$protection_type = $helper->isUserProtected();
|
57 |
+
|
58 |
+
switch ($protection_type) {
|
59 |
+
case RublonMagentoModule::PROTECTION_TYPE_MOBILE:
|
60 |
+
$result .= '<p>' . sprintf(Mage::helper('rublonmodule')->__('Your account is protected by <a href="%s" target="_blank">Rublon</a>.'), $helper->getRublonDomain()) . '</p>';
|
61 |
+
break;
|
62 |
+
case RublonMagentoModule::PROTECTION_TYPE_EMAIL:
|
63 |
+
$result .= '<p>' . sprintf(Mage::helper('rublonmodule')->__('Your account is protected by <a href="%s" target="_blank">Rublon</a>.'), $helper->getRublonDomain())
|
64 |
+
. ' ' . sprintf(Mage::helper('rublonmodule')->__('Get the <a href="%s/get" target="_blank">Rublon mobile app</a> for more security.'), $helper->getRublonDomain()) . '</p>';
|
65 |
+
break;
|
66 |
+
}
|
67 |
+
|
68 |
+
$result .= $this->getDeviceWidget();
|
69 |
+
|
70 |
+
}
|
71 |
+
|
72 |
+
return $result;
|
73 |
+
|
74 |
+
}
|
75 |
+
|
76 |
+
|
77 |
+
/**
|
78 |
+
* Create Trusted Devices Widget container for WP Dashboard
|
79 |
+
*
|
80 |
+
* @return string
|
81 |
+
*/
|
82 |
+
public function getACMWidget() {
|
83 |
+
return $this->getShareAccessWidget();
|
84 |
+
}
|
85 |
+
|
86 |
+
|
87 |
+
/**
|
88 |
+
* Return Rublon Consumer Script URL.
|
89 |
+
*
|
90 |
+
* @return string
|
91 |
+
*/
|
92 |
+
public function renderConsumerScript() {
|
93 |
+
return parent::getConsumerScript();
|
94 |
+
}
|
95 |
+
|
96 |
+
/**
|
97 |
+
* Return Rublon Badge code.
|
98 |
+
*
|
99 |
+
* @return RublonBadge
|
100 |
+
*/
|
101 |
+
public function getBadgeWidget() {
|
102 |
+
return new RublonBadge();
|
103 |
+
}
|
104 |
+
|
105 |
+
public function getDeviceWidget() {
|
106 |
+
$helper = Mage::helper('rublonmodule');
|
107 |
+
return new Rublon2FactorGUI($this->getRublon(), $helper->getAuthUserId(), $helper->getAuthUserEmail());
|
108 |
+
}
|
109 |
+
|
110 |
+
public function userBox() {
|
111 |
+
|
112 |
+
return '';
|
113 |
+
|
114 |
+
}
|
115 |
+
|
116 |
+
|
117 |
+
}
|
118 |
+
|
app/code/community/Rublon/RublonModule/lib/RublonImplemented/Rublon2FactorGUIPrestaShop.php
ADDED
@@ -0,0 +1,117 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
require_once dirname (__FILE__) . '/../Rublon/Rublon2FactorGUI.php';
|
4 |
+
|
5 |
+
class Rublon2FactorGUIMagento extends Rublon2FactorGUI {
|
6 |
+
|
7 |
+
public static $instance;
|
8 |
+
|
9 |
+
public static function getInstance() {
|
10 |
+
$helper = Mage::helper('rublonmodule');
|
11 |
+
|
12 |
+
if (empty(self::$instance)) {
|
13 |
+
self::$instance = new self(
|
14 |
+
$helper->getRublon(),
|
15 |
+
$helper->getAuthUserId(),
|
16 |
+
$helper->getAuthUserEmail(),
|
17 |
+
$logout_listener = $helper->isLogoutListenerEnabled()
|
18 |
+
);
|
19 |
+
}
|
20 |
+
|
21 |
+
return self::$instance;
|
22 |
+
}
|
23 |
+
|
24 |
+
|
25 |
+
public function getConsumerScript() {
|
26 |
+
// Don't show consumer script, it will be embeded in the footer action using self::renderConsumerScript() method.
|
27 |
+
return '';
|
28 |
+
}
|
29 |
+
|
30 |
+
|
31 |
+
/**
|
32 |
+
* Returns Rublon Button for plugin's registration.
|
33 |
+
*
|
34 |
+
* Since the registration is now handled automatically,
|
35 |
+
* the button is not necessary.
|
36 |
+
*
|
37 |
+
* @return RublonButton
|
38 |
+
*/
|
39 |
+
protected function createActivationButton($activationURL) {
|
40 |
+
return '';
|
41 |
+
}
|
42 |
+
|
43 |
+
|
44 |
+
/**
|
45 |
+
* Create Trusted Devices Widget container for WP Dashboard
|
46 |
+
*
|
47 |
+
* @return string
|
48 |
+
*/
|
49 |
+
public function getTDMWidget() {
|
50 |
+
$helper = Mage::helper('rublonmodule');
|
51 |
+
$result = '';
|
52 |
+
|
53 |
+
if ($helper->isRublonConfigured()) {
|
54 |
+
|
55 |
+
|
56 |
+
$protection_type = $helper->isUserProtected();
|
57 |
+
|
58 |
+
switch ($protection_type) {
|
59 |
+
case RublonMagentoModule::PROTECTION_TYPE_MOBILE:
|
60 |
+
$result .= '<p>' . sprintf(__r('Your account is protected by <a href="%s" target="_blank">Rublon</a>.'), RublonHelper::rubloncomUrl()) . '</p>';
|
61 |
+
break;
|
62 |
+
case RublonMagentoModule::PROTECTION_TYPE_EMAIL:
|
63 |
+
$result .= '<p>' . sprintf(__r('Your account is protected by <a href="%s" target="_blank">Rublon</a>.'), RublonHelper::rubloncomUrl())
|
64 |
+
. ' ' . sprintf(__r('Get the <a href="%s/get" target="_blank">Rublon mobile app</a> for more security.'), RublonHelper::rubloncomUrl()) . '</p>';
|
65 |
+
break;
|
66 |
+
}
|
67 |
+
|
68 |
+
$result .= $this->getDeviceWidget();
|
69 |
+
|
70 |
+
}
|
71 |
+
|
72 |
+
return $result;
|
73 |
+
|
74 |
+
}
|
75 |
+
|
76 |
+
|
77 |
+
/**
|
78 |
+
* Create Trusted Devices Widget container for WP Dashboard
|
79 |
+
*
|
80 |
+
* @return string
|
81 |
+
*/
|
82 |
+
public function getACMWidget() {
|
83 |
+
return $this->getShareAccessWidget();
|
84 |
+
}
|
85 |
+
|
86 |
+
|
87 |
+
/**
|
88 |
+
* Return Rublon Consumer Script URL.
|
89 |
+
*
|
90 |
+
* @return string
|
91 |
+
*/
|
92 |
+
public function renderConsumerScript() {
|
93 |
+
return parent::getConsumerScript();
|
94 |
+
}
|
95 |
+
|
96 |
+
/**
|
97 |
+
* Return Rublon Badge code.
|
98 |
+
*
|
99 |
+
* @return RublonBadge
|
100 |
+
*/
|
101 |
+
public function getBadgeWidget() {
|
102 |
+
return new RublonBadge();
|
103 |
+
}
|
104 |
+
|
105 |
+
public function getDeviceWidget() {
|
106 |
+
return new Rublon2FactorGUI($this->getRublon(), RublonHelper::getEmployeeId(), RublonHelper::getEmployeeEmailById(RublonHelper::getEmployeeId()));
|
107 |
+
}
|
108 |
+
|
109 |
+
public function userBox() {
|
110 |
+
|
111 |
+
return '';
|
112 |
+
|
113 |
+
}
|
114 |
+
|
115 |
+
|
116 |
+
}
|
117 |
+
|
app/code/community/Rublon/RublonModule/lib/RublonImplemented/Rublon2FactorMagento.php
ADDED
@@ -0,0 +1,29 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
require_once dirname (__FILE__) . '/../Rublon/Rublon2Factor.php';
|
4 |
+
|
5 |
+
class Rublon2FactorMagento extends Rublon2Factor {
|
6 |
+
|
7 |
+
|
8 |
+
public function canUserActivate() {
|
9 |
+
|
10 |
+
return (Mage::helper('rublonmodule')->isAdministrator());
|
11 |
+
|
12 |
+
}
|
13 |
+
|
14 |
+
|
15 |
+
public function getLang() {
|
16 |
+
|
17 |
+
return Mage::app()->getLocale()->getLocaleCode();
|
18 |
+
|
19 |
+
}
|
20 |
+
|
21 |
+
|
22 |
+
public function getAPIDomain() {
|
23 |
+
|
24 |
+
return Mage::helper('rublonmodule')->getRublonDomain();
|
25 |
+
|
26 |
+
}
|
27 |
+
|
28 |
+
|
29 |
+
}
|
app/code/community/Rublon/RublonModule/lib/RublonImplemented/Rublon2FactorPrestaShop.php
ADDED
@@ -0,0 +1,29 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
require_once dirname (__FILE__) . '/../Rublon/Rublon2Factor.php';
|
4 |
+
|
5 |
+
class Rublon2FactorMagento extends Rublon2Factor {
|
6 |
+
|
7 |
+
|
8 |
+
public function canUserActivate() {
|
9 |
+
|
10 |
+
return (Mage::helper('rublonmodule')->isRublonConfigured());
|
11 |
+
|
12 |
+
}
|
13 |
+
|
14 |
+
|
15 |
+
public function getLang() {
|
16 |
+
|
17 |
+
return Mage::app()->getLocale()->getLocaleCode();
|
18 |
+
|
19 |
+
}
|
20 |
+
|
21 |
+
|
22 |
+
public function getAPIDomain() {
|
23 |
+
|
24 |
+
return Mage::helper('rublonmodule')->getRublonDomain();
|
25 |
+
|
26 |
+
}
|
27 |
+
|
28 |
+
|
29 |
+
}
|
app/code/community/Rublon/RublonModule/lib/RublonImplemented/RublonAPICheckProtection.php
ADDED
@@ -0,0 +1,100 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
require_once dirname(__FILE__) . '/../Rublon/core/API/RublonAPIClient.php';
|
4 |
+
|
5 |
+
/**
|
6 |
+
* API request: Check Rublon protection.
|
7 |
+
*
|
8 |
+
*/
|
9 |
+
class RublonAPICheckProtection extends RublonAPIClient {
|
10 |
+
|
11 |
+
|
12 |
+
/**
|
13 |
+
* Name of the field with users data.
|
14 |
+
*/
|
15 |
+
const FIELD_USERS = 'users';
|
16 |
+
|
17 |
+
/**
|
18 |
+
* Email address also taken into account when checking protection status
|
19 |
+
*/
|
20 |
+
const FIELD_INCLUDING_EMAIL = 'includingEmail';
|
21 |
+
|
22 |
+
/**
|
23 |
+
* Dummy email for ping request to check
|
24 |
+
* the Rublon server availability when user's email
|
25 |
+
* is not accessible.
|
26 |
+
*/
|
27 |
+
const EMAIL_PING = 'ping@rublon.com';
|
28 |
+
|
29 |
+
/**
|
30 |
+
* URL path of the request.
|
31 |
+
*
|
32 |
+
* @var string
|
33 |
+
*/
|
34 |
+
protected $urlPath = '/api/v3/checkProtection';
|
35 |
+
|
36 |
+
/**
|
37 |
+
* Constructor.
|
38 |
+
*
|
39 |
+
* @param Rublon $rublon
|
40 |
+
*/
|
41 |
+
public function __construct(RublonConsumer $rublon, $userId, $userEmail) {
|
42 |
+
|
43 |
+
parent::__construct($rublon);
|
44 |
+
|
45 |
+
if (!$rublon->isConfigured()) {
|
46 |
+
trigger_error(RublonConsumer::TEMPLATE_CONFIG_ERROR, E_USER_ERROR);
|
47 |
+
}
|
48 |
+
|
49 |
+
if (empty($userEmail)) {
|
50 |
+
$userEmail = self::EMAIL_PING;
|
51 |
+
}
|
52 |
+
|
53 |
+
// Set request URL and parameters
|
54 |
+
$url = $rublon->getAPIDomain() . $this->urlPath;
|
55 |
+
$params = array(
|
56 |
+
RublonAuthParams::FIELD_SYSTEM_TOKEN => $rublon->getSystemToken(),
|
57 |
+
self::FIELD_USERS => array(array(
|
58 |
+
RublonAuthParams::FIELD_USER_ID => $userId,
|
59 |
+
RublonAuthParams::FIELD_USER_EMAIL_HASH => hash(self::HASH_ALG, strtolower($userEmail)),
|
60 |
+
)),
|
61 |
+
self::FIELD_INCLUDING_EMAIL => true,
|
62 |
+
);
|
63 |
+
|
64 |
+
$this->setRequestURL($url)->setRequestParams($params);
|
65 |
+
|
66 |
+
}
|
67 |
+
|
68 |
+
/**
|
69 |
+
* Append user to check.
|
70 |
+
*
|
71 |
+
* @param string $userId
|
72 |
+
* @param string $userEmail
|
73 |
+
* @return RublonAPICheckProtection
|
74 |
+
*/
|
75 |
+
public function appendUser($userId, $userEmail) {
|
76 |
+
if (empty($userEmail)) {
|
77 |
+
$userEmail = self::EMAIL_PING;
|
78 |
+
}
|
79 |
+
$this->params[self::FIELD_USERS][] = array(
|
80 |
+
RublonAuthParams::FIELD_USER_ID => $userId,
|
81 |
+
RublonAuthParams::FIELD_USER_EMAIL_HASH => hash(self::HASH_ALG, strtolower($userEmail)),
|
82 |
+
);
|
83 |
+
return $this;
|
84 |
+
}
|
85 |
+
|
86 |
+
|
87 |
+
/**
|
88 |
+
* Check protection status.
|
89 |
+
*
|
90 |
+
* @return boolean
|
91 |
+
*/
|
92 |
+
public function isProtectionEnabled($userId) {
|
93 |
+
return (
|
94 |
+
!empty($this->response[self::FIELD_RESULT])
|
95 |
+
&& !empty($this->response[self::FIELD_RESULT][$userId])
|
96 |
+
);
|
97 |
+
}
|
98 |
+
|
99 |
+
|
100 |
+
}
|
app/code/community/Rublon/RublonModule/lib/RublonImplemented/RublonAPINewsletterSignup.php
ADDED
@@ -0,0 +1,65 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
require_once dirname(__FILE__) . '/../Rublon/core/API/RublonAPIClient.php';
|
4 |
+
|
5 |
+
/**
|
6 |
+
* API request: Check Rublon protection.
|
7 |
+
*
|
8 |
+
*/
|
9 |
+
class RublonAPINewsletterSignup extends RublonAPIClient {
|
10 |
+
|
11 |
+
|
12 |
+
/**
|
13 |
+
* Name of the field with the action to perform
|
14 |
+
*/
|
15 |
+
const FIELD_ACTION = 'newsletterAction';
|
16 |
+
|
17 |
+
/**
|
18 |
+
* User email field
|
19 |
+
*/
|
20 |
+
const FIELD_USER_EMAIL = 'userEmail';
|
21 |
+
|
22 |
+
/**
|
23 |
+
* Subscribe action
|
24 |
+
*/
|
25 |
+
const ACTION_SUBSCRIBE = 'subscribe';
|
26 |
+
|
27 |
+
/**
|
28 |
+
* URL path of the request.
|
29 |
+
*
|
30 |
+
* @var string
|
31 |
+
*/
|
32 |
+
protected $urlPath = '/api/v3/newsletter';
|
33 |
+
|
34 |
+
/**
|
35 |
+
* Constructor.
|
36 |
+
*
|
37 |
+
* @param Rublon $rublon
|
38 |
+
*/
|
39 |
+
public function __construct(RublonConsumer $rublon, $userEmail) {
|
40 |
+
|
41 |
+
parent::__construct($rublon);
|
42 |
+
|
43 |
+
if (!$rublon->isConfigured()) {
|
44 |
+
trigger_error(RublonConsumer::TEMPLATE_CONFIG_ERROR, E_USER_ERROR);
|
45 |
+
}
|
46 |
+
|
47 |
+
// Set request URL and parameters
|
48 |
+
$url = $rublon->getAPIDomain() . $this->urlPath;
|
49 |
+
$params = array(
|
50 |
+
RublonAuthParams::FIELD_SYSTEM_TOKEN => $rublon->getSystemToken(),
|
51 |
+
self::FIELD_ACTION => self::ACTION_SUBSCRIBE,
|
52 |
+
self::FIELD_USER_EMAIL => $userEmail,
|
53 |
+
);
|
54 |
+
|
55 |
+
$this->setRequestURL($url)->setRequestParams($params);
|
56 |
+
|
57 |
+
}
|
58 |
+
|
59 |
+
public function subscribedSuccessfully() {
|
60 |
+
|
61 |
+
return !empty( $this->response[self::FIELD_STATUS] ) && $this->response[self::FIELD_STATUS] == 'OK';
|
62 |
+
|
63 |
+
}
|
64 |
+
|
65 |
+
}
|
app/code/community/Rublon/RublonModule/lib/RublonImplemented/RublonAPIPluginHistory.php
ADDED
@@ -0,0 +1,60 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
require_once dirname(__FILE__) . '/../Rublon/core/API/RublonAPIClient.php';
|
4 |
+
|
5 |
+
/**
|
6 |
+
* API request: Plugin history.
|
7 |
+
*
|
8 |
+
*/
|
9 |
+
class RublonAPIPluginHistory extends RublonAPIClient {
|
10 |
+
|
11 |
+
|
12 |
+
/**
|
13 |
+
* History added response field.
|
14 |
+
*/
|
15 |
+
const FIELD_HISTORY_ADDED = 'historyAdded';
|
16 |
+
|
17 |
+
|
18 |
+
/**
|
19 |
+
* URL path of the request.
|
20 |
+
*
|
21 |
+
* @var string
|
22 |
+
*/
|
23 |
+
protected $urlPath = '/add_history';
|
24 |
+
|
25 |
+
|
26 |
+
/**
|
27 |
+
* Constructor.
|
28 |
+
*
|
29 |
+
* @param Rublon $rublon
|
30 |
+
* @param string $url
|
31 |
+
* @param array $params
|
32 |
+
*/
|
33 |
+
public function __construct(RublonConsumer $rublon, $params) {
|
34 |
+
|
35 |
+
parent::__construct($rublon);
|
36 |
+
|
37 |
+
if (!$rublon->isConfigured()) {
|
38 |
+
trigger_error(RublonConsumer::TEMPLATE_CONFIG_ERROR, E_USER_ERROR);
|
39 |
+
}
|
40 |
+
|
41 |
+
$consumerRegistrationData = Mage::helper('rublonmodule')->getConsumerRegistrationData();
|
42 |
+
$url = $consumerRegistrationData['url'] . $consumerRegistrationData['action'] . $this->urlPath;
|
43 |
+
|
44 |
+
// Set request URL and parameters
|
45 |
+
$this->setRequestURL($url)->setRequestParams($params);
|
46 |
+
|
47 |
+
}
|
48 |
+
|
49 |
+
/**
|
50 |
+
* Get secret key.
|
51 |
+
*
|
52 |
+
* @return string
|
53 |
+
*/
|
54 |
+
public function historyHasBeenAdded() {
|
55 |
+
if (isset($this->response[self::FIELD_RESULT][self::FIELD_HISTORY_ADDED])) {
|
56 |
+
return $this->response[self::FIELD_RESULT][self::FIELD_HISTORY_ADDED];
|
57 |
+
}
|
58 |
+
}
|
59 |
+
|
60 |
+
}
|
app/code/community/Rublon/RublonModule/lib/RublonImplemented/RublonConsumerRegistrationMagento.php
ADDED
@@ -0,0 +1,491 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
require_once dirname(__FILE__) . '/../RublonConsumerRegistration/RublonConsumerRegistrationTemplate.php';
|
4 |
+
|
5 |
+
class RublonConsumerRegistrationMagento extends RublonConsumerRegistrationTemplate {
|
6 |
+
|
7 |
+
const TEMPLATE_FORM_POST = '<form action="%s" method="POST" id="rublon-consumer-registration">
|
8 |
+
%s
|
9 |
+
</form>';
|
10 |
+
|
11 |
+
/**
|
12 |
+
* Communication URL
|
13 |
+
*
|
14 |
+
* @var string
|
15 |
+
*/
|
16 |
+
const URL_COMMUNICATION = 'rublon/registration/callback';
|
17 |
+
|
18 |
+
protected function finalSuccess() {
|
19 |
+
|
20 |
+
parent::finalSuccess();
|
21 |
+
|
22 |
+
$helper = Mage::helper('adminhtml');
|
23 |
+
$rublonHelper = Mage::helper('rublonmodule');
|
24 |
+
|
25 |
+
$this->updateRublonSettings();
|
26 |
+
|
27 |
+
$updateMessage = __('Thank you! Your account is now protected by Rublon.');
|
28 |
+
Mage::helper('rublonmodule')->addMessage($updateMessage);
|
29 |
+
|
30 |
+
if ($rublonHelper->isTrackingAllowed()) {
|
31 |
+
$pluginMeta = $rublonHelper->prepareModuleMeta();
|
32 |
+
$pluginMeta['action'] = 'activation';
|
33 |
+
$rublonHelper->moduleHistoryRequest($pluginMeta);
|
34 |
+
}
|
35 |
+
|
36 |
+
$newsletter = $this->getNewsletterSignUp();
|
37 |
+
if (!empty($newsletter)) {
|
38 |
+
|
39 |
+
$email = $rublonHelper->getAuthUserEmail();
|
40 |
+
$rublon_req = new RublonRequests();
|
41 |
+
$rublon_req->subscribeToNewsletter($email);
|
42 |
+
|
43 |
+
$rublonHelper->deleteConfig('rublon_newsletter_signup');
|
44 |
+
}
|
45 |
+
|
46 |
+
// Save project owner information
|
47 |
+
$rublonHelper->saveProjectOwner();
|
48 |
+
|
49 |
+
// Clean Magento cache
|
50 |
+
Mage::app()->getCache()->clean();
|
51 |
+
Mage::app()->getCacheInstance()->flush();
|
52 |
+
Mage::app()->cleanCache();
|
53 |
+
|
54 |
+
$this->_redirect($helper->getUrl('rublon/adminhtml_settings'));
|
55 |
+
|
56 |
+
}
|
57 |
+
|
58 |
+
|
59 |
+
/**
|
60 |
+
* Update Rublon plugin settings using 'systemToken' and 'secretKey' from
|
61 |
+
* successfully registered project
|
62 |
+
*/
|
63 |
+
private function updateRublonSettings() {
|
64 |
+
|
65 |
+
$this->_clearConfig();
|
66 |
+
$this->_saveConfig('rublon_system_token', $this->getSystemToken());
|
67 |
+
$this->_saveConfig('rublon_secret_key', $this->getSecretKey());
|
68 |
+
|
69 |
+
}
|
70 |
+
|
71 |
+
/**
|
72 |
+
* Clear any temporary config data
|
73 |
+
*
|
74 |
+
*/
|
75 |
+
private function _clearConfig() {
|
76 |
+
|
77 |
+
$config = Mage::getConfig();
|
78 |
+
$config->deleteConfig('rublon_temp_key');
|
79 |
+
$config->deleteConfig('rublon_start_time');
|
80 |
+
}
|
81 |
+
|
82 |
+
|
83 |
+
protected function finalError($msg = NULL) {
|
84 |
+
|
85 |
+
parent::finalError($msg);
|
86 |
+
|
87 |
+
if (!$msg || $msg == self::DEVELOPERS_ERROR) {
|
88 |
+
$msg = RublonHelper::uriGet('error_msg');
|
89 |
+
}
|
90 |
+
|
91 |
+
$notifierMessage = 'Consumer registration error.<br /><br />';
|
92 |
+
$errorCode = 'API_ERROR';
|
93 |
+
if (!empty($msg)) {
|
94 |
+
if (stripos($msg, 'ERROR_CODE:') !== false) {
|
95 |
+
$errorCode = str_replace('ERROR_CODE: ', '', $msg);
|
96 |
+
$notifierMessage .= __('Rublon error code: ', 'rublon') . '<strong>' . $errorCode . '</strong>';
|
97 |
+
} else {
|
98 |
+
$notifierMessage .= 'Rublon error message: [' . $msg . ']';
|
99 |
+
}
|
100 |
+
}
|
101 |
+
RublonHelper::setMessage($errorCode, 'error', 'CR');
|
102 |
+
|
103 |
+
// send issue notify
|
104 |
+
echo $this->_notify($notifierMessage);
|
105 |
+
|
106 |
+
$this->_redirect(admin_url(RublonHelper::WP_RUBLON_PAGE));
|
107 |
+
|
108 |
+
}
|
109 |
+
|
110 |
+
|
111 |
+
protected function getSystemToken() {
|
112 |
+
|
113 |
+
$data = $this->getConfig('rublon_system_token');
|
114 |
+
return (isset($data) ? $data : NULL);
|
115 |
+
|
116 |
+
}
|
117 |
+
|
118 |
+
|
119 |
+
protected function saveSystemToken($systemToken) {
|
120 |
+
|
121 |
+
return $this->_saveConfig('rublon_system_token', $systemToken);
|
122 |
+
|
123 |
+
}
|
124 |
+
|
125 |
+
public function getAllowTracking() {
|
126 |
+
|
127 |
+
$data = $this->getConfig('rublon_allow_tracking');
|
128 |
+
return (isset($data) ? $data : NULL);
|
129 |
+
|
130 |
+
}
|
131 |
+
|
132 |
+
|
133 |
+
public function saveAllowTracking($allow = 0) {
|
134 |
+
|
135 |
+
return $this->_saveConfig('rublon_allow_tracking', $allow);
|
136 |
+
|
137 |
+
}
|
138 |
+
|
139 |
+
public function getNewsletterSignUp() {
|
140 |
+
|
141 |
+
$data = $this->getConfig('rublon_newsletter_signup');
|
142 |
+
return (isset($data) ? $data : NULL);
|
143 |
+
|
144 |
+
}
|
145 |
+
|
146 |
+
|
147 |
+
public function saveNewsletterSignUp($allow = 0) {
|
148 |
+
|
149 |
+
return $this->_saveConfig('rublon_newsletter_signup', $allow);
|
150 |
+
|
151 |
+
}
|
152 |
+
|
153 |
+
protected function getSecretKey() {
|
154 |
+
|
155 |
+
$data = $this->getConfig('rublon_secret_key');
|
156 |
+
return (isset($data) ? $data : NULL);
|
157 |
+
|
158 |
+
}
|
159 |
+
|
160 |
+
|
161 |
+
protected function saveSecretKey($secretKey) {
|
162 |
+
|
163 |
+
return $this->_saveConfig('rublon_secret_key', $secretKey);
|
164 |
+
|
165 |
+
}
|
166 |
+
|
167 |
+
|
168 |
+
/**
|
169 |
+
* Returns local-stored temporary key or NULL if empty.
|
170 |
+
* Temporary key is used to sign communication with API instead of secret key which is not given.
|
171 |
+
*
|
172 |
+
* @return string
|
173 |
+
*/
|
174 |
+
protected function getTempKey() {
|
175 |
+
return $this->getConfig('rublon_temp_key');
|
176 |
+
}
|
177 |
+
|
178 |
+
/**
|
179 |
+
* Save temporary key to the local storage
|
180 |
+
*
|
181 |
+
* Returns true/false on success/failure.
|
182 |
+
*
|
183 |
+
* @param string $tempKey
|
184 |
+
* @return bool
|
185 |
+
*/
|
186 |
+
protected function saveTempKey($tempKey) {
|
187 |
+
return $this->_saveConfig('rublon_temp_key', $tempKey);
|
188 |
+
}
|
189 |
+
|
190 |
+
/**
|
191 |
+
* Save given temporary key and process start time into local storage.
|
192 |
+
*
|
193 |
+
* Returns true/false on success/failure.
|
194 |
+
*
|
195 |
+
* @param string $tempKey
|
196 |
+
* @param int $startTime
|
197 |
+
* @return bool
|
198 |
+
*/
|
199 |
+
protected function saveInitialParameters($tempKey, $startTime) {
|
200 |
+
return $this->saveTempKey($tempKey) && $this->saveStartTime($startTime);
|
201 |
+
}
|
202 |
+
|
203 |
+
/**
|
204 |
+
* Return local-stored start time of the process or NULL if empty.
|
205 |
+
* Start time is used to validate lifetime of the process.
|
206 |
+
*
|
207 |
+
* @return int/null
|
208 |
+
*/
|
209 |
+
protected function getStartTime() {
|
210 |
+
return (int)$this->getConfig('rublon_start_time');
|
211 |
+
}
|
212 |
+
|
213 |
+
/**
|
214 |
+
* Save temporary start time to the local storage
|
215 |
+
*
|
216 |
+
* Returns true/false on success/failure.
|
217 |
+
*
|
218 |
+
* @param string $tempKey
|
219 |
+
* @return bool
|
220 |
+
*/
|
221 |
+
protected function saveStartTime($startTime) {
|
222 |
+
return $this->_saveConfig('rublon_start_time', $startTime);
|
223 |
+
}
|
224 |
+
|
225 |
+
|
226 |
+
/**
|
227 |
+
* Get the communication URL of this Rublon module
|
228 |
+
*
|
229 |
+
* Returns public URL address of the communication script.
|
230 |
+
* API server calls the communication URL to communicate with local system by REST or browser redirections.
|
231 |
+
* The communication URL is supplied to the API during initialization.
|
232 |
+
*
|
233 |
+
* @return string
|
234 |
+
*/
|
235 |
+
protected function getCommunicationUrl() {
|
236 |
+
$url = Mage::getUrl(self::URL_COMMUNICATION);
|
237 |
+
$url = rtrim($url, '/\\');
|
238 |
+
return $url;
|
239 |
+
}
|
240 |
+
|
241 |
+
|
242 |
+
/**
|
243 |
+
* Get project's public webroot URL address
|
244 |
+
*
|
245 |
+
* Returns the main project URL address needful for registration consumer in API.
|
246 |
+
*
|
247 |
+
* @return string
|
248 |
+
*/
|
249 |
+
protected function getProjectUrl() {
|
250 |
+
return Mage::getBaseUrl();
|
251 |
+
}
|
252 |
+
|
253 |
+
/**
|
254 |
+
* Get the callback URL of this Rublon module
|
255 |
+
*
|
256 |
+
* Returns public URL address of the Rublon consumer's callback script.
|
257 |
+
* API server calls the callback URL after valid authentication.
|
258 |
+
* The callback URL is needful for registration consumer in API.
|
259 |
+
*
|
260 |
+
* @return string
|
261 |
+
*/
|
262 |
+
protected function getCallbackUrl() {
|
263 |
+
|
264 |
+
return $this->getProjectUrl() . 'rublon/callback/index/state/%state%/token/%token%/windowType/%windowType%';
|
265 |
+
// return $this->_getRublonActionUrl('callback');
|
266 |
+
|
267 |
+
}
|
268 |
+
|
269 |
+
|
270 |
+
/**
|
271 |
+
* Prepare the URL for executing Rublon actions
|
272 |
+
*
|
273 |
+
* @param string $action Action to be passed in the URL via GET
|
274 |
+
*/
|
275 |
+
private function _getRublonActionUrl($action) {
|
276 |
+
|
277 |
+
$rublonActionUrl = RublonHelper::getProjectUrl();
|
278 |
+
if (strpos($rublonActionUrl, '?') !== false)
|
279 |
+
$rublonActionUrl .= 'controller=' . RublonHelper::getControllerName() . '&';
|
280 |
+
else
|
281 |
+
$rublonActionUrl .= '?controller=' . RublonHelper::getControllerName() . '&';
|
282 |
+
$rublonActionUrl .= 'rublon='.$action;
|
283 |
+
return $rublonActionUrl;
|
284 |
+
|
285 |
+
}
|
286 |
+
|
287 |
+
|
288 |
+
public function getAPIDomain() {
|
289 |
+
|
290 |
+
return Mage::helper('rublonmodule')->getApiRegDomain();
|
291 |
+
|
292 |
+
}
|
293 |
+
|
294 |
+
|
295 |
+
/**
|
296 |
+
* Get name of the project
|
297 |
+
*
|
298 |
+
* Returns name of the project that will be set in Rublon Developers Dashboard.
|
299 |
+
*
|
300 |
+
* @return string
|
301 |
+
*/
|
302 |
+
protected function getProjectName() {
|
303 |
+
return Mage::app()->getStore()->getFrontendName();
|
304 |
+
}
|
305 |
+
|
306 |
+
|
307 |
+
/**
|
308 |
+
* Get project's technology
|
309 |
+
*
|
310 |
+
* Returns technology, module or library name to set in project.
|
311 |
+
*
|
312 |
+
* @return string
|
313 |
+
*/
|
314 |
+
protected function getProjectTechnology() {
|
315 |
+
|
316 |
+
return Mage::helper('rublonmodule')->getTechnology();
|
317 |
+
|
318 |
+
}
|
319 |
+
|
320 |
+
|
321 |
+
protected function getUserId() {
|
322 |
+
|
323 |
+
return Mage::helper('rublonmodule')->getAuthUserId();
|
324 |
+
|
325 |
+
}
|
326 |
+
|
327 |
+
|
328 |
+
protected function getUserEmail() {
|
329 |
+
|
330 |
+
return Mage::helper('rublonmodule')->getAuthUserEmail();
|
331 |
+
|
332 |
+
}
|
333 |
+
|
334 |
+
|
335 |
+
protected function getRublon() {
|
336 |
+
|
337 |
+
if (empty($this->rublon)) {
|
338 |
+
$this->rublon = new Rublon2FactorMagento(null, $this->getTempKey());
|
339 |
+
}
|
340 |
+
return $this->rublon;
|
341 |
+
|
342 |
+
}
|
343 |
+
|
344 |
+
|
345 |
+
/**
|
346 |
+
* Redirect to the given URL
|
347 |
+
*
|
348 |
+
* @param string $url
|
349 |
+
* @return void
|
350 |
+
*/
|
351 |
+
protected function _redirect($url) {
|
352 |
+
|
353 |
+
Mage::app()->getFrontController()->getResponse()->setRedirect($url);
|
354 |
+
Mage::app()->getResponse()->sendResponse();
|
355 |
+
exit;
|
356 |
+
|
357 |
+
}
|
358 |
+
|
359 |
+
|
360 |
+
/**
|
361 |
+
* Send an error notifier request to Rublon (use a workaround if cURL not present)
|
362 |
+
*
|
363 |
+
* @param string $msg
|
364 |
+
* @return string
|
365 |
+
*/
|
366 |
+
private function _notify($msg) {
|
367 |
+
|
368 |
+
$data = array();
|
369 |
+
$data['msg'] = $msg;
|
370 |
+
$data['request_uri'] = $_SERVER['REQUEST_URI'];
|
371 |
+
|
372 |
+
try {
|
373 |
+
RublonHelper::notify($data, array('message-type' => RublonHelper::RUBLON_NOTIFY_TYPE_ERROR));
|
374 |
+
} catch (Exception $e) {
|
375 |
+
// Do nothing.
|
376 |
+
}
|
377 |
+
return '';
|
378 |
+
|
379 |
+
}
|
380 |
+
|
381 |
+
|
382 |
+
/**
|
383 |
+
* Save a given data in a local-stored configuration.
|
384 |
+
*
|
385 |
+
* @param array $data
|
386 |
+
* @return bool
|
387 |
+
*/
|
388 |
+
protected function _saveConfig($path, $data) {
|
389 |
+
$config = Mage::getConfig();
|
390 |
+
$config->saveConfig($path, $data);
|
391 |
+
Mage::getConfig()->cleanCache();
|
392 |
+
$configValue = $this->getConfig($path);
|
393 |
+
return (isset($configValue));
|
394 |
+
}
|
395 |
+
|
396 |
+
private function getConfig($path = '')
|
397 |
+
{
|
398 |
+
$data = Mage::getStoreConfig($path);
|
399 |
+
return (isset($data) ? $data : NULL);
|
400 |
+
}
|
401 |
+
|
402 |
+
|
403 |
+
/**
|
404 |
+
* Returns the consumer registration URL
|
405 |
+
*
|
406 |
+
* @return string
|
407 |
+
*/
|
408 |
+
public function getConsumerActionURL() {
|
409 |
+
|
410 |
+
return self::URL_PATH_ACTION;
|
411 |
+
|
412 |
+
}
|
413 |
+
|
414 |
+
|
415 |
+
protected function getProjectData() {
|
416 |
+
|
417 |
+
$projectData = parent::getProjectData();
|
418 |
+
$projectData['project-description'] = '';
|
419 |
+
$projectData['plugin-version'] = Mage::helper('rublonmodule')->getModuleVersion();
|
420 |
+
$projectData['lang'] = Mage::helper('rublonmodule')->getLang();
|
421 |
+
$email = Mage::helper('rublonmodule')->getAuthUserEmail();
|
422 |
+
$projectData['project-owner-email'] = $email;
|
423 |
+
$projectData['project-owner-email-hash'] = self::hash($email);
|
424 |
+
return $projectData;
|
425 |
+
|
426 |
+
}
|
427 |
+
|
428 |
+
|
429 |
+
public function retrieveRegistrationForm() {
|
430 |
+
|
431 |
+
$temp_key = RublonSignatureWrapper::generateRandomString(RublonConsumerRegistrationCommon::SECRET_KEY_LENGTH);
|
432 |
+
$this->saveInitialParameters($temp_key, time());
|
433 |
+
$reg_form = $this->getRegistrationForm();
|
434 |
+
return $reg_form;
|
435 |
+
|
436 |
+
}
|
437 |
+
|
438 |
+
|
439 |
+
/**
|
440 |
+
* Get the registration form.
|
441 |
+
*
|
442 |
+
* @return string
|
443 |
+
*/
|
444 |
+
protected function getRegistrationForm() {
|
445 |
+
|
446 |
+
$action = $this->getAPIDomain() . self::URL_PATH_ACTION . '/' . self::ACTION_INITIALIZE;
|
447 |
+
$action = htmlspecialchars($action);
|
448 |
+
|
449 |
+
$content = $this->getInputHidden(self::FIELD_PROJECT_URL, $this->getProjectUrl())
|
450 |
+
. $this->getInputHidden(self::FIELD_PROJECT_CALLBACK_URL, $this->getCallbackUrl())
|
451 |
+
. $this->getInputHidden(self::FIELD_PROJECT_DATA, json_encode($this->getProjectData()))
|
452 |
+
. $this->getInputHidden(self::FIELD_COMMUNICATION_URL, $this->getCommunicationUrl())
|
453 |
+
. $this->getInputHidden(self::FIELD_TEMP_KEY, $this->getTempKey());
|
454 |
+
|
455 |
+
return sprintf(self::TEMPLATE_FORM_POST, $action, $content);
|
456 |
+
|
457 |
+
}
|
458 |
+
|
459 |
+
/**
|
460 |
+
* Check whether user authenticated in current session can
|
461 |
+
* perform administrative operations such as registering
|
462 |
+
* the Rublon module.
|
463 |
+
*
|
464 |
+
* @return bool
|
465 |
+
*/
|
466 |
+
protected function isUserAuthorized() {
|
467 |
+
return Context::getContext()->employee->isLoggedBack();
|
468 |
+
}
|
469 |
+
|
470 |
+
/**
|
471 |
+
* Save profileId of the admin who activated the plugin
|
472 |
+
*
|
473 |
+
* @param int $profileId
|
474 |
+
*/
|
475 |
+
protected function handleProfileId($profileId) {
|
476 |
+
|
477 |
+
$config = $this->getConfig();
|
478 |
+
$config['admin_profile_id'] = $profileId;
|
479 |
+
return $this->_saveConfig($config);
|
480 |
+
|
481 |
+
}
|
482 |
+
|
483 |
+
/**
|
484 |
+
* Sets the API domain for testing
|
485 |
+
*
|
486 |
+
* @param string $domain API domain
|
487 |
+
*/
|
488 |
+
public function setDomain($domain) {
|
489 |
+
$this->apiDomain = $domain;
|
490 |
+
}
|
491 |
+
}
|
app/code/community/Rublon/RublonModule/lib/RublonImplemented/RublonFeature.php
ADDED
@@ -0,0 +1,169 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Proxy class for caching the available Rublon features.
|
5 |
+
*
|
6 |
+
* If local cache is unavailable, then requesting the Rublon server
|
7 |
+
* to get list of active features for this consumer.
|
8 |
+
*
|
9 |
+
* This class is used to determine if some Rublon payed features
|
10 |
+
* will work for this consumer. If some feature is not enabled
|
11 |
+
* on the Rublon server, it won't work even if Wordpress performs
|
12 |
+
* an API call. This is used only to avoid displaying disabled GUI elements.
|
13 |
+
*/
|
14 |
+
abstract class RublonFeature {
|
15 |
+
|
16 |
+
/**
|
17 |
+
* Feature key name to override in subclass.
|
18 |
+
*
|
19 |
+
* @var string
|
20 |
+
*/
|
21 |
+
const FEATURE = '';
|
22 |
+
|
23 |
+
/**
|
24 |
+
* Number of seconds to keep the cache.
|
25 |
+
*/
|
26 |
+
const CACHE_EXPIRATION_SEC = 86400; // 24h
|
27 |
+
|
28 |
+
const BUFFERED_CONFIRMATION_OPTION_KEY = 'buffered-confirmation-time';
|
29 |
+
|
30 |
+
|
31 |
+
/**
|
32 |
+
* Check if given features is availabe for this consumer.
|
33 |
+
*
|
34 |
+
* @param strng $name
|
35 |
+
* @return boolean
|
36 |
+
*/
|
37 |
+
static function checkFeature($name) {
|
38 |
+
if ($features = self::getFeatures()) {
|
39 |
+
return (!empty($features) AND is_array($features) AND !empty($features[$name]));
|
40 |
+
} else {
|
41 |
+
return false;
|
42 |
+
}
|
43 |
+
}
|
44 |
+
|
45 |
+
|
46 |
+
/**
|
47 |
+
* Get list of all features with information which one is available for the consumer.
|
48 |
+
*
|
49 |
+
* @param boolean $cached Use cached features (default: true)
|
50 |
+
* @return mixed|Ambigous <NULL, array>
|
51 |
+
*/
|
52 |
+
static function getFeatures($cached = true) {
|
53 |
+
if (!Mage::helper('rublonmodule')->isRublonConfigured()) {
|
54 |
+
return null;
|
55 |
+
}
|
56 |
+
else if ($cached AND $features = self::getFeaturesFromCache()) {
|
57 |
+
return $features;
|
58 |
+
} else {
|
59 |
+
if ($features = self::getFeaturesFromServer()) {
|
60 |
+
self::saveFeaturesInCache($features);
|
61 |
+
return $features;
|
62 |
+
}
|
63 |
+
}
|
64 |
+
}
|
65 |
+
|
66 |
+
|
67 |
+
/**
|
68 |
+
* Get features list from cache.
|
69 |
+
*
|
70 |
+
* @return array|NULL
|
71 |
+
*/
|
72 |
+
static function getFeaturesFromCache() {
|
73 |
+
return unserialize(Mage::getStoreConfig('rublon_features', Mage::app()->getStore()));
|
74 |
+
}
|
75 |
+
|
76 |
+
|
77 |
+
/**
|
78 |
+
* Save features got from server in local cache.
|
79 |
+
*
|
80 |
+
* @param array $features
|
81 |
+
* @return bool
|
82 |
+
*/
|
83 |
+
static function saveFeaturesInCache($features) {
|
84 |
+
$config = Mage::getConfig();
|
85 |
+
return $config->saveConfig('rublon_features', serialize($features));
|
86 |
+
}
|
87 |
+
|
88 |
+
|
89 |
+
/**
|
90 |
+
* Get the features list from Rublon server.
|
91 |
+
*
|
92 |
+
* @return NULL|array
|
93 |
+
*/
|
94 |
+
static function getFeaturesFromServer() {
|
95 |
+
if (!Mage::helper('rublonmodule')->isRublonConfigured()) {
|
96 |
+
return null;
|
97 |
+
}
|
98 |
+
try {
|
99 |
+
$client = new RublonAPIGetAvailableFeatures(Mage::helper('rublonmodule')->getRublon());
|
100 |
+
$client->perform();
|
101 |
+
return $client->getFeatures();
|
102 |
+
} catch (RublonException $e) {
|
103 |
+
return null;
|
104 |
+
}
|
105 |
+
}
|
106 |
+
|
107 |
+
|
108 |
+
/**
|
109 |
+
* Get the transient name.
|
110 |
+
*
|
111 |
+
* @return string
|
112 |
+
*/
|
113 |
+
protected static function getTransientName() {
|
114 |
+
return 'rublon_features';
|
115 |
+
}
|
116 |
+
|
117 |
+
|
118 |
+
/**
|
119 |
+
* Check if this is a Business Edition.
|
120 |
+
*
|
121 |
+
* @return boolean
|
122 |
+
*/
|
123 |
+
static function isBusinessEdition() {
|
124 |
+
return RublonFeature::checkFeature(RublonAPIGetAvailableFeatures::FEATURE_FLAG_BUSINESS_EDITION);
|
125 |
+
}
|
126 |
+
|
127 |
+
|
128 |
+
/**
|
129 |
+
* Get the buffered confirmation buffer time (minutes).
|
130 |
+
*
|
131 |
+
* If this feature is disabled, returns 0.
|
132 |
+
*
|
133 |
+
* @return number
|
134 |
+
*/
|
135 |
+
static function getBufferedConfirmationTime() {
|
136 |
+
if (self::checkFeature(RublonAPIGetAvailableFeatures::FEATURE_BUFFERED_CONFIRMATION)) {
|
137 |
+
return self::getBufferedConfirmationOptionValue();
|
138 |
+
} else {
|
139 |
+
return 0;
|
140 |
+
}
|
141 |
+
}
|
142 |
+
|
143 |
+
|
144 |
+
/**
|
145 |
+
* Get the buffered confirmation buffer time option value (minutes).
|
146 |
+
*
|
147 |
+
* No matter if this feature is enabled.
|
148 |
+
*
|
149 |
+
* @return number
|
150 |
+
*/
|
151 |
+
static function getBufferedConfirmationOptionValue() {
|
152 |
+
// $options = get_option(RublonHelper::RUBLON_ADDITIONAL_SETTINGS_KEY);
|
153 |
+
// if (!empty($options[self::BUFFERED_CONFIRMATION_OPTION_KEY])) {
|
154 |
+
// return $options[self::BUFFERED_CONFIRMATION_OPTION_KEY];
|
155 |
+
// } else {
|
156 |
+
// return 0;
|
157 |
+
// }
|
158 |
+
}
|
159 |
+
|
160 |
+
/**
|
161 |
+
* Removes features list from cache.
|
162 |
+
*
|
163 |
+
* @return bool
|
164 |
+
*/
|
165 |
+
static function deleteFeaturesFromCache() {
|
166 |
+
return Mage::helper('rublonmodule')->deleteConfig('rublon_features');
|
167 |
+
}
|
168 |
+
|
169 |
+
}
|
app/code/community/Rublon/RublonModule/lib/RublonImplemented/RublonRequests.php
ADDED
@@ -0,0 +1,106 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Class for performing various requests to Rublon servers
|
4 |
+
*
|
5 |
+
* @package rublon2factor\includes
|
6 |
+
* @author Rublon Developers http://www.rublon.com
|
7 |
+
* @copyright Rublon Developers http://www.rublon.com
|
8 |
+
* @license http://opensource.org/licenses/gpl-license.php GNU Public License, version 2
|
9 |
+
*/
|
10 |
+
|
11 |
+
class RublonRequests {
|
12 |
+
|
13 |
+
const ERROR_NL_API = 'NEWSLETTER_API_ERROR';
|
14 |
+
const ERROR_NL_RUBLON_API = 'NEWSLETTER_RUBLON_API_ERROR';
|
15 |
+
const ERROR_ALREADY_SUBSCRIBED = 'NEWSLETTER_ALREADY_SUBSCRIBED_ERROR';
|
16 |
+
const ERROR_INVALID_NONCE = 'NEWSLETTER_INVALID_NONCE_ERROR';
|
17 |
+
const ERROR_RUBLON_NOT_CONFIGURED = 'RUBLON_NOT_CONFIGURED';
|
18 |
+
|
19 |
+
const SUCCESS_NL_SUBSCRIBED_SUCCESSFULLY = 'NEWSLETTER_SUBSCRIBE_OK';
|
20 |
+
|
21 |
+
|
22 |
+
/**
|
23 |
+
* Rublon2Factor instance
|
24 |
+
*
|
25 |
+
* @var Rublon2Factor
|
26 |
+
*/
|
27 |
+
protected $rublon;
|
28 |
+
|
29 |
+
|
30 |
+
/**
|
31 |
+
* Constructor
|
32 |
+
*/
|
33 |
+
public function __construct() {
|
34 |
+
|
35 |
+
$this->rublon = Mage::helper('rublonmodule')->getRublon();
|
36 |
+
|
37 |
+
}
|
38 |
+
|
39 |
+
|
40 |
+
/**
|
41 |
+
* Check mobile app status of a single WP user
|
42 |
+
*
|
43 |
+
* @param WP_User $user
|
44 |
+
* @return string RublonHelper constant
|
45 |
+
*/
|
46 |
+
public function checkMobileStatus($user_id, $user_email) {
|
47 |
+
$helper = Mage::helper('rublonmodule');
|
48 |
+
|
49 |
+
if ($helper->isRublonConfigured()) {
|
50 |
+
require_once dirname(__FILE__) . '/RublonAPICheckProtection.php';
|
51 |
+
$check = new RublonAPICheckProtection(
|
52 |
+
$this->rublon,
|
53 |
+
$user_id,
|
54 |
+
$user_email
|
55 |
+
);
|
56 |
+
try {
|
57 |
+
$check->perform();
|
58 |
+
} catch (RublonException $e) {
|
59 |
+
$check = null;
|
60 |
+
}
|
61 |
+
|
62 |
+
if (!empty($check) && $check->isProtectionEnabled($user_id)) {
|
63 |
+
$mobile_user_status = RublonMagentoModule::YES;
|
64 |
+
} else {
|
65 |
+
$mobile_user_status = RublonMagentoModule::NO;
|
66 |
+
}
|
67 |
+
|
68 |
+
return $mobile_user_status;
|
69 |
+
} else {
|
70 |
+
return self::ERROR_RUBLON_NOT_CONFIGURED;
|
71 |
+
}
|
72 |
+
|
73 |
+
}
|
74 |
+
|
75 |
+
public function subscribeToNewsletter($email) {
|
76 |
+
$helper = Mage::helper('rublonmodule');
|
77 |
+
|
78 |
+
if ($helper->isRublonConfigured()) {
|
79 |
+
require_once dirname(__FILE__) . '/RublonAPINewsletterSignup.php';
|
80 |
+
$signup = new RublonAPINewsletterSignup($this->rublon, $email);
|
81 |
+
try {
|
82 |
+
$signup->perform();
|
83 |
+
$result = $signup->subscribedSuccessfully();
|
84 |
+
} catch (RublonException $e) {
|
85 |
+
if ($e instanceof RublonAPIException) {
|
86 |
+
$response = $e->getClient()->getResponse();
|
87 |
+
if (!empty( $response[RublonAPINewsletterSignup::FIELD_RESULT] )
|
88 |
+
&& !empty( $response[RublonAPINewsletterSignup::FIELD_RESULT]['exception'] )
|
89 |
+
&& $response[RublonAPINewsletterSignup::FIELD_RESULT]['exception'] == 'AlreadySubscribed_NewsletterException') {
|
90 |
+
$result = self::ERROR_ALREADY_SUBSCRIBED;
|
91 |
+
} else {
|
92 |
+
$result = self::ERROR_NL_API;
|
93 |
+
}
|
94 |
+
} else {
|
95 |
+
$result = self::ERROR_NL_RUBLON_API;
|
96 |
+
}
|
97 |
+
}
|
98 |
+
return ($result !== false) ? $result : self::ERROR_NL_RUBLON_API;
|
99 |
+
} else {
|
100 |
+
return self::ERROR_RUBLON_NOT_CONFIGURED;
|
101 |
+
}
|
102 |
+
|
103 |
+
}
|
104 |
+
|
105 |
+
|
106 |
+
}
|
app/code/community/Rublon/RublonModule/lib/RublonIssueNotifier/RublonIssueNotifier.php
ADDED
@@ -0,0 +1,306 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Rublon issue notification helper
|
5 |
+
*
|
6 |
+
* Class has method to notify Rublon Team about issues and errors.
|
7 |
+
* It utilize curl or file_get_contents requests on the server-side
|
8 |
+
* or client-side requests from browser's JavaScript
|
9 |
+
* if the server-side methods are not available.
|
10 |
+
*
|
11 |
+
* Create a subclass to override detailed parameters.
|
12 |
+
*
|
13 |
+
*/
|
14 |
+
class RublonIssueNotifier {
|
15 |
+
|
16 |
+
/**
|
17 |
+
* Rublon API domain
|
18 |
+
*
|
19 |
+
* @var string
|
20 |
+
*/
|
21 |
+
const API_DOMAIN = 'https://code.rublon.com';
|
22 |
+
|
23 |
+
|
24 |
+
/**
|
25 |
+
* Rublon API path
|
26 |
+
*
|
27 |
+
* @var string
|
28 |
+
*/
|
29 |
+
const API_PATH = '/issue_notifier/module_notify';
|
30 |
+
|
31 |
+
/**
|
32 |
+
* Default technology tag
|
33 |
+
*
|
34 |
+
* @var string
|
35 |
+
*/
|
36 |
+
const DEFAULT_TECHNOLOGY = 'php-sdk';
|
37 |
+
|
38 |
+
/**
|
39 |
+
* User agent header for request
|
40 |
+
*
|
41 |
+
* @var string
|
42 |
+
*/
|
43 |
+
const USER_AGENT = 'RublonIssueNotifier';
|
44 |
+
|
45 |
+
|
46 |
+
/**
|
47 |
+
* Notify Rublon Team about some issue
|
48 |
+
*
|
49 |
+
* @param mixed $issue
|
50 |
+
* @param array $options
|
51 |
+
* @return boolean
|
52 |
+
*/
|
53 |
+
public function notify($issue, $options = array()) {
|
54 |
+
return $this->send($this->formatData($issue, $options));
|
55 |
+
}
|
56 |
+
|
57 |
+
|
58 |
+
/**
|
59 |
+
* Get client-side notification HTML code
|
60 |
+
*
|
61 |
+
* @param array $options
|
62 |
+
* @return string
|
63 |
+
*/
|
64 |
+
public function getBrowserIssueForm($options) {
|
65 |
+
return '<script type="text/javascript">
|
66 |
+
(function() {
|
67 |
+
var frame = document.createElement("iframe");
|
68 |
+
frame.id = "RublonIssueFrame";
|
69 |
+
frame.name = "RublonIssueFrame";
|
70 |
+
frame.style.display = "none";
|
71 |
+
document.body.appendChild(frame);
|
72 |
+
var form = document.createElement("form");
|
73 |
+
form.method = "POST";
|
74 |
+
form.action = '. json_encode($this->getRequestURL()) .';
|
75 |
+
form.id = "RublonIssueForm";
|
76 |
+
form.target = "RublonIssueFrame";
|
77 |
+
form.style.display = "none";
|
78 |
+
document.body.appendChild(form);
|
79 |
+
var content = document.createElement("textarea");
|
80 |
+
content.name = "issue";
|
81 |
+
content.value = '. json_encode(json_encode($options)) .';
|
82 |
+
form.appendChild(content);
|
83 |
+
form.submit();
|
84 |
+
})();
|
85 |
+
</script>';
|
86 |
+
}
|
87 |
+
|
88 |
+
|
89 |
+
|
90 |
+
/**
|
91 |
+
* Create issue information array
|
92 |
+
*
|
93 |
+
* @param mixed $issue
|
94 |
+
* @param array $options
|
95 |
+
* @return array
|
96 |
+
*/
|
97 |
+
protected function formatData($issue, $options) {
|
98 |
+
|
99 |
+
if (!is_array($options)) {
|
100 |
+
$options = array();
|
101 |
+
}
|
102 |
+
$data = array();
|
103 |
+
|
104 |
+
if (is_object($issue) AND $issue instanceof Exception) { // Exception
|
105 |
+
$data['description'] = $issue->getMessage();
|
106 |
+
$options['exception']['code'] = $issue->getCode();
|
107 |
+
$options['exception']['file'] = $issue->getFile();
|
108 |
+
$options['exception']['line'] = $issue->getLine();
|
109 |
+
if (method_exists($issue, 'getTraceAsString')) {
|
110 |
+
$options['exception']['trace'] = $issue->getTraceAsString();
|
111 |
+
} else {
|
112 |
+
$options['exception']['string'] = (string)$issue;
|
113 |
+
}
|
114 |
+
}
|
115 |
+
else if (!is_scalar($issue)) { // Object/array
|
116 |
+
$data['description'] = print_r($issue, true);
|
117 |
+
} else { // scalar (eg. text)
|
118 |
+
$data['description'] = $issue;
|
119 |
+
}
|
120 |
+
|
121 |
+
// Rewrite some fields
|
122 |
+
$rewrite = array('url' => 'url', 'method' => 'where', 'profile_id' => 'profile_id');
|
123 |
+
foreach ($rewrite as $name => $new) {
|
124 |
+
if (!empty($options[$name])) {
|
125 |
+
if (!isset($data[$new])) {
|
126 |
+
$data[$new] = $options[$name];
|
127 |
+
}
|
128 |
+
}
|
129 |
+
}
|
130 |
+
|
131 |
+
// Add technology to the "where" field
|
132 |
+
if (!isset($data['where'])) {
|
133 |
+
$data['where'] = $this->getTechnology();
|
134 |
+
} else {
|
135 |
+
$data['where'] = $this->getTechnology() . ' - '. $data['where'];
|
136 |
+
}
|
137 |
+
|
138 |
+
if (empty($data['url'])) {
|
139 |
+
$data['url'] = $this->getCurrentUrl();
|
140 |
+
}
|
141 |
+
|
142 |
+
$data['context'] = $options;
|
143 |
+
$data['ip_addr'] = $_SERVER['REMOTE_ADDR'];
|
144 |
+
|
145 |
+
return $data;
|
146 |
+
}
|
147 |
+
|
148 |
+
|
149 |
+
/**
|
150 |
+
* Send notification
|
151 |
+
*
|
152 |
+
* @param array $options
|
153 |
+
* @return boolean
|
154 |
+
*/
|
155 |
+
protected function send(array $options) {
|
156 |
+
return ($this->sendByCurl($options)
|
157 |
+
OR $this->sendByFileGetContents($options)
|
158 |
+
OR $this->sendByBrowser($options)
|
159 |
+
);
|
160 |
+
}
|
161 |
+
|
162 |
+
|
163 |
+
|
164 |
+
/**
|
165 |
+
* Returns module's technology tag
|
166 |
+
*
|
167 |
+
* @return string
|
168 |
+
*/
|
169 |
+
protected function getTechnology() {
|
170 |
+
return self::DEFAULT_TECHNOLOGY;
|
171 |
+
}
|
172 |
+
|
173 |
+
|
174 |
+
/**
|
175 |
+
* Get API domain
|
176 |
+
*
|
177 |
+
* @return string
|
178 |
+
*/
|
179 |
+
protected function getDomain() {
|
180 |
+
return self::API_DOMAIN;
|
181 |
+
}
|
182 |
+
|
183 |
+
|
184 |
+
/**
|
185 |
+
* Get URL address of the notification request
|
186 |
+
*
|
187 |
+
* @return string
|
188 |
+
*/
|
189 |
+
protected function getRequestURL() {
|
190 |
+
return $this->getDomain() . self::API_PATH;
|
191 |
+
}
|
192 |
+
|
193 |
+
/**
|
194 |
+
* Send notification by cURL
|
195 |
+
*
|
196 |
+
* @param array $options
|
197 |
+
* @return boolean
|
198 |
+
*/
|
199 |
+
protected function sendByCurl(array $options) {
|
200 |
+
|
201 |
+
if (!function_exists('curl_init')) {
|
202 |
+
return false;
|
203 |
+
}
|
204 |
+
|
205 |
+
$ch = curl_init($this->getRequestURL());
|
206 |
+
$headers = array(
|
207 |
+
"Content-Type: application/json; charset=utf-8",
|
208 |
+
"Accept: application/json, text/javascript, */*; q=0.01",
|
209 |
+
"X-Rublon-Technology: ". $this->getTechnology(),
|
210 |
+
);
|
211 |
+
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
|
212 |
+
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
|
213 |
+
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
|
214 |
+
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');
|
215 |
+
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($options));
|
216 |
+
curl_setopt($ch, CURLOPT_HEADER, false);
|
217 |
+
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
218 |
+
curl_setopt($ch, CURLOPT_USERAGENT, self::USER_AGENT);
|
219 |
+
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
|
220 |
+
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
|
221 |
+
|
222 |
+
$response = curl_exec($ch);
|
223 |
+
|
224 |
+
return $this->validateResponse($response);
|
225 |
+
|
226 |
+
}
|
227 |
+
|
228 |
+
|
229 |
+
/**
|
230 |
+
* Send notification by PHP-native file_get_contents function
|
231 |
+
*
|
232 |
+
* @param array $options
|
233 |
+
* @return boolean
|
234 |
+
*/
|
235 |
+
protected function sendByFileGetContents(array $options) {
|
236 |
+
|
237 |
+
if (!function_exists('file_get_contents')
|
238 |
+
OR !function_exists('stream_context_create')) {
|
239 |
+
return false;
|
240 |
+
}
|
241 |
+
|
242 |
+
$opts = array(
|
243 |
+
'http' => array(
|
244 |
+
'method' => "PUT",
|
245 |
+
'header' => "content-type: application/json; charset=UTF-8\n
|
246 |
+
user-agent: ". self::USER_AGENT ."\n
|
247 |
+
X-Rublon-Technology: ". $this->getTechnology(),
|
248 |
+
'content' => json_encode($options),
|
249 |
+
'timeout' => 10,
|
250 |
+
),
|
251 |
+
);
|
252 |
+
|
253 |
+
$context = stream_context_create($opts);
|
254 |
+
$response = @file_get_contents($this->getRequestURL(), false, $context);
|
255 |
+
|
256 |
+
return $this->validateResponse($response);
|
257 |
+
|
258 |
+
}
|
259 |
+
|
260 |
+
|
261 |
+
/**
|
262 |
+
* Validate HTTP response from API server
|
263 |
+
*
|
264 |
+
* @param mixed $response
|
265 |
+
* @return boolean
|
266 |
+
*/
|
267 |
+
protected function validateResponse($response) {
|
268 |
+
if (is_scalar($response)) {
|
269 |
+
$response = json_decode($response, true);
|
270 |
+
} else {
|
271 |
+
$response = (array)$response;
|
272 |
+
}
|
273 |
+
return (!empty($response)
|
274 |
+
AND is_array($response)
|
275 |
+
AND !empty($response['status'])
|
276 |
+
AND $response['status'] == 'OK');
|
277 |
+
}
|
278 |
+
|
279 |
+
/**
|
280 |
+
* Send notification by browser output handler
|
281 |
+
*
|
282 |
+
* Method not implemented - to override in subclass.
|
283 |
+
*
|
284 |
+
* @param array $options
|
285 |
+
* @return boolean
|
286 |
+
*/
|
287 |
+
protected function sendByBrowser(array $options) {
|
288 |
+
return false;
|
289 |
+
}
|
290 |
+
|
291 |
+
|
292 |
+
/**
|
293 |
+
* Get current URL address
|
294 |
+
*
|
295 |
+
* @return string|NULL
|
296 |
+
*/
|
297 |
+
protected function getCurrentUrl() {
|
298 |
+
if (isset($_SERVER['SERVER_NAME']) AND isset($_SERVER['REQUEST_URI'])) {
|
299 |
+
return $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'];
|
300 |
+
} else {
|
301 |
+
return null;
|
302 |
+
}
|
303 |
+
}
|
304 |
+
|
305 |
+
|
306 |
+
}
|
app/code/community/Rublon/RublonModule/lib/RublonIssueNotifier/RublonMagentoIssueNotifier.php
ADDED
@@ -0,0 +1,111 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
require_once 'RublonIssueNotifier.php';
|
4 |
+
|
5 |
+
class RublonMagentoIssueNotifier extends RublonIssueNotifier {
|
6 |
+
|
7 |
+
|
8 |
+
/**
|
9 |
+
* Rublon helper instance
|
10 |
+
*
|
11 |
+
* @var Rublon_Rublon2Factor_Helper_Data
|
12 |
+
*/
|
13 |
+
protected $helper;
|
14 |
+
|
15 |
+
/**
|
16 |
+
* Silent notification
|
17 |
+
* @var bool
|
18 |
+
*/
|
19 |
+
protected $silence;
|
20 |
+
|
21 |
+
|
22 |
+
/**
|
23 |
+
* Constructor - set the Rublon helper instance
|
24 |
+
*
|
25 |
+
* @param Rublon_Rublon2Factor_Helper_Data $helper
|
26 |
+
*/
|
27 |
+
function __construct($helper) {
|
28 |
+
$this->helper = $helper;
|
29 |
+
}
|
30 |
+
|
31 |
+
function setSilence($value) {
|
32 |
+
$this->silence = $value;
|
33 |
+
}
|
34 |
+
|
35 |
+
/**
|
36 |
+
* Add Magento specific variables into issue information
|
37 |
+
*
|
38 |
+
* @see RublonIssueNotifier::formatData()
|
39 |
+
*/
|
40 |
+
protected function formatData($issue, $options) {
|
41 |
+
|
42 |
+
$data = parent::formatData($issue, $options);
|
43 |
+
|
44 |
+
if (function_exists('ini_get_all')) {
|
45 |
+
@ $data['context']['php']['ini'] = ini_get_all(null, false);
|
46 |
+
}
|
47 |
+
if (function_exists('get_loaded_extensions')) {
|
48 |
+
@ $data['context']['php']['loaded_extensions'] = get_loaded_extensions();
|
49 |
+
}
|
50 |
+
|
51 |
+
if (empty($data['email'])) {
|
52 |
+
$data['email'] = $this->helper->getAuthUserEmail();
|
53 |
+
}
|
54 |
+
|
55 |
+
$data['context']['_SERVER'] = $_SERVER;
|
56 |
+
$data['context']['_POST'] = false;
|
57 |
+
$data['context']['_GET'] = false;
|
58 |
+
$data['context']['_COOKIE'] = false;
|
59 |
+
|
60 |
+
return $data;
|
61 |
+
|
62 |
+
}
|
63 |
+
|
64 |
+
/**
|
65 |
+
* (non-PHPdoc)
|
66 |
+
* @see RublonIssueNotifier::getDomain()
|
67 |
+
*/
|
68 |
+
protected function getDomain() {
|
69 |
+
return $this->helper->getRublonDomain();
|
70 |
+
}
|
71 |
+
|
72 |
+
/**
|
73 |
+
* (non-PHPdoc)
|
74 |
+
* @see RublonIssueNotifier::getTechnology()
|
75 |
+
*/
|
76 |
+
protected function getTechnology() {
|
77 |
+
return $this->helper->getTechnology();
|
78 |
+
}
|
79 |
+
|
80 |
+
/**
|
81 |
+
* (non-PHPdoc)
|
82 |
+
* @see RublonIssueNotifier::sendByBrowser()
|
83 |
+
*/
|
84 |
+
protected function sendByBrowser(array $options) {
|
85 |
+
if (!$this->silence) {
|
86 |
+
$content = $this->helper->__('Issue notification has been sent to the Rublon support team.');
|
87 |
+
$content .= $this->getBrowserIssueForm($options);
|
88 |
+
Mage::getSingleton('core/session')->addNotice($content);
|
89 |
+
}
|
90 |
+
return true;
|
91 |
+
}
|
92 |
+
|
93 |
+
/**
|
94 |
+
* (non-PHPdoc)
|
95 |
+
* @see RublonIssueNotifier::getCurrentUrl()
|
96 |
+
*/
|
97 |
+
protected function getCurrentUrl() {
|
98 |
+
return $this->helper->getCurrentURL();
|
99 |
+
}
|
100 |
+
|
101 |
+
/**
|
102 |
+
* (non-PHPdoc)
|
103 |
+
* @see RublonIssueNotifier::send()
|
104 |
+
*/
|
105 |
+
protected function send(array $options) {
|
106 |
+
if ($this->helper->isTrackingAllowed()) {
|
107 |
+
parent::send($options);
|
108 |
+
}
|
109 |
+
}
|
110 |
+
|
111 |
+
}
|
app/code/community/Rublon/RublonModule/lib/RublonIssueNotifier/RublonPrestaShopIssueNotifier.php
ADDED
@@ -0,0 +1,104 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* 2013 Rublon
|
4 |
+
*
|
5 |
+
* NOTICE OF LICENSE
|
6 |
+
*
|
7 |
+
* This source file is subject to the Academic Free License (AFL 3.0)
|
8 |
+
* that is bundled with this package in the file LICENSE.txt.
|
9 |
+
* It is also available through the world-wide-web at this URL:
|
10 |
+
* http://opensource.org/licenses/afl-3.0.php
|
11 |
+
* If you did not receive a copy of the license and are unable to
|
12 |
+
* obtain it through the world-wide-web, please send an email
|
13 |
+
* to license@prestashop.com so we can send you a copy immediately.
|
14 |
+
*
|
15 |
+
* DISCLAIMER
|
16 |
+
*
|
17 |
+
* Do not edit or add to this file if you wish to upgrade Rublon to newer
|
18 |
+
* versions in the future. If you wish to customize Rublon for your
|
19 |
+
* needs please contact us at support@rublon.com for more information.
|
20 |
+
*
|
21 |
+
* @author Rublon <support@rublon.com>
|
22 |
+
* @copyright 2013 Adips
|
23 |
+
* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
|
24 |
+
* Property of Adips Sp. z o. o., Poland
|
25 |
+
*/
|
26 |
+
|
27 |
+
require_once 'RublonIssueNotifier.php';
|
28 |
+
|
29 |
+
class RublonPrestaShopIssueNotifier extends RublonIssueNotifier {
|
30 |
+
|
31 |
+
|
32 |
+
/**
|
33 |
+
* Add Magento specific variables into issue information
|
34 |
+
*
|
35 |
+
* @see RublonIssueNotifier::formatData()
|
36 |
+
*/
|
37 |
+
protected function formatData($issue, $options) {
|
38 |
+
|
39 |
+
$data = parent::formatData($issue, $options);
|
40 |
+
|
41 |
+
if (function_exists('ini_get_all')) {
|
42 |
+
@ $data['context']['php']['ini'] = ini_get_all(null, false);
|
43 |
+
}
|
44 |
+
if (function_exists('get_loaded_extensions')) {
|
45 |
+
@ $data['context']['php']['loaded_extensions'] = get_loaded_extensions();
|
46 |
+
}
|
47 |
+
|
48 |
+
if (empty($data['profile_id'])) {
|
49 |
+
$data['profile_id'] = RublonHelper::getRublonProfileId();
|
50 |
+
}
|
51 |
+
|
52 |
+
$data['context']['_SERVER'] = $_SERVER;
|
53 |
+
$data['context']['_POST'] = $_POST;
|
54 |
+
$data['context']['_GET'] = $_GET;
|
55 |
+
$data['context']['_COOKIE'] = $_COOKIE;
|
56 |
+
|
57 |
+
return $data;
|
58 |
+
|
59 |
+
}
|
60 |
+
|
61 |
+
/**
|
62 |
+
* (non-PHPdoc)
|
63 |
+
* @see RublonIssueNotifier::getDomain()
|
64 |
+
*/
|
65 |
+
protected function getDomain() {
|
66 |
+
|
67 |
+
return RublonHelper::getAPIDomain();
|
68 |
+
|
69 |
+
}
|
70 |
+
|
71 |
+
/**
|
72 |
+
* (non-PHPdoc)
|
73 |
+
* @see RublonIssueNotifier::getTechnology()
|
74 |
+
*/
|
75 |
+
protected function getTechnology() {
|
76 |
+
|
77 |
+
return RublonHelper::getTechnology();
|
78 |
+
|
79 |
+
}
|
80 |
+
|
81 |
+
/**
|
82 |
+
* (non-PHPdoc)
|
83 |
+
* @see RublonIssueNotifier::sendByBrowser()
|
84 |
+
*/
|
85 |
+
protected function sendByBrowser(array $options) {
|
86 |
+
|
87 |
+
$content = $this->getBrowserIssueForm($options);
|
88 |
+
$rublon = Module::getInstanceByName('rublon');
|
89 |
+
$rublon->addJSNotification($content);
|
90 |
+
return true;
|
91 |
+
|
92 |
+
}
|
93 |
+
|
94 |
+
/**
|
95 |
+
* (non-PHPdoc)
|
96 |
+
* @see RublonIssueNotifier::getCurrentUrl()
|
97 |
+
*/
|
98 |
+
protected function getCurrentUrl() {
|
99 |
+
|
100 |
+
return RublonHelper::getCurrentURL();
|
101 |
+
|
102 |
+
}
|
103 |
+
|
104 |
+
}
|
app/code/community/Rublon/RublonModule/lib/RublonIssueNotifier/index.php
ADDED
@@ -0,0 +1,35 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* 2013 Rublon
|
4 |
+
*
|
5 |
+
* NOTICE OF LICENSE
|
6 |
+
*
|
7 |
+
* This source file is subject to the Academic Free License (AFL 3.0)
|
8 |
+
* that is bundled with this package in the file LICENSE.txt.
|
9 |
+
* It is also available through the world-wide-web at this URL:
|
10 |
+
* http://opensource.org/licenses/afl-3.0.php
|
11 |
+
* If you did not receive a copy of the license and are unable to
|
12 |
+
* obtain it through the world-wide-web, please send an email
|
13 |
+
* to license@prestashop.com so we can send you a copy immediately.
|
14 |
+
*
|
15 |
+
* DISCLAIMER
|
16 |
+
*
|
17 |
+
* Do not edit or add to this file if you wish to upgrade Rublon to newer
|
18 |
+
* versions in the future. If you wish to customize Rublon for your
|
19 |
+
* needs please contact us at support@rublon.com for more information.
|
20 |
+
*
|
21 |
+
* @author Rublon <support@rublon.com>
|
22 |
+
* @copyright 2013 Adips
|
23 |
+
* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
|
24 |
+
* Property of Adips Sp. z o. o., Poland
|
25 |
+
*/
|
26 |
+
|
27 |
+
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
|
28 |
+
header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");
|
29 |
+
|
30 |
+
header("Cache-Control: no-store, no-cache, must-revalidate");
|
31 |
+
header("Cache-Control: post-check=0, pre-check=0", false);
|
32 |
+
header("Pragma: no-cache");
|
33 |
+
|
34 |
+
header("Location: ../");
|
35 |
+
exit;
|
app/design/adminhtml/default/default/layout/rublonmodule.xml
ADDED
@@ -0,0 +1,49 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0"?>
|
2 |
+
<layout version="1.0.0">
|
3 |
+
|
4 |
+
<adminhtml_index_login>
|
5 |
+
<reference name="form.additional.info">
|
6 |
+
<block type="rublonmodule/seal" name="rublon_seal" />
|
7 |
+
</reference>
|
8 |
+
</adminhtml_index_login>
|
9 |
+
|
10 |
+
<rublonmodule_adminhtml_settings_index>
|
11 |
+
<reference name="head">
|
12 |
+
<action method="addCss">
|
13 |
+
<stylesheet>Rublon/css/rublon.css</stylesheet>
|
14 |
+
</action>
|
15 |
+
</reference>
|
16 |
+
<reference name="content">
|
17 |
+
<block type="adminhtml/template" name="RublonModule" template="RublonModule/index.phtml" />
|
18 |
+
</reference>
|
19 |
+
</rublonmodule_adminhtml_settings_index>
|
20 |
+
|
21 |
+
<rublonmodule_adminhtml_activation_index>
|
22 |
+
<reference name="head">
|
23 |
+
<action method="addCss">
|
24 |
+
<stylesheet>Rublon/css/rublon.css</stylesheet>
|
25 |
+
</action>
|
26 |
+
<action method="addJs">
|
27 |
+
<script>Rublon/rublon.js</script>
|
28 |
+
</action>
|
29 |
+
</reference>
|
30 |
+
<reference name="content">
|
31 |
+
<block type="adminhtml/template" name="RublonModule" template="RublonModule/activation.phtml" />
|
32 |
+
</reference>
|
33 |
+
</rublonmodule_adminhtml_activation_index>
|
34 |
+
|
35 |
+
<rublonmodule_adminhtml_activation_initialize>
|
36 |
+
<reference name="head">
|
37 |
+
<action method="addCss">
|
38 |
+
<stylesheet>Rublon/css/rublon.css</stylesheet>
|
39 |
+
</action>
|
40 |
+
<action method="addJs">
|
41 |
+
<script>Rublon/rublon.js</script>
|
42 |
+
</action>
|
43 |
+
</reference>
|
44 |
+
<reference name="content">
|
45 |
+
<block type="adminhtml/template" name="RublonModule" template="RublonModule/registration.phtml" />
|
46 |
+
</reference>
|
47 |
+
</rublonmodule_adminhtml_activation_initialize>
|
48 |
+
|
49 |
+
</layout>
|
app/design/adminhtml/default/default/template/RublonModule/activation.phtml
ADDED
@@ -0,0 +1,60 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<div class="bootstrap rublon-allow-tracking-header">
|
2 |
+
<img id="rublon-allow-tracking-logo-img" alt=""
|
3 |
+
src="<?php echo $logo_url; ?>">
|
4 |
+
<h3><?php echo $path; ?></h3>
|
5 |
+
</div>
|
6 |
+
|
7 |
+
<div class="rublon-container">
|
8 |
+
|
9 |
+
<form id="rublon-consumer-registration-init" action="<?php echo $registration_init_action; ?>" method="post">
|
10 |
+
|
11 |
+
<div id="rublon-api-reg-container">
|
12 |
+
|
13 |
+
<input name="form_key" type="hidden" value="<?php echo Mage::getSingleton('core/session')->getFormKey() ?>" />
|
14 |
+
<h3>API registration</h3>
|
15 |
+
<div class="rublon-apireg-half-column rublon-apireg-description">
|
16 |
+
<p><?php echo $api_message[0]; ?></p>
|
17 |
+
<p><?php echo $api_message[1]; ?></p>
|
18 |
+
<fieldset class="rublon-apireg-fieldset">
|
19 |
+
<label for="rublon-apireg-terms-agreed"><input type="checkbox"
|
20 |
+
id="rublon-apireg-terms-agreed" name="apiregTermsAgreed" value="1"> <strong>(*)</strong> I
|
21 |
+
agree to the <a
|
22 |
+
href="https://developers.rublon.com/54/Terms-of-Service"
|
23 |
+
target="_blank">Rublon API Terms of Service</a></label>
|
24 |
+
</fieldset>
|
25 |
+
<fieldset class="rublon-apireg-fieldset">
|
26 |
+
<label for="rublon-apireg-newsletter-signup"><input type="checkbox"
|
27 |
+
id="rublon-apireg-newsletter-signup" name="apiregNewsletterSignup"
|
28 |
+
value="1"> Subscribe to our newsletter</label>
|
29 |
+
</fieldset>
|
30 |
+
</div>
|
31 |
+
<div class="rublon-apireg-half-column rublon-apireg-image">
|
32 |
+
<img src="<?php echo $rublon_visual_url; ?>"
|
33 |
+
class="rublon-apireg-visual rublon-image">
|
34 |
+
|
35 |
+
</div>
|
36 |
+
</div>
|
37 |
+
|
38 |
+
<div id="rublon-allow-tracking-container">
|
39 |
+
<div class="rublon-allow-tracking-content">
|
40 |
+
<h3><?php echo $title ?></h3>
|
41 |
+
<p><?php echo $allow_message ?></p>
|
42 |
+
<fieldset class="rublon-apireg-fieldset">
|
43 |
+
<label for="rublon-apireg-allow-tracking"><input type="checkbox"
|
44 |
+
id="rublon-apireg-allow-tracking" name="apiregAllowTracking" value="1">
|
45 |
+
Allow tracking</label>
|
46 |
+
</fieldset>
|
47 |
+
<div class="rublon-buttons">
|
48 |
+
<a id="rublon-button-activate" class="rublon-button">Activate</a>
|
49 |
+
</div>
|
50 |
+
</div>
|
51 |
+
<sub>(*) Required field</sub>
|
52 |
+
</div>
|
53 |
+
|
54 |
+
</form>
|
55 |
+
|
56 |
+
</div>
|
57 |
+
<form action="{$rublon_allow_tracking_action_url}"
|
58 |
+
id="rublon-allow-tracking-form" method="post">
|
59 |
+
<input name="rublon-allow-tracking" type="hidden" value="0">
|
60 |
+
</form>
|
app/design/adminhtml/default/default/template/RublonModule/apiRegistration.phtml
ADDED
@@ -0,0 +1,41 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php //{if $messages} {$messages} {/if} ?>
|
2 |
+
<br />
|
3 |
+
|
4 |
+
<div class="bootstrap rublon-allow-tracking-header">
|
5 |
+
<img id="rublon-allow-tracking-logo-img" alt="" src="{$smarty.const._PS_BASE_URL_}/modules/rublon/img/rublon_logo_32x32.png"><h3>{$path}</h3>
|
6 |
+
</div>
|
7 |
+
|
8 |
+
<div id="rublon-api-reg-container" class="bootstrap rublon-container">
|
9 |
+
<form id="rublon-consumer-registration-init" action="{$registration_init_action}" method="post">
|
10 |
+
<h3>{$rublon_api_reg_title}</h3>
|
11 |
+
<div class="rublon-apireg-half-column rublon-apireg-description">
|
12 |
+
<p>{$rublon_api_reg_messages[0]}</p>
|
13 |
+
<p>{$rublon_api_reg_messages[1]}</p>
|
14 |
+
<fieldset class="rublon-apireg-fieldset">
|
15 |
+
<label for="rublon-apireg-terms-agreed"><input
|
16 |
+
type="checkbox" id="rublon-apireg-terms-agreed"
|
17 |
+
name="apiregTermsAgreed" value="1">I agree to the <a
|
18 |
+
href="https://developers.rublon.com/54/Terms-of-Service"
|
19 |
+
target="_blank">Rublon API Terms of Service</a></label>
|
20 |
+
</fieldset>
|
21 |
+
<fieldset class="rublon-apireg-fieldset">
|
22 |
+
<label for="rublon-apireg-newsletter-signup"><input
|
23 |
+
type="checkbox" id="rublon-apireg-newsletter-signup"
|
24 |
+
name="apiregNewsletterSignup" value="1">Subscribe to our
|
25 |
+
newsletter</label>
|
26 |
+
</fieldset>
|
27 |
+
|
28 |
+
</div>
|
29 |
+
</form>
|
30 |
+
<div class="rublon-apireg-half-column rublon-apireg-image">
|
31 |
+
<img
|
32 |
+
src="{$smarty.const._PS_BASE_URL_}/modules/rublon/img/rublon_visual.gif"
|
33 |
+
class="rublon-apireg-visual rublon-image">
|
34 |
+
|
35 |
+
</div>
|
36 |
+
|
37 |
+
<div class="rublon-buttons">
|
38 |
+
<!-- a id="rublon-button-cancel" class="btn btn-default btn-lg pull-left">Cancel <i class="icon icon-times icon-lg"></i></a> -->
|
39 |
+
<a id="rublon-button-activate" class="btn btn-default btn-lg pull-left">Activate <i class="icon icon-angle-right icon-lg"></i></a>
|
40 |
+
</div>
|
41 |
+
</div>
|
app/design/adminhtml/default/default/template/RublonModule/index.phtml
ADDED
@@ -0,0 +1,54 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php if ($data['showUpgradeBox']): ?>
|
2 |
+
<div class="updated rublon-be-infobox-container<?php echo (!$data['isProjectOwner']?' warning':''); ?>">
|
3 |
+
<div id="message" class="rublon-be-infobox-content">
|
4 |
+
<div class="rublon-buy-now-subcontainer">
|
5 |
+
<div class="rublon-buy-now-left">
|
6 |
+
|
7 |
+
<h3><?php echo $data['boxTitle']; ?></h3>
|
8 |
+
|
9 |
+
<p>
|
10 |
+
<?php echo $data['line1Text']; ?>
|
11 |
+
<?php echo $data['line2Text']; ?>
|
12 |
+
<?php echo $data['line3Text']; ?>
|
13 |
+
</p>
|
14 |
+
<p>
|
15 |
+
<a href="<?php echo $data['upgradeNowURL']; ?>" class="rublon-button-buy-now" target="_blank"><?php echo $data['upgradeNowText']; ?></a>
|
16 |
+
</p>
|
17 |
+
<p class="rublon-buy-now-tip">
|
18 |
+
<?php echo $data['smallHintText']; ?>
|
19 |
+
</p>
|
20 |
+
</div>
|
21 |
+
</div>
|
22 |
+
</div>
|
23 |
+
</div>
|
24 |
+
<?php elseif($data['isBusinessEdition']): ?>
|
25 |
+
<h3><?php echo $data['businessEditionActivatedText']; ?></h3>
|
26 |
+
<?php endif;?>
|
27 |
+
|
28 |
+
<?php
|
29 |
+
if ($data['canShowTrustedDeviceWidget']) {
|
30 |
+
echo $data['deviceWidget'];
|
31 |
+
}
|
32 |
+
?>
|
33 |
+
|
34 |
+
<?php if ($data['showNotProtectedMessage']): ?>
|
35 |
+
<div class="updated rublon-be-infobox-container warning">
|
36 |
+
<div id="message" class="rublon-be-infobox-content">
|
37 |
+
<div class="rublon-buy-now-subcontainer">
|
38 |
+
<div class="rublon-buy-now-left">
|
39 |
+
|
40 |
+
<h3><?php echo $data['notProtectedBoxTitle']; ?></h3>
|
41 |
+
|
42 |
+
<p>
|
43 |
+
<?php echo $data['notProtectedText']; ?>
|
44 |
+
</p>
|
45 |
+
</div>
|
46 |
+
</div>
|
47 |
+
</div>
|
48 |
+
</div>
|
49 |
+
|
50 |
+
<?php
|
51 |
+
endif;
|
52 |
+
?>
|
53 |
+
|
54 |
+
<div style="float: right"><button onclick='document.location.href="<?php echo $data['flushCacheUrl']; ?>"'><?php echo $data['flushCacheText']; ?></button></div>
|
app/design/adminhtml/default/default/template/RublonModule/registration.phtml
ADDED
@@ -0,0 +1,25 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<div class="bootstrap rublon-allow-tracking-header">
|
2 |
+
<img id="rublon-allow-tracking-logo-img" alt=""
|
3 |
+
src="<?php echo $logo_url; ?>">
|
4 |
+
<h3><?php echo $path; ?></h3>
|
5 |
+
</div>
|
6 |
+
|
7 |
+
<div class="rublon-container">
|
8 |
+
|
9 |
+
<div id="rublon-api-reg-container">
|
10 |
+
|
11 |
+
<div class="rublon-apireg-half-column rublon-apireg-description">
|
12 |
+
<p>
|
13 |
+
<h3>Please wait, Rublon is configuring API credentials...</h3>
|
14 |
+
</p>
|
15 |
+
</div>
|
16 |
+
<div class="rublon-apireg-half-column rublon-apireg-image">
|
17 |
+
<img src="<?php echo $rublon_visual_url; ?>"
|
18 |
+
class="rublon-apireg-visual rublon-image">
|
19 |
+
|
20 |
+
</div>
|
21 |
+
</div>
|
22 |
+
|
23 |
+
</div>
|
24 |
+
|
25 |
+
<?php echo $registration_form_hidden; ?>
|
app/etc/modules/Rublon_RublonModule.xml
ADDED
@@ -0,0 +1,14 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0"?>
|
2 |
+
<config>
|
3 |
+
<modules>
|
4 |
+
<Rublon_RublonModule>
|
5 |
+
<active>true</active>
|
6 |
+
<codePool>community</codePool>
|
7 |
+
<depends>
|
8 |
+
<Mage_Core/>
|
9 |
+
<Mage_Adminhtml/>
|
10 |
+
<Mage_Admin/>
|
11 |
+
</depends>
|
12 |
+
</Rublon_RublonModule>
|
13 |
+
</modules>
|
14 |
+
</config>
|
app/locale/pl_PL/Rublon_RublonModule.csv
ADDED
@@ -0,0 +1,41 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
"Protect your account","Zabezpiecz konto Rublonem"
|
2 |
+
"Disable account protection","Wyłącz zabezpieczenie"
|
3 |
+
|
4 |
+
"Since your account is protected by a password only, it can be accessed from any device in the world. Rublon protects your account from sign ins from unknown devices, even if your password gets stolen.","Ponieważ Twoje konto jest chronione tylko hasłem, dostęp do niego jest możliwy z dowolnego urządzenia na świecie. Rublonem zabezpieczysz Twoje konto przed dostępem z nieznanych urządzeń, nawet w przypadku kradzieży hasła."
|
5 |
+
"<strong>Your account is protected by Rublon</strong>. It can be accessed from your Trusted Devices only.","<strong>Twoje konto jest zabezpieczone Rublonem.</strong> Dostęp do niego jest możliwy jedynie z Twoich Urządzeń Zaufanych."
|
6 |
+
"Learn more at <a href='http://rublon.com' target='_blank'>www.rublon.com</a>.","Dowiedz się więcej: <a href='http://rublon.com/pl/' target='_blank'>www.rublon.com/pl/</a>."
|
7 |
+
"Your account is now protected by Rublon.","Twoje konto jest teraz zabezpieczone Rublonem."
|
8 |
+
"Your account is protected by Rublon","Twoje konto jest zabezpieczone Rublonem"
|
9 |
+
"Rublon protection has been disabled. You are now protected by a password only, which may result in unauthorized access to your account. We strongly encourage you to protect your account with Rublon.","Zabezpieczenie Rublonem zostało wyłączone. Chroni Cię już tylko hasło, co może doprowadzić do nieautoryzowanego dostępu do Twojego konta. Zdecydowanie zalecamy zabezpieczyć konto Rublonem."
|
10 |
+
"Rublon will be available to you once your administrator protects his account.","Będziesz mógł skorzystać z Rublona, kiedy administrator zabezpieczy swoje konto."
|
11 |
+
|
12 |
+
"Before any of your users will be able to use Rublon, you or another administrator needs to protect his account first.","Zanim którykolwiek z Twoich użytkowników będzie mógł korzystać z Rublona, Ty lub inny administrator musi najpierw zabezpieczyć swoje konto."
|
13 |
+
"Rublon mobile app required:","Wymagana aplikacja Rublon:"
|
14 |
+
"Free Download","Pobierz za darmo"
|
15 |
+
"If you leave "system token" or "secret key" empty this disables Rublon.","Jeśli pozostawisz token systemowy lub klucz poufny pusty, Rublon zostanie wyłączony."
|
16 |
+
"Rublon protects your account from sign ins from unknown devices, even if your password gets stolen. It's a totally seamless way of securing your online accounts and the easiest two-factor authentication solution in the world.","Rublonem zabezpieczysz Twoje konto przed dostępem z nieznanych urządzeń, nawet w przypadku kradzieży hasła. To całkowicie niezauważalny sposób zabezpieczania Twoich kont internetowych i najłatwiejsze rozwiązanie dwuskładnikowego uwierzytelniania na świecie."
|
17 |
+
"Find out more:","Dowiedz się więcej:"
|
18 |
+
"Rublon is active.","Rublon jest aktywny."
|
19 |
+
"Your account is not protected by Rublon yet. Go to My Account page and protect it.","Twoje konto nie jest jeszcze zabezpieczone Rublonem. Przejdź do swojego profilu i zabezpiecz je teraz."
|
20 |
+
"Your account is protected by Rublon.","Twoje konto jest zabezpieczone Rublonem."
|
21 |
+
"www.rublon.com","www.rublon.com/pl"
|
22 |
+
"The API Settings will be filled out automatically.","Aby korzystać z rozszerzenia, musisz najpierw uaktywnić Rublona dla Twojej instalacji WordPress. Kliknij w przycisk poniżej:"
|
23 |
+
"If you already have a System Token and Secret Key, please enter them below.","Jeżeli posiadasz już System Token oraz Secret Key, wprowadź je poniżej."
|
24 |
+
"Rublon activation failed. Please try again. Should the error occur again, contact us at <a href='mailto:support@rublon.com'>support@rublon.com</a>.","Aktywacja Rublona nie powiodła się. Spróbuj ponownie. Jeśli błąd się powtórzy, skontaktuj się z nami na <a href='mailto:support@rublon.com'>support@rublon.com</a>."
|
25 |
+
"Thank you! Now all of your users can protect their accounts with Rublon.","Dziękujemy! Teraz wszyscy Twoi użytkownicy mogą zabezpieczyć swoje konta Rublonem."
|
26 |
+
|
27 |
+
"Rublon is a tokenless two-factor authentication mechanism. Learn more at <a href='https://rublon.com/' target='_blank'>www.rublon.com</a>.","Rublon to beztokenowy mechanizm dwuskładnikowego uwierzytelniania. Dowiesz się więcej na <a href='https://rublon.com/pl' target='_blank'>www.rublon.com/pl</a>."
|
28 |
+
|
29 |
+
"Error details: ","Szczegóły błędu:"
|
30 |
+
"Configuration error. Invalid secret key.","Błąd konfiguracji. Nieprawidłowy klucz poufny."
|
31 |
+
"cURL functions are not available, please install appropriate library.","Biblioteka cURL jest niedostępna, proszę zainstalować odpowiednią bibliotekę."
|
32 |
+
"Rublon server connection problem.","Problem z połączeniem do serwera Rublona"
|
33 |
+
"Rublon server error.","Błąd serwera Rublona."
|
34 |
+
"Rublon server error. Please try again in a moment.","Wystąpił błąd serwera Rublona. Proszę spróbować ponownie."
|
35 |
+
"Rublon server internal error. Received parameters are invalid. Please try again in a moment.","Wystąpił błąd serwera Rublona. Otrzymane parametry są nieprawidłowe. Proszę spróbować ponownie."
|
36 |
+
"Unknown action to perform.","Nieznana akcja do wykonania."
|
37 |
+
"User is not authorized by first factor (login and password).","Użytkownik nie jest autoryzowany przez pierwszy składnik (login i hasło)."
|
38 |
+
"Expected different user.","Oczekiwano innego użytkownika."
|
39 |
+
"Failed to authenticate user. Please try again.","Nie udało się uwierzytelnić użytkownika. Proszę spróbować ponownie."
|
40 |
+
"Issue notification has been sent to the Rublon support team.","Zgłoszenie problemu zostało wysłane do grupy wsparcia Rublona."
|
41 |
+
"Rublon activation failed: this version of the Rublon extension is already outdated. Please install the latest version.","Aktywacja rozszerzenia nie powiodła się: ta wersja rozszerzenia Rublon jest już nieaktualna. Zainstaluj najnowszą wersję."
|
js/Rublon/rublon.js
ADDED
@@ -0,0 +1,36 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
document.observe("dom:loaded", function() {
|
2 |
+
|
3 |
+
// API registration actions
|
4 |
+
var registrationFormHidden = $('rublon-consumer-registration');
|
5 |
+
// Begin registration process if registration form was founded
|
6 |
+
if (registrationFormHidden) registrationFormHidden.submit();
|
7 |
+
|
8 |
+
var buttonActivate = $('rublon-button-activate');
|
9 |
+
// buttonActivate.writeAttribute('disabled', true);
|
10 |
+
|
11 |
+
var apiTermsAgree = $('rublon-apireg-terms-agreed');
|
12 |
+
|
13 |
+
// apiTermsAgree.observe('click', function() {
|
14 |
+
//
|
15 |
+
// if (this.checked) {
|
16 |
+
//
|
17 |
+
// buttonActivate.writeAttribute('disabled', false);
|
18 |
+
|
19 |
+
// Bind API registration click action
|
20 |
+
buttonActivate.observe('click', function(e){
|
21 |
+
e.preventDefault();
|
22 |
+
if (apiTermsAgree.checked) {
|
23 |
+
$('rublon-consumer-registration-init').submit();
|
24 |
+
} else {
|
25 |
+
alert('Please agree to the Rublon Terms of Service.');
|
26 |
+
return false;
|
27 |
+
}
|
28 |
+
});
|
29 |
+
|
30 |
+
// } else {
|
31 |
+
// buttonActivate.writeAttribute('disabled', true);
|
32 |
+
// }
|
33 |
+
|
34 |
+
// });
|
35 |
+
|
36 |
+
});
|
package.xml
ADDED
@@ -0,0 +1,18 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0"?>
|
2 |
+
<package>
|
3 |
+
<name>rublon2factor</name>
|
4 |
+
<version>2.0.0</version>
|
5 |
+
<stability>stable</stability>
|
6 |
+
<license uri="http://opensource.org/licenses/gpl-license.php">GNU Public License, version 2</license>
|
7 |
+
<channel>community</channel>
|
8 |
+
<extends/>
|
9 |
+
<summary>Rublon Account Security</summary>
|
10 |
+
<description>Rublon Two-Factor Authentication for Magento.</description>
|
11 |
+
<notes>Instant account security with effortless, email-based two-factor authentication. No tokens.</notes>
|
12 |
+
<authors><author><name>Rublon Team</name><user>rublon</user><email>developers@rublon.com</email></author></authors>
|
13 |
+
<date>2015-10-28</date>
|
14 |
+
<time>13:47:19</time>
|
15 |
+
<contents><target name="magecommunity"><dir name="Rublon"><dir name="RublonModule"><dir name="Block"><dir name="Adminhtml"><file name="Header.php" hash="948c83343af4491cd51a554940099104"/><file name="Menu.php" hash="7abca8fbc0a9f10dae44c4229e027efb"/></dir><file name="Seal.php" hash="8019e6dd4fa74b358e0b0a39a907394c"/></dir><dir name="Helper"><file name="Data.php" hash="036ea3228924910db5eb52a485f64c25"/></dir><dir name="Model"><file name="Observer.php" hash="dfa4f09bfd6bd1907fd941c9f2fe5391"/><dir name="Resource"><dir name="User"><file name="Collection.php" hash="949bd6cafdf175d8022f2c3493979ee7"/></dir><file name="User.php" hash="3e901bf2ed97c818f7dd0dd25374b376"/></dir><file name="User.php" hash="6b70f7df1d8bace7e8d8b5c3ed2c7942"/></dir><dir name="controllers"><dir name="Adminhtml"><file name="ActivationController.php" hash="bf959099ced8b850377d6379f2629052"/><file name="SettingsController.php" hash="55d804eec051357c71bfbca878646f78"/></dir><file name="CallbackController.php" hash="9debfcf46645514da94fa57142170294"/><file name="RegistrationController.php" hash="3eaa74e25583bb43f2819a7c9a09c76f"/></dir><dir name="etc"><file name="adminhtml.xml" hash="313358c971dc112c9eb068602b149985"/><file name="config.xml" hash="0cb37c9abffbd2eaad6cb7ff52d2aa88"/><file name="system.xml" hash="18913ab01c2e19d1f93f3225dadee1fd"/></dir><dir name="img"><file name="index.php" hash="1b23d5b33e93b8753a537d43244ab1c9"/><file name="rublon_logo_16x16.png" hash="f2c6e0d98a1bbb7e2506cfdda73a2f3a"/><file name="rublon_logo_16x16@2x.png" hash="fc0cba31482e34a73d0ca7afad0d9153"/><file name="rublon_logo_32x32.png" hash="fc0cba31482e34a73d0ca7afad0d9153"/><file name="rublon_logo_32x32@2x.png" hash="b09f6b76aa6fbeeeb0db94ab0718c66c"/><file name="rublon_visual.gif" hash="c6323e4fd823d9ec5cd1aeb830f4e7d5"/><file name="rublon_visual@2x.gif" hash="6135cbf15e090467acdd67c2a4e1a83a"/></dir><dir name="lib"><dir name="Rublon"><file name="Rublon2Factor.php" hash="0c570af3478f4d39e60b281a3aa8db9d"/><file name="Rublon2FactorCallback.php" hash="fd7f399b38ab1730daa6af4354427b2c"/><file name="Rublon2FactorGUI.php" hash="b69364eed3444eefc540fa3526c767c5"/><dir name="cert"><file name="cacert.pem" hash="c750e8304a5c72ad3449cbf76200101b"/></dir><dir name="core"><dir name="API"><file name="RublonAPIBeginTransaction.php" hash="d5fcbf695b7248db160803332087a995"/><file name="RublonAPICheckUserDevice.php" hash="58cc0680ed0dcd9c4f8ccd525006c656"/><file name="RublonAPIClient.php" hash="b4d092af4d5f464d8d415b0a57eeca97"/><file name="RublonAPICredentials.php" hash="0cafb1b511e8f90ebbeae3cf92e8c202"/><file name="RublonAPIGetAvailableFeatures.php" hash="5bce0ece7b7f6a941187e6d928dd9fae"/><file name="RublonAPINotification.php" hash="a4d6142e5594eed612f8211c9a5e3661"/></dir><dir name="HTML"><file name="RublonBadge.php" hash="6193d829e783c0b69df0af8fd9d8ec9e"/><file name="RublonButton.php" hash="47ba1d64479a5451909fe77b08c31cfd"/><file name="RublonConsumerScript.php" hash="3f72e6696d3f9639e2e3c9388ba8c23e"/><file name="RublonDeviceWidget.php" hash="674ad8e726f3dd98b77cd39bf9812265"/><file name="RublonLoginBox.php" hash="4e4073604ece3265c407ec68230cf643"/><file name="RublonShareAccessWidget.php" hash="e913e21ba0bcb5e4db40df58ffec2a3b"/><file name="RublonSubscribeWidget.php" hash="eee3f6120a752fe537c18ce37b50f626"/><file name="RublonWidget.php" hash="f5b03a47eb53c9187549878a246c024e"/></dir><file name="RublonAuthParams.php" hash="fa2e7eeced005dce94e8bb1853d6467a"/><file name="RublonConsumer.php" hash="418613b645e1cbe37746dbb209e12076"/><file name="RublonException.php" hash="ec68822acdcc6f7283711e1a6d6cc5b8"/><file name="RublonGUI.php" hash="6aa4854c781e095b43488f4dfdc9404b"/><file name="RublonNative.php" hash="4ab13ba25f75958b8dde3de70587e606"/><file name="RublonSignatureWrapper.php" hash="272a63a6c758663f2fde211234d0a8b7"/></dir></dir><dir name="RublonConsumerRegistration"><file name="RublonConsumerRegistration.php" hash="d838be1f43c2eac986c1722ef8e46e4f"/><file name="RublonConsumerRegistrationCommon.php" hash="d1917f732f73d61c17eed3d880779b1a"/><file name="RublonConsumerRegistrationTemplate.php" hash="229c8e2c93984a9e1f54b6ec26453570"/><file name="index.php" hash="1b23d5b33e93b8753a537d43244ab1c9"/></dir><dir name="RublonImplemented"><file name="Rublon2FactorCallbackMagento.php" hash="06934254b5989d904e057a12c0e535ab"/><file name="Rublon2FactorGUIMagento.php" hash="3a40d9498ef62f9c22962da90a94ab2e"/><file name="Rublon2FactorGUIPrestaShop.php" hash="bf6eac52017d3c46efcb2a1a8547eb85"/><file name="Rublon2FactorMagento.php" hash="29d367aadfd89239436d59c91843440c"/><file name="Rublon2FactorPrestaShop.php" hash="f1d18b4060e1907ef6145142e3d74755"/><file name="RublonAPICheckProtection.php" hash="78e8568f2747bc367f223aeef418ee41"/><file name="RublonAPINewsletterSignup.php" hash="994b454155ad59a5f236e8c859d2ff54"/><file name="RublonAPIPluginHistory.php" hash="33b78902397b771030a116cdd5a132fa"/><file name="RublonConsumerRegistrationMagento.php" hash="ee6d2d68f38c968939377fa6069340ff"/><file name="RublonFeature.php" hash="b81cd86ee692ebcd1345edc6201d5e60"/><file name="RublonRequests.php" hash="7d0452bb466d3bdc9d9a67d7dcfe9bba"/></dir><dir name="RublonIssueNotifier"><file name="RublonIssueNotifier.php" hash="82fb024382d2fca574de046e2e2a5b37"/><file name="RublonMagentoIssueNotifier.php" hash="bad44fa8cc3a7db265f452992cc5d87b"/><file name="RublonPrestaShopIssueNotifier.php" hash="268ca13b26e438a090ea8e51286f86de"/><file name="index.php" hash="1b23d5b33e93b8753a537d43244ab1c9"/></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Rublon_RublonModule.xml" hash="743f877b3d0882658a1648aa21d5522c"/></dir></target><target name="mageweb"><dir name="js"><dir name="Rublon"><file name="rublon.js" hash="571f2a5a5324bbe9440938680e9d39ba"/></dir></dir></target><target name="mageskin"><dir name="adminhtml"><dir name="base"><dir name="default"><dir name="Rublon"><dir name="css"><file name="rublon.css" hash="99443e9842369830d1183332f4f7df0a"/></dir></dir></dir></dir><dir name="default"><dir name="default"><dir name="Rublon"><dir name="img"><file name="rublon_badge.svg" hash="91f8f8b4e3dcfd56e16bdbeda85d0735"/><file name="rublon_logo_16x16.png" hash="f2c6e0d98a1bbb7e2506cfdda73a2f3a"/><file name="rublon_logo_16x16@2x.png" hash="fc0cba31482e34a73d0ca7afad0d9153"/><file name="rublon_logo_32x32.png" hash="fc0cba31482e34a73d0ca7afad0d9153"/><file name="rublon_logo_32x32@2x.png" hash="b09f6b76aa6fbeeeb0db94ab0718c66c"/><file name="rublon_visual.gif" hash="c6323e4fd823d9ec5cd1aeb830f4e7d5"/><file name="rublon_visual@2x.gif" hash="6135cbf15e090467acdd67c2a4e1a83a"/></dir></dir></dir></dir></dir></target><target name="magelocale"><dir><dir name="pl_PL"><file name="Rublon_RublonModule.csv" hash="87fa7190c948220289f3f18e6934982d"/></dir></dir></target><target name="magedesign"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="layout"><file name="rublonmodule.xml" hash="5f41b4c151cefb95aa603d969acde0ad"/></dir><dir name="template"><dir name="RublonModule"><file name="activation.phtml" hash="051ccde89d4a8786e161909d1a139f9e"/><file name="apiRegistration.phtml" hash="258a57cf2b0317937323ecb216053fc0"/><file name="index.phtml" hash="64c39919b7d64432adf5ef313e17f466"/><file name="registration.phtml" hash="5887a206dbcab46e0c8fc8e981aa195b"/></dir></dir></dir></dir></dir></target></contents>
|
16 |
+
<compatible/>
|
17 |
+
<dependencies><required><php><min>5.2.17</min><max>5.6.11</max></php><package><name>Magento_Core_Modules</name><channel>community</channel><min>1.7.0.0</min><max>1.9.0.1</max></package></required></dependencies>
|
18 |
+
</package>
|
skin/adminhtml/base/default/Rublon/css/rublon.css
ADDED
@@ -0,0 +1,201 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
@CHARSET "UTF-8";
|
2 |
+
/* --- Allow Tracking view && API registration view ---*/
|
3 |
+
.rublon-container {
|
4 |
+
width: 70%;
|
5 |
+
position: relative;
|
6 |
+
padding-left: 20px;
|
7 |
+
border-left: solid 3px #fff;
|
8 |
+
border: solid 2px #26C370;
|
9 |
+
box-shadow: inset 140px 0 0 #26C370;
|
10 |
+
padding: 5px 20px 20px 160px;
|
11 |
+
border-radius: 3px;
|
12 |
+
overflow: hidden;
|
13 |
+
}
|
14 |
+
|
15 |
+
.rublon-container h3 {
|
16 |
+
margin-top: 5px !important;
|
17 |
+
margin-left: 0px !important;
|
18 |
+
padding: 0px !important;
|
19 |
+
}
|
20 |
+
|
21 |
+
#rublon-allow-tracking-container {
|
22 |
+
width: 100%;
|
23 |
+
float: left;
|
24 |
+
clear: both;
|
25 |
+
}
|
26 |
+
|
27 |
+
.rublon-allow-tracking-header {
|
28 |
+
margin-top: 20px;
|
29 |
+
padding-right: 3px;
|
30 |
+
margin-bottom: 30px;
|
31 |
+
}
|
32 |
+
|
33 |
+
.rublon-allow-tracking-header h3 {
|
34 |
+
margin-left: 35px !important;
|
35 |
+
font-size: 1.75em !important;
|
36 |
+
}
|
37 |
+
|
38 |
+
.rublon-allow-tracking-content {
|
39 |
+
overflow: hidden;
|
40 |
+
}
|
41 |
+
|
42 |
+
#rublon-api-reg-container .rublon-buttons {
|
43 |
+
margin-top: 30px;
|
44 |
+
float: left;
|
45 |
+
width: 200px;
|
46 |
+
}
|
47 |
+
|
48 |
+
.rublon-buttons {
|
49 |
+
width: 100%;
|
50 |
+
text-align: right;
|
51 |
+
}
|
52 |
+
|
53 |
+
.rublon-button:HOVER {
|
54 |
+
text-decoration: none;
|
55 |
+
color: #fff !important;
|
56 |
+
background: #76B895 !important;
|
57 |
+
}
|
58 |
+
|
59 |
+
.rublon-button:VISITED {
|
60 |
+
text-decoration: none;
|
61 |
+
color: #fff !important;
|
62 |
+
}
|
63 |
+
|
64 |
+
.rublon-button {
|
65 |
+
cursor: pointer;
|
66 |
+
display: inline-block;
|
67 |
+
height: 53px;
|
68 |
+
line-height: 53px;
|
69 |
+
border-bottom: 3px solid #1D8C51 !important;
|
70 |
+
background: #26C370 !important;
|
71 |
+
color: #fff;
|
72 |
+
border-radius: 4px;
|
73 |
+
text-decoration: none;
|
74 |
+
font-size: 18px;
|
75 |
+
letter-spacing: 1px;
|
76 |
+
padding: 0 34px;
|
77 |
+
text-align: center;
|
78 |
+
-webkit-transition: margin 0.1s ease-in-out, border 0.1s ease-in-out, opacity 0.1s ease-in-out;
|
79 |
+
-moz-transition: margin 0.1s ease-in-out, border 0.1s ease-in-out, opacity 0.1s ease-in-out;
|
80 |
+
transition: margin 0.1s ease-in-out, border 0.1s ease-in-out, opacity 0.1s ease-in-out;
|
81 |
+
}
|
82 |
+
|
83 |
+
#rublon-button-activate {
|
84 |
+
margin-left: 1em;
|
85 |
+
}
|
86 |
+
|
87 |
+
#rublon-api-reg-container #rublon-button-activate {
|
88 |
+
margin-left: 0em;
|
89 |
+
}
|
90 |
+
|
91 |
+
#rublon-allow-tracking-logo-img {
|
92 |
+
float: left;
|
93 |
+
vertical-align: middle;
|
94 |
+
}
|
95 |
+
|
96 |
+
.rublon-apireg-half-column {
|
97 |
+
width: auto;
|
98 |
+
}
|
99 |
+
|
100 |
+
.rublon-apireg-half-column.rublon-apireg-image {
|
101 |
+
float: right;
|
102 |
+
width: auto;
|
103 |
+
}
|
104 |
+
|
105 |
+
.rublon-apireg-half-column.rublon-apireg-description {
|
106 |
+
float: left;
|
107 |
+
width: 50%;
|
108 |
+
}
|
109 |
+
|
110 |
+
#RublonDeviceWidget {
|
111 |
+
width: 500px;
|
112 |
+
height: 300px;
|
113 |
+
border: none;
|
114 |
+
}
|
115 |
+
|
116 |
+
#RublonBadgeLink {
|
117 |
+
font-size: 10px;
|
118 |
+
}
|
119 |
+
|
120 |
+
.rublon-be-infobox-container {
|
121 |
+
|
122 |
+
border-radius: 5px;
|
123 |
+
border: 2px solid #00c389;
|
124 |
+
background-color: #ffffff;
|
125 |
+
padding: 10px;
|
126 |
+
margin-top: 25px;
|
127 |
+
width: 45%;
|
128 |
+
margin: 15px !important;
|
129 |
+
margin-left: 0px !important;
|
130 |
+
}
|
131 |
+
|
132 |
+
.rublon-be-infobox-content {
|
133 |
+
width: 100%;
|
134 |
+
padding: 0px;
|
135 |
+
}
|
136 |
+
|
137 |
+
.rublon-be-infobox-container.warning {
|
138 |
+
border: 2px solid #f16048;
|
139 |
+
background-color: #faebe7;
|
140 |
+
}
|
141 |
+
|
142 |
+
.rublon-be-infobox-content ul {
|
143 |
+
margin-left: 20px;
|
144 |
+
list-style-type: circle;
|
145 |
+
}
|
146 |
+
|
147 |
+
.rublon-button-buy-now:HOVER {
|
148 |
+
text-decoration: none;
|
149 |
+
color: #fff !important;
|
150 |
+
background: #76B895 !important;
|
151 |
+
}
|
152 |
+
|
153 |
+
.rublon-button-buy-now:VISITED {
|
154 |
+
text-decoration: none;
|
155 |
+
color: #fff !important;
|
156 |
+
}
|
157 |
+
|
158 |
+
.rublon-button-buy-now {
|
159 |
+
cursor: pointer;
|
160 |
+
display: inline-block;
|
161 |
+
height: 53px;
|
162 |
+
line-height: 53px;
|
163 |
+
border-bottom: 3px solid #1D8C51 !important;
|
164 |
+
background: #26C370 !important;
|
165 |
+
color: #fff;
|
166 |
+
border-radius: 4px;
|
167 |
+
text-decoration: none;
|
168 |
+
font-size: 18px;
|
169 |
+
letter-spacing: 1px;
|
170 |
+
padding: 0 34px;
|
171 |
+
text-align: center;
|
172 |
+
-webkit-transition: margin 0.1s ease-in-out, border 0.1s ease-in-out, opacity 0.1s ease-in-out;
|
173 |
+
-moz-transition: margin 0.1s ease-in-out, border 0.1s ease-in-out, opacity 0.1s ease-in-out;
|
174 |
+
transition: margin 0.1s ease-in-out, border 0.1s ease-in-out, opacity 0.1s ease-in-out;
|
175 |
+
}
|
176 |
+
|
177 |
+
.rublon-buy-now-subcontainer {
|
178 |
+
width: 100%;
|
179 |
+
overflow: hidden;
|
180 |
+
display: table;
|
181 |
+
}
|
182 |
+
|
183 |
+
.rublon-buy-now-left {
|
184 |
+
display: table-cell;
|
185 |
+
width: 70%;
|
186 |
+
vertical-align: top;
|
187 |
+
text-align: left;
|
188 |
+
}
|
189 |
+
|
190 |
+
.rublon-buy-now-right {
|
191 |
+
display: table-cell;
|
192 |
+
padding-right: 10px;
|
193 |
+
width: 30%;
|
194 |
+
text-align: center;
|
195 |
+
vertical-align: middle;
|
196 |
+
}
|
197 |
+
|
198 |
+
.rublon-buy-now-tip {
|
199 |
+
color: #797979;
|
200 |
+
font-size: 0.8em;
|
201 |
+
}
|
skin/adminhtml/default/default/Rublon/img/rublon_badge.svg
ADDED
@@ -0,0 +1,32 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
2 |
+
<svg width="96px" height="32px" viewBox="0 0 96 32" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sketch="http://www.bohemiancoding.com/sketch/ns">
|
3 |
+
<!-- Generator: Sketch 3.2.2 (9983) - http://www.bohemiancoding.com/sketch -->
|
4 |
+
<title>rublon-protection-badge</title>
|
5 |
+
<desc>Created with Sketch.</desc>
|
6 |
+
<defs></defs>
|
7 |
+
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" sketch:type="MSPage">
|
8 |
+
<g id="WP-login-screen" sketch:type="MSArtboardGroup" transform="translate(-24.000000, -26.000000)">
|
9 |
+
<g id="rublon-protection-badge" sketch:type="MSLayerGroup" transform="translate(24.000000, 26.000000)">
|
10 |
+
<path d="M91.391,0.547 C89.662,0 88.056,0 84.844,0 L32,0 L30,2 L30,30 L32,32 L84.844,32 C88.056,32 89.662,32 91.391,31.453 C93.279,30.766 94.766,29.279 95.453,27.391 C96,25.662 96,24.056 96,20.843 L96,11.156 C96,7.944 96,6.338 95.453,4.609 C94.766,2.721 93.279,1.234 91.391,0.547 Z" id="Fill-1" fill="#B7C9D3" sketch:type="MSShapeGroup"></path>
|
11 |
+
<path d="M39.991,14 L43.313,7.597 L46.635,14 L44.932,14 L44.544,13.217 L42.082,13.217 L41.695,14 L39.991,14 L39.991,14 Z M42.633,11.952 L43.993,11.952 L43.313,10.566 L42.633,11.952 L42.633,11.952 Z" id="Fill-2" fill="#FFFFFF" sketch:type="MSShapeGroup"></path>
|
12 |
+
<path d="M53.312,9.086 L52.201,10.016 C51.823,9.594 51.367,9.379 50.824,9.379 C50.369,9.379 49.981,9.533 49.663,9.843 C49.345,10.153 49.19,10.54 49.19,11.005 C49.19,11.47 49.345,11.857 49.663,12.167 C49.981,12.468 50.369,12.623 50.824,12.623 C51.367,12.623 51.823,12.408 52.201,11.986 L53.312,12.916 C52.692,13.647 51.797,14.086 50.824,14.086 C49.912,14.086 49.139,13.793 48.501,13.208 C47.873,12.623 47.555,11.892 47.555,11.005 C47.555,10.119 47.873,9.387 48.501,8.802 C49.139,8.208 49.912,7.915 50.824,7.915 C51.797,7.915 52.692,8.355 53.312,9.086" id="Fill-3" fill="#FFFFFF" sketch:type="MSShapeGroup"></path>
|
13 |
+
<path d="M60.36,9.086 L59.25,10.016 C58.871,9.594 58.416,9.379 57.873,9.379 C57.417,9.379 57.029,9.533 56.711,9.843 C56.393,10.153 56.238,10.54 56.238,11.005 C56.238,11.47 56.393,11.857 56.711,12.167 C57.029,12.468 57.417,12.623 57.873,12.623 C58.416,12.623 58.871,12.408 59.25,11.986 L60.36,12.916 C59.74,13.647 58.846,14.086 57.873,14.086 C56.961,14.086 56.186,13.793 55.55,13.208 C54.922,12.623 54.604,11.892 54.604,11.005 C54.604,10.119 54.922,9.387 55.55,8.802 C56.186,8.208 56.961,7.915 57.873,7.915 C58.846,7.915 59.74,8.355 60.36,9.086" id="Fill-4" fill="#FFFFFF" sketch:type="MSShapeGroup"></path>
|
14 |
+
<path d="M67.297,13.217 C66.651,13.819 65.877,14.121 64.956,14.121 C64.035,14.121 63.261,13.819 62.615,13.217 C61.97,12.606 61.651,11.874 61.651,11.022 C61.651,10.17 61.97,9.439 62.615,8.828 C63.261,8.217 64.035,7.915 64.956,7.915 C65.877,7.915 66.651,8.217 67.297,8.828 C67.942,9.43 68.27,10.162 68.27,11.022 C68.27,11.874 67.942,12.606 67.297,13.217 L67.297,13.217 Z M63.794,12.184 C64.112,12.502 64.5,12.657 64.956,12.657 C65.403,12.657 65.791,12.494 66.109,12.176 C66.436,11.849 66.6,11.461 66.6,11.022 C66.6,10.583 66.436,10.196 66.109,9.869 C65.791,9.542 65.403,9.379 64.956,9.379 C64.508,9.379 64.121,9.542 63.803,9.869 C63.484,10.187 63.32,10.575 63.32,11.022 C63.32,11.479 63.476,11.866 63.794,12.184 L63.794,12.184 Z" id="Fill-5" fill="#FFFFFF" sketch:type="MSShapeGroup"></path>
|
15 |
+
<path d="M70.053,8.002 L71.687,8.002 L71.687,11.246 C71.687,12.236 72.066,12.606 72.746,12.606 C73.426,12.606 73.805,12.236 73.805,11.246 L73.805,8.002 L75.439,8.002 L75.439,11.418 C75.439,12.287 75.182,12.95 74.674,13.406 C74.166,13.862 73.521,14.086 72.746,14.086 C71.971,14.086 71.326,13.862 70.818,13.406 C70.311,12.95 70.053,12.287 70.053,11.418 L70.053,8.002" id="Fill-6" fill="#FFFFFF" sketch:type="MSShapeGroup"></path>
|
16 |
+
<path d="M77.553,14 L77.553,7.761 L81.529,11.005 L81.529,8.002 L83.096,8.002 L83.096,14.241 L79.119,10.971 L79.119,14 L77.553,14" id="Fill-7" fill="#FFFFFF" sketch:type="MSShapeGroup"></path>
|
17 |
+
<path d="M86.282,14 L86.282,9.482 L84.664,9.482 L84.664,8.002 L89.5,8.002 L89.5,9.482 L87.917,9.482 L87.917,14 L86.282,14" id="Fill-8" fill="#FFFFFF" sketch:type="MSShapeGroup"></path>
|
18 |
+
<path d="M41.084,21.926 C41.402,22.365 41.953,22.666 42.582,22.666 C43.115,22.666 43.383,22.52 43.383,22.236 C43.383,22.072 43.279,21.96 43.047,21.866 C42.935,21.823 42.815,21.78 42.693,21.745 C42.461,21.676 42.031,21.547 41.747,21.444 C40.826,21.1 40.361,20.523 40.361,19.714 C40.361,19.146 40.568,18.707 40.99,18.389 C41.411,18.07 41.919,17.915 42.513,17.915 C43.502,17.915 44.242,18.234 44.733,18.871 L43.658,19.792 C43.391,19.473 43.029,19.318 42.573,19.318 C42.151,19.318 41.919,19.473 41.919,19.688 C41.919,19.86 41.979,19.955 42.16,20.033 C42.255,20.076 42.357,20.11 42.461,20.136 C42.668,20.179 43.141,20.316 43.519,20.454 C44.553,20.824 44.975,21.367 44.975,22.184 C44.975,23.346 44.174,24.086 42.582,24.086 C41.91,24.086 41.359,23.966 40.921,23.716 C40.49,23.466 40.164,23.165 39.932,22.812 L41.084,21.926" id="Fill-9" fill="#FFFFFF" sketch:type="MSShapeGroup"></path>
|
19 |
+
<path d="M46.779,24 L46.779,18.002 L51.202,18.002 L51.202,19.473 L48.414,19.473 L48.414,20.299 L51.013,20.299 L51.013,21.642 L48.414,21.642 L48.414,22.554 L51.272,22.554 L51.272,24 L46.779,24" id="Fill-10" fill="#FFFFFF" sketch:type="MSShapeGroup"></path>
|
20 |
+
<path d="M58.703,19.086 L57.592,20.016 C57.214,19.594 56.758,19.379 56.215,19.379 C55.76,19.379 55.372,19.533 55.054,19.843 C54.735,20.153 54.58,20.54 54.58,21.005 C54.58,21.47 54.735,21.857 55.054,22.167 C55.372,22.468 55.76,22.623 56.215,22.623 C56.758,22.623 57.214,22.408 57.592,21.986 L58.703,22.915 C58.083,23.647 57.188,24.086 56.215,24.086 C55.303,24.086 54.529,23.794 53.892,23.208 C53.264,22.623 52.945,21.892 52.945,21.005 C52.945,20.119 53.264,19.387 53.892,18.802 C54.529,18.208 55.303,17.915 56.215,17.915 C57.188,17.915 58.083,18.354 58.703,19.086" id="Fill-11" fill="#FFFFFF" sketch:type="MSShapeGroup"></path>
|
21 |
+
<path d="M60.272,18.002 L61.906,18.002 L61.906,21.246 C61.906,22.236 62.285,22.606 62.965,22.606 C63.645,22.606 64.023,22.236 64.023,21.246 L64.023,18.002 L65.658,18.002 L65.658,21.418 C65.658,22.287 65.4,22.95 64.893,23.406 C64.385,23.862 63.739,24.086 62.965,24.086 C62.189,24.086 61.545,23.862 61.037,23.406 C60.529,22.95 60.272,22.287 60.272,21.418 L60.272,18.002" id="Fill-12" fill="#FFFFFF" sketch:type="MSShapeGroup"></path>
|
22 |
+
<path d="M67.213,24 L67.213,18.002 L69.94,18.002 C70.534,18.002 71.042,18.2 71.463,18.604 C71.885,19.009 72.092,19.49 72.092,20.067 C72.092,20.833 71.687,21.496 71.068,21.78 L72.564,24 L70.689,24 L69.467,22.133 L68.848,22.133 L68.848,24 L67.213,24 L67.213,24 Z M68.848,20.824 L69.76,20.824 C70.198,20.824 70.465,20.566 70.465,20.119 C70.465,19.74 70.216,19.482 69.897,19.482 L68.848,19.482 L68.848,20.824 L68.848,20.824 Z" id="Fill-13" fill="#FFFFFF" sketch:type="MSShapeGroup"></path>
|
23 |
+
<path d="M74.178,18.002 L75.813,18.002 L75.813,24 L74.178,24 L74.178,18.002 Z" id="Fill-14" fill="#FFFFFF" sketch:type="MSShapeGroup"></path>
|
24 |
+
<path d="M79.003,24 L79.003,19.482 L77.385,19.482 L77.385,18.002 L82.221,18.002 L82.221,19.482 L80.638,19.482 L80.638,24 L79.003,24" id="Fill-15" fill="#FFFFFF" sketch:type="MSShapeGroup"></path>
|
25 |
+
<path d="M85.797,24 L85.797,21.874 L83.534,18.002 L85.289,18.002 L86.606,20.334 L87.923,18.002 L89.679,18.002 L87.415,21.874 L87.415,24 L85.797,24" id="Fill-16" fill="#FFFFFF" sketch:type="MSShapeGroup"></path>
|
26 |
+
<path d="M32,0 L11.156,0 C7.944,0 6.338,0 4.609,0.547 C2.721,1.234 1.234,2.721 0.547,4.609 C0,6.338 0,7.913 0,11.125 L0,20.875 C0,22.138 0,23.142 0.032,24 L2,26 L30.114502,26 L32,24 L32,0" id="Fill-19" fill="#464E7E" sketch:type="MSShapeGroup"></path>
|
27 |
+
<path d="M32,24 L0.032,24 C0.083,25.349 0.213,26.334 0.547,27.391 C1.234,29.279 2.721,30.766 4.609,31.453 C6.338,32 7.944,32 11.156,32 L32,32 L32,24" id="Fill-20" fill="#00C389" sketch:type="MSShapeGroup"></path>
|
28 |
+
<path d="M6,19.992 L6,8 L11.46,8 C12.648,8 13.665,8.396 14.508,9.204 C15.352,10.013 15.766,10.977 15.766,12.129 C15.766,13.66 14.956,14.985 13.716,15.553 L16.713,19.992 L12.958,19.992 L10.513,16.258 L9.273,16.258 L9.273,19.992 L6,19.992 L6,19.992 Z M9.273,13.643 L11.098,13.643 C11.977,13.643 12.511,13.127 12.511,12.232 C12.511,11.475 12.011,10.959 11.374,10.959 L9.273,10.959 L9.273,13.643 L9.273,13.643 Z" id="Fill-21" fill="#FFFFFF" sketch:type="MSShapeGroup"></path>
|
29 |
+
</g>
|
30 |
+
</g>
|
31 |
+
</g>
|
32 |
+
</svg>
|
skin/adminhtml/default/default/Rublon/img/rublon_logo_16x16.png
ADDED
Binary file
|
skin/adminhtml/default/default/Rublon/img/rublon_logo_16x16@2x.png
ADDED
Binary file
|
skin/adminhtml/default/default/Rublon/img/rublon_logo_32x32.png
ADDED
Binary file
|
skin/adminhtml/default/default/Rublon/img/rublon_logo_32x32@2x.png
ADDED
Binary file
|
skin/adminhtml/default/default/Rublon/img/rublon_visual.gif
ADDED
Binary file
|
skin/adminhtml/default/default/Rublon/img/rublon_visual@2x.gif
ADDED
Binary file
|