Version Description
- Fix: Fatal error: Call to undefined method Facebook\Facebook::getAccessToken()
Download this release
Release Info
Developer | nextendweb |
Plugin | Nextend Social Login and Register (Facebook, Google, Twitter) |
Version | 2.0.2 |
Comparing to | |
See all releases |
Code changes from version 1.6.0 to 2.0.2
- Facebook/Authentication/AccessToken.php +160 -0
- Facebook/Authentication/AccessTokenMetadata.php +390 -0
- Facebook/Authentication/OAuth2Client.php +292 -0
- Facebook/Exceptions/FacebookAuthenticationException.php +33 -0
- Facebook/Exceptions/FacebookAuthorizationException.php +33 -0
- Facebook/Exceptions/FacebookClientException.php +33 -0
- Facebook/Exceptions/FacebookOtherException.php +33 -0
- Facebook/Exceptions/FacebookResponseException.php +214 -0
- Facebook/Exceptions/FacebookResumableUploadException.php +33 -0
- Facebook/Exceptions/FacebookSDKException.php +33 -0
- Facebook/Exceptions/FacebookServerException.php +33 -0
- Facebook/Exceptions/FacebookThrottleException.php +33 -0
- Facebook/Facebook.php +614 -0
- Facebook/FacebookApp.php +110 -0
- Facebook/FacebookBatchRequest.php +301 -0
- Facebook/FacebookBatchResponse.php +174 -0
- Facebook/FacebookClient.php +250 -0
- Facebook/FacebookRequest.php +534 -0
- Facebook/FacebookResponse.php +410 -0
- Facebook/FileUpload/FacebookFile.php +169 -0
- Facebook/FileUpload/FacebookResumableUploader.php +167 -0
- Facebook/FileUpload/FacebookTransferChunk.php +133 -0
- Facebook/FileUpload/FacebookVideo.php +33 -0
- Facebook/FileUpload/Mimetypes.php +988 -0
- Facebook/GraphNodes/Birthday.php +85 -0
- Facebook/GraphNodes/Collection.php +242 -0
- Facebook/GraphNodes/GraphAchievement.php +112 -0
- Facebook/GraphNodes/GraphAlbum.php +183 -0
- Facebook/GraphNodes/GraphApplication.php +43 -0
- Facebook/GraphNodes/GraphCoverPhoto.php +72 -0
- Facebook/GraphNodes/GraphEdge.php +252 -0
- Facebook/GraphNodes/GraphEvent.php +242 -0
- Facebook/GraphNodes/GraphGroup.php +170 -0
- Facebook/GraphNodes/GraphList.php +36 -0
- Facebook/GraphNodes/GraphLocation.php +102 -0
- Facebook/GraphNodes/GraphNode.php +197 -0
- Facebook/GraphNodes/GraphNodeFactory.php +392 -0
- Facebook/GraphNodes/GraphObject.php +36 -0
- Facebook/GraphNodes/GraphObjectFactory.php +88 -0
- Facebook/GraphNodes/GraphPage.php +147 -0
- Facebook/GraphNodes/GraphPicture.php +72 -0
- Facebook/GraphNodes/GraphSessionInfo.php +102 -0
- Facebook/GraphNodes/GraphUser.php +172 -0
- Facebook/Helpers/FacebookCanvasHelper.php +52 -0
- Facebook/Helpers/FacebookJavaScriptHelper.php +42 -0
- Facebook/Helpers/FacebookPageTabHelper.php +95 -0
- Facebook/Helpers/FacebookRedirectLoginHelper.php +333 -0
- Facebook/Helpers/FacebookSignedRequestFromInputHelper.php +166 -0
- Facebook/Http/GraphRawResponse.php +137 -0
- Facebook/Http/RequestBodyInterface.php +39 -0
- Facebook/Http/RequestBodyMultipart.php +170 -0
- Facebook/Http/RequestBodyUrlEncoded.php +55 -0
- Facebook/HttpClients/FacebookCurl.php +129 -0
- Facebook/HttpClients/FacebookCurlHttpClient.php +163 -0
- Facebook/HttpClients/FacebookGuzzleHttpClient.php +97 -0
- Facebook/HttpClients/FacebookHttpClientInterface.php +47 -0
- Facebook/HttpClients/FacebookStream.php +80 -0
- Facebook/HttpClients/FacebookStreamHttpClient.php +94 -0
- Facebook/HttpClients/HttpClientsFactory.php +99 -0
- Facebook/HttpClients/certs/DigiCertHighAssuranceEVRootCA.pem +23 -0
- Facebook/PersistentData/FacebookMemoryPersistentDataHandler.php +53 -0
- Facebook/PersistentData/FacebookSessionPersistentDataHandler.php +76 -0
- Facebook/PersistentData/FacebookWordPressPersistentDataHandler.php +55 -0
- Facebook/PersistentData/PersistentDataFactory.php +65 -0
- Facebook/PersistentData/PersistentDataInterface.php +49 -0
- Facebook/PseudoRandomString/McryptPseudoRandomStringGenerator.php +68 -0
- Facebook/PseudoRandomString/OpenSslPseudoRandomStringGenerator.php +67 -0
- Facebook/PseudoRandomString/PseudoRandomStringGeneratorFactory.php +101 -0
- Facebook/PseudoRandomString/PseudoRandomStringGeneratorInterface.php +45 -0
- Facebook/PseudoRandomString/PseudoRandomStringGeneratorTrait.php +58 -0
- Facebook/PseudoRandomString/RandomBytesPseudoRandomStringGenerator.php +59 -0
- Facebook/PseudoRandomString/UrandomPseudoRandomStringGenerator.php +89 -0
- Facebook/SignedRequest.php +326 -0
- Facebook/Url/FacebookUrlDetectionHandler.php +182 -0
- Facebook/Url/FacebookUrlManipulator.php +167 -0
- Facebook/Url/UrlDetectionInterface.php +39 -0
- Facebook/autoload.php +81 -0
- Facebook/polyfills.php +49 -0
- nextend-facebook-connect.php +337 -287
- nextend-facebook-settings.php +3 -3
- readme.txt +20 -7
- sdk/base_facebook.php +0 -1447
- sdk/facebook.php +0 -155
- sdk/fb_ca_chain_bundle.crt +0 -3920
- sdk/index.html +0 -0
- sdk/init.php +0 -33
Facebook/Authentication/AccessToken.php
ADDED
@@ -0,0 +1,160 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Copyright 2017 Facebook, Inc.
|
4 |
+
*
|
5 |
+
* You are hereby granted a non-exclusive, worldwide, royalty-free license to
|
6 |
+
* use, copy, modify, and distribute this software in source code or binary
|
7 |
+
* form for use in connection with the web services and APIs provided by
|
8 |
+
* Facebook.
|
9 |
+
*
|
10 |
+
* As with any software that integrates with the Facebook platform, your use
|
11 |
+
* of this software is subject to the Facebook Developer Principles and
|
12 |
+
* Policies [http://developers.facebook.com/policy/]. This copyright notice
|
13 |
+
* shall be included in all copies or substantial portions of the software.
|
14 |
+
*
|
15 |
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16 |
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17 |
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
18 |
+
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19 |
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
20 |
+
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
21 |
+
* DEALINGS IN THE SOFTWARE.
|
22 |
+
*
|
23 |
+
*/
|
24 |
+
namespace Facebook\Authentication;
|
25 |
+
|
26 |
+
/**
|
27 |
+
* Class AccessToken
|
28 |
+
*
|
29 |
+
* @package Facebook
|
30 |
+
*/
|
31 |
+
class AccessToken
|
32 |
+
{
|
33 |
+
/**
|
34 |
+
* The access token value.
|
35 |
+
*
|
36 |
+
* @var string
|
37 |
+
*/
|
38 |
+
protected $value = '';
|
39 |
+
|
40 |
+
/**
|
41 |
+
* Date when token expires.
|
42 |
+
*
|
43 |
+
* @var \DateTime|null
|
44 |
+
*/
|
45 |
+
protected $expiresAt;
|
46 |
+
|
47 |
+
/**
|
48 |
+
* Create a new access token entity.
|
49 |
+
*
|
50 |
+
* @param string $accessToken
|
51 |
+
* @param int $expiresAt
|
52 |
+
*/
|
53 |
+
public function __construct($accessToken, $expiresAt = 0)
|
54 |
+
{
|
55 |
+
$this->value = $accessToken;
|
56 |
+
if ($expiresAt) {
|
57 |
+
$this->setExpiresAtFromTimeStamp($expiresAt);
|
58 |
+
}
|
59 |
+
}
|
60 |
+
|
61 |
+
/**
|
62 |
+
* Generate an app secret proof to sign a request to Graph.
|
63 |
+
*
|
64 |
+
* @param string $appSecret The app secret.
|
65 |
+
*
|
66 |
+
* @return string
|
67 |
+
*/
|
68 |
+
public function getAppSecretProof($appSecret)
|
69 |
+
{
|
70 |
+
return hash_hmac('sha256', $this->value, $appSecret);
|
71 |
+
}
|
72 |
+
|
73 |
+
/**
|
74 |
+
* Getter for expiresAt.
|
75 |
+
*
|
76 |
+
* @return \DateTime|null
|
77 |
+
*/
|
78 |
+
public function getExpiresAt()
|
79 |
+
{
|
80 |
+
return $this->expiresAt;
|
81 |
+
}
|
82 |
+
|
83 |
+
/**
|
84 |
+
* Determines whether or not this is an app access token.
|
85 |
+
*
|
86 |
+
* @return bool
|
87 |
+
*/
|
88 |
+
public function isAppAccessToken()
|
89 |
+
{
|
90 |
+
return strpos($this->value, '|') !== false;
|
91 |
+
}
|
92 |
+
|
93 |
+
/**
|
94 |
+
* Determines whether or not this is a long-lived token.
|
95 |
+
*
|
96 |
+
* @return bool
|
97 |
+
*/
|
98 |
+
public function isLongLived()
|
99 |
+
{
|
100 |
+
if ($this->expiresAt) {
|
101 |
+
return $this->expiresAt->getTimestamp() > time() + (60 * 60 * 2);
|
102 |
+
}
|
103 |
+
|
104 |
+
if ($this->isAppAccessToken()) {
|
105 |
+
return true;
|
106 |
+
}
|
107 |
+
|
108 |
+
return false;
|
109 |
+
}
|
110 |
+
|
111 |
+
/**
|
112 |
+
* Checks the expiration of the access token.
|
113 |
+
*
|
114 |
+
* @return boolean|null
|
115 |
+
*/
|
116 |
+
public function isExpired()
|
117 |
+
{
|
118 |
+
if ($this->getExpiresAt() instanceof \DateTime) {
|
119 |
+
return $this->getExpiresAt()->getTimestamp() < time();
|
120 |
+
}
|
121 |
+
|
122 |
+
if ($this->isAppAccessToken()) {
|
123 |
+
return false;
|
124 |
+
}
|
125 |
+
|
126 |
+
return null;
|
127 |
+
}
|
128 |
+
|
129 |
+
/**
|
130 |
+
* Returns the access token as a string.
|
131 |
+
*
|
132 |
+
* @return string
|
133 |
+
*/
|
134 |
+
public function getValue()
|
135 |
+
{
|
136 |
+
return $this->value;
|
137 |
+
}
|
138 |
+
|
139 |
+
/**
|
140 |
+
* Returns the access token as a string.
|
141 |
+
*
|
142 |
+
* @return string
|
143 |
+
*/
|
144 |
+
public function __toString()
|
145 |
+
{
|
146 |
+
return $this->getValue();
|
147 |
+
}
|
148 |
+
|
149 |
+
/**
|
150 |
+
* Setter for expires_at.
|
151 |
+
*
|
152 |
+
* @param int $timeStamp
|
153 |
+
*/
|
154 |
+
protected function setExpiresAtFromTimeStamp($timeStamp)
|
155 |
+
{
|
156 |
+
$dt = new \DateTime();
|
157 |
+
$dt->setTimestamp($timeStamp);
|
158 |
+
$this->expiresAt = $dt;
|
159 |
+
}
|
160 |
+
}
|
Facebook/Authentication/AccessTokenMetadata.php
ADDED
@@ -0,0 +1,390 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Copyright 2017 Facebook, Inc.
|
4 |
+
*
|
5 |
+
* You are hereby granted a non-exclusive, worldwide, royalty-free license to
|
6 |
+
* use, copy, modify, and distribute this software in source code or binary
|
7 |
+
* form for use in connection with the web services and APIs provided by
|
8 |
+
* Facebook.
|
9 |
+
*
|
10 |
+
* As with any software that integrates with the Facebook platform, your use
|
11 |
+
* of this software is subject to the Facebook Developer Principles and
|
12 |
+
* Policies [http://developers.facebook.com/policy/]. This copyright notice
|
13 |
+
* shall be included in all copies or substantial portions of the software.
|
14 |
+
*
|
15 |
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16 |
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17 |
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
18 |
+
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19 |
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
20 |
+
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
21 |
+
* DEALINGS IN THE SOFTWARE.
|
22 |
+
*
|
23 |
+
*/
|
24 |
+
namespace Facebook\Authentication;
|
25 |
+
|
26 |
+
use Facebook\Exceptions\FacebookSDKException;
|
27 |
+
|
28 |
+
/**
|
29 |
+
* Class AccessTokenMetadata
|
30 |
+
*
|
31 |
+
* Represents metadata from an access token.
|
32 |
+
*
|
33 |
+
* @package Facebook
|
34 |
+
* @see https://developers.facebook.com/docs/graph-api/reference/debug_token
|
35 |
+
*/
|
36 |
+
class AccessTokenMetadata
|
37 |
+
{
|
38 |
+
/**
|
39 |
+
* The access token metadata.
|
40 |
+
*
|
41 |
+
* @var array
|
42 |
+
*/
|
43 |
+
protected $metadata = [];
|
44 |
+
|
45 |
+
/**
|
46 |
+
* Properties that should be cast as DateTime objects.
|
47 |
+
*
|
48 |
+
* @var array
|
49 |
+
*/
|
50 |
+
protected static $dateProperties = ['expires_at', 'issued_at'];
|
51 |
+
|
52 |
+
/**
|
53 |
+
* @param array $metadata
|
54 |
+
*
|
55 |
+
* @throws FacebookSDKException
|
56 |
+
*/
|
57 |
+
public function __construct(array $metadata)
|
58 |
+
{
|
59 |
+
if (!isset($metadata['data'])) {
|
60 |
+
throw new FacebookSDKException('Unexpected debug token response data.', 401);
|
61 |
+
}
|
62 |
+
|
63 |
+
$this->metadata = $metadata['data'];
|
64 |
+
|
65 |
+
$this->castTimestampsToDateTime();
|
66 |
+
}
|
67 |
+
|
68 |
+
/**
|
69 |
+
* Returns a value from the metadata.
|
70 |
+
*
|
71 |
+
* @param string $field The property to retrieve.
|
72 |
+
* @param mixed $default The default to return if the property doesn't exist.
|
73 |
+
*
|
74 |
+
* @return mixed
|
75 |
+
*/
|
76 |
+
public function getField($field, $default = null)
|
77 |
+
{
|
78 |
+
if (isset($this->metadata[$field])) {
|
79 |
+
return $this->metadata[$field];
|
80 |
+
}
|
81 |
+
|
82 |
+
return $default;
|
83 |
+
}
|
84 |
+
|
85 |
+
/**
|
86 |
+
* Returns a value from the metadata.
|
87 |
+
*
|
88 |
+
* @param string $field The property to retrieve.
|
89 |
+
* @param mixed $default The default to return if the property doesn't exist.
|
90 |
+
*
|
91 |
+
* @return mixed
|
92 |
+
*
|
93 |
+
* @deprecated 5.0.0 getProperty() has been renamed to getField()
|
94 |
+
* @todo v6: Remove this method
|
95 |
+
*/
|
96 |
+
public function getProperty($field, $default = null)
|
97 |
+
{
|
98 |
+
return $this->getField($field, $default);
|
99 |
+
}
|
100 |
+
|
101 |
+
/**
|
102 |
+
* Returns a value from a child property in the metadata.
|
103 |
+
*
|
104 |
+
* @param string $parentField The parent property.
|
105 |
+
* @param string $field The property to retrieve.
|
106 |
+
* @param mixed $default The default to return if the property doesn't exist.
|
107 |
+
*
|
108 |
+
* @return mixed
|
109 |
+
*/
|
110 |
+
public function getChildProperty($parentField, $field, $default = null)
|
111 |
+
{
|
112 |
+
if (!isset($this->metadata[$parentField])) {
|
113 |
+
return $default;
|
114 |
+
}
|
115 |
+
|
116 |
+
if (!isset($this->metadata[$parentField][$field])) {
|
117 |
+
return $default;
|
118 |
+
}
|
119 |
+
|
120 |
+
return $this->metadata[$parentField][$field];
|
121 |
+
}
|
122 |
+
|
123 |
+
/**
|
124 |
+
* Returns a value from the error metadata.
|
125 |
+
*
|
126 |
+
* @param string $field The property to retrieve.
|
127 |
+
* @param mixed $default The default to return if the property doesn't exist.
|
128 |
+
*
|
129 |
+
* @return mixed
|
130 |
+
*/
|
131 |
+
public function getErrorProperty($field, $default = null)
|
132 |
+
{
|
133 |
+
return $this->getChildProperty('error', $field, $default);
|
134 |
+
}
|
135 |
+
|
136 |
+
/**
|
137 |
+
* Returns a value from the "metadata" metadata. *Brain explodes*
|
138 |
+
*
|
139 |
+
* @param string $field The property to retrieve.
|
140 |
+
* @param mixed $default The default to return if the property doesn't exist.
|
141 |
+
*
|
142 |
+
* @return mixed
|
143 |
+
*/
|
144 |
+
public function getMetadataProperty($field, $default = null)
|
145 |
+
{
|
146 |
+
return $this->getChildProperty('metadata', $field, $default);
|
147 |
+
}
|
148 |
+
|
149 |
+
/**
|
150 |
+
* The ID of the application this access token is for.
|
151 |
+
*
|
152 |
+
* @return string|null
|
153 |
+
*/
|
154 |
+
public function getAppId()
|
155 |
+
{
|
156 |
+
return $this->getField('app_id');
|
157 |
+
}
|
158 |
+
|
159 |
+
/**
|
160 |
+
* Name of the application this access token is for.
|
161 |
+
*
|
162 |
+
* @return string|null
|
163 |
+
*/
|
164 |
+
public function getApplication()
|
165 |
+
{
|
166 |
+
return $this->getField('application');
|
167 |
+
}
|
168 |
+
|
169 |
+
/**
|
170 |
+
* Any error that a request to the graph api
|
171 |
+
* would return due to the access token.
|
172 |
+
*
|
173 |
+
* @return bool|null
|
174 |
+
*/
|
175 |
+
public function isError()
|
176 |
+
{
|
177 |
+
return $this->getField('error') !== null;
|
178 |
+
}
|
179 |
+
|
180 |
+
/**
|
181 |
+
* The error code for the error.
|
182 |
+
*
|
183 |
+
* @return int|null
|
184 |
+
*/
|
185 |
+
public function getErrorCode()
|
186 |
+
{
|
187 |
+
return $this->getErrorProperty('code');
|
188 |
+
}
|
189 |
+
|
190 |
+
/**
|
191 |
+
* The error message for the error.
|
192 |
+
*
|
193 |
+
* @return string|null
|
194 |
+
*/
|
195 |
+
public function getErrorMessage()
|
196 |
+
{
|
197 |
+
return $this->getErrorProperty('message');
|
198 |
+
}
|
199 |
+
|
200 |
+
/**
|
201 |
+
* The error subcode for the error.
|
202 |
+
*
|
203 |
+
* @return int|null
|
204 |
+
*/
|
205 |
+
public function getErrorSubcode()
|
206 |
+
{
|
207 |
+
return $this->getErrorProperty('subcode');
|
208 |
+
}
|
209 |
+
|
210 |
+
/**
|
211 |
+
* DateTime when this access token expires.
|
212 |
+
*
|
213 |
+
* @return \DateTime|null
|
214 |
+
*/
|
215 |
+
public function getExpiresAt()
|
216 |
+
{
|
217 |
+
return $this->getField('expires_at');
|
218 |
+
}
|
219 |
+
|
220 |
+
/**
|
221 |
+
* Whether the access token is still valid or not.
|
222 |
+
*
|
223 |
+
* @return boolean|null
|
224 |
+
*/
|
225 |
+
public function getIsValid()
|
226 |
+
{
|
227 |
+
return $this->getField('is_valid');
|
228 |
+
}
|
229 |
+
|
230 |
+
/**
|
231 |
+
* DateTime when this access token was issued.
|
232 |
+
*
|
233 |
+
* Note that the issued_at field is not returned
|
234 |
+
* for short-lived access tokens.
|
235 |
+
*
|
236 |
+
* @see https://developers.facebook.com/docs/facebook-login/access-tokens#debug
|
237 |
+
*
|
238 |
+
* @return \DateTime|null
|
239 |
+
*/
|
240 |
+
public function getIssuedAt()
|
241 |
+
{
|
242 |
+
return $this->getField('issued_at');
|
243 |
+
}
|
244 |
+
|
245 |
+
/**
|
246 |
+
* General metadata associated with the access token.
|
247 |
+
* Can contain data like 'sso', 'auth_type', 'auth_nonce'.
|
248 |
+
*
|
249 |
+
* @return array|null
|
250 |
+
*/
|
251 |
+
public function getMetadata()
|
252 |
+
{
|
253 |
+
return $this->getField('metadata');
|
254 |
+
}
|
255 |
+
|
256 |
+
/**
|
257 |
+
* The 'sso' child property from the 'metadata' parent property.
|
258 |
+
*
|
259 |
+
* @return string|null
|
260 |
+
*/
|
261 |
+
public function getSso()
|
262 |
+
{
|
263 |
+
return $this->getMetadataProperty('sso');
|
264 |
+
}
|
265 |
+
|
266 |
+
/**
|
267 |
+
* The 'auth_type' child property from the 'metadata' parent property.
|
268 |
+
*
|
269 |
+
* @return string|null
|
270 |
+
*/
|
271 |
+
public function getAuthType()
|
272 |
+
{
|
273 |
+
return $this->getMetadataProperty('auth_type');
|
274 |
+
}
|
275 |
+
|
276 |
+
/**
|
277 |
+
* The 'auth_nonce' child property from the 'metadata' parent property.
|
278 |
+
*
|
279 |
+
* @return string|null
|
280 |
+
*/
|
281 |
+
public function getAuthNonce()
|
282 |
+
{
|
283 |
+
return $this->getMetadataProperty('auth_nonce');
|
284 |
+
}
|
285 |
+
|
286 |
+
/**
|
287 |
+
* For impersonated access tokens, the ID of
|
288 |
+
* the page this token contains.
|
289 |
+
*
|
290 |
+
* @return string|null
|
291 |
+
*/
|
292 |
+
public function getProfileId()
|
293 |
+
{
|
294 |
+
return $this->getField('profile_id');
|
295 |
+
}
|
296 |
+
|
297 |
+
/**
|
298 |
+
* List of permissions that the user has granted for
|
299 |
+
* the app in this access token.
|
300 |
+
*
|
301 |
+
* @return array
|
302 |
+
*/
|
303 |
+
public function getScopes()
|
304 |
+
{
|
305 |
+
return $this->getField('scopes');
|
306 |
+
}
|
307 |
+
|
308 |
+
/**
|
309 |
+
* The ID of the user this access token is for.
|
310 |
+
*
|
311 |
+
* @return string|null
|
312 |
+
*/
|
313 |
+
public function getUserId()
|
314 |
+
{
|
315 |
+
return $this->getField('user_id');
|
316 |
+
}
|
317 |
+
|
318 |
+
/**
|
319 |
+
* Ensures the app ID from the access token
|
320 |
+
* metadata is what we expect.
|
321 |
+
*
|
322 |
+
* @param string $appId
|
323 |
+
*
|
324 |
+
* @throws FacebookSDKException
|
325 |
+
*/
|
326 |
+
public function validateAppId($appId)
|
327 |
+
{
|
328 |
+
if ($this->getAppId() !== $appId) {
|
329 |
+
throw new FacebookSDKException('Access token metadata contains unexpected app ID.', 401);
|
330 |
+
}
|
331 |
+
}
|
332 |
+
|
333 |
+
/**
|
334 |
+
* Ensures the user ID from the access token
|
335 |
+
* metadata is what we expect.
|
336 |
+
*
|
337 |
+
* @param string $userId
|
338 |
+
*
|
339 |
+
* @throws FacebookSDKException
|
340 |
+
*/
|
341 |
+
public function validateUserId($userId)
|
342 |
+
{
|
343 |
+
if ($this->getUserId() !== $userId) {
|
344 |
+
throw new FacebookSDKException('Access token metadata contains unexpected user ID.', 401);
|
345 |
+
}
|
346 |
+
}
|
347 |
+
|
348 |
+
/**
|
349 |
+
* Ensures the access token has not expired yet.
|
350 |
+
*
|
351 |
+
* @throws FacebookSDKException
|
352 |
+
*/
|
353 |
+
public function validateExpiration()
|
354 |
+
{
|
355 |
+
if (!$this->getExpiresAt() instanceof \DateTime) {
|
356 |
+
return;
|
357 |
+
}
|
358 |
+
|
359 |
+
if ($this->getExpiresAt()->getTimestamp() < time()) {
|
360 |
+
throw new FacebookSDKException('Inspection of access token metadata shows that the access token has expired.', 401);
|
361 |
+
}
|
362 |
+
}
|
363 |
+
|
364 |
+
/**
|
365 |
+
* Converts a unix timestamp into a DateTime entity.
|
366 |
+
*
|
367 |
+
* @param int $timestamp
|
368 |
+
*
|
369 |
+
* @return \DateTime
|
370 |
+
*/
|
371 |
+
private function convertTimestampToDateTime($timestamp)
|
372 |
+
{
|
373 |
+
$dt = new \DateTime();
|
374 |
+
$dt->setTimestamp($timestamp);
|
375 |
+
|
376 |
+
return $dt;
|
377 |
+
}
|
378 |
+
|
379 |
+
/**
|
380 |
+
* Casts the unix timestamps as DateTime entities.
|
381 |
+
*/
|
382 |
+
private function castTimestampsToDateTime()
|
383 |
+
{
|
384 |
+
foreach (static::$dateProperties as $key) {
|
385 |
+
if (isset($this->metadata[$key]) && $this->metadata[$key] !== 0) {
|
386 |
+
$this->metadata[$key] = $this->convertTimestampToDateTime($this->metadata[$key]);
|
387 |
+
}
|
388 |
+
}
|
389 |
+
}
|
390 |
+
}
|
Facebook/Authentication/OAuth2Client.php
ADDED
@@ -0,0 +1,292 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Copyright 2017 Facebook, Inc.
|
4 |
+
*
|
5 |
+
* You are hereby granted a non-exclusive, worldwide, royalty-free license to
|
6 |
+
* use, copy, modify, and distribute this software in source code or binary
|
7 |
+
* form for use in connection with the web services and APIs provided by
|
8 |
+
* Facebook.
|
9 |
+
*
|
10 |
+
* As with any software that integrates with the Facebook platform, your use
|
11 |
+
* of this software is subject to the Facebook Developer Principles and
|
12 |
+
* Policies [http://developers.facebook.com/policy/]. This copyright notice
|
13 |
+
* shall be included in all copies or substantial portions of the software.
|
14 |
+
*
|
15 |
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16 |
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17 |
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
18 |
+
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19 |
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
20 |
+
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
21 |
+
* DEALINGS IN THE SOFTWARE.
|
22 |
+
*
|
23 |
+
*/
|
24 |
+
namespace Facebook\Authentication;
|
25 |
+
|
26 |
+
use Facebook\Facebook;
|
27 |
+
use Facebook\FacebookApp;
|
28 |
+
use Facebook\FacebookRequest;
|
29 |
+
use Facebook\FacebookResponse;
|
30 |
+
use Facebook\FacebookClient;
|
31 |
+
use Facebook\Exceptions\FacebookResponseException;
|
32 |
+
use Facebook\Exceptions\FacebookSDKException;
|
33 |
+
|
34 |
+
/**
|
35 |
+
* Class OAuth2Client
|
36 |
+
*
|
37 |
+
* @package Facebook
|
38 |
+
*/
|
39 |
+
class OAuth2Client
|
40 |
+
{
|
41 |
+
/**
|
42 |
+
* @const string The base authorization URL.
|
43 |
+
*/
|
44 |
+
const BASE_AUTHORIZATION_URL = 'https://www.facebook.com';
|
45 |
+
|
46 |
+
/**
|
47 |
+
* The FacebookApp entity.
|
48 |
+
*
|
49 |
+
* @var FacebookApp
|
50 |
+
*/
|
51 |
+
protected $app;
|
52 |
+
|
53 |
+
/**
|
54 |
+
* The Facebook client.
|
55 |
+
*
|
56 |
+
* @var FacebookClient
|
57 |
+
*/
|
58 |
+
protected $client;
|
59 |
+
|
60 |
+
/**
|
61 |
+
* The version of the Graph API to use.
|
62 |
+
*
|
63 |
+
* @var string
|
64 |
+
*/
|
65 |
+
protected $graphVersion;
|
66 |
+
|
67 |
+
/**
|
68 |
+
* The last request sent to Graph.
|
69 |
+
*
|
70 |
+
* @var FacebookRequest|null
|
71 |
+
*/
|
72 |
+
protected $lastRequest;
|
73 |
+
|
74 |
+
/**
|
75 |
+
* @param FacebookApp $app
|
76 |
+
* @param FacebookClient $client
|
77 |
+
* @param string|null $graphVersion The version of the Graph API to use.
|
78 |
+
*/
|
79 |
+
public function __construct(FacebookApp $app, FacebookClient $client, $graphVersion = null)
|
80 |
+
{
|
81 |
+
$this->app = $app;
|
82 |
+
$this->client = $client;
|
83 |
+
$this->graphVersion = $graphVersion ?: Facebook::DEFAULT_GRAPH_VERSION;
|
84 |
+
}
|
85 |
+
|
86 |
+
/**
|
87 |
+
* Returns the last FacebookRequest that was sent.
|
88 |
+
* Useful for debugging and testing.
|
89 |
+
*
|
90 |
+
* @return FacebookRequest|null
|
91 |
+
*/
|
92 |
+
public function getLastRequest()
|
93 |
+
{
|
94 |
+
return $this->lastRequest;
|
95 |
+
}
|
96 |
+
|
97 |
+
/**
|
98 |
+
* Get the metadata associated with the access token.
|
99 |
+
*
|
100 |
+
* @param AccessToken|string $accessToken The access token to debug.
|
101 |
+
*
|
102 |
+
* @return AccessTokenMetadata
|
103 |
+
*/
|
104 |
+
public function debugToken($accessToken)
|
105 |
+
{
|
106 |
+
$accessToken = $accessToken instanceof AccessToken ? $accessToken->getValue() : $accessToken;
|
107 |
+
$params = ['input_token' => $accessToken];
|
108 |
+
|
109 |
+
$this->lastRequest = new FacebookRequest(
|
110 |
+
$this->app,
|
111 |
+
$this->app->getAccessToken(),
|
112 |
+
'GET',
|
113 |
+
'/debug_token',
|
114 |
+
$params,
|
115 |
+
null,
|
116 |
+
$this->graphVersion
|
117 |
+
);
|
118 |
+
$response = $this->client->sendRequest($this->lastRequest);
|
119 |
+
$metadata = $response->getDecodedBody();
|
120 |
+
|
121 |
+
return new AccessTokenMetadata($metadata);
|
122 |
+
}
|
123 |
+
|
124 |
+
/**
|
125 |
+
* Generates an authorization URL to begin the process of authenticating a user.
|
126 |
+
*
|
127 |
+
* @param string $redirectUrl The callback URL to redirect to.
|
128 |
+
* @param array $scope An array of permissions to request.
|
129 |
+
* @param string $state The CSPRNG-generated CSRF value.
|
130 |
+
* @param array $params An array of parameters to generate URL.
|
131 |
+
* @param string $separator The separator to use in http_build_query().
|
132 |
+
*
|
133 |
+
* @return string
|
134 |
+
*/
|
135 |
+
public function getAuthorizationUrl($redirectUrl, $state, array $scope = [], array $params = [], $separator = '&')
|
136 |
+
{
|
137 |
+
$params += [
|
138 |
+
'client_id' => $this->app->getId(),
|
139 |
+
'state' => $state,
|
140 |
+
'response_type' => 'code',
|
141 |
+
'sdk' => 'php-sdk-' . Facebook::VERSION,
|
142 |
+
'redirect_uri' => $redirectUrl,
|
143 |
+
'scope' => implode(',', $scope)
|
144 |
+
];
|
145 |
+
|
146 |
+
return static::BASE_AUTHORIZATION_URL . '/' . $this->graphVersion . '/dialog/oauth?' . http_build_query($params, null, $separator);
|
147 |
+
}
|
148 |
+
|
149 |
+
/**
|
150 |
+
* Get a valid access token from a code.
|
151 |
+
*
|
152 |
+
* @param string $code
|
153 |
+
* @param string $redirectUri
|
154 |
+
*
|
155 |
+
* @return AccessToken
|
156 |
+
*
|
157 |
+
* @throws FacebookSDKException
|
158 |
+
*/
|
159 |
+
public function getAccessTokenFromCode($code, $redirectUri = '')
|
160 |
+
{
|
161 |
+
$params = [
|
162 |
+
'code' => $code,
|
163 |
+
'redirect_uri' => $redirectUri,
|
164 |
+
];
|
165 |
+
|
166 |
+
return $this->requestAnAccessToken($params);
|
167 |
+
}
|
168 |
+
|
169 |
+
/**
|
170 |
+
* Exchanges a short-lived access token with a long-lived access token.
|
171 |
+
*
|
172 |
+
* @param AccessToken|string $accessToken
|
173 |
+
*
|
174 |
+
* @return AccessToken
|
175 |
+
*
|
176 |
+
* @throws FacebookSDKException
|
177 |
+
*/
|
178 |
+
public function getLongLivedAccessToken($accessToken)
|
179 |
+
{
|
180 |
+
$accessToken = $accessToken instanceof AccessToken ? $accessToken->getValue() : $accessToken;
|
181 |
+
$params = [
|
182 |
+
'grant_type' => 'fb_exchange_token',
|
183 |
+
'fb_exchange_token' => $accessToken,
|
184 |
+
];
|
185 |
+
|
186 |
+
return $this->requestAnAccessToken($params);
|
187 |
+
}
|
188 |
+
|
189 |
+
/**
|
190 |
+
* Get a valid code from an access token.
|
191 |
+
*
|
192 |
+
* @param AccessToken|string $accessToken
|
193 |
+
* @param string $redirectUri
|
194 |
+
*
|
195 |
+
* @return AccessToken
|
196 |
+
*
|
197 |
+
* @throws FacebookSDKException
|
198 |
+
*/
|
199 |
+
public function getCodeFromLongLivedAccessToken($accessToken, $redirectUri = '')
|
200 |
+
{
|
201 |
+
$params = [
|
202 |
+
'redirect_uri' => $redirectUri,
|
203 |
+
];
|
204 |
+
|
205 |
+
$response = $this->sendRequestWithClientParams('/oauth/client_code', $params, $accessToken);
|
206 |
+
$data = $response->getDecodedBody();
|
207 |
+
|
208 |
+
if (!isset($data['code'])) {
|
209 |
+
throw new FacebookSDKException('Code was not returned from Graph.', 401);
|
210 |
+
}
|
211 |
+
|
212 |
+
return $data['code'];
|
213 |
+
}
|
214 |
+
|
215 |
+
/**
|
216 |
+
* Send a request to the OAuth endpoint.
|
217 |
+
*
|
218 |
+
* @param array $params
|
219 |
+
*
|
220 |
+
* @return AccessToken
|
221 |
+
*
|
222 |
+
* @throws FacebookSDKException
|
223 |
+
*/
|
224 |
+
protected function requestAnAccessToken(array $params)
|
225 |
+
{
|
226 |
+
$response = $this->sendRequestWithClientParams('/oauth/access_token', $params);
|
227 |
+
$data = $response->getDecodedBody();
|
228 |
+
|
229 |
+
if (!isset($data['access_token'])) {
|
230 |
+
throw new FacebookSDKException('Access token was not returned from Graph.', 401);
|
231 |
+
}
|
232 |
+
|
233 |
+
// Graph returns two different key names for expiration time
|
234 |
+
// on the same endpoint. Doh! :/
|
235 |
+
$expiresAt = 0;
|
236 |
+
if (isset($data['expires'])) {
|
237 |
+
// For exchanging a short lived token with a long lived token.
|
238 |
+
// The expiration time in seconds will be returned as "expires".
|
239 |
+
$expiresAt = time() + $data['expires'];
|
240 |
+
} elseif (isset($data['expires_in'])) {
|
241 |
+
// For exchanging a code for a short lived access token.
|
242 |
+
// The expiration time in seconds will be returned as "expires_in".
|
243 |
+
// See: https://developers.facebook.com/docs/facebook-login/access-tokens#long-via-code
|
244 |
+
$expiresAt = time() + $data['expires_in'];
|
245 |
+
}
|
246 |
+
|
247 |
+
return new AccessToken($data['access_token'], $expiresAt);
|
248 |
+
}
|
249 |
+
|
250 |
+
/**
|
251 |
+
* Send a request to Graph with an app access token.
|
252 |
+
*
|
253 |
+
* @param string $endpoint
|
254 |
+
* @param array $params
|
255 |
+
* @param AccessToken|string|null $accessToken
|
256 |
+
*
|
257 |
+
* @return FacebookResponse
|
258 |
+
*
|
259 |
+
* @throws FacebookResponseException
|
260 |
+
*/
|
261 |
+
protected function sendRequestWithClientParams($endpoint, array $params, $accessToken = null)
|
262 |
+
{
|
263 |
+
$params += $this->getClientParams();
|
264 |
+
|
265 |
+
$accessToken = $accessToken ?: $this->app->getAccessToken();
|
266 |
+
|
267 |
+
$this->lastRequest = new FacebookRequest(
|
268 |
+
$this->app,
|
269 |
+
$accessToken,
|
270 |
+
'GET',
|
271 |
+
$endpoint,
|
272 |
+
$params,
|
273 |
+
null,
|
274 |
+
$this->graphVersion
|
275 |
+
);
|
276 |
+
|
277 |
+
return $this->client->sendRequest($this->lastRequest);
|
278 |
+
}
|
279 |
+
|
280 |
+
/**
|
281 |
+
* Returns the client_* params for OAuth requests.
|
282 |
+
*
|
283 |
+
* @return array
|
284 |
+
*/
|
285 |
+
protected function getClientParams()
|
286 |
+
{
|
287 |
+
return [
|
288 |
+
'client_id' => $this->app->getId(),
|
289 |
+
'client_secret' => $this->app->getSecret(),
|
290 |
+
];
|
291 |
+
}
|
292 |
+
}
|
Facebook/Exceptions/FacebookAuthenticationException.php
ADDED
@@ -0,0 +1,33 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Copyright 2017 Facebook, Inc.
|
4 |
+
*
|
5 |
+
* You are hereby granted a non-exclusive, worldwide, royalty-free license to
|
6 |
+
* use, copy, modify, and distribute this software in source code or binary
|
7 |
+
* form for use in connection with the web services and APIs provided by
|
8 |
+
* Facebook.
|
9 |
+
*
|
10 |
+
* As with any software that integrates with the Facebook platform, your use
|
11 |
+
* of this software is subject to the Facebook Developer Principles and
|
12 |
+
* Policies [http://developers.facebook.com/policy/]. This copyright notice
|
13 |
+
* shall be included in all copies or substantial portions of the software.
|
14 |
+
*
|
15 |
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16 |
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17 |
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
18 |
+
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19 |
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
20 |
+
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
21 |
+
* DEALINGS IN THE SOFTWARE.
|
22 |
+
*
|
23 |
+
*/
|
24 |
+
namespace Facebook\Exceptions;
|
25 |
+
|
26 |
+
/**
|
27 |
+
* Class FacebookAuthenticationException
|
28 |
+
*
|
29 |
+
* @package Facebook
|
30 |
+
*/
|
31 |
+
class FacebookAuthenticationException extends FacebookSDKException
|
32 |
+
{
|
33 |
+
}
|
Facebook/Exceptions/FacebookAuthorizationException.php
ADDED
@@ -0,0 +1,33 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Copyright 2017 Facebook, Inc.
|
4 |
+
*
|
5 |
+
* You are hereby granted a non-exclusive, worldwide, royalty-free license to
|
6 |
+
* use, copy, modify, and distribute this software in source code or binary
|
7 |
+
* form for use in connection with the web services and APIs provided by
|
8 |
+
* Facebook.
|
9 |
+
*
|
10 |
+
* As with any software that integrates with the Facebook platform, your use
|
11 |
+
* of this software is subject to the Facebook Developer Principles and
|
12 |
+
* Policies [http://developers.facebook.com/policy/]. This copyright notice
|
13 |
+
* shall be included in all copies or substantial portions of the software.
|
14 |
+
*
|
15 |
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16 |
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17 |
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
18 |
+
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19 |
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
20 |
+
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
21 |
+
* DEALINGS IN THE SOFTWARE.
|
22 |
+
*
|
23 |
+
*/
|
24 |
+
namespace Facebook\Exceptions;
|
25 |
+
|
26 |
+
/**
|
27 |
+
* Class FacebookAuthorizationException
|
28 |
+
*
|
29 |
+
* @package Facebook
|
30 |
+
*/
|
31 |
+
class FacebookAuthorizationException extends FacebookSDKException
|
32 |
+
{
|
33 |
+
}
|
Facebook/Exceptions/FacebookClientException.php
ADDED
@@ -0,0 +1,33 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Copyright 2017 Facebook, Inc.
|
4 |
+
*
|
5 |
+
* You are hereby granted a non-exclusive, worldwide, royalty-free license to
|
6 |
+
* use, copy, modify, and distribute this software in source code or binary
|
7 |
+
* form for use in connection with the web services and APIs provided by
|
8 |
+
* Facebook.
|
9 |
+
*
|
10 |
+
* As with any software that integrates with the Facebook platform, your use
|
11 |
+
* of this software is subject to the Facebook Developer Principles and
|
12 |
+
* Policies [http://developers.facebook.com/policy/]. This copyright notice
|
13 |
+
* shall be included in all copies or substantial portions of the software.
|
14 |
+
*
|
15 |
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16 |
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17 |
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
18 |
+
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19 |
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
20 |
+
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
21 |
+
* DEALINGS IN THE SOFTWARE.
|
22 |
+
*
|
23 |
+
*/
|
24 |
+
namespace Facebook\Exceptions;
|
25 |
+
|
26 |
+
/**
|
27 |
+
* Class FacebookClientException
|
28 |
+
*
|
29 |
+
* @package Facebook
|
30 |
+
*/
|
31 |
+
class FacebookClientException extends FacebookSDKException
|
32 |
+
{
|
33 |
+
}
|
Facebook/Exceptions/FacebookOtherException.php
ADDED
@@ -0,0 +1,33 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Copyright 2017 Facebook, Inc.
|
4 |
+
*
|
5 |
+
* You are hereby granted a non-exclusive, worldwide, royalty-free license to
|
6 |
+
* use, copy, modify, and distribute this software in source code or binary
|
7 |
+
* form for use in connection with the web services and APIs provided by
|
8 |
+
* Facebook.
|
9 |
+
*
|
10 |
+
* As with any software that integrates with the Facebook platform, your use
|
11 |
+
* of this software is subject to the Facebook Developer Principles and
|
12 |
+
* Policies [http://developers.facebook.com/policy/]. This copyright notice
|
13 |
+
* shall be included in all copies or substantial portions of the software.
|
14 |
+
*
|
15 |
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16 |
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17 |
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
18 |
+
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19 |
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
20 |
+
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
21 |
+
* DEALINGS IN THE SOFTWARE.
|
22 |
+
*
|
23 |
+
*/
|
24 |
+
namespace Facebook\Exceptions;
|
25 |
+
|
26 |
+
/**
|
27 |
+
* Class FacebookOtherException
|
28 |
+
*
|
29 |
+
* @package Facebook
|
30 |
+
*/
|
31 |
+
class FacebookOtherException extends FacebookSDKException
|
32 |
+
{
|
33 |
+
}
|
Facebook/Exceptions/FacebookResponseException.php
ADDED
@@ -0,0 +1,214 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Copyright 2017 Facebook, Inc.
|
4 |
+
*
|
5 |
+
* You are hereby granted a non-exclusive, worldwide, royalty-free license to
|
6 |
+
* use, copy, modify, and distribute this software in source code or binary
|
7 |
+
* form for use in connection with the web services and APIs provided by
|
8 |
+
* Facebook.
|
9 |
+
*
|
10 |
+
* As with any software that integrates with the Facebook platform, your use
|
11 |
+
* of this software is subject to the Facebook Developer Principles and
|
12 |
+
* Policies [http://developers.facebook.com/policy/]. This copyright notice
|
13 |
+
* shall be included in all copies or substantial portions of the software.
|
14 |
+
*
|
15 |
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16 |
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17 |
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
18 |
+
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19 |
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
20 |
+
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
21 |
+
* DEALINGS IN THE SOFTWARE.
|
22 |
+
*
|
23 |
+
*/
|
24 |
+
namespace Facebook\Exceptions;
|
25 |
+
|
26 |
+
use Facebook\FacebookResponse;
|
27 |
+
|
28 |
+
/**
|
29 |
+
* Class FacebookResponseException
|
30 |
+
*
|
31 |
+
* @package Facebook
|
32 |
+
*/
|
33 |
+
class FacebookResponseException extends FacebookSDKException
|
34 |
+
{
|
35 |
+
/**
|
36 |
+
* @var FacebookResponse The response that threw the exception.
|
37 |
+
*/
|
38 |
+
protected $response;
|
39 |
+
|
40 |
+
/**
|
41 |
+
* @var array Decoded response.
|
42 |
+
*/
|
43 |
+
protected $responseData;
|
44 |
+
|
45 |
+
/**
|
46 |
+
* Creates a FacebookResponseException.
|
47 |
+
*
|
48 |
+
* @param FacebookResponse $response The response that threw the exception.
|
49 |
+
* @param FacebookSDKException $previousException The more detailed exception.
|
50 |
+
*/
|
51 |
+
public function __construct(FacebookResponse $response, FacebookSDKException $previousException = null)
|
52 |
+
{
|
53 |
+
$this->response = $response;
|
54 |
+
$this->responseData = $response->getDecodedBody();
|
55 |
+
|
56 |
+
$errorMessage = $this->get('message', 'Unknown error from Graph.');
|
57 |
+
$errorCode = $this->get('code', -1);
|
58 |
+
|
59 |
+
parent::__construct($errorMessage, $errorCode, $previousException);
|
60 |
+
}
|
61 |
+
|
62 |
+
/**
|
63 |
+
* A factory for creating the appropriate exception based on the response from Graph.
|
64 |
+
*
|
65 |
+
* @param FacebookResponse $response The response that threw the exception.
|
66 |
+
*
|
67 |
+
* @return FacebookResponseException
|
68 |
+
*/
|
69 |
+
public static function create(FacebookResponse $response)
|
70 |
+
{
|
71 |
+
$data = $response->getDecodedBody();
|
72 |
+
|
73 |
+
if (!isset($data['error']['code']) && isset($data['code'])) {
|
74 |
+
$data = ['error' => $data];
|
75 |
+
}
|
76 |
+
|
77 |
+
$code = isset($data['error']['code']) ? $data['error']['code'] : null;
|
78 |
+
$message = isset($data['error']['message']) ? $data['error']['message'] : 'Unknown error from Graph.';
|
79 |
+
|
80 |
+
if (isset($data['error']['error_subcode'])) {
|
81 |
+
switch ($data['error']['error_subcode']) {
|
82 |
+
// Other authentication issues
|
83 |
+
case 458:
|
84 |
+
case 459:
|
85 |
+
case 460:
|
86 |
+
case 463:
|
87 |
+
case 464:
|
88 |
+
case 467:
|
89 |
+
return new static($response, new FacebookAuthenticationException($message, $code));
|
90 |
+
// Video upload resumable error
|
91 |
+
case 1363030:
|
92 |
+
case 1363019:
|
93 |
+
case 1363037:
|
94 |
+
case 1363033:
|
95 |
+
case 1363021:
|
96 |
+
case 1363041:
|
97 |
+
return new static($response, new FacebookResumableUploadException($message, $code));
|
98 |
+
}
|
99 |
+
}
|
100 |
+
|
101 |
+
switch ($code) {
|
102 |
+
// Login status or token expired, revoked, or invalid
|
103 |
+
case 100:
|
104 |
+
case 102:
|
105 |
+
case 190:
|
106 |
+
return new static($response, new FacebookAuthenticationException($message, $code));
|
107 |
+
|
108 |
+
// Server issue, possible downtime
|
109 |
+
case 1:
|
110 |
+
case 2:
|
111 |
+
return new static($response, new FacebookServerException($message, $code));
|
112 |
+
|
113 |
+
// API Throttling
|
114 |
+
case 4:
|
115 |
+
case 17:
|
116 |
+
case 341:
|
117 |
+
return new static($response, new FacebookThrottleException($message, $code));
|
118 |
+
|
119 |
+
// Duplicate Post
|
120 |
+
case 506:
|
121 |
+
return new static($response, new FacebookClientException($message, $code));
|
122 |
+
}
|
123 |
+
|
124 |
+
// Missing Permissions
|
125 |
+
if ($code == 10 || ($code >= 200 && $code <= 299)) {
|
126 |
+
return new static($response, new FacebookAuthorizationException($message, $code));
|
127 |
+
}
|
128 |
+
|
129 |
+
// OAuth authentication error
|
130 |
+
if (isset($data['error']['type']) && $data['error']['type'] === 'OAuthException') {
|
131 |
+
return new static($response, new FacebookAuthenticationException($message, $code));
|
132 |
+
}
|
133 |
+
|
134 |
+
// All others
|
135 |
+
return new static($response, new FacebookOtherException($message, $code));
|
136 |
+
}
|
137 |
+
|
138 |
+
/**
|
139 |
+
* Checks isset and returns that or a default value.
|
140 |
+
*
|
141 |
+
* @param string $key
|
142 |
+
* @param mixed $default
|
143 |
+
*
|
144 |
+
* @return mixed
|
145 |
+
*/
|
146 |
+
private function get($key, $default = null)
|
147 |
+
{
|
148 |
+
if (isset($this->responseData['error'][$key])) {
|
149 |
+
return $this->responseData['error'][$key];
|
150 |
+
}
|
151 |
+
|
152 |
+
return $default;
|
153 |
+
}
|
154 |
+
|
155 |
+
/**
|
156 |
+
* Returns the HTTP status code
|
157 |
+
*
|
158 |
+
* @return int
|
159 |
+
*/
|
160 |
+
public function getHttpStatusCode()
|
161 |
+
{
|
162 |
+
return $this->response->getHttpStatusCode();
|
163 |
+
}
|
164 |
+
|
165 |
+
/**
|
166 |
+
* Returns the sub-error code
|
167 |
+
*
|
168 |
+
* @return int
|
169 |
+
*/
|
170 |
+
public function getSubErrorCode()
|
171 |
+
{
|
172 |
+
return $this->get('error_subcode', -1);
|
173 |
+
}
|
174 |
+
|
175 |
+
/**
|
176 |
+
* Returns the error type
|
177 |
+
*
|
178 |
+
* @return string
|
179 |
+
*/
|
180 |
+
public function getErrorType()
|
181 |
+
{
|
182 |
+
return $this->get('type', '');
|
183 |
+
}
|
184 |
+
|
185 |
+
/**
|
186 |
+
* Returns the raw response used to create the exception.
|
187 |
+
*
|
188 |
+
* @return string
|
189 |
+
*/
|
190 |
+
public function getRawResponse()
|
191 |
+
{
|
192 |
+
return $this->response->getBody();
|
193 |
+
}
|
194 |
+
|
195 |
+
/**
|
196 |
+
* Returns the decoded response used to create the exception.
|
197 |
+
*
|
198 |
+
* @return array
|
199 |
+
*/
|
200 |
+
public function getResponseData()
|
201 |
+
{
|
202 |
+
return $this->responseData;
|
203 |
+
}
|
204 |
+
|
205 |
+
/**
|
206 |
+
* Returns the response entity used to create the exception.
|
207 |
+
*
|
208 |
+
* @return FacebookResponse
|
209 |
+
*/
|
210 |
+
public function getResponse()
|
211 |
+
{
|
212 |
+
return $this->response;
|
213 |
+
}
|
214 |
+
}
|
Facebook/Exceptions/FacebookResumableUploadException.php
ADDED
@@ -0,0 +1,33 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Copyright 2017 Facebook, Inc.
|
4 |
+
*
|
5 |
+
* You are hereby granted a non-exclusive, worldwide, royalty-free license to
|
6 |
+
* use, copy, modify, and distribute this software in source code or binary
|
7 |
+
* form for use in connection with the web services and APIs provided by
|
8 |
+
* Facebook.
|
9 |
+
*
|
10 |
+
* As with any software that integrates with the Facebook platform, your use
|
11 |
+
* of this software is subject to the Facebook Developer Principles and
|
12 |
+
* Policies [http://developers.facebook.com/policy/]. This copyright notice
|
13 |
+
* shall be included in all copies or substantial portions of the software.
|
14 |
+
*
|
15 |
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16 |
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17 |
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
18 |
+
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19 |
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
20 |
+
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
21 |
+
* DEALINGS IN THE SOFTWARE.
|
22 |
+
*
|
23 |
+
*/
|
24 |
+
namespace Facebook\Exceptions;
|
25 |
+
|
26 |
+
/**
|
27 |
+
* Class FacebookResumableUploadException
|
28 |
+
*
|
29 |
+
* @package Facebook
|
30 |
+
*/
|
31 |
+
class FacebookResumableUploadException extends FacebookSDKException
|
32 |
+
{
|
33 |
+
}
|
Facebook/Exceptions/FacebookSDKException.php
ADDED
@@ -0,0 +1,33 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Copyright 2017 Facebook, Inc.
|
4 |
+
*
|
5 |
+
* You are hereby granted a non-exclusive, worldwide, royalty-free license to
|
6 |
+
* use, copy, modify, and distribute this software in source code or binary
|
7 |
+
* form for use in connection with the web services and APIs provided by
|
8 |
+
* Facebook.
|
9 |
+
*
|
10 |
+
* As with any software that integrates with the Facebook platform, your use
|
11 |
+
* of this software is subject to the Facebook Developer Principles and
|
12 |
+
* Policies [http://developers.facebook.com/policy/]. This copyright notice
|
13 |
+
* shall be included in all copies or substantial portions of the software.
|
14 |
+
*
|
15 |
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16 |
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17 |
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
18 |
+
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19 |
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
20 |
+
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
21 |
+
* DEALINGS IN THE SOFTWARE.
|
22 |
+
*
|
23 |
+
*/
|
24 |
+
namespace Facebook\Exceptions;
|
25 |
+
|
26 |
+
/**
|
27 |
+
* Class FacebookSDKException
|
28 |
+
*
|
29 |
+
* @package Facebook
|
30 |
+
*/
|
31 |
+
class FacebookSDKException extends \Exception
|
32 |
+
{
|
33 |
+
}
|
Facebook/Exceptions/FacebookServerException.php
ADDED
@@ -0,0 +1,33 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Copyright 2017 Facebook, Inc.
|
4 |
+
*
|
5 |
+
* You are hereby granted a non-exclusive, worldwide, royalty-free license to
|
6 |
+
* use, copy, modify, and distribute this software in source code or binary
|
7 |
+
* form for use in connection with the web services and APIs provided by
|
8 |
+
* Facebook.
|
9 |
+
*
|
10 |
+
* As with any software that integrates with the Facebook platform, your use
|
11 |
+
* of this software is subject to the Facebook Developer Principles and
|
12 |
+
* Policies [http://developers.facebook.com/policy/]. This copyright notice
|
13 |
+
* shall be included in all copies or substantial portions of the software.
|
14 |
+
*
|
15 |
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16 |
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17 |
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
18 |
+
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19 |
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
20 |
+
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
21 |
+
* DEALINGS IN THE SOFTWARE.
|
22 |
+
*
|
23 |
+
*/
|
24 |
+
namespace Facebook\Exceptions;
|
25 |
+
|
26 |
+
/**
|
27 |
+
* Class FacebookServerException
|
28 |
+
*
|
29 |
+
* @package Facebook
|
30 |
+
*/
|
31 |
+
class FacebookServerException extends FacebookSDKException
|
32 |
+
{
|
33 |
+
}
|
Facebook/Exceptions/FacebookThrottleException.php
ADDED
@@ -0,0 +1,33 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Copyright 2017 Facebook, Inc.
|
4 |
+
*
|
5 |
+
* You are hereby granted a non-exclusive, worldwide, royalty-free license to
|
6 |
+
* use, copy, modify, and distribute this software in source code or binary
|
7 |
+
* form for use in connection with the web services and APIs provided by
|
8 |
+
* Facebook.
|
9 |
+
*
|
10 |
+
* As with any software that integrates with the Facebook platform, your use
|
11 |
+
* of this software is subject to the Facebook Developer Principles and
|
12 |
+
* Policies [http://developers.facebook.com/policy/]. This copyright notice
|
13 |
+
* shall be included in all copies or substantial portions of the software.
|
14 |
+
*
|
15 |
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16 |
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17 |
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
18 |
+
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19 |
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
20 |
+
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
21 |
+
* DEALINGS IN THE SOFTWARE.
|
22 |
+
*
|
23 |
+
*/
|
24 |
+
namespace Facebook\Exceptions;
|
25 |
+
|
26 |
+
/**
|
27 |
+
* Class FacebookThrottleException
|
28 |
+
*
|
29 |
+
* @package Facebook
|
30 |
+
*/
|
31 |
+
class FacebookThrottleException extends FacebookSDKException
|
32 |
+
{
|
33 |
+
}
|
Facebook/Facebook.php
ADDED
@@ -0,0 +1,614 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Copyright 2017 Facebook, Inc.
|
4 |
+
*
|
5 |
+
* You are hereby granted a non-exclusive, worldwide, royalty-free license to
|
6 |
+
* use, copy, modify, and distribute this software in source code or binary
|
7 |
+
* form for use in connection with the web services and APIs provided by
|
8 |
+
* Facebook.
|
9 |
+
*
|
10 |
+
* As with any software that integrates with the Facebook platform, your use
|
11 |
+
* of this software is subject to the Facebook Developer Principles and
|
12 |
+
* Policies [http://developers.facebook.com/policy/]. This copyright notice
|
13 |
+
* shall be included in all copies or substantial portions of the software.
|
14 |
+
*
|
15 |
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16 |
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17 |
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
18 |
+
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19 |
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
20 |
+
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
21 |
+
* DEALINGS IN THE SOFTWARE.
|
22 |
+
*
|
23 |
+
*/
|
24 |
+
namespace Facebook;
|
25 |
+
|
26 |
+
use Facebook\Authentication\AccessToken;
|
27 |
+
use Facebook\Authentication\OAuth2Client;
|
28 |
+
use Facebook\FileUpload\FacebookFile;
|
29 |
+
use Facebook\FileUpload\FacebookResumableUploader;
|
30 |
+
use Facebook\FileUpload\FacebookTransferChunk;
|
31 |
+
use Facebook\FileUpload\FacebookVideo;
|
32 |
+
use Facebook\GraphNodes\GraphEdge;
|
33 |
+
use Facebook\Url\UrlDetectionInterface;
|
34 |
+
use Facebook\Url\FacebookUrlDetectionHandler;
|
35 |
+
use Facebook\PseudoRandomString\PseudoRandomStringGeneratorFactory;
|
36 |
+
use Facebook\PseudoRandomString\PseudoRandomStringGeneratorInterface;
|
37 |
+
use Facebook\HttpClients\HttpClientsFactory;
|
38 |
+
use Facebook\PersistentData\PersistentDataFactory;
|
39 |
+
use Facebook\PersistentData\PersistentDataInterface;
|
40 |
+
use Facebook\Helpers\FacebookCanvasHelper;
|
41 |
+
use Facebook\Helpers\FacebookJavaScriptHelper;
|
42 |
+
use Facebook\Helpers\FacebookPageTabHelper;
|
43 |
+
use Facebook\Helpers\FacebookRedirectLoginHelper;
|
44 |
+
use Facebook\Exceptions\FacebookSDKException;
|
45 |
+
|
46 |
+
/**
|
47 |
+
* Class Facebook
|
48 |
+
*
|
49 |
+
* @package Facebook
|
50 |
+
*/
|
51 |
+
class Facebook
|
52 |
+
{
|
53 |
+
/**
|
54 |
+
* @const string Version number of the Facebook PHP SDK.
|
55 |
+
*/
|
56 |
+
const VERSION = '5.4.4';
|
57 |
+
|
58 |
+
/**
|
59 |
+
* @const string Default Graph API version for requests.
|
60 |
+
*/
|
61 |
+
const DEFAULT_GRAPH_VERSION = 'v2.8';
|
62 |
+
|
63 |
+
/**
|
64 |
+
* @const string The name of the environment variable that contains the app ID.
|
65 |
+
*/
|
66 |
+
const APP_ID_ENV_NAME = 'FACEBOOK_APP_ID';
|
67 |
+
|
68 |
+
/**
|
69 |
+
* @const string The name of the environment variable that contains the app secret.
|
70 |
+
*/
|
71 |
+
const APP_SECRET_ENV_NAME = 'FACEBOOK_APP_SECRET';
|
72 |
+
|
73 |
+
/**
|
74 |
+
* @var FacebookApp The FacebookApp entity.
|
75 |
+
*/
|
76 |
+
protected $app;
|
77 |
+
|
78 |
+
/**
|
79 |
+
* @var FacebookClient The Facebook client service.
|
80 |
+
*/
|
81 |
+
protected $client;
|
82 |
+
|
83 |
+
/**
|
84 |
+
* @var OAuth2Client The OAuth 2.0 client service.
|
85 |
+
*/
|
86 |
+
protected $oAuth2Client;
|
87 |
+
|
88 |
+
/**
|
89 |
+
* @var UrlDetectionInterface|null The URL detection handler.
|
90 |
+
*/
|
91 |
+
protected $urlDetectionHandler;
|
92 |
+
|
93 |
+
/**
|
94 |
+
* @var PseudoRandomStringGeneratorInterface|null The cryptographically secure pseudo-random string generator.
|
95 |
+
*/
|
96 |
+
protected $pseudoRandomStringGenerator;
|
97 |
+
|
98 |
+
/**
|
99 |
+
* @var AccessToken|null The default access token to use with requests.
|
100 |
+
*/
|
101 |
+
protected $defaultAccessToken;
|
102 |
+
|
103 |
+
/**
|
104 |
+
* @var string|null The default Graph version we want to use.
|
105 |
+
*/
|
106 |
+
protected $defaultGraphVersion;
|
107 |
+
|
108 |
+
/**
|
109 |
+
* @var PersistentDataInterface|null The persistent data handler.
|
110 |
+
*/
|
111 |
+
protected $persistentDataHandler;
|
112 |
+
|
113 |
+
/**
|
114 |
+
* @var FacebookResponse|FacebookBatchResponse|null Stores the last request made to Graph.
|
115 |
+
*/
|
116 |
+
protected $lastResponse;
|
117 |
+
|
118 |
+
/**
|
119 |
+
* Instantiates a new Facebook super-class object.
|
120 |
+
*
|
121 |
+
* @param array $config
|
122 |
+
*
|
123 |
+
* @throws FacebookSDKException
|
124 |
+
*/
|
125 |
+
public function __construct(array $config = [])
|
126 |
+
{
|
127 |
+
$config = array_merge([
|
128 |
+
'app_id' => getenv(static::APP_ID_ENV_NAME),
|
129 |
+
'app_secret' => getenv(static::APP_SECRET_ENV_NAME),
|
130 |
+
'default_graph_version' => static::DEFAULT_GRAPH_VERSION,
|
131 |
+
'enable_beta_mode' => false,
|
132 |
+
'http_client_handler' => null,
|
133 |
+
'persistent_data_handler' => null,
|
134 |
+
'pseudo_random_string_generator' => null,
|
135 |
+
'url_detection_handler' => null,
|
136 |
+
], $config);
|
137 |
+
|
138 |
+
if (!$config['app_id']) {
|
139 |
+
throw new FacebookSDKException('Required "app_id" key not supplied in config and could not find fallback environment variable "' . static::APP_ID_ENV_NAME . '"');
|
140 |
+
}
|
141 |
+
if (!$config['app_secret']) {
|
142 |
+
throw new FacebookSDKException('Required "app_secret" key not supplied in config and could not find fallback environment variable "' . static::APP_SECRET_ENV_NAME . '"');
|
143 |
+
}
|
144 |
+
|
145 |
+
$this->app = new FacebookApp($config['app_id'], $config['app_secret']);
|
146 |
+
$this->client = new FacebookClient(
|
147 |
+
HttpClientsFactory::createHttpClient($config['http_client_handler']),
|
148 |
+
$config['enable_beta_mode']
|
149 |
+
);
|
150 |
+
$this->pseudoRandomStringGenerator = PseudoRandomStringGeneratorFactory::createPseudoRandomStringGenerator(
|
151 |
+
$config['pseudo_random_string_generator']
|
152 |
+
);
|
153 |
+
$this->setUrlDetectionHandler($config['url_detection_handler'] ?: new FacebookUrlDetectionHandler());
|
154 |
+
$this->persistentDataHandler = PersistentDataFactory::createPersistentDataHandler(
|
155 |
+
$config['persistent_data_handler']
|
156 |
+
);
|
157 |
+
|
158 |
+
if (isset($config['default_access_token'])) {
|
159 |
+
$this->setDefaultAccessToken($config['default_access_token']);
|
160 |
+
}
|
161 |
+
|
162 |
+
// @todo v6: Throw an InvalidArgumentException if "default_graph_version" is not set
|
163 |
+
$this->defaultGraphVersion = $config['default_graph_version'];
|
164 |
+
}
|
165 |
+
|
166 |
+
/**
|
167 |
+
* Returns the FacebookApp entity.
|
168 |
+
*
|
169 |
+
* @return FacebookApp
|
170 |
+
*/
|
171 |
+
public function getApp()
|
172 |
+
{
|
173 |
+
return $this->app;
|
174 |
+
}
|
175 |
+
|
176 |
+
/**
|
177 |
+
* Returns the FacebookClient service.
|
178 |
+
*
|
179 |
+
* @return FacebookClient
|
180 |
+
*/
|
181 |
+
public function getClient()
|
182 |
+
{
|
183 |
+
return $this->client;
|
184 |
+
}
|
185 |
+
|
186 |
+
/**
|
187 |
+
* Returns the OAuth 2.0 client service.
|
188 |
+
*
|
189 |
+
* @return OAuth2Client
|
190 |
+
*/
|
191 |
+
public function getOAuth2Client()
|
192 |
+
{
|
193 |
+
if (!$this->oAuth2Client instanceof OAuth2Client) {
|
194 |
+
$app = $this->getApp();
|
195 |
+
$client = $this->getClient();
|
196 |
+
$this->oAuth2Client = new OAuth2Client($app, $client, $this->defaultGraphVersion);
|
197 |
+
}
|
198 |
+
|
199 |
+
return $this->oAuth2Client;
|
200 |
+
}
|
201 |
+
|
202 |
+
/**
|
203 |
+
* Returns the last response returned from Graph.
|
204 |
+
*
|
205 |
+
* @return FacebookResponse|FacebookBatchResponse|null
|
206 |
+
*/
|
207 |
+
public function getLastResponse()
|
208 |
+
{
|
209 |
+
return $this->lastResponse;
|
210 |
+
}
|
211 |
+
|
212 |
+
/**
|
213 |
+
* Returns the URL detection handler.
|
214 |
+
*
|
215 |
+
* @return UrlDetectionInterface
|
216 |
+
*/
|
217 |
+
public function getUrlDetectionHandler()
|
218 |
+
{
|
219 |
+
return $this->urlDetectionHandler;
|
220 |
+
}
|
221 |
+
|
222 |
+
/**
|
223 |
+
* Changes the URL detection handler.
|
224 |
+
*
|
225 |
+
* @param UrlDetectionInterface $urlDetectionHandler
|
226 |
+
*/
|
227 |
+
private function setUrlDetectionHandler(UrlDetectionInterface $urlDetectionHandler)
|
228 |
+
{
|
229 |
+
$this->urlDetectionHandler = $urlDetectionHandler;
|
230 |
+
}
|
231 |
+
|
232 |
+
/**
|
233 |
+
* Returns the default AccessToken entity.
|
234 |
+
*
|
235 |
+
* @return AccessToken|null
|
236 |
+
*/
|
237 |
+
public function getDefaultAccessToken()
|
238 |
+
{
|
239 |
+
return $this->defaultAccessToken;
|
240 |
+
}
|
241 |
+
|
242 |
+
/**
|
243 |
+
* Sets the default access token to use with requests.
|
244 |
+
*
|
245 |
+
* @param AccessToken|string $accessToken The access token to save.
|
246 |
+
*
|
247 |
+
* @throws \InvalidArgumentException
|
248 |
+
*/
|
249 |
+
public function setDefaultAccessToken($accessToken)
|
250 |
+
{
|
251 |
+
if (is_string($accessToken)) {
|
252 |
+
$this->defaultAccessToken = new AccessToken($accessToken);
|
253 |
+
|
254 |
+
return;
|
255 |
+
}
|
256 |
+
|
257 |
+
if ($accessToken instanceof AccessToken) {
|
258 |
+
$this->defaultAccessToken = $accessToken;
|
259 |
+
|
260 |
+
return;
|
261 |
+
}
|
262 |
+
|
263 |
+
throw new \InvalidArgumentException('The default access token must be of type "string" or Facebook\AccessToken');
|
264 |
+
}
|
265 |
+
|
266 |
+
/**
|
267 |
+
* Returns the default Graph version.
|
268 |
+
*
|
269 |
+
* @return string
|
270 |
+
*/
|
271 |
+
public function getDefaultGraphVersion()
|
272 |
+
{
|
273 |
+
return $this->defaultGraphVersion;
|
274 |
+
}
|
275 |
+
|
276 |
+
/**
|
277 |
+
* Returns the redirect login helper.
|
278 |
+
*
|
279 |
+
* @return FacebookRedirectLoginHelper
|
280 |
+
*/
|
281 |
+
public function getRedirectLoginHelper()
|
282 |
+
{
|
283 |
+
return new FacebookRedirectLoginHelper(
|
284 |
+
$this->getOAuth2Client(),
|
285 |
+
$this->persistentDataHandler,
|
286 |
+
$this->urlDetectionHandler,
|
287 |
+
$this->pseudoRandomStringGenerator
|
288 |
+
);
|
289 |
+
}
|
290 |
+
|
291 |
+
/**
|
292 |
+
* Returns the JavaScript helper.
|
293 |
+
*
|
294 |
+
* @return FacebookJavaScriptHelper
|
295 |
+
*/
|
296 |
+
public function getJavaScriptHelper()
|
297 |
+
{
|
298 |
+
return new FacebookJavaScriptHelper($this->app, $this->client, $this->defaultGraphVersion);
|
299 |
+
}
|
300 |
+
|
301 |
+
/**
|
302 |
+
* Returns the canvas helper.
|
303 |
+
*
|
304 |
+
* @return FacebookCanvasHelper
|
305 |
+
*/
|
306 |
+
public function getCanvasHelper()
|
307 |
+
{
|
308 |
+
return new FacebookCanvasHelper($this->app, $this->client, $this->defaultGraphVersion);
|
309 |
+
}
|
310 |
+
|
311 |
+
/**
|
312 |
+
* Returns the page tab helper.
|
313 |
+
*
|
314 |
+
* @return FacebookPageTabHelper
|
315 |
+
*/
|
316 |
+
public function getPageTabHelper()
|
317 |
+
{
|
318 |
+
return new FacebookPageTabHelper($this->app, $this->client, $this->defaultGraphVersion);
|
319 |
+
}
|
320 |
+
|
321 |
+
/**
|
322 |
+
* Sends a GET request to Graph and returns the result.
|
323 |
+
*
|
324 |
+
* @param string $endpoint
|
325 |
+
* @param AccessToken|string|null $accessToken
|
326 |
+
* @param string|null $eTag
|
327 |
+
* @param string|null $graphVersion
|
328 |
+
*
|
329 |
+
* @return FacebookResponse
|
330 |
+
*
|
331 |
+
* @throws FacebookSDKException
|
332 |
+
*/
|
333 |
+
public function get($endpoint, $accessToken = null, $eTag = null, $graphVersion = null)
|
334 |
+
{
|
335 |
+
return $this->sendRequest(
|
336 |
+
'GET',
|
337 |
+
$endpoint,
|
338 |
+
$params = [],
|
339 |
+
$accessToken,
|
340 |
+
$eTag,
|
341 |
+
$graphVersion
|
342 |
+
);
|
343 |
+
}
|
344 |
+
|
345 |
+
/**
|
346 |
+
* Sends a POST request to Graph and returns the result.
|
347 |
+
*
|
348 |
+
* @param string $endpoint
|
349 |
+
* @param array $params
|
350 |
+
* @param AccessToken|string|null $accessToken
|
351 |
+
* @param string|null $eTag
|
352 |
+
* @param string|null $graphVersion
|
353 |
+
*
|
354 |
+
* @return FacebookResponse
|
355 |
+
*
|
356 |
+
* @throws FacebookSDKException
|
357 |
+
*/
|
358 |
+
public function post($endpoint, array $params = [], $accessToken = null, $eTag = null, $graphVersion = null)
|
359 |
+
{
|
360 |
+
return $this->sendRequest(
|
361 |
+
'POST',
|
362 |
+
$endpoint,
|
363 |
+
$params,
|
364 |
+
$accessToken,
|
365 |
+
$eTag,
|
366 |
+
$graphVersion
|
367 |
+
);
|
368 |
+
}
|
369 |
+
|
370 |
+
/**
|
371 |
+
* Sends a DELETE request to Graph and returns the result.
|
372 |
+
*
|
373 |
+
* @param string $endpoint
|
374 |
+
* @param array $params
|
375 |
+
* @param AccessToken|string|null $accessToken
|
376 |
+
* @param string|null $eTag
|
377 |
+
* @param string|null $graphVersion
|
378 |
+
*
|
379 |
+
* @return FacebookResponse
|
380 |
+
*
|
381 |
+
* @throws FacebookSDKException
|
382 |
+
*/
|
383 |
+
public function delete($endpoint, array $params = [], $accessToken = null, $eTag = null, $graphVersion = null)
|
384 |
+
{
|
385 |
+
return $this->sendRequest(
|
386 |
+
'DELETE',
|
387 |
+
$endpoint,
|
388 |
+
$params,
|
389 |
+
$accessToken,
|
390 |
+
$eTag,
|
391 |
+
$graphVersion
|
392 |
+
);
|
393 |
+
}
|
394 |
+
|
395 |
+
/**
|
396 |
+
* Sends a request to Graph for the next page of results.
|
397 |
+
*
|
398 |
+
* @param GraphEdge $graphEdge The GraphEdge to paginate over.
|
399 |
+
*
|
400 |
+
* @return GraphEdge|null
|
401 |
+
*
|
402 |
+
* @throws FacebookSDKException
|
403 |
+
*/
|
404 |
+
public function next(GraphEdge $graphEdge)
|
405 |
+
{
|
406 |
+
return $this->getPaginationResults($graphEdge, 'next');
|
407 |
+
}
|
408 |
+
|
409 |
+
/**
|
410 |
+
* Sends a request to Graph for the previous page of results.
|
411 |
+
*
|
412 |
+
* @param GraphEdge $graphEdge The GraphEdge to paginate over.
|
413 |
+
*
|
414 |
+
* @return GraphEdge|null
|
415 |
+
*
|
416 |
+
* @throws FacebookSDKException
|
417 |
+
*/
|
418 |
+
public function previous(GraphEdge $graphEdge)
|
419 |
+
{
|
420 |
+
return $this->getPaginationResults($graphEdge, 'previous');
|
421 |
+
}
|
422 |
+
|
423 |
+
/**
|
424 |
+
* Sends a request to Graph for the next page of results.
|
425 |
+
*
|
426 |
+
* @param GraphEdge $graphEdge The GraphEdge to paginate over.
|
427 |
+
* @param string $direction The direction of the pagination: next|previous.
|
428 |
+
*
|
429 |
+
* @return GraphEdge|null
|
430 |
+
*
|
431 |
+
* @throws FacebookSDKException
|
432 |
+
*/
|
433 |
+
public function getPaginationResults(GraphEdge $graphEdge, $direction)
|
434 |
+
{
|
435 |
+
$paginationRequest = $graphEdge->getPaginationRequest($direction);
|
436 |
+
if (!$paginationRequest) {
|
437 |
+
return null;
|
438 |
+
}
|
439 |
+
|
440 |
+
$this->lastResponse = $this->client->sendRequest($paginationRequest);
|
441 |
+
|
442 |
+
// Keep the same GraphNode subclass
|
443 |
+
$subClassName = $graphEdge->getSubClassName();
|
444 |
+
$graphEdge = $this->lastResponse->getGraphEdge($subClassName, false);
|
445 |
+
|
446 |
+
return count($graphEdge) > 0 ? $graphEdge : null;
|
447 |
+
}
|
448 |
+
|
449 |
+
/**
|
450 |
+
* Sends a request to Graph and returns the result.
|
451 |
+
*
|
452 |
+
* @param string $method
|
453 |
+
* @param string $endpoint
|
454 |
+
* @param array $params
|
455 |
+
* @param AccessToken|string|null $accessToken
|
456 |
+
* @param string|null $eTag
|
457 |
+
* @param string|null $graphVersion
|
458 |
+
*
|
459 |
+
* @return FacebookResponse
|
460 |
+
*
|
461 |
+
* @throws FacebookSDKException
|
462 |
+
*/
|
463 |
+
public function sendRequest($method, $endpoint, array $params = [], $accessToken = null, $eTag = null, $graphVersion = null)
|
464 |
+
{
|
465 |
+
$accessToken = $accessToken ?: $this->defaultAccessToken;
|
466 |
+
$graphVersion = $graphVersion ?: $this->defaultGraphVersion;
|
467 |
+
$request = $this->request($method, $endpoint, $params, $accessToken, $eTag, $graphVersion);
|
468 |
+
|
469 |
+
return $this->lastResponse = $this->client->sendRequest($request);
|
470 |
+
}
|
471 |
+
|
472 |
+
/**
|
473 |
+
* Sends a batched request to Graph and returns the result.
|
474 |
+
*
|
475 |
+
* @param array $requests
|
476 |
+
* @param AccessToken|string|null $accessToken
|
477 |
+
* @param string|null $graphVersion
|
478 |
+
*
|
479 |
+
* @return FacebookBatchResponse
|
480 |
+
*
|
481 |
+
* @throws FacebookSDKException
|
482 |
+
*/
|
483 |
+
public function sendBatchRequest(array $requests, $accessToken = null, $graphVersion = null)
|
484 |
+
{
|
485 |
+
$accessToken = $accessToken ?: $this->defaultAccessToken;
|
486 |
+
$graphVersion = $graphVersion ?: $this->defaultGraphVersion;
|
487 |
+
$batchRequest = new FacebookBatchRequest(
|
488 |
+
$this->app,
|
489 |
+
$requests,
|
490 |
+
$accessToken,
|
491 |
+
$graphVersion
|
492 |
+
);
|
493 |
+
|
494 |
+
return $this->lastResponse = $this->client->sendBatchRequest($batchRequest);
|
495 |
+
}
|
496 |
+
|
497 |
+
/**
|
498 |
+
* Instantiates a new FacebookRequest entity.
|
499 |
+
*
|
500 |
+
* @param string $method
|
501 |
+
* @param string $endpoint
|
502 |
+
* @param array $params
|
503 |
+
* @param AccessToken|string|null $accessToken
|
504 |
+
* @param string|null $eTag
|
505 |
+
* @param string|null $graphVersion
|
506 |
+
*
|
507 |
+
* @return FacebookRequest
|
508 |
+
*
|
509 |
+
* @throws FacebookSDKException
|
510 |
+
*/
|
511 |
+
public function request($method, $endpoint, array $params = [], $accessToken = null, $eTag = null, $graphVersion = null)
|
512 |
+
{
|
513 |
+
$accessToken = $accessToken ?: $this->defaultAccessToken;
|
514 |
+
$graphVersion = $graphVersion ?: $this->defaultGraphVersion;
|
515 |
+
|
516 |
+
return new FacebookRequest(
|
517 |
+
$this->app,
|
518 |
+
$accessToken,
|
519 |
+
$method,
|
520 |
+
$endpoint,
|
521 |
+
$params,
|
522 |
+
$eTag,
|
523 |
+
$graphVersion
|
524 |
+
);
|
525 |
+
}
|
526 |
+
|
527 |
+
/**
|
528 |
+
* Factory to create FacebookFile's.
|
529 |
+
*
|
530 |
+
* @param string $pathToFile
|
531 |
+
*
|
532 |
+
* @return FacebookFile
|
533 |
+
*
|
534 |
+
* @throws FacebookSDKException
|
535 |
+
*/
|
536 |
+
public function fileToUpload($pathToFile)
|
537 |
+
{
|
538 |
+
return new FacebookFile($pathToFile);
|
539 |
+
}
|
540 |
+
|
541 |
+
/**
|
542 |
+
* Factory to create FacebookVideo's.
|
543 |
+
*
|
544 |
+
* @param string $pathToFile
|
545 |
+
*
|
546 |
+
* @return FacebookVideo
|
547 |
+
*
|
548 |
+
* @throws FacebookSDKException
|
549 |
+
*/
|
550 |
+
public function videoToUpload($pathToFile)
|
551 |
+
{
|
552 |
+
return new FacebookVideo($pathToFile);
|
553 |
+
}
|
554 |
+
|
555 |
+
/**
|
556 |
+
* Upload a video in chunks.
|
557 |
+
*
|
558 |
+
* @param int $target The id of the target node before the /videos edge.
|
559 |
+
* @param string $pathToFile The full path to the file.
|
560 |
+
* @param array $metadata The metadata associated with the video file.
|
561 |
+
* @param string|null $accessToken The access token.
|
562 |
+
* @param int $maxTransferTries The max times to retry a failed upload chunk.
|
563 |
+
* @param string|null $graphVersion The Graph API version to use.
|
564 |
+
*
|
565 |
+
* @return array
|
566 |
+
*
|
567 |
+
* @throws FacebookSDKException
|
568 |
+
*/
|
569 |
+
public function uploadVideo($target, $pathToFile, $metadata = [], $accessToken = null, $maxTransferTries = 5, $graphVersion = null)
|
570 |
+
{
|
571 |
+
$accessToken = $accessToken ?: $this->defaultAccessToken;
|
572 |
+
$graphVersion = $graphVersion ?: $this->defaultGraphVersion;
|
573 |
+
|
574 |
+
$uploader = new FacebookResumableUploader($this->app, $this->client, $accessToken, $graphVersion);
|
575 |
+
$endpoint = '/'.$target.'/videos';
|
576 |
+
$file = $this->videoToUpload($pathToFile);
|
577 |
+
$chunk = $uploader->start($endpoint, $file);
|
578 |
+
|
579 |
+
do {
|
580 |
+
$chunk = $this->maxTriesTransfer($uploader, $endpoint, $chunk, $maxTransferTries);
|
581 |
+
} while (!$chunk->isLastChunk());
|
582 |
+
|
583 |
+
return [
|
584 |
+
'video_id' => $chunk->getVideoId(),
|
585 |
+
'success' => $uploader->finish($endpoint, $chunk->getUploadSessionId(), $metadata),
|
586 |
+
];
|
587 |
+
}
|
588 |
+
|
589 |
+
/**
|
590 |
+
* Attempts to upload a chunk of a file in $retryCountdown tries.
|
591 |
+
*
|
592 |
+
* @param FacebookResumableUploader $uploader
|
593 |
+
* @param string $endpoint
|
594 |
+
* @param FacebookTransferChunk $chunk
|
595 |
+
* @param int $retryCountdown
|
596 |
+
*
|
597 |
+
* @return FacebookTransferChunk
|
598 |
+
*
|
599 |
+
* @throws FacebookSDKException
|
600 |
+
*/
|
601 |
+
private function maxTriesTransfer(FacebookResumableUploader $uploader, $endpoint, FacebookTransferChunk $chunk, $retryCountdown)
|
602 |
+
{
|
603 |
+
$newChunk = $uploader->transfer($endpoint, $chunk, $retryCountdown < 1);
|
604 |
+
|
605 |
+
if ($newChunk !== $chunk) {
|
606 |
+
return $newChunk;
|
607 |
+
}
|
608 |
+
|
609 |
+
$retryCountdown--;
|
610 |
+
|
611 |
+
// If transfer() returned the same chunk entity, the transfer failed but is resumable.
|
612 |
+
return $this->maxTriesTransfer($uploader, $endpoint, $chunk, $retryCountdown);
|
613 |
+
}
|
614 |
+
}
|
Facebook/FacebookApp.php
ADDED
@@ -0,0 +1,110 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Copyright 2017 Facebook, Inc.
|
4 |
+
*
|
5 |
+
* You are hereby granted a non-exclusive, worldwide, royalty-free license to
|
6 |
+
* use, copy, modify, and distribute this software in source code or binary
|
7 |
+
* form for use in connection with the web services and APIs provided by
|
8 |
+
* Facebook.
|
9 |
+
*
|
10 |
+
* As with any software that integrates with the Facebook platform, your use
|
11 |
+
* of this software is subject to the Facebook Developer Principles and
|
12 |
+
* Policies [http://developers.facebook.com/policy/]. This copyright notice
|
13 |
+
* shall be included in all copies or substantial portions of the software.
|
14 |
+
*
|
15 |
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16 |
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17 |
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
18 |
+
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19 |
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
20 |
+
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
21 |
+
* DEALINGS IN THE SOFTWARE.
|
22 |
+
*
|
23 |
+
*/
|
24 |
+
namespace Facebook;
|
25 |
+
|
26 |
+
use Facebook\Authentication\AccessToken;
|
27 |
+
use Facebook\Exceptions\FacebookSDKException;
|
28 |
+
|
29 |
+
class FacebookApp implements \Serializable
|
30 |
+
{
|
31 |
+
/**
|
32 |
+
* @var string The app ID.
|
33 |
+
*/
|
34 |
+
protected $id;
|
35 |
+
|
36 |
+
/**
|
37 |
+
* @var string The app secret.
|
38 |
+
*/
|
39 |
+
protected $secret;
|
40 |
+
|
41 |
+
/**
|
42 |
+
* @param string $id
|
43 |
+
* @param string $secret
|
44 |
+
*
|
45 |
+
* @throws FacebookSDKException
|
46 |
+
*/
|
47 |
+
public function __construct($id, $secret)
|
48 |
+
{
|
49 |
+
if (!is_string($id)
|
50 |
+
// Keeping this for BC. Integers greater than PHP_INT_MAX will make is_int() return false
|
51 |
+
&& !is_int($id)) {
|
52 |
+
throw new FacebookSDKException('The "app_id" must be formatted as a string since many app ID\'s are greater than PHP_INT_MAX on some systems.');
|
53 |
+
}
|
54 |
+
// We cast as a string in case a valid int was set on a 64-bit system and this is unserialised on a 32-bit system
|
55 |
+
$this->id = (string) $id;
|
56 |
+
$this->secret = $secret;
|
57 |
+
}
|
58 |
+
|
59 |
+
/**
|
60 |
+
* Returns the app ID.
|
61 |
+
*
|
62 |
+
* @return string
|
63 |
+
*/
|
64 |
+
public function getId()
|
65 |
+
{
|
66 |
+
return $this->id;
|
67 |
+
}
|
68 |
+
|
69 |
+
/**
|
70 |
+
* Returns the app secret.
|
71 |
+
*
|
72 |
+
* @return string
|
73 |
+
*/
|
74 |
+
public function getSecret()
|
75 |
+
{
|
76 |
+
return $this->secret;
|
77 |
+
}
|
78 |
+
|
79 |
+
/**
|
80 |
+
* Returns an app access token.
|
81 |
+
*
|
82 |
+
* @return AccessToken
|
83 |
+
*/
|
84 |
+
public function getAccessToken()
|
85 |
+
{
|
86 |
+
return new AccessToken($this->id . '|' . $this->secret);
|
87 |
+
}
|
88 |
+
|
89 |
+
/**
|
90 |
+
* Serializes the FacebookApp entity as a string.
|
91 |
+
*
|
92 |
+
* @return string
|
93 |
+
*/
|
94 |
+
public function serialize()
|
95 |
+
{
|
96 |
+
return implode('|', [$this->id, $this->secret]);
|
97 |
+
}
|
98 |
+
|
99 |
+
/**
|
100 |
+
* Unserializes a string as a FacebookApp entity.
|
101 |
+
*
|
102 |
+
* @param string $serialized
|
103 |
+
*/
|
104 |
+
public function unserialize($serialized)
|
105 |
+
{
|
106 |
+
list($id, $secret) = explode('|', $serialized);
|
107 |
+
|
108 |
+
$this->__construct($id, $secret);
|
109 |
+
}
|
110 |
+
}
|
Facebook/FacebookBatchRequest.php
ADDED
@@ -0,0 +1,301 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Copyright 2017 Facebook, Inc.
|
4 |
+
*
|
5 |
+
* You are hereby granted a non-exclusive, worldwide, royalty-free license to
|
6 |
+
* use, copy, modify, and distribute this software in source code or binary
|
7 |
+
* form for use in connection with the web services and APIs provided by
|
8 |
+
* Facebook.
|
9 |
+
*
|
10 |
+
* As with any software that integrates with the Facebook platform, your use
|
11 |
+
* of this software is subject to the Facebook Developer Principles and
|
12 |
+
* Policies [http://developers.facebook.com/policy/]. This copyright notice
|
13 |
+
* shall be included in all copies or substantial portions of the software.
|
14 |
+
*
|
15 |
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16 |
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17 |
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
18 |
+
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19 |
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
20 |
+
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
21 |
+
* DEALINGS IN THE SOFTWARE.
|
22 |
+
*
|
23 |
+
*/
|
24 |
+
namespace Facebook;
|
25 |
+
|
26 |
+
use ArrayIterator;
|
27 |
+
use IteratorAggregate;
|
28 |
+
use ArrayAccess;
|
29 |
+
use Facebook\Authentication\AccessToken;
|
30 |
+
use Facebook\Exceptions\FacebookSDKException;
|
31 |
+
|
32 |
+
/**
|
33 |
+
* Class BatchRequest
|
34 |
+
*
|
35 |
+
* @package Facebook
|
36 |
+
*/
|
37 |
+
class FacebookBatchRequest extends FacebookRequest implements IteratorAggregate, ArrayAccess
|
38 |
+
{
|
39 |
+
/**
|
40 |
+
* @var array An array of FacebookRequest entities to send.
|
41 |
+
*/
|
42 |
+
protected $requests;
|
43 |
+
|
44 |
+
/**
|
45 |
+
* @var array An array of files to upload.
|
46 |
+
*/
|
47 |
+
protected $attachedFiles;
|
48 |
+
|
49 |
+
/**
|
50 |
+
* Creates a new Request entity.
|
51 |
+
*
|
52 |
+
* @param FacebookApp|null $app
|
53 |
+
* @param array $requests
|
54 |
+
* @param AccessToken|string|null $accessToken
|
55 |
+
* @param string|null $graphVersion
|
56 |
+
*/
|
57 |
+
public function __construct(FacebookApp $app = null, array $requests = [], $accessToken = null, $graphVersion = null)
|
58 |
+
{
|
59 |
+
parent::__construct($app, $accessToken, 'POST', '', [], null, $graphVersion);
|
60 |
+
|
61 |
+
$this->add($requests);
|
62 |
+
}
|
63 |
+
|
64 |
+
/**
|
65 |
+
* A a new request to the array.
|
66 |
+
*
|
67 |
+
* @param FacebookRequest|array $request
|
68 |
+
* @param string|null $name
|
69 |
+
*
|
70 |
+
* @return FacebookBatchRequest
|
71 |
+
*
|
72 |
+
* @throws \InvalidArgumentException
|
73 |
+
*/
|
74 |
+
public function add($request, $name = null)
|
75 |
+
{
|
76 |
+
if (is_array($request)) {
|
77 |
+
foreach ($request as $key => $req) {
|
78 |
+
$this->add($req, $key);
|
79 |
+
}
|
80 |
+
|
81 |
+
return $this;
|
82 |
+
}
|
83 |
+
|
84 |
+
if (!$request instanceof FacebookRequest) {
|
85 |
+
throw new \InvalidArgumentException('Argument for add() must be of type array or FacebookRequest.');
|
86 |
+
}
|
87 |
+
|
88 |
+
$this->addFallbackDefaults($request);
|
89 |
+
$requestToAdd = [
|
90 |
+
'name' => $name,
|
91 |
+
'request' => $request,
|
92 |
+
];
|
93 |
+
|
94 |
+
// File uploads
|
95 |
+
$attachedFiles = $this->extractFileAttachments($request);
|
96 |
+
if ($attachedFiles) {
|
97 |
+
$requestToAdd['attached_files'] = $attachedFiles;
|
98 |
+
}
|
99 |
+
$this->requests[] = $requestToAdd;
|
100 |
+
|
101 |
+
return $this;
|
102 |
+
}
|
103 |
+
|
104 |
+
/**
|
105 |
+
* Ensures that the FacebookApp and access token fall back when missing.
|
106 |
+
*
|
107 |
+
* @param FacebookRequest $request
|
108 |
+
*
|
109 |
+
* @throws FacebookSDKException
|
110 |
+
*/
|
111 |
+
public function addFallbackDefaults(FacebookRequest $request)
|
112 |
+
{
|
113 |
+
if (!$request->getApp()) {
|
114 |
+
$app = $this->getApp();
|
115 |
+
if (!$app) {
|
116 |
+
throw new FacebookSDKException('Missing FacebookApp on FacebookRequest and no fallback detected on FacebookBatchRequest.');
|
117 |
+
}
|
118 |
+
$request->setApp($app);
|
119 |
+
}
|
120 |
+
|
121 |
+
if (!$request->getAccessToken()) {
|
122 |
+
$accessToken = $this->getAccessToken();
|
123 |
+
if (!$accessToken) {
|
124 |
+
throw new FacebookSDKException('Missing access token on FacebookRequest and no fallback detected on FacebookBatchRequest.');
|
125 |
+
}
|
126 |
+
$request->setAccessToken($accessToken);
|
127 |
+
}
|
128 |
+
}
|
129 |
+
|
130 |
+
/**
|
131 |
+
* Extracts the files from a request.
|
132 |
+
*
|
133 |
+
* @param FacebookRequest $request
|
134 |
+
*
|
135 |
+
* @return string|null
|
136 |
+
*
|
137 |
+
* @throws FacebookSDKException
|
138 |
+
*/
|
139 |
+
public function extractFileAttachments(FacebookRequest $request)
|
140 |
+
{
|
141 |
+
if (!$request->containsFileUploads()) {
|
142 |
+
return null;
|
143 |
+
}
|
144 |
+
|
145 |
+
$files = $request->getFiles();
|
146 |
+
$fileNames = [];
|
147 |
+
foreach ($files as $file) {
|
148 |
+
$fileName = uniqid();
|
149 |
+
$this->addFile($fileName, $file);
|
150 |
+
$fileNames[] = $fileName;
|
151 |
+
}
|
152 |
+
|
153 |
+
$request->resetFiles();
|
154 |
+
|
155 |
+
// @TODO Does Graph support multiple uploads on one endpoint?
|
156 |
+
return implode(',', $fileNames);
|
157 |
+
}
|
158 |
+
|
159 |
+
/**
|
160 |
+
* Return the FacebookRequest entities.
|
161 |
+
*
|
162 |
+
* @return array
|
163 |
+
*/
|
164 |
+
public function getRequests()
|
165 |
+
{
|
166 |
+
return $this->requests;
|
167 |
+
}
|
168 |
+
|
169 |
+
/**
|
170 |
+
* Prepares the requests to be sent as a batch request.
|
171 |
+
*/
|
172 |
+
public function prepareRequestsForBatch()
|
173 |
+
{
|
174 |
+
$this->validateBatchRequestCount();
|
175 |
+
|
176 |
+
$params = [
|
177 |
+
'batch' => $this->convertRequestsToJson(),
|
178 |
+
'include_headers' => true,
|
179 |
+
];
|
180 |
+
$this->setParams($params);
|
181 |
+
}
|
182 |
+
|
183 |
+
/**
|
184 |
+
* Converts the requests into a JSON(P) string.
|
185 |
+
*
|
186 |
+
* @return string
|
187 |
+
*/
|
188 |
+
public function convertRequestsToJson()
|
189 |
+
{
|
190 |
+
$requests = [];
|
191 |
+
foreach ($this->requests as $request) {
|
192 |
+
$attachedFiles = isset($request['attached_files']) ? $request['attached_files'] : null;
|
193 |
+
$requests[] = $this->requestEntityToBatchArray($request['request'], $request['name'], $attachedFiles);
|
194 |
+
}
|
195 |
+
|
196 |
+
return json_encode($requests);
|
197 |
+
}
|
198 |
+
|
199 |
+
/**
|
200 |
+
* Validate the request count before sending them as a batch.
|
201 |
+
*
|
202 |
+
* @throws FacebookSDKException
|
203 |
+
*/
|
204 |
+
public function validateBatchRequestCount()
|
205 |
+
{
|
206 |
+
$batchCount = count($this->requests);
|
207 |
+
if ($batchCount === 0) {
|
208 |
+
throw new FacebookSDKException('There are no batch requests to send.');
|
209 |
+
} elseif ($batchCount > 50) {
|
210 |
+
// Per: https://developers.facebook.com/docs/graph-api/making-multiple-requests#limits
|
211 |
+
throw new FacebookSDKException('You cannot send more than 50 batch requests at a time.');
|
212 |
+
}
|
213 |
+
}
|
214 |
+
|
215 |
+
/**
|
216 |
+
* Converts a Request entity into an array that is batch-friendly.
|
217 |
+
*
|
218 |
+
* @param FacebookRequest $request The request entity to convert.
|
219 |
+
* @param string|null $requestName The name of the request.
|
220 |
+
* @param string|null $attachedFiles Names of files associated with the request.
|
221 |
+
*
|
222 |
+
* @return array
|
223 |
+
*/
|
224 |
+
public function requestEntityToBatchArray(FacebookRequest $request, $requestName = null, $attachedFiles = null)
|
225 |
+
{
|
226 |
+
$compiledHeaders = [];
|
227 |
+
$headers = $request->getHeaders();
|
228 |
+
foreach ($headers as $name => $value) {
|
229 |
+
$compiledHeaders[] = $name . ': ' . $value;
|
230 |
+
}
|
231 |
+
|
232 |
+
$batch = [
|
233 |
+
'headers' => $compiledHeaders,
|
234 |
+
'method' => $request->getMethod(),
|
235 |
+
'relative_url' => $request->getUrl(),
|
236 |
+
];
|
237 |
+
|
238 |
+
// Since file uploads are moved to the root request of a batch request,
|
239 |
+
// the child requests will always be URL-encoded.
|
240 |
+
$body = $request->getUrlEncodedBody()->getBody();
|
241 |
+
if ($body) {
|
242 |
+
$batch['body'] = $body;
|
243 |
+
}
|
244 |
+
|
245 |
+
if (isset($requestName)) {
|
246 |
+
$batch['name'] = $requestName;
|
247 |
+
}
|
248 |
+
|
249 |
+
if (isset($attachedFiles)) {
|
250 |
+
$batch['attached_files'] = $attachedFiles;
|
251 |
+
}
|
252 |
+
|
253 |
+
// @TODO Add support for "omit_response_on_success"
|
254 |
+
// @TODO Add support for "depends_on"
|
255 |
+
// @TODO Add support for JSONP with "callback"
|
256 |
+
|
257 |
+
return $batch;
|
258 |
+
}
|
259 |
+
|
260 |
+
/**
|
261 |
+
* Get an iterator for the items.
|
262 |
+
*
|
263 |
+
* @return ArrayIterator
|
264 |
+
*/
|
265 |
+
public function getIterator()
|
266 |
+
{
|
267 |
+
return new ArrayIterator($this->requests);
|
268 |
+
}
|
269 |
+
|
270 |
+
/**
|
271 |
+
* @inheritdoc
|
272 |
+
*/
|
273 |
+
public function offsetSet($offset, $value)
|
274 |
+
{
|
275 |
+
$this->add($value, $offset);
|
276 |
+
}
|
277 |
+
|
278 |
+
/**
|
279 |
+
* @inheritdoc
|
280 |
+
*/
|
281 |
+
public function offsetExists($offset)
|
282 |
+
{
|
283 |
+
return isset($this->requests[$offset]);
|
284 |
+
}
|
285 |
+
|
286 |
+
/**
|
287 |
+
* @inheritdoc
|
288 |
+
*/
|
289 |
+
public function offsetUnset($offset)
|
290 |
+
{
|
291 |
+
unset($this->requests[$offset]);
|
292 |
+
}
|
293 |
+
|
294 |
+
/**
|
295 |
+
* @inheritdoc
|
296 |
+
*/
|
297 |
+
public function offsetGet($offset)
|
298 |
+
{
|
299 |
+
return isset($this->requests[$offset]) ? $this->requests[$offset] : null;
|
300 |
+
}
|
301 |
+
}
|
Facebook/FacebookBatchResponse.php
ADDED
@@ -0,0 +1,174 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Copyright 2017 Facebook, Inc.
|
4 |
+
*
|
5 |
+
* You are hereby granted a non-exclusive, worldwide, royalty-free license to
|
6 |
+
* use, copy, modify, and distribute this software in source code or binary
|
7 |
+
* form for use in connection with the web services and APIs provided by
|
8 |
+
* Facebook.
|
9 |
+
*
|
10 |
+
* As with any software that integrates with the Facebook platform, your use
|
11 |
+
* of this software is subject to the Facebook Developer Principles and
|
12 |
+
* Policies [http://developers.facebook.com/policy/]. This copyright notice
|
13 |
+
* shall be included in all copies or substantial portions of the software.
|
14 |
+
*
|
15 |
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16 |
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17 |
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
18 |
+
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19 |
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
20 |
+
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
21 |
+
* DEALINGS IN THE SOFTWARE.
|
22 |
+
*
|
23 |
+
*/
|
24 |
+
namespace Facebook;
|
25 |
+
|
26 |
+
use ArrayIterator;
|
27 |
+
use IteratorAggregate;
|
28 |
+
use ArrayAccess;
|
29 |
+
|
30 |
+
/**
|
31 |
+
* Class FacebookBatchResponse
|
32 |
+
*
|
33 |
+
* @package Facebook
|
34 |
+
*/
|
35 |
+
class FacebookBatchResponse extends FacebookResponse implements IteratorAggregate, ArrayAccess
|
36 |
+
{
|
37 |
+
/**
|
38 |
+
* @var FacebookBatchRequest The original entity that made the batch request.
|
39 |
+
*/
|
40 |
+
protected $batchRequest;
|
41 |
+
|
42 |
+
/**
|
43 |
+
* @var array An array of FacebookResponse entities.
|
44 |
+
*/
|
45 |
+
protected $responses = [];
|
46 |
+
|
47 |
+
/**
|
48 |
+
* Creates a new Response entity.
|
49 |
+
*
|
50 |
+
* @param FacebookBatchRequest $batchRequest
|
51 |
+
* @param FacebookResponse $response
|
52 |
+
*/
|
53 |
+
public function __construct(FacebookBatchRequest $batchRequest, FacebookResponse $response)
|
54 |
+
{
|
55 |
+
$this->batchRequest = $batchRequest;
|
56 |
+
|
57 |
+
$request = $response->getRequest();
|
58 |
+
$body = $response->getBody();
|
59 |
+
$httpStatusCode = $response->getHttpStatusCode();
|
60 |
+
$headers = $response->getHeaders();
|
61 |
+
parent::__construct($request, $body, $httpStatusCode, $headers);
|
62 |
+
|
63 |
+
$responses = $response->getDecodedBody();
|
64 |
+
$this->setResponses($responses);
|
65 |
+
}
|
66 |
+
|
67 |
+
/**
|
68 |
+
* Returns an array of FacebookResponse entities.
|
69 |
+
*
|
70 |
+
* @return array
|
71 |
+
*/
|
72 |
+
public function getResponses()
|
73 |
+
{
|
74 |
+
return $this->responses;
|
75 |
+
}
|
76 |
+
|
77 |
+
/**
|
78 |
+
* The main batch response will be an array of requests so
|
79 |
+
* we need to iterate over all the responses.
|
80 |
+
*
|
81 |
+
* @param array $responses
|
82 |
+
*/
|
83 |
+
public function setResponses(array $responses)
|
84 |
+
{
|
85 |
+
$this->responses = [];
|
86 |
+
|
87 |
+
foreach ($responses as $key => $graphResponse) {
|
88 |
+
$this->addResponse($key, $graphResponse);
|
89 |
+
}
|
90 |
+
}
|
91 |
+
|
92 |
+
/**
|
93 |
+
* Add a response to the list.
|
94 |
+
*
|
95 |
+
* @param int $key
|
96 |
+
* @param array|null $response
|
97 |
+
*/
|
98 |
+
public function addResponse($key, $response)
|
99 |
+
{
|
100 |
+
$originalRequestName = isset($this->batchRequest[$key]['name']) ? $this->batchRequest[$key]['name'] : $key;
|
101 |
+
$originalRequest = isset($this->batchRequest[$key]['request']) ? $this->batchRequest[$key]['request'] : null;
|
102 |
+
|
103 |
+
$httpResponseBody = isset($response['body']) ? $response['body'] : null;
|
104 |
+
$httpResponseCode = isset($response['code']) ? $response['code'] : null;
|
105 |
+
// @TODO With PHP 5.5 support, this becomes array_column($response['headers'], 'value', 'name')
|
106 |
+
$httpResponseHeaders = isset($response['headers']) ? $this->normalizeBatchHeaders($response['headers']) : [];
|
107 |
+
|
108 |
+
$this->responses[$originalRequestName] = new FacebookResponse(
|
109 |
+
$originalRequest,
|
110 |
+
$httpResponseBody,
|
111 |
+
$httpResponseCode,
|
112 |
+
$httpResponseHeaders
|
113 |
+
);
|
114 |
+
}
|
115 |
+
|
116 |
+
/**
|
117 |
+
* @inheritdoc
|
118 |
+
*/
|
119 |
+
public function getIterator()
|
120 |
+
{
|
121 |
+
return new ArrayIterator($this->responses);
|
122 |
+
}
|
123 |
+
|
124 |
+
/**
|
125 |
+
* @inheritdoc
|
126 |
+
*/
|
127 |
+
public function offsetSet($offset, $value)
|
128 |
+
{
|
129 |
+
$this->addResponse($offset, $value);
|
130 |
+
}
|
131 |
+
|
132 |
+
/**
|
133 |
+
* @inheritdoc
|
134 |
+
*/
|
135 |
+
public function offsetExists($offset)
|
136 |
+
{
|
137 |
+
return isset($this->responses[$offset]);
|
138 |
+
}
|
139 |
+
|
140 |
+
/**
|
141 |
+
* @inheritdoc
|
142 |
+
*/
|
143 |
+
public function offsetUnset($offset)
|
144 |
+
{
|
145 |
+
unset($this->responses[$offset]);
|
146 |
+
}
|
147 |
+
|
148 |
+
/**
|
149 |
+
* @inheritdoc
|
150 |
+
*/
|
151 |
+
public function offsetGet($offset)
|
152 |
+
{
|
153 |
+
return isset($this->responses[$offset]) ? $this->responses[$offset] : null;
|
154 |
+
}
|
155 |
+
|
156 |
+
/**
|
157 |
+
* Converts the batch header array into a standard format.
|
158 |
+
* @TODO replace with array_column() when PHP 5.5 is supported.
|
159 |
+
*
|
160 |
+
* @param array $batchHeaders
|
161 |
+
*
|
162 |
+
* @return array
|
163 |
+
*/
|
164 |
+
private function normalizeBatchHeaders(array $batchHeaders)
|
165 |
+
{
|
166 |
+
$headers = [];
|
167 |
+
|
168 |
+
foreach ($batchHeaders as $header) {
|
169 |
+
$headers[$header['name']] = $header['value'];
|
170 |
+
}
|
171 |
+
|
172 |
+
return $headers;
|
173 |
+
}
|
174 |
+
}
|
Facebook/FacebookClient.php
ADDED
@@ -0,0 +1,250 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Copyright 2017 Facebook, Inc.
|
4 |
+
*
|
5 |
+
* You are hereby granted a non-exclusive, worldwide, royalty-free license to
|
6 |
+
* use, copy, modify, and distribute this software in source code or binary
|
7 |
+
* form for use in connection with the web services and APIs provided by
|
8 |
+
* Facebook.
|
9 |
+
*
|
10 |
+
* As with any software that integrates with the Facebook platform, your use
|
11 |
+
* of this software is subject to the Facebook Developer Principles and
|
12 |
+
* Policies [http://developers.facebook.com/policy/]. This copyright notice
|
13 |
+
* shall be included in all copies or substantial portions of the software.
|
14 |
+
*
|
15 |
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16 |
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17 |
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
18 |
+
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19 |
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
20 |
+
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
21 |
+
* DEALINGS IN THE SOFTWARE.
|
22 |
+
*
|
23 |
+
*/
|
24 |
+
namespace Facebook;
|
25 |
+
|
26 |
+
use Facebook\HttpClients\FacebookHttpClientInterface;
|
27 |
+
use Facebook\HttpClients\FacebookCurlHttpClient;
|
28 |
+
use Facebook\HttpClients\FacebookStreamHttpClient;
|
29 |
+
use Facebook\Exceptions\FacebookSDKException;
|
30 |
+
|
31 |
+
/**
|
32 |
+
* Class FacebookClient
|
33 |
+
*
|
34 |
+
* @package Facebook
|
35 |
+
*/
|
36 |
+
class FacebookClient
|
37 |
+
{
|
38 |
+
/**
|
39 |
+
* @const string Production Graph API URL.
|
40 |
+
*/
|
41 |
+
const BASE_GRAPH_URL = 'https://graph.facebook.com';
|
42 |
+
|
43 |
+
/**
|
44 |
+
* @const string Graph API URL for video uploads.
|
45 |
+
*/
|
46 |
+
const BASE_GRAPH_VIDEO_URL = 'https://graph-video.facebook.com';
|
47 |
+
|
48 |
+
/**
|
49 |
+
* @const string Beta Graph API URL.
|
50 |
+
*/
|
51 |
+
const BASE_GRAPH_URL_BETA = 'https://graph.beta.facebook.com';
|
52 |
+
|
53 |
+
/**
|
54 |
+
* @const string Beta Graph API URL for video uploads.
|
55 |
+
*/
|
56 |
+
const BASE_GRAPH_VIDEO_URL_BETA = 'https://graph-video.beta.facebook.com';
|
57 |
+
|
58 |
+
/**
|
59 |
+
* @const int The timeout in seconds for a normal request.
|
60 |
+
*/
|
61 |
+
const DEFAULT_REQUEST_TIMEOUT = 60;
|
62 |
+
|
63 |
+
/**
|
64 |
+
* @const int The timeout in seconds for a request that contains file uploads.
|
65 |
+
*/
|
66 |
+
const DEFAULT_FILE_UPLOAD_REQUEST_TIMEOUT = 3600;
|
67 |
+
|
68 |
+
/**
|
69 |
+
* @const int The timeout in seconds for a request that contains video uploads.
|
70 |
+
*/
|
71 |
+
const DEFAULT_VIDEO_UPLOAD_REQUEST_TIMEOUT = 7200;
|
72 |
+
|
73 |
+
/**
|
74 |
+
* @var bool Toggle to use Graph beta url.
|
75 |
+
*/
|
76 |
+
protected $enableBetaMode = false;
|
77 |
+
|
78 |
+
/**
|
79 |
+
* @var FacebookHttpClientInterface HTTP client handler.
|
80 |
+
*/
|
81 |
+
protected $httpClientHandler;
|
82 |
+
|
83 |
+
/**
|
84 |
+
* @var int The number of calls that have been made to Graph.
|
85 |
+
*/
|
86 |
+
public static $requestCount = 0;
|
87 |
+
|
88 |
+
/**
|
89 |
+
* Instantiates a new FacebookClient object.
|
90 |
+
*
|
91 |
+
* @param FacebookHttpClientInterface|null $httpClientHandler
|
92 |
+
* @param boolean $enableBeta
|
93 |
+
*/
|
94 |
+
public function __construct(FacebookHttpClientInterface $httpClientHandler = null, $enableBeta = false)
|
95 |
+
{
|
96 |
+
$this->httpClientHandler = $httpClientHandler ?: $this->detectHttpClientHandler();
|
97 |
+
$this->enableBetaMode = $enableBeta;
|
98 |
+
}
|
99 |
+
|
100 |
+
/**
|
101 |
+
* Sets the HTTP client handler.
|
102 |
+
*
|
103 |
+
* @param FacebookHttpClientInterface $httpClientHandler
|
104 |
+
*/
|
105 |
+
public function setHttpClientHandler(FacebookHttpClientInterface $httpClientHandler)
|
106 |
+
{
|
107 |
+
$this->httpClientHandler = $httpClientHandler;
|
108 |
+
}
|
109 |
+
|
110 |
+
/**
|
111 |
+
* Returns the HTTP client handler.
|
112 |
+
*
|
113 |
+
* @return FacebookHttpClientInterface
|
114 |
+
*/
|
115 |
+
public function getHttpClientHandler()
|
116 |
+
{
|
117 |
+
return $this->httpClientHandler;
|
118 |
+
}
|
119 |
+
|
120 |
+
/**
|
121 |
+
* Detects which HTTP client handler to use.
|
122 |
+
*
|
123 |
+
* @return FacebookHttpClientInterface
|
124 |
+
*/
|
125 |
+
public function detectHttpClientHandler()
|
126 |
+
{
|
127 |
+
return extension_loaded('curl') ? new FacebookCurlHttpClient() : new FacebookStreamHttpClient();
|
128 |
+
}
|
129 |
+
|
130 |
+
/**
|
131 |
+
* Toggle beta mode.
|
132 |
+
*
|
133 |
+
* @param boolean $betaMode
|
134 |
+
*/
|
135 |
+
public function enableBetaMode($betaMode = true)
|
136 |
+
{
|
137 |
+
$this->enableBetaMode = $betaMode;
|
138 |
+
}
|
139 |
+
|
140 |
+
/**
|
141 |
+
* Returns the base Graph URL.
|
142 |
+
*
|
143 |
+
* @param boolean $postToVideoUrl Post to the video API if videos are being uploaded.
|
144 |
+
*
|
145 |
+
* @return string
|
146 |
+
*/
|
147 |
+
public function getBaseGraphUrl($postToVideoUrl = false)
|
148 |
+
{
|
149 |
+
if ($postToVideoUrl) {
|
150 |
+
return $this->enableBetaMode ? static::BASE_GRAPH_VIDEO_URL_BETA : static::BASE_GRAPH_VIDEO_URL;
|
151 |
+
}
|
152 |
+
|
153 |
+
return $this->enableBetaMode ? static::BASE_GRAPH_URL_BETA : static::BASE_GRAPH_URL;
|
154 |
+
}
|
155 |
+
|
156 |
+
/**
|
157 |
+
* Prepares the request for sending to the client handler.
|
158 |
+
*
|
159 |
+
* @param FacebookRequest $request
|
160 |
+
*
|
161 |
+
* @return array
|
162 |
+
*/
|
163 |
+
public function prepareRequestMessage(FacebookRequest $request)
|
164 |
+
{
|
165 |
+
$postToVideoUrl = $request->containsVideoUploads();
|
166 |
+
$url = $this->getBaseGraphUrl($postToVideoUrl) . $request->getUrl();
|
167 |
+
|
168 |
+
// If we're sending files they should be sent as multipart/form-data
|
169 |
+
if ($request->containsFileUploads()) {
|
170 |
+
$requestBody = $request->getMultipartBody();
|
171 |
+
$request->setHeaders([
|
172 |
+
'Content-Type' => 'multipart/form-data; boundary=' . $requestBody->getBoundary(),
|
173 |
+
]);
|
174 |
+
} else {
|
175 |
+
$requestBody = $request->getUrlEncodedBody();
|
176 |
+
$request->setHeaders([
|
177 |
+
'Content-Type' => 'application/x-www-form-urlencoded',
|
178 |
+
]);
|
179 |
+
}
|
180 |
+
|
181 |
+
return [
|
182 |
+
$url,
|
183 |
+
$request->getMethod(),
|
184 |
+
$request->getHeaders(),
|
185 |
+
$requestBody->getBody(),
|
186 |
+
];
|
187 |
+
}
|
188 |
+
|
189 |
+
/**
|
190 |
+
* Makes the request to Graph and returns the result.
|
191 |
+
*
|
192 |
+
* @param FacebookRequest $request
|
193 |
+
*
|
194 |
+
* @return FacebookResponse
|
195 |
+
*
|
196 |
+
* @throws FacebookSDKException
|
197 |
+
*/
|
198 |
+
public function sendRequest(FacebookRequest $request)
|
199 |
+
{
|
200 |
+
if (get_class($request) === 'Facebook\FacebookRequest') {
|
201 |
+
$request->validateAccessToken();
|
202 |
+
}
|
203 |
+
|
204 |
+
list($url, $method, $headers, $body) = $this->prepareRequestMessage($request);
|
205 |
+
|
206 |
+
// Since file uploads can take a while, we need to give more time for uploads
|
207 |
+
$timeOut = static::DEFAULT_REQUEST_TIMEOUT;
|
208 |
+
if ($request->containsFileUploads()) {
|
209 |
+
$timeOut = static::DEFAULT_FILE_UPLOAD_REQUEST_TIMEOUT;
|
210 |
+
} elseif ($request->containsVideoUploads()) {
|
211 |
+
$timeOut = static::DEFAULT_VIDEO_UPLOAD_REQUEST_TIMEOUT;
|
212 |
+
}
|
213 |
+
|
214 |
+
// Should throw `FacebookSDKException` exception on HTTP client error.
|
215 |
+
// Don't catch to allow it to bubble up.
|
216 |
+
$rawResponse = $this->httpClientHandler->send($url, $method, $body, $headers, $timeOut);
|
217 |
+
|
218 |
+
static::$requestCount++;
|
219 |
+
|
220 |
+
$returnResponse = new FacebookResponse(
|
221 |
+
$request,
|
222 |
+
$rawResponse->getBody(),
|
223 |
+
$rawResponse->getHttpResponseCode(),
|
224 |
+
$rawResponse->getHeaders()
|
225 |
+
);
|
226 |
+
|
227 |
+
if ($returnResponse->isError()) {
|
228 |
+
throw $returnResponse->getThrownException();
|
229 |
+
}
|
230 |
+
|
231 |
+
return $returnResponse;
|
232 |
+
}
|
233 |
+
|
234 |
+
/**
|
235 |
+
* Makes a batched request to Graph and returns the result.
|
236 |
+
*
|
237 |
+
* @param FacebookBatchRequest $request
|
238 |
+
*
|
239 |
+
* @return FacebookBatchResponse
|
240 |
+
*
|
241 |
+
* @throws FacebookSDKException
|
242 |
+
*/
|
243 |
+
public function sendBatchRequest(FacebookBatchRequest $request)
|
244 |
+
{
|
245 |
+
$request->prepareRequestsForBatch();
|
246 |
+
$facebookResponse = $this->sendRequest($request);
|
247 |
+
|
248 |
+
return new FacebookBatchResponse($request, $facebookResponse);
|
249 |
+
}
|
250 |
+
}
|
Facebook/FacebookRequest.php
ADDED
@@ -0,0 +1,534 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Copyright 2017 Facebook, Inc.
|
4 |
+
*
|
5 |
+
* You are hereby granted a non-exclusive, worldwide, royalty-free license to
|
6 |
+
* use, copy, modify, and distribute this software in source code or binary
|
7 |
+
* form for use in connection with the web services and APIs provided by
|
8 |
+
* Facebook.
|
9 |
+
*
|
10 |
+
* As with any software that integrates with the Facebook platform, your use
|
11 |
+
* of this software is subject to the Facebook Developer Principles and
|
12 |
+
* Policies [http://developers.facebook.com/policy/]. This copyright notice
|
13 |
+
* shall be included in all copies or substantial portions of the software.
|
14 |
+
*
|
15 |
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16 |
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17 |
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
18 |
+
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19 |
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
20 |
+
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
21 |
+
* DEALINGS IN THE SOFTWARE.
|
22 |
+
*
|
23 |
+
*/
|
24 |
+
namespace Facebook;
|
25 |
+
|
26 |
+
use Facebook\Authentication\AccessToken;
|
27 |
+
use Facebook\Url\FacebookUrlManipulator;
|
28 |
+
use Facebook\FileUpload\FacebookFile;
|
29 |
+
use Facebook\FileUpload\FacebookVideo;
|
30 |
+
use Facebook\Http\RequestBodyMultipart;
|
31 |
+
use Facebook\Http\RequestBodyUrlEncoded;
|
32 |
+
use Facebook\Exceptions\FacebookSDKException;
|
33 |
+
|
34 |
+
/**
|
35 |
+
* Class Request
|
36 |
+
*
|
37 |
+
* @package Facebook
|
38 |
+
*/
|
39 |
+
class FacebookRequest
|
40 |
+
{
|
41 |
+
/**
|
42 |
+
* @var FacebookApp The Facebook app entity.
|
43 |
+
*/
|
44 |
+
protected $app;
|
45 |
+
|
46 |
+
/**
|
47 |
+
* @var string|null The access token to use for this request.
|
48 |
+
*/
|
49 |
+
protected $accessToken;
|
50 |
+
|
51 |
+
/**
|
52 |
+
* @var string The HTTP method for this request.
|
53 |
+
*/
|
54 |
+
protected $method;
|
55 |
+
|
56 |
+
/**
|
57 |
+
* @var string The Graph endpoint for this request.
|
58 |
+
*/
|
59 |
+
protected $endpoint;
|
60 |
+
|
61 |
+
/**
|
62 |
+
* @var array The headers to send with this request.
|
63 |
+
*/
|
64 |
+
protected $headers = [];
|
65 |
+
|
66 |
+
/**
|
67 |
+
* @var array The parameters to send with this request.
|
68 |
+
*/
|
69 |
+
protected $params = [];
|
70 |
+
|
71 |
+
/**
|
72 |
+
* @var array The files to send with this request.
|
73 |
+
*/
|
74 |
+
protected $files = [];
|
75 |
+
|
76 |
+
/**
|
77 |
+
* @var string ETag to send with this request.
|
78 |
+
*/
|
79 |
+
protected $eTag;
|
80 |
+
|
81 |
+
/**
|
82 |
+
* @var string Graph version to use for this request.
|
83 |
+
*/
|
84 |
+
protected $graphVersion;
|
85 |
+
|
86 |
+
/**
|
87 |
+
* Creates a new Request entity.
|
88 |
+
*
|
89 |
+
* @param FacebookApp|null $app
|
90 |
+
* @param AccessToken|string|null $accessToken
|
91 |
+
* @param string|null $method
|
92 |
+
* @param string|null $endpoint
|
93 |
+
* @param array|null $params
|
94 |
+
* @param string|null $eTag
|
95 |
+
* @param string|null $graphVersion
|
96 |
+
*/
|
97 |
+
public function __construct(FacebookApp $app = null, $accessToken = null, $method = null, $endpoint = null, array $params = [], $eTag = null, $graphVersion = null)
|
98 |
+
{
|
99 |
+
$this->setApp($app);
|
100 |
+
$this->setAccessToken($accessToken);
|
101 |
+
$this->setMethod($method);
|
102 |
+
$this->setEndpoint($endpoint);
|
103 |
+
$this->setParams($params);
|
104 |
+
$this->setETag($eTag);
|
105 |
+
$this->graphVersion = $graphVersion ?: Facebook::DEFAULT_GRAPH_VERSION;
|
106 |
+
}
|
107 |
+
|
108 |
+
/**
|
109 |
+
* Set the access token for this request.
|
110 |
+
*
|
111 |
+
* @param AccessToken|string|null
|
112 |
+
*
|
113 |
+
* @return FacebookRequest
|
114 |
+
*/
|
115 |
+
public function setAccessToken($accessToken)
|
116 |
+
{
|
117 |
+
$this->accessToken = $accessToken;
|
118 |
+
if ($accessToken instanceof AccessToken) {
|
119 |
+
$this->accessToken = $accessToken->getValue();
|
120 |
+
}
|
121 |
+
|
122 |
+
return $this;
|
123 |
+
}
|
124 |
+
|
125 |
+
/**
|
126 |
+
* Sets the access token with one harvested from a URL or POST params.
|
127 |
+
*
|
128 |
+
* @param string $accessToken The access token.
|
129 |
+
*
|
130 |
+
* @return FacebookRequest
|
131 |
+
*
|
132 |
+
* @throws FacebookSDKException
|
133 |
+
*/
|
134 |
+
public function setAccessTokenFromParams($accessToken)
|
135 |
+
{
|
136 |
+
$existingAccessToken = $this->getAccessToken();
|
137 |
+
if (!$existingAccessToken) {
|
138 |
+
$this->setAccessToken($accessToken);
|
139 |
+
} elseif ($accessToken !== $existingAccessToken) {
|
140 |
+
throw new FacebookSDKException('Access token mismatch. The access token provided in the FacebookRequest and the one provided in the URL or POST params do not match.');
|
141 |
+
}
|
142 |
+
|
143 |
+
return $this;
|
144 |
+
}
|
145 |
+
|
146 |
+
/**
|
147 |
+
* Return the access token for this request.
|
148 |
+
*
|
149 |
+
* @return string|null
|
150 |
+
*/
|
151 |
+
public function getAccessToken()
|
152 |
+
{
|
153 |
+
return $this->accessToken;
|
154 |
+
}
|
155 |
+
|
156 |
+
/**
|
157 |
+
* Return the access token for this request as an AccessToken entity.
|
158 |
+
*
|
159 |
+
* @return AccessToken|null
|
160 |
+
*/
|
161 |
+
public function getAccessTokenEntity()
|
162 |
+
{
|
163 |
+
return $this->accessToken ? new AccessToken($this->accessToken) : null;
|
164 |
+
}
|
165 |
+
|
166 |
+
/**
|
167 |
+
* Set the FacebookApp entity used for this request.
|
168 |
+
*
|
169 |
+
* @param FacebookApp|null $app
|
170 |
+
*/
|
171 |
+
public function setApp(FacebookApp $app = null)
|
172 |
+
{
|
173 |
+
$this->app = $app;
|
174 |
+
}
|
175 |
+
|
176 |
+
/**
|
177 |
+
* Return the FacebookApp entity used for this request.
|
178 |
+
*
|
179 |
+
* @return FacebookApp
|
180 |
+
*/
|
181 |
+
public function getApp()
|
182 |
+
{
|
183 |
+
return $this->app;
|
184 |
+
}
|
185 |
+
|
186 |
+
/**
|
187 |
+
* Generate an app secret proof to sign this request.
|
188 |
+
*
|
189 |
+
* @return string|null
|
190 |
+
*/
|
191 |
+
public function getAppSecretProof()
|
192 |
+
{
|
193 |
+
if (!$accessTokenEntity = $this->getAccessTokenEntity()) {
|
194 |
+
return null;
|
195 |
+
}
|
196 |
+
|
197 |
+
return $accessTokenEntity->getAppSecretProof($this->app->getSecret());
|
198 |
+
}
|
199 |
+
|
200 |
+
/**
|
201 |
+
* Validate that an access token exists for this request.
|
202 |
+
*
|
203 |
+
* @throws FacebookSDKException
|
204 |
+
*/
|
205 |
+
public function validateAccessToken()
|
206 |
+
{
|
207 |
+
$accessToken = $this->getAccessToken();
|
208 |
+
if (!$accessToken) {
|
209 |
+
throw new FacebookSDKException('You must provide an access token.');
|
210 |
+
}
|
211 |
+
}
|
212 |
+
|
213 |
+
/**
|
214 |
+
* Set the HTTP method for this request.
|
215 |
+
*
|
216 |
+
* @param string
|
217 |
+
*/
|
218 |
+
public function setMethod($method)
|
219 |
+
{
|
220 |
+
$this->method = strtoupper($method);
|
221 |
+
}
|
222 |
+
|
223 |
+
/**
|
224 |
+
* Return the HTTP method for this request.
|
225 |
+
*
|
226 |
+
* @return string
|
227 |
+
*/
|
228 |
+
public function getMethod()
|
229 |
+
{
|
230 |
+
return $this->method;
|
231 |
+
}
|
232 |
+
|
233 |
+
/**
|
234 |
+
* Validate that the HTTP method is set.
|
235 |
+
*
|
236 |
+
* @throws FacebookSDKException
|
237 |
+
*/
|
238 |
+
public function validateMethod()
|
239 |
+
{
|
240 |
+
if (!$this->method) {
|
241 |
+
throw new FacebookSDKException('HTTP method not specified.');
|
242 |
+
}
|
243 |
+
|
244 |
+
if (!in_array($this->method, ['GET', 'POST', 'DELETE'])) {
|
245 |
+
throw new FacebookSDKException('Invalid HTTP method specified.');
|
246 |
+
}
|
247 |
+
}
|
248 |
+
|
249 |
+
/**
|
250 |
+
* Set the endpoint for this request.
|
251 |
+
*
|
252 |
+
* @param string
|
253 |
+
*
|
254 |
+
* @return FacebookRequest
|
255 |
+
*
|
256 |
+
* @throws FacebookSDKException
|
257 |
+
*/
|
258 |
+
public function setEndpoint($endpoint)
|
259 |
+
{
|
260 |
+
// Harvest the access token from the endpoint to keep things in sync
|
261 |
+
$params = FacebookUrlManipulator::getParamsAsArray($endpoint);
|
262 |
+
if (isset($params['access_token'])) {
|
263 |
+
$this->setAccessTokenFromParams($params['access_token']);
|
264 |
+
}
|
265 |
+
|
266 |
+
// Clean the token & app secret proof from the endpoint.
|
267 |
+
$filterParams = ['access_token', 'appsecret_proof'];
|
268 |
+
$this->endpoint = FacebookUrlManipulator::removeParamsFromUrl($endpoint, $filterParams);
|
269 |
+
|
270 |
+
return $this;
|
271 |
+
}
|
272 |
+
|
273 |
+
/**
|
274 |
+
* Return the endpoint for this request.
|
275 |
+
*
|
276 |
+
* @return string
|
277 |
+
*/
|
278 |
+
public function getEndpoint()
|
279 |
+
{
|
280 |
+
// For batch requests, this will be empty
|
281 |
+
return $this->endpoint;
|
282 |
+
}
|
283 |
+
|
284 |
+
/**
|
285 |
+
* Generate and return the headers for this request.
|
286 |
+
*
|
287 |
+
* @return array
|
288 |
+
*/
|
289 |
+
public function getHeaders()
|
290 |
+
{
|
291 |
+
$headers = static::getDefaultHeaders();
|
292 |
+
|
293 |
+
if ($this->eTag) {
|
294 |
+
$headers['If-None-Match'] = $this->eTag;
|
295 |
+
}
|
296 |
+
|
297 |
+
return array_merge($this->headers, $headers);
|
298 |
+
}
|
299 |
+
|
300 |
+
/**
|
301 |
+
* Set the headers for this request.
|
302 |
+
*
|
303 |
+
* @param array $headers
|
304 |
+
*/
|
305 |
+
public function setHeaders(array $headers)
|
306 |
+
{
|
307 |
+
$this->headers = array_merge($this->headers, $headers);
|
308 |
+
}
|
309 |
+
|
310 |
+
/**
|
311 |
+
* Sets the eTag value.
|
312 |
+
*
|
313 |
+
* @param string $eTag
|
314 |
+
*/
|
315 |
+
public function setETag($eTag)
|
316 |
+
{
|
317 |
+
$this->eTag = $eTag;
|
318 |
+
}
|
319 |
+
|
320 |
+
/**
|
321 |
+
* Set the params for this request.
|
322 |
+
*
|
323 |
+
* @param array $params
|
324 |
+
*
|
325 |
+
* @return FacebookRequest
|
326 |
+
*
|
327 |
+
* @throws FacebookSDKException
|
328 |
+
*/
|
329 |
+
public function setParams(array $params = [])
|
330 |
+
{
|
331 |
+
if (isset($params['access_token'])) {
|
332 |
+
$this->setAccessTokenFromParams($params['access_token']);
|
333 |
+
}
|
334 |
+
|
335 |
+
// Don't let these buggers slip in.
|
336 |
+
unset($params['access_token'], $params['appsecret_proof']);
|
337 |
+
|
338 |
+
// @TODO Refactor code above with this
|
339 |
+
//$params = $this->sanitizeAuthenticationParams($params);
|
340 |
+
$params = $this->sanitizeFileParams($params);
|
341 |
+
$this->dangerouslySetParams($params);
|
342 |
+
|
343 |
+
return $this;
|
344 |
+
}
|
345 |
+
|
346 |
+
/**
|
347 |
+
* Set the params for this request without filtering them first.
|
348 |
+
*
|
349 |
+
* @param array $params
|
350 |
+
*
|
351 |
+
* @return FacebookRequest
|
352 |
+
*/
|
353 |
+
public function dangerouslySetParams(array $params = [])
|
354 |
+
{
|
355 |
+
$this->params = array_merge($this->params, $params);
|
356 |
+
|
357 |
+
return $this;
|
358 |
+
}
|
359 |
+
|
360 |
+
/**
|
361 |
+
* Iterate over the params and pull out the file uploads.
|
362 |
+
*
|
363 |
+
* @param array $params
|
364 |
+
*
|
365 |
+
* @return array
|
366 |
+
*/
|
367 |
+
public function sanitizeFileParams(array $params)
|
368 |
+
{
|
369 |
+
foreach ($params as $key => $value) {
|
370 |
+
if ($value instanceof FacebookFile) {
|
371 |
+
$this->addFile($key, $value);
|
372 |
+
unset($params[$key]);
|
373 |
+
}
|
374 |
+
}
|
375 |
+
|
376 |
+
return $params;
|
377 |
+
}
|
378 |
+
|
379 |
+
/**
|
380 |
+
* Add a file to be uploaded.
|
381 |
+
*
|
382 |
+
* @param string $key
|
383 |
+
* @param FacebookFile $file
|
384 |
+
*/
|
385 |
+
public function addFile($key, FacebookFile $file)
|
386 |
+
{
|
387 |
+
$this->files[$key] = $file;
|
388 |
+
}
|
389 |
+
|
390 |
+
/**
|
391 |
+
* Removes all the files from the upload queue.
|
392 |
+
*/
|
393 |
+
public function resetFiles()
|
394 |
+
{
|
395 |
+
$this->files = [];
|
396 |
+
}
|
397 |
+
|
398 |
+
/**
|
399 |
+
* Get the list of files to be uploaded.
|
400 |
+
*
|
401 |
+
* @return array
|
402 |
+
*/
|
403 |
+
public function getFiles()
|
404 |
+
{
|
405 |
+
return $this->files;
|
406 |
+
}
|
407 |
+
|
408 |
+
/**
|
409 |
+
* Let's us know if there is a file upload with this request.
|
410 |
+
*
|
411 |
+
* @return boolean
|
412 |
+
*/
|
413 |
+
public function containsFileUploads()
|
414 |
+
{
|
415 |
+
return !empty($this->files);
|
416 |
+
}
|
417 |
+
|
418 |
+
/**
|
419 |
+
* Let's us know if there is a video upload with this request.
|
420 |
+
*
|
421 |
+
* @return boolean
|
422 |
+
*/
|
423 |
+
public function containsVideoUploads()
|
424 |
+
{
|
425 |
+
foreach ($this->files as $file) {
|
426 |
+
if ($file instanceof FacebookVideo) {
|
427 |
+
return true;
|
428 |
+
}
|
429 |
+
}
|
430 |
+
|
431 |
+
return false;
|
432 |
+
}
|
433 |
+
|
434 |
+
/**
|
435 |
+
* Returns the body of the request as multipart/form-data.
|
436 |
+
*
|
437 |
+
* @return RequestBodyMultipart
|
438 |
+
*/
|
439 |
+
public function getMultipartBody()
|
440 |
+
{
|
441 |
+
$params = $this->getPostParams();
|
442 |
+
|
443 |
+
return new RequestBodyMultipart($params, $this->files);
|
444 |
+
}
|
445 |
+
|
446 |
+
/**
|
447 |
+
* Returns the body of the request as URL-encoded.
|
448 |
+
*
|
449 |
+
* @return RequestBodyUrlEncoded
|
450 |
+
*/
|
451 |
+
public function getUrlEncodedBody()
|
452 |
+
{
|
453 |
+
$params = $this->getPostParams();
|
454 |
+
|
455 |
+
return new RequestBodyUrlEncoded($params);
|
456 |
+
}
|
457 |
+
|
458 |
+
/**
|
459 |
+
* Generate and return the params for this request.
|
460 |
+
*
|
461 |
+
* @return array
|
462 |
+
*/
|
463 |
+
public function getParams()
|
464 |
+
{
|
465 |
+
$params = $this->params;
|
466 |
+
|
467 |
+
$accessToken = $this->getAccessToken();
|
468 |
+
if ($accessToken) {
|
469 |
+
$params['access_token'] = $accessToken;
|
470 |
+
$params['appsecret_proof'] = $this->getAppSecretProof();
|
471 |
+
}
|
472 |
+
|
473 |
+
return $params;
|
474 |
+
}
|
475 |
+
|
476 |
+
/**
|
477 |
+
* Only return params on POST requests.
|
478 |
+
*
|
479 |
+
* @return array
|
480 |
+
*/
|
481 |
+
public function getPostParams()
|
482 |
+
{
|
483 |
+
if ($this->getMethod() === 'POST') {
|
484 |
+
return $this->getParams();
|
485 |
+
}
|
486 |
+
|
487 |
+
return [];
|
488 |
+
}
|
489 |
+
|
490 |
+
/**
|
491 |
+
* The graph version used for this request.
|
492 |
+
*
|
493 |
+
* @return string
|
494 |
+
*/
|
495 |
+
public function getGraphVersion()
|
496 |
+
{
|
497 |
+
return $this->graphVersion;
|
498 |
+
}
|
499 |
+
|
500 |
+
/**
|
501 |
+
* Generate and return the URL for this request.
|
502 |
+
*
|
503 |
+
* @return string
|
504 |
+
*/
|
505 |
+
public function getUrl()
|
506 |
+
{
|
507 |
+
$this->validateMethod();
|
508 |
+
|
509 |
+
$graphVersion = FacebookUrlManipulator::forceSlashPrefix($this->graphVersion);
|
510 |
+
$endpoint = FacebookUrlManipulator::forceSlashPrefix($this->getEndpoint());
|
511 |
+
|
512 |
+
$url = $graphVersion . $endpoint;
|
513 |
+
|
514 |
+
if ($this->getMethod() !== 'POST') {
|
515 |
+
$params = $this->getParams();
|
516 |
+
$url = FacebookUrlManipulator::appendParamsToUrl($url, $params);
|
517 |
+
}
|
518 |
+
|
519 |
+
return $url;
|
520 |
+
}
|
521 |
+
|
522 |
+
/**
|
523 |
+
* Return the default headers that every request should use.
|
524 |
+
*
|
525 |
+
* @return array
|
526 |
+
*/
|
527 |
+
public static function getDefaultHeaders()
|
528 |
+
{
|
529 |
+
return [
|
530 |
+
'User-Agent' => 'fb-php-' . Facebook::VERSION,
|
531 |
+
'Accept-Encoding' => '*',
|
532 |
+
];
|
533 |
+
}
|
534 |
+
}
|
Facebook/FacebookResponse.php
ADDED
@@ -0,0 +1,410 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Copyright 2017 Facebook, Inc.
|
4 |
+
*
|
5 |
+
* You are hereby granted a non-exclusive, worldwide, royalty-free license to
|
6 |
+
* use, copy, modify, and distribute this software in source code or binary
|
7 |
+
* form for use in connection with the web services and APIs provided by
|
8 |
+
* Facebook.
|
9 |
+
*
|
10 |
+
* As with any software that integrates with the Facebook platform, your use
|
11 |
+
* of this software is subject to the Facebook Developer Principles and
|
12 |
+
* Policies [http://developers.facebook.com/policy/]. This copyright notice
|
13 |
+
* shall be included in all copies or substantial portions of the software.
|
14 |
+
*
|
15 |
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16 |
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17 |
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
18 |
+
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19 |
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
20 |
+
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
21 |
+
* DEALINGS IN THE SOFTWARE.
|
22 |
+
*
|
23 |
+
*/
|
24 |
+
namespace Facebook;
|
25 |
+
|
26 |
+
use Facebook\GraphNodes\GraphNodeFactory;
|
27 |
+
use Facebook\Exceptions\FacebookResponseException;
|
28 |
+
use Facebook\Exceptions\FacebookSDKException;
|
29 |
+
|
30 |
+
/**
|
31 |
+
* Class FacebookResponse
|
32 |
+
*
|
33 |
+
* @package Facebook
|
34 |
+
*/
|
35 |
+
class FacebookResponse
|
36 |
+
{
|
37 |
+
/**
|
38 |
+
* @var int The HTTP status code response from Graph.
|
39 |
+
*/
|
40 |
+
protected $httpStatusCode;
|
41 |
+
|
42 |
+
/**
|
43 |
+
* @var array The headers returned from Graph.
|
44 |
+
*/
|
45 |
+
protected $headers;
|
46 |
+
|
47 |
+
/**
|
48 |
+
* @var string The raw body of the response from Graph.
|
49 |
+
*/
|
50 |
+
protected $body;
|
51 |
+
|
52 |
+
/**
|
53 |
+
* @var array The decoded body of the Graph response.
|
54 |
+
*/
|
55 |
+
protected $decodedBody = [];
|
56 |
+
|
57 |
+
/**
|
58 |
+
* @var FacebookRequest The original request that returned this response.
|
59 |
+
*/
|
60 |
+
protected $request;
|
61 |
+
|
62 |
+
/**
|
63 |
+
* @var FacebookSDKException The exception thrown by this request.
|
64 |
+
*/
|
65 |
+
protected $thrownException;
|
66 |
+
|
67 |
+
/**
|
68 |
+
* Creates a new Response entity.
|
69 |
+
*
|
70 |
+
* @param FacebookRequest $request
|
71 |
+
* @param string|null $body
|
72 |
+
* @param int|null $httpStatusCode
|
73 |
+
* @param array|null $headers
|
74 |
+
*/
|
75 |
+
public function __construct(FacebookRequest $request, $body = null, $httpStatusCode = null, array $headers = [])
|
76 |
+
{
|
77 |
+
$this->request = $request;
|
78 |
+
$this->body = $body;
|
79 |
+
$this->httpStatusCode = $httpStatusCode;
|
80 |
+
$this->headers = $headers;
|
81 |
+
|
82 |
+
$this->decodeBody();
|
83 |
+
}
|
84 |
+
|
85 |
+
/**
|
86 |
+
* Return the original request that returned this response.
|
87 |
+
*
|
88 |
+
* @return FacebookRequest
|
89 |
+
*/
|
90 |
+
public function getRequest()
|
91 |
+
{
|
92 |
+
return $this->request;
|
93 |
+
}
|
94 |
+
|
95 |
+
/**
|
96 |
+
* Return the FacebookApp entity used for this response.
|
97 |
+
*
|
98 |
+
* @return FacebookApp
|
99 |
+
*/
|
100 |
+
public function getApp()
|
101 |
+
{
|
102 |
+
return $this->request->getApp();
|
103 |
+
}
|
104 |
+
|
105 |
+
/**
|
106 |
+
* Return the access token that was used for this response.
|
107 |
+
*
|
108 |
+
* @return string|null
|
109 |
+
*/
|
110 |
+
public function getAccessToken()
|
111 |
+
{
|
112 |
+
return $this->request->getAccessToken();
|
113 |
+
}
|
114 |
+
|
115 |
+
/**
|
116 |
+
* Return the HTTP status code for this response.
|
117 |
+
*
|
118 |
+
* @return int
|
119 |
+
*/
|
120 |
+
public function getHttpStatusCode()
|
121 |
+
{
|
122 |
+
return $this->httpStatusCode;
|
123 |
+
}
|
124 |
+
|
125 |
+
/**
|
126 |
+
* Return the HTTP headers for this response.
|
127 |
+
*
|
128 |
+
* @return array
|
129 |
+
*/
|
130 |
+
public function getHeaders()
|
131 |
+
{
|
132 |
+
return $this->headers;
|
133 |
+
}
|
134 |
+
|
135 |
+
/**
|
136 |
+
* Return the raw body response.
|
137 |
+
*
|
138 |
+
* @return string
|
139 |
+
*/
|
140 |
+
public function getBody()
|
141 |
+
{
|
142 |
+
return $this->body;
|
143 |
+
}
|
144 |
+
|
145 |
+
/**
|
146 |
+
* Return the decoded body response.
|
147 |
+
*
|
148 |
+
* @return array
|
149 |
+
*/
|
150 |
+
public function getDecodedBody()
|
151 |
+
{
|
152 |
+
return $this->decodedBody;
|
153 |
+
}
|
154 |
+
|
155 |
+
/**
|
156 |
+
* Get the app secret proof that was used for this response.
|
157 |
+
*
|
158 |
+
* @return string|null
|
159 |
+
*/
|
160 |
+
public function getAppSecretProof()
|
161 |
+
{
|
162 |
+
return $this->request->getAppSecretProof();
|
163 |
+
}
|
164 |
+
|
165 |
+
/**
|
166 |
+
* Get the ETag associated with the response.
|
167 |
+
*
|
168 |
+
* @return string|null
|
169 |
+
*/
|
170 |
+
public function getETag()
|
171 |
+
{
|
172 |
+
return isset($this->headers['ETag']) ? $this->headers['ETag'] : null;
|
173 |
+
}
|
174 |
+
|
175 |
+
/**
|
176 |
+
* Get the version of Graph that returned this response.
|
177 |
+
*
|
178 |
+
* @return string|null
|
179 |
+
*/
|
180 |
+
public function getGraphVersion()
|
181 |
+
{
|
182 |
+
return isset($this->headers['Facebook-API-Version']) ? $this->headers['Facebook-API-Version'] : null;
|
183 |
+
}
|
184 |
+
|
185 |
+
/**
|
186 |
+
* Returns true if Graph returned an error message.
|
187 |
+
*
|
188 |
+
* @return boolean
|
189 |
+
*/
|
190 |
+
public function isError()
|
191 |
+
{
|
192 |
+
return isset($this->decodedBody['error']);
|
193 |
+
}
|
194 |
+
|
195 |
+
/**
|
196 |
+
* Throws the exception.
|
197 |
+
*
|
198 |
+
* @throws FacebookSDKException
|
199 |
+
*/
|
200 |
+
public function throwException()
|
201 |
+
{
|
202 |
+
throw $this->thrownException;
|
203 |
+
}
|
204 |
+
|
205 |
+
/**
|
206 |
+
* Instantiates an exception to be thrown later.
|
207 |
+
*/
|
208 |
+
public function makeException()
|
209 |
+
{
|
210 |
+
$this->thrownException = FacebookResponseException::create($this);
|
211 |
+
}
|
212 |
+
|
213 |
+
/**
|
214 |
+
* Returns the exception that was thrown for this request.
|
215 |
+
*
|
216 |
+
* @return FacebookResponseException|null
|
217 |
+
*/
|
218 |
+
public function getThrownException()
|
219 |
+
{
|
220 |
+
return $this->thrownException;
|
221 |
+
}
|
222 |
+
|
223 |
+
/**
|
224 |
+
* Convert the raw response into an array if possible.
|
225 |
+
*
|
226 |
+
* Graph will return 2 types of responses:
|
227 |
+
* - JSON(P)
|
228 |
+
* Most responses from Graph are JSON(P)
|
229 |
+
* - application/x-www-form-urlencoded key/value pairs
|
230 |
+
* Happens on the `/oauth/access_token` endpoint when exchanging
|
231 |
+
* a short-lived access token for a long-lived access token
|
232 |
+
* - And sometimes nothing :/ but that'd be a bug.
|
233 |
+
*/
|
234 |
+
public function decodeBody()
|
235 |
+
{
|
236 |
+
$this->decodedBody = json_decode($this->body, true);
|
237 |
+
|
238 |
+
if ($this->decodedBody === null) {
|
239 |
+
$this->decodedBody = [];
|
240 |
+
parse_str($this->body, $this->decodedBody);
|
241 |
+
} elseif (is_bool($this->decodedBody)) {
|
242 |
+
// Backwards compatibility for Graph < 2.1.
|
243 |
+
// Mimics 2.1 responses.
|
244 |
+
// @TODO Remove this after Graph 2.0 is no longer supported
|
245 |
+
$this->decodedBody = ['success' => $this->decodedBody];
|
246 |
+
} elseif (is_numeric($this->decodedBody)) {
|
247 |
+
$this->decodedBody = ['id' => $this->decodedBody];
|
248 |
+
}
|
249 |
+
|
250 |
+
if (!is_array($this->decodedBody)) {
|
251 |
+
$this->decodedBody = [];
|
252 |
+
}
|
253 |
+
|
254 |
+
if ($this->isError()) {
|
255 |
+
$this->makeException();
|
256 |
+
}
|
257 |
+
}
|
258 |
+
|
259 |
+
/**
|
260 |
+
* Instantiate a new GraphObject from response.
|
261 |
+
*
|
262 |
+
* @param string|null $subclassName The GraphNode subclass to cast to.
|
263 |
+
*
|
264 |
+
* @return \Facebook\GraphNodes\GraphObject
|
265 |
+
*
|
266 |
+
* @throws FacebookSDKException
|
267 |
+
*
|
268 |
+
* @deprecated 5.0.0 getGraphObject() has been renamed to getGraphNode()
|
269 |
+
* @todo v6: Remove this method
|
270 |
+
*/
|
271 |
+
public function getGraphObject($subclassName = null)
|
272 |
+
{
|
273 |
+
return $this->getGraphNode($subclassName);
|
274 |
+
}
|
275 |
+
|
276 |
+
/**
|
277 |
+
* Instantiate a new GraphNode from response.
|
278 |
+
*
|
279 |
+
* @param string|null $subclassName The GraphNode subclass to cast to.
|
280 |
+
*
|
281 |
+
* @return \Facebook\GraphNodes\GraphNode
|
282 |
+
*
|
283 |
+
* @throws FacebookSDKException
|
284 |
+
*/
|
285 |
+
public function getGraphNode($subclassName = null)
|
286 |
+
{
|
287 |
+
$factory = new GraphNodeFactory($this);
|
288 |
+
|
289 |
+
return $factory->makeGraphNode($subclassName);
|
290 |
+
}
|
291 |
+
|
292 |
+
/**
|
293 |
+
* Convenience method for creating a GraphAlbum collection.
|
294 |
+
*
|
295 |
+
* @return \Facebook\GraphNodes\GraphAlbum
|
296 |
+
*
|
297 |
+
* @throws FacebookSDKException
|
298 |
+
*/
|
299 |
+
public function getGraphAlbum()
|
300 |
+
{
|
301 |
+
$factory = new GraphNodeFactory($this);
|
302 |
+
|
303 |
+
return $factory->makeGraphAlbum();
|
304 |
+
}
|
305 |
+
|
306 |
+
/**
|
307 |
+
* Convenience method for creating a GraphPage collection.
|
308 |
+
*
|
309 |
+
* @return \Facebook\GraphNodes\GraphPage
|
310 |
+
*
|
311 |
+
* @throws FacebookSDKException
|
312 |
+
*/
|
313 |
+
public function getGraphPage()
|
314 |
+
{
|
315 |
+
$factory = new GraphNodeFactory($this);
|
316 |
+
|
317 |
+
return $factory->makeGraphPage();
|
318 |
+
}
|
319 |
+
|
320 |
+
/**
|
321 |
+
* Convenience method for creating a GraphSessionInfo collection.
|
322 |
+
*
|
323 |
+
* @return \Facebook\GraphNodes\GraphSessionInfo
|
324 |
+
*
|
325 |
+
* @throws FacebookSDKException
|
326 |
+
*/
|
327 |
+
public function getGraphSessionInfo()
|
328 |
+
{
|
329 |
+
$factory = new GraphNodeFactory($this);
|
330 |
+
|
331 |
+
return $factory->makeGraphSessionInfo();
|
332 |
+
}
|
333 |
+
|
334 |
+
/**
|
335 |
+
* Convenience method for creating a GraphUser collection.
|
336 |
+
*
|
337 |
+
* @return \Facebook\GraphNodes\GraphUser
|
338 |
+
*
|
339 |
+
* @throws FacebookSDKException
|
340 |
+
*/
|
341 |
+
public function getGraphUser()
|
342 |
+
{
|
343 |
+
$factory = new GraphNodeFactory($this);
|
344 |
+
|
345 |
+
return $factory->makeGraphUser();
|
346 |
+
}
|
347 |
+
|
348 |
+
/**
|
349 |
+
* Convenience method for creating a GraphEvent collection.
|
350 |
+
*
|
351 |
+
* @return \Facebook\GraphNodes\GraphEvent
|
352 |
+
*
|
353 |
+
* @throws FacebookSDKException
|
354 |
+
*/
|
355 |
+
public function getGraphEvent()
|
356 |
+
{
|
357 |
+
$factory = new GraphNodeFactory($this);
|
358 |
+
|
359 |
+
return $factory->makeGraphEvent();
|
360 |
+
}
|
361 |
+
|
362 |
+
/**
|
363 |
+
* Convenience method for creating a GraphGroup collection.
|
364 |
+
*
|
365 |
+
* @return \Facebook\GraphNodes\GraphGroup
|
366 |
+
*
|
367 |
+
* @throws FacebookSDKException
|
368 |
+
*/
|
369 |
+
public function getGraphGroup()
|
370 |
+
{
|
371 |
+
$factory = new GraphNodeFactory($this);
|
372 |
+
|
373 |
+
return $factory->makeGraphGroup();
|
374 |
+
}
|
375 |
+
|
376 |
+
/**
|
377 |
+
* Instantiate a new GraphList from response.
|
378 |
+
*
|
379 |
+
* @param string|null $subclassName The GraphNode subclass to cast list items to.
|
380 |
+
* @param boolean $auto_prefix Toggle to auto-prefix the subclass name.
|
381 |
+
*
|
382 |
+
* @return \Facebook\GraphNodes\GraphList
|
383 |
+
*
|
384 |
+
* @throws FacebookSDKException
|
385 |
+
*
|
386 |
+
* @deprecated 5.0.0 getGraphList() has been renamed to getGraphEdge()
|
387 |
+
* @todo v6: Remove this method
|
388 |
+
*/
|
389 |
+
public function getGraphList($subclassName = null, $auto_prefix = true)
|
390 |
+
{
|
391 |
+
return $this->getGraphEdge($subclassName, $auto_prefix);
|
392 |
+
}
|
393 |
+
|
394 |
+
/**
|
395 |
+
* Instantiate a new GraphEdge from response.
|
396 |
+
*
|
397 |
+
* @param string|null $subclassName The GraphNode subclass to cast list items to.
|
398 |
+
* @param boolean $auto_prefix Toggle to auto-prefix the subclass name.
|
399 |
+
*
|
400 |
+
* @return \Facebook\GraphNodes\GraphEdge
|
401 |
+
*
|
402 |
+
* @throws FacebookSDKException
|
403 |
+
*/
|
404 |
+
public function getGraphEdge($subclassName = null, $auto_prefix = true)
|
405 |
+
{
|
406 |
+
$factory = new GraphNodeFactory($this);
|
407 |
+
|
408 |
+
return $factory->makeGraphEdge($subclassName, $auto_prefix);
|
409 |
+
}
|
410 |
+
}
|
Facebook/FileUpload/FacebookFile.php
ADDED
@@ -0,0 +1,169 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Copyright 2017 Facebook, Inc.
|
4 |
+
*
|
5 |
+
* You are hereby granted a non-exclusive, worldwide, royalty-free license to
|
6 |
+
* use, copy, modify, and distribute this software in source code or binary
|
7 |
+
* form for use in connection with the web services and APIs provided by
|
8 |
+
* Facebook.
|
9 |
+
*
|
10 |
+
* As with any software that integrates with the Facebook platform, your use
|
11 |
+
* of this software is subject to the Facebook Developer Principles and
|
12 |
+
* Policies [http://developers.facebook.com/policy/]. This copyright notice
|
13 |
+
* shall be included in all copies or substantial portions of the software.
|
14 |
+
*
|
15 |
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16 |
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17 |
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
18 |
+
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19 |
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
20 |
+
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
21 |
+
* DEALINGS IN THE SOFTWARE.
|
22 |
+
*
|
23 |
+
*/
|
24 |
+
namespace Facebook\FileUpload;
|
25 |
+
|
26 |
+
use Facebook\Exceptions\FacebookSDKException;
|
27 |
+
|
28 |
+
/**
|
29 |
+
* Class FacebookFile
|
30 |
+
*
|
31 |
+
* @package Facebook
|
32 |
+
*/
|
33 |
+
class FacebookFile
|
34 |
+
{
|
35 |
+
/**
|
36 |
+
* @var string The path to the file on the system.
|
37 |
+
*/
|
38 |
+
protected $path;
|
39 |
+
|
40 |
+
/**
|
41 |
+
* @var int The maximum bytes to read. Defaults to -1 (read all the remaining buffer).
|
42 |
+
*/
|
43 |
+
private $maxLength;
|
44 |
+
|
45 |
+
/**
|
46 |
+
* @var int Seek to the specified offset before reading. If this number is negative, no seeking will occur and reading will start from the current position.
|
47 |
+
*/
|
48 |
+
private $offset;
|
49 |
+
|
50 |
+
/**
|
51 |
+
* @var resource The stream pointing to the file.
|
52 |
+
*/
|
53 |
+
protected $stream;
|
54 |
+
|
55 |
+
/**
|
56 |
+
* Creates a new FacebookFile entity.
|
57 |
+
*
|
58 |
+
* @param string $filePath
|
59 |
+
* @param int $maxLength
|
60 |
+
* @param int $offset
|
61 |
+
*
|
62 |
+
* @throws FacebookSDKException
|
63 |
+
*/
|
64 |
+
public function __construct($filePath, $maxLength = -1, $offset = -1)
|
65 |
+
{
|
66 |
+
$this->path = $filePath;
|
67 |
+
$this->maxLength = $maxLength;
|
68 |
+
$this->offset = $offset;
|
69 |
+
$this->open();
|
70 |
+
}
|
71 |
+
|
72 |
+
/**
|
73 |
+
* Closes the stream when destructed.
|
74 |
+
*/
|
75 |
+
public function __destruct()
|
76 |
+
{
|
77 |
+
$this->close();
|
78 |
+
}
|
79 |
+
|
80 |
+
/**
|
81 |
+
* Opens a stream for the file.
|
82 |
+
*
|
83 |
+
* @throws FacebookSDKException
|
84 |
+
*/
|
85 |
+
public function open()
|
86 |
+
{
|
87 |
+
if (!$this->isRemoteFile($this->path) && !is_readable($this->path)) {
|
88 |
+
throw new FacebookSDKException('Failed to create FacebookFile entity. Unable to read resource: ' . $this->path . '.');
|
89 |
+
}
|
90 |
+
|
91 |
+
$this->stream = fopen($this->path, 'r');
|
92 |
+
|
93 |
+
if (!$this->stream) {
|
94 |
+
throw new FacebookSDKException('Failed to create FacebookFile entity. Unable to open resource: ' . $this->path . '.');
|
95 |
+
}
|
96 |
+
}
|
97 |
+
|
98 |
+
/**
|
99 |
+
* Stops the file stream.
|
100 |
+
*/
|
101 |
+
public function close()
|
102 |
+
{
|
103 |
+
if (is_resource($this->stream)) {
|
104 |
+
fclose($this->stream);
|
105 |
+
}
|
106 |
+
}
|
107 |
+
|
108 |
+
/**
|
109 |
+
* Return the contents of the file.
|
110 |
+
*
|
111 |
+
* @return string
|
112 |
+
*/
|
113 |
+
public function getContents()
|
114 |
+
{
|
115 |
+
return stream_get_contents($this->stream, $this->maxLength, $this->offset);
|
116 |
+
}
|
117 |
+
|
118 |
+
/**
|
119 |
+
* Return the name of the file.
|
120 |
+
*
|
121 |
+
* @return string
|
122 |
+
*/
|
123 |
+
public function getFileName()
|
124 |
+
{
|
125 |
+
return basename($this->path);
|
126 |
+
}
|
127 |
+
|
128 |
+
/**
|
129 |
+
* Return the path of the file.
|
130 |
+
*
|
131 |
+
* @return string
|
132 |
+
*/
|
133 |
+
public function getFilePath()
|
134 |
+
{
|
135 |
+
return $this->path;
|
136 |
+
}
|
137 |
+
|
138 |
+
/**
|
139 |
+
* Return the size of the file.
|
140 |
+
*
|
141 |
+
* @return int
|
142 |
+
*/
|
143 |
+
public function getSize()
|
144 |
+
{
|
145 |
+
return filesize($this->path);
|
146 |
+
}
|
147 |
+
|
148 |
+
/**
|
149 |
+
* Return the mimetype of the file.
|
150 |
+
*
|
151 |
+
* @return string
|
152 |
+
*/
|
153 |
+
public function getMimetype()
|
154 |
+
{
|
155 |
+
return Mimetypes::getInstance()->fromFilename($this->path) ?: 'text/plain';
|
156 |
+
}
|
157 |
+
|
158 |
+
/**
|
159 |
+
* Returns true if the path to the file is remote.
|
160 |
+
*
|
161 |
+
* @param string $pathToFile
|
162 |
+
*
|
163 |
+
* @return boolean
|
164 |
+
*/
|
165 |
+
protected function isRemoteFile($pathToFile)
|
166 |
+
{
|
167 |
+
return preg_match('/^(https?|ftp):\/\/.*/', $pathToFile) === 1;
|
168 |
+
}
|
169 |
+
}
|
Facebook/FileUpload/FacebookResumableUploader.php
ADDED
@@ -0,0 +1,167 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Copyright 2017 Facebook, Inc.
|
4 |
+
*
|
5 |
+
* You are hereby granted a non-exclusive, worldwide, royalty-free license to
|
6 |
+
* use, copy, modify, and distribute this software in source code or binary
|
7 |
+
* form for use in connection with the web services and APIs provided by
|
8 |
+
* Facebook.
|
9 |
+
*
|
10 |
+
* As with any software that integrates with the Facebook platform, your use
|
11 |
+
* of this software is subject to the Facebook Developer Principles and
|
12 |
+
* Policies [http://developers.facebook.com/policy/]. This copyright notice
|
13 |
+
* shall be included in all copies or substantial portions of the software.
|
14 |
+
*
|
15 |
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16 |
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17 |
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
18 |
+
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19 |
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
20 |
+
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
21 |
+
* DEALINGS IN THE SOFTWARE.
|
22 |
+
*
|
23 |
+
*/
|
24 |
+
namespace Facebook\FileUpload;
|
25 |
+
|
26 |
+
use Facebook\Authentication\AccessToken;
|
27 |
+
use Facebook\Exceptions\FacebookResponseException;
|
28 |
+
use Facebook\Exceptions\FacebookResumableUploadException;
|
29 |
+
use Facebook\Exceptions\FacebookSDKException;
|
30 |
+
use Facebook\FacebookApp;
|
31 |
+
use Facebook\FacebookClient;
|
32 |
+
use Facebook\FacebookRequest;
|
33 |
+
|
34 |
+
/**
|
35 |
+
* Class FacebookResumableUploader
|
36 |
+
*
|
37 |
+
* @package Facebook
|
38 |
+
*/
|
39 |
+
class FacebookResumableUploader
|
40 |
+
{
|
41 |
+
/**
|
42 |
+
* @var FacebookApp
|
43 |
+
*/
|
44 |
+
protected $app;
|
45 |
+
|
46 |
+
/**
|
47 |
+
* @var string
|
48 |
+
*/
|
49 |
+
protected $accessToken;
|
50 |
+
|
51 |
+
/**
|
52 |
+
* @var FacebookClient The Facebook client service.
|
53 |
+
*/
|
54 |
+
protected $client;
|
55 |
+
|
56 |
+
/**
|
57 |
+
* @var string Graph version to use for this request.
|
58 |
+
*/
|
59 |
+
protected $graphVersion;
|
60 |
+
|
61 |
+
/**
|
62 |
+
* @param FacebookApp $app
|
63 |
+
* @param FacebookClient $client
|
64 |
+
* @param AccessToken|string|null $accessToken
|
65 |
+
* @param string $graphVersion
|
66 |
+
*/
|
67 |
+
public function __construct(FacebookApp $app, FacebookClient $client, $accessToken, $graphVersion)
|
68 |
+
{
|
69 |
+
$this->app = $app;
|
70 |
+
$this->client = $client;
|
71 |
+
$this->accessToken = $accessToken;
|
72 |
+
$this->graphVersion = $graphVersion;
|
73 |
+
}
|
74 |
+
|
75 |
+
/**
|
76 |
+
* Upload by chunks - start phase
|
77 |
+
*
|
78 |
+
* @param string $endpoint
|
79 |
+
* @param FacebookFile $file
|
80 |
+
*
|
81 |
+
* @return FacebookTransferChunk
|
82 |
+
*
|
83 |
+
* @throws FacebookSDKException
|
84 |
+
*/
|
85 |
+
public function start($endpoint, FacebookFile $file)
|
86 |
+
{
|
87 |
+
$params = [
|
88 |
+
'upload_phase' => 'start',
|
89 |
+
'file_size' => $file->getSize(),
|
90 |
+
];
|
91 |
+
$response = $this->sendUploadRequest($endpoint, $params);
|
92 |
+
|
93 |
+
return new FacebookTransferChunk($file, $response['upload_session_id'], $response['video_id'], $response['start_offset'], $response['end_offset']);
|
94 |
+
}
|
95 |
+
|
96 |
+
/**
|
97 |
+
* Upload by chunks - transfer phase
|
98 |
+
*
|
99 |
+
* @param string $endpoint
|
100 |
+
* @param FacebookTransferChunk $chunk
|
101 |
+
* @param boolean $allowToThrow
|
102 |
+
*
|
103 |
+
* @return FacebookTransferChunk
|
104 |
+
*
|
105 |
+
* @throws FacebookResponseException
|
106 |
+
*/
|
107 |
+
public function transfer($endpoint, FacebookTransferChunk $chunk, $allowToThrow = false)
|
108 |
+
{
|
109 |
+
$params = [
|
110 |
+
'upload_phase' => 'transfer',
|
111 |
+
'upload_session_id' => $chunk->getUploadSessionId(),
|
112 |
+
'start_offset' => $chunk->getStartOffset(),
|
113 |
+
'video_file_chunk' => $chunk->getPartialFile(),
|
114 |
+
];
|
115 |
+
|
116 |
+
try {
|
117 |
+
$response = $this->sendUploadRequest($endpoint, $params);
|
118 |
+
} catch (FacebookResponseException $e) {
|
119 |
+
$preException = $e->getPrevious();
|
120 |
+
if ($allowToThrow || !$preException instanceof FacebookResumableUploadException) {
|
121 |
+
throw $e;
|
122 |
+
}
|
123 |
+
|
124 |
+
// Return the same chunk entity so it can be retried.
|
125 |
+
return $chunk;
|
126 |
+
}
|
127 |
+
|
128 |
+
return new FacebookTransferChunk($chunk->getFile(), $chunk->getUploadSessionId(), $chunk->getVideoId(), $response['start_offset'], $response['end_offset']);
|
129 |
+
}
|
130 |
+
|
131 |
+
/**
|
132 |
+
* Upload by chunks - finish phase
|
133 |
+
*
|
134 |
+
* @param string $endpoint
|
135 |
+
* @param string $uploadSessionId
|
136 |
+
* @param array $metadata The metadata associated with the file.
|
137 |
+
*
|
138 |
+
* @return boolean
|
139 |
+
*
|
140 |
+
* @throws FacebookSDKException
|
141 |
+
*/
|
142 |
+
public function finish($endpoint, $uploadSessionId, $metadata = [])
|
143 |
+
{
|
144 |
+
$params = array_merge($metadata, [
|
145 |
+
'upload_phase' => 'finish',
|
146 |
+
'upload_session_id' => $uploadSessionId,
|
147 |
+
]);
|
148 |
+
$response = $this->sendUploadRequest($endpoint, $params);
|
149 |
+
|
150 |
+
return $response['success'];
|
151 |
+
}
|
152 |
+
|
153 |
+
/**
|
154 |
+
* Helper to make a FacebookRequest and send it.
|
155 |
+
*
|
156 |
+
* @param string $endpoint The endpoint to POST to.
|
157 |
+
* @param array $params The params to send with the request.
|
158 |
+
*
|
159 |
+
* @return array
|
160 |
+
*/
|
161 |
+
private function sendUploadRequest($endpoint, $params = [])
|
162 |
+
{
|
163 |
+
$request = new FacebookRequest($this->app, $this->accessToken, 'POST', $endpoint, $params, null, $this->graphVersion);
|
164 |
+
|
165 |
+
return $this->client->sendRequest($request)->getDecodedBody();
|
166 |
+
}
|
167 |
+
}
|
Facebook/FileUpload/FacebookTransferChunk.php
ADDED
@@ -0,0 +1,133 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Copyright 2017 Facebook, Inc.
|
4 |
+
*
|
5 |
+
* You are hereby granted a non-exclusive, worldwide, royalty-free license to
|
6 |
+
* use, copy, modify, and distribute this software in source code or binary
|
7 |
+
* form for use in connection with the web services and APIs provided by
|
8 |
+
* Facebook.
|
9 |
+
*
|
10 |
+
* As with any software that integrates with the Facebook platform, your use
|
11 |
+
* of this software is subject to the Facebook Developer Principles and
|
12 |
+
* Policies [http://developers.facebook.com/policy/]. This copyright notice
|
13 |
+
* shall be included in all copies or substantial portions of the software.
|
14 |
+
*
|
15 |
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16 |
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17 |
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
18 |
+
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19 |
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
20 |
+
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
21 |
+
* DEALINGS IN THE SOFTWARE.
|
22 |
+
*
|
23 |
+
*/
|
24 |
+
namespace Facebook\FileUpload;
|
25 |
+
|
26 |
+
/**
|
27 |
+
* Class FacebookTransferChunk
|
28 |
+
*
|
29 |
+
* @package Facebook
|
30 |
+
*/
|
31 |
+
class FacebookTransferChunk
|
32 |
+
{
|
33 |
+
/**
|
34 |
+
* @var FacebookFile The file to chunk during upload.
|
35 |
+
*/
|
36 |
+
private $file;
|
37 |
+
|
38 |
+
/**
|
39 |
+
* @var int The ID of the upload session.
|
40 |
+
*/
|
41 |
+
private $uploadSessionId;
|
42 |
+
|
43 |
+
/**
|
44 |
+
* @var int Start byte position of the next file chunk.
|
45 |
+
*/
|
46 |
+
private $startOffset;
|
47 |
+
|
48 |
+
/**
|
49 |
+
* @var int End byte position of the next file chunk.
|
50 |
+
*/
|
51 |
+
private $endOffset;
|
52 |
+
|
53 |
+
/**
|
54 |
+
* @var int The ID of the video.
|
55 |
+
*/
|
56 |
+
private $videoId;
|
57 |
+
|
58 |
+
/**
|
59 |
+
* @param FacebookFile $file
|
60 |
+
* @param int $uploadSessionId
|
61 |
+
* @param int $videoId
|
62 |
+
* @param int $startOffset
|
63 |
+
* @param int $endOffset
|
64 |
+
*/
|
65 |
+
public function __construct(FacebookFile $file, $uploadSessionId, $videoId, $startOffset, $endOffset)
|
66 |
+
{
|
67 |
+
$this->file = $file;
|
68 |
+
$this->uploadSessionId = $uploadSessionId;
|
69 |
+
$this->videoId = $videoId;
|
70 |
+
$this->startOffset = $startOffset;
|
71 |
+
$this->endOffset = $endOffset;
|
72 |
+
}
|
73 |
+
|
74 |
+
/**
|
75 |
+
* Return the file entity.
|
76 |
+
*
|
77 |
+
* @return FacebookFile
|
78 |
+
*/
|
79 |
+
public function getFile()
|
80 |
+
{
|
81 |
+
return $this->file;
|
82 |
+
}
|
83 |
+
|
84 |
+
/**
|
85 |
+
* Return a FacebookFile entity with partial content.
|
86 |
+
*
|
87 |
+
* @return FacebookFile
|
88 |
+
*/
|
89 |
+
public function getPartialFile()
|
90 |
+
{
|
91 |
+
$maxLength = $this->endOffset - $this->startOffset;
|
92 |
+
|
93 |
+
return new FacebookFile($this->file->getFilePath(), $maxLength, $this->startOffset);
|
94 |
+
}
|
95 |
+
|
96 |
+
/**
|
97 |
+
* Return upload session Id
|
98 |
+
*
|
99 |
+
* @return int
|
100 |
+
*/
|
101 |
+
public function getUploadSessionId()
|
102 |
+
{
|
103 |
+
return $this->uploadSessionId;
|
104 |
+
}
|
105 |
+
|
106 |
+
/**
|
107 |
+
* Check whether is the last chunk
|
108 |
+
*
|
109 |
+
* @return bool
|
110 |
+
*/
|
111 |
+
public function isLastChunk()
|
112 |
+
{
|
113 |
+
return $this->startOffset === $this->endOffset;
|
114 |
+
}
|
115 |
+
|
116 |
+
/**
|
117 |
+
* @return int
|
118 |
+
*/
|
119 |
+
public function getStartOffset()
|
120 |
+
{
|
121 |
+
return $this->startOffset;
|
122 |
+
}
|
123 |
+
|
124 |
+
/**
|
125 |
+
* Get uploaded video Id
|
126 |
+
*
|
127 |
+
* @return int
|
128 |
+
*/
|
129 |
+
public function getVideoId()
|
130 |
+
{
|
131 |
+
return $this->videoId;
|
132 |
+
}
|
133 |
+
}
|
Facebook/FileUpload/FacebookVideo.php
ADDED
@@ -0,0 +1,33 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Copyright 2017 Facebook, Inc.
|
4 |
+
*
|
5 |
+
* You are hereby granted a non-exclusive, worldwide, royalty-free license to
|
6 |
+
* use, copy, modify, and distribute this software in source code or binary
|
7 |
+
* form for use in connection with the web services and APIs provided by
|
8 |
+
* Facebook.
|
9 |
+
*
|
10 |
+
* As with any software that integrates with the Facebook platform, your use
|
11 |
+
* of this software is subject to the Facebook Developer Principles and
|
12 |
+
* Policies [http://developers.facebook.com/policy/]. This copyright notice
|
13 |
+
* shall be included in all copies or substantial portions of the software.
|
14 |
+
*
|
15 |
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16 |
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17 |
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
18 |
+
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19 |
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
20 |
+
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
21 |
+
* DEALINGS IN THE SOFTWARE.
|
22 |
+
*
|
23 |
+
*/
|
24 |
+
namespace Facebook\FileUpload;
|
25 |
+
|
26 |
+
/**
|
27 |
+
* Class FacebookVideo
|
28 |
+
*
|
29 |
+
* @package Facebook
|
30 |
+
*/
|
31 |
+
class FacebookVideo extends FacebookFile
|
32 |
+
{
|
33 |
+
}
|
Facebook/FileUpload/Mimetypes.php
ADDED
@@ -0,0 +1,988 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Copyright 2017 Facebook, Inc.
|
4 |
+
*
|
5 |
+
* You are hereby granted a non-exclusive, worldwide, royalty-free license to
|
6 |
+
* use, copy, modify, and distribute this software in source code or binary
|
7 |
+
* form for use in connection with the web services and APIs provided by
|
8 |
+
* Facebook.
|
9 |
+
*
|
10 |
+
* As with any software that integrates with the Facebook platform, your use
|
11 |
+
* of this software is subject to the Facebook Developer Principles and
|
12 |
+
* Policies [http://developers.facebook.com/policy/]. This copyright notice
|
13 |
+
* shall be included in all copies or substantial portions of the software.
|
14 |
+
*
|
15 |
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16 |
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17 |
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
18 |
+
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19 |
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
20 |
+
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
21 |
+
* DEALINGS IN THE SOFTWARE.
|
22 |
+
*
|
23 |
+
*/
|
24 |
+
namespace Facebook\FileUpload;
|
25 |
+
|
26 |
+
/**
|
27 |
+
* Provides mappings of file extensions to mimetypes
|
28 |
+
*
|
29 |
+
* Taken from Guzzle
|
30 |
+
*
|
31 |
+
* @see https://github.com/guzzle/guzzle/blob/master/src/Mimetypes.php
|
32 |
+
*
|
33 |
+
* @link http://svn.apache.org/repos/asf/httpd/httpd/branches/1.3.x/conf/mime.types
|
34 |
+
*/
|
35 |
+
class Mimetypes
|
36 |
+
{
|
37 |
+
/** @var self */
|
38 |
+
protected static $instance;
|
39 |
+
|
40 |
+
/** @var array Mapping of extension to mimetype */
|
41 |
+
protected $mimetypes = [
|
42 |
+
'3dml' => 'text/vnd.in3d.3dml',
|
43 |
+
'3g2' => 'video/3gpp2',
|
44 |
+
'3gp' => 'video/3gpp',
|
45 |
+
'7z' => 'application/x-7z-compressed',
|
46 |
+
'aab' => 'application/x-authorware-bin',
|
47 |
+
'aac' => 'audio/x-aac',
|
48 |
+
'aam' => 'application/x-authorware-map',
|
49 |
+
'aas' => 'application/x-authorware-seg',
|
50 |
+
'abw' => 'application/x-abiword',
|
51 |
+
'ac' => 'application/pkix-attr-cert',
|
52 |
+
'acc' => 'application/vnd.americandynamics.acc',
|
53 |
+
'ace' => 'application/x-ace-compressed',
|
54 |
+
'acu' => 'application/vnd.acucobol',
|
55 |
+
'acutc' => 'application/vnd.acucorp',
|
56 |
+
'adp' => 'audio/adpcm',
|
57 |
+
'aep' => 'application/vnd.audiograph',
|
58 |
+
'afm' => 'application/x-font-type1',
|
59 |
+
'afp' => 'application/vnd.ibm.modcap',
|
60 |
+
'ahead' => 'application/vnd.ahead.space',
|
61 |
+
'ai' => 'application/postscript',
|
62 |
+
'aif' => 'audio/x-aiff',
|
63 |
+
'aifc' => 'audio/x-aiff',
|
64 |
+
'aiff' => 'audio/x-aiff',
|
65 |
+
'air' => 'application/vnd.adobe.air-application-installer-package+zip',
|
66 |
+
'ait' => 'application/vnd.dvb.ait',
|
67 |
+
'ami' => 'application/vnd.amiga.ami',
|
68 |
+
'apk' => 'application/vnd.android.package-archive',
|
69 |
+
'application' => 'application/x-ms-application',
|
70 |
+
'apr' => 'application/vnd.lotus-approach',
|
71 |
+
'asa' => 'text/plain',
|
72 |
+
'asax' => 'application/octet-stream',
|
73 |
+
'asc' => 'application/pgp-signature',
|
74 |
+
'ascx' => 'text/plain',
|
75 |
+
'asf' => 'video/x-ms-asf',
|
76 |
+
'ashx' => 'text/plain',
|
77 |
+
'asm' => 'text/x-asm',
|
78 |
+
'asmx' => 'text/plain',
|
79 |
+
'aso' => 'application/vnd.accpac.simply.aso',
|
80 |
+
'asp' => 'text/plain',
|
81 |
+
'aspx' => 'text/plain',
|
82 |
+
'asx' => 'video/x-ms-asf',
|
83 |
+
'atc' => 'application/vnd.acucorp',
|
84 |
+
'atom' => 'application/atom+xml',
|
85 |
+
'atomcat' => 'application/atomcat+xml',
|
86 |
+
'atomsvc' => 'application/atomsvc+xml',
|
87 |
+
'atx' => 'application/vnd.antix.game-component',
|
88 |
+
'au' => 'audio/basic',
|
89 |
+
'avi' => 'video/x-msvideo',
|
90 |
+
'aw' => 'application/applixware',
|
91 |
+
'axd' => 'text/plain',
|
92 |
+
'azf' => 'application/vnd.airzip.filesecure.azf',
|
93 |
+
'azs' => 'application/vnd.airzip.filesecure.azs',
|
94 |
+
'azw' => 'application/vnd.amazon.ebook',
|
95 |
+
'bat' => 'application/x-msdownload',
|
96 |
+
'bcpio' => 'application/x-bcpio',
|
97 |
+
'bdf' => 'application/x-font-bdf',
|
98 |
+
'bdm' => 'application/vnd.syncml.dm+wbxml',
|
99 |
+
'bed' => 'application/vnd.realvnc.bed',
|
100 |
+
'bh2' => 'application/vnd.fujitsu.oasysprs',
|
101 |
+
'bin' => 'application/octet-stream',
|
102 |
+
'bmi' => 'application/vnd.bmi',
|
103 |
+
'bmp' => 'image/bmp',
|
104 |
+
'book' => 'application/vnd.framemaker',
|
105 |
+
'box' => 'application/vnd.previewsystems.box',
|
106 |
+
'boz' => 'application/x-bzip2',
|
107 |
+
'bpk' => 'application/octet-stream',
|
108 |
+
'btif' => 'image/prs.btif',
|
109 |
+
'bz' => 'application/x-bzip',
|
110 |
+
'bz2' => 'application/x-bzip2',
|
111 |
+
'c' => 'text/x-c',
|
112 |
+
'c11amc' => 'application/vnd.cluetrust.cartomobile-config',
|
113 |
+
'c11amz' => 'application/vnd.cluetrust.cartomobile-config-pkg',
|
114 |
+
'c4d' => 'application/vnd.clonk.c4group',
|
115 |
+
'c4f' => 'application/vnd.clonk.c4group',
|
116 |
+
'c4g' => 'application/vnd.clonk.c4group',
|
117 |
+
'c4p' => 'application/vnd.clonk.c4group',
|
118 |
+
'c4u' => 'application/vnd.clonk.c4group',
|
119 |
+
'cab' => 'application/vnd.ms-cab-compressed',
|
120 |
+
'car' => 'application/vnd.curl.car',
|
121 |
+
'cat' => 'application/vnd.ms-pki.seccat',
|
122 |
+
'cc' => 'text/x-c',
|
123 |
+
'cct' => 'application/x-director',
|
124 |
+
'ccxml' => 'application/ccxml+xml',
|
125 |
+
'cdbcmsg' => 'application/vnd.contact.cmsg',
|
126 |
+
'cdf' => 'application/x-netcdf',
|
127 |
+
'cdkey' => 'application/vnd.mediastation.cdkey',
|
128 |
+
'cdmia' => 'application/cdmi-capability',
|
129 |
+
'cdmic' => 'application/cdmi-container',
|
130 |
+
'cdmid' => 'application/cdmi-domain',
|
131 |
+
'cdmio' => 'application/cdmi-object',
|
132 |
+
'cdmiq' => 'application/cdmi-queue',
|
133 |
+
'cdx' => 'chemical/x-cdx',
|
134 |
+
'cdxml' => 'application/vnd.chemdraw+xml',
|
135 |
+
'cdy' => 'application/vnd.cinderella',
|
136 |
+
'cer' => 'application/pkix-cert',
|
137 |
+
'cfc' => 'application/x-coldfusion',
|
138 |
+
'cfm' => 'application/x-coldfusion',
|
139 |
+
'cgm' => 'image/cgm',
|
140 |
+
'chat' => 'application/x-chat',
|
141 |
+
'chm' => 'application/vnd.ms-htmlhelp',
|
142 |
+
'chrt' => 'application/vnd.kde.kchart',
|
143 |
+
'cif' => 'chemical/x-cif',
|
144 |
+
'cii' => 'application/vnd.anser-web-certificate-issue-initiation',
|
145 |
+
'cil' => 'application/vnd.ms-artgalry',
|
146 |
+
'cla' => 'application/vnd.claymore',
|
147 |
+
'class' => 'application/java-vm',
|
148 |
+
'clkk' => 'application/vnd.crick.clicker.keyboard',
|
149 |
+
'clkp' => 'application/vnd.crick.clicker.palette',
|
150 |
+
'clkt' => 'application/vnd.crick.clicker.template',
|
151 |
+
'clkw' => 'application/vnd.crick.clicker.wordbank',
|
152 |
+
'clkx' => 'application/vnd.crick.clicker',
|
153 |
+
'clp' => 'application/x-msclip',
|
154 |
+
'cmc' => 'application/vnd.cosmocaller',
|
155 |
+
'cmdf' => 'chemical/x-cmdf',
|
156 |
+
'cml' => 'chemical/x-cml',
|
157 |
+
'cmp' => 'application/vnd.yellowriver-custom-menu',
|
158 |
+
'cmx' => 'image/x-cmx',
|
159 |
+
'cod' => 'application/vnd.rim.cod',
|
160 |
+
'com' => 'application/x-msdownload',
|
161 |
+
'conf' => 'text/plain',
|
162 |
+
'cpio' => 'application/x-cpio',
|
163 |
+
'cpp' => 'text/x-c',
|
164 |
+
'cpt' => 'application/mac-compactpro',
|
165 |
+
'crd' => 'application/x-mscardfile',
|
166 |
+
'crl' => 'application/pkix-crl',
|
167 |
+
'crt' => 'application/x-x509-ca-cert',
|
168 |
+
'cryptonote' => 'application/vnd.rig.cryptonote',
|
169 |
+
'cs' => 'text/plain',
|
170 |
+
'csh' => 'application/x-csh',
|
171 |
+
'csml' => 'chemical/x-csml',
|
172 |
+
'csp' => 'application/vnd.commonspace',
|
173 |
+
'css' => 'text/css',
|
174 |
+
'cst' => 'application/x-director',
|
175 |
+
'csv' => 'text/csv',
|
176 |
+
'cu' => 'application/cu-seeme',
|
177 |
+
'curl' => 'text/vnd.curl',
|
178 |
+
'cww' => 'application/prs.cww',
|
179 |
+
'cxt' => 'application/x-director',
|
180 |
+
'cxx' => 'text/x-c',
|
181 |
+
'dae' => 'model/vnd.collada+xml',
|
182 |
+
'daf' => 'application/vnd.mobius.daf',
|
183 |
+
'dataless' => 'application/vnd.fdsn.seed',
|
184 |
+
'davmount' => 'application/davmount+xml',
|
185 |
+
'dcr' => 'application/x-director',
|
186 |
+
'dcurl' => 'text/vnd.curl.dcurl',
|
187 |
+
'dd2' => 'application/vnd.oma.dd2+xml',
|
188 |
+
'ddd' => 'application/vnd.fujixerox.ddd',
|
189 |
+
'deb' => 'application/x-debian-package',
|
190 |
+
'def' => 'text/plain',
|
191 |
+
'deploy' => 'application/octet-stream',
|
192 |
+
'der' => 'application/x-x509-ca-cert',
|
193 |
+
'dfac' => 'application/vnd.dreamfactory',
|
194 |
+
'dic' => 'text/x-c',
|
195 |
+
'dir' => 'application/x-director',
|
196 |
+
'dis' => 'application/vnd.mobius.dis',
|
197 |
+
'dist' => 'application/octet-stream',
|
198 |
+
'distz' => 'application/octet-stream',
|
199 |
+
'djv' => 'image/vnd.djvu',
|
200 |
+
'djvu' => 'image/vnd.djvu',
|
201 |
+
'dll' => 'application/x-msdownload',
|
202 |
+
'dmg' => 'application/octet-stream',
|
203 |
+
'dms' => 'application/octet-stream',
|
204 |
+
'dna' => 'application/vnd.dna',
|
205 |
+
'doc' => 'application/msword',
|
206 |
+
'docm' => 'application/vnd.ms-word.document.macroenabled.12',
|
207 |
+
'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
|
208 |
+
'dot' => 'application/msword',
|
209 |
+
'dotm' => 'application/vnd.ms-word.template.macroenabled.12',
|
210 |
+
'dotx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.template',
|
211 |
+
'dp' => 'application/vnd.osgi.dp',
|
212 |
+
'dpg' => 'application/vnd.dpgraph',
|
213 |
+
'dra' => 'audio/vnd.dra',
|
214 |
+
'dsc' => 'text/prs.lines.tag',
|
215 |
+
'dssc' => 'application/dssc+der',
|
216 |
+
'dtb' => 'application/x-dtbook+xml',
|
217 |
+
'dtd' => 'application/xml-dtd',
|
218 |
+
'dts' => 'audio/vnd.dts',
|
219 |
+
'dtshd' => 'audio/vnd.dts.hd',
|
220 |
+
'dump' => 'application/octet-stream',
|
221 |
+
'dvi' => 'application/x-dvi',
|
222 |
+
'dwf' => 'model/vnd.dwf',
|
223 |
+
'dwg' => 'image/vnd.dwg',
|
224 |
+
'dxf' => 'image/vnd.dxf',
|
225 |
+
'dxp' => 'application/vnd.spotfire.dxp',
|
226 |
+
'dxr' => 'application/x-director',
|
227 |
+
'ecelp4800' => 'audio/vnd.nuera.ecelp4800',
|
228 |
+
'ecelp7470' => 'audio/vnd.nuera.ecelp7470',
|
229 |
+
'ecelp9600' => 'audio/vnd.nuera.ecelp9600',
|
230 |
+
'ecma' => 'application/ecmascript',
|
231 |
+
'edm' => 'application/vnd.novadigm.edm',
|
232 |
+
'edx' => 'application/vnd.novadigm.edx',
|
233 |
+
'efif' => 'application/vnd.picsel',
|
234 |
+
'ei6' => 'application/vnd.pg.osasli',
|
235 |
+
'elc' => 'application/octet-stream',
|
236 |
+
'eml' => 'message/rfc822',
|
237 |
+
'emma' => 'application/emma+xml',
|
238 |
+
'eol' => 'audio/vnd.digital-winds',
|
239 |
+
'eot' => 'application/vnd.ms-fontobject',
|
240 |
+
'eps' => 'application/postscript',
|
241 |
+
'epub' => 'application/epub+zip',
|
242 |
+
'es3' => 'application/vnd.eszigno3+xml',
|
243 |
+
'esf' => 'application/vnd.epson.esf',
|
244 |
+
'et3' => 'application/vnd.eszigno3+xml',
|
245 |
+
'etx' => 'text/x-setext',
|
246 |
+
'exe' => 'application/x-msdownload',
|
247 |
+
'exi' => 'application/exi',
|
248 |
+
'ext' => 'application/vnd.novadigm.ext',
|
249 |
+
'ez' => 'application/andrew-inset',
|
250 |
+
'ez2' => 'application/vnd.ezpix-album',
|
251 |
+
'ez3' => 'application/vnd.ezpix-package',
|
252 |
+
'f' => 'text/x-fortran',
|
253 |
+
'f4v' => 'video/x-f4v',
|
254 |
+
'f77' => 'text/x-fortran',
|
255 |
+
'f90' => 'text/x-fortran',
|
256 |
+
'fbs' => 'image/vnd.fastbidsheet',
|
257 |
+
'fcs' => 'application/vnd.isac.fcs',
|
258 |
+
'fdf' => 'application/vnd.fdf',
|
259 |
+
'fe_launch' => 'application/vnd.denovo.fcselayout-link',
|
260 |
+
'fg5' => 'application/vnd.fujitsu.oasysgp',
|
261 |
+
'fgd' => 'application/x-director',
|
262 |
+
'fh' => 'image/x-freehand',
|
263 |
+
'fh4' => 'image/x-freehand',
|
264 |
+
'fh5' => 'image/x-freehand',
|
265 |
+
'fh7' => 'image/x-freehand',
|
266 |
+
'fhc' => 'image/x-freehand',
|
267 |
+
'fig' => 'application/x-xfig',
|
268 |
+
'fli' => 'video/x-fli',
|
269 |
+
'flo' => 'application/vnd.micrografx.flo',
|
270 |
+
'flv' => 'video/x-flv',
|
271 |
+
'flw' => 'application/vnd.kde.kivio',
|
272 |
+
'flx' => 'text/vnd.fmi.flexstor',
|
273 |
+
'fly' => 'text/vnd.fly',
|
274 |
+
'fm' => 'application/vnd.framemaker',
|
275 |
+
'fnc' => 'application/vnd.frogans.fnc',
|
276 |
+
'for' => 'text/x-fortran',
|
277 |
+
'fpx' => 'image/vnd.fpx',
|
278 |
+
'frame' => 'application/vnd.framemaker',
|
279 |
+
'fsc' => 'application/vnd.fsc.weblaunch',
|
280 |
+
'fst' => 'image/vnd.fst',
|
281 |
+
'ftc' => 'application/vnd.fluxtime.clip',
|
282 |
+
'fti' => 'application/vnd.anser-web-funds-transfer-initiation',
|
283 |
+
'fvt' => 'video/vnd.fvt',
|
284 |
+
'fxp' => 'application/vnd.adobe.fxp',
|
285 |
+
'fxpl' => 'application/vnd.adobe.fxp',
|
286 |
+
'fzs' => 'application/vnd.fuzzysheet',
|
287 |
+
'g2w' => 'application/vnd.geoplan',
|
288 |
+
'g3' => 'image/g3fax',
|
289 |
+
'g3w' => 'application/vnd.geospace',
|
290 |
+
'gac' => 'application/vnd.groove-account',
|
291 |
+
'gdl' => 'model/vnd.gdl',
|
292 |
+
'geo' => 'application/vnd.dynageo',
|
293 |
+
'gex' => 'application/vnd.geometry-explorer',
|
294 |
+
'ggb' => 'application/vnd.geogebra.file',
|
295 |
+
'ggt' => 'application/vnd.geogebra.tool',
|
296 |
+
'ghf' => 'application/vnd.groove-help',
|
297 |
+
'gif' => 'image/gif',
|
298 |
+
'gim' => 'application/vnd.groove-identity-message',
|
299 |
+
'gmx' => 'application/vnd.gmx',
|
300 |
+
'gnumeric' => 'application/x-gnumeric',
|
301 |
+
'gph' => 'application/vnd.flographit',
|
302 |
+
'gqf' => 'application/vnd.grafeq',
|
303 |
+
'gqs' => 'application/vnd.grafeq',
|
304 |
+
'gram' => 'application/srgs',
|
305 |
+
'gre' => 'application/vnd.geometry-explorer',
|
306 |
+
'grv' => 'application/vnd.groove-injector',
|
307 |
+
'grxml' => 'application/srgs+xml',
|
308 |
+
'gsf' => 'application/x-font-ghostscript',
|
309 |
+
'gtar' => 'application/x-gtar',
|
310 |
+
'gtm' => 'application/vnd.groove-tool-message',
|
311 |
+
'gtw' => 'model/vnd.gtw',
|
312 |
+
'gv' => 'text/vnd.graphviz',
|
313 |
+
'gxt' => 'application/vnd.geonext',
|
314 |
+
'h' => 'text/x-c',
|
315 |
+
'h261' => 'video/h261',
|
316 |
+
'h263' => 'video/h263',
|
317 |
+
'h264' => 'video/h264',
|
318 |
+
'hal' => 'application/vnd.hal+xml',
|
319 |
+
'hbci' => 'application/vnd.hbci',
|
320 |
+
'hdf' => 'application/x-hdf',
|
321 |
+
'hh' => 'text/x-c',
|
322 |
+
'hlp' => 'application/winhlp',
|
323 |
+
'hpgl' => 'application/vnd.hp-hpgl',
|
324 |
+
'hpid' => 'application/vnd.hp-hpid',
|
325 |
+
'hps' => 'application/vnd.hp-hps',
|
326 |
+
'hqx' => 'application/mac-binhex40',
|
327 |
+
'hta' => 'application/octet-stream',
|
328 |
+
'htc' => 'text/html',
|
329 |
+
'htke' => 'application/vnd.kenameaapp',
|
330 |
+
'htm' => 'text/html',
|
331 |
+
'html' => 'text/html',
|
332 |
+
'hvd' => 'application/vnd.yamaha.hv-dic',
|
333 |
+
'hvp' => 'application/vnd.yamaha.hv-voice',
|
334 |
+
'hvs' => 'application/vnd.yamaha.hv-script',
|
335 |
+
'i2g' => 'application/vnd.intergeo',
|
336 |
+
'icc' => 'application/vnd.iccprofile',
|
337 |
+
'ice' => 'x-conference/x-cooltalk',
|
338 |
+
'icm' => 'application/vnd.iccprofile',
|
339 |
+
'ico' => 'image/x-icon',
|
340 |
+
'ics' => 'text/calendar',
|
341 |
+
'ief' => 'image/ief',
|
342 |
+
'ifb' => 'text/calendar',
|
343 |
+
'ifm' => 'application/vnd.shana.informed.formdata',
|
344 |
+
'iges' => 'model/iges',
|
345 |
+
'igl' => 'application/vnd.igloader',
|
346 |
+
'igm' => 'application/vnd.insors.igm',
|
347 |
+
'igs' => 'model/iges',
|
348 |
+
'igx' => 'application/vnd.micrografx.igx',
|
349 |
+
'iif' => 'application/vnd.shana.informed.interchange',
|
350 |
+
'imp' => 'application/vnd.accpac.simply.imp',
|
351 |
+
'ims' => 'application/vnd.ms-ims',
|
352 |
+
'in' => 'text/plain',
|
353 |
+
'ini' => 'text/plain',
|
354 |
+
'ipfix' => 'application/ipfix',
|
355 |
+
'ipk' => 'application/vnd.shana.informed.package',
|
356 |
+
'irm' => 'application/vnd.ibm.rights-management',
|
357 |
+
'irp' => 'application/vnd.irepository.package+xml',
|
358 |
+
'iso' => 'application/octet-stream',
|
359 |
+
'itp' => 'application/vnd.shana.informed.formtemplate',
|
360 |
+
'ivp' => 'application/vnd.immervision-ivp',
|
361 |
+
'ivu' => 'application/vnd.immervision-ivu',
|
362 |
+
'jad' => 'text/vnd.sun.j2me.app-descriptor',
|
363 |
+
'jam' => 'application/vnd.jam',
|
364 |
+
'jar' => 'application/java-archive',
|
365 |
+
'java' => 'text/x-java-source',
|
366 |
+
'jisp' => 'application/vnd.jisp',
|
367 |
+
'jlt' => 'application/vnd.hp-jlyt',
|
368 |
+
'jnlp' => 'application/x-java-jnlp-file',
|
369 |
+
'joda' => 'application/vnd.joost.joda-archive',
|
370 |
+
'jpe' => 'image/jpeg',
|
371 |
+
'jpeg' => 'image/jpeg',
|
372 |
+
'jpg' => 'image/jpeg',
|
373 |
+
'jpgm' => 'video/jpm',
|
374 |
+
'jpgv' => 'video/jpeg',
|
375 |
+
'jpm' => 'video/jpm',
|
376 |
+
'js' => 'text/javascript',
|
377 |
+
'json' => 'application/json',
|
378 |
+
'kar' => 'audio/midi',
|
379 |
+
'karbon' => 'application/vnd.kde.karbon',
|
380 |
+
'kfo' => 'application/vnd.kde.kformula',
|
381 |
+
'kia' => 'application/vnd.kidspiration',
|
382 |
+
'kml' => 'application/vnd.google-earth.kml+xml',
|
383 |
+
'kmz' => 'application/vnd.google-earth.kmz',
|
384 |
+
'kne' => 'application/vnd.kinar',
|
385 |
+
'knp' => 'application/vnd.kinar',
|
386 |
+
'kon' => 'application/vnd.kde.kontour',
|
387 |
+
'kpr' => 'application/vnd.kde.kpresenter',
|
388 |
+
'kpt' => 'application/vnd.kde.kpresenter',
|
389 |
+
'ksp' => 'application/vnd.kde.kspread',
|
390 |
+
'ktr' => 'application/vnd.kahootz',
|
391 |
+
'ktx' => 'image/ktx',
|
392 |
+
'ktz' => 'application/vnd.kahootz',
|
393 |
+
'kwd' => 'application/vnd.kde.kword',
|
394 |
+
'kwt' => 'application/vnd.kde.kword',
|
395 |
+
'lasxml' => 'application/vnd.las.las+xml',
|
396 |
+
'latex' => 'application/x-latex',
|
397 |
+
'lbd' => 'application/vnd.llamagraphics.life-balance.desktop',
|
398 |
+
'lbe' => 'application/vnd.llamagraphics.life-balance.exchange+xml',
|
399 |
+
'les' => 'application/vnd.hhe.lesson-player',
|
400 |
+
'lha' => 'application/octet-stream',
|
401 |
+
'link66' => 'application/vnd.route66.link66+xml',
|
402 |
+
'list' => 'text/plain',
|
403 |
+
'list3820' => 'application/vnd.ibm.modcap',
|
404 |
+
'listafp' => 'application/vnd.ibm.modcap',
|
405 |
+
'log' => 'text/plain',
|
406 |
+
'lostxml' => 'application/lost+xml',
|
407 |
+
'lrf' => 'application/octet-stream',
|
408 |
+
'lrm' => 'application/vnd.ms-lrm',
|
409 |
+
'ltf' => 'application/vnd.frogans.ltf',
|
410 |
+
'lvp' => 'audio/vnd.lucent.voice',
|
411 |
+
'lwp' => 'application/vnd.lotus-wordpro',
|
412 |
+
'lzh' => 'application/octet-stream',
|
413 |
+
'm13' => 'application/x-msmediaview',
|
414 |
+
'm14' => 'application/x-msmediaview',
|
415 |
+
'm1v' => 'video/mpeg',
|
416 |
+
'm21' => 'application/mp21',
|
417 |
+
'm2a' => 'audio/mpeg',
|
418 |
+
'm2v' => 'video/mpeg',
|
419 |
+
'm3a' => 'audio/mpeg',
|
420 |
+
'm3u' => 'audio/x-mpegurl',
|
421 |
+
'm3u8' => 'application/vnd.apple.mpegurl',
|
422 |
+
'm4a' => 'audio/mp4',
|
423 |
+
'm4u' => 'video/vnd.mpegurl',
|
424 |
+
'm4v' => 'video/mp4',
|
425 |
+
'ma' => 'application/mathematica',
|
426 |
+
'mads' => 'application/mads+xml',
|
427 |
+
'mag' => 'application/vnd.ecowin.chart',
|
428 |
+
'maker' => 'application/vnd.framemaker',
|
429 |
+
'man' => 'text/troff',
|
430 |
+
'mathml' => 'application/mathml+xml',
|
431 |
+
'mb' => 'application/mathematica',
|
432 |
+
'mbk' => 'application/vnd.mobius.mbk',
|
433 |
+
'mbox' => 'application/mbox',
|
434 |
+
'mc1' => 'application/vnd.medcalcdata',
|
435 |
+
'mcd' => 'application/vnd.mcd',
|
436 |
+
'mcurl' => 'text/vnd.curl.mcurl',
|
437 |
+
'mdb' => 'application/x-msaccess',
|
438 |
+
'mdi' => 'image/vnd.ms-modi',
|
439 |
+
'me' => 'text/troff',
|
440 |
+
'mesh' => 'model/mesh',
|
441 |
+
'meta4' => 'application/metalink4+xml',
|
442 |
+
'mets' => 'application/mets+xml',
|
443 |
+
'mfm' => 'application/vnd.mfmp',
|
444 |
+
'mgp' => 'application/vnd.osgeo.mapguide.package',
|
445 |
+
'mgz' => 'application/vnd.proteus.magazine',
|
446 |
+
'mid' => 'audio/midi',
|
447 |
+
'midi' => 'audio/midi',
|
448 |
+
'mif' => 'application/vnd.mif',
|
449 |
+
'mime' => 'message/rfc822',
|
450 |
+
'mj2' => 'video/mj2',
|
451 |
+
'mjp2' => 'video/mj2',
|
452 |
+
'mlp' => 'application/vnd.dolby.mlp',
|
453 |
+
'mmd' => 'application/vnd.chipnuts.karaoke-mmd',
|
454 |
+
'mmf' => 'application/vnd.smaf',
|
455 |
+
'mmr' => 'image/vnd.fujixerox.edmics-mmr',
|
456 |
+
'mny' => 'application/x-msmoney',
|
457 |
+
'mobi' => 'application/x-mobipocket-ebook',
|
458 |
+
'mods' => 'application/mods+xml',
|
459 |
+
'mov' => 'video/quicktime',
|
460 |
+
'movie' => 'video/x-sgi-movie',
|
461 |
+
'mp2' => 'audio/mpeg',
|
462 |
+
'mp21' => 'application/mp21',
|
463 |
+
'mp2a' => 'audio/mpeg',
|
464 |
+
'mp3' => 'audio/mpeg',
|
465 |
+
'mp4' => 'video/mp4',
|
466 |
+
'mp4a' => 'audio/mp4',
|
467 |
+
'mp4s' => 'application/mp4',
|
468 |
+
'mp4v' => 'video/mp4',
|
469 |
+
'mpc' => 'application/vnd.mophun.certificate',
|
470 |
+
'mpe' => 'video/mpeg',
|
471 |
+
'mpeg' => 'video/mpeg',
|
472 |
+
'mpg' => 'video/mpeg',
|
473 |
+
'mpg4' => 'video/mp4',
|
474 |
+
'mpga' => 'audio/mpeg',
|
475 |
+
'mpkg' => 'application/vnd.apple.installer+xml',
|
476 |
+
'mpm' => 'application/vnd.blueice.multipass',
|
477 |
+
'mpn' => 'application/vnd.mophun.application',
|
478 |
+
'mpp' => 'application/vnd.ms-project',
|
479 |
+
'mpt' => 'application/vnd.ms-project',
|
480 |
+
'mpy' => 'application/vnd.ibm.minipay',
|
481 |
+
'mqy' => 'application/vnd.mobius.mqy',
|
482 |
+
'mrc' => 'application/marc',
|
483 |
+
'mrcx' => 'application/marcxml+xml',
|
484 |
+
'ms' => 'text/troff',
|
485 |
+
'mscml' => 'application/mediaservercontrol+xml',
|
486 |
+
'mseed' => 'application/vnd.fdsn.mseed',
|
487 |
+
'mseq' => 'application/vnd.mseq',
|
488 |
+
'msf' => 'application/vnd.epson.msf',
|
489 |
+
'msh' => 'model/mesh',
|
490 |
+
'msi' => 'application/x-msdownload',
|
491 |
+
'msl' => 'application/vnd.mobius.msl',
|
492 |
+
'msty' => 'application/vnd.muvee.style',
|
493 |
+
'mts' => 'model/vnd.mts',
|
494 |
+
'mus' => 'application/vnd.musician',
|
495 |
+
'musicxml' => 'application/vnd.recordare.musicxml+xml',
|
496 |
+
'mvb' => 'application/x-msmediaview',
|
497 |
+
'mwf' => 'application/vnd.mfer',
|
498 |
+
'mxf' => 'application/mxf',
|
499 |
+
'mxl' => 'application/vnd.recordare.musicxml',
|
500 |
+
'mxml' => 'application/xv+xml',
|
501 |
+
'mxs' => 'application/vnd.triscape.mxs',
|
502 |
+
'mxu' => 'video/vnd.mpegurl',
|
503 |
+
'n-gage' => 'application/vnd.nokia.n-gage.symbian.install',
|
504 |
+
'n3' => 'text/n3',
|
505 |
+
'nb' => 'application/mathematica',
|
506 |
+
'nbp' => 'application/vnd.wolfram.player',
|
507 |
+
'nc' => 'application/x-netcdf',
|
508 |
+
'ncx' => 'application/x-dtbncx+xml',
|
509 |
+
'ngdat' => 'application/vnd.nokia.n-gage.data',
|
510 |
+
'nlu' => 'application/vnd.neurolanguage.nlu',
|
511 |
+
'nml' => 'application/vnd.enliven',
|
512 |
+
'nnd' => 'application/vnd.noblenet-directory',
|
513 |
+
'nns' => 'application/vnd.noblenet-sealer',
|
514 |
+
'nnw' => 'application/vnd.noblenet-web',
|
515 |
+
'npx' => 'image/vnd.net-fpx',
|
516 |
+
'nsf' => 'application/vnd.lotus-notes',
|
517 |
+
'oa2' => 'application/vnd.fujitsu.oasys2',
|
518 |
+
'oa3' => 'application/vnd.fujitsu.oasys3',
|
519 |
+
'oas' => 'application/vnd.fujitsu.oasys',
|
520 |
+
'obd' => 'application/x-msbinder',
|
521 |
+
'oda' => 'application/oda',
|
522 |
+
'odb' => 'application/vnd.oasis.opendocument.database',
|
523 |
+
'odc' => 'application/vnd.oasis.opendocument.chart',
|
524 |
+
'odf' => 'application/vnd.oasis.opendocument.formula',
|
525 |
+
'odft' => 'application/vnd.oasis.opendocument.formula-template',
|
526 |
+
'odg' => 'application/vnd.oasis.opendocument.graphics',
|
527 |
+
'odi' => 'application/vnd.oasis.opendocument.image',
|
528 |
+
'odm' => 'application/vnd.oasis.opendocument.text-master',
|
529 |
+
'odp' => 'application/vnd.oasis.opendocument.presentation',
|
530 |
+
'ods' => 'application/vnd.oasis.opendocument.spreadsheet',
|
531 |
+
'odt' => 'application/vnd.oasis.opendocument.text',
|
532 |
+
'oga' => 'audio/ogg',
|
533 |
+
'ogg' => 'audio/ogg',
|
534 |
+
'ogv' => 'video/ogg',
|
535 |
+
'ogx' => 'application/ogg',
|
536 |
+
'onepkg' => 'application/onenote',
|
537 |
+
'onetmp' => 'application/onenote',
|
538 |
+
'onetoc' => 'application/onenote',
|
539 |
+
'onetoc2' => 'application/onenote',
|
540 |
+
'opf' => 'application/oebps-package+xml',
|
541 |
+
'oprc' => 'application/vnd.palm',
|
542 |
+
'org' => 'application/vnd.lotus-organizer',
|
543 |
+
'osf' => 'application/vnd.yamaha.openscoreformat',
|
544 |
+
'osfpvg' => 'application/vnd.yamaha.openscoreformat.osfpvg+xml',
|
545 |
+
'otc' => 'application/vnd.oasis.opendocument.chart-template',
|
546 |
+
'otf' => 'application/x-font-otf',
|
547 |
+
'otg' => 'application/vnd.oasis.opendocument.graphics-template',
|
548 |
+
'oth' => 'application/vnd.oasis.opendocument.text-web',
|
549 |
+
'oti' => 'application/vnd.oasis.opendocument.image-template',
|
550 |
+
'otp' => 'application/vnd.oasis.opendocument.presentation-template',
|
551 |
+
'ots' => 'application/vnd.oasis.opendocument.spreadsheet-template',
|
552 |
+
'ott' => 'application/vnd.oasis.opendocument.text-template',
|
553 |
+
'oxt' => 'application/vnd.openofficeorg.extension',
|
554 |
+
'p' => 'text/x-pascal',
|
555 |
+
'p10' => 'application/pkcs10',
|
556 |
+
'p12' => 'application/x-pkcs12',
|
557 |
+
'p7b' => 'application/x-pkcs7-certificates',
|
558 |
+
'p7c' => 'application/pkcs7-mime',
|
559 |
+
'p7m' => 'application/pkcs7-mime',
|
560 |
+
'p7r' => 'application/x-pkcs7-certreqresp',
|
561 |
+
'p7s' => 'application/pkcs7-signature',
|
562 |
+
'p8' => 'application/pkcs8',
|
563 |
+
'pas' => 'text/x-pascal',
|
564 |
+
'paw' => 'application/vnd.pawaafile',
|
565 |
+
'pbd' => 'application/vnd.powerbuilder6',
|
566 |
+
'pbm' => 'image/x-portable-bitmap',
|
567 |
+
'pcf' => 'application/x-font-pcf',
|
568 |
+
'pcl' => 'application/vnd.hp-pcl',
|
569 |
+
'pclxl' => 'application/vnd.hp-pclxl',
|
570 |
+
'pct' => 'image/x-pict',
|
571 |
+
'pcurl' => 'application/vnd.curl.pcurl',
|
572 |
+
'pcx' => 'image/x-pcx',
|
573 |
+
'pdb' => 'application/vnd.palm',
|
574 |
+
'pdf' => 'application/pdf',
|
575 |
+
'pfa' => 'application/x-font-type1',
|
576 |
+
'pfb' => 'application/x-font-type1',
|
577 |
+
'pfm' => 'application/x-font-type1',
|
578 |
+
'pfr' => 'application/font-tdpfr',
|
579 |
+
'pfx' => 'application/x-pkcs12',
|
580 |
+
'pgm' => 'image/x-portable-graymap',
|
581 |
+
'pgn' => 'application/x-chess-pgn',
|
582 |
+
'pgp' => 'application/pgp-encrypted',
|
583 |
+
'php' => 'text/x-php',
|
584 |
+
'phps' => 'application/x-httpd-phps',
|
585 |
+
'pic' => 'image/x-pict',
|
586 |
+
'pkg' => 'application/octet-stream',
|
587 |
+
'pki' => 'application/pkixcmp',
|
588 |
+
'pkipath' => 'application/pkix-pkipath',
|
589 |
+
'plb' => 'application/vnd.3gpp.pic-bw-large',
|
590 |
+
'plc' => 'application/vnd.mobius.plc',
|
591 |
+
'plf' => 'application/vnd.pocketlearn',
|
592 |
+
'pls' => 'application/pls+xml',
|
593 |
+
'pml' => 'application/vnd.ctc-posml',
|
594 |
+
'png' => 'image/png',
|
595 |
+
'pnm' => 'image/x-portable-anymap',
|
596 |
+
'portpkg' => 'application/vnd.macports.portpkg',
|
597 |
+
'pot' => 'application/vnd.ms-powerpoint',
|
598 |
+
'potm' => 'application/vnd.ms-powerpoint.template.macroenabled.12',
|
599 |
+
'potx' => 'application/vnd.openxmlformats-officedocument.presentationml.template',
|
600 |
+
'ppam' => 'application/vnd.ms-powerpoint.addin.macroenabled.12',
|
601 |
+
'ppd' => 'application/vnd.cups-ppd',
|
602 |
+
'ppm' => 'image/x-portable-pixmap',
|
603 |
+
'pps' => 'application/vnd.ms-powerpoint',
|
604 |
+
'ppsm' => 'application/vnd.ms-powerpoint.slideshow.macroenabled.12',
|
605 |
+
'ppsx' => 'application/vnd.openxmlformats-officedocument.presentationml.slideshow',
|
606 |
+
'ppt' => 'application/vnd.ms-powerpoint',
|
607 |
+
'pptm' => 'application/vnd.ms-powerpoint.presentation.macroenabled.12',
|
608 |
+
'pptx' => 'application/vnd.openxmlformats-officedocument.presentationml.presentation',
|
609 |
+
'pqa' => 'application/vnd.palm',
|
610 |
+
'prc' => 'application/x-mobipocket-ebook',
|
611 |
+
'pre' => 'application/vnd.lotus-freelance',
|
612 |
+
'prf' => 'application/pics-rules',
|
613 |
+
'ps' => 'application/postscript',
|
614 |
+
'psb' => 'application/vnd.3gpp.pic-bw-small',
|
615 |
+
'psd' => 'image/vnd.adobe.photoshop',
|
616 |
+
'psf' => 'application/x-font-linux-psf',
|
617 |
+
'pskcxml' => 'application/pskc+xml',
|
618 |
+
'ptid' => 'application/vnd.pvi.ptid1',
|
619 |
+
'pub' => 'application/x-mspublisher',
|
620 |
+
'pvb' => 'application/vnd.3gpp.pic-bw-var',
|
621 |
+
'pwn' => 'application/vnd.3m.post-it-notes',
|
622 |
+
'pya' => 'audio/vnd.ms-playready.media.pya',
|
623 |
+
'pyv' => 'video/vnd.ms-playready.media.pyv',
|
624 |
+
'qam' => 'application/vnd.epson.quickanime',
|
625 |
+
'qbo' => 'application/vnd.intu.qbo',
|
626 |
+
'qfx' => 'application/vnd.intu.qfx',
|
627 |
+
'qps' => 'application/vnd.publishare-delta-tree',
|
628 |
+
'qt' => 'video/quicktime',
|
629 |
+
'qwd' => 'application/vnd.quark.quarkxpress',
|
630 |
+
'qwt' => 'application/vnd.quark.quarkxpress',
|
631 |
+
'qxb' => 'application/vnd.quark.quarkxpress',
|
632 |
+
'qxd' => 'application/vnd.quark.quarkxpress',
|
633 |
+
'qxl' => 'application/vnd.quark.quarkxpress',
|
634 |
+
'qxt' => 'application/vnd.quark.quarkxpress',
|
635 |
+
'ra' => 'audio/x-pn-realaudio',
|
636 |
+
'ram' => 'audio/x-pn-realaudio',
|
637 |
+
'rar' => 'application/x-rar-compressed',
|
638 |
+
'ras' => 'image/x-cmu-raster',
|
639 |
+
'rb' => 'text/plain',
|
640 |
+
'rcprofile' => 'application/vnd.ipunplugged.rcprofile',
|
641 |
+
'rdf' => 'application/rdf+xml',
|
642 |
+
'rdz' => 'application/vnd.data-vision.rdz',
|
643 |
+
'rep' => 'application/vnd.businessobjects',
|
644 |
+
'res' => 'application/x-dtbresource+xml',
|
645 |
+
'resx' => 'text/xml',
|
646 |
+
'rgb' => 'image/x-rgb',
|
647 |
+
'rif' => 'application/reginfo+xml',
|
648 |
+
'rip' => 'audio/vnd.rip',
|
649 |
+
'rl' => 'application/resource-lists+xml',
|
650 |
+
'rlc' => 'image/vnd.fujixerox.edmics-rlc',
|
651 |
+
'rld' => 'application/resource-lists-diff+xml',
|
652 |
+
'rm' => 'application/vnd.rn-realmedia',
|
653 |
+
'rmi' => 'audio/midi',
|
654 |
+
'rmp' => 'audio/x-pn-realaudio-plugin',
|
655 |
+
'rms' => 'application/vnd.jcp.javame.midlet-rms',
|
656 |
+
'rnc' => 'application/relax-ng-compact-syntax',
|
657 |
+
'roff' => 'text/troff',
|
658 |
+
'rp9' => 'application/vnd.cloanto.rp9',
|
659 |
+
'rpss' => 'application/vnd.nokia.radio-presets',
|
660 |
+
'rpst' => 'application/vnd.nokia.radio-preset',
|
661 |
+
'rq' => 'application/sparql-query',
|
662 |
+
'rs' => 'application/rls-services+xml',
|
663 |
+
'rsd' => 'application/rsd+xml',
|
664 |
+
'rss' => 'application/rss+xml',
|
665 |
+
'rtf' => 'application/rtf',
|
666 |
+
'rtx' => 'text/richtext',
|
667 |
+
's' => 'text/x-asm',
|
668 |
+
'saf' => 'application/vnd.yamaha.smaf-audio',
|
669 |
+
'sbml' => 'application/sbml+xml',
|
670 |
+
'sc' => 'application/vnd.ibm.secure-container',
|
671 |
+
'scd' => 'application/x-msschedule',
|
672 |
+
'scm' => 'application/vnd.lotus-screencam',
|
673 |
+
'scq' => 'application/scvp-cv-request',
|
674 |
+
'scs' => 'application/scvp-cv-response',
|
675 |
+
'scurl' => 'text/vnd.curl.scurl',
|
676 |
+
'sda' => 'application/vnd.stardivision.draw',
|
677 |
+
'sdc' => 'application/vnd.stardivision.calc',
|
678 |
+
'sdd' => 'application/vnd.stardivision.impress',
|
679 |
+
'sdkd' => 'application/vnd.solent.sdkm+xml',
|
680 |
+
'sdkm' => 'application/vnd.solent.sdkm+xml',
|
681 |
+
'sdp' => 'application/sdp',
|
682 |
+
'sdw' => 'application/vnd.stardivision.writer',
|
683 |
+
'see' => 'application/vnd.seemail',
|
684 |
+
'seed' => 'application/vnd.fdsn.seed',
|
685 |
+
'sema' => 'application/vnd.sema',
|
686 |
+
'semd' => 'application/vnd.semd',
|
687 |
+
'semf' => 'application/vnd.semf',
|
688 |
+
'ser' => 'application/java-serialized-object',
|
689 |
+
'setpay' => 'application/set-payment-initiation',
|
690 |
+
'setreg' => 'application/set-registration-initiation',
|
691 |
+
'sfd-hdstx' => 'application/vnd.hydrostatix.sof-data',
|
692 |
+
'sfs' => 'application/vnd.spotfire.sfs',
|
693 |
+
'sgl' => 'application/vnd.stardivision.writer-global',
|
694 |
+
'sgm' => 'text/sgml',
|
695 |
+
'sgml' => 'text/sgml',
|
696 |
+
'sh' => 'application/x-sh',
|
697 |
+
'shar' => 'application/x-shar',
|
698 |
+
'shf' => 'application/shf+xml',
|
699 |
+
'sig' => 'application/pgp-signature',
|
700 |
+
'silo' => 'model/mesh',
|
701 |
+
'sis' => 'application/vnd.symbian.install',
|
702 |
+
'sisx' => 'application/vnd.symbian.install',
|
703 |
+
'sit' => 'application/x-stuffit',
|
704 |
+
'sitx' => 'application/x-stuffitx',
|
705 |
+
'skd' => 'application/vnd.koan',
|
706 |
+
'skm' => 'application/vnd.koan',
|
707 |
+
'skp' => 'application/vnd.koan',
|
708 |
+
'skt' => 'application/vnd.koan',
|
709 |
+
'sldm' => 'application/vnd.ms-powerpoint.slide.macroenabled.12',
|
710 |
+
'sldx' => 'application/vnd.openxmlformats-officedocument.presentationml.slide',
|
711 |
+
'slt' => 'application/vnd.epson.salt',
|
712 |
+
'sm' => 'application/vnd.stepmania.stepchart',
|
713 |
+
'smf' => 'application/vnd.stardivision.math',
|
714 |
+
'smi' => 'application/smil+xml',
|
715 |
+
'smil' => 'application/smil+xml',
|
716 |
+
'snd' => 'audio/basic',
|
717 |
+
'snf' => 'application/x-font-snf',
|
718 |
+
'so' => 'application/octet-stream',
|
719 |
+
'spc' => 'application/x-pkcs7-certificates',
|
720 |
+
'spf' => 'application/vnd.yamaha.smaf-phrase',
|
721 |
+
'spl' => 'application/x-futuresplash',
|
722 |
+
'spot' => 'text/vnd.in3d.spot',
|
723 |
+
'spp' => 'application/scvp-vp-response',
|
724 |
+
'spq' => 'application/scvp-vp-request',
|
725 |
+
'spx' => 'audio/ogg',
|
726 |
+
'src' => 'application/x-wais-source',
|
727 |
+
'srt' => 'application/octet-stream',
|
728 |
+
'sru' => 'application/sru+xml',
|
729 |
+
'srx' => 'application/sparql-results+xml',
|
730 |
+
'sse' => 'application/vnd.kodak-descriptor',
|
731 |
+
'ssf' => 'application/vnd.epson.ssf',
|
732 |
+
'ssml' => 'application/ssml+xml',
|
733 |
+
'st' => 'application/vnd.sailingtracker.track',
|
734 |
+
'stc' => 'application/vnd.sun.xml.calc.template',
|
735 |
+
'std' => 'application/vnd.sun.xml.draw.template',
|
736 |
+
'stf' => 'application/vnd.wt.stf',
|
737 |
+
'sti' => 'application/vnd.sun.xml.impress.template',
|
738 |
+
'stk' => 'application/hyperstudio',
|
739 |
+
'stl' => 'application/vnd.ms-pki.stl',
|
740 |
+
'str' => 'application/vnd.pg.format',
|
741 |
+
'stw' => 'application/vnd.sun.xml.writer.template',
|
742 |
+
'sub' => 'image/vnd.dvb.subtitle',
|
743 |
+
'sus' => 'application/vnd.sus-calendar',
|
744 |
+
'susp' => 'application/vnd.sus-calendar',
|
745 |
+
'sv4cpio' => 'application/x-sv4cpio',
|
746 |
+
'sv4crc' => 'application/x-sv4crc',
|
747 |
+
'svc' => 'application/vnd.dvb.service',
|
748 |
+
'svd' => 'application/vnd.svd',
|
749 |
+
'svg' => 'image/svg+xml',
|
750 |
+
'svgz' => 'image/svg+xml',
|
751 |
+
'swa' => 'application/x-director',
|
752 |
+
'swf' => 'application/x-shockwave-flash',
|
753 |
+
'swi' => 'application/vnd.aristanetworks.swi',
|
754 |
+
'sxc' => 'application/vnd.sun.xml.calc',
|
755 |
+
'sxd' => 'application/vnd.sun.xml.draw',
|
756 |
+
'sxg' => 'application/vnd.sun.xml.writer.global',
|
757 |
+
'sxi' => 'application/vnd.sun.xml.impress',
|
758 |
+
'sxm' => 'application/vnd.sun.xml.math',
|
759 |
+
'sxw' => 'application/vnd.sun.xml.writer',
|
760 |
+
't' => 'text/troff',
|
761 |
+
'tao' => 'application/vnd.tao.intent-module-archive',
|
762 |
+
'tar' => 'application/x-tar',
|
763 |
+
'tcap' => 'application/vnd.3gpp2.tcap',
|
764 |
+
'tcl' => 'application/x-tcl',
|
765 |
+
'teacher' => 'application/vnd.smart.teacher',
|
766 |
+
'tei' => 'application/tei+xml',
|
767 |
+
'teicorpus' => 'application/tei+xml',
|
768 |
+
'tex' => 'application/x-tex',
|
769 |
+
'texi' => 'application/x-texinfo',
|
770 |
+
'texinfo' => 'application/x-texinfo',
|
771 |
+
'text' => 'text/plain',
|
772 |
+
'tfi' => 'application/thraud+xml',
|
773 |
+
'tfm' => 'application/x-tex-tfm',
|
774 |
+
'thmx' => 'application/vnd.ms-officetheme',
|
775 |
+
'tif' => 'image/tiff',
|
776 |
+
'tiff' => 'image/tiff',
|
777 |
+
'tmo' => 'application/vnd.tmobile-livetv',
|
778 |
+
'torrent' => 'application/x-bittorrent',
|
779 |
+
'tpl' => 'application/vnd.groove-tool-template',
|
780 |
+
'tpt' => 'application/vnd.trid.tpt',
|
781 |
+
'tr' => 'text/troff',
|
782 |
+
'tra' => 'application/vnd.trueapp',
|
783 |
+
'trm' => 'application/x-msterminal',
|
784 |
+
'tsd' => 'application/timestamped-data',
|
785 |
+
'tsv' => 'text/tab-separated-values',
|
786 |
+
'ttc' => 'application/x-font-ttf',
|
787 |
+
'ttf' => 'application/x-font-ttf',
|
788 |
+
'ttl' => 'text/turtle',
|
789 |
+
'twd' => 'application/vnd.simtech-mindmapper',
|
790 |
+
'twds' => 'application/vnd.simtech-mindmapper',
|
791 |
+
'txd' => 'application/vnd.genomatix.tuxedo',
|
792 |
+
'txf' => 'application/vnd.mobius.txf',
|
793 |
+
'txt' => 'text/plain',
|
794 |
+
'u32' => 'application/x-authorware-bin',
|
795 |
+
'udeb' => 'application/x-debian-package',
|
796 |
+
'ufd' => 'application/vnd.ufdl',
|
797 |
+
'ufdl' => 'application/vnd.ufdl',
|
798 |
+
'umj' => 'application/vnd.umajin',
|
799 |
+
'unityweb' => 'application/vnd.unity',
|
800 |
+
'uoml' => 'application/vnd.uoml+xml',
|
801 |
+
'uri' => 'text/uri-list',
|
802 |
+
'uris' => 'text/uri-list',
|
803 |
+
'urls' => 'text/uri-list',
|
804 |
+
'ustar' => 'application/x-ustar',
|
805 |
+
'utz' => 'application/vnd.uiq.theme',
|
806 |
+
'uu' => 'text/x-uuencode',
|
807 |
+
'uva' => 'audio/vnd.dece.audio',
|
808 |
+
'uvd' => 'application/vnd.dece.data',
|
809 |
+
'uvf' => 'application/vnd.dece.data',
|
810 |
+
'uvg' => 'image/vnd.dece.graphic',
|
811 |
+
'uvh' => 'video/vnd.dece.hd',
|
812 |
+
'uvi' => 'image/vnd.dece.graphic',
|
813 |
+
'uvm' => 'video/vnd.dece.mobile',
|
814 |
+
'uvp' => 'video/vnd.dece.pd',
|
815 |
+
'uvs' => 'video/vnd.dece.sd',
|
816 |
+
'uvt' => 'application/vnd.dece.ttml+xml',
|
817 |
+
'uvu' => 'video/vnd.uvvu.mp4',
|
818 |
+
'uvv' => 'video/vnd.dece.video',
|
819 |
+
'uvva' => 'audio/vnd.dece.audio',
|
820 |
+
'uvvd' => 'application/vnd.dece.data',
|
821 |
+
'uvvf' => 'application/vnd.dece.data',
|
822 |
+
'uvvg' => 'image/vnd.dece.graphic',
|
823 |
+
'uvvh' => 'video/vnd.dece.hd',
|
824 |
+
'uvvi' => 'image/vnd.dece.graphic',
|
825 |
+
'uvvm' => 'video/vnd.dece.mobile',
|
826 |
+
'uvvp' => 'video/vnd.dece.pd',
|
827 |
+
'uvvs' => 'video/vnd.dece.sd',
|
828 |
+
'uvvt' => 'application/vnd.dece.ttml+xml',
|
829 |
+
'uvvu' => 'video/vnd.uvvu.mp4',
|
830 |
+
'uvvv' => 'video/vnd.dece.video',
|
831 |
+
'uvvx' => 'application/vnd.dece.unspecified',
|
832 |
+
'uvx' => 'application/vnd.dece.unspecified',
|
833 |
+
'vcd' => 'application/x-cdlink',
|
834 |
+
'vcf' => 'text/x-vcard',
|
835 |
+
'vcg' => 'application/vnd.groove-vcard',
|
836 |
+
'vcs' => 'text/x-vcalendar',
|
837 |
+
'vcx' => 'application/vnd.vcx',
|
838 |
+
'vis' => 'application/vnd.visionary',
|
839 |
+
'viv' => 'video/vnd.vivo',
|
840 |
+
'vor' => 'application/vnd.stardivision.writer',
|
841 |
+
'vox' => 'application/x-authorware-bin',
|
842 |
+
'vrml' => 'model/vrml',
|
843 |
+
'vsd' => 'application/vnd.visio',
|
844 |
+
'vsf' => 'application/vnd.vsf',
|
845 |
+
'vss' => 'application/vnd.visio',
|
846 |
+
'vst' => 'application/vnd.visio',
|
847 |
+
'vsw' => 'application/vnd.visio',
|
848 |
+
'vtu' => 'model/vnd.vtu',
|
849 |
+
'vxml' => 'application/voicexml+xml',
|
850 |
+
'w3d' => 'application/x-director',
|
851 |
+
'wad' => 'application/x-doom',
|
852 |
+
'wav' => 'audio/x-wav',
|
853 |
+
'wax' => 'audio/x-ms-wax',
|
854 |
+
'wbmp' => 'image/vnd.wap.wbmp',
|
855 |
+
'wbs' => 'application/vnd.criticaltools.wbs+xml',
|
856 |
+
'wbxml' => 'application/vnd.wap.wbxml',
|
857 |
+
'wcm' => 'application/vnd.ms-works',
|
858 |
+
'wdb' => 'application/vnd.ms-works',
|
859 |
+
'weba' => 'audio/webm',
|
860 |
+
'webm' => 'video/webm',
|
861 |
+
'webp' => 'image/webp',
|
862 |
+
'wg' => 'application/vnd.pmi.widget',
|
863 |
+
'wgt' => 'application/widget',
|
864 |
+
'wks' => 'application/vnd.ms-works',
|
865 |
+
'wm' => 'video/x-ms-wm',
|
866 |
+
'wma' => 'audio/x-ms-wma',
|
867 |
+
'wmd' => 'application/x-ms-wmd',
|
868 |
+
'wmf' => 'application/x-msmetafile',
|
869 |
+
'wml' => 'text/vnd.wap.wml',
|
870 |
+
'wmlc' => 'application/vnd.wap.wmlc',
|
871 |
+
'wmls' => 'text/vnd.wap.wmlscript',
|
872 |
+
'wmlsc' => 'application/vnd.wap.wmlscriptc',
|
873 |
+
'wmv' => 'video/x-ms-wmv',
|
874 |
+
'wmx' => 'video/x-ms-wmx',
|
875 |
+
'wmz' => 'application/x-ms-wmz',
|
876 |
+
'woff' => 'application/x-font-woff',
|
877 |
+
'wpd' => 'application/vnd.wordperfect',
|
878 |
+
'wpl' => 'application/vnd.ms-wpl',
|
879 |
+
'wps' => 'application/vnd.ms-works',
|
880 |
+
'wqd' => 'application/vnd.wqd',
|
881 |
+
'wri' => 'application/x-mswrite',
|
882 |
+
'wrl' => 'model/vrml',
|
883 |
+
'wsdl' => 'application/wsdl+xml',
|
884 |
+
'wspolicy' => 'application/wspolicy+xml',
|
885 |
+
'wtb' => 'application/vnd.webturbo',
|
886 |
+
'wvx' => 'video/x-ms-wvx',
|
887 |
+
'x32' => 'application/x-authorware-bin',
|
888 |
+
'x3d' => 'application/vnd.hzn-3d-crossword',
|
889 |
+
'xap' => 'application/x-silverlight-app',
|
890 |
+
'xar' => 'application/vnd.xara',
|
891 |
+
'xbap' => 'application/x-ms-xbap',
|
892 |
+
'xbd' => 'application/vnd.fujixerox.docuworks.binder',
|
893 |
+
'xbm' => 'image/x-xbitmap',
|
894 |
+
'xdf' => 'application/xcap-diff+xml',
|
895 |
+
'xdm' => 'application/vnd.syncml.dm+xml',
|
896 |
+
'xdp' => 'application/vnd.adobe.xdp+xml',
|
897 |
+
'xdssc' => 'application/dssc+xml',
|
898 |
+
'xdw' => 'application/vnd.fujixerox.docuworks',
|
899 |
+
'xenc' => 'application/xenc+xml',
|
900 |
+
'xer' => 'application/patch-ops-error+xml',
|
901 |
+
'xfdf' => 'application/vnd.adobe.xfdf',
|
902 |
+
'xfdl' => 'application/vnd.xfdl',
|
903 |
+
'xht' => 'application/xhtml+xml',
|
904 |
+
'xhtml' => 'application/xhtml+xml',
|
905 |
+
'xhvml' => 'application/xv+xml',
|
906 |
+
'xif' => 'image/vnd.xiff',
|
907 |
+
'xla' => 'application/vnd.ms-excel',
|
908 |
+
'xlam' => 'application/vnd.ms-excel.addin.macroenabled.12',
|
909 |
+
'xlc' => 'application/vnd.ms-excel',
|
910 |
+
'xlm' => 'application/vnd.ms-excel',
|
911 |
+
'xls' => 'application/vnd.ms-excel',
|
912 |
+
'xlsb' => 'application/vnd.ms-excel.sheet.binary.macroenabled.12',
|
913 |
+
'xlsm' => 'application/vnd.ms-excel.sheet.macroenabled.12',
|
914 |
+
'xlsx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
|
915 |
+
'xlt' => 'application/vnd.ms-excel',
|
916 |
+
'xltm' => 'application/vnd.ms-excel.template.macroenabled.12',
|
917 |
+
'xltx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.template',
|
918 |
+
'xlw' => 'application/vnd.ms-excel',
|
919 |
+
'xml' => 'application/xml',
|
920 |
+
'xo' => 'application/vnd.olpc-sugar',
|
921 |
+
'xop' => 'application/xop+xml',
|
922 |
+
'xpi' => 'application/x-xpinstall',
|
923 |
+
'xpm' => 'image/x-xpixmap',
|
924 |
+
'xpr' => 'application/vnd.is-xpr',
|
925 |
+
'xps' => 'application/vnd.ms-xpsdocument',
|
926 |
+
'xpw' => 'application/vnd.intercon.formnet',
|
927 |
+
'xpx' => 'application/vnd.intercon.formnet',
|
928 |
+
'xsl' => 'application/xml',
|
929 |
+
'xslt' => 'application/xslt+xml',
|
930 |
+
'xsm' => 'application/vnd.syncml+xml',
|
931 |
+
'xspf' => 'application/xspf+xml',
|
932 |
+
'xul' => 'application/vnd.mozilla.xul+xml',
|
933 |
+
'xvm' => 'application/xv+xml',
|
934 |
+
'xvml' => 'application/xv+xml',
|
935 |
+
'xwd' => 'image/x-xwindowdump',
|
936 |
+
'xyz' => 'chemical/x-xyz',
|
937 |
+
'yaml' => 'text/yaml',
|
938 |
+
'yang' => 'application/yang',
|
939 |
+
'yin' => 'application/yin+xml',
|
940 |
+
'yml' => 'text/yaml',
|
941 |
+
'zaz' => 'application/vnd.zzazz.deck+xml',
|
942 |
+
'zip' => 'application/zip',
|
943 |
+
'zir' => 'application/vnd.zul',
|
944 |
+
'zirz' => 'application/vnd.zul',
|
945 |
+
'zmm' => 'application/vnd.handheld-entertainment+xml'
|
946 |
+
];
|
947 |
+
|
948 |
+
/**
|
949 |
+
* Get a singleton instance of the class
|
950 |
+
*
|
951 |
+
* @return self
|
952 |
+
* @codeCoverageIgnore
|
953 |
+
*/
|
954 |
+
public static function getInstance()
|
955 |
+
{
|
956 |
+
if (!self::$instance) {
|
957 |
+
self::$instance = new self();
|
958 |
+
}
|
959 |
+
|
960 |
+
return self::$instance;
|
961 |
+
}
|
962 |
+
|
963 |
+
/**
|
964 |
+
* Get a mimetype value from a file extension
|
965 |
+
*
|
966 |
+
* @param string $extension File extension
|
967 |
+
*
|
968 |
+
* @return string|null
|
969 |
+
*/
|
970 |
+
public function fromExtension($extension)
|
971 |
+
{
|
972 |
+
$extension = strtolower($extension);
|
973 |
+
|
974 |
+
return isset($this->mimetypes[$extension]) ? $this->mimetypes[$extension] : null;
|
975 |
+
}
|
976 |
+
|
977 |
+
/**
|
978 |
+
* Get a mimetype from a filename
|
979 |
+
*
|
980 |
+
* @param string $filename Filename to generate a mimetype from
|
981 |
+
*
|
982 |
+
* @return string|null
|
983 |
+
*/
|
984 |
+
public function fromFilename($filename)
|
985 |
+
{
|
986 |
+
return $this->fromExtension(pathinfo($filename, PATHINFO_EXTENSION));
|
987 |
+
}
|
988 |
+
}
|
Facebook/GraphNodes/Birthday.php
ADDED
@@ -0,0 +1,85 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Copyright 2017 Facebook, Inc.
|
4 |
+
*
|
5 |
+
* You are hereby granted a non-exclusive, worldwide, royalty-free license to
|
6 |
+
* use, copy, modify, and distribute this software in source code or binary
|
7 |
+
* form for use in connection with the web services and APIs provided by
|
8 |
+
* Facebook.
|
9 |
+
*
|
10 |
+
* As with any software that integrates with the Facebook platform, your use
|
11 |
+
* of this software is subject to the Facebook Developer Principles and
|
12 |
+
* Policies [http://developers.facebook.com/policy/]. This copyright notice
|
13 |
+
* shall be included in all copies or substantial portions of the software.
|
14 |
+
*
|
15 |
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16 |
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17 |
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
18 |
+
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19 |
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
20 |
+
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
21 |
+
* DEALINGS IN THE SOFTWARE.
|
22 |
+
*
|
23 |
+
*/
|
24 |
+
namespace Facebook\GraphNodes;
|
25 |
+
|
26 |
+
use DateTime;
|
27 |
+
|
28 |
+
/**
|
29 |
+
* Birthday object to handle various Graph return formats
|
30 |
+
*
|
31 |
+
* @package Facebook
|
32 |
+
*/
|
33 |
+
class Birthday extends DateTime
|
34 |
+
{
|
35 |
+
/**
|
36 |
+
* @var bool
|
37 |
+
*/
|
38 |
+
private $hasDate = false;
|
39 |
+
|
40 |
+
/**
|
41 |
+
* @var bool
|
42 |
+
*/
|
43 |
+
private $hasYear = false;
|
44 |
+
|
45 |
+
/**
|
46 |
+
* Parses Graph birthday format to set indication flags, possible values:
|
47 |
+
*
|
48 |
+
* MM/DD/YYYY
|
49 |
+
* MM/DD
|
50 |
+
* YYYY
|
51 |
+
*
|
52 |
+
* @link https://developers.facebook.com/docs/graph-api/reference/user
|
53 |
+
*
|
54 |
+
* @param string $date
|
55 |
+
*/
|
56 |
+
public function __construct($date)
|
57 |
+
{
|
58 |
+
$parts = explode('/', $date);
|
59 |
+
|
60 |
+
$this->hasYear = count($parts) === 3 || count($parts) === 1;
|
61 |
+
$this->hasDate = count($parts) === 3 || count($parts) === 2;
|
62 |
+
|
63 |
+
parent::__construct($date);
|
64 |
+
}
|
65 |
+
|
66 |
+
/**
|
67 |
+
* Returns whether date object contains birth day and month
|
68 |
+
*
|
69 |
+
* @return bool
|
70 |
+
*/
|
71 |
+
public function hasDate()
|
72 |
+
{
|
73 |
+
return $this->hasDate;
|
74 |
+
}
|
75 |
+
|
76 |
+
/**
|
77 |
+
* Returns whether date object contains birth year
|
78 |
+
*
|
79 |
+
* @return bool
|
80 |
+
*/
|
81 |
+
public function hasYear()
|
82 |
+
{
|
83 |
+
return $this->hasYear;
|
84 |
+
}
|
85 |
+
}
|
Facebook/GraphNodes/Collection.php
ADDED
@@ -0,0 +1,242 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Copyright 2017 Facebook, Inc.
|
4 |
+
*
|
5 |
+
* You are hereby granted a non-exclusive, worldwide, royalty-free license to
|
6 |
+
* use, copy, modify, and distribute this software in source code or binary
|
7 |
+
* form for use in connection with the web services and APIs provided by
|
8 |
+
* Facebook.
|
9 |
+
*
|
10 |
+
* As with any software that integrates with the Facebook platform, your use
|
11 |
+
* of this software is subject to the Facebook Developer Principles and
|
12 |
+
* Policies [http://developers.facebook.com/policy/]. This copyright notice
|
13 |
+
* shall be included in all copies or substantial portions of the software.
|
14 |
+
*
|
15 |
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16 |
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17 |
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
18 |
+
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19 |
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
20 |
+
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
21 |
+
* DEALINGS IN THE SOFTWARE.
|
22 |
+
*
|
23 |
+
*/
|
24 |
+
namespace Facebook\GraphNodes;
|
25 |
+
|
26 |
+
/**
|
27 |
+
* Class Collection
|
28 |
+
*
|
29 |
+
* Modified version of Collection in "illuminate/support" by Taylor Otwell
|
30 |
+
*
|
31 |
+
* @package Facebook
|
32 |
+
*/
|
33 |
+
|
34 |
+
use ArrayAccess;
|
35 |
+
use ArrayIterator;
|
36 |
+
use Countable;
|
37 |
+
use IteratorAggregate;
|
38 |
+
|
39 |
+
class Collection implements ArrayAccess, Countable, IteratorAggregate
|
40 |
+
{
|
41 |
+
/**
|
42 |
+
* The items contained in the collection.
|
43 |
+
*
|
44 |
+
* @var array
|
45 |
+
*/
|
46 |
+
protected $items = [];
|
47 |
+
|
48 |
+
/**
|
49 |
+
* Create a new collection.
|
50 |
+
*
|
51 |
+
* @param array $items
|
52 |
+
*/
|
53 |
+
public function __construct(array $items = [])
|
54 |
+
{
|
55 |
+
$this->items = $items;
|
56 |
+
}
|
57 |
+
|
58 |
+
/**
|
59 |
+
* Gets the value of a field from the Graph node.
|
60 |
+
*
|
61 |
+
* @param string $name The field to retrieve.
|
62 |
+
* @param mixed $default The default to return if the field doesn't exist.
|
63 |
+
*
|
64 |
+
* @return mixed
|
65 |
+
*/
|
66 |
+
public function getField($name, $default = null)
|
67 |
+
{
|
68 |
+
if (isset($this->items[$name])) {
|
69 |
+
return $this->items[$name];
|
70 |
+
}
|
71 |
+
|
72 |
+
return $default;
|
73 |
+
}
|
74 |
+
|
75 |
+
/**
|
76 |
+
* Gets the value of the named property for this graph object.
|
77 |
+
*
|
78 |
+
* @param string $name The property to retrieve.
|
79 |
+
* @param mixed $default The default to return if the property doesn't exist.
|
80 |
+
*
|
81 |
+
* @return mixed
|
82 |
+
*
|
83 |
+
* @deprecated 5.0.0 getProperty() has been renamed to getField()
|
84 |
+
* @todo v6: Remove this method
|
85 |
+
*/
|
86 |
+
public function getProperty($name, $default = null)
|
87 |
+
{
|
88 |
+
return $this->getField($name, $default);
|
89 |
+
}
|
90 |
+
|
91 |
+
/**
|
92 |
+
* Returns a list of all fields set on the object.
|
93 |
+
*
|
94 |
+
* @return array
|
95 |
+
*/
|
96 |
+
public function getFieldNames()
|
97 |
+
{
|
98 |
+
return array_keys($this->items);
|
99 |
+
}
|
100 |
+
|
101 |
+
/**
|
102 |
+
* Returns a list of all properties set on the object.
|
103 |
+
*
|
104 |
+
* @return array
|
105 |
+
*
|
106 |
+
* @deprecated 5.0.0 getPropertyNames() has been renamed to getFieldNames()
|
107 |
+
* @todo v6: Remove this method
|
108 |
+
*/
|
109 |
+
public function getPropertyNames()
|
110 |
+
{
|
111 |
+
return $this->getFieldNames();
|
112 |
+
}
|
113 |
+
|
114 |
+
/**
|
115 |
+
* Get all of the items in the collection.
|
116 |
+
*
|
117 |
+
* @return array
|
118 |
+
*/
|
119 |
+
public function all()
|
120 |
+
{
|
121 |
+
return $this->items;
|
122 |
+
}
|
123 |
+
|
124 |
+
/**
|
125 |
+
* Get the collection of items as a plain array.
|
126 |
+
*
|
127 |
+
* @return array
|
128 |
+
*/
|
129 |
+
public function asArray()
|
130 |
+
{
|
131 |
+
return array_map(function ($value) {
|
132 |
+
return $value instanceof Collection ? $value->asArray() : $value;
|
133 |
+
}, $this->items);
|
134 |
+
}
|
135 |
+
|
136 |
+
/**
|
137 |
+
* Run a map over each of the items.
|
138 |
+
*
|
139 |
+
* @param \Closure $callback
|
140 |
+
*
|
141 |
+
* @return static
|
142 |
+
*/
|
143 |
+
public function map(\Closure $callback)
|
144 |
+
{
|
145 |
+
return new static(array_map($callback, $this->items, array_keys($this->items)));
|
146 |
+
}
|
147 |
+
|
148 |
+
/**
|
149 |
+
* Get the collection of items as JSON.
|
150 |
+
*
|
151 |
+
* @param int $options
|
152 |
+
*
|
153 |
+
* @return string
|
154 |
+
*/
|
155 |
+
public function asJson($options = 0)
|
156 |
+
{
|
157 |
+
return json_encode($this->asArray(), $options);
|
158 |
+
}
|
159 |
+
|
160 |
+
/**
|
161 |
+
* Count the number of items in the collection.
|
162 |
+
*
|
163 |
+
* @return int
|
164 |
+
*/
|
165 |
+
public function count()
|
166 |
+
{
|
167 |
+
return count($this->items);
|
168 |
+
}
|
169 |
+
|
170 |
+
/**
|
171 |
+
* Get an iterator for the items.
|
172 |
+
*
|
173 |
+
* @return ArrayIterator
|
174 |
+
*/
|
175 |
+
public function getIterator()
|
176 |
+
{
|
177 |
+
return new ArrayIterator($this->items);
|
178 |
+
}
|
179 |
+
|
180 |
+
/**
|
181 |
+
* Determine if an item exists at an offset.
|
182 |
+
*
|
183 |
+
* @param mixed $key
|
184 |
+
*
|
185 |
+
* @return bool
|
186 |
+
*/
|
187 |
+
public function offsetExists($key)
|
188 |
+
{
|
189 |
+
return array_key_exists($key, $this->items);
|
190 |
+
}
|
191 |
+
|
192 |
+
/**
|
193 |
+
* Get an item at a given offset.
|
194 |
+
*
|
195 |
+
* @param mixed $key
|
196 |
+
*
|
197 |
+
* @return mixed
|
198 |
+
*/
|
199 |
+
public function offsetGet($key)
|
200 |
+
{
|
201 |
+
return $this->items[$key];
|
202 |
+
}
|
203 |
+
|
204 |
+
/**
|
205 |
+
* Set the item at a given offset.
|
206 |
+
*
|
207 |
+
* @param mixed $key
|
208 |
+
* @param mixed $value
|
209 |
+
*
|
210 |
+
* @return void
|
211 |
+
*/
|
212 |
+
public function offsetSet($key, $value)
|
213 |
+
{
|
214 |
+
if (is_null($key)) {
|
215 |
+
$this->items[] = $value;
|
216 |
+
} else {
|
217 |
+
$this->items[$key] = $value;
|
218 |
+
}
|
219 |
+
}
|
220 |
+
|
221 |
+
/**
|
222 |
+
* Unset the item at a given offset.
|
223 |
+
*
|
224 |
+
* @param string $key
|
225 |
+
*
|
226 |
+
* @return void
|
227 |
+
*/
|
228 |
+
public function offsetUnset($key)
|
229 |
+
{
|
230 |
+
unset($this->items[$key]);
|
231 |
+
}
|
232 |
+
|
233 |
+
/**
|
234 |
+
* Convert the collection to its string representation.
|
235 |
+
*
|
236 |
+
* @return string
|
237 |
+
*/
|
238 |
+
public function __toString()
|
239 |
+
{
|
240 |
+
return $this->asJson();
|
241 |
+
}
|
242 |
+
}
|
Facebook/GraphNodes/GraphAchievement.php
ADDED
@@ -0,0 +1,112 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Copyright 2017 Facebook, Inc.
|
4 |
+
*
|
5 |
+
* You are hereby granted a non-exclusive, worldwide, royalty-free license to
|
6 |
+
* use, copy, modify, and distribute this software in source code or binary
|
7 |
+
* form for use in connection with the web services and APIs provided by
|
8 |
+
* Facebook.
|
9 |
+
*
|
10 |
+
* As with any software that integrates with the Facebook platform, your use
|
11 |
+
* of this software is subject to the Facebook Developer Principles and
|
12 |
+
* Policies [http://developers.facebook.com/policy/]. This copyright notice
|
13 |
+
* shall be included in all copies or substantial portions of the software.
|
14 |
+
*
|
15 |
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16 |
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17 |
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
18 |
+
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19 |
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
20 |
+
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
21 |
+
* DEALINGS IN THE SOFTWARE.
|
22 |
+
*
|
23 |
+
*/
|
24 |
+
namespace Facebook\GraphNodes;
|
25 |
+
|
26 |
+
/**
|
27 |
+
* Class GraphAchievement
|
28 |
+
*
|
29 |
+
* @package Facebook
|
30 |
+
*/
|
31 |
+
class GraphAchievement extends GraphNode
|
32 |
+
{
|
33 |
+
/**
|
34 |
+
* @var array Maps object key names to Graph object types.
|
35 |
+
*/
|
36 |
+
protected static $graphObjectMap = [
|
37 |
+
'from' => '\Facebook\GraphNodes\GraphUser',
|
38 |
+
'application' => '\Facebook\GraphNodes\GraphApplication',
|
39 |
+
];
|
40 |
+
|
41 |
+
/**
|
42 |
+
* Returns the ID for the achievement.
|
43 |
+
*
|
44 |
+
* @return string|null
|
45 |
+
*/
|
46 |
+
public function getId()
|
47 |
+
{
|
48 |
+
return $this->getField('id');
|
49 |
+
}
|
50 |
+
|
51 |
+
/**
|
52 |
+
* Returns the user who achieved this.
|
53 |
+
*
|
54 |
+
* @return GraphUser|null
|
55 |
+
*/
|
56 |
+
public function getFrom()
|
57 |
+
{
|
58 |
+
return $this->getField('from');
|
59 |
+
}
|
60 |
+
|
61 |
+
/**
|
62 |
+
* Returns the time at which this was achieved.
|
63 |
+
*
|
64 |
+
* @return \DateTime|null
|
65 |
+
*/
|
66 |
+
public function getPublishTime()
|
67 |
+
{
|
68 |
+
return $this->getField('publish_time');
|
69 |
+
}
|
70 |
+
|
71 |
+
/**
|
72 |
+
* Returns the app in which the user achieved this.
|
73 |
+
*
|
74 |
+
* @return GraphApplication|null
|
75 |
+
*/
|
76 |
+
public function getApplication()
|
77 |
+
{
|
78 |
+
return $this->getField('application');
|
79 |
+
}
|
80 |
+
|
81 |
+
/**
|
82 |
+
* Returns information about the achievement type this instance is connected with.
|
83 |
+
*
|
84 |
+
* @return array|null
|
85 |
+
*/
|
86 |
+
public function getData()
|
87 |
+
{
|
88 |
+
return $this->getField('data');
|
89 |
+
}
|
90 |
+
|
91 |
+
/**
|
92 |
+
* Returns the type of achievement.
|
93 |
+
*
|
94 |
+
* @see https://developers.facebook.com/docs/graph-api/reference/achievement
|
95 |
+
*
|
96 |
+
* @return string
|
97 |
+
*/
|
98 |
+
public function getType()
|
99 |
+
{
|
100 |
+
return 'game.achievement';
|
101 |
+
}
|
102 |
+
|
103 |
+
/**
|
104 |
+
* Indicates whether gaining the achievement published a feed story for the user.
|
105 |
+
*
|
106 |
+
* @return boolean|null
|
107 |
+
*/
|
108 |
+
public function isNoFeedStory()
|
109 |
+
{
|
110 |
+
return $this->getField('no_feed_story');
|
111 |
+
}
|
112 |
+
}
|
Facebook/GraphNodes/GraphAlbum.php
ADDED
@@ -0,0 +1,183 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Copyright 2017 Facebook, Inc.
|
4 |
+
*
|
5 |
+
* You are hereby granted a non-exclusive, worldwide, royalty-free license to
|
6 |
+
* use, copy, modify, and distribute this software in source code or binary
|
7 |
+
* form for use in connection with the web services and APIs provided by
|
8 |
+
* Facebook.
|
9 |
+
*
|
10 |
+
* As with any software that integrates with the Facebook platform, your use
|
11 |
+
* of this software is subject to the Facebook Developer Principles and
|
12 |
+
* Policies [http://developers.facebook.com/policy/]. This copyright notice
|
13 |
+
* shall be included in all copies or substantial portions of the software.
|
14 |
+
*
|
15 |
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16 |
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17 |
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
18 |
+
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19 |
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
20 |
+
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
21 |
+
* DEALINGS IN THE SOFTWARE.
|
22 |
+
*
|
23 |
+
*/
|
24 |
+
namespace Facebook\GraphNodes;
|
25 |
+
|
26 |
+
/**
|
27 |
+
* Class GraphAlbum
|
28 |
+
*
|
29 |
+
* @package Facebook
|
30 |
+
*/
|
31 |
+
|
32 |
+
class GraphAlbum extends GraphNode
|
33 |
+
{
|
34 |
+
/**
|
35 |
+
* @var array Maps object key names to Graph object types.
|
36 |
+
*/
|
37 |
+
protected static $graphObjectMap = [
|
38 |
+
'from' => '\Facebook\GraphNodes\GraphUser',
|
39 |
+
'place' => '\Facebook\GraphNodes\GraphPage',
|
40 |
+
];
|
41 |
+
|
42 |
+
/**
|
43 |
+
* Returns the ID for the album.
|
44 |
+
*
|
45 |
+
* @return string|null
|
46 |
+
*/
|
47 |
+
public function getId()
|
48 |
+
{
|
49 |
+
return $this->getField('id');
|
50 |
+
}
|
51 |
+
|
52 |
+
/**
|
53 |
+
* Returns whether the viewer can upload photos to this album.
|
54 |
+
*
|
55 |
+
* @return boolean|null
|
56 |
+
*/
|
57 |
+
public function getCanUpload()
|
58 |
+
{
|
59 |
+
return $this->getField('can_upload');
|
60 |
+
}
|
61 |
+
|
62 |
+
/**
|
63 |
+
* Returns the number of photos in this album.
|
64 |
+
*
|
65 |
+
* @return int|null
|
66 |
+
*/
|
67 |
+
public function getCount()
|
68 |
+
{
|
69 |
+
return $this->getField('count');
|
70 |
+
}
|
71 |
+
|
72 |
+
/**
|
73 |
+
* Returns the ID of the album's cover photo.
|
74 |
+
*
|
75 |
+
* @return string|null
|
76 |
+
*/
|
77 |
+
public function getCoverPhoto()
|
78 |
+
{
|
79 |
+
return $this->getField('cover_photo');
|
80 |
+
}
|
81 |
+
|
82 |
+
/**
|
83 |
+
* Returns the time the album was initially created.
|
84 |
+
*
|
85 |
+
* @return \DateTime|null
|
86 |
+
*/
|
87 |
+
public function getCreatedTime()
|
88 |
+
{
|
89 |
+
return $this->getField('created_time');
|
90 |
+
}
|
91 |
+
|
92 |
+
/**
|
93 |
+
* Returns the time the album was updated.
|
94 |
+
*
|
95 |
+
* @return \DateTime|null
|
96 |
+
*/
|
97 |
+
public function getUpdatedTime()
|
98 |
+
{
|
99 |
+
return $this->getField('updated_time');
|
100 |
+
}
|
101 |
+
|
102 |
+
/**
|
103 |
+
* Returns the description of the album.
|
104 |
+
*
|
105 |
+
* @return string|null
|
106 |
+
*/
|
107 |
+
public function getDescription()
|
108 |
+
{
|
109 |
+
return $this->getField('description');
|
110 |
+
}
|
111 |
+
|
112 |
+
/**
|
113 |
+
* Returns profile that created the album.
|
114 |
+
*
|
115 |
+
* @return GraphUser|null
|
116 |
+
*/
|
117 |
+
public function getFrom()
|
118 |
+
{
|
119 |
+
return $this->getField('from');
|
120 |
+
}
|
121 |
+
|
122 |
+
/**
|
123 |
+
* Returns profile that created the album.
|
124 |
+
*
|
125 |
+
* @return GraphPage|null
|
126 |
+
*/
|
127 |
+
public function getPlace()
|
128 |
+
{
|
129 |
+
return $this->getField('place');
|
130 |
+
}
|
131 |
+
|
132 |
+
/**
|
133 |
+
* Returns a link to this album on Facebook.
|
134 |
+
*
|
135 |
+
* @return string|null
|
136 |
+
*/
|
137 |
+
public function getLink()
|
138 |
+
{
|
139 |
+
return $this->getField('link');
|
140 |
+
}
|
141 |
+
|
142 |
+
/**
|
143 |
+
* Returns the textual location of the album.
|
144 |
+
*
|
145 |
+
* @return string|null
|
146 |
+
*/
|
147 |
+
public function getLocation()
|
148 |
+
{
|
149 |
+
return $this->getField('location');
|
150 |
+
}
|
151 |
+
|
152 |
+
/**
|
153 |
+
* Returns the title of the album.
|
154 |
+
*
|
155 |
+
* @return string|null
|
156 |
+
*/
|
157 |
+
public function getName()
|
158 |
+
{
|
159 |
+
return $this->getField('name');
|
160 |
+
}
|
161 |
+
|
162 |
+
/**
|
163 |
+
* Returns the privacy settings for the album.
|
164 |
+
*
|
165 |
+
* @return string|null
|
166 |
+
*/
|
167 |
+
public function getPrivacy()
|
168 |
+
{
|
169 |
+
return $this->getField('privacy');
|
170 |
+
}
|
171 |
+
|
172 |
+
/**
|
173 |
+
* Returns the type of the album.
|
174 |
+
*
|
175 |
+
* enum{ profile, mobile, wall, normal, album }
|
176 |
+
*
|
177 |
+
* @return string|null
|
178 |
+
*/
|
179 |
+
public function getType()
|
180 |
+
{
|
181 |
+
return $this->getField('type');
|
182 |
+
}
|
183 |
+
}
|
Facebook/GraphNodes/GraphApplication.php
ADDED
@@ -0,0 +1,43 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Copyright 2017 Facebook, Inc.
|
4 |
+
*
|
5 |
+
* You are hereby granted a non-exclusive, worldwide, royalty-free license to
|
6 |
+
* use, copy, modify, and distribute this software in source code or binary
|
7 |
+
* form for use in connection with the web services and APIs provided by
|
8 |
+
* Facebook.
|
9 |
+
*
|
10 |
+
* As with any software that integrates with the Facebook platform, your use
|
11 |
+
* of this software is subject to the Facebook Developer Principles and
|
12 |
+
* Policies [http://developers.facebook.com/policy/]. This copyright notice
|
13 |
+
* shall be included in all copies or substantial portions of the software.
|
14 |
+
*
|
15 |
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16 |
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17 |
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
18 |
+
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19 |
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
20 |
+
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
21 |
+
* DEALINGS IN THE SOFTWARE.
|
22 |
+
*
|
23 |
+
*/
|
24 |
+
namespace Facebook\GraphNodes;
|
25 |
+
|
26 |
+
/**
|
27 |
+
* Class GraphApplication
|
28 |
+
*
|
29 |
+
* @package Facebook
|
30 |
+
*/
|
31 |
+
|
32 |
+
class GraphApplication extends GraphNode
|
33 |
+
{
|
34 |
+
/**
|
35 |
+
* Returns the ID for the application.
|
36 |
+
*
|
37 |
+
* @return string|null
|
38 |
+
*/
|
39 |
+
public function getId()
|
40 |
+
{
|
41 |
+
return $this->getField('id');
|
42 |
+
}
|
43 |
+
}
|
Facebook/GraphNodes/GraphCoverPhoto.php
ADDED
@@ -0,0 +1,72 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Copyright 2017 Facebook, Inc.
|
4 |
+
*
|
5 |
+
* You are hereby granted a non-exclusive, worldwide, royalty-free license to
|
6 |
+
* use, copy, modify, and distribute this software in source code or binary
|
7 |
+
* form for use in connection with the web services and APIs provided by
|
8 |
+
* Facebook.
|
9 |
+
*
|
10 |
+
* As with any software that integrates with the Facebook platform, your use
|
11 |
+
* of this software is subject to the Facebook Developer Principles and
|
12 |
+
* Policies [http://developers.facebook.com/policy/]. This copyright notice
|
13 |
+
* shall be included in all copies or substantial portions of the software.
|
14 |
+
*
|
15 |
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16 |
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17 |
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
18 |
+
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19 |
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
20 |
+
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
21 |
+
* DEALINGS IN THE SOFTWARE.
|
22 |
+
*
|
23 |
+
*/
|
24 |
+
namespace Facebook\GraphNodes;
|
25 |
+
|
26 |
+
/**
|
27 |
+
* Class GraphCoverPhoto
|
28 |
+
*
|
29 |
+
* @package Facebook
|
30 |
+
*/
|
31 |
+
class GraphCoverPhoto extends GraphNode
|
32 |
+
{
|
33 |
+
/**
|
34 |
+
* Returns the id of cover if it exists
|
35 |
+
*
|
36 |
+
* @return int|null
|
37 |
+
*/
|
38 |
+
public function getId()
|
39 |
+
{
|
40 |
+
return $this->getField('id');
|
41 |
+
}
|
42 |
+
|
43 |
+
/**
|
44 |
+
* Returns the source of cover if it exists
|
45 |
+
*
|
46 |
+
* @return string|null
|
47 |
+
*/
|
48 |
+
public function getSource()
|
49 |
+
{
|
50 |
+
return $this->getField('source');
|
51 |
+
}
|
52 |
+
|
53 |
+
/**
|
54 |
+
* Returns the offset_x of cover if it exists
|
55 |
+
*
|
56 |
+
* @return int|null
|
57 |
+
*/
|
58 |
+
public function getOffsetX()
|
59 |
+
{
|
60 |
+
return $this->getField('offset_x');
|
61 |
+
}
|
62 |
+
|
63 |
+
/**
|
64 |
+
* Returns the offset_y of cover if it exists
|
65 |
+
*
|
66 |
+
* @return int|null
|
67 |
+
*/
|
68 |
+
public function getOffsetY()
|
69 |
+
{
|
70 |
+
return $this->getField('offset_y');
|
71 |
+
}
|
72 |
+
}
|
Facebook/GraphNodes/GraphEdge.php
ADDED
@@ -0,0 +1,252 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Copyright 2017 Facebook, Inc.
|
4 |
+
*
|
5 |
+
* You are hereby granted a non-exclusive, worldwide, royalty-free license to
|
6 |
+
* use, copy, modify, and distribute this software in source code or binary
|
7 |
+
* form for use in connection with the web services and APIs provided by
|
8 |
+
* Facebook.
|
9 |
+
*
|
10 |
+
* As with any software that integrates with the Facebook platform, your use
|
11 |
+
* of this software is subject to the Facebook Developer Principles and
|
12 |
+
* Policies [http://developers.facebook.com/policy/]. This copyright notice
|
13 |
+
* shall be included in all copies or substantial portions of the software.
|
14 |
+
*
|
15 |
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16 |
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17 |
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
18 |
+
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19 |
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
20 |
+
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
21 |
+
* DEALINGS IN THE SOFTWARE.
|
22 |
+
*
|
23 |
+
*/
|
24 |
+
namespace Facebook\GraphNodes;
|
25 |
+
|
26 |
+
use Facebook\FacebookRequest;
|
27 |
+
use Facebook\Url\FacebookUrlManipulator;
|
28 |
+
use Facebook\Exceptions\FacebookSDKException;
|
29 |
+
|
30 |
+
/**
|
31 |
+
* Class GraphEdge
|
32 |
+
*
|
33 |
+
* @package Facebook
|
34 |
+
*/
|
35 |
+
class GraphEdge extends Collection
|
36 |
+
{
|
37 |
+
/**
|
38 |
+
* @var FacebookRequest The original request that generated this data.
|
39 |
+
*/
|
40 |
+
protected $request;
|
41 |
+
|
42 |
+
/**
|
43 |
+
* @var array An array of Graph meta data like pagination, etc.
|
44 |
+
*/
|
45 |
+
protected $metaData = [];
|
46 |
+
|
47 |
+
/**
|
48 |
+
* @var string|null The parent Graph edge endpoint that generated the list.
|
49 |
+
*/
|
50 |
+
protected $parentEdgeEndpoint;
|
51 |
+
|
52 |
+
/**
|
53 |
+
* @var string|null The subclass of the child GraphNode's.
|
54 |
+
*/
|
55 |
+
protected $subclassName;
|
56 |
+
|
57 |
+
/**
|
58 |
+
* Init this collection of GraphNode's.
|
59 |
+
*
|
60 |
+
* @param FacebookRequest $request The original request that generated this data.
|
61 |
+
* @param array $data An array of GraphNode's.
|
62 |
+
* @param array $metaData An array of Graph meta data like pagination, etc.
|
63 |
+
* @param string|null $parentEdgeEndpoint The parent Graph edge endpoint that generated the list.
|
64 |
+
* @param string|null $subclassName The subclass of the child GraphNode's.
|
65 |
+
*/
|
66 |
+
public function __construct(FacebookRequest $request, array $data = [], array $metaData = [], $parentEdgeEndpoint = null, $subclassName = null)
|
67 |
+
{
|
68 |
+
$this->request = $request;
|
69 |
+
$this->metaData = $metaData;
|
70 |
+
$this->parentEdgeEndpoint = $parentEdgeEndpoint;
|
71 |
+
$this->subclassName = $subclassName;
|
72 |
+
|
73 |
+
parent::__construct($data);
|
74 |
+
}
|
75 |
+
|
76 |
+
/**
|
77 |
+
* Gets the parent Graph edge endpoint that generated the list.
|
78 |
+
*
|
79 |
+
* @return string|null
|
80 |
+
*/
|
81 |
+
public function getParentGraphEdge()
|
82 |
+
{
|
83 |
+
return $this->parentEdgeEndpoint;
|
84 |
+
}
|
85 |
+
|
86 |
+
/**
|
87 |
+
* Gets the subclass name that the child GraphNode's are cast as.
|
88 |
+
*
|
89 |
+
* @return string|null
|
90 |
+
*/
|
91 |
+
public function getSubClassName()
|
92 |
+
{
|
93 |
+
return $this->subclassName;
|
94 |
+
}
|
95 |
+
|
96 |
+
/**
|
97 |
+
* Returns the raw meta data associated with this GraphEdge.
|
98 |
+
*
|
99 |
+
* @return array
|
100 |
+
*/
|
101 |
+
public function getMetaData()
|
102 |
+
{
|
103 |
+
return $this->metaData;
|
104 |
+
}
|
105 |
+
|
106 |
+
/**
|
107 |
+
* Returns the next cursor if it exists.
|
108 |
+
*
|
109 |
+
* @return string|null
|
110 |
+
*/
|
111 |
+
public function getNextCursor()
|
112 |
+
{
|
113 |
+
return $this->getCursor('after');
|
114 |
+
}
|
115 |
+
|
116 |
+
/**
|
117 |
+
* Returns the previous cursor if it exists.
|
118 |
+
*
|
119 |
+
* @return string|null
|
120 |
+
*/
|
121 |
+
public function getPreviousCursor()
|
122 |
+
{
|
123 |
+
return $this->getCursor('before');
|
124 |
+
}
|
125 |
+
|
126 |
+
/**
|
127 |
+
* Returns the cursor for a specific direction if it exists.
|
128 |
+
*
|
129 |
+
* @param string $direction The direction of the page: after|before
|
130 |
+
*
|
131 |
+
* @return string|null
|
132 |
+
*/
|
133 |
+
public function getCursor($direction)
|
134 |
+
{
|
135 |
+
if (isset($this->metaData['paging']['cursors'][$direction])) {
|
136 |
+
return $this->metaData['paging']['cursors'][$direction];
|
137 |
+
}
|
138 |
+
|
139 |
+
return null;
|
140 |
+
}
|
141 |
+
|
142 |
+
/**
|
143 |
+
* Generates a pagination URL based on a cursor.
|
144 |
+
*
|
145 |
+
* @param string $direction The direction of the page: next|previous
|
146 |
+
*
|
147 |
+
* @return string|null
|
148 |
+
*
|
149 |
+
* @throws FacebookSDKException
|
150 |
+
*/
|
151 |
+
public function getPaginationUrl($direction)
|
152 |
+
{
|
153 |
+
$this->validateForPagination();
|
154 |
+
|
155 |
+
// Do we have a paging URL?
|
156 |
+
if (!isset($this->metaData['paging'][$direction])) {
|
157 |
+
return null;
|
158 |
+
}
|
159 |
+
|
160 |
+
$pageUrl = $this->metaData['paging'][$direction];
|
161 |
+
|
162 |
+
return FacebookUrlManipulator::baseGraphUrlEndpoint($pageUrl);
|
163 |
+
}
|
164 |
+
|
165 |
+
/**
|
166 |
+
* Validates whether or not we can paginate on this request.
|
167 |
+
*
|
168 |
+
* @throws FacebookSDKException
|
169 |
+
*/
|
170 |
+
public function validateForPagination()
|
171 |
+
{
|
172 |
+
if ($this->request->getMethod() !== 'GET') {
|
173 |
+
throw new FacebookSDKException('You can only paginate on a GET request.', 720);
|
174 |
+
}
|
175 |
+
}
|
176 |
+
|
177 |
+
/**
|
178 |
+
* Gets the request object needed to make a next|previous page request.
|
179 |
+
*
|
180 |
+
* @param string $direction The direction of the page: next|previous
|
181 |
+
*
|
182 |
+
* @return FacebookRequest|null
|
183 |
+
*
|
184 |
+
* @throws FacebookSDKException
|
185 |
+
*/
|
186 |
+
public function getPaginationRequest($direction)
|
187 |
+
{
|
188 |
+
$pageUrl = $this->getPaginationUrl($direction);
|
189 |
+
if (!$pageUrl) {
|
190 |
+
return null;
|
191 |
+
}
|
192 |
+
|
193 |
+
$newRequest = clone $this->request;
|
194 |
+
$newRequest->setEndpoint($pageUrl);
|
195 |
+
|
196 |
+
return $newRequest;
|
197 |
+
}
|
198 |
+
|
199 |
+
/**
|
200 |
+
* Gets the request object needed to make a "next" page request.
|
201 |
+
*
|
202 |
+
* @return FacebookRequest|null
|
203 |
+
*
|
204 |
+
* @throws FacebookSDKException
|
205 |
+
*/
|
206 |
+
public function getNextPageRequest()
|
207 |
+
{
|
208 |
+
return $this->getPaginationRequest('next');
|
209 |
+
}
|
210 |
+
|
211 |
+
/**
|
212 |
+
* Gets the request object needed to make a "previous" page request.
|
213 |
+
*
|
214 |
+
* @return FacebookRequest|null
|
215 |
+
*
|
216 |
+
* @throws FacebookSDKException
|
217 |
+
*/
|
218 |
+
public function getPreviousPageRequest()
|
219 |
+
{
|
220 |
+
return $this->getPaginationRequest('previous');
|
221 |
+
}
|
222 |
+
|
223 |
+
/**
|
224 |
+
* The total number of results according to Graph if it exists.
|
225 |
+
*
|
226 |
+
* This will be returned if the summary=true modifier is present in the request.
|
227 |
+
*
|
228 |
+
* @return int|null
|
229 |
+
*/
|
230 |
+
public function getTotalCount()
|
231 |
+
{
|
232 |
+
if (isset($this->metaData['summary']['total_count'])) {
|
233 |
+
return $this->metaData['summary']['total_count'];
|
234 |
+
}
|
235 |
+
|
236 |
+
return null;
|
237 |
+
}
|
238 |
+
|
239 |
+
/**
|
240 |
+
* @inheritDoc
|
241 |
+
*/
|
242 |
+
public function map(\Closure $callback)
|
243 |
+
{
|
244 |
+
return new static(
|
245 |
+
$this->request,
|
246 |
+
array_map($callback, $this->items, array_keys($this->items)),
|
247 |
+
$this->metaData,
|
248 |
+
$this->parentEdgeEndpoint,
|
249 |
+
$this->subclassName
|
250 |
+
);
|
251 |
+
}
|
252 |
+
}
|
Facebook/GraphNodes/GraphEvent.php
ADDED
@@ -0,0 +1,242 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Copyright 2017 Facebook, Inc.
|
4 |
+
*
|
5 |
+
* You are hereby granted a non-exclusive, worldwide, royalty-free license to
|
6 |
+
* use, copy, modify, and distribute this software in source code or binary
|
7 |
+
* form for use in connection with the web services and APIs provided by
|
8 |
+
* Facebook.
|
9 |
+
*
|
10 |
+
* As with any software that integrates with the Facebook platform, your use
|
11 |
+
* of this software is subject to the Facebook Developer Principles and
|
12 |
+
* Policies [http://developers.facebook.com/policy/]. This copyright notice
|
13 |
+
* shall be included in all copies or substantial portions of the software.
|
14 |
+
*
|
15 |
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16 |
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17 |
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
18 |
+
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19 |
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
20 |
+
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
21 |
+
* DEALINGS IN THE SOFTWARE.
|
22 |
+
*
|
23 |
+
*/
|
24 |
+
namespace Facebook\GraphNodes;
|
25 |
+
|
26 |
+
/**
|
27 |
+
* Class GraphEvent
|
28 |
+
*
|
29 |
+
* @package Facebook
|
30 |
+
*/
|
31 |
+
class GraphEvent extends GraphNode
|
32 |
+
{
|
33 |
+
/**
|
34 |
+
* @var array Maps object key names to GraphNode types.
|
35 |
+
*/
|
36 |
+
protected static $graphObjectMap = [
|
37 |
+
'cover' => '\Facebook\GraphNodes\GraphCoverPhoto',
|
38 |
+
'place' => '\Facebook\GraphNodes\GraphPage',
|
39 |
+
'picture' => '\Facebook\GraphNodes\GraphPicture',
|
40 |
+
'parent_group' => '\Facebook\GraphNodes\GraphGroup',
|
41 |
+
];
|
42 |
+
|
43 |
+
/**
|
44 |
+
* Returns the `id` (The event ID) as string if present.
|
45 |
+
*
|
46 |
+
* @return string|null
|
47 |
+
*/
|
48 |
+
public function getId()
|
49 |
+
{
|
50 |
+
return $this->getField('id');
|
51 |
+
}
|
52 |
+
|
53 |
+
/**
|
54 |
+
* Returns the `cover` (Cover picture) as GraphCoverPhoto if present.
|
55 |
+
*
|
56 |
+
* @return GraphCoverPhoto|null
|
57 |
+
*/
|
58 |
+
public function getCover()
|
59 |
+
{
|
60 |
+
return $this->getField('cover');
|
61 |
+
}
|
62 |
+
|
63 |
+
/**
|
64 |
+
* Returns the `description` (Long-form description) as string if present.
|
65 |
+
*
|
66 |
+
* @return string|null
|
67 |
+
*/
|
68 |
+
public function getDescription()
|
69 |
+
{
|
70 |
+
return $this->getField('description');
|
71 |
+
}
|
72 |
+
|
73 |
+
/**
|
74 |
+
* Returns the `end_time` (End time, if one has been set) as DateTime if present.
|
75 |
+
*
|
76 |
+
* @return \DateTime|null
|
77 |
+
*/
|
78 |
+
public function getEndTime()
|
79 |
+
{
|
80 |
+
return $this->getField('end_time');
|
81 |
+
}
|
82 |
+
|
83 |
+
/**
|
84 |
+
* Returns the `is_date_only` (Whether the event only has a date specified, but no time) as bool if present.
|
85 |
+
*
|
86 |
+
* @return bool|null
|
87 |
+
*/
|
88 |
+
public function getIsDateOnly()
|
89 |
+
{
|
90 |
+
return $this->getField('is_date_only');
|
91 |
+
}
|
92 |
+
|
93 |
+
/**
|
94 |
+
* Returns the `name` (Event name) as string if present.
|
95 |
+
*
|
96 |
+
* @return string|null
|
97 |
+
*/
|
98 |
+
public function getName()
|
99 |
+
{
|
100 |
+
return $this->getField('name');
|
101 |
+
}
|
102 |
+
|
103 |
+
/**
|
104 |
+
* Returns the `owner` (The profile that created the event) as GraphNode if present.
|
105 |
+
*
|
106 |
+
* @return GraphNode|null
|
107 |
+
*/
|
108 |
+
public function getOwner()
|
109 |
+
{
|
110 |
+
return $this->getField('owner');
|
111 |
+
}
|
112 |
+
|
113 |
+
/**
|
114 |
+
* Returns the `parent_group` (The group the event belongs to) as GraphGroup if present.
|
115 |
+
*
|
116 |
+
* @return GraphGroup|null
|
117 |
+
*/
|
118 |
+
public function getParentGroup()
|
119 |
+
{
|
120 |
+
return $this->getField('parent_group');
|
121 |
+
}
|
122 |
+
|
123 |
+
/**
|
124 |
+
* Returns the `place` (Event Place information) as GraphPage if present.
|
125 |
+
*
|
126 |
+
* @return GraphPage|null
|
127 |
+
*/
|
128 |
+
public function getPlace()
|
129 |
+
{
|
130 |
+
return $this->getField('place');
|
131 |
+
}
|
132 |
+
|
133 |
+
/**
|
134 |
+
* Returns the `privacy` (Who can see the event) as string if present.
|
135 |
+
*
|
136 |
+
* @return string|null
|
137 |
+
*/
|
138 |
+
public function getPrivacy()
|
139 |
+
{
|
140 |
+
return $this->getField('privacy');
|
141 |
+
}
|
142 |
+
|
143 |
+
/**
|
144 |
+
* Returns the `start_time` (Start time) as DateTime if present.
|
145 |
+
*
|
146 |
+
* @return \DateTime|null
|
147 |
+
*/
|
148 |
+
public function getStartTime()
|
149 |
+
{
|
150 |
+
return $this->getField('start_time');
|
151 |
+
}
|
152 |
+
|
153 |
+
/**
|
154 |
+
* Returns the `ticket_uri` (The link users can visit to buy a ticket to this event) as string if present.
|
155 |
+
*
|
156 |
+
* @return string|null
|
157 |
+
*/
|
158 |
+
public function getTicketUri()
|
159 |
+
{
|
160 |
+
return $this->getField('ticket_uri');
|
161 |
+
}
|
162 |
+
|
163 |
+
/**
|
164 |
+
* Returns the `timezone` (Timezone) as string if present.
|
165 |
+
*
|
166 |
+
* @return string|null
|
167 |
+
*/
|
168 |
+
public function getTimezone()
|
169 |
+
{
|
170 |
+
return $this->getField('timezone');
|
171 |
+
}
|
172 |
+
|
173 |
+
/**
|
174 |
+
* Returns the `updated_time` (Last update time) as DateTime if present.
|
175 |
+
*
|
176 |
+
* @return \DateTime|null
|
177 |
+
*/
|
178 |
+
public function getUpdatedTime()
|
179 |
+
{
|
180 |
+
return $this->getField('updated_time');
|
181 |
+
}
|
182 |
+
|
183 |
+
/**
|
184 |
+
* Returns the `picture` (Event picture) as GraphPicture if present.
|
185 |
+
*
|
186 |
+
* @return GraphPicture|null
|
187 |
+
*/
|
188 |
+
public function getPicture()
|
189 |
+
{
|
190 |
+
return $this->getField('picture');
|
191 |
+
}
|
192 |
+
|
193 |
+
/**
|
194 |
+
* Returns the `attending_count` (Number of people attending the event) as int if present.
|
195 |
+
*
|
196 |
+
* @return int|null
|
197 |
+
*/
|
198 |
+
public function getAttendingCount()
|
199 |
+
{
|
200 |
+
return $this->getField('attending_count');
|
201 |
+
}
|
202 |
+
|
203 |
+
/**
|
204 |
+
* Returns the `declined_count` (Number of people who declined the event) as int if present.
|
205 |
+
*
|
206 |
+
* @return int|null
|
207 |
+
*/
|
208 |
+
public function getDeclinedCount()
|
209 |
+
{
|
210 |
+
return $this->getField('declined_count');
|
211 |
+
}
|
212 |
+
|
213 |
+
/**
|
214 |
+
* Returns the `maybe_count` (Number of people who maybe going to the event) as int if present.
|
215 |
+
*
|
216 |
+
* @return int|null
|
217 |
+
*/
|
218 |
+
public function getMaybeCount()
|
219 |
+
{
|
220 |
+
return $this->getField('maybe_count');
|
221 |
+
}
|
222 |
+
|
223 |
+
/**
|
224 |
+
* Returns the `noreply_count` (Number of people who did not reply to the event) as int if present.
|
225 |
+
*
|
226 |
+
* @return int|null
|
227 |
+
*/
|
228 |
+
public function getNoreplyCount()
|
229 |
+
{
|
230 |
+
return $this->getField('noreply_count');
|
231 |
+
}
|
232 |
+
|
233 |
+
/**
|
234 |
+
* Returns the `invited_count` (Number of people invited to the event) as int if present.
|
235 |
+
*
|
236 |
+
* @return int|null
|
237 |
+
*/
|
238 |
+
public function getInvitedCount()
|
239 |
+
{
|
240 |
+
return $this->getField('invited_count');
|
241 |
+
}
|
242 |
+
}
|
Facebook/GraphNodes/GraphGroup.php
ADDED
@@ -0,0 +1,170 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Copyright 2017 Facebook, Inc.
|
4 |
+
*
|
5 |
+
* You are hereby granted a non-exclusive, worldwide, royalty-free license to
|
6 |
+
* use, copy, modify, and distribute this software in source code or binary
|
7 |
+
* form for use in connection with the web services and APIs provided by
|
8 |
+
* Facebook.
|
9 |
+
*
|
10 |
+
* As with any software that integrates with the Facebook platform, your use
|
11 |
+
* of this software is subject to the Facebook Developer Principles and
|
12 |
+
* Policies [http://developers.facebook.com/policy/]. This copyright notice
|
13 |
+
* shall be included in all copies or substantial portions of the software.
|
14 |
+
*
|
15 |
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16 |
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17 |
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
18 |
+
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19 |
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
20 |
+
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
21 |
+
* DEALINGS IN THE SOFTWARE.
|
22 |
+
*
|
23 |
+
*/
|
24 |
+
namespace Facebook\GraphNodes;
|
25 |
+
|
26 |
+
/**
|
27 |
+
* Class GraphGroup
|
28 |
+
*
|
29 |
+
* @package Facebook
|
30 |
+
*/
|
31 |
+
class GraphGroup extends GraphNode
|
32 |
+
{
|
33 |
+
/**
|
34 |
+
* @var array Maps object key names to GraphNode types.
|
35 |
+
*/
|
36 |
+
protected static $graphObjectMap = [
|
37 |
+
'cover' => '\Facebook\GraphNodes\GraphCoverPhoto',
|
38 |
+
'venue' => '\Facebook\GraphNodes\GraphLocation',
|
39 |
+
];
|
40 |
+
|
41 |
+
/**
|
42 |
+
* Returns the `id` (The Group ID) as string if present.
|
43 |
+
*
|
44 |
+
* @return string|null
|
45 |
+
*/
|
46 |
+
public function getId()
|
47 |
+
{
|
48 |
+
return $this->getField('id');
|
49 |
+
}
|
50 |
+
|
51 |
+
/**
|
52 |
+
* Returns the `cover` (The cover photo of the Group) as GraphCoverPhoto if present.
|
53 |
+
*
|
54 |
+
* @return GraphCoverPhoto|null
|
55 |
+
*/
|
56 |
+
public function getCover()
|
57 |
+
{
|
58 |
+
return $this->getField('cover');
|
59 |
+
}
|
60 |
+
|
61 |
+
/**
|
62 |
+
* Returns the `description` (A brief description of the Group) as string if present.
|
63 |
+
*
|
64 |
+
* @return string|null
|
65 |
+
*/
|
66 |
+
public function getDescription()
|
67 |
+
{
|
68 |
+
return $this->getField('description');
|
69 |
+
}
|
70 |
+
|
71 |
+
/**
|
72 |
+
* Returns the `email` (The email address to upload content to the Group. Only current members of the Group can use this) as string if present.
|
73 |
+
*
|
74 |
+
* @return string|null
|
75 |
+
*/
|
76 |
+
public function getEmail()
|
77 |
+
{
|
78 |
+
return $this->getField('email');
|
79 |
+
}
|
80 |
+
|
81 |
+
/**
|
82 |
+
* Returns the `icon` (The URL for the Group's icon) as string if present.
|
83 |
+
*
|
84 |
+
* @return string|null
|
85 |
+
*/
|
86 |
+
public function getIcon()
|
87 |
+
{
|
88 |
+
return $this->getField('icon');
|
89 |
+
}
|
90 |
+
|
91 |
+
/**
|
92 |
+
* Returns the `link` (The Group's website) as string if present.
|
93 |
+
*
|
94 |
+
* @return string|null
|
95 |
+
*/
|
96 |
+
public function getLink()
|
97 |
+
{
|
98 |
+
return $this->getField('link');
|
99 |
+
}
|
100 |
+
|
101 |
+
/**
|
102 |
+
* Returns the `name` (The name of the Group) as string if present.
|
103 |
+
*
|
104 |
+
* @return string|null
|
105 |
+
*/
|
106 |
+
public function getName()
|
107 |
+
{
|
108 |
+
return $this->getField('name');
|
109 |
+
}
|
110 |
+
|
111 |
+
/**
|
112 |
+
* Returns the `member_request_count` (Number of people asking to join the group.) as int if present.
|
113 |
+
*
|
114 |
+
* @return int|null
|
115 |
+
*/
|
116 |
+
public function getMemberRequestCount()
|
117 |
+
{
|
118 |
+
return $this->getField('member_request_count');
|
119 |
+
}
|
120 |
+
|
121 |
+
/**
|
122 |
+
* Returns the `owner` (The profile that created this Group) as GraphNode if present.
|
123 |
+
*
|
124 |
+
* @return GraphNode|null
|
125 |
+
*/
|
126 |
+
public function getOwner()
|
127 |
+
{
|
128 |
+
return $this->getField('owner');
|
129 |
+
}
|
130 |
+
|
131 |
+
/**
|
132 |
+
* Returns the `parent` (The parent Group of this Group, if it exists) as GraphNode if present.
|
133 |
+
*
|
134 |
+
* @return GraphNode|null
|
135 |
+
*/
|
136 |
+
public function getParent()
|
137 |
+
{
|
138 |
+
return $this->getField('parent');
|
139 |
+
}
|
140 |
+
|
141 |
+
/**
|
142 |
+
* Returns the `privacy` (The privacy setting of the Group) as string if present.
|
143 |
+
*
|
144 |
+
* @return string|null
|
145 |
+
*/
|
146 |
+
public function getPrivacy()
|
147 |
+
{
|
148 |
+
return $this->getField('privacy');
|
149 |
+
}
|
150 |
+
|
151 |
+
/**
|
152 |
+
* Returns the `updated_time` (The last time the Group was updated (this includes changes in the Group's properties and changes in posts and comments if user can see them)) as \DateTime if present.
|
153 |
+
*
|
154 |
+
* @return \DateTime|null
|
155 |
+
*/
|
156 |
+
public function getUpdatedTime()
|
157 |
+
{
|
158 |
+
return $this->getField('updated_time');
|
159 |
+
}
|
160 |
+
|
161 |
+
/**
|
162 |
+
* Returns the `venue` (The location for the Group) as GraphLocation if present.
|
163 |
+
*
|
164 |
+
* @return GraphLocation|null
|
165 |
+
*/
|
166 |
+
public function getVenue()
|
167 |
+
{
|
168 |
+
return $this->getField('venue');
|
169 |
+
}
|
170 |
+
}
|
Facebook/GraphNodes/GraphList.php
ADDED
@@ -0,0 +1,36 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Copyright 2017 Facebook, Inc.
|
4 |
+
*
|
5 |
+
* You are hereby granted a non-exclusive, worldwide, royalty-free license to
|
6 |
+
* use, copy, modify, and distribute this software in source code or binary
|
7 |
+
* form for use in connection with the web services and APIs provided by
|
8 |
+
* Facebook.
|
9 |
+
*
|
10 |
+
* As with any software that integrates with the Facebook platform, your use
|
11 |
+
* of this software is subject to the Facebook Developer Principles and
|
12 |
+
* Policies [http://developers.facebook.com/policy/]. This copyright notice
|
13 |
+
* shall be included in all copies or substantial portions of the software.
|
14 |
+
*
|
15 |
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16 |
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17 |
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
18 |
+
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19 |
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
20 |
+
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
21 |
+
* DEALINGS IN THE SOFTWARE.
|
22 |
+
*
|
23 |
+
*/
|
24 |
+
namespace Facebook\GraphNodes;
|
25 |
+
|
26 |
+
/**
|
27 |
+
* Class GraphList
|
28 |
+
*
|
29 |
+
* @package Facebook
|
30 |
+
*
|
31 |
+
* @deprecated 5.0.0 GraphList has been renamed to GraphEdge
|
32 |
+
* @todo v6: Remove this class
|
33 |
+
*/
|
34 |
+
class GraphList extends GraphEdge
|
35 |
+
{
|
36 |
+
}
|
Facebook/GraphNodes/GraphLocation.php
ADDED
@@ -0,0 +1,102 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Copyright 2017 Facebook, Inc.
|
4 |
+
*
|
5 |
+
* You are hereby granted a non-exclusive, worldwide, royalty-free license to
|
6 |
+
* use, copy, modify, and distribute this software in source code or binary
|
7 |
+
* form for use in connection with the web services and APIs provided by
|
8 |
+
* Facebook.
|
9 |
+
*
|
10 |
+
* As with any software that integrates with the Facebook platform, your use
|
11 |
+
* of this software is subject to the Facebook Developer Principles and
|
12 |
+
* Policies [http://developers.facebook.com/policy/]. This copyright notice
|
13 |
+
* shall be included in all copies or substantial portions of the software.
|
14 |
+
*
|
15 |
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16 |
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17 |
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
18 |
+
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19 |
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
20 |
+
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
21 |
+
* DEALINGS IN THE SOFTWARE.
|
22 |
+
*
|
23 |
+
*/
|
24 |
+
namespace Facebook\GraphNodes;
|
25 |
+
|
26 |
+
/**
|
27 |
+
* Class GraphLocation
|
28 |
+
*
|
29 |
+
* @package Facebook
|
30 |
+
*/
|
31 |
+
class GraphLocation extends GraphNode
|
32 |
+
{
|
33 |
+
/**
|
34 |
+
* Returns the street component of the location
|
35 |
+
*
|
36 |
+
* @return string|null
|
37 |
+
*/
|
38 |
+
public function getStreet()
|
39 |
+
{
|
40 |
+
return $this->getField('street');
|
41 |
+
}
|
42 |
+
|
43 |
+
/**
|
44 |
+
* Returns the city component of the location
|
45 |
+
*
|
46 |
+
* @return string|null
|
47 |
+
*/
|
48 |
+
public function getCity()
|
49 |
+
{
|
50 |
+
return $this->getField('city');
|
51 |
+
}
|
52 |
+
|
53 |
+
/**
|
54 |
+
* Returns the state component of the location
|
55 |
+
*
|
56 |
+
* @return string|null
|
57 |
+
*/
|
58 |
+
public function getState()
|
59 |
+
{
|
60 |
+
return $this->getField('state');
|
61 |
+
}
|
62 |
+
|
63 |
+
/**
|
64 |
+
* Returns the country component of the location
|
65 |
+
*
|
66 |
+
* @return string|null
|
67 |
+
*/
|
68 |
+
public function getCountry()
|
69 |
+
{
|
70 |
+
return $this->getField('country');
|
71 |
+
}
|
72 |
+
|
73 |
+
/**
|
74 |
+
* Returns the zipcode component of the location
|
75 |
+
*
|
76 |
+
* @return string|null
|
77 |
+
*/
|
78 |
+
public function getZip()
|
79 |
+
{
|
80 |
+
return $this->getField('zip');
|
81 |
+
}
|
82 |
+
|
83 |
+
/**
|
84 |
+
* Returns the latitude component of the location
|
85 |
+
*
|
86 |
+
* @return float|null
|
87 |
+
*/
|
88 |
+
public function getLatitude()
|
89 |
+
{
|
90 |
+
return $this->getField('latitude');
|
91 |
+
}
|
92 |
+
|
93 |
+
/**
|
94 |
+
* Returns the street component of the location
|
95 |
+
*
|
96 |
+
* @return float|null
|
97 |
+
*/
|
98 |
+
public function getLongitude()
|
99 |
+
{
|
100 |
+
return $this->getField('longitude');
|
101 |
+
}
|
102 |
+
}
|
Facebook/GraphNodes/GraphNode.php
ADDED
@@ -0,0 +1,197 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Copyright 2017 Facebook, Inc.
|
4 |
+
*
|
5 |
+
* You are hereby granted a non-exclusive, worldwide, royalty-free license to
|
6 |
+
* use, copy, modify, and distribute this software in source code or binary
|
7 |
+
* form for use in connection with the web services and APIs provided by
|
8 |
+
* Facebook.
|
9 |
+
*
|
10 |
+
* As with any software that integrates with the Facebook platform, your use
|
11 |
+
* of this software is subject to the Facebook Developer Principles and
|
12 |
+
* Policies [http://developers.facebook.com/policy/]. This copyright notice
|
13 |
+
* shall be included in all copies or substantial portions of the software.
|
14 |
+
*
|
15 |
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16 |
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17 |
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
18 |
+
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19 |
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
20 |
+
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
21 |
+
* DEALINGS IN THE SOFTWARE.
|
22 |
+
*
|
23 |
+
*/
|
24 |
+
namespace Facebook\GraphNodes;
|
25 |
+
|
26 |
+
/**
|
27 |
+
* Class GraphNode
|
28 |
+
*
|
29 |
+
* @package Facebook
|
30 |
+
*/
|
31 |
+
class GraphNode extends Collection
|
32 |
+
{
|
33 |
+
/**
|
34 |
+
* @var array Maps object key names to Graph object types.
|
35 |
+
*/
|
36 |
+
protected static $graphObjectMap = [];
|
37 |
+
|
38 |
+
/**
|
39 |
+
* Init this Graph object.
|
40 |
+
*
|
41 |
+
* @param array $data
|
42 |
+
*/
|
43 |
+
public function __construct(array $data = [])
|
44 |
+
{
|
45 |
+
parent::__construct($this->castItems($data));
|
46 |
+
}
|
47 |
+
|
48 |
+
/**
|
49 |
+
* Iterates over an array and detects the types each node
|
50 |
+
* should be cast to and returns all the items as an array.
|
51 |
+
*
|
52 |
+
* @TODO Add auto-casting to AccessToken entities.
|
53 |
+
*
|
54 |
+
* @param array $data The array to iterate over.
|
55 |
+
*
|
56 |
+
* @return array
|
57 |
+
*/
|
58 |
+
public function castItems(array $data)
|
59 |
+
{
|
60 |
+
$items = [];
|
61 |
+
|
62 |
+
foreach ($data as $k => $v) {
|
63 |
+
if ($this->shouldCastAsDateTime($k)
|
64 |
+
&& (is_numeric($v)
|
65 |
+
|| $this->isIso8601DateString($v))
|
66 |
+
) {
|
67 |
+
$items[$k] = $this->castToDateTime($v);
|
68 |
+
} elseif ($k === 'birthday') {
|
69 |
+
$items[$k] = $this->castToBirthday($v);
|
70 |
+
} else {
|
71 |
+
$items[$k] = $v;
|
72 |
+
}
|
73 |
+
}
|
74 |
+
|
75 |
+
return $items;
|
76 |
+
}
|
77 |
+
|
78 |
+
/**
|
79 |
+
* Uncasts any auto-casted datatypes.
|
80 |
+
* Basically the reverse of castItems().
|
81 |
+
*
|
82 |
+
* @return array
|
83 |
+
*/
|
84 |
+
public function uncastItems()
|
85 |
+
{
|
86 |
+
$items = $this->asArray();
|
87 |
+
|
88 |
+
return array_map(function ($v) {
|
89 |
+
if ($v instanceof \DateTime) {
|
90 |
+
return $v->format(\DateTime::ISO8601);
|
91 |
+
}
|
92 |
+
|
93 |
+
return $v;
|
94 |
+
}, $items);
|
95 |
+
}
|
96 |
+
|
97 |
+
/**
|
98 |
+
* Get the collection of items as JSON.
|
99 |
+
*
|
100 |
+
* @param int $options
|
101 |
+
*
|
102 |
+
* @return string
|
103 |
+
*/
|
104 |
+
public function asJson($options = 0)
|
105 |
+
{
|
106 |
+
return json_encode($this->uncastItems(), $options);
|
107 |
+
}
|
108 |
+
|
109 |
+
/**
|
110 |
+
* Detects an ISO 8601 formatted string.
|
111 |
+
*
|
112 |
+
* @param string $string
|
113 |
+
*
|
114 |
+
* @return boolean
|
115 |
+
*
|
116 |
+
* @see https://developers.facebook.com/docs/graph-api/using-graph-api/#readmodifiers
|
117 |
+
* @see http://www.cl.cam.ac.uk/~mgk25/iso-time.html
|
118 |
+
* @see http://en.wikipedia.org/wiki/ISO_8601
|
119 |
+
*/
|
120 |
+
public function isIso8601DateString($string)
|
121 |
+
{
|
122 |
+
// This insane regex was yoinked from here:
|
123 |
+
// http://www.pelagodesign.com/blog/2009/05/20/iso-8601-date-validation-that-doesnt-suck/
|
124 |
+
// ...and I'm all like:
|
125 |
+
// http://thecodinglove.com/post/95378251969/when-code-works-and-i-dont-know-why
|
126 |
+
$crazyInsaneRegexThatSomehowDetectsIso8601 = '/^([\+-]?\d{4}(?!\d{2}\b))'
|
127 |
+
. '((-?)((0[1-9]|1[0-2])(\3([12]\d|0[1-9]|3[01]))?'
|
128 |
+
. '|W([0-4]\d|5[0-2])(-?[1-7])?|(00[1-9]|0[1-9]\d'
|
129 |
+
. '|[12]\d{2}|3([0-5]\d|6[1-6])))([T\s]((([01]\d|2[0-3])'
|
130 |
+
. '((:?)[0-5]\d)?|24\:?00)([\.,]\d+(?!:))?)?(\17[0-5]\d'
|
131 |
+
. '([\.,]\d+)?)?([zZ]|([\+-])([01]\d|2[0-3]):?([0-5]\d)?)?)?)?$/';
|
132 |
+
|
133 |
+
return preg_match($crazyInsaneRegexThatSomehowDetectsIso8601, $string) === 1;
|
134 |
+
}
|
135 |
+
|
136 |
+
/**
|
137 |
+
* Determines if a value from Graph should be cast to DateTime.
|
138 |
+
*
|
139 |
+
* @param string $key
|
140 |
+
*
|
141 |
+
* @return boolean
|
142 |
+
*/
|
143 |
+
public function shouldCastAsDateTime($key)
|
144 |
+
{
|
145 |
+
return in_array($key, [
|
146 |
+
'created_time',
|
147 |
+
'updated_time',
|
148 |
+
'start_time',
|
149 |
+
'end_time',
|
150 |
+
'backdated_time',
|
151 |
+
'issued_at',
|
152 |
+
'expires_at',
|
153 |
+
'publish_time'
|
154 |
+
], true);
|
155 |
+
}
|
156 |
+
|
157 |
+
/**
|
158 |
+
* Casts a date value from Graph to DateTime.
|
159 |
+
*
|
160 |
+
* @param int|string $value
|
161 |
+
*
|
162 |
+
* @return \DateTime
|
163 |
+
*/
|
164 |
+
public function castToDateTime($value)
|
165 |
+
{
|
166 |
+
if (is_int($value)) {
|
167 |
+
$dt = new \DateTime();
|
168 |
+
$dt->setTimestamp($value);
|
169 |
+
} else {
|
170 |
+
$dt = new \DateTime($value);
|
171 |
+
}
|
172 |
+
|
173 |
+
return $dt;
|
174 |
+
}
|
175 |
+
|
176 |
+
/**
|
177 |
+
* Casts a birthday value from Graph to Birthday
|
178 |
+
*
|
179 |
+
* @param string $value
|
180 |
+
*
|
181 |
+
* @return Birthday
|
182 |
+
*/
|
183 |
+
public function castToBirthday($value)
|
184 |
+
{
|
185 |
+
return new Birthday($value);
|
186 |
+
}
|
187 |
+
|
188 |
+
/**
|
189 |
+
* Getter for $graphObjectMap.
|
190 |
+
*
|
191 |
+
* @return array
|
192 |
+
*/
|
193 |
+
public static function getObjectMap()
|
194 |
+
{
|
195 |
+
return static::$graphObjectMap;
|
196 |
+
}
|
197 |
+
}
|
Facebook/GraphNodes/GraphNodeFactory.php
ADDED
@@ -0,0 +1,392 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Copyright 2017 Facebook, Inc.
|
4 |
+
*
|
5 |
+
* You are hereby granted a non-exclusive, worldwide, royalty-free license to
|
6 |
+
* use, copy, modify, and distribute this software in source code or binary
|
7 |
+
* form for use in connection with the web services and APIs provided by
|
8 |
+
* Facebook.
|
9 |
+
*
|
10 |
+
* As with any software that integrates with the Facebook platform, your use
|
11 |
+
* of this software is subject to the Facebook Developer Principles and
|
12 |
+
* Policies [http://developers.facebook.com/policy/]. This copyright notice
|
13 |
+
* shall be included in all copies or substantial portions of the software.
|
14 |
+
*
|
15 |
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16 |
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17 |
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
18 |
+
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19 |
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
20 |
+
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
21 |
+
* DEALINGS IN THE SOFTWARE.
|
22 |
+
*
|
23 |
+
*/
|
24 |
+
namespace Facebook\GraphNodes;
|
25 |
+
|
26 |
+
use Facebook\FacebookResponse;
|
27 |
+
use Facebook\Exceptions\FacebookSDKException;
|
28 |
+
|
29 |
+
/**
|
30 |
+
* Class GraphNodeFactory
|
31 |
+
*
|
32 |
+
* @package Facebook
|
33 |
+
*
|
34 |
+
* ## Assumptions ##
|
35 |
+
* GraphEdge - is ALWAYS a numeric array
|
36 |
+
* GraphEdge - is ALWAYS an array of GraphNode types
|
37 |
+
* GraphNode - is ALWAYS an associative array
|
38 |
+
* GraphNode - MAY contain GraphNode's "recurrable"
|
39 |
+
* GraphNode - MAY contain GraphEdge's "recurrable"
|
40 |
+
* GraphNode - MAY contain DateTime's "primitives"
|
41 |
+
* GraphNode - MAY contain string's "primitives"
|
42 |
+
*/
|
43 |
+
class GraphNodeFactory
|
44 |
+
{
|
45 |
+
/**
|
46 |
+
* @const string The base graph object class.
|
47 |
+
*/
|
48 |
+
const BASE_GRAPH_NODE_CLASS = '\Facebook\GraphNodes\GraphNode';
|
49 |
+
|
50 |
+
/**
|
51 |
+
* @const string The base graph edge class.
|
52 |
+
*/
|
53 |
+
const BASE_GRAPH_EDGE_CLASS = '\Facebook\GraphNodes\GraphEdge';
|
54 |
+
|
55 |
+
/**
|
56 |
+
* @const string The graph object prefix.
|
57 |
+
*/
|
58 |
+
const BASE_GRAPH_OBJECT_PREFIX = '\Facebook\GraphNodes\\';
|
59 |
+
|
60 |
+
/**
|
61 |
+
* @var FacebookResponse The response entity from Graph.
|
62 |
+
*/
|
63 |
+
protected $response;
|
64 |
+
|
65 |
+
/**
|
66 |
+
* @var array The decoded body of the FacebookResponse entity from Graph.
|
67 |
+
*/
|
68 |
+
protected $decodedBody;
|
69 |
+
|
70 |
+
/**
|
71 |
+
* Init this Graph object.
|
72 |
+
*
|
73 |
+
* @param FacebookResponse $response The response entity from Graph.
|
74 |
+
*/
|
75 |
+
public function __construct(FacebookResponse $response)
|
76 |
+
{
|
77 |
+
$this->response = $response;
|
78 |
+
$this->decodedBody = $response->getDecodedBody();
|
79 |
+
}
|
80 |
+
|
81 |
+
/**
|
82 |
+
* Tries to convert a FacebookResponse entity into a GraphNode.
|
83 |
+
*
|
84 |
+
* @param string|null $subclassName The GraphNode sub class to cast to.
|
85 |
+
*
|
86 |
+
* @return GraphNode
|
87 |
+
*
|
88 |
+
* @throws FacebookSDKException
|
89 |
+
*/
|
90 |
+
public function makeGraphNode($subclassName = null)
|
91 |
+
{
|
92 |
+
$this->validateResponseAsArray();
|
93 |
+
$this->validateResponseCastableAsGraphNode();
|
94 |
+
|
95 |
+
return $this->castAsGraphNodeOrGraphEdge($this->decodedBody, $subclassName);
|
96 |
+
}
|
97 |
+
|
98 |
+
/**
|
99 |
+
* Convenience method for creating a GraphAchievement collection.
|
100 |
+
*
|
101 |
+
* @return GraphAchievement
|
102 |
+
*
|
103 |
+
* @throws FacebookSDKException
|
104 |
+
*/
|
105 |
+
public function makeGraphAchievement()
|
106 |
+
{
|
107 |
+
return $this->makeGraphNode(static::BASE_GRAPH_OBJECT_PREFIX . 'GraphAchievement');
|
108 |
+
}
|
109 |
+
|
110 |
+
/**
|
111 |
+
* Convenience method for creating a GraphAlbum collection.
|
112 |
+
*
|
113 |
+
* @return GraphAlbum
|
114 |
+
*
|
115 |
+
* @throws FacebookSDKException
|
116 |
+
*/
|
117 |
+
public function makeGraphAlbum()
|
118 |
+
{
|
119 |
+
return $this->makeGraphNode(static::BASE_GRAPH_OBJECT_PREFIX . 'GraphAlbum');
|
120 |
+
}
|
121 |
+
|
122 |
+
/**
|
123 |
+
* Convenience method for creating a GraphPage collection.
|
124 |
+
*
|
125 |
+
* @return GraphPage
|
126 |
+
*
|
127 |
+
* @throws FacebookSDKException
|
128 |
+
*/
|
129 |
+
public function makeGraphPage()
|
130 |
+
{
|
131 |
+
return $this->makeGraphNode(static::BASE_GRAPH_OBJECT_PREFIX . 'GraphPage');
|
132 |
+
}
|
133 |
+
|
134 |
+
/**
|
135 |
+
* Convenience method for creating a GraphSessionInfo collection.
|
136 |
+
*
|
137 |
+
* @return GraphSessionInfo
|
138 |
+
*
|
139 |
+
* @throws FacebookSDKException
|
140 |
+
*/
|
141 |
+
public function makeGraphSessionInfo()
|
142 |
+
{
|
143 |
+
return $this->makeGraphNode(static::BASE_GRAPH_OBJECT_PREFIX . 'GraphSessionInfo');
|
144 |
+
}
|
145 |
+
|
146 |
+
/**
|
147 |
+
* Convenience method for creating a GraphUser collection.
|
148 |
+
*
|
149 |
+
* @return GraphUser
|
150 |
+
*
|
151 |
+
* @throws FacebookSDKException
|
152 |
+
*/
|
153 |
+
public function makeGraphUser()
|
154 |
+
{
|
155 |
+
return $this->makeGraphNode(static::BASE_GRAPH_OBJECT_PREFIX . 'GraphUser');
|
156 |
+
}
|
157 |
+
|
158 |
+
/**
|
159 |
+
* Convenience method for creating a GraphEvent collection.
|
160 |
+
*
|
161 |
+
* @return GraphEvent
|
162 |
+
*
|
163 |
+
* @throws FacebookSDKException
|
164 |
+
*/
|
165 |
+
public function makeGraphEvent()
|
166 |
+
{
|
167 |
+
return $this->makeGraphNode(static::BASE_GRAPH_OBJECT_PREFIX . 'GraphEvent');
|
168 |
+
}
|
169 |
+
|
170 |
+
/**
|
171 |
+
* Convenience method for creating a GraphGroup collection.
|
172 |
+
*
|
173 |
+
* @return GraphGroup
|
174 |
+
*
|
175 |
+
* @throws FacebookSDKException
|
176 |
+
*/
|
177 |
+
public function makeGraphGroup()
|
178 |
+
{
|
179 |
+
return $this->makeGraphNode(static::BASE_GRAPH_OBJECT_PREFIX . 'GraphGroup');
|
180 |
+
}
|
181 |
+
|
182 |
+
/**
|
183 |
+
* Tries to convert a FacebookResponse entity into a GraphEdge.
|
184 |
+
*
|
185 |
+
* @param string|null $subclassName The GraphNode sub class to cast the list items to.
|
186 |
+
* @param boolean $auto_prefix Toggle to auto-prefix the subclass name.
|
187 |
+
*
|
188 |
+
* @return GraphEdge
|
189 |
+
*
|
190 |
+
* @throws FacebookSDKException
|
191 |
+
*/
|
192 |
+
public function makeGraphEdge($subclassName = null, $auto_prefix = true)
|
193 |
+
{
|
194 |
+
$this->validateResponseAsArray();
|
195 |
+
$this->validateResponseCastableAsGraphEdge();
|
196 |
+
|
197 |
+
if ($subclassName && $auto_prefix) {
|
198 |
+
$subclassName = static::BASE_GRAPH_OBJECT_PREFIX . $subclassName;
|
199 |
+
}
|
200 |
+
|
201 |
+
return $this->castAsGraphNodeOrGraphEdge($this->decodedBody, $subclassName);
|
202 |
+
}
|
203 |
+
|
204 |
+
/**
|
205 |
+
* Validates the decoded body.
|
206 |
+
*
|
207 |
+
* @throws FacebookSDKException
|
208 |
+
*/
|
209 |
+
public function validateResponseAsArray()
|
210 |
+
{
|
211 |
+
if (!is_array($this->decodedBody)) {
|
212 |
+
throw new FacebookSDKException('Unable to get response from Graph as array.', 620);
|
213 |
+
}
|
214 |
+
}
|
215 |
+
|
216 |
+
/**
|
217 |
+
* Validates that the return data can be cast as a GraphNode.
|
218 |
+
*
|
219 |
+
* @throws FacebookSDKException
|
220 |
+
*/
|
221 |
+
public function validateResponseCastableAsGraphNode()
|
222 |
+
{
|
223 |
+
if (isset($this->decodedBody['data']) && static::isCastableAsGraphEdge($this->decodedBody['data'])) {
|
224 |
+
throw new FacebookSDKException(
|
225 |
+
'Unable to convert response from Graph to a GraphNode because the response looks like a GraphEdge. Try using GraphNodeFactory::makeGraphEdge() instead.',
|
226 |
+
620
|
227 |
+
);
|
228 |
+
}
|
229 |
+
}
|
230 |
+
|
231 |
+
/**
|
232 |
+
* Validates that the return data can be cast as a GraphEdge.
|
233 |
+
*
|
234 |
+
* @throws FacebookSDKException
|
235 |
+
*/
|
236 |
+
public function validateResponseCastableAsGraphEdge()
|
237 |
+
{
|
238 |
+
if (!(isset($this->decodedBody['data']) && static::isCastableAsGraphEdge($this->decodedBody['data']))) {
|
239 |
+
throw new FacebookSDKException(
|
240 |
+
'Unable to convert response from Graph to a GraphEdge because the response does not look like a GraphEdge. Try using GraphNodeFactory::makeGraphNode() instead.',
|
241 |
+
620
|
242 |
+
);
|
243 |
+
}
|
244 |
+
}
|
245 |
+
|
246 |
+
/**
|
247 |
+
* Safely instantiates a GraphNode of $subclassName.
|
248 |
+
*
|
249 |
+
* @param array $data The array of data to iterate over.
|
250 |
+
* @param string|null $subclassName The subclass to cast this collection to.
|
251 |
+
*
|
252 |
+
* @return GraphNode
|
253 |
+
*
|
254 |
+
* @throws FacebookSDKException
|
255 |
+
*/
|
256 |
+
public function safelyMakeGraphNode(array $data, $subclassName = null)
|
257 |
+
{
|
258 |
+
$subclassName = $subclassName ?: static::BASE_GRAPH_NODE_CLASS;
|
259 |
+
static::validateSubclass($subclassName);
|
260 |
+
|
261 |
+
// Remember the parent node ID
|
262 |
+
$parentNodeId = isset($data['id']) ? $data['id'] : null;
|
263 |
+
|
264 |
+
$items = [];
|
265 |
+
|
266 |
+
foreach ($data as $k => $v) {
|
267 |
+
// Array means could be recurable
|
268 |
+
if (is_array($v)) {
|
269 |
+
// Detect any smart-casting from the $graphObjectMap array.
|
270 |
+
// This is always empty on the GraphNode collection, but subclasses can define
|
271 |
+
// their own array of smart-casting types.
|
272 |
+
$graphObjectMap = $subclassName::getObjectMap();
|
273 |
+
$objectSubClass = isset($graphObjectMap[$k])
|
274 |
+
? $graphObjectMap[$k]
|
275 |
+
: null;
|
276 |
+
|
277 |
+
// Could be a GraphEdge or GraphNode
|
278 |
+
$items[$k] = $this->castAsGraphNodeOrGraphEdge($v, $objectSubClass, $k, $parentNodeId);
|
279 |
+
} else {
|
280 |
+
$items[$k] = $v;
|
281 |
+
}
|
282 |
+
}
|
283 |
+
|
284 |
+
return new $subclassName($items);
|
285 |
+
}
|
286 |
+
|
287 |
+
/**
|
288 |
+
* Takes an array of values and determines how to cast each node.
|
289 |
+
*
|
290 |
+
* @param array $data The array of data to iterate over.
|
291 |
+
* @param string|null $subclassName The subclass to cast this collection to.
|
292 |
+
* @param string|null $parentKey The key of this data (Graph edge).
|
293 |
+
* @param string|null $parentNodeId The parent Graph node ID.
|
294 |
+
*
|
295 |
+
* @return GraphNode|GraphEdge
|
296 |
+
*
|
297 |
+
* @throws FacebookSDKException
|
298 |
+
*/
|
299 |
+
public function castAsGraphNodeOrGraphEdge(array $data, $subclassName = null, $parentKey = null, $parentNodeId = null)
|
300 |
+
{
|
301 |
+
if (isset($data['data'])) {
|
302 |
+
// Create GraphEdge
|
303 |
+
if (static::isCastableAsGraphEdge($data['data'])) {
|
304 |
+
return $this->safelyMakeGraphEdge($data, $subclassName, $parentKey, $parentNodeId);
|
305 |
+
}
|
306 |
+
// Sometimes Graph is a weirdo and returns a GraphNode under the "data" key
|
307 |
+
$data = $data['data'];
|
308 |
+
}
|
309 |
+
|
310 |
+
// Create GraphNode
|
311 |
+
return $this->safelyMakeGraphNode($data, $subclassName);
|
312 |
+
}
|
313 |
+
|
314 |
+
/**
|
315 |
+
* Return an array of GraphNode's.
|
316 |
+
*
|
317 |
+
* @param array $data The array of data to iterate over.
|
318 |
+
* @param string|null $subclassName The GraphNode subclass to cast each item in the list to.
|
319 |
+
* @param string|null $parentKey The key of this data (Graph edge).
|
320 |
+
* @param string|null $parentNodeId The parent Graph node ID.
|
321 |
+
*
|
322 |
+
* @return GraphEdge
|
323 |
+
*
|
324 |
+
* @throws FacebookSDKException
|
325 |
+
*/
|
326 |
+
public function safelyMakeGraphEdge(array $data, $subclassName = null, $parentKey = null, $parentNodeId = null)
|
327 |
+
{
|
328 |
+
if (!isset($data['data'])) {
|
329 |
+
throw new FacebookSDKException('Cannot cast data to GraphEdge. Expected a "data" key.', 620);
|
330 |
+
}
|
331 |
+
|
332 |
+
$dataList = [];
|
333 |
+
foreach ($data['data'] as $graphNode) {
|
334 |
+
$dataList[] = $this->safelyMakeGraphNode($graphNode, $subclassName);
|
335 |
+
}
|
336 |
+
|
337 |
+
$metaData = $this->getMetaData($data);
|
338 |
+
|
339 |
+
// We'll need to make an edge endpoint for this in case it's a GraphEdge (for cursor pagination)
|
340 |
+
$parentGraphEdgeEndpoint = $parentNodeId && $parentKey ? '/' . $parentNodeId . '/' . $parentKey : null;
|
341 |
+
$className = static::BASE_GRAPH_EDGE_CLASS;
|
342 |
+
|
343 |
+
return new $className($this->response->getRequest(), $dataList, $metaData, $parentGraphEdgeEndpoint, $subclassName);
|
344 |
+
}
|
345 |
+
|
346 |
+
/**
|
347 |
+
* Get the meta data from a list in a Graph response.
|
348 |
+
*
|
349 |
+
* @param array $data The Graph response.
|
350 |
+
*
|
351 |
+
* @return array
|
352 |
+
*/
|
353 |
+
public function getMetaData(array $data)
|
354 |
+
{
|
355 |
+
unset($data['data']);
|
356 |
+
|
357 |
+
return $data;
|
358 |
+
}
|
359 |
+
|
360 |
+
/**
|
361 |
+
* Determines whether or not the data should be cast as a GraphEdge.
|
362 |
+
*
|
363 |
+
* @param array $data
|
364 |
+
*
|
365 |
+
* @return boolean
|
366 |
+
*/
|
367 |
+
public static function isCastableAsGraphEdge(array $data)
|
368 |
+
{
|
369 |
+
if ($data === []) {
|
370 |
+
return true;
|
371 |
+
}
|
372 |
+
|
373 |
+
// Checks for a sequential numeric array which would be a GraphEdge
|
374 |
+
return array_keys($data) === range(0, count($data) - 1);
|
375 |
+
}
|
376 |
+
|
377 |
+
/**
|
378 |
+
* Ensures that the subclass in question is valid.
|
379 |
+
*
|
380 |
+
* @param string $subclassName The GraphNode subclass to validate.
|
381 |
+
*
|
382 |
+
* @throws FacebookSDKException
|
383 |
+
*/
|
384 |
+
public static function validateSubclass($subclassName)
|
385 |
+
{
|
386 |
+
if ($subclassName == static::BASE_GRAPH_NODE_CLASS || is_subclass_of($subclassName, static::BASE_GRAPH_NODE_CLASS)) {
|
387 |
+
return;
|
388 |
+
}
|
389 |
+
|
390 |
+
throw new FacebookSDKException('The given subclass "' . $subclassName . '" is not valid. Cannot cast to an object that is not a GraphNode subclass.', 620);
|
391 |
+
}
|
392 |
+
}
|
Facebook/GraphNodes/GraphObject.php
ADDED
@@ -0,0 +1,36 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Copyright 2017 Facebook, Inc.
|
4 |
+
*
|
5 |
+
* You are hereby granted a non-exclusive, worldwide, royalty-free license to
|
6 |
+
* use, copy, modify, and distribute this software in source code or binary
|
7 |
+
* form for use in connection with the web services and APIs provided by
|
8 |
+
* Facebook.
|
9 |
+
*
|
10 |
+
* As with any software that integrates with the Facebook platform, your use
|
11 |
+
* of this software is subject to the Facebook Developer Principles and
|
12 |
+
* Policies [http://developers.facebook.com/policy/]. This copyright notice
|
13 |
+
* shall be included in all copies or substantial portions of the software.
|
14 |
+
*
|
15 |
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16 |
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17 |
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
18 |
+
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19 |
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
20 |
+
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
21 |
+
* DEALINGS IN THE SOFTWARE.
|
22 |
+
*
|
23 |
+
*/
|
24 |
+
namespace Facebook\GraphNodes;
|
25 |
+
|
26 |
+
/**
|
27 |
+
* Class GraphObject
|
28 |
+
*
|
29 |
+
* @package Facebook
|
30 |
+
*
|
31 |
+
* @deprecated 5.0.0 GraphObject has been renamed to GraphNode
|
32 |
+
* @todo v6: Remove this class
|
33 |
+
*/
|
34 |
+
class GraphObject extends GraphNode
|
35 |
+
{
|
36 |
+
}
|
Facebook/GraphNodes/GraphObjectFactory.php
ADDED
@@ -0,0 +1,88 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Copyright 2017 Facebook, Inc.
|
4 |
+
*
|
5 |
+
* You are hereby granted a non-exclusive, worldwide, royalty-free license to
|
6 |
+
* use, copy, modify, and distribute this software in source code or binary
|
7 |
+
* form for use in connection with the web services and APIs provided by
|
8 |
+
* Facebook.
|
9 |
+
*
|
10 |
+
* As with any software that integrates with the Facebook platform, your use
|
11 |
+
* of this software is subject to the Facebook Developer Principles and
|
12 |
+
* Policies [http://developers.facebook.com/policy/]. This copyright notice
|
13 |
+
* shall be included in all copies or substantial portions of the software.
|
14 |
+
*
|
15 |
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16 |
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17 |
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
18 |
+
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19 |
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
20 |
+
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
21 |
+
* DEALINGS IN THE SOFTWARE.
|
22 |
+
*
|
23 |
+
*/
|
24 |
+
namespace Facebook\GraphNodes;
|
25 |
+
|
26 |
+
use Facebook\Exceptions\FacebookSDKException;
|
27 |
+
|
28 |
+
/**
|
29 |
+
* Class GraphObjectFactory
|
30 |
+
*
|
31 |
+
* @package Facebook
|
32 |
+
*
|
33 |
+
* @deprecated 5.0.0 GraphObjectFactory has been renamed to GraphNodeFactory
|
34 |
+
* @todo v6: Remove this class
|
35 |
+
*/
|
36 |
+
class GraphObjectFactory extends GraphNodeFactory
|
37 |
+
{
|
38 |
+
/**
|
39 |
+
* @const string The base graph object class.
|
40 |
+
*/
|
41 |
+
const BASE_GRAPH_NODE_CLASS = '\Facebook\GraphNodes\GraphObject';
|
42 |
+
|
43 |
+
/**
|
44 |
+
* @const string The base graph edge class.
|
45 |
+
*/
|
46 |
+
const BASE_GRAPH_EDGE_CLASS = '\Facebook\GraphNodes\GraphList';
|
47 |
+
|
48 |
+
/**
|
49 |
+
* Tries to convert a FacebookResponse entity into a GraphNode.
|
50 |
+
*
|
51 |
+
* @param string|null $subclassName The GraphNode sub class to cast to.
|
52 |
+
*
|
53 |
+
* @return GraphNode
|
54 |
+
*
|
55 |
+
* @deprecated 5.0.0 GraphObjectFactory has been renamed to GraphNodeFactory
|
56 |
+
*/
|
57 |
+
public function makeGraphObject($subclassName = null)
|
58 |
+
{
|
59 |
+
return $this->makeGraphNode($subclassName);
|
60 |
+
}
|
61 |
+
|
62 |
+
/**
|
63 |
+
* Convenience method for creating a GraphEvent collection.
|
64 |
+
*
|
65 |
+
* @return GraphEvent
|
66 |
+
*
|
67 |
+
* @throws FacebookSDKException
|
68 |
+
*/
|
69 |
+
public function makeGraphEvent()
|
70 |
+
{
|
71 |
+
return $this->makeGraphNode(static::BASE_GRAPH_OBJECT_PREFIX . 'GraphEvent');
|
72 |
+
}
|
73 |
+
|
74 |
+
/**
|
75 |
+
* Tries to convert a FacebookResponse entity into a GraphEdge.
|
76 |
+
*
|
77 |
+
* @param string|null $subclassName The GraphNode sub class to cast the list items to.
|
78 |
+
* @param boolean $auto_prefix Toggle to auto-prefix the subclass name.
|
79 |
+
*
|
80 |
+
* @return GraphEdge
|
81 |
+
*
|
82 |
+
* @deprecated 5.0.0 GraphObjectFactory has been renamed to GraphNodeFactory
|
83 |
+
*/
|
84 |
+
public function makeGraphList($subclassName = null, $auto_prefix = true)
|
85 |
+
{
|
86 |
+
return $this->makeGraphEdge($subclassName, $auto_prefix);
|
87 |
+
}
|
88 |
+
}
|
Facebook/GraphNodes/GraphPage.php
ADDED
@@ -0,0 +1,147 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Copyright 2017 Facebook, Inc.
|
4 |
+
*
|
5 |
+
* You are hereby granted a non-exclusive, worldwide, royalty-free license to
|
6 |
+
* use, copy, modify, and distribute this software in source code or binary
|
7 |
+
* form for use in connection with the web services and APIs provided by
|
8 |
+
* Facebook.
|
9 |
+
*
|
10 |
+
* As with any software that integrates with the Facebook platform, your use
|
11 |
+
* of this software is subject to the Facebook Developer Principles and
|
12 |
+
* Policies [http://developers.facebook.com/policy/]. This copyright notice
|
13 |
+
* shall be included in all copies or substantial portions of the software.
|
14 |
+
*
|
15 |
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16 |
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17 |
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
18 |
+
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19 |
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
20 |
+
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
21 |
+
* DEALINGS IN THE SOFTWARE.
|
22 |
+
*
|
23 |
+
*/
|
24 |
+
namespace Facebook\GraphNodes;
|
25 |
+
|
26 |
+
/**
|
27 |
+
* Class GraphPage
|
28 |
+
*
|
29 |
+
* @package Facebook
|
30 |
+
*/
|
31 |
+
class GraphPage extends GraphNode
|
32 |
+
{
|
33 |
+
/**
|
34 |
+
* @var array Maps object key names to Graph object types.
|
35 |
+
*/
|
36 |
+
protected static $graphObjectMap = [
|
37 |
+
'best_page' => '\Facebook\GraphNodes\GraphPage',
|
38 |
+
'global_brand_parent_page' => '\Facebook\GraphNodes\GraphPage',
|
39 |
+
'location' => '\Facebook\GraphNodes\GraphLocation',
|
40 |
+
'cover' => '\Facebook\GraphNodes\GraphCoverPhoto',
|
41 |
+
'picture' => '\Facebook\GraphNodes\GraphPicture',
|
42 |
+
];
|
43 |
+
|
44 |
+
/**
|
45 |
+
* Returns the ID for the user's page as a string if present.
|
46 |
+
*
|
47 |
+
* @return string|null
|
48 |
+
*/
|
49 |
+
public function getId()
|
50 |
+
{
|
51 |
+
return $this->getField('id');
|
52 |
+
}
|
53 |
+
|
54 |
+
/**
|
55 |
+
* Returns the Category for the user's page as a string if present.
|
56 |
+
*
|
57 |
+
* @return string|null
|
58 |
+
*/
|
59 |
+
public function getCategory()
|
60 |
+
{
|
61 |
+
return $this->getField('category');
|
62 |
+
}
|
63 |
+
|
64 |
+
/**
|
65 |
+
* Returns the Name of the user's page as a string if present.
|
66 |
+
*
|
67 |
+
* @return string|null
|
68 |
+
*/
|
69 |
+
public function getName()
|
70 |
+
{
|
71 |
+
return $this->getField('name');
|
72 |
+
}
|
73 |
+
|
74 |
+
/**
|
75 |
+
* Returns the best available Page on Facebook.
|
76 |
+
*
|
77 |
+
* @return GraphPage|null
|
78 |
+
*/
|
79 |
+
public function getBestPage()
|
80 |
+
{
|
81 |
+
return $this->getField('best_page');
|
82 |
+
}
|
83 |
+
|
84 |
+
/**
|
85 |
+
* Returns the brand's global (parent) Page.
|
86 |
+
*
|
87 |
+
* @return GraphPage|null
|
88 |
+
*/
|
89 |
+
public function getGlobalBrandParentPage()
|
90 |
+
{
|
91 |
+
return $this->getField('global_brand_parent_page');
|
92 |
+
}
|
93 |
+
|
94 |
+
/**
|
95 |
+
* Returns the location of this place.
|
96 |
+
*
|
97 |
+
* @return GraphLocation|null
|
98 |
+
*/
|
99 |
+
public function getLocation()
|
100 |
+
{
|
101 |
+
return $this->getField('location');
|
102 |
+
}
|
103 |
+
|
104 |
+
/**
|
105 |
+
* Returns CoverPhoto of the Page.
|
106 |
+
*
|
107 |
+
* @return GraphCoverPhoto|null
|
108 |
+
*/
|
109 |
+
public function getCover()
|
110 |
+
{
|
111 |
+
return $this->getField('cover');
|
112 |
+
}
|
113 |
+
|
114 |
+
/**
|
115 |
+
* Returns Picture of the Page.
|
116 |
+
*
|
117 |
+
* @return GraphPicture|null
|
118 |
+
*/
|
119 |
+
public function getPicture()
|
120 |
+
{
|
121 |
+
return $this->getField('picture');
|
122 |
+
}
|
123 |
+
|
124 |
+
/**
|
125 |
+
* Returns the page access token for the admin user.
|
126 |
+
*
|
127 |
+
* Only available in the `/me/accounts` context.
|
128 |
+
*
|
129 |
+
* @return string|null
|
130 |
+
*/
|
131 |
+
public function getAccessToken()
|
132 |
+
{
|
133 |
+
return $this->getField('access_token');
|
134 |
+
}
|
135 |
+
|
136 |
+
/**
|
137 |
+
* Returns the roles of the page admin user.
|
138 |
+
*
|
139 |
+
* Only available in the `/me/accounts` context.
|
140 |
+
*
|
141 |
+
* @return array|null
|
142 |
+
*/
|
143 |
+
public function getPerms()
|
144 |
+
{
|
145 |
+
return $this->getField('perms');
|
146 |
+
}
|
147 |
+
}
|
Facebook/GraphNodes/GraphPicture.php
ADDED
@@ -0,0 +1,72 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Copyright 2017 Facebook, Inc.
|
4 |
+
*
|
5 |
+
* You are hereby granted a non-exclusive, worldwide, royalty-free license to
|
6 |
+
* use, copy, modify, and distribute this software in source code or binary
|
7 |
+
* form for use in connection with the web services and APIs provided by
|
8 |
+
* Facebook.
|
9 |
+
*
|
10 |
+
* As with any software that integrates with the Facebook platform, your use
|
11 |
+
* of this software is subject to the Facebook Developer Principles and
|
12 |
+
* Policies [http://developers.facebook.com/policy/]. This copyright notice
|
13 |
+
* shall be included in all copies or substantial portions of the software.
|
14 |
+
*
|
15 |
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16 |
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17 |
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
18 |
+
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19 |
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
20 |
+
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
21 |
+
* DEALINGS IN THE SOFTWARE.
|
22 |
+
*
|
23 |
+
*/
|
24 |
+
namespace Facebook\GraphNodes;
|
25 |
+
|
26 |
+
/**
|
27 |
+
* Class GraphPicture
|
28 |
+
*
|
29 |
+
* @package Facebook
|
30 |
+
*/
|
31 |
+
class GraphPicture extends GraphNode
|
32 |
+
{
|
33 |
+
/**
|
34 |
+
* Returns true if user picture is silhouette.
|
35 |
+
*
|
36 |
+
* @return bool|null
|
37 |
+
*/
|
38 |
+
public function isSilhouette()
|
39 |
+
{
|
40 |
+
return $this->getField('is_silhouette');
|
41 |
+
}
|
42 |
+
|
43 |
+
/**
|
44 |
+
* Returns the url of user picture if it exists
|
45 |
+
*
|
46 |
+
* @return string|null
|
47 |
+
*/
|
48 |
+
public function getUrl()
|
49 |
+
{
|
50 |
+
return $this->getField('url');
|
51 |
+
}
|
52 |
+
|
53 |
+
/**
|
54 |
+
* Returns the width of user picture if it exists
|
55 |
+
*
|
56 |
+
* @return int|null
|
57 |
+
*/
|
58 |
+
public function getWidth()
|
59 |
+
{
|
60 |
+
return $this->getField('width');
|
61 |
+
}
|
62 |
+
|
63 |
+
/**
|
64 |
+
* Returns the height of user picture if it exists
|
65 |
+
*
|
66 |
+
* @return int|null
|
67 |
+
*/
|
68 |
+
public function getHeight()
|
69 |
+
{
|
70 |
+
return $this->getField('height');
|
71 |
+
}
|
72 |
+
}
|
Facebook/GraphNodes/GraphSessionInfo.php
ADDED
@@ -0,0 +1,102 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Copyright 2017 Facebook, Inc.
|
4 |
+
*
|
5 |
+
* You are hereby granted a non-exclusive, worldwide, royalty-free license to
|
6 |
+
* use, copy, modify, and distribute this software in source code or binary
|
7 |
+
* form for use in connection with the web services and APIs provided by
|
8 |
+
* Facebook.
|
9 |
+
*
|
10 |
+
* As with any software that integrates with the Facebook platform, your use
|
11 |
+
* of this software is subject to the Facebook Developer Principles and
|
12 |
+
* Policies [http://developers.facebook.com/policy/]. This copyright notice
|
13 |
+
* shall be included in all copies or substantial portions of the software.
|
14 |
+
*
|
15 |
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16 |
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17 |
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
18 |
+
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19 |
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
20 |
+
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
21 |
+
* DEALINGS IN THE SOFTWARE.
|
22 |
+
*
|
23 |
+
*/
|
24 |
+
namespace Facebook\GraphNodes;
|
25 |
+
|
26 |
+
/**
|
27 |
+
* Class GraphSessionInfo
|
28 |
+
*
|
29 |
+
* @package Facebook
|
30 |
+
*/
|
31 |
+
class GraphSessionInfo extends GraphNode
|
32 |
+
{
|
33 |
+
/**
|
34 |
+
* Returns the application id the token was issued for.
|
35 |
+
*
|
36 |
+
* @return string|null
|
37 |
+
*/
|
38 |
+
public function getAppId()
|
39 |
+
{
|
40 |
+
return $this->getField('app_id');
|
41 |
+
}
|
42 |
+
|
43 |
+
/**
|
44 |
+
* Returns the application name the token was issued for.
|
45 |
+
*
|
46 |
+
* @return string|null
|
47 |
+
*/
|
48 |
+
public function getApplication()
|
49 |
+
{
|
50 |
+
return $this->getField('application');
|
51 |
+
}
|
52 |
+
|
53 |
+
/**
|
54 |
+
* Returns the date & time that the token expires.
|
55 |
+
*
|
56 |
+
* @return \DateTime|null
|
57 |
+
*/
|
58 |
+
public function getExpiresAt()
|
59 |
+
{
|
60 |
+
return $this->getField('expires_at');
|
61 |
+
}
|
62 |
+
|
63 |
+
/**
|
64 |
+
* Returns whether the token is valid.
|
65 |
+
*
|
66 |
+
* @return boolean
|
67 |
+
*/
|
68 |
+
public function getIsValid()
|
69 |
+
{
|
70 |
+
return $this->getField('is_valid');
|
71 |
+
}
|
72 |
+
|
73 |
+
/**
|
74 |
+
* Returns the date & time the token was issued at.
|
75 |
+
*
|
76 |
+
* @return \DateTime|null
|
77 |
+
*/
|
78 |
+
public function getIssuedAt()
|
79 |
+
{
|
80 |
+
return $this->getField('issued_at');
|
81 |
+
}
|
82 |
+
|
83 |
+
/**
|
84 |
+
* Returns the scope permissions associated with the token.
|
85 |
+
*
|
86 |
+
* @return array
|
87 |
+
*/
|
88 |
+
public function getScopes()
|
89 |
+
{
|
90 |
+
return $this->getField('scopes');
|
91 |
+
}
|
92 |
+
|
93 |
+
/**
|
94 |
+
* Returns the login id of the user associated with the token.
|
95 |
+
*
|
96 |
+
* @return string|null
|
97 |
+
*/
|
98 |
+
public function getUserId()
|
99 |
+
{
|
100 |
+
return $this->getField('user_id');
|
101 |
+
}
|
102 |
+
}
|
Facebook/GraphNodes/GraphUser.php
ADDED
@@ -0,0 +1,172 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Copyright 2017 Facebook, Inc.
|
4 |
+
*
|
5 |
+
* You are hereby granted a non-exclusive, worldwide, royalty-free license to
|
6 |
+
* use, copy, modify, and distribute this software in source code or binary
|
7 |
+
* form for use in connection with the web services and APIs provided by
|
8 |
+
* Facebook.
|
9 |
+
*
|
10 |
+
* As with any software that integrates with the Facebook platform, your use
|
11 |
+
* of this software is subject to the Facebook Developer Principles and
|
12 |
+
* Policies [http://developers.facebook.com/policy/]. This copyright notice
|
13 |
+
* shall be included in all copies or substantial portions of the software.
|
14 |
+
*
|
15 |
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16 |
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17 |
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
18 |
+
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19 |
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
20 |
+
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
21 |
+
* DEALINGS IN THE SOFTWARE.
|
22 |
+
*
|
23 |
+
*/
|
24 |
+
namespace Facebook\GraphNodes;
|
25 |
+
|
26 |
+
/**
|
27 |
+
* Class GraphUser
|
28 |
+
*
|
29 |
+
* @package Facebook
|
30 |
+
*/
|
31 |
+
class GraphUser extends GraphNode
|
32 |
+
{
|
33 |
+
/**
|
34 |
+
* @var array Maps object key names to Graph object types.
|
35 |
+
*/
|
36 |
+
protected static $graphObjectMap = [
|
37 |
+
'hometown' => '\Facebook\GraphNodes\GraphPage',
|
38 |
+
'location' => '\Facebook\GraphNodes\GraphPage',
|
39 |
+
'significant_other' => '\Facebook\GraphNodes\GraphUser',
|
40 |
+
'picture' => '\Facebook\GraphNodes\GraphPicture',
|
41 |
+
];
|
42 |
+
|
43 |
+
/**
|
44 |
+
* Returns the ID for the user as a string if present.
|
45 |
+
*
|
46 |
+
* @return string|null
|
47 |
+
*/
|
48 |
+
public function getId()
|
49 |
+
{
|
50 |
+
return $this->getField('id');
|
51 |
+
}
|
52 |
+
|
53 |
+
/**
|
54 |
+
* Returns the name for the user as a string if present.
|
55 |
+
*
|
56 |
+
* @return string|null
|
57 |
+
*/
|
58 |
+
public function getName()
|
59 |
+
{
|
60 |
+
return $this->getField('name');
|
61 |
+
}
|
62 |
+
|
63 |
+
/**
|
64 |
+
* Returns the first name for the user as a string if present.
|
65 |
+
*
|
66 |
+
* @return string|null
|
67 |
+
*/
|
68 |
+
public function getFirstName()
|
69 |
+
{
|
70 |
+
return $this->getField('first_name');
|
71 |
+
}
|
72 |
+
|
73 |
+
/**
|
74 |
+
* Returns the middle name for the user as a string if present.
|
75 |
+
*
|
76 |
+
* @return string|null
|
77 |
+
*/
|
78 |
+
public function getMiddleName()
|
79 |
+
{
|
80 |
+
return $this->getField('middle_name');
|
81 |
+
}
|
82 |
+
|
83 |
+
/**
|
84 |
+
* Returns the last name for the user as a string if present.
|
85 |
+
*
|
86 |
+
* @return string|null
|
87 |
+
*/
|
88 |
+
public function getLastName()
|
89 |
+
{
|
90 |
+
return $this->getField('last_name');
|
91 |
+
}
|
92 |
+
|
93 |
+
/**
|
94 |
+
* Returns the email for the user as a string if present.
|
95 |
+
*
|
96 |
+
* @return string|null
|
97 |
+
*/
|
98 |
+
public function getEmail()
|
99 |
+
{
|
100 |
+
return $this->getField('email');
|
101 |
+
}
|
102 |
+
|
103 |
+
/**
|
104 |
+
* Returns the gender for the user as a string if present.
|
105 |
+
*
|
106 |
+
* @return string|null
|
107 |
+
*/
|
108 |
+
public function getGender()
|
109 |
+
{
|
110 |
+
return $this->getField('gender');
|
111 |
+
}
|
112 |
+
|
113 |
+
/**
|
114 |
+
* Returns the Facebook URL for the user as a string if available.
|
115 |
+
*
|
116 |
+
* @return string|null
|
117 |
+
*/
|
118 |
+
public function getLink()
|
119 |
+
{
|
120 |
+
return $this->getField('link');
|
121 |
+
}
|
122 |
+
|
123 |
+
/**
|
124 |
+
* Returns the users birthday, if available.
|
125 |
+
*
|
126 |
+
* @return \DateTime|null
|
127 |
+
*/
|
128 |
+
public function getBirthday()
|
129 |
+
{
|
130 |
+
return $this->getField('birthday');
|
131 |
+
}
|
132 |
+
|
133 |
+
/**
|
134 |
+
* Returns the current location of the user as a GraphPage.
|
135 |
+
*
|
136 |
+
* @return GraphPage|null
|
137 |
+
*/
|
138 |
+
public function getLocation()
|
139 |
+
{
|
140 |
+
return $this->getField('location');
|
141 |
+
}
|
142 |
+
|
143 |
+
/**
|
144 |
+
* Returns the current location of the user as a GraphPage.
|
145 |
+
*
|
146 |
+
* @return GraphPage|null
|
147 |
+
*/
|
148 |
+
public function getHometown()
|
149 |
+
{
|
150 |
+
return $this->getField('hometown');
|
151 |
+
}
|
152 |
+
|
153 |
+
/**
|
154 |
+
* Returns the current location of the user as a GraphUser.
|
155 |
+
*
|
156 |
+
* @return GraphUser|null
|
157 |
+
*/
|
158 |
+
public function getSignificantOther()
|
159 |
+
{
|
160 |
+
return $this->getField('significant_other');
|
161 |
+
}
|
162 |
+
|
163 |
+
/**
|
164 |
+
* Returns the picture of the user as a GraphPicture
|
165 |
+
*
|
166 |
+
* @return GraphPicture|null
|
167 |
+
*/
|
168 |
+
public function getPicture()
|
169 |
+
{
|
170 |
+
return $this->getField('picture');
|
171 |
+
}
|
172 |
+
}
|
Facebook/Helpers/FacebookCanvasHelper.php
ADDED
@@ -0,0 +1,52 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Copyright 2017 Facebook, Inc.
|
4 |
+
*
|
5 |
+
* You are hereby granted a non-exclusive, worldwide, royalty-free license to
|
6 |
+
* use, copy, modify, and distribute this software in source code or binary
|
7 |
+
* form for use in connection with the web services and APIs provided by
|
8 |
+
* Facebook.
|
9 |
+
*
|
10 |
+
* As with any software that integrates with the Facebook platform, your use
|
11 |
+
* of this software is subject to the Facebook Developer Principles and
|
12 |
+
* Policies [http://developers.facebook.com/policy/]. This copyright notice
|
13 |
+
* shall be included in all copies or substantial portions of the software.
|
14 |
+
*
|
15 |
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16 |
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17 |
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
18 |
+
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19 |
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
20 |
+
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
21 |
+
* DEALINGS IN THE SOFTWARE.
|
22 |
+
*
|
23 |
+
*/
|
24 |
+
namespace Facebook\Helpers;
|
25 |
+
|
26 |
+
/**
|
27 |
+
* Class FacebookCanvasLoginHelper
|
28 |
+
*
|
29 |
+
* @package Facebook
|
30 |
+
*/
|
31 |
+
class FacebookCanvasHelper extends FacebookSignedRequestFromInputHelper
|
32 |
+
{
|
33 |
+
/**
|
34 |
+
* Returns the app data value.
|
35 |
+
*
|
36 |
+
* @return mixed|null
|
37 |
+
*/
|
38 |
+
public function getAppData()
|
39 |
+
{
|
40 |
+
return $this->signedRequest ? $this->signedRequest->get('app_data') : null;
|
41 |
+
}
|
42 |
+
|
43 |
+
/**
|
44 |
+
* Get raw signed request from POST.
|
45 |
+
*
|
46 |
+
* @return string|null
|
47 |
+
*/
|
48 |
+
public function getRawSignedRequest()
|
49 |
+
{
|
50 |
+
return $this->getRawSignedRequestFromPost() ?: null;
|
51 |
+
}
|
52 |
+
}
|
Facebook/Helpers/FacebookJavaScriptHelper.php
ADDED
@@ -0,0 +1,42 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Copyright 2017 Facebook, Inc.
|
4 |
+
*
|
5 |
+
* You are hereby granted a non-exclusive, worldwide, royalty-free license to
|
6 |
+
* use, copy, modify, and distribute this software in source code or binary
|
7 |
+
* form for use in connection with the web services and APIs provided by
|
8 |
+
* Facebook.
|
9 |
+
*
|
10 |
+
* As with any software that integrates with the Facebook platform, your use
|
11 |
+
* of this software is subject to the Facebook Developer Principles and
|
12 |
+
* Policies [http://developers.facebook.com/policy/]. This copyright notice
|
13 |
+
* shall be included in all copies or substantial portions of the software.
|
14 |
+
*
|
15 |
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16 |
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17 |
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
18 |
+
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19 |
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
20 |
+
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
21 |
+
* DEALINGS IN THE SOFTWARE.
|
22 |
+
*
|
23 |
+
*/
|
24 |
+
namespace Facebook\Helpers;
|
25 |
+
|
26 |
+
/**
|
27 |
+
* Class FacebookJavaScriptLoginHelper
|
28 |
+
*
|
29 |
+
* @package Facebook
|
30 |
+
*/
|
31 |
+
class FacebookJavaScriptHelper extends FacebookSignedRequestFromInputHelper
|
32 |
+
{
|
33 |
+
/**
|
34 |
+
* Get raw signed request from the cookie.
|
35 |
+
*
|
36 |
+
* @return string|null
|
37 |
+
*/
|
38 |
+
public function getRawSignedRequest()
|
39 |
+
{
|
40 |
+
return $this->getRawSignedRequestFromCookie();
|
41 |
+
}
|
42 |
+
}
|
Facebook/Helpers/FacebookPageTabHelper.php
ADDED
@@ -0,0 +1,95 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Copyright 2017 Facebook, Inc.
|
4 |
+
*
|
5 |
+
* You are hereby granted a non-exclusive, worldwide, royalty-free license to
|
6 |
+
* use, copy, modify, and distribute this software in source code or binary
|
7 |
+
* form for use in connection with the web services and APIs provided by
|
8 |
+
* Facebook.
|
9 |
+
*
|
10 |
+
* As with any software that integrates with the Facebook platform, your use
|
11 |
+
* of this software is subject to the Facebook Developer Principles and
|
12 |
+
* Policies [http://developers.facebook.com/policy/]. This copyright notice
|
13 |
+
* shall be included in all copies or substantial portions of the software.
|
14 |
+
*
|
15 |
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16 |
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17 |
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
18 |
+
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19 |
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
20 |
+
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
21 |
+
* DEALINGS IN THE SOFTWARE.
|
22 |
+
*
|
23 |
+
*/
|
24 |
+
namespace Facebook\Helpers;
|
25 |
+
|
26 |
+
use Facebook\FacebookApp;
|
27 |
+
use Facebook\FacebookClient;
|
28 |
+
|
29 |
+
/**
|
30 |
+
* Class FacebookPageTabHelper
|
31 |
+
*
|
32 |
+
* @package Facebook
|
33 |
+
*/
|
34 |
+
class FacebookPageTabHelper extends FacebookCanvasHelper
|
35 |
+
{
|
36 |
+
/**
|
37 |
+
* @var array|null
|
38 |
+
*/
|
39 |
+
protected $pageData;
|
40 |
+
|
41 |
+
/**
|
42 |
+
* Initialize the helper and process available signed request data.
|
43 |
+
*
|
44 |
+
* @param FacebookApp $app The FacebookApp entity.
|
45 |
+
* @param FacebookClient $client The client to make HTTP requests.
|
46 |
+
* @param string|null $graphVersion The version of Graph to use.
|
47 |
+
*/
|
48 |
+
public function __construct(FacebookApp $app, FacebookClient $client, $graphVersion = null)
|
49 |
+
{
|
50 |
+
parent::__construct($app, $client, $graphVersion);
|
51 |
+
|
52 |
+
if (!$this->signedRequest) {
|
53 |
+
return;
|
54 |
+
}
|
55 |
+
|
56 |
+
$this->pageData = $this->signedRequest->get('page');
|
57 |
+
}
|
58 |
+
|
59 |
+
/**
|
60 |
+
* Returns a value from the page data.
|
61 |
+
*
|
62 |
+
* @param string $key
|
63 |
+
* @param mixed|null $default
|
64 |
+
*
|
65 |
+
* @return mixed|null
|
66 |
+
*/
|
67 |
+
public function getPageData($key, $default = null)
|
68 |
+
{
|
69 |
+
if (isset($this->pageData[$key])) {
|
70 |
+
return $this->pageData[$key];
|
71 |
+
}
|
72 |
+
|
73 |
+
return $default;
|
74 |
+
}
|
75 |
+
|
76 |
+
/**
|
77 |
+
* Returns true if the user is an admin.
|
78 |
+
*
|
79 |
+
* @return boolean
|
80 |
+
*/
|
81 |
+
public function isAdmin()
|
82 |
+
{
|
83 |
+
return $this->getPageData('admin') === true;
|
84 |
+
}
|
85 |
+
|
86 |
+
/**
|
87 |
+
* Returns the page id if available.
|
88 |
+
*
|
89 |
+
* @return string|null
|
90 |
+
*/
|
91 |
+
public function getPageId()
|
92 |
+
{
|
93 |
+
return $this->getPageData('id');
|
94 |
+
}
|
95 |
+
}
|
Facebook/Helpers/FacebookRedirectLoginHelper.php
ADDED
@@ -0,0 +1,333 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Copyright 2017 Facebook, Inc.
|
4 |
+
*
|
5 |
+
* You are hereby granted a non-exclusive, worldwide, royalty-free license to
|
6 |
+
* use, copy, modify, and distribute this software in source code or binary
|
7 |
+
* form for use in connection with the web services and APIs provided by
|
8 |
+
* Facebook.
|
9 |
+
*
|
10 |
+
* As with any software that integrates with the Facebook platform, your use
|
11 |
+
* of this software is subject to the Facebook Developer Principles and
|
12 |
+
* Policies [http://developers.facebook.com/policy/]. This copyright notice
|
13 |
+
* shall be included in all copies or substantial portions of the software.
|
14 |
+
*
|
15 |
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16 |
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17 |
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
18 |
+
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19 |
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
20 |
+
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
21 |
+
* DEALINGS IN THE SOFTWARE.
|
22 |
+
*
|
23 |
+
*/
|
24 |
+
namespace Facebook\Helpers;
|
25 |
+
|
26 |
+
use Facebook\Authentication\AccessToken;
|
27 |
+
use Facebook\Authentication\OAuth2Client;
|
28 |
+
use Facebook\Exceptions\FacebookSDKException;
|
29 |
+
use Facebook\PersistentData\FacebookSessionPersistentDataHandler;
|
30 |
+
use Facebook\PersistentData\PersistentDataInterface;
|
31 |
+
use Facebook\PseudoRandomString\PseudoRandomStringGeneratorFactory;
|
32 |
+
use Facebook\PseudoRandomString\PseudoRandomStringGeneratorInterface;
|
33 |
+
use Facebook\Url\FacebookUrlDetectionHandler;
|
34 |
+
use Facebook\Url\FacebookUrlManipulator;
|
35 |
+
use Facebook\Url\UrlDetectionInterface;
|
36 |
+
|
37 |
+
/**
|
38 |
+
* Class FacebookRedirectLoginHelper
|
39 |
+
*
|
40 |
+
* @package Facebook
|
41 |
+
*/
|
42 |
+
class FacebookRedirectLoginHelper
|
43 |
+
{
|
44 |
+
/**
|
45 |
+
* @const int The length of CSRF string to validate the login link.
|
46 |
+
*/
|
47 |
+
const CSRF_LENGTH = 32;
|
48 |
+
|
49 |
+
/**
|
50 |
+
* @var OAuth2Client The OAuth 2.0 client service.
|
51 |
+
*/
|
52 |
+
protected $oAuth2Client;
|
53 |
+
|
54 |
+
/**
|
55 |
+
* @var UrlDetectionInterface The URL detection handler.
|
56 |
+
*/
|
57 |
+
protected $urlDetectionHandler;
|
58 |
+
|
59 |
+
/**
|
60 |
+
* @var PersistentDataInterface The persistent data handler.
|
61 |
+
*/
|
62 |
+
protected $persistentDataHandler;
|
63 |
+
|
64 |
+
/**
|
65 |
+
* @var PseudoRandomStringGeneratorInterface The cryptographically secure pseudo-random string generator.
|
66 |
+
*/
|
67 |
+
protected $pseudoRandomStringGenerator;
|
68 |
+
|
69 |
+
/**
|
70 |
+
* @param OAuth2Client $oAuth2Client The OAuth 2.0 client service.
|
71 |
+
* @param PersistentDataInterface|null $persistentDataHandler The persistent data handler.
|
72 |
+
* @param UrlDetectionInterface|null $urlHandler The URL detection handler.
|
73 |
+
* @param PseudoRandomStringGeneratorInterface|null $prsg The cryptographically secure pseudo-random string generator.
|
74 |
+
*/
|
75 |
+
public function __construct(OAuth2Client $oAuth2Client, PersistentDataInterface $persistentDataHandler = null, UrlDetectionInterface $urlHandler = null, PseudoRandomStringGeneratorInterface $prsg = null)
|
76 |
+
{
|
77 |
+
$this->oAuth2Client = $oAuth2Client;
|
78 |
+
$this->persistentDataHandler = $persistentDataHandler ?: new FacebookSessionPersistentDataHandler();
|
79 |
+
$this->urlDetectionHandler = $urlHandler ?: new FacebookUrlDetectionHandler();
|
80 |
+
$this->pseudoRandomStringGenerator = PseudoRandomStringGeneratorFactory::createPseudoRandomStringGenerator($prsg);
|
81 |
+
}
|
82 |
+
|
83 |
+
/**
|
84 |
+
* Returns the persistent data handler.
|
85 |
+
*
|
86 |
+
* @return PersistentDataInterface
|
87 |
+
*/
|
88 |
+
public function getPersistentDataHandler()
|
89 |
+
{
|
90 |
+
return $this->persistentDataHandler;
|
91 |
+
}
|
92 |
+
|
93 |
+
/**
|
94 |
+
* Returns the URL detection handler.
|
95 |
+
*
|
96 |
+
* @return UrlDetectionInterface
|
97 |
+
*/
|
98 |
+
public function getUrlDetectionHandler()
|
99 |
+
{
|
100 |
+
return $this->urlDetectionHandler;
|
101 |
+
}
|
102 |
+
|
103 |
+
/**
|
104 |
+
* Returns the cryptographically secure pseudo-random string generator.
|
105 |
+
*
|
106 |
+
* @return PseudoRandomStringGeneratorInterface
|
107 |
+
*/
|
108 |
+
public function getPseudoRandomStringGenerator()
|
109 |
+
{
|
110 |
+
return $this->pseudoRandomStringGenerator;
|
111 |
+
}
|
112 |
+
|
113 |
+
/**
|
114 |
+
* Stores CSRF state and returns a URL to which the user should be sent to in order to continue the login process with Facebook.
|
115 |
+
*
|
116 |
+
* @param string $redirectUrl The URL Facebook should redirect users to after login.
|
117 |
+
* @param array $scope List of permissions to request during login.
|
118 |
+
* @param array $params An array of parameters to generate URL.
|
119 |
+
* @param string $separator The separator to use in http_build_query().
|
120 |
+
*
|
121 |
+
* @return string
|
122 |
+
*/
|
123 |
+
private function makeUrl($redirectUrl, array $scope, array $params = [], $separator = '&')
|
124 |
+
{
|
125 |
+
$state = $this->persistentDataHandler->get('state') ?: $this->pseudoRandomStringGenerator->getPseudoRandomString(static::CSRF_LENGTH);
|
126 |
+
$this->persistentDataHandler->set('state', $state);
|
127 |
+
|
128 |
+
return $this->oAuth2Client->getAuthorizationUrl($redirectUrl, $state, $scope, $params, $separator);
|
129 |
+
}
|
130 |
+
|
131 |
+
/**
|
132 |
+
* Returns the URL to send the user in order to login to Facebook.
|
133 |
+
*
|
134 |
+
* @param string $redirectUrl The URL Facebook should redirect users to after login.
|
135 |
+
* @param array $scope List of permissions to request during login.
|
136 |
+
* @param string $separator The separator to use in http_build_query().
|
137 |
+
*
|
138 |
+
* @return string
|
139 |
+
*/
|
140 |
+
public function getLoginUrl($redirectUrl, array $scope = [], $separator = '&')
|
141 |
+
{
|
142 |
+
return $this->makeUrl($redirectUrl, $scope, [], $separator);
|
143 |
+
}
|
144 |
+
|
145 |
+
/**
|
146 |
+
* Returns the URL to send the user in order to log out of Facebook.
|
147 |
+
*
|
148 |
+
* @param AccessToken|string $accessToken The access token that will be logged out.
|
149 |
+
* @param string $next The url Facebook should redirect the user to after a successful logout.
|
150 |
+
* @param string $separator The separator to use in http_build_query().
|
151 |
+
*
|
152 |
+
* @return string
|
153 |
+
*
|
154 |
+
* @throws FacebookSDKException
|
155 |
+
*/
|
156 |
+
public function getLogoutUrl($accessToken, $next, $separator = '&')
|
157 |
+
{
|
158 |
+
if (!$accessToken instanceof AccessToken) {
|
159 |
+
$accessToken = new AccessToken($accessToken);
|
160 |
+
}
|
161 |
+
|
162 |
+
if ($accessToken->isAppAccessToken()) {
|
163 |
+
throw new FacebookSDKException('Cannot generate a logout URL with an app access token.', 722);
|
164 |
+
}
|
165 |
+
|
166 |
+
$params = [
|
167 |
+
'next' => $next,
|
168 |
+
'access_token' => $accessToken->getValue(),
|
169 |
+
];
|
170 |
+
|
171 |
+
return 'https://www.facebook.com/logout.php?' . http_build_query($params, null, $separator);
|
172 |
+
}
|
173 |
+
|
174 |
+
/**
|
175 |
+
* Returns the URL to send the user in order to login to Facebook with permission(s) to be re-asked.
|
176 |
+
*
|
177 |
+
* @param string $redirectUrl The URL Facebook should redirect users to after login.
|
178 |
+
* @param array $scope List of permissions to request during login.
|
179 |
+
* @param string $separator The separator to use in http_build_query().
|
180 |
+
*
|
181 |
+
* @return string
|
182 |
+
*/
|
183 |
+
public function getReRequestUrl($redirectUrl, array $scope = [], $separator = '&')
|
184 |
+
{
|
185 |
+
$params = ['auth_type' => 'rerequest'];
|
186 |
+
|
187 |
+
return $this->makeUrl($redirectUrl, $scope, $params, $separator);
|
188 |
+
}
|
189 |
+
|
190 |
+
/**
|
191 |
+
* Returns the URL to send the user in order to login to Facebook with user to be re-authenticated.
|
192 |
+
*
|
193 |
+
* @param string $redirectUrl The URL Facebook should redirect users to after login.
|
194 |
+
* @param array $scope List of permissions to request during login.
|
195 |
+
* @param string $separator The separator to use in http_build_query().
|
196 |
+
*
|
197 |
+
* @return string
|
198 |
+
*/
|
199 |
+
public function getReAuthenticationUrl($redirectUrl, array $scope = [], $separator = '&')
|
200 |
+
{
|
201 |
+
$params = ['auth_type' => 'reauthenticate'];
|
202 |
+
|
203 |
+
return $this->makeUrl($redirectUrl, $scope, $params, $separator);
|
204 |
+
}
|
205 |
+
|
206 |
+
/**
|
207 |
+
* Takes a valid code from a login redirect, and returns an AccessToken entity.
|
208 |
+
*
|
209 |
+
* @param string|null $redirectUrl The redirect URL.
|
210 |
+
*
|
211 |
+
* @return AccessToken|null
|
212 |
+
*
|
213 |
+
* @throws FacebookSDKException
|
214 |
+
*/
|
215 |
+
public function getAccessToken($redirectUrl = null)
|
216 |
+
{
|
217 |
+
if (!$code = $this->getCode()) {
|
218 |
+
return null;
|
219 |
+
}
|
220 |
+
|
221 |
+
$this->validateCsrf();
|
222 |
+
$this->resetCsrf();
|
223 |
+
|
224 |
+
$redirectUrl = $redirectUrl ?: $this->urlDetectionHandler->getCurrentUrl();
|
225 |
+
// At minimum we need to remove the state param
|
226 |
+
$redirectUrl = FacebookUrlManipulator::removeParamsFromUrl($redirectUrl, ['state']);
|
227 |
+
|
228 |
+
return $this->oAuth2Client->getAccessTokenFromCode($code, $redirectUrl);
|
229 |
+
}
|
230 |
+
|
231 |
+
/**
|
232 |
+
* Validate the request against a cross-site request forgery.
|
233 |
+
*
|
234 |
+
* @throws FacebookSDKException
|
235 |
+
*/
|
236 |
+
protected function validateCsrf()
|
237 |
+
{
|
238 |
+
$state = $this->getState();
|
239 |
+
if (!$state) {
|
240 |
+
throw new FacebookSDKException('Cross-site request forgery validation failed. Required GET param "state" missing.');
|
241 |
+
}
|
242 |
+
$savedState = $this->persistentDataHandler->get('state');
|
243 |
+
if (!$savedState) {
|
244 |
+
throw new FacebookSDKException('Cross-site request forgery validation failed. Required param "state" missing from persistent data.');
|
245 |
+
}
|
246 |
+
|
247 |
+
if (\hash_equals($savedState, $state)) {
|
248 |
+
return;
|
249 |
+
}
|
250 |
+
|
251 |
+
throw new FacebookSDKException('Cross-site request forgery validation failed. The "state" param from the URL and session do not match.');
|
252 |
+
}
|
253 |
+
|
254 |
+
/**
|
255 |
+
* Resets the CSRF so that it doesn't get reused.
|
256 |
+
*/
|
257 |
+
private function resetCsrf()
|
258 |
+
{
|
259 |
+
$this->persistentDataHandler->set('state', null);
|
260 |
+
}
|
261 |
+
|
262 |
+
/**
|
263 |
+
* Return the code.
|
264 |
+
*
|
265 |
+
* @return string|null
|
266 |
+
*/
|
267 |
+
protected function getCode()
|
268 |
+
{
|
269 |
+
return $this->getInput('code');
|
270 |
+
}
|
271 |
+
|
272 |
+
/**
|
273 |
+
* Return the state.
|
274 |
+
*
|
275 |
+
* @return string|null
|
276 |
+
*/
|
277 |
+
protected function getState()
|
278 |
+
{
|
279 |
+
return $this->getInput('state');
|
280 |
+
}
|
281 |
+
|
282 |
+
/**
|
283 |
+
* Return the error code.
|
284 |
+
*
|
285 |
+
* @return string|null
|
286 |
+
*/
|
287 |
+
public function getErrorCode()
|
288 |
+
{
|
289 |
+
return $this->getInput('error_code');
|
290 |
+
}
|
291 |
+
|
292 |
+
/**
|
293 |
+
* Returns the error.
|
294 |
+
*
|
295 |
+
* @return string|null
|
296 |
+
*/
|
297 |
+
public function getError()
|
298 |
+
{
|
299 |
+
return $this->getInput('error');
|
300 |
+
}
|
301 |
+
|
302 |
+
/**
|
303 |
+
* Returns the error reason.
|
304 |
+
*
|
305 |
+
* @return string|null
|
306 |
+
*/
|
307 |
+
public function getErrorReason()
|
308 |
+
{
|
309 |
+
return $this->getInput('error_reason');
|
310 |
+
}
|
311 |
+
|
312 |
+
/**
|
313 |
+
* Returns the error description.
|
314 |
+
*
|
315 |
+
* @return string|null
|
316 |
+
*/
|
317 |
+
public function getErrorDescription()
|
318 |
+
{
|
319 |
+
return $this->getInput('error_description');
|
320 |
+
}
|
321 |
+
|
322 |
+
/**
|
323 |
+
* Returns a value from a GET param.
|
324 |
+
*
|
325 |
+
* @param string $key
|
326 |
+
*
|
327 |
+
* @return string|null
|
328 |
+
*/
|
329 |
+
private function getInput($key)
|
330 |
+
{
|
331 |
+
return isset($_GET[$key]) ? $_GET[$key] : null;
|
332 |
+
}
|
333 |
+
}
|
Facebook/Helpers/FacebookSignedRequestFromInputHelper.php
ADDED
@@ -0,0 +1,166 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Copyright 2017 Facebook, Inc.
|
4 |
+
*
|
5 |
+
* You are hereby granted a non-exclusive, worldwide, royalty-free license to
|
6 |
+
* use, copy, modify, and distribute this software in source code or binary
|
7 |
+
* form for use in connection with the web services and APIs provided by
|
8 |
+
* Facebook.
|
9 |
+
*
|
10 |
+
* As with any software that integrates with the Facebook platform, your use
|
11 |
+
* of this software is subject to the Facebook Developer Principles and
|
12 |
+
* Policies [http://developers.facebook.com/policy/]. This copyright notice
|
13 |
+
* shall be included in all copies or substantial portions of the software.
|
14 |
+
*
|
15 |
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16 |
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17 |
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
18 |
+
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19 |
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
20 |
+
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
21 |
+
* DEALINGS IN THE SOFTWARE.
|
22 |
+
*
|
23 |
+
*/
|
24 |
+
namespace Facebook\Helpers;
|
25 |
+
|
26 |
+
use Facebook\Facebook;
|
27 |
+
use Facebook\FacebookApp;
|
28 |
+
use Facebook\FacebookClient;
|
29 |
+
use Facebook\SignedRequest;
|
30 |
+
use Facebook\Authentication\AccessToken;
|
31 |
+
use Facebook\Authentication\OAuth2Client;
|
32 |
+
|
33 |
+
/**
|
34 |
+
* Class FacebookSignedRequestFromInputHelper
|
35 |
+
*
|
36 |
+
* @package Facebook
|
37 |
+
*/
|
38 |
+
abstract class FacebookSignedRequestFromInputHelper
|
39 |
+
{
|
40 |
+
/**
|
41 |
+
* @var SignedRequest|null The SignedRequest entity.
|
42 |
+
*/
|
43 |
+
protected $signedRequest;
|
44 |
+
|
45 |
+
/**
|
46 |
+
* @var FacebookApp The FacebookApp entity.
|
47 |
+
*/
|
48 |
+
protected $app;
|
49 |
+
|
50 |
+
/**
|
51 |
+
* @var OAuth2Client The OAuth 2.0 client service.
|
52 |
+
*/
|
53 |
+
protected $oAuth2Client;
|
54 |
+
|
55 |
+
/**
|
56 |
+
* Initialize the helper and process available signed request data.
|
57 |
+
*
|
58 |
+
* @param FacebookApp $app The FacebookApp entity.
|
59 |
+
* @param FacebookClient $client The client to make HTTP requests.
|
60 |
+
* @param string|null $graphVersion The version of Graph to use.
|
61 |
+
*/
|
62 |
+
public function __construct(FacebookApp $app, FacebookClient $client, $graphVersion = null)
|
63 |
+
{
|
64 |
+
$this->app = $app;
|
65 |
+
$graphVersion = $graphVersion ?: Facebook::DEFAULT_GRAPH_VERSION;
|
66 |
+
$this->oAuth2Client = new OAuth2Client($this->app, $client, $graphVersion);
|
67 |
+
|
68 |
+
$this->instantiateSignedRequest();
|
69 |
+
}
|
70 |
+
|
71 |
+
/**
|
72 |
+
* Instantiates a new SignedRequest entity.
|
73 |
+
*
|
74 |
+
* @param string|null
|
75 |
+
*/
|
76 |
+
public function instantiateSignedRequest($rawSignedRequest = null)
|
77 |
+
{
|
78 |
+
$rawSignedRequest = $rawSignedRequest ?: $this->getRawSignedRequest();
|
79 |
+
|
80 |
+
if (!$rawSignedRequest) {
|
81 |
+
return;
|
82 |
+
}
|
83 |
+
|
84 |
+
$this->signedRequest = new SignedRequest($this->app, $rawSignedRequest);
|
85 |
+
}
|
86 |
+
|
87 |
+
/**
|
88 |
+
* Returns an AccessToken entity from the signed request.
|
89 |
+
*
|
90 |
+
* @return AccessToken|null
|
91 |
+
*
|
92 |
+
* @throws \Facebook\Exceptions\FacebookSDKException
|
93 |
+
*/
|
94 |
+
public function getAccessToken()
|
95 |
+
{
|
96 |
+
if ($this->signedRequest && $this->signedRequest->hasOAuthData()) {
|
97 |
+
$code = $this->signedRequest->get('code');
|
98 |
+
$accessToken = $this->signedRequest->get('oauth_token');
|
99 |
+
|
100 |
+
if ($code && !$accessToken) {
|
101 |
+
return $this->oAuth2Client->getAccessTokenFromCode($code);
|
102 |
+
}
|
103 |
+
|
104 |
+
$expiresAt = $this->signedRequest->get('expires', 0);
|
105 |
+
|
106 |
+
return new AccessToken($accessToken, $expiresAt);
|
107 |
+
}
|
108 |
+
|
109 |
+
return null;
|
110 |
+
}
|
111 |
+
|
112 |
+
/**
|
113 |
+
* Returns the SignedRequest entity.
|
114 |
+
*
|
115 |
+
* @return SignedRequest|null
|
116 |
+
*/
|
117 |
+
public function getSignedRequest()
|
118 |
+
{
|
119 |
+
return $this->signedRequest;
|
120 |
+
}
|
121 |
+
|
122 |
+
/**
|
123 |
+
* Returns the user_id if available.
|
124 |
+
*
|
125 |
+
* @return string|null
|
126 |
+
*/
|
127 |
+
public function getUserId()
|
128 |
+
{
|
129 |
+
return $this->signedRequest ? $this->signedRequest->getUserId() : null;
|
130 |
+
}
|
131 |
+
|
132 |
+
/**
|
133 |
+
* Get raw signed request from input.
|
134 |
+
*
|
135 |
+
* @return string|null
|
136 |
+
*/
|
137 |
+
abstract public function getRawSignedRequest();
|
138 |
+
|
139 |
+
/**
|
140 |
+
* Get raw signed request from POST input.
|
141 |
+
*
|
142 |
+
* @return string|null
|
143 |
+
*/
|
144 |
+
public function getRawSignedRequestFromPost()
|
145 |
+
{
|
146 |
+
if (isset($_POST['signed_request'])) {
|
147 |
+
return $_POST['signed_request'];
|
148 |
+
}
|
149 |
+
|
150 |
+
return null;
|
151 |
+
}
|
152 |
+
|
153 |
+
/**
|
154 |
+
* Get raw signed request from cookie set from the Javascript SDK.
|
155 |
+
*
|
156 |
+
* @return string|null
|
157 |
+
*/
|
158 |
+
public function getRawSignedRequestFromCookie()
|
159 |
+
{
|
160 |
+
if (isset($_COOKIE['fbsr_' . $this->app->getId()])) {
|
161 |
+
return $_COOKIE['fbsr_' . $this->app->getId()];
|
162 |
+
}
|
163 |
+
|
164 |
+
return null;
|
165 |
+
}
|
166 |
+
}
|
Facebook/Http/GraphRawResponse.php
ADDED
@@ -0,0 +1,137 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Copyright 2017 Facebook, Inc.
|
4 |
+
*
|
5 |
+
* You are hereby granted a non-exclusive, worldwide, royalty-free license to
|
6 |
+
* use, copy, modify, and distribute this software in source code or binary
|
7 |
+
* form for use in connection with the web services and APIs provided by
|
8 |
+
* Facebook.
|
9 |
+
*
|
10 |
+
* As with any software that integrates with the Facebook platform, your use
|
11 |
+
* of this software is subject to the Facebook Developer Principles and
|
12 |
+
* Policies [http://developers.facebook.com/policy/]. This copyright notice
|
13 |
+
* shall be included in all copies or substantial portions of the software.
|
14 |
+
*
|
15 |
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16 |
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17 |
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
18 |
+
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19 |
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
20 |
+
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
21 |
+
* DEALINGS IN THE SOFTWARE.
|
22 |
+
*
|
23 |
+
*/
|
24 |
+
namespace Facebook\Http;
|
25 |
+
|
26 |
+
/**
|
27 |
+
* Class GraphRawResponse
|
28 |
+
*
|
29 |
+
* @package Facebook
|
30 |
+
*/
|
31 |
+
class GraphRawResponse
|
32 |
+
{
|
33 |
+
/**
|
34 |
+
* @var array The response headers in the form of an associative array.
|
35 |
+
*/
|
36 |
+
protected $headers;
|
37 |
+
|
38 |
+
/**
|
39 |
+
* @var string The raw response body.
|
40 |
+
*/
|
41 |
+
protected $body;
|
42 |
+
|
43 |
+
/**
|
44 |
+
* @var int The HTTP status response code.
|
45 |
+
*/
|
46 |
+
protected $httpResponseCode;
|
47 |
+
|
48 |
+
/**
|
49 |
+
* Creates a new GraphRawResponse entity.
|
50 |
+
*
|
51 |
+
* @param string|array $headers The headers as a raw string or array.
|
52 |
+
* @param string $body The raw response body.
|
53 |
+
* @param int $httpStatusCode The HTTP response code (if sending headers as parsed array).
|
54 |
+
*/
|
55 |
+
public function __construct($headers, $body, $httpStatusCode = null)
|
56 |
+
{
|
57 |
+
if (is_numeric($httpStatusCode)) {
|
58 |
+
$this->httpResponseCode = (int)$httpStatusCode;
|
59 |
+
}
|
60 |
+
|
61 |
+
if (is_array($headers)) {
|
62 |
+
$this->headers = $headers;
|
63 |
+
} else {
|
64 |
+
$this->setHeadersFromString($headers);
|
65 |
+
}
|
66 |
+
|
67 |
+
$this->body = $body;
|
68 |
+
}
|
69 |
+
|
70 |
+
/**
|
71 |
+
* Return the response headers.
|
72 |
+
*
|
73 |
+
* @return array
|
74 |
+
*/
|
75 |
+
public function getHeaders()
|
76 |
+
{
|
77 |
+
return $this->headers;
|
78 |
+
}
|
79 |
+
|
80 |
+
/**
|
81 |
+
* Return the body of the response.
|
82 |
+
*
|
83 |
+
* @return string
|
84 |
+
*/
|
85 |
+
public function getBody()
|
86 |
+
{
|
87 |
+
return $this->body;
|
88 |
+
}
|
89 |
+
|
90 |
+
/**
|
91 |
+
* Return the HTTP response code.
|
92 |
+
*
|
93 |
+
* @return int
|
94 |
+
*/
|
95 |
+
public function getHttpResponseCode()
|
96 |
+
{
|
97 |
+
return $this->httpResponseCode;
|
98 |
+
}
|
99 |
+
|
100 |
+
/**
|
101 |
+
* Sets the HTTP response code from a raw header.
|
102 |
+
*
|
103 |
+
* @param string $rawResponseHeader
|
104 |
+
*/
|
105 |
+
public function setHttpResponseCodeFromHeader($rawResponseHeader)
|
106 |
+
{
|
107 |
+
preg_match('|HTTP/\d\.\d\s+(\d+)\s+.*|', $rawResponseHeader, $match);
|
108 |
+
$this->httpResponseCode = (int)$match[1];
|
109 |
+
}
|
110 |
+
|
111 |
+
/**
|
112 |
+
* Parse the raw headers and set as an array.
|
113 |
+
*
|
114 |
+
* @param string $rawHeaders The raw headers from the response.
|
115 |
+
*/
|
116 |
+
protected function setHeadersFromString($rawHeaders)
|
117 |
+
{
|
118 |
+
// Normalize line breaks
|
119 |
+
$rawHeaders = str_replace("\r\n", "\n", $rawHeaders);
|
120 |
+
|
121 |
+
// There will be multiple headers if a 301 was followed
|
122 |
+
// or a proxy was followed, etc
|
123 |
+
$headerCollection = explode("\n\n", trim($rawHeaders));
|
124 |
+
// We just want the last response (at the end)
|
125 |
+
$rawHeader = array_pop($headerCollection);
|
126 |
+
|
127 |
+
$headerComponents = explode("\n", $rawHeader);
|
128 |
+
foreach ($headerComponents as $line) {
|
129 |
+
if (strpos($line, ': ') === false) {
|
130 |
+
$this->setHttpResponseCodeFromHeader($line);
|
131 |
+
} else {
|
132 |
+
list($key, $value) = explode(': ', $line, 2);
|
133 |
+
$this->headers[$key] = $value;
|
134 |
+
}
|
135 |
+
}
|
136 |
+
}
|
137 |
+
}
|
Facebook/Http/RequestBodyInterface.php
ADDED
@@ -0,0 +1,39 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Copyright 2017 Facebook, Inc.
|
4 |
+
*
|
5 |
+
* You are hereby granted a non-exclusive, worldwide, royalty-free license to
|
6 |
+
* use, copy, modify, and distribute this software in source code or binary
|
7 |
+
* form for use in connection with the web services and APIs provided by
|
8 |
+
* Facebook.
|
9 |
+
*
|
10 |
+
* As with any software that integrates with the Facebook platform, your use
|
11 |
+
* of this software is subject to the Facebook Developer Principles and
|
12 |
+
* Policies [http://developers.facebook.com/policy/]. This copyright notice
|
13 |
+
* shall be included in all copies or substantial portions of the software.
|
14 |
+
*
|
15 |
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16 |
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17 |
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
18 |
+
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19 |
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
20 |
+
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
21 |
+
* DEALINGS IN THE SOFTWARE.
|
22 |
+
*
|
23 |
+
*/
|
24 |
+
namespace Facebook\Http;
|
25 |
+
|
26 |
+
/**
|
27 |
+
* Interface
|
28 |
+
*
|
29 |
+
* @package Facebook
|
30 |
+
*/
|
31 |
+
interface RequestBodyInterface
|
32 |
+
{
|
33 |
+
/**
|
34 |
+
* Get the body of the request to send to Graph.
|
35 |
+
*
|
36 |
+
* @return string
|
37 |
+
*/
|
38 |
+
public function getBody();
|
39 |
+
}
|
Facebook/Http/RequestBodyMultipart.php
ADDED
@@ -0,0 +1,170 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Copyright 2017 Facebook, Inc.
|
4 |
+
*
|
5 |
+
* You are hereby granted a non-exclusive, worldwide, royalty-free license to
|
6 |
+
* use, copy, modify, and distribute this software in source code or binary
|
7 |
+
* form for use in connection with the web services and APIs provided by
|
8 |
+
* Facebook.
|
9 |
+
*
|
10 |
+
* As with any software that integrates with the Facebook platform, your use
|
11 |
+
* of this software is subject to the Facebook Developer Principles and
|
12 |
+
* Policies [http://developers.facebook.com/policy/]. This copyright notice
|
13 |
+
* shall be included in all copies or substantial portions of the software.
|
14 |
+
*
|
15 |
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16 |
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17 |
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
18 |
+
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19 |
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
20 |
+
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
21 |
+
* DEALINGS IN THE SOFTWARE.
|
22 |
+
*
|
23 |
+
*/
|
24 |
+
namespace Facebook\Http;
|
25 |
+
|
26 |
+
use Facebook\FileUpload\FacebookFile;
|
27 |
+
|
28 |
+
/**
|
29 |
+
* Class RequestBodyMultipartt
|
30 |
+
*
|
31 |
+
* Some things copied from Guzzle
|
32 |
+
*
|
33 |
+
* @package Facebook
|
34 |
+
*
|
35 |
+
* @see https://github.com/guzzle/guzzle/blob/master/src/Post/MultipartBody.php
|
36 |
+
*/
|
37 |
+
class RequestBodyMultipart implements RequestBodyInterface
|
38 |
+
{
|
39 |
+
/**
|
40 |
+
* @var string The boundary.
|
41 |
+
*/
|
42 |
+
private $boundary;
|
43 |
+
|
44 |
+
/**
|
45 |
+
* @var array The parameters to send with this request.
|
46 |
+
*/
|
47 |
+
private $params;
|
48 |
+
|
49 |
+
/**
|
50 |
+
* @var array The files to send with this request.
|
51 |
+
*/
|
52 |
+
private $files = [];
|
53 |
+
|
54 |
+
/**
|
55 |
+
* @param array $params The parameters to send with this request.
|
56 |
+
* @param array $files The files to send with this request.
|
57 |
+
* @param string $boundary Provide a specific boundary.
|
58 |
+
*/
|
59 |
+
public function __construct(array $params = [], array $files = [], $boundary = null)
|
60 |
+
{
|
61 |
+
$this->params = $params;
|
62 |
+
$this->files = $files;
|
63 |
+
$this->boundary = $boundary ?: uniqid();
|
64 |
+
}
|
65 |
+
|
66 |
+
/**
|
67 |
+
* @inheritdoc
|
68 |
+
*/
|
69 |
+
public function getBody()
|
70 |
+
{
|
71 |
+
$body = '';
|
72 |
+
|
73 |
+
// Compile normal params
|
74 |
+
$params = $this->getNestedParams($this->params);
|
75 |
+
foreach ($params as $k => $v) {
|
76 |
+
$body .= $this->getParamString($k, $v);
|
77 |
+
}
|
78 |
+
|
79 |
+
// Compile files
|
80 |
+
foreach ($this->files as $k => $v) {
|
81 |
+
$body .= $this->getFileString($k, $v);
|
82 |
+
}
|
83 |
+
|
84 |
+
// Peace out
|
85 |
+
$body .= "--{$this->boundary}--\r\n";
|
86 |
+
|
87 |
+
return $body;
|
88 |
+
}
|
89 |
+
|
90 |
+
/**
|
91 |
+
* Get the boundary
|
92 |
+
*
|
93 |
+
* @return string
|
94 |
+
*/
|
95 |
+
public function getBoundary()
|
96 |
+
{
|
97 |
+
return $this->boundary;
|
98 |
+
}
|
99 |
+
|
100 |
+
/**
|
101 |
+
* Get the string needed to transfer a file.
|
102 |
+
*
|
103 |
+
* @param string $name
|
104 |
+
* @param FacebookFile $file
|
105 |
+
*
|
106 |
+
* @return string
|
107 |
+
*/
|
108 |
+
private function getFileString($name, FacebookFile $file)
|
109 |
+
{
|
110 |
+
return sprintf(
|
111 |
+
"--%s\r\nContent-Disposition: form-data; name=\"%s\"; filename=\"%s\"%s\r\n\r\n%s\r\n",
|
112 |
+
$this->boundary,
|
113 |
+
$name,
|
114 |
+
$file->getFileName(),
|
115 |
+
$this->getFileHeaders($file),
|
116 |
+
$file->getContents()
|
117 |
+
);
|
118 |
+
}
|
119 |
+
|
120 |
+
/**
|
121 |
+
* Get the string needed to transfer a POST field.
|
122 |
+
*
|
123 |
+
* @param string $name
|
124 |
+
* @param string $value
|
125 |
+
*
|
126 |
+
* @return string
|
127 |
+
*/
|
128 |
+
private function getParamString($name, $value)
|
129 |
+
{
|
130 |
+
return sprintf(
|
131 |
+
"--%s\r\nContent-Disposition: form-data; name=\"%s\"\r\n\r\n%s\r\n",
|
132 |
+
$this->boundary,
|
133 |
+
$name,
|
134 |
+
$value
|
135 |
+
);
|
136 |
+
}
|
137 |
+
|
138 |
+
/**
|
139 |
+
* Returns the params as an array of nested params.
|
140 |
+
*
|
141 |
+
* @param array $params
|
142 |
+
*
|
143 |
+
* @return array
|
144 |
+
*/
|
145 |
+
private function getNestedParams(array $params)
|
146 |
+
{
|
147 |
+
$query = http_build_query($params, null, '&');
|
148 |
+
$params = explode('&', $query);
|
149 |
+
$result = [];
|
150 |
+
|
151 |
+
foreach ($params as $param) {
|
152 |
+
list($key, $value) = explode('=', $param, 2);
|
153 |
+
$result[urldecode($key)] = urldecode($value);
|
154 |
+
}
|
155 |
+
|
156 |
+
return $result;
|
157 |
+
}
|
158 |
+
|
159 |
+
/**
|
160 |
+
* Get the headers needed before transferring the content of a POST file.
|
161 |
+
*
|
162 |
+
* @param FacebookFile $file
|
163 |
+
*
|
164 |
+
* @return string
|
165 |
+
*/
|
166 |
+
protected function getFileHeaders(FacebookFile $file)
|
167 |
+
{
|
168 |
+
return "\r\nContent-Type: {$file->getMimetype()}";
|
169 |
+
}
|
170 |
+
}
|
Facebook/Http/RequestBodyUrlEncoded.php
ADDED
@@ -0,0 +1,55 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Copyright 2017 Facebook, Inc.
|
4 |
+
*
|
5 |
+
* You are hereby granted a non-exclusive, worldwide, royalty-free license to
|
6 |
+
* use, copy, modify, and distribute this software in source code or binary
|
7 |
+
* form for use in connection with the web services and APIs provided by
|
8 |
+
* Facebook.
|
9 |
+
*
|
10 |
+
* As with any software that integrates with the Facebook platform, your use
|
11 |
+
* of this software is subject to the Facebook Developer Principles and
|
12 |
+
* Policies [http://developers.facebook.com/policy/]. This copyright notice
|
13 |
+
* shall be included in all copies or substantial portions of the software.
|
14 |
+
*
|
15 |
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16 |
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17 |
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
18 |
+
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19 |
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
20 |
+
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
21 |
+
* DEALINGS IN THE SOFTWARE.
|
22 |
+
*
|
23 |
+
*/
|
24 |
+
namespace Facebook\Http;
|
25 |
+
|
26 |
+
/**
|
27 |
+
* Class RequestBodyUrlEncoded
|
28 |
+
*
|
29 |
+
* @package Facebook
|
30 |
+
*/
|
31 |
+
class RequestBodyUrlEncoded implements RequestBodyInterface
|
32 |
+
{
|
33 |
+
/**
|
34 |
+
* @var array The parameters to send with this request.
|
35 |
+
*/
|
36 |
+
protected $params = [];
|
37 |
+
|
38 |
+
/**
|
39 |
+
* Creates a new GraphUrlEncodedBody entity.
|
40 |
+
*
|
41 |
+
* @param array $params
|
42 |
+
*/
|
43 |
+
public function __construct(array $params)
|
44 |
+
{
|
45 |
+
$this->params = $params;
|
46 |
+
}
|
47 |
+
|
48 |
+
/**
|
49 |
+
* @inheritdoc
|
50 |
+
*/
|
51 |
+
public function getBody()
|
52 |
+
{
|
53 |
+
return http_build_query($this->params, null, '&');
|
54 |
+
}
|
55 |
+
}
|
Facebook/HttpClients/FacebookCurl.php
ADDED
@@ -0,0 +1,129 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Copyright 2017 Facebook, Inc.
|
4 |
+
*
|
5 |
+
* You are hereby granted a non-exclusive, worldwide, royalty-free license to
|
6 |
+
* use, copy, modify, and distribute this software in source code or binary
|
7 |
+
* form for use in connection with the web services and APIs provided by
|
8 |
+
* Facebook.
|
9 |
+
*
|
10 |
+
* As with any software that integrates with the Facebook platform, your use
|
11 |
+
* of this software is subject to the Facebook Developer Principles and
|
12 |
+
* Policies [http://developers.facebook.com/policy/]. This copyright notice
|
13 |
+
* shall be included in all copies or substantial portions of the software.
|
14 |
+
*
|
15 |
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16 |
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17 |
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
18 |
+
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19 |
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
20 |
+
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
21 |
+
* DEALINGS IN THE SOFTWARE.
|
22 |
+
*
|
23 |
+
*/
|
24 |
+
namespace Facebook\HttpClients;
|
25 |
+
|
26 |
+
/**
|
27 |
+
* Class FacebookCurl
|
28 |
+
*
|
29 |
+
* Abstraction for the procedural curl elements so that curl can be mocked and the implementation can be tested.
|
30 |
+
*
|
31 |
+
* @package Facebook
|
32 |
+
*/
|
33 |
+
class FacebookCurl
|
34 |
+
{
|
35 |
+
|
36 |
+
/**
|
37 |
+
* @var resource Curl resource instance
|
38 |
+
*/
|
39 |
+
protected $curl;
|
40 |
+
|
41 |
+
/**
|
42 |
+
* Make a new curl reference instance
|
43 |
+
*/
|
44 |
+
public function init()
|
45 |
+
{
|
46 |
+
$this->curl = curl_init();
|
47 |
+
}
|
48 |
+
|
49 |
+
/**
|
50 |
+
* Set a curl option
|
51 |
+
*
|
52 |
+
* @param $key
|
53 |
+
* @param $value
|
54 |
+
*/
|
55 |
+
public function setopt($key, $value)
|
56 |
+
{
|
57 |
+
curl_setopt($this->curl, $key, $value);
|
58 |
+
}
|
59 |
+
|
60 |
+
/**
|
61 |
+
* Set an array of options to a curl resource
|
62 |
+
*
|
63 |
+
* @param array $options
|
64 |
+
*/
|
65 |
+
public function setoptArray(array $options)
|
66 |
+
{
|
67 |
+
curl_setopt_array($this->curl, $options);
|
68 |
+
}
|
69 |
+
|
70 |
+
/**
|
71 |
+
* Send a curl request
|
72 |
+
*
|
73 |
+
* @return mixed
|
74 |
+
*/
|
75 |
+
public function exec()
|
76 |
+
{
|
77 |
+
return curl_exec($this->curl);
|
78 |
+
}
|
79 |
+
|
80 |
+
/**
|
81 |
+
* Return the curl error number
|
82 |
+
*
|
83 |
+
* @return int
|
84 |
+
*/
|
85 |
+
public function errno()
|
86 |
+
{
|
87 |
+
return curl_errno($this->curl);
|
88 |
+
}
|
89 |
+
|
90 |
+
/**
|
91 |
+
* Return the curl error message
|
92 |
+
*
|
93 |
+
* @return string
|
94 |
+
*/
|
95 |
+
public function error()
|
96 |
+
{
|
97 |
+
return curl_error($this->curl);
|
98 |
+
}
|
99 |
+
|
100 |
+
/**
|
101 |
+
* Get info from a curl reference
|
102 |
+
*
|
103 |
+
* @param $type
|
104 |
+
*
|
105 |
+
* @return mixed
|
106 |
+
*/
|
107 |
+
public function getinfo($type)
|
108 |
+
{
|
109 |
+
return curl_getinfo($this->curl, $type);
|
110 |
+
}
|
111 |
+
|
112 |
+
/**
|
113 |
+
* Get the currently installed curl version
|
114 |
+
*
|
115 |
+
* @return array
|
116 |
+
*/
|
117 |
+
public function version()
|
118 |
+
{
|
119 |
+
return curl_version();
|
120 |
+
}
|
121 |
+
|
122 |
+
/**
|
123 |
+
* Close the resource connection to curl
|
124 |
+
*/
|
125 |
+
public function close()
|
126 |
+
{
|
127 |
+
curl_close($this->curl);
|
128 |
+
}
|
129 |
+
}
|
Facebook/HttpClients/FacebookCurlHttpClient.php
ADDED
@@ -0,0 +1,163 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Copyright 2017 Facebook, Inc.
|
4 |
+
*
|
5 |
+
* You are hereby granted a non-exclusive, worldwide, royalty-free license to
|
6 |
+
* use, copy, modify, and distribute this software in source code or binary
|
7 |
+
* form for use in connection with the web services and APIs provided by
|
8 |
+
* Facebook.
|
9 |
+
*
|
10 |
+
* As with any software that integrates with the Facebook platform, your use
|
11 |
+
* of this software is subject to the Facebook Developer Principles and
|
12 |
+
* Policies [http://developers.facebook.com/policy/]. This copyright notice
|
13 |
+
* shall be included in all copies or substantial portions of the software.
|
14 |
+
*
|
15 |
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16 |
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17 |
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
18 |
+
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19 |
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
20 |
+
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
21 |
+
* DEALINGS IN THE SOFTWARE.
|
22 |
+
*
|
23 |
+
*/
|
24 |
+
namespace Facebook\HttpClients;
|
25 |
+
|
26 |
+
use Facebook\Http\GraphRawResponse;
|
27 |
+
use Facebook\Exceptions\FacebookSDKException;
|
28 |
+
|
29 |
+
/**
|
30 |
+
* Class FacebookCurlHttpClient
|
31 |
+
*
|
32 |
+
* @package Facebook
|
33 |
+
*/
|
34 |
+
class FacebookCurlHttpClient implements FacebookHttpClientInterface
|
35 |
+
{
|
36 |
+
/**
|
37 |
+
* @var string The client error message
|
38 |
+
*/
|
39 |
+
protected $curlErrorMessage = '';
|
40 |
+
|
41 |
+
/**
|
42 |
+
* @var int The curl client error code
|
43 |
+
*/
|
44 |
+
protected $curlErrorCode = 0;
|
45 |
+
|
46 |
+
/**
|
47 |
+
* @var string|boolean The raw response from the server
|
48 |
+
*/
|
49 |
+
protected $rawResponse;
|
50 |
+
|
51 |
+
/**
|
52 |
+
* @var FacebookCurl Procedural curl as object
|
53 |
+
*/
|
54 |
+
protected $facebookCurl;
|
55 |
+
|
56 |
+
/**
|
57 |
+
* @param FacebookCurl|null Procedural curl as object
|
58 |
+
*/
|
59 |
+
public function __construct(FacebookCurl $facebookCurl = null)
|
60 |
+
{
|
61 |
+
$this->facebookCurl = $facebookCurl ?: new FacebookCurl();
|
62 |
+
}
|
63 |
+
|
64 |
+
/**
|
65 |
+
* @inheritdoc
|
66 |
+
*/
|
67 |
+
public function send($url, $method, $body, array $headers, $timeOut)
|
68 |
+
{
|
69 |
+
$this->openConnection($url, $method, $body, $headers, $timeOut);
|
70 |
+
$this->sendRequest();
|
71 |
+
|
72 |
+
if ($curlErrorCode = $this->facebookCurl->errno()) {
|
73 |
+
throw new FacebookSDKException($this->facebookCurl->error(), $curlErrorCode);
|
74 |
+
}
|
75 |
+
|
76 |
+
// Separate the raw headers from the raw body
|
77 |
+
list($rawHeaders, $rawBody) = $this->extractResponseHeadersAndBody();
|
78 |
+
|
79 |
+
$this->closeConnection();
|
80 |
+
|
81 |
+
return new GraphRawResponse($rawHeaders, $rawBody);
|
82 |
+
}
|
83 |
+
|
84 |
+
/**
|
85 |
+
* Opens a new curl connection.
|
86 |
+
*
|
87 |
+
* @param string $url The endpoint to send the request to.
|
88 |
+
* @param string $method The request method.
|
89 |
+
* @param string $body The body of the request.
|
90 |
+
* @param array $headers The request headers.
|
91 |
+
* @param int $timeOut The timeout in seconds for the request.
|
92 |
+
*/
|
93 |
+
public function openConnection($url, $method, $body, array $headers, $timeOut)
|
94 |
+
{
|
95 |
+
$options = [
|
96 |
+
CURLOPT_CUSTOMREQUEST => $method,
|
97 |
+
CURLOPT_HTTPHEADER => $this->compileRequestHeaders($headers),
|
98 |
+
CURLOPT_URL => $url,
|
99 |
+
CURLOPT_CONNECTTIMEOUT => 10,
|
100 |
+
CURLOPT_TIMEOUT => $timeOut,
|
101 |
+
CURLOPT_RETURNTRANSFER => true, // Follow 301 redirects
|
102 |
+
CURLOPT_HEADER => true, // Enable header processing
|
103 |
+
CURLOPT_SSL_VERIFYHOST => 2,
|
104 |
+
CURLOPT_SSL_VERIFYPEER => true,
|
105 |
+
CURLOPT_CAINFO => __DIR__ . '/certs/DigiCertHighAssuranceEVRootCA.pem',
|
106 |
+
];
|
107 |
+
|
108 |
+
if ($method !== "GET") {
|
109 |
+
$options[CURLOPT_POSTFIELDS] = $body;
|
110 |
+
}
|
111 |
+
|
112 |
+
$this->facebookCurl->init();
|
113 |
+
$this->facebookCurl->setoptArray($options);
|
114 |
+
}
|
115 |
+
|
116 |
+
/**
|
117 |
+
* Closes an existing curl connection
|
118 |
+
*/
|
119 |
+
public function closeConnection()
|
120 |
+
{
|
121 |
+
$this->facebookCurl->close();
|
122 |
+
}
|
123 |
+
|
124 |
+
/**
|
125 |
+
* Send the request and get the raw response from curl
|
126 |
+
*/
|
127 |
+
public function sendRequest()
|
128 |
+
{
|
129 |
+
$this->rawResponse = $this->facebookCurl->exec();
|
130 |
+
}
|
131 |
+
|
132 |
+
/**
|
133 |
+
* Compiles the request headers into a curl-friendly format.
|
134 |
+
*
|
135 |
+
* @param array $headers The request headers.
|
136 |
+
*
|
137 |
+
* @return array
|
138 |
+
*/
|
139 |
+
public function compileRequestHeaders(array $headers)
|
140 |
+
{
|
141 |
+
$return = [];
|
142 |
+
|
143 |
+
foreach ($headers as $key => $value) {
|
144 |
+
$return[] = $key . ': ' . $value;
|
145 |
+
}
|
146 |
+
|
147 |
+
return $return;
|
148 |
+
}
|
149 |
+
|
150 |
+
/**
|
151 |
+
* Extracts the headers and the body into a two-part array
|
152 |
+
*
|
153 |
+
* @return array
|
154 |
+
*/
|
155 |
+
public function extractResponseHeadersAndBody()
|
156 |
+
{
|
157 |
+
$parts = explode("\r\n\r\n", $this->rawResponse);
|
158 |
+
$rawBody = array_pop($parts);
|
159 |
+
$rawHeaders = implode("\r\n\r\n", $parts);
|
160 |
+
|
161 |
+
return [trim($rawHeaders), trim($rawBody)];
|
162 |
+
}
|
163 |
+
}
|
Facebook/HttpClients/FacebookGuzzleHttpClient.php
ADDED
@@ -0,0 +1,97 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Copyright 2017 Facebook, Inc.
|
4 |
+
*
|
5 |
+
* You are hereby granted a non-exclusive, worldwide, royalty-free license to
|
6 |
+
* use, copy, modify, and distribute this software in source code or binary
|
7 |
+
* form for use in connection with the web services and APIs provided by
|
8 |
+
* Facebook.
|
9 |
+
*
|
10 |
+
* As with any software that integrates with the Facebook platform, your use
|
11 |
+
* of this software is subject to the Facebook Developer Principles and
|
12 |
+
* Policies [http://developers.facebook.com/policy/]. This copyright notice
|
13 |
+
* shall be included in all copies or substantial portions of the software.
|
14 |
+
*
|
15 |
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16 |
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17 |
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
18 |
+
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19 |
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
20 |
+
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
21 |
+
* DEALINGS IN THE SOFTWARE.
|
22 |
+
*
|
23 |
+
*/
|
24 |
+
namespace Facebook\HttpClients;
|
25 |
+
|
26 |
+
use Facebook\Http\GraphRawResponse;
|
27 |
+
use Facebook\Exceptions\FacebookSDKException;
|
28 |
+
|
29 |
+
use GuzzleHttp\Client;
|
30 |
+
use GuzzleHttp\Message\ResponseInterface;
|
31 |
+
use GuzzleHttp\Ring\Exception\RingException;
|
32 |
+
use GuzzleHttp\Exception\RequestException;
|
33 |
+
|
34 |
+
class FacebookGuzzleHttpClient implements FacebookHttpClientInterface
|
35 |
+
{
|
36 |
+
/**
|
37 |
+
* @var \GuzzleHttp\Client The Guzzle client.
|
38 |
+
*/
|
39 |
+
protected $guzzleClient;
|
40 |
+
|
41 |
+
/**
|
42 |
+
* @param \GuzzleHttp\Client|null The Guzzle client.
|
43 |
+
*/
|
44 |
+
public function __construct(Client $guzzleClient = null)
|
45 |
+
{
|
46 |
+
$this->guzzleClient = $guzzleClient ?: new Client();
|
47 |
+
}
|
48 |
+
|
49 |
+
/**
|
50 |
+
* @inheritdoc
|
51 |
+
*/
|
52 |
+
public function send($url, $method, $body, array $headers, $timeOut)
|
53 |
+
{
|
54 |
+
$options = [
|
55 |
+
'headers' => $headers,
|
56 |
+
'body' => $body,
|
57 |
+
'timeout' => $timeOut,
|
58 |
+
'connect_timeout' => 10,
|
59 |
+
'verify' => __DIR__ . '/certs/DigiCertHighAssuranceEVRootCA.pem',
|
60 |
+
];
|
61 |
+
$request = $this->guzzleClient->createRequest($method, $url, $options);
|
62 |
+
|
63 |
+
try {
|
64 |
+
$rawResponse = $this->guzzleClient->send($request);
|
65 |
+
} catch (RequestException $e) {
|
66 |
+
$rawResponse = $e->getResponse();
|
67 |
+
|
68 |
+
if ($e->getPrevious() instanceof RingException || !$rawResponse instanceof ResponseInterface) {
|
69 |
+
throw new FacebookSDKException($e->getMessage(), $e->getCode());
|
70 |
+
}
|
71 |
+
}
|
72 |
+
|
73 |
+
$rawHeaders = $this->getHeadersAsString($rawResponse);
|
74 |
+
$rawBody = $rawResponse->getBody();
|
75 |
+
$httpStatusCode = $rawResponse->getStatusCode();
|
76 |
+
|
77 |
+
return new GraphRawResponse($rawHeaders, $rawBody, $httpStatusCode);
|
78 |
+
}
|
79 |
+
|
80 |
+
/**
|
81 |
+
* Returns the Guzzle array of headers as a string.
|
82 |
+
*
|
83 |
+
* @param ResponseInterface $response The Guzzle response.
|
84 |
+
*
|
85 |
+
* @return string
|
86 |
+
*/
|
87 |
+
public function getHeadersAsString(ResponseInterface $response)
|
88 |
+
{
|
89 |
+
$headers = $response->getHeaders();
|
90 |
+
$rawHeaders = [];
|
91 |
+
foreach ($headers as $name => $values) {
|
92 |
+
$rawHeaders[] = $name . ": " . implode(", ", $values);
|
93 |
+
}
|
94 |
+
|
95 |
+
return implode("\r\n", $rawHeaders);
|
96 |
+
}
|
97 |
+
}
|
Facebook/HttpClients/FacebookHttpClientInterface.php
ADDED
@@ -0,0 +1,47 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Copyright 2017 Facebook, Inc.
|
4 |
+
*
|
5 |
+
* You are hereby granted a non-exclusive, worldwide, royalty-free license to
|
6 |
+
* use, copy, modify, and distribute this software in source code or binary
|
7 |
+
* form for use in connection with the web services and APIs provided by
|
8 |
+
* Facebook.
|
9 |
+
*
|
10 |
+
* As with any software that integrates with the Facebook platform, your use
|
11 |
+
* of this software is subject to the Facebook Developer Principles and
|
12 |
+
* Policies [http://developers.facebook.com/policy/]. This copyright notice
|
13 |
+
* shall be included in all copies or substantial portions of the software.
|
14 |
+
*
|
15 |
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16 |
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17 |
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
18 |
+
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19 |
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
20 |
+
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
21 |
+
* DEALINGS IN THE SOFTWARE.
|
22 |
+
*
|
23 |
+
*/
|
24 |
+
namespace Facebook\HttpClients;
|
25 |
+
|
26 |
+
/**
|
27 |
+
* Interface FacebookHttpClientInterface
|
28 |
+
*
|
29 |
+
* @package Facebook
|
30 |
+
*/
|
31 |
+
interface FacebookHttpClientInterface
|
32 |
+
{
|
33 |
+
/**
|
34 |
+
* Sends a request to the server and returns the raw response.
|
35 |
+
*
|
36 |
+
* @param string $url The endpoint to send the request to.
|
37 |
+
* @param string $method The request method.
|
38 |
+
* @param string $body The body of the request.
|
39 |
+
* @param array $headers The request headers.
|
40 |
+
* @param int $timeOut The timeout in seconds for the request.
|
41 |
+
*
|
42 |
+
* @return \Facebook\Http\GraphRawResponse Raw response from the server.
|
43 |
+
*
|
44 |
+
* @throws \Facebook\Exceptions\FacebookSDKException
|
45 |
+
*/
|
46 |
+
public function send($url, $method, $body, array $headers, $timeOut);
|
47 |
+
}
|
Facebook/HttpClients/FacebookStream.php
ADDED
@@ -0,0 +1,80 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Copyright 2017 Facebook, Inc.
|
4 |
+
*
|
5 |
+
* You are hereby granted a non-exclusive, worldwide, royalty-free license to
|
6 |
+
* use, copy, modify, and distribute this software in source code or binary
|
7 |
+
* form for use in connection with the web services and APIs provided by
|
8 |
+
* Facebook.
|
9 |
+
*
|
10 |
+
* As with any software that integrates with the Facebook platform, your use
|
11 |
+
* of this software is subject to the Facebook Developer Principles and
|
12 |
+
* Policies [http://developers.facebook.com/policy/]. This copyright notice
|
13 |
+
* shall be included in all copies or substantial portions of the software.
|
14 |
+
*
|
15 |
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16 |
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17 |
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
18 |
+
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19 |
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
20 |
+
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
21 |
+
* DEALINGS IN THE SOFTWARE.
|
22 |
+
*
|
23 |
+
*/
|
24 |
+
namespace Facebook\HttpClients;
|
25 |
+
|
26 |
+
/**
|
27 |
+
* Class FacebookStream
|
28 |
+
*
|
29 |
+
* Abstraction for the procedural stream elements so that the functions can be
|
30 |
+
* mocked and the implementation can be tested.
|
31 |
+
*
|
32 |
+
* @package Facebook
|
33 |
+
*/
|
34 |
+
class FacebookStream
|
35 |
+
{
|
36 |
+
/**
|
37 |
+
* @var resource Context stream resource instance
|
38 |
+
*/
|
39 |
+
protected $stream;
|
40 |
+
|
41 |
+
/**
|
42 |
+
* @var array Response headers from the stream wrapper
|
43 |
+
*/
|
44 |
+
protected $responseHeaders = [];
|
45 |
+
|
46 |
+
/**
|
47 |
+
* Make a new context stream reference instance
|
48 |
+
*
|
49 |
+
* @param array $options
|
50 |
+
*/
|
51 |
+
public function streamContextCreate(array $options)
|
52 |
+
{
|
53 |
+
$this->stream = stream_context_create($options);
|
54 |
+
}
|
55 |
+
|
56 |
+
/**
|
57 |
+
* The response headers from the stream wrapper
|
58 |
+
*
|
59 |
+
* @return array
|
60 |
+
*/
|
61 |
+
public function getResponseHeaders()
|
62 |
+
{
|
63 |
+
return $this->responseHeaders;
|
64 |
+
}
|
65 |
+
|
66 |
+
/**
|
67 |
+
* Send a stream wrapped request
|
68 |
+
*
|
69 |
+
* @param string $url
|
70 |
+
*
|
71 |
+
* @return mixed
|
72 |
+
*/
|
73 |
+
public function fileGetContents($url)
|
74 |
+
{
|
75 |
+
$rawResponse = file_get_contents($url, false, $this->stream);
|
76 |
+
$this->responseHeaders = $http_response_header ?: [];
|
77 |
+
|
78 |
+
return $rawResponse;
|
79 |
+
}
|
80 |
+
}
|
Facebook/HttpClients/FacebookStreamHttpClient.php
ADDED
@@ -0,0 +1,94 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Copyright 2017 Facebook, Inc.
|
4 |
+
*
|
5 |
+
* You are hereby granted a non-exclusive, worldwide, royalty-free license to
|
6 |
+
* use, copy, modify, and distribute this software in source code or binary
|
7 |
+
* form for use in connection with the web services and APIs provided by
|
8 |
+
* Facebook.
|
9 |
+
*
|
10 |
+
* As with any software that integrates with the Facebook platform, your use
|
11 |
+
* of this software is subject to the Facebook Developer Principles and
|
12 |
+
* Policies [http://developers.facebook.com/policy/]. This copyright notice
|
13 |
+
* shall be included in all copies or substantial portions of the software.
|
14 |
+
*
|
15 |
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16 |
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17 |
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
18 |
+
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19 |
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
20 |
+
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
21 |
+
* DEALINGS IN THE SOFTWARE.
|
22 |
+
*
|
23 |
+
*/
|
24 |
+
namespace Facebook\HttpClients;
|
25 |
+
|
26 |
+
use Facebook\Http\GraphRawResponse;
|
27 |
+
use Facebook\Exceptions\FacebookSDKException;
|
28 |
+
|
29 |
+
class FacebookStreamHttpClient implements FacebookHttpClientInterface
|
30 |
+
{
|
31 |
+
/**
|
32 |
+
* @var FacebookStream Procedural stream wrapper as object.
|
33 |
+
*/
|
34 |
+
protected $facebookStream;
|
35 |
+
|
36 |
+
/**
|
37 |
+
* @param FacebookStream|null Procedural stream wrapper as object.
|
38 |
+
*/
|
39 |
+
public function __construct(FacebookStream $facebookStream = null)
|
40 |
+
{
|
41 |
+
$this->facebookStream = $facebookStream ?: new FacebookStream();
|
42 |
+
}
|
43 |
+
|
44 |
+
/**
|
45 |
+
* @inheritdoc
|
46 |
+
*/
|
47 |
+
public function send($url, $method, $body, array $headers, $timeOut)
|
48 |
+
{
|
49 |
+
$options = [
|
50 |
+
'http' => [
|
51 |
+
'method' => $method,
|
52 |
+
'header' => $this->compileHeader($headers),
|
53 |
+
'content' => $body,
|
54 |
+
'timeout' => $timeOut,
|
55 |
+
'ignore_errors' => true
|
56 |
+
],
|
57 |
+
'ssl' => [
|
58 |
+
'verify_peer' => true,
|
59 |
+
'verify_peer_name' => true,
|
60 |
+
'allow_self_signed' => true, // All root certificates are self-signed
|
61 |
+
'cafile' => __DIR__ . '/certs/DigiCertHighAssuranceEVRootCA.pem',
|
62 |
+
],
|
63 |
+
];
|
64 |
+
|
65 |
+
$this->facebookStream->streamContextCreate($options);
|
66 |
+
$rawBody = $this->facebookStream->fileGetContents($url);
|
67 |
+
$rawHeaders = $this->facebookStream->getResponseHeaders();
|
68 |
+
|
69 |
+
if ($rawBody === false || empty($rawHeaders)) {
|
70 |
+
throw new FacebookSDKException('Stream returned an empty response', 660);
|
71 |
+
}
|
72 |
+
|
73 |
+
$rawHeaders = implode("\r\n", $rawHeaders);
|
74 |
+
|
75 |
+
return new GraphRawResponse($rawHeaders, $rawBody);
|
76 |
+
}
|
77 |
+
|
78 |
+
/**
|
79 |
+
* Formats the headers for use in the stream wrapper.
|
80 |
+
*
|
81 |
+
* @param array $headers The request headers.
|
82 |
+
*
|
83 |
+
* @return string
|
84 |
+
*/
|
85 |
+
public function compileHeader(array $headers)
|
86 |
+
{
|
87 |
+
$header = [];
|
88 |
+
foreach ($headers as $k => $v) {
|
89 |
+
$header[] = $k . ': ' . $v;
|
90 |
+
}
|
91 |
+
|
92 |
+
return implode("\r\n", $header);
|
93 |
+
}
|
94 |
+
}
|
Facebook/HttpClients/HttpClientsFactory.php
ADDED
@@ -0,0 +1,99 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Copyright 2017 Facebook, Inc.
|
4 |
+
*
|
5 |
+
* You are hereby granted a non-exclusive, worldwide, royalty-free license to
|
6 |
+
* use, copy, modify, and distribute this software in source code or binary
|
7 |
+
* form for use in connection with the web services and APIs provided by
|
8 |
+
* Facebook.
|
9 |
+
*
|
10 |
+
* As with any software that integrates with the Facebook platform, your use
|
11 |
+
* of this software is subject to the Facebook Developer Principles and
|
12 |
+
* Policies [http://developers.facebook.com/policy/]. This copyright notice
|
13 |
+
* shall be included in all copies or substantial portions of the software.
|
14 |
+
*
|
15 |
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16 |
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17 |
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
18 |
+
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19 |
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
20 |
+
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
21 |
+
* DEALINGS IN THE SOFTWARE.
|
22 |
+
*
|
23 |
+
*/
|
24 |
+
namespace Facebook\HttpClients;
|
25 |
+
|
26 |
+
use GuzzleHttp\Client;
|
27 |
+
use InvalidArgumentException;
|
28 |
+
use Exception;
|
29 |
+
|
30 |
+
class HttpClientsFactory
|
31 |
+
{
|
32 |
+
private function __construct()
|
33 |
+
{
|
34 |
+
// a factory constructor should never be invoked
|
35 |
+
}
|
36 |
+
|
37 |
+
/**
|
38 |
+
* HTTP client generation.
|
39 |
+
*
|
40 |
+
* @param FacebookHttpClientInterface|Client|string|null $handler
|
41 |
+
*
|
42 |
+
* @throws Exception If the cURL extension or the Guzzle client aren't available (if required).
|
43 |
+
* @throws InvalidArgumentException If the http client handler isn't "curl", "stream", "guzzle", or an instance of Facebook\HttpClients\FacebookHttpClientInterface.
|
44 |
+
*
|
45 |
+
* @return FacebookHttpClientInterface
|
46 |
+
*/
|
47 |
+
public static function createHttpClient($handler)
|
48 |
+
{
|
49 |
+
if (!$handler) {
|
50 |
+
return self::detectDefaultClient();
|
51 |
+
}
|
52 |
+
|
53 |
+
if ($handler instanceof FacebookHttpClientInterface) {
|
54 |
+
return $handler;
|
55 |
+
}
|
56 |
+
|
57 |
+
if ('stream' === $handler) {
|
58 |
+
return new FacebookStreamHttpClient();
|
59 |
+
}
|
60 |
+
if ('curl' === $handler) {
|
61 |
+
if (!extension_loaded('curl')) {
|
62 |
+
throw new Exception('The cURL extension must be loaded in order to use the "curl" handler.');
|
63 |
+
}
|
64 |
+
|
65 |
+
return new FacebookCurlHttpClient();
|
66 |
+
}
|
67 |
+
|
68 |
+
if ('guzzle' === $handler && !class_exists('GuzzleHttp\Client')) {
|
69 |
+
throw new Exception('The Guzzle HTTP client must be included in order to use the "guzzle" handler.');
|
70 |
+
}
|
71 |
+
|
72 |
+
if ($handler instanceof Client) {
|
73 |
+
return new FacebookGuzzleHttpClient($handler);
|
74 |
+
}
|
75 |
+
if ('guzzle' === $handler) {
|
76 |
+
return new FacebookGuzzleHttpClient();
|
77 |
+
}
|
78 |
+
|
79 |
+
throw new InvalidArgumentException('The http client handler must be set to "curl", "stream", "guzzle", be an instance of GuzzleHttp\Client or an instance of Facebook\HttpClients\FacebookHttpClientInterface');
|
80 |
+
}
|
81 |
+
|
82 |
+
/**
|
83 |
+
* Detect default HTTP client.
|
84 |
+
*
|
85 |
+
* @return FacebookHttpClientInterface
|
86 |
+
*/
|
87 |
+
private static function detectDefaultClient()
|
88 |
+
{
|
89 |
+
if (extension_loaded('curl')) {
|
90 |
+
return new FacebookCurlHttpClient();
|
91 |
+
}
|
92 |
+
|
93 |
+
if (class_exists('GuzzleHttp\Client')) {
|
94 |
+
return new FacebookGuzzleHttpClient();
|
95 |
+
}
|
96 |
+
|
97 |
+
return new FacebookStreamHttpClient();
|
98 |
+
}
|
99 |
+
}
|
Facebook/HttpClients/certs/DigiCertHighAssuranceEVRootCA.pem
ADDED
@@ -0,0 +1,23 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
-----BEGIN CERTIFICATE-----
|
2 |
+
MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBs
|
3 |
+
MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
|
4 |
+
d3cuZGlnaWNlcnQuY29tMSswKQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5j
|
5 |
+
ZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAwMFoXDTMxMTExMDAwMDAwMFowbDEL
|
6 |
+
MAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3
|
7 |
+
LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFuY2Ug
|
8 |
+
RVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm
|
9 |
+
+9S75S0tMqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTW
|
10 |
+
PNt0OKRKzE0lgvdKpVMSOO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEM
|
11 |
+
xChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFB
|
12 |
+
Ik5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQNAQTXKFx01p8VdteZOE3
|
13 |
+
hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUeh10aUAsg
|
14 |
+
EsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQF
|
15 |
+
MAMBAf8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaA
|
16 |
+
FLE+w2kD+L9HAdSYJhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3Nec
|
17 |
+
nzyIZgYIVyHbIUf4KmeqvxgydkAQV8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6z
|
18 |
+
eM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFpmyPInngiK3BD41VHMWEZ71jF
|
19 |
+
hS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkKmNEVX58Svnw2
|
20 |
+
Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe
|
21 |
+
vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep
|
22 |
+
+OkuE6N36B9K
|
23 |
+
-----END CERTIFICATE-----
|
Facebook/PersistentData/FacebookMemoryPersistentDataHandler.php
ADDED
@@ -0,0 +1,53 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Copyright 2017 Facebook, Inc.
|
4 |
+
*
|
5 |
+
* You are hereby granted a non-exclusive, worldwide, royalty-free license to
|
6 |
+
* use, copy, modify, and distribute this software in source code or binary
|
7 |
+
* form for use in connection with the web services and APIs provided by
|
8 |
+
* Facebook.
|
9 |
+
*
|
10 |
+
* As with any software that integrates with the Facebook platform, your use
|
11 |
+
* of this software is subject to the Facebook Developer Principles and
|
12 |
+
* Policies [http://developers.facebook.com/policy/]. This copyright notice
|
13 |
+
* shall be included in all copies or substantial portions of the software.
|
14 |
+
*
|
15 |
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16 |
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17 |
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
18 |
+
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19 |
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
20 |
+
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
21 |
+
* DEALINGS IN THE SOFTWARE.
|
22 |
+
*
|
23 |
+
*/
|
24 |
+
namespace Facebook\PersistentData;
|
25 |
+
|
26 |
+
/**
|
27 |
+
* Class FacebookMemoryPersistentDataHandler
|
28 |
+
*
|
29 |
+
* @package Facebook
|
30 |
+
*/
|
31 |
+
class FacebookMemoryPersistentDataHandler implements PersistentDataInterface
|
32 |
+
{
|
33 |
+
/**
|
34 |
+
* @var array The session data to keep in memory.
|
35 |
+
*/
|
36 |
+
protected $sessionData = [];
|
37 |
+
|
38 |
+
/**
|
39 |
+
* @inheritdoc
|
40 |
+
*/
|
41 |
+
public function get($key)
|
42 |
+
{
|
43 |
+
return isset($this->sessionData[$key]) ? $this->sessionData[$key] : null;
|
44 |
+
}
|
45 |
+
|
46 |
+
/**
|
47 |
+
* @inheritdoc
|
48 |
+
*/
|
49 |
+
public function set($key, $value)
|
50 |
+
{
|
51 |
+
$this->sessionData[$key] = $value;
|
52 |
+
}
|
53 |
+
}
|
Facebook/PersistentData/FacebookSessionPersistentDataHandler.php
ADDED
@@ -0,0 +1,76 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Copyright 2017 Facebook, Inc.
|
4 |
+
*
|
5 |
+
* You are hereby granted a non-exclusive, worldwide, royalty-free license to
|
6 |
+
* use, copy, modify, and distribute this software in source code or binary
|
7 |
+
* form for use in connection with the web services and APIs provided by
|
8 |
+
* Facebook.
|
9 |
+
*
|
10 |
+
* As with any software that integrates with the Facebook platform, your use
|
11 |
+
* of this software is subject to the Facebook Developer Principles and
|
12 |
+
* Policies [http://developers.facebook.com/policy/]. This copyright notice
|
13 |
+
* shall be included in all copies or substantial portions of the software.
|
14 |
+
*
|
15 |
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16 |
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17 |
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
18 |
+
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19 |
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
20 |
+
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
21 |
+
* DEALINGS IN THE SOFTWARE.
|
22 |
+
*
|
23 |
+
*/
|
24 |
+
namespace Facebook\PersistentData;
|
25 |
+
|
26 |
+
use Facebook\Exceptions\FacebookSDKException;
|
27 |
+
|
28 |
+
/**
|
29 |
+
* Class FacebookSessionPersistentDataHandler
|
30 |
+
*
|
31 |
+
* @package Facebook
|
32 |
+
*/
|
33 |
+
class FacebookSessionPersistentDataHandler implements PersistentDataInterface
|
34 |
+
{
|
35 |
+
/**
|
36 |
+
* @var string Prefix to use for session variables.
|
37 |
+
*/
|
38 |
+
protected $sessionPrefix = 'FBRLH_';
|
39 |
+
|
40 |
+
/**
|
41 |
+
* Init the session handler.
|
42 |
+
*
|
43 |
+
* @param boolean $enableSessionCheck
|
44 |
+
*
|
45 |
+
* @throws FacebookSDKException
|
46 |
+
*/
|
47 |
+
public function __construct($enableSessionCheck = true)
|
48 |
+
{
|
49 |
+
if ($enableSessionCheck && session_status() !== PHP_SESSION_ACTIVE) {
|
50 |
+
throw new FacebookSDKException(
|
51 |
+
'Sessions are not active. Please make sure session_start() is at the top of your script.',
|
52 |
+
720
|
53 |
+
);
|
54 |
+
}
|
55 |
+
}
|
56 |
+
|
57 |
+
/**
|
58 |
+
* @inheritdoc
|
59 |
+
*/
|
60 |
+
public function get($key)
|
61 |
+
{
|
62 |
+
if (isset($_SESSION[$this->sessionPrefix . $key])) {
|
63 |
+
return $_SESSION[$this->sessionPrefix . $key];
|
64 |
+
}
|
65 |
+
|
66 |
+
return null;
|
67 |
+
}
|
68 |
+
|
69 |
+
/**
|
70 |
+
* @inheritdoc
|
71 |
+
*/
|
72 |
+
public function set($key, $value)
|
73 |
+
{
|
74 |
+
$_SESSION[$this->sessionPrefix . $key] = $value;
|
75 |
+
}
|
76 |
+
}
|
Facebook/PersistentData/FacebookWordPressPersistentDataHandler.php
ADDED
@@ -0,0 +1,55 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Copyright 2017 Facebook, Inc.
|
4 |
+
*
|
5 |
+
* You are hereby granted a non-exclusive, worldwide, royalty-free license to
|
6 |
+
* use, copy, modify, and distribute this software in source code or binary
|
7 |
+
* form for use in connection with the web services and APIs provided by
|
8 |
+
* Facebook.
|
9 |
+
*
|
10 |
+
* As with any software that integrates with the Facebook platform, your use
|
11 |
+
* of this software is subject to the Facebook Developer Principles and
|
12 |
+
* Policies [http://developers.facebook.com/policy/]. This copyright notice
|
13 |
+
* shall be included in all copies or substantial portions of the software.
|
14 |
+
*
|
15 |
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16 |
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17 |
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
18 |
+
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19 |
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
20 |
+
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
21 |
+
* DEALINGS IN THE SOFTWARE.
|
22 |
+
*
|
23 |
+
*/
|
24 |
+
namespace Facebook\PersistentData;
|
25 |
+
|
26 |
+
/**
|
27 |
+
* Class FacebookMemoryPersistentDataHandler
|
28 |
+
*
|
29 |
+
* @package Facebook
|
30 |
+
*/
|
31 |
+
class FacebookWordPressPersistentDataHandler implements PersistentDataInterface
|
32 |
+
{
|
33 |
+
|
34 |
+
private $uniqueID;
|
35 |
+
|
36 |
+
public function __construct($id){
|
37 |
+
$this->uniqueID = $id;
|
38 |
+
}
|
39 |
+
|
40 |
+
/**
|
41 |
+
* @inheritdoc
|
42 |
+
*/
|
43 |
+
public function get($key)
|
44 |
+
{
|
45 |
+
return get_site_transient( $this->uniqueID . $key);
|
46 |
+
}
|
47 |
+
|
48 |
+
/**
|
49 |
+
* @inheritdoc
|
50 |
+
*/
|
51 |
+
public function set($key, $value)
|
52 |
+
{
|
53 |
+
set_site_transient( $this->uniqueID . $key, $value, 3600);
|
54 |
+
}
|
55 |
+
}
|
Facebook/PersistentData/PersistentDataFactory.php
ADDED
@@ -0,0 +1,65 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Copyright 2017 Facebook, Inc.
|
4 |
+
*
|
5 |
+
* You are hereby granted a non-exclusive, worldwide, royalty-free license to
|
6 |
+
* use, copy, modify, and distribute this software in source code or binary
|
7 |
+
* form for use in connection with the web services and APIs provided by
|
8 |
+
* Facebook.
|
9 |
+
*
|
10 |
+
* As with any software that integrates with the Facebook platform, your use
|
11 |
+
* of this software is subject to the Facebook Developer Principles and
|
12 |
+
* Policies [http://developers.facebook.com/policy/]. This copyright notice
|
13 |
+
* shall be included in all copies or substantial portions of the software.
|
14 |
+
*
|
15 |
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16 |
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17 |
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
18 |
+
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19 |
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
20 |
+
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
21 |
+
* DEALINGS IN THE SOFTWARE.
|
22 |
+
*
|
23 |
+
*/
|
24 |
+
namespace Facebook\PersistentData;
|
25 |
+
|
26 |
+
use InvalidArgumentException;
|
27 |
+
|
28 |
+
class PersistentDataFactory
|
29 |
+
{
|
30 |
+
private function __construct()
|
31 |
+
{
|
32 |
+
// a factory constructor should never be invoked
|
33 |
+
}
|
34 |
+
|
35 |
+
/**
|
36 |
+
* PersistentData generation.
|
37 |
+
*
|
38 |
+
* @param PersistentDataInterface|string|null $handler
|
39 |
+
*
|
40 |
+
* @throws InvalidArgumentException If the persistent data handler isn't "session", "memory", or an instance of Facebook\PersistentData\PersistentDataInterface.
|
41 |
+
*
|
42 |
+
* @return PersistentDataInterface
|
43 |
+
*/
|
44 |
+
public static function createPersistentDataHandler($handler)
|
45 |
+
{
|
46 |
+
if (!$handler) {
|
47 |
+
return session_status() === PHP_SESSION_ACTIVE
|
48 |
+
? new FacebookSessionPersistentDataHandler()
|
49 |
+
: new FacebookMemoryPersistentDataHandler();
|
50 |
+
}
|
51 |
+
|
52 |
+
if ($handler instanceof PersistentDataInterface) {
|
53 |
+
return $handler;
|
54 |
+
}
|
55 |
+
|
56 |
+
if ('session' === $handler) {
|
57 |
+
return new FacebookSessionPersistentDataHandler();
|
58 |
+
}
|
59 |
+
if ('memory' === $handler) {
|
60 |
+
return new FacebookMemoryPersistentDataHandler();
|
61 |
+
}
|
62 |
+
|
63 |
+
throw new InvalidArgumentException('The persistent data handler must be set to "session", "memory", or be an instance of Facebook\PersistentData\PersistentDataInterface');
|
64 |
+
}
|
65 |
+
}
|
Facebook/PersistentData/PersistentDataInterface.php
ADDED
@@ -0,0 +1,49 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Copyright 2017 Facebook, Inc.
|
4 |
+
*
|
5 |
+
* You are hereby granted a non-exclusive, worldwide, royalty-free license to
|
6 |
+
* use, copy, modify, and distribute this software in source code or binary
|
7 |
+
* form for use in connection with the web services and APIs provided by
|
8 |
+
* Facebook.
|
9 |
+
*
|
10 |
+
* As with any software that integrates with the Facebook platform, your use
|
11 |
+
* of this software is subject to the Facebook Developer Principles and
|
12 |
+
* Policies [http://developers.facebook.com/policy/]. This copyright notice
|
13 |
+
* shall be included in all copies or substantial portions of the software.
|
14 |
+
*
|
15 |
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16 |
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17 |
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
18 |
+
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19 |
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
20 |
+
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
21 |
+
* DEALINGS IN THE SOFTWARE.
|
22 |
+
*
|
23 |
+
*/
|
24 |
+
namespace Facebook\PersistentData;
|
25 |
+
|
26 |
+
/**
|
27 |
+
* Interface PersistentDataInterface
|
28 |
+
*
|
29 |
+
* @package Facebook
|
30 |
+
*/
|
31 |
+
interface PersistentDataInterface
|
32 |
+
{
|
33 |
+
/**
|
34 |
+
* Get a value from a persistent data store.
|
35 |
+
*
|
36 |
+
* @param string $key
|
37 |
+
*
|
38 |
+
* @return mixed
|
39 |
+
*/
|
40 |
+
public function get($key);
|
41 |
+
|
42 |
+
/**
|
43 |
+
* Set a value in the persistent data store.
|
44 |
+
*
|
45 |
+
* @param string $key
|
46 |
+
* @param mixed $value
|
47 |
+
*/
|
48 |
+
public function set($key, $value);
|
49 |
+
}
|
Facebook/PseudoRandomString/McryptPseudoRandomStringGenerator.php
ADDED
@@ -0,0 +1,68 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Copyright 2017 Facebook, Inc.
|
4 |
+
*
|
5 |
+
* You are hereby granted a non-exclusive, worldwide, royalty-free license to
|
6 |
+
* use, copy, modify, and distribute this software in source code or binary
|
7 |
+
* form for use in connection with the web services and APIs provided by
|
8 |
+
* Facebook.
|
9 |
+
*
|
10 |
+
* As with any software that integrates with the Facebook platform, your use
|
11 |
+
* of this software is subject to the Facebook Developer Principles and
|
12 |
+
* Policies [http://developers.facebook.com/policy/]. This copyright notice
|
13 |
+
* shall be included in all copies or substantial portions of the software.
|
14 |
+
*
|
15 |
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16 |
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17 |
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
18 |
+
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19 |
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
20 |
+
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
21 |
+
* DEALINGS IN THE SOFTWARE.
|
22 |
+
*
|
23 |
+
*/
|
24 |
+
namespace Facebook\PseudoRandomString;
|
25 |
+
|
26 |
+
use Facebook\Exceptions\FacebookSDKException;
|
27 |
+
|
28 |
+
class McryptPseudoRandomStringGenerator implements PseudoRandomStringGeneratorInterface
|
29 |
+
{
|
30 |
+
use PseudoRandomStringGeneratorTrait;
|
31 |
+
|
32 |
+
/**
|
33 |
+
* @const string The error message when generating the string fails.
|
34 |
+
*/
|
35 |
+
const ERROR_MESSAGE = 'Unable to generate a cryptographically secure pseudo-random string from mcrypt_create_iv(). ';
|
36 |
+
|
37 |
+
/**
|
38 |
+
* @throws FacebookSDKException
|
39 |
+
*/
|
40 |
+
public function __construct()
|
41 |
+
{
|
42 |
+
if (!function_exists('mcrypt_create_iv')) {
|
43 |
+
throw new FacebookSDKException(
|
44 |
+
static::ERROR_MESSAGE .
|
45 |
+
'The function mcrypt_create_iv() does not exist.'
|
46 |
+
);
|
47 |
+
}
|
48 |
+
}
|
49 |
+
|
50 |
+
/**
|
51 |
+
* @inheritdoc
|
52 |
+
*/
|
53 |
+
public function getPseudoRandomString($length)
|
54 |
+
{
|
55 |
+
$this->validateLength($length);
|
56 |
+
|
57 |
+
$binaryString = mcrypt_create_iv($length, MCRYPT_DEV_URANDOM);
|
58 |
+
|
59 |
+
if ($binaryString === false) {
|
60 |
+
throw new FacebookSDKException(
|
61 |
+
static::ERROR_MESSAGE .
|
62 |
+
'mcrypt_create_iv() returned an error.'
|
63 |
+
);
|
64 |
+
}
|
65 |
+
|
66 |
+
return $this->binToHex($binaryString, $length);
|
67 |
+
}
|
68 |
+
}
|
Facebook/PseudoRandomString/OpenSslPseudoRandomStringGenerator.php
ADDED
@@ -0,0 +1,67 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Copyright 2017 Facebook, Inc.
|
4 |
+
*
|
5 |
+
* You are hereby granted a non-exclusive, worldwide, royalty-free license to
|
6 |
+
* use, copy, modify, and distribute this software in source code or binary
|
7 |
+
* form for use in connection with the web services and APIs provided by
|
8 |
+
* Facebook.
|
9 |
+
*
|
10 |
+
* As with any software that integrates with the Facebook platform, your use
|
11 |
+
* of this software is subject to the Facebook Developer Principles and
|
12 |
+
* Policies [http://developers.facebook.com/policy/]. This copyright notice
|
13 |
+
* shall be included in all copies or substantial portions of the software.
|
14 |
+
*
|
15 |
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16 |
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17 |
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
18 |
+
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19 |
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
20 |
+
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
21 |
+
* DEALINGS IN THE SOFTWARE.
|
22 |
+
*
|
23 |
+
*/
|
24 |
+
namespace Facebook\PseudoRandomString;
|
25 |
+
|
26 |
+
use Facebook\Exceptions\FacebookSDKException;
|
27 |
+
|
28 |
+
class OpenSslPseudoRandomStringGenerator implements PseudoRandomStringGeneratorInterface
|
29 |
+
{
|
30 |
+
use PseudoRandomStringGeneratorTrait;
|
31 |
+
|
32 |
+
/**
|
33 |
+
* @const string The error message when generating the string fails.
|
34 |
+
*/
|
35 |
+
const ERROR_MESSAGE = 'Unable to generate a cryptographically secure pseudo-random string from openssl_random_pseudo_bytes().';
|
36 |
+
|
37 |
+
/**
|
38 |
+
* @throws FacebookSDKException
|
39 |
+
*/
|
40 |
+
public function __construct()
|
41 |
+
{
|
42 |
+
if (!function_exists('openssl_random_pseudo_bytes')) {
|
43 |
+
throw new FacebookSDKException(static::ERROR_MESSAGE . 'The function openssl_random_pseudo_bytes() does not exist.');
|
44 |
+
}
|
45 |
+
}
|
46 |
+
|
47 |
+
/**
|
48 |
+
* @inheritdoc
|
49 |
+
*/
|
50 |
+
public function getPseudoRandomString($length)
|
51 |
+
{
|
52 |
+
$this->validateLength($length);
|
53 |
+
|
54 |
+
$wasCryptographicallyStrong = false;
|
55 |
+
$binaryString = openssl_random_pseudo_bytes($length, $wasCryptographicallyStrong);
|
56 |
+
|
57 |
+
if ($binaryString === false) {
|
58 |
+
throw new FacebookSDKException(static::ERROR_MESSAGE . 'openssl_random_pseudo_bytes() returned an unknown error.');
|
59 |
+
}
|
60 |
+
|
61 |
+
if ($wasCryptographicallyStrong !== true) {
|
62 |
+
throw new FacebookSDKException(static::ERROR_MESSAGE . 'openssl_random_pseudo_bytes() returned a pseudo-random string but it was not cryptographically secure and cannot be used.');
|
63 |
+
}
|
64 |
+
|
65 |
+
return $this->binToHex($binaryString, $length);
|
66 |
+
}
|
67 |
+
}
|
Facebook/PseudoRandomString/PseudoRandomStringGeneratorFactory.php
ADDED
@@ -0,0 +1,101 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Copyright 2017 Facebook, Inc.
|
4 |
+
*
|
5 |
+
* You are hereby granted a non-exclusive, worldwide, royalty-free license to
|
6 |
+
* use, copy, modify, and distribute this software in source code or binary
|
7 |
+
* form for use in connection with the web services and APIs provided by
|
8 |
+
* Facebook.
|
9 |
+
*
|
10 |
+
* As with any software that integrates with the Facebook platform, your use
|
11 |
+
* of this software is subject to the Facebook Developer Principles and
|
12 |
+
* Policies [http://developers.facebook.com/policy/]. This copyright notice
|
13 |
+
* shall be included in all copies or substantial portions of the software.
|
14 |
+
*
|
15 |
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16 |
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17 |
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
18 |
+
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19 |
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
20 |
+
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
21 |
+
* DEALINGS IN THE SOFTWARE.
|
22 |
+
*
|
23 |
+
*/
|
24 |
+
namespace Facebook\PseudoRandomString;
|
25 |
+
|
26 |
+
use Facebook\Exceptions\FacebookSDKException;
|
27 |
+
use InvalidArgumentException;
|
28 |
+
|
29 |
+
class PseudoRandomStringGeneratorFactory
|
30 |
+
{
|
31 |
+
private function __construct()
|
32 |
+
{
|
33 |
+
// a factory constructor should never be invoked
|
34 |
+
}
|
35 |
+
|
36 |
+
/**
|
37 |
+
* Pseudo random string generator creation.
|
38 |
+
*
|
39 |
+
* @param PseudoRandomStringGeneratorInterface|string|null $generator
|
40 |
+
*
|
41 |
+
* @throws InvalidArgumentException If the pseudo random string generator must be set to "random_bytes", "mcrypt", "openssl", or "urandom", or be an instance of Facebook\PseudoRandomString\PseudoRandomStringGeneratorInterface.
|
42 |
+
*
|
43 |
+
* @return PseudoRandomStringGeneratorInterface
|
44 |
+
*/
|
45 |
+
public static function createPseudoRandomStringGenerator($generator)
|
46 |
+
{
|
47 |
+
if (!$generator) {
|
48 |
+
return self::detectDefaultPseudoRandomStringGenerator();
|
49 |
+
}
|
50 |
+
|
51 |
+
if ($generator instanceof PseudoRandomStringGeneratorInterface) {
|
52 |
+
return $generator;
|
53 |
+
}
|
54 |
+
|
55 |
+
if ('random_bytes' === $generator) {
|
56 |
+
return new RandomBytesPseudoRandomStringGenerator();
|
57 |
+
}
|
58 |
+
if ('mcrypt' === $generator) {
|
59 |
+
return new McryptPseudoRandomStringGenerator();
|
60 |
+
}
|
61 |
+
if ('openssl' === $generator) {
|
62 |
+
return new OpenSslPseudoRandomStringGenerator();
|
63 |
+
}
|
64 |
+
if ('urandom' === $generator) {
|
65 |
+
return new UrandomPseudoRandomStringGenerator();
|
66 |
+
}
|
67 |
+
|
68 |
+
throw new InvalidArgumentException('The pseudo random string generator must be set to "random_bytes", "mcrypt", "openssl", or "urandom", or be an instance of Facebook\PseudoRandomString\PseudoRandomStringGeneratorInterface');
|
69 |
+
}
|
70 |
+
|
71 |
+
/**
|
72 |
+
* Detects which pseudo-random string generator to use.
|
73 |
+
*
|
74 |
+
* @throws FacebookSDKException If unable to detect a cryptographically secure pseudo-random string generator.
|
75 |
+
*
|
76 |
+
* @return PseudoRandomStringGeneratorInterface
|
77 |
+
*/
|
78 |
+
private static function detectDefaultPseudoRandomStringGenerator()
|
79 |
+
{
|
80 |
+
// Check for PHP 7's CSPRNG first to keep mcrypt deprecation messages from appearing in PHP 7.1.
|
81 |
+
if (function_exists('random_bytes')) {
|
82 |
+
return new RandomBytesPseudoRandomStringGenerator();
|
83 |
+
}
|
84 |
+
|
85 |
+
// Since openssl_random_pseudo_bytes() can sometimes return non-cryptographically
|
86 |
+
// secure pseudo-random strings (in rare cases), we check for mcrypt_create_iv() next.
|
87 |
+
if (function_exists('mcrypt_create_iv')) {
|
88 |
+
return new McryptPseudoRandomStringGenerator();
|
89 |
+
}
|
90 |
+
|
91 |
+
if (function_exists('openssl_random_pseudo_bytes')) {
|
92 |
+
return new OpenSslPseudoRandomStringGenerator();
|
93 |
+
}
|
94 |
+
|
95 |
+
if (!ini_get('open_basedir') && is_readable('/dev/urandom')) {
|
96 |
+
return new UrandomPseudoRandomStringGenerator();
|
97 |
+
}
|
98 |
+
|
99 |
+
throw new FacebookSDKException('Unable to detect a cryptographically secure pseudo-random string generator.');
|
100 |
+
}
|
101 |
+
}
|
Facebook/PseudoRandomString/PseudoRandomStringGeneratorInterface.php
ADDED
@@ -0,0 +1,45 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Copyright 2017 Facebook, Inc.
|
4 |
+
*
|
5 |
+
* You are hereby granted a non-exclusive, worldwide, royalty-free license to
|
6 |
+
* use, copy, modify, and distribute this software in source code or binary
|
7 |
+
* form for use in connection with the web services and APIs provided by
|
8 |
+
* Facebook.
|
9 |
+
*
|
10 |
+
* As with any software that integrates with the Facebook platform, your use
|
11 |
+
* of this software is subject to the Facebook Developer Principles and
|
12 |
+
* Policies [http://developers.facebook.com/policy/]. This copyright notice
|
13 |
+
* shall be included in all copies or substantial portions of the software.
|
14 |
+
*
|
15 |
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16 |
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17 |
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
18 |
+
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19 |
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
20 |
+
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
21 |
+
* DEALINGS IN THE SOFTWARE.
|
22 |
+
*
|
23 |
+
*/
|
24 |
+
namespace Facebook\PseudoRandomString;
|
25 |
+
|
26 |
+
/**
|
27 |
+
* Interface
|
28 |
+
*
|
29 |
+
* @package Facebook
|
30 |
+
*/
|
31 |
+
interface PseudoRandomStringGeneratorInterface
|
32 |
+
{
|
33 |
+
/**
|
34 |
+
* Get a cryptographically secure pseudo-random string of arbitrary length.
|
35 |
+
*
|
36 |
+
* @see http://sockpuppet.org/blog/2014/02/25/safely-generate-random-numbers/
|
37 |
+
*
|
38 |
+
* @param int $length The length of the string to return.
|
39 |
+
*
|
40 |
+
* @return string
|
41 |
+
*
|
42 |
+
* @throws \Facebook\Exceptions\FacebookSDKException|\InvalidArgumentException
|
43 |
+
*/
|
44 |
+
public function getPseudoRandomString($length);
|
45 |
+
}
|
Facebook/PseudoRandomString/PseudoRandomStringGeneratorTrait.php
ADDED
@@ -0,0 +1,58 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Copyright 2017 Facebook, Inc.
|
4 |
+
*
|
5 |
+
* You are hereby granted a non-exclusive, worldwide, royalty-free license to
|
6 |
+
* use, copy, modify, and distribute this software in source code or binary
|
7 |
+
* form for use in connection with the web services and APIs provided by
|
8 |
+
* Facebook.
|
9 |
+
*
|
10 |
+
* As with any software that integrates with the Facebook platform, your use
|
11 |
+
* of this software is subject to the Facebook Developer Principles and
|
12 |
+
* Policies [http://developers.facebook.com/policy/]. This copyright notice
|
13 |
+
* shall be included in all copies or substantial portions of the software.
|
14 |
+
*
|
15 |
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16 |
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17 |
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
18 |
+
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19 |
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
20 |
+
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
21 |
+
* DEALINGS IN THE SOFTWARE.
|
22 |
+
*
|
23 |
+
*/
|
24 |
+
namespace Facebook\PseudoRandomString;
|
25 |
+
|
26 |
+
trait PseudoRandomStringGeneratorTrait
|
27 |
+
{
|
28 |
+
/**
|
29 |
+
* Validates the length argument of a random string.
|
30 |
+
*
|
31 |
+
* @param int $length The length to validate.
|
32 |
+
*
|
33 |
+
* @throws \InvalidArgumentException
|
34 |
+
*/
|
35 |
+
public function validateLength($length)
|
36 |
+
{
|
37 |
+
if (!is_int($length)) {
|
38 |
+
throw new \InvalidArgumentException('getPseudoRandomString() expects an integer for the string length');
|
39 |
+
}
|
40 |
+
|
41 |
+
if ($length < 1) {
|
42 |
+
throw new \InvalidArgumentException('getPseudoRandomString() expects a length greater than 1');
|
43 |
+
}
|
44 |
+
}
|
45 |
+
|
46 |
+
/**
|
47 |
+
* Converts binary data to hexadecimal of arbitrary length.
|
48 |
+
*
|
49 |
+
* @param string $binaryData The binary data to convert to hex.
|
50 |
+
* @param int $length The length of the string to return.
|
51 |
+
*
|
52 |
+
* @return string
|
53 |
+
*/
|
54 |
+
public function binToHex($binaryData, $length)
|
55 |
+
{
|
56 |
+
return \substr(\bin2hex($binaryData), 0, $length);
|
57 |
+
}
|
58 |
+
}
|
Facebook/PseudoRandomString/RandomBytesPseudoRandomStringGenerator.php
ADDED
@@ -0,0 +1,59 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Copyright 2017 Facebook, Inc.
|
4 |
+
*
|
5 |
+
* You are hereby granted a non-exclusive, worldwide, royalty-free license to
|
6 |
+
* use, copy, modify, and distribute this software in source code or binary
|
7 |
+
* form for use in connection with the web services and APIs provided by
|
8 |
+
* Facebook.
|
9 |
+
*
|
10 |
+
* As with any software that integrates with the Facebook platform, your use
|
11 |
+
* of this software is subject to the Facebook Developer Principles and
|
12 |
+
* Policies [http://developers.facebook.com/policy/]. This copyright notice
|
13 |
+
* shall be included in all copies or substantial portions of the software.
|
14 |
+
*
|
15 |
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16 |
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17 |
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
18 |
+
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19 |
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
20 |
+
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
21 |
+
* DEALINGS IN THE SOFTWARE.
|
22 |
+
*
|
23 |
+
*/
|
24 |
+
namespace Facebook\PseudoRandomString;
|
25 |
+
|
26 |
+
use Facebook\Exceptions\FacebookSDKException;
|
27 |
+
|
28 |
+
class RandomBytesPseudoRandomStringGenerator implements PseudoRandomStringGeneratorInterface
|
29 |
+
{
|
30 |
+
use PseudoRandomStringGeneratorTrait;
|
31 |
+
|
32 |
+
/**
|
33 |
+
* @const string The error message when generating the string fails.
|
34 |
+
*/
|
35 |
+
const ERROR_MESSAGE = 'Unable to generate a cryptographically secure pseudo-random string from random_bytes(). ';
|
36 |
+
|
37 |
+
/**
|
38 |
+
* @throws FacebookSDKException
|
39 |
+
*/
|
40 |
+
public function __construct()
|
41 |
+
{
|
42 |
+
if (!function_exists('random_bytes')) {
|
43 |
+
throw new FacebookSDKException(
|
44 |
+
static::ERROR_MESSAGE .
|
45 |
+
'The function random_bytes() does not exist.'
|
46 |
+
);
|
47 |
+
}
|
48 |
+
}
|
49 |
+
|
50 |
+
/**
|
51 |
+
* @inheritdoc
|
52 |
+
*/
|
53 |
+
public function getPseudoRandomString($length)
|
54 |
+
{
|
55 |
+
$this->validateLength($length);
|
56 |
+
|
57 |
+
return $this->binToHex(random_bytes($length), $length);
|
58 |
+
}
|
59 |
+
}
|
Facebook/PseudoRandomString/UrandomPseudoRandomStringGenerator.php
ADDED
@@ -0,0 +1,89 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Copyright 2017 Facebook, Inc.
|
4 |
+
*
|
5 |
+
* You are hereby granted a non-exclusive, worldwide, royalty-free license to
|
6 |
+
* use, copy, modify, and distribute this software in source code or binary
|
7 |
+
* form for use in connection with the web services and APIs provided by
|
8 |
+
* Facebook.
|
9 |
+
*
|
10 |
+
* As with any software that integrates with the Facebook platform, your use
|
11 |
+
* of this software is subject to the Facebook Developer Principles and
|
12 |
+
* Policies [http://developers.facebook.com/policy/]. This copyright notice
|
13 |
+
* shall be included in all copies or substantial portions of the software.
|
14 |
+
*
|
15 |
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16 |
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17 |
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
18 |
+
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19 |
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
20 |
+
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
21 |
+
* DEALINGS IN THE SOFTWARE.
|
22 |
+
*
|
23 |
+
*/
|
24 |
+
namespace Facebook\PseudoRandomString;
|
25 |
+
|
26 |
+
use Facebook\Exceptions\FacebookSDKException;
|
27 |
+
|
28 |
+
class UrandomPseudoRandomStringGenerator implements PseudoRandomStringGeneratorInterface
|
29 |
+
{
|
30 |
+
|
31 |
+
use PseudoRandomStringGeneratorTrait;
|
32 |
+
|
33 |
+
/**
|
34 |
+
* @const string The error message when generating the string fails.
|
35 |
+
*/
|
36 |
+
const ERROR_MESSAGE = 'Unable to generate a cryptographically secure pseudo-random string from /dev/urandom. ';
|
37 |
+
|
38 |
+
/**
|
39 |
+
* @throws FacebookSDKException
|
40 |
+
*/
|
41 |
+
public function __construct()
|
42 |
+
{
|
43 |
+
if (ini_get('open_basedir')) {
|
44 |
+
throw new FacebookSDKException(
|
45 |
+
static::ERROR_MESSAGE .
|
46 |
+
'There is an open_basedir constraint that prevents access to /dev/urandom.'
|
47 |
+
);
|
48 |
+
}
|
49 |
+
|
50 |
+
if (!is_readable('/dev/urandom')) {
|
51 |
+
throw new FacebookSDKException(
|
52 |
+
static::ERROR_MESSAGE .
|
53 |
+
'Unable to read from /dev/urandom.'
|
54 |
+
);
|
55 |
+
}
|
56 |
+
}
|
57 |
+
|
58 |
+
/**
|
59 |
+
* @inheritdoc
|
60 |
+
*/
|
61 |
+
public function getPseudoRandomString($length)
|
62 |
+
{
|
63 |
+
$this->validateLength($length);
|
64 |
+
|
65 |
+
$stream = fopen('/dev/urandom', 'rb');
|
66 |
+
if (!is_resource($stream)) {
|
67 |
+
throw new FacebookSDKException(
|
68 |
+
static::ERROR_MESSAGE .
|
69 |
+
'Unable to open stream to /dev/urandom.'
|
70 |
+
);
|
71 |
+
}
|
72 |
+
|
73 |
+
if (!defined('HHVM_VERSION')) {
|
74 |
+
stream_set_read_buffer($stream, 0);
|
75 |
+
}
|
76 |
+
|
77 |
+
$binaryString = fread($stream, $length);
|
78 |
+
fclose($stream);
|
79 |
+
|
80 |
+
if (!$binaryString) {
|
81 |
+
throw new FacebookSDKException(
|
82 |
+
static::ERROR_MESSAGE .
|
83 |
+
'Stream to /dev/urandom returned no data.'
|
84 |
+
);
|
85 |
+
}
|
86 |
+
|
87 |
+
return $this->binToHex($binaryString, $length);
|
88 |
+
}
|
89 |
+
}
|
Facebook/SignedRequest.php
ADDED
@@ -0,0 +1,326 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Copyright 2017 Facebook, Inc.
|
4 |
+
*
|
5 |
+
* You are hereby granted a non-exclusive, worldwide, royalty-free license to
|
6 |
+
* use, copy, modify, and distribute this software in source code or binary
|
7 |
+
* form for use in connection with the web services and APIs provided by
|
8 |
+
* Facebook.
|
9 |
+
*
|
10 |
+
* As with any software that integrates with the Facebook platform, your use
|
11 |
+
* of this software is subject to the Facebook Developer Principles and
|
12 |
+
* Policies [http://developers.facebook.com/policy/]. This copyright notice
|
13 |
+
* shall be included in all copies or substantial portions of the software.
|
14 |
+
*
|
15 |
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16 |
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17 |
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
18 |
+
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19 |
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
20 |
+
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
21 |
+
* DEALINGS IN THE SOFTWARE.
|
22 |
+
*
|
23 |
+
*/
|
24 |
+
namespace Facebook;
|
25 |
+
|
26 |
+
use Facebook\Exceptions\FacebookSDKException;
|
27 |
+
|
28 |
+
/**
|
29 |
+
* Class SignedRequest
|
30 |
+
*
|
31 |
+
* @package Facebook
|
32 |
+
*/
|
33 |
+
class SignedRequest
|
34 |
+
{
|
35 |
+
/**
|
36 |
+
* @var FacebookApp The FacebookApp entity.
|
37 |
+
*/
|
38 |
+
protected $app;
|
39 |
+
|
40 |
+
/**
|
41 |
+
* @var string The raw encrypted signed request.
|
42 |
+
*/
|
43 |
+
protected $rawSignedRequest;
|
44 |
+
|
45 |
+
/**
|
46 |
+
* @var array The payload from the decrypted signed request.
|
47 |
+
*/
|
48 |
+
protected $payload;
|
49 |
+
|
50 |
+
/**
|
51 |
+
* Instantiate a new SignedRequest entity.
|
52 |
+
*
|
53 |
+
* @param FacebookApp $facebookApp The FacebookApp entity.
|
54 |
+
* @param string|null $rawSignedRequest The raw signed request.
|
55 |
+
*/
|
56 |
+
public function __construct(FacebookApp $facebookApp, $rawSignedRequest = null)
|
57 |
+
{
|
58 |
+
$this->app = $facebookApp;
|
59 |
+
|
60 |
+
if (!$rawSignedRequest) {
|
61 |
+
return;
|
62 |
+
}
|
63 |
+
|
64 |
+
$this->rawSignedRequest = $rawSignedRequest;
|
65 |
+
|
66 |
+
$this->parse();
|
67 |
+
}
|
68 |
+
|
69 |
+
/**
|
70 |
+
* Returns the raw signed request data.
|
71 |
+
*
|
72 |
+
* @return string|null
|
73 |
+
*/
|
74 |
+
public function getRawSignedRequest()
|
75 |
+
{
|
76 |
+
return $this->rawSignedRequest;
|
77 |
+
}
|
78 |
+
|
79 |
+
/**
|
80 |
+
* Returns the parsed signed request data.
|
81 |
+
*
|
82 |
+
* @return array|null
|
83 |
+
*/
|
84 |
+
public function getPayload()
|
85 |
+
{
|
86 |
+
return $this->payload;
|
87 |
+
}
|
88 |
+
|
89 |
+
/**
|
90 |
+
* Returns a property from the signed request data if available.
|
91 |
+
*
|
92 |
+
* @param string $key
|
93 |
+
* @param mixed|null $default
|
94 |
+
*
|
95 |
+
* @return mixed|null
|
96 |
+
*/
|
97 |
+
public function get($key, $default = null)
|
98 |
+
{
|
99 |
+
if (isset($this->payload[$key])) {
|
100 |
+
return $this->payload[$key];
|
101 |
+
}
|
102 |
+
|
103 |
+
return $default;
|
104 |
+
}
|
105 |
+
|
106 |
+
/**
|
107 |
+
* Returns user_id from signed request data if available.
|
108 |
+
*
|
109 |
+
* @return string|null
|
110 |
+
*/
|
111 |
+
public function getUserId()
|
112 |
+
{
|
113 |
+
return $this->get('user_id');
|
114 |
+
}
|
115 |
+
|
116 |
+
/**
|
117 |
+
* Checks for OAuth data in the payload.
|
118 |
+
*
|
119 |
+
* @return boolean
|
120 |
+
*/
|
121 |
+
public function hasOAuthData()
|
122 |
+
{
|
123 |
+
return $this->get('oauth_token') || $this->get('code');
|
124 |
+
}
|
125 |
+
|
126 |
+
/**
|
127 |
+
* Creates a signed request from an array of data.
|
128 |
+
*
|
129 |
+
* @param array $payload
|
130 |
+
*
|
131 |
+
* @return string
|
132 |
+
*/
|
133 |
+
public function make(array $payload)
|
134 |
+
{
|
135 |
+
$payload['algorithm'] = isset($payload['algorithm']) ? $payload['algorithm'] : 'HMAC-SHA256';
|
136 |
+
$payload['issued_at'] = isset($payload['issued_at']) ? $payload['issued_at'] : time();
|
137 |
+
$encodedPayload = $this->base64UrlEncode(json_encode($payload));
|
138 |
+
|
139 |
+
$hashedSig = $this->hashSignature($encodedPayload);
|
140 |
+
$encodedSig = $this->base64UrlEncode($hashedSig);
|
141 |
+
|
142 |
+
return $encodedSig . '.' . $encodedPayload;
|
143 |
+
}
|
144 |
+
|
145 |
+
/**
|
146 |
+
* Validates and decodes a signed request and saves
|
147 |
+
* the payload to an array.
|
148 |
+
*/
|
149 |
+
protected function parse()
|
150 |
+
{
|
151 |
+
list($encodedSig, $encodedPayload) = $this->split();
|
152 |
+
|
153 |
+
// Signature validation
|
154 |
+
$sig = $this->decodeSignature($encodedSig);
|
155 |
+
$hashedSig = $this->hashSignature($encodedPayload);
|
156 |
+
$this->validateSignature($hashedSig, $sig);
|
157 |
+
|
158 |
+
$this->payload = $this->decodePayload($encodedPayload);
|
159 |
+
|
160 |
+
// Payload validation
|
161 |
+
$this->validateAlgorithm();
|
162 |
+
}
|
163 |
+
|
164 |
+
/**
|
165 |
+
* Splits a raw signed request into signature and payload.
|
166 |
+
*
|
167 |
+
* @returns array
|
168 |
+
*
|
169 |
+
* @throws FacebookSDKException
|
170 |
+
*/
|
171 |
+
protected function split()
|
172 |
+
{
|
173 |
+
if (strpos($this->rawSignedRequest, '.') === false) {
|
174 |
+
throw new FacebookSDKException('Malformed signed request.', 606);
|
175 |
+
}
|
176 |
+
|
177 |
+
return explode('.', $this->rawSignedRequest, 2);
|
178 |
+
}
|
179 |
+
|
180 |
+
/**
|
181 |
+
* Decodes the raw signature from a signed request.
|
182 |
+
*
|
183 |
+
* @param string $encodedSig
|
184 |
+
*
|
185 |
+
* @returns string
|
186 |
+
*
|
187 |
+
* @throws FacebookSDKException
|
188 |
+
*/
|
189 |
+
protected function decodeSignature($encodedSig)
|
190 |
+
{
|
191 |
+
$sig = $this->base64UrlDecode($encodedSig);
|
192 |
+
|
193 |
+
if (!$sig) {
|
194 |
+
throw new FacebookSDKException('Signed request has malformed encoded signature data.', 607);
|
195 |
+
}
|
196 |
+
|
197 |
+
return $sig;
|
198 |
+
}
|
199 |
+
|
200 |
+
/**
|
201 |
+
* Decodes the raw payload from a signed request.
|
202 |
+
*
|
203 |
+
* @param string $encodedPayload
|
204 |
+
*
|
205 |
+
* @returns array
|
206 |
+
*
|
207 |
+
* @throws FacebookSDKException
|
208 |
+
*/
|
209 |
+
protected function decodePayload($encodedPayload)
|
210 |
+
{
|
211 |
+
$payload = $this->base64UrlDecode($encodedPayload);
|
212 |
+
|
213 |
+
if ($payload) {
|
214 |
+
$payload = json_decode($payload, true);
|
215 |
+
}
|
216 |
+
|
217 |
+
if (!is_array($payload)) {
|
218 |
+
throw new FacebookSDKException('Signed request has malformed encoded payload data.', 607);
|
219 |
+
}
|
220 |
+
|
221 |
+
return $payload;
|
222 |
+
}
|
223 |
+
|
224 |
+
/**
|
225 |
+
* Validates the algorithm used in a signed request.
|
226 |
+
*
|
227 |
+
* @throws FacebookSDKException
|
228 |
+
*/
|
229 |
+
protected function validateAlgorithm()
|
230 |
+
{
|
231 |
+
if ($this->get('algorithm') !== 'HMAC-SHA256') {
|
232 |
+
throw new FacebookSDKException('Signed request is using the wrong algorithm.', 605);
|
233 |
+
}
|
234 |
+
}
|
235 |
+
|
236 |
+
/**
|
237 |
+
* Hashes the signature used in a signed request.
|
238 |
+
*
|
239 |
+
* @param string $encodedData
|
240 |
+
*
|
241 |
+
* @return string
|
242 |
+
*
|
243 |
+
* @throws FacebookSDKException
|
244 |
+
*/
|
245 |
+
protected function hashSignature($encodedData)
|
246 |
+
{
|
247 |
+
$hashedSig = hash_hmac(
|
248 |
+
'sha256',
|
249 |
+
$encodedData,
|
250 |
+
$this->app->getSecret(),
|
251 |
+
$raw_output = true
|
252 |
+
);
|
253 |
+
|
254 |
+
if (!$hashedSig) {
|
255 |
+
throw new FacebookSDKException('Unable to hash signature from encoded payload data.', 602);
|
256 |
+
}
|
257 |
+
|
258 |
+
return $hashedSig;
|
259 |
+
}
|
260 |
+
|
261 |
+
/**
|
262 |
+
* Validates the signature used in a signed request.
|
263 |
+
*
|
264 |
+
* @param string $hashedSig
|
265 |
+
* @param string $sig
|
266 |
+
*
|
267 |
+
* @throws FacebookSDKException
|
268 |
+
*/
|
269 |
+
protected function validateSignature($hashedSig, $sig)
|
270 |
+
{
|
271 |
+
if (\hash_equals($hashedSig, $sig)) {
|
272 |
+
return;
|
273 |
+
}
|
274 |
+
|
275 |
+
throw new FacebookSDKException('Signed request has an invalid signature.', 602);
|
276 |
+
}
|
277 |
+
|
278 |
+
/**
|
279 |
+
* Base64 decoding which replaces characters:
|
280 |
+
* + instead of -
|
281 |
+
* / instead of _
|
282 |
+
*
|
283 |
+
* @link http://en.wikipedia.org/wiki/Base64#URL_applications
|
284 |
+
*
|
285 |
+
* @param string $input base64 url encoded input
|
286 |
+
*
|
287 |
+
* @return string decoded string
|
288 |
+
*/
|
289 |
+
public function base64UrlDecode($input)
|
290 |
+
{
|
291 |
+
$urlDecodedBase64 = strtr($input, '-_', '+/');
|
292 |
+
$this->validateBase64($urlDecodedBase64);
|
293 |
+
|
294 |
+
return base64_decode($urlDecodedBase64);
|
295 |
+
}
|
296 |
+
|
297 |
+
/**
|
298 |
+
* Base64 encoding which replaces characters:
|
299 |
+
* + instead of -
|
300 |
+
* / instead of _
|
301 |
+
*
|
302 |
+
* @link http://en.wikipedia.org/wiki/Base64#URL_applications
|
303 |
+
*
|
304 |
+
* @param string $input string to encode
|
305 |
+
*
|
306 |
+
* @return string base64 url encoded input
|
307 |
+
*/
|
308 |
+
public function base64UrlEncode($input)
|
309 |
+
{
|
310 |
+
return strtr(base64_encode($input), '+/', '-_');
|
311 |
+
}
|
312 |
+
|
313 |
+
/**
|
314 |
+
* Validates a base64 string.
|
315 |
+
*
|
316 |
+
* @param string $input base64 value to validate
|
317 |
+
*
|
318 |
+
* @throws FacebookSDKException
|
319 |
+
*/
|
320 |
+
protected function validateBase64($input)
|
321 |
+
{
|
322 |
+
if (!preg_match('/^[a-zA-Z0-9\/\r\n+]*={0,2}$/', $input)) {
|
323 |
+
throw new FacebookSDKException('Signed request contains malformed base64 encoding.', 608);
|
324 |
+
}
|
325 |
+
}
|
326 |
+
}
|
Facebook/Url/FacebookUrlDetectionHandler.php
ADDED
@@ -0,0 +1,182 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Copyright 2017 Facebook, Inc.
|
4 |
+
*
|
5 |
+
* You are hereby granted a non-exclusive, worldwide, royalty-free license to
|
6 |
+
* use, copy, modify, and distribute this software in source code or binary
|
7 |
+
* form for use in connection with the web services and APIs provided by
|
8 |
+
* Facebook.
|
9 |
+
*
|
10 |
+
* As with any software that integrates with the Facebook platform, your use
|
11 |
+
* of this software is subject to the Facebook Developer Principles and
|
12 |
+
* Policies [http://developers.facebook.com/policy/]. This copyright notice
|
13 |
+
* shall be included in all copies or substantial portions of the software.
|
14 |
+
*
|
15 |
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16 |
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17 |
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
18 |
+
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19 |
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
20 |
+
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
21 |
+
* DEALINGS IN THE SOFTWARE.
|
22 |
+
*
|
23 |
+
*/
|
24 |
+
namespace Facebook\Url;
|
25 |
+
|
26 |
+
/**
|
27 |
+
* Class FacebookUrlDetectionHandler
|
28 |
+
*
|
29 |
+
* @package Facebook
|
30 |
+
*/
|
31 |
+
class FacebookUrlDetectionHandler implements UrlDetectionInterface
|
32 |
+
{
|
33 |
+
/**
|
34 |
+
* @inheritdoc
|
35 |
+
*/
|
36 |
+
public function getCurrentUrl()
|
37 |
+
{
|
38 |
+
return $this->getHttpScheme() . '://' . $this->getHostName() . $this->getServerVar('REQUEST_URI');
|
39 |
+
}
|
40 |
+
|
41 |
+
/**
|
42 |
+
* Get the currently active URL scheme.
|
43 |
+
*
|
44 |
+
* @return string
|
45 |
+
*/
|
46 |
+
protected function getHttpScheme()
|
47 |
+
{
|
48 |
+
return $this->isBehindSsl() ? 'https' : 'http';
|
49 |
+
}
|
50 |
+
|
51 |
+
/**
|
52 |
+
* Tries to detect if the server is running behind an SSL.
|
53 |
+
*
|
54 |
+
* @return boolean
|
55 |
+
*/
|
56 |
+
protected function isBehindSsl()
|
57 |
+
{
|
58 |
+
// Check for proxy first
|
59 |
+
$protocol = $this->getHeader('X_FORWARDED_PROTO');
|
60 |
+
if ($protocol) {
|
61 |
+
return $this->protocolWithActiveSsl($protocol);
|
62 |
+
}
|
63 |
+
|
64 |
+
$protocol = $this->getServerVar('HTTPS');
|
65 |
+
if ($protocol) {
|
66 |
+
return $this->protocolWithActiveSsl($protocol);
|
67 |
+
}
|
68 |
+
|
69 |
+
return (string)$this->getServerVar('SERVER_PORT') === '443';
|
70 |
+
}
|
71 |
+
|
72 |
+
/**
|
73 |
+
* Detects an active SSL protocol value.
|
74 |
+
*
|
75 |
+
* @param string $protocol
|
76 |
+
*
|
77 |
+
* @return boolean
|
78 |
+
*/
|
79 |
+
protected function protocolWithActiveSsl($protocol)
|
80 |
+
{
|
81 |
+
$protocol = strtolower((string)$protocol);
|
82 |
+
|
83 |
+
return in_array($protocol, ['on', '1', 'https', 'ssl'], true);
|
84 |
+
}
|
85 |
+
|
86 |
+
/**
|
87 |
+
* Tries to detect the host name of the server.
|
88 |
+
*
|
89 |
+
* Some elements adapted from
|
90 |
+
*
|
91 |
+
* @see https://github.com/symfony/HttpFoundation/blob/master/Request.php
|
92 |
+
*
|
93 |
+
* @return string
|
94 |
+
*/
|
95 |
+
protected function getHostName()
|
96 |
+
{
|
97 |
+
// Check for proxy first
|
98 |
+
$header = $this->getHeader('X_FORWARDED_HOST');
|
99 |
+
if ($header && $this->isValidForwardedHost($header)) {
|
100 |
+
$elements = explode(',', $header);
|
101 |
+
$host = $elements[count($elements) - 1];
|
102 |
+
} elseif (!$host = $this->getHeader('HOST')) {
|
103 |
+
if (!$host = $this->getServerVar('SERVER_NAME')) {
|
104 |
+
$host = $this->getServerVar('SERVER_ADDR');
|
105 |
+
}
|
106 |
+
}
|
107 |
+
|
108 |
+
// trim and remove port number from host
|
109 |
+
// host is lowercase as per RFC 952/2181
|
110 |
+
$host = strtolower(preg_replace('/:\d+$/', '', trim($host)));
|
111 |
+
|
112 |
+
// Port number
|
113 |
+
$scheme = $this->getHttpScheme();
|
114 |
+
$port = $this->getCurrentPort();
|
115 |
+
$appendPort = ':' . $port;
|
116 |
+
|
117 |
+
// Don't append port number if a normal port.
|
118 |
+
if (($scheme == 'http' && $port == '80') || ($scheme == 'https' && $port == '443')) {
|
119 |
+
$appendPort = '';
|
120 |
+
}
|
121 |
+
|
122 |
+
return $host . $appendPort;
|
123 |
+
}
|
124 |
+
|
125 |
+
protected function getCurrentPort()
|
126 |
+
{
|
127 |
+
// Check for proxy first
|
128 |
+
$port = $this->getHeader('X_FORWARDED_PORT');
|
129 |
+
if ($port) {
|
130 |
+
return (string)$port;
|
131 |
+
}
|
132 |
+
|
133 |
+
$protocol = (string)$this->getHeader('X_FORWARDED_PROTO');
|
134 |
+
if ($protocol === 'https') {
|
135 |
+
return '443';
|
136 |
+
}
|
137 |
+
|
138 |
+
return (string)$this->getServerVar('SERVER_PORT');
|
139 |
+
}
|
140 |
+
|
141 |
+
/**
|
142 |
+
* Returns the a value from the $_SERVER super global.
|
143 |
+
*
|
144 |
+
* @param string $key
|
145 |
+
*
|
146 |
+
* @return string
|
147 |
+
*/
|
148 |
+
protected function getServerVar($key)
|
149 |
+
{
|
150 |
+
return isset($_SERVER[$key]) ? $_SERVER[$key] : '';
|
151 |
+
}
|
152 |
+
|
153 |
+
/**
|
154 |
+
* Gets a value from the HTTP request headers.
|
155 |
+
*
|
156 |
+
* @param string $key
|
157 |
+
*
|
158 |
+
* @return string
|
159 |
+
*/
|
160 |
+
protected function getHeader($key)
|
161 |
+
{
|
162 |
+
return $this->getServerVar('HTTP_' . $key);
|
163 |
+
}
|
164 |
+
|
165 |
+
/**
|
166 |
+
* Checks if the value in X_FORWARDED_HOST is a valid hostname
|
167 |
+
* Could prevent unintended redirections
|
168 |
+
*
|
169 |
+
* @param string $header
|
170 |
+
*
|
171 |
+
* @return boolean
|
172 |
+
*/
|
173 |
+
protected function isValidForwardedHost($header)
|
174 |
+
{
|
175 |
+
$elements = explode(',', $header);
|
176 |
+
$host = $elements[count($elements) - 1];
|
177 |
+
|
178 |
+
return preg_match("/^([a-z\d](-*[a-z\d])*)(\.([a-z\d](-*[a-z\d])*))*$/i", $host) //valid chars check
|
179 |
+
&& 0 < strlen($host) && strlen($host) < 254 //overall length check
|
180 |
+
&& preg_match("/^[^\.]{1,63}(\.[^\.]{1,63})*$/", $host); //length of each label
|
181 |
+
}
|
182 |
+
}
|
Facebook/Url/FacebookUrlManipulator.php
ADDED
@@ -0,0 +1,167 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Copyright 2017 Facebook, Inc.
|
4 |
+
*
|
5 |
+
* You are hereby granted a non-exclusive, worldwide, royalty-free license to
|
6 |
+
* use, copy, modify, and distribute this software in source code or binary
|
7 |
+
* form for use in connection with the web services and APIs provided by
|
8 |
+
* Facebook.
|
9 |
+
*
|
10 |
+
* As with any software that integrates with the Facebook platform, your use
|
11 |
+
* of this software is subject to the Facebook Developer Principles and
|
12 |
+
* Policies [http://developers.facebook.com/policy/]. This copyright notice
|
13 |
+
* shall be included in all copies or substantial portions of the software.
|
14 |
+
*
|
15 |
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16 |
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17 |
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
18 |
+
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19 |
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
20 |
+
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
21 |
+
* DEALINGS IN THE SOFTWARE.
|
22 |
+
*
|
23 |
+
*/
|
24 |
+
namespace Facebook\Url;
|
25 |
+
|
26 |
+
/**
|
27 |
+
* Class FacebookUrlManipulator
|
28 |
+
*
|
29 |
+
* @package Facebook
|
30 |
+
*/
|
31 |
+
class FacebookUrlManipulator
|
32 |
+
{
|
33 |
+
/**
|
34 |
+
* Remove params from a URL.
|
35 |
+
*
|
36 |
+
* @param string $url The URL to filter.
|
37 |
+
* @param array $paramsToFilter The params to filter from the URL.
|
38 |
+
*
|
39 |
+
* @return string The URL with the params removed.
|
40 |
+
*/
|
41 |
+
public static function removeParamsFromUrl($url, array $paramsToFilter)
|
42 |
+
{
|
43 |
+
$parts = parse_url($url);
|
44 |
+
|
45 |
+
$query = '';
|
46 |
+
if (isset($parts['query'])) {
|
47 |
+
$params = [];
|
48 |
+
parse_str($parts['query'], $params);
|
49 |
+
|
50 |
+
// Remove query params
|
51 |
+
foreach ($paramsToFilter as $paramName) {
|
52 |
+
unset($params[$paramName]);
|
53 |
+
}
|
54 |
+
|
55 |
+
if (count($params) > 0) {
|
56 |
+
$query = '?' . http_build_query($params, null, '&');
|
57 |
+
}
|
58 |
+
}
|
59 |
+
|
60 |
+
$scheme = isset($parts['scheme']) ? $parts['scheme'] . '://' : '';
|
61 |
+
$host = isset($parts['host']) ? $parts['host'] : '';
|
62 |
+
$port = isset($parts['port']) ? ':' . $parts['port'] : '';
|
63 |
+
$path = isset($parts['path']) ? $parts['path'] : '';
|
64 |
+
$fragment = isset($parts['fragment']) ? '#' . $parts['fragment'] : '';
|
65 |
+
|
66 |
+
return $scheme . $host . $port . $path . $query . $fragment;
|
67 |
+
}
|
68 |
+
|
69 |
+
/**
|
70 |
+
* Gracefully appends params to the URL.
|
71 |
+
*
|
72 |
+
* @param string $url The URL that will receive the params.
|
73 |
+
* @param array $newParams The params to append to the URL.
|
74 |
+
*
|
75 |
+
* @return string
|
76 |
+
*/
|
77 |
+
public static function appendParamsToUrl($url, array $newParams = [])
|
78 |
+
{
|
79 |
+
if (empty($newParams)) {
|
80 |
+
return $url;
|
81 |
+
}
|
82 |
+
|
83 |
+
if (strpos($url, '?') === false) {
|
84 |
+
return $url . '?' . http_build_query($newParams, null, '&');
|
85 |
+
}
|
86 |
+
|
87 |
+
list($path, $query) = explode('?', $url, 2);
|
88 |
+
$existingParams = [];
|
89 |
+
parse_str($query, $existingParams);
|
90 |
+
|
91 |
+
// Favor params from the original URL over $newParams
|
92 |
+
$newParams = array_merge($newParams, $existingParams);
|
93 |
+
|
94 |
+
// Sort for a predicable order
|
95 |
+
ksort($newParams);
|
96 |
+
|
97 |
+
return $path . '?' . http_build_query($newParams, null, '&');
|
98 |
+
}
|
99 |
+
|
100 |
+
/**
|
101 |
+
* Returns the params from a URL in the form of an array.
|
102 |
+
*
|
103 |
+
* @param string $url The URL to parse the params from.
|
104 |
+
*
|
105 |
+
* @return array
|
106 |
+
*/
|
107 |
+
public static function getParamsAsArray($url)
|
108 |
+
{
|
109 |
+
$query = parse_url($url, PHP_URL_QUERY);
|
110 |
+
if (!$query) {
|
111 |
+
return [];
|
112 |
+
}
|
113 |
+
$params = [];
|
114 |
+
parse_str($query, $params);
|
115 |
+
|
116 |
+
return $params;
|
117 |
+
}
|
118 |
+
|
119 |
+
/**
|
120 |
+
* Adds the params of the first URL to the second URL.
|
121 |
+
*
|
122 |
+
* Any params that already exist in the second URL will go untouched.
|
123 |
+
*
|
124 |
+
* @param string $urlToStealFrom The URL harvest the params from.
|
125 |
+
* @param string $urlToAddTo The URL that will receive the new params.
|
126 |
+
*
|
127 |
+
* @return string The $urlToAddTo with any new params from $urlToStealFrom.
|
128 |
+
*/
|
129 |
+
public static function mergeUrlParams($urlToStealFrom, $urlToAddTo)
|
130 |
+
{
|
131 |
+
$newParams = static::getParamsAsArray($urlToStealFrom);
|
132 |
+
// Nothing new to add, return as-is
|
133 |
+
if (!$newParams) {
|
134 |
+
return $urlToAddTo;
|
135 |
+
}
|
136 |
+
|
137 |
+
return static::appendParamsToUrl($urlToAddTo, $newParams);
|
138 |
+
}
|
139 |
+
|
140 |
+
/**
|
141 |
+
* Check for a "/" prefix and prepend it if not exists.
|
142 |
+
*
|
143 |
+
* @param string|null $string
|
144 |
+
*
|
145 |
+
* @return string|null
|
146 |
+
*/
|
147 |
+
public static function forceSlashPrefix($string)
|
148 |
+
{
|
149 |
+
if (!$string) {
|
150 |
+
return $string;
|
151 |
+
}
|
152 |
+
|
153 |
+
return strpos($string, '/') === 0 ? $string : '/' . $string;
|
154 |
+
}
|
155 |
+
|
156 |
+
/**
|
157 |
+
* Trims off the hostname and Graph version from a URL.
|
158 |
+
*
|
159 |
+
* @param string $urlToTrim The URL the needs the surgery.
|
160 |
+
*
|
161 |
+
* @return string The $urlToTrim with the hostname and Graph version removed.
|
162 |
+
*/
|
163 |
+
public static function baseGraphUrlEndpoint($urlToTrim)
|
164 |
+
{
|
165 |
+
return '/' . preg_replace('/^https:\/\/.+\.facebook\.com(\/v.+?)?\//', '', $urlToTrim);
|
166 |
+
}
|
167 |
+
}
|
Facebook/Url/UrlDetectionInterface.php
ADDED
@@ -0,0 +1,39 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Copyright 2017 Facebook, Inc.
|
4 |
+
*
|
5 |
+
* You are hereby granted a non-exclusive, worldwide, royalty-free license to
|
6 |
+
* use, copy, modify, and distribute this software in source code or binary
|
7 |
+
* form for use in connection with the web services and APIs provided by
|
8 |
+
* Facebook.
|
9 |
+
*
|
10 |
+
* As with any software that integrates with the Facebook platform, your use
|
11 |
+
* of this software is subject to the Facebook Developer Principles and
|
12 |
+
* Policies [http://developers.facebook.com/policy/]. This copyright notice
|
13 |
+
* shall be included in all copies or substantial portions of the software.
|
14 |
+
*
|
15 |
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16 |
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17 |
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
18 |
+
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19 |
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
20 |
+
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
21 |
+
* DEALINGS IN THE SOFTWARE.
|
22 |
+
*
|
23 |
+
*/
|
24 |
+
namespace Facebook\Url;
|
25 |
+
|
26 |
+
/**
|
27 |
+
* Interface UrlDetectionInterface
|
28 |
+
*
|
29 |
+
* @package Facebook
|
30 |
+
*/
|
31 |
+
interface UrlDetectionInterface
|
32 |
+
{
|
33 |
+
/**
|
34 |
+
* Get the currently active URL.
|
35 |
+
*
|
36 |
+
* @return string
|
37 |
+
*/
|
38 |
+
public function getCurrentUrl();
|
39 |
+
}
|
Facebook/autoload.php
ADDED
@@ -0,0 +1,81 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Copyright 2017 Facebook, Inc.
|
4 |
+
*
|
5 |
+
* You are hereby granted a non-exclusive, worldwide, royalty-free license to
|
6 |
+
* use, copy, modify, and distribute this software in source code or binary
|
7 |
+
* form for use in connection with the web services and APIs provided by
|
8 |
+
* Facebook.
|
9 |
+
*
|
10 |
+
* As with any software that integrates with the Facebook platform, your use
|
11 |
+
* of this software is subject to the Facebook Developer Principles and
|
12 |
+
* Policies [http://developers.facebook.com/policy/]. This copyright notice
|
13 |
+
* shall be included in all copies or substantial portions of the software.
|
14 |
+
*
|
15 |
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16 |
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17 |
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
18 |
+
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19 |
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
20 |
+
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
21 |
+
* DEALINGS IN THE SOFTWARE.
|
22 |
+
*
|
23 |
+
*/
|
24 |
+
|
25 |
+
/**
|
26 |
+
* You only need this file if you are not using composer.
|
27 |
+
* Why are you not using composer?
|
28 |
+
* https://getcomposer.org/
|
29 |
+
*/
|
30 |
+
|
31 |
+
if (version_compare(PHP_VERSION, '5.4.0', '<')) {
|
32 |
+
throw new Exception('The Facebook SDK requires PHP version 5.4 or higher.');
|
33 |
+
}
|
34 |
+
|
35 |
+
require_once __DIR__ . '/polyfills.php';
|
36 |
+
|
37 |
+
/**
|
38 |
+
* Register the autoloader for the Facebook SDK classes.
|
39 |
+
*
|
40 |
+
* Based off the official PSR-4 autoloader example found here:
|
41 |
+
* https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-4-autoloader-examples.md
|
42 |
+
*
|
43 |
+
* @param string $class The fully-qualified class name.
|
44 |
+
*
|
45 |
+
* @return void
|
46 |
+
*/
|
47 |
+
spl_autoload_register(function ($class) {
|
48 |
+
// project-specific namespace prefix
|
49 |
+
$prefix = 'Facebook\\';
|
50 |
+
|
51 |
+
// For backwards compatibility
|
52 |
+
$customBaseDir = '';
|
53 |
+
// @todo v6: Remove support for 'FACEBOOK_SDK_V4_SRC_DIR'
|
54 |
+
if (defined('FACEBOOK_SDK_V4_SRC_DIR')) {
|
55 |
+
$customBaseDir = FACEBOOK_SDK_V4_SRC_DIR;
|
56 |
+
} elseif (defined('FACEBOOK_SDK_SRC_DIR')) {
|
57 |
+
$customBaseDir = FACEBOOK_SDK_SRC_DIR;
|
58 |
+
}
|
59 |
+
// base directory for the namespace prefix
|
60 |
+
$baseDir = $customBaseDir ?: __DIR__ . '/';
|
61 |
+
|
62 |
+
// does the class use the namespace prefix?
|
63 |
+
$len = strlen($prefix);
|
64 |
+
if (strncmp($prefix, $class, $len) !== 0) {
|
65 |
+
// no, move to the next registered autoloader
|
66 |
+
return;
|
67 |
+
}
|
68 |
+
|
69 |
+
// get the relative class name
|
70 |
+
$relativeClass = substr($class, $len);
|
71 |
+
|
72 |
+
// replace the namespace prefix with the base directory, replace namespace
|
73 |
+
// separators with directory separators in the relative class name, append
|
74 |
+
// with .php
|
75 |
+
$file = rtrim($baseDir, '/') . '/' . str_replace('\\', '/', $relativeClass) . '.php';
|
76 |
+
|
77 |
+
// if the file exists, require it
|
78 |
+
if (file_exists($file)) {
|
79 |
+
require $file;
|
80 |
+
}
|
81 |
+
});
|
Facebook/polyfills.php
ADDED
@@ -0,0 +1,49 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Copyright 2017 Facebook, Inc.
|
4 |
+
*
|
5 |
+
* You are hereby granted a non-exclusive, worldwide, royalty-free license to
|
6 |
+
* use, copy, modify, and distribute this software in source code or binary
|
7 |
+
* form for use in connection with the web services and APIs provided by
|
8 |
+
* Facebook.
|
9 |
+
*
|
10 |
+
* As with any software that integrates with the Facebook platform, your use
|
11 |
+
* of this software is subject to the Facebook Developer Principles and
|
12 |
+
* Policies [http://developers.facebook.com/policy/]. This copyright notice
|
13 |
+
* shall be included in all copies or substantial portions of the software.
|
14 |
+
*
|
15 |
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16 |
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17 |
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
18 |
+
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19 |
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
20 |
+
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
21 |
+
* DEALINGS IN THE SOFTWARE.
|
22 |
+
*
|
23 |
+
*/
|
24 |
+
|
25 |
+
/**
|
26 |
+
* @see https://github.com/sarciszewski/php-future/blob/master/src/Security.php#L37-L51
|
27 |
+
*/
|
28 |
+
if (!function_exists('hash_equals')) {
|
29 |
+
function hash_equals($knownString, $userString)
|
30 |
+
{
|
31 |
+
if (function_exists('mb_strlen')) {
|
32 |
+
$kLen = mb_strlen($knownString, '8bit');
|
33 |
+
$uLen = mb_strlen($userString, '8bit');
|
34 |
+
} else {
|
35 |
+
$kLen = strlen($knownString);
|
36 |
+
$uLen = strlen($userString);
|
37 |
+
}
|
38 |
+
if ($kLen !== $uLen) {
|
39 |
+
return false;
|
40 |
+
}
|
41 |
+
$result = 0;
|
42 |
+
for ($i = 0; $i < $kLen; $i++) {
|
43 |
+
$result |= (ord($knownString[$i]) ^ ord($userString[$i]));
|
44 |
+
}
|
45 |
+
|
46 |
+
// They are only identical strings if $result is exactly 0...
|
47 |
+
return 0 === $result;
|
48 |
+
}
|
49 |
+
}
|
nextend-facebook-connect.php
CHANGED
@@ -2,10 +2,10 @@
|
|
2 |
|
3 |
/*
|
4 |
Plugin Name: Nextend Facebook Connect
|
5 |
-
Plugin URI:
|
6 |
Description: This plugins helps you create Facebook login and register buttons. The login and register process only takes one click.
|
7 |
-
Version:
|
8 |
-
Author:
|
9 |
License: GPL2
|
10 |
*/
|
11 |
|
@@ -29,17 +29,17 @@ define('NEW_FB_LOGIN', 1);
|
|
29 |
if (!defined('NEW_FB_LOGIN_PLUGIN_BASENAME')) define('NEW_FB_LOGIN_PLUGIN_BASENAME', plugin_basename(__FILE__));
|
30 |
$new_fb_settings = maybe_unserialize(get_option('nextend_fb_connect'));
|
31 |
|
32 |
-
if(!function_exists('nextend_uniqid')){
|
33 |
-
function nextend_uniqid(){
|
34 |
-
if(isset($_COOKIE['nextend_uniqid'])){
|
35 |
-
if(get_site_transient('n_'
|
36 |
return $_COOKIE['nextend_uniqid'];
|
37 |
}
|
38 |
}
|
39 |
$_COOKIE['nextend_uniqid'] = uniqid('nextend', true);
|
40 |
-
setcookie('nextend_uniqid', $_COOKIE['nextend_uniqid'], time() + 3600, '/');
|
41 |
-
set_site_transient('n_'
|
42 |
-
|
43 |
return $_COOKIE['nextend_uniqid'];
|
44 |
}
|
45 |
}
|
@@ -50,14 +50,15 @@ Loading style for buttons
|
|
50 |
|
51 |
function nextend_fb_connect_stylesheet() {
|
52 |
|
53 |
-
|
54 |
-
|
55 |
}
|
|
|
56 |
if (!isset($new_fb_settings['fb_load_style'])) $new_fb_settings['fb_load_style'] = 1;
|
57 |
if ($new_fb_settings['fb_load_style']) {
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
}
|
62 |
|
63 |
/*
|
@@ -66,17 +67,18 @@ Creating the required table on installation
|
|
66 |
|
67 |
function nextend_fb_connect_install() {
|
68 |
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
`ID` int(11) NOT NULL,
|
73 |
`type` varchar(20) NOT NULL,
|
74 |
`identifier` varchar(100) NOT NULL,
|
75 |
KEY `ID` (`ID`,`type`)
|
76 |
);";
|
77 |
-
|
78 |
-
|
79 |
}
|
|
|
80 |
register_activation_hook(__FILE__, 'nextend_fb_connect_install');
|
81 |
|
82 |
/*
|
@@ -85,11 +87,12 @@ Adding query vars for the WP parser
|
|
85 |
|
86 |
function new_fb_add_query_var() {
|
87 |
|
88 |
-
|
89 |
-
|
90 |
-
|
91 |
-
|
92 |
}
|
|
|
93 |
add_filter('init', 'new_fb_add_query_var');
|
94 |
|
95 |
/* -----------------------------------------------------------------------------
|
@@ -102,11 +105,12 @@ Compatibility for older versions
|
|
102 |
|
103 |
function new_fb_login_compat() {
|
104 |
|
105 |
-
|
106 |
-
|
107 |
-
|
108 |
-
|
109 |
}
|
|
|
110 |
add_action('parse_request', 'new_fb_login_compat');
|
111 |
|
112 |
/*
|
@@ -115,171 +119,215 @@ For login page
|
|
115 |
|
116 |
function new_fb_login() {
|
117 |
|
118 |
-
|
119 |
-
|
120 |
-
|
121 |
}
|
|
|
122 |
add_action('login_init', 'new_fb_login');
|
123 |
|
124 |
function new_fb_login_action() {
|
125 |
|
126 |
-
|
127 |
-
|
128 |
-
|
129 |
-
|
130 |
-
|
131 |
WHERE ID = %d
|
132 |
AND type = \'fb\'', $user_info->ID));
|
133 |
-
|
|
|
|
|
134 |
}
|
135 |
-
new_fb_redirect();
|
136 |
-
}
|
137 |
-
require_once (dirname(__FILE__) . '/sdk/init.php');
|
138 |
-
$user = $facebook->getUser();
|
139 |
|
140 |
-
|
141 |
-
|
142 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
143 |
|
144 |
-
|
145 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
146 |
|
147 |
-
|
148 |
-
|
149 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
150 |
SELECT ID FROM ' . $wpdb->prefix . 'social_users WHERE type = "fb" AND identifier = "%d"
|
151 |
', $user_profile['id']));
|
152 |
-
|
153 |
-
|
154 |
DELETE FROM ' . $wpdb->prefix . 'social_users WHERE ID = "%d"
|
155 |
', $ID));
|
156 |
-
|
157 |
-
|
158 |
-
|
159 |
-
|
160 |
-
|
161 |
-
|
162 |
-
|
163 |
-
|
164 |
-
|
165 |
-
|
166 |
-
|
167 |
-
|
168 |
-
|
169 |
-
|
170 |
-
|
171 |
-
|
172 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
173 |
}
|
174 |
-
$
|
175 |
-
|
176 |
-
|
177 |
-
|
178 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
179 |
}
|
180 |
-
|
181 |
-
|
182 |
-
|
183 |
-
|
184 |
-
|
185 |
-
|
186 |
-
|
187 |
-
|
188 |
-
|
189 |
-
|
190 |
-
|
191 |
-
|
192 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
193 |
} else {
|
194 |
-
|
|
|
195 |
}
|
196 |
-
}
|
197 |
-
if ($ID) {
|
198 |
-
$wpdb->insert($wpdb->prefix . 'social_users', array(
|
199 |
-
'ID' => $ID,
|
200 |
-
'type' => 'fb',
|
201 |
-
'identifier' => $user_profile['id']
|
202 |
-
) , array(
|
203 |
-
'%d',
|
204 |
-
'%s',
|
205 |
-
'%s'
|
206 |
-
));
|
207 |
-
}
|
208 |
-
if (isset($new_fb_settings['fb_redirect_reg']) && $new_fb_settings['fb_redirect_reg'] != '' && $new_fb_settings['fb_redirect_reg'] != 'auto') {
|
209 |
-
set_site_transient( nextend_uniqid().'_fb_r', $new_fb_settings['fb_redirect_reg'], 3600);
|
210 |
-
}
|
211 |
}
|
212 |
-
|
213 |
-
|
214 |
-
|
215 |
-
|
216 |
-
|
217 |
-
|
218 |
-
|
219 |
-
|
220 |
-
|
221 |
-
update_user_meta($ID, 'fb_profile_picture', 'https://graph.facebook.com/' . $user_profile['id'] . '/picture?type=large');
|
222 |
-
do_action('wp_login', $user_info->user_login, $user_info);
|
223 |
-
update_user_meta($ID, 'fb_user_access_token', $facebook->getAccessToken());
|
224 |
-
do_action('nextend_fb_user_logged_in', $ID, $user_profile, $facebook);
|
225 |
}
|
226 |
-
|
227 |
-
|
228 |
-
|
229 |
-
|
230 |
-
|
231 |
-
|
232 |
-
} elseif ($ID === NULL) { // Let's connect the accout to the current user!
|
233 |
-
|
234 |
-
$wpdb->insert($wpdb->prefix . 'social_users', array(
|
235 |
-
'ID' => $current_user->ID,
|
236 |
-
'type' => 'fb',
|
237 |
-
'identifier' => $user_profile['id']
|
238 |
-
) , array(
|
239 |
-
'%d',
|
240 |
-
'%s',
|
241 |
-
'%s'
|
242 |
-
));
|
243 |
-
update_user_meta($current_user->ID, 'fb_user_access_token', $facebook->getAccessToken());
|
244 |
-
do_action('nextend_fb_user_account_linked', $ID, $user_profile, $facebook);
|
245 |
-
$user_info = wp_get_current_user();
|
246 |
-
set_site_transient($user_info->ID.'_new_fb_admin_notice',__('Your Facebook profile is successfully linked with your account. Now you can sign in with Facebook easily.', 'nextend-facebook-connect'), 3600);
|
247 |
-
} else {
|
248 |
-
$user_info = wp_get_current_user();
|
249 |
-
set_site_transient($user_info->ID.'_new_fb_admin_notice',__('This Facebook profile is already linked with other account. Linking process failed!', 'nextend-facebook-connect'), 3600);
|
250 |
}
|
251 |
-
}
|
252 |
-
new_fb_redirect();
|
253 |
-
}
|
254 |
-
catch(FacebookApiException $e) {
|
255 |
-
echo 'Caught exception: ', $e->getMessage() , "\n";
|
256 |
|
257 |
-
|
258 |
-
|
259 |
}
|
260 |
-
exit;
|
261 |
-
} else if(!isset($_GET['code'])){
|
262 |
-
$scope = apply_filters('nextend_fb_scope', 'email');
|
263 |
-
$loginUrl = $facebook->getLoginUrl(array(
|
264 |
-
'scope' => $scope
|
265 |
-
));
|
266 |
-
if (isset($new_fb_settings['fb_redirect']) && $new_fb_settings['fb_redirect'] != '' && $new_fb_settings['fb_redirect'] != 'auto') {
|
267 |
-
$_GET['redirect'] = $new_fb_settings['fb_redirect'];
|
268 |
-
}
|
269 |
-
if (isset($_GET['redirect'])) {
|
270 |
-
set_site_transient( nextend_uniqid().'_fb_r', $_GET['redirect'], 3600);
|
271 |
-
}
|
272 |
-
$redirect = get_site_transient( nextend_uniqid().'_fb_r');
|
273 |
-
if ($redirect == '' || $redirect == new_fb_login_url()) {
|
274 |
-
set_site_transient( nextend_uniqid().'_fb_r', site_url(), 3600);
|
275 |
-
}
|
276 |
-
|
277 |
-
header('Location: ' . $loginUrl);
|
278 |
-
exit;
|
279 |
-
}else{
|
280 |
-
echo "Login error!";
|
281 |
-
exit;
|
282 |
-
}
|
283 |
}
|
284 |
|
285 |
/*
|
@@ -288,18 +336,19 @@ Is the current user connected the Facebook profile?
|
|
288 |
|
289 |
function new_fb_is_user_connected() {
|
290 |
|
291 |
-
|
292 |
-
|
293 |
-
|
294 |
SELECT identifier FROM ' . $wpdb->prefix . 'social_users WHERE type = "fb" AND ID = "%d"
|
295 |
', $current_user->ID));
|
296 |
-
|
297 |
-
|
|
|
298 |
}
|
299 |
|
300 |
function new_fb_get_user_access_token($id) {
|
301 |
|
302 |
-
|
303 |
}
|
304 |
|
305 |
/*
|
@@ -308,65 +357,67 @@ Connect Field in the Profile page
|
|
308 |
|
309 |
function new_add_fb_connect_field() {
|
310 |
|
311 |
-
|
312 |
|
313 |
-
|
314 |
-
|
315 |
-
?>
|
316 |
-
|
317 |
-
|
318 |
-
|
319 |
-
|
320 |
-
?>
|
321 |
-
|
322 |
<tbody>
|
323 |
<tr>
|
324 |
<th>
|
325 |
</th>
|
326 |
<td>
|
327 |
<?php
|
328 |
-
|
329 |
-
|
330 |
-
|
331 |
-
|
332 |
-
|
333 |
-
?>
|
334 |
</td>
|
335 |
</tr>
|
336 |
</tbody>
|
337 |
</table>
|
338 |
-
|
339 |
}
|
|
|
340 |
add_action('profile_personal_options', 'new_add_fb_connect_field');
|
341 |
|
342 |
function new_add_fb_login_form() {
|
343 |
|
344 |
-
?>
|
345 |
-
|
346 |
-
if(jQuery.type(has_social_form) === "undefined"){
|
347 |
-
|
348 |
-
|
349 |
}
|
350 |
-
jQuery(document).ready(function(){
|
351 |
-
|
352 |
-
|
353 |
-
|
354 |
-
|
355 |
-
|
356 |
-
|
357 |
-
|
358 |
-
|
359 |
-
|
360 |
-
|
361 |
-
|
362 |
-
|
363 |
-
|
364 |
-
|
365 |
-
|
366 |
});
|
367 |
</script>
|
368 |
-
|
369 |
}
|
|
|
370 |
add_action('login_form', 'new_add_fb_login_form');
|
371 |
add_action('register_form', 'new_add_fb_login_form');
|
372 |
add_action('bp_sidebar_login_form', 'new_add_fb_login_form');
|
@@ -374,52 +425,56 @@ add_filter('get_avatar', 'new_fb_insert_avatar', 5, 5);
|
|
374 |
|
375 |
function new_fb_insert_avatar($avatar = '', $id_or_email, $size = 96, $default = '', $alt = false) {
|
376 |
|
377 |
-
|
378 |
-
|
379 |
-
|
380 |
-
|
381 |
-
|
382 |
-
|
383 |
-
|
384 |
-
|
385 |
-
|
386 |
-
|
387 |
-
|
388 |
-
|
389 |
-
|
390 |
-
|
|
|
391 |
}
|
392 |
|
393 |
add_filter('bp_core_fetch_avatar', 'new_fb_bp_insert_avatar', 3, 5);
|
394 |
|
395 |
function new_fb_bp_insert_avatar($avatar = '', $params, $id) {
|
396 |
-
if(!is_numeric($id) || strpos($avatar, 'gravatar') === false) return $avatar;
|
397 |
$pic = get_user_meta($id, 'fb_profile_picture', true);
|
398 |
if (!$pic || $pic == '') return $avatar;
|
399 |
$avatar = preg_replace('/src=("|\').*?("|\')/i', 'src=\'' . $pic . '\'', $avatar);
|
|
|
400 |
return $avatar;
|
401 |
}
|
402 |
|
403 |
/*
|
404 |
Options Page
|
405 |
*/
|
406 |
-
require_once
|
407 |
if (class_exists('NextendFBSettings')) {
|
408 |
-
|
409 |
-
|
410 |
-
|
411 |
-
|
412 |
-
|
413 |
-
|
|
|
414 |
}
|
415 |
add_filter('plugin_action_links', 'new_fb_plugin_action_links', 10, 2);
|
416 |
|
417 |
function new_fb_plugin_action_links($links, $file) {
|
418 |
|
419 |
-
|
420 |
-
|
421 |
-
|
422 |
-
|
|
|
423 |
}
|
424 |
|
425 |
/* -----------------------------------------------------------------------------
|
@@ -428,78 +483,73 @@ Miscellaneous functions
|
|
428 |
|
429 |
function new_fb_sign_button() {
|
430 |
|
431 |
-
|
432 |
-
|
|
|
433 |
}
|
434 |
|
435 |
function new_fb_link_button() {
|
436 |
|
437 |
-
|
438 |
-
|
|
|
439 |
}
|
440 |
|
441 |
function new_fb_unlink_button() {
|
442 |
|
443 |
-
|
444 |
-
|
|
|
445 |
}
|
446 |
|
447 |
function new_fb_curPageURL() {
|
448 |
-
|
449 |
-
|
450 |
-
if (isset($_SERVER["HTTPS"]) && $_SERVER["HTTPS"] == "on") {
|
451 |
-
$pageURL.= "s";
|
452 |
-
}
|
453 |
-
$pageURL.= "://";
|
454 |
-
if ($_SERVER["SERVER_PORT"] != "80") {
|
455 |
-
$pageURL.= $_SERVER["SERVER_NAME"] . ":" . $_SERVER["SERVER_PORT"] . $_SERVER["REQUEST_URI"];
|
456 |
-
} else {
|
457 |
-
$pageURL.= $_SERVER["SERVER_NAME"] . $_SERVER["REQUEST_URI"];
|
458 |
-
}
|
459 |
-
return $pageURL;
|
460 |
}
|
461 |
|
462 |
function new_fb_login_url() {
|
463 |
|
464 |
-
|
465 |
}
|
466 |
|
467 |
function new_fb_redirect() {
|
468 |
-
|
469 |
-
$redirect = get_site_transient( nextend_uniqid().'_fb_r');
|
470 |
|
471 |
-
|
472 |
-
|
473 |
-
|
474 |
-
|
475 |
-
|
|
|
|
|
|
|
476 |
}
|
477 |
-
|
478 |
-
|
479 |
-
|
480 |
-
|
481 |
-
|
482 |
-
exit;
|
483 |
}
|
484 |
|
485 |
function new_fb_edit_profile_redirect() {
|
486 |
|
487 |
-
|
488 |
-
|
489 |
-
|
490 |
-
|
491 |
-
|
492 |
-
|
|
|
|
|
493 |
}
|
494 |
-
exit;
|
495 |
-
}
|
496 |
}
|
|
|
497 |
add_action('parse_request', 'new_fb_edit_profile_redirect');
|
498 |
|
499 |
function new_fb_jquery() {
|
500 |
|
501 |
-
|
502 |
}
|
|
|
503 |
add_action('login_form_login', 'new_fb_jquery');
|
504 |
add_action('login_form_register', 'new_fb_jquery');
|
505 |
|
@@ -508,14 +558,14 @@ Session notices used in the profile settings
|
|
508 |
*/
|
509 |
|
510 |
function new_fb_admin_notice() {
|
511 |
-
|
512 |
-
|
513 |
-
|
514 |
-
|
515 |
<p>' . $notice . '</p>
|
516 |
</div>';
|
517 |
-
|
518 |
-
|
519 |
}
|
520 |
|
521 |
add_action('admin_notices', 'new_fb_admin_notice');
|
2 |
|
3 |
/*
|
4 |
Plugin Name: Nextend Facebook Connect
|
5 |
+
Plugin URI: https://nextendweb.com/
|
6 |
Description: This plugins helps you create Facebook login and register buttons. The login and register process only takes one click.
|
7 |
+
Version: 2.0.2
|
8 |
+
Author: Nextendweb
|
9 |
License: GPL2
|
10 |
*/
|
11 |
|
29 |
if (!defined('NEW_FB_LOGIN_PLUGIN_BASENAME')) define('NEW_FB_LOGIN_PLUGIN_BASENAME', plugin_basename(__FILE__));
|
30 |
$new_fb_settings = maybe_unserialize(get_option('nextend_fb_connect'));
|
31 |
|
32 |
+
if (!function_exists('nextend_uniqid')) {
|
33 |
+
function nextend_uniqid() {
|
34 |
+
if (isset($_COOKIE['nextend_uniqid'])) {
|
35 |
+
if (get_site_transient('n_' . $_COOKIE['nextend_uniqid']) !== false) {
|
36 |
return $_COOKIE['nextend_uniqid'];
|
37 |
}
|
38 |
}
|
39 |
$_COOKIE['nextend_uniqid'] = uniqid('nextend', true);
|
40 |
+
setcookie('nextend_uniqid', $_COOKIE['nextend_uniqid'], time() + 3600, '/', '', false, true);
|
41 |
+
set_site_transient('n_' . $_COOKIE['nextend_uniqid'], 1, 3600);
|
42 |
+
|
43 |
return $_COOKIE['nextend_uniqid'];
|
44 |
}
|
45 |
}
|
50 |
|
51 |
function nextend_fb_connect_stylesheet() {
|
52 |
|
53 |
+
wp_register_style('nextend_fb_connect_stylesheet', plugins_url('buttons/facebook-btn.css', __FILE__));
|
54 |
+
wp_enqueue_style('nextend_fb_connect_stylesheet');
|
55 |
}
|
56 |
+
|
57 |
if (!isset($new_fb_settings['fb_load_style'])) $new_fb_settings['fb_load_style'] = 1;
|
58 |
if ($new_fb_settings['fb_load_style']) {
|
59 |
+
add_action('wp_enqueue_scripts', 'nextend_fb_connect_stylesheet');
|
60 |
+
add_action('login_enqueue_scripts', 'nextend_fb_connect_stylesheet');
|
61 |
+
add_action('admin_enqueue_scripts', 'nextend_fb_connect_stylesheet');
|
62 |
}
|
63 |
|
64 |
/*
|
67 |
|
68 |
function nextend_fb_connect_install() {
|
69 |
|
70 |
+
global $wpdb;
|
71 |
+
$table_name = $wpdb->prefix . "social_users";
|
72 |
+
$sql = "CREATE TABLE $table_name (
|
73 |
`ID` int(11) NOT NULL,
|
74 |
`type` varchar(20) NOT NULL,
|
75 |
`identifier` varchar(100) NOT NULL,
|
76 |
KEY `ID` (`ID`,`type`)
|
77 |
);";
|
78 |
+
require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
|
79 |
+
dbDelta($sql);
|
80 |
}
|
81 |
+
|
82 |
register_activation_hook(__FILE__, 'nextend_fb_connect_install');
|
83 |
|
84 |
/*
|
87 |
|
88 |
function new_fb_add_query_var() {
|
89 |
|
90 |
+
global $wp;
|
91 |
+
$wp->add_query_var('editProfileRedirect');
|
92 |
+
$wp->add_query_var('loginFacebook');
|
93 |
+
$wp->add_query_var('loginFacebookdoauth');
|
94 |
}
|
95 |
+
|
96 |
add_filter('init', 'new_fb_add_query_var');
|
97 |
|
98 |
/* -----------------------------------------------------------------------------
|
105 |
|
106 |
function new_fb_login_compat() {
|
107 |
|
108 |
+
global $wp;
|
109 |
+
if ($wp->request == 'loginFacebook' || isset($wp->query_vars['loginFacebook'])) {
|
110 |
+
new_fb_login_action();
|
111 |
+
}
|
112 |
}
|
113 |
+
|
114 |
add_action('parse_request', 'new_fb_login_compat');
|
115 |
|
116 |
/*
|
119 |
|
120 |
function new_fb_login() {
|
121 |
|
122 |
+
if (isset($_REQUEST['loginFacebook']) && $_REQUEST['loginFacebook'] == '1') {
|
123 |
+
new_fb_login_action();
|
124 |
+
}
|
125 |
}
|
126 |
+
|
127 |
add_action('login_init', 'new_fb_login');
|
128 |
|
129 |
function new_fb_login_action() {
|
130 |
|
131 |
+
global $wp, $wpdb, $new_fb_settings;
|
132 |
+
if (isset($_GET['action']) && $_GET['action'] == 'unlink') {
|
133 |
+
$user_info = wp_get_current_user();
|
134 |
+
if ($user_info->ID) {
|
135 |
+
$wpdb->query($wpdb->prepare('DELETE FROM ' . $wpdb->prefix . 'social_users
|
136 |
WHERE ID = %d
|
137 |
AND type = \'fb\'', $user_info->ID));
|
138 |
+
set_site_transient($user_info->ID . '_new_fb_admin_notice', __('Your Facebook profile is successfully unlinked from your account.', 'nextend-facebook-connect'), 3600);
|
139 |
+
}
|
140 |
+
new_fb_redirect();
|
141 |
}
|
|
|
|
|
|
|
|
|
142 |
|
143 |
+
if (is_user_logged_in() && new_fb_is_user_connected()) {
|
144 |
+
new_fb_redirect();
|
145 |
+
exit;
|
146 |
+
}
|
147 |
+
|
148 |
+
if (!class_exists('Facebook')) {
|
149 |
+
require(dirname(__FILE__) . '/Facebook/autoload.php');
|
150 |
+
}
|
151 |
+
|
152 |
+
$settings = maybe_unserialize(get_option('nextend_fb_connect'));
|
153 |
+
|
154 |
+
if (defined('NEXTEND_FB_APP_ID')) $settings['fb_appid'] = NEXTEND_FB_APP_ID;
|
155 |
+
if (defined('NEXTEND_FB_APP_SECRET')) $settings['fb_secret'] = NEXTEND_FB_APP_SECRET;
|
156 |
|
157 |
+
$fb = new Facebook\Facebook(array(
|
158 |
+
'app_id' => $settings['fb_appid'],
|
159 |
+
'app_secret' => $settings['fb_secret'],
|
160 |
+
'persistent_data_handler' => new Facebook\PersistentData\FacebookWordPressPersistentDataHandler(nextend_uniqid())
|
161 |
+
));
|
162 |
+
|
163 |
+
if (isset($_REQUEST['code'])) {
|
164 |
+
$helper = $fb->getRedirectLoginHelper();
|
165 |
+
try {
|
166 |
+
$accessToken = $helper->getAccessToken(new_fb_login_url());
|
167 |
+
} catch (Facebook\Exceptions\FacebookResponseException $e) {
|
168 |
+
// When Graph returns an error
|
169 |
+
echo 'Graph returned an error: ' . $e->getMessage();
|
170 |
+
exit;
|
171 |
+
} catch (Facebook\Exceptions\FacebookSDKException $e) {
|
172 |
+
// When validation fails or other local issues
|
173 |
+
echo 'Facebook SDK returned an error: ' . $e->getMessage();
|
174 |
+
exit;
|
175 |
+
}
|
176 |
|
177 |
+
if (!isset($accessToken)) {
|
178 |
+
if ($helper->getError()) {
|
179 |
+
header('HTTP/1.0 401 Unauthorized');
|
180 |
+
echo "Error: " . $helper->getError() . "\n";
|
181 |
+
echo "Error Code: " . $helper->getErrorCode() . "\n";
|
182 |
+
echo "Error Reason: " . $helper->getErrorReason() . "\n";
|
183 |
+
echo "Error Description: " . $helper->getErrorDescription() . "\n";
|
184 |
+
} else {
|
185 |
+
header('HTTP/1.0 400 Bad Request');
|
186 |
+
echo 'Bad request';
|
187 |
+
}
|
188 |
+
exit;
|
189 |
+
}
|
190 |
+
|
191 |
+
// The OAuth 2.0 client handler helps us manage access tokens
|
192 |
+
$oAuth2Client = $fb->getOAuth2Client();
|
193 |
+
|
194 |
+
if (!$accessToken->isLongLived()) {
|
195 |
+
// Exchanges a short-lived access token for a long-lived one
|
196 |
+
try {
|
197 |
+
$accessToken = $oAuth2Client->getLongLivedAccessToken($accessToken);
|
198 |
+
} catch (Facebook\Exceptions\FacebookSDKException $e) {
|
199 |
+
echo "<p>Error getting long-lived access token: " . $helper->getMessage() . "</p>\n\n";
|
200 |
+
exit;
|
201 |
+
}
|
202 |
+
}
|
203 |
+
|
204 |
+
$response = $fb->get('/me?fields=id,name,email,first_name,last_name', $accessToken);
|
205 |
+
$user_profile = $response->getGraphUser();
|
206 |
+
|
207 |
+
$ID = $wpdb->get_var($wpdb->prepare('
|
208 |
SELECT ID FROM ' . $wpdb->prefix . 'social_users WHERE type = "fb" AND identifier = "%d"
|
209 |
', $user_profile['id']));
|
210 |
+
if (!get_user_by('id', $ID)) {
|
211 |
+
$wpdb->query($wpdb->prepare('
|
212 |
DELETE FROM ' . $wpdb->prefix . 'social_users WHERE ID = "%d"
|
213 |
', $ID));
|
214 |
+
$ID = null;
|
215 |
+
}
|
216 |
+
if (!is_user_logged_in()) {
|
217 |
+
if ($ID == NULL) { // Register
|
218 |
+
|
219 |
+
if (!isset($user_profile['email'])) $user_profile['email'] = $user_profile['id'] . '@facebook.com';
|
220 |
+
$ID = email_exists($user_profile['email']);
|
221 |
+
if ($ID == false) { // Real register
|
222 |
+
|
223 |
+
require_once(ABSPATH . WPINC . '/registration.php');
|
224 |
+
$random_password = wp_generate_password($length = 12, $include_standard_special_chars = false);
|
225 |
+
if (!isset($new_fb_settings['fb_user_prefix'])) $new_fb_settings['fb_user_prefix'] = 'facebook-';
|
226 |
+
|
227 |
+
$username = strtolower($user_profile['first_name'] . $user_profile['last_name']);
|
228 |
+
$sanitized_user_login = sanitize_user($new_fb_settings['fb_user_prefix'] . $username);
|
229 |
+
if (!validate_username($sanitized_user_login)) {
|
230 |
+
$sanitized_user_login = sanitize_user('facebook' . $user_profile['id']);
|
231 |
+
}
|
232 |
+
$defaul_user_name = $sanitized_user_login;
|
233 |
+
$i = 1;
|
234 |
+
while (username_exists($sanitized_user_login)) {
|
235 |
+
$sanitized_user_login = $defaul_user_name . $i;
|
236 |
+
$i++;
|
237 |
+
}
|
238 |
+
$ID = wp_create_user($sanitized_user_login, $random_password, $user_profile['email']);
|
239 |
+
if (!is_wp_error($ID)) {
|
240 |
+
wp_new_user_notification($ID, $random_password);
|
241 |
+
$user_info = get_userdata($ID);
|
242 |
+
wp_update_user(array(
|
243 |
+
'ID' => $ID,
|
244 |
+
'display_name' => $user_profile['name'],
|
245 |
+
'first_name' => $user_profile['first_name'],
|
246 |
+
'last_name' => $user_profile['last_name']
|
247 |
+
));
|
248 |
+
|
249 |
+
//update_user_meta( $ID, 'new_fb_default_password', $user_info->user_pass);
|
250 |
+
do_action('nextend_fb_user_registered', $ID, $user_profile, $fb);
|
251 |
+
} else {
|
252 |
+
return;
|
253 |
+
}
|
254 |
+
}
|
255 |
+
if ($ID) {
|
256 |
+
$wpdb->insert($wpdb->prefix . 'social_users', array(
|
257 |
+
'ID' => $ID,
|
258 |
+
'type' => 'fb',
|
259 |
+
'identifier' => $user_profile['id']
|
260 |
+
), array(
|
261 |
+
'%d',
|
262 |
+
'%s',
|
263 |
+
'%s'
|
264 |
+
));
|
265 |
+
}
|
266 |
+
if (isset($new_fb_settings['fb_redirect_reg']) && $new_fb_settings['fb_redirect_reg'] != '' && $new_fb_settings['fb_redirect_reg'] != 'auto') {
|
267 |
+
set_site_transient(nextend_uniqid() . '_fb_r', $new_fb_settings['fb_redirect_reg'], 3600);
|
268 |
+
}
|
269 |
}
|
270 |
+
if ($ID) { // Login
|
271 |
+
|
272 |
+
$secure_cookie = is_ssl();
|
273 |
+
$secure_cookie = apply_filters('secure_signon_cookie', $secure_cookie, array());
|
274 |
+
global $auth_secure_cookie; // XXX ugly hack to pass this to wp_authenticate_cookie
|
275 |
+
|
276 |
+
$auth_secure_cookie = $secure_cookie;
|
277 |
+
wp_set_auth_cookie($ID, true, $secure_cookie);
|
278 |
+
$user_info = get_userdata($ID);
|
279 |
+
update_user_meta($ID, 'fb_profile_picture', 'https://graph.facebook.com/' . $user_profile['id'] . '/picture?type=large');
|
280 |
+
do_action('wp_login', $user_info->user_login, $user_info);
|
281 |
+
update_user_meta($ID, 'fb_user_access_token', $accessToken);
|
282 |
+
do_action('nextend_fb_user_logged_in', $ID, $user_profile, $fb);
|
283 |
}
|
284 |
+
} else {
|
285 |
+
$current_user = wp_get_current_user();
|
286 |
+
if ($current_user->ID == $ID) {
|
287 |
+
|
288 |
+
// It was a simple login
|
289 |
+
|
290 |
+
} elseif ($ID === NULL) { // Let's connect the accout to the current user!
|
291 |
+
|
292 |
+
$wpdb->insert($wpdb->prefix . 'social_users', array(
|
293 |
+
'ID' => $current_user->ID,
|
294 |
+
'type' => 'fb',
|
295 |
+
'identifier' => $user_profile['id']
|
296 |
+
), array(
|
297 |
+
'%d',
|
298 |
+
'%s',
|
299 |
+
'%s'
|
300 |
+
));
|
301 |
+
update_user_meta($current_user->ID, 'fb_user_access_token', (string) $accessToken);
|
302 |
+
do_action('nextend_fb_user_account_linked', $ID, $user_profile, $fb);
|
303 |
+
$user_info = wp_get_current_user();
|
304 |
+
set_site_transient($user_info->ID . '_new_fb_admin_notice', __('Your Facebook profile is successfully linked with your account. Now you can sign in with Facebook easily.', 'nextend-facebook-connect'), 3600);
|
305 |
} else {
|
306 |
+
$user_info = wp_get_current_user();
|
307 |
+
set_site_transient($user_info->ID . '_new_fb_admin_notice', __('This Facebook profile is already linked with other account. Linking process failed!', 'nextend-facebook-connect'), 3600);
|
308 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
309 |
}
|
310 |
+
new_fb_redirect();
|
311 |
+
} else {
|
312 |
+
$helper = $fb->getRedirectLoginHelper();
|
313 |
+
|
314 |
+
$permissions = apply_filters('nextend_fb_permissions', array('email'));
|
315 |
+
$loginUrl = $helper->getLoginUrl(new_fb_login_url(), $permissions);
|
316 |
+
|
317 |
+
if (isset($new_fb_settings['fb_redirect']) && $new_fb_settings['fb_redirect'] != '' && $new_fb_settings['fb_redirect'] != 'auto') {
|
318 |
+
$_GET['redirect'] = $new_fb_settings['fb_redirect'];
|
|
|
|
|
|
|
|
|
319 |
}
|
320 |
+
if (isset($_GET['redirect'])) {
|
321 |
+
set_site_transient(nextend_uniqid() . '_fb_r', $_GET['redirect'], 3600);
|
322 |
+
}
|
323 |
+
$redirect = get_site_transient(nextend_uniqid() . '_fb_r');
|
324 |
+
if ($redirect == '' || $redirect == new_fb_login_url()) {
|
325 |
+
set_site_transient(nextend_uniqid() . '_fb_r', site_url(), 3600);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
326 |
}
|
|
|
|
|
|
|
|
|
|
|
327 |
|
328 |
+
header('Location: ' . $loginUrl);
|
329 |
+
exit;
|
330 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
331 |
}
|
332 |
|
333 |
/*
|
336 |
|
337 |
function new_fb_is_user_connected() {
|
338 |
|
339 |
+
global $wpdb;
|
340 |
+
$current_user = wp_get_current_user();
|
341 |
+
$ID = $wpdb->get_var($wpdb->prepare('
|
342 |
SELECT identifier FROM ' . $wpdb->prefix . 'social_users WHERE type = "fb" AND ID = "%d"
|
343 |
', $current_user->ID));
|
344 |
+
if ($ID === NULL) return false;
|
345 |
+
|
346 |
+
return $ID;
|
347 |
}
|
348 |
|
349 |
function new_fb_get_user_access_token($id) {
|
350 |
|
351 |
+
return get_user_meta($id, 'fb_user_access_token', true);
|
352 |
}
|
353 |
|
354 |
/*
|
357 |
|
358 |
function new_add_fb_connect_field() {
|
359 |
|
360 |
+
global $new_is_social_header;
|
361 |
|
362 |
+
//if(new_fb_is_user_connected()) return;
|
363 |
+
if ($new_is_social_header === NULL) {
|
364 |
+
?>
|
365 |
+
<h3>Social connect</h3>
|
366 |
+
<?php
|
367 |
+
$new_is_social_header = true;
|
368 |
+
}
|
369 |
+
?>
|
370 |
+
<table class="form-table">
|
371 |
<tbody>
|
372 |
<tr>
|
373 |
<th>
|
374 |
</th>
|
375 |
<td>
|
376 |
<?php
|
377 |
+
if (new_fb_is_user_connected()) {
|
378 |
+
echo new_fb_unlink_button();
|
379 |
+
} else {
|
380 |
+
echo new_fb_link_button();
|
381 |
+
}
|
382 |
+
?>
|
383 |
</td>
|
384 |
</tr>
|
385 |
</tbody>
|
386 |
</table>
|
387 |
+
<?php
|
388 |
}
|
389 |
+
|
390 |
add_action('profile_personal_options', 'new_add_fb_connect_field');
|
391 |
|
392 |
function new_add_fb_login_form() {
|
393 |
|
394 |
+
?>
|
395 |
+
<script type="text/javascript">
|
396 |
+
if (jQuery.type(has_social_form) === "undefined") {
|
397 |
+
var has_social_form = false;
|
398 |
+
var socialLogins = null;
|
399 |
}
|
400 |
+
jQuery(document).ready(function () {
|
401 |
+
(function ($) {
|
402 |
+
if (!has_social_form) {
|
403 |
+
has_social_form = true;
|
404 |
+
var loginForm = $('#loginform,#registerform,#front-login-form,#setupform');
|
405 |
+
socialLogins = $('<div class="newsociallogins" style="text-align: center;"><div style="clear:both;"></div></div>');
|
406 |
+
if (loginForm.find('input').length > 0)
|
407 |
+
loginForm.prepend("<h3 style='text-align:center;'><?php _e('OR'); ?></h3>");
|
408 |
+
loginForm.prepend(socialLogins);
|
409 |
+
socialLogins = loginForm.find('.newsociallogins');
|
410 |
+
}
|
411 |
+
if (!window.fb_added) {
|
412 |
+
socialLogins.prepend('<?php echo addslashes(preg_replace('/^\s+|\n|\r|\s+$/m', '', new_fb_sign_button())); ?>');
|
413 |
+
window.fb_added = true;
|
414 |
+
}
|
415 |
+
}(jQuery));
|
416 |
});
|
417 |
</script>
|
418 |
+
<?php
|
419 |
}
|
420 |
+
|
421 |
add_action('login_form', 'new_add_fb_login_form');
|
422 |
add_action('register_form', 'new_add_fb_login_form');
|
423 |
add_action('bp_sidebar_login_form', 'new_add_fb_login_form');
|
425 |
|
426 |
function new_fb_insert_avatar($avatar = '', $id_or_email, $size = 96, $default = '', $alt = false) {
|
427 |
|
428 |
+
$id = 0;
|
429 |
+
if (is_numeric($id_or_email)) {
|
430 |
+
$id = $id_or_email;
|
431 |
+
} else if (is_string($id_or_email)) {
|
432 |
+
$u = get_user_by('email', $id_or_email);
|
433 |
+
$id = $u->id;
|
434 |
+
} else if (is_object($id_or_email)) {
|
435 |
+
$id = $id_or_email->user_id;
|
436 |
+
}
|
437 |
+
if ($id == 0) return $avatar;
|
438 |
+
$pic = get_user_meta($id, 'fb_profile_picture', true);
|
439 |
+
if (!$pic || $pic == '') return $avatar;
|
440 |
+
$avatar = preg_replace('/src=("|\').*?("|\')/i', 'src=\'' . $pic . '\'', $avatar);
|
441 |
+
|
442 |
+
return $avatar;
|
443 |
}
|
444 |
|
445 |
add_filter('bp_core_fetch_avatar', 'new_fb_bp_insert_avatar', 3, 5);
|
446 |
|
447 |
function new_fb_bp_insert_avatar($avatar = '', $params, $id) {
|
448 |
+
if (!is_numeric($id) || strpos($avatar, 'gravatar') === false) return $avatar;
|
449 |
$pic = get_user_meta($id, 'fb_profile_picture', true);
|
450 |
if (!$pic || $pic == '') return $avatar;
|
451 |
$avatar = preg_replace('/src=("|\').*?("|\')/i', 'src=\'' . $pic . '\'', $avatar);
|
452 |
+
|
453 |
return $avatar;
|
454 |
}
|
455 |
|
456 |
/*
|
457 |
Options Page
|
458 |
*/
|
459 |
+
require_once(trailingslashit(dirname(__FILE__)) . "nextend-facebook-settings.php");
|
460 |
if (class_exists('NextendFBSettings')) {
|
461 |
+
$nextendfbsettings = new NextendFBSettings();
|
462 |
+
if (isset($nextendfbsettings)) {
|
463 |
+
add_action('admin_menu', array(
|
464 |
+
&$nextendfbsettings,
|
465 |
+
'NextendFB_Menu'
|
466 |
+
), 1);
|
467 |
+
}
|
468 |
}
|
469 |
add_filter('plugin_action_links', 'new_fb_plugin_action_links', 10, 2);
|
470 |
|
471 |
function new_fb_plugin_action_links($links, $file) {
|
472 |
|
473 |
+
if ($file != NEW_FB_LOGIN_PLUGIN_BASENAME) return $links;
|
474 |
+
$settings_link = '<a href="' . esc_url(menu_page_url('nextend-facebook-connect', false)) . '">' . esc_html(__('Settings', 'nextend-facebook-connect')) . '</a>';
|
475 |
+
array_unshift($links, $settings_link);
|
476 |
+
|
477 |
+
return $links;
|
478 |
}
|
479 |
|
480 |
/* -----------------------------------------------------------------------------
|
483 |
|
484 |
function new_fb_sign_button() {
|
485 |
|
486 |
+
global $new_fb_settings;
|
487 |
+
|
488 |
+
return '<a href="' . esc_url(new_fb_login_url() . (isset($_GET['redirect_to']) ? '&redirect=' . $_GET['redirect_to'] : '')) . '" rel="nofollow">' . $new_fb_settings['fb_login_button'] . '</a><br />';
|
489 |
}
|
490 |
|
491 |
function new_fb_link_button() {
|
492 |
|
493 |
+
global $new_fb_settings;
|
494 |
+
|
495 |
+
return '<a href="' . esc_url(new_fb_login_url() . '&redirect=' . new_fb_curPageURL()) . '">' . $new_fb_settings['fb_link_button'] . '</a><br />';
|
496 |
}
|
497 |
|
498 |
function new_fb_unlink_button() {
|
499 |
|
500 |
+
global $new_fb_settings;
|
501 |
+
|
502 |
+
return '<a href="' . esc_url(new_fb_login_url() . '&action=unlink&redirect=' . new_fb_curPageURL()) . '">' . $new_fb_settings['fb_unlink_button'] . '</a><br />';
|
503 |
}
|
504 |
|
505 |
function new_fb_curPageURL() {
|
506 |
+
global $wp;
|
507 |
+
return home_url(add_query_arg(array(),$wp->request));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
508 |
}
|
509 |
|
510 |
function new_fb_login_url() {
|
511 |
|
512 |
+
return site_url('wp-login.php') . '?loginFacebook=1';
|
513 |
}
|
514 |
|
515 |
function new_fb_redirect() {
|
|
|
|
|
516 |
|
517 |
+
$redirect = get_site_transient(nextend_uniqid() . '_fb_r');
|
518 |
+
|
519 |
+
if (!$redirect || $redirect == '' || $redirect == new_fb_login_url()) {
|
520 |
+
if (isset($_GET['redirect'])) {
|
521 |
+
$redirect = $_GET['redirect'];
|
522 |
+
} else {
|
523 |
+
$redirect = site_url();
|
524 |
+
}
|
525 |
}
|
526 |
+
$redirect = wp_sanitize_redirect($redirect);
|
527 |
+
$redirect = wp_validate_redirect($redirect, site_url());
|
528 |
+
header('LOCATION: ' . $redirect);
|
529 |
+
delete_site_transient(nextend_uniqid() . '_fb_r');
|
530 |
+
exit;
|
|
|
531 |
}
|
532 |
|
533 |
function new_fb_edit_profile_redirect() {
|
534 |
|
535 |
+
global $wp;
|
536 |
+
if (isset($wp->query_vars['editProfileRedirect'])) {
|
537 |
+
if (function_exists('bp_loggedin_user_domain')) {
|
538 |
+
header('LOCATION: ' . bp_loggedin_user_domain() . 'profile/edit/group/1/');
|
539 |
+
} else {
|
540 |
+
header('LOCATION: ' . self_admin_url('profile.php'));
|
541 |
+
}
|
542 |
+
exit;
|
543 |
}
|
|
|
|
|
544 |
}
|
545 |
+
|
546 |
add_action('parse_request', 'new_fb_edit_profile_redirect');
|
547 |
|
548 |
function new_fb_jquery() {
|
549 |
|
550 |
+
wp_enqueue_script('jquery');
|
551 |
}
|
552 |
+
|
553 |
add_action('login_form_login', 'new_fb_jquery');
|
554 |
add_action('login_form_register', 'new_fb_jquery');
|
555 |
|
558 |
*/
|
559 |
|
560 |
function new_fb_admin_notice() {
|
561 |
+
$user_info = wp_get_current_user();
|
562 |
+
$notice = get_site_transient($user_info->ID . '_new_fb_admin_notice');
|
563 |
+
if ($notice !== false) {
|
564 |
+
echo '<div class="updated">
|
565 |
<p>' . $notice . '</p>
|
566 |
</div>';
|
567 |
+
delete_site_transient($user_info->ID . '_new_fb_admin_notice');
|
568 |
+
}
|
569 |
}
|
570 |
|
571 |
add_action('admin_notices', 'new_fb_admin_notice');
|
nextend-facebook-settings.php
CHANGED
@@ -77,7 +77,7 @@ if (!class_exists('NextendFBSettings')) {
|
|
77 |
<div class="error"><strong><p>Facebook needs the CURL PHP extension. Contact your server adminsitrator!</p></strong></div>
|
78 |
<?php
|
79 |
} else {
|
80 |
-
$version
|
81 |
$ssl_supported = ($version['features'] & CURL_VERSION_SSL);
|
82 |
if (!$ssl_supported) {
|
83 |
?>
|
@@ -158,8 +158,8 @@ if (!class_exists('NextendFBSettings')) {
|
|
158 |
<?php $nextend_fb_connect = maybe_unserialize(get_option('nextend_fb_connect')); ?>
|
159 |
|
160 |
<form method="post" action="<?php echo get_bloginfo("wpurl"); ?>/wp-admin/options-general.php?page=nextend-facebook-connect">
|
161 |
-
<?php wp_nonce_field(
|
162 |
-
|
163 |
|
164 |
<table class="form-table">
|
165 |
<tr>
|
77 |
<div class="error"><strong><p>Facebook needs the CURL PHP extension. Contact your server adminsitrator!</p></strong></div>
|
78 |
<?php
|
79 |
} else {
|
80 |
+
$version = curl_version();
|
81 |
$ssl_supported = ($version['features'] & CURL_VERSION_SSL);
|
82 |
if (!$ssl_supported) {
|
83 |
?>
|
158 |
<?php $nextend_fb_connect = maybe_unserialize(get_option('nextend_fb_connect')); ?>
|
159 |
|
160 |
<form method="post" action="<?php echo get_bloginfo("wpurl"); ?>/wp-admin/options-general.php?page=nextend-facebook-connect">
|
161 |
+
<?php wp_nonce_field('nextend-facebook-connect'); ?>
|
162 |
+
<input type="hidden" name="newfb_update_options" value="Y">
|
163 |
|
164 |
<table class="form-table">
|
165 |
<tr>
|
readme.txt
CHANGED
@@ -3,8 +3,8 @@ Contributors: nextendweb
|
|
3 |
Tags: facebook, register, login, social connect, social, facebook connect
|
4 |
Donate link: https://www.facebook.com/nextendweb
|
5 |
Requires at least: 3.0
|
6 |
-
Tested up to: 4.
|
7 |
-
Stable tag:
|
8 |
License: GPLv2 or later
|
9 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
10 |
|
@@ -31,7 +31,7 @@ If you like our stuff donate a like to our [Facebook page](https://www.facebook.
|
|
31 |
|
32 |
#### Usage
|
33 |
|
34 |
-
After you activated the plugin, the plugin will
|
35 |
|
36 |
* add the login buttons to the WordPress login page. See screenshot #1
|
37 |
* add the account linking buttons to the WordPress profile page. See screenshot #2
|
@@ -72,11 +72,19 @@ After you activated the plugin, the plugin will autmatically
|
|
72 |
|
73 |
== Changelog ==
|
74 |
|
75 |
-
=
|
76 |
-
* Fix:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
77 |
|
78 |
= 1.5.9 =
|
79 |
-
* Nonce added to backend
|
80 |
|
81 |
= 1.5.8 =
|
82 |
* Vulnerability fix
|
@@ -247,4 +255,9 @@ After you activated the plugin, the plugin will autmatically
|
|
247 |
* Added linking option to the profile page, so an already registered user can easily link the profile with a Facebook profile.
|
248 |
|
249 |
= 1.2 =
|
250 |
-
* Fixed a bug when the htaccess short urls not enabled.
|
|
|
|
|
|
|
|
|
|
3 |
Tags: facebook, register, login, social connect, social, facebook connect
|
4 |
Donate link: https://www.facebook.com/nextendweb
|
5 |
Requires at least: 3.0
|
6 |
+
Tested up to: 4.7.3
|
7 |
+
Stable tag: 2.0.2
|
8 |
License: GPLv2 or later
|
9 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
10 |
|
31 |
|
32 |
#### Usage
|
33 |
|
34 |
+
After you activated the plugin, the plugin will automatically
|
35 |
|
36 |
* add the login buttons to the WordPress login page. See screenshot #1
|
37 |
* add the account linking buttons to the WordPress profile page. See screenshot #2
|
72 |
|
73 |
== Changelog ==
|
74 |
|
75 |
+
= 2.0.2 =
|
76 |
+
* Fix: Fatal error: Call to undefined method Facebook\Facebook::getAccessToken()
|
77 |
+
|
78 |
+
= 2.0.1 =
|
79 |
+
* Fix: Redirect uri mismatch in spacial server environment
|
80 |
+
|
81 |
+
= 2.0.0 =
|
82 |
+
* The latest Facebook PHP API used: https://github.com/facebook/php-graph-sdk
|
83 |
+
* Facebook SDK for PHP requires PHP 5.4 or greater.
|
84 |
+
* Fix: Facebook 2.2 API does not work anymore
|
85 |
|
86 |
= 1.5.9 =
|
87 |
+
* Nonce added to backend
|
88 |
|
89 |
= 1.5.8 =
|
90 |
* Vulnerability fix
|
255 |
* Added linking option to the profile page, so an already registered user can easily link the profile with a Facebook profile.
|
256 |
|
257 |
= 1.2 =
|
258 |
+
* Fixed a bug when the htaccess short urls not enabled.
|
259 |
+
|
260 |
+
== Upgrade Notice ==
|
261 |
+
|
262 |
+
= 2.0 =
|
263 |
+
Facebook SDK for PHP requires PHP 5.4 or greater. Please check your server configuration before updating!
|
sdk/base_facebook.php
DELETED
@@ -1,1447 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Copyright 2011 Facebook, Inc.
|
4 |
-
*
|
5 |
-
* Licensed under the Apache License, Version 2.0 (the "License"); you may
|
6 |
-
* not use this file except in compliance with the License. You may obtain
|
7 |
-
* a copy of the License at
|
8 |
-
*
|
9 |
-
* http://www.apache.org/licenses/LICENSE-2.0
|
10 |
-
*
|
11 |
-
* Unless required by applicable law or agreed to in writing, software
|
12 |
-
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
13 |
-
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
14 |
-
* License for the specific language governing permissions and limitations
|
15 |
-
* under the License.
|
16 |
-
*/
|
17 |
-
|
18 |
-
if (!function_exists('curl_init')) {
|
19 |
-
throw new Exception('Facebook needs the CURL PHP extension.');
|
20 |
-
}else{
|
21 |
-
$version = curl_version();
|
22 |
-
$ssl_supported= ($version['features'] & CURL_VERSION_SSL);
|
23 |
-
if(!$ssl_supported)
|
24 |
-
throw new Exception('Protocol https not supported or disabled in libcurl');
|
25 |
-
}
|
26 |
-
|
27 |
-
if (!function_exists('json_decode')) {
|
28 |
-
throw new Exception('Facebook needs the JSON PHP extension.');
|
29 |
-
}
|
30 |
-
|
31 |
-
/**
|
32 |
-
* Thrown when an API call returns an exception.
|
33 |
-
*
|
34 |
-
* @author Naitik Shah <naitik@facebook.com>
|
35 |
-
*/
|
36 |
-
class FacebookApiException extends Exception
|
37 |
-
{
|
38 |
-
/**
|
39 |
-
* The result from the API server that represents the exception information.
|
40 |
-
*/
|
41 |
-
protected $result;
|
42 |
-
|
43 |
-
/**
|
44 |
-
* Make a new API Exception with the given result.
|
45 |
-
*
|
46 |
-
* @param array $result The result from the API server
|
47 |
-
*/
|
48 |
-
public function __construct($result) {
|
49 |
-
$this->result = $result;
|
50 |
-
|
51 |
-
$code = isset($result['error_code']) ? $result['error_code'] : 0;
|
52 |
-
|
53 |
-
if (isset($result['error_description'])) {
|
54 |
-
// OAuth 2.0 Draft 10 style
|
55 |
-
$msg = $result['error_description'];
|
56 |
-
} else if (isset($result['error']) && is_array($result['error'])) {
|
57 |
-
// OAuth 2.0 Draft 00 style
|
58 |
-
$msg = $result['error']['message'];
|
59 |
-
} else if (isset($result['error_msg'])) {
|
60 |
-
// Rest server style
|
61 |
-
$msg = $result['error_msg'];
|
62 |
-
} else {
|
63 |
-
$msg = 'Unknown Error. Check getResult()';
|
64 |
-
}
|
65 |
-
|
66 |
-
parent::__construct($msg, $code);
|
67 |
-
}
|
68 |
-
|
69 |
-
/**
|
70 |
-
* Return the associated result object returned by the API server.
|
71 |
-
*
|
72 |
-
* @return array The result from the API server
|
73 |
-
*/
|
74 |
-
public function getResult() {
|
75 |
-
return $this->result;
|
76 |
-
}
|
77 |
-
|
78 |
-
/**
|
79 |
-
* Returns the associated type for the error. This will default to
|
80 |
-
* 'Exception' when a type is not available.
|
81 |
-
*
|
82 |
-
* @return string
|
83 |
-
*/
|
84 |
-
public function getType() {
|
85 |
-
if (isset($this->result['error'])) {
|
86 |
-
$error = $this->result['error'];
|
87 |
-
if (is_string($error)) {
|
88 |
-
// OAuth 2.0 Draft 10 style
|
89 |
-
return $error;
|
90 |
-
} else if (is_array($error)) {
|
91 |
-
// OAuth 2.0 Draft 00 style
|
92 |
-
if (isset($error['type'])) {
|
93 |
-
return $error['type'];
|
94 |
-
}
|
95 |
-
}
|
96 |
-
}
|
97 |
-
|
98 |
-
return 'Exception';
|
99 |
-
}
|
100 |
-
|
101 |
-
/**
|
102 |
-
* To make debugging easier.
|
103 |
-
*
|
104 |
-
* @return string The string representation of the error
|
105 |
-
*/
|
106 |
-
public function __toString() {
|
107 |
-
$str = $this->getType() . ': ';
|
108 |
-
if ($this->code != 0) {
|
109 |
-
$str .= $this->code . ': ';
|
110 |
-
}
|
111 |
-
return $str . $this->message;
|
112 |
-
}
|
113 |
-
}
|
114 |
-
|
115 |
-
/**
|
116 |
-
* Provides access to the Facebook Platform. This class provides
|
117 |
-
* a majority of the functionality needed, but the class is abstract
|
118 |
-
* because it is designed to be sub-classed. The subclass must
|
119 |
-
* implement the four abstract methods listed at the bottom of
|
120 |
-
* the file.
|
121 |
-
*
|
122 |
-
* @author Naitik Shah <naitik@facebook.com>
|
123 |
-
*/
|
124 |
-
abstract class BaseFacebook
|
125 |
-
{
|
126 |
-
/**
|
127 |
-
* Version.
|
128 |
-
*/
|
129 |
-
const VERSION = '3.2.2';
|
130 |
-
|
131 |
-
/**
|
132 |
-
* Signed Request Algorithm.
|
133 |
-
*/
|
134 |
-
const SIGNED_REQUEST_ALGORITHM = 'HMAC-SHA256';
|
135 |
-
|
136 |
-
/**
|
137 |
-
* Default options for curl.
|
138 |
-
*/
|
139 |
-
public static $CURL_OPTS = array(
|
140 |
-
CURLOPT_CONNECTTIMEOUT => 10,
|
141 |
-
CURLOPT_RETURNTRANSFER => true,
|
142 |
-
CURLOPT_TIMEOUT => 60,
|
143 |
-
CURLOPT_USERAGENT => 'facebook-php-3.2',
|
144 |
-
);
|
145 |
-
|
146 |
-
/**
|
147 |
-
* List of query parameters that get automatically dropped when rebuilding
|
148 |
-
* the current URL.
|
149 |
-
*/
|
150 |
-
protected static $DROP_QUERY_PARAMS = array(
|
151 |
-
'code',
|
152 |
-
'state',
|
153 |
-
'signed_request',
|
154 |
-
);
|
155 |
-
|
156 |
-
/**
|
157 |
-
* Maps aliases to Facebook domains.
|
158 |
-
*/
|
159 |
-
public static $DOMAIN_MAP = array(
|
160 |
-
'api' => 'https://api.facebook.com/',
|
161 |
-
'api_video' => 'https://api-video.facebook.com/',
|
162 |
-
'api_read' => 'https://api-read.facebook.com/',
|
163 |
-
'graph' => 'https://graph.facebook.com/',
|
164 |
-
'graph_video' => 'https://graph-video.facebook.com/',
|
165 |
-
'www' => 'https://www.facebook.com/',
|
166 |
-
);
|
167 |
-
|
168 |
-
/**
|
169 |
-
* The Application ID.
|
170 |
-
*
|
171 |
-
* @var string
|
172 |
-
*/
|
173 |
-
protected $appId;
|
174 |
-
|
175 |
-
/**
|
176 |
-
* The Application App Secret.
|
177 |
-
*
|
178 |
-
* @var string
|
179 |
-
*/
|
180 |
-
protected $appSecret;
|
181 |
-
|
182 |
-
/**
|
183 |
-
* The ID of the Facebook user, or 0 if the user is logged out.
|
184 |
-
*
|
185 |
-
* @var integer
|
186 |
-
*/
|
187 |
-
protected $user;
|
188 |
-
|
189 |
-
/**
|
190 |
-
* The data from the signed_request token.
|
191 |
-
*/
|
192 |
-
protected $signedRequest;
|
193 |
-
|
194 |
-
/**
|
195 |
-
* A CSRF state variable to assist in the defense against CSRF attacks.
|
196 |
-
*/
|
197 |
-
protected $state;
|
198 |
-
|
199 |
-
/**
|
200 |
-
* The OAuth access token received in exchange for a valid authorization
|
201 |
-
* code. null means the access token has yet to be determined.
|
202 |
-
*
|
203 |
-
* @var string
|
204 |
-
*/
|
205 |
-
protected $accessToken = null;
|
206 |
-
|
207 |
-
/**
|
208 |
-
* Indicates if the CURL based @ syntax for file uploads is enabled.
|
209 |
-
*
|
210 |
-
* @var boolean
|
211 |
-
*/
|
212 |
-
protected $fileUploadSupport = false;
|
213 |
-
|
214 |
-
/**
|
215 |
-
* Indicates if we trust HTTP_X_FORWARDED_* headers.
|
216 |
-
*
|
217 |
-
* @var boolean
|
218 |
-
*/
|
219 |
-
protected $trustForwarded = false;
|
220 |
-
|
221 |
-
/**
|
222 |
-
* Initialize a Facebook Application.
|
223 |
-
*
|
224 |
-
* The configuration:
|
225 |
-
* - appId: the application ID
|
226 |
-
* - secret: the application secret
|
227 |
-
* - fileUpload: (optional) boolean indicating if file uploads are enabled
|
228 |
-
*
|
229 |
-
* @param array $config The application configuration
|
230 |
-
*/
|
231 |
-
public function __construct($config) {
|
232 |
-
$this->setAppId($config['appId']);
|
233 |
-
$this->setAppSecret($config['secret']);
|
234 |
-
if (isset($config['fileUpload'])) {
|
235 |
-
$this->setFileUploadSupport($config['fileUpload']);
|
236 |
-
}
|
237 |
-
if (isset($config['trustForwarded']) && $config['trustForwarded']) {
|
238 |
-
$this->trustForwarded = true;
|
239 |
-
}
|
240 |
-
$state = $this->getPersistentData('state');
|
241 |
-
if (!empty($state)) {
|
242 |
-
$this->state = $state;
|
243 |
-
}
|
244 |
-
}
|
245 |
-
|
246 |
-
/**
|
247 |
-
* Set the Application ID.
|
248 |
-
*
|
249 |
-
* @param string $appId The Application ID
|
250 |
-
* @return BaseFacebook
|
251 |
-
*/
|
252 |
-
public function setAppId($appId) {
|
253 |
-
$this->appId = $appId;
|
254 |
-
return $this;
|
255 |
-
}
|
256 |
-
|
257 |
-
/**
|
258 |
-
* Get the Application ID.
|
259 |
-
*
|
260 |
-
* @return string the Application ID
|
261 |
-
*/
|
262 |
-
public function getAppId() {
|
263 |
-
return $this->appId;
|
264 |
-
}
|
265 |
-
|
266 |
-
/**
|
267 |
-
* Set the App Secret.
|
268 |
-
*
|
269 |
-
* @param string $apiSecret The App Secret
|
270 |
-
* @return BaseFacebook
|
271 |
-
* @deprecated
|
272 |
-
*/
|
273 |
-
public function setApiSecret($apiSecret) {
|
274 |
-
$this->setAppSecret($apiSecret);
|
275 |
-
return $this;
|
276 |
-
}
|
277 |
-
|
278 |
-
/**
|
279 |
-
* Set the App Secret.
|
280 |
-
*
|
281 |
-
* @param string $appSecret The App Secret
|
282 |
-
* @return BaseFacebook
|
283 |
-
*/
|
284 |
-
public function setAppSecret($appSecret) {
|
285 |
-
$this->appSecret = $appSecret;
|
286 |
-
return $this;
|
287 |
-
}
|
288 |
-
|
289 |
-
/**
|
290 |
-
* Get the App Secret.
|
291 |
-
*
|
292 |
-
* @return string the App Secret
|
293 |
-
* @deprecated
|
294 |
-
*/
|
295 |
-
public function getApiSecret() {
|
296 |
-
return $this->getAppSecret();
|
297 |
-
}
|
298 |
-
|
299 |
-
/**
|
300 |
-
* Get the App Secret.
|
301 |
-
*
|
302 |
-
* @return string the App Secret
|
303 |
-
*/
|
304 |
-
public function getAppSecret() {
|
305 |
-
return $this->appSecret;
|
306 |
-
}
|
307 |
-
|
308 |
-
/**
|
309 |
-
* Set the file upload support status.
|
310 |
-
*
|
311 |
-
* @param boolean $fileUploadSupport The file upload support status.
|
312 |
-
* @return BaseFacebook
|
313 |
-
*/
|
314 |
-
public function setFileUploadSupport($fileUploadSupport) {
|
315 |
-
$this->fileUploadSupport = $fileUploadSupport;
|
316 |
-
return $this;
|
317 |
-
}
|
318 |
-
|
319 |
-
/**
|
320 |
-
* Get the file upload support status.
|
321 |
-
*
|
322 |
-
* @return boolean true if and only if the server supports file upload.
|
323 |
-
*/
|
324 |
-
public function getFileUploadSupport() {
|
325 |
-
return $this->fileUploadSupport;
|
326 |
-
}
|
327 |
-
|
328 |
-
/**
|
329 |
-
* DEPRECATED! Please use getFileUploadSupport instead.
|
330 |
-
*
|
331 |
-
* Get the file upload support status.
|
332 |
-
*
|
333 |
-
* @return boolean true if and only if the server supports file upload.
|
334 |
-
*/
|
335 |
-
public function useFileUploadSupport() {
|
336 |
-
return $this->getFileUploadSupport();
|
337 |
-
}
|
338 |
-
|
339 |
-
/**
|
340 |
-
* Sets the access token for api calls. Use this if you get
|
341 |
-
* your access token by other means and just want the SDK
|
342 |
-
* to use it.
|
343 |
-
*
|
344 |
-
* @param string $access_token an access token.
|
345 |
-
* @return BaseFacebook
|
346 |
-
*/
|
347 |
-
public function setAccessToken($access_token) {
|
348 |
-
$this->accessToken = $access_token;
|
349 |
-
return $this;
|
350 |
-
}
|
351 |
-
|
352 |
-
/**
|
353 |
-
* Extend an access token, while removing the short-lived token that might
|
354 |
-
* have been generated via client-side flow. Thanks to http://bit.ly/b0Pt0H
|
355 |
-
* for the workaround.
|
356 |
-
*/
|
357 |
-
public function setExtendedAccessToken() {
|
358 |
-
try {
|
359 |
-
// need to circumvent json_decode by calling _oauthRequest
|
360 |
-
// directly, since response isn't JSON format.
|
361 |
-
$access_token_response = $this->_oauthRequest(
|
362 |
-
$this->getUrl('graph', '/oauth/access_token'),
|
363 |
-
$params = array(
|
364 |
-
'client_id' => $this->getAppId(),
|
365 |
-
'client_secret' => $this->getAppSecret(),
|
366 |
-
'grant_type' => 'fb_exchange_token',
|
367 |
-
'fb_exchange_token' => $this->getAccessToken(),
|
368 |
-
)
|
369 |
-
);
|
370 |
-
}
|
371 |
-
catch (FacebookApiException $e) {
|
372 |
-
// most likely that user very recently revoked authorization.
|
373 |
-
// In any event, we don't have an access token, so say so.
|
374 |
-
return false;
|
375 |
-
}
|
376 |
-
|
377 |
-
if (empty($access_token_response)) {
|
378 |
-
return false;
|
379 |
-
}
|
380 |
-
|
381 |
-
$response_params = array();
|
382 |
-
parse_str($access_token_response, $response_params);
|
383 |
-
|
384 |
-
if (!isset($response_params['access_token'])) {
|
385 |
-
return false;
|
386 |
-
}
|
387 |
-
|
388 |
-
$this->destroySession();
|
389 |
-
|
390 |
-
$this->setPersistentData(
|
391 |
-
'access_token', $response_params['access_token']
|
392 |
-
);
|
393 |
-
}
|
394 |
-
|
395 |
-
/**
|
396 |
-
* Determines the access token that should be used for API calls.
|
397 |
-
* The first time this is called, $this->accessToken is set equal
|
398 |
-
* to either a valid user access token, or it's set to the application
|
399 |
-
* access token if a valid user access token wasn't available. Subsequent
|
400 |
-
* calls return whatever the first call returned.
|
401 |
-
*
|
402 |
-
* @return string The access token
|
403 |
-
*/
|
404 |
-
public function getAccessToken() {
|
405 |
-
if ($this->accessToken !== null) {
|
406 |
-
// we've done this already and cached it. Just return.
|
407 |
-
return $this->accessToken;
|
408 |
-
}
|
409 |
-
|
410 |
-
// first establish access token to be the application
|
411 |
-
// access token, in case we navigate to the /oauth/access_token
|
412 |
-
// endpoint, where SOME access token is required.
|
413 |
-
$this->setAccessToken($this->getApplicationAccessToken());
|
414 |
-
$user_access_token = $this->getUserAccessToken();
|
415 |
-
if ($user_access_token) {
|
416 |
-
$this->setAccessToken($user_access_token);
|
417 |
-
}
|
418 |
-
|
419 |
-
return $this->accessToken;
|
420 |
-
}
|
421 |
-
|
422 |
-
/**
|
423 |
-
* Determines and returns the user access token, first using
|
424 |
-
* the signed request if present, and then falling back on
|
425 |
-
* the authorization code if present. The intent is to
|
426 |
-
* return a valid user access token, or false if one is determined
|
427 |
-
* to not be available.
|
428 |
-
*
|
429 |
-
* @return string A valid user access token, or false if one
|
430 |
-
* could not be determined.
|
431 |
-
*/
|
432 |
-
protected function getUserAccessToken() {
|
433 |
-
// first, consider a signed request if it's supplied.
|
434 |
-
// if there is a signed request, then it alone determines
|
435 |
-
// the access token.
|
436 |
-
$signed_request = $this->getSignedRequest();
|
437 |
-
if ($signed_request) {
|
438 |
-
// apps.facebook.com hands the access_token in the signed_request
|
439 |
-
if (array_key_exists('oauth_token', $signed_request)) {
|
440 |
-
$access_token = $signed_request['oauth_token'];
|
441 |
-
$this->setPersistentData('access_token', $access_token);
|
442 |
-
return $access_token;
|
443 |
-
}
|
444 |
-
|
445 |
-
// the JS SDK puts a code in with the redirect_uri of ''
|
446 |
-
if (array_key_exists('code', $signed_request)) {
|
447 |
-
$code = $signed_request['code'];
|
448 |
-
if ($code && $code == $this->getPersistentData('code')) {
|
449 |
-
// short-circuit if the code we have is the same as the one presented
|
450 |
-
return $this->getPersistentData('access_token');
|
451 |
-
}
|
452 |
-
|
453 |
-
$access_token = $this->getAccessTokenFromCode($code, '');
|
454 |
-
if ($access_token) {
|
455 |
-
$this->setPersistentData('code', $code);
|
456 |
-
$this->setPersistentData('access_token', $access_token);
|
457 |
-
return $access_token;
|
458 |
-
}
|
459 |
-
}
|
460 |
-
|
461 |
-
// signed request states there's no access token, so anything
|
462 |
-
// stored should be cleared.
|
463 |
-
$this->clearAllPersistentData();
|
464 |
-
return false; // respect the signed request's data, even
|
465 |
-
// if there's an authorization code or something else
|
466 |
-
}
|
467 |
-
|
468 |
-
$code = $this->getCode();
|
469 |
-
if ($code && $code != $this->getPersistentData('code')) {
|
470 |
-
$access_token = $this->getAccessTokenFromCode($code);
|
471 |
-
if ($access_token) {
|
472 |
-
$this->setPersistentData('code', $code);
|
473 |
-
$this->setPersistentData('access_token', $access_token);
|
474 |
-
return $access_token;
|
475 |
-
}
|
476 |
-
|
477 |
-
// code was bogus, so everything based on it should be invalidated.
|
478 |
-
$this->clearAllPersistentData();
|
479 |
-
return false;
|
480 |
-
}
|
481 |
-
|
482 |
-
// as a fallback, just return whatever is in the persistent
|
483 |
-
// store, knowing nothing explicit (signed request, authorization
|
484 |
-
// code, etc.) was present to shadow it (or we saw a code in $_REQUEST,
|
485 |
-
// but it's the same as what's in the persistent store)
|
486 |
-
return $this->getPersistentData('access_token');
|
487 |
-
}
|
488 |
-
|
489 |
-
/**
|
490 |
-
* Retrieve the signed request, either from a request parameter or,
|
491 |
-
* if not present, from a cookie.
|
492 |
-
*
|
493 |
-
* @return string the signed request, if available, or null otherwise.
|
494 |
-
*/
|
495 |
-
public function getSignedRequest() {
|
496 |
-
if (!$this->signedRequest) {
|
497 |
-
if (!empty($_REQUEST['signed_request'])) {
|
498 |
-
$this->signedRequest = $this->parseSignedRequest(
|
499 |
-
$_REQUEST['signed_request']);
|
500 |
-
} else if (!empty($_COOKIE[$this->getSignedRequestCookieName()])) {
|
501 |
-
$this->signedRequest = $this->parseSignedRequest(
|
502 |
-
$_COOKIE[$this->getSignedRequestCookieName()]);
|
503 |
-
}
|
504 |
-
}
|
505 |
-
return $this->signedRequest;
|
506 |
-
}
|
507 |
-
|
508 |
-
/**
|
509 |
-
* Get the UID of the connected user, or 0
|
510 |
-
* if the Facebook user is not connected.
|
511 |
-
*
|
512 |
-
* @return string the UID if available.
|
513 |
-
*/
|
514 |
-
public function getUser() {
|
515 |
-
if ($this->user !== null) {
|
516 |
-
// we've already determined this and cached the value.
|
517 |
-
return $this->user;
|
518 |
-
}
|
519 |
-
|
520 |
-
return $this->user = $this->getUserFromAvailableData();
|
521 |
-
}
|
522 |
-
|
523 |
-
/**
|
524 |
-
* Determines the connected user by first examining any signed
|
525 |
-
* requests, then considering an authorization code, and then
|
526 |
-
* falling back to any persistent store storing the user.
|
527 |
-
*
|
528 |
-
* @return integer The id of the connected Facebook user,
|
529 |
-
* or 0 if no such user exists.
|
530 |
-
*/
|
531 |
-
protected function getUserFromAvailableData() {
|
532 |
-
// if a signed request is supplied, then it solely determines
|
533 |
-
// who the user is.
|
534 |
-
$signed_request = $this->getSignedRequest();
|
535 |
-
if ($signed_request) {
|
536 |
-
if (array_key_exists('user_id', $signed_request)) {
|
537 |
-
$user = $signed_request['user_id'];
|
538 |
-
|
539 |
-
if($user != $this->getPersistentData('user_id')){
|
540 |
-
$this->clearAllPersistentData();
|
541 |
-
}
|
542 |
-
|
543 |
-
$this->setPersistentData('user_id', $signed_request['user_id']);
|
544 |
-
return $user;
|
545 |
-
}
|
546 |
-
|
547 |
-
// if the signed request didn't present a user id, then invalidate
|
548 |
-
// all entries in any persistent store.
|
549 |
-
$this->clearAllPersistentData();
|
550 |
-
return 0;
|
551 |
-
}
|
552 |
-
|
553 |
-
$user = $this->getPersistentData('user_id', $default = 0);
|
554 |
-
$persisted_access_token = $this->getPersistentData('access_token');
|
555 |
-
|
556 |
-
// use access_token to fetch user id if we have a user access_token, or if
|
557 |
-
// the cached access token has changed.
|
558 |
-
$access_token = $this->getAccessToken();
|
559 |
-
if ($access_token &&
|
560 |
-
$access_token != $this->getApplicationAccessToken() &&
|
561 |
-
!($user && $persisted_access_token == $access_token)) {
|
562 |
-
$user = $this->getUserFromAccessToken();
|
563 |
-
if ($user) {
|
564 |
-
$this->setPersistentData('user_id', $user);
|
565 |
-
} else {
|
566 |
-
$this->clearAllPersistentData();
|
567 |
-
}
|
568 |
-
}
|
569 |
-
|
570 |
-
return $user;
|
571 |
-
}
|
572 |
-
|
573 |
-
/**
|
574 |
-
* Get a Login URL for use with redirects. By default, full page redirect is
|
575 |
-
* assumed. If you are using the generated URL with a window.open() call in
|
576 |
-
* JavaScript, you can pass in display=popup as part of the $params.
|
577 |
-
*
|
578 |
-
* The parameters:
|
579 |
-
* - redirect_uri: the url to go to after a successful login
|
580 |
-
* - scope: comma separated list of requested extended perms
|
581 |
-
*
|
582 |
-
* @param array $params Provide custom parameters
|
583 |
-
* @return string The URL for the login flow
|
584 |
-
*/
|
585 |
-
public function getLoginUrl($params=array()) {
|
586 |
-
$this->establishCSRFTokenState();
|
587 |
-
$currentUrl = $this->getCurrentUrl();
|
588 |
-
|
589 |
-
// if 'scope' is passed as an array, convert to comma separated list
|
590 |
-
$scopeParams = isset($params['scope']) ? $params['scope'] : null;
|
591 |
-
if ($scopeParams && is_array($scopeParams)) {
|
592 |
-
$params['scope'] = implode(',', $scopeParams);
|
593 |
-
}
|
594 |
-
|
595 |
-
return $this->getUrl(
|
596 |
-
'www',
|
597 |
-
'dialog/oauth',
|
598 |
-
array_merge(array(
|
599 |
-
'client_id' => $this->getAppId(),
|
600 |
-
'redirect_uri' => $currentUrl, // possibly overwritten
|
601 |
-
'state' => $this->state),
|
602 |
-
$params));
|
603 |
-
}
|
604 |
-
|
605 |
-
/**
|
606 |
-
* Get a Logout URL suitable for use with redirects.
|
607 |
-
*
|
608 |
-
* The parameters:
|
609 |
-
* - next: the url to go to after a successful logout
|
610 |
-
*
|
611 |
-
* @param array $params Provide custom parameters
|
612 |
-
* @return string The URL for the logout flow
|
613 |
-
*/
|
614 |
-
public function getLogoutUrl($params=array()) {
|
615 |
-
return $this->getUrl(
|
616 |
-
'www',
|
617 |
-
'logout.php',
|
618 |
-
array_merge(array(
|
619 |
-
'next' => $this->getCurrentUrl(),
|
620 |
-
'access_token' => $this->getUserAccessToken(),
|
621 |
-
), $params)
|
622 |
-
);
|
623 |
-
}
|
624 |
-
|
625 |
-
/**
|
626 |
-
* Get a login status URL to fetch the status from Facebook.
|
627 |
-
*
|
628 |
-
* The parameters:
|
629 |
-
* - ok_session: the URL to go to if a session is found
|
630 |
-
* - no_session: the URL to go to if the user is not connected
|
631 |
-
* - no_user: the URL to go to if the user is not signed into facebook
|
632 |
-
*
|
633 |
-
* @param array $params Provide custom parameters
|
634 |
-
* @return string The URL for the logout flow
|
635 |
-
*/
|
636 |
-
public function getLoginStatusUrl($params=array()) {
|
637 |
-
return $this->getUrl(
|
638 |
-
'www',
|
639 |
-
'extern/login_status.php',
|
640 |
-
array_merge(array(
|
641 |
-
'api_key' => $this->getAppId(),
|
642 |
-
'no_session' => $this->getCurrentUrl(),
|
643 |
-
'no_user' => $this->getCurrentUrl(),
|
644 |
-
'ok_session' => $this->getCurrentUrl(),
|
645 |
-
'session_version' => 3,
|
646 |
-
), $params)
|
647 |
-
);
|
648 |
-
}
|
649 |
-
|
650 |
-
/**
|
651 |
-
* Make an API call.
|
652 |
-
*
|
653 |
-
* @return mixed The decoded response
|
654 |
-
*/
|
655 |
-
public function api(/* polymorphic */) {
|
656 |
-
$args = func_get_args();
|
657 |
-
if (is_array($args[0])) {
|
658 |
-
return $this->_restserver($args[0]);
|
659 |
-
} else {
|
660 |
-
return call_user_func_array(array($this, '_graph'), $args);
|
661 |
-
}
|
662 |
-
}
|
663 |
-
|
664 |
-
/**
|
665 |
-
* Constructs and returns the name of the cookie that
|
666 |
-
* potentially houses the signed request for the app user.
|
667 |
-
* The cookie is not set by the BaseFacebook class, but
|
668 |
-
* it may be set by the JavaScript SDK.
|
669 |
-
*
|
670 |
-
* @return string the name of the cookie that would house
|
671 |
-
* the signed request value.
|
672 |
-
*/
|
673 |
-
protected function getSignedRequestCookieName() {
|
674 |
-
return 'fbsr_'.$this->getAppId();
|
675 |
-
}
|
676 |
-
|
677 |
-
/**
|
678 |
-
* Constructs and returns the name of the coookie that potentially contain
|
679 |
-
* metadata. The cookie is not set by the BaseFacebook class, but it may be
|
680 |
-
* set by the JavaScript SDK.
|
681 |
-
*
|
682 |
-
* @return string the name of the cookie that would house metadata.
|
683 |
-
*/
|
684 |
-
protected function getMetadataCookieName() {
|
685 |
-
return 'fbm_'.$this->getAppId();
|
686 |
-
}
|
687 |
-
|
688 |
-
/**
|
689 |
-
* Get the authorization code from the query parameters, if it exists,
|
690 |
-
* and otherwise return false to signal no authorization code was
|
691 |
-
* discoverable.
|
692 |
-
*
|
693 |
-
* @return mixed The authorization code, or false if the authorization
|
694 |
-
* code could not be determined.
|
695 |
-
*/
|
696 |
-
protected function getCode() {
|
697 |
-
if (isset($_REQUEST['code'])) {
|
698 |
-
if ($this->state !== null &&
|
699 |
-
isset($_REQUEST['state']) &&
|
700 |
-
$this->state === $_REQUEST['state']) {
|
701 |
-
|
702 |
-
// CSRF state has done its job, so clear it
|
703 |
-
$this->state = null;
|
704 |
-
$this->clearPersistentData('state');
|
705 |
-
return $_REQUEST['code'];
|
706 |
-
} else {
|
707 |
-
self::errorLog('CSRF state token does not match one provided.');
|
708 |
-
return false;
|
709 |
-
}
|
710 |
-
}
|
711 |
-
|
712 |
-
return false;
|
713 |
-
}
|
714 |
-
|
715 |
-
/**
|
716 |
-
* Retrieves the UID with the understanding that
|
717 |
-
* $this->accessToken has already been set and is
|
718 |
-
* seemingly legitimate. It relies on Facebook's Graph API
|
719 |
-
* to retrieve user information and then extract
|
720 |
-
* the user ID.
|
721 |
-
*
|
722 |
-
* @return integer Returns the UID of the Facebook user, or 0
|
723 |
-
* if the Facebook user could not be determined.
|
724 |
-
*/
|
725 |
-
protected function getUserFromAccessToken() {
|
726 |
-
try {
|
727 |
-
$user_info = $this->api('/me');
|
728 |
-
return $user_info['id'];
|
729 |
-
} catch (FacebookApiException $e) {
|
730 |
-
return 0;
|
731 |
-
}
|
732 |
-
}
|
733 |
-
|
734 |
-
/**
|
735 |
-
* Returns the access token that should be used for logged out
|
736 |
-
* users when no authorization code is available.
|
737 |
-
*
|
738 |
-
* @return string The application access token, useful for gathering
|
739 |
-
* public information about users and applications.
|
740 |
-
*/
|
741 |
-
protected function getApplicationAccessToken() {
|
742 |
-
return $this->appId.'|'.$this->appSecret;
|
743 |
-
}
|
744 |
-
|
745 |
-
/**
|
746 |
-
* Lays down a CSRF state token for this process.
|
747 |
-
*
|
748 |
-
* @return void
|
749 |
-
*/
|
750 |
-
protected function establishCSRFTokenState() {
|
751 |
-
if ($this->state === null) {
|
752 |
-
$this->state = md5(uniqid(mt_rand(), true));
|
753 |
-
$this->setPersistentData('state', $this->state);
|
754 |
-
}
|
755 |
-
}
|
756 |
-
|
757 |
-
/**
|
758 |
-
* Retrieves an access token for the given authorization code
|
759 |
-
* (previously generated from www.facebook.com on behalf of
|
760 |
-
* a specific user). The authorization code is sent to graph.facebook.com
|
761 |
-
* and a legitimate access token is generated provided the access token
|
762 |
-
* and the user for which it was generated all match, and the user is
|
763 |
-
* either logged in to Facebook or has granted an offline access permission.
|
764 |
-
*
|
765 |
-
* @param string $code An authorization code.
|
766 |
-
* @return mixed An access token exchanged for the authorization code, or
|
767 |
-
* false if an access token could not be generated.
|
768 |
-
*/
|
769 |
-
protected function getAccessTokenFromCode($code, $redirect_uri = null) {
|
770 |
-
if (empty($code)) {
|
771 |
-
return false;
|
772 |
-
}
|
773 |
-
|
774 |
-
if ($redirect_uri === null) {
|
775 |
-
$redirect_uri = $this->getCurrentUrl();
|
776 |
-
}
|
777 |
-
|
778 |
-
try {
|
779 |
-
// need to circumvent json_decode by calling _oauthRequest
|
780 |
-
// directly, since response isn't JSON format.
|
781 |
-
$access_token_response =
|
782 |
-
$this->_oauthRequest(
|
783 |
-
$this->getUrl('graph', '/oauth/access_token'),
|
784 |
-
$params = array('client_id' => $this->getAppId(),
|
785 |
-
'client_secret' => $this->getAppSecret(),
|
786 |
-
'redirect_uri' => $redirect_uri,
|
787 |
-
'code' => $code));
|
788 |
-
} catch (FacebookApiException $e) {
|
789 |
-
// most likely that user very recently revoked authorization.
|
790 |
-
// In any event, we don't have an access token, so say so.
|
791 |
-
return false;
|
792 |
-
}
|
793 |
-
|
794 |
-
if (empty($access_token_response)) {
|
795 |
-
return false;
|
796 |
-
}
|
797 |
-
|
798 |
-
$response_params = array();
|
799 |
-
parse_str($access_token_response, $response_params);
|
800 |
-
if (!isset($response_params['access_token'])) {
|
801 |
-
return false;
|
802 |
-
}
|
803 |
-
|
804 |
-
return $response_params['access_token'];
|
805 |
-
}
|
806 |
-
|
807 |
-
/**
|
808 |
-
* Invoke the old restserver.php endpoint.
|
809 |
-
*
|
810 |
-
* @param array $params Method call object
|
811 |
-
*
|
812 |
-
* @return mixed The decoded response object
|
813 |
-
* @throws FacebookApiException
|
814 |
-
*/
|
815 |
-
protected function _restserver($params) {
|
816 |
-
// generic application level parameters
|
817 |
-
$params['api_key'] = $this->getAppId();
|
818 |
-
$params['format'] = 'json-strings';
|
819 |
-
|
820 |
-
$result = json_decode($this->_oauthRequest(
|
821 |
-
$this->getApiUrl($params['method']),
|
822 |
-
$params
|
823 |
-
), true);
|
824 |
-
|
825 |
-
// results are returned, errors are thrown
|
826 |
-
if (is_array($result) && isset($result['error_code'])) {
|
827 |
-
$this->throwAPIException($result);
|
828 |
-
// @codeCoverageIgnoreStart
|
829 |
-
}
|
830 |
-
// @codeCoverageIgnoreEnd
|
831 |
-
|
832 |
-
$method = strtolower($params['method']);
|
833 |
-
if ($method === 'auth.expiresession' ||
|
834 |
-
$method === 'auth.revokeauthorization') {
|
835 |
-
$this->destroySession();
|
836 |
-
}
|
837 |
-
|
838 |
-
return $result;
|
839 |
-
}
|
840 |
-
|
841 |
-
/**
|
842 |
-
* Return true if this is video post.
|
843 |
-
*
|
844 |
-
* @param string $path The path
|
845 |
-
* @param string $method The http method (default 'GET')
|
846 |
-
*
|
847 |
-
* @return boolean true if this is video post
|
848 |
-
*/
|
849 |
-
protected function isVideoPost($path, $method = 'GET') {
|
850 |
-
if ($method == 'POST' && preg_match("/^(\/)(.+)(\/)(videos)$/", $path)) {
|
851 |
-
return true;
|
852 |
-
}
|
853 |
-
return false;
|
854 |
-
}
|
855 |
-
|
856 |
-
/**
|
857 |
-
* Invoke the Graph API.
|
858 |
-
*
|
859 |
-
* @param string $path The path (required)
|
860 |
-
* @param string $method The http method (default 'GET')
|
861 |
-
* @param array $params The query/post data
|
862 |
-
*
|
863 |
-
* @return mixed The decoded response object
|
864 |
-
* @throws FacebookApiException
|
865 |
-
*/
|
866 |
-
protected function _graph($path, $method = 'GET', $params = array()) {
|
867 |
-
if (is_array($method) && empty($params)) {
|
868 |
-
$params = $method;
|
869 |
-
$method = 'GET';
|
870 |
-
}
|
871 |
-
$params['method'] = $method; // method override as we always do a POST
|
872 |
-
|
873 |
-
if ($this->isVideoPost($path, $method)) {
|
874 |
-
$domainKey = 'graph_video';
|
875 |
-
} else {
|
876 |
-
$domainKey = 'graph';
|
877 |
-
}
|
878 |
-
|
879 |
-
$result = json_decode($this->_oauthRequest(
|
880 |
-
$this->getUrl($domainKey, $path),
|
881 |
-
$params
|
882 |
-
), true);
|
883 |
-
|
884 |
-
// results are returned, errors are thrown
|
885 |
-
if (is_array($result) && isset($result['error'])) {
|
886 |
-
$this->throwAPIException($result);
|
887 |
-
// @codeCoverageIgnoreStart
|
888 |
-
}
|
889 |
-
// @codeCoverageIgnoreEnd
|
890 |
-
|
891 |
-
return $result;
|
892 |
-
}
|
893 |
-
|
894 |
-
/**
|
895 |
-
* Make a OAuth Request.
|
896 |
-
*
|
897 |
-
* @param string $url The path (required)
|
898 |
-
* @param array $params The query/post data
|
899 |
-
*
|
900 |
-
* @return string The decoded response object
|
901 |
-
* @throws FacebookApiException
|
902 |
-
*/
|
903 |
-
protected function _oauthRequest($url, $params) {
|
904 |
-
if (!isset($params['access_token'])) {
|
905 |
-
$params['access_token'] = $this->getAccessToken();
|
906 |
-
}
|
907 |
-
|
908 |
-
// json_encode all params values that are not strings
|
909 |
-
foreach ($params as $key => $value) {
|
910 |
-
if (!is_string($value)) {
|
911 |
-
$params[$key] = json_encode($value);
|
912 |
-
}
|
913 |
-
}
|
914 |
-
|
915 |
-
return $this->makeRequest($url, $params);
|
916 |
-
}
|
917 |
-
|
918 |
-
/**
|
919 |
-
* Makes an HTTP request. This method can be overridden by subclasses if
|
920 |
-
* developers want to do fancier things or use something other than curl to
|
921 |
-
* make the request.
|
922 |
-
*
|
923 |
-
* @param string $url The URL to make the request to
|
924 |
-
* @param array $params The parameters to use for the POST body
|
925 |
-
* @param CurlHandler $ch Initialized curl handle
|
926 |
-
*
|
927 |
-
* @return string The response text
|
928 |
-
*/
|
929 |
-
protected function makeRequest($url, $params, $ch=null) {
|
930 |
-
if (!$ch) {
|
931 |
-
$ch = curl_init();
|
932 |
-
}
|
933 |
-
|
934 |
-
$opts = self::$CURL_OPTS;
|
935 |
-
if ($this->getFileUploadSupport()) {
|
936 |
-
$opts[CURLOPT_POSTFIELDS] = $params;
|
937 |
-
} else {
|
938 |
-
$opts[CURLOPT_POSTFIELDS] = http_build_query($params, null, '&');
|
939 |
-
}
|
940 |
-
$opts[CURLOPT_URL] = $url;
|
941 |
-
|
942 |
-
// disable the 'Expect: 100-continue' behaviour. This causes CURL to wait
|
943 |
-
// for 2 seconds if the server does not support this header.
|
944 |
-
if (isset($opts[CURLOPT_HTTPHEADER])) {
|
945 |
-
$existing_headers = $opts[CURLOPT_HTTPHEADER];
|
946 |
-
$existing_headers[] = 'Expect:';
|
947 |
-
$opts[CURLOPT_HTTPHEADER] = $existing_headers;
|
948 |
-
} else {
|
949 |
-
$opts[CURLOPT_HTTPHEADER] = array('Expect:');
|
950 |
-
}
|
951 |
-
|
952 |
-
curl_setopt_array($ch, $opts);
|
953 |
-
$result = curl_exec($ch);
|
954 |
-
|
955 |
-
if (curl_errno($ch) == 60) { // CURLE_SSL_CACERT
|
956 |
-
self::errorLog('Invalid or no certificate authority found, '.
|
957 |
-
'using bundled information');
|
958 |
-
curl_setopt($ch, CURLOPT_CAINFO,
|
959 |
-
dirname(__FILE__) . '/fb_ca_chain_bundle.crt');
|
960 |
-
$result = curl_exec($ch);
|
961 |
-
}
|
962 |
-
|
963 |
-
// With dual stacked DNS responses, it's possible for a server to
|
964 |
-
// have IPv6 enabled but not have IPv6 connectivity. If this is
|
965 |
-
// the case, curl will try IPv4 first and if that fails, then it will
|
966 |
-
// fall back to IPv6 and the error EHOSTUNREACH is returned by the
|
967 |
-
// operating system.
|
968 |
-
if ($result === false && empty($opts[CURLOPT_IPRESOLVE])) {
|
969 |
-
$matches = array();
|
970 |
-
$regex = '/Failed to connect to ([^:].*): Network is unreachable/';
|
971 |
-
if (preg_match($regex, curl_error($ch), $matches)) {
|
972 |
-
if (strlen(@inet_pton($matches[1])) === 16) {
|
973 |
-
self::errorLog('Invalid IPv6 configuration on server, '.
|
974 |
-
'Please disable or get native IPv6 on your server.');
|
975 |
-
self::$CURL_OPTS[CURLOPT_IPRESOLVE] = CURL_IPRESOLVE_V4;
|
976 |
-
curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
|
977 |
-
$result = curl_exec($ch);
|
978 |
-
}
|
979 |
-
}
|
980 |
-
}
|
981 |
-
|
982 |
-
if ($result === false) {
|
983 |
-
$e = new FacebookApiException(array(
|
984 |
-
'error_code' => curl_errno($ch),
|
985 |
-
'error' => array(
|
986 |
-
'message' => curl_error($ch),
|
987 |
-
'type' => 'CurlException',
|
988 |
-
),
|
989 |
-
));
|
990 |
-
curl_close($ch);
|
991 |
-
throw $e;
|
992 |
-
}
|
993 |
-
curl_close($ch);
|
994 |
-
return $result;
|
995 |
-
}
|
996 |
-
|
997 |
-
/**
|
998 |
-
* Parses a signed_request and validates the signature.
|
999 |
-
*
|
1000 |
-
* @param string $signed_request A signed token
|
1001 |
-
* @return array The payload inside it or null if the sig is wrong
|
1002 |
-
*/
|
1003 |
-
protected function parseSignedRequest($signed_request) {
|
1004 |
-
list($encoded_sig, $payload) = explode('.', $signed_request, 2);
|
1005 |
-
|
1006 |
-
// decode the data
|
1007 |
-
$sig = self::base64UrlDecode($encoded_sig);
|
1008 |
-
$data = json_decode(self::base64UrlDecode($payload), true);
|
1009 |
-
|
1010 |
-
if (strtoupper($data['algorithm']) !== self::SIGNED_REQUEST_ALGORITHM) {
|
1011 |
-
self::errorLog(
|
1012 |
-
'Unknown algorithm. Expected ' . self::SIGNED_REQUEST_ALGORITHM);
|
1013 |
-
return null;
|
1014 |
-
}
|
1015 |
-
|
1016 |
-
// check sig
|
1017 |
-
$expected_sig = hash_hmac('sha256', $payload,
|
1018 |
-
$this->getAppSecret(), $raw = true);
|
1019 |
-
if ($sig !== $expected_sig) {
|
1020 |
-
self::errorLog('Bad Signed JSON signature!');
|
1021 |
-
return null;
|
1022 |
-
}
|
1023 |
-
|
1024 |
-
return $data;
|
1025 |
-
}
|
1026 |
-
|
1027 |
-
/**
|
1028 |
-
* Makes a signed_request blob using the given data.
|
1029 |
-
*
|
1030 |
-
* @param array The data array.
|
1031 |
-
* @return string The signed request.
|
1032 |
-
*/
|
1033 |
-
protected function makeSignedRequest($data) {
|
1034 |
-
if (!is_array($data)) {
|
1035 |
-
throw new InvalidArgumentException(
|
1036 |
-
'makeSignedRequest expects an array. Got: ' . print_r($data, true));
|
1037 |
-
}
|
1038 |
-
$data['algorithm'] = self::SIGNED_REQUEST_ALGORITHM;
|
1039 |
-
$data['issued_at'] = time();
|
1040 |
-
$json = json_encode($data);
|
1041 |
-
$b64 = self::base64UrlEncode($json);
|
1042 |
-
$raw_sig = hash_hmac('sha256', $b64, $this->getAppSecret(), $raw = true);
|
1043 |
-
$sig = self::base64UrlEncode($raw_sig);
|
1044 |
-
return $sig.'.'.$b64;
|
1045 |
-
}
|
1046 |
-
|
1047 |
-
/**
|
1048 |
-
* Build the URL for api given parameters.
|
1049 |
-
*
|
1050 |
-
* @param $method String the method name.
|
1051 |
-
* @return string The URL for the given parameters
|
1052 |
-
*/
|
1053 |
-
protected function getApiUrl($method) {
|
1054 |
-
static $READ_ONLY_CALLS =
|
1055 |
-
array('admin.getallocation' => 1,
|
1056 |
-
'admin.getappproperties' => 1,
|
1057 |
-
'admin.getbannedusers' => 1,
|
1058 |
-
'admin.getlivestreamvialink' => 1,
|
1059 |
-
'admin.getmetrics' => 1,
|
1060 |
-
'admin.getrestrictioninfo' => 1,
|
1061 |
-
'application.getpublicinfo' => 1,
|
1062 |
-
'auth.getapppublickey' => 1,
|
1063 |
-
'auth.getsession' => 1,
|
1064 |
-
'auth.getsignedpublicsessiondata' => 1,
|
1065 |
-
'comments.get' => 1,
|
1066 |
-
'connect.getunconnectedfriendscount' => 1,
|
1067 |
-
'dashboard.getactivity' => 1,
|
1068 |
-
'dashboard.getcount' => 1,
|
1069 |
-
'dashboard.getglobalnews' => 1,
|
1070 |
-
'dashboard.getnews' => 1,
|
1071 |
-
'dashboard.multigetcount' => 1,
|
1072 |
-
'dashboard.multigetnews' => 1,
|
1073 |
-
'data.getcookies' => 1,
|
1074 |
-
'events.get' => 1,
|
1075 |
-
'events.getmembers' => 1,
|
1076 |
-
'fbml.getcustomtags' => 1,
|
1077 |
-
'feed.getappfriendstories' => 1,
|
1078 |
-
'feed.getregisteredtemplatebundlebyid' => 1,
|
1079 |
-
'feed.getregisteredtemplatebundles' => 1,
|
1080 |
-
'fql.multiquery' => 1,
|
1081 |
-
'fql.query' => 1,
|
1082 |
-
'friends.arefriends' => 1,
|
1083 |
-
'friends.get' => 1,
|
1084 |
-
'friends.getappusers' => 1,
|
1085 |
-
'friends.getlists' => 1,
|
1086 |
-
'friends.getmutualfriends' => 1,
|
1087 |
-
'gifts.get' => 1,
|
1088 |
-
'groups.get' => 1,
|
1089 |
-
'groups.getmembers' => 1,
|
1090 |
-
'intl.gettranslations' => 1,
|
1091 |
-
'links.get' => 1,
|
1092 |
-
'notes.get' => 1,
|
1093 |
-
'notifications.get' => 1,
|
1094 |
-
'pages.getinfo' => 1,
|
1095 |
-
'pages.isadmin' => 1,
|
1096 |
-
'pages.isappadded' => 1,
|
1097 |
-
'pages.isfan' => 1,
|
1098 |
-
'permissions.checkavailableapiaccess' => 1,
|
1099 |
-
'permissions.checkgrantedapiaccess' => 1,
|
1100 |
-
'photos.get' => 1,
|
1101 |
-
'photos.getalbums' => 1,
|
1102 |
-
'photos.gettags' => 1,
|
1103 |
-
'profile.getinfo' => 1,
|
1104 |
-
'profile.getinfooptions' => 1,
|
1105 |
-
'stream.get' => 1,
|
1106 |
-
'stream.getcomments' => 1,
|
1107 |
-
'stream.getfilters' => 1,
|
1108 |
-
'users.getinfo' => 1,
|
1109 |
-
'users.getloggedinuser' => 1,
|
1110 |
-
'users.getstandardinfo' => 1,
|
1111 |
-
'users.hasapppermission' => 1,
|
1112 |
-
'users.isappuser' => 1,
|
1113 |
-
'users.isverified' => 1,
|
1114 |
-
'video.getuploadlimits' => 1);
|
1115 |
-
$name = 'api';
|
1116 |
-
if (isset($READ_ONLY_CALLS[strtolower($method)])) {
|
1117 |
-
$name = 'api_read';
|
1118 |
-
} else if (strtolower($method) == 'video.upload') {
|
1119 |
-
$name = 'api_video';
|
1120 |
-
}
|
1121 |
-
return self::getUrl($name, 'restserver.php');
|
1122 |
-
}
|
1123 |
-
|
1124 |
-
/**
|
1125 |
-
* Build the URL for given domain alias, path and parameters.
|
1126 |
-
*
|
1127 |
-
* @param $name string The name of the domain
|
1128 |
-
* @param $path string Optional path (without a leading slash)
|
1129 |
-
* @param $params array Optional query parameters
|
1130 |
-
*
|
1131 |
-
* @return string The URL for the given parameters
|
1132 |
-
*/
|
1133 |
-
protected function getUrl($name, $path='', $params=array()) {
|
1134 |
-
$url = self::$DOMAIN_MAP[$name];
|
1135 |
-
if ($path) {
|
1136 |
-
if ($path[0] === '/') {
|
1137 |
-
$path = substr($path, 1);
|
1138 |
-
}
|
1139 |
-
$url .= $path;
|
1140 |
-
}
|
1141 |
-
if ($params) {
|
1142 |
-
$url .= '?' . http_build_query($params, null, '&');
|
1143 |
-
}
|
1144 |
-
|
1145 |
-
return $url;
|
1146 |
-
}
|
1147 |
-
|
1148 |
-
protected function getHttpHost() {
|
1149 |
-
if ($this->trustForwarded && isset($_SERVER['HTTP_X_FORWARDED_HOST'])) {
|
1150 |
-
return $_SERVER['HTTP_X_FORWARDED_HOST'];
|
1151 |
-
}
|
1152 |
-
return $_SERVER['HTTP_HOST'];
|
1153 |
-
}
|
1154 |
-
|
1155 |
-
protected function getHttpProtocol() {
|
1156 |
-
if ($this->trustForwarded && isset($_SERVER['HTTP_X_FORWARDED_PROTO'])) {
|
1157 |
-
if ($_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') {
|
1158 |
-
return 'https';
|
1159 |
-
}
|
1160 |
-
return 'http';
|
1161 |
-
}
|
1162 |
-
/*apache + variants specific way of checking for https*/
|
1163 |
-
if (isset($_SERVER['HTTPS']) &&
|
1164 |
-
($_SERVER['HTTPS'] === 'on' || $_SERVER['HTTPS'] == 1)) {
|
1165 |
-
return 'https';
|
1166 |
-
}
|
1167 |
-
/*nginx way of checking for https*/
|
1168 |
-
if (isset($_SERVER['SERVER_PORT']) &&
|
1169 |
-
($_SERVER['SERVER_PORT'] === '443')) {
|
1170 |
-
return 'https';
|
1171 |
-
}
|
1172 |
-
return 'http';
|
1173 |
-
}
|
1174 |
-
|
1175 |
-
/**
|
1176 |
-
* Get the base domain used for the cookie.
|
1177 |
-
*/
|
1178 |
-
protected function getBaseDomain() {
|
1179 |
-
// The base domain is stored in the metadata cookie if not we fallback
|
1180 |
-
// to the current hostname
|
1181 |
-
$metadata = $this->getMetadataCookie();
|
1182 |
-
if (array_key_exists('base_domain', $metadata) &&
|
1183 |
-
!empty($metadata['base_domain'])) {
|
1184 |
-
return trim($metadata['base_domain'], '.');
|
1185 |
-
}
|
1186 |
-
return $this->getHttpHost();
|
1187 |
-
}
|
1188 |
-
|
1189 |
-
/**
|
1190 |
-
|
1191 |
-
/**
|
1192 |
-
* Returns the Current URL, stripping it of known FB parameters that should
|
1193 |
-
* not persist.
|
1194 |
-
*
|
1195 |
-
* @return string The current URL
|
1196 |
-
*/
|
1197 |
-
protected function getCurrentUrl() {
|
1198 |
-
$protocol = $this->getHttpProtocol() . '://';
|
1199 |
-
$host = $this->getHttpHost();
|
1200 |
-
$currentUrl = $protocol.$host.$_SERVER['REQUEST_URI'];
|
1201 |
-
$parts = parse_url($currentUrl);
|
1202 |
-
|
1203 |
-
$query = '';
|
1204 |
-
if (!empty($parts['query'])) {
|
1205 |
-
// drop known fb params
|
1206 |
-
$params = explode('&', $parts['query']);
|
1207 |
-
$retained_params = array();
|
1208 |
-
foreach ($params as $param) {
|
1209 |
-
if ($this->shouldRetainParam($param)) {
|
1210 |
-
$retained_params[] = $param;
|
1211 |
-
}
|
1212 |
-
}
|
1213 |
-
|
1214 |
-
if (!empty($retained_params)) {
|
1215 |
-
$query = '?'.implode($retained_params, '&');
|
1216 |
-
}
|
1217 |
-
}
|
1218 |
-
|
1219 |
-
// use port if non default
|
1220 |
-
$port =
|
1221 |
-
isset($parts['port']) &&
|
1222 |
-
(($protocol === 'http://' && $parts['port'] !== 80) ||
|
1223 |
-
($protocol === 'https://' && $parts['port'] !== 443))
|
1224 |
-
? ':' . $parts['port'] : '';
|
1225 |
-
|
1226 |
-
// rebuild
|
1227 |
-
return $protocol . $parts['host'] . $port . $parts['path'] . $query;
|
1228 |
-
}
|
1229 |
-
|
1230 |
-
/**
|
1231 |
-
* Returns true if and only if the key or key/value pair should
|
1232 |
-
* be retained as part of the query string. This amounts to
|
1233 |
-
* a brute-force search of the very small list of Facebook-specific
|
1234 |
-
* params that should be stripped out.
|
1235 |
-
*
|
1236 |
-
* @param string $param A key or key/value pair within a URL's query (e.g.
|
1237 |
-
* 'foo=a', 'foo=', or 'foo'.
|
1238 |
-
*
|
1239 |
-
* @return boolean
|
1240 |
-
*/
|
1241 |
-
protected function shouldRetainParam($param) {
|
1242 |
-
foreach (self::$DROP_QUERY_PARAMS as $drop_query_param) {
|
1243 |
-
if (strpos($param, $drop_query_param.'=') === 0) {
|
1244 |
-
return false;
|
1245 |
-
}
|
1246 |
-
}
|
1247 |
-
|
1248 |
-
return true;
|
1249 |
-
}
|
1250 |
-
|
1251 |
-
/**
|
1252 |
-
* Analyzes the supplied result to see if it was thrown
|
1253 |
-
* because the access token is no longer valid. If that is
|
1254 |
-
* the case, then we destroy the session.
|
1255 |
-
*
|
1256 |
-
* @param $result array A record storing the error message returned
|
1257 |
-
* by a failed API call.
|
1258 |
-
*/
|
1259 |
-
protected function throwAPIException($result) {
|
1260 |
-
$e = new FacebookApiException($result);
|
1261 |
-
switch ($e->getType()) {
|
1262 |
-
// OAuth 2.0 Draft 00 style
|
1263 |
-
case 'OAuthException':
|
1264 |
-
// OAuth 2.0 Draft 10 style
|
1265 |
-
case 'invalid_token':
|
1266 |
-
// REST server errors are just Exceptions
|
1267 |
-
case 'Exception':
|
1268 |
-
$message = $e->getMessage();
|
1269 |
-
if ((strpos($message, 'Error validating access token') !== false) ||
|
1270 |
-
(strpos($message, 'Invalid OAuth access token') !== false) ||
|
1271 |
-
(strpos($message, 'An active access token must be used') !== false)
|
1272 |
-
) {
|
1273 |
-
$this->destroySession();
|
1274 |
-
}
|
1275 |
-
break;
|
1276 |
-
}
|
1277 |
-
|
1278 |
-
throw $e;
|
1279 |
-
}
|
1280 |
-
|
1281 |
-
|
1282 |
-
/**
|
1283 |
-
* Prints to the error log if you aren't in command line mode.
|
1284 |
-
*
|
1285 |
-
* @param string $msg Log message
|
1286 |
-
*/
|
1287 |
-
protected static function errorLog($msg) {
|
1288 |
-
// disable error log if we are running in a CLI environment
|
1289 |
-
// @codeCoverageIgnoreStart
|
1290 |
-
if (php_sapi_name() != 'cli') {
|
1291 |
-
error_log($msg);
|
1292 |
-
}
|
1293 |
-
// uncomment this if you want to see the errors on the page
|
1294 |
-
// print 'error_log: '.$msg."\n";
|
1295 |
-
// @codeCoverageIgnoreEnd
|
1296 |
-
}
|
1297 |
-
|
1298 |
-
/**
|
1299 |
-
* Base64 encoding that doesn't need to be urlencode()ed.
|
1300 |
-
* Exactly the same as base64_encode except it uses
|
1301 |
-
* - instead of +
|
1302 |
-
* _ instead of /
|
1303 |
-
* No padded =
|
1304 |
-
*
|
1305 |
-
* @param string $input base64UrlEncoded string
|
1306 |
-
* @return string
|
1307 |
-
*/
|
1308 |
-
protected static function base64UrlDecode($input) {
|
1309 |
-
return base64_decode(strtr($input, '-_', '+/'));
|
1310 |
-
}
|
1311 |
-
|
1312 |
-
/**
|
1313 |
-
* Base64 encoding that doesn't need to be urlencode()ed.
|
1314 |
-
* Exactly the same as base64_encode except it uses
|
1315 |
-
* - instead of +
|
1316 |
-
* _ instead of /
|
1317 |
-
*
|
1318 |
-
* @param string $input string
|
1319 |
-
* @return string base64Url encoded string
|
1320 |
-
*/
|
1321 |
-
protected static function base64UrlEncode($input) {
|
1322 |
-
$str = strtr(base64_encode($input), '+/', '-_');
|
1323 |
-
$str = str_replace('=', '', $str);
|
1324 |
-
return $str;
|
1325 |
-
}
|
1326 |
-
|
1327 |
-
/**
|
1328 |
-
* Destroy the current session
|
1329 |
-
*/
|
1330 |
-
public function destroySession() {
|
1331 |
-
$this->accessToken = null;
|
1332 |
-
$this->signedRequest = null;
|
1333 |
-
$this->user = null;
|
1334 |
-
$this->clearAllPersistentData();
|
1335 |
-
|
1336 |
-
// Javascript sets a cookie that will be used in getSignedRequest that we
|
1337 |
-
// need to clear if we can
|
1338 |
-
$cookie_name = $this->getSignedRequestCookieName();
|
1339 |
-
if (array_key_exists($cookie_name, $_COOKIE)) {
|
1340 |
-
unset($_COOKIE[$cookie_name]);
|
1341 |
-
if (!headers_sent()) {
|
1342 |
-
$base_domain = $this->getBaseDomain();
|
1343 |
-
setcookie($cookie_name, '', 1, '/', '.'.$base_domain);
|
1344 |
-
} else {
|
1345 |
-
// @codeCoverageIgnoreStart
|
1346 |
-
self::errorLog(
|
1347 |
-
'There exists a cookie that we wanted to clear that we couldn\'t '.
|
1348 |
-
'clear because headers was already sent. Make sure to do the first '.
|
1349 |
-
'API call before outputing anything.'
|
1350 |
-
);
|
1351 |
-
// @codeCoverageIgnoreEnd
|
1352 |
-
}
|
1353 |
-
}
|
1354 |
-
}
|
1355 |
-
|
1356 |
-
/**
|
1357 |
-
* Parses the metadata cookie that our Javascript API set
|
1358 |
-
*
|
1359 |
-
* @return an array mapping key to value
|
1360 |
-
*/
|
1361 |
-
protected function getMetadataCookie() {
|
1362 |
-
$cookie_name = $this->getMetadataCookieName();
|
1363 |
-
if (!array_key_exists($cookie_name, $_COOKIE)) {
|
1364 |
-
return array();
|
1365 |
-
}
|
1366 |
-
|
1367 |
-
// The cookie value can be wrapped in "-characters so remove them
|
1368 |
-
$cookie_value = trim($_COOKIE[$cookie_name], '"');
|
1369 |
-
|
1370 |
-
if (empty($cookie_value)) {
|
1371 |
-
return array();
|
1372 |
-
}
|
1373 |
-
|
1374 |
-
$parts = explode('&', $cookie_value);
|
1375 |
-
$metadata = array();
|
1376 |
-
foreach ($parts as $part) {
|
1377 |
-
$pair = explode('=', $part, 2);
|
1378 |
-
if (!empty($pair[0])) {
|
1379 |
-
$metadata[urldecode($pair[0])] =
|
1380 |
-
(count($pair) > 1) ? urldecode($pair[1]) : '';
|
1381 |
-
}
|
1382 |
-
}
|
1383 |
-
|
1384 |
-
return $metadata;
|
1385 |
-
}
|
1386 |
-
|
1387 |
-
protected static function isAllowedDomain($big, $small) {
|
1388 |
-
if ($big === $small) {
|
1389 |
-
return true;
|
1390 |
-
}
|
1391 |
-
return self::endsWith($big, '.'.$small);
|
1392 |
-
}
|
1393 |
-
|
1394 |
-
protected static function endsWith($big, $small) {
|
1395 |
-
$len = strlen($small);
|
1396 |
-
if ($len === 0) {
|
1397 |
-
return true;
|
1398 |
-
}
|
1399 |
-
return substr($big, -$len) === $small;
|
1400 |
-
}
|
1401 |
-
|
1402 |
-
/**
|
1403 |
-
* Each of the following four methods should be overridden in
|
1404 |
-
* a concrete subclass, as they are in the provided Facebook class.
|
1405 |
-
* The Facebook class uses PHP sessions to provide a primitive
|
1406 |
-
* persistent store, but another subclass--one that you implement--
|
1407 |
-
* might use a database, memcache, or an in-memory cache.
|
1408 |
-
*
|
1409 |
-
* @see Facebook
|
1410 |
-
*/
|
1411 |
-
|
1412 |
-
/**
|
1413 |
-
* Stores the given ($key, $value) pair, so that future calls to
|
1414 |
-
* getPersistentData($key) return $value. This call may be in another request.
|
1415 |
-
*
|
1416 |
-
* @param string $key
|
1417 |
-
* @param array $value
|
1418 |
-
*
|
1419 |
-
* @return void
|
1420 |
-
*/
|
1421 |
-
abstract protected function setPersistentData($key, $value);
|
1422 |
-
|
1423 |
-
/**
|
1424 |
-
* Get the data for $key, persisted by BaseFacebook::setPersistentData()
|
1425 |
-
*
|
1426 |
-
* @param string $key The key of the data to retrieve
|
1427 |
-
* @param boolean $default The default value to return if $key is not found
|
1428 |
-
*
|
1429 |
-
* @return mixed
|
1430 |
-
*/
|
1431 |
-
abstract protected function getPersistentData($key, $default = false);
|
1432 |
-
|
1433 |
-
/**
|
1434 |
-
* Clear the data with $key from the persistent storage
|
1435 |
-
*
|
1436 |
-
* @param string $key
|
1437 |
-
* @return void
|
1438 |
-
*/
|
1439 |
-
abstract protected function clearPersistentData($key);
|
1440 |
-
|
1441 |
-
/**
|
1442 |
-
* Clear all data from the persistent storage
|
1443 |
-
*
|
1444 |
-
* @return void
|
1445 |
-
*/
|
1446 |
-
abstract protected function clearAllPersistentData();
|
1447 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
sdk/facebook.php
DELETED
@@ -1,155 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Copyright 2011 Facebook, Inc.
|
4 |
-
*
|
5 |
-
* Licensed under the Apache License, Version 2.0 (the "License"); you may
|
6 |
-
* not use this file except in compliance with the License. You may obtain
|
7 |
-
* a copy of the License at
|
8 |
-
*
|
9 |
-
* http://www.apache.org/licenses/LICENSE-2.0
|
10 |
-
*
|
11 |
-
* Unless required by applicable law or agreed to in writing, software
|
12 |
-
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
13 |
-
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
14 |
-
* License for the specific language governing permissions and limitations
|
15 |
-
* under the License.
|
16 |
-
*/
|
17 |
-
|
18 |
-
require_once "base_facebook.php";
|
19 |
-
|
20 |
-
/**
|
21 |
-
* Extends the BaseFacebook class with the intent of using
|
22 |
-
* PHP sessions to store user ids and access tokens.
|
23 |
-
*/
|
24 |
-
class Facebook extends BaseFacebook
|
25 |
-
{
|
26 |
-
const FBSS_COOKIE_NAME = 'fbss';
|
27 |
-
|
28 |
-
// We can set this to a high number because the main session
|
29 |
-
// expiration will trump this.
|
30 |
-
const FBSS_COOKIE_EXPIRE = 31556926; // 1 year
|
31 |
-
|
32 |
-
// Stores the shared session ID if one is set.
|
33 |
-
protected $sharedSessionID;
|
34 |
-
|
35 |
-
/**
|
36 |
-
* Identical to the parent constructor, except that
|
37 |
-
* we start a PHP session to store the user ID and
|
38 |
-
* access token if during the course of execution
|
39 |
-
* we discover them.
|
40 |
-
*
|
41 |
-
* @param Array $config the application configuration. Additionally
|
42 |
-
* accepts "sharedSession" as a boolean to turn on a secondary
|
43 |
-
* cookie for environments with a shared session (that is, your app
|
44 |
-
* shares the domain with other apps).
|
45 |
-
* @see BaseFacebook::__construct in facebook.php
|
46 |
-
*/
|
47 |
-
public function __construct($config) {
|
48 |
-
if (!session_id()) {
|
49 |
-
session_start();
|
50 |
-
}
|
51 |
-
parent::__construct($config);
|
52 |
-
if (!empty($config['sharedSession'])) {
|
53 |
-
$this->initSharedSession();
|
54 |
-
}
|
55 |
-
}
|
56 |
-
|
57 |
-
protected static $kSupportedKeys =
|
58 |
-
array('state', 'code', 'access_token', 'user_id');
|
59 |
-
|
60 |
-
protected function initSharedSession() {
|
61 |
-
$cookie_name = $this->getSharedSessionCookieName();
|
62 |
-
if (isset($_COOKIE[$cookie_name])) {
|
63 |
-
$data = $this->parseSignedRequest($_COOKIE[$cookie_name]);
|
64 |
-
if ($data && !empty($data['domain']) &&
|
65 |
-
self::isAllowedDomain($this->getHttpHost(), $data['domain'])) {
|
66 |
-
// good case
|
67 |
-
$this->sharedSessionID = $data['id'];
|
68 |
-
return;
|
69 |
-
}
|
70 |
-
// ignoring potentially unreachable data
|
71 |
-
}
|
72 |
-
// evil/corrupt/missing case
|
73 |
-
$base_domain = $this->getBaseDomain();
|
74 |
-
$this->sharedSessionID = md5(uniqid(mt_rand(), true));
|
75 |
-
$cookie_value = $this->makeSignedRequest(
|
76 |
-
array(
|
77 |
-
'domain' => $base_domain,
|
78 |
-
'id' => $this->sharedSessionID,
|
79 |
-
)
|
80 |
-
);
|
81 |
-
$_COOKIE[$cookie_name] = $cookie_value;
|
82 |
-
if (!headers_sent()) {
|
83 |
-
$expire = time() + self::FBSS_COOKIE_EXPIRE;
|
84 |
-
setcookie($cookie_name, $cookie_value, $expire, '/', '.'.$base_domain);
|
85 |
-
} else {
|
86 |
-
// @codeCoverageIgnoreStart
|
87 |
-
self::errorLog(
|
88 |
-
'Shared session ID cookie could not be set! You must ensure you '.
|
89 |
-
'create the Facebook instance before headers have been sent. This '.
|
90 |
-
'will cause authentication issues after the first request.'
|
91 |
-
);
|
92 |
-
// @codeCoverageIgnoreEnd
|
93 |
-
}
|
94 |
-
}
|
95 |
-
|
96 |
-
/**
|
97 |
-
* Provides the implementations of the inherited abstract
|
98 |
-
* methods. The implementation uses PHP sessions to maintain
|
99 |
-
* a store for authorization codes, user ids, CSRF states, and
|
100 |
-
* access tokens.
|
101 |
-
*/
|
102 |
-
protected function setPersistentData($key, $value) {
|
103 |
-
if (!in_array($key, self::$kSupportedKeys)) {
|
104 |
-
self::errorLog('Unsupported key passed to setPersistentData.');
|
105 |
-
return;
|
106 |
-
}
|
107 |
-
set_site_transient( nextend_uniqid().'_fb_'.$key, $value, 3600);
|
108 |
-
}
|
109 |
-
|
110 |
-
protected function getPersistentData($key, $default = false) {
|
111 |
-
if (!in_array($key, self::$kSupportedKeys)) {
|
112 |
-
self::errorLog('Unsupported key passed to getPersistentData.');
|
113 |
-
return $default;
|
114 |
-
}
|
115 |
-
$data = get_site_transient( nextend_uniqid().'_fb_'.$key);
|
116 |
-
|
117 |
-
return $data ? $data : $default;
|
118 |
-
}
|
119 |
-
|
120 |
-
protected function clearPersistentData($key) {
|
121 |
-
if (!in_array($key, self::$kSupportedKeys)) {
|
122 |
-
self::errorLog('Unsupported key passed to clearPersistentData.');
|
123 |
-
return;
|
124 |
-
}
|
125 |
-
delete_site_transient( nextend_uniqid().'_fb_'.$key);
|
126 |
-
}
|
127 |
-
|
128 |
-
protected function clearAllPersistentData() {
|
129 |
-
foreach (self::$kSupportedKeys as $key) {
|
130 |
-
$this->clearPersistentData($key);
|
131 |
-
}
|
132 |
-
if ($this->sharedSessionID) {
|
133 |
-
$this->deleteSharedSessionCookie();
|
134 |
-
}
|
135 |
-
}
|
136 |
-
|
137 |
-
protected function deleteSharedSessionCookie() {
|
138 |
-
$cookie_name = $this->getSharedSessionCookieName();
|
139 |
-
unset($_COOKIE[$cookie_name]);
|
140 |
-
$base_domain = $this->getBaseDomain();
|
141 |
-
setcookie($cookie_name, '', 1, '/', '.'.$base_domain);
|
142 |
-
}
|
143 |
-
|
144 |
-
protected function getSharedSessionCookieName() {
|
145 |
-
return self::FBSS_COOKIE_NAME . '_' . $this->getAppId();
|
146 |
-
}
|
147 |
-
|
148 |
-
protected function constructSessionVariableName($key) {
|
149 |
-
$parts = array('fb', $this->getAppId(), $key);
|
150 |
-
if ($this->sharedSessionID) {
|
151 |
-
array_unshift($parts, $this->sharedSessionID);
|
152 |
-
}
|
153 |
-
return implode('_', $parts);
|
154 |
-
}
|
155 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
sdk/fb_ca_chain_bundle.crt
DELETED
@@ -1,3920 +0,0 @@
|
|
1 |
-
##
|
2 |
-
## ca-bundle.crt -- Bundle of CA Root Certificates
|
3 |
-
##
|
4 |
-
## Certificate data from Mozilla as of: Thu Oct 18 19:05:59 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.86 $ $Date: 2012/10/18 16:26:52 $
|
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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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-
KGNZMN9QAZxjiRqf2xeUgnA3wySemkfWWspOqGmJch+RbNt+nhutxx9z3SxPGWX9f5NAEC7S8O08
|
731 |
-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
-
XG0D08DYj3rWMB8GA1UdIwQYMBaAFNq7LqqwDLiIJlF0XG0D08DYj3rWMA4GA1UdDwEB/wQEAwIB
|
733 |
-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
-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
-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
-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
-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
-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
-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
-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
-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
|
742 |
-
P/rmMuGNG2+k5o7Y+SlIis5z/iw=
|
743 |
-
-----END CERTIFICATE-----
|
744 |
-
|
745 |
-
GeoTrust Universal CA 2
|
746 |
-
=======================
|
747 |
-
-----BEGIN CERTIFICATE-----
|
748 |
-
MIIFbDCCA1SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBHMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN
|
749 |
-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
-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
-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
-
A4ICDwAwggIKAoICAQCzVFLByT7y2dyxUxpZKeexw0Uo5dfR7cXFS6GqdHtXr0om/Nj1XqduGdt0
|
753 |
-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
-
j1hhNNwqCPkuwwGmIkQcTAeC5lvO0Ep8BNMZcyfwqph/Lq9O64ceJHdqXbboW0W63MOhBW9Wjo8Q
|
755 |
-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
-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
-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
-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
-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
-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
-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
-
+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
-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
-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
-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
-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
-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
-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
-
pm8m1wk8OhwRDqZsN/etRIcsKMfYdIKz0G9KV7s1KSegi+ghp4dkNl3M2Basx7InQJJVOCiNUW7d
|
770 |
-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
-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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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
-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
-
Y2F0aW9uIEF1dGhvcml0eSAyMB4XDTAyMDUyODA2MDAwMFoXDTM3MDkyOTE0MDgwMFowYzELMAkG
|
828 |
-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
-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
-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
-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
-
f3SkWq7xuhG1m1hagLQ3eAkzfDJHA1zEpYNI9FdWboE2JxhP7JsowtS013wMPgwr38oE18aO6lhO
|
833 |
-
qKSlGBxsRZijQdEt0sdtjRnxrXm3gT+9BoInLRBYBbV4Bbkv2wxrkJB+FFk4u5QkE+XRnRTf04JN
|
834 |
-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
-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
-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
-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
-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
-
B453cMor9H124HhnAgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFE1FwWg4u3Op
|
840 |
-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
-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
-
T15R/LKXeydlwuXK5w0MJXti4/qftIe3RUavg6WXSIylvfEWK5t2LHo1YGwRgJfMqZJS5ivmae2p
|
843 |
-
+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
-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
-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
-
ZtMADjMSW7yV5TKQqLPGbIOtd+6Lfn6xqavT4fG2wLHqiMDn05DpKJKUe2h7lyoKZy2FAjgQ5ANh
|
847 |
-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
-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
-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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 |
-
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
-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
-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
-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
-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
-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
-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
-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
-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
-
66/3FsvbzSUr5R/7mp/iUcw6UwxI5g69ybR2BlLmEROFcmMDBOAENisgGQLodKcftslWZvB1Jdxn
|
1013 |
-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
-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
-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
-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
-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
-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
-
ElF1b1ZhZGlzIFJvb3QgQ0EgMoICBQkwDQYJKoZIhvcNAQEFBQADggIBAD4KFk2fBluornFdLwUv
|
1020 |
-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
-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
-
VjB3pjd4M1IQWK4/YY7yarHvGH5KWWPKjaJW1acvvFYfzznB4vsKqBUsfU16Y8Zsl0Q80m/DShcK
|
1023 |
-
+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
-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
-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
-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
-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
-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
|
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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
-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
-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
-
dmVybm1lbnQgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEBBQAD
|
1606 |
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-
Zwj/5cAWtUgBfen5Cv8b5Wppv3ghqMKnI6mGq3ZW6A4M9hPdKmaKZEk9GhiHkASfQlK3T8v+R0F2
|
1620 |
-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
-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
-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
-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
-
7tfGOB5jGxI7leFYrPLfhNVfmS8NVVvmONsuP3LpSIXLuykTjx44VbnzssQwmSNOXfJIoRIM3BKQ
|
1625 |
-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
-
+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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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
-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
-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
-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
-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
-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
-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
-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
-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
-
b6dJtDZd0KTeByy2dbcokdaXvij1mB7qWybJvbCXc9qukSbraMH5ORXWZ0sKbU/Lz7DkQnGMU3nn
|
1690 |
-
7uHbHaBuHYwadzVcFh4rUx80i9Fs/PJnB3r1re3WmquhsUvhzDdf/X/NTa64H5xD+SpYVUNFvJbN
|
1691 |
-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
-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
-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
-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
-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
-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
-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
-
jgM+pN0S734edAY8PzHyHHuRMSG08NBsl9Tpl7IkVh5WwzW9iAUPWxAaZOHHgjD5Mq2eUCzneAXQ
|
1699 |
-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
-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
-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
-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
-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
-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
-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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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
-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
-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
-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
-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
-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
-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
-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
-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
-
8++QHkwFix7qepF6w9fl+zC8bBsQWJj3Gl/QKTIDE0ZNYWqFTFJ0LwYfexHihJfGmfNtf9dng34T
|
1902 |
-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
-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
-
+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
-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
-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
-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
-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
-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
-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
-
U99REJNi54Av4tHgvI42Rncz7Lj7jposiU0xEQ8mngS7twSNC/K5/FqdOxa3L8iYq/6KUFkuozv8
|
1912 |
-
KV2LwUvJ4ooTHbG/u0IdUt1O2BReEMYxB+9xJ/cbOQncguqLs5WGXv312l0xpuAxtpTmREl0xRbl
|
1913 |
-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
-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
-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
-
Mdp08YSTcU1f+2BY0fvEwW2JorsgH51xkcsymxM9Pn2SUjWskpSi0xjCfMfqr3YFFt1nJ8J+HAci
|
1917 |
-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
|
1918 |
-
-----END CERTIFICATE-----
|
1919 |
-
|
1920 |
-
SwissSign Gold CA - G2
|
1921 |
-
======================
|
1922 |
-
-----BEGIN CERTIFICATE-----
|
1923 |
-
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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-
vC24JdVUorgG6q2SpCSgwYa1ShNqR88uC1aVVMvOmttqtKay20EIhid392qgQmwLOM7XdVAyksLf
|
1946 |
-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
-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
-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
|
1949 |
-
-----END CERTIFICATE-----
|
1950 |
-
|
1951 |
-
SwissSign Silver CA - G2
|
1952 |
-
========================
|
1953 |
-
-----BEGIN CERTIFICATE-----
|
1954 |
-
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
-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
-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
-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
-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
-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
-
+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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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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 |
-
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
-
EwJUVzEjMCEGA1UECgwaQ2h1bmdod2EgVGVsZWNvbSBDby4sIEx0ZC4xKjAoBgNVBAsMIWVQS0kg
|
2549 |
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-
MAwGA1UdEwQFMAMBAf8wOQYEZyoHAAQxMC8wLQIBADAJBgUrDgMCGgUAMAcGBWcqAwAABBRFsMLH
|
2563 |
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
|
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 |
-
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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
|
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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
-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
-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
-
TkwxHjAcBgNVBAoMFVN0YWF0IGRlciBOZWRlcmxhbmRlbjErMCkGA1UEAwwiU3RhYXQgZGVyIE5l
|
2899 |
-
ZGVybGFuZGVuIFJvb3QgQ0EgLSBHMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMVZ
|
2900 |
-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
-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
-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
-
e7Iwr/g3wtG61jj99O9JMDeZJiFIhQGp5Rbn3JBV3w/oOM2ZNyFPXfUib2rFEhZgF1XyZWampzCR
|
2904 |
-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
-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
-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
-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
-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
-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
-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
-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
-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
-
+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
-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
-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
-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
-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
-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
-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
-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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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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-
bS5lZGljb21ncm91cC5jb20vZG9jMA0GCSqGSIb3DQEBBQUAA4ICAQDOLAtSUWImfQwng4/F9tqg
|
3037 |
-
aHtPkl7qpHMyEVNEskTLnewPeUKzEKbHDZ3Ltvo/Onzqv4hTGzz3gvoFNTPhNahXwOf9jU8/kzJP
|
3038 |
-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
-
zQSulgUV1qzOMPPKC8W64iLgpq0i5ALudBF/TP94HTXa5gI06xgSYXcGCRZj6hitoocf8seACQl1
|
3040 |
-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
-
KiMnMCArz+2UW6yyetLHKKGKC5tNSixthT8Jcjxn4tncB7rrZXtaAWPWkFtPF2Y9fwsZo5NjEFIq
|
3042 |
-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
-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
-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
-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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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
-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
-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
-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
-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
-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
-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
-
+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
-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
-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
-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
-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
-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
-
+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
-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
-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
-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
-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
-
L5Nwpamcb6d9Ex1+xghIsV5n61EIJenmJWtSKZGc0jlzCFfemQa0W50QBuHCAKi4HEoCChTQwUHK
|
3441 |
-
+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
-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
-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
-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
-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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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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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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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
-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
-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
-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
-
dHkgRzIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2iTZbB7cgNr2Cu+EWIAOVeq8O
|
3769 |
-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
-
4A/LnooUCri99lZi8cVytjIl2bLzvWXFDSxu1ZJvGIsAQRSCb0AgJnooD/Uefyf3lLE3PbfHkffi
|
3771 |
-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
-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
-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
-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
-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
-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
-
z6eg6+OGCtP95paV1yPIN93EfKo2rJgaErHgTuixO/XWb/Ew1wIDAQABo0IwQDAPBgNVHRMBAf8E
|
3778 |
-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
-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
-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
-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
-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
-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
-
nIhT76IxW1hPkWLIwpqazRVdOKnWvvgTtZ8SafJQYqz7Fzf07rh1Z2AQ+4NQ+US1dZxAF7L+/Xld
|
3785 |
-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
-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
-
7XtH/UVVMKTumtTm4ofvmMkyghEpIrwACjFeLQ/Ajulrso8uBtjRkcfGEvRM/TAXw8HaOFvjqerm
|
3788 |
-
obp573PYtlNXLfbQ4ddI
|
3789 |
-
-----END CERTIFICATE-----
|
3790 |
-
|
3791 |
-
Buypass Class 2 Root CA
|
3792 |
-
=======================
|
3793 |
-
-----BEGIN CERTIFICATE-----
|
3794 |
-
MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU
|
3795 |
-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
-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
-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
-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
-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
-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
-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
-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
-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
-
zRFo1clrUs3ERo/ctfPYV3Me6ZQ5BL/T3jjetFPsaRyifsSP5BtwrfKi+fv3FmRmaZ9JUaLiFRhn
|
3805 |
-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
-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
-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
-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
-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
-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
-
osHsHdb9T7bWR9AUC8rmyrV7d35BH16Dx7aMOZawP5aBQW9gkOLo+fsicdl9sz1Gv7SEr5AcD48S
|
3812 |
-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
-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
-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
-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
-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
-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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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
-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
-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
-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
-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
-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
-
5r/VUv1xLXA+58bEiuPwKAv0dpihi4dVsjoT/Lc+JzeOIuOoTyrvYLs9tznDDgFHmV0ST9tD+leh
|
3831 |
-
7fmdvhFHJlsTmKtdFoqwNxxXnUX/iJY2v7vKB3tvh2PX0DJq1l1sDPGzbjniazEuOQAnFN44wOwZ
|
3832 |
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
|
3848 |
-
Cp/HuZc=
|
3849 |
-
-----END CERTIFICATE-----
|
3850 |
-
|
3851 |
-
TÜRKTRUST Elektronik Sertifika Hizmet Sağlayıcısı
|
3852 |
-
======================================================
|
3853 |
-
-----BEGIN CERTIFICATE-----
|
3854 |
-
MIIEPTCCAyWgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBvzE/MD0GA1UEAww2VMOcUktUUlVTVCBF
|
3855 |
-
bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJUUjEP
|
3856 |
-
MA0GA1UEBwwGQW5rYXJhMV4wXAYDVQQKDFVUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUg
|
3857 |
-
QmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLiAoYykgQXJhbMSxayAyMDA3MB4X
|
3858 |
-
DTA3MTIyNTE4MzcxOVoXDTE3MTIyMjE4MzcxOVowgb8xPzA9BgNVBAMMNlTDnFJLVFJVU1QgRWxl
|
3859 |
-
a3Ryb25payBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsTELMAkGA1UEBhMCVFIxDzAN
|
3860 |
-
BgNVBAcMBkFua2FyYTFeMFwGA1UECgxVVMOcUktUUlVTVCBCaWxnaSDEsGxldGnFn2ltIHZlIEJp
|
3861 |
-
bGnFn2ltIEfDvHZlbmxpxJ9pIEhpem1ldGxlcmkgQS7Fni4gKGMpIEFyYWzEsWsgMjAwNzCCASIw
|
3862 |
-
DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKu3PgqMyKVYFeaK7yc9SrToJdPNM8Ig3BnuiD9N
|
3863 |
-
YvDdE3ePYakqtdTyuTFYKTsvP2qcb3N2Je40IIDu6rfwxArNK4aUyeNgsURSsloptJGXg9i3phQv
|
3864 |
-
KUmi8wUG+7RP2qFsmmaf8EMJyupyj+sA1zU511YXRxcw9L6/P8JorzZAwan0qafoEGsIiveGHtya
|
3865 |
-
KhUG9qPw9ODHFNRRf8+0222vR5YXm3dx2KdxnSQM9pQ/hTEST7ruToK4uT6PIzdezKKqdfcYbwnT
|
3866 |
-
rqdUKDT74eA7YH2gvnmJhsifLfkKS8RQouf9eRbHegsYz85M733WB2+Y8a+xwXrXgTW4qhe04MsC
|
3867 |
-
AwEAAaNCMEAwHQYDVR0OBBYEFCnFkKslrxHkYb+j/4hhkeYO/pyBMA4GA1UdDwEB/wQEAwIBBjAP
|
3868 |
-
BgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBBQUAA4IBAQAQDdr4Ouwo0RSVgrESLFF6QSU2TJ/s
|
3869 |
-
Px+EnWVUXKgWAkD6bho3hO9ynYYKVZ1WKKxmLNA6VpM0ByWtCLCPyA8JWcqdmBzlVPi5RX9ql2+I
|
3870 |
-
aE1KBiY3iAIOtsbWcpnOa3faYjGkVh+uX4132l32iPwa2Z61gfAyuOOI0JzzaqC5mxRZNTZPz/OO
|
3871 |
-
Xl0XrRWV2N2y1RVuAE6zS89mlOTgzbUF2mNXi+WzqtvALhyQRNsaXRik7r4EW5nVcV9VZWRi1aKb
|
3872 |
-
BFmGyGJ353yCRWo9F7/snXUMrqNvWtMvmDb08PUZqxFdyKbjKlhqQgnDvZImZjINXQhVdP+MmNAK
|
3873 |
-
poRq0Tl9
|
3874 |
-
-----END CERTIFICATE-----
|
3875 |
-
|
3876 |
-
T-TeleSec GlobalRoot Class 3
|
3877 |
-
============================
|
3878 |
-
-----BEGIN CERTIFICATE-----
|
3879 |
-
MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoM
|
3880 |
-
IlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBU
|
3881 |
-
cnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwHhcNMDgx
|
3882 |
-
MDAxMTAyOTU2WhcNMzMxMDAxMjM1OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lz
|
3883 |
-
dGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBD
|
3884 |
-
ZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwggEiMA0GCSqGSIb3
|
3885 |
-
DQEBAQUAA4IBDwAwggEKAoIBAQC9dZPwYiJvJK7genasfb3ZJNW4t/zN8ELg63iIVl6bmlQdTQyK
|
3886 |
-
9tPPcPRStdiTBONGhnFBSivwKixVA9ZIw+A5OO3yXDw/RLyTPWGrTs0NvvAgJ1gORH8EGoel15YU
|
3887 |
-
NpDQSXuhdfsaa3Ox+M6pCSzyU9XDFES4hqX2iys52qMzVNn6chr3IhUciJFrf2blw2qAsCTz34ZF
|
3888 |
-
iP0Zf3WHHx+xGwpzJFu5ZeAsVMhg02YXP+HMVDNzkQI6pn97djmiH5a2OK61yJN0HZ65tOVgnS9W
|
3889 |
-
0eDrXltMEnAMbEQgqxHY9Bn20pxSN+f6tsIxO0rUFJmtxxr1XV/6B7h8DR/Wgx6zAgMBAAGjQjBA
|
3890 |
-
MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS1A/d2O2GCahKqGFPr
|
3891 |
-
AyGUv/7OyjANBgkqhkiG9w0BAQsFAAOCAQEAVj3vlNW92nOyWL6ukK2YJ5f+AbGwUgC4TeQbIXQb
|
3892 |
-
fsDuXmkqJa9c1h3a0nnJ85cp4IaH3gRZD/FZ1GSFS5mvJQQeyUapl96Cshtwn5z2r3Ex3XsFpSzT
|
3893 |
-
ucpH9sry9uetuUg/vBa3wW306gmv7PO15wWeph6KU1HWk4HMdJP2udqmJQV0eVp+QD6CSyYRMG7h
|
3894 |
-
P0HHRwA11fXT91Q+gT3aSWqas+8QPebrb9HIIkfLzM8BMZLZGOMivgkeGj5asuRrDFR6fUNOuIml
|
3895 |
-
e9eiPZaGzPImNC1qkp2aGtAw4l1OBLBfiyB+d8E9lYLRRpo7PHi4b6HQDWSieB4pTpPDpFQUWw==
|
3896 |
-
-----END CERTIFICATE-----
|
3897 |
-
|
3898 |
-
EE Certification Centre Root CA
|
3899 |
-
===============================
|
3900 |
-
-----BEGIN CERTIFICATE-----
|
3901 |
-
MIIEAzCCAuugAwIBAgIQVID5oHPtPwBMyonY43HmSjANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQG
|
3902 |
-
EwJFRTEiMCAGA1UECgwZQVMgU2VydGlmaXRzZWVyaW1pc2tlc2t1czEoMCYGA1UEAwwfRUUgQ2Vy
|
3903 |
-
dGlmaWNhdGlvbiBDZW50cmUgUm9vdCBDQTEYMBYGCSqGSIb3DQEJARYJcGtpQHNrLmVlMCIYDzIw
|
3904 |
-
MTAxMDMwMTAxMDMwWhgPMjAzMDEyMTcyMzU5NTlaMHUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKDBlB
|
3905 |
-
UyBTZXJ0aWZpdHNlZXJpbWlza2Vza3VzMSgwJgYDVQQDDB9FRSBDZXJ0aWZpY2F0aW9uIENlbnRy
|
3906 |
-
ZSBSb290IENBMRgwFgYJKoZIhvcNAQkBFglwa2lAc2suZWUwggEiMA0GCSqGSIb3DQEBAQUAA4IB
|
3907 |
-
DwAwggEKAoIBAQDIIMDs4MVLqwd4lfNE7vsLDP90jmG7sWLqI9iroWUyeuuOF0+W2Ap7kaJjbMeM
|
3908 |
-
TC55v6kF/GlclY1i+blw7cNRfdCT5mzrMEvhvH2/UpvObntl8jixwKIy72KyaOBhU8E2lf/slLo2
|
3909 |
-
rpwcpzIP5Xy0xm90/XsY6KxX7QYgSzIwWFv9zajmofxwvI6Sc9uXp3whrj3B9UiHbCe9nyV0gVWw
|
3910 |
-
93X2PaRka9ZP585ArQ/dMtO8ihJTmMmJ+xAdTX7Nfh9WDSFwhfYggx/2uh8Ej+p3iDXE/+pOoYtN
|
3911 |
-
P2MbRMNE1CV2yreN1x5KZmTNXMWcg+HCCIia7E6j8T4cLNlsHaFLAgMBAAGjgYowgYcwDwYDVR0T
|
3912 |
-
AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBLyWj7qVhy/zQas8fElyalL1BSZ
|
3913 |
-
MEUGA1UdJQQ+MDwGCCsGAQUFBwMCBggrBgEFBQcDAQYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEF
|
3914 |
-
BQcDCAYIKwYBBQUHAwkwDQYJKoZIhvcNAQEFBQADggEBAHv25MANqhlHt01Xo/6tu7Fq1Q+e2+Rj
|
3915 |
-
xY6hUFaTlrg4wCQiZrxTFGGVv9DHKpY5P30osxBAIWrEr7BSdxjhlthWXePdNl4dp1BUoMUq5KqM
|
3916 |
-
lIpPnTX/dqQGE5Gion0ARD9V04I8GtVbvFZMIi5GQ4okQC3zErg7cBqklrkar4dBGmoYDQZPxz5u
|
3917 |
-
uSlNDUmJEYcyW+ZLBMjkXOZ0c5RdFpgTlf7727FE5TpwrDdr5rMzcijJs1eg9gIWiAYLtqZLICjU
|
3918 |
-
3j2LrTcFU3T+bsy8QxdxXvnFzBqpYe73dgzzcvRyrc9yAjYHR8/vGVCJYMzpJJUPwssd8m92kMfM
|
3919 |
-
dcGWxZ0=
|
3920 |
-
-----END CERTIFICATE-----
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
sdk/index.html
DELETED
File without changes
|
sdk/init.php
DELETED
@@ -1,33 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/* Copyright 2012 Roland Soos - Nextend (email : roland@nextendweb.com)
|
3 |
-
|
4 |
-
This program is free software; you can redistribute it and/or modify
|
5 |
-
it under the terms of the GNU General Public License, version 2, as
|
6 |
-
published by the Free Software Foundation.
|
7 |
-
|
8 |
-
This program is distributed in the hope that it will be useful,
|
9 |
-
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
10 |
-
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
11 |
-
GNU General Public License for more details.
|
12 |
-
|
13 |
-
You should have received a copy of the GNU General Public License
|
14 |
-
along with this program; if not, write to the Free Software
|
15 |
-
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
16 |
-
*/
|
17 |
-
if ( !defined( 'NEW_FB_LOGIN' ) ) {
|
18 |
-
return;
|
19 |
-
}
|
20 |
-
|
21 |
-
if(!class_exists('Facebook')){
|
22 |
-
require(dirname(__FILE__).'/facebook.php');
|
23 |
-
}
|
24 |
-
|
25 |
-
$settings = maybe_unserialize(get_option('nextend_fb_connect'));
|
26 |
-
|
27 |
-
if(defined('NEXTEND_FB_APP_ID')) $settings['fb_appid'] = NEXTEND_FB_APP_ID;
|
28 |
-
if(defined('NEXTEND_FB_APP_SECRET')) $settings['fb_secret'] = NEXTEND_FB_APP_SECRET;
|
29 |
-
|
30 |
-
$facebook = new Facebook(array(
|
31 |
-
'appId' => $settings['fb_appid'],
|
32 |
-
'secret' => $settings['fb_secret'],
|
33 |
-
));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|