Version Description
- Improvement: Backup process will only backup WordPress tables which have configured prefix in wp-config.php.
- Improvement: Support for Google Drive for cloud backup addon.
- Improvement: Minor improvements.
- Fix: Bug fixes
Download this release
Release Info
Developer | infinitewp |
Plugin | InfiniteWP Client |
Version | 1.2.12 |
Comparing to | |
See all releases |
Code changes from version 1.2.11 to 1.2.12
- addons/backup_repository/backup_repository.class.php +44 -3
- addons/comments/comments.class.php +1 -1
- addons/manage_users/user.class.php +2 -2
- addons/post_links/post.class.php +1 -1
- backup.class.php +394 -7
- helper.class.php +1 -1
- init.php +2 -2
- lib/Google/Auth/Abstract.php +41 -0
- lib/Google/Auth/AssertionCredentials.php +133 -0
- lib/Google/Auth/Exception.php +22 -0
- lib/Google/Auth/LoginTicket.php +69 -0
- lib/Google/Auth/OAuth2.php +587 -0
- lib/Google/Auth/Simple.php +92 -0
- lib/Google/Cache/Abstract.php +53 -0
- lib/Google/Cache/Apc.php +73 -0
- lib/Google/Cache/Exception.php +21 -0
- lib/Google/Cache/File.php +145 -0
- lib/Google/Cache/Memcache.php +137 -0
- lib/Google/Cache/Null.php +56 -0
- lib/Google/Client.php +608 -0
- lib/Google/Collection.php +94 -0
- lib/Google/Config.php +315 -0
- lib/Google/Exception.php +20 -0
- lib/Google/Http/Batch.php +143 -0
- lib/Google/Http/CacheParser.php +184 -0
- lib/Google/Http/MediaFileUpload.php +303 -0
- lib/Google/Http/REST.php +139 -0
- lib/Google/Http/Request.php +476 -0
- lib/Google/IO/Abstract.php +312 -0
- lib/Google/IO/Curl.php +135 -0
- lib/Google/IO/Exception.php +22 -0
- lib/Google/IO/Stream.php +182 -0
- lib/Google/IO/cacerts.pem +2183 -0
- lib/Google/Model.php +250 -0
- lib/Google/Service.php +39 -0
- lib/Google/Service/Drive.php +5732 -0
- lib/Google/Service/Exception.php +53 -0
- lib/Google/Service/Oauth2.php +412 -0
- lib/Google/Service/Resource.php +210 -0
- lib/Google/Signer/Abstract.php +29 -0
- lib/Google/Signer/P12.php +91 -0
- lib/Google/Utils.php +135 -0
- lib/Google/Utils/URITemplate.php +333 -0
- lib/Google/Verifier/Abstract.php +30 -0
- lib/Google/Verifier/Pem.php +74 -0
- plugins/cleanup/cleanup.php +3 -3
- readme.txt +7 -1
addons/backup_repository/backup_repository.class.php
CHANGED
@@ -34,7 +34,6 @@ class IWP_MMB_Backup_Repository extends IWP_MMB_Backup
|
|
34 |
|
35 |
function backup_repository($args){
|
36 |
|
37 |
-
|
38 |
if (!empty($args))
|
39 |
extract($args);
|
40 |
|
@@ -54,7 +53,6 @@ class IWP_MMB_Backup_Repository extends IWP_MMB_Backup
|
|
54 |
$backup_file = $results[count($results) - 1]['server']['file_path'];
|
55 |
}
|
56 |
|
57 |
-
|
58 |
if ($backup_file && file_exists($backup_file)) {
|
59 |
//FTP, Amazon S3 or Dropbox
|
60 |
if (isset($account_info['iwp_ftp']) && !empty($account_info)) {
|
@@ -82,7 +80,50 @@ class IWP_MMB_Backup_Repository extends IWP_MMB_Backup
|
|
82 |
$return = $this->dropbox_backup($account_info['iwp_dropbox']);
|
83 |
$this->update_status($task_name, 'dropbox', true);
|
84 |
iwp_mmb_print_flush('Dropbox upload: End');
|
85 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
86 |
|
87 |
if ($return == true && $del_host_file) {
|
88 |
@unlink($backup_file);
|
34 |
|
35 |
function backup_repository($args){
|
36 |
|
|
|
37 |
if (!empty($args))
|
38 |
extract($args);
|
39 |
|
53 |
$backup_file = $results[count($results) - 1]['server']['file_path'];
|
54 |
}
|
55 |
|
|
|
56 |
if ($backup_file && file_exists($backup_file)) {
|
57 |
//FTP, Amazon S3 or Dropbox
|
58 |
if (isset($account_info['iwp_ftp']) && !empty($account_info)) {
|
80 |
$return = $this->dropbox_backup($account_info['iwp_dropbox']);
|
81 |
$this->update_status($task_name, 'dropbox', true);
|
82 |
iwp_mmb_print_flush('Dropbox upload: End');
|
83 |
+
}
|
84 |
+
|
85 |
+
if (isset($account_info['iwp_gdrive']) && !empty($account_info['iwp_gdrive'])) {
|
86 |
+
|
87 |
+
$this->update_status($task_name,'gDrive');
|
88 |
+
$account_info['iwp_gdrive']['backup_file'] = $backup_file;
|
89 |
+
iwp_mmb_print_flush('google Drive upload: Start');
|
90 |
+
$gdrive_result = $this->google_drive_backup($account_info['iwp_gdrive']);
|
91 |
+
$this->update_status($task_name, 'gDrive', true);
|
92 |
+
iwp_mmb_print_flush('google Drive upload: End');
|
93 |
+
|
94 |
+
if ($gdrive_result == false && $del_host_file) {
|
95 |
+
@unlink($backup_file);
|
96 |
+
$return = false;
|
97 |
+
}
|
98 |
+
|
99 |
+
if (is_array($gdrive_result) && isset($gdrive_result['error'])) {
|
100 |
+
return $gdrive_result;
|
101 |
+
}
|
102 |
+
|
103 |
+
//update the tasks different method for gDrive
|
104 |
+
|
105 |
+
if(!empty($gdrive_result))
|
106 |
+
{
|
107 |
+
$tasks = $this->tasks;
|
108 |
+
$task = $tasks['Backup Now'];
|
109 |
+
$results = $task['task_results'];
|
110 |
+
if (is_array($results) && count($results)) {
|
111 |
+
$results[count($results) - 1]['gDrive'] = $gdrive_result;
|
112 |
+
//$results[count($results) - 1]['gDriveOrgFileName'] = basename($backup_url); //not required
|
113 |
+
unset($results[count($results) - 1]['server']);
|
114 |
+
}
|
115 |
+
|
116 |
+
/* $paths['gDrive'] = $gdrive_result; //different from other upload ; storing the gDrive backupfile ID in the paths array for delete operation
|
117 |
+
$paths['gDriveOrgFileName'] = basename($backup_url); */
|
118 |
+
|
119 |
+
$tasks['Backup Now']['task_results'] = $results;
|
120 |
+
$this->tasks = $tasks;
|
121 |
+
|
122 |
+
$this->update_status($task_name,'gDrive', true);
|
123 |
+
unset($paths['server']);
|
124 |
+
$return = true;
|
125 |
+
}
|
126 |
+
}
|
127 |
|
128 |
if ($return == true && $del_host_file) {
|
129 |
@unlink($backup_file);
|
addons/comments/comments.class.php
CHANGED
@@ -34,7 +34,7 @@ class IWP_MMB_Comment extends IWP_MMB_Core
|
|
34 |
$status_sql = 'spam';
|
35 |
elseif ( 'trash' == $status )
|
36 |
$status_sql = 'trash';
|
37 |
-
$sql = "update ".$wpdb->
|
38 |
$success = $wpdb->query($wpdb->prepare($sql, $status_sql, $comment_id));
|
39 |
|
40 |
|
34 |
$status_sql = 'spam';
|
35 |
elseif ( 'trash' == $status )
|
36 |
$status_sql = 'trash';
|
37 |
+
$sql = "update ".$wpdb->base_prefix."comments set comment_approved = '%s' where comment_ID = '%s'";
|
38 |
$success = $wpdb->query($wpdb->prepare($sql, $status_sql, $comment_id));
|
39 |
|
40 |
|
addons/manage_users/user.class.php
CHANGED
@@ -42,7 +42,7 @@ class IWP_MMB_User extends IWP_MMB_Core
|
|
42 |
$users = array();
|
43 |
$userlevel_qry = "('".implode("','",$userlevels)."')";
|
44 |
$userlevel_fallback_qry = "('%".implode("%','%",$level_strings)."%')";
|
45 |
-
$field = $wpdb->
|
46 |
|
47 |
$user_metas = $wpdb->get_results("SELECT * from $wpdb->usermeta WHERE meta_key = '$field' AND meta_value IN $userlevel_fallback_qry");
|
48 |
if($user_metas == false || empty($user_metas)){
|
@@ -195,7 +195,7 @@ class IWP_MMB_User extends IWP_MMB_Core
|
|
195 |
//Check if user is the only one admin on the site
|
196 |
function last_admin($user_obj){
|
197 |
global $wpdb;
|
198 |
-
$field = $wpdb->
|
199 |
$capabilities = array_map('strtolower',array_keys($user_obj->$field));
|
200 |
$result = count_users();
|
201 |
if(in_array('administrator',$capabilities)){
|
42 |
$users = array();
|
43 |
$userlevel_qry = "('".implode("','",$userlevels)."')";
|
44 |
$userlevel_fallback_qry = "('%".implode("%','%",$level_strings)."%')";
|
45 |
+
$field = $wpdb->base_prefix."capabilities";
|
46 |
|
47 |
$user_metas = $wpdb->get_results("SELECT * from $wpdb->usermeta WHERE meta_key = '$field' AND meta_value IN $userlevel_fallback_qry");
|
48 |
if($user_metas == false || empty($user_metas)){
|
195 |
//Check if user is the only one admin on the site
|
196 |
function last_admin($user_obj){
|
197 |
global $wpdb;
|
198 |
+
$field = $wpdb->base_prefix."capabilities";
|
199 |
$capabilities = array_map('strtolower',array_keys($user_obj->$field));
|
200 |
$result = count_users();
|
201 |
if(in_array('administrator',$capabilities)){
|
addons/post_links/post.class.php
CHANGED
@@ -440,7 +440,7 @@ class IWP_MMB_Post extends IWP_MMB_Core
|
|
440 |
$success = false;
|
441 |
|
442 |
if(in_array($status, array('draft', 'publish', 'trash'))){
|
443 |
-
$sql = "update ".$wpdb->
|
444 |
$success = $wpdb->query($sql);
|
445 |
}
|
446 |
|
440 |
$success = false;
|
441 |
|
442 |
if(in_array($status, array('draft', 'publish', 'trash'))){
|
443 |
+
$sql = "update ".$wpdb->base_prefix."posts set post_status = '$status' where ID = '$post_id'";
|
444 |
$success = $wpdb->query($sql);
|
445 |
}
|
446 |
|
backup.class.php
CHANGED
@@ -355,7 +355,7 @@ function delete_task_now($task_name){
|
|
355 |
$hash = md5(time());
|
356 |
$label = $type ? $type : 'manual';
|
357 |
$backup_file = $new_file_path . '/' . $this->site_name . '_' . $label . '_' . $what . '_' . date('Y-m-d') . '_' . $hash . '.zip';
|
358 |
-
$backup_url =
|
359 |
|
360 |
//Optimize tables?
|
361 |
if (isset($optimize_tables) && !empty($optimize_tables)) {
|
@@ -474,6 +474,11 @@ function delete_task_now($task_name){
|
|
474 |
if (isset($backup_settings[$task_name]['task_args']['account_info']['iwp_dropbox'])) {
|
475 |
$paths['dropbox'] = basename($backup_url);
|
476 |
}
|
|
|
|
|
|
|
|
|
|
|
477 |
|
478 |
if (isset($backup_settings[$task_name]['task_args']['account_info']['iwp_email'])) {
|
479 |
$paths['email'] = basename($backup_url);
|
@@ -552,7 +557,28 @@ function delete_task_now($task_name){
|
|
552 |
$this->wpdb_reconnect();
|
553 |
$this->update_status($task_name, 'dropbox', true);
|
554 |
}
|
555 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
556 |
if ($del_host_file) {
|
557 |
@unlink($backup_file);
|
558 |
}
|
@@ -1021,7 +1047,9 @@ function delete_task_now($task_name){
|
|
1021 |
global $wpdb;
|
1022 |
$paths = $this->check_mysql_paths();
|
1023 |
$brace = (substr(PHP_OS, 0, 3) == 'WIN') ? '"' : '';
|
1024 |
-
$
|
|
|
|
|
1025 |
iwp_mmb_print_flush('DB DUMP CMD: Start');
|
1026 |
ob_start();
|
1027 |
$result = $this->iwp_mmb_exec($command);
|
@@ -1054,7 +1082,7 @@ function delete_task_now($task_name){
|
|
1054 |
}
|
1055 |
$_count = 0;
|
1056 |
$insert_sql = '';
|
1057 |
-
$result = mysql_query( 'SHOW TABLES' );
|
1058 |
if(!$result)
|
1059 |
{
|
1060 |
return array(
|
@@ -1133,7 +1161,7 @@ function delete_task_now($task_name){
|
|
1133 |
else{
|
1134 |
iwp_mmb_print_flush('DB DUMP PHP Fail-safe: Start');
|
1135 |
file_put_contents($file, '');//safe to reset any old data
|
1136 |
-
$tables = $wpdb->get_results('SHOW TABLES', ARRAY_N);
|
1137 |
foreach ($tables as $table) {
|
1138 |
|
1139 |
//drop existing table
|
@@ -1365,6 +1393,25 @@ function iwp_mmb_direct_to_any_copy($source, $destination, $overwrite = false, $
|
|
1365 |
);
|
1366 |
}
|
1367 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1368 |
|
1369 |
|
1370 |
$what = $tasks[$task_name]['task_args']['what'];
|
@@ -1417,7 +1464,6 @@ function iwp_mmb_direct_to_any_copy($source, $destination, $overwrite = false, $
|
|
1417 |
);
|
1418 |
}
|
1419 |
|
1420 |
-
//echo '<pre>$new_temp_folder:'; var_dump($new_temp_folder); echo '</pre>';
|
1421 |
|
1422 |
|
1423 |
$remote_abspath = $wp_filesystem->abspath();
|
@@ -2242,6 +2288,219 @@ function ftp_backup($args)
|
|
2242 |
}
|
2243 |
}
|
2244 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2245 |
|
2246 |
function remove_amazons3_backup($args)
|
2247 |
{
|
@@ -2281,6 +2540,121 @@ function ftp_backup($args)
|
|
2281 |
}
|
2282 |
//IWP Remove ends here
|
2283 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2284 |
|
2285 |
function schedule_next($type, $schedule)
|
2286 |
{
|
@@ -2433,7 +2807,7 @@ function get_next_schedules()
|
|
2433 |
@unlink($backups[$task_name]['task_results'][$i]['server']['file_path']);
|
2434 |
}
|
2435 |
|
2436 |
-
|
2437 |
$ftp_file = $backups[$task_name]['task_results'][$i]['ftp'];
|
2438 |
$args = $backups[$task_name]['task_args']['account_info']['iwp_ftp'];
|
2439 |
$args['backup_file'] = $ftp_file;
|
@@ -2454,6 +2828,13 @@ function get_next_schedules()
|
|
2454 |
$args['backup_file'] = $dropbox_file;
|
2455 |
$this->remove_dropbox_backup($args);
|
2456 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2457 |
//Remove database backup info
|
2458 |
unset($backups[$task_name]['task_results'][$i]);
|
2459 |
|
@@ -2515,6 +2896,12 @@ function get_next_schedules()
|
|
2515 |
$this->remove_dropbox_backup($args);
|
2516 |
}
|
2517 |
|
|
|
|
|
|
|
|
|
|
|
|
|
2518 |
|
2519 |
unset($backups[$result_id]);
|
2520 |
|
355 |
$hash = md5(time());
|
356 |
$label = $type ? $type : 'manual';
|
357 |
$backup_file = $new_file_path . '/' . $this->site_name . '_' . $label . '_' . $what . '_' . date('Y-m-d') . '_' . $hash . '.zip';
|
358 |
+
$backup_url = content_url() . '/infinitewp/backups/' . $this->site_name . '_' . $label . '_' . $what . '_' . date('Y-m-d') . '_' . $hash . '.zip';
|
359 |
|
360 |
//Optimize tables?
|
361 |
if (isset($optimize_tables) && !empty($optimize_tables)) {
|
474 |
if (isset($backup_settings[$task_name]['task_args']['account_info']['iwp_dropbox'])) {
|
475 |
$paths['dropbox'] = basename($backup_url);
|
476 |
}
|
477 |
+
|
478 |
+
if (isset($backup_settings[$task_name]['task_args']['account_info']['iwp_gdrive'])) {
|
479 |
+
//$paths['gDrive'] = basename($backup_url);
|
480 |
+
$paths['gDriveOrgFileName'] = basename($backup_url);
|
481 |
+
}
|
482 |
|
483 |
if (isset($backup_settings[$task_name]['task_args']['account_info']['iwp_email'])) {
|
484 |
$paths['email'] = basename($backup_url);
|
557 |
$this->wpdb_reconnect();
|
558 |
$this->update_status($task_name, 'dropbox', true);
|
559 |
}
|
560 |
+
if (isset($account_info['iwp_gdrive']) && !empty($account_info['iwp_gdrive'])) {
|
561 |
+
|
562 |
+
$this->update_status($task_name,'gDrive');
|
563 |
+
$account_info['iwp_gdrive']['backup_file'] = $backup_file;
|
564 |
+
iwp_mmb_print_flush('google Drive upload: Start');
|
565 |
+
$gdrive_result = $this->google_drive_backup($account_info['iwp_gdrive']);
|
566 |
+
iwp_mmb_print_flush('google Drive upload: End');
|
567 |
+
|
568 |
+
if ($gdrive_result == false && $del_host_file) {
|
569 |
+
@unlink($backup_file);
|
570 |
+
}
|
571 |
+
|
572 |
+
if (is_array($gdrive_result) && isset($gdrive_result['error'])) {
|
573 |
+
return $gdrive_result;
|
574 |
+
}
|
575 |
+
|
576 |
+
$paths['gDrive'] = $gdrive_result; //different from other upload ; storing the gDrive backupfile ID in the paths array for delete operation
|
577 |
+
$paths['gDriveOrgFileName'] = basename($backup_url);
|
578 |
+
|
579 |
+
$this->update_status($task_name,'gDrive', true);
|
580 |
+
unset($paths['server']);
|
581 |
+
}
|
582 |
if ($del_host_file) {
|
583 |
@unlink($backup_file);
|
584 |
}
|
1047 |
global $wpdb;
|
1048 |
$paths = $this->check_mysql_paths();
|
1049 |
$brace = (substr(PHP_OS, 0, 3) == 'WIN') ? '"' : '';
|
1050 |
+
$command0 = $wpdb->get_col('SHOW TABLES LIKE "'.$wpdb->base_prefix.'%"');
|
1051 |
+
$wp_tables = join("\" \"",$command0);
|
1052 |
+
$command = $brace . $paths['mysqldump'] . $brace . ' --force --host="' . DB_HOST . '" --user="' . DB_USER . '" --password="' . DB_PASSWORD . '" --add-drop-table --skip-lock-tables "' . DB_NAME . '" "'.$wp_tables.'" > ' . $brace . $file . $brace;
|
1053 |
iwp_mmb_print_flush('DB DUMP CMD: Start');
|
1054 |
ob_start();
|
1055 |
$result = $this->iwp_mmb_exec($command);
|
1082 |
}
|
1083 |
$_count = 0;
|
1084 |
$insert_sql = '';
|
1085 |
+
$result = mysql_query( 'SHOW TABLES LIKE "'.$wpdb->base_prefix.'%"' );
|
1086 |
if(!$result)
|
1087 |
{
|
1088 |
return array(
|
1161 |
else{
|
1162 |
iwp_mmb_print_flush('DB DUMP PHP Fail-safe: Start');
|
1163 |
file_put_contents($file, '');//safe to reset any old data
|
1164 |
+
$tables = $wpdb->get_results('SHOW TABLES LIKE "'.$wpdb->base_prefix.'%"', ARRAY_N);
|
1165 |
foreach ($tables as $table) {
|
1166 |
|
1167 |
//drop existing table
|
1393 |
);
|
1394 |
}
|
1395 |
}
|
1396 |
+
elseif(isset($task['task_results'][$result_id]['gDrive'])){
|
1397 |
+
$gdrive_file = $task['task_results'][$result_id]['gDrive'];
|
1398 |
+
$args = $task['task_args']['account_info']['iwp_gdrive'];
|
1399 |
+
$args['backup_file'] = $gdrive_file;
|
1400 |
+
iwp_mmb_print_flush('gDrive download: Start');
|
1401 |
+
$backup_file = $this->get_google_drive_backup($args);
|
1402 |
+
iwp_mmb_print_flush('gDrive download: End');
|
1403 |
+
|
1404 |
+
if(is_array($backup_file) && array_key_exists('error', $backup_file))
|
1405 |
+
{
|
1406 |
+
return $backup_file;
|
1407 |
+
}
|
1408 |
+
|
1409 |
+
if ($backup_file == false) {
|
1410 |
+
return array(
|
1411 |
+
'error' => 'Failed to download file from gDrive.'
|
1412 |
+
);
|
1413 |
+
}
|
1414 |
+
}
|
1415 |
|
1416 |
|
1417 |
$what = $tasks[$task_name]['task_args']['what'];
|
1464 |
);
|
1465 |
}
|
1466 |
|
|
|
1467 |
|
1468 |
|
1469 |
$remote_abspath = $wp_filesystem->abspath();
|
2288 |
}
|
2289 |
}
|
2290 |
|
2291 |
+
function google_drive_backup($args = '', $uploadid = null, $offset = 0)
|
2292 |
+
{
|
2293 |
+
|
2294 |
+
require_once($GLOBALS['iwp_mmb_plugin_dir'].'/lib/Google/Client.php');
|
2295 |
+
require_once($GLOBALS['iwp_mmb_plugin_dir'].'/lib/Google/Http/MediaFileUpload.php');
|
2296 |
+
require_once($GLOBALS['iwp_mmb_plugin_dir'].'/lib/Google/Service/Drive.php');
|
2297 |
+
|
2298 |
+
//$this -> hisID = $historyID;
|
2299 |
+
|
2300 |
+
$upload_file_block_size = 1 *1024 *1024;
|
2301 |
+
$iwp_folder_id = '';
|
2302 |
+
$sub_folder_id = '';
|
2303 |
+
$create_sub_folder = $args['gdrive_site_folder'];
|
2304 |
+
$sub_folder_name = $this->site_name;
|
2305 |
+
//$task_result = $this->getRequiredData($historyID, "taskResults");
|
2306 |
+
|
2307 |
+
$fileSizeUploaded = 0;
|
2308 |
+
$resumeURI = false;
|
2309 |
+
|
2310 |
+
$client = new Google_Client();
|
2311 |
+
$client->setClientId($args['clientID']);
|
2312 |
+
$client->setClientSecret($args['clientSecretKey']);
|
2313 |
+
$client->setRedirectUri($args['redirectURL']);
|
2314 |
+
$client->setScopes(array(
|
2315 |
+
'https://www.googleapis.com/auth/drive',
|
2316 |
+
'https://www.googleapis.com/auth/userinfo.email',
|
2317 |
+
'https://www.googleapis.com/auth/userinfo.profile'));
|
2318 |
+
|
2319 |
+
|
2320 |
+
$accessToken = $args['token'];
|
2321 |
+
$refreshToken = $accessToken['refresh_token'];
|
2322 |
+
$backup_file = $args['backup_file'];
|
2323 |
+
|
2324 |
+
try
|
2325 |
+
{
|
2326 |
+
$client->refreshToken($refreshToken);
|
2327 |
+
}
|
2328 |
+
catch(Exception $e)
|
2329 |
+
{
|
2330 |
+
echo 'google Error ', $e->getMessage(), "\n";
|
2331 |
+
return array("error" => $e->getMessage());
|
2332 |
+
}
|
2333 |
+
|
2334 |
+
$service = new Google_Service_Drive($client);
|
2335 |
+
|
2336 |
+
//create folder if not present
|
2337 |
+
try
|
2338 |
+
{
|
2339 |
+
$parameters = array();
|
2340 |
+
$parameters['q'] = "title = 'infinitewp' and trashed = false and mimeType= 'application/vnd.google-apps.folder'";
|
2341 |
+
$files = $service->files->listFiles($parameters);
|
2342 |
+
$list_result = array();
|
2343 |
+
$list_result = array_merge($list_result, $files->getItems());
|
2344 |
+
$list_result = (array)$list_result;
|
2345 |
+
|
2346 |
+
if(empty($list_result))
|
2347 |
+
{
|
2348 |
+
$file = new Google_Service_Drive_DriveFile();
|
2349 |
+
$file->setTitle('infinitewp');
|
2350 |
+
$file->setMimeType('application/vnd.google-apps.folder');
|
2351 |
+
|
2352 |
+
$createdFolder = $service->files->insert($file, array(
|
2353 |
+
'mimeType' => 'application/vnd.google-apps.folder',
|
2354 |
+
));
|
2355 |
+
if($createdFolder)
|
2356 |
+
{
|
2357 |
+
$createdFolder = (array)$createdFolder;
|
2358 |
+
$iwp_folder_id = $createdFolder['id'];
|
2359 |
+
}
|
2360 |
+
}
|
2361 |
+
else
|
2362 |
+
{
|
2363 |
+
$list_result = (array)$list_result[0];
|
2364 |
+
$iwp_folder_id = $list_result['id'];
|
2365 |
+
}
|
2366 |
+
}catch (Exception $e){
|
2367 |
+
print "An error occurred: " . $e->getMessage();
|
2368 |
+
return array('error' => $e->getMessage());
|
2369 |
+
}
|
2370 |
+
|
2371 |
+
//create sub folder by site name
|
2372 |
+
if($create_sub_folder)
|
2373 |
+
{
|
2374 |
+
$parameters = array();
|
2375 |
+
$parameters['q'] = "title = '$sub_folder_name' and trashed = false and mimeType = 'application/vnd.google-apps.folder'";
|
2376 |
+
$files = $service->files->listFiles($parameters);
|
2377 |
+
$list_result = array();
|
2378 |
+
$list_result = array_merge($list_result, $files->getItems());
|
2379 |
+
$list_result = (array)$list_result;
|
2380 |
+
|
2381 |
+
if(empty($list_result))
|
2382 |
+
{
|
2383 |
+
$file = new Google_Service_Drive_DriveFile();
|
2384 |
+
$file->setTitle($sub_folder_name);
|
2385 |
+
$file->setMimeType('application/vnd.google-apps.folder');
|
2386 |
+
|
2387 |
+
//setting parent as infinitewpFolder
|
2388 |
+
$parent = new Google_Service_Drive_ParentReference();
|
2389 |
+
$parent->setId($iwp_folder_id);
|
2390 |
+
$file->setParents(array($parent));
|
2391 |
+
|
2392 |
+
$createdFolder = $service->files->insert($file, array(
|
2393 |
+
'mimeType' => 'application/vnd.google-apps.folder',
|
2394 |
+
));
|
2395 |
+
if($createdFolder)
|
2396 |
+
{
|
2397 |
+
$createdFolder = (array)$createdFolder;
|
2398 |
+
$sub_folder_id = $createdFolder['id'];
|
2399 |
+
}
|
2400 |
+
}
|
2401 |
+
else
|
2402 |
+
{
|
2403 |
+
$list_result = (array)$list_result[0];
|
2404 |
+
$sub_folder_id = $list_result['id'];
|
2405 |
+
}
|
2406 |
+
}
|
2407 |
+
|
2408 |
+
|
2409 |
+
//Insert a file
|
2410 |
+
$file = new Google_Service_Drive_DriveFile();
|
2411 |
+
$file->setTitle(basename($backup_file));
|
2412 |
+
$file->setMimeType('binary/octet-stream');
|
2413 |
+
|
2414 |
+
// Set the Parent Folder on Google Drive
|
2415 |
+
$parent = new Google_Service_Drive_ParentReference();
|
2416 |
+
if(empty($sub_folder_id))
|
2417 |
+
{
|
2418 |
+
$parent->setId($iwp_folder_id);
|
2419 |
+
}
|
2420 |
+
else
|
2421 |
+
{
|
2422 |
+
$parent->setId($sub_folder_id);
|
2423 |
+
}
|
2424 |
+
$file->setParents(array($parent));
|
2425 |
+
|
2426 |
+
$gDriveID = '';
|
2427 |
+
try
|
2428 |
+
{
|
2429 |
+
if(false)
|
2430 |
+
{
|
2431 |
+
//single upload
|
2432 |
+
$data = file_get_contents($backup_file);
|
2433 |
+
$createdFile = (array)$service->files->insert($file, array(
|
2434 |
+
'data' => $data,
|
2435 |
+
//'mimeType' => 'text/plain',
|
2436 |
+
));
|
2437 |
+
$gDriveID = $createdFile['id'];
|
2438 |
+
}
|
2439 |
+
|
2440 |
+
//multipart upload
|
2441 |
+
|
2442 |
+
if(true)
|
2443 |
+
{
|
2444 |
+
// Call the API with the media upload, defer so it doesn't immediately return.
|
2445 |
+
$client->setDefer(true);
|
2446 |
+
$request = $service->files->insert($file);
|
2447 |
+
|
2448 |
+
// Create a media file upload to represent our upload process.
|
2449 |
+
$media = new Google_Http_MediaFileUpload($client, $request, 'application/zip', null, true, $upload_file_block_size);
|
2450 |
+
$media->setFileSize(filesize($backup_file));
|
2451 |
+
|
2452 |
+
$status = false;
|
2453 |
+
$handle = fopen($backup_file, "rb");
|
2454 |
+
fseek($handle, $fileSizeUploaded);
|
2455 |
+
|
2456 |
+
/* $resArray = array (
|
2457 |
+
'status' => 'completed',
|
2458 |
+
'backupParentHID' => $historyID,
|
2459 |
+
); */
|
2460 |
+
|
2461 |
+
while (!$status && !feof($handle))
|
2462 |
+
{
|
2463 |
+
$chunk = fread($handle, $upload_file_block_size);
|
2464 |
+
$statusArray = $media->nextChunk($chunk, $resumeURI, $fileSizeUploaded);
|
2465 |
+
$status = $statusArray['status'];
|
2466 |
+
$resumeURI = $statusArray['resumeURI'];
|
2467 |
+
//$fileSizeUploaded = ftell($handle);
|
2468 |
+
$fileSizeUploaded = $statusArray['progress'];
|
2469 |
+
}
|
2470 |
+
|
2471 |
+
$result = false;
|
2472 |
+
if($status != false) {
|
2473 |
+
$result = $status;
|
2474 |
+
}
|
2475 |
+
|
2476 |
+
fclose($handle);
|
2477 |
+
$client->setDefer(false);
|
2478 |
+
|
2479 |
+
$completeBackupResult = (array)$status;
|
2480 |
+
|
2481 |
+
//$gDriveID = $createdFile['id'];
|
2482 |
+
$gDriveID = $completeBackupResult['id'];
|
2483 |
+
}
|
2484 |
+
}
|
2485 |
+
catch (Exception $e)
|
2486 |
+
{
|
2487 |
+
echo "An error occurred: " . $e->getMessage();
|
2488 |
+
return array("error" => $e->getMessage());
|
2489 |
+
}
|
2490 |
+
|
2491 |
+
/* if($del_host_file)
|
2492 |
+
{
|
2493 |
+
unset($task_result['task_results'][$historyID]['server']);
|
2494 |
+
@unlink($backup_file);
|
2495 |
+
} */
|
2496 |
+
|
2497 |
+
//$test_this_task = $this->get_this_tasks();
|
2498 |
+
|
2499 |
+
//$tasksThere = unserialize($test_this_task['taskResults']);
|
2500 |
+
|
2501 |
+
return $gDriveID;
|
2502 |
+
}
|
2503 |
+
|
2504 |
|
2505 |
function remove_amazons3_backup($args)
|
2506 |
{
|
2540 |
}
|
2541 |
//IWP Remove ends here
|
2542 |
|
2543 |
+
function get_google_drive_backup($args)
|
2544 |
+
{
|
2545 |
+
require_once($GLOBALS['iwp_mmb_plugin_dir'].'/lib/Google/Client.php');
|
2546 |
+
require_once($GLOBALS['iwp_mmb_plugin_dir'].'/lib/Google/Service/Drive.php');
|
2547 |
+
|
2548 |
+
//refresh token
|
2549 |
+
$client = new Google_Client();
|
2550 |
+
$client->setClientId($args['clientID']);
|
2551 |
+
$client->setClientSecret($args['clientSecretKey']);
|
2552 |
+
$client->setRedirectUri($args['redirectURL']);
|
2553 |
+
$client->setScopes(array(
|
2554 |
+
'https://www.googleapis.com/auth/drive',
|
2555 |
+
'https://www.googleapis.com/auth/userinfo.email',
|
2556 |
+
'https://www.googleapis.com/auth/userinfo.profile'));
|
2557 |
+
|
2558 |
+
//$client->setUseObjects(true);
|
2559 |
+
|
2560 |
+
$accessToken = $args['token'];
|
2561 |
+
$refreshToken = $accessToken['refresh_token'];
|
2562 |
+
|
2563 |
+
try
|
2564 |
+
{
|
2565 |
+
$client->refreshToken($refreshToken);
|
2566 |
+
}
|
2567 |
+
catch(Exception $e)
|
2568 |
+
{
|
2569 |
+
echo 'google Error ', $e->getMessage(), "\n";
|
2570 |
+
return array("error" => $e->getMessage());
|
2571 |
+
}
|
2572 |
+
|
2573 |
+
//downloading the file
|
2574 |
+
$service = new Google_Service_Drive($client);
|
2575 |
+
|
2576 |
+
$file = $service->files->get($args['backup_file']);
|
2577 |
+
|
2578 |
+
$downloadUrl = $file->getDownloadUrl();
|
2579 |
+
|
2580 |
+
$temp = wp_tempnam('iwp_temp_backup.zip');
|
2581 |
+
|
2582 |
+
try
|
2583 |
+
{
|
2584 |
+
if ($downloadUrl)
|
2585 |
+
{
|
2586 |
+
$request = new Google_Http_Request($downloadUrl, 'GET', null, null);
|
2587 |
+
|
2588 |
+
$signHttpRequest = $client->getAuth()->sign($request);
|
2589 |
+
$httpRequest = $client->getIo()->makeRequest($signHttpRequest);
|
2590 |
+
|
2591 |
+
if ($httpRequest->getResponseHttpCode() == 200) {
|
2592 |
+
file_put_contents($temp, $httpRequest->getResponseBody());
|
2593 |
+
return $temp;
|
2594 |
+
} else {
|
2595 |
+
// An error occurred.
|
2596 |
+
return array("error" => "There is some error.");
|
2597 |
+
}
|
2598 |
+
}
|
2599 |
+
else
|
2600 |
+
{
|
2601 |
+
// The file doesn't have any content stored on Drive.
|
2602 |
+
return array("error" => "Google Drive file doesnt have nay content.");
|
2603 |
+
}
|
2604 |
+
}catch(Exception $e)
|
2605 |
+
{
|
2606 |
+
echo 'google Error ', $e->getMessage(), "\n";
|
2607 |
+
return array("error" => $e->getMessage());
|
2608 |
+
}
|
2609 |
+
|
2610 |
+
|
2611 |
+
}
|
2612 |
+
|
2613 |
+
function remove_google_drive_backup($args)
|
2614 |
+
{
|
2615 |
+
/* require_once($GLOBALS['iwp_mmb_plugin_dir'].'/lib/google-api/Google_Client.php');
|
2616 |
+
require_once($GLOBALS['iwp_mmb_plugin_dir'].'/lib/google-api/contrib/Google_DriveService.php'); */
|
2617 |
+
require_once($GLOBALS['iwp_mmb_plugin_dir'].'/lib/Google/Client.php');
|
2618 |
+
require_once($GLOBALS['iwp_mmb_plugin_dir'].'/lib/Google/Service/Drive.php');
|
2619 |
+
|
2620 |
+
$client = new Google_Client();
|
2621 |
+
$client->setClientId($args['clientID']);
|
2622 |
+
$client->setClientSecret($args['clientSecretKey']);
|
2623 |
+
$client->setRedirectUri($args['redirectURL']);
|
2624 |
+
$client->setScopes(array(
|
2625 |
+
'https://www.googleapis.com/auth/drive',
|
2626 |
+
'https://www.googleapis.com/auth/userinfo.email',
|
2627 |
+
'https://www.googleapis.com/auth/userinfo.profile'));
|
2628 |
+
|
2629 |
+
//$client->setUseObjects(true);
|
2630 |
+
|
2631 |
+
$accessToken = $args['token'];
|
2632 |
+
$refreshToken = $accessToken['refresh_token'];
|
2633 |
+
|
2634 |
+
try
|
2635 |
+
{
|
2636 |
+
$client->refreshToken($refreshToken);
|
2637 |
+
}
|
2638 |
+
catch(Exception $e)
|
2639 |
+
{
|
2640 |
+
echo 'google Error ', $e->getMessage(), "\n";
|
2641 |
+
return array("error" => $e->getMessage());
|
2642 |
+
}
|
2643 |
+
|
2644 |
+
$service = new Google_Service_Drive($client);
|
2645 |
+
|
2646 |
+
try
|
2647 |
+
{
|
2648 |
+
echo "\n".'backup_file:'.$args['backup_file'];
|
2649 |
+
$service->files->delete($args['backup_file']);
|
2650 |
+
}
|
2651 |
+
catch (Exception $e)
|
2652 |
+
{
|
2653 |
+
echo "\nAn error occurred: " . $e->getMessage();
|
2654 |
+
return array("error" => $e->getMessage());
|
2655 |
+
}
|
2656 |
+
|
2657 |
+
}
|
2658 |
|
2659 |
function schedule_next($type, $schedule)
|
2660 |
{
|
2807 |
@unlink($backups[$task_name]['task_results'][$i]['server']['file_path']);
|
2808 |
}
|
2809 |
|
2810 |
+
if (isset($backups[$task_name]['task_results'][$i]['ftp'])) {
|
2811 |
$ftp_file = $backups[$task_name]['task_results'][$i]['ftp'];
|
2812 |
$args = $backups[$task_name]['task_args']['account_info']['iwp_ftp'];
|
2813 |
$args['backup_file'] = $ftp_file;
|
2828 |
$args['backup_file'] = $dropbox_file;
|
2829 |
$this->remove_dropbox_backup($args);
|
2830 |
}
|
2831 |
+
|
2832 |
+
if (isset($backups[$task_name]['task_results'][$i]['gDrive'])) {
|
2833 |
+
$gdrive_file = $backups[$task_name]['task_results'][$i]['gDrive'];
|
2834 |
+
$args = $backups[$task_name]['task_args']['account_info']['iwp_gdrive'];
|
2835 |
+
$args['backup_file'] = $gdrive_file;
|
2836 |
+
$this->remove_google_drive_backup($args);
|
2837 |
+
}
|
2838 |
//Remove database backup info
|
2839 |
unset($backups[$task_name]['task_results'][$i]);
|
2840 |
|
2896 |
$this->remove_dropbox_backup($args);
|
2897 |
}
|
2898 |
|
2899 |
+
if (isset($backup['gDrive'])) {
|
2900 |
+
$g_drive_file = $backup['gDrive'];
|
2901 |
+
$args = $tasks[$task_name]['task_args']['account_info']['iwp_gdrive'];
|
2902 |
+
$args['backup_file'] = $g_drive_file;
|
2903 |
+
$this->remove_google_drive_backup($args);
|
2904 |
+
}
|
2905 |
|
2906 |
unset($backups[$result_id]);
|
2907 |
|
helper.class.php
CHANGED
@@ -432,7 +432,7 @@ class IWP_MMB_Helper
|
|
432 |
}
|
433 |
|
434 |
$user = (array) $this->iwp_mmb_get_user_info( $username );
|
435 |
-
if ((isset($user[$wpdb->
|
436 |
(isset($user['caps']['administrator']) && $user['caps']['administrator'] == 1)){
|
437 |
return true;
|
438 |
}
|
432 |
}
|
433 |
|
434 |
$user = (array) $this->iwp_mmb_get_user_info( $username );
|
435 |
+
if ((isset($user[$wpdb->base_prefix . 'user_level']) && $user[$wpdb->base_prefix . 'user_level'] == 10) || isset($user[$wpdb->base_prefix . 'capabilities']['administrator']) ||
|
436 |
(isset($user['caps']['administrator']) && $user['caps']['administrator'] == 1)){
|
437 |
return true;
|
438 |
}
|
init.php
CHANGED
@@ -4,7 +4,7 @@ Plugin Name: InfiniteWP - Client
|
|
4 |
Plugin URI: http://infinitewp.com/
|
5 |
Description: This is the client plugin of InfiniteWP that communicates with the InfiniteWP Admin panel.
|
6 |
Author: Revmakx
|
7 |
-
Version: 1.2.
|
8 |
Author URI: http://www.revmakx.com
|
9 |
*/
|
10 |
/************************************************************
|
@@ -26,7 +26,7 @@ Author URI: http://www.revmakx.com
|
|
26 |
**************************************************************/
|
27 |
|
28 |
if(!defined('IWP_MMB_CLIENT_VERSION'))
|
29 |
-
define('IWP_MMB_CLIENT_VERSION', '1.2.
|
30 |
|
31 |
|
32 |
if ( !defined('IWP_MMB_XFRAME_COOKIE')){
|
4 |
Plugin URI: http://infinitewp.com/
|
5 |
Description: This is the client plugin of InfiniteWP that communicates with the InfiniteWP Admin panel.
|
6 |
Author: Revmakx
|
7 |
+
Version: 1.2.12
|
8 |
Author URI: http://www.revmakx.com
|
9 |
*/
|
10 |
/************************************************************
|
26 |
**************************************************************/
|
27 |
|
28 |
if(!defined('IWP_MMB_CLIENT_VERSION'))
|
29 |
+
define('IWP_MMB_CLIENT_VERSION', '1.2.12');
|
30 |
|
31 |
|
32 |
if ( !defined('IWP_MMB_XFRAME_COOKIE')){
|
lib/Google/Auth/Abstract.php
ADDED
@@ -0,0 +1,41 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* Copyright 2010 Google Inc.
|
4 |
+
*
|
5 |
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
6 |
+
* you may not use this file except in compliance with the License.
|
7 |
+
* You may obtain 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,
|
13 |
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14 |
+
* See the License for the specific language governing permissions and
|
15 |
+
* limitations under the License.
|
16 |
+
*/
|
17 |
+
require_once $GLOBALS['iwp_mmb_plugin_dir']."/lib/Google/Http/Request.php";
|
18 |
+
|
19 |
+
/**
|
20 |
+
* Abstract class for the Authentication in the API client
|
21 |
+
* @author Chris Chabot <chabotc@google.com>
|
22 |
+
*
|
23 |
+
*/
|
24 |
+
abstract class Google_Auth_Abstract
|
25 |
+
{
|
26 |
+
/**
|
27 |
+
* An utility function that first calls $this->auth->sign($request) and then
|
28 |
+
* executes makeRequest() on that signed request. Used for when a request
|
29 |
+
* should be authenticated
|
30 |
+
* @param Google_Http_Request $request
|
31 |
+
* @return Google_Http_Request $request
|
32 |
+
*/
|
33 |
+
abstract public function authenticatedRequest(Google_Http_Request $request);
|
34 |
+
|
35 |
+
abstract public function authenticate($code);
|
36 |
+
abstract public function sign(Google_Http_Request $request);
|
37 |
+
abstract public function createAuthUrl($scope);
|
38 |
+
|
39 |
+
abstract public function refreshToken($refreshToken);
|
40 |
+
abstract public function revokeToken();
|
41 |
+
}
|
lib/Google/Auth/AssertionCredentials.php
ADDED
@@ -0,0 +1,133 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* Copyright 2012 Google Inc.
|
4 |
+
*
|
5 |
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
6 |
+
* you may not use this file except in compliance with the License.
|
7 |
+
* You may obtain 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,
|
13 |
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14 |
+
* See the License for the specific language governing permissions and
|
15 |
+
* limitations under the License.
|
16 |
+
*/
|
17 |
+
|
18 |
+
require_once $GLOBALS['iwp_mmb_plugin_dir']."/lib/Google/Auth/OAuth2.php";
|
19 |
+
require_once $GLOBALS['iwp_mmb_plugin_dir']."/lib/Google/Signer/P12.php";
|
20 |
+
require_once $GLOBALS['iwp_mmb_plugin_dir']."/lib/Google/Utils.php";
|
21 |
+
|
22 |
+
/**
|
23 |
+
* Credentials object used for OAuth 2.0 Signed JWT assertion grants.
|
24 |
+
*
|
25 |
+
* @author Chirag Shah <chirags@google.com>
|
26 |
+
*/
|
27 |
+
class Google_Auth_AssertionCredentials
|
28 |
+
{
|
29 |
+
const MAX_TOKEN_LIFETIME_SECS = 3600;
|
30 |
+
|
31 |
+
public $serviceAccountName;
|
32 |
+
public $scopes;
|
33 |
+
public $privateKey;
|
34 |
+
public $privateKeyPassword;
|
35 |
+
public $assertionType;
|
36 |
+
public $sub;
|
37 |
+
/**
|
38 |
+
* @deprecated
|
39 |
+
* @link http://tools.ietf.org/html/draft-ietf-oauth-json-web-token-06
|
40 |
+
*/
|
41 |
+
public $prn;
|
42 |
+
private $useCache;
|
43 |
+
|
44 |
+
/**
|
45 |
+
* @param $serviceAccountName
|
46 |
+
* @param $scopes array List of scopes
|
47 |
+
* @param $privateKey
|
48 |
+
* @param string $privateKeyPassword
|
49 |
+
* @param string $assertionType
|
50 |
+
* @param bool|string $sub The email address of the user for which the
|
51 |
+
* application is requesting delegated access.
|
52 |
+
* @param bool useCache Whether to generate a cache key and allow
|
53 |
+
* automatic caching of the generated token.
|
54 |
+
*/
|
55 |
+
public function __construct(
|
56 |
+
$serviceAccountName,
|
57 |
+
$scopes,
|
58 |
+
$privateKey,
|
59 |
+
$privateKeyPassword = 'notasecret',
|
60 |
+
$assertionType = 'http://oauth.net/grant_type/jwt/1.0/bearer',
|
61 |
+
$sub = false,
|
62 |
+
$useCache = true
|
63 |
+
) {
|
64 |
+
$this->serviceAccountName = $serviceAccountName;
|
65 |
+
$this->scopes = is_string($scopes) ? $scopes : implode(' ', $scopes);
|
66 |
+
$this->privateKey = $privateKey;
|
67 |
+
$this->privateKeyPassword = $privateKeyPassword;
|
68 |
+
$this->assertionType = $assertionType;
|
69 |
+
$this->sub = $sub;
|
70 |
+
$this->prn = $sub;
|
71 |
+
$this->useCache = $useCache;
|
72 |
+
}
|
73 |
+
|
74 |
+
/**
|
75 |
+
* Generate a unique key to represent this credential.
|
76 |
+
* @return string
|
77 |
+
*/
|
78 |
+
public function getCacheKey()
|
79 |
+
{
|
80 |
+
if (!$this->useCache) {
|
81 |
+
return false;
|
82 |
+
}
|
83 |
+
$h = $this->sub;
|
84 |
+
$h .= $this->assertionType;
|
85 |
+
$h .= $this->privateKey;
|
86 |
+
$h .= $this->scopes;
|
87 |
+
$h .= $this->serviceAccountName;
|
88 |
+
return md5($h);
|
89 |
+
}
|
90 |
+
|
91 |
+
public function generateAssertion()
|
92 |
+
{
|
93 |
+
$now = time();
|
94 |
+
|
95 |
+
$jwtParams = array(
|
96 |
+
'aud' => Google_Auth_OAuth2::OAUTH2_TOKEN_URI,
|
97 |
+
'scope' => $this->scopes,
|
98 |
+
'iat' => $now,
|
99 |
+
'exp' => $now + self::MAX_TOKEN_LIFETIME_SECS,
|
100 |
+
'iss' => $this->serviceAccountName,
|
101 |
+
);
|
102 |
+
|
103 |
+
if ($this->sub !== false) {
|
104 |
+
$jwtParams['sub'] = $this->sub;
|
105 |
+
} else if ($this->prn !== false) {
|
106 |
+
$jwtParams['prn'] = $this->prn;
|
107 |
+
}
|
108 |
+
|
109 |
+
return $this->makeSignedJwt($jwtParams);
|
110 |
+
}
|
111 |
+
|
112 |
+
/**
|
113 |
+
* Creates a signed JWT.
|
114 |
+
* @param array $payload
|
115 |
+
* @return string The signed JWT.
|
116 |
+
*/
|
117 |
+
private function makeSignedJwt($payload)
|
118 |
+
{
|
119 |
+
$header = array('typ' => 'JWT', 'alg' => 'RS256');
|
120 |
+
|
121 |
+
$segments = array(
|
122 |
+
Google_Utils::urlSafeB64Encode(json_encode($header)),
|
123 |
+
Google_Utils::urlSafeB64Encode(json_encode($payload))
|
124 |
+
);
|
125 |
+
|
126 |
+
$signingInput = implode('.', $segments);
|
127 |
+
$signer = new Google_Signer_P12($this->privateKey, $this->privateKeyPassword);
|
128 |
+
$signature = $signer->sign($signingInput);
|
129 |
+
$segments[] = Google_Utils::urlSafeB64Encode($signature);
|
130 |
+
|
131 |
+
return implode(".", $segments);
|
132 |
+
}
|
133 |
+
}
|
lib/Google/Auth/Exception.php
ADDED
@@ -0,0 +1,22 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* Copyright 2013 Google Inc.
|
4 |
+
*
|
5 |
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
6 |
+
* you may not use this file except in compliance with the License.
|
7 |
+
* You may obtain 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,
|
13 |
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14 |
+
* See the License for the specific language governing permissions and
|
15 |
+
* limitations under the License.
|
16 |
+
*/
|
17 |
+
|
18 |
+
require_once $GLOBALS['iwp_mmb_plugin_dir']."/lib/Google/Exception.php";
|
19 |
+
|
20 |
+
class Google_Auth_Exception extends Google_Exception
|
21 |
+
{
|
22 |
+
}
|
lib/Google/Auth/LoginTicket.php
ADDED
@@ -0,0 +1,69 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* Copyright 2011 Google Inc.
|
4 |
+
*
|
5 |
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
6 |
+
* you may not use this file except in compliance with the License.
|
7 |
+
* You may obtain 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,
|
13 |
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14 |
+
* See the License for the specific language governing permissions and
|
15 |
+
* limitations under the License.
|
16 |
+
*/
|
17 |
+
|
18 |
+
require_once $GLOBALS['iwp_mmb_plugin_dir']."/lib/Google/Auth/Exception.php";
|
19 |
+
|
20 |
+
/**
|
21 |
+
* Class to hold information about an authenticated login.
|
22 |
+
*
|
23 |
+
* @author Brian Eaton <beaton@google.com>
|
24 |
+
*/
|
25 |
+
class Google_Auth_LoginTicket
|
26 |
+
{
|
27 |
+
const USER_ATTR = "sub";
|
28 |
+
|
29 |
+
// Information from id token envelope.
|
30 |
+
private $envelope;
|
31 |
+
|
32 |
+
// Information from id token payload.
|
33 |
+
private $payload;
|
34 |
+
|
35 |
+
/**
|
36 |
+
* Creates a user based on the supplied token.
|
37 |
+
*
|
38 |
+
* @param string $envelope Header from a verified authentication token.
|
39 |
+
* @param string $payload Information from a verified authentication token.
|
40 |
+
*/
|
41 |
+
public function __construct($envelope, $payload)
|
42 |
+
{
|
43 |
+
$this->envelope = $envelope;
|
44 |
+
$this->payload = $payload;
|
45 |
+
}
|
46 |
+
|
47 |
+
/**
|
48 |
+
* Returns the numeric identifier for the user.
|
49 |
+
* @throws Google_Auth_Exception
|
50 |
+
* @return
|
51 |
+
*/
|
52 |
+
public function getUserId()
|
53 |
+
{
|
54 |
+
if (array_key_exists(self::USER_ATTR, $this->payload)) {
|
55 |
+
return $this->payload[self::USER_ATTR];
|
56 |
+
}
|
57 |
+
throw new Google_Auth_Exception("No user_id in token");
|
58 |
+
}
|
59 |
+
|
60 |
+
/**
|
61 |
+
* Returns attributes from the login ticket. This can contain
|
62 |
+
* various information about the user session.
|
63 |
+
* @return array
|
64 |
+
*/
|
65 |
+
public function getAttributes()
|
66 |
+
{
|
67 |
+
return array("envelope" => $this->envelope, "payload" => $this->payload);
|
68 |
+
}
|
69 |
+
}
|
lib/Google/Auth/OAuth2.php
ADDED
@@ -0,0 +1,587 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* Copyright 2008 Google Inc.
|
4 |
+
*
|
5 |
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
6 |
+
* you may not use this file except in compliance with the License.
|
7 |
+
* You may obtain 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,
|
13 |
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14 |
+
* See the License for the specific language governing permissions and
|
15 |
+
* limitations under the License.
|
16 |
+
*/
|
17 |
+
|
18 |
+
require_once $GLOBALS['iwp_mmb_plugin_dir']."/lib/Google/Auth/Abstract.php";
|
19 |
+
require_once $GLOBALS['iwp_mmb_plugin_dir']."/lib/Google/Auth/AssertionCredentials.php";
|
20 |
+
require_once $GLOBALS['iwp_mmb_plugin_dir']."/lib/Google/Auth/Exception.php";
|
21 |
+
require_once $GLOBALS['iwp_mmb_plugin_dir']."/lib/Google/Auth/LoginTicket.php";
|
22 |
+
require_once $GLOBALS['iwp_mmb_plugin_dir']."/lib/Google/Client.php";
|
23 |
+
require_once $GLOBALS['iwp_mmb_plugin_dir']."/lib/Google/Http/Request.php";
|
24 |
+
require_once $GLOBALS['iwp_mmb_plugin_dir']."/lib/Google/Utils.php";
|
25 |
+
require_once $GLOBALS['iwp_mmb_plugin_dir']."/lib/Google/Verifier/Pem.php";
|
26 |
+
|
27 |
+
/**
|
28 |
+
* Authentication class that deals with the OAuth 2 web-server authentication flow
|
29 |
+
*
|
30 |
+
* @author Chris Chabot <chabotc@google.com>
|
31 |
+
* @author Chirag Shah <chirags@google.com>
|
32 |
+
*
|
33 |
+
*/
|
34 |
+
class Google_Auth_OAuth2 extends Google_Auth_Abstract
|
35 |
+
{
|
36 |
+
const OAUTH2_REVOKE_URI = 'https://accounts.google.com/o/oauth2/revoke';
|
37 |
+
const OAUTH2_TOKEN_URI = 'https://accounts.google.com/o/oauth2/token';
|
38 |
+
const OAUTH2_AUTH_URL = 'https://accounts.google.com/o/oauth2/auth';
|
39 |
+
const CLOCK_SKEW_SECS = 300; // five minutes in seconds
|
40 |
+
const AUTH_TOKEN_LIFETIME_SECS = 300; // five minutes in seconds
|
41 |
+
const MAX_TOKEN_LIFETIME_SECS = 86400; // one day in seconds
|
42 |
+
const OAUTH2_ISSUER = 'accounts.google.com';
|
43 |
+
|
44 |
+
/** @var Google_Auth_AssertionCredentials $assertionCredentials */
|
45 |
+
private $assertionCredentials;
|
46 |
+
|
47 |
+
/**
|
48 |
+
* @var string The state parameters for CSRF and other forgery protection.
|
49 |
+
*/
|
50 |
+
private $state;
|
51 |
+
|
52 |
+
/**
|
53 |
+
* @var array The token bundle.
|
54 |
+
*/
|
55 |
+
private $token = array();
|
56 |
+
|
57 |
+
/**
|
58 |
+
* @var Google_Client the base client
|
59 |
+
*/
|
60 |
+
private $client;
|
61 |
+
|
62 |
+
/**
|
63 |
+
* Instantiates the class, but does not initiate the login flow, leaving it
|
64 |
+
* to the discretion of the caller.
|
65 |
+
*/
|
66 |
+
public function __construct(Google_Client $client)
|
67 |
+
{
|
68 |
+
$this->client = $client;
|
69 |
+
}
|
70 |
+
|
71 |
+
/**
|
72 |
+
* Perform an authenticated / signed apiHttpRequest.
|
73 |
+
* This function takes the apiHttpRequest, calls apiAuth->sign on it
|
74 |
+
* (which can modify the request in what ever way fits the auth mechanism)
|
75 |
+
* and then calls apiCurlIO::makeRequest on the signed request
|
76 |
+
*
|
77 |
+
* @param Google_Http_Request $request
|
78 |
+
* @return Google_Http_Request The resulting HTTP response including the
|
79 |
+
* responseHttpCode, responseHeaders and responseBody.
|
80 |
+
*/
|
81 |
+
public function authenticatedRequest(Google_Http_Request $request)
|
82 |
+
{
|
83 |
+
$request = $this->sign($request);
|
84 |
+
return $this->client->getIo()->makeRequest($request);
|
85 |
+
}
|
86 |
+
|
87 |
+
/**
|
88 |
+
* @param string $code
|
89 |
+
* @throws Google_Auth_Exception
|
90 |
+
* @return string
|
91 |
+
*/
|
92 |
+
public function authenticate($code)
|
93 |
+
{
|
94 |
+
if (strlen($code) == 0) {
|
95 |
+
throw new Google_Auth_Exception("Invalid code");
|
96 |
+
}
|
97 |
+
|
98 |
+
// We got here from the redirect from a successful authorization grant,
|
99 |
+
// fetch the access token
|
100 |
+
$request = new Google_Http_Request(
|
101 |
+
self::OAUTH2_TOKEN_URI,
|
102 |
+
'POST',
|
103 |
+
array(),
|
104 |
+
array(
|
105 |
+
'code' => $code,
|
106 |
+
'grant_type' => 'authorization_code',
|
107 |
+
'redirect_uri' => $this->client->getClassConfig($this, 'redirect_uri'),
|
108 |
+
'client_id' => $this->client->getClassConfig($this, 'client_id'),
|
109 |
+
'client_secret' => $this->client->getClassConfig($this, 'client_secret')
|
110 |
+
)
|
111 |
+
);
|
112 |
+
$request->disableGzip();
|
113 |
+
$response = $this->client->getIo()->makeRequest($request);
|
114 |
+
|
115 |
+
if ($response->getResponseHttpCode() == 200) {
|
116 |
+
$this->setAccessToken($response->getResponseBody());
|
117 |
+
$this->token['created'] = time();
|
118 |
+
return $this->getAccessToken();
|
119 |
+
} else {
|
120 |
+
$decodedResponse = json_decode($response->getResponseBody(), true);
|
121 |
+
if ($decodedResponse != null && $decodedResponse['error']) {
|
122 |
+
$decodedResponse = $decodedResponse['error'];
|
123 |
+
}
|
124 |
+
throw new Google_Auth_Exception(
|
125 |
+
sprintf(
|
126 |
+
"Error fetching OAuth2 access token, message: '%s'",
|
127 |
+
$decodedResponse
|
128 |
+
),
|
129 |
+
$response->getResponseHttpCode()
|
130 |
+
);
|
131 |
+
}
|
132 |
+
}
|
133 |
+
|
134 |
+
/**
|
135 |
+
* Create a URL to obtain user authorization.
|
136 |
+
* The authorization endpoint allows the user to first
|
137 |
+
* authenticate, and then grant/deny the access request.
|
138 |
+
* @param string $scope The scope is expressed as a list of space-delimited strings.
|
139 |
+
* @return string
|
140 |
+
*/
|
141 |
+
public function createAuthUrl($scope)
|
142 |
+
{
|
143 |
+
$params = array(
|
144 |
+
'response_type' => 'code',
|
145 |
+
'redirect_uri' => $this->client->getClassConfig($this, 'redirect_uri'),
|
146 |
+
'client_id' => $this->client->getClassConfig($this, 'client_id'),
|
147 |
+
'scope' => $scope,
|
148 |
+
'access_type' => $this->client->getClassConfig($this, 'access_type'),
|
149 |
+
'approval_prompt' => $this->client->getClassConfig($this, 'approval_prompt'),
|
150 |
+
);
|
151 |
+
|
152 |
+
// If the list of scopes contains plus.login, add request_visible_actions
|
153 |
+
// to auth URL.
|
154 |
+
$rva = $this->client->getClassConfig($this, 'request_visible_actions');
|
155 |
+
if (strpos($scope, 'plus.login') && strlen($rva) > 0) {
|
156 |
+
$params['request_visible_actions'] = $rva;
|
157 |
+
}
|
158 |
+
|
159 |
+
if (isset($this->state)) {
|
160 |
+
$params['state'] = $this->state;
|
161 |
+
}
|
162 |
+
|
163 |
+
return self::OAUTH2_AUTH_URL . "?" . http_build_query($params, '', '&');
|
164 |
+
}
|
165 |
+
|
166 |
+
/**
|
167 |
+
* @param string $token
|
168 |
+
* @throws Google_Auth_Exception
|
169 |
+
*/
|
170 |
+
public function setAccessToken($token)
|
171 |
+
{
|
172 |
+
$token = json_decode($token, true);
|
173 |
+
if ($token == null) {
|
174 |
+
throw new Google_Auth_Exception('Could not json decode the token');
|
175 |
+
}
|
176 |
+
if (! isset($token['access_token'])) {
|
177 |
+
throw new Google_Auth_Exception("Invalid token format");
|
178 |
+
}
|
179 |
+
$this->token = $token;
|
180 |
+
}
|
181 |
+
|
182 |
+
public function getAccessToken()
|
183 |
+
{
|
184 |
+
return json_encode($this->token);
|
185 |
+
}
|
186 |
+
|
187 |
+
public function setState($state)
|
188 |
+
{
|
189 |
+
$this->state = $state;
|
190 |
+
}
|
191 |
+
|
192 |
+
public function setAssertionCredentials(Google_Auth_AssertionCredentials $creds)
|
193 |
+
{
|
194 |
+
$this->assertionCredentials = $creds;
|
195 |
+
}
|
196 |
+
|
197 |
+
/**
|
198 |
+
* Include an accessToken in a given apiHttpRequest.
|
199 |
+
* @param Google_Http_Request $request
|
200 |
+
* @return Google_Http_Request
|
201 |
+
* @throws Google_Auth_Exception
|
202 |
+
*/
|
203 |
+
public function sign(Google_Http_Request $request)
|
204 |
+
{
|
205 |
+
// add the developer key to the request before signing it
|
206 |
+
if ($this->client->getClassConfig($this, 'developer_key')) {
|
207 |
+
$request->setQueryParam('key', $this->client->getClassConfig($this, 'developer_key'));
|
208 |
+
}
|
209 |
+
|
210 |
+
// Cannot sign the request without an OAuth access token.
|
211 |
+
if (null == $this->token && null == $this->assertionCredentials) {
|
212 |
+
return $request;
|
213 |
+
}
|
214 |
+
|
215 |
+
// Check if the token is set to expire in the next 30 seconds
|
216 |
+
// (or has already expired).
|
217 |
+
if ($this->isAccessTokenExpired()) {
|
218 |
+
if ($this->assertionCredentials) {
|
219 |
+
$this->refreshTokenWithAssertion();
|
220 |
+
} else {
|
221 |
+
if (! array_key_exists('refresh_token', $this->token)) {
|
222 |
+
throw new Google_Auth_Exception(
|
223 |
+
"The OAuth 2.0 access token has expired,"
|
224 |
+
." and a refresh token is not available. Refresh tokens"
|
225 |
+
." are not returned for responses that were auto-approved."
|
226 |
+
);
|
227 |
+
}
|
228 |
+
$this->refreshToken($this->token['refresh_token']);
|
229 |
+
}
|
230 |
+
}
|
231 |
+
|
232 |
+
// Add the OAuth2 header to the request
|
233 |
+
$request->setRequestHeaders(
|
234 |
+
array('Authorization' => 'Bearer ' . $this->token['access_token'])
|
235 |
+
);
|
236 |
+
|
237 |
+
return $request;
|
238 |
+
}
|
239 |
+
|
240 |
+
/**
|
241 |
+
* Fetches a fresh access token with the given refresh token.
|
242 |
+
* @param string $refreshToken
|
243 |
+
* @return void
|
244 |
+
*/
|
245 |
+
public function refreshToken($refreshToken)
|
246 |
+
{
|
247 |
+
$this->refreshTokenRequest(
|
248 |
+
array(
|
249 |
+
'client_id' => $this->client->getClassConfig($this, 'client_id'),
|
250 |
+
'client_secret' => $this->client->getClassConfig($this, 'client_secret'),
|
251 |
+
'refresh_token' => $refreshToken,
|
252 |
+
'grant_type' => 'refresh_token'
|
253 |
+
)
|
254 |
+
);
|
255 |
+
}
|
256 |
+
|
257 |
+
/**
|
258 |
+
* Fetches a fresh access token with a given assertion token.
|
259 |
+
* @param Google_Auth_AssertionCredentials $assertionCredentials optional.
|
260 |
+
* @return void
|
261 |
+
*/
|
262 |
+
public function refreshTokenWithAssertion($assertionCredentials = null)
|
263 |
+
{
|
264 |
+
if (!$assertionCredentials) {
|
265 |
+
$assertionCredentials = $this->assertionCredentials;
|
266 |
+
}
|
267 |
+
|
268 |
+
$cacheKey = $assertionCredentials->getCacheKey();
|
269 |
+
|
270 |
+
if ($cacheKey) {
|
271 |
+
// We can check whether we have a token available in the
|
272 |
+
// cache. If it is expired, we can retrieve a new one from
|
273 |
+
// the assertion.
|
274 |
+
$token = $this->client->getCache()->get($cacheKey);
|
275 |
+
if ($token) {
|
276 |
+
$this->setAccessToken($token);
|
277 |
+
}
|
278 |
+
if (!$this->isAccessTokenExpired()) {
|
279 |
+
return;
|
280 |
+
}
|
281 |
+
}
|
282 |
+
|
283 |
+
$this->refreshTokenRequest(
|
284 |
+
array(
|
285 |
+
'grant_type' => 'assertion',
|
286 |
+
'assertion_type' => $assertionCredentials->assertionType,
|
287 |
+
'assertion' => $assertionCredentials->generateAssertion(),
|
288 |
+
)
|
289 |
+
);
|
290 |
+
|
291 |
+
if ($cacheKey) {
|
292 |
+
// Attempt to cache the token.
|
293 |
+
$this->client->getCache()->set(
|
294 |
+
$cacheKey,
|
295 |
+
$this->getAccessToken()
|
296 |
+
);
|
297 |
+
}
|
298 |
+
}
|
299 |
+
|
300 |
+
private function refreshTokenRequest($params)
|
301 |
+
{
|
302 |
+
$http = new Google_Http_Request(
|
303 |
+
self::OAUTH2_TOKEN_URI,
|
304 |
+
'POST',
|
305 |
+
array(),
|
306 |
+
$params
|
307 |
+
);
|
308 |
+
$http->disableGzip();
|
309 |
+
$request = $this->client->getIo()->makeRequest($http);
|
310 |
+
|
311 |
+
$code = $request->getResponseHttpCode();
|
312 |
+
$body = $request->getResponseBody();
|
313 |
+
if (200 == $code) {
|
314 |
+
$token = json_decode($body, true);
|
315 |
+
if ($token == null) {
|
316 |
+
throw new Google_Auth_Exception("Could not json decode the access token");
|
317 |
+
}
|
318 |
+
|
319 |
+
if (! isset($token['access_token']) || ! isset($token['expires_in'])) {
|
320 |
+
throw new Google_Auth_Exception("Invalid token format");
|
321 |
+
}
|
322 |
+
|
323 |
+
$this->token['access_token'] = $token['access_token'];
|
324 |
+
$this->token['expires_in'] = $token['expires_in'];
|
325 |
+
$this->token['created'] = time();
|
326 |
+
} else {
|
327 |
+
throw new Google_Auth_Exception("Error refreshing the OAuth2 token, message: '$body'", $code);
|
328 |
+
}
|
329 |
+
}
|
330 |
+
|
331 |
+
/**
|
332 |
+
* Revoke an OAuth2 access token or refresh token. This method will revoke the current access
|
333 |
+
* token, if a token isn't provided.
|
334 |
+
* @throws Google_Auth_Exception
|
335 |
+
* @param string|null $token The token (access token or a refresh token) that should be revoked.
|
336 |
+
* @return boolean Returns True if the revocation was successful, otherwise False.
|
337 |
+
*/
|
338 |
+
public function revokeToken($token = null)
|
339 |
+
{
|
340 |
+
if (!$token) {
|
341 |
+
if (!$this->token) {
|
342 |
+
// Not initialized, no token to actually revoke
|
343 |
+
return false;
|
344 |
+
} elseif (array_key_exists('refresh_token', $this->token)) {
|
345 |
+
$token = $this->token['refresh_token'];
|
346 |
+
} else {
|
347 |
+
$token = $this->token['access_token'];
|
348 |
+
}
|
349 |
+
}
|
350 |
+
$request = new Google_Http_Request(
|
351 |
+
self::OAUTH2_REVOKE_URI,
|
352 |
+
'POST',
|
353 |
+
array(),
|
354 |
+
"token=$token"
|
355 |
+
);
|
356 |
+
$request->disableGzip();
|
357 |
+
$response = $this->client->getIo()->makeRequest($request);
|
358 |
+
$code = $response->getResponseHttpCode();
|
359 |
+
if ($code == 200) {
|
360 |
+
$this->token = null;
|
361 |
+
return true;
|
362 |
+
}
|
363 |
+
|
364 |
+
return false;
|
365 |
+
}
|
366 |
+
|
367 |
+
/**
|
368 |
+
* Returns if the access_token is expired.
|
369 |
+
* @return bool Returns True if the access_token is expired.
|
370 |
+
*/
|
371 |
+
public function isAccessTokenExpired()
|
372 |
+
{
|
373 |
+
if (!$this->token || !isset($this->token['created'])) {
|
374 |
+
return true;
|
375 |
+
}
|
376 |
+
|
377 |
+
// If the token is set to expire in the next 30 seconds.
|
378 |
+
$expired = ($this->token['created']
|
379 |
+
+ ($this->token['expires_in'] - 30)) < time();
|
380 |
+
|
381 |
+
return $expired;
|
382 |
+
}
|
383 |
+
|
384 |
+
// Gets federated sign-on certificates to use for verifying identity tokens.
|
385 |
+
// Returns certs as array structure, where keys are key ids, and values
|
386 |
+
// are PEM encoded certificates.
|
387 |
+
private function getFederatedSignOnCerts()
|
388 |
+
{
|
389 |
+
return $this->retrieveCertsFromLocation(
|
390 |
+
$this->client->getClassConfig($this, 'federated_signon_certs_url')
|
391 |
+
);
|
392 |
+
}
|
393 |
+
|
394 |
+
/**
|
395 |
+
* Retrieve and cache a certificates file.
|
396 |
+
* @param $url location
|
397 |
+
* @return array certificates
|
398 |
+
*/
|
399 |
+
public function retrieveCertsFromLocation($url)
|
400 |
+
{
|
401 |
+
// If we're retrieving a local file, just grab it.
|
402 |
+
if ("http" != substr($url, 0, 4)) {
|
403 |
+
$file = file_get_contents($url);
|
404 |
+
if ($file) {
|
405 |
+
return json_decode($file, true);
|
406 |
+
} else {
|
407 |
+
throw new Google_Auth_Exception(
|
408 |
+
"Failed to retrieve verification certificates: '" .
|
409 |
+
$url . "'."
|
410 |
+
);
|
411 |
+
}
|
412 |
+
}
|
413 |
+
|
414 |
+
// This relies on makeRequest caching certificate responses.
|
415 |
+
$request = $this->client->getIo()->makeRequest(
|
416 |
+
new Google_Http_Request(
|
417 |
+
$url
|
418 |
+
)
|
419 |
+
);
|
420 |
+
if ($request->getResponseHttpCode() == 200) {
|
421 |
+
$certs = json_decode($request->getResponseBody(), true);
|
422 |
+
if ($certs) {
|
423 |
+
return $certs;
|
424 |
+
}
|
425 |
+
}
|
426 |
+
throw new Google_Auth_Exception(
|
427 |
+
"Failed to retrieve verification certificates: '" .
|
428 |
+
$request->getResponseBody() . "'.",
|
429 |
+
$request->getResponseHttpCode()
|
430 |
+
);
|
431 |
+
}
|
432 |
+
|
433 |
+
/**
|
434 |
+
* Verifies an id token and returns the authenticated apiLoginTicket.
|
435 |
+
* Throws an exception if the id token is not valid.
|
436 |
+
* The audience parameter can be used to control which id tokens are
|
437 |
+
* accepted. By default, the id token must have been issued to this OAuth2 client.
|
438 |
+
*
|
439 |
+
* @param $id_token
|
440 |
+
* @param $audience
|
441 |
+
* @return Google_Auth_LoginTicket
|
442 |
+
*/
|
443 |
+
public function verifyIdToken($id_token = null, $audience = null)
|
444 |
+
{
|
445 |
+
if (!$id_token) {
|
446 |
+
$id_token = $this->token['id_token'];
|
447 |
+
}
|
448 |
+
$certs = $this->getFederatedSignonCerts();
|
449 |
+
if (!$audience) {
|
450 |
+
$audience = $this->client->getClassConfig($this, 'client_id');
|
451 |
+
}
|
452 |
+
|
453 |
+
return $this->verifySignedJwtWithCerts($id_token, $certs, $audience, self::OAUTH2_ISSUER);
|
454 |
+
}
|
455 |
+
|
456 |
+
/**
|
457 |
+
* Verifies the id token, returns the verified token contents.
|
458 |
+
*
|
459 |
+
* @param $jwt the token
|
460 |
+
* @param $certs array of certificates
|
461 |
+
* @param $required_audience the expected consumer of the token
|
462 |
+
* @param [$issuer] the expected issues, defaults to Google
|
463 |
+
* @param [$max_expiry] the max lifetime of a token, defaults to MAX_TOKEN_LIFETIME_SECS
|
464 |
+
* @return token information if valid, false if not
|
465 |
+
*/
|
466 |
+
public function verifySignedJwtWithCerts(
|
467 |
+
$jwt,
|
468 |
+
$certs,
|
469 |
+
$required_audience,
|
470 |
+
$issuer = null,
|
471 |
+
$max_expiry = null
|
472 |
+
) {
|
473 |
+
if (!$max_expiry) {
|
474 |
+
// Set the maximum time we will accept a token for.
|
475 |
+
$max_expiry = self::MAX_TOKEN_LIFETIME_SECS;
|
476 |
+
}
|
477 |
+
|
478 |
+
$segments = explode(".", $jwt);
|
479 |
+
if (count($segments) != 3) {
|
480 |
+
throw new Google_Auth_Exception("Wrong number of segments in token: $jwt");
|
481 |
+
}
|
482 |
+
$signed = $segments[0] . "." . $segments[1];
|
483 |
+
$signature = Google_Utils::urlSafeB64Decode($segments[2]);
|
484 |
+
|
485 |
+
// Parse envelope.
|
486 |
+
$envelope = json_decode(Google_Utils::urlSafeB64Decode($segments[0]), true);
|
487 |
+
if (!$envelope) {
|
488 |
+
throw new Google_Auth_Exception("Can't parse token envelope: " . $segments[0]);
|
489 |
+
}
|
490 |
+
|
491 |
+
// Parse token
|
492 |
+
$json_body = Google_Utils::urlSafeB64Decode($segments[1]);
|
493 |
+
$payload = json_decode($json_body, true);
|
494 |
+
if (!$payload) {
|
495 |
+
throw new Google_Auth_Exception("Can't parse token payload: " . $segments[1]);
|
496 |
+
}
|
497 |
+
|
498 |
+
// Check signature
|
499 |
+
$verified = false;
|
500 |
+
foreach ($certs as $keyName => $pem) {
|
501 |
+
$public_key = new Google_Verifier_Pem($pem);
|
502 |
+
if ($public_key->verify($signed, $signature)) {
|
503 |
+
$verified = true;
|
504 |
+
break;
|
505 |
+
}
|
506 |
+
}
|
507 |
+
|
508 |
+
if (!$verified) {
|
509 |
+
throw new Google_Auth_Exception("Invalid token signature: $jwt");
|
510 |
+
}
|
511 |
+
|
512 |
+
// Check issued-at timestamp
|
513 |
+
$iat = 0;
|
514 |
+
if (array_key_exists("iat", $payload)) {
|
515 |
+
$iat = $payload["iat"];
|
516 |
+
}
|
517 |
+
if (!$iat) {
|
518 |
+
throw new Google_Auth_Exception("No issue time in token: $json_body");
|
519 |
+
}
|
520 |
+
$earliest = $iat - self::CLOCK_SKEW_SECS;
|
521 |
+
|
522 |
+
// Check expiration timestamp
|
523 |
+
$now = time();
|
524 |
+
$exp = 0;
|
525 |
+
if (array_key_exists("exp", $payload)) {
|
526 |
+
$exp = $payload["exp"];
|
527 |
+
}
|
528 |
+
if (!$exp) {
|
529 |
+
throw new Google_Auth_Exception("No expiration time in token: $json_body");
|
530 |
+
}
|
531 |
+
if ($exp >= $now + $max_expiry) {
|
532 |
+
throw new Google_Auth_Exception(
|
533 |
+
sprintf("Expiration time too far in future: %s", $json_body)
|
534 |
+
);
|
535 |
+
}
|
536 |
+
|
537 |
+
$latest = $exp + self::CLOCK_SKEW_SECS;
|
538 |
+
if ($now < $earliest) {
|
539 |
+
throw new Google_Auth_Exception(
|
540 |
+
sprintf(
|
541 |
+
"Token used too early, %s < %s: %s",
|
542 |
+
$now,
|
543 |
+
$earliest,
|
544 |
+
$json_body
|
545 |
+
)
|
546 |
+
);
|
547 |
+
}
|
548 |
+
if ($now > $latest) {
|
549 |
+
throw new Google_Auth_Exception(
|
550 |
+
sprintf(
|
551 |
+
"Token used too late, %s > %s: %s",
|
552 |
+
$now,
|
553 |
+
$latest,
|
554 |
+
$json_body
|
555 |
+
)
|
556 |
+
);
|
557 |
+
}
|
558 |
+
|
559 |
+
$iss = $payload['iss'];
|
560 |
+
if ($issuer && $iss != $issuer) {
|
561 |
+
throw new Google_Auth_Exception(
|
562 |
+
sprintf(
|
563 |
+
"Invalid issuer, %s != %s: %s",
|
564 |
+
$iss,
|
565 |
+
$issuer,
|
566 |
+
$json_body
|
567 |
+
)
|
568 |
+
);
|
569 |
+
}
|
570 |
+
|
571 |
+
// Check audience
|
572 |
+
$aud = $payload["aud"];
|
573 |
+
if ($aud != $required_audience) {
|
574 |
+
throw new Google_Auth_Exception(
|
575 |
+
sprintf(
|
576 |
+
"Wrong recipient, %s != %s:",
|
577 |
+
$aud,
|
578 |
+
$required_audience,
|
579 |
+
$json_body
|
580 |
+
)
|
581 |
+
);
|
582 |
+
}
|
583 |
+
|
584 |
+
// All good.
|
585 |
+
return new Google_Auth_LoginTicket($envelope, $payload);
|
586 |
+
}
|
587 |
+
}
|
lib/Google/Auth/Simple.php
ADDED
@@ -0,0 +1,92 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* Copyright 2010 Google Inc.
|
4 |
+
*
|
5 |
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
6 |
+
* you may not use this file except in compliance with the License.
|
7 |
+
* You may obtain 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,
|
13 |
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14 |
+
* See the License for the specific language governing permissions and
|
15 |
+
* limitations under the License.
|
16 |
+
*/
|
17 |
+
|
18 |
+
require_once $GLOBALS['iwp_mmb_plugin_dir']."/lib/Google/Auth/Abstract.php";
|
19 |
+
require_once $GLOBALS['iwp_mmb_plugin_dir']."/lib/Google/Http/Request.php";
|
20 |
+
|
21 |
+
/**
|
22 |
+
* Simple API access implementation. Can either be used to make requests
|
23 |
+
* completely unauthenticated, or by using a Simple API Access developer
|
24 |
+
* key.
|
25 |
+
* @author Chris Chabot <chabotc@google.com>
|
26 |
+
* @author Chirag Shah <chirags@google.com>
|
27 |
+
*/
|
28 |
+
class Google_Auth_Simple extends Google_Auth_Abstract
|
29 |
+
{
|
30 |
+
private $key = null;
|
31 |
+
private $client;
|
32 |
+
|
33 |
+
public function __construct(Google_Client $client, $config = null)
|
34 |
+
{
|
35 |
+
$this->client = $client;
|
36 |
+
}
|
37 |
+
|
38 |
+
/**
|
39 |
+
* Perform an authenticated / signed apiHttpRequest.
|
40 |
+
* This function takes the apiHttpRequest, calls apiAuth->sign on it
|
41 |
+
* (which can modify the request in what ever way fits the auth mechanism)
|
42 |
+
* and then calls apiCurlIO::makeRequest on the signed request
|
43 |
+
*
|
44 |
+
* @param Google_Http_Request $request
|
45 |
+
* @return Google_Http_Request The resulting HTTP response including the
|
46 |
+
* responseHttpCode, responseHeaders and responseBody.
|
47 |
+
*/
|
48 |
+
public function authenticatedRequest(Google_Http_Request $request)
|
49 |
+
{
|
50 |
+
$request = $this->sign($request);
|
51 |
+
return $this->io->makeRequest($request);
|
52 |
+
}
|
53 |
+
|
54 |
+
public function authenticate($code)
|
55 |
+
{
|
56 |
+
throw new Google_Auth_Exception("Simple auth does not exchange tokens.");
|
57 |
+
}
|
58 |
+
|
59 |
+
public function setAccessToken($accessToken)
|
60 |
+
{
|
61 |
+
/* noop*/
|
62 |
+
}
|
63 |
+
|
64 |
+
public function getAccessToken()
|
65 |
+
{
|
66 |
+
return null;
|
67 |
+
}
|
68 |
+
|
69 |
+
public function createAuthUrl($scope)
|
70 |
+
{
|
71 |
+
return null;
|
72 |
+
}
|
73 |
+
|
74 |
+
public function refreshToken($refreshToken)
|
75 |
+
{
|
76 |
+
/* noop*/
|
77 |
+
}
|
78 |
+
|
79 |
+
public function revokeToken()
|
80 |
+
{
|
81 |
+
/* noop*/
|
82 |
+
}
|
83 |
+
|
84 |
+
public function sign(Google_Http_Request $request)
|
85 |
+
{
|
86 |
+
$key = $this->client->getClassConfig($this, 'developer_key');
|
87 |
+
if ($key) {
|
88 |
+
$request->setQueryParam('key', $key);
|
89 |
+
}
|
90 |
+
return $request;
|
91 |
+
}
|
92 |
+
}
|
lib/Google/Cache/Abstract.php
ADDED
@@ -0,0 +1,53 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* Copyright 2008 Google Inc.
|
4 |
+
*
|
5 |
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
6 |
+
* you may not use this file except in compliance with the License.
|
7 |
+
* You may obtain 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,
|
13 |
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14 |
+
* See the License for the specific language governing permissions and
|
15 |
+
* limitations under the License.
|
16 |
+
*/
|
17 |
+
|
18 |
+
/**
|
19 |
+
* Abstract storage class
|
20 |
+
*
|
21 |
+
* @author Chris Chabot <chabotc@google.com>
|
22 |
+
*/
|
23 |
+
abstract class Google_Cache_Abstract
|
24 |
+
{
|
25 |
+
|
26 |
+
abstract public function __construct(Google_Client $client);
|
27 |
+
|
28 |
+
/**
|
29 |
+
* Retrieves the data for the given key, or false if they
|
30 |
+
* key is unknown or expired
|
31 |
+
*
|
32 |
+
* @param String $key The key who's data to retrieve
|
33 |
+
* @param boolean|int $expiration Expiration time in seconds
|
34 |
+
*
|
35 |
+
*/
|
36 |
+
abstract public function get($key, $expiration = false);
|
37 |
+
|
38 |
+
/**
|
39 |
+
* Store the key => $value set. The $value is serialized
|
40 |
+
* by this function so can be of any type
|
41 |
+
*
|
42 |
+
* @param string $key Key of the data
|
43 |
+
* @param string $value data
|
44 |
+
*/
|
45 |
+
abstract public function set($key, $value);
|
46 |
+
|
47 |
+
/**
|
48 |
+
* Removes the key/data pair for the given $key
|
49 |
+
*
|
50 |
+
* @param String $key
|
51 |
+
*/
|
52 |
+
abstract public function delete($key);
|
53 |
+
}
|
lib/Google/Cache/Apc.php
ADDED
@@ -0,0 +1,73 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* Copyright 2010 Google Inc.
|
4 |
+
*
|
5 |
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
6 |
+
* you may not use this file except in compliance with the License.
|
7 |
+
* You may obtain 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,
|
13 |
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14 |
+
* See the License for the specific language governing permissions and
|
15 |
+
* limitations under the License.
|
16 |
+
*/
|
17 |
+
|
18 |
+
require_once $GLOBALS['iwp_mmb_plugin_dir']."/lib/Google/Cache/Abstract.php";
|
19 |
+
require_once $GLOBALS['iwp_mmb_plugin_dir']."/lib/Google/Cache/Exception.php";
|
20 |
+
|
21 |
+
/**
|
22 |
+
* A persistent storage class based on the APC cache, which is not
|
23 |
+
* really very persistent, as soon as you restart your web server
|
24 |
+
* the storage will be wiped, however for debugging and/or speed
|
25 |
+
* it can be useful, and cache is a lot cheaper then storage.
|
26 |
+
*
|
27 |
+
* @author Chris Chabot <chabotc@google.com>
|
28 |
+
*/
|
29 |
+
class Google_Cache_Apc extends Google_Cache_Abstract
|
30 |
+
{
|
31 |
+
public function __construct(Google_Client $client)
|
32 |
+
{
|
33 |
+
if (! function_exists('apc_add') ) {
|
34 |
+
throw new Google_Cache_Exception("Apc functions not available");
|
35 |
+
}
|
36 |
+
}
|
37 |
+
|
38 |
+
/**
|
39 |
+
* @inheritDoc
|
40 |
+
*/
|
41 |
+
public function get($key, $expiration = false)
|
42 |
+
{
|
43 |
+
$ret = apc_fetch($key);
|
44 |
+
if ($ret === false) {
|
45 |
+
return false;
|
46 |
+
}
|
47 |
+
if (is_numeric($expiration) && (time() - $ret['time'] > $expiration)) {
|
48 |
+
$this->delete($key);
|
49 |
+
return false;
|
50 |
+
}
|
51 |
+
return $ret['data'];
|
52 |
+
}
|
53 |
+
|
54 |
+
/**
|
55 |
+
* @inheritDoc
|
56 |
+
*/
|
57 |
+
public function set($key, $value)
|
58 |
+
{
|
59 |
+
$rc = apc_store($key, array('time' => time(), 'data' => $value));
|
60 |
+
if ($rc == false) {
|
61 |
+
throw new Google_Cache_Exception("Couldn't store data");
|
62 |
+
}
|
63 |
+
}
|
64 |
+
|
65 |
+
/**
|
66 |
+
* @inheritDoc
|
67 |
+
* @param String $key
|
68 |
+
*/
|
69 |
+
public function delete($key)
|
70 |
+
{
|
71 |
+
apc_delete($key);
|
72 |
+
}
|
73 |
+
}
|
lib/Google/Cache/Exception.php
ADDED
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* Copyright 2013 Google Inc.
|
4 |
+
*
|
5 |
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
6 |
+
* you may not use this file except in compliance with the License.
|
7 |
+
* You may obtain 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,
|
13 |
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14 |
+
* See the License for the specific language governing permissions and
|
15 |
+
* limitations under the License.
|
16 |
+
*/
|
17 |
+
require_once $GLOBALS['iwp_mmb_plugin_dir']."/lib/Google/Exception.php";
|
18 |
+
|
19 |
+
class Google_Cache_Exception extends Google_Exception
|
20 |
+
{
|
21 |
+
}
|
lib/Google/Cache/File.php
ADDED
@@ -0,0 +1,145 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* Copyright 2008 Google Inc.
|
4 |
+
*
|
5 |
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
6 |
+
* you may not use this file except in compliance with the License.
|
7 |
+
* You may obtain 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,
|
13 |
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14 |
+
* See the License for the specific language governing permissions and
|
15 |
+
* limitations under the License.
|
16 |
+
*/
|
17 |
+
|
18 |
+
require_once $GLOBALS['iwp_mmb_plugin_dir']."/lib/Google/Cache/Abstract.php";
|
19 |
+
require_once $GLOBALS['iwp_mmb_plugin_dir']."/lib/Google/Cache/Exception.php";
|
20 |
+
|
21 |
+
/*
|
22 |
+
* This class implements a basic on disk storage. While that does
|
23 |
+
* work quite well it's not the most elegant and scalable solution.
|
24 |
+
* It will also get you into a heap of trouble when you try to run
|
25 |
+
* this in a clustered environment.
|
26 |
+
*
|
27 |
+
* @author Chris Chabot <chabotc@google.com>
|
28 |
+
*/
|
29 |
+
class Google_Cache_File extends Google_Cache_Abstract
|
30 |
+
{
|
31 |
+
const MAX_LOCK_RETRIES = 10;
|
32 |
+
private $path;
|
33 |
+
private $fh;
|
34 |
+
|
35 |
+
public function __construct(Google_Client $client)
|
36 |
+
{
|
37 |
+
$this->path = $client->getClassConfig($this, 'directory');
|
38 |
+
}
|
39 |
+
|
40 |
+
public function get($key, $expiration = false)
|
41 |
+
{
|
42 |
+
$storageFile = $this->getCacheFile($key);
|
43 |
+
$data = false;
|
44 |
+
|
45 |
+
if (!file_exists($storageFile)) {
|
46 |
+
return false;
|
47 |
+
}
|
48 |
+
|
49 |
+
if ($expiration) {
|
50 |
+
$mtime = filemtime($storageFile);
|
51 |
+
if (($now - $mtime) >= $expiration) {
|
52 |
+
$this->delete($key);
|
53 |
+
return false;
|
54 |
+
}
|
55 |
+
}
|
56 |
+
|
57 |
+
if ($this->acquireReadLock($storageFile)) {
|
58 |
+
$data = fread($this->fh, filesize($storageFile));
|
59 |
+
$data = unserialize($data);
|
60 |
+
$this->unlock($storageFile);
|
61 |
+
}
|
62 |
+
|
63 |
+
return $data;
|
64 |
+
}
|
65 |
+
|
66 |
+
public function set($key, $value)
|
67 |
+
{
|
68 |
+
$storageFile = $this->getWriteableCacheFile($key);
|
69 |
+
if ($this->acquireWriteLock($storageFile)) {
|
70 |
+
// We serialize the whole request object, since we don't only want the
|
71 |
+
// responseContent but also the postBody used, headers, size, etc.
|
72 |
+
$data = serialize($value);
|
73 |
+
$result = fwrite($this->fh, $data);
|
74 |
+
$this->unlock($storageFile);
|
75 |
+
}
|
76 |
+
}
|
77 |
+
|
78 |
+
public function delete($key)
|
79 |
+
{
|
80 |
+
$file = $this->getCacheFile($key);
|
81 |
+
if (file_exists($file) && !unlink($file)) {
|
82 |
+
throw new Google_Cache_Exception("Cache file could not be deleted");
|
83 |
+
}
|
84 |
+
}
|
85 |
+
|
86 |
+
private function getWriteableCacheFile($file)
|
87 |
+
{
|
88 |
+
return $this->getCacheFile($file, true);
|
89 |
+
}
|
90 |
+
|
91 |
+
private function getCacheFile($file, $forWrite = false)
|
92 |
+
{
|
93 |
+
return $this->getCacheDir($file, $forWrite) . '/' . md5($file);
|
94 |
+
}
|
95 |
+
|
96 |
+
private function getCacheDir($file, $forWrite)
|
97 |
+
{
|
98 |
+
// use the first 2 characters of the hash as a directory prefix
|
99 |
+
// this should prevent slowdowns due to huge directory listings
|
100 |
+
// and thus give some basic amount of scalability
|
101 |
+
$storageDir = $this->path . '/' . substr(md5($file), 0, 2);
|
102 |
+
if ($forWrite && ! is_dir($storageDir)) {
|
103 |
+
if (! mkdir($storageDir, 0755, true)) {
|
104 |
+
throw new Google_Cache_Exception("Could not create storage directory: $storageDir");
|
105 |
+
}
|
106 |
+
}
|
107 |
+
return $storageDir;
|
108 |
+
}
|
109 |
+
|
110 |
+
private function acquireReadLock($storageFile)
|
111 |
+
{
|
112 |
+
return $this->acquireLock(LOCK_SH, $storageFile);
|
113 |
+
}
|
114 |
+
|
115 |
+
private function acquireWriteLock($storageFile)
|
116 |
+
{
|
117 |
+
$rc = $this->acquireLock(LOCK_EX, $storageFile);
|
118 |
+
if (!$rc) {
|
119 |
+
$this->delete($storageFile);
|
120 |
+
}
|
121 |
+
return $rc;
|
122 |
+
}
|
123 |
+
|
124 |
+
private function acquireLock($type, $storageFile)
|
125 |
+
{
|
126 |
+
$mode = $type == LOCK_EX ? "w" : "r";
|
127 |
+
$this->fh = fopen($storageFile, $mode);
|
128 |
+
$count = 0;
|
129 |
+
while (!flock($this->fh, $type | LOCK_NB)) {
|
130 |
+
// Sleep for 10ms.
|
131 |
+
usleep(10000);
|
132 |
+
if (++$count < self::MAX_LOCK_RETRIES) {
|
133 |
+
return false;
|
134 |
+
}
|
135 |
+
}
|
136 |
+
return true;
|
137 |
+
}
|
138 |
+
|
139 |
+
public function unlock($storageFile)
|
140 |
+
{
|
141 |
+
if ($this->fh) {
|
142 |
+
flock($this->fh, LOCK_UN);
|
143 |
+
}
|
144 |
+
}
|
145 |
+
}
|
lib/Google/Cache/Memcache.php
ADDED
@@ -0,0 +1,137 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* Copyright 2008 Google Inc.
|
4 |
+
*
|
5 |
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
6 |
+
* you may not use this file except in compliance with the License.
|
7 |
+
* You may obtain 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,
|
13 |
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14 |
+
* See the License for the specific language governing permissions and
|
15 |
+
* limitations under the License.
|
16 |
+
*/
|
17 |
+
|
18 |
+
require_once $GLOBALS['iwp_mmb_plugin_dir']."/lib/Google/Cache/Abstract.php";
|
19 |
+
require_once $GLOBALS['iwp_mmb_plugin_dir']."/lib/Google/Cache/Exception.php";
|
20 |
+
|
21 |
+
/**
|
22 |
+
* A persistent storage class based on the memcache, which is not
|
23 |
+
* really very persistent, as soon as you restart your memcache daemon
|
24 |
+
* the storage will be wiped.
|
25 |
+
*
|
26 |
+
* Will use either the memcache or memcached extensions, preferring
|
27 |
+
* memcached.
|
28 |
+
*
|
29 |
+
* @author Chris Chabot <chabotc@google.com>
|
30 |
+
*/
|
31 |
+
class Google_Cache_Memcache extends Google_Cache_Abstract
|
32 |
+
{
|
33 |
+
private $connection = false;
|
34 |
+
private $mc = false;
|
35 |
+
private $host;
|
36 |
+
private $port;
|
37 |
+
|
38 |
+
public function __construct(Google_Client $client)
|
39 |
+
{
|
40 |
+
if (!function_exists('memcache_connect') && !class_exists("Memcached")) {
|
41 |
+
throw new Google_Cache_Exception("Memcache functions not available");
|
42 |
+
}
|
43 |
+
if ($client->isAppEngine()) {
|
44 |
+
// No credentials needed for GAE.
|
45 |
+
$this->mc = new Memcached();
|
46 |
+
$this->connection = true;
|
47 |
+
} else {
|
48 |
+
$this->host = $client->getClassConfig($this, 'host');
|
49 |
+
$this->port = $client->getClassConfig($this, 'port');
|
50 |
+
if (empty($this->host) || empty($this->port)) {
|
51 |
+
throw new Google_Cache_Exception("You need to supply a valid memcache host and port");
|
52 |
+
}
|
53 |
+
}
|
54 |
+
}
|
55 |
+
|
56 |
+
/**
|
57 |
+
* @inheritDoc
|
58 |
+
*/
|
59 |
+
public function get($key, $expiration = false)
|
60 |
+
{
|
61 |
+
$this->connect();
|
62 |
+
$ret = false;
|
63 |
+
if ($this->mc) {
|
64 |
+
$ret = $this->mc->get($key);
|
65 |
+
} else {
|
66 |
+
$ret = memcache_get($this->connection, $key);
|
67 |
+
}
|
68 |
+
if ($ret === false) {
|
69 |
+
return false;
|
70 |
+
}
|
71 |
+
if (is_numeric($expiration) && (time() - $ret['time'] > $expiration)) {
|
72 |
+
$this->delete($key);
|
73 |
+
return false;
|
74 |
+
}
|
75 |
+
return $ret['data'];
|
76 |
+
}
|
77 |
+
|
78 |
+
/**
|
79 |
+
* @inheritDoc
|
80 |
+
* @param string $key
|
81 |
+
* @param string $value
|
82 |
+
* @throws Google_Cache_Exception
|
83 |
+
*/
|
84 |
+
public function set($key, $value)
|
85 |
+
{
|
86 |
+
$this->connect();
|
87 |
+
// we store it with the cache_time default expiration so objects will at
|
88 |
+
// least get cleaned eventually.
|
89 |
+
$data = array('time' => time(), 'data' => $value);
|
90 |
+
$rc = false;
|
91 |
+
if ($this->mc) {
|
92 |
+
$rc = $this->mc->set($key, $data);
|
93 |
+
} else {
|
94 |
+
$rc = memcache_set($this->connection, $key, $data, false);
|
95 |
+
}
|
96 |
+
if ($rc == false) {
|
97 |
+
throw new Google_Cache_Exception("Couldn't store data in cache");
|
98 |
+
}
|
99 |
+
}
|
100 |
+
|
101 |
+
/**
|
102 |
+
* @inheritDoc
|
103 |
+
* @param String $key
|
104 |
+
*/
|
105 |
+
public function delete($key)
|
106 |
+
{
|
107 |
+
$this->connect();
|
108 |
+
if ($this->mc) {
|
109 |
+
$this->mc->delete($key, 0);
|
110 |
+
} else {
|
111 |
+
memcache_delete($this->connection, $key, 0);
|
112 |
+
}
|
113 |
+
}
|
114 |
+
|
115 |
+
/**
|
116 |
+
* Lazy initialiser for memcache connection. Uses pconnect for to take
|
117 |
+
* advantage of the persistence pool where possible.
|
118 |
+
*/
|
119 |
+
private function connect()
|
120 |
+
{
|
121 |
+
if ($this->connection) {
|
122 |
+
return;
|
123 |
+
}
|
124 |
+
|
125 |
+
if (class_exists("Memcached")) {
|
126 |
+
$this->mc = new Memcached();
|
127 |
+
$this->mc->addServer($this->host, $this->port);
|
128 |
+
$this->connection = true;
|
129 |
+
} else {
|
130 |
+
$this->connection = memcache_pconnect($this->host, $this->port);
|
131 |
+
}
|
132 |
+
|
133 |
+
if (! $this->connection) {
|
134 |
+
throw new Google_Cache_Exception("Couldn't connect to memcache server");
|
135 |
+
}
|
136 |
+
}
|
137 |
+
}
|
lib/Google/Cache/Null.php
ADDED
@@ -0,0 +1,56 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* Copyright 2014 Google Inc.
|
4 |
+
*
|
5 |
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
6 |
+
* you may not use this file except in compliance with the License.
|
7 |
+
* You may obtain 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,
|
13 |
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14 |
+
* See the License for the specific language governing permissions and
|
15 |
+
* limitations under the License.
|
16 |
+
*/
|
17 |
+
|
18 |
+
require_once $GLOBALS['iwp_mmb_plugin_dir']."/lib/Google/Cache/Abstract.php";
|
19 |
+
require_once $GLOBALS['iwp_mmb_plugin_dir']."/lib/Google/Cache/Exception.php";
|
20 |
+
|
21 |
+
/**
|
22 |
+
* A blank storage class, for cases where caching is not
|
23 |
+
* required.
|
24 |
+
*/
|
25 |
+
class Google_Cache_Null extends Google_Cache_Abstract
|
26 |
+
{
|
27 |
+
public function __construct(Google_Client $client)
|
28 |
+
{
|
29 |
+
|
30 |
+
}
|
31 |
+
|
32 |
+
/**
|
33 |
+
* @inheritDoc
|
34 |
+
*/
|
35 |
+
public function get($key, $expiration = false)
|
36 |
+
{
|
37 |
+
return false;
|
38 |
+
}
|
39 |
+
|
40 |
+
/**
|
41 |
+
* @inheritDoc
|
42 |
+
*/
|
43 |
+
public function set($key, $value)
|
44 |
+
{
|
45 |
+
// Nop.
|
46 |
+
}
|
47 |
+
|
48 |
+
/**
|
49 |
+
* @inheritDoc
|
50 |
+
* @param String $key
|
51 |
+
*/
|
52 |
+
public function delete($key)
|
53 |
+
{
|
54 |
+
// Nop.
|
55 |
+
}
|
56 |
+
}
|
lib/Google/Client.php
ADDED
@@ -0,0 +1,608 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* Copyright 2010 Google Inc.
|
4 |
+
*
|
5 |
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
6 |
+
* you may not use this file except in compliance with the License.
|
7 |
+
* You may obtain 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,
|
13 |
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14 |
+
* See the License for the specific language governing permissions and
|
15 |
+
* limitations under the License.
|
16 |
+
*/
|
17 |
+
|
18 |
+
require_once $GLOBALS['iwp_mmb_plugin_dir'].'/lib/Google/Auth/AssertionCredentials.php';
|
19 |
+
require_once $GLOBALS['iwp_mmb_plugin_dir'].'/lib/Google/Cache/File.php';
|
20 |
+
require_once $GLOBALS['iwp_mmb_plugin_dir'].'/lib/Google/Cache/Memcache.php';
|
21 |
+
require_once $GLOBALS['iwp_mmb_plugin_dir'].'/lib/Google/Config.php';
|
22 |
+
require_once $GLOBALS['iwp_mmb_plugin_dir'].'/lib/Google/Collection.php';
|
23 |
+
require_once $GLOBALS['iwp_mmb_plugin_dir'].'/lib/Google/Exception.php';
|
24 |
+
require_once $GLOBALS['iwp_mmb_plugin_dir'].'/lib/Google/IO/Curl.php';
|
25 |
+
require_once $GLOBALS['iwp_mmb_plugin_dir'].'/lib/Google/IO/Stream.php';
|
26 |
+
require_once $GLOBALS['iwp_mmb_plugin_dir'].'/lib/Google/Model.php';
|
27 |
+
require_once $GLOBALS['iwp_mmb_plugin_dir'].'/lib/Google/Service.php';
|
28 |
+
require_once $GLOBALS['iwp_mmb_plugin_dir'].'/lib/Google/Service/Resource.php';
|
29 |
+
|
30 |
+
/**
|
31 |
+
* The Google API Client
|
32 |
+
* http://code.google.com/p/google-api-php-client/
|
33 |
+
*
|
34 |
+
* @author Chris Chabot <chabotc@google.com>
|
35 |
+
* @author Chirag Shah <chirags@google.com>
|
36 |
+
*/
|
37 |
+
class Google_Client
|
38 |
+
{
|
39 |
+
const LIBVER = "1.0.5-beta";
|
40 |
+
const USER_AGENT_SUFFIX = "google-api-php-client/";
|
41 |
+
/**
|
42 |
+
* @var Google_Auth_Abstract $auth
|
43 |
+
*/
|
44 |
+
private $auth;
|
45 |
+
|
46 |
+
/**
|
47 |
+
* @var Google_IO_Abstract $io
|
48 |
+
*/
|
49 |
+
private $io;
|
50 |
+
|
51 |
+
/**
|
52 |
+
* @var Google_Cache_Abstract $cache
|
53 |
+
*/
|
54 |
+
private $cache;
|
55 |
+
|
56 |
+
/**
|
57 |
+
* @var Google_Config $config
|
58 |
+
*/
|
59 |
+
private $config;
|
60 |
+
|
61 |
+
/**
|
62 |
+
* @var boolean $deferExecution
|
63 |
+
*/
|
64 |
+
private $deferExecution = false;
|
65 |
+
|
66 |
+
/** @var array $scopes */
|
67 |
+
// Scopes requested by the client
|
68 |
+
protected $requestedScopes = array();
|
69 |
+
|
70 |
+
// definitions of services that are discovered.
|
71 |
+
protected $services = array();
|
72 |
+
|
73 |
+
// Used to track authenticated state, can't discover services after doing authenticate()
|
74 |
+
private $authenticated = false;
|
75 |
+
|
76 |
+
/**
|
77 |
+
* Construct the Google Client.
|
78 |
+
*
|
79 |
+
* @param $config Google_Config or string for the ini file to load
|
80 |
+
*/
|
81 |
+
public function __construct($config = null)
|
82 |
+
{
|
83 |
+
if (! ini_get('date.timezone') &&
|
84 |
+
function_exists('date_default_timezone_set')) {
|
85 |
+
date_default_timezone_set('UTC');
|
86 |
+
}
|
87 |
+
|
88 |
+
if (is_string($config) && strlen($config)) {
|
89 |
+
$config = new Google_Config($config);
|
90 |
+
} else if ( !($config instanceof Google_Config)) {
|
91 |
+
$config = new Google_Config();
|
92 |
+
|
93 |
+
if ($this->isAppEngine()) {
|
94 |
+
// Automatically use Memcache if we're in AppEngine.
|
95 |
+
$config->setCacheClass('Google_Cache_Memcache');
|
96 |
+
}
|
97 |
+
|
98 |
+
if (version_compare(phpversion(), "5.3.4", "<=") || $this->isAppEngine()) {
|
99 |
+
// Automatically disable compress.zlib, as currently unsupported.
|
100 |
+
$config->setClassConfig('Google_Http_Request', 'disable_gzip', true);
|
101 |
+
}
|
102 |
+
}
|
103 |
+
|
104 |
+
if ($config->getIoClass() == Google_Config::USE_AUTO_IO_SELECTION) {
|
105 |
+
if (function_exists('curl_version') && function_exists('curl_exec')) {
|
106 |
+
$config->setIoClass("Google_Io_Curl");
|
107 |
+
} else {
|
108 |
+
$config->setIoClass("Google_Io_Stream");
|
109 |
+
}
|
110 |
+
}
|
111 |
+
|
112 |
+
$this->config = $config;
|
113 |
+
}
|
114 |
+
|
115 |
+
/**
|
116 |
+
* Get a string containing the version of the library.
|
117 |
+
*
|
118 |
+
* @return string
|
119 |
+
*/
|
120 |
+
public function getLibraryVersion()
|
121 |
+
{
|
122 |
+
return self::LIBVER;
|
123 |
+
}
|
124 |
+
|
125 |
+
/**
|
126 |
+
* Attempt to exchange a code for an valid authentication token.
|
127 |
+
* Helper wrapped around the OAuth 2.0 implementation.
|
128 |
+
*
|
129 |
+
* @param $code string code from accounts.google.com
|
130 |
+
* @return string token
|
131 |
+
*/
|
132 |
+
public function authenticate($code)
|
133 |
+
{
|
134 |
+
$this->authenticated = true;
|
135 |
+
return $this->getAuth()->authenticate($code);
|
136 |
+
}
|
137 |
+
|
138 |
+
/**
|
139 |
+
* Set the auth config from the JSON string provided.
|
140 |
+
* This structure should match the file downloaded from
|
141 |
+
* the "Download JSON" button on in the Google Developer
|
142 |
+
* Console.
|
143 |
+
* @param string $json the configuration json
|
144 |
+
*/
|
145 |
+
public function setAuthConfig($json)
|
146 |
+
{
|
147 |
+
$data = json_decode($json);
|
148 |
+
$key = isset($data->installed) ? 'installed' : 'web';
|
149 |
+
if (!isset($data->$key)) {
|
150 |
+
throw new Google_Exception("Invalid client secret JSON file.");
|
151 |
+
}
|
152 |
+
$this->setClientId($data->$key->client_id);
|
153 |
+
$this->setClientSecret($data->$key->client_secret);
|
154 |
+
if (isset($data->$key->redirect_uris)) {
|
155 |
+
$this->setRedirectUri($data->$key->redirect_uris[0]);
|
156 |
+
}
|
157 |
+
}
|
158 |
+
|
159 |
+
/**
|
160 |
+
* Set the auth config from the JSON file in the path
|
161 |
+
* provided. This should match the file downloaded from
|
162 |
+
* the "Download JSON" button on in the Google Developer
|
163 |
+
* Console.
|
164 |
+
* @param string $file the file location of the client json
|
165 |
+
*/
|
166 |
+
public function setAuthConfigFile($file)
|
167 |
+
{
|
168 |
+
$this->setAuthConfig(file_get_contents($file));
|
169 |
+
}
|
170 |
+
|
171 |
+
/**
|
172 |
+
* @return array
|
173 |
+
* @visible For Testing
|
174 |
+
*/
|
175 |
+
public function prepareScopes()
|
176 |
+
{
|
177 |
+
if (empty($this->requestedScopes)) {
|
178 |
+
throw new Google_Auth_Exception("No scopes specified");
|
179 |
+
}
|
180 |
+
$scopes = implode(' ', $this->requestedScopes);
|
181 |
+
return $scopes;
|
182 |
+
}
|
183 |
+
|
184 |
+
/**
|
185 |
+
* Set the OAuth 2.0 access token using the string that resulted from calling createAuthUrl()
|
186 |
+
* or Google_Client#getAccessToken().
|
187 |
+
* @param string $accessToken JSON encoded string containing in the following format:
|
188 |
+
* {"access_token":"TOKEN", "refresh_token":"TOKEN", "token_type":"Bearer",
|
189 |
+
* "expires_in":3600, "id_token":"TOKEN", "created":1320790426}
|
190 |
+
*/
|
191 |
+
public function setAccessToken($accessToken)
|
192 |
+
{
|
193 |
+
if ($accessToken == 'null') {
|
194 |
+
$accessToken = null;
|
195 |
+
}
|
196 |
+
$this->getAuth()->setAccessToken($accessToken);
|
197 |
+
}
|
198 |
+
|
199 |
+
|
200 |
+
|
201 |
+
/**
|
202 |
+
* Set the authenticator object
|
203 |
+
* @param Google_Auth_Abstract $auth
|
204 |
+
*/
|
205 |
+
public function setAuth(Google_Auth_Abstract $auth)
|
206 |
+
{
|
207 |
+
$this->config->setAuthClass(get_class($auth));
|
208 |
+
$this->auth = $auth;
|
209 |
+
}
|
210 |
+
|
211 |
+
/**
|
212 |
+
* Set the IO object
|
213 |
+
* @param Google_Io_Abstract $auth
|
214 |
+
*/
|
215 |
+
public function setIo(Google_Io_Abstract $io)
|
216 |
+
{
|
217 |
+
$this->config->setIoClass(get_class($io));
|
218 |
+
$this->io = $io;
|
219 |
+
}
|
220 |
+
|
221 |
+
/**
|
222 |
+
* Set the Cache object
|
223 |
+
* @param Google_Cache_Abstract $auth
|
224 |
+
*/
|
225 |
+
public function setCache(Google_Cache_Abstract $cache)
|
226 |
+
{
|
227 |
+
$this->config->setCacheClass(get_class($cache));
|
228 |
+
$this->cache = $cache;
|
229 |
+
}
|
230 |
+
|
231 |
+
/**
|
232 |
+
* Construct the OAuth 2.0 authorization request URI.
|
233 |
+
* @return string
|
234 |
+
*/
|
235 |
+
public function createAuthUrl()
|
236 |
+
{
|
237 |
+
$scopes = $this->prepareScopes();
|
238 |
+
return $this->getAuth()->createAuthUrl($scopes);
|
239 |
+
}
|
240 |
+
|
241 |
+
/**
|
242 |
+
* Get the OAuth 2.0 access token.
|
243 |
+
* @return string $accessToken JSON encoded string in the following format:
|
244 |
+
* {"access_token":"TOKEN", "refresh_token":"TOKEN", "token_type":"Bearer",
|
245 |
+
* "expires_in":3600,"id_token":"TOKEN", "created":1320790426}
|
246 |
+
*/
|
247 |
+
public function getAccessToken()
|
248 |
+
{
|
249 |
+
$token = $this->getAuth()->getAccessToken();
|
250 |
+
// The response is json encoded, so could be the string null.
|
251 |
+
// It is arguable whether this check should be here or lower
|
252 |
+
// in the library.
|
253 |
+
return (null == $token || 'null' == $token) ? null : $token;
|
254 |
+
}
|
255 |
+
|
256 |
+
/**
|
257 |
+
* Returns if the access_token is expired.
|
258 |
+
* @return bool Returns True if the access_token is expired.
|
259 |
+
*/
|
260 |
+
public function isAccessTokenExpired()
|
261 |
+
{
|
262 |
+
return $this->getAuth()->isAccessTokenExpired();
|
263 |
+
}
|
264 |
+
|
265 |
+
/**
|
266 |
+
* Set OAuth 2.0 "state" parameter to achieve per-request customization.
|
267 |
+
* @see http://tools.ietf.org/html/draft-ietf-oauth-v2-22#section-3.1.2.2
|
268 |
+
* @param string $state
|
269 |
+
*/
|
270 |
+
public function setState($state)
|
271 |
+
{
|
272 |
+
$this->getAuth()->setState($state);
|
273 |
+
}
|
274 |
+
|
275 |
+
/**
|
276 |
+
* @param string $accessType Possible values for access_type include:
|
277 |
+
* {@code "offline"} to request offline access from the user.
|
278 |
+
* {@code "online"} to request online access from the user.
|
279 |
+
*/
|
280 |
+
public function setAccessType($accessType)
|
281 |
+
{
|
282 |
+
$this->config->setAccessType($accessType);
|
283 |
+
}
|
284 |
+
|
285 |
+
/**
|
286 |
+
* @param string $approvalPrompt Possible values for approval_prompt include:
|
287 |
+
* {@code "force"} to force the approval UI to appear. (This is the default value)
|
288 |
+
* {@code "auto"} to request auto-approval when possible.
|
289 |
+
*/
|
290 |
+
public function setApprovalPrompt($approvalPrompt)
|
291 |
+
{
|
292 |
+
$this->config->setApprovalPrompt($approvalPrompt);
|
293 |
+
}
|
294 |
+
|
295 |
+
/**
|
296 |
+
* Set the application name, this is included in the User-Agent HTTP header.
|
297 |
+
* @param string $applicationName
|
298 |
+
*/
|
299 |
+
public function setApplicationName($applicationName)
|
300 |
+
{
|
301 |
+
$this->config->setApplicationName($applicationName);
|
302 |
+
}
|
303 |
+
|
304 |
+
/**
|
305 |
+
* Set the OAuth 2.0 Client ID.
|
306 |
+
* @param string $clientId
|
307 |
+
*/
|
308 |
+
public function setClientId($clientId)
|
309 |
+
{
|
310 |
+
$this->config->setClientId($clientId);
|
311 |
+
}
|
312 |
+
|
313 |
+
/**
|
314 |
+
* Set the OAuth 2.0 Client Secret.
|
315 |
+
* @param string $clientSecret
|
316 |
+
*/
|
317 |
+
public function setClientSecret($clientSecret)
|
318 |
+
{
|
319 |
+
$this->config->setClientSecret($clientSecret);
|
320 |
+
}
|
321 |
+
|
322 |
+
/**
|
323 |
+
* Set the OAuth 2.0 Redirect URI.
|
324 |
+
* @param string $redirectUri
|
325 |
+
*/
|
326 |
+
public function setRedirectUri($redirectUri)
|
327 |
+
{
|
328 |
+
$this->config->setRedirectUri($redirectUri);
|
329 |
+
}
|
330 |
+
|
331 |
+
/**
|
332 |
+
* If 'plus.login' is included in the list of requested scopes, you can use
|
333 |
+
* this method to define types of app activities that your app will write.
|
334 |
+
* You can find a list of available types here:
|
335 |
+
* @link https://developers.google.com/+/api/moment-types
|
336 |
+
*
|
337 |
+
* @param array $requestVisibleActions Array of app activity types
|
338 |
+
*/
|
339 |
+
public function setRequestVisibleActions($requestVisibleActions)
|
340 |
+
{
|
341 |
+
if (is_array($requestVisibleActions)) {
|
342 |
+
$requestVisibleActions = join(" ", $requestVisibleActions);
|
343 |
+
}
|
344 |
+
$this->config->setRequestVisibleActions($requestVisibleActions);
|
345 |
+
}
|
346 |
+
|
347 |
+
/**
|
348 |
+
* Set the developer key to use, these are obtained through the API Console.
|
349 |
+
* @see http://code.google.com/apis/console-help/#generatingdevkeys
|
350 |
+
* @param string $developerKey
|
351 |
+
*/
|
352 |
+
public function setDeveloperKey($developerKey)
|
353 |
+
{
|
354 |
+
$this->config->setDeveloperKey($developerKey);
|
355 |
+
}
|
356 |
+
|
357 |
+
/**
|
358 |
+
* Fetches a fresh OAuth 2.0 access token with the given refresh token.
|
359 |
+
* @param string $refreshToken
|
360 |
+
* @return void
|
361 |
+
*/
|
362 |
+
public function refreshToken($refreshToken)
|
363 |
+
{
|
364 |
+
return $this->getAuth()->refreshToken($refreshToken);
|
365 |
+
}
|
366 |
+
|
367 |
+
/**
|
368 |
+
* Revoke an OAuth2 access token or refresh token. This method will revoke the current access
|
369 |
+
* token, if a token isn't provided.
|
370 |
+
* @throws Google_Auth_Exception
|
371 |
+
* @param string|null $token The token (access token or a refresh token) that should be revoked.
|
372 |
+
* @return boolean Returns True if the revocation was successful, otherwise False.
|
373 |
+
*/
|
374 |
+
public function revokeToken($token = null)
|
375 |
+
{
|
376 |
+
return $this->getAuth()->revokeToken($token);
|
377 |
+
}
|
378 |
+
|
379 |
+
/**
|
380 |
+
* Verify an id_token. This method will verify the current id_token, if one
|
381 |
+
* isn't provided.
|
382 |
+
* @throws Google_Auth_Exception
|
383 |
+
* @param string|null $token The token (id_token) that should be verified.
|
384 |
+
* @return Google_Auth_LoginTicket Returns an apiLoginTicket if the verification was
|
385 |
+
* successful.
|
386 |
+
*/
|
387 |
+
public function verifyIdToken($token = null)
|
388 |
+
{
|
389 |
+
return $this->getAuth()->verifyIdToken($token);
|
390 |
+
}
|
391 |
+
|
392 |
+
/**
|
393 |
+
* Verify a JWT that was signed with your own certificates.
|
394 |
+
*
|
395 |
+
* @param $jwt the token
|
396 |
+
* @param $certs array of certificates
|
397 |
+
* @param $required_audience the expected consumer of the token
|
398 |
+
* @param [$issuer] the expected issues, defaults to Google
|
399 |
+
* @param [$max_expiry] the max lifetime of a token, defaults to MAX_TOKEN_LIFETIME_SECS
|
400 |
+
* @return token information if valid, false if not
|
401 |
+
*/
|
402 |
+
public function verifySignedJwt($id_token, $cert_location, $audience, $issuer, $max_expiry = null)
|
403 |
+
{
|
404 |
+
$auth = new Google_Auth_OAuth2($this);
|
405 |
+
$certs = $auth->retrieveCertsFromLocation($cert_location);
|
406 |
+
return $auth->verifySignedJwtWithCerts($id_token, $certs, $audience, $issuer, $max_expiry);
|
407 |
+
}
|
408 |
+
|
409 |
+
/**
|
410 |
+
* @param Google_Auth_AssertionCredentials $creds
|
411 |
+
* @return void
|
412 |
+
*/
|
413 |
+
public function setAssertionCredentials(Google_Auth_AssertionCredentials $creds)
|
414 |
+
{
|
415 |
+
$this->getAuth()->setAssertionCredentials($creds);
|
416 |
+
}
|
417 |
+
|
418 |
+
/**
|
419 |
+
* Set the scopes to be requested. Must be called before createAuthUrl().
|
420 |
+
* Will remove any previously configured scopes.
|
421 |
+
* @param array $scopes, ie: array('https://www.googleapis.com/auth/plus.login',
|
422 |
+
* 'https://www.googleapis.com/auth/moderator')
|
423 |
+
*/
|
424 |
+
public function setScopes($scopes)
|
425 |
+
{
|
426 |
+
$this->requestedScopes = array();
|
427 |
+
$this->addScope($scopes);
|
428 |
+
}
|
429 |
+
|
430 |
+
/**
|
431 |
+
* This functions adds a scope to be requested as part of the OAuth2.0 flow.
|
432 |
+
* Will append any scopes not previously requested to the scope parameter.
|
433 |
+
* A single string will be treated as a scope to request. An array of strings
|
434 |
+
* will each be appended.
|
435 |
+
* @param $scope_or_scopes string|array e.g. "profile"
|
436 |
+
*/
|
437 |
+
public function addScope($scope_or_scopes)
|
438 |
+
{
|
439 |
+
if (is_string($scope_or_scopes) && !in_array($scope_or_scopes, $this->requestedScopes)) {
|
440 |
+
$this->requestedScopes[] = $scope_or_scopes;
|
441 |
+
} else if (is_array($scope_or_scopes)) {
|
442 |
+
foreach ($scope_or_scopes as $scope) {
|
443 |
+
$this->addScope($scope);
|
444 |
+
}
|
445 |
+
}
|
446 |
+
}
|
447 |
+
|
448 |
+
/**
|
449 |
+
* Returns the list of scopes requested by the client
|
450 |
+
* @return array the list of scopes
|
451 |
+
*
|
452 |
+
*/
|
453 |
+
public function getScopes()
|
454 |
+
{
|
455 |
+
return $this->requestedScopes;
|
456 |
+
}
|
457 |
+
|
458 |
+
/**
|
459 |
+
* Declare whether batch calls should be used. This may increase throughput
|
460 |
+
* by making multiple requests in one connection.
|
461 |
+
*
|
462 |
+
* @param boolean $useBatch True if the batch support should
|
463 |
+
* be enabled. Defaults to False.
|
464 |
+
*/
|
465 |
+
public function setUseBatch($useBatch)
|
466 |
+
{
|
467 |
+
// This is actually an alias for setDefer.
|
468 |
+
$this->setDefer($useBatch);
|
469 |
+
}
|
470 |
+
|
471 |
+
/**
|
472 |
+
* Declare whether making API calls should make the call immediately, or
|
473 |
+
* return a request which can be called with ->execute();
|
474 |
+
*
|
475 |
+
* @param boolean $defer True if calls should not be executed right away.
|
476 |
+
*/
|
477 |
+
public function setDefer($defer)
|
478 |
+
{
|
479 |
+
$this->deferExecution = $defer;
|
480 |
+
}
|
481 |
+
|
482 |
+
/**
|
483 |
+
* Helper method to execute deferred HTTP requests.
|
484 |
+
*
|
485 |
+
* @returns object of the type of the expected class or array.
|
486 |
+
*/
|
487 |
+
public function execute($request)
|
488 |
+
{
|
489 |
+
if ($request instanceof Google_Http_Request) {
|
490 |
+
$request->setUserAgent(
|
491 |
+
$this->getApplicationName()
|
492 |
+
. " " . self::USER_AGENT_SUFFIX
|
493 |
+
. $this->getLibraryVersion()
|
494 |
+
);
|
495 |
+
if (!$this->getClassConfig("Google_Http_Request", "disable_gzip")) {
|
496 |
+
$request->enableGzip();
|
497 |
+
}
|
498 |
+
$request->maybeMoveParametersToBody();
|
499 |
+
return Google_Http_REST::execute($this, $request);
|
500 |
+
} else if ($request instanceof Google_Http_Batch) {
|
501 |
+
return $request->execute();
|
502 |
+
} else {
|
503 |
+
throw new Google_Exception("Do not know how to execute this type of object.");
|
504 |
+
}
|
505 |
+
}
|
506 |
+
|
507 |
+
/**
|
508 |
+
* Whether or not to return raw requests
|
509 |
+
* @return boolean
|
510 |
+
*/
|
511 |
+
public function shouldDefer()
|
512 |
+
{
|
513 |
+
return $this->deferExecution;
|
514 |
+
}
|
515 |
+
|
516 |
+
/**
|
517 |
+
* @return Google_Auth_Abstract Authentication implementation
|
518 |
+
*/
|
519 |
+
public function getAuth()
|
520 |
+
{
|
521 |
+
if (!isset($this->auth)) {
|
522 |
+
$class = $this->config->getAuthClass();
|
523 |
+
$this->auth = new $class($this);
|
524 |
+
}
|
525 |
+
return $this->auth;
|
526 |
+
}
|
527 |
+
|
528 |
+
/**
|
529 |
+
* @return Google_IO_Abstract IO implementation
|
530 |
+
*/
|
531 |
+
public function getIo()
|
532 |
+
{
|
533 |
+
if (!isset($this->io)) {
|
534 |
+
$class = $this->config->getIoClass();
|
535 |
+
$this->io = new $class($this);
|
536 |
+
}
|
537 |
+
return $this->io;
|
538 |
+
}
|
539 |
+
|
540 |
+
/**
|
541 |
+
* @return Google_Cache_Abstract Cache implementation
|
542 |
+
*/
|
543 |
+
public function getCache()
|
544 |
+
{
|
545 |
+
if (!isset($this->cache)) {
|
546 |
+
$class = $this->config->getCacheClass();
|
547 |
+
$this->cache = new $class($this);
|
548 |
+
}
|
549 |
+
return $this->cache;
|
550 |
+
}
|
551 |
+
|
552 |
+
/**
|
553 |
+
* Retrieve custom configuration for a specific class.
|
554 |
+
* @param $class string|object - class or instance of class to retrieve
|
555 |
+
* @param $key string optional - key to retrieve
|
556 |
+
*/
|
557 |
+
public function getClassConfig($class, $key = null)
|
558 |
+
{
|
559 |
+
if (!is_string($class)) {
|
560 |
+
$class = get_class($class);
|
561 |
+
}
|
562 |
+
return $this->config->getClassConfig($class, $key);
|
563 |
+
}
|
564 |
+
|
565 |
+
/**
|
566 |
+
* Set configuration specific to a given class.
|
567 |
+
* $config->setClassConfig('Google_Cache_File',
|
568 |
+
* array('directory' => '/tmp/cache'));
|
569 |
+
* @param $class The class name for the configuration
|
570 |
+
* @param $config string key or an array of configuration values
|
571 |
+
* @param $value optional - if $config is a key, the value
|
572 |
+
*
|
573 |
+
*/
|
574 |
+
public function setClassConfig($class, $config, $value = null)
|
575 |
+
{
|
576 |
+
if (!is_string($class)) {
|
577 |
+
$class = get_class($class);
|
578 |
+
}
|
579 |
+
return $this->config->setClassConfig($class, $config, $value);
|
580 |
+
|
581 |
+
}
|
582 |
+
|
583 |
+
/**
|
584 |
+
* @return string the base URL to use for calls to the APIs
|
585 |
+
*/
|
586 |
+
public function getBasePath()
|
587 |
+
{
|
588 |
+
return $this->config->getBasePath();
|
589 |
+
}
|
590 |
+
|
591 |
+
/**
|
592 |
+
* @return string the name of the application
|
593 |
+
*/
|
594 |
+
public function getApplicationName()
|
595 |
+
{
|
596 |
+
return $this->config->getApplicationName();
|
597 |
+
}
|
598 |
+
|
599 |
+
/**
|
600 |
+
* Are we running in Google AppEngine?
|
601 |
+
* return bool
|
602 |
+
*/
|
603 |
+
public function isAppEngine()
|
604 |
+
{
|
605 |
+
return (isset($_SERVER['SERVER_SOFTWARE']) &&
|
606 |
+
strpos($_SERVER['SERVER_SOFTWARE'], 'Google App Engine') !== false);
|
607 |
+
}
|
608 |
+
}
|
lib/Google/Collection.php
ADDED
@@ -0,0 +1,94 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
require_once $GLOBALS['iwp_mmb_plugin_dir']."/lib/Google/Model.php";
|
4 |
+
|
5 |
+
/**
|
6 |
+
* Extension to the regular Google_Model that automatically
|
7 |
+
* exposes the items array for iteration, so you can just
|
8 |
+
* iterate over the object rather than a reference inside.
|
9 |
+
*/
|
10 |
+
class Google_Collection extends Google_Model implements Iterator, Countable
|
11 |
+
{
|
12 |
+
protected $collection_key = 'items';
|
13 |
+
|
14 |
+
public function rewind()
|
15 |
+
{
|
16 |
+
if (is_array($this->modelData[$this->collection_key])) {
|
17 |
+
reset($this->modelData[$this->collection_key]);
|
18 |
+
}
|
19 |
+
}
|
20 |
+
|
21 |
+
public function current()
|
22 |
+
{
|
23 |
+
$this->coerceType($this->key());
|
24 |
+
if (is_array($this->modelData[$this->collection_key])) {
|
25 |
+
return current($this->modelData[$this->collection_key]);
|
26 |
+
}
|
27 |
+
}
|
28 |
+
|
29 |
+
public function key()
|
30 |
+
{
|
31 |
+
if (is_array($this->modelData[$this->collection_key])) {
|
32 |
+
return key($this->modelData[$this->collection_key]);
|
33 |
+
}
|
34 |
+
}
|
35 |
+
|
36 |
+
public function next()
|
37 |
+
{
|
38 |
+
return next($this->modelData[$this->collection_key]);
|
39 |
+
}
|
40 |
+
|
41 |
+
public function valid()
|
42 |
+
{
|
43 |
+
$key = $this->key();
|
44 |
+
return $key !== null && $key !== false;
|
45 |
+
}
|
46 |
+
|
47 |
+
public function count()
|
48 |
+
{
|
49 |
+
return count($this->modelData[$this->collection_key]);
|
50 |
+
}
|
51 |
+
|
52 |
+
public function offsetExists ($offset)
|
53 |
+
{
|
54 |
+
if (!is_numeric($offset)) {
|
55 |
+
return parent::offsetExists($offset);
|
56 |
+
}
|
57 |
+
return isset($this->modelData[$this->collection_key][$offset]);
|
58 |
+
}
|
59 |
+
|
60 |
+
public function offsetGet($offset)
|
61 |
+
{
|
62 |
+
if (!is_numeric($offset)) {
|
63 |
+
return parent::offsetGet($offset);
|
64 |
+
}
|
65 |
+
$this->coerceType($offset);
|
66 |
+
return $this->modelData[$this->collection_key][$offset];
|
67 |
+
}
|
68 |
+
|
69 |
+
public function offsetSet($offset, $value)
|
70 |
+
{
|
71 |
+
if (!is_numeric($offset)) {
|
72 |
+
return parent::offsetSet($offset, $value);
|
73 |
+
}
|
74 |
+
$this->modelData[$this->collection_key][$offset] = $value;
|
75 |
+
}
|
76 |
+
|
77 |
+
public function offsetUnset($offset)
|
78 |
+
{
|
79 |
+
if (!is_numeric($offset)) {
|
80 |
+
return parent::offsetUnset($offset);
|
81 |
+
}
|
82 |
+
unset($this->modelData[$this->collection_key][$offset]);
|
83 |
+
}
|
84 |
+
|
85 |
+
private function coerceType($offset)
|
86 |
+
{
|
87 |
+
$typeKey = $this->keyType($this->collection_key);
|
88 |
+
if (isset($this->$typeKey) && !is_object($this->modelData[$this->collection_key][$offset])) {
|
89 |
+
$type = $this->$typeKey;
|
90 |
+
$this->modelData[$this->collection_key][$offset] =
|
91 |
+
new $type($this->modelData[$this->collection_key][$offset]);
|
92 |
+
}
|
93 |
+
}
|
94 |
+
}
|
lib/Google/Config.php
ADDED
@@ -0,0 +1,315 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* Copyright 2010 Google Inc.
|
4 |
+
*
|
5 |
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
6 |
+
* you may not use this file except in compliance with the License.
|
7 |
+
* You may obtain 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,
|
13 |
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14 |
+
* See the License for the specific language governing permissions and
|
15 |
+
* limitations under the License.
|
16 |
+
*/
|
17 |
+
|
18 |
+
/**
|
19 |
+
* A class to contain the library configuration for the Google API client.
|
20 |
+
*/
|
21 |
+
class Google_Config
|
22 |
+
{
|
23 |
+
const GZIP_DISABLED = true;
|
24 |
+
const GZIP_ENABLED = false;
|
25 |
+
const GZIP_UPLOADS_ENABLED = true;
|
26 |
+
const GZIP_UPLOADS_DISABLED = false;
|
27 |
+
const USE_AUTO_IO_SELECTION = "auto";
|
28 |
+
private $configuration;
|
29 |
+
|
30 |
+
/**
|
31 |
+
* Create a new Google_Config. Can accept an ini file location with the
|
32 |
+
* local configuration. For example:
|
33 |
+
* application_name: "My App";
|
34 |
+
*
|
35 |
+
* @param [$ini_file_location] - optional - The location of the ini file to load
|
36 |
+
*/
|
37 |
+
public function __construct($ini_file_location = null)
|
38 |
+
{
|
39 |
+
$this->configuration = array(
|
40 |
+
// The application_name is included in the User-Agent HTTP header.
|
41 |
+
'application_name' => '',
|
42 |
+
|
43 |
+
// Which Authentication, Storage and HTTP IO classes to use.
|
44 |
+
'auth_class' => 'Google_Auth_OAuth2',
|
45 |
+
'io_class' => self::USE_AUTO_IO_SELECTION,
|
46 |
+
'cache_class' => 'Google_Cache_File',
|
47 |
+
|
48 |
+
// Don't change these unless you're working against a special development
|
49 |
+
// or testing environment.
|
50 |
+
'base_path' => 'https://www.googleapis.com',
|
51 |
+
|
52 |
+
// Definition of class specific values, like file paths and so on.
|
53 |
+
'classes' => array(
|
54 |
+
'Google_IO_Abstract' => array(
|
55 |
+
'request_timeout_seconds' => 100,
|
56 |
+
),
|
57 |
+
'Google_Http_Request' => array(
|
58 |
+
// Disable the use of gzip on calls if set to true. Defaults to false.
|
59 |
+
'disable_gzip' => self::GZIP_ENABLED,
|
60 |
+
|
61 |
+
// We default gzip to disabled on uploads even if gzip is otherwise
|
62 |
+
// enabled, due to some issues seen with small packet sizes for uploads.
|
63 |
+
// Please test with this option before enabling gzip for uploads in
|
64 |
+
// a production environment.
|
65 |
+
'enable_gzip_for_uploads' => self::GZIP_UPLOADS_DISABLED,
|
66 |
+
),
|
67 |
+
// If you want to pass in OAuth 2.0 settings, they will need to be
|
68 |
+
// structured like this.
|
69 |
+
'Google_Auth_OAuth2' => array(
|
70 |
+
// Keys for OAuth 2.0 access, see the API console at
|
71 |
+
// https://developers.google.com/console
|
72 |
+
'client_id' => '',
|
73 |
+
'client_secret' => '',
|
74 |
+
'redirect_uri' => '',
|
75 |
+
|
76 |
+
// Simple API access key, also from the API console. Ensure you get
|
77 |
+
// a Server key, and not a Browser key.
|
78 |
+
'developer_key' => '',
|
79 |
+
|
80 |
+
// Other parameters.
|
81 |
+
'access_type' => 'online',
|
82 |
+
'approval_prompt' => 'auto',
|
83 |
+
'request_visible_actions' => '',
|
84 |
+
'federated_signon_certs_url' =>
|
85 |
+
'https://www.googleapis.com/oauth2/v1/certs',
|
86 |
+
),
|
87 |
+
// Set a default directory for the file cache.
|
88 |
+
'Google_Cache_File' => array(
|
89 |
+
'directory' => sys_get_temp_dir() . '/Google_Client'
|
90 |
+
)
|
91 |
+
),
|
92 |
+
|
93 |
+
// Definition of service specific values like scopes, oauth token URLs,
|
94 |
+
// etc. Example:
|
95 |
+
'services' => array(
|
96 |
+
),
|
97 |
+
);
|
98 |
+
if ($ini_file_location) {
|
99 |
+
$ini = parse_ini_file($ini_file_location, true);
|
100 |
+
if (is_array($ini) && count($ini)) {
|
101 |
+
$this->configuration = array_merge($this->configuration, $ini);
|
102 |
+
}
|
103 |
+
}
|
104 |
+
}
|
105 |
+
|
106 |
+
/**
|
107 |
+
* Set configuration specific to a given class.
|
108 |
+
* $config->setClassConfig('Google_Cache_File',
|
109 |
+
* array('directory' => '/tmp/cache'));
|
110 |
+
* @param $class The class name for the configuration
|
111 |
+
* @param $config string key or an array of configuration values
|
112 |
+
* @param $value optional - if $config is a key, the value
|
113 |
+
*/
|
114 |
+
public function setClassConfig($class, $config, $value = null)
|
115 |
+
{
|
116 |
+
if (!is_array($config)) {
|
117 |
+
if (!isset($this->configuration['classes'][$class])) {
|
118 |
+
$this->configuration['classes'][$class] = array();
|
119 |
+
}
|
120 |
+
$this->configuration['classes'][$class][$config] = $value;
|
121 |
+
} else {
|
122 |
+
$this->configuration['classes'][$class] = $config;
|
123 |
+
}
|
124 |
+
}
|
125 |
+
|
126 |
+
public function getClassConfig($class, $key = null)
|
127 |
+
{
|
128 |
+
if (!isset($this->configuration['classes'][$class])) {
|
129 |
+
return null;
|
130 |
+
}
|
131 |
+
if ($key === null) {
|
132 |
+
return $this->configuration['classes'][$class];
|
133 |
+
} else {
|
134 |
+
return $this->configuration['classes'][$class][$key];
|
135 |
+
}
|
136 |
+
}
|
137 |
+
|
138 |
+
/**
|
139 |
+
* Return the configured cache class.
|
140 |
+
* @return string
|
141 |
+
*/
|
142 |
+
public function getCacheClass()
|
143 |
+
{
|
144 |
+
return $this->configuration['cache_class'];
|
145 |
+
}
|
146 |
+
|
147 |
+
/**
|
148 |
+
* Return the configured Auth class.
|
149 |
+
* @return string
|
150 |
+
*/
|
151 |
+
public function getAuthClass()
|
152 |
+
{
|
153 |
+
return $this->configuration['auth_class'];
|
154 |
+
}
|
155 |
+
|
156 |
+
/**
|
157 |
+
* Set the auth class.
|
158 |
+
*
|
159 |
+
* @param $class the class name to set
|
160 |
+
*/
|
161 |
+
public function setAuthClass($class)
|
162 |
+
{
|
163 |
+
$prev = $this->configuration['auth_class'];
|
164 |
+
if (!isset($this->configuration['classes'][$class]) &&
|
165 |
+
isset($this->configuration['classes'][$prev])) {
|
166 |
+
$this->configuration['classes'][$class] =
|
167 |
+
$this->configuration['classes'][$prev];
|
168 |
+
}
|
169 |
+
$this->configuration['auth_class'] = $class;
|
170 |
+
}
|
171 |
+
|
172 |
+
/**
|
173 |
+
* Set the IO class.
|
174 |
+
*
|
175 |
+
* @param $class the class name to set
|
176 |
+
*/
|
177 |
+
public function setIoClass($class)
|
178 |
+
{
|
179 |
+
$prev = $this->configuration['io_class'];
|
180 |
+
if (!isset($this->configuration['classes'][$class]) &&
|
181 |
+
isset($this->configuration['classes'][$prev])) {
|
182 |
+
$this->configuration['classes'][$class] =
|
183 |
+
$this->configuration['classes'][$prev];
|
184 |
+
}
|
185 |
+
$this->configuration['io_class'] = $class;
|
186 |
+
}
|
187 |
+
|
188 |
+
/**
|
189 |
+
* Set the cache class.
|
190 |
+
*
|
191 |
+
* @param $class the class name to set
|
192 |
+
*/
|
193 |
+
public function setCacheClass($class)
|
194 |
+
{
|
195 |
+
$prev = $this->configuration['cache_class'];
|
196 |
+
if (!isset($this->configuration['classes'][$class]) &&
|
197 |
+
isset($this->configuration['classes'][$prev])) {
|
198 |
+
$this->configuration['classes'][$class] =
|
199 |
+
$this->configuration['classes'][$prev];
|
200 |
+
}
|
201 |
+
$this->configuration['cache_class'] = $class;
|
202 |
+
}
|
203 |
+
|
204 |
+
/**
|
205 |
+
* Return the configured IO class.
|
206 |
+
* @return string
|
207 |
+
*/
|
208 |
+
public function getIoClass()
|
209 |
+
{
|
210 |
+
return $this->configuration['io_class'];
|
211 |
+
}
|
212 |
+
|
213 |
+
/**
|
214 |
+
* Set the application name, this is included in the User-Agent HTTP header.
|
215 |
+
* @param string $name
|
216 |
+
*/
|
217 |
+
public function setApplicationName($name)
|
218 |
+
{
|
219 |
+
$this->configuration['application_name'] = $name;
|
220 |
+
}
|
221 |
+
|
222 |
+
/**
|
223 |
+
* @return string the name of the application
|
224 |
+
*/
|
225 |
+
public function getApplicationName()
|
226 |
+
{
|
227 |
+
return $this->configuration['application_name'];
|
228 |
+
}
|
229 |
+
|
230 |
+
/**
|
231 |
+
* Set the client ID for the auth class.
|
232 |
+
* @param $key string - the API console client ID
|
233 |
+
*/
|
234 |
+
public function setClientId($clientId)
|
235 |
+
{
|
236 |
+
$this->setAuthConfig('client_id', $clientId);
|
237 |
+
}
|
238 |
+
|
239 |
+
/**
|
240 |
+
* Set the client secret for the auth class.
|
241 |
+
* @param $key string - the API console client secret
|
242 |
+
*/
|
243 |
+
public function setClientSecret($secret)
|
244 |
+
{
|
245 |
+
$this->setAuthConfig('client_secret', $secret);
|
246 |
+
}
|
247 |
+
|
248 |
+
/**
|
249 |
+
* Set the redirect uri for the auth class. Note that if using the
|
250 |
+
* Javascript based sign in flow, this should be the string 'postmessage'.
|
251 |
+
* @param $key string - the URI that users should be redirected to
|
252 |
+
*/
|
253 |
+
public function setRedirectUri($uri)
|
254 |
+
{
|
255 |
+
$this->setAuthConfig('redirect_uri', $uri);
|
256 |
+
}
|
257 |
+
|
258 |
+
/**
|
259 |
+
* Set the app activities for the auth class.
|
260 |
+
* @param $rva string a space separated list of app activity types
|
261 |
+
*/
|
262 |
+
public function setRequestVisibleActions($rva)
|
263 |
+
{
|
264 |
+
$this->setAuthConfig('request_visible_actions', $rva);
|
265 |
+
}
|
266 |
+
|
267 |
+
/**
|
268 |
+
* Set the the access type requested (offline or online.)
|
269 |
+
* @param $access string - the access type
|
270 |
+
*/
|
271 |
+
public function setAccessType($access)
|
272 |
+
{
|
273 |
+
$this->setAuthConfig('access_type', $access);
|
274 |
+
}
|
275 |
+
|
276 |
+
/**
|
277 |
+
* Set when to show the approval prompt (auto or force)
|
278 |
+
* @param $approval string - the approval request
|
279 |
+
*/
|
280 |
+
public function setApprovalPrompt($approval)
|
281 |
+
{
|
282 |
+
$this->setAuthConfig('approval_prompt', $approval);
|
283 |
+
}
|
284 |
+
|
285 |
+
/**
|
286 |
+
* Set the developer key for the auth class. Note that this is separate value
|
287 |
+
* from the client ID - if it looks like a URL, its a client ID!
|
288 |
+
* @param $key string - the API console developer key
|
289 |
+
*/
|
290 |
+
public function setDeveloperKey($key)
|
291 |
+
{
|
292 |
+
$this->setAuthConfig('developer_key', $key);
|
293 |
+
}
|
294 |
+
|
295 |
+
/**
|
296 |
+
* @return string the base URL to use for API calls
|
297 |
+
*/
|
298 |
+
public function getBasePath()
|
299 |
+
{
|
300 |
+
return $this->configuration['base_path'];
|
301 |
+
}
|
302 |
+
|
303 |
+
/**
|
304 |
+
* Set the auth configuration for the current auth class.
|
305 |
+
* @param $key - the key to set
|
306 |
+
* @param $value - the parameter value
|
307 |
+
*/
|
308 |
+
private function setAuthConfig($key, $value)
|
309 |
+
{
|
310 |
+
if (!isset($this->configuration['classes'][$this->getAuthClass()])) {
|
311 |
+
$this->configuration['classes'][$this->getAuthClass()] = array();
|
312 |
+
}
|
313 |
+
$this->configuration['classes'][$this->getAuthClass()][$key] = $value;
|
314 |
+
}
|
315 |
+
}
|
lib/Google/Exception.php
ADDED
@@ -0,0 +1,20 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* Copyright 2013 Google Inc.
|
4 |
+
*
|
5 |
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
6 |
+
* you may not use this file except in compliance with the License.
|
7 |
+
* You may obtain 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,
|
13 |
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14 |
+
* See the License for the specific language governing permissions and
|
15 |
+
* limitations under the License.
|
16 |
+
*/
|
17 |
+
|
18 |
+
class Google_Exception extends Exception
|
19 |
+
{
|
20 |
+
}
|
lib/Google/Http/Batch.php
ADDED
@@ -0,0 +1,143 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* Copyright 2012 Google Inc.
|
4 |
+
*
|
5 |
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
6 |
+
* you may not use this file except in compliance with the License.
|
7 |
+
* You may obtain 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,
|
13 |
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14 |
+
* See the License for the specific language governing permissions and
|
15 |
+
* limitations under the License.
|
16 |
+
*/
|
17 |
+
|
18 |
+
require_once $GLOBALS['iwp_mmb_plugin_dir'].'/lib/Google/Client.php';
|
19 |
+
require_once $GLOBALS['iwp_mmb_plugin_dir'].'/lib/Google/Http/Request.php';
|
20 |
+
require_once $GLOBALS['iwp_mmb_plugin_dir'].'/lib/Google/Http/REST.php';
|
21 |
+
|
22 |
+
/**
|
23 |
+
* @author Chirag Shah <chirags@google.com>
|
24 |
+
*/
|
25 |
+
class Google_Http_Batch
|
26 |
+
{
|
27 |
+
/** @var string Multipart Boundary. */
|
28 |
+
private $boundary;
|
29 |
+
|
30 |
+
/** @var array service requests to be executed. */
|
31 |
+
private $requests = array();
|
32 |
+
|
33 |
+
/** @var Google_Client */
|
34 |
+
private $client;
|
35 |
+
|
36 |
+
private $expected_classes = array();
|
37 |
+
|
38 |
+
private $base_path;
|
39 |
+
|
40 |
+
public function __construct(Google_Client $client, $boundary = false)
|
41 |
+
{
|
42 |
+
$this->client = $client;
|
43 |
+
$this->base_path = $this->client->getBasePath();
|
44 |
+
$this->expected_classes = array();
|
45 |
+
$boundary = (false == $boundary) ? mt_rand() : $boundary;
|
46 |
+
$this->boundary = str_replace('"', '', $boundary);
|
47 |
+
}
|
48 |
+
|
49 |
+
public function add(Google_Http_Request $request, $key = false)
|
50 |
+
{
|
51 |
+
if (false == $key) {
|
52 |
+
$key = mt_rand();
|
53 |
+
}
|
54 |
+
|
55 |
+
$this->requests[$key] = $request;
|
56 |
+
}
|
57 |
+
|
58 |
+
public function execute()
|
59 |
+
{
|
60 |
+
$body = '';
|
61 |
+
|
62 |
+
/** @var Google_Http_Request $req */
|
63 |
+
foreach ($this->requests as $key => $req) {
|
64 |
+
$body .= "--{$this->boundary}\n";
|
65 |
+
$body .= $req->toBatchString($key) . "\n";
|
66 |
+
$this->expected_classes["response-" . $key] = $req->getExpectedClass();
|
67 |
+
}
|
68 |
+
|
69 |
+
$body = rtrim($body);
|
70 |
+
$body .= "\n--{$this->boundary}--";
|
71 |
+
|
72 |
+
$url = $this->base_path . '/batch';
|
73 |
+
$httpRequest = new Google_Http_Request($url, 'POST');
|
74 |
+
$httpRequest->setRequestHeaders(
|
75 |
+
array('Content-Type' => 'multipart/mixed; boundary=' . $this->boundary)
|
76 |
+
);
|
77 |
+
|
78 |
+
$httpRequest->setPostBody($body);
|
79 |
+
$response = $this->client->getIo()->makeRequest($httpRequest);
|
80 |
+
|
81 |
+
return $this->parseResponse($response);
|
82 |
+
}
|
83 |
+
|
84 |
+
public function parseResponse(Google_Http_Request $response)
|
85 |
+
{
|
86 |
+
$contentType = $response->getResponseHeader('content-type');
|
87 |
+
$contentType = explode(';', $contentType);
|
88 |
+
$boundary = false;
|
89 |
+
foreach ($contentType as $part) {
|
90 |
+
$part = (explode('=', $part, 2));
|
91 |
+
if (isset($part[0]) && 'boundary' == trim($part[0])) {
|
92 |
+
$boundary = $part[1];
|
93 |
+
}
|
94 |
+
}
|
95 |
+
|
96 |
+
$body = $response->getResponseBody();
|
97 |
+
if ($body) {
|
98 |
+
$body = str_replace("--$boundary--", "--$boundary", $body);
|
99 |
+
$parts = explode("--$boundary", $body);
|
100 |
+
$responses = array();
|
101 |
+
|
102 |
+
foreach ($parts as $part) {
|
103 |
+
$part = trim($part);
|
104 |
+
if (!empty($part)) {
|
105 |
+
list($metaHeaders, $part) = explode("\r\n\r\n", $part, 2);
|
106 |
+
$metaHeaders = $this->client->getIo()->getHttpResponseHeaders($metaHeaders);
|
107 |
+
|
108 |
+
$status = substr($part, 0, strpos($part, "\n"));
|
109 |
+
$status = explode(" ", $status);
|
110 |
+
$status = $status[1];
|
111 |
+
|
112 |
+
list($partHeaders, $partBody) = $this->client->getIo()->ParseHttpResponse($part, false);
|
113 |
+
$response = new Google_Http_Request("");
|
114 |
+
$response->setResponseHttpCode($status);
|
115 |
+
$response->setResponseHeaders($partHeaders);
|
116 |
+
$response->setResponseBody($partBody);
|
117 |
+
|
118 |
+
// Need content id.
|
119 |
+
$key = $metaHeaders['content-id'];
|
120 |
+
|
121 |
+
if (isset($this->expected_classes[$key]) &&
|
122 |
+
strlen($this->expected_classes[$key]) > 0) {
|
123 |
+
$class = $this->expected_classes[$key];
|
124 |
+
$response->setExpectedClass($class);
|
125 |
+
}
|
126 |
+
|
127 |
+
try {
|
128 |
+
$response = Google_Http_REST::decodeHttpResponse($response);
|
129 |
+
$responses[$key] = $response;
|
130 |
+
} catch (Google_Service_Exception $e) {
|
131 |
+
// Store the exception as the response, so succesful responses
|
132 |
+
// can be processed.
|
133 |
+
$responses[$key] = $e;
|
134 |
+
}
|
135 |
+
}
|
136 |
+
}
|
137 |
+
|
138 |
+
return $responses;
|
139 |
+
}
|
140 |
+
|
141 |
+
return null;
|
142 |
+
}
|
143 |
+
}
|
lib/Google/Http/CacheParser.php
ADDED
@@ -0,0 +1,184 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* Copyright 2012 Google Inc.
|
4 |
+
*
|
5 |
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
6 |
+
* you may not use this file except in compliance with the License.
|
7 |
+
* You may obtain 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,
|
13 |
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14 |
+
* See the License for the specific language governing permissions and
|
15 |
+
* limitations under the License.
|
16 |
+
*/
|
17 |
+
|
18 |
+
require_once $GLOBALS['iwp_mmb_plugin_dir'].'/lib/Google/Http/Request.php';
|
19 |
+
|
20 |
+
/**
|
21 |
+
* Implement the caching directives specified in rfc2616. This
|
22 |
+
* implementation is guided by the guidance offered in rfc2616-sec13.
|
23 |
+
* @author Chirag Shah <chirags@google.com>
|
24 |
+
*/
|
25 |
+
class Google_Http_CacheParser
|
26 |
+
{
|
27 |
+
public static $CACHEABLE_HTTP_METHODS = array('GET', 'HEAD');
|
28 |
+
public static $CACHEABLE_STATUS_CODES = array('200', '203', '300', '301');
|
29 |
+
|
30 |
+
/**
|
31 |
+
* Check if an HTTP request can be cached by a private local cache.
|
32 |
+
*
|
33 |
+
* @static
|
34 |
+
* @param Google_Http_Request $resp
|
35 |
+
* @return bool True if the request is cacheable.
|
36 |
+
* False if the request is uncacheable.
|
37 |
+
*/
|
38 |
+
public static function isRequestCacheable(Google_Http_Request $resp)
|
39 |
+
{
|
40 |
+
$method = $resp->getRequestMethod();
|
41 |
+
if (! in_array($method, self::$CACHEABLE_HTTP_METHODS)) {
|
42 |
+
return false;
|
43 |
+
}
|
44 |
+
|
45 |
+
// Don't cache authorized requests/responses.
|
46 |
+
// [rfc2616-14.8] When a shared cache receives a request containing an
|
47 |
+
// Authorization field, it MUST NOT return the corresponding response
|
48 |
+
// as a reply to any other request...
|
49 |
+
if ($resp->getRequestHeader("authorization")) {
|
50 |
+
return false;
|
51 |
+
}
|
52 |
+
|
53 |
+
return true;
|
54 |
+
}
|
55 |
+
|
56 |
+
/**
|
57 |
+
* Check if an HTTP response can be cached by a private local cache.
|
58 |
+
*
|
59 |
+
* @static
|
60 |
+
* @param Google_Http_Request $resp
|
61 |
+
* @return bool True if the response is cacheable.
|
62 |
+
* False if the response is un-cacheable.
|
63 |
+
*/
|
64 |
+
public static function isResponseCacheable(Google_Http_Request $resp)
|
65 |
+
{
|
66 |
+
// First, check if the HTTP request was cacheable before inspecting the
|
67 |
+
// HTTP response.
|
68 |
+
if (false == self::isRequestCacheable($resp)) {
|
69 |
+
return false;
|
70 |
+
}
|
71 |
+
|
72 |
+
$code = $resp->getResponseHttpCode();
|
73 |
+
if (! in_array($code, self::$CACHEABLE_STATUS_CODES)) {
|
74 |
+
return false;
|
75 |
+
}
|
76 |
+
|
77 |
+
// The resource is uncacheable if the resource is already expired and
|
78 |
+
// the resource doesn't have an ETag for revalidation.
|
79 |
+
$etag = $resp->getResponseHeader("etag");
|
80 |
+
if (self::isExpired($resp) && $etag == false) {
|
81 |
+
return false;
|
82 |
+
}
|
83 |
+
|
84 |
+
// [rfc2616-14.9.2] If [no-store is] sent in a response, a cache MUST NOT
|
85 |
+
// store any part of either this response or the request that elicited it.
|
86 |
+
$cacheControl = $resp->getParsedCacheControl();
|
87 |
+
if (isset($cacheControl['no-store'])) {
|
88 |
+
return false;
|
89 |
+
}
|
90 |
+
|
91 |
+
// Pragma: no-cache is an http request directive, but is occasionally
|
92 |
+
// used as a response header incorrectly.
|
93 |
+
$pragma = $resp->getResponseHeader('pragma');
|
94 |
+
if ($pragma == 'no-cache' || strpos($pragma, 'no-cache') !== false) {
|
95 |
+
return false;
|
96 |
+
}
|
97 |
+
|
98 |
+
// [rfc2616-14.44] Vary: * is extremely difficult to cache. "It implies that
|
99 |
+
// a cache cannot determine from the request headers of a subsequent request
|
100 |
+
// whether this response is the appropriate representation."
|
101 |
+
// Given this, we deem responses with the Vary header as uncacheable.
|
102 |
+
$vary = $resp->getResponseHeader('vary');
|
103 |
+
if ($vary) {
|
104 |
+
return false;
|
105 |
+
}
|
106 |
+
|
107 |
+
return true;
|
108 |
+
}
|
109 |
+
|
110 |
+
/**
|
111 |
+
* @static
|
112 |
+
* @param Google_Http_Request $resp
|
113 |
+
* @return bool True if the HTTP response is considered to be expired.
|
114 |
+
* False if it is considered to be fresh.
|
115 |
+
*/
|
116 |
+
public static function isExpired(Google_Http_Request $resp)
|
117 |
+
{
|
118 |
+
// HTTP/1.1 clients and caches MUST treat other invalid date formats,
|
119 |
+
// especially including the value “0”, as in the past.
|
120 |
+
$parsedExpires = false;
|
121 |
+
$responseHeaders = $resp->getResponseHeaders();
|
122 |
+
|
123 |
+
if (isset($responseHeaders['expires'])) {
|
124 |
+
$rawExpires = $responseHeaders['expires'];
|
125 |
+
// Check for a malformed expires header first.
|
126 |
+
if (empty($rawExpires) || (is_numeric($rawExpires) && $rawExpires <= 0)) {
|
127 |
+
return true;
|
128 |
+
}
|
129 |
+
|
130 |
+
// See if we can parse the expires header.
|
131 |
+
$parsedExpires = strtotime($rawExpires);
|
132 |
+
if (false == $parsedExpires || $parsedExpires <= 0) {
|
133 |
+
return true;
|
134 |
+
}
|
135 |
+
}
|
136 |
+
|
137 |
+
// Calculate the freshness of an http response.
|
138 |
+
$freshnessLifetime = false;
|
139 |
+
$cacheControl = $resp->getParsedCacheControl();
|
140 |
+
if (isset($cacheControl['max-age'])) {
|
141 |
+
$freshnessLifetime = $cacheControl['max-age'];
|
142 |
+
}
|
143 |
+
|
144 |
+
$rawDate = $resp->getResponseHeader('date');
|
145 |
+
$parsedDate = strtotime($rawDate);
|
146 |
+
|
147 |
+
if (empty($rawDate) || false == $parsedDate) {
|
148 |
+
// We can't default this to now, as that means future cache reads
|
149 |
+
// will always pass with the logic below, so we will require a
|
150 |
+
// date be injected if not supplied.
|
151 |
+
throw new Google_Exception("All cacheable requests must have creation dates.");
|
152 |
+
}
|
153 |
+
|
154 |
+
if (false == $freshnessLifetime && isset($responseHeaders['expires'])) {
|
155 |
+
$freshnessLifetime = $parsedExpires - $parsedDate;
|
156 |
+
}
|
157 |
+
|
158 |
+
if (false == $freshnessLifetime) {
|
159 |
+
return true;
|
160 |
+
}
|
161 |
+
|
162 |
+
// Calculate the age of an http response.
|
163 |
+
$age = max(0, time() - $parsedDate);
|
164 |
+
if (isset($responseHeaders['age'])) {
|
165 |
+
$age = max($age, strtotime($responseHeaders['age']));
|
166 |
+
}
|
167 |
+
|
168 |
+
return $freshnessLifetime <= $age;
|
169 |
+
}
|
170 |
+
|
171 |
+
/**
|
172 |
+
* Determine if a cache entry should be revalidated with by the origin.
|
173 |
+
*
|
174 |
+
* @param Google_Http_Request $response
|
175 |
+
* @return bool True if the entry is expired, else return false.
|
176 |
+
*/
|
177 |
+
public static function mustRevalidate(Google_Http_Request $response)
|
178 |
+
{
|
179 |
+
// [13.3] When a cache has a stale entry that it would like to use as a
|
180 |
+
// response to a client's request, it first has to check with the origin
|
181 |
+
// server to see if its cached entry is still usable.
|
182 |
+
return self::isExpired($response);
|
183 |
+
}
|
184 |
+
}
|
lib/Google/Http/MediaFileUpload.php
ADDED
@@ -0,0 +1,303 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Copyright 2012 Google Inc.
|
4 |
+
*
|
5 |
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
6 |
+
* you may not use this file except in compliance with the License.
|
7 |
+
* You may obtain 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,
|
13 |
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14 |
+
* See the License for the specific language governing permissions and
|
15 |
+
* limitations under the License.
|
16 |
+
*/
|
17 |
+
|
18 |
+
require_once $GLOBALS['iwp_mmb_plugin_dir'].'/lib/Google/Client.php';
|
19 |
+
require_once $GLOBALS['iwp_mmb_plugin_dir'].'/lib/Google/Exception.php';
|
20 |
+
require_once $GLOBALS['iwp_mmb_plugin_dir'].'/lib/Google/Http/Request.php';
|
21 |
+
require_once $GLOBALS['iwp_mmb_plugin_dir'].'/lib/Google/Http/REST.php';
|
22 |
+
require_once $GLOBALS['iwp_mmb_plugin_dir'].'/lib/Google/Utils.php';
|
23 |
+
|
24 |
+
/**
|
25 |
+
* @author Chirag Shah <chirags@google.com>
|
26 |
+
*
|
27 |
+
*/
|
28 |
+
class Google_Http_MediaFileUpload
|
29 |
+
{
|
30 |
+
const UPLOAD_MEDIA_TYPE = 'media';
|
31 |
+
const UPLOAD_MULTIPART_TYPE = 'multipart';
|
32 |
+
const UPLOAD_RESUMABLE_TYPE = 'resumable';
|
33 |
+
|
34 |
+
/** @var string $mimeType */
|
35 |
+
private $mimeType;
|
36 |
+
|
37 |
+
/** @var string $data */
|
38 |
+
private $data;
|
39 |
+
|
40 |
+
/** @var bool $resumable */
|
41 |
+
private $resumable;
|
42 |
+
|
43 |
+
/** @var int $chunkSize */
|
44 |
+
private $chunkSize;
|
45 |
+
|
46 |
+
/** @var int $size */
|
47 |
+
private $size;
|
48 |
+
|
49 |
+
/** @var string $resumeUri */
|
50 |
+
private $resumeUri;
|
51 |
+
|
52 |
+
/** @var int $progress */
|
53 |
+
private $progress;
|
54 |
+
|
55 |
+
/** @var Google_Client */
|
56 |
+
private $client;
|
57 |
+
|
58 |
+
/** @var Google_Http_Request */
|
59 |
+
private $request;
|
60 |
+
|
61 |
+
/** @var string */
|
62 |
+
private $boundary;
|
63 |
+
|
64 |
+
/**
|
65 |
+
* Result code from last HTTP call
|
66 |
+
* @var int
|
67 |
+
*/
|
68 |
+
private $httpResultCode;
|
69 |
+
|
70 |
+
/**
|
71 |
+
* @param $mimeType string
|
72 |
+
* @param $data string The bytes you want to upload.
|
73 |
+
* @param $resumable bool
|
74 |
+
* @param bool $chunkSize File will be uploaded in chunks of this many bytes.
|
75 |
+
* only used if resumable=True
|
76 |
+
*/
|
77 |
+
public function __construct(
|
78 |
+
Google_Client $client,
|
79 |
+
Google_Http_Request $request,
|
80 |
+
$mimeType,
|
81 |
+
$data,
|
82 |
+
$resumable = false,
|
83 |
+
$chunkSize = false,
|
84 |
+
$boundary = false
|
85 |
+
) {
|
86 |
+
$this->client = $client;
|
87 |
+
$this->request = $request;
|
88 |
+
$this->mimeType = $mimeType;
|
89 |
+
$this->data = $data;
|
90 |
+
$this->size = strlen($this->data);
|
91 |
+
$this->resumable = $resumable;
|
92 |
+
if (!$chunkSize) {
|
93 |
+
$chunkSize = 256 * 1024;
|
94 |
+
}
|
95 |
+
$this->chunkSize = $chunkSize;
|
96 |
+
$this->progress = 0;
|
97 |
+
$this->boundary = $boundary;
|
98 |
+
|
99 |
+
// Process Media Request
|
100 |
+
$this->process();
|
101 |
+
}
|
102 |
+
|
103 |
+
/**
|
104 |
+
* Set the size of the file that is being uploaded.
|
105 |
+
* @param $size - int file size in bytes
|
106 |
+
*/
|
107 |
+
public function setFileSize($size)
|
108 |
+
{
|
109 |
+
$this->size = $size;
|
110 |
+
}
|
111 |
+
|
112 |
+
/**
|
113 |
+
* Return the progress on the upload
|
114 |
+
* @return int progress in bytes uploaded.
|
115 |
+
*/
|
116 |
+
public function getProgress()
|
117 |
+
{
|
118 |
+
return $this->progress;
|
119 |
+
}
|
120 |
+
|
121 |
+
/**
|
122 |
+
* Return the HTTP result code from the last call made.
|
123 |
+
* @return int code
|
124 |
+
*/
|
125 |
+
public function getHttpResultCode()
|
126 |
+
{
|
127 |
+
return $this->httpResultCode;
|
128 |
+
}
|
129 |
+
|
130 |
+
/**
|
131 |
+
* Send the next part of the file to upload.
|
132 |
+
* @param [$chunk] the next set of bytes to send. If false will used $data passed
|
133 |
+
* at construct time.
|
134 |
+
*/
|
135 |
+
public function nextChunk($chunk = false, $prevResumeUri = false, $fileSizeUploaded = 0)
|
136 |
+
{
|
137 |
+
$this->resumeUri = $prevResumeUri;
|
138 |
+
$this->progress = $fileSizeUploaded;
|
139 |
+
|
140 |
+
if (false == $this->resumeUri) {
|
141 |
+
$this->resumeUri = $this->getResumeUri();
|
142 |
+
}
|
143 |
+
|
144 |
+
if (false == $chunk) {
|
145 |
+
$chunk = substr($this->data, $this->progress, $this->chunkSize);
|
146 |
+
}
|
147 |
+
|
148 |
+
$lastBytePos = $this->progress + strlen($chunk) - 1;
|
149 |
+
$headers = array(
|
150 |
+
'content-range' => "bytes $this->progress-$lastBytePos/$this->size",
|
151 |
+
'content-type' => $this->request->getRequestHeader('content-type'),
|
152 |
+
'content-length' => $this->chunkSize,
|
153 |
+
'expect' => '',
|
154 |
+
);
|
155 |
+
|
156 |
+
$httpRequest = new Google_Http_Request(
|
157 |
+
$this->resumeUri,
|
158 |
+
'PUT',
|
159 |
+
$headers,
|
160 |
+
$chunk
|
161 |
+
);
|
162 |
+
|
163 |
+
if ($this->client->getClassConfig("Google_Http_Request", "enable_gzip_for_uploads")) {
|
164 |
+
$httpRequest->enableGzip();
|
165 |
+
} else {
|
166 |
+
$httpRequest->disableGzip();
|
167 |
+
}
|
168 |
+
|
169 |
+
$response = $this->client->getIo()->makeRequest($httpRequest);
|
170 |
+
$response->setExpectedClass($this->request->getExpectedClass());
|
171 |
+
$code = $response->getResponseHttpCode();
|
172 |
+
$this->httpResultCode = $code;
|
173 |
+
|
174 |
+
if (308 == $code) {
|
175 |
+
// Track the amount uploaded.
|
176 |
+
$range = explode('-', $response->getResponseHeader('range'));
|
177 |
+
$this->progress = $range[1] + 1;
|
178 |
+
|
179 |
+
// Allow for changing upload URLs.
|
180 |
+
$location = $response->getResponseHeader('location');
|
181 |
+
if ($location) {
|
182 |
+
$this->resumeUri = $location;
|
183 |
+
}
|
184 |
+
// No problems, but upload not complete.
|
185 |
+
$status = array();
|
186 |
+
$status['resumeURI'] = $this->resumeUri;
|
187 |
+
$status['progress'] = $this->progress;
|
188 |
+
$status['status'] = false;
|
189 |
+
return $status;
|
190 |
+
} else {
|
191 |
+
$status['progress'] = $this->progress;
|
192 |
+
$status['status'] = Google_Http_REST::decodeHttpResponse($response);
|
193 |
+
return $status;
|
194 |
+
//return Google_Http_REST::decodeHttpResponse($response);
|
195 |
+
}
|
196 |
+
}
|
197 |
+
|
198 |
+
/**
|
199 |
+
* @param $meta
|
200 |
+
* @param $params
|
201 |
+
* @return array|bool
|
202 |
+
* @visible for testing
|
203 |
+
*/
|
204 |
+
private function process()
|
205 |
+
{
|
206 |
+
$postBody = false;
|
207 |
+
$contentType = false;
|
208 |
+
|
209 |
+
$meta = $this->request->getPostBody();
|
210 |
+
$meta = is_string($meta) ? json_decode($meta, true) : $meta;
|
211 |
+
|
212 |
+
$uploadType = $this->getUploadType($meta);
|
213 |
+
$this->request->setQueryParam('uploadType', $uploadType);
|
214 |
+
$this->transformToUploadUrl();
|
215 |
+
$mimeType = $this->mimeType ?
|
216 |
+
$this->mimeType :
|
217 |
+
$this->request->getRequestHeader('content-type');
|
218 |
+
|
219 |
+
if (self::UPLOAD_RESUMABLE_TYPE == $uploadType) {
|
220 |
+
$contentType = $mimeType;
|
221 |
+
$postBody = is_string($meta) ? $meta : json_encode($meta);
|
222 |
+
}
|
223 |
+
else if (self::UPLOAD_MEDIA_TYPE == $uploadType) {
|
224 |
+
$contentType = $mimeType;
|
225 |
+
$postBody = $this->data;
|
226 |
+
}
|
227 |
+
else if (self::UPLOAD_MULTIPART_TYPE == $uploadType) {
|
228 |
+
// This is a multipart/related upload.
|
229 |
+
$boundary = $this->boundary ? $this->boundary : mt_rand();
|
230 |
+
$boundary = str_replace('"', '', $boundary);
|
231 |
+
$contentType = 'multipart/related; boundary=' . $boundary;
|
232 |
+
$related = "--$boundary\r\n";
|
233 |
+
$related .= "Content-Type: application/json; charset=UTF-8\r\n";
|
234 |
+
$related .= "\r\n" . json_encode($meta) . "\r\n";
|
235 |
+
$related .= "--$boundary\r\n";
|
236 |
+
$related .= "Content-Type: $mimeType\r\n";
|
237 |
+
$related .= "Content-Transfer-Encoding: base64\r\n";
|
238 |
+
$related .= "\r\n" . base64_encode($this->data) . "\r\n";
|
239 |
+
$related .= "--$boundary--";
|
240 |
+
$postBody = $related;
|
241 |
+
}
|
242 |
+
|
243 |
+
$this->request->setPostBody($postBody);
|
244 |
+
|
245 |
+
if (isset($contentType) && $contentType) {
|
246 |
+
$contentTypeHeader['content-type'] = $contentType;
|
247 |
+
$this->request->setRequestHeaders($contentTypeHeader);
|
248 |
+
}
|
249 |
+
}
|
250 |
+
|
251 |
+
private function transformToUploadUrl()
|
252 |
+
{
|
253 |
+
$base = $this->request->getBaseComponent();
|
254 |
+
$this->request->setBaseComponent($base . '/upload');
|
255 |
+
}
|
256 |
+
|
257 |
+
/**
|
258 |
+
* Valid upload types:
|
259 |
+
* - resumable (UPLOAD_RESUMABLE_TYPE)
|
260 |
+
* - media (UPLOAD_MEDIA_TYPE)
|
261 |
+
* - multipart (UPLOAD_MULTIPART_TYPE)
|
262 |
+
* @param $meta
|
263 |
+
* @return string
|
264 |
+
* @visible for testing
|
265 |
+
*/
|
266 |
+
public function getUploadType($meta)
|
267 |
+
{
|
268 |
+
if ($this->resumable) {
|
269 |
+
return self::UPLOAD_RESUMABLE_TYPE;
|
270 |
+
}
|
271 |
+
|
272 |
+
if (false == $meta && $this->data) {
|
273 |
+
return self::UPLOAD_MEDIA_TYPE;
|
274 |
+
}
|
275 |
+
|
276 |
+
return self::UPLOAD_MULTIPART_TYPE;
|
277 |
+
}
|
278 |
+
|
279 |
+
private function getResumeUri()
|
280 |
+
{
|
281 |
+
$result = null;
|
282 |
+
$body = $this->request->getPostBody();
|
283 |
+
if ($body) {
|
284 |
+
$headers = array(
|
285 |
+
'content-type' => 'application/json; charset=UTF-8',
|
286 |
+
'content-length' => Google_Utils::getStrLen($body),
|
287 |
+
'x-upload-content-type' => $this->mimeType,
|
288 |
+
'x-upload-content-length' => $this->size,
|
289 |
+
'expect' => '',
|
290 |
+
);
|
291 |
+
$this->request->setRequestHeaders($headers);
|
292 |
+
}
|
293 |
+
|
294 |
+
$response = $this->client->getIo()->makeRequest($this->request);
|
295 |
+
$location = $response->getResponseHeader('location');
|
296 |
+
$code = $response->getResponseHttpCode();
|
297 |
+
|
298 |
+
if (200 == $code && true == $location) {
|
299 |
+
return $location;
|
300 |
+
}
|
301 |
+
throw new Google_Exception("Failed to start the resumable upload");
|
302 |
+
}
|
303 |
+
}
|
lib/Google/Http/REST.php
ADDED
@@ -0,0 +1,139 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* Copyright 2010 Google Inc.
|
4 |
+
*
|
5 |
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
6 |
+
* you may not use this file except in compliance with the License.
|
7 |
+
* You may obtain 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,
|
13 |
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14 |
+
* See the License for the specific language governing permissions and
|
15 |
+
* limitations under the License.
|
16 |
+
*/
|
17 |
+
|
18 |
+
require_once $GLOBALS['iwp_mmb_plugin_dir'].'/lib/Google/Client.php';
|
19 |
+
require_once $GLOBALS['iwp_mmb_plugin_dir'].'/lib/Google/Http/Request.php';
|
20 |
+
require_once $GLOBALS['iwp_mmb_plugin_dir'].'/lib/Google/Service/Exception.php';
|
21 |
+
require_once $GLOBALS['iwp_mmb_plugin_dir'].'/lib/Google/Utils/URITemplate.php';
|
22 |
+
|
23 |
+
/**
|
24 |
+
* This class implements the RESTful transport of apiServiceRequest()'s
|
25 |
+
*
|
26 |
+
* @author Chris Chabot <chabotc@google.com>
|
27 |
+
* @author Chirag Shah <chirags@google.com>
|
28 |
+
*/
|
29 |
+
class Google_Http_REST
|
30 |
+
{
|
31 |
+
/**
|
32 |
+
* Executes a Google_Http_Request
|
33 |
+
*
|
34 |
+
* @param Google_Client $client
|
35 |
+
* @param Google_Http_Request $req
|
36 |
+
* @return array decoded result
|
37 |
+
* @throws Google_Service_Exception on server side error (ie: not authenticated,
|
38 |
+
* invalid or malformed post body, invalid url)
|
39 |
+
*/
|
40 |
+
public static function execute(Google_Client $client, Google_Http_Request $req)
|
41 |
+
{
|
42 |
+
$httpRequest = $client->getIo()->makeRequest($req);
|
43 |
+
$httpRequest->setExpectedClass($req->getExpectedClass());
|
44 |
+
return self::decodeHttpResponse($httpRequest);
|
45 |
+
}
|
46 |
+
|
47 |
+
/**
|
48 |
+
* Decode an HTTP Response.
|
49 |
+
* @static
|
50 |
+
* @throws Google_Service_Exception
|
51 |
+
* @param Google_Http_Request $response The http response to be decoded.
|
52 |
+
* @return mixed|null
|
53 |
+
*/
|
54 |
+
public static function decodeHttpResponse($response)
|
55 |
+
{
|
56 |
+
$code = $response->getResponseHttpCode();
|
57 |
+
$body = $response->getResponseBody();
|
58 |
+
$decoded = null;
|
59 |
+
|
60 |
+
if ((intVal($code)) >= 300) {
|
61 |
+
$decoded = json_decode($body, true);
|
62 |
+
$err = 'Error calling ' . $response->getRequestMethod() . ' ' . $response->getUrl();
|
63 |
+
if (isset($decoded['error']) &&
|
64 |
+
isset($decoded['error']['message']) &&
|
65 |
+
isset($decoded['error']['code'])) {
|
66 |
+
// if we're getting a json encoded error definition, use that instead of the raw response
|
67 |
+
// body for improved readability
|
68 |
+
$err .= ": ({$decoded['error']['code']}) {$decoded['error']['message']}";
|
69 |
+
} else {
|
70 |
+
$err .= ": ($code) $body";
|
71 |
+
}
|
72 |
+
|
73 |
+
$errors = null;
|
74 |
+
// Specific check for APIs which don't return error details, such as Blogger.
|
75 |
+
if (isset($decoded['error']) && isset($decoded['error']['errors'])) {
|
76 |
+
$errors = $decoded['error']['errors'];
|
77 |
+
}
|
78 |
+
|
79 |
+
throw new Google_Service_Exception($err, $code, null, $errors);
|
80 |
+
}
|
81 |
+
|
82 |
+
// Only attempt to decode the response, if the response code wasn't (204) 'no content'
|
83 |
+
if ($code != '204') {
|
84 |
+
$decoded = json_decode($body, true);
|
85 |
+
if ($decoded === null || $decoded === "") {
|
86 |
+
throw new Google_Service_Exception("Invalid json in service response: $body");
|
87 |
+
}
|
88 |
+
|
89 |
+
if ($response->getExpectedClass()) {
|
90 |
+
$class = $response->getExpectedClass();
|
91 |
+
$decoded = new $class($decoded);
|
92 |
+
}
|
93 |
+
}
|
94 |
+
return $decoded;
|
95 |
+
}
|
96 |
+
|
97 |
+
/**
|
98 |
+
* Parse/expand request parameters and create a fully qualified
|
99 |
+
* request uri.
|
100 |
+
* @static
|
101 |
+
* @param string $servicePath
|
102 |
+
* @param string $restPath
|
103 |
+
* @param array $params
|
104 |
+
* @return string $requestUrl
|
105 |
+
*/
|
106 |
+
public static function createRequestUri($servicePath, $restPath, $params)
|
107 |
+
{
|
108 |
+
$requestUrl = $servicePath . $restPath;
|
109 |
+
$uriTemplateVars = array();
|
110 |
+
$queryVars = array();
|
111 |
+
foreach ($params as $paramName => $paramSpec) {
|
112 |
+
if ($paramSpec['type'] == 'boolean') {
|
113 |
+
$paramSpec['value'] = ($paramSpec['value']) ? 'true' : 'false';
|
114 |
+
}
|
115 |
+
if ($paramSpec['location'] == 'path') {
|
116 |
+
$uriTemplateVars[$paramName] = $paramSpec['value'];
|
117 |
+
} else if ($paramSpec['location'] == 'query') {
|
118 |
+
if (isset($paramSpec['repeated']) && is_array($paramSpec['value'])) {
|
119 |
+
foreach ($paramSpec['value'] as $value) {
|
120 |
+
$queryVars[] = $paramName . '=' . rawurlencode($value);
|
121 |
+
}
|
122 |
+
} else {
|
123 |
+
$queryVars[] = $paramName . '=' . rawurlencode($paramSpec['value']);
|
124 |
+
}
|
125 |
+
}
|
126 |
+
}
|
127 |
+
|
128 |
+
if (count($uriTemplateVars)) {
|
129 |
+
$uriTemplateParser = new Google_Utils_URITemplate();
|
130 |
+
$requestUrl = $uriTemplateParser->parse($requestUrl, $uriTemplateVars);
|
131 |
+
}
|
132 |
+
|
133 |
+
if (count($queryVars)) {
|
134 |
+
$requestUrl .= '?' . implode($queryVars, '&');
|
135 |
+
}
|
136 |
+
|
137 |
+
return $requestUrl;
|
138 |
+
}
|
139 |
+
}
|
lib/Google/Http/Request.php
ADDED
@@ -0,0 +1,476 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* Copyright 2010 Google Inc.
|
4 |
+
*
|
5 |
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
6 |
+
* you may not use this file except in compliance with the License.
|
7 |
+
* You may obtain 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,
|
13 |
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14 |
+
* See the License for the specific language governing permissions and
|
15 |
+
* limitations under the License.
|
16 |
+
*/
|
17 |
+
|
18 |
+
require_once $GLOBALS['iwp_mmb_plugin_dir'].'/lib/Google/Utils.php';
|
19 |
+
|
20 |
+
/**
|
21 |
+
* HTTP Request to be executed by IO classes. Upon execution, the
|
22 |
+
* responseHttpCode, responseHeaders and responseBody will be filled in.
|
23 |
+
*
|
24 |
+
* @author Chris Chabot <chabotc@google.com>
|
25 |
+
* @author Chirag Shah <chirags@google.com>
|
26 |
+
*
|
27 |
+
*/
|
28 |
+
class Google_Http_Request
|
29 |
+
{
|
30 |
+
const GZIP_UA = " (gzip)";
|
31 |
+
|
32 |
+
private $batchHeaders = array(
|
33 |
+
'Content-Type' => 'application/http',
|
34 |
+
'Content-Transfer-Encoding' => 'binary',
|
35 |
+
'MIME-Version' => '1.0',
|
36 |
+
);
|
37 |
+
|
38 |
+
protected $queryParams;
|
39 |
+
protected $requestMethod;
|
40 |
+
protected $requestHeaders;
|
41 |
+
protected $baseComponent = null;
|
42 |
+
protected $path;
|
43 |
+
protected $postBody;
|
44 |
+
protected $userAgent;
|
45 |
+
protected $canGzip = null;
|
46 |
+
|
47 |
+
protected $responseHttpCode;
|
48 |
+
protected $responseHeaders;
|
49 |
+
protected $responseBody;
|
50 |
+
|
51 |
+
protected $expectedClass;
|
52 |
+
|
53 |
+
public $accessKey;
|
54 |
+
|
55 |
+
public function __construct(
|
56 |
+
$url,
|
57 |
+
$method = 'GET',
|
58 |
+
$headers = array(),
|
59 |
+
$postBody = null
|
60 |
+
) {
|
61 |
+
$this->setUrl($url);
|
62 |
+
$this->setRequestMethod($method);
|
63 |
+
$this->setRequestHeaders($headers);
|
64 |
+
$this->setPostBody($postBody);
|
65 |
+
}
|
66 |
+
|
67 |
+
/**
|
68 |
+
* Misc function that returns the base url component of the $url
|
69 |
+
* used by the OAuth signing class to calculate the base string
|
70 |
+
* @return string The base url component of the $url.
|
71 |
+
*/
|
72 |
+
public function getBaseComponent()
|
73 |
+
{
|
74 |
+
return $this->baseComponent;
|
75 |
+
}
|
76 |
+
|
77 |
+
/**
|
78 |
+
* Set the base URL that path and query parameters will be added to.
|
79 |
+
* @param $baseComponent string
|
80 |
+
*/
|
81 |
+
public function setBaseComponent($baseComponent)
|
82 |
+
{
|
83 |
+
$this->baseComponent = $baseComponent;
|
84 |
+
}
|
85 |
+
|
86 |
+
/**
|
87 |
+
* Enable support for gzipped responses with this request.
|
88 |
+
*/
|
89 |
+
public function enableGzip()
|
90 |
+
{
|
91 |
+
$this->setRequestHeaders(array("Accept-Encoding" => "gzip"));
|
92 |
+
$this->canGzip = true;
|
93 |
+
$this->setUserAgent($this->userAgent);
|
94 |
+
}
|
95 |
+
|
96 |
+
/**
|
97 |
+
* Disable support for gzip responses with this request.
|
98 |
+
*/
|
99 |
+
public function disableGzip()
|
100 |
+
{
|
101 |
+
if (
|
102 |
+
isset($this->requestHeaders['accept-encoding']) &&
|
103 |
+
$this->requestHeaders['accept-encoding'] == "gzip"
|
104 |
+
) {
|
105 |
+
unset($this->requestHeaders['accept-encoding']);
|
106 |
+
}
|
107 |
+
$this->canGzip = false;
|
108 |
+
$this->userAgent = str_replace(self::GZIP_UA, "", $this->userAgent);
|
109 |
+
}
|
110 |
+
|
111 |
+
/**
|
112 |
+
* Can this request accept a gzip response?
|
113 |
+
* @return bool
|
114 |
+
*/
|
115 |
+
public function canGzip()
|
116 |
+
{
|
117 |
+
return $this->canGzip;
|
118 |
+
}
|
119 |
+
|
120 |
+
/**
|
121 |
+
* Misc function that returns an array of the query parameters of the current
|
122 |
+
* url used by the OAuth signing class to calculate the signature
|
123 |
+
* @return array Query parameters in the query string.
|
124 |
+
*/
|
125 |
+
public function getQueryParams()
|
126 |
+
{
|
127 |
+
return $this->queryParams;
|
128 |
+
}
|
129 |
+
|
130 |
+
/**
|
131 |
+
* Set a new query parameter.
|
132 |
+
* @param $key - string to set, does not need to be URL encoded
|
133 |
+
* @param $value - string to set, does not need to be URL encoded
|
134 |
+
*/
|
135 |
+
public function setQueryParam($key, $value)
|
136 |
+
{
|
137 |
+
$this->queryParams[$key] = $value;
|
138 |
+
}
|
139 |
+
|
140 |
+
/**
|
141 |
+
* @return string HTTP Response Code.
|
142 |
+
*/
|
143 |
+
public function getResponseHttpCode()
|
144 |
+
{
|
145 |
+
return (int) $this->responseHttpCode;
|
146 |
+
}
|
147 |
+
|
148 |
+
/**
|
149 |
+
* @param int $responseHttpCode HTTP Response Code.
|
150 |
+
*/
|
151 |
+
public function setResponseHttpCode($responseHttpCode)
|
152 |
+
{
|
153 |
+
$this->responseHttpCode = $responseHttpCode;
|
154 |
+
}
|
155 |
+
|
156 |
+
/**
|
157 |
+
* @return $responseHeaders (array) HTTP Response Headers.
|
158 |
+
*/
|
159 |
+
public function getResponseHeaders()
|
160 |
+
{
|
161 |
+
return $this->responseHeaders;
|
162 |
+
}
|
163 |
+
|
164 |
+
/**
|
165 |
+
* @return string HTTP Response Body
|
166 |
+
*/
|
167 |
+
public function getResponseBody()
|
168 |
+
{
|
169 |
+
return $this->responseBody;
|
170 |
+
}
|
171 |
+
|
172 |
+
/**
|
173 |
+
* Set the class the response to this request should expect.
|
174 |
+
*
|
175 |
+
* @param $class string the class name
|
176 |
+
*/
|
177 |
+
public function setExpectedClass($class)
|
178 |
+
{
|
179 |
+
$this->expectedClass = $class;
|
180 |
+
}
|
181 |
+
|
182 |
+
/**
|
183 |
+
* Retrieve the expected class the response should expect.
|
184 |
+
* @return string class name
|
185 |
+
*/
|
186 |
+
public function getExpectedClass()
|
187 |
+
{
|
188 |
+
return $this->expectedClass;
|
189 |
+
}
|
190 |
+
|
191 |
+
/**
|
192 |
+
* @param array $headers The HTTP response headers
|
193 |
+
* to be normalized.
|
194 |
+
*/
|
195 |
+
public function setResponseHeaders($headers)
|
196 |
+
{
|
197 |
+
$headers = Google_Utils::normalize($headers);
|
198 |
+
if ($this->responseHeaders) {
|
199 |
+
$headers = array_merge($this->responseHeaders, $headers);
|
200 |
+
}
|
201 |
+
|
202 |
+
$this->responseHeaders = $headers;
|
203 |
+
}
|
204 |
+
|
205 |
+
/**
|
206 |
+
* @param string $key
|
207 |
+
* @return array|boolean Returns the requested HTTP header or
|
208 |
+
* false if unavailable.
|
209 |
+
*/
|
210 |
+
public function getResponseHeader($key)
|
211 |
+
{
|
212 |
+
return isset($this->responseHeaders[$key])
|
213 |
+
? $this->responseHeaders[$key]
|
214 |
+
: false;
|
215 |
+
}
|
216 |
+
|
217 |
+
/**
|
218 |
+
* @param string $responseBody The HTTP response body.
|
219 |
+
*/
|
220 |
+
public function setResponseBody($responseBody)
|
221 |
+
{
|
222 |
+
$this->responseBody = $responseBody;
|
223 |
+
}
|
224 |
+
|
225 |
+
/**
|
226 |
+
* @return string $url The request URL.
|
227 |
+
*/
|
228 |
+
public function getUrl()
|
229 |
+
{
|
230 |
+
return $this->baseComponent . $this->path .
|
231 |
+
(count($this->queryParams) ?
|
232 |
+
"?" . $this->buildQuery($this->queryParams) :
|
233 |
+
'');
|
234 |
+
}
|
235 |
+
|
236 |
+
/**
|
237 |
+
* @return string $method HTTP Request Method.
|
238 |
+
*/
|
239 |
+
public function getRequestMethod()
|
240 |
+
{
|
241 |
+
return $this->requestMethod;
|
242 |
+
}
|
243 |
+
|
244 |
+
/**
|
245 |
+
* @return array $headers HTTP Request Headers.
|
246 |
+
*/
|
247 |
+
public function getRequestHeaders()
|
248 |
+
{
|
249 |
+
return $this->requestHeaders;
|
250 |
+
}
|
251 |
+
|
252 |
+
/**
|
253 |
+
* @param string $key
|
254 |
+
* @return array|boolean Returns the requested HTTP header or
|
255 |
+
* false if unavailable.
|
256 |
+
*/
|
257 |
+
public function getRequestHeader($key)
|
258 |
+
{
|
259 |
+
return isset($this->requestHeaders[$key])
|
260 |
+
? $this->requestHeaders[$key]
|
261 |
+
: false;
|
262 |
+
}
|
263 |
+
|
264 |
+
/**
|
265 |
+
* @return string $postBody HTTP Request Body.
|
266 |
+
*/
|
267 |
+
public function getPostBody()
|
268 |
+
{
|
269 |
+
return $this->postBody;
|
270 |
+
}
|
271 |
+
|
272 |
+
/**
|
273 |
+
* @param string $url the url to set
|
274 |
+
*/
|
275 |
+
public function setUrl($url)
|
276 |
+
{
|
277 |
+
if (substr($url, 0, 4) != 'http') {
|
278 |
+
// Force the path become relative.
|
279 |
+
if (substr($url, 0, 1) !== '/') {
|
280 |
+
$url = '/' . $url;
|
281 |
+
}
|
282 |
+
}
|
283 |
+
$parts = parse_url($url);
|
284 |
+
if (isset($parts['host'])) {
|
285 |
+
$this->baseComponent = sprintf(
|
286 |
+
"%s%s%s",
|
287 |
+
isset($parts['scheme']) ? $parts['scheme'] . "://" : '',
|
288 |
+
isset($parts['host']) ? $parts['host'] : '',
|
289 |
+
isset($parts['port']) ? ":" . $parts['port'] : ''
|
290 |
+
);
|
291 |
+
}
|
292 |
+
$this->path = isset($parts['path']) ? $parts['path'] : '';
|
293 |
+
$this->queryParams = array();
|
294 |
+
if (isset($parts['query'])) {
|
295 |
+
$this->queryParams = $this->parseQuery($parts['query']);
|
296 |
+
}
|
297 |
+
}
|
298 |
+
|
299 |
+
/**
|
300 |
+
* @param string $method Set he HTTP Method and normalize
|
301 |
+
* it to upper-case, as required by HTTP.
|
302 |
+
*
|
303 |
+
*/
|
304 |
+
public function setRequestMethod($method)
|
305 |
+
{
|
306 |
+
$this->requestMethod = strtoupper($method);
|
307 |
+
}
|
308 |
+
|
309 |
+
/**
|
310 |
+
* @param array $headers The HTTP request headers
|
311 |
+
* to be set and normalized.
|
312 |
+
*/
|
313 |
+
public function setRequestHeaders($headers)
|
314 |
+
{
|
315 |
+
$headers = Google_Utils::normalize($headers);
|
316 |
+
if ($this->requestHeaders) {
|
317 |
+
$headers = array_merge($this->requestHeaders, $headers);
|
318 |
+
}
|
319 |
+
$this->requestHeaders = $headers;
|
320 |
+
}
|
321 |
+
|
322 |
+
/**
|
323 |
+
* @param string $postBody the postBody to set
|
324 |
+
*/
|
325 |
+
public function setPostBody($postBody)
|
326 |
+
{
|
327 |
+
$this->postBody = $postBody;
|
328 |
+
}
|
329 |
+
|
330 |
+
/**
|
331 |
+
* Set the User-Agent Header.
|
332 |
+
* @param string $userAgent The User-Agent.
|
333 |
+
*/
|
334 |
+
public function setUserAgent($userAgent)
|
335 |
+
{
|
336 |
+
$this->userAgent = $userAgent;
|
337 |
+
if ($this->canGzip) {
|
338 |
+
$this->userAgent = $userAgent . self::GZIP_UA;
|
339 |
+
}
|
340 |
+
}
|
341 |
+
|
342 |
+
/**
|
343 |
+
* @return string The User-Agent.
|
344 |
+
*/
|
345 |
+
public function getUserAgent()
|
346 |
+
{
|
347 |
+
return $this->userAgent;
|
348 |
+
}
|
349 |
+
|
350 |
+
/**
|
351 |
+
* Returns a cache key depending on if this was an OAuth signed request
|
352 |
+
* in which case it will use the non-signed url and access key to make this
|
353 |
+
* cache key unique per authenticated user, else use the plain request url
|
354 |
+
* @return string The md5 hash of the request cache key.
|
355 |
+
*/
|
356 |
+
public function getCacheKey()
|
357 |
+
{
|
358 |
+
$key = $this->getUrl();
|
359 |
+
|
360 |
+
if (isset($this->accessKey)) {
|
361 |
+
$key .= $this->accessKey;
|
362 |
+
}
|
363 |
+
|
364 |
+
if (isset($this->requestHeaders['authorization'])) {
|
365 |
+
$key .= $this->requestHeaders['authorization'];
|
366 |
+
}
|
367 |
+
|
368 |
+
return md5($key);
|
369 |
+
}
|
370 |
+
|
371 |
+
public function getParsedCacheControl()
|
372 |
+
{
|
373 |
+
$parsed = array();
|
374 |
+
$rawCacheControl = $this->getResponseHeader('cache-control');
|
375 |
+
if ($rawCacheControl) {
|
376 |
+
$rawCacheControl = str_replace(', ', '&', $rawCacheControl);
|
377 |
+
parse_str($rawCacheControl, $parsed);
|
378 |
+
}
|
379 |
+
|
380 |
+
return $parsed;
|
381 |
+
}
|
382 |
+
|
383 |
+
/**
|
384 |
+
* @param string $id
|
385 |
+
* @return string A string representation of the HTTP Request.
|
386 |
+
*/
|
387 |
+
public function toBatchString($id)
|
388 |
+
{
|
389 |
+
$str = '';
|
390 |
+
$path = parse_url($this->getUrl(), PHP_URL_PATH) . "?" .
|
391 |
+
http_build_query($this->queryParams);
|
392 |
+
$str .= $this->getRequestMethod() . ' ' . $path . " HTTP/1.1\n";
|
393 |
+
|
394 |
+
foreach ($this->getRequestHeaders() as $key => $val) {
|
395 |
+
$str .= $key . ': ' . $val . "\n";
|
396 |
+
}
|
397 |
+
|
398 |
+
if ($this->getPostBody()) {
|
399 |
+
$str .= "\n";
|
400 |
+
$str .= $this->getPostBody();
|
401 |
+
}
|
402 |
+
|
403 |
+
$headers = '';
|
404 |
+
foreach ($this->batchHeaders as $key => $val) {
|
405 |
+
$headers .= $key . ': ' . $val . "\n";
|
406 |
+
}
|
407 |
+
|
408 |
+
$headers .= "Content-ID: $id\n";
|
409 |
+
$str = $headers . "\n" . $str;
|
410 |
+
|
411 |
+
return $str;
|
412 |
+
}
|
413 |
+
|
414 |
+
/**
|
415 |
+
* Our own version of parse_str that allows for multiple variables
|
416 |
+
* with the same name.
|
417 |
+
* @param $string - the query string to parse
|
418 |
+
*/
|
419 |
+
private function parseQuery($string)
|
420 |
+
{
|
421 |
+
$return = array();
|
422 |
+
$parts = explode("&", $string);
|
423 |
+
foreach ($parts as $part) {
|
424 |
+
list($key, $value) = explode('=', $part, 2);
|
425 |
+
$value = urldecode($value);
|
426 |
+
if (isset($return[$key])) {
|
427 |
+
if (!is_array($return[$key])) {
|
428 |
+
$return[$key] = array($return[$key]);
|
429 |
+
}
|
430 |
+
$return[$key][] = $value;
|
431 |
+
} else {
|
432 |
+
$return[$key] = $value;
|
433 |
+
}
|
434 |
+
}
|
435 |
+
return $return;
|
436 |
+
}
|
437 |
+
|
438 |
+
/**
|
439 |
+
* A version of build query that allows for multiple
|
440 |
+
* duplicate keys.
|
441 |
+
* @param $parts array of key value pairs
|
442 |
+
*/
|
443 |
+
private function buildQuery($parts)
|
444 |
+
{
|
445 |
+
$return = array();
|
446 |
+
foreach ($parts as $key => $value) {
|
447 |
+
if (is_array($value)) {
|
448 |
+
foreach ($value as $v) {
|
449 |
+
$return[] = urlencode($key) . "=" . urlencode($v);
|
450 |
+
}
|
451 |
+
} else {
|
452 |
+
$return[] = urlencode($key) . "=" . urlencode($value);
|
453 |
+
}
|
454 |
+
}
|
455 |
+
return implode('&', $return);
|
456 |
+
}
|
457 |
+
|
458 |
+
/**
|
459 |
+
* If we're POSTing and have no body to send, we can send the query
|
460 |
+
* parameters in there, which avoids length issues with longer query
|
461 |
+
* params.
|
462 |
+
*/
|
463 |
+
public function maybeMoveParametersToBody()
|
464 |
+
{
|
465 |
+
if ($this->getRequestMethod() == "POST" && empty($this->postBody)) {
|
466 |
+
$this->setRequestHeaders(
|
467 |
+
array(
|
468 |
+
"content-type" =>
|
469 |
+
"application/x-www-form-urlencoded; charset=UTF-8"
|
470 |
+
)
|
471 |
+
);
|
472 |
+
$this->setPostBody($this->buildQuery($this->queryParams));
|
473 |
+
$this->queryParams = array();
|
474 |
+
}
|
475 |
+
}
|
476 |
+
}
|
lib/Google/IO/Abstract.php
ADDED
@@ -0,0 +1,312 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* Copyright 2013 Google Inc.
|
4 |
+
*
|
5 |
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
6 |
+
* you may not use this file except in compliance with the License.
|
7 |
+
* You may obtain 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,
|
13 |
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14 |
+
* See the License for the specific language governing permissions and
|
15 |
+
* limitations under the License.
|
16 |
+
*/
|
17 |
+
|
18 |
+
/**
|
19 |
+
* Abstract IO base class
|
20 |
+
*/
|
21 |
+
|
22 |
+
require_once $GLOBALS['iwp_mmb_plugin_dir'].'/lib/Google/Client.php';
|
23 |
+
require_once $GLOBALS['iwp_mmb_plugin_dir'].'/lib/Google/IO/Exception.php';
|
24 |
+
require_once $GLOBALS['iwp_mmb_plugin_dir'].'/lib/Google/Http/CacheParser.php';
|
25 |
+
require_once $GLOBALS['iwp_mmb_plugin_dir'].'/lib/Google/Http/Request.php';
|
26 |
+
|
27 |
+
abstract class Google_IO_Abstract
|
28 |
+
{
|
29 |
+
const UNKNOWN_CODE = 0;
|
30 |
+
const FORM_URLENCODED = 'application/x-www-form-urlencoded';
|
31 |
+
const CONNECTION_ESTABLISHED = "HTTP/1.0 200 Connection established\r\n\r\n";
|
32 |
+
private static $ENTITY_HTTP_METHODS = array("POST" => null, "PUT" => null);
|
33 |
+
|
34 |
+
/** @var Google_Client */
|
35 |
+
protected $client;
|
36 |
+
|
37 |
+
public function __construct(Google_Client $client)
|
38 |
+
{
|
39 |
+
$this->client = $client;
|
40 |
+
$timeout = $client->getClassConfig('Google_IO_Abstract', 'request_timeout_seconds');
|
41 |
+
if ($timeout > 0) {
|
42 |
+
$this->setTimeout($timeout);
|
43 |
+
}
|
44 |
+
}
|
45 |
+
|
46 |
+
/**
|
47 |
+
* Executes a Google_Http_Request and returns the resulting populated Google_Http_Request
|
48 |
+
* @param Google_Http_Request $request
|
49 |
+
* @return Google_Http_Request $request
|
50 |
+
*/
|
51 |
+
abstract public function executeRequest(Google_Http_Request $request);
|
52 |
+
|
53 |
+
/**
|
54 |
+
* Set options that update the transport implementation's behavior.
|
55 |
+
* @param $options
|
56 |
+
*/
|
57 |
+
abstract public function setOptions($options);
|
58 |
+
|
59 |
+
/**
|
60 |
+
* Set the maximum request time in seconds.
|
61 |
+
* @param $timeout in seconds
|
62 |
+
*/
|
63 |
+
abstract public function setTimeout($timeout);
|
64 |
+
|
65 |
+
/**
|
66 |
+
* Get the maximum request time in seconds.
|
67 |
+
* @return timeout in seconds
|
68 |
+
*/
|
69 |
+
abstract public function getTimeout();
|
70 |
+
|
71 |
+
/**
|
72 |
+
* Determine whether "Connection Established" quirk is needed
|
73 |
+
* @return boolean
|
74 |
+
*/
|
75 |
+
abstract protected function needsQuirk();
|
76 |
+
|
77 |
+
/**
|
78 |
+
* @visible for testing.
|
79 |
+
* Cache the response to an HTTP request if it is cacheable.
|
80 |
+
* @param Google_Http_Request $request
|
81 |
+
* @return bool Returns true if the insertion was successful.
|
82 |
+
* Otherwise, return false.
|
83 |
+
*/
|
84 |
+
public function setCachedRequest(Google_Http_Request $request)
|
85 |
+
{
|
86 |
+
// Determine if the request is cacheable.
|
87 |
+
if (Google_Http_CacheParser::isResponseCacheable($request)) {
|
88 |
+
$this->client->getCache()->set($request->getCacheKey(), $request);
|
89 |
+
return true;
|
90 |
+
}
|
91 |
+
|
92 |
+
return false;
|
93 |
+
}
|
94 |
+
|
95 |
+
/**
|
96 |
+
* Execute an HTTP Request
|
97 |
+
*
|
98 |
+
* @param Google_HttpRequest $request the http request to be executed
|
99 |
+
* @return Google_HttpRequest http request with the response http code,
|
100 |
+
* response headers and response body filled in
|
101 |
+
* @throws Google_IO_Exception on curl or IO error
|
102 |
+
*/
|
103 |
+
public function makeRequest(Google_Http_Request $request)
|
104 |
+
{
|
105 |
+
// First, check to see if we have a valid cached version.
|
106 |
+
$cached = $this->getCachedRequest($request);
|
107 |
+
if ($cached !== false && $cached instanceof Google_Http_Request) {
|
108 |
+
if (!$this->checkMustRevalidateCachedRequest($cached, $request)) {
|
109 |
+
return $cached;
|
110 |
+
}
|
111 |
+
}
|
112 |
+
|
113 |
+
if (array_key_exists($request->getRequestMethod(), self::$ENTITY_HTTP_METHODS)) {
|
114 |
+
$request = $this->processEntityRequest($request);
|
115 |
+
}
|
116 |
+
|
117 |
+
list($responseData, $responseHeaders, $respHttpCode) = $this->executeRequest($request);
|
118 |
+
|
119 |
+
if ($respHttpCode == 304 && $cached) {
|
120 |
+
// If the server responded NOT_MODIFIED, return the cached request.
|
121 |
+
$this->updateCachedRequest($cached, $responseHeaders);
|
122 |
+
return $cached;
|
123 |
+
}
|
124 |
+
|
125 |
+
if (!isset($responseHeaders['Date']) && !isset($responseHeaders['date'])) {
|
126 |
+
$responseHeaders['Date'] = date("r");
|
127 |
+
}
|
128 |
+
|
129 |
+
$request->setResponseHttpCode($respHttpCode);
|
130 |
+
$request->setResponseHeaders($responseHeaders);
|
131 |
+
$request->setResponseBody($responseData);
|
132 |
+
// Store the request in cache (the function checks to see if the request
|
133 |
+
// can actually be cached)
|
134 |
+
$this->setCachedRequest($request);
|
135 |
+
return $request;
|
136 |
+
}
|
137 |
+
|
138 |
+
/**
|
139 |
+
* @visible for testing.
|
140 |
+
* @param Google_Http_Request $request
|
141 |
+
* @return Google_Http_Request|bool Returns the cached object or
|
142 |
+
* false if the operation was unsuccessful.
|
143 |
+
*/
|
144 |
+
public function getCachedRequest(Google_Http_Request $request)
|
145 |
+
{
|
146 |
+
if (false === Google_Http_CacheParser::isRequestCacheable($request)) {
|
147 |
+
return false;
|
148 |
+
}
|
149 |
+
|
150 |
+
return $this->client->getCache()->get($request->getCacheKey());
|
151 |
+
}
|
152 |
+
|
153 |
+
/**
|
154 |
+
* @visible for testing
|
155 |
+
* Process an http request that contains an enclosed entity.
|
156 |
+
* @param Google_Http_Request $request
|
157 |
+
* @return Google_Http_Request Processed request with the enclosed entity.
|
158 |
+
*/
|
159 |
+
public function processEntityRequest(Google_Http_Request $request)
|
160 |
+
{
|
161 |
+
$postBody = $request->getPostBody();
|
162 |
+
$contentType = $request->getRequestHeader("content-type");
|
163 |
+
|
164 |
+
// Set the default content-type as application/x-www-form-urlencoded.
|
165 |
+
if (false == $contentType) {
|
166 |
+
$contentType = self::FORM_URLENCODED;
|
167 |
+
$request->setRequestHeaders(array('content-type' => $contentType));
|
168 |
+
}
|
169 |
+
|
170 |
+
// Force the payload to match the content-type asserted in the header.
|
171 |
+
if ($contentType == self::FORM_URLENCODED && is_array($postBody)) {
|
172 |
+
$postBody = http_build_query($postBody, '', '&');
|
173 |
+
$request->setPostBody($postBody);
|
174 |
+
}
|
175 |
+
|
176 |
+
// Make sure the content-length header is set.
|
177 |
+
if (!$postBody || is_string($postBody)) {
|
178 |
+
$postsLength = strlen($postBody);
|
179 |
+
$request->setRequestHeaders(array('content-length' => $postsLength));
|
180 |
+
}
|
181 |
+
|
182 |
+
return $request;
|
183 |
+
}
|
184 |
+
|
185 |
+
/**
|
186 |
+
* Check if an already cached request must be revalidated, and if so update
|
187 |
+
* the request with the correct ETag headers.
|
188 |
+
* @param Google_Http_Request $cached A previously cached response.
|
189 |
+
* @param Google_Http_Request $request The outbound request.
|
190 |
+
* return bool If the cached object needs to be revalidated, false if it is
|
191 |
+
* still current and can be re-used.
|
192 |
+
*/
|
193 |
+
protected function checkMustRevalidateCachedRequest($cached, $request)
|
194 |
+
{
|
195 |
+
if (Google_Http_CacheParser::mustRevalidate($cached)) {
|
196 |
+
$addHeaders = array();
|
197 |
+
if ($cached->getResponseHeader('etag')) {
|
198 |
+
// [13.3.4] If an entity tag has been provided by the origin server,
|
199 |
+
// we must use that entity tag in any cache-conditional request.
|
200 |
+
$addHeaders['If-None-Match'] = $cached->getResponseHeader('etag');
|
201 |
+
} elseif ($cached->getResponseHeader('date')) {
|
202 |
+
$addHeaders['If-Modified-Since'] = $cached->getResponseHeader('date');
|
203 |
+
}
|
204 |
+
|
205 |
+
$request->setRequestHeaders($addHeaders);
|
206 |
+
return true;
|
207 |
+
} else {
|
208 |
+
return false;
|
209 |
+
}
|
210 |
+
}
|
211 |
+
|
212 |
+
/**
|
213 |
+
* Update a cached request, using the headers from the last response.
|
214 |
+
* @param Google_HttpRequest $cached A previously cached response.
|
215 |
+
* @param mixed Associative array of response headers from the last request.
|
216 |
+
*/
|
217 |
+
protected function updateCachedRequest($cached, $responseHeaders)
|
218 |
+
{
|
219 |
+
if (isset($responseHeaders['connection'])) {
|
220 |
+
$hopByHop = array_merge(
|
221 |
+
self::$HOP_BY_HOP,
|
222 |
+
explode(
|
223 |
+
',',
|
224 |
+
$responseHeaders['connection']
|
225 |
+
)
|
226 |
+
);
|
227 |
+
|
228 |
+
$endToEnd = array();
|
229 |
+
foreach ($hopByHop as $key) {
|
230 |
+
if (isset($responseHeaders[$key])) {
|
231 |
+
$endToEnd[$key] = $responseHeaders[$key];
|
232 |
+
}
|
233 |
+
}
|
234 |
+
$cached->setResponseHeaders($endToEnd);
|
235 |
+
}
|
236 |
+
}
|
237 |
+
|
238 |
+
/**
|
239 |
+
* Used by the IO lib and also the batch processing.
|
240 |
+
*
|
241 |
+
* @param $respData
|
242 |
+
* @param $headerSize
|
243 |
+
* @return array
|
244 |
+
*/
|
245 |
+
public function parseHttpResponse($respData, $headerSize)
|
246 |
+
{
|
247 |
+
// only strip this header if the sub-class needs this quirk
|
248 |
+
if ($this->needsQuirk() && stripos($respData, self::CONNECTION_ESTABLISHED) !== false) {
|
249 |
+
$respData = str_ireplace(self::CONNECTION_ESTABLISHED, '', $respData);
|
250 |
+
$headerSize -= strlen(self::CONNECTION_ESTABLISHED);
|
251 |
+
}
|
252 |
+
|
253 |
+
if ($headerSize) {
|
254 |
+
$responseBody = substr($respData, $headerSize);
|
255 |
+
$responseHeaders = substr($respData, 0, $headerSize);
|
256 |
+
} else {
|
257 |
+
list($responseHeaders, $responseBody) = explode("\r\n\r\n", $respData, 2);
|
258 |
+
}
|
259 |
+
|
260 |
+
$responseHeaders = $this->getHttpResponseHeaders($responseHeaders);
|
261 |
+
return array($responseHeaders, $responseBody);
|
262 |
+
}
|
263 |
+
|
264 |
+
/**
|
265 |
+
* Parse out headers from raw headers
|
266 |
+
* @param rawHeaders array or string
|
267 |
+
* @return array
|
268 |
+
*/
|
269 |
+
public function getHttpResponseHeaders($rawHeaders)
|
270 |
+
{
|
271 |
+
if (is_array($rawHeaders)) {
|
272 |
+
return $this->parseArrayHeaders($rawHeaders);
|
273 |
+
} else {
|
274 |
+
return $this->parseStringHeaders($rawHeaders);
|
275 |
+
}
|
276 |
+
}
|
277 |
+
|
278 |
+
private function parseStringHeaders($rawHeaders)
|
279 |
+
{
|
280 |
+
$headers = array();
|
281 |
+
$responseHeaderLines = explode("\r\n", $rawHeaders);
|
282 |
+
foreach ($responseHeaderLines as $headerLine) {
|
283 |
+
if ($headerLine && strpos($headerLine, ':') !== false) {
|
284 |
+
list($header, $value) = explode(': ', $headerLine, 2);
|
285 |
+
$header = strtolower($header);
|
286 |
+
if (isset($responseHeaders[$header])) {
|
287 |
+
$headers[$header] .= "\n" . $value;
|
288 |
+
} else {
|
289 |
+
$headers[$header] = $value;
|
290 |
+
}
|
291 |
+
}
|
292 |
+
}
|
293 |
+
return $headers;
|
294 |
+
}
|
295 |
+
|
296 |
+
private function parseArrayHeaders($rawHeaders)
|
297 |
+
{
|
298 |
+
$header_count = count($rawHeaders);
|
299 |
+
$headers = array();
|
300 |
+
|
301 |
+
for ($i = 0; $i < $header_count; $i++) {
|
302 |
+
$header = $rawHeaders[$i];
|
303 |
+
// Times will have colons in - so we just want the first match.
|
304 |
+
$header_parts = explode(': ', $header, 2);
|
305 |
+
if (count($header_parts) == 2) {
|
306 |
+
$headers[$header_parts[0]] = $header_parts[1];
|
307 |
+
}
|
308 |
+
}
|
309 |
+
|
310 |
+
return $headers;
|
311 |
+
}
|
312 |
+
}
|
lib/Google/IO/Curl.php
ADDED
@@ -0,0 +1,135 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* Copyright 2014 Google Inc.
|
4 |
+
*
|
5 |
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
6 |
+
* you may not use this file except in compliance with the License.
|
7 |
+
* You may obtain 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,
|
13 |
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14 |
+
* See the License for the specific language governing permissions and
|
15 |
+
* limitations under the License.
|
16 |
+
*/
|
17 |
+
|
18 |
+
/**
|
19 |
+
* Curl based implementation of Google_IO.
|
20 |
+
*
|
21 |
+
* @author Stuart Langley <slangley@google.com>
|
22 |
+
*/
|
23 |
+
|
24 |
+
require_once $GLOBALS['iwp_mmb_plugin_dir'].'/lib/Google/IO/Abstract.php';
|
25 |
+
|
26 |
+
class Google_IO_Curl extends Google_IO_Abstract
|
27 |
+
{
|
28 |
+
// hex for version 7.31.0
|
29 |
+
const NO_QUIRK_VERSION = 0x071F00;
|
30 |
+
|
31 |
+
private $options = array();
|
32 |
+
/**
|
33 |
+
* Execute an HTTP Request
|
34 |
+
*
|
35 |
+
* @param Google_HttpRequest $request the http request to be executed
|
36 |
+
* @return Google_HttpRequest http request with the response http code,
|
37 |
+
* response headers and response body filled in
|
38 |
+
* @throws Google_IO_Exception on curl or IO error
|
39 |
+
*/
|
40 |
+
public function executeRequest(Google_Http_Request $request)
|
41 |
+
{
|
42 |
+
$curl = curl_init();
|
43 |
+
|
44 |
+
if ($request->getPostBody()) {
|
45 |
+
curl_setopt($curl, CURLOPT_POSTFIELDS, $request->getPostBody());
|
46 |
+
}
|
47 |
+
|
48 |
+
$requestHeaders = $request->getRequestHeaders();
|
49 |
+
if ($requestHeaders && is_array($requestHeaders)) {
|
50 |
+
$curlHeaders = array();
|
51 |
+
foreach ($requestHeaders as $k => $v) {
|
52 |
+
$curlHeaders[] = "$k: $v";
|
53 |
+
}
|
54 |
+
curl_setopt($curl, CURLOPT_HTTPHEADER, $curlHeaders);
|
55 |
+
}
|
56 |
+
|
57 |
+
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $request->getRequestMethod());
|
58 |
+
curl_setopt($curl, CURLOPT_USERAGENT, $request->getUserAgent());
|
59 |
+
|
60 |
+
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, false);
|
61 |
+
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true);
|
62 |
+
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
|
63 |
+
curl_setopt($curl, CURLOPT_HEADER, true);
|
64 |
+
|
65 |
+
curl_setopt($curl, CURLOPT_URL, $request->getUrl());
|
66 |
+
|
67 |
+
if ($request->canGzip()) {
|
68 |
+
curl_setopt($curl, CURLOPT_ENCODING, 'gzip,deflate');
|
69 |
+
}
|
70 |
+
|
71 |
+
foreach ($this->options as $key => $var) {
|
72 |
+
curl_setopt($curl, $key, $var);
|
73 |
+
}
|
74 |
+
|
75 |
+
if (!isset($this->options[CURLOPT_CAINFO])) {
|
76 |
+
curl_setopt($curl, CURLOPT_CAINFO, dirname(__FILE__) . '/cacerts.pem');
|
77 |
+
}
|
78 |
+
|
79 |
+
$response = curl_exec($curl);
|
80 |
+
if ($response === false) {
|
81 |
+
throw new Google_IO_Exception(curl_error($curl));
|
82 |
+
}
|
83 |
+
$headerSize = curl_getinfo($curl, CURLINFO_HEADER_SIZE);
|
84 |
+
|
85 |
+
$responseBody = substr($response, $headerSize);
|
86 |
+
$responseHeaderString = substr($response, 0, $headerSize);
|
87 |
+
$responseHeaders = $this->getHttpResponseHeaders($responseHeaderString);
|
88 |
+
$responseCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
|
89 |
+
|
90 |
+
return array($responseBody, $responseHeaders, $responseCode);
|
91 |
+
}
|
92 |
+
|
93 |
+
/**
|
94 |
+
* Set options that update the transport implementation's behavior.
|
95 |
+
* @param $options
|
96 |
+
*/
|
97 |
+
public function setOptions($options)
|
98 |
+
{
|
99 |
+
$this->options = $options + $this->options;
|
100 |
+
}
|
101 |
+
|
102 |
+
/**
|
103 |
+
* Set the maximum request time in seconds.
|
104 |
+
* @param $timeout in seconds
|
105 |
+
*/
|
106 |
+
public function setTimeout($timeout)
|
107 |
+
{
|
108 |
+
// Since this timeout is really for putting a bound on the time
|
109 |
+
// we'll set them both to the same. If you need to specify a longer
|
110 |
+
// CURLOPT_TIMEOUT, or a tigher CONNECTTIMEOUT, the best thing to
|
111 |
+
// do is use the setOptions method for the values individually.
|
112 |
+
$this->options[CURLOPT_CONNECTTIMEOUT] = $timeout;
|
113 |
+
$this->options[CURLOPT_TIMEOUT] = $timeout;
|
114 |
+
}
|
115 |
+
|
116 |
+
/**
|
117 |
+
* Get the maximum request time in seconds.
|
118 |
+
* @return timeout in seconds
|
119 |
+
*/
|
120 |
+
public function getTimeout()
|
121 |
+
{
|
122 |
+
return $this->options[CURLOPT_TIMEOUT];
|
123 |
+
}
|
124 |
+
|
125 |
+
/**
|
126 |
+
* Determine whether "Connection Established" quirk is needed
|
127 |
+
* @return boolean
|
128 |
+
*/
|
129 |
+
protected function needsQuirk()
|
130 |
+
{
|
131 |
+
$ver = curl_version();
|
132 |
+
$versionNum = $ver['version_number'];
|
133 |
+
return $versionNum < Google_IO_Curl::NO_QUIRK_VERSION;
|
134 |
+
}
|
135 |
+
}
|
lib/Google/IO/Exception.php
ADDED
@@ -0,0 +1,22 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* Copyright 2013 Google Inc.
|
4 |
+
*
|
5 |
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
6 |
+
* you may not use this file except in compliance with the License.
|
7 |
+
* You may obtain 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,
|
13 |
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14 |
+
* See the License for the specific language governing permissions and
|
15 |
+
* limitations under the License.
|
16 |
+
*/
|
17 |
+
|
18 |
+
require_once $GLOBALS['iwp_mmb_plugin_dir'].'/lib/Google/Exception.php';
|
19 |
+
|
20 |
+
class Google_IO_Exception extends Google_Exception
|
21 |
+
{
|
22 |
+
}
|
lib/Google/IO/Stream.php
ADDED
@@ -0,0 +1,182 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* Copyright 2013 Google Inc.
|
4 |
+
*
|
5 |
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
6 |
+
* you may not use this file except in compliance with the License.
|
7 |
+
* You may obtain 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,
|
13 |
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14 |
+
* See the License for the specific language governing permissions and
|
15 |
+
* limitations under the License.
|
16 |
+
*/
|
17 |
+
|
18 |
+
/**
|
19 |
+
* Http Streams based implementation of Google_IO.
|
20 |
+
*
|
21 |
+
* @author Stuart Langley <slangley@google.com>
|
22 |
+
*/
|
23 |
+
|
24 |
+
require_once $GLOBALS['iwp_mmb_plugin_dir'].'/lib/Google/IO/Abstract.php';
|
25 |
+
|
26 |
+
class Google_IO_Stream extends Google_IO_Abstract
|
27 |
+
{
|
28 |
+
const TIMEOUT = "timeout";
|
29 |
+
const ZLIB = "compress.zlib://";
|
30 |
+
private $options = array();
|
31 |
+
|
32 |
+
private static $DEFAULT_HTTP_CONTEXT = array(
|
33 |
+
"follow_location" => 0,
|
34 |
+
"ignore_errors" => 1,
|
35 |
+
);
|
36 |
+
|
37 |
+
private static $DEFAULT_SSL_CONTEXT = array(
|
38 |
+
"verify_peer" => true,
|
39 |
+
);
|
40 |
+
|
41 |
+
/**
|
42 |
+
* Execute an HTTP Request
|
43 |
+
*
|
44 |
+
* @param Google_HttpRequest $request the http request to be executed
|
45 |
+
* @return Google_HttpRequest http request with the response http code,
|
46 |
+
* response headers and response body filled in
|
47 |
+
* @throws Google_IO_Exception on curl or IO error
|
48 |
+
*/
|
49 |
+
public function executeRequest(Google_Http_Request $request)
|
50 |
+
{
|
51 |
+
$default_options = stream_context_get_options(stream_context_get_default());
|
52 |
+
|
53 |
+
$requestHttpContext = array_key_exists('http', $default_options) ?
|
54 |
+
$default_options['http'] : array();
|
55 |
+
|
56 |
+
if ($request->getPostBody()) {
|
57 |
+
$requestHttpContext["content"] = $request->getPostBody();
|
58 |
+
}
|
59 |
+
|
60 |
+
$requestHeaders = $request->getRequestHeaders();
|
61 |
+
if ($requestHeaders && is_array($requestHeaders)) {
|
62 |
+
$headers = "";
|
63 |
+
foreach ($requestHeaders as $k => $v) {
|
64 |
+
$headers .= "$k: $v\r\n";
|
65 |
+
}
|
66 |
+
$requestHttpContext["header"] = $headers;
|
67 |
+
}
|
68 |
+
|
69 |
+
$requestHttpContext["method"] = $request->getRequestMethod();
|
70 |
+
$requestHttpContext["user_agent"] = $request->getUserAgent();
|
71 |
+
|
72 |
+
$requestSslContext = array_key_exists('ssl', $default_options) ?
|
73 |
+
$default_options['ssl'] : array();
|
74 |
+
|
75 |
+
if (!array_key_exists("cafile", $requestSslContext)) {
|
76 |
+
$requestSslContext["cafile"] = dirname(__FILE__) . '/cacerts.pem';
|
77 |
+
}
|
78 |
+
|
79 |
+
$options = array(
|
80 |
+
"http" => array_merge(
|
81 |
+
self::$DEFAULT_HTTP_CONTEXT,
|
82 |
+
$requestHttpContext
|
83 |
+
),
|
84 |
+
"ssl" => array_merge(
|
85 |
+
self::$DEFAULT_SSL_CONTEXT,
|
86 |
+
$requestSslContext
|
87 |
+
)
|
88 |
+
);
|
89 |
+
|
90 |
+
$context = stream_context_create($options);
|
91 |
+
|
92 |
+
$url = $request->getUrl();
|
93 |
+
|
94 |
+
if ($request->canGzip()) {
|
95 |
+
$url = self::ZLIB . $url;
|
96 |
+
}
|
97 |
+
|
98 |
+
// Not entirely happy about this, but supressing the warning from the
|
99 |
+
// fopen seems like the best situation here - we can't do anything
|
100 |
+
// useful with it, and failure to connect is a legitimate run
|
101 |
+
// time situation.
|
102 |
+
@$fh = fopen($url, 'r', false, $context);
|
103 |
+
|
104 |
+
$response_data = false;
|
105 |
+
$respHttpCode = self::UNKNOWN_CODE;
|
106 |
+
if ($fh) {
|
107 |
+
if (isset($this->options[self::TIMEOUT])) {
|
108 |
+
stream_set_timeout($fh, $this->options[self::TIMEOUT]);
|
109 |
+
}
|
110 |
+
|
111 |
+
$response_data = stream_get_contents($fh);
|
112 |
+
fclose($fh);
|
113 |
+
|
114 |
+
$respHttpCode = $this->getHttpResponseCode($http_response_header);
|
115 |
+
}
|
116 |
+
|
117 |
+
if (false === $response_data) {
|
118 |
+
throw new Google_IO_Exception(
|
119 |
+
sprintf(
|
120 |
+
"HTTP Error: Unable to connect: '%s'",
|
121 |
+
$respHttpCode
|
122 |
+
),
|
123 |
+
$respHttpCode
|
124 |
+
);
|
125 |
+
}
|
126 |
+
|
127 |
+
$responseHeaders = $this->getHttpResponseHeaders($http_response_header);
|
128 |
+
|
129 |
+
return array($response_data, $responseHeaders, $respHttpCode);
|
130 |
+
}
|
131 |
+
|
132 |
+
/**
|
133 |
+
* Set options that update the transport implementation's behavior.
|
134 |
+
* @param $options
|
135 |
+
*/
|
136 |
+
public function setOptions($options)
|
137 |
+
{
|
138 |
+
$this->options = $options + $this->options;
|
139 |
+
}
|
140 |
+
|
141 |
+
/**
|
142 |
+
* Set the maximum request time in seconds.
|
143 |
+
* @param $timeout in seconds
|
144 |
+
*/
|
145 |
+
public function setTimeout($timeout)
|
146 |
+
{
|
147 |
+
$this->options[self::TIMEOUT] = $timeout;
|
148 |
+
}
|
149 |
+
|
150 |
+
/**
|
151 |
+
* Get the maximum request time in seconds.
|
152 |
+
* @return timeout in seconds
|
153 |
+
*/
|
154 |
+
public function getTimeout()
|
155 |
+
{
|
156 |
+
return $this->options[self::TIMEOUT];
|
157 |
+
}
|
158 |
+
|
159 |
+
/**
|
160 |
+
* Determine whether "Connection Established" quirk is needed
|
161 |
+
* @return boolean
|
162 |
+
*/
|
163 |
+
protected function needsQuirk()
|
164 |
+
{
|
165 |
+
// Stream needs the special quirk
|
166 |
+
return true;
|
167 |
+
}
|
168 |
+
|
169 |
+
protected function getHttpResponseCode($response_headers)
|
170 |
+
{
|
171 |
+
$header_count = count($response_headers);
|
172 |
+
|
173 |
+
for ($i = 0; $i < $header_count; $i++) {
|
174 |
+
$header = $response_headers[$i];
|
175 |
+
if (strncasecmp("HTTP", $header, strlen("HTTP")) == 0) {
|
176 |
+
$response = explode(' ', $header);
|
177 |
+
return $response[1];
|
178 |
+
}
|
179 |
+
}
|
180 |
+
return self::UNKNOWN_CODE;
|
181 |
+
}
|
182 |
+
}
|
lib/Google/IO/cacerts.pem
ADDED
@@ -0,0 +1,2183 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# Issuer: CN=GTE CyberTrust Global Root O=GTE Corporation OU=GTE CyberTrust Solutions, Inc.
|
2 |
+
# Subject: CN=GTE CyberTrust Global Root O=GTE Corporation OU=GTE CyberTrust Solutions, Inc.
|
3 |
+
# Label: "GTE CyberTrust Global Root"
|
4 |
+
# Serial: 421
|
5 |
+
# MD5 Fingerprint: ca:3d:d3:68:f1:03:5c:d0:32:fa:b8:2b:59:e8:5a:db
|
6 |
+
# SHA1 Fingerprint: 97:81:79:50:d8:1c:96:70:cc:34:d8:09:cf:79:44:31:36:7e:f4:74
|
7 |
+
# SHA256 Fingerprint: a5:31:25:18:8d:21:10:aa:96:4b:02:c7:b7:c6:da:32:03:17:08:94:e5:fb:71:ff:fb:66:67:d5:e6:81:0a:36
|
8 |
+
-----BEGIN CERTIFICATE-----
|
9 |
+
MIICWjCCAcMCAgGlMA0GCSqGSIb3DQEBBAUAMHUxCzAJBgNVBAYTAlVTMRgwFgYD
|
10 |
+
VQQKEw9HVEUgQ29ycG9yYXRpb24xJzAlBgNVBAsTHkdURSBDeWJlclRydXN0IFNv
|
11 |
+
bHV0aW9ucywgSW5jLjEjMCEGA1UEAxMaR1RFIEN5YmVyVHJ1c3QgR2xvYmFsIFJv
|
12 |
+
b3QwHhcNOTgwODEzMDAyOTAwWhcNMTgwODEzMjM1OTAwWjB1MQswCQYDVQQGEwJV
|
13 |
+
UzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQLEx5HVEUgQ3liZXJU
|
14 |
+
cnVzdCBTb2x1dGlvbnMsIEluYy4xIzAhBgNVBAMTGkdURSBDeWJlclRydXN0IEds
|
15 |
+
b2JhbCBSb290MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCVD6C28FCc6HrH
|
16 |
+
iM3dFw4usJTQGz0O9pTAipTHBsiQl8i4ZBp6fmw8U+E3KHNgf7KXUwefU/ltWJTS
|
17 |
+
r41tiGeA5u2ylc9yMcqlHHK6XALnZELn+aks1joNrI1CqiQBOeacPwGFVw1Yh0X4
|
18 |
+
04Wqk2kmhXBIgD8SFcd5tB8FLztimQIDAQABMA0GCSqGSIb3DQEBBAUAA4GBAG3r
|
19 |
+
GwnpXtlR22ciYaQqPEh346B8pt5zohQDhT37qw4wxYMWM4ETCJ57NE7fQMh017l9
|
20 |
+
3PR2VX2bY1QY6fDq81yx2YtCHrnAlU66+tXifPVoYb+O7AWXX1uw16OFNMQkpw0P
|
21 |
+
lZPvy5TYnh+dXIVtx6quTx8itc2VrbqnzPmrC3p/
|
22 |
+
-----END CERTIFICATE-----
|
23 |
+
|
24 |
+
# Issuer: CN=Thawte Server CA O=Thawte Consulting cc OU=Certification Services Division
|
25 |
+
# Subject: CN=Thawte Server CA O=Thawte Consulting cc OU=Certification Services Division
|
26 |
+
# Label: "Thawte Server CA"
|
27 |
+
# Serial: 1
|
28 |
+
# MD5 Fingerprint: c5:70:c4:a2:ed:53:78:0c:c8:10:53:81:64:cb:d0:1d
|
29 |
+
# SHA1 Fingerprint: 23:e5:94:94:51:95:f2:41:48:03:b4:d5:64:d2:a3:a3:f5:d8:8b:8c
|
30 |
+
# SHA256 Fingerprint: b4:41:0b:73:e2:e6:ea:ca:47:fb:c4:2f:8f:a4:01:8a:f4:38:1d:c5:4c:fa:a8:44:50:46:1e:ed:09:45:4d:e9
|
31 |
+
-----BEGIN CERTIFICATE-----
|
32 |
+
MIIDEzCCAnygAwIBAgIBATANBgkqhkiG9w0BAQQFADCBxDELMAkGA1UEBhMCWkEx
|
33 |
+
FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYD
|
34 |
+
VQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlv
|
35 |
+
biBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcGA1UEAxMQVGhhd3RlIFNlcnZlciBDQTEm
|
36 |
+
MCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5jb20wHhcNOTYwODAx
|
37 |
+
MDAwMDAwWhcNMjAxMjMxMjM1OTU5WjCBxDELMAkGA1UEBhMCWkExFTATBgNVBAgT
|
38 |
+
DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3
|
39 |
+
dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNl
|
40 |
+
cyBEaXZpc2lvbjEZMBcGA1UEAxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3
|
41 |
+
DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQAD
|
42 |
+
gY0AMIGJAoGBANOkUG7I/1Zr5s9dtuoMaHVHoqrC2oQl/Kj0R1HahbUgdJSGHg91
|
43 |
+
yekIYfUGbTBuFRkC6VLAYttNmZ7iagxEOM3+vuNkCXDF/rFrKbYvScg71CcEJRCX
|
44 |
+
L+eQbcAoQpnXTEPew/UhbVSfXcNY4cDk2VuwuNy0e982OsK1ZiIS1ocNAgMBAAGj
|
45 |
+
EzARMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAB/pMaVz7lcxG
|
46 |
+
7oWDTSEwjsrZqG9JGubaUeNgcGyEYRGhGshIPllDfU+VPaGLtwtimHp1it2ITk6e
|
47 |
+
QNuozDJ0uW8NxuOzRAvZim+aKZuZGCg70eNAKJpaPNW15yAbi8qkq43pUdniTCxZ
|
48 |
+
qdq5snUb9kLy78fyGPmJvKP/iiMucEc=
|
49 |
+
-----END CERTIFICATE-----
|
50 |
+
|
51 |
+
# Issuer: CN=Thawte Premium Server CA O=Thawte Consulting cc OU=Certification Services Division
|
52 |
+
# Subject: CN=Thawte Premium Server CA O=Thawte Consulting cc OU=Certification Services Division
|
53 |
+
# Label: "Thawte Premium Server CA"
|
54 |
+
# Serial: 1
|
55 |
+
# MD5 Fingerprint: 06:9f:69:79:16:66:90:02:1b:8c:8c:a2:c3:07:6f:3a
|
56 |
+
# SHA1 Fingerprint: 62:7f:8d:78:27:65:63:99:d2:7d:7f:90:44:c9:fe:b3:f3:3e:fa:9a
|
57 |
+
# SHA256 Fingerprint: ab:70:36:36:5c:71:54:aa:29:c2:c2:9f:5d:41:91:16:3b:16:2a:22:25:01:13:57:d5:6d:07:ff:a7:bc:1f:72
|
58 |
+
-----BEGIN CERTIFICATE-----
|
59 |
+
MIIDJzCCApCgAwIBAgIBATANBgkqhkiG9w0BAQQFADCBzjELMAkGA1UEBhMCWkEx
|
60 |
+
FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYD
|
61 |
+
VQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlv
|
62 |
+
biBTZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UEAxMYVGhhd3RlIFByZW1pdW0gU2Vy
|
63 |
+
dmVyIENBMSgwJgYJKoZIhvcNAQkBFhlwcmVtaXVtLXNlcnZlckB0aGF3dGUuY29t
|
64 |
+
MB4XDTk2MDgwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgc4xCzAJBgNVBAYTAlpB
|
65 |
+
MRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsG
|
66 |
+
A1UEChMUVGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRp
|
67 |
+
b24gU2VydmljZXMgRGl2aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQcmVtaXVtIFNl
|
68 |
+
cnZlciBDQTEoMCYGCSqGSIb3DQEJARYZcHJlbWl1bS1zZXJ2ZXJAdGhhd3RlLmNv
|
69 |
+
bTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0jY2aovXwlue2oFBYo847kkE
|
70 |
+
VdbQ7xwblRZH7xhINTpS9CtqBo87L+pW46+GjZ4X9560ZXUCTe/LCaIhUdib0GfQ
|
71 |
+
ug2SBhRz1JPLlyoAnFxODLz6FVL88kRu2hFKbgifLy3j+ao6hnO2RlNYyIkFvYMR
|
72 |
+
uHM/qgeN9EJN50CdHDcCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG
|
73 |
+
9w0BAQQFAAOBgQAmSCwWwlj66BZ0DKqqX1Q/8tfJeGBeXm43YyJ3Nn6yF8Q0ufUI
|
74 |
+
hfzJATj/Tb7yFkJD57taRvvBxhEf8UqwKEbJw8RCfbz6q1lu1bdRiBHjpIUZa4JM
|
75 |
+
pAwSremkrj/xw0llmozFyD4lt5SZu5IycQfwhl7tUCemDaYj+bvLpgcUQg==
|
76 |
+
-----END CERTIFICATE-----
|
77 |
+
|
78 |
+
# Issuer: O=Equifax OU=Equifax Secure Certificate Authority
|
79 |
+
# Subject: O=Equifax OU=Equifax Secure Certificate Authority
|
80 |
+
# Label: "Equifax Secure CA"
|
81 |
+
# Serial: 903804111
|
82 |
+
# MD5 Fingerprint: 67:cb:9d:c0:13:24:8a:82:9b:b2:17:1e:d1:1b:ec:d4
|
83 |
+
# SHA1 Fingerprint: d2:32:09:ad:23:d3:14:23:21:74:e4:0d:7f:9d:62:13:97:86:63:3a
|
84 |
+
# SHA256 Fingerprint: 08:29:7a:40:47:db:a2:36:80:c7:31:db:6e:31:76:53:ca:78:48:e1:be:bd:3a:0b:01:79:a7:07:f9:2c:f1:78
|
85 |
+
-----BEGIN CERTIFICATE-----
|
86 |
+
MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJV
|
87 |
+
UzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2Vy
|
88 |
+
dGlmaWNhdGUgQXV0aG9yaXR5MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1
|
89 |
+
MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoTB0VxdWlmYXgxLTArBgNVBAsTJEVx
|
90 |
+
dWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTCBnzANBgkqhkiG9w0B
|
91 |
+
AQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2RFGiYCh7+2gRvE4RiIcPRfM6f
|
92 |
+
BeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP/PvwDN1Dulsr4R+A
|
93 |
+
cJkVV5MW8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/FP3gx7kC
|
94 |
+
AwEAAaOCAQkwggEFMHAGA1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQ
|
95 |
+
MA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlm
|
96 |
+
aWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoGA1UdEAQTMBGBDzIwMTgw
|
97 |
+
ODIyMTY0MTUxWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvSspXXR9gj
|
98 |
+
IBBPM5iQn9QwHQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQF
|
99 |
+
MAMBAf8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUA
|
100 |
+
A4GBAFjOKer89961zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y
|
101 |
+
7qj/WsjTVbJmcVfewCHrPSqnI0kBBIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh
|
102 |
+
1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee9570+sB3c4
|
103 |
+
-----END CERTIFICATE-----
|
104 |
+
|
105 |
+
# Issuer: O=VeriSign, Inc. OU=Class 3 Public Primary Certification Authority
|
106 |
+
# Subject: O=VeriSign, Inc. OU=Class 3 Public Primary Certification Authority
|
107 |
+
# Label: "Verisign Class 3 Public Primary Certification Authority"
|
108 |
+
# Serial: 149843929435818692848040365716851702463
|
109 |
+
# MD5 Fingerprint: 10:fc:63:5d:f6:26:3e:0d:f3:25:be:5f:79:cd:67:67
|
110 |
+
# SHA1 Fingerprint: 74:2c:31:92:e6:07:e4:24:eb:45:49:54:2b:e1:bb:c5:3e:61:74:e2
|
111 |
+
# SHA256 Fingerprint: e7:68:56:34:ef:ac:f6:9a:ce:93:9a:6b:25:5b:7b:4f:ab:ef:42:93:5b:50:a2:65:ac:b5:cb:60:27:e4:4e:70
|
112 |
+
-----BEGIN CERTIFICATE-----
|
113 |
+
MIICPDCCAaUCEHC65B0Q2Sk0tjjKewPMur8wDQYJKoZIhvcNAQECBQAwXzELMAkG
|
114 |
+
A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz
|
115 |
+
cyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2
|
116 |
+
MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV
|
117 |
+
BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmlt
|
118 |
+
YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GN
|
119 |
+
ADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhE
|
120 |
+
BarsAx94f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/is
|
121 |
+
I19wKTakyYbnsZogy1Olhec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0G
|
122 |
+
CSqGSIb3DQEBAgUAA4GBALtMEivPLCYATxQT3ab7/AoRhIzzKBxnki98tsX63/Do
|
123 |
+
lbwdj2wsqFHMc9ikwFPwTtYmwHYBV4GSXiHx0bH/59AhWM1pF+NEHJwZRDmJXNyc
|
124 |
+
AA9WjQKZ7aKQRUzkuxCkPfAyAw7xzvjoyVGM5mKf5p/AfbdynMk2OmufTqj/ZA1k
|
125 |
+
-----END CERTIFICATE-----
|
126 |
+
|
127 |
+
# Issuer: O=VeriSign, Inc. OU=Class 3 Public Primary Certification Authority - G2/(c) 1998 VeriSign, Inc. - For authorized use only/VeriSign Trust Network
|
128 |
+
# Subject: O=VeriSign, Inc. OU=Class 3 Public Primary Certification Authority - G2/(c) 1998 VeriSign, Inc. - For authorized use only/VeriSign Trust Network
|
129 |
+
# Label: "Verisign Class 3 Public Primary Certification Authority - G2"
|
130 |
+
# Serial: 167285380242319648451154478808036881606
|
131 |
+
# MD5 Fingerprint: a2:33:9b:4c:74:78:73:d4:6c:e7:c1:f3:8d:cb:5c:e9
|
132 |
+
# SHA1 Fingerprint: 85:37:1c:a6:e5:50:14:3d:ce:28:03:47:1b:de:3a:09:e8:f8:77:0f
|
133 |
+
# SHA256 Fingerprint: 83:ce:3c:12:29:68:8a:59:3d:48:5f:81:97:3c:0f:91:95:43:1e:da:37:cc:5e:36:43:0e:79:c7:a8:88:63:8b
|
134 |
+
-----BEGIN CERTIFICATE-----
|
135 |
+
MIIDAjCCAmsCEH3Z/gfPqB63EHln+6eJNMYwDQYJKoZIhvcNAQEFBQAwgcExCzAJ
|
136 |
+
BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xh
|
137 |
+
c3MgMyBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcy
|
138 |
+
MTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3Jp
|
139 |
+
emVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMB4X
|
140 |
+
DTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVTMRcw
|
141 |
+
FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMg
|
142 |
+
UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEo
|
143 |
+
YykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5
|
144 |
+
MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEB
|
145 |
+
AQUAA4GNADCBiQKBgQDMXtERXVxp0KvTuWpMmR9ZmDCOFoUgRm1HP9SFIIThbbP4
|
146 |
+
pO0M8RcPO/mn+SXXwc+EY/J8Y8+iR/LGWzOOZEAEaMGAuWQcRXfH2G71lSk8UOg0
|
147 |
+
13gfqLptQ5GVj0VXXn7F+8qkBOvqlzdUMG+7AUcyM83cV5tkaWH4mx0ciU9cZwID
|
148 |
+
AQABMA0GCSqGSIb3DQEBBQUAA4GBAFFNzb5cy5gZnBWyATl4Lk0PZ3BwmcYQWpSk
|
149 |
+
U01UbSuvDV1Ai2TT1+7eVmGSX6bEHRBhNtMsJzzoKQm5EWR0zLVznxxIqbxhAe7i
|
150 |
+
F6YM40AIOw7n60RzKprxaZLvcRTDOaxxp5EJb+RxBrO6WVcmeQD2+A2iMzAo1KpY
|
151 |
+
oJ2daZH9
|
152 |
+
-----END CERTIFICATE-----
|
153 |
+
|
154 |
+
# Issuer: CN=GlobalSign Root CA O=GlobalSign nv-sa OU=Root CA
|
155 |
+
# Subject: CN=GlobalSign Root CA O=GlobalSign nv-sa OU=Root CA
|
156 |
+
# Label: "GlobalSign Root CA"
|
157 |
+
# Serial: 4835703278459707669005204
|
158 |
+
# MD5 Fingerprint: 3e:45:52:15:09:51:92:e1:b7:5d:37:9f:b1:87:29:8a
|
159 |
+
# SHA1 Fingerprint: b1:bc:96:8b:d4:f4:9d:62:2a:a8:9a:81:f2:15:01:52:a4:1d:82:9c
|
160 |
+
# SHA256 Fingerprint: eb:d4:10:40:e4:bb:3e:c7:42:c9:e3:81:d3:1e:f2:a4:1a:48:b6:68:5c:96:e7:ce:f3:c1:df:6c:d4:33:1c:99
|
161 |
+
-----BEGIN CERTIFICATE-----
|
162 |
+
MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkG
|
163 |
+
A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv
|
164 |
+
b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAw
|
165 |
+
MDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i
|
166 |
+
YWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYDVQQDExJHbG9iYWxT
|
167 |
+
aWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDaDuaZ
|
168 |
+
jc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavp
|
169 |
+
xy0Sy6scTHAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp
|
170 |
+
1Wrjsok6Vjk4bwY8iGlbKk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdG
|
171 |
+
snUOhugZitVtbNV4FpWi6cgKOOvyJBNPc1STE4U6G7weNLWLBYy5d4ux2x8gkasJ
|
172 |
+
U26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrXgzT/LCrBbBlDSgeF59N8
|
173 |
+
9iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8E
|
174 |
+
BTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0B
|
175 |
+
AQUFAAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOz
|
176 |
+
yj1hTdNGCbM+w6DjY1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE
|
177 |
+
38NflNUVyRRBnMRddWQVDf9VMOyGj/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymP
|
178 |
+
AbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhHhm4qxFYxldBniYUr+WymXUad
|
179 |
+
DKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveCX4XSQRjbgbME
|
180 |
+
HMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A==
|
181 |
+
-----END CERTIFICATE-----
|
182 |
+
|
183 |
+
# Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R2
|
184 |
+
# Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R2
|
185 |
+
# Label: "GlobalSign Root CA - R2"
|
186 |
+
# Serial: 4835703278459682885658125
|
187 |
+
# MD5 Fingerprint: 94:14:77:7e:3e:5e:fd:8f:30:bd:41:b0:cf:e7:d0:30
|
188 |
+
# SHA1 Fingerprint: 75:e0:ab:b6:13:85:12:27:1c:04:f8:5f:dd:de:38:e4:b7:24:2e:fe
|
189 |
+
# SHA256 Fingerprint: ca:42:dd:41:74:5f:d0:b8:1e:b9:02:36:2c:f9:d8:bf:71:9d:a1:bd:1b:1e:fc:94:6f:5b:4c:99:f4:2c:1b:9e
|
190 |
+
-----BEGIN CERTIFICATE-----
|
191 |
+
MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4G
|
192 |
+
A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNp
|
193 |
+
Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1
|
194 |
+
MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMjETMBEG
|
195 |
+
A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI
|
196 |
+
hvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6ErPL
|
197 |
+
v4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8
|
198 |
+
eoLrvozps6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklq
|
199 |
+
tTleiDTsvHgMCJiEbKjNS7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzd
|
200 |
+
C9XZzPnqJworc5HGnRusyMvo4KD0L5CLTfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pa
|
201 |
+
zq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6CygPCm48CAwEAAaOBnDCB
|
202 |
+
mTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUm+IH
|
203 |
+
V2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5n
|
204 |
+
bG9iYWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG
|
205 |
+
3lm0mi3f3BmGLjANBgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4Gs
|
206 |
+
J0/WwbgcQ3izDJr86iw8bmEbTUsp9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO
|
207 |
+
291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu01yiPqFbQfXf5WRDLenVOavS
|
208 |
+
ot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG79G+dwfCMNYxd
|
209 |
+
AfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7
|
210 |
+
TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg==
|
211 |
+
-----END CERTIFICATE-----
|
212 |
+
|
213 |
+
# Issuer: CN=http://www.valicert.com/ O=ValiCert, Inc. OU=ValiCert Class 1 Policy Validation Authority
|
214 |
+
# Subject: CN=http://www.valicert.com/ O=ValiCert, Inc. OU=ValiCert Class 1 Policy Validation Authority
|
215 |
+
# Label: "ValiCert Class 1 VA"
|
216 |
+
# Serial: 1
|
217 |
+
# MD5 Fingerprint: 65:58:ab:15:ad:57:6c:1e:a8:a7:b5:69:ac:bf:ff:eb
|
218 |
+
# SHA1 Fingerprint: e5:df:74:3c:b6:01:c4:9b:98:43:dc:ab:8c:e8:6a:81:10:9f:e4:8e
|
219 |
+
# SHA256 Fingerprint: f4:c1:49:55:1a:30:13:a3:5b:c7:bf:fe:17:a7:f3:44:9b:c1:ab:5b:5a:0a:e7:4b:06:c2:3b:90:00:4c:01:04
|
220 |
+
-----BEGIN CERTIFICATE-----
|
221 |
+
MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0
|
222 |
+
IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz
|
223 |
+
BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDEgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y
|
224 |
+
aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG
|
225 |
+
9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNTIyMjM0OFoXDTE5MDYy
|
226 |
+
NTIyMjM0OFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y
|
227 |
+
azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
|
228 |
+
YXNzIDEgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw
|
229 |
+
Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl
|
230 |
+
cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDYWYJ6ibiWuqYvaG9Y
|
231 |
+
LqdUHAZu9OqNSLwxlBfw8068srg1knaw0KWlAdcAAxIiGQj4/xEjm84H9b9pGib+
|
232 |
+
TunRf50sQB1ZaG6m+FiwnRqP0z/x3BkGgagO4DrdyFNFCQbmD3DD+kCmDuJWBQ8Y
|
233 |
+
TfwggtFzVXSNdnKgHZ0dwN0/cQIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFBoPUn0
|
234 |
+
LBwGlN+VYH+Wexf+T3GtZMjdd9LvWVXoP+iOBSoh8gfStadS/pyxtuJbdxdA6nLW
|
235 |
+
I8sogTLDAHkY7FkXicnGah5xyf23dKUlRWnFSKsZ4UWKJWsZ7uW7EvV/96aNUcPw
|
236 |
+
nXS3qT6gpf+2SQMT2iLM7XGCK5nPOrf1LXLI
|
237 |
+
-----END CERTIFICATE-----
|
238 |
+
|
239 |
+
# Issuer: CN=http://www.valicert.com/ O=ValiCert, Inc. OU=ValiCert Class 2 Policy Validation Authority
|
240 |
+
# Subject: CN=http://www.valicert.com/ O=ValiCert, Inc. OU=ValiCert Class 2 Policy Validation Authority
|
241 |
+
# Label: "ValiCert Class 2 VA"
|
242 |
+
# Serial: 1
|
243 |
+
# MD5 Fingerprint: a9:23:75:9b:ba:49:36:6e:31:c2:db:f2:e7:66:ba:87
|
244 |
+
# SHA1 Fingerprint: 31:7a:2a:d0:7f:2b:33:5e:f5:a1:c3:4e:4b:57:e8:b7:d8:f1:fc:a6
|
245 |
+
# SHA256 Fingerprint: 58:d0:17:27:9c:d4:dc:63:ab:dd:b1:96:a6:c9:90:6c:30:c4:e0:87:83:ea:e8:c1:60:99:54:d6:93:55:59:6b
|
246 |
+
-----BEGIN CERTIFICATE-----
|
247 |
+
MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0
|
248 |
+
IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz
|
249 |
+
BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y
|
250 |
+
aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG
|
251 |
+
9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAwMTk1NFoXDTE5MDYy
|
252 |
+
NjAwMTk1NFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y
|
253 |
+
azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
|
254 |
+
YXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw
|
255 |
+
Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl
|
256 |
+
cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDOOnHK5avIWZJV16vY
|
257 |
+
dA757tn2VUdZZUcOBVXc65g2PFxTXdMwzzjsvUGJ7SVCCSRrCl6zfN1SLUzm1NZ9
|
258 |
+
WlmpZdRJEy0kTRxQb7XBhVQ7/nHk01xC+YDgkRoKWzk2Z/M/VXwbP7RfZHM047QS
|
259 |
+
v4dk+NoS/zcnwbNDu+97bi5p9wIDAQABMA0GCSqGSIb3DQEBBQUAA4GBADt/UG9v
|
260 |
+
UJSZSWI4OB9L+KXIPqeCgfYrx+jFzug6EILLGACOTb2oWH+heQC1u+mNr0HZDzTu
|
261 |
+
IYEZoDJJKPTEjlbVUjP9UNV+mWwD5MlM/Mtsq2azSiGM5bUMMj4QssxsodyamEwC
|
262 |
+
W/POuZ6lcg5Ktz885hZo+L7tdEy8W9ViH0Pd
|
263 |
+
-----END CERTIFICATE-----
|
264 |
+
|
265 |
+
# Issuer: CN=http://www.valicert.com/ O=ValiCert, Inc. OU=ValiCert Class 3 Policy Validation Authority
|
266 |
+
# Subject: CN=http://www.valicert.com/ O=ValiCert, Inc. OU=ValiCert Class 3 Policy Validation Authority
|
267 |
+
# Label: "RSA Root Certificate 1"
|
268 |
+
# Serial: 1
|
269 |
+
# MD5 Fingerprint: a2:6f:53:b7:ee:40:db:4a:68:e7:fa:18:d9:10:4b:72
|
270 |
+
# SHA1 Fingerprint: 69:bd:8c:f4:9c:d3:00:fb:59:2e:17:93:ca:55:6a:f3:ec:aa:35:fb
|
271 |
+
# SHA256 Fingerprint: bc:23:f9:8a:31:3c:b9:2d:e3:bb:fc:3a:5a:9f:44:61:ac:39:49:4c:4a:e1:5a:9e:9d:f1:31:e9:9b:73:01:9a
|
272 |
+
-----BEGIN CERTIFICATE-----
|
273 |
+
MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0
|
274 |
+
IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz
|
275 |
+
BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDMgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y
|
276 |
+
aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG
|
277 |
+
9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAwMjIzM1oXDTE5MDYy
|
278 |
+
NjAwMjIzM1owgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y
|
279 |
+
azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
|
280 |
+
YXNzIDMgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw
|
281 |
+
Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl
|
282 |
+
cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDjmFGWHOjVsQaBalfD
|
283 |
+
cnWTq8+epvzzFlLWLU2fNUSoLgRNB0mKOCn1dzfnt6td3zZxFJmP3MKS8edgkpfs
|
284 |
+
2Ejcv8ECIMYkpChMMFp2bbFc893enhBxoYjHW5tBbcqwuI4V7q0zK89HBFx1cQqY
|
285 |
+
JJgpp0lZpd34t0NiYfPT4tBVPwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFa7AliE
|
286 |
+
Zwgs3x/be0kz9dNnnfS0ChCzycUs4pJqcXgn8nCDQtM+z6lU9PHYkhaM0QTLS6vJ
|
287 |
+
n0WuPIqpsHEzXcjFV9+vqDWzf4mH6eglkrh/hXqu1rweN1gqZ8mRzyqBPu3GOd/A
|
288 |
+
PhmcGcwTTYJBtYze4D1gCCAPRX5ron+jjBXu
|
289 |
+
-----END CERTIFICATE-----
|
290 |
+
|
291 |
+
# Issuer: CN=VeriSign Class 3 Public Primary Certification Authority - G3 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 1999 VeriSign, Inc. - For authorized use only
|
292 |
+
# Subject: CN=VeriSign Class 3 Public Primary Certification Authority - G3 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 1999 VeriSign, Inc. - For authorized use only
|
293 |
+
# Label: "Verisign Class 3 Public Primary Certification Authority - G3"
|
294 |
+
# Serial: 206684696279472310254277870180966723415
|
295 |
+
# MD5 Fingerprint: cd:68:b6:a7:c7:c4:ce:75:e0:1d:4f:57:44:61:92:09
|
296 |
+
# SHA1 Fingerprint: 13:2d:0d:45:53:4b:69:97:cd:b2:d5:c3:39:e2:55:76:60:9b:5c:c6
|
297 |
+
# SHA256 Fingerprint: eb:04:cf:5e:b1:f3:9a:fa:76:2f:2b:b1:20:f2:96:cb:a5:20:c1:b9:7d:b1:58:95:65:b8:1c:b9:a1:7b:72:44
|
298 |
+
-----BEGIN CERTIFICATE-----
|
299 |
+
MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQsw
|
300 |
+
CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl
|
301 |
+
cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu
|
302 |
+
LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT
|
303 |
+
aWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
|
304 |
+
dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD
|
305 |
+
VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT
|
306 |
+
aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ
|
307 |
+
bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu
|
308 |
+
IENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg
|
309 |
+
LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMu6nFL8eB8aHm8b
|
310 |
+
N3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1EUGO+i2t
|
311 |
+
KmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGu
|
312 |
+
kxUccLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBm
|
313 |
+
CC+Vk7+qRy+oRpfwEuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJ
|
314 |
+
Xwzw3sJ2zq/3avL6QaaiMxTJ5Xpj055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWu
|
315 |
+
imi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAERSWwauSCPc/L8my/uRan2Te
|
316 |
+
2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5fj267Cz3qWhMe
|
317 |
+
DGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC
|
318 |
+
/Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565p
|
319 |
+
F4ErWjfJXir0xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGt
|
320 |
+
TxzhT5yvDwyd93gN2PQ1VoDat20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ==
|
321 |
+
-----END CERTIFICATE-----
|
322 |
+
|
323 |
+
# Issuer: CN=VeriSign Class 4 Public Primary Certification Authority - G3 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 1999 VeriSign, Inc. - For authorized use only
|
324 |
+
# Subject: CN=VeriSign Class 4 Public Primary Certification Authority - G3 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 1999 VeriSign, Inc. - For authorized use only
|
325 |
+
# Label: "Verisign Class 4 Public Primary Certification Authority - G3"
|
326 |
+
# Serial: 314531972711909413743075096039378935511
|
327 |
+
# MD5 Fingerprint: db:c8:f2:27:2e:b1:ea:6a:29:23:5d:fe:56:3e:33:df
|
328 |
+
# SHA1 Fingerprint: c8:ec:8c:87:92:69:cb:4b:ab:39:e9:8d:7e:57:67:f3:14:95:73:9d
|
329 |
+
# SHA256 Fingerprint: e3:89:36:0d:0f:db:ae:b3:d2:50:58:4b:47:30:31:4e:22:2f:39:c1:56:a0:20:14:4e:8d:96:05:61:79:15:06
|
330 |
+
-----BEGIN CERTIFICATE-----
|
331 |
+
MIIEGjCCAwICEQDsoKeLbnVqAc/EfMwvlF7XMA0GCSqGSIb3DQEBBQUAMIHKMQsw
|
332 |
+
CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl
|
333 |
+
cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu
|
334 |
+
LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT
|
335 |
+
aWduIENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
|
336 |
+
dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD
|
337 |
+
VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT
|
338 |
+
aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ
|
339 |
+
bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu
|
340 |
+
IENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg
|
341 |
+
LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAK3LpRFpxlmr8Y+1
|
342 |
+
GQ9Wzsy1HyDkniYlS+BzZYlZ3tCD5PUPtbut8XzoIfzk6AzufEUiGXaStBO3IFsJ
|
343 |
+
+mGuqPKljYXCKtbeZjbSmwL0qJJgfJxptI8kHtCGUvYynEFYHiK9zUVilQhu0Gbd
|
344 |
+
U6LM8BDcVHOLBKFGMzNcF0C5nk3T875Vg+ixiY5afJqWIpA7iCXy0lOIAgwLePLm
|
345 |
+
NxdLMEYH5IBtptiWLugs+BGzOA1mppvqySNb247i8xOOGlktqgLw7KSHZtzBP/XY
|
346 |
+
ufTsgsbSPZUd5cBPhMnZo0QoBmrXRazwa2rvTl/4EYIeOGM0ZlDUPpNz+jDDZq3/
|
347 |
+
ky2X7wMCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAj/ola09b5KROJ1WrIhVZPMq1
|
348 |
+
CtRK26vdoV9TxaBXOcLORyu+OshWv8LZJxA6sQU8wHcxuzrTBXttmhwwjIDLk5Mq
|
349 |
+
g6sFUYICABFna/OIYUdfA5PVWw3g8dShMjWFsjrbsIKr0csKvE+MW8VLADsfKoKm
|
350 |
+
fjaF3H48ZwC15DtS4KjrXRX5xm3wrR0OhbepmnMUWluPQSjA1egtTaRezarZ7c7c
|
351 |
+
2NU8Qh0XwRJdRTjDOPP8hS6DRkiy1yBfkjaP53kPmF6Z6PDQpLv1U70qzlmwr25/
|
352 |
+
bLvSHgCwIe34QWKCudiyxLtGUPMxxY8BqHTr9Xgn2uf3ZkPznoM+IKrDNWCRzg==
|
353 |
+
-----END CERTIFICATE-----
|
354 |
+
|
355 |
+
# Issuer: CN=Entrust.net Secure Server Certification Authority O=Entrust.net OU=www.entrust.net/CPS incorp. by ref. (limits liab.)/(c) 1999 Entrust.net Limited
|
356 |
+
# Subject: CN=Entrust.net Secure Server Certification Authority O=Entrust.net OU=www.entrust.net/CPS incorp. by ref. (limits liab.)/(c) 1999 Entrust.net Limited
|
357 |
+
# Label: "Entrust.net Secure Server CA"
|
358 |
+
# Serial: 927650371
|
359 |
+
# MD5 Fingerprint: df:f2:80:73:cc:f1:e6:61:73:fc:f5:42:e9:c5:7c:ee
|
360 |
+
# SHA1 Fingerprint: 99:a6:9b:e6:1a:fe:88:6b:4d:2b:82:00:7c:b8:54:fc:31:7e:15:39
|
361 |
+
# SHA256 Fingerprint: 62:f2:40:27:8c:56:4c:4d:d8:bf:7d:9d:4f:6f:36:6e:a8:94:d2:2f:5f:34:d9:89:a9:83:ac:ec:2f:ff:ed:50
|
362 |
+
-----BEGIN CERTIFICATE-----
|
363 |
+
MIIE2DCCBEGgAwIBAgIEN0rSQzANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMC
|
364 |
+
VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5u
|
365 |
+
ZXQvQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMc
|
366 |
+
KGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVzdC5u
|
367 |
+
ZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05OTA1
|
368 |
+
MjUxNjA5NDBaFw0xOTA1MjUxNjM5NDBaMIHDMQswCQYDVQQGEwJVUzEUMBIGA1UE
|
369 |
+
ChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5j
|
370 |
+
b3JwLiBieSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBF
|
371 |
+
bnRydXN0Lm5ldCBMaW1pdGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUg
|
372 |
+
U2VydmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGdMA0GCSqGSIb3DQEBAQUA
|
373 |
+
A4GLADCBhwKBgQDNKIM0VBuJ8w+vN5Ex/68xYMmo6LIQaO2f55M28Qpku0f1BBc/
|
374 |
+
I0dNxScZgSYMVHINiC3ZH5oSn7yzcdOAGT9HZnuMNSjSuQrfJNqc1lB5gXpa0zf3
|
375 |
+
wkrYKZImZNHkmGw6AIr1NJtl+O3jEP/9uElY3KDegjlrgbEWGWG5VLbmQwIBA6OC
|
376 |
+
AdcwggHTMBEGCWCGSAGG+EIBAQQEAwIABzCCARkGA1UdHwSCARAwggEMMIHeoIHb
|
377 |
+
oIHYpIHVMIHSMQswCQYDVQQGEwJVUzEUMBIGA1UEChMLRW50cnVzdC5uZXQxOzA5
|
378 |
+
BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1p
|
379 |
+
dHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBFbnRydXN0Lm5ldCBMaW1pdGVk
|
380 |
+
MTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRp
|
381 |
+
b24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCmgJ6AlhiNodHRwOi8vd3d3LmVu
|
382 |
+
dHJ1c3QubmV0L0NSTC9uZXQxLmNybDArBgNVHRAEJDAigA8xOTk5MDUyNTE2MDk0
|
383 |
+
MFqBDzIwMTkwNTI1MTYwOTQwWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAU8Bdi
|
384 |
+
E1U9s/8KAGv7UISX8+1i0BowHQYDVR0OBBYEFPAXYhNVPbP/CgBr+1CEl/PtYtAa
|
385 |
+
MAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EABAwwChsEVjQuMAMCBJAwDQYJKoZI
|
386 |
+
hvcNAQEFBQADgYEAkNwwAvpkdMKnCqV8IY00F6j7Rw7/JXyNEwr75Ji174z4xRAN
|
387 |
+
95K+8cPV1ZVqBLssziY2ZcgxxufuP+NXdYR6Ee9GTxj005i7qIcyunL2POI9n9cd
|
388 |
+
2cNgQ4xYDiKWL2KjLB+6rQXvqzJ4h6BUcxm1XAX5Uj5tLUUL9wqT6u0G+bI=
|
389 |
+
-----END CERTIFICATE-----
|
390 |
+
|
391 |
+
# Issuer: CN=Entrust.net Certification Authority (2048) O=Entrust.net OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.)/(c) 1999 Entrust.net Limited
|
392 |
+
# Subject: CN=Entrust.net Certification Authority (2048) O=Entrust.net OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.)/(c) 1999 Entrust.net Limited
|
393 |
+
# Label: "Entrust.net Premium 2048 Secure Server CA"
|
394 |
+
# Serial: 946059622
|
395 |
+
# MD5 Fingerprint: ba:21:ea:20:d6:dd:db:8f:c1:57:8b:40:ad:a1:fc:fc
|
396 |
+
# SHA1 Fingerprint: 80:1d:62:d0:7b:44:9d:5c:5c:03:5c:98:ea:61:fa:44:3c:2a:58:fe
|
397 |
+
# SHA256 Fingerprint: d1:c3:39:ea:27:84:eb:87:0f:93:4f:c5:63:4e:4a:a9:ad:55:05:01:64:01:f2:64:65:d3:7a:57:46:63:35:9f
|
398 |
+
-----BEGIN CERTIFICATE-----
|
399 |
+
MIIEXDCCA0SgAwIBAgIEOGO5ZjANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChML
|
400 |
+
RW50cnVzdC5uZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBp
|
401 |
+
bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5
|
402 |
+
IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNVBAMTKkVudHJ1c3QubmV0IENlcnRp
|
403 |
+
ZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQxNzUwNTFaFw0xOTEy
|
404 |
+
MjQxODIwNTFaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3d3d3
|
405 |
+
LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxp
|
406 |
+
YWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEG
|
407 |
+
A1UEAxMqRW50cnVzdC5uZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgp
|
408 |
+
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArU1LqRKGsuqjIAcVFmQq
|
409 |
+
K0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOLGp18EzoOH1u3Hs/lJBQe
|
410 |
+
sYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSrhRSGlVuX
|
411 |
+
MlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVT
|
412 |
+
XTzWnLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/
|
413 |
+
HoZdenoVve8AjhUiVBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH
|
414 |
+
4QIDAQABo3QwcjARBglghkgBhvhCAQEEBAMCAAcwHwYDVR0jBBgwFoAUVeSB0RGA
|
415 |
+
vtiJuQijMfmhJAkWuXAwHQYDVR0OBBYEFFXkgdERgL7YibkIozH5oSQJFrlwMB0G
|
416 |
+
CSqGSIb2fQdBAAQQMA4bCFY1LjA6NC4wAwIEkDANBgkqhkiG9w0BAQUFAAOCAQEA
|
417 |
+
WUesIYSKF8mciVMeuoCFGsY8Tj6xnLZ8xpJdGGQC49MGCBFhfGPjK50xA3B20qMo
|
418 |
+
oPS7mmNz7W3lKtvtFKkrxjYR0CvrB4ul2p5cGZ1WEvVUKcgF7bISKo30Axv/55IQ
|
419 |
+
h7A6tcOdBTcSo8f0FbnVpDkWm1M6I5HxqIKiaohowXkCIryqptau37AUX7iH0N18
|
420 |
+
f3v/rxzP5tsHrV7bhZ3QKw0z2wTR5klAEyt2+z7pnIkPFc4YsIV4IU9rTw76NmfN
|
421 |
+
B/L/CNDi3tm/Kq+4h4YhPATKt5Rof8886ZjXOP/swNlQ8C5LWK5Gb9Auw2DaclVy
|
422 |
+
vUxFnmG6v4SBkgPR0ml8xQ==
|
423 |
+
-----END CERTIFICATE-----
|
424 |
+
|
425 |
+
# Issuer: CN=Baltimore CyberTrust Root O=Baltimore OU=CyberTrust
|
426 |
+
# Subject: CN=Baltimore CyberTrust Root O=Baltimore OU=CyberTrust
|
427 |
+
# Label: "Baltimore CyberTrust Root"
|
428 |
+
# Serial: 33554617
|
429 |
+
# MD5 Fingerprint: ac:b6:94:a5:9c:17:e0:d7:91:52:9b:b1:97:06:a6:e4
|
430 |
+
# SHA1 Fingerprint: d4:de:20:d0:5e:66:fc:53:fe:1a:50:88:2c:78:db:28:52:ca:e4:74
|
431 |
+
# SHA256 Fingerprint: 16:af:57:a9:f6:76:b0:ab:12:60:95:aa:5e:ba:de:f2:2a:b3:11:19:d6:44:ac:95:cd:4b:93:db:f3:f2:6a:eb
|
432 |
+
-----BEGIN CERTIFICATE-----
|
433 |
+
MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJ
|
434 |
+
RTESMBAGA1UEChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYD
|
435 |
+
VQQDExlCYWx0aW1vcmUgQ3liZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoX
|
436 |
+
DTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMCSUUxEjAQBgNVBAoTCUJhbHRpbW9y
|
437 |
+
ZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFsdGltb3JlIEN5YmVy
|
438 |
+
VHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKMEuyKr
|
439 |
+
mD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjr
|
440 |
+
IZ3AQSsBUnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeK
|
441 |
+
mpYcqWe4PwzV9/lSEy/CG9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSu
|
442 |
+
XmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9XbIGevOF6uvUA65ehD5f/xXtabz5OTZy
|
443 |
+
dc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjprl3RjM71oGDHweI12v/ye
|
444 |
+
jl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoIVDaGezq1
|
445 |
+
BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3
|
446 |
+
DQEBBQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT92
|
447 |
+
9hkTI7gQCvlYpNRhcL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3Wgx
|
448 |
+
jkzSswF07r51XgdIGn9w/xZchMB5hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0
|
449 |
+
Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsaY71k5h+3zvDyny67G7fyUIhz
|
450 |
+
ksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9HRCwBXbsdtTLS
|
451 |
+
R9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp
|
452 |
+
-----END CERTIFICATE-----
|
453 |
+
|
454 |
+
# Issuer: CN=Equifax Secure Global eBusiness CA-1 O=Equifax Secure Inc.
|
455 |
+
# Subject: CN=Equifax Secure Global eBusiness CA-1 O=Equifax Secure Inc.
|
456 |
+
# Label: "Equifax Secure Global eBusiness CA"
|
457 |
+
# Serial: 1
|
458 |
+
# MD5 Fingerprint: 8f:5d:77:06:27:c4:98:3c:5b:93:78:e7:d7:7d:9b:cc
|
459 |
+
# SHA1 Fingerprint: 7e:78:4a:10:1c:82:65:cc:2d:e1:f1:6d:47:b4:40:ca:d9:0a:19:45
|
460 |
+
# SHA256 Fingerprint: 5f:0b:62:ea:b5:e3:53:ea:65:21:65:16:58:fb:b6:53:59:f4:43:28:0a:4a:fb:d1:04:d7:7d:10:f9:f0:4c:07
|
461 |
+
-----BEGIN CERTIFICATE-----
|
462 |
+
MIICkDCCAfmgAwIBAgIBATANBgkqhkiG9w0BAQQFADBaMQswCQYDVQQGEwJVUzEc
|
463 |
+
MBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5jLjEtMCsGA1UEAxMkRXF1aWZheCBT
|
464 |
+
ZWN1cmUgR2xvYmFsIGVCdXNpbmVzcyBDQS0xMB4XDTk5MDYyMTA0MDAwMFoXDTIw
|
465 |
+
MDYyMTA0MDAwMFowWjELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0VxdWlmYXggU2Vj
|
466 |
+
dXJlIEluYy4xLTArBgNVBAMTJEVxdWlmYXggU2VjdXJlIEdsb2JhbCBlQnVzaW5l
|
467 |
+
c3MgQ0EtMTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAuucXkAJlsTRVPEnC
|
468 |
+
UdXfp9E3j9HngXNBUmCbnaEXJnitx7HoJpQytd4zjTov2/KaelpzmKNc6fuKcxtc
|
469 |
+
58O/gGzNqfTWK8D3+ZmqY6KxRwIP1ORROhI8bIpaVIRw28HFkM9yRcuoWcDNM50/
|
470 |
+
o5brhTMhHD4ePmBudpxnhcXIw2ECAwEAAaNmMGQwEQYJYIZIAYb4QgEBBAQDAgAH
|
471 |
+
MA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUvqigdHJQa0S3ySPY+6j/s1dr
|
472 |
+
aGwwHQYDVR0OBBYEFL6ooHRyUGtEt8kj2Puo/7NXa2hsMA0GCSqGSIb3DQEBBAUA
|
473 |
+
A4GBADDiAVGqx+pf2rnQZQ8w1j7aDRRJbpGTJxQx78T3LUX47Me/okENI7SS+RkA
|
474 |
+
Z70Br83gcfxaz2TE4JaY0KNA4gGK7ycH8WUBikQtBmV1UsCGECAhX2xrD2yuCRyv
|
475 |
+
8qIYNMR1pHMc8Y3c7635s3a0kr/clRAevsvIO1qEYBlWlKlV
|
476 |
+
-----END CERTIFICATE-----
|
477 |
+
|
478 |
+
# Issuer: CN=Equifax Secure eBusiness CA-1 O=Equifax Secure Inc.
|
479 |
+
# Subject: CN=Equifax Secure eBusiness CA-1 O=Equifax Secure Inc.
|
480 |
+
# Label: "Equifax Secure eBusiness CA 1"
|
481 |
+
# Serial: 4
|
482 |
+
# MD5 Fingerprint: 64:9c:ef:2e:44:fc:c6:8f:52:07:d0:51:73:8f:cb:3d
|
483 |
+
# SHA1 Fingerprint: da:40:18:8b:91:89:a3:ed:ee:ae:da:97:fe:2f:9d:f5:b7:d1:8a:41
|
484 |
+
# SHA256 Fingerprint: cf:56:ff:46:a4:a1:86:10:9d:d9:65:84:b5:ee:b5:8a:51:0c:42:75:b0:e5:f9:4f:40:bb:ae:86:5e:19:f6:73
|
485 |
+
-----BEGIN CERTIFICATE-----
|
486 |
+
MIICgjCCAeugAwIBAgIBBDANBgkqhkiG9w0BAQQFADBTMQswCQYDVQQGEwJVUzEc
|
487 |
+
MBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBT
|
488 |
+
ZWN1cmUgZUJ1c2luZXNzIENBLTEwHhcNOTkwNjIxMDQwMDAwWhcNMjAwNjIxMDQw
|
489 |
+
MDAwWjBTMQswCQYDVQQGEwJVUzEcMBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5j
|
490 |
+
LjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1c2luZXNzIENBLTEwgZ8wDQYJ
|
491 |
+
KoZIhvcNAQEBBQADgY0AMIGJAoGBAM4vGbwXt3fek6lfWg0XTzQaDJj0ItlZ1MRo
|
492 |
+
RvC0NcWFAyDGr0WlIVFFQesWWDYyb+JQYmT5/VGcqiTZ9J2DKocKIdMSODRsjQBu
|
493 |
+
WqDZQu4aIZX5UkxVWsUPOE9G+m34LjXWHXzr4vCwdYDIqROsvojvOm6rXyo4YgKw
|
494 |
+
Env+j6YDAgMBAAGjZjBkMBEGCWCGSAGG+EIBAQQEAwIABzAPBgNVHRMBAf8EBTAD
|
495 |
+
AQH/MB8GA1UdIwQYMBaAFEp4MlIR21kWNl7fwRQ2QGpHfEyhMB0GA1UdDgQWBBRK
|
496 |
+
eDJSEdtZFjZe38EUNkBqR3xMoTANBgkqhkiG9w0BAQQFAAOBgQB1W6ibAxHm6VZM
|
497 |
+
zfmpTMANmvPMZWnmJXbMWbfWVMMdzZmsGd20hdXgPfxiIKeES1hl8eL5lSE/9dR+
|
498 |
+
WB5Hh1Q+WKG1tfgq73HnvMP2sUlG4tega+VWeponmHxGYhTnyfxuAxJ5gDgdSIKN
|
499 |
+
/Bf+KpYrtWKmpj29f5JZzVoqgrI3eQ==
|
500 |
+
-----END CERTIFICATE-----
|
501 |
+
|
502 |
+
# Issuer: O=Equifax Secure OU=Equifax Secure eBusiness CA-2
|
503 |
+
# Subject: O=Equifax Secure OU=Equifax Secure eBusiness CA-2
|
504 |
+
# Label: "Equifax Secure eBusiness CA 2"
|
505 |
+
# Serial: 930140085
|
506 |
+
# MD5 Fingerprint: aa:bf:bf:64:97:da:98:1d:6f:c6:08:3a:95:70:33:ca
|
507 |
+
# SHA1 Fingerprint: 39:4f:f6:85:0b:06:be:52:e5:18:56:cc:10:e1:80:e8:82:b3:85:cc
|
508 |
+
# SHA256 Fingerprint: 2f:27:4e:48:ab:a4:ac:7b:76:59:33:10:17:75:50:6d:c3:0e:e3:8e:f6:ac:d5:c0:49:32:cf:e0:41:23:42:20
|
509 |
+
-----BEGIN CERTIFICATE-----
|
510 |
+
MIIDIDCCAomgAwIBAgIEN3DPtTANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJV
|
511 |
+
UzEXMBUGA1UEChMORXF1aWZheCBTZWN1cmUxJjAkBgNVBAsTHUVxdWlmYXggU2Vj
|
512 |
+
dXJlIGVCdXNpbmVzcyBDQS0yMB4XDTk5MDYyMzEyMTQ0NVoXDTE5MDYyMzEyMTQ0
|
513 |
+
NVowTjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDkVxdWlmYXggU2VjdXJlMSYwJAYD
|
514 |
+
VQQLEx1FcXVpZmF4IFNlY3VyZSBlQnVzaW5lc3MgQ0EtMjCBnzANBgkqhkiG9w0B
|
515 |
+
AQEFAAOBjQAwgYkCgYEA5Dk5kx5SBhsoNviyoynF7Y6yEb3+6+e0dMKP/wXn2Z0G
|
516 |
+
vxLIPw7y1tEkshHe0XMJitSxLJgJDR5QRrKDpkWNYmi7hRsgcDKqQM2mll/EcTc/
|
517 |
+
BPO3QSQ5BxoeLmFYoBIL5aXfxavqN3HMHMg3OrmXUqesxWoklE6ce8/AatbfIb0C
|
518 |
+
AwEAAaOCAQkwggEFMHAGA1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEX
|
519 |
+
MBUGA1UEChMORXF1aWZheCBTZWN1cmUxJjAkBgNVBAsTHUVxdWlmYXggU2VjdXJl
|
520 |
+
IGVCdXNpbmVzcyBDQS0yMQ0wCwYDVQQDEwRDUkwxMBoGA1UdEAQTMBGBDzIwMTkw
|
521 |
+
NjIzMTIxNDQ1WjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUUJ4L6q9euSBIplBq
|
522 |
+
y/3YIHqngnYwHQYDVR0OBBYEFFCeC+qvXrkgSKZQasv92CB6p4J2MAwGA1UdEwQF
|
523 |
+
MAMBAf8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUA
|
524 |
+
A4GBAAyGgq3oThr1jokn4jVYPSm0B482UJW/bsGe68SQsoWou7dC4A8HOd/7npCy
|
525 |
+
0cE+U58DRLB+S/Rv5Hwf5+Kx5Lia78O9zt4LMjTZ3ijtM2vE1Nc9ElirfQkty3D1
|
526 |
+
E4qUoSek1nDFbZS1yX2doNLGCEnZZpum0/QL3MUmV+GRMOrN
|
527 |
+
-----END CERTIFICATE-----
|
528 |
+
|
529 |
+
# Issuer: CN=AddTrust Class 1 CA Root O=AddTrust AB OU=AddTrust TTP Network
|
530 |
+
# Subject: CN=AddTrust Class 1 CA Root O=AddTrust AB OU=AddTrust TTP Network
|
531 |
+
# Label: "AddTrust Low-Value Services Root"
|
532 |
+
# Serial: 1
|
533 |
+
# MD5 Fingerprint: 1e:42:95:02:33:92:6b:b9:5f:c0:7f:da:d6:b2:4b:fc
|
534 |
+
# SHA1 Fingerprint: cc:ab:0e:a0:4c:23:01:d6:69:7b:dd:37:9f:cd:12:eb:24:e3:94:9d
|
535 |
+
# SHA256 Fingerprint: 8c:72:09:27:9a:c0:4e:27:5e:16:d0:7f:d3:b7:75:e8:01:54:b5:96:80:46:e3:1f:52:dd:25:76:63:24:e9:a7
|
536 |
+
-----BEGIN CERTIFICATE-----
|
537 |
+
MIIEGDCCAwCgAwIBAgIBATANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQGEwJTRTEU
|
538 |
+
MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3
|
539 |
+
b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwHhcNMDAwNTMw
|
540 |
+
MTAzODMxWhcNMjAwNTMwMTAzODMxWjBlMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
|
541 |
+
QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYD
|
542 |
+
VQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUA
|
543 |
+
A4IBDwAwggEKAoIBAQCWltQhSWDia+hBBwzexODcEyPNwTXH+9ZOEQpnXvUGW2ul
|
544 |
+
CDtbKRY654eyNAbFvAWlA3yCyykQruGIgb3WntP+LVbBFc7jJp0VLhD7Bo8wBN6n
|
545 |
+
tGO0/7Gcrjyvd7ZWxbWroulpOj0OM3kyP3CCkplhbY0wCI9xP6ZIVxn4JdxLZlyl
|
546 |
+
dI+Yrsj5wAYi56xz36Uu+1LcsRVlIPo1Zmne3yzxbrww2ywkEtvrNTVokMsAsJch
|
547 |
+
PXQhI2U0K7t4WaPW4XY5mqRJjox0r26kmqPZm9I4XJuiGMx1I4S+6+JNM3GOGvDC
|
548 |
+
+Mcdoq0Dlyz4zyXG9rgkMbFjXZJ/Y/AlyVMuH79NAgMBAAGjgdIwgc8wHQYDVR0O
|
549 |
+
BBYEFJWxtPCUtr3H2tERCSG+wa9J/RB7MAsGA1UdDwQEAwIBBjAPBgNVHRMBAf8E
|
550 |
+
BTADAQH/MIGPBgNVHSMEgYcwgYSAFJWxtPCUtr3H2tERCSG+wa9J/RB7oWmkZzBl
|
551 |
+
MQswCQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFk
|
552 |
+
ZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENB
|
553 |
+
IFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBACxtZBsfzQ3duQH6lmM0MkhHma6X
|
554 |
+
7f1yFqZzR1r0693p9db7RcwpiURdv0Y5PejuvE1Uhh4dbOMXJ0PhiVYrqW9yTkkz
|
555 |
+
43J8KiOavD7/KCrto/8cI7pDVwlnTUtiBi34/2ydYB7YHEt9tTEv2dB8Xfjea4MY
|
556 |
+
eDdXL+gzB2ffHsdrKpV2ro9Xo/D0UrSpUwjP4E/TelOL/bscVjby/rK25Xa71SJl
|
557 |
+
pz/+0WatC7xrmYbvP33zGDLKe8bjq2RGlfgmadlVg3sslgf/WSxEo8bl6ancoWOA
|
558 |
+
WiFeIc9TVPC6b4nbqKqVz4vjccweGyBECMB6tkD9xOQ14R0WHNC8K47Wcdk=
|
559 |
+
-----END CERTIFICATE-----
|
560 |
+
|
561 |
+
# Issuer: CN=AddTrust External CA Root O=AddTrust AB OU=AddTrust External TTP Network
|
562 |
+
# Subject: CN=AddTrust External CA Root O=AddTrust AB OU=AddTrust External TTP Network
|
563 |
+
# Label: "AddTrust External Root"
|
564 |
+
# Serial: 1
|
565 |
+
# MD5 Fingerprint: 1d:35:54:04:85:78:b0:3f:42:42:4d:bf:20:73:0a:3f
|
566 |
+
# SHA1 Fingerprint: 02:fa:f3:e2:91:43:54:68:60:78:57:69:4d:f5:e4:5b:68:85:18:68
|
567 |
+
# SHA256 Fingerprint: 68:7f:a4:51:38:22:78:ff:f0:c8:b1:1f:8d:43:d5:76:67:1c:6e:b2:bc:ea:b4:13:fb:83:d9:65:d0:6d:2f:f2
|
568 |
+
-----BEGIN CERTIFICATE-----
|
569 |
+
MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEU
|
570 |
+
MBIGA1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFs
|
571 |
+
IFRUUCBOZXR3b3JrMSIwIAYDVQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290
|
572 |
+
MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEwNDgzOFowbzELMAkGA1UEBhMCU0Ux
|
573 |
+
FDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRUcnVzdCBFeHRlcm5h
|
574 |
+
bCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0EgUm9v
|
575 |
+
dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvt
|
576 |
+
H7xsD821+iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9
|
577 |
+
uMq/NzgtHj6RQa1wVsfwTz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzX
|
578 |
+
mk6vBbOmcZSccbNQYArHE504B4YCqOmoaSYYkKtMsE8jqzpPhNjfzp/haW+710LX
|
579 |
+
a0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy2xSoRcRdKn23tNbE7qzN
|
580 |
+
E0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv77+ldU9U0
|
581 |
+
WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYD
|
582 |
+
VR0PBAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0
|
583 |
+
Jvf6xCZU7wO94CTLVBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRU
|
584 |
+
cnVzdCBBQjEmMCQGA1UECxMdQWRkVHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsx
|
585 |
+
IjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENBIFJvb3SCAQEwDQYJKoZIhvcN
|
586 |
+
AQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZlj7DYd7usQWxH
|
587 |
+
YINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5
|
588 |
+
6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvC
|
589 |
+
Nr4TDea9Y355e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEX
|
590 |
+
c4g/VhsxOBi0cQ+azcgOno4uG+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5a
|
591 |
+
mnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ=
|
592 |
+
-----END CERTIFICATE-----
|
593 |
+
|
594 |
+
# Issuer: CN=AddTrust Public CA Root O=AddTrust AB OU=AddTrust TTP Network
|
595 |
+
# Subject: CN=AddTrust Public CA Root O=AddTrust AB OU=AddTrust TTP Network
|
596 |
+
# Label: "AddTrust Public Services Root"
|
597 |
+
# Serial: 1
|
598 |
+
# MD5 Fingerprint: c1:62:3e:23:c5:82:73:9c:03:59:4b:2b:e9:77:49:7f
|
599 |
+
# SHA1 Fingerprint: 2a:b6:28:48:5e:78:fb:f3:ad:9e:79:10:dd:6b:df:99:72:2c:96:e5
|
600 |
+
# SHA256 Fingerprint: 07:91:ca:07:49:b2:07:82:aa:d3:c7:d7:bd:0c:df:c9:48:58:35:84:3e:b2:d7:99:60:09:ce:43:ab:6c:69:27
|
601 |
+
-----BEGIN CERTIFICATE-----
|
602 |
+
MIIEFTCCAv2gAwIBAgIBATANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQGEwJTRTEU
|
603 |
+
MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3
|
604 |
+
b3JrMSAwHgYDVQQDExdBZGRUcnVzdCBQdWJsaWMgQ0EgUm9vdDAeFw0wMDA1MzAx
|
605 |
+
MDQxNTBaFw0yMDA1MzAxMDQxNTBaMGQxCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtB
|
606 |
+
ZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5ldHdvcmsxIDAeBgNV
|
607 |
+
BAMTF0FkZFRydXN0IFB1YmxpYyBDQSBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOC
|
608 |
+
AQ8AMIIBCgKCAQEA6Rowj4OIFMEg2Dybjxt+A3S72mnTRqX4jsIMEZBRpS9mVEBV
|
609 |
+
6tsfSlbunyNu9DnLoblv8n75XYcmYZ4c+OLspoH4IcUkzBEMP9smcnrHAZcHF/nX
|
610 |
+
GCwwfQ56HmIexkvA/X1id9NEHif2P0tEs7c42TkfYNVRknMDtABp4/MUTu7R3AnP
|
611 |
+
dzRGULD4EfL+OHn3Bzn+UZKXC1sIXzSGAa2Il+tmzV7R/9x98oTaunet3IAIx6eH
|
612 |
+
1lWfl2royBFkuucZKT8Rs3iQhCBSWxHveNCD9tVIkNAwHM+A+WD+eeSI8t0A65RF
|
613 |
+
62WUaUC6wNW0uLp9BBGo6zEFlpROWCGOn9Bg/QIDAQABo4HRMIHOMB0GA1UdDgQW
|
614 |
+
BBSBPjfYkrAfd59ctKtzquf2NGAv+jALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/BAUw
|
615 |
+
AwEB/zCBjgYDVR0jBIGGMIGDgBSBPjfYkrAfd59ctKtzquf2NGAv+qFopGYwZDEL
|
616 |
+
MAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRU
|
617 |
+
cnVzdCBUVFAgTmV0d29yazEgMB4GA1UEAxMXQWRkVHJ1c3QgUHVibGljIENBIFJv
|
618 |
+
b3SCAQEwDQYJKoZIhvcNAQEFBQADggEBAAP3FUr4JNojVhaTdt02KLmuG7jD8WS6
|
619 |
+
IBh4lSknVwW8fCr0uVFV2ocC3g8WFzH4qnkuCRO7r7IgGRLlk/lL+YPoRNWyQSW/
|
620 |
+
iHVv/xD8SlTQX/D67zZzfRs2RcYhbbQVuE7PnFylPVoAjgbjPGsye/Kf8Lb93/Ao
|
621 |
+
GEjwxrzQvzSAlsJKsW2Ox5BF3i9nrEUEo3rcVZLJR2bYGozH7ZxOmuASu7VqTITh
|
622 |
+
4SINhwBk/ox9Yjllpu9CtoAlEmEBqCQTcAARJl/6NVDFSMwGR+gn2HCNX2TmoUQm
|
623 |
+
XiLsks3/QppEIW1cxeMiHV9HEufOX1362KqxMy3ZdvJOOjMMK7MtkAY=
|
624 |
+
-----END CERTIFICATE-----
|
625 |
+
|
626 |
+
# Issuer: CN=AddTrust Qualified CA Root O=AddTrust AB OU=AddTrust TTP Network
|
627 |
+
# Subject: CN=AddTrust Qualified CA Root O=AddTrust AB OU=AddTrust TTP Network
|
628 |
+
# Label: "AddTrust Qualified Certificates Root"
|
629 |
+
# Serial: 1
|
630 |
+
# MD5 Fingerprint: 27:ec:39:47:cd:da:5a:af:e2:9a:01:65:21:a9:4c:bb
|
631 |
+
# SHA1 Fingerprint: 4d:23:78:ec:91:95:39:b5:00:7f:75:8f:03:3b:21:1e:c5:4d:8b:cf
|
632 |
+
# SHA256 Fingerprint: 80:95:21:08:05:db:4b:bc:35:5e:44:28:d8:fd:6e:c2:cd:e3:ab:5f:b9:7a:99:42:98:8e:b8:f4:dc:d0:60:16
|
633 |
+
-----BEGIN CERTIFICATE-----
|
634 |
+
MIIEHjCCAwagAwIBAgIBATANBgkqhkiG9w0BAQUFADBnMQswCQYDVQQGEwJTRTEU
|
635 |
+
MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3
|
636 |
+
b3JrMSMwIQYDVQQDExpBZGRUcnVzdCBRdWFsaWZpZWQgQ0EgUm9vdDAeFw0wMDA1
|
637 |
+
MzAxMDQ0NTBaFw0yMDA1MzAxMDQ0NTBaMGcxCzAJBgNVBAYTAlNFMRQwEgYDVQQK
|
638 |
+
EwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5ldHdvcmsxIzAh
|
639 |
+
BgNVBAMTGkFkZFRydXN0IFF1YWxpZmllZCBDQSBSb290MIIBIjANBgkqhkiG9w0B
|
640 |
+
AQEFAAOCAQ8AMIIBCgKCAQEA5B6a/twJWoekn0e+EV+vhDTbYjx5eLfpMLXsDBwq
|
641 |
+
xBb/4Oxx64r1EW7tTw2R0hIYLUkVAcKkIhPHEWT/IhKauY5cLwjPcWqzZwFZ8V1G
|
642 |
+
87B4pfYOQnrjfxvM0PC3KP0q6p6zsLkEqv32x7SxuCqg+1jxGaBvcCV+PmlKfw8i
|
643 |
+
2O+tCBGaKZnhqkRFmhJePp1tUvznoD1oL/BLcHwTOK28FSXx1s6rosAx1i+f4P8U
|
644 |
+
WfyEk9mHfExUE+uf0S0R+Bg6Ot4l2ffTQO2kBhLEO+GRwVY18BTcZTYJbqukB8c1
|
645 |
+
0cIDMzZbdSZtQvESa0NvS3GU+jQd7RNuyoB/mC9suWXY6QIDAQABo4HUMIHRMB0G
|
646 |
+
A1UdDgQWBBQ5lYtii1zJ1IC6WA+XPxUIQ8yYpzALBgNVHQ8EBAMCAQYwDwYDVR0T
|
647 |
+
AQH/BAUwAwEB/zCBkQYDVR0jBIGJMIGGgBQ5lYtii1zJ1IC6WA+XPxUIQ8yYp6Fr
|
648 |
+
pGkwZzELMAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQL
|
649 |
+
ExRBZGRUcnVzdCBUVFAgTmV0d29yazEjMCEGA1UEAxMaQWRkVHJ1c3QgUXVhbGlm
|
650 |
+
aWVkIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBABmrder4i2VhlRO6aQTv
|
651 |
+
hsoToMeqT2QbPxj2qC0sVY8FtzDqQmodwCVRLae/DLPt7wh/bDxGGuoYQ992zPlm
|
652 |
+
hpwsaPXpF/gxsxjE1kh9I0xowX67ARRvxdlu3rsEQmr49lx95dr6h+sNNVJn0J6X
|
653 |
+
dgWTP5XHAeZpVTh/EGGZyeNfpso+gmNIquIISD6q8rKFYqa0p9m9N5xotS1WfbC3
|
654 |
+
P6CxB9bpT9zeRXEwMn8bLgn5v1Kh7sKAPgZcLlVAwRv1cEWw3F369nJad9Jjzc9Y
|
655 |
+
iQBCYz95OdBEsIJuQRno3eDBiFrRHnGTHyQwdOUeqN48Jzd/g66ed8/wMLH/S5no
|
656 |
+
xqE=
|
657 |
+
-----END CERTIFICATE-----
|
658 |
+
|
659 |
+
# Issuer: CN=Entrust Root Certification Authority O=Entrust, Inc. OU=www.entrust.net/CPS is incorporated by reference/(c) 2006 Entrust, Inc.
|
660 |
+
# Subject: CN=Entrust Root Certification Authority O=Entrust, Inc. OU=www.entrust.net/CPS is incorporated by reference/(c) 2006 Entrust, Inc.
|
661 |
+
# Label: "Entrust Root Certification Authority"
|
662 |
+
# Serial: 1164660820
|
663 |
+
# MD5 Fingerprint: d6:a5:c3:ed:5d:dd:3e:00:c1:3d:87:92:1f:1d:3f:e4
|
664 |
+
# SHA1 Fingerprint: b3:1e:b1:b7:40:e3:6c:84:02:da:dc:37:d4:4d:f5:d4:67:49:52:f9
|
665 |
+
# SHA256 Fingerprint: 73:c1:76:43:4f:1b:c6:d5:ad:f4:5b:0e:76:e7:27:28:7c:8d:e5:76:16:c1:e6:e6:14:1a:2b:2c:bc:7d:8e:4c
|
666 |
+
-----BEGIN CERTIFICATE-----
|
667 |
+
MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMC
|
668 |
+
VVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0
|
669 |
+
Lm5ldC9DUFMgaXMgaW5jb3Jwb3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMW
|
670 |
+
KGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsGA1UEAxMkRW50cnVzdCBSb290IENl
|
671 |
+
cnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0MloXDTI2MTEyNzIw
|
672 |
+
NTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMTkw
|
673 |
+
NwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSBy
|
674 |
+
ZWZlcmVuY2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNV
|
675 |
+
BAMTJEVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJ
|
676 |
+
KoZIhvcNAQEBBQADggEPADCCAQoCggEBALaVtkNC+sZtKm9I35RMOVcF7sN5EUFo
|
677 |
+
Nu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYszA9u3g3s+IIRe7bJWKKf4
|
678 |
+
4LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOwwCj0Yzfv9
|
679 |
+
KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGI
|
680 |
+
rb68j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi
|
681 |
+
94DkZfs0Nw4pgHBNrziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOB
|
682 |
+
sDCBrTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAi
|
683 |
+
gA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1MzQyWjAfBgNVHSMEGDAWgBRo
|
684 |
+
kORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DHhmak8fdLQ/uE
|
685 |
+
vW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA
|
686 |
+
A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9t
|
687 |
+
O1KzKtvn1ISMY/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6Zua
|
688 |
+
AGAT/3B+XxFNSRuzFVJ7yVTav52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP
|
689 |
+
9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTSW3iDVuycNsMm4hH2Z0kdkquM++v/
|
690 |
+
eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0tHuu2guQOHXvgR1m
|
691 |
+
0vdXcDazv/wor3ElhVsT/h5/WrQ8
|
692 |
+
-----END CERTIFICATE-----
|
693 |
+
|
694 |
+
# Issuer: CN=GeoTrust Global CA O=GeoTrust Inc.
|
695 |
+
# Subject: CN=GeoTrust Global CA O=GeoTrust Inc.
|
696 |
+
# Label: "GeoTrust Global CA"
|
697 |
+
# Serial: 144470
|
698 |
+
# MD5 Fingerprint: f7:75:ab:29:fb:51:4e:b7:77:5e:ff:05:3c:99:8e:f5
|
699 |
+
# SHA1 Fingerprint: de:28:f4:a4:ff:e5:b9:2f:a3:c5:03:d1:a3:49:a7:f9:96:2a:82:12
|
700 |
+
# SHA256 Fingerprint: ff:85:6a:2d:25:1d:cd:88:d3:66:56:f4:50:12:67:98:cf:ab:aa:de:40:79:9c:72:2d:e4:d2:b5:db:36:a7:3a
|
701 |
+
-----BEGIN CERTIFICATE-----
|
702 |
+
MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVT
|
703 |
+
MRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9i
|
704 |
+
YWwgQ0EwHhcNMDIwNTIxMDQwMDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQG
|
705 |
+
EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEbMBkGA1UEAxMSR2VvVHJ1c3Qg
|
706 |
+
R2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2swYYzD9
|
707 |
+
9BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjoBbdq
|
708 |
+
fnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDv
|
709 |
+
iS2Aelet8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU
|
710 |
+
1XupGc1V3sjs0l44U+VcT4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+
|
711 |
+
bw8HHa8sHo9gOeL6NlMTOdReJivbPagUvTLrGAMoUgRx5aszPeE4uwc2hGKceeoW
|
712 |
+
MPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTA
|
713 |
+
ephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVkDBF9qn1l
|
714 |
+
uMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKIn
|
715 |
+
Z57QzxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfS
|
716 |
+
tQWVYrmm3ok9Nns4d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcF
|
717 |
+
PseKUgzbFbS9bZvlxrFUaKnjaZC2mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Un
|
718 |
+
hw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6pXE0zX5IJL4hmXXeXxx12E6nV
|
719 |
+
5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvmMw==
|
720 |
+
-----END CERTIFICATE-----
|
721 |
+
|
722 |
+
# Issuer: CN=GeoTrust Global CA 2 O=GeoTrust Inc.
|
723 |
+
# Subject: CN=GeoTrust Global CA 2 O=GeoTrust Inc.
|
724 |
+
# Label: "GeoTrust Global CA 2"
|
725 |
+
# Serial: 1
|
726 |
+
# MD5 Fingerprint: 0e:40:a7:6c:de:03:5d:8f:d1:0f:e4:d1:8d:f9:6c:a9
|
727 |
+
# SHA1 Fingerprint: a9:e9:78:08:14:37:58:88:f2:05:19:b0:6d:2b:0d:2b:60:16:90:7d
|
728 |
+
# SHA256 Fingerprint: ca:2d:82:a0:86:77:07:2f:8a:b6:76:4f:f0:35:67:6c:fe:3e:5e:32:5e:01:21:72:df:3f:92:09:6d:b7:9b:85
|
729 |
+
-----BEGIN CERTIFICATE-----
|
730 |
+
MIIDZjCCAk6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBEMQswCQYDVQQGEwJVUzEW
|
731 |
+
MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFs
|
732 |
+
IENBIDIwHhcNMDQwMzA0MDUwMDAwWhcNMTkwMzA0MDUwMDAwWjBEMQswCQYDVQQG
|
733 |
+
EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3Qg
|
734 |
+
R2xvYmFsIENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDvPE1A
|
735 |
+
PRDfO1MA4Wf+lGAVPoWI8YkNkMgoI5kF6CsgncbzYEbYwbLVjDHZ3CB5JIG/NTL8
|
736 |
+
Y2nbsSpr7iFY8gjpeMtvy/wWUsiRxP89c96xPqfCfWbB9X5SJBri1WeR0IIQ13hL
|
737 |
+
TytCOb1kLUCgsBDTOEhGiKEMuzozKmKY+wCdE1l/bztyqu6mD4b5BWHqZ38MN5aL
|
738 |
+
5mkWRxHCJ1kDs6ZgwiFAVvqgx306E+PsV8ez1q6diYD3Aecs9pYrEw15LNnA5IZ7
|
739 |
+
S4wMcoKK+xfNAGw6EzywhIdLFnopsk/bHdQL82Y3vdj2V7teJHq4PIu5+pIaGoSe
|
740 |
+
2HSPqht/XvT+RSIhAgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE
|
741 |
+
FHE4NvICMVNHK266ZUapEBVYIAUJMB8GA1UdIwQYMBaAFHE4NvICMVNHK266ZUap
|
742 |
+
EBVYIAUJMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQUFAAOCAQEAA/e1K6td
|
743 |
+
EPx7srJerJsOflN4WT5CBP51o62sgU7XAotexC3IUnbHLB/8gTKY0UvGkpMzNTEv
|
744 |
+
/NgdRN3ggX+d6YvhZJFiCzkIjKx0nVnZellSlxG5FntvRdOW2TF9AjYPnDtuzywN
|
745 |
+
A0ZF66D0f0hExghAzN4bcLUprbqLOzRldRtxIR0sFAqwlpW41uryZfspuk/qkZN0
|
746 |
+
abby/+Ea0AzRdoXLiiW9l14sbxWZJue2Kf8i7MkCx1YAzUm5s2x7UwQa4qjJqhIF
|
747 |
+
I8LO57sEAszAR6LkxCkvW0VXiVHuPOtSCP8HNR6fNWpHSlaY0VqFH4z1Ir+rzoPz
|
748 |
+
4iIprn2DQKi6bA==
|
749 |
+
-----END CERTIFICATE-----
|
750 |
+
|
751 |
+
# Issuer: CN=GeoTrust Universal CA O=GeoTrust Inc.
|
752 |
+
# Subject: CN=GeoTrust Universal CA O=GeoTrust Inc.
|
753 |
+
# Label: "GeoTrust Universal CA"
|
754 |
+
# Serial: 1
|
755 |
+
# MD5 Fingerprint: 92:65:58:8b:a2:1a:31:72:73:68:5c:b4:a5:7a:07:48
|
756 |
+
# SHA1 Fingerprint: e6:21:f3:35:43:79:05:9a:4b:68:30:9d:8a:2f:74:22:15:87:ec:79
|
757 |
+
# SHA256 Fingerprint: a0:45:9b:9f:63:b2:25:59:f5:fa:5d:4c:6d:b3:f9:f7:2f:f1:93:42:03:35:78:f0:73:bf:1d:1b:46:cb:b9:12
|
758 |
+
-----BEGIN CERTIFICATE-----
|
759 |
+
MIIFaDCCA1CgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJVUzEW
|
760 |
+
MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEeMBwGA1UEAxMVR2VvVHJ1c3QgVW5pdmVy
|
761 |
+
c2FsIENBMB4XDTA0MDMwNDA1MDAwMFoXDTI5MDMwNDA1MDAwMFowRTELMAkGA1UE
|
762 |
+
BhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xHjAcBgNVBAMTFUdlb1RydXN0
|
763 |
+
IFVuaXZlcnNhbCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKYV
|
764 |
+
VaCjxuAfjJ0hUNfBvitbtaSeodlyWL0AG0y/YckUHUWCq8YdgNY96xCcOq9tJPi8
|
765 |
+
cQGeBvV8Xx7BDlXKg5pZMK4ZyzBIle0iN430SppyZj6tlcDgFgDgEB8rMQ7XlFTT
|
766 |
+
QjOgNB0eRXbdT8oYN+yFFXoZCPzVx5zw8qkuEKmS5j1YPakWaDwvdSEYfyh3peFh
|
767 |
+
F7em6fgemdtzbvQKoiFs7tqqhZJmr/Z6a4LauiIINQ/PQvE1+mrufislzDoR5G2v
|
768 |
+
c7J2Ha3QsnhnGqQ5HFELZ1aD/ThdDc7d8Lsrlh/eezJS/R27tQahsiFepdaVaH/w
|
769 |
+
mZ7cRQg+59IJDTWU3YBOU5fXtQlEIGQWFwMCTFMNaN7VqnJNk22CDtucvc+081xd
|
770 |
+
VHppCZbW2xHBjXWotM85yM48vCR85mLK4b19p71XZQvk/iXttmkQ3CgaRr0BHdCX
|
771 |
+
teGYO8A3ZNY9lO4L4fUorgtWv3GLIylBjobFS1J72HGrH4oVpjuDWtdYAVHGTEHZ
|
772 |
+
f9hBZ3KiKN9gg6meyHv8U3NyWfWTehd2Ds735VzZC1U0oqpbtWpU5xPKV+yXbfRe
|
773 |
+
Bi9Fi1jUIxaS5BZuKGNZMN9QAZxjiRqf2xeUgnA3wySemkfWWspOqGmJch+RbNt+
|
774 |
+
nhutxx9z3SxPGWX9f5NAEC7S8O08ni4oPmkmM8V7AgMBAAGjYzBhMA8GA1UdEwEB
|
775 |
+
/wQFMAMBAf8wHQYDVR0OBBYEFNq7LqqwDLiIJlF0XG0D08DYj3rWMB8GA1UdIwQY
|
776 |
+
MBaAFNq7LqqwDLiIJlF0XG0D08DYj3rWMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG
|
777 |
+
9w0BAQUFAAOCAgEAMXjmx7XfuJRAyXHEqDXsRh3ChfMoWIawC/yOsjmPRFWrZIRc
|
778 |
+
aanQmjg8+uUfNeVE44B5lGiku8SfPeE0zTBGi1QrlaXv9z+ZhP015s8xxtxqv6fX
|
779 |
+
IwjhmF7DWgh2qaavdy+3YL1ERmrvl/9zlcGO6JP7/TG37FcREUWbMPEaiDnBTzyn
|
780 |
+
ANXH/KttgCJwpQzgXQQpAvvLoJHRfNbDflDVnVi+QTjruXU8FdmbyUqDWcDaU/0z
|
781 |
+
uzYYm4UPFd3uLax2k7nZAY1IEKj79TiG8dsKxr2EoyNB3tZ3b4XUhRxQ4K5RirqN
|
782 |
+
Pnbiucon8l+f725ZDQbYKxek0nxru18UGkiPGkzns0ccjkxFKyDuSN/n3QmOGKja
|
783 |
+
QI2SJhFTYXNd673nxE0pN2HrrDktZy4W1vUAg4WhzH92xH3kt0tm7wNFYGm2DFKW
|
784 |
+
koRepqO1pD4r2czYG0eq8kTaT/kD6PAUyz/zg97QwVTjt+gKN02LIFkDMBmhLMi9
|
785 |
+
ER/frslKxfMnZmaGrGiR/9nmUxwPi1xpZQomyB40w11Re9epnAahNt3ViZS82eQt
|
786 |
+
DF4JbAiXfKM9fJP/P6EUp8+1Xevb2xzEdt+Iub1FBZUbrvxGakyvSOPOrg/Sfuvm
|
787 |
+
bJxPgWp6ZKy7PtXny3YuxadIwVyQD8vIP/rmMuGNG2+k5o7Y+SlIis5z/iw=
|
788 |
+
-----END CERTIFICATE-----
|
789 |
+
|
790 |
+
# Issuer: CN=GeoTrust Universal CA 2 O=GeoTrust Inc.
|
791 |
+
# Subject: CN=GeoTrust Universal CA 2 O=GeoTrust Inc.
|
792 |
+
# Label: "GeoTrust Universal CA 2"
|
793 |
+
# Serial: 1
|
794 |
+
# MD5 Fingerprint: 34:fc:b8:d0:36:db:9e:14:b3:c2:f2:db:8f:e4:94:c7
|
795 |
+
# SHA1 Fingerprint: 37:9a:19:7b:41:85:45:35:0c:a6:03:69:f3:3c:2e:af:47:4f:20:79
|
796 |
+
# SHA256 Fingerprint: a0:23:4f:3b:c8:52:7c:a5:62:8e:ec:81:ad:5d:69:89:5d:a5:68:0d:c9:1d:1c:b8:47:7f:33:f8:78:b9:5b:0b
|
797 |
+
-----BEGIN CERTIFICATE-----
|
798 |
+
MIIFbDCCA1SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBHMQswCQYDVQQGEwJVUzEW
|
799 |
+
MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVy
|
800 |
+
c2FsIENBIDIwHhcNMDQwMzA0MDUwMDAwWhcNMjkwMzA0MDUwMDAwWjBHMQswCQYD
|
801 |
+
VQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1
|
802 |
+
c3QgVW5pdmVyc2FsIENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC
|
803 |
+
AQCzVFLByT7y2dyxUxpZKeexw0Uo5dfR7cXFS6GqdHtXr0om/Nj1XqduGdt0DE81
|
804 |
+
WzILAePb63p3NeqqWuDW6KFXlPCQo3RWlEQwAx5cTiuFJnSCegx2oG9NzkEtoBUG
|
805 |
+
FF+3Qs17j1hhNNwqCPkuwwGmIkQcTAeC5lvO0Ep8BNMZcyfwqph/Lq9O64ceJHdq
|
806 |
+
XbboW0W63MOhBW9Wjo8QJqVJwy7XQYci4E+GymC16qFjwAGXEHm9ADwSbSsVsaxL
|
807 |
+
se4YuU6W3Nx2/zu+z18DwPw76L5GG//aQMJS9/7jOvdqdzXQ2o3rXhhqMcceujwb
|
808 |
+
KNZrVMaqW9eiLBsZzKIC9ptZvTdrhrVtgrrY6slWvKk2WP0+GfPtDCapkzj4T8Fd
|
809 |
+
IgbQl+rhrcZV4IErKIM6+vR7IVEAvlI4zs1meaj0gVbi0IMJR1FbUGrP20gaXT73
|
810 |
+
y/Zl92zxlfgCOzJWgjl6W70viRu/obTo/3+NjN8D8WBOWBFM66M/ECuDmgFz2ZRt
|
811 |
+
hAAnZqzwcEAJQpKtT5MNYQlRJNiS1QuUYbKHsu3/mjX/hVTK7URDrBs8FmtISgoc
|
812 |
+
QIgfksILAAX/8sgCSqSqqcyZlpwvWOB94b67B9xfBHJcMTTD7F8t4D1kkCLm0ey4
|
813 |
+
Lt1ZrtmhN79UNdxzMk+MBB4zsslG8dhcyFVQyWi9qLo2CQIDAQABo2MwYTAPBgNV
|
814 |
+
HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAfBgNV
|
815 |
+
HSMEGDAWgBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAOBgNVHQ8BAf8EBAMCAYYwDQYJ
|
816 |
+
KoZIhvcNAQEFBQADggIBAGbBxiPz2eAubl/oz66wsCVNK/g7WJtAJDday6sWSf+z
|
817 |
+
dXkzoS9tcBc0kf5nfo/sm+VegqlVHy/c1FEHEv6sFj4sNcZj/NwQ6w2jqtB8zNHQ
|
818 |
+
L1EuxBRa3ugZ4T7GzKQp5y6EqgYweHZUcyiYWTjgAA1i00J9IZ+uPTqM1fp3DRgr
|
819 |
+
Fg5fNuH8KrUwJM/gYwx7WBr+mbpCErGR9Hxo4sjoryzqyX6uuyo9DRXcNJW2GHSo
|
820 |
+
ag/HtPQTxORb7QrSpJdMKu0vbBKJPfEncKpqA1Ihn0CoZ1Dy81of398j9tx4TuaY
|
821 |
+
T1U6U+Pv8vSfx3zYWK8pIpe44L2RLrB27FcRz+8pRPPphXpgY+RdM4kX2TGq2tbz
|
822 |
+
GDVyz4crL2MjhF2EjD9XoIj8mZEoJmmZ1I+XRL6O1UixpCgp8RW04eWe3fiPpm8m
|
823 |
+
1wk8OhwRDqZsN/etRIcsKMfYdIKz0G9KV7s1KSegi+ghp4dkNl3M2Basx7InQJJV
|
824 |
+
OCiNUW7dFGdTbHFcJoRNdVq2fmBWqU2t+5sel/MN2dKXVHfaPRK34B7vCAas+YWH
|
825 |
+
6aLcr34YEoP9VhdBLtUpgn2Z9DH2canPLAEnpQW5qrJITirvn5NSUZU8UnOOVkwX
|
826 |
+
QMAJKOSLakhT2+zNVVXxxvjpoixMptEmX36vWkzaH6byHCx+rgIW0lbQL1dTR+iS
|
827 |
+
-----END CERTIFICATE-----
|
828 |
+
|
829 |
+
# Issuer: CN=America Online Root Certification Authority 1 O=America Online Inc.
|
830 |
+
# Subject: CN=America Online Root Certification Authority 1 O=America Online Inc.
|
831 |
+
# Label: "America Online Root Certification Authority 1"
|
832 |
+
# Serial: 1
|
833 |
+
# MD5 Fingerprint: 14:f1:08:ad:9d:fa:64:e2:89:e7:1c:cf:a8:ad:7d:5e
|
834 |
+
# SHA1 Fingerprint: 39:21:c1:15:c1:5d:0e:ca:5c:cb:5b:c4:f0:7d:21:d8:05:0b:56:6a
|
835 |
+
# SHA256 Fingerprint: 77:40:73:12:c6:3a:15:3d:5b:c0:0b:4e:51:75:9c:df:da:c2:37:dc:2a:33:b6:79:46:e9:8e:9b:fa:68:0a:e3
|
836 |
+
-----BEGIN CERTIFICATE-----
|
837 |
+
MIIDpDCCAoygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEc
|
838 |
+
MBoGA1UEChMTQW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBP
|
839 |
+
bmxpbmUgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAxMB4XDTAyMDUyODA2
|
840 |
+
MDAwMFoXDTM3MTExOTIwNDMwMFowYzELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0Ft
|
841 |
+
ZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2EgT25saW5lIFJvb3Qg
|
842 |
+
Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMTCCASIwDQYJKoZIhvcNAQEBBQADggEP
|
843 |
+
ADCCAQoCggEBAKgv6KRpBgNHw+kqmP8ZonCaxlCyfqXfaE0bfA+2l2h9LaaLl+lk
|
844 |
+
hsmj76CGv2BlnEtUiMJIxUo5vxTjWVXlGbR0yLQFOVwWpeKVBeASrlmLojNoWBym
|
845 |
+
1BW32J/X3HGrfpq/m44zDyL9Hy7nBzbvYjnF3cu6JRQj3gzGPTzOggjmZj7aUTsW
|
846 |
+
OqMFf6Dch9Wc/HKpoH145LcxVR5lu9RhsCFg7RAycsWSJR74kEoYeEfffjA3PlAb
|
847 |
+
2xzTa5qGUwew76wGePiEmf4hjUyAtgyC9mZweRrTT6PP8c9GsEsPPt2IYriMqQko
|
848 |
+
O3rHl+Ee5fSfwMCuJKDIodkP1nsmgmkyPacCAwEAAaNjMGEwDwYDVR0TAQH/BAUw
|
849 |
+
AwEB/zAdBgNVHQ4EFgQUAK3Zo/Z59m50qX8zPYEX10zPM94wHwYDVR0jBBgwFoAU
|
850 |
+
AK3Zo/Z59m50qX8zPYEX10zPM94wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEB
|
851 |
+
BQUAA4IBAQB8itEfGDeC4Liwo+1WlchiYZwFos3CYiZhzRAW18y0ZTTQEYqtqKkF
|
852 |
+
Zu90821fnZmv9ov761KyBZiibyrFVL0lvV+uyIbqRizBs73B6UlwGBaXCBOMIOAb
|
853 |
+
LjpHyx7kADCVW/RFo8AasAFOq73AI25jP4BKxQft3OJvx8Fi8eNy1gTIdGcL+oir
|
854 |
+
oQHIb/AUr9KZzVGTfu0uOMe9zkZQPXLjeSWdm4grECDdpbgyn43gKd8hdIaC2y+C
|
855 |
+
MMbHNYaz+ZZfRtsMRf3zUMNvxsNIrUam4SdHCh0Om7bCd39j8uB9Gr784N/Xx6ds
|
856 |
+
sPmuujz9dLQR6FgNgLzTqIA6me11zEZ7
|
857 |
+
-----END CERTIFICATE-----
|
858 |
+
|
859 |
+
# Issuer: CN=America Online Root Certification Authority 2 O=America Online Inc.
|
860 |
+
# Subject: CN=America Online Root Certification Authority 2 O=America Online Inc.
|
861 |
+
# Label: "America Online Root Certification Authority 2"
|
862 |
+
# Serial: 1
|
863 |
+
# MD5 Fingerprint: d6:ed:3c:ca:e2:66:0f:af:10:43:0d:77:9b:04:09:bf
|
864 |
+
# SHA1 Fingerprint: 85:b5:ff:67:9b:0c:79:96:1f:c8:6e:44:22:00:46:13:db:17:92:84
|
865 |
+
# SHA256 Fingerprint: 7d:3b:46:5a:60:14:e5:26:c0:af:fc:ee:21:27:d2:31:17:27:ad:81:1c:26:84:2d:00:6a:f3:73:06:cc:80:bd
|
866 |
+
-----BEGIN CERTIFICATE-----
|
867 |
+
MIIFpDCCA4ygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEc
|
868 |
+
MBoGA1UEChMTQW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBP
|
869 |
+
bmxpbmUgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAyMB4XDTAyMDUyODA2
|
870 |
+
MDAwMFoXDTM3MDkyOTE0MDgwMFowYzELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0Ft
|
871 |
+
ZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2EgT25saW5lIFJvb3Qg
|
872 |
+
Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIP
|
873 |
+
ADCCAgoCggIBAMxBRR3pPU0Q9oyxQcngXssNt79Hc9PwVU3dxgz6sWYFas14tNwC
|
874 |
+
206B89enfHG8dWOgXeMHDEjsJcQDIPT/DjsS/5uN4cbVG7RtIuOx238hZK+GvFci
|
875 |
+
KtZHgVdEglZTvYYUAQv8f3SkWq7xuhG1m1hagLQ3eAkzfDJHA1zEpYNI9FdWboE2
|
876 |
+
JxhP7JsowtS013wMPgwr38oE18aO6lhOqKSlGBxsRZijQdEt0sdtjRnxrXm3gT+9
|
877 |
+
BoInLRBYBbV4Bbkv2wxrkJB+FFk4u5QkE+XRnRTf04JNRvCAOVIyD+OEsnpD8l7e
|
878 |
+
Xz8d3eOyG6ChKiMDbi4BFYdcpnV1x5dhvt6G3NRI270qv0pV2uh9UPu0gBe4lL8B
|
879 |
+
PeraunzgWGcXuVjgiIZGZ2ydEEdYMtA1fHkqkKJaEBEjNa0vzORKW6fIJ/KD3l67
|
880 |
+
Xnfn6KVuY8INXWHQjNJsWiEOyiijzirplcdIz5ZvHZIlyMbGwcEMBawmxNJ10uEq
|
881 |
+
Z8A9W6Wa6897GqidFEXlD6CaZd4vKL3Ob5Rmg0gp2OpljK+T2WSfVVcmv2/LNzGZ
|
882 |
+
o2C7HK2JNDJiuEMhBnIMoVxtRsX6Kc8w3onccVvdtjc+31D1uAclJuW8tf48ArO3
|
883 |
+
+L5DwYcRlJ4jbBeKuIonDFRH8KmzwICMoCfrHRnjB453cMor9H124HhnAgMBAAGj
|
884 |
+
YzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFE1FwWg4u3OpaaEg5+31IqEj
|
885 |
+
FNeeMB8GA1UdIwQYMBaAFE1FwWg4u3OpaaEg5+31IqEjFNeeMA4GA1UdDwEB/wQE
|
886 |
+
AwIBhjANBgkqhkiG9w0BAQUFAAOCAgEAZ2sGuV9FOypLM7PmG2tZTiLMubekJcmn
|
887 |
+
xPBUlgtk87FYT15R/LKXeydlwuXK5w0MJXti4/qftIe3RUavg6WXSIylvfEWK5t2
|
888 |
+
LHo1YGwRgJfMqZJS5ivmae2p+DYtLHe/YUjRYwu5W1LtGLBDQiKmsXeu3mnFzccc
|
889 |
+
obGlHBD7GL4acN3Bkku+KVqdPzW+5X1R+FXgJXUjhx5c3LqdsKyzadsXg8n33gy8
|
890 |
+
CNyRnqjQ1xU3c6U1uPx+xURABsPr+CKAXEfOAuMRn0T//ZoyzH1kUQ7rVyZ2OuMe
|
891 |
+
IjzCpjbdGe+n/BLzJsBZMYVMnNjP36TMzCmT/5RtdlwTCJfy7aULTd3oyWgOZtMA
|
892 |
+
DjMSW7yV5TKQqLPGbIOtd+6Lfn6xqavT4fG2wLHqiMDn05DpKJKUe2h7lyoKZy2F
|
893 |
+
AjgQ5ANh1NolNscIWC2hp1GvMApJ9aZphwctREZ2jirlmjvXGKL8nDgQzMY70rUX
|
894 |
+
Om/9riW99XJZZLF0KjhfGEzfz3EEWjbUvy+ZnOjZurGV5gJLIaFb1cFPj65pbVPb
|
895 |
+
AZO1XB4Y3WRayhgoPmMEEf0cjQAPuDffZ4qdZqkCapH/E8ovXYO8h5Ns3CRRFgQl
|
896 |
+
Zvqz2cK6Kb6aSDiCmfS/O0oxGfm/jiEzFMpPVF/7zvuPcX/9XhmgD0uRuMRUvAaw
|
897 |
+
RY8mkaKO/qk=
|
898 |
+
-----END CERTIFICATE-----
|
899 |
+
|
900 |
+
# Issuer: CN=AAA Certificate Services O=Comodo CA Limited
|
901 |
+
# Subject: CN=AAA Certificate Services O=Comodo CA Limited
|
902 |
+
# Label: "Comodo AAA Services root"
|
903 |
+
# Serial: 1
|
904 |
+
# MD5 Fingerprint: 49:79:04:b0:eb:87:19:ac:47:b0:bc:11:51:9b:74:d0
|
905 |
+
# SHA1 Fingerprint: d1:eb:23:a4:6d:17:d6:8f:d9:25:64:c2:f1:f1:60:17:64:d8:e3:49
|
906 |
+
# SHA256 Fingerprint: d7:a7:a0:fb:5d:7e:27:31:d7:71:e9:48:4e:bc:de:f7:1d:5f:0c:3e:0a:29:48:78:2b:c8:3e:e0:ea:69:9e:f4
|
907 |
+
-----BEGIN CERTIFICATE-----
|
908 |
+
MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEb
|
909 |
+
MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow
|
910 |
+
GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmlj
|
911 |
+
YXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAwMFoXDTI4MTIzMTIzNTk1OVowezEL
|
912 |
+
MAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE
|
913 |
+
BwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNVBAMM
|
914 |
+
GEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEP
|
915 |
+
ADCCAQoCggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQua
|
916 |
+
BtDFcCLNSS1UY8y2bmhGC1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe
|
917 |
+
3M/vg4aijJRPn2jymJBGhCfHdr/jzDUsi14HZGWCwEiwqJH5YZ92IFCokcdmtet4
|
918 |
+
YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszWY19zjNoFmag4qMsXeDZR
|
919 |
+
rOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjHYpy+g8cm
|
920 |
+
ez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQU
|
921 |
+
oBEKIz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF
|
922 |
+
MAMBAf8wewYDVR0fBHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20v
|
923 |
+
QUFBQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29t
|
924 |
+
b2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2VzLmNybDANBgkqhkiG9w0BAQUF
|
925 |
+
AAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm7l3sAg9g1o1Q
|
926 |
+
GE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz
|
927 |
+
Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2
|
928 |
+
G9w84FoVxp7Z8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsi
|
929 |
+
l2D4kF501KKaU73yqWjgom7C12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3
|
930 |
+
smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg==
|
931 |
+
-----END CERTIFICATE-----
|
932 |
+
|
933 |
+
# Issuer: CN=Secure Certificate Services O=Comodo CA Limited
|
934 |
+
# Subject: CN=Secure Certificate Services O=Comodo CA Limited
|
935 |
+
# Label: "Comodo Secure Services root"
|
936 |
+
# Serial: 1
|
937 |
+
# MD5 Fingerprint: d3:d9:bd:ae:9f:ac:67:24:b3:c8:1b:52:e1:b9:a9:bd
|
938 |
+
# SHA1 Fingerprint: 4a:65:d5:f4:1d:ef:39:b8:b8:90:4a:4a:d3:64:81:33:cf:c7:a1:d1
|
939 |
+
# SHA256 Fingerprint: bd:81:ce:3b:4f:65:91:d1:1a:67:b5:fc:7a:47:fd:ef:25:52:1b:f9:aa:4e:18:b9:e3:df:2e:34:a7:80:3b:e8
|
940 |
+
-----BEGIN CERTIFICATE-----
|
941 |
+
MIIEPzCCAyegAwIBAgIBATANBgkqhkiG9w0BAQUFADB+MQswCQYDVQQGEwJHQjEb
|
942 |
+
MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow
|
943 |
+
GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEkMCIGA1UEAwwbU2VjdXJlIENlcnRp
|
944 |
+
ZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAwMFoXDTI4MTIzMTIzNTk1OVow
|
945 |
+
fjELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G
|
946 |
+
A1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxJDAiBgNV
|
947 |
+
BAMMG1NlY3VyZSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEB
|
948 |
+
BQADggEPADCCAQoCggEBAMBxM4KK0HDrc4eCQNUd5MvJDkKQ+d40uaG6EfQlhfPM
|
949 |
+
cm3ye5drswfxdySRXyWP9nQ95IDC+DwN879A6vfIUtFyb+/Iq0G4bi4XKpVpDM3S
|
950 |
+
HpR7LZQdqnXXs5jLrLxkU0C8j6ysNstcrbvd4JQX7NFc0L/vpZXJkMWwrPsbQ996
|
951 |
+
CF23uPJAGysnnlDOXmWCiIxe004MeuoIkbY2qitC++rCoznl2yY4rYsK7hljxxwk
|
952 |
+
3wN42ubqwUcaCwtGCd0C/N7Lh1/XMGNooa7cMqG6vv5Eq2i2pRcV/b3Vp6ea5EQz
|
953 |
+
6YiO/O1R65NxTq0B50SOqy3LqP4BSUjwwN3HaNiS/j0CAwEAAaOBxzCBxDAdBgNV
|
954 |
+
HQ4EFgQUPNiTiMLAggnMAZkGkyDpnnAJY08wDgYDVR0PAQH/BAQDAgEGMA8GA1Ud
|
955 |
+
EwEB/wQFMAMBAf8wgYEGA1UdHwR6MHgwO6A5oDeGNWh0dHA6Ly9jcmwuY29tb2Rv
|
956 |
+
Y2EuY29tL1NlY3VyZUNlcnRpZmljYXRlU2VydmljZXMuY3JsMDmgN6A1hjNodHRw
|
957 |
+
Oi8vY3JsLmNvbW9kby5uZXQvU2VjdXJlQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmww
|
958 |
+
DQYJKoZIhvcNAQEFBQADggEBAIcBbSMdflsXfcFhMs+P5/OKlFlm4J4oqF7Tt/Q0
|
959 |
+
5qo5spcWxYJvMqTpjOev/e/C6LlLqqP05tqNZSH7uoDrJiiFGv45jN5bBAS0VPmj
|
960 |
+
Z55B+glSzAVIqMk/IQQezkhr/IXownuvf7fM+F86/TXGDe+X3EyrEeFryzHRbPtI
|
961 |
+
gKvcnDe4IRRLDXE97IMzbtFuMhbsmMcWi1mmNKsFVy2T96oTy9IT4rcuO81rUBcJ
|
962 |
+
aD61JlfutuC23bkpgHl9j6PwpCikFcSF9CfUa7/lXORlAnZUtOM3ZiTTGWHIUhDl
|
963 |
+
izeauan5Hb/qmZJhlv8BzaFfDbxxvA6sCx1HRR3B7Hzs/Sk=
|
964 |
+
-----END CERTIFICATE-----
|
965 |
+
|
966 |
+
# Issuer: CN=Trusted Certificate Services O=Comodo CA Limited
|
967 |
+
# Subject: CN=Trusted Certificate Services O=Comodo CA Limited
|
968 |
+
# Label: "Comodo Trusted Services root"
|
969 |
+
# Serial: 1
|
970 |
+
# MD5 Fingerprint: 91:1b:3f:6e:cd:9e:ab:ee:07:fe:1f:71:d2:b3:61:27
|
971 |
+
# SHA1 Fingerprint: e1:9f:e3:0e:8b:84:60:9e:80:9b:17:0d:72:a8:c5:ba:6e:14:09:bd
|
972 |
+
# SHA256 Fingerprint: 3f:06:e5:56:81:d4:96:f5:be:16:9e:b5:38:9f:9f:2b:8f:f6:1e:17:08:df:68:81:72:48:49:cd:5d:27:cb:69
|
973 |
+
-----BEGIN CERTIFICATE-----
|
974 |
+
MIIEQzCCAyugAwIBAgIBATANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJHQjEb
|
975 |
+
MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow
|
976 |
+
GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDElMCMGA1UEAwwcVHJ1c3RlZCBDZXJ0
|
977 |
+
aWZpY2F0ZSBTZXJ2aWNlczAeFw0wNDAxMDEwMDAwMDBaFw0yODEyMzEyMzU5NTla
|
978 |
+
MH8xCzAJBgNVBAYTAkdCMRswGQYDVQQIDBJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAO
|
979 |
+
BgNVBAcMB1NhbGZvcmQxGjAYBgNVBAoMEUNvbW9kbyBDQSBMaW1pdGVkMSUwIwYD
|
980 |
+
VQQDDBxUcnVzdGVkIENlcnRpZmljYXRlIFNlcnZpY2VzMIIBIjANBgkqhkiG9w0B
|
981 |
+
AQEFAAOCAQ8AMIIBCgKCAQEA33FvNlhTWvI2VFeAxHQIIO0Yfyod5jWaHiWsnOWW
|
982 |
+
fnJSoBVC21ndZHoa0Lh73TkVvFVIxO06AOoxEbrycXQaZ7jPM8yoMa+j49d/vzMt
|
983 |
+
TGo87IvDktJTdyR0nAducPy9C1t2ul/y/9c3S0pgePfw+spwtOpZqqPOSC+pw7IL
|
984 |
+
fhdyFgymBwwbOM/JYrc/oJOlh0Hyt3BAd9i+FHzjqMB6juljatEPmsbS9Is6FARW
|
985 |
+
1O24zG71++IsWL1/T2sr92AkWCTOJu80kTrV44HQsvAEAtdbtz6SrGsSivnkBbA7
|
986 |
+
kUlcsutT6vifR4buv5XAwAaf0lteERv0xwQ1KdJVXOTt6wIDAQABo4HJMIHGMB0G
|
987 |
+
A1UdDgQWBBTFe1i97doladL3WRaoszLAeydb9DAOBgNVHQ8BAf8EBAMCAQYwDwYD
|
988 |
+
VR0TAQH/BAUwAwEB/zCBgwYDVR0fBHwwejA8oDqgOIY2aHR0cDovL2NybC5jb21v
|
989 |
+
ZG9jYS5jb20vVHJ1c3RlZENlcnRpZmljYXRlU2VydmljZXMuY3JsMDqgOKA2hjRo
|
990 |
+
dHRwOi8vY3JsLmNvbW9kby5uZXQvVHJ1c3RlZENlcnRpZmljYXRlU2VydmljZXMu
|
991 |
+
Y3JsMA0GCSqGSIb3DQEBBQUAA4IBAQDIk4E7ibSvuIQSTI3S8NtwuleGFTQQuS9/
|
992 |
+
HrCoiWChisJ3DFBKmwCL2Iv0QeLQg4pKHBQGsKNoBXAxMKdTmw7pSqBYaWcOrp32
|
993 |
+
pSxBvzwGa+RZzG0Q8ZZvH9/0BAKkn0U+yNj6NkZEUD+Cl5EfKNsYEYwq5GWDVxIS
|
994 |
+
jBc/lDb+XbDABHcTuPQV1T84zJQ6VdCsmPW6AF/ghhmBeC8owH7TzEIK9a5QoNE+
|
995 |
+
xqFx7D+gIIxmOom0jtTYsU0lR+4viMi14QVFwL4Ucd56/Y57fU0IlqUSc/Atyjcn
|
996 |
+
dBInTMu2l+nZrghtWjlA3QVHdWpaIbOjGM9O9y5Xt5hwXsjEeLBi
|
997 |
+
-----END CERTIFICATE-----
|
998 |
+
|
999 |
+
# Issuer: CN=UTN - DATACorp SGC O=The USERTRUST Network OU=http://www.usertrust.com
|
1000 |
+
# Subject: CN=UTN - DATACorp SGC O=The USERTRUST Network OU=http://www.usertrust.com
|
1001 |
+
# Label: "UTN DATACorp SGC Root CA"
|
1002 |
+
# Serial: 91374294542884689855167577680241077609
|
1003 |
+
# MD5 Fingerprint: b3:a5:3e:77:21:6d:ac:4a:c0:c9:fb:d5:41:3d:ca:06
|
1004 |
+
# SHA1 Fingerprint: 58:11:9f:0e:12:82:87:ea:50:fd:d9:87:45:6f:4f:78:dc:fa:d6:d4
|
1005 |
+
# SHA256 Fingerprint: 85:fb:2f:91:dd:12:27:5a:01:45:b6:36:53:4f:84:02:4a:d6:8b:69:b8:ee:88:68:4f:f7:11:37:58:05:b3:48
|
1006 |
+
-----BEGIN CERTIFICATE-----
|
1007 |
+
MIIEXjCCA0agAwIBAgIQRL4Mi1AAIbQR0ypoBqmtaTANBgkqhkiG9w0BAQUFADCB
|
1008 |
+
kzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug
|
1009 |
+
Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho
|
1010 |
+
dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xGzAZBgNVBAMTElVUTiAtIERBVEFDb3Jw
|
1011 |
+
IFNHQzAeFw05OTA2MjQxODU3MjFaFw0xOTA2MjQxOTA2MzBaMIGTMQswCQYDVQQG
|
1012 |
+
EwJVUzELMAkGA1UECBMCVVQxFzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4wHAYD
|
1013 |
+
VQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cu
|
1014 |
+
dXNlcnRydXN0LmNvbTEbMBkGA1UEAxMSVVROIC0gREFUQUNvcnAgU0dDMIIBIjAN
|
1015 |
+
BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3+5YEKIrblXEjr8uRgnn4AgPLit6
|
1016 |
+
E5Qbvfa2gI5lBZMAHryv4g+OGQ0SR+ysraP6LnD43m77VkIVni5c7yPeIbkFdicZ
|
1017 |
+
D0/Ww5y0vpQZY/KmEQrrU0icvvIpOxboGqBMpsn0GFlowHDyUwDAXlCCpVZvNvlK
|
1018 |
+
4ESGoE1O1kduSUrLZ9emxAW5jh70/P/N5zbgnAVssjMiFdC04MwXwLLA9P4yPykq
|
1019 |
+
lXvY8qdOD1R8oQ2AswkDwf9c3V6aPryuvEeKaq5xyh+xKrhfQgUL7EYw0XILyulW
|
1020 |
+
bfXv33i+Ybqypa4ETLyorGkVl73v67SMvzX41MPRKA5cOp9wGDMgd8SirwIDAQAB
|
1021 |
+
o4GrMIGoMAsGA1UdDwQEAwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRT
|
1022 |
+
MtGzz3/64PGgXYVOktKeRR20TzA9BgNVHR8ENjA0MDKgMKAuhixodHRwOi8vY3Js
|
1023 |
+
LnVzZXJ0cnVzdC5jb20vVVROLURBVEFDb3JwU0dDLmNybDAqBgNVHSUEIzAhBggr
|
1024 |
+
BgEFBQcDAQYKKwYBBAGCNwoDAwYJYIZIAYb4QgQBMA0GCSqGSIb3DQEBBQUAA4IB
|
1025 |
+
AQAnNZcAiosovcYzMB4p/OL31ZjUQLtgyr+rFywJNn9Q+kHcrpY6CiM+iVnJowft
|
1026 |
+
Gzet/Hy+UUla3joKVAgWRcKZsYfNjGjgaQPpxE6YsjuMFrMOoAyYUJuTqXAJyCyj
|
1027 |
+
j98C5OBxOvG0I3KgqgHf35g+FFCgMSa9KOlaMCZ1+XtgHI3zzVAmbQQnmt/VDUVH
|
1028 |
+
KWss5nbZqSl9Mt3JNjy9rjXxEZ4du5A/EkdOjtd+D2JzHVImOBwYSf0wdJrE5SIv
|
1029 |
+
2MCN7ZF6TACPcn9d2t0bi0Vr591pl6jFVkwPDPafepE39peC4N1xaf92P2BNPM/3
|
1030 |
+
mfnGV/TJVTl4uix5yaaIK/QI
|
1031 |
+
-----END CERTIFICATE-----
|
1032 |
+
|
1033 |
+
# Issuer: CN=UTN-USERFirst-Hardware O=The USERTRUST Network OU=http://www.usertrust.com
|
1034 |
+
# Subject: CN=UTN-USERFirst-Hardware O=The USERTRUST Network OU=http://www.usertrust.com
|
1035 |
+
# Label: "UTN USERFirst Hardware Root CA"
|
1036 |
+
# Serial: 91374294542884704022267039221184531197
|
1037 |
+
# MD5 Fingerprint: 4c:56:41:e5:0d:bb:2b:e8:ca:a3:ed:18:08:ad:43:39
|
1038 |
+
# SHA1 Fingerprint: 04:83:ed:33:99:ac:36:08:05:87:22:ed:bc:5e:46:00:e3:be:f9:d7
|
1039 |
+
# SHA256 Fingerprint: 6e:a5:47:41:d0:04:66:7e:ed:1b:48:16:63:4a:a3:a7:9e:6e:4b:96:95:0f:82:79:da:fc:8d:9b:d8:81:21:37
|
1040 |
+
-----BEGIN CERTIFICATE-----
|
1041 |
+
MIIEdDCCA1ygAwIBAgIQRL4Mi1AAJLQR0zYq/mUK/TANBgkqhkiG9w0BAQUFADCB
|
1042 |
+
lzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug
|
1043 |
+
Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho
|
1044 |
+
dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3Qt
|
1045 |
+
SGFyZHdhcmUwHhcNOTkwNzA5MTgxMDQyWhcNMTkwNzA5MTgxOTIyWjCBlzELMAkG
|
1046 |
+
A1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEe
|
1047 |
+
MBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8v
|
1048 |
+
d3d3LnVzZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdh
|
1049 |
+
cmUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCx98M4P7Sof885glFn
|
1050 |
+
0G2f0v9Y8+efK+wNiVSZuTiZFvfgIXlIwrthdBKWHTxqctU8EGc6Oe0rE81m65UJ
|
1051 |
+
M6Rsl7HoxuzBdXmcRl6Nq9Bq/bkqVRcQVLMZ8Jr28bFdtqdt++BxF2uiiPsA3/4a
|
1052 |
+
MXcMmgF6sTLjKwEHOG7DpV4jvEWbe1DByTCP2+UretNb+zNAHqDVmBe8i4fDidNd
|
1053 |
+
oI6yqqr2jmmIBsX6iSHzCJ1pLgkzmykNRg+MzEk0sGlRvfkGzWitZky8PqxhvQqI
|
1054 |
+
DsjfPe58BEydCl5rkdbux+0ojatNh4lz0G6k0B4WixThdkQDf2Os5M1JnMWS9Ksy
|
1055 |
+
oUhbAgMBAAGjgbkwgbYwCwYDVR0PBAQDAgHGMA8GA1UdEwEB/wQFMAMBAf8wHQYD
|
1056 |
+
VR0OBBYEFKFyXyYbKJhDlV0HN9WFlp1L0sNFMEQGA1UdHwQ9MDswOaA3oDWGM2h0
|
1057 |
+
dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9VVE4tVVNFUkZpcnN0LUhhcmR3YXJlLmNy
|
1058 |
+
bDAxBgNVHSUEKjAoBggrBgEFBQcDAQYIKwYBBQUHAwUGCCsGAQUFBwMGBggrBgEF
|
1059 |
+
BQcDBzANBgkqhkiG9w0BAQUFAAOCAQEARxkP3nTGmZev/K0oXnWO6y1n7k57K9cM
|
1060 |
+
//bey1WiCuFMVGWTYGufEpytXoMs61quwOQt9ABjHbjAbPLPSbtNk28Gpgoiskli
|
1061 |
+
CE7/yMgUsogWXecB5BKV5UU0s4tpvc+0hY91UZ59Ojg6FEgSxvunOxqNDYJAB+gE
|
1062 |
+
CJChicsZUN/KHAG8HQQZexB2lzvukJDKxA4fFm517zP4029bHpbj4HR3dHuKom4t
|
1063 |
+
3XbWOTCC8KucUvIqx69JXn7HaOWCgchqJ/kniCrVWFCVH/A7HFe7fRQ5YiuayZSS
|
1064 |
+
KqMiDP+JJn1fIytH1xUdqWqeUQ0qUZ6B+dQ7XnASfxAynB67nfhmqA==
|
1065 |
+
-----END CERTIFICATE-----
|
1066 |
+
|
1067 |
+
# Issuer: CN=XRamp Global Certification Authority O=XRamp Security Services Inc OU=www.xrampsecurity.com
|
1068 |
+
# Subject: CN=XRamp Global Certification Authority O=XRamp Security Services Inc OU=www.xrampsecurity.com
|
1069 |
+
# Label: "XRamp Global CA Root"
|
1070 |
+
# Serial: 107108908803651509692980124233745014957
|
1071 |
+
# MD5 Fingerprint: a1:0b:44:b3:ca:10:d8:00:6e:9d:0f:d8:0f:92:0a:d1
|
1072 |
+
# SHA1 Fingerprint: b8:01:86:d1:eb:9c:86:a5:41:04:cf:30:54:f3:4c:52:b7:e5:58:c6
|
1073 |
+
# SHA256 Fingerprint: ce:cd:dc:90:50:99:d8:da:df:c5:b1:d2:09:b7:37:cb:e2:c1:8c:fb:2c:10:c0:ff:0b:cf:0d:32:86:fc:1a:a2
|
1074 |
+
-----BEGIN CERTIFICATE-----
|
1075 |
+
MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCB
|
1076 |
+
gjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEk
|
1077 |
+
MCIGA1UEChMbWFJhbXAgU2VjdXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRY
|
1078 |
+
UmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQxMTAxMTcx
|
1079 |
+
NDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3
|
1080 |
+
dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkgU2Vy
|
1081 |
+
dmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB
|
1082 |
+
dXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS6
|
1083 |
+
38eMpSe2OAtp87ZOqCwuIR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCP
|
1084 |
+
KZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMxfoArtYzAQDsRhtDLooY2YKTVMIJt2W7Q
|
1085 |
+
DxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FEzG+gSqmUsE3a56k0enI4
|
1086 |
+
qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqsAxcZZPRa
|
1087 |
+
JSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNVi
|
1088 |
+
PvryxS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0P
|
1089 |
+
BAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASs
|
1090 |
+
jVy16bYbMDYGA1UdHwQvMC0wK6ApoCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0
|
1091 |
+
eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQEwDQYJKoZIhvcNAQEFBQAD
|
1092 |
+
ggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc/Kh4ZzXxHfAR
|
1093 |
+
vbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt
|
1094 |
+
qZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLa
|
1095 |
+
IR9NmXmd4c8nnxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSy
|
1096 |
+
i6mx5O+aGtA9aZnuqCij4Tyz8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQ
|
1097 |
+
O+7ETPTsJ3xCwnR8gooJybQDJbw=
|
1098 |
+
-----END CERTIFICATE-----
|
1099 |
+
|
1100 |
+
# Issuer: O=The Go Daddy Group, Inc. OU=Go Daddy Class 2 Certification Authority
|
1101 |
+
# Subject: O=The Go Daddy Group, Inc. OU=Go Daddy Class 2 Certification Authority
|
1102 |
+
# Label: "Go Daddy Class 2 CA"
|
1103 |
+
# Serial: 0
|
1104 |
+
# MD5 Fingerprint: 91:de:06:25:ab:da:fd:32:17:0c:bb:25:17:2a:84:67
|
1105 |
+
# SHA1 Fingerprint: 27:96:ba:e6:3f:18:01:e2:77:26:1b:a0:d7:77:70:02:8f:20:ee:e4
|
1106 |
+
# SHA256 Fingerprint: c3:84:6b:f2:4b:9e:93:ca:64:27:4c:0e:c6:7c:1e:cc:5e:02:4f:fc:ac:d2:d7:40:19:35:0e:81:fe:54:6a:e4
|
1107 |
+
-----BEGIN CERTIFICATE-----
|
1108 |
+
MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEh
|
1109 |
+
MB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBE
|
1110 |
+
YWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3
|
1111 |
+
MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkGA1UEBhMCVVMxITAfBgNVBAoTGFRo
|
1112 |
+
ZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28gRGFkZHkgQ2xhc3Mg
|
1113 |
+
MiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQADggEN
|
1114 |
+
ADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCA
|
1115 |
+
PVYYYwhv2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6w
|
1116 |
+
wdhFJ2+qN1j3hybX2C32qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXi
|
1117 |
+
EqITLdiOr18SPaAIBQi2XKVlOARFmR6jYGB0xUGlcmIbYsUfb18aQr4CUWWoriMY
|
1118 |
+
avx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmYvLEHZ6IVDd2gWMZEewo+
|
1119 |
+
YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0OBBYEFNLE
|
1120 |
+
sNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h
|
1121 |
+
/t2oatTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5
|
1122 |
+
IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmlj
|
1123 |
+
YXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQAD
|
1124 |
+
ggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wimPQoZ+YeAEW5p5JYXMP80kWNy
|
1125 |
+
OO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKtI3lpjbi2Tc7P
|
1126 |
+
TMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ
|
1127 |
+
HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mER
|
1128 |
+
dEr/VxqHD3VILs9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5Cuf
|
1129 |
+
ReYNnyicsbkqWletNw+vHX/bvZ8=
|
1130 |
+
-----END CERTIFICATE-----
|
1131 |
+
|
1132 |
+
# Issuer: O=Starfield Technologies, Inc. OU=Starfield Class 2 Certification Authority
|
1133 |
+
# Subject: O=Starfield Technologies, Inc. OU=Starfield Class 2 Certification Authority
|
1134 |
+
# Label: "Starfield Class 2 CA"
|
1135 |
+
# Serial: 0
|
1136 |
+
# MD5 Fingerprint: 32:4a:4b:bb:c8:63:69:9b:be:74:9a:c6:dd:1d:46:24
|
1137 |
+
# SHA1 Fingerprint: ad:7e:1c:28:b0:64:ef:8f:60:03:40:20:14:c3:d0:e3:37:0e:b5:8a
|
1138 |
+
# SHA256 Fingerprint: 14:65:fa:20:53:97:b8:76:fa:a6:f0:a9:95:8e:55:90:e4:0f:cc:7f:aa:4f:b7:c2:c8:67:75:21:fb:5f:b6:58
|
1139 |
+
-----BEGIN CERTIFICATE-----
|
1140 |
+
MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzEl
|
1141 |
+
MCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMp
|
1142 |
+
U3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQw
|
1143 |
+
NjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBoMQswCQYDVQQGEwJVUzElMCMGA1UE
|
1144 |
+
ChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZp
|
1145 |
+
ZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqGSIb3
|
1146 |
+
DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf
|
1147 |
+
8MOh2tTYbitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN
|
1148 |
+
+lq2cwQlZut3f+dZxkqZJRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0
|
1149 |
+
X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVmepsZGD3/cVE8MC5fvj13c7JdBmzDI1aa
|
1150 |
+
K4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSNF4Azbl5KXZnJHoe0nRrA
|
1151 |
+
1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HFMIHCMB0G
|
1152 |
+
A1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fR
|
1153 |
+
zt0fhvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0
|
1154 |
+
YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBD
|
1155 |
+
bGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8w
|
1156 |
+
DQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGsafPzWdqbAYcaT1epoXkJKtv3
|
1157 |
+
L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLMPUxA2IGvd56D
|
1158 |
+
eruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl
|
1159 |
+
xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynp
|
1160 |
+
VSJYACPq4xJDKVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEY
|
1161 |
+
WQPJIrSPnNVeKtelttQKbfi3QBFGmh95DmK/D5fs4C8fF5Q=
|
1162 |
+
-----END CERTIFICATE-----
|
1163 |
+
|
1164 |
+
# Issuer: CN=StartCom Certification Authority O=StartCom Ltd. OU=Secure Digital Certificate Signing
|
1165 |
+
# Subject: CN=StartCom Certification Authority O=StartCom Ltd. OU=Secure Digital Certificate Signing
|
1166 |
+
# Label: "StartCom Certification Authority"
|
1167 |
+
# Serial: 1
|
1168 |
+
# MD5 Fingerprint: 22:4d:8f:8a:fc:f7:35:c2:bb:57:34:90:7b:8b:22:16
|
1169 |
+
# SHA1 Fingerprint: 3e:2b:f7:f2:03:1b:96:f3:8c:e6:c4:d8:a8:5d:3e:2d:58:47:6a:0f
|
1170 |
+
# SHA256 Fingerprint: c7:66:a9:be:f2:d4:07:1c:86:3a:31:aa:49:20:e8:13:b2:d1:98:60:8c:b7:b7:cf:e2:11:43:b8:36:df:09:ea
|
1171 |
+
-----BEGIN CERTIFICATE-----
|
1172 |
+
MIIHyTCCBbGgAwIBAgIBATANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJJTDEW
|
1173 |
+
MBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwg
|
1174 |
+
Q2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNh
|
1175 |
+
dGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0NjM2WhcNMzYwOTE3MTk0NjM2WjB9
|
1176 |
+
MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMi
|
1177 |
+
U2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMgU3Rh
|
1178 |
+
cnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUA
|
1179 |
+
A4ICDwAwggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZk
|
1180 |
+
pMyONvg45iPwbm2xPN1yo4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rf
|
1181 |
+
OQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/C
|
1182 |
+
Ji/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/deMotHweXMAEtcnn6RtYT
|
1183 |
+
Kqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt2PZE4XNi
|
1184 |
+
HzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMM
|
1185 |
+
Av+Z6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w
|
1186 |
+
+2OqqGwaVLRcJXrJosmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+
|
1187 |
+
Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3
|
1188 |
+
Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVcUjyJthkqcwEKDwOzEmDyei+B
|
1189 |
+
26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT37uMdBNSSwID
|
1190 |
+
AQABo4ICUjCCAk4wDAYDVR0TBAUwAwEB/zALBgNVHQ8EBAMCAa4wHQYDVR0OBBYE
|
1191 |
+
FE4L7xqkQFulF2mHMMo0aEPQQa7yMGQGA1UdHwRdMFswLKAqoCiGJmh0dHA6Ly9j
|
1192 |
+
ZXJ0LnN0YXJ0Y29tLm9yZy9zZnNjYS1jcmwuY3JsMCugKaAnhiVodHRwOi8vY3Js
|
1193 |
+
LnN0YXJ0Y29tLm9yZy9zZnNjYS1jcmwuY3JsMIIBXQYDVR0gBIIBVDCCAVAwggFM
|
1194 |
+
BgsrBgEEAYG1NwEBATCCATswLwYIKwYBBQUHAgEWI2h0dHA6Ly9jZXJ0LnN0YXJ0
|
1195 |
+
Y29tLm9yZy9wb2xpY3kucGRmMDUGCCsGAQUFBwIBFilodHRwOi8vY2VydC5zdGFy
|
1196 |
+
dGNvbS5vcmcvaW50ZXJtZWRpYXRlLnBkZjCB0AYIKwYBBQUHAgIwgcMwJxYgU3Rh
|
1197 |
+
cnQgQ29tbWVyY2lhbCAoU3RhcnRDb20pIEx0ZC4wAwIBARqBl0xpbWl0ZWQgTGlh
|
1198 |
+
YmlsaXR5LCByZWFkIHRoZSBzZWN0aW9uICpMZWdhbCBMaW1pdGF0aW9ucyogb2Yg
|
1199 |
+
dGhlIFN0YXJ0Q29tIENlcnRpZmljYXRpb24gQXV0aG9yaXR5IFBvbGljeSBhdmFp
|
1200 |
+
bGFibGUgYXQgaHR0cDovL2NlcnQuc3RhcnRjb20ub3JnL3BvbGljeS5wZGYwEQYJ
|
1201 |
+
YIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilTdGFydENvbSBGcmVlIFNT
|
1202 |
+
TCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQUFAAOCAgEAFmyZ
|
1203 |
+
9GYMNPXQhV59CuzaEE44HF7fpiUFS5Eyweg78T3dRAlbB0mKKctmArexmvclmAk8
|
1204 |
+
jhvh3TaHK0u7aNM5Zj2gJsfyOZEdUauCe37Vzlrk4gNXcGmXCPleWKYK34wGmkUW
|
1205 |
+
FjgKXlf2Ysd6AgXmvB618p70qSmD+LIU424oh0TDkBreOKk8rENNZEXO3SipXPJz
|
1206 |
+
ewT4F+irsfMuXGRuczE6Eri8sxHkfY+BUZo7jYn0TZNmezwD7dOaHZrzZVD1oNB1
|
1207 |
+
ny+v8OqCQ5j4aZyJecRDjkZy42Q2Eq/3JR44iZB3fsNrarnDy0RLrHiQi+fHLB5L
|
1208 |
+
EUTINFInzQpdn4XBidUaePKVEFMy3YCEZnXZtWgo+2EuvoSoOMCZEoalHmdkrQYu
|
1209 |
+
L6lwhceWD3yJZfWOQ1QOq92lgDmUYMA0yZZwLKMS9R9Ie70cfmu3nZD0Ijuu+Pwq
|
1210 |
+
yvqCUqDvr0tVk+vBtfAii6w0TiYiBKGHLHVKt+V9E9e4DGTANtLJL4YSjCMJwRuC
|
1211 |
+
O3NJo2pXh5Tl1njFmUNj403gdy3hZZlyaQQaRwnmDwFWJPsfvw55qVguucQJAX6V
|
1212 |
+
um0ABj6y6koQOdjQK/W/7HW/lwLFCRsI3FU34oH7N4RDYiDK51ZLZer+bMEkkySh
|
1213 |
+
NOsF/5oirpt9P/FlUQqmMGqz9IgcgA38corog14=
|
1214 |
+
-----END CERTIFICATE-----
|
1215 |
+
|
1216 |
+
# Issuer: CN=DigiCert Assured ID Root CA O=DigiCert Inc OU=www.digicert.com
|
1217 |
+
# Subject: CN=DigiCert Assured ID Root CA O=DigiCert Inc OU=www.digicert.com
|
1218 |
+
# Label: "DigiCert Assured ID Root CA"
|
1219 |
+
# Serial: 17154717934120587862167794914071425081
|
1220 |
+
# MD5 Fingerprint: 87:ce:0b:7b:2a:0e:49:00:e1:58:71:9b:37:a8:93:72
|
1221 |
+
# SHA1 Fingerprint: 05:63:b8:63:0d:62:d7:5a:bb:c8:ab:1e:4b:df:b5:a8:99:b2:4d:43
|
1222 |
+
# SHA256 Fingerprint: 3e:90:99:b5:01:5e:8f:48:6c:00:bc:ea:9d:11:1e:e7:21:fa:ba:35:5a:89:bc:f1:df:69:56:1e:3d:c6:32:5c
|
1223 |
+
-----BEGIN CERTIFICATE-----
|
1224 |
+
MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBl
|
1225 |
+
MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
|
1226 |
+
d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJv
|
1227 |
+
b3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzExMTEwMDAwMDAwWjBlMQswCQYDVQQG
|
1228 |
+
EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl
|
1229 |
+
cnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwggEi
|
1230 |
+
MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7c
|
1231 |
+
JpSIqvTO9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYP
|
1232 |
+
mDI2dsze3Tyoou9q+yHyUmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+
|
1233 |
+
wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4
|
1234 |
+
VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpyoeb6pNnVFzF1roV9Iq4/
|
1235 |
+
AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whfGHdPAgMB
|
1236 |
+
AAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW
|
1237 |
+
BBRF66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYun
|
1238 |
+
pyGd823IDzANBgkqhkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRC
|
1239 |
+
dWKuh+vy1dneVrOfzM4UKLkNl2BcEkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTf
|
1240 |
+
fwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38FnSbNd67IJKusm7Xi+fT8r87cm
|
1241 |
+
NW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i8b5QZ7dsvfPx
|
1242 |
+
H2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe
|
1243 |
+
+o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g==
|
1244 |
+
-----END CERTIFICATE-----
|
1245 |
+
|
1246 |
+
# Issuer: CN=DigiCert Global Root CA O=DigiCert Inc OU=www.digicert.com
|
1247 |
+
# Subject: CN=DigiCert Global Root CA O=DigiCert Inc OU=www.digicert.com
|
1248 |
+
# Label: "DigiCert Global Root CA"
|
1249 |
+
# Serial: 10944719598952040374951832963794454346
|
1250 |
+
# MD5 Fingerprint: 79:e4:a9:84:0d:7d:3a:96:d7:c0:4f:e2:43:4c:89:2e
|
1251 |
+
# SHA1 Fingerprint: a8:98:5d:3a:65:e5:e5:c4:b2:d7:d6:6d:40:c6:dd:2f:b1:9c:54:36
|
1252 |
+
# SHA256 Fingerprint: 43:48:a0:e9:44:4c:78:cb:26:5e:05:8d:5e:89:44:b4:d8:4f:96:62:bd:26:db:25:7f:89:34:a4:43:c7:01:61
|
1253 |
+
-----BEGIN CERTIFICATE-----
|
1254 |
+
MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh
|
1255 |
+
MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
|
1256 |
+
d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD
|
1257 |
+
QTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT
|
1258 |
+
MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j
|
1259 |
+
b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG
|
1260 |
+
9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB
|
1261 |
+
CSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97
|
1262 |
+
nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt
|
1263 |
+
43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P
|
1264 |
+
T19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4
|
1265 |
+
gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO
|
1266 |
+
BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR
|
1267 |
+
TLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw
|
1268 |
+
DQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr
|
1269 |
+
hMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg
|
1270 |
+
06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF
|
1271 |
+
PnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls
|
1272 |
+
YSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk
|
1273 |
+
CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=
|
1274 |
+
-----END CERTIFICATE-----
|
1275 |
+
|
1276 |
+
# Issuer: CN=DigiCert High Assurance EV Root CA O=DigiCert Inc OU=www.digicert.com
|
1277 |
+
# Subject: CN=DigiCert High Assurance EV Root CA O=DigiCert Inc OU=www.digicert.com
|
1278 |
+
# Label: "DigiCert High Assurance EV Root CA"
|
1279 |
+
# Serial: 3553400076410547919724730734378100087
|
1280 |
+
# MD5 Fingerprint: d4:74:de:57:5c:39:b2:d3:9c:85:83:c5:c0:65:49:8a
|
1281 |
+
# SHA1 Fingerprint: 5f:b7:ee:06:33:e2:59:db:ad:0c:4c:9a:e6:d3:8f:1a:61:c7:dc:25
|
1282 |
+
# SHA256 Fingerprint: 74:31:e5:f4:c3:c1:ce:46:90:77:4f:0b:61:e0:54:40:88:3b:a9:a0:1e:d0:0b:a6:ab:d7:80:6e:d3:b1:18:cf
|
1283 |
+
-----BEGIN CERTIFICATE-----
|
1284 |
+
MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBs
|
1285 |
+
MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
|
1286 |
+
d3cuZGlnaWNlcnQuY29tMSswKQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5j
|
1287 |
+
ZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAwMFoXDTMxMTExMDAwMDAwMFowbDEL
|
1288 |
+
MAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3
|
1289 |
+
LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFuY2Ug
|
1290 |
+
RVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm
|
1291 |
+
+9S75S0tMqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTW
|
1292 |
+
PNt0OKRKzE0lgvdKpVMSOO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEM
|
1293 |
+
xChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFB
|
1294 |
+
Ik5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQNAQTXKFx01p8VdteZOE3
|
1295 |
+
hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUeh10aUAsg
|
1296 |
+
EsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQF
|
1297 |
+
MAMBAf8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaA
|
1298 |
+
FLE+w2kD+L9HAdSYJhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3Nec
|
1299 |
+
nzyIZgYIVyHbIUf4KmeqvxgydkAQV8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6z
|
1300 |
+
eM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFpmyPInngiK3BD41VHMWEZ71jF
|
1301 |
+
hS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkKmNEVX58Svnw2
|
1302 |
+
Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe
|
1303 |
+
vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep
|
1304 |
+
+OkuE6N36B9K
|
1305 |
+
-----END CERTIFICATE-----
|
1306 |
+
|
1307 |
+
# Issuer: CN=GeoTrust Primary Certification Authority O=GeoTrust Inc.
|
1308 |
+
# Subject: CN=GeoTrust Primary Certification Authority O=GeoTrust Inc.
|
1309 |
+
# Label: "GeoTrust Primary Certification Authority"
|
1310 |
+
# Serial: 32798226551256963324313806436981982369
|
1311 |
+
# MD5 Fingerprint: 02:26:c3:01:5e:08:30:37:43:a9:d0:7d:cf:37:e6:bf
|
1312 |
+
# SHA1 Fingerprint: 32:3c:11:8e:1b:f7:b8:b6:52:54:e2:e2:10:0d:d6:02:90:37:f0:96
|
1313 |
+
# SHA256 Fingerprint: 37:d5:10:06:c5:12:ea:ab:62:64:21:f1:ec:8c:92:01:3f:c5:f8:2a:e9:8e:e5:33:eb:46:19:b8:de:b4:d0:6c
|
1314 |
+
-----BEGIN CERTIFICATE-----
|
1315 |
+
MIIDfDCCAmSgAwIBAgIQGKy1av1pthU6Y2yv2vrEoTANBgkqhkiG9w0BAQUFADBY
|
1316 |
+
MQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjExMC8GA1UEAxMo
|
1317 |
+
R2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjEx
|
1318 |
+
MjcwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMFgxCzAJBgNVBAYTAlVTMRYwFAYDVQQK
|
1319 |
+
Ew1HZW9UcnVzdCBJbmMuMTEwLwYDVQQDEyhHZW9UcnVzdCBQcmltYXJ5IENlcnRp
|
1320 |
+
ZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
|
1321 |
+
AQEAvrgVe//UfH1nrYNke8hCUy3f9oQIIGHWAVlqnEQRr+92/ZV+zmEwu3qDXwK9
|
1322 |
+
AWbK7hWNb6EwnL2hhZ6UOvNWiAAxz9juapYC2e0DjPt1befquFUWBRaa9OBesYjA
|
1323 |
+
ZIVcFU2Ix7e64HXprQU9nceJSOC7KMgD4TCTZF5SwFlwIjVXiIrxlQqD17wxcwE0
|
1324 |
+
7e9GceBrAqg1cmuXm2bgyxx5X9gaBGgeRwLmnWDiNpcB3841kt++Z8dtd1k7j53W
|
1325 |
+
kBWUvEI0EME5+bEnPn7WinXFsq+W06Lem+SYvn3h6YGttm/81w7a4DSwDRp35+MI
|
1326 |
+
mO9Y+pyEtzavwt+s0vQQBnBxNQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4G
|
1327 |
+
A1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQULNVQQZcVi/CPNmFbSvtr2ZnJM5IwDQYJ
|
1328 |
+
KoZIhvcNAQEFBQADggEBAFpwfyzdtzRP9YZRqSa+S7iq8XEN3GHHoOo0Hnp3DwQ1
|
1329 |
+
6CePbJC/kRYkRj5KTs4rFtULUh38H2eiAkUxT87z+gOneZ1TatnaYzr4gNfTmeGl
|
1330 |
+
4b7UVXGYNTq+k+qurUKykG/g/CFNNWMziUnWm07Kx+dOCQD32sfvmWKZd7aVIl6K
|
1331 |
+
oKv0uHiYyjgZmclynnjNS6yvGaBzEi38wkG6gZHaFloxt/m0cYASSJlyc1pZU8Fj
|
1332 |
+
UjPtp8nSOQJw+uCxQmYpqptR7TBUIhRf2asdweSU8Pj1K/fqynhG1riR/aYNKxoU
|
1333 |
+
AT6A8EKglQdebc3MS6RFjasS6LPeWuWgfOgPIh1a6Vk=
|
1334 |
+
-----END CERTIFICATE-----
|
1335 |
+
|
1336 |
+
# Issuer: CN=thawte Primary Root CA O=thawte, Inc. OU=Certification Services Division/(c) 2006 thawte, Inc. - For authorized use only
|
1337 |
+
# Subject: CN=thawte Primary Root CA O=thawte, Inc. OU=Certification Services Division/(c) 2006 thawte, Inc. - For authorized use only
|
1338 |
+
# Label: "thawte Primary Root CA"
|
1339 |
+
# Serial: 69529181992039203566298953787712940909
|
1340 |
+
# MD5 Fingerprint: 8c:ca:dc:0b:22:ce:f5:be:72:ac:41:1a:11:a8:d8:12
|
1341 |
+
# SHA1 Fingerprint: 91:c6:d6:ee:3e:8a:c8:63:84:e5:48:c2:99:29:5c:75:6c:81:7b:81
|
1342 |
+
# SHA256 Fingerprint: 8d:72:2f:81:a9:c1:13:c0:79:1d:f1:36:a2:96:6d:b2:6c:95:0a:97:1d:b4:6b:41:99:f4:ea:54:b7:8b:fb:9f
|
1343 |
+
-----BEGIN CERTIFICATE-----
|
1344 |
+
MIIEIDCCAwigAwIBAgIQNE7VVyDV7exJ9C/ON9srbTANBgkqhkiG9w0BAQUFADCB
|
1345 |
+
qTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMf
|
1346 |
+
Q2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIw
|
1347 |
+
MDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNV
|
1348 |
+
BAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwHhcNMDYxMTE3MDAwMDAwWhcNMzYw
|
1349 |
+
NzE2MjM1OTU5WjCBqTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5j
|
1350 |
+
LjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYG
|
1351 |
+
A1UECxMvKGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
|
1352 |
+
IG9ubHkxHzAdBgNVBAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwggEiMA0GCSqG
|
1353 |
+
SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCsoPD7gFnUnMekz52hWXMJEEUMDSxuaPFs
|
1354 |
+
W0hoSVk3/AszGcJ3f8wQLZU0HObrTQmnHNK4yZc2AreJ1CRfBsDMRJSUjQJib+ta
|
1355 |
+
3RGNKJpchJAQeg29dGYvajig4tVUROsdB58Hum/u6f1OCyn1PoSgAfGcq/gcfomk
|
1356 |
+
6KHYcWUNo1F77rzSImANuVud37r8UVsLr5iy6S7pBOhih94ryNdOwUxkHt3Ph1i6
|
1357 |
+
Sk/KaAcdHJ1KxtUvkcx8cXIcxcBn6zL9yZJclNqFwJu/U30rCfSMnZEfl2pSy94J
|
1358 |
+
NqR32HuHUETVPm4pafs5SSYeCaWAe0At6+gnhcn+Yf1+5nyXHdWdAgMBAAGjQjBA
|
1359 |
+
MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBR7W0XP
|
1360 |
+
r87Lev0xkhpqtvNG61dIUDANBgkqhkiG9w0BAQUFAAOCAQEAeRHAS7ORtvzw6WfU
|
1361 |
+
DW5FvlXok9LOAz/t2iWwHVfLHjp2oEzsUHboZHIMpKnxuIvW1oeEuzLlQRHAd9mz
|
1362 |
+
YJ3rG9XRbkREqaYB7FViHXe4XI5ISXycO1cRrK1zN44veFyQaEfZYGDm/Ac9IiAX
|
1363 |
+
xPcW6cTYcvnIc3zfFi8VqT79aie2oetaupgf1eNNZAqdE8hhuvU5HIe6uL17In/2
|
1364 |
+
/qxAeeWsEG89jxt5dovEN7MhGITlNgDrYyCZuen+MwS7QcjBAvlEYyCegc5C09Y/
|
1365 |
+
LHbTY5xZ3Y+m4Q6gLkH3LpVHz7z9M/P2C2F+fpErgUfCJzDupxBdN49cOSvkBPB7
|
1366 |
+
jVaMaA==
|
1367 |
+
-----END CERTIFICATE-----
|
1368 |
+
|
1369 |
+
# Issuer: CN=VeriSign Class 3 Public Primary Certification Authority - G5 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2006 VeriSign, Inc. - For authorized use only
|
1370 |
+
# Subject: CN=VeriSign Class 3 Public Primary Certification Authority - G5 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2006 VeriSign, Inc. - For authorized use only
|
1371 |
+
# Label: "VeriSign Class 3 Public Primary Certification Authority - G5"
|
1372 |
+
# Serial: 33037644167568058970164719475676101450
|
1373 |
+
# MD5 Fingerprint: cb:17:e4:31:67:3e:e2:09:fe:45:57:93:f3:0a:fa:1c
|
1374 |
+
# SHA1 Fingerprint: 4e:b6:d5:78:49:9b:1c:cf:5f:58:1e:ad:56:be:3d:9b:67:44:a5:e5
|
1375 |
+
# SHA256 Fingerprint: 9a:cf:ab:7e:43:c8:d8:80:d0:6b:26:2a:94:de:ee:e4:b4:65:99:89:c3:d0:ca:f1:9b:af:64:05:e4:1a:b7:df
|
1376 |
+
-----BEGIN CERTIFICATE-----
|
1377 |
+
MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCB
|
1378 |
+
yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL
|
1379 |
+
ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJp
|
1380 |
+
U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxW
|
1381 |
+
ZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0
|
1382 |
+
aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCByjEL
|
1383 |
+
MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW
|
1384 |
+
ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2ln
|
1385 |
+
biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJp
|
1386 |
+
U2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9y
|
1387 |
+
aXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvJAgIKXo1
|
1388 |
+
nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKzj/i5Vbex
|
1389 |
+
t0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIz
|
1390 |
+
SdhDY2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQG
|
1391 |
+
BO+QueQA5N06tRn/Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+
|
1392 |
+
rCpSx4/VBEnkjWNHiDxpg8v+R70rfk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/
|
1393 |
+
NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8E
|
1394 |
+
BAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEwHzAH
|
1395 |
+
BgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy
|
1396 |
+
aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKv
|
1397 |
+
MzEzMA0GCSqGSIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzE
|
1398 |
+
p6B4Eq1iDkVwZMXnl2YtmAl+X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y
|
1399 |
+
5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKEKQsTb47bDN0lAtukixlE0kF6BWlK
|
1400 |
+
WE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiCKm0oHw0LxOXnGiYZ
|
1401 |
+
4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vEZV8N
|
1402 |
+
hnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq
|
1403 |
+
-----END CERTIFICATE-----
|
1404 |
+
|
1405 |
+
# Issuer: CN=COMODO Certification Authority O=COMODO CA Limited
|
1406 |
+
# Subject: CN=COMODO Certification Authority O=COMODO CA Limited
|
1407 |
+
# Label: "COMODO Certification Authority"
|
1408 |
+
# Serial: 104350513648249232941998508985834464573
|
1409 |
+
# MD5 Fingerprint: 5c:48:dc:f7:42:72:ec:56:94:6d:1c:cc:71:35:80:75
|
1410 |
+
# SHA1 Fingerprint: 66:31:bf:9e:f7:4f:9e:b6:c9:d5:a6:0c:ba:6a:be:d1:f7:bd:ef:7b
|
1411 |
+
# SHA256 Fingerprint: 0c:2c:d6:3d:f7:80:6f:a3:99:ed:e8:09:11:6b:57:5b:f8:79:89:f0:65:18:f9:80:8c:86:05:03:17:8b:af:66
|
1412 |
+
-----BEGIN CERTIFICATE-----
|
1413 |
+
MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCB
|
1414 |
+
gTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G
|
1415 |
+
A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNV
|
1416 |
+
BAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjEyMDEwMDAw
|
1417 |
+
MDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEbMBkGA1UECBMSR3Jl
|
1418 |
+
YXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFDT01P
|
1419 |
+
RE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0
|
1420 |
+
aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3
|
1421 |
+
UcEbVASY06m/weaKXTuH+7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI
|
1422 |
+
2GqGd0S7WWaXUF601CxwRM/aN5VCaTwwxHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8
|
1423 |
+
Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV4EajcNxo2f8ESIl33rXp
|
1424 |
+
+2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA1KGzqSX+
|
1425 |
+
DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5O
|
1426 |
+
nKVIrLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW
|
1427 |
+
/zAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6g
|
1428 |
+
PKA6hjhodHRwOi8vY3JsLmNvbW9kb2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9u
|
1429 |
+
QXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOCAQEAPpiem/Yb6dc5t3iuHXIY
|
1430 |
+
SdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CPOGEIqB6BCsAv
|
1431 |
+
IC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/
|
1432 |
+
RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4
|
1433 |
+
zJVSk/BwJVmcIGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5dd
|
1434 |
+
BA6+C4OmF4O5MBKgxTMVBbkN+8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IB
|
1435 |
+
ZQ==
|
1436 |
+
-----END CERTIFICATE-----
|
1437 |
+
|
1438 |
+
# Issuer: CN=Network Solutions Certificate Authority O=Network Solutions L.L.C.
|
1439 |
+
# Subject: CN=Network Solutions Certificate Authority O=Network Solutions L.L.C.
|
1440 |
+
# Label: "Network Solutions Certificate Authority"
|
1441 |
+
# Serial: 116697915152937497490437556386812487904
|
1442 |
+
# MD5 Fingerprint: d3:f3:a6:16:c0:fa:6b:1d:59:b1:2d:96:4d:0e:11:2e
|
1443 |
+
# SHA1 Fingerprint: 74:f8:a3:c3:ef:e7:b3:90:06:4b:83:90:3c:21:64:60:20:e5:df:ce
|
1444 |
+
# SHA256 Fingerprint: 15:f0:ba:00:a3:ac:7a:f3:ac:88:4c:07:2b:10:11:a0:77:bd:77:c0:97:f4:01:64:b2:f8:59:8a:bd:83:86:0c
|
1445 |
+
-----BEGIN CERTIFICATE-----
|
1446 |
+
MIID5jCCAs6gAwIBAgIQV8szb8JcFuZHFhfjkDFo4DANBgkqhkiG9w0BAQUFADBi
|
1447 |
+
MQswCQYDVQQGEwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMu
|
1448 |
+
MTAwLgYDVQQDEydOZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3Jp
|
1449 |
+
dHkwHhcNMDYxMjAxMDAwMDAwWhcNMjkxMjMxMjM1OTU5WjBiMQswCQYDVQQGEwJV
|
1450 |
+
UzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMuMTAwLgYDVQQDEydO
|
1451 |
+
ZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0GCSqG
|
1452 |
+
SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkvH6SMG3G2I4rC7xGzuAnlt7e+foS0zwz
|
1453 |
+
c7MEL7xxjOWftiJgPl9dzgn/ggwbmlFQGiaJ3dVhXRncEg8tCqJDXRfQNJIg6nPP
|
1454 |
+
OCwGJgl6cvf6UDL4wpPTaaIjzkGxzOTVHzbRijr4jGPiFFlp7Q3Tf2vouAPlT2rl
|
1455 |
+
mGNpSAW+Lv8ztumXWWn4Zxmuk2GWRBXTcrA/vGp97Eh/jcOrqnErU2lBUzS1sLnF
|
1456 |
+
BgrEsEX1QV1uiUV7PTsmjHTC5dLRfbIR1PtYMiKagMnc/Qzpf14Dl847ABSHJ3A4
|
1457 |
+
qY5usyd2mFHgBeMhqxrVhSI8KbWaFsWAqPS7azCPL0YCorEMIuDTAgMBAAGjgZcw
|
1458 |
+
gZQwHQYDVR0OBBYEFCEwyfsA106Y2oeqKtCnLrFAMadMMA4GA1UdDwEB/wQEAwIB
|
1459 |
+
BjAPBgNVHRMBAf8EBTADAQH/MFIGA1UdHwRLMEkwR6BFoEOGQWh0dHA6Ly9jcmwu
|
1460 |
+
bmV0c29sc3NsLmNvbS9OZXR3b3JrU29sdXRpb25zQ2VydGlmaWNhdGVBdXRob3Jp
|
1461 |
+
dHkuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQC7rkvnt1frf6ott3NHhWrB5KUd5Oc8
|
1462 |
+
6fRZZXe1eltajSU24HqXLjjAV2CDmAaDn7l2em5Q4LqILPxFzBiwmZVRDuwduIj/
|
1463 |
+
h1AcgsLj4DKAv6ALR8jDMe+ZZzKATxcheQxpXN5eNK4CtSbqUN9/GGUsyfJj4akH
|
1464 |
+
/nxxH2szJGoeBfcFaMBqEssuXmHLrijTfsK0ZpEmXzwuJF/LWA/rKOyvEZbz3Htv
|
1465 |
+
wKeI8lN3s2Berq4o2jUsbzRF0ybh3uxbTydrFny9RAQYgrOJeRcQcT16ohZO9QHN
|
1466 |
+
pGxlaKFJdlxDydi8NmdspZS11My5vWo1ViHe2MPr+8ukYEywVaCge1ey
|
1467 |
+
-----END CERTIFICATE-----
|
1468 |
+
|
1469 |
+
# Issuer: CN=COMODO ECC Certification Authority O=COMODO CA Limited
|
1470 |
+
# Subject: CN=COMODO ECC Certification Authority O=COMODO CA Limited
|
1471 |
+
# Label: "COMODO ECC Certification Authority"
|
1472 |
+
# Serial: 41578283867086692638256921589707938090
|
1473 |
+
# MD5 Fingerprint: 7c:62:ff:74:9d:31:53:5e:68:4a:d5:78:aa:1e:bf:23
|
1474 |
+
# SHA1 Fingerprint: 9f:74:4e:9f:2b:4d:ba:ec:0f:31:2c:50:b6:56:3b:8e:2d:93:c3:11
|
1475 |
+
# SHA256 Fingerprint: 17:93:92:7a:06:14:54:97:89:ad:ce:2f:8f:34:f7:f0:b6:6d:0f:3a:e3:a3:b8:4d:21:ec:15:db:ba:4f:ad:c7
|
1476 |
+
-----BEGIN CERTIFICATE-----
|
1477 |
+
MIICiTCCAg+gAwIBAgIQH0evqmIAcFBUTAGem2OZKjAKBggqhkjOPQQDAzCBhTEL
|
1478 |
+
MAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE
|
1479 |
+
BxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMT
|
1480 |
+
IkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDgwMzA2MDAw
|
1481 |
+
MDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdy
|
1482 |
+
ZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09N
|
1483 |
+
T0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlv
|
1484 |
+
biBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQDR3svdcmCFYX7deSR
|
1485 |
+
FtSrYpn1PlILBs5BAH+X4QokPB0BBO490o0JlwzgdeT6+3eKKvUDYEs2ixYjFq0J
|
1486 |
+
cfRK9ChQtP6IHG4/bC8vCVlbpVsLM5niwz2J+Wos77LTBumjQjBAMB0GA1UdDgQW
|
1487 |
+
BBR1cacZSBm8nZ3qQUfflMRId5nTeTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/
|
1488 |
+
BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjEA7wNbeqy3eApyt4jf/7VGFAkK+qDm
|
1489 |
+
fQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdv
|
1490 |
+
GDeAU/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY=
|
1491 |
+
-----END CERTIFICATE-----
|
1492 |
+
|
1493 |
+
# Issuer: CN=TC TrustCenter Class 2 CA II O=TC TrustCenter GmbH OU=TC TrustCenter Class 2 CA
|
1494 |
+
# Subject: CN=TC TrustCenter Class 2 CA II O=TC TrustCenter GmbH OU=TC TrustCenter Class 2 CA
|
1495 |
+
# Label: "TC TrustCenter Class 2 CA II"
|
1496 |
+
# Serial: 941389028203453866782103406992443
|
1497 |
+
# MD5 Fingerprint: ce:78:33:5c:59:78:01:6e:18:ea:b9:36:a0:b9:2e:23
|
1498 |
+
# SHA1 Fingerprint: ae:50:83:ed:7c:f4:5c:bc:8f:61:c6:21:fe:68:5d:79:42:21:15:6e
|
1499 |
+
# SHA256 Fingerprint: e6:b8:f8:76:64:85:f8:07:ae:7f:8d:ac:16:70:46:1f:07:c0:a1:3e:ef:3a:1f:f7:17:53:8d:7a:ba:d3:91:b4
|
1500 |
+
-----BEGIN CERTIFICATE-----
|
1501 |
+
MIIEqjCCA5KgAwIBAgIOLmoAAQACH9dSISwRXDswDQYJKoZIhvcNAQEFBQAwdjEL
|
1502 |
+
MAkGA1UEBhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNV
|
1503 |
+
BAsTGVRDIFRydXN0Q2VudGVyIENsYXNzIDIgQ0ExJTAjBgNVBAMTHFRDIFRydXN0
|
1504 |
+
Q2VudGVyIENsYXNzIDIgQ0EgSUkwHhcNMDYwMTEyMTQzODQzWhcNMjUxMjMxMjI1
|
1505 |
+
OTU5WjB2MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1c3RDZW50ZXIgR21i
|
1506 |
+
SDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQTElMCMGA1UEAxMc
|
1507 |
+
VEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQSBJSTCCASIwDQYJKoZIhvcNAQEBBQAD
|
1508 |
+
ggEPADCCAQoCggEBAKuAh5uO8MN8h9foJIIRszzdQ2Lu+MNF2ujhoF/RKrLqk2jf
|
1509 |
+
tMjWQ+nEdVl//OEd+DFwIxuInie5e/060smp6RQvkL4DUsFJzfb95AhmC1eKokKg
|
1510 |
+
uNV/aVyQMrKXDcpK3EY+AlWJU+MaWss2xgdW94zPEfRMuzBwBJWl9jmM/XOBCH2J
|
1511 |
+
XjIeIqkiRUuwZi4wzJ9l/fzLganx4Duvo4bRierERXlQXa7pIXSSTYtZgo+U4+lK
|
1512 |
+
8edJsBTj9WLL1XK9H7nSn6DNqPoByNkN39r8R52zyFTfSUrxIan+GE7uSNQZu+99
|
1513 |
+
5OKdy1u2bv/jzVrndIIFuoAlOMvkaZ6vQaoahPUCAwEAAaOCATQwggEwMA8GA1Ud
|
1514 |
+
EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTjq1RMgKHbVkO3
|
1515 |
+
kUrL84J6E1wIqzCB7QYDVR0fBIHlMIHiMIHfoIHcoIHZhjVodHRwOi8vd3d3LnRy
|
1516 |
+
dXN0Y2VudGVyLmRlL2NybC92Mi90Y19jbGFzc18yX2NhX0lJLmNybIaBn2xkYXA6
|
1517 |
+
Ly93d3cudHJ1c3RjZW50ZXIuZGUvQ049VEMlMjBUcnVzdENlbnRlciUyMENsYXNz
|
1518 |
+
JTIwMiUyMENBJTIwSUksTz1UQyUyMFRydXN0Q2VudGVyJTIwR21iSCxPVT1yb290
|
1519 |
+
Y2VydHMsREM9dHJ1c3RjZW50ZXIsREM9ZGU/Y2VydGlmaWNhdGVSZXZvY2F0aW9u
|
1520 |
+
TGlzdD9iYXNlPzANBgkqhkiG9w0BAQUFAAOCAQEAjNfffu4bgBCzg/XbEeprS6iS
|
1521 |
+
GNn3Bzn1LL4GdXpoUxUc6krtXvwjshOg0wn/9vYua0Fxec3ibf2uWWuFHbhOIprt
|
1522 |
+
ZjluS5TmVfwLG4t3wVMTZonZKNaL80VKY7f9ewthXbhtvsPcW3nS7Yblok2+XnR8
|
1523 |
+
au0WOB9/WIFaGusyiC2y8zl3gK9etmF1KdsjTYjKUCjLhdLTEKJZbtOTVAB6okaV
|
1524 |
+
hgWcqRmY5TFyDADiZ9lA4CQze28suVyrZZ0srHbqNZn1l7kPJOzHdiEoZa5X6AeI
|
1525 |
+
dUpWoNIFOqTmjZKILPPy4cHGYdtBxceb9w4aUUXCYWvcZCcXjFq32nQozZfkvQ==
|
1526 |
+
-----END CERTIFICATE-----
|
1527 |
+
|
1528 |
+
# Issuer: CN=TC TrustCenter Class 3 CA II O=TC TrustCenter GmbH OU=TC TrustCenter Class 3 CA
|
1529 |
+
# Subject: CN=TC TrustCenter Class 3 CA II O=TC TrustCenter GmbH OU=TC TrustCenter Class 3 CA
|
1530 |
+
# Label: "TC TrustCenter Class 3 CA II"
|
1531 |
+
# Serial: 1506523511417715638772220530020799
|
1532 |
+
# MD5 Fingerprint: 56:5f:aa:80:61:12:17:f6:67:21:e6:2b:6d:61:56:8e
|
1533 |
+
# SHA1 Fingerprint: 80:25:ef:f4:6e:70:c8:d4:72:24:65:84:fe:40:3b:8a:8d:6a:db:f5
|
1534 |
+
# SHA256 Fingerprint: 8d:a0:84:fc:f9:9c:e0:77:22:f8:9b:32:05:93:98:06:fa:5c:b8:11:e1:c8:13:f6:a1:08:c7:d3:36:b3:40:8e
|
1535 |
+
-----BEGIN CERTIFICATE-----
|
1536 |
+
MIIEqjCCA5KgAwIBAgIOSkcAAQAC5aBd1j8AUb8wDQYJKoZIhvcNAQEFBQAwdjEL
|
1537 |
+
MAkGA1UEBhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNV
|
1538 |
+
BAsTGVRDIFRydXN0Q2VudGVyIENsYXNzIDMgQ0ExJTAjBgNVBAMTHFRDIFRydXN0
|
1539 |
+
Q2VudGVyIENsYXNzIDMgQ0EgSUkwHhcNMDYwMTEyMTQ0MTU3WhcNMjUxMjMxMjI1
|
1540 |
+
OTU5WjB2MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1c3RDZW50ZXIgR21i
|
1541 |
+
SDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMyBDQTElMCMGA1UEAxMc
|
1542 |
+
VEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMyBDQSBJSTCCASIwDQYJKoZIhvcNAQEBBQAD
|
1543 |
+
ggEPADCCAQoCggEBALTgu1G7OVyLBMVMeRwjhjEQY0NVJz/GRcekPewJDRoeIMJW
|
1544 |
+
Ht4bNwcwIi9v8Qbxq63WyKthoy9DxLCyLfzDlml7forkzMA5EpBCYMnMNWju2l+Q
|
1545 |
+
Vl/NHE1bWEnrDgFPZPosPIlY2C8u4rBo6SI7dYnWRBpl8huXJh0obazovVkdKyT2
|
1546 |
+
1oQDZogkAHhg8fir/gKya/si+zXmFtGt9i4S5Po1auUZuV3bOx4a+9P/FRQI2Alq
|
1547 |
+
ukWdFHlgfa9Aigdzs5OW03Q0jTo3Kd5c7PXuLjHCINy+8U9/I1LZW+Jk2ZyqBwi1
|
1548 |
+
Rb3R0DHBq1SfqdLDYmAD8bs5SpJKPQq5ncWg/jcCAwEAAaOCATQwggEwMA8GA1Ud
|
1549 |
+
EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTUovyfs8PYA9NX
|
1550 |
+
XAek0CSnwPIA1DCB7QYDVR0fBIHlMIHiMIHfoIHcoIHZhjVodHRwOi8vd3d3LnRy
|
1551 |
+
dXN0Y2VudGVyLmRlL2NybC92Mi90Y19jbGFzc18zX2NhX0lJLmNybIaBn2xkYXA6
|
1552 |
+
Ly93d3cudHJ1c3RjZW50ZXIuZGUvQ049VEMlMjBUcnVzdENlbnRlciUyMENsYXNz
|
1553 |
+
JTIwMyUyMENBJTIwSUksTz1UQyUyMFRydXN0Q2VudGVyJTIwR21iSCxPVT1yb290
|
1554 |
+
Y2VydHMsREM9dHJ1c3RjZW50ZXIsREM9ZGU/Y2VydGlmaWNhdGVSZXZvY2F0aW9u
|
1555 |
+
TGlzdD9iYXNlPzANBgkqhkiG9w0BAQUFAAOCAQEANmDkcPcGIEPZIxpC8vijsrlN
|
1556 |
+
irTzwppVMXzEO2eatN9NDoqTSheLG43KieHPOh6sHfGcMrSOWXaiQYUlN6AT0PV8
|
1557 |
+
TtXqluJucsG7Kv5sbviRmEb8yRtXW+rIGjs/sFGYPAfaLFkB2otE6OF0/ado3VS6
|
1558 |
+
g0bsyEa1+K+XwDsJHI/OcpY9M1ZwvJbL2NV9IJqDnxrcOfHFcqMRA/07QlIp2+gB
|
1559 |
+
95tejNaNhk4Z+rwcvsUhpYeeeC422wlxo3I0+GzjBgnyXlal092Y+tTmBvTwtiBj
|
1560 |
+
S+opvaqCZh77gaqnN60TGOaSw4HBM7uIHqHn4rS9MWwOUT1v+5ZWgOI2F9Hc5A==
|
1561 |
+
-----END CERTIFICATE-----
|
1562 |
+
|
1563 |
+
# Issuer: CN=TC TrustCenter Universal CA I O=TC TrustCenter GmbH OU=TC TrustCenter Universal CA
|
1564 |
+
# Subject: CN=TC TrustCenter Universal CA I O=TC TrustCenter GmbH OU=TC TrustCenter Universal CA
|
1565 |
+
# Label: "TC TrustCenter Universal CA I"
|
1566 |
+
# Serial: 601024842042189035295619584734726
|
1567 |
+
# MD5 Fingerprint: 45:e1:a5:72:c5:a9:36:64:40:9e:f5:e4:58:84:67:8c
|
1568 |
+
# SHA1 Fingerprint: 6b:2f:34:ad:89:58:be:62:fd:b0:6b:5c:ce:bb:9d:d9:4f:4e:39:f3
|
1569 |
+
# SHA256 Fingerprint: eb:f3:c0:2a:87:89:b1:fb:7d:51:19:95:d6:63:b7:29:06:d9:13:ce:0d:5e:10:56:8a:8a:77:e2:58:61:67:e7
|
1570 |
+
-----BEGIN CERTIFICATE-----
|
1571 |
+
MIID3TCCAsWgAwIBAgIOHaIAAQAC7LdggHiNtgYwDQYJKoZIhvcNAQEFBQAweTEL
|
1572 |
+
MAkGA1UEBhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxJDAiBgNV
|
1573 |
+
BAsTG1RDIFRydXN0Q2VudGVyIFVuaXZlcnNhbCBDQTEmMCQGA1UEAxMdVEMgVHJ1
|
1574 |
+
c3RDZW50ZXIgVW5pdmVyc2FsIENBIEkwHhcNMDYwMzIyMTU1NDI4WhcNMjUxMjMx
|
1575 |
+
MjI1OTU5WjB5MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1c3RDZW50ZXIg
|
1576 |
+
R21iSDEkMCIGA1UECxMbVEMgVHJ1c3RDZW50ZXIgVW5pdmVyc2FsIENBMSYwJAYD
|
1577 |
+
VQQDEx1UQyBUcnVzdENlbnRlciBVbml2ZXJzYWwgQ0EgSTCCASIwDQYJKoZIhvcN
|
1578 |
+
AQEBBQADggEPADCCAQoCggEBAKR3I5ZEr5D0MacQ9CaHnPM42Q9e3s9B6DGtxnSR
|
1579 |
+
JJZ4Hgmgm5qVSkr1YnwCqMqs+1oEdjneX/H5s7/zA1hV0qq34wQi0fiU2iIIAI3T
|
1580 |
+
fCZdzHd55yx4Oagmcw6iXSVphU9VDprvxrlE4Vc93x9UIuVvZaozhDrzznq+VZeu
|
1581 |
+
jRIPFDPiUHDDSYcTvFHe15gSWu86gzOSBnWLknwSaHtwag+1m7Z3W0hZneTvWq3z
|
1582 |
+
wZ7U10VOylY0Ibw+F1tvdwxIAUMpsN0/lm7mlaoMwCC2/T42J5zjXM9OgdwZu5GQ
|
1583 |
+
fezmlwQek8wiSdeXhrYTCjxDI3d+8NzmzSQfO4ObNDqDNOMCAwEAAaNjMGEwHwYD
|
1584 |
+
VR0jBBgwFoAUkqR1LKSevoFE63n8isWVpesQdXMwDwYDVR0TAQH/BAUwAwEB/zAO
|
1585 |
+
BgNVHQ8BAf8EBAMCAYYwHQYDVR0OBBYEFJKkdSyknr6BROt5/IrFlaXrEHVzMA0G
|
1586 |
+
CSqGSIb3DQEBBQUAA4IBAQAo0uCG1eb4e/CX3CJrO5UUVg8RMKWaTzqwOuAGy2X1
|
1587 |
+
7caXJ/4l8lfmXpWMPmRgFVp/Lw0BxbFg/UU1z/CyvwbZ71q+s2IhtNerNXxTPqYn
|
1588 |
+
8aEt2hojnczd7Dwtnic0XQ/CNnm8yUpiLe1r2X1BQ3y2qsrtYbE3ghUJGooWMNjs
|
1589 |
+
ydZHcnhLEEYUjl8Or+zHL6sQ17bxbuyGssLoDZJz3KL0Dzq/YSMQiZxIQG5wALPT
|
1590 |
+
ujdEWBF6AmqI8Dc08BnprNRlc/ZpjGSUOnmFKbAWKwyCPwacx/0QK54PLLae4xW/
|
1591 |
+
2TYcuiUaUj0a7CIMHOCkoj3w6DnPgcB77V0fb8XQC9eY
|
1592 |
+
-----END CERTIFICATE-----
|
1593 |
+
|
1594 |
+
# Issuer: CN=Cybertrust Global Root O=Cybertrust, Inc
|
1595 |
+
# Subject: CN=Cybertrust Global Root O=Cybertrust, Inc
|
1596 |
+
# Label: "Cybertrust Global Root"
|
1597 |
+
# Serial: 4835703278459682877484360
|
1598 |
+
# MD5 Fingerprint: 72:e4:4a:87:e3:69:40:80:77:ea:bc:e3:f4:ff:f0:e1
|
1599 |
+
# SHA1 Fingerprint: 5f:43:e5:b1:bf:f8:78:8c:ac:1c:c7:ca:4a:9a:c6:22:2b:cc:34:c6
|
1600 |
+
# SHA256 Fingerprint: 96:0a:df:00:63:e9:63:56:75:0c:29:65:dd:0a:08:67:da:0b:9c:bd:6e:77:71:4a:ea:fb:23:49:ab:39:3d:a3
|
1601 |
+
-----BEGIN CERTIFICATE-----
|
1602 |
+
MIIDoTCCAomgAwIBAgILBAAAAAABD4WqLUgwDQYJKoZIhvcNAQEFBQAwOzEYMBYG
|
1603 |
+
A1UEChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2Jh
|
1604 |
+
bCBSb290MB4XDTA2MTIxNTA4MDAwMFoXDTIxMTIxNTA4MDAwMFowOzEYMBYGA1UE
|
1605 |
+
ChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2JhbCBS
|
1606 |
+
b290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA+Mi8vRRQZhP/8NN5
|
1607 |
+
7CPytxrHjoXxEnOmGaoQ25yiZXRadz5RfVb23CO21O1fWLE3TdVJDm71aofW0ozS
|
1608 |
+
J8bi/zafmGWgE07GKmSb1ZASzxQG9Dvj1Ci+6A74q05IlG2OlTEQXO2iLb3VOm2y
|
1609 |
+
HLtgwEZLAfVJrn5GitB0jaEMAs7u/OePuGtm839EAL9mJRQr3RAwHQeWP032a7iP
|
1610 |
+
t3sMpTjr3kfb1V05/Iin89cqdPHoWqI7n1C6poxFNcJQZZXcY4Lv3b93TZxiyWNz
|
1611 |
+
FtApD0mpSPCzqrdsxacwOUBdrsTiXSZT8M4cIwhhqJQZugRiQOwfOHB3EgZxpzAY
|
1612 |
+
XSUnpQIDAQABo4GlMIGiMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/
|
1613 |
+
MB0GA1UdDgQWBBS2CHsNesysIEyGVjJez6tuhS1wVzA/BgNVHR8EODA2MDSgMqAw
|
1614 |
+
hi5odHRwOi8vd3d3Mi5wdWJsaWMtdHJ1c3QuY29tL2NybC9jdC9jdHJvb3QuY3Js
|
1615 |
+
MB8GA1UdIwQYMBaAFLYIew16zKwgTIZWMl7Pq26FLXBXMA0GCSqGSIb3DQEBBQUA
|
1616 |
+
A4IBAQBW7wojoFROlZfJ+InaRcHUowAl9B8Tq7ejhVhpwjCt2BWKLePJzYFa+HMj
|
1617 |
+
Wqd8BfP9IjsO0QbE2zZMcwSO5bAi5MXzLqXZI+O4Tkogp24CJJ8iYGd7ix1yCcUx
|
1618 |
+
XOl5n4BHPa2hCwcUPUf/A2kaDAtE52Mlp3+yybh2hO0j9n0Hq0V+09+zv+mKts2o
|
1619 |
+
omcrUtW3ZfA5TGOgkXmTUg9U3YO7n9GPp1Nzw8v/MOx8BLjYRB+TX3EJIrduPuoc
|
1620 |
+
A06dGiBh+4E37F78CkWr1+cXVdCg6mCbpvbjjFspwgZgFJ0tl0ypkxWdYcQBX0jW
|
1621 |
+
WL1WMRJOEcgh4LMRkWXbtKaIOM5V
|
1622 |
+
-----END CERTIFICATE-----
|
1623 |
+
|
1624 |
+
# Issuer: CN=GeoTrust Primary Certification Authority - G3 O=GeoTrust Inc. OU=(c) 2008 GeoTrust Inc. - For authorized use only
|
1625 |
+
# Subject: CN=GeoTrust Primary Certification Authority - G3 O=GeoTrust Inc. OU=(c) 2008 GeoTrust Inc. - For authorized use only
|
1626 |
+
# Label: "GeoTrust Primary Certification Authority - G3"
|
1627 |
+
# Serial: 28809105769928564313984085209975885599
|
1628 |
+
# MD5 Fingerprint: b5:e8:34:36:c9:10:44:58:48:70:6d:2e:83:d4:b8:05
|
1629 |
+
# SHA1 Fingerprint: 03:9e:ed:b8:0b:e7:a0:3c:69:53:89:3b:20:d2:d9:32:3a:4c:2a:fd
|
1630 |
+
# SHA256 Fingerprint: b4:78:b8:12:25:0d:f8:78:63:5c:2a:a7:ec:7d:15:5e:aa:62:5e:e8:29:16:e2:cd:29:43:61:88:6c:d1:fb:d4
|
1631 |
+
-----BEGIN CERTIFICATE-----
|
1632 |
+
MIID/jCCAuagAwIBAgIQFaxulBmyeUtB9iepwxgPHzANBgkqhkiG9w0BAQsFADCB
|
1633 |
+
mDELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsT
|
1634 |
+
MChjKSAyMDA4IEdlb1RydXN0IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25s
|
1635 |
+
eTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhv
|
1636 |
+
cml0eSAtIEczMB4XDTA4MDQwMjAwMDAwMFoXDTM3MTIwMTIzNTk1OVowgZgxCzAJ
|
1637 |
+
BgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykg
|
1638 |
+
MjAwOCBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0
|
1639 |
+
BgNVBAMTLUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg
|
1640 |
+
LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANziXmJYHTNXOTIz
|
1641 |
+
+uvLh4yn1ErdBojqZI4xmKU4kB6Yzy5jK/BGvESyiaHAKAxJcCGVn2TAppMSAmUm
|
1642 |
+
hsalifD614SgcK9PGpc/BkTVyetyEH3kMSj7HGHmKAdEc5IiaacDiGydY8hS2pgn
|
1643 |
+
5whMcD60yRLBxWeDXTPzAxHsatBT4tG6NmCUgLthY2xbF37fQJQeqw3CIShwiP/W
|
1644 |
+
JmxsYAQlTlV+fe+/lEjetx3dcI0FX4ilm/LC7urRQEFtYjgdVgbFA0dRIBn8exAL
|
1645 |
+
DmKudlW/X3e+PkkBUz2YJQN2JFodtNuJ6nnltrM7P7pMKEF/BqxqjsHQ9gUdfeZC
|
1646 |
+
huOl1UcCAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYw
|
1647 |
+
HQYDVR0OBBYEFMR5yo6hTgMdHNxr2zFblD4/MH8tMA0GCSqGSIb3DQEBCwUAA4IB
|
1648 |
+
AQAtxRPPVoB7eni9n64smefv2t+UXglpp+duaIy9cr5HqQ6XErhK8WTTOd8lNNTB
|
1649 |
+
zU6B8A8ExCSzNJbGpqow32hhc9f5joWJ7w5elShKKiePEI4ufIbEAp7aDHdlDkQN
|
1650 |
+
kv39sxY2+hENHYwOB4lqKVb3cvTdFZx3NWZXqxNT2I7BQMXXExZacse3aQHEerGD
|
1651 |
+
AWh9jUGhlBjBJVz88P6DAod8DQ3PLghcSkANPuyBYeYk28rgDi0Hsj5W3I31QYUH
|
1652 |
+
SJsMC8tJP33st/3LjWeJGqvtux6jAAgIFyqCXDFdRootD4abdNlF+9RAsXqqaC2G
|
1653 |
+
spki4cErx5z481+oghLrGREt
|
1654 |
+
-----END CERTIFICATE-----
|
1655 |
+
|
1656 |
+
# Issuer: CN=thawte Primary Root CA - G2 O=thawte, Inc. OU=(c) 2007 thawte, Inc. - For authorized use only
|
1657 |
+
# Subject: CN=thawte Primary Root CA - G2 O=thawte, Inc. OU=(c) 2007 thawte, Inc. - For authorized use only
|
1658 |
+
# Label: "thawte Primary Root CA - G2"
|
1659 |
+
# Serial: 71758320672825410020661621085256472406
|
1660 |
+
# MD5 Fingerprint: 74:9d:ea:60:24:c4:fd:22:53:3e:cc:3a:72:d9:29:4f
|
1661 |
+
# SHA1 Fingerprint: aa:db:bc:22:23:8f:c4:01:a1:27:bb:38:dd:f4:1d:db:08:9e:f0:12
|
1662 |
+
# SHA256 Fingerprint: a4:31:0d:50:af:18:a6:44:71:90:37:2a:86:af:af:8b:95:1f:fb:43:1d:83:7f:1e:56:88:b4:59:71:ed:15:57
|
1663 |
+
-----BEGIN CERTIFICATE-----
|
1664 |
+
MIICiDCCAg2gAwIBAgIQNfwmXNmET8k9Jj1Xm67XVjAKBggqhkjOPQQDAzCBhDEL
|
1665 |
+
MAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjE4MDYGA1UECxMvKGMp
|
1666 |
+
IDIwMDcgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAi
|
1667 |
+
BgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMjAeFw0wNzExMDUwMDAw
|
1668 |
+
MDBaFw0zODAxMTgyMzU5NTlaMIGEMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhh
|
1669 |
+
d3RlLCBJbmMuMTgwNgYDVQQLEy8oYykgMjAwNyB0aGF3dGUsIEluYy4gLSBGb3Ig
|
1670 |
+
YXV0aG9yaXplZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9v
|
1671 |
+
dCBDQSAtIEcyMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEotWcgnuVnfFSeIf+iha/
|
1672 |
+
BebfowJPDQfGAFG6DAJSLSKkQjnE/o/qycG+1E3/n3qe4rF8mq2nhglzh9HnmuN6
|
1673 |
+
papu+7qzcMBniKI11KOasf2twu8x+qi58/sIxpHR+ymVo0IwQDAPBgNVHRMBAf8E
|
1674 |
+
BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUmtgAMADna3+FGO6Lts6K
|
1675 |
+
DPgR4bswCgYIKoZIzj0EAwMDaQAwZgIxAN344FdHW6fmCsO99YCKlzUNG4k8VIZ3
|
1676 |
+
KMqh9HneteY4sPBlcIx/AlTCv//YoT7ZzwIxAMSNlPzcU9LcnXgWHxUzI1NS41ox
|
1677 |
+
XZ3Krr0TKUQNJ1uo52icEvdYPy5yAlejj6EULg==
|
1678 |
+
-----END CERTIFICATE-----
|
1679 |
+
|
1680 |
+
# Issuer: CN=thawte Primary Root CA - G3 O=thawte, Inc. OU=Certification Services Division/(c) 2008 thawte, Inc. - For authorized use only
|
1681 |
+
# Subject: CN=thawte Primary Root CA - G3 O=thawte, Inc. OU=Certification Services Division/(c) 2008 thawte, Inc. - For authorized use only
|
1682 |
+
# Label: "thawte Primary Root CA - G3"
|
1683 |
+
# Serial: 127614157056681299805556476275995414779
|
1684 |
+
# MD5 Fingerprint: fb:1b:5d:43:8a:94:cd:44:c6:76:f2:43:4b:47:e7:31
|
1685 |
+
# SHA1 Fingerprint: f1:8b:53:8d:1b:e9:03:b6:a6:f0:56:43:5b:17:15:89:ca:f3:6b:f2
|
1686 |
+
# SHA256 Fingerprint: 4b:03:f4:58:07:ad:70:f2:1b:fc:2c:ae:71:c9:fd:e4:60:4c:06:4c:f5:ff:b6:86:ba:e5:db:aa:d7:fd:d3:4c
|
1687 |
+
-----BEGIN CERTIFICATE-----
|
1688 |
+
MIIEKjCCAxKgAwIBAgIQYAGXt0an6rS0mtZLL/eQ+zANBgkqhkiG9w0BAQsFADCB
|
1689 |
+
rjELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMf
|
1690 |
+
Q2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIw
|
1691 |
+
MDggdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAiBgNV
|
1692 |
+
BAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMzAeFw0wODA0MDIwMDAwMDBa
|
1693 |
+
Fw0zNzEyMDEyMzU5NTlaMIGuMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhhd3Rl
|
1694 |
+
LCBJbmMuMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNlcnZpY2VzIERpdmlzaW9u
|
1695 |
+
MTgwNgYDVQQLEy8oYykgMjAwOCB0aGF3dGUsIEluYy4gLSBGb3IgYXV0aG9yaXpl
|
1696 |
+
ZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAtIEcz
|
1697 |
+
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsr8nLPvb2FvdeHsbnndm
|
1698 |
+
gcs+vHyu86YnmjSjaDFxODNi5PNxZnmxqWWjpYvVj2AtP0LMqmsywCPLLEHd5N/8
|
1699 |
+
YZzic7IilRFDGF/Eth9XbAoFWCLINkw6fKXRz4aviKdEAhN0cXMKQlkC+BsUa0Lf
|
1700 |
+
b1+6a4KinVvnSr0eAXLbS3ToO39/fR8EtCab4LRarEc9VbjXsCZSKAExQGbY2SS9
|
1701 |
+
9irY7CFJXJv2eul/VTV+lmuNk5Mny5K76qxAwJ/C+IDPXfRa3M50hqY+bAtTyr2S
|
1702 |
+
zhkGcuYMXDhpxwTWvGzOW/b3aJzcJRVIiKHpqfiYnODz1TEoYRFsZ5aNOZnLwkUk
|
1703 |
+
OQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNV
|
1704 |
+
HQ4EFgQUrWyqlGCc7eT/+j4KdCtjA/e2Wb8wDQYJKoZIhvcNAQELBQADggEBABpA
|
1705 |
+
2JVlrAmSicY59BDlqQ5mU1143vokkbvnRFHfxhY0Cu9qRFHqKweKA3rD6z8KLFIW
|
1706 |
+
oCtDuSWQP3CpMyVtRRooOyfPqsMpQhvfO0zAMzRbQYi/aytlryjvsvXDqmbOe1bu
|
1707 |
+
t8jLZ8HJnBoYuMTDSQPxYA5QzUbF83d597YV4Djbxy8ooAw/dyZ02SUS2jHaGh7c
|
1708 |
+
KUGRIjxpp7sC8rZcJwOJ9Abqm+RyguOhCcHpABnTPtRwa7pxpqpYrvS76Wy274fM
|
1709 |
+
m7v/OeZWYdMKp8RcTGB7BXcmer/YB1IsYvdwY9k5vG8cwnncdimvzsUsZAReiDZu
|
1710 |
+
MdRAGmI0Nj81Aa6sY6A=
|
1711 |
+
-----END CERTIFICATE-----
|
1712 |
+
|
1713 |
+
# Issuer: CN=GeoTrust Primary Certification Authority - G2 O=GeoTrust Inc. OU=(c) 2007 GeoTrust Inc. - For authorized use only
|
1714 |
+
# Subject: CN=GeoTrust Primary Certification Authority - G2 O=GeoTrust Inc. OU=(c) 2007 GeoTrust Inc. - For authorized use only
|
1715 |
+
# Label: "GeoTrust Primary Certification Authority - G2"
|
1716 |
+
# Serial: 80682863203381065782177908751794619243
|
1717 |
+
# MD5 Fingerprint: 01:5e:d8:6b:bd:6f:3d:8e:a1:31:f8:12:e0:98:73:6a
|
1718 |
+
# SHA1 Fingerprint: 8d:17:84:d5:37:f3:03:7d:ec:70:fe:57:8b:51:9a:99:e6:10:d7:b0
|
1719 |
+
# SHA256 Fingerprint: 5e:db:7a:c4:3b:82:a0:6a:87:61:e8:d7:be:49:79:eb:f2:61:1f:7d:d7:9b:f9:1c:1c:6b:56:6a:21:9e:d7:66
|
1720 |
+
-----BEGIN CERTIFICATE-----
|
1721 |
+
MIICrjCCAjWgAwIBAgIQPLL0SAoA4v7rJDteYD7DazAKBggqhkjOPQQDAzCBmDEL
|
1722 |
+
MAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChj
|
1723 |
+
KSAyMDA3IEdlb1RydXN0IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2
|
1724 |
+
MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
|
1725 |
+
eSAtIEcyMB4XDTA3MTEwNTAwMDAwMFoXDTM4MDExODIzNTk1OVowgZgxCzAJBgNV
|
1726 |
+
BAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykgMjAw
|
1727 |
+
NyBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNV
|
1728 |
+
BAMTLUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBH
|
1729 |
+
MjB2MBAGByqGSM49AgEGBSuBBAAiA2IABBWx6P0DFUPlrOuHNxFi79KDNlJ9RVcL
|
1730 |
+
So17VDs6bl8VAsBQps8lL33KSLjHUGMcKiEIfJo22Av+0SbFWDEwKCXzXV2juLal
|
1731 |
+
tJLtbCyf691DiaI8S0iRHVDsJt/WYC69IaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAO
|
1732 |
+
BgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBVfNVdRVfslsq0DafwBo/q+EVXVMAoG
|
1733 |
+
CCqGSM49BAMDA2cAMGQCMGSWWaboCd6LuvpaiIjwH5HTRqjySkwCY/tsXzjbLkGT
|
1734 |
+
qQ7mndwxHLKgpxgceeHHNgIwOlavmnRs9vuD4DPTCF+hnMJbn0bWtsuRBmOiBucz
|
1735 |
+
rD6ogRLQy7rQkgu2npaqBA+K
|
1736 |
+
-----END CERTIFICATE-----
|
1737 |
+
|
1738 |
+
# Issuer: CN=VeriSign Universal Root Certification Authority O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2008 VeriSign, Inc. - For authorized use only
|
1739 |
+
# Subject: CN=VeriSign Universal Root Certification Authority O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2008 VeriSign, Inc. - For authorized use only
|
1740 |
+
# Label: "VeriSign Universal Root Certification Authority"
|
1741 |
+
# Serial: 85209574734084581917763752644031726877
|
1742 |
+
# MD5 Fingerprint: 8e:ad:b5:01:aa:4d:81:e4:8c:1d:d1:e1:14:00:95:19
|
1743 |
+
# SHA1 Fingerprint: 36:79:ca:35:66:87:72:30:4d:30:a5:fb:87:3b:0f:a7:7b:b7:0d:54
|
1744 |
+
# SHA256 Fingerprint: 23:99:56:11:27:a5:71:25:de:8c:ef:ea:61:0d:df:2f:a0:78:b5:c8:06:7f:4e:82:82:90:bf:b8:60:e8:4b:3c
|
1745 |
+
-----BEGIN CERTIFICATE-----
|
1746 |
+
MIIEuTCCA6GgAwIBAgIQQBrEZCGzEyEDDrvkEhrFHTANBgkqhkiG9w0BAQsFADCB
|
1747 |
+
vTELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL
|
1748 |
+
ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJp
|
1749 |
+
U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MTgwNgYDVQQDEy9W
|
1750 |
+
ZXJpU2lnbiBVbml2ZXJzYWwgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAe
|
1751 |
+
Fw0wODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIG9MQswCQYDVQQGEwJVUzEX
|
1752 |
+
MBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0
|
1753 |
+
IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAyMDA4IFZlcmlTaWduLCBJbmMuIC0gRm9y
|
1754 |
+
IGF1dGhvcml6ZWQgdXNlIG9ubHkxODA2BgNVBAMTL1ZlcmlTaWduIFVuaXZlcnNh
|
1755 |
+
bCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEF
|
1756 |
+
AAOCAQ8AMIIBCgKCAQEAx2E3XrEBNNti1xWb/1hajCMj1mCOkdeQmIN65lgZOIzF
|
1757 |
+
9uVkhbSicfvtvbnazU0AtMgtc6XHaXGVHzk8skQHnOgO+k1KxCHfKWGPMiJhgsWH
|
1758 |
+
H26MfF8WIFFE0XBPV+rjHOPMee5Y2A7Cs0WTwCznmhcrewA3ekEzeOEz4vMQGn+H
|
1759 |
+
LL729fdC4uW/h2KJXwBL38Xd5HVEMkE6HnFuacsLdUYI0crSK5XQz/u5QGtkjFdN
|
1760 |
+
/BMReYTtXlT2NJ8IAfMQJQYXStrxHXpma5hgZqTZ79IugvHw7wnqRMkVauIDbjPT
|
1761 |
+
rJ9VAMf2CGqUuV/c4DPxhGD5WycRtPwW8rtWaoAljQIDAQABo4GyMIGvMA8GA1Ud
|
1762 |
+
EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMG0GCCsGAQUFBwEMBGEwX6FdoFsw
|
1763 |
+
WTBXMFUWCWltYWdlL2dpZjAhMB8wBwYFKw4DAhoEFI/l0xqGrI2Oa8PPgGrUSBgs
|
1764 |
+
exkuMCUWI2h0dHA6Ly9sb2dvLnZlcmlzaWduLmNvbS92c2xvZ28uZ2lmMB0GA1Ud
|
1765 |
+
DgQWBBS2d/ppSEefUxLVwuoHMnYH0ZcHGTANBgkqhkiG9w0BAQsFAAOCAQEASvj4
|
1766 |
+
sAPmLGd75JR3Y8xuTPl9Dg3cyLk1uXBPY/ok+myDjEedO2Pzmvl2MpWRsXe8rJq+
|
1767 |
+
seQxIcaBlVZaDrHC1LGmWazxY8u4TB1ZkErvkBYoH1quEPuBUDgMbMzxPcP1Y+Oz
|
1768 |
+
4yHJJDnp/RVmRvQbEdBNc6N9Rvk97ahfYtTxP/jgdFcrGJ2BtMQo2pSXpXDrrB2+
|
1769 |
+
BxHw1dvd5Yzw1TKwg+ZX4o+/vqGqvz0dtdQ46tewXDpPaj+PwGZsY6rp2aQW9IHR
|
1770 |
+
lRQOfc2VNNnSj3BzgXucfr2YYdhFh5iQxeuGMMY1v/D/w1WIg0vvBZIGcfK4mJO3
|
1771 |
+
7M2CYfE45k+XmCpajQ==
|
1772 |
+
-----END CERTIFICATE-----
|
1773 |
+
|
1774 |
+
# Issuer: CN=VeriSign Class 3 Public Primary Certification Authority - G4 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2007 VeriSign, Inc. - For authorized use only
|
1775 |
+
# Subject: CN=VeriSign Class 3 Public Primary Certification Authority - G4 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2007 VeriSign, Inc. - For authorized use only
|
1776 |
+
# Label: "VeriSign Class 3 Public Primary Certification Authority - G4"
|
1777 |
+
# Serial: 63143484348153506665311985501458640051
|
1778 |
+
# MD5 Fingerprint: 3a:52:e1:e7:fd:6f:3a:e3:6f:f3:6f:99:1b:f9:22:41
|
1779 |
+
# SHA1 Fingerprint: 22:d5:d8:df:8f:02:31:d1:8d:f7:9d:b7:cf:8a:2d:64:c9:3f:6c:3a
|
1780 |
+
# SHA256 Fingerprint: 69:dd:d7:ea:90:bb:57:c9:3e:13:5d:c8:5e:a6:fc:d5:48:0b:60:32:39:bd:c4:54:fc:75:8b:2a:26:cf:7f:79
|
1781 |
+
-----BEGIN CERTIFICATE-----
|
1782 |
+
MIIDhDCCAwqgAwIBAgIQL4D+I4wOIg9IZxIokYesszAKBggqhkjOPQQDAzCByjEL
|
1783 |
+
MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW
|
1784 |
+
ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2ln
|
1785 |
+
biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJp
|
1786 |
+
U2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9y
|
1787 |
+
aXR5IC0gRzQwHhcNMDcxMTA1MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCByjELMAkG
|
1788 |
+
A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJp
|
1789 |
+
U2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwg
|
1790 |
+
SW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2ln
|
1791 |
+
biBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5
|
1792 |
+
IC0gRzQwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASnVnp8Utpkmw4tXNherJI9/gHm
|
1793 |
+
GUo9FANL+mAnINmDiWn6VMaaGF5VKmTeBvaNSjutEDxlPZCIBIngMGGzrl0Bp3ve
|
1794 |
+
fLK+ymVhAIau2o970ImtTR1ZmkGxvEeA3J5iw/mjgbIwga8wDwYDVR0TAQH/BAUw
|
1795 |
+
AwEB/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJ
|
1796 |
+
aW1hZ2UvZ2lmMCEwHzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYj
|
1797 |
+
aHR0cDovL2xvZ28udmVyaXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFLMW
|
1798 |
+
kf3upm7ktS5Jj4d4gYDs5bG1MAoGCCqGSM49BAMDA2gAMGUCMGYhDBgmYFo4e1ZC
|
1799 |
+
4Kf8NoRRkSAsdk1DPcQdhCPQrNZ8NQbOzWm9kA3bbEhCHQ6qQgIxAJw9SDkjOVga
|
1800 |
+
FRJZap7v1VmyHVIsmXHNxynfGyphe3HR3vPA5Q06Sqotp9iGKt0uEA==
|
1801 |
+
-----END CERTIFICATE-----
|
1802 |
+
|
1803 |
+
# Issuer: O=VeriSign, Inc. OU=Class 3 Public Primary Certification Authority
|
1804 |
+
# Subject: O=VeriSign, Inc. OU=Class 3 Public Primary Certification Authority
|
1805 |
+
# Label: "Verisign Class 3 Public Primary Certification Authority"
|
1806 |
+
# Serial: 80507572722862485515306429940691309246
|
1807 |
+
# MD5 Fingerprint: ef:5a:f1:33:ef:f1:cd:bb:51:02:ee:12:14:4b:96:c4
|
1808 |
+
# SHA1 Fingerprint: a1:db:63:93:91:6f:17:e4:18:55:09:40:04:15:c7:02:40:b0:ae:6b
|
1809 |
+
# SHA256 Fingerprint: a4:b6:b3:99:6f:c2:f3:06:b3:fd:86:81:bd:63:41:3d:8c:50:09:cc:4f:a3:29:c2:cc:f0:e2:fa:1b:14:03:05
|
1810 |
+
-----BEGIN CERTIFICATE-----
|
1811 |
+
MIICPDCCAaUCEDyRMcsf9tAbDpq40ES/Er4wDQYJKoZIhvcNAQEFBQAwXzELMAkG
|
1812 |
+
A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz
|
1813 |
+
cyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2
|
1814 |
+
MDEyOTAwMDAwMFoXDTI4MDgwMjIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV
|
1815 |
+
BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmlt
|
1816 |
+
YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GN
|
1817 |
+
ADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhE
|
1818 |
+
BarsAx94f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/is
|
1819 |
+
I19wKTakyYbnsZogy1Olhec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0G
|
1820 |
+
CSqGSIb3DQEBBQUAA4GBABByUqkFFBkyCEHwxWsKzH4PIRnN5GfcX6kb5sroc50i
|
1821 |
+
2JhucwNhkcV8sEVAbkSdjbCxlnRhLQ2pRdKkkirWmnWXbj9T/UWZYB2oK0z5XqcJ
|
1822 |
+
2HUw19JlYD1n1khVdWk/kfVIC0dpImmClr7JyDiGSnoscxlIaU5rfGW/D/xwzoiQ
|
1823 |
+
-----END CERTIFICATE-----
|
1824 |
+
|
1825 |
+
# Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R3
|
1826 |
+
# Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R3
|
1827 |
+
# Label: "GlobalSign Root CA - R3"
|
1828 |
+
# Serial: 4835703278459759426209954
|
1829 |
+
# MD5 Fingerprint: c5:df:b8:49:ca:05:13:55:ee:2d:ba:1a:c3:3e:b0:28
|
1830 |
+
# SHA1 Fingerprint: d6:9b:56:11:48:f0:1c:77:c5:45:78:c1:09:26:df:5b:85:69:76:ad
|
1831 |
+
# SHA256 Fingerprint: cb:b5:22:d7:b7:f1:27:ad:6a:01:13:86:5b:df:1c:d4:10:2e:7d:07:59:af:63:5a:7c:f4:72:0d:c9:63:c5:3b
|
1832 |
+
-----BEGIN CERTIFICATE-----
|
1833 |
+
MIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4G
|
1834 |
+
A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNp
|
1835 |
+
Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4
|
1836 |
+
MTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMzETMBEG
|
1837 |
+
A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI
|
1838 |
+
hvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWtiHL8
|
1839 |
+
RgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsT
|
1840 |
+
gHeMCOFJ0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmm
|
1841 |
+
KPZpO/bLyCiR5Z2KYVc3rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zd
|
1842 |
+
QQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjlOCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZ
|
1843 |
+
XriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2xmmFghcCAwEAAaNCMEAw
|
1844 |
+
DgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFI/wS3+o
|
1845 |
+
LkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZU
|
1846 |
+
RUm7lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMp
|
1847 |
+
jjM5RcOO5LlXbKr8EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK
|
1848 |
+
6fBdRoyV3XpYKBovHd7NADdBj+1EbddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQX
|
1849 |
+
mcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18YIvDQVETI53O9zJrlAGomecs
|
1850 |
+
Mx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7rkpeDMdmztcpH
|
1851 |
+
WD9f
|
1852 |
+
-----END CERTIFICATE-----
|
1853 |
+
|
1854 |
+
# Issuer: CN=TC TrustCenter Universal CA III O=TC TrustCenter GmbH OU=TC TrustCenter Universal CA
|
1855 |
+
# Subject: CN=TC TrustCenter Universal CA III O=TC TrustCenter GmbH OU=TC TrustCenter Universal CA
|
1856 |
+
# Label: "TC TrustCenter Universal CA III"
|
1857 |
+
# Serial: 2010889993983507346460533407902964
|
1858 |
+
# MD5 Fingerprint: 9f:dd:db:ab:ff:8e:ff:45:21:5f:f0:6c:9d:8f:fe:2b
|
1859 |
+
# SHA1 Fingerprint: 96:56:cd:7b:57:96:98:95:d0:e1:41:46:68:06:fb:b8:c6:11:06:87
|
1860 |
+
# SHA256 Fingerprint: 30:9b:4a:87:f6:ca:56:c9:31:69:aa:a9:9c:6d:98:88:54:d7:89:2b:d5:43:7e:2d:07:b2:9c:be:da:55:d3:5d
|
1861 |
+
-----BEGIN CERTIFICATE-----
|
1862 |
+
MIID4TCCAsmgAwIBAgIOYyUAAQACFI0zFQLkbPQwDQYJKoZIhvcNAQEFBQAwezEL
|
1863 |
+
MAkGA1UEBhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxJDAiBgNV
|
1864 |
+
BAsTG1RDIFRydXN0Q2VudGVyIFVuaXZlcnNhbCBDQTEoMCYGA1UEAxMfVEMgVHJ1
|
1865 |
+
c3RDZW50ZXIgVW5pdmVyc2FsIENBIElJSTAeFw0wOTA5MDkwODE1MjdaFw0yOTEy
|
1866 |
+
MzEyMzU5NTlaMHsxCzAJBgNVBAYTAkRFMRwwGgYDVQQKExNUQyBUcnVzdENlbnRl
|
1867 |
+
ciBHbWJIMSQwIgYDVQQLExtUQyBUcnVzdENlbnRlciBVbml2ZXJzYWwgQ0ExKDAm
|
1868 |
+
BgNVBAMTH1RDIFRydXN0Q2VudGVyIFVuaXZlcnNhbCBDQSBJSUkwggEiMA0GCSqG
|
1869 |
+
SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDC2pxisLlxErALyBpXsq6DFJmzNEubkKLF
|
1870 |
+
5+cvAqBNLaT6hdqbJYUtQCggbergvbFIgyIpRJ9Og+41URNzdNW88jBmlFPAQDYv
|
1871 |
+
DIRlzg9uwliT6CwLOunBjvvya8o84pxOjuT5fdMnnxvVZ3iHLX8LR7PH6MlIfK8v
|
1872 |
+
zArZQe+f/prhsq75U7Xl6UafYOPfjdN/+5Z+s7Vy+EutCHnNaYlAJ/Uqwa1D7KRT
|
1873 |
+
yGG299J5KmcYdkhtWyUB0SbFt1dpIxVbYYqt8Bst2a9c8SaQaanVDED1M4BDj5yj
|
1874 |
+
dipFtK+/fz6HP3bFzSreIMUWWMv5G/UPyw0RUmS40nZid4PxWJ//AgMBAAGjYzBh
|
1875 |
+
MB8GA1UdIwQYMBaAFFbn4VslQ4Dg9ozhcbyO5YAvxEjiMA8GA1UdEwEB/wQFMAMB
|
1876 |
+
Af8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRW5+FbJUOA4PaM4XG8juWAL8RI
|
1877 |
+
4jANBgkqhkiG9w0BAQUFAAOCAQEAg8ev6n9NCjw5sWi+e22JLumzCecYV42Fmhfz
|
1878 |
+
dkJQEw/HkG8zrcVJYCtsSVgZ1OK+t7+rSbyUyKu+KGwWaODIl0YgoGhnYIg5IFHY
|
1879 |
+
aAERzqf2EQf27OysGh+yZm5WZ2B6dF7AbZc2rrUNXWZzwCUyRdhKBgePxLcHsU0G
|
1880 |
+
DeGl6/R1yrqc0L2z0zIkTO5+4nYES0lT2PLpVDP85XEfPRRclkvxOvIAu2y0+pZV
|
1881 |
+
CIgJwcyRGSmwIC3/yzikQOEXvnlhgP8HA4ZMTnsGnxGGjYnuJ8Tb4rwZjgvDwxPH
|
1882 |
+
LQNjO9Po5KIqwoIIlBZU8O8fJ5AluA0OKBtHd0e9HKgl8ZS0Zg==
|
1883 |
+
-----END CERTIFICATE-----
|
1884 |
+
|
1885 |
+
# Issuer: CN=Go Daddy Root Certificate Authority - G2 O=GoDaddy.com, Inc.
|
1886 |
+
# Subject: CN=Go Daddy Root Certificate Authority - G2 O=GoDaddy.com, Inc.
|
1887 |
+
# Label: "Go Daddy Root Certificate Authority - G2"
|
1888 |
+
# Serial: 0
|
1889 |
+
# MD5 Fingerprint: 80:3a:bc:22:c1:e6:fb:8d:9b:3b:27:4a:32:1b:9a:01
|
1890 |
+
# SHA1 Fingerprint: 47:be:ab:c9:22:ea:e8:0e:78:78:34:62:a7:9f:45:c2:54:fd:e6:8b
|
1891 |
+
# SHA256 Fingerprint: 45:14:0b:32:47:eb:9c:c8:c5:b4:f0:d7:b5:30:91:f7:32:92:08:9e:6e:5a:63:e2:74:9d:d3:ac:a9:19:8e:da
|
1892 |
+
-----BEGIN CERTIFICATE-----
|
1893 |
+
MIIDxTCCAq2gAwIBAgIBADANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMx
|
1894 |
+
EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoT
|
1895 |
+
EUdvRGFkZHkuY29tLCBJbmMuMTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRp
|
1896 |
+
ZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIz
|
1897 |
+
NTk1OVowgYMxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQH
|
1898 |
+
EwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjExMC8GA1UE
|
1899 |
+
AxMoR28gRGFkZHkgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIw
|
1900 |
+
DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL9xYgjx+lk09xvJGKP3gElY6SKD
|
1901 |
+
E6bFIEMBO4Tx5oVJnyfq9oQbTqC023CYxzIBsQU+B07u9PpPL1kwIuerGVZr4oAH
|
1902 |
+
/PMWdYA5UXvl+TW2dE6pjYIT5LY/qQOD+qK+ihVqf94Lw7YZFAXK6sOoBJQ7Rnwy
|
1903 |
+
DfMAZiLIjWltNowRGLfTshxgtDj6AozO091GB94KPutdfMh8+7ArU6SSYmlRJQVh
|
1904 |
+
GkSBjCypQ5Yj36w6gZoOKcUcqeldHraenjAKOc7xiID7S13MMuyFYkMlNAJWJwGR
|
1905 |
+
tDtwKj9useiciAF9n9T521NtYJ2/LOdYq7hfRvzOxBsDPAnrSTFcaUaz4EcCAwEA
|
1906 |
+
AaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE
|
1907 |
+
FDqahQcQZyi27/a9BUFuIMGU2g/eMA0GCSqGSIb3DQEBCwUAA4IBAQCZ21151fmX
|
1908 |
+
WWcDYfF+OwYxdS2hII5PZYe096acvNjpL9DbWu7PdIxztDhC2gV7+AJ1uP2lsdeu
|
1909 |
+
9tfeE8tTEH6KRtGX+rcuKxGrkLAngPnon1rpN5+r5N9ss4UXnT3ZJE95kTXWXwTr
|
1910 |
+
gIOrmgIttRD02JDHBHNA7XIloKmf7J6raBKZV8aPEjoJpL1E/QYVN8Gb5DKj7Tjo
|
1911 |
+
2GTzLH4U/ALqn83/B2gX2yKQOC16jdFU8WnjXzPKej17CuPKf1855eJ1usV2GDPO
|
1912 |
+
LPAvTK33sefOT6jEm0pUBsV/fdUID+Ic/n4XuKxe9tQWskMJDE32p2u0mYRlynqI
|
1913 |
+
4uJEvlz36hz1
|
1914 |
+
-----END CERTIFICATE-----
|
1915 |
+
|
1916 |
+
# Issuer: CN=Starfield Root Certificate Authority - G2 O=Starfield Technologies, Inc.
|
1917 |
+
# Subject: CN=Starfield Root Certificate Authority - G2 O=Starfield Technologies, Inc.
|
1918 |
+
# Label: "Starfield Root Certificate Authority - G2"
|
1919 |
+
# Serial: 0
|
1920 |
+
# MD5 Fingerprint: d6:39:81:c6:52:7e:96:69:fc:fc:ca:66:ed:05:f2:96
|
1921 |
+
# SHA1 Fingerprint: b5:1c:06:7c:ee:2b:0c:3d:f8:55:ab:2d:92:f4:fe:39:d4:e7:0f:0e
|
1922 |
+
# SHA256 Fingerprint: 2c:e1:cb:0b:f9:d2:f9:e1:02:99:3f:be:21:51:52:c3:b2:dd:0c:ab:de:1c:68:e5:31:9b:83:91:54:db:b7:f5
|
1923 |
+
-----BEGIN CERTIFICATE-----
|
1924 |
+
MIID3TCCAsWgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBjzELMAkGA1UEBhMCVVMx
|
1925 |
+
EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT
|
1926 |
+
HFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAMTKVN0YXJmaWVs
|
1927 |
+
ZCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAw
|
1928 |
+
MFoXDTM3MTIzMTIzNTk1OVowgY8xCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6
|
1929 |
+
b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQgVGVj
|
1930 |
+
aG5vbG9naWVzLCBJbmMuMTIwMAYDVQQDEylTdGFyZmllbGQgUm9vdCBDZXJ0aWZp
|
1931 |
+
Y2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
|
1932 |
+
ggEBAL3twQP89o/8ArFvW59I2Z154qK3A2FWGMNHttfKPTUuiUP3oWmb3ooa/RMg
|
1933 |
+
nLRJdzIpVv257IzdIvpy3Cdhl+72WoTsbhm5iSzchFvVdPtrX8WJpRBSiUZV9Lh1
|
1934 |
+
HOZ/5FSuS/hVclcCGfgXcVnrHigHdMWdSL5stPSksPNkN3mSwOxGXn/hbVNMYq/N
|
1935 |
+
Hwtjuzqd+/x5AJhhdM8mgkBj87JyahkNmcrUDnXMN/uLicFZ8WJ/X7NfZTD4p7dN
|
1936 |
+
dloedl40wOiWVpmKs/B/pM293DIxfJHP4F8R+GuqSVzRmZTRouNjWwl2tVZi4Ut0
|
1937 |
+
HZbUJtQIBFnQmA4O5t78w+wfkPECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAO
|
1938 |
+
BgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFHwMMh+n2TB/xH1oo2Kooc6rB1snMA0G
|
1939 |
+
CSqGSIb3DQEBCwUAA4IBAQARWfolTwNvlJk7mh+ChTnUdgWUXuEok21iXQnCoKjU
|
1940 |
+
sHU48TRqneSfioYmUeYs0cYtbpUgSpIB7LiKZ3sx4mcujJUDJi5DnUox9g61DLu3
|
1941 |
+
4jd/IroAow57UvtruzvE03lRTs2Q9GcHGcg8RnoNAX3FWOdt5oUwF5okxBDgBPfg
|
1942 |
+
8n/Uqgr/Qh037ZTlZFkSIHc40zI+OIF1lnP6aI+xy84fxez6nH7PfrHxBy22/L/K
|
1943 |
+
pL/QlwVKvOoYKAKQvVR4CSFx09F9HdkWsKlhPdAKACL8x3vLCWRFCztAgfd9fDL1
|
1944 |
+
mMpYjn0q7pBZc2T5NnReJaH1ZgUufzkVqSr7UIuOhWn0
|
1945 |
+
-----END CERTIFICATE-----
|
1946 |
+
|
1947 |
+
# Issuer: CN=Starfield Services Root Certificate Authority - G2 O=Starfield Technologies, Inc.
|
1948 |
+
# Subject: CN=Starfield Services Root Certificate Authority - G2 O=Starfield Technologies, Inc.
|
1949 |
+
# Label: "Starfield Services Root Certificate Authority - G2"
|
1950 |
+
# Serial: 0
|
1951 |
+
# MD5 Fingerprint: 17:35:74:af:7b:61:1c:eb:f4:f9:3c:e2:ee:40:f9:a2
|
1952 |
+
# SHA1 Fingerprint: 92:5a:8f:8d:2c:6d:04:e0:66:5f:59:6a:ff:22:d8:63:e8:25:6f:3f
|
1953 |
+
# SHA256 Fingerprint: 56:8d:69:05:a2:c8:87:08:a4:b3:02:51:90:ed:cf:ed:b1:97:4a:60:6a:13:c6:e5:29:0f:cb:2a:e6:3e:da:b5
|
1954 |
+
-----BEGIN CERTIFICATE-----
|
1955 |
+
MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMx
|
1956 |
+
EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT
|
1957 |
+
HFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVs
|
1958 |
+
ZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5
|
1959 |
+
MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNVBAYTAlVTMRAwDgYD
|
1960 |
+
VQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFy
|
1961 |
+
ZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2Vy
|
1962 |
+
dmljZXMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZI
|
1963 |
+
hvcNAQEBBQADggEPADCCAQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20p
|
1964 |
+
OsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm2
|
1965 |
+
8xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4PahHQUw2eeBGg6345AWh1K
|
1966 |
+
Ts9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLPLJGmpufe
|
1967 |
+
hRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk
|
1968 |
+
6mFBrMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAw
|
1969 |
+
DwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+q
|
1970 |
+
AdcwKziIorhtSpzyEZGDMA0GCSqGSIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMI
|
1971 |
+
bw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPPE95Dz+I0swSdHynVv/heyNXB
|
1972 |
+
ve6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTyxQGjhdByPq1z
|
1973 |
+
qwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkd
|
1974 |
+
iEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn
|
1975 |
+
0q23KXB56jzaYyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCN
|
1976 |
+
sSi6
|
1977 |
+
-----END CERTIFICATE-----
|
1978 |
+
|
1979 |
+
# Issuer: CN=AffirmTrust Commercial O=AffirmTrust
|
1980 |
+
# Subject: CN=AffirmTrust Commercial O=AffirmTrust
|
1981 |
+
# Label: "AffirmTrust Commercial"
|
1982 |
+
# Serial: 8608355977964138876
|
1983 |
+
# MD5 Fingerprint: 82:92:ba:5b:ef:cd:8a:6f:a6:3d:55:f9:84:f6:d6:b7
|
1984 |
+
# SHA1 Fingerprint: f9:b5:b6:32:45:5f:9c:be:ec:57:5f:80:dc:e9:6e:2c:c7:b2:78:b7
|
1985 |
+
# SHA256 Fingerprint: 03:76:ab:1d:54:c5:f9:80:3c:e4:b2:e2:01:a0:ee:7e:ef:7b:57:b6:36:e8:a9:3c:9b:8d:48:60:c9:6f:5f:a7
|
1986 |
+
-----BEGIN CERTIFICATE-----
|
1987 |
+
MIIDTDCCAjSgAwIBAgIId3cGJyapsXwwDQYJKoZIhvcNAQELBQAwRDELMAkGA1UE
|
1988 |
+
BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVz
|
1989 |
+
dCBDb21tZXJjaWFsMB4XDTEwMDEyOTE0MDYwNloXDTMwMTIzMTE0MDYwNlowRDEL
|
1990 |
+
MAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZp
|
1991 |
+
cm1UcnVzdCBDb21tZXJjaWFsMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
|
1992 |
+
AQEA9htPZwcroRX1BiLLHwGy43NFBkRJLLtJJRTWzsO3qyxPxkEylFf6EqdbDuKP
|
1993 |
+
Hx6GGaeqtS25Xw2Kwq+FNXkyLbscYjfysVtKPcrNcV/pQr6U6Mje+SJIZMblq8Yr
|
1994 |
+
ba0F8PrVC8+a5fBQpIs7R6UjW3p6+DM/uO+Zl+MgwdYoic+U+7lF7eNAFxHUdPAL
|
1995 |
+
MeIrJmqbTFeurCA+ukV6BfO9m2kVrn1OIGPENXY6BwLJN/3HR+7o8XYdcxXyl6S1
|
1996 |
+
yHp52UKqK39c/s4mT6NmgTWvRLpUHhwwMmWd5jyTXlBOeuM61G7MGvv50jeuJCqr
|
1997 |
+
VwMiKA1JdX+3KNp1v47j3A55MQIDAQABo0IwQDAdBgNVHQ4EFgQUnZPGU4teyq8/
|
1998 |
+
nx4P5ZmVvCT2lI8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwDQYJ
|
1999 |
+
KoZIhvcNAQELBQADggEBAFis9AQOzcAN/wr91LoWXym9e2iZWEnStB03TX8nfUYG
|
2000 |
+
XUPGhi4+c7ImfU+TqbbEKpqrIZcUsd6M06uJFdhrJNTxFq7YpFzUf1GO7RgBsZNj
|
2001 |
+
vbz4YYCanrHOQnDiqX0GJX0nof5v7LMeJNrjS1UaADs1tDvZ110w/YETifLCBivt
|
2002 |
+
Z8SOyUOyXGsViQK8YvxO8rUzqrJv0wqiUOP2O+guRMLbZjipM1ZI8W0bM40NjD9g
|
2003 |
+
N53Tym1+NH4Nn3J2ixufcv1SNUFFApYvHLKac0khsUlHRUe072o0EclNmsxZt9YC
|
2004 |
+
nlpOZbWUrhvfKbAW8b8Angc6F2S1BLUjIZkKlTuXfO8=
|
2005 |
+
-----END CERTIFICATE-----
|
2006 |
+
|
2007 |
+
# Issuer: CN=AffirmTrust Networking O=AffirmTrust
|
2008 |
+
# Subject: CN=AffirmTrust Networking O=AffirmTrust
|
2009 |
+
# Label: "AffirmTrust Networking"
|
2010 |
+
# Serial: 8957382827206547757
|
2011 |
+
# MD5 Fingerprint: 42:65:ca:be:01:9a:9a:4c:a9:8c:41:49:cd:c0:d5:7f
|
2012 |
+
# SHA1 Fingerprint: 29:36:21:02:8b:20:ed:02:f5:66:c5:32:d1:d6:ed:90:9f:45:00:2f
|
2013 |
+
# SHA256 Fingerprint: 0a:81:ec:5a:92:97:77:f1:45:90:4a:f3:8d:5d:50:9f:66:b5:e2:c5:8f:cd:b5:31:05:8b:0e:17:f3:f0:b4:1b
|
2014 |
+
-----BEGIN CERTIFICATE-----
|
2015 |
+
MIIDTDCCAjSgAwIBAgIIfE8EORzUmS0wDQYJKoZIhvcNAQEFBQAwRDELMAkGA1UE
|
2016 |
+
BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVz
|
2017 |
+
dCBOZXR3b3JraW5nMB4XDTEwMDEyOTE0MDgyNFoXDTMwMTIzMTE0MDgyNFowRDEL
|
2018 |
+
MAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZp
|
2019 |
+
cm1UcnVzdCBOZXR3b3JraW5nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
|
2020 |
+
AQEAtITMMxcua5Rsa2FSoOujz3mUTOWUgJnLVWREZY9nZOIG41w3SfYvm4SEHi3y
|
2021 |
+
YJ0wTsyEheIszx6e/jarM3c1RNg1lho9Nuh6DtjVR6FqaYvZ/Ls6rnla1fTWcbua
|
2022 |
+
kCNrmreIdIcMHl+5ni36q1Mr3Lt2PpNMCAiMHqIjHNRqrSK6mQEubWXLviRmVSRL
|
2023 |
+
QESxG9fhwoXA3hA/Pe24/PHxI1Pcv2WXb9n5QHGNfb2V1M6+oF4nI979ptAmDgAp
|
2024 |
+
6zxG8D1gvz9Q0twmQVGeFDdCBKNwV6gbh+0t+nvujArjqWaJGctB+d1ENmHP4ndG
|
2025 |
+
yH329JKBNv3bNPFyfvMMFr20FQIDAQABo0IwQDAdBgNVHQ4EFgQUBx/S55zawm6i
|
2026 |
+
QLSwelAQUHTEyL0wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwDQYJ
|
2027 |
+
KoZIhvcNAQEFBQADggEBAIlXshZ6qML91tmbmzTCnLQyFE2npN/svqe++EPbkTfO
|
2028 |
+
tDIuUFUaNU52Q3Eg75N3ThVwLofDwR1t3Mu1J9QsVtFSUzpE0nPIxBsFZVpikpzu
|
2029 |
+
QY0x2+c06lkh1QF612S4ZDnNye2v7UsDSKegmQGA3GWjNq5lWUhPgkvIZfFXHeVZ
|
2030 |
+
Lgo/bNjR9eUJtGxUAArgFU2HdW23WJZa3W3SAKD0m0i+wzekujbgfIeFlxoVot4u
|
2031 |
+
olu9rxj5kFDNcFn4J2dHy8egBzp90SxdbBk6ZrV9/ZFvgrG+CJPbFEfxojfHRZ48
|
2032 |
+
x3evZKiT3/Zpg4Jg8klCNO1aAFSFHBY2kgxc+qatv9s=
|
2033 |
+
-----END CERTIFICATE-----
|
2034 |
+
|
2035 |
+
# Issuer: CN=AffirmTrust Premium O=AffirmTrust
|
2036 |
+
# Subject: CN=AffirmTrust Premium O=AffirmTrust
|
2037 |
+
# Label: "AffirmTrust Premium"
|
2038 |
+
# Serial: 7893706540734352110
|
2039 |
+
# MD5 Fingerprint: c4:5d:0e:48:b6:ac:28:30:4e:0a:bc:f9:38:16:87:57
|
2040 |
+
# SHA1 Fingerprint: d8:a6:33:2c:e0:03:6f:b1:85:f6:63:4f:7d:6a:06:65:26:32:28:27
|
2041 |
+
# SHA256 Fingerprint: 70:a7:3f:7f:37:6b:60:07:42:48:90:45:34:b1:14:82:d5:bf:0e:69:8e:cc:49:8d:f5:25:77:eb:f2:e9:3b:9a
|
2042 |
+
-----BEGIN CERTIFICATE-----
|
2043 |
+
MIIFRjCCAy6gAwIBAgIIbYwURrGmCu4wDQYJKoZIhvcNAQEMBQAwQTELMAkGA1UE
|
2044 |
+
BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVz
|
2045 |
+
dCBQcmVtaXVtMB4XDTEwMDEyOTE0MTAzNloXDTQwMTIzMTE0MTAzNlowQTELMAkG
|
2046 |
+
A1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1U
|
2047 |
+
cnVzdCBQcmVtaXVtMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxBLf
|
2048 |
+
qV/+Qd3d9Z+K4/as4Tx4mrzY8H96oDMq3I0gW64tb+eT2TZwamjPjlGjhVtnBKAQ
|
2049 |
+
JG9dKILBl1fYSCkTtuG+kU3fhQxTGJoeJKJPj/CihQvL9Cl/0qRY7iZNyaqoe5rZ
|
2050 |
+
+jjeRFcV5fiMyNlI4g0WJx0eyIOFJbe6qlVBzAMiSy2RjYvmia9mx+n/K+k8rNrS
|
2051 |
+
s8PhaJyJ+HoAVt70VZVs+7pk3WKL3wt3MutizCaam7uqYoNMtAZ6MMgpv+0GTZe5
|
2052 |
+
HMQxK9VfvFMSF5yZVylmd2EhMQcuJUmdGPLu8ytxjLW6OQdJd/zvLpKQBY0tL3d7
|
2053 |
+
70O/Nbua2Plzpyzy0FfuKE4mX4+QaAkvuPjcBukumj5Rp9EixAqnOEhss/n/fauG
|
2054 |
+
V+O61oV4d7pD6kh/9ti+I20ev9E2bFhc8e6kGVQa9QPSdubhjL08s9NIS+LI+H+S
|
2055 |
+
qHZGnEJlPqQewQcDWkYtuJfzt9WyVSHvutxMAJf7FJUnM7/oQ0dG0giZFmA7mn7S
|
2056 |
+
5u046uwBHjxIVkkJx0w3AJ6IDsBz4W9m6XJHMD4Q5QsDyZpCAGzFlH5hxIrff4Ia
|
2057 |
+
C1nEWTJ3s7xgaVY5/bQGeyzWZDbZvUjthB9+pSKPKrhC9IK31FOQeE4tGv2Bb0TX
|
2058 |
+
OwF0lkLgAOIua+rF7nKsu7/+6qqo+Nz2snmKtmcCAwEAAaNCMEAwHQYDVR0OBBYE
|
2059 |
+
FJ3AZ6YMItkm9UWrpmVSESfYRaxjMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/
|
2060 |
+
BAQDAgEGMA0GCSqGSIb3DQEBDAUAA4ICAQCzV00QYk465KzquByvMiPIs0laUZx2
|
2061 |
+
KI15qldGF9X1Uva3ROgIRL8YhNILgM3FEv0AVQVhh0HctSSePMTYyPtwni94loMg
|
2062 |
+
Nt58D2kTiKV1NpgIpsbfrM7jWNa3Pt668+s0QNiigfV4Py/VpfzZotReBA4Xrf5B
|
2063 |
+
8OWycvpEgjNC6C1Y91aMYj+6QrCcDFx+LmUmXFNPALJ4fqENmS2NuB2OosSw/WDQ
|
2064 |
+
MKSOyARiqcTtNd56l+0OOF6SL5Nwpamcb6d9Ex1+xghIsV5n61EIJenmJWtSKZGc
|
2065 |
+
0jlzCFfemQa0W50QBuHCAKi4HEoCChTQwUHK+4w1IX2COPKpVJEZNZOUbWo6xbLQ
|
2066 |
+
u4mGk+ibyQ86p3q4ofB4Rvr8Ny/lioTz3/4E2aFooC8k4gmVBtWVyuEklut89pMF
|
2067 |
+
u+1z6S3RdTnX5yTb2E5fQ4+e0BQ5v1VwSJlXMbSc7kqYA5YwH2AG7hsj/oFgIxpH
|
2068 |
+
YoWlzBk0gG+zrBrjn/B7SK3VAdlntqlyk+otZrWyuOQ9PLLvTIzq6we/qzWaVYa8
|
2069 |
+
GKa1qF60g2xraUDTn9zxw2lrueFtCfTxqlB2Cnp9ehehVZZCmTEJ3WARjQUwfuaO
|
2070 |
+
RtGdFNrHF+QFlozEJLUbzxQHskD4o55BhrwE0GuWyCqANP2/7waj3VjFhT0+j/6e
|
2071 |
+
KeC2uAloGRwYQw==
|
2072 |
+
-----END CERTIFICATE-----
|
2073 |
+
|
2074 |
+
# Issuer: CN=AffirmTrust Premium ECC O=AffirmTrust
|
2075 |
+
# Subject: CN=AffirmTrust Premium ECC O=AffirmTrust
|
2076 |
+
# Label: "AffirmTrust Premium ECC"
|
2077 |
+
# Serial: 8401224907861490260
|
2078 |
+
# MD5 Fingerprint: 64:b0:09:55:cf:b1:d5:99:e2:be:13:ab:a6:5d:ea:4d
|
2079 |
+
# SHA1 Fingerprint: b8:23:6b:00:2f:1d:16:86:53:01:55:6c:11:a4:37:ca:eb:ff:c3:bb
|
2080 |
+
# SHA256 Fingerprint: bd:71:fd:f6:da:97:e4:cf:62:d1:64:7a:dd:25:81:b0:7d:79:ad:f8:39:7e:b4:ec:ba:9c:5e:84:88:82:14:23
|
2081 |
+
-----BEGIN CERTIFICATE-----
|
2082 |
+
MIIB/jCCAYWgAwIBAgIIdJclisc/elQwCgYIKoZIzj0EAwMwRTELMAkGA1UEBhMC
|
2083 |
+
VVMxFDASBgNVBAoMC0FmZmlybVRydXN0MSAwHgYDVQQDDBdBZmZpcm1UcnVzdCBQ
|
2084 |
+
cmVtaXVtIEVDQzAeFw0xMDAxMjkxNDIwMjRaFw00MDEyMzExNDIwMjRaMEUxCzAJ
|
2085 |
+
BgNVBAYTAlVTMRQwEgYDVQQKDAtBZmZpcm1UcnVzdDEgMB4GA1UEAwwXQWZmaXJt
|
2086 |
+
VHJ1c3QgUHJlbWl1bSBFQ0MwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQNMF4bFZ0D
|
2087 |
+
0KF5Nbc6PJJ6yhUczWLznCZcBz3lVPqj1swS6vQUX+iOGasvLkjmrBhDeKzQN8O9
|
2088 |
+
ss0s5kfiGuZjuD0uL3jET9v0D6RoTFVya5UdThhClXjMNzyR4ptlKymjQjBAMB0G
|
2089 |
+
A1UdDgQWBBSaryl6wBE1NSZRMADDav5A1a7WPDAPBgNVHRMBAf8EBTADAQH/MA4G
|
2090 |
+
A1UdDwEB/wQEAwIBBjAKBggqhkjOPQQDAwNnADBkAjAXCfOHiFBar8jAQr9HX/Vs
|
2091 |
+
aobgxCd05DhT1wV/GzTjxi+zygk8N53X57hG8f2h4nECMEJZh0PUUd+60wkyWs6I
|
2092 |
+
flc9nF9Ca/UHLbXwgpP5WW+uZPpY5Yse42O+tYHNbwKMeQ==
|
2093 |
+
-----END CERTIFICATE-----
|
2094 |
+
|
2095 |
+
# Issuer: CN=StartCom Certification Authority O=StartCom Ltd. OU=Secure Digital Certificate Signing
|
2096 |
+
# Subject: CN=StartCom Certification Authority O=StartCom Ltd. OU=Secure Digital Certificate Signing
|
2097 |
+
# Label: "StartCom Certification Authority"
|
2098 |
+
# Serial: 45
|
2099 |
+
# MD5 Fingerprint: c9:3b:0d:84:41:fc:a4:76:79:23:08:57:de:10:19:16
|
2100 |
+
# SHA1 Fingerprint: a3:f1:33:3f:e2:42:bf:cf:c5:d1:4e:8f:39:42:98:40:68:10:d1:a0
|
2101 |
+
# SHA256 Fingerprint: e1:78:90:ee:09:a3:fb:f4:f4:8b:9c:41:4a:17:d6:37:b7:a5:06:47:e9:bc:75:23:22:72:7f:cc:17:42:a9:11
|
2102 |
+
-----BEGIN CERTIFICATE-----
|
2103 |
+
MIIHhzCCBW+gAwIBAgIBLTANBgkqhkiG9w0BAQsFADB9MQswCQYDVQQGEwJJTDEW
|
2104 |
+
MBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwg
|
2105 |
+
Q2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNh
|
2106 |
+
dGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0NjM3WhcNMzYwOTE3MTk0NjM2WjB9
|
2107 |
+
MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMi
|
2108 |
+
U2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMgU3Rh
|
2109 |
+
cnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUA
|
2110 |
+
A4ICDwAwggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZk
|
2111 |
+
pMyONvg45iPwbm2xPN1yo4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rf
|
2112 |
+
OQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/C
|
2113 |
+
Ji/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/deMotHweXMAEtcnn6RtYT
|
2114 |
+
Kqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt2PZE4XNi
|
2115 |
+
HzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMM
|
2116 |
+
Av+Z6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w
|
2117 |
+
+2OqqGwaVLRcJXrJosmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+
|
2118 |
+
Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3
|
2119 |
+
Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVcUjyJthkqcwEKDwOzEmDyei+B
|
2120 |
+
26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT37uMdBNSSwID
|
2121 |
+
AQABo4ICEDCCAgwwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYD
|
2122 |
+
VR0OBBYEFE4L7xqkQFulF2mHMMo0aEPQQa7yMB8GA1UdIwQYMBaAFE4L7xqkQFul
|
2123 |
+
F2mHMMo0aEPQQa7yMIIBWgYDVR0gBIIBUTCCAU0wggFJBgsrBgEEAYG1NwEBATCC
|
2124 |
+
ATgwLgYIKwYBBQUHAgEWImh0dHA6Ly93d3cuc3RhcnRzc2wuY29tL3BvbGljeS5w
|
2125 |
+
ZGYwNAYIKwYBBQUHAgEWKGh0dHA6Ly93d3cuc3RhcnRzc2wuY29tL2ludGVybWVk
|
2126 |
+
aWF0ZS5wZGYwgc8GCCsGAQUFBwICMIHCMCcWIFN0YXJ0IENvbW1lcmNpYWwgKFN0
|
2127 |
+
YXJ0Q29tKSBMdGQuMAMCAQEagZZMaW1pdGVkIExpYWJpbGl0eSwgcmVhZCB0aGUg
|
2128 |
+
c2VjdGlvbiAqTGVnYWwgTGltaXRhdGlvbnMqIG9mIHRoZSBTdGFydENvbSBDZXJ0
|
2129 |
+
aWZpY2F0aW9uIEF1dGhvcml0eSBQb2xpY3kgYXZhaWxhYmxlIGF0IGh0dHA6Ly93
|
2130 |
+
d3cuc3RhcnRzc2wuY29tL3BvbGljeS5wZGYwEQYJYIZIAYb4QgEBBAQDAgAHMDgG
|
2131 |
+
CWCGSAGG+EIBDQQrFilTdGFydENvbSBGcmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1
|
2132 |
+
dGhvcml0eTANBgkqhkiG9w0BAQsFAAOCAgEAjo/n3JR5fPGFf59Jb2vKXfuM/gTF
|
2133 |
+
wWLRfUKKvFO3lANmMD+x5wqnUCBVJX92ehQN6wQOQOY+2IirByeDqXWmN3PH/UvS
|
2134 |
+
Ta0XQMhGvjt/UfzDtgUx3M2FIk5xt/JxXrAaxrqTi3iSSoX4eA+D/i+tLPfkpLst
|
2135 |
+
0OcNOrg+zvZ49q5HJMqjNTbOx8aHmNrs++myziebiMMEofYLWWivydsQD032ZGNc
|
2136 |
+
pRJvkrKTlMeIFw6Ttn5ii5B/q06f/ON1FE8qMt9bDeD1e5MNq6HPh+GlBEXoPBKl
|
2137 |
+
CcWw0bdT82AUuoVpaiF8H3VhFyAXe2w7QSlc4axa0c2Mm+tgHRns9+Ww2vl5GKVF
|
2138 |
+
P0lDV9LdJNUso/2RjSe15esUBppMeyG7Oq0wBhjA2MFrLH9ZXF2RsXAiV+uKa0hK
|
2139 |
+
1Q8p7MZAwC+ITGgBF3f0JBlPvfrhsiAhS90a2Cl9qrjeVOwhVYBsHvUwyKMQ5bLm
|
2140 |
+
KhQxw4UtjJixhlpPiVktucf3HMiKf8CdBUrmQk9io20ppB+Fq9vlgcitKj1MXVuE
|
2141 |
+
JnHEhV5xJMqlG2zYYdMa4FTbzrqpMrUi9nNBCV24F10OD5mQ1kfabwo6YigUZ4LZ
|
2142 |
+
8dCAWZvLMdibD4x3TrVoivJs9iQOLWxwxXPR3hTQcY+203sC9uO41Alua551hDnm
|
2143 |
+
fyWl8kgAwKQB2j8=
|
2144 |
+
-----END CERTIFICATE-----
|
2145 |
+
|
2146 |
+
# Issuer: CN=StartCom Certification Authority G2 O=StartCom Ltd.
|
2147 |
+
# Subject: CN=StartCom Certification Authority G2 O=StartCom Ltd.
|
2148 |
+
# Label: "StartCom Certification Authority G2"
|
2149 |
+
# Serial: 59
|
2150 |
+
# MD5 Fingerprint: 78:4b:fb:9e:64:82:0a:d3:b8:4c:62:f3:64:f2:90:64
|
2151 |
+
# SHA1 Fingerprint: 31:f1:fd:68:22:63:20:ee:c6:3b:3f:9d:ea:4a:3e:53:7c:7c:39:17
|
2152 |
+
# SHA256 Fingerprint: c7:ba:65:67:de:93:a7:98:ae:1f:aa:79:1e:71:2d:37:8f:ae:1f:93:c4:39:7f:ea:44:1b:b7:cb:e6:fd:59:95
|
2153 |
+
-----BEGIN CERTIFICATE-----
|
2154 |
+
MIIFYzCCA0ugAwIBAgIBOzANBgkqhkiG9w0BAQsFADBTMQswCQYDVQQGEwJJTDEW
|
2155 |
+
MBQGA1UEChMNU3RhcnRDb20gTHRkLjEsMCoGA1UEAxMjU3RhcnRDb20gQ2VydGlm
|
2156 |
+
aWNhdGlvbiBBdXRob3JpdHkgRzIwHhcNMTAwMTAxMDEwMDAxWhcNMzkxMjMxMjM1
|
2157 |
+
OTAxWjBTMQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRkLjEsMCoG
|
2158 |
+
A1UEAxMjU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgRzIwggIiMA0G
|
2159 |
+
CSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2iTZbB7cgNr2Cu+EWIAOVeq8Oo1XJ
|
2160 |
+
JZlKxdBWQYeQTSFgpBSHO839sj60ZwNq7eEPS8CRhXBF4EKe3ikj1AENoBB5uNsD
|
2161 |
+
vfOpL9HG4A/LnooUCri99lZi8cVytjIl2bLzvWXFDSxu1ZJvGIsAQRSCb0AgJnoo
|
2162 |
+
D/Uefyf3lLE3PbfHkffiAez9lInhzG7TNtYKGXmu1zSCZf98Qru23QumNK9LYP5/
|
2163 |
+
Q0kGi4xDuFby2X8hQxfqp0iVAXV16iulQ5XqFYSdCI0mblWbq9zSOdIxHWDirMxW
|
2164 |
+
RST1HFSr7obdljKF+ExP6JV2tgXdNiNnvP8V4so75qbsO+wmETRIjfaAKxojAuuK
|
2165 |
+
HDp2KntWFhxyKrOq42ClAJ8Em+JvHhRYW6Vsi1g8w7pOOlz34ZYrPu8HvKTlXcxN
|
2166 |
+
nw3h3Kq74W4a7I/htkxNeXJdFzULHdfBR9qWJODQcqhaX2YtENwvKhOuJv4KHBnM
|
2167 |
+
0D4LnMgJLvlblnpHnOl68wVQdJVznjAJ85eCXuaPOQgeWeU1FEIT/wCc976qUM/i
|
2168 |
+
UUjXuG+v+E5+M5iSFGI6dWPPe/regjupuznixL0sAA7IF6wT700ljtizkC+p2il9
|
2169 |
+
Ha90OrInwMEePnWjFqmveiJdnxMaz6eg6+OGCtP95paV1yPIN93EfKo2rJgaErHg
|
2170 |
+
TuixO/XWb/Ew1wIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQE
|
2171 |
+
AwIBBjAdBgNVHQ4EFgQUS8W0QGutHLOlHGVuRjaJhwUMDrYwDQYJKoZIhvcNAQEL
|
2172 |
+
BQADggIBAHNXPyzVlTJ+N9uWkusZXn5T50HsEbZH77Xe7XRcxfGOSeD8bpkTzZ+K
|
2173 |
+
2s06Ctg6Wgk/XzTQLwPSZh0avZyQN8gMjgdalEVGKua+etqhqaRpEpKwfTbURIfX
|
2174 |
+
UfEpY9Z1zRbkJ4kd+MIySP3bmdCPX1R0zKxnNBFi2QwKN4fRoxdIjtIXHfbX/dtl
|
2175 |
+
6/2o1PXWT6RbdejF0mCy2wl+JYt7ulKSnj7oxXehPOBKc2thz4bcQ///If4jXSRK
|
2176 |
+
9dNtD2IEBVeC2m6kMyV5Sy5UGYvMLD0w6dEG/+gyRr61M3Z3qAFdlsHB1b6uJcDJ
|
2177 |
+
HgoJIIihDsnzb02CVAAgp9KP5DlUFy6NHrgbuxu9mk47EDTcnIhT76IxW1hPkWLI
|
2178 |
+
wpqazRVdOKnWvvgTtZ8SafJQYqz7Fzf07rh1Z2AQ+4NQ+US1dZxAF7L+/XldblhY
|
2179 |
+
XzD8AK6vM8EOTmy6p6ahfzLbOOCxchcKK5HsamMm7YnUeMx0HgX4a/6ManY5Ka5l
|
2180 |
+
IxKVCCIcl85bBu4M4ru8H0ST9tg4RQUh7eStqxK2A6RCLi3ECToDZ2mEmuFZkIoo
|
2181 |
+
hdVddLHRDiBYmxOlsGOm7XtH/UVVMKTumtTm4ofvmMkyghEpIrwACjFeLQ/Ajulr
|
2182 |
+
so8uBtjRkcfGEvRM/TAXw8HaOFvjqermobp573PYtlNXLfbQ4ddI
|
2183 |
+
-----END CERTIFICATE-----
|
lib/Google/Model.php
ADDED
@@ -0,0 +1,250 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* Copyright 2011 Google Inc.
|
4 |
+
*
|
5 |
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
6 |
+
* you may not use this file except in compliance with the License.
|
7 |
+
* You may obtain 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,
|
13 |
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14 |
+
* See the License for the specific language governing permissions and
|
15 |
+
* limitations under the License.
|
16 |
+
*/
|
17 |
+
|
18 |
+
/**
|
19 |
+
* This class defines attributes, valid values, and usage which is generated
|
20 |
+
* from a given json schema.
|
21 |
+
* http://tools.ietf.org/html/draft-zyp-json-schema-03#section-5
|
22 |
+
*
|
23 |
+
* @author Chirag Shah <chirags@google.com>
|
24 |
+
*
|
25 |
+
*/
|
26 |
+
class Google_Model implements ArrayAccess
|
27 |
+
{
|
28 |
+
protected $modelData = array();
|
29 |
+
protected $processed = array();
|
30 |
+
|
31 |
+
/**
|
32 |
+
* Polymorphic - accepts a variable number of arguments dependent
|
33 |
+
* on the type of the model subclass.
|
34 |
+
*/
|
35 |
+
public function __construct()
|
36 |
+
{
|
37 |
+
if (func_num_args() == 1 && is_array(func_get_arg(0))) {
|
38 |
+
// Initialize the model with the array's contents.
|
39 |
+
$array = func_get_arg(0);
|
40 |
+
$this->mapTypes($array);
|
41 |
+
}
|
42 |
+
}
|
43 |
+
|
44 |
+
public function __get($key)
|
45 |
+
{
|
46 |
+
$keyTypeName = $this->keyType($key);
|
47 |
+
$keyDataType = $this->dataType($key);
|
48 |
+
if (isset($this->$keyTypeName) && !isset($this->processed[$key])) {
|
49 |
+
if (isset($this->modelData[$key])) {
|
50 |
+
$val = $this->modelData[$key];
|
51 |
+
} else if (isset($this->$keyDataType) &&
|
52 |
+
($this->$keyDataType == 'array' || $this->$keyDataType == 'map')) {
|
53 |
+
$val = array();
|
54 |
+
} else {
|
55 |
+
$val = null;
|
56 |
+
}
|
57 |
+
|
58 |
+
if ($this->isAssociativeArray($val)) {
|
59 |
+
if (isset($this->$keyDataType) && 'map' == $this->$keyDataType) {
|
60 |
+
foreach ($val as $arrayKey => $arrayItem) {
|
61 |
+
$this->modelData[$key][$arrayKey] =
|
62 |
+
$this->createObjectFromName($keyTypeName, $arrayItem);
|
63 |
+
}
|
64 |
+
} else {
|
65 |
+
$this->modelData[$key] = $this->createObjectFromName($keyTypeName, $val);
|
66 |
+
}
|
67 |
+
} else if (is_array($val)) {
|
68 |
+
$arrayObject = array();
|
69 |
+
foreach ($val as $arrayIndex => $arrayItem) {
|
70 |
+
$arrayObject[$arrayIndex] =
|
71 |
+
$this->createObjectFromName($keyTypeName, $arrayItem);
|
72 |
+
}
|
73 |
+
$this->modelData[$key] = $arrayObject;
|
74 |
+
}
|
75 |
+
$this->processed[$key] = true;
|
76 |
+
}
|
77 |
+
|
78 |
+
return $this->modelData[$key];
|
79 |
+
}
|
80 |
+
|
81 |
+
/**
|
82 |
+
* Initialize this object's properties from an array.
|
83 |
+
*
|
84 |
+
* @param array $array Used to seed this object's properties.
|
85 |
+
* @return void
|
86 |
+
*/
|
87 |
+
protected function mapTypes($array)
|
88 |
+
{
|
89 |
+
// Hard initilise simple types, lazy load more complex ones.
|
90 |
+
foreach ($array as $key => $val) {
|
91 |
+
if ( !property_exists($this, $this->keyType($key)) &&
|
92 |
+
property_exists($this, $key)) {
|
93 |
+
$this->$key = $val;
|
94 |
+
unset($array[$key]);
|
95 |
+
} elseif (property_exists($this, $camelKey = Google_Utils::camelCase($key))) {
|
96 |
+
// This checks if property exists as camelCase, leaving it in array as snake_case
|
97 |
+
// in case of backwards compatibility issues.
|
98 |
+
$this->$camelKey = $val;
|
99 |
+
}
|
100 |
+
}
|
101 |
+
$this->modelData = $array;
|
102 |
+
}
|
103 |
+
|
104 |
+
/**
|
105 |
+
* Create a simplified object suitable for straightforward
|
106 |
+
* conversion to JSON. This is relatively expensive
|
107 |
+
* due to the usage of reflection, but shouldn't be called
|
108 |
+
* a whole lot, and is the most straightforward way to filter.
|
109 |
+
*/
|
110 |
+
public function toSimpleObject()
|
111 |
+
{
|
112 |
+
$object = new stdClass();
|
113 |
+
|
114 |
+
// Process all other data.
|
115 |
+
foreach ($this->modelData as $key => $val) {
|
116 |
+
$result = $this->getSimpleValue($val);
|
117 |
+
if ($result !== null) {
|
118 |
+
$object->$key = $result;
|
119 |
+
}
|
120 |
+
}
|
121 |
+
|
122 |
+
// Process all public properties.
|
123 |
+
$reflect = new ReflectionObject($this);
|
124 |
+
$props = $reflect->getProperties(ReflectionProperty::IS_PUBLIC);
|
125 |
+
foreach ($props as $member) {
|
126 |
+
$name = $member->getName();
|
127 |
+
$result = $this->getSimpleValue($this->$name);
|
128 |
+
if ($result !== null) {
|
129 |
+
$object->$name = $result;
|
130 |
+
}
|
131 |
+
}
|
132 |
+
|
133 |
+
return $object;
|
134 |
+
}
|
135 |
+
|
136 |
+
/**
|
137 |
+
* Handle different types of values, primarily
|
138 |
+
* other objects and map and array data types.
|
139 |
+
*/
|
140 |
+
private function getSimpleValue($value)
|
141 |
+
{
|
142 |
+
if ($value instanceof Google_Model) {
|
143 |
+
return $value->toSimpleObject();
|
144 |
+
} else if (is_array($value)) {
|
145 |
+
$return = array();
|
146 |
+
foreach ($value as $key => $a_value) {
|
147 |
+
$a_value = $this->getSimpleValue($a_value);
|
148 |
+
if ($a_value !== null) {
|
149 |
+
$return[$key] = $a_value;
|
150 |
+
}
|
151 |
+
}
|
152 |
+
return $return;
|
153 |
+
}
|
154 |
+
return $value;
|
155 |
+
}
|
156 |
+
|
157 |
+
/**
|
158 |
+
* Returns true only if the array is associative.
|
159 |
+
* @param array $array
|
160 |
+
* @return bool True if the array is associative.
|
161 |
+
*/
|
162 |
+
protected function isAssociativeArray($array)
|
163 |
+
{
|
164 |
+
if (!is_array($array)) {
|
165 |
+
return false;
|
166 |
+
}
|
167 |
+
$keys = array_keys($array);
|
168 |
+
foreach ($keys as $key) {
|
169 |
+
if (is_string($key)) {
|
170 |
+
return true;
|
171 |
+
}
|
172 |
+
}
|
173 |
+
return false;
|
174 |
+
}
|
175 |
+
|
176 |
+
/**
|
177 |
+
* Given a variable name, discover its type.
|
178 |
+
*
|
179 |
+
* @param $name
|
180 |
+
* @param $item
|
181 |
+
* @return object The object from the item.
|
182 |
+
*/
|
183 |
+
private function createObjectFromName($name, $item)
|
184 |
+
{
|
185 |
+
$type = $this->$name;
|
186 |
+
return new $type($item);
|
187 |
+
}
|
188 |
+
|
189 |
+
/**
|
190 |
+
* Verify if $obj is an array.
|
191 |
+
* @throws Google_Exception Thrown if $obj isn't an array.
|
192 |
+
* @param array $obj Items that should be validated.
|
193 |
+
* @param string $method Method expecting an array as an argument.
|
194 |
+
*/
|
195 |
+
public function assertIsArray($obj, $method)
|
196 |
+
{
|
197 |
+
if ($obj && !is_array($obj)) {
|
198 |
+
throw new Google_Exception(
|
199 |
+
"Incorrect parameter type passed to $method(). Expected an array."
|
200 |
+
);
|
201 |
+
}
|
202 |
+
}
|
203 |
+
|
204 |
+
public function offsetExists($offset)
|
205 |
+
{
|
206 |
+
return isset($this->$offset) || isset($this->modelData[$offset]);
|
207 |
+
}
|
208 |
+
|
209 |
+
public function offsetGet($offset)
|
210 |
+
{
|
211 |
+
return isset($this->$offset) ?
|
212 |
+
$this->$offset :
|
213 |
+
$this->__get($offset);
|
214 |
+
}
|
215 |
+
|
216 |
+
public function offsetSet($offset, $value)
|
217 |
+
{
|
218 |
+
if (property_exists($this, $offset)) {
|
219 |
+
$this->$offset = $value;
|
220 |
+
} else {
|
221 |
+
$this->modelData[$offset] = $value;
|
222 |
+
$this->processed[$offset] = true;
|
223 |
+
}
|
224 |
+
}
|
225 |
+
|
226 |
+
public function offsetUnset($offset)
|
227 |
+
{
|
228 |
+
unset($this->modelData[$offset]);
|
229 |
+
}
|
230 |
+
|
231 |
+
protected function keyType($key)
|
232 |
+
{
|
233 |
+
return $key . "Type";
|
234 |
+
}
|
235 |
+
|
236 |
+
protected function dataType($key)
|
237 |
+
{
|
238 |
+
return $key . "DataType";
|
239 |
+
}
|
240 |
+
|
241 |
+
public function __isset($key)
|
242 |
+
{
|
243 |
+
return isset($this->modelData[$key]);
|
244 |
+
}
|
245 |
+
|
246 |
+
public function __unset($key)
|
247 |
+
{
|
248 |
+
unset($this->modelData[$key]);
|
249 |
+
}
|
250 |
+
}
|
lib/Google/Service.php
ADDED
@@ -0,0 +1,39 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* Copyright 2010 Google Inc.
|
4 |
+
*
|
5 |
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
6 |
+
* you may not use this file except in compliance with the License.
|
7 |
+
* You may obtain 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,
|
13 |
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14 |
+
* See the License for the specific language governing permissions and
|
15 |
+
* limitations under the License.
|
16 |
+
*/
|
17 |
+
|
18 |
+
class Google_Service
|
19 |
+
{
|
20 |
+
public $version;
|
21 |
+
public $servicePath;
|
22 |
+
public $availableScopes;
|
23 |
+
public $resource;
|
24 |
+
private $client;
|
25 |
+
|
26 |
+
public function __construct(Google_Client $client)
|
27 |
+
{
|
28 |
+
$this->client = $client;
|
29 |
+
}
|
30 |
+
|
31 |
+
/**
|
32 |
+
* Return the associated Google_Client class.
|
33 |
+
* @return Google_Client
|
34 |
+
*/
|
35 |
+
public function getClient()
|
36 |
+
{
|
37 |
+
return $this->client;
|
38 |
+
}
|
39 |
+
}
|
lib/Google/Service/Drive.php
ADDED
@@ -0,0 +1,5732 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* Copyright 2010 Google Inc.
|
4 |
+
*
|
5 |
+
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
|
6 |
+
* use this file except in compliance with the License. You may obtain a copy of
|
7 |
+
* 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 under
|
15 |
+
* the License.
|
16 |
+
*/
|
17 |
+
|
18 |
+
/**
|
19 |
+
* Service definition for Drive (v2).
|
20 |
+
*
|
21 |
+
* <p>
|
22 |
+
* The API to interact with Drive.
|
23 |
+
* </p>
|
24 |
+
*
|
25 |
+
* <p>
|
26 |
+
* For more information about this service, see the API
|
27 |
+
* <a href="https://developers.google.com/drive/" target="_blank">Documentation</a>
|
28 |
+
* </p>
|
29 |
+
*
|
30 |
+
* @author Google, Inc.
|
31 |
+
*/
|
32 |
+
class Google_Service_Drive extends Google_Service
|
33 |
+
{
|
34 |
+
/** View and manage the files and documents in your Google Drive. */
|
35 |
+
const DRIVE = "https://www.googleapis.com/auth/drive";
|
36 |
+
/** View and manage its own configuration data in your Google Drive. */
|
37 |
+
const DRIVE_APPDATA = "https://www.googleapis.com/auth/drive.appdata";
|
38 |
+
/** View your Google Drive apps. */
|
39 |
+
const DRIVE_APPS_READONLY = "https://www.googleapis.com/auth/drive.apps.readonly";
|
40 |
+
/** View and manage Google Drive files that you have opened or created with this app. */
|
41 |
+
const DRIVE_FILE = "https://www.googleapis.com/auth/drive.file";
|
42 |
+
/** View metadata for files and documents in your Google Drive. */
|
43 |
+
const DRIVE_METADATA_READONLY = "https://www.googleapis.com/auth/drive.metadata.readonly";
|
44 |
+
/** View the files and documents in your Google Drive. */
|
45 |
+
const DRIVE_READONLY = "https://www.googleapis.com/auth/drive.readonly";
|
46 |
+
/** Modify your Google Apps Script scripts' behavior. */
|
47 |
+
const DRIVE_SCRIPTS = "https://www.googleapis.com/auth/drive.scripts";
|
48 |
+
|
49 |
+
public $about;
|
50 |
+
public $apps;
|
51 |
+
public $changes;
|
52 |
+
public $channels;
|
53 |
+
public $children;
|
54 |
+
public $comments;
|
55 |
+
public $files;
|
56 |
+
public $parents;
|
57 |
+
public $permissions;
|
58 |
+
public $properties;
|
59 |
+
public $realtime;
|
60 |
+
public $replies;
|
61 |
+
public $revisions;
|
62 |
+
|
63 |
+
|
64 |
+
/**
|
65 |
+
* Constructs the internal representation of the Drive service.
|
66 |
+
*
|
67 |
+
* @param Google_Client $client
|
68 |
+
*/
|
69 |
+
public function __construct(Google_Client $client)
|
70 |
+
{
|
71 |
+
parent::__construct($client);
|
72 |
+
$this->servicePath = 'drive/v2/';
|
73 |
+
$this->version = 'v2';
|
74 |
+
$this->serviceName = 'drive';
|
75 |
+
|
76 |
+
$this->about = new Google_Service_Drive_About_Resource(
|
77 |
+
$this,
|
78 |
+
$this->serviceName,
|
79 |
+
'about',
|
80 |
+
array(
|
81 |
+
'methods' => array(
|
82 |
+
'get' => array(
|
83 |
+
'path' => 'about',
|
84 |
+
'httpMethod' => 'GET',
|
85 |
+
'parameters' => array(
|
86 |
+
'includeSubscribed' => array(
|
87 |
+
'location' => 'query',
|
88 |
+
'type' => 'boolean',
|
89 |
+
),
|
90 |
+
'maxChangeIdCount' => array(
|
91 |
+
'location' => 'query',
|
92 |
+
'type' => 'string',
|
93 |
+
),
|
94 |
+
'startChangeId' => array(
|
95 |
+
'location' => 'query',
|
96 |
+
'type' => 'string',
|
97 |
+
),
|
98 |
+
),
|
99 |
+
),
|
100 |
+
)
|
101 |
+
)
|
102 |
+
);
|
103 |
+
$this->apps = new Google_Service_Drive_Apps_Resource(
|
104 |
+
$this,
|
105 |
+
$this->serviceName,
|
106 |
+
'apps',
|
107 |
+
array(
|
108 |
+
'methods' => array(
|
109 |
+
'get' => array(
|
110 |
+
'path' => 'apps/{appId}',
|
111 |
+
'httpMethod' => 'GET',
|
112 |
+
'parameters' => array(
|
113 |
+
'appId' => array(
|
114 |
+
'location' => 'path',
|
115 |
+
'type' => 'string',
|
116 |
+
'required' => true,
|
117 |
+
),
|
118 |
+
),
|
119 |
+
),'list' => array(
|
120 |
+
'path' => 'apps',
|
121 |
+
'httpMethod' => 'GET',
|
122 |
+
'parameters' => array(),
|
123 |
+
),
|
124 |
+
)
|
125 |
+
)
|
126 |
+
);
|
127 |
+
$this->changes = new Google_Service_Drive_Changes_Resource(
|
128 |
+
$this,
|
129 |
+
$this->serviceName,
|
130 |
+
'changes',
|
131 |
+
array(
|
132 |
+
'methods' => array(
|
133 |
+
'get' => array(
|
134 |
+
'path' => 'changes/{changeId}',
|
135 |
+
'httpMethod' => 'GET',
|
136 |
+
'parameters' => array(
|
137 |
+
'changeId' => array(
|
138 |
+
'location' => 'path',
|
139 |
+
'type' => 'string',
|
140 |
+
'required' => true,
|
141 |
+
),
|
142 |
+
),
|
143 |
+
),'list' => array(
|
144 |
+
'path' => 'changes',
|
145 |
+
'httpMethod' => 'GET',
|
146 |
+
'parameters' => array(
|
147 |
+
'includeSubscribed' => array(
|
148 |
+
'location' => 'query',
|
149 |
+
'type' => 'boolean',
|
150 |
+
),
|
151 |
+
'startChangeId' => array(
|
152 |
+
'location' => 'query',
|
153 |
+
'type' => 'string',
|
154 |
+
),
|
155 |
+
'includeDeleted' => array(
|
156 |
+
'location' => 'query',
|
157 |
+
'type' => 'boolean',
|
158 |
+
),
|
159 |
+
'maxResults' => array(
|
160 |
+
'location' => 'query',
|
161 |
+
'type' => 'integer',
|
162 |
+
),
|
163 |
+
'pageToken' => array(
|
164 |
+
'location' => 'query',
|
165 |
+
'type' => 'string',
|
166 |
+
),
|
167 |
+
),
|
168 |
+
),'watch' => array(
|
169 |
+
'path' => 'changes/watch',
|
170 |
+
'httpMethod' => 'POST',
|
171 |
+
'parameters' => array(
|
172 |
+
'includeSubscribed' => array(
|
173 |
+
'location' => 'query',
|
174 |
+
'type' => 'boolean',
|
175 |
+
),
|
176 |
+
'startChangeId' => array(
|
177 |
+
'location' => 'query',
|
178 |
+
'type' => 'string',
|
179 |
+
),
|
180 |
+
'includeDeleted' => array(
|
181 |
+
'location' => 'query',
|
182 |
+
'type' => 'boolean',
|
183 |
+
),
|
184 |
+
'maxResults' => array(
|
185 |
+
'location' => 'query',
|
186 |
+
'type' => 'integer',
|
187 |
+
),
|
188 |
+
'pageToken' => array(
|
189 |
+
'location' => 'query',
|
190 |
+
'type' => 'string',
|
191 |
+
),
|
192 |
+
),
|
193 |
+
),
|
194 |
+
)
|
195 |
+
)
|
196 |
+
);
|
197 |
+
$this->channels = new Google_Service_Drive_Channels_Resource(
|
198 |
+
$this,
|
199 |
+
$this->serviceName,
|
200 |
+
'channels',
|
201 |
+
array(
|
202 |
+
'methods' => array(
|
203 |
+
'stop' => array(
|
204 |
+
'path' => 'channels/stop',
|
205 |
+
'httpMethod' => 'POST',
|
206 |
+
'parameters' => array(),
|
207 |
+
),
|
208 |
+
)
|
209 |
+
)
|
210 |
+
);
|
211 |
+
$this->children = new Google_Service_Drive_Children_Resource(
|
212 |
+
$this,
|
213 |
+
$this->serviceName,
|
214 |
+
'children',
|
215 |
+
array(
|
216 |
+
'methods' => array(
|
217 |
+
'delete' => array(
|
218 |
+
'path' => 'files/{folderId}/children/{childId}',
|
219 |
+
'httpMethod' => 'DELETE',
|
220 |
+
'parameters' => array(
|
221 |
+
'folderId' => array(
|
222 |
+
'location' => 'path',
|
223 |
+
'type' => 'string',
|
224 |
+
'required' => true,
|
225 |
+
),
|
226 |
+
'childId' => array(
|
227 |
+
'location' => 'path',
|
228 |
+
'type' => 'string',
|
229 |
+
'required' => true,
|
230 |
+
),
|
231 |
+
),
|
232 |
+
),'get' => array(
|
233 |
+
'path' => 'files/{folderId}/children/{childId}',
|
234 |
+
'httpMethod' => 'GET',
|
235 |
+
'parameters' => array(
|
236 |
+
'folderId' => array(
|
237 |
+
'location' => 'path',
|
238 |
+
'type' => 'string',
|
239 |
+
'required' => true,
|
240 |
+
),
|
241 |
+
'childId' => array(
|
242 |
+
'location' => 'path',
|
243 |
+
'type' => 'string',
|
244 |
+
'required' => true,
|
245 |
+
),
|
246 |
+
),
|
247 |
+
),'insert' => array(
|
248 |
+
'path' => 'files/{folderId}/children',
|
249 |
+
'httpMethod' => 'POST',
|
250 |
+
'parameters' => array(
|
251 |
+
'folderId' => array(
|
252 |
+
'location' => 'path',
|
253 |
+
'type' => 'string',
|
254 |
+
'required' => true,
|
255 |
+
),
|
256 |
+
),
|
257 |
+
),'list' => array(
|
258 |
+
'path' => 'files/{folderId}/children',
|
259 |
+
'httpMethod' => 'GET',
|
260 |
+
'parameters' => array(
|
261 |
+
'folderId' => array(
|
262 |
+
'location' => 'path',
|
263 |
+
'type' => 'string',
|
264 |
+
'required' => true,
|
265 |
+
),
|
266 |
+
'q' => array(
|
267 |
+
'location' => 'query',
|
268 |
+
'type' => 'string',
|
269 |
+
),
|
270 |
+
'pageToken' => array(
|
271 |
+
'location' => 'query',
|
272 |
+
'type' => 'string',
|
273 |
+
),
|
274 |
+
'maxResults' => array(
|
275 |
+
'location' => 'query',
|
276 |
+
'type' => 'integer',
|
277 |
+
),
|
278 |
+
),
|
279 |
+
),
|
280 |
+
)
|
281 |
+
)
|
282 |
+
);
|
283 |
+
$this->comments = new Google_Service_Drive_Comments_Resource(
|
284 |
+
$this,
|
285 |
+
$this->serviceName,
|
286 |
+
'comments',
|
287 |
+
array(
|
288 |
+
'methods' => array(
|
289 |
+
'delete' => array(
|
290 |
+
'path' => 'files/{fileId}/comments/{commentId}',
|
291 |
+
'httpMethod' => 'DELETE',
|
292 |
+
'parameters' => array(
|
293 |
+
'fileId' => array(
|
294 |
+
'location' => 'path',
|
295 |
+
'type' => 'string',
|
296 |
+
'required' => true,
|
297 |
+
),
|
298 |
+
'commentId' => array(
|
299 |
+
'location' => 'path',
|
300 |
+
'type' => 'string',
|
301 |
+
'required' => true,
|
302 |
+
),
|
303 |
+
),
|
304 |
+
),'get' => array(
|
305 |
+
'path' => 'files/{fileId}/comments/{commentId}',
|
306 |
+
'httpMethod' => 'GET',
|
307 |
+
'parameters' => array(
|
308 |
+
'fileId' => array(
|
309 |
+
'location' => 'path',
|
310 |
+
'type' => 'string',
|
311 |
+
'required' => true,
|
312 |
+
),
|
313 |
+
'commentId' => array(
|
314 |
+
'location' => 'path',
|
315 |
+
'type' => 'string',
|
316 |
+
'required' => true,
|
317 |
+
),
|
318 |
+
'includeDeleted' => array(
|
319 |
+
'location' => 'query',
|
320 |
+
'type' => 'boolean',
|
321 |
+
),
|
322 |
+
),
|
323 |
+
),'insert' => array(
|
324 |
+
'path' => 'files/{fileId}/comments',
|
325 |
+
'httpMethod' => 'POST',
|
326 |
+
'parameters' => array(
|
327 |
+
'fileId' => array(
|
328 |
+
'location' => 'path',
|
329 |
+
'type' => 'string',
|
330 |
+
'required' => true,
|
331 |
+
),
|
332 |
+
),
|
333 |
+
),'list' => array(
|
334 |
+
'path' => 'files/{fileId}/comments',
|
335 |
+
'httpMethod' => 'GET',
|
336 |
+
'parameters' => array(
|
337 |
+
'fileId' => array(
|
338 |
+
'location' => 'path',
|
339 |
+
'type' => 'string',
|
340 |
+
'required' => true,
|
341 |
+
),
|
342 |
+
'pageToken' => array(
|
343 |
+
'location' => 'query',
|
344 |
+
'type' => 'string',
|
345 |
+
),
|
346 |
+
'updatedMin' => array(
|
347 |
+
'location' => 'query',
|
348 |
+
'type' => 'string',
|
349 |
+
),
|
350 |
+
'includeDeleted' => array(
|
351 |
+
'location' => 'query',
|
352 |
+
'type' => 'boolean',
|
353 |
+
),
|
354 |
+
'maxResults' => array(
|
355 |
+
'location' => 'query',
|
356 |
+
'type' => 'integer',
|
357 |
+
),
|
358 |
+
),
|
359 |
+
),'patch' => array(
|
360 |
+
'path' => 'files/{fileId}/comments/{commentId}',
|
361 |
+
'httpMethod' => 'PATCH',
|
362 |
+
'parameters' => array(
|
363 |
+
'fileId' => array(
|
364 |
+
'location' => 'path',
|
365 |
+
'type' => 'string',
|
366 |
+
'required' => true,
|
367 |
+
),
|
368 |
+
'commentId' => array(
|
369 |
+
'location' => 'path',
|
370 |
+
'type' => 'string',
|
371 |
+
'required' => true,
|
372 |
+
),
|
373 |
+
),
|
374 |
+
),'update' => array(
|
375 |
+
'path' => 'files/{fileId}/comments/{commentId}',
|
376 |
+
'httpMethod' => 'PUT',
|
377 |
+
'parameters' => array(
|
378 |
+
'fileId' => array(
|
379 |
+
'location' => 'path',
|
380 |
+
'type' => 'string',
|
381 |
+
'required' => true,
|
382 |
+
),
|
383 |
+
'commentId' => array(
|
384 |
+
'location' => 'path',
|
385 |
+
'type' => 'string',
|
386 |
+
'required' => true,
|
387 |
+
),
|
388 |
+
),
|
389 |
+
),
|
390 |
+
)
|
391 |
+
)
|
392 |
+
);
|
393 |
+
$this->files = new Google_Service_Drive_Files_Resource(
|
394 |
+
$this,
|
395 |
+
$this->serviceName,
|
396 |
+
'files',
|
397 |
+
array(
|
398 |
+
'methods' => array(
|
399 |
+
'copy' => array(
|
400 |
+
'path' => 'files/{fileId}/copy',
|
401 |
+
'httpMethod' => 'POST',
|
402 |
+
'parameters' => array(
|
403 |
+
'fileId' => array(
|
404 |
+
'location' => 'path',
|
405 |
+
'type' => 'string',
|
406 |
+
'required' => true,
|
407 |
+
),
|
408 |
+
'convert' => array(
|
409 |
+
'location' => 'query',
|
410 |
+
'type' => 'boolean',
|
411 |
+
),
|
412 |
+
'ocrLanguage' => array(
|
413 |
+
'location' => 'query',
|
414 |
+
'type' => 'string',
|
415 |
+
),
|
416 |
+
'visibility' => array(
|
417 |
+
'location' => 'query',
|
418 |
+
'type' => 'string',
|
419 |
+
),
|
420 |
+
'pinned' => array(
|
421 |
+
'location' => 'query',
|
422 |
+
'type' => 'boolean',
|
423 |
+
),
|
424 |
+
'ocr' => array(
|
425 |
+
'location' => 'query',
|
426 |
+
'type' => 'boolean',
|
427 |
+
),
|
428 |
+
'timedTextTrackName' => array(
|
429 |
+
'location' => 'query',
|
430 |
+
'type' => 'string',
|
431 |
+
),
|
432 |
+
'timedTextLanguage' => array(
|
433 |
+
'location' => 'query',
|
434 |
+
'type' => 'string',
|
435 |
+
),
|
436 |
+
),
|
437 |
+
),'delete' => array(
|
438 |
+
'path' => 'files/{fileId}',
|
439 |
+
'httpMethod' => 'DELETE',
|
440 |
+
'parameters' => array(
|
441 |
+
'fileId' => array(
|
442 |
+
'location' => 'path',
|
443 |
+
'type' => 'string',
|
444 |
+
'required' => true,
|
445 |
+
),
|
446 |
+
),
|
447 |
+
),'get' => array(
|
448 |
+
'path' => 'files/{fileId}',
|
449 |
+
'httpMethod' => 'GET',
|
450 |
+
'parameters' => array(
|
451 |
+
'fileId' => array(
|
452 |
+
'location' => 'path',
|
453 |
+
'type' => 'string',
|
454 |
+
'required' => true,
|
455 |
+
),
|
456 |
+
'updateViewedDate' => array(
|
457 |
+
'location' => 'query',
|
458 |
+
'type' => 'boolean',
|
459 |
+
),
|
460 |
+
'projection' => array(
|
461 |
+
'location' => 'query',
|
462 |
+
'type' => 'string',
|
463 |
+
),
|
464 |
+
),
|
465 |
+
),'insert' => array(
|
466 |
+
'path' => 'files',
|
467 |
+
'httpMethod' => 'POST',
|
468 |
+
'parameters' => array(
|
469 |
+
'convert' => array(
|
470 |
+
'location' => 'query',
|
471 |
+
'type' => 'boolean',
|
472 |
+
),
|
473 |
+
'useContentAsIndexableText' => array(
|
474 |
+
'location' => 'query',
|
475 |
+
'type' => 'boolean',
|
476 |
+
),
|
477 |
+
'ocrLanguage' => array(
|
478 |
+
'location' => 'query',
|
479 |
+
'type' => 'string',
|
480 |
+
),
|
481 |
+
'visibility' => array(
|
482 |
+
'location' => 'query',
|
483 |
+
'type' => 'string',
|
484 |
+
),
|
485 |
+
'pinned' => array(
|
486 |
+
'location' => 'query',
|
487 |
+
'type' => 'boolean',
|
488 |
+
),
|
489 |
+
'ocr' => array(
|
490 |
+
'location' => 'query',
|
491 |
+
'type' => 'boolean',
|
492 |
+
),
|
493 |
+
'timedTextTrackName' => array(
|
494 |
+
'location' => 'query',
|
495 |
+
'type' => 'string',
|
496 |
+
),
|
497 |
+
'timedTextLanguage' => array(
|
498 |
+
'location' => 'query',
|
499 |
+
'type' => 'string',
|
500 |
+
),
|
501 |
+
),
|
502 |
+
),'list' => array(
|
503 |
+
'path' => 'files',
|
504 |
+
'httpMethod' => 'GET',
|
505 |
+
'parameters' => array(
|
506 |
+
'q' => array(
|
507 |
+
'location' => 'query',
|
508 |
+
'type' => 'string',
|
509 |
+
),
|
510 |
+
'pageToken' => array(
|
511 |
+
'location' => 'query',
|
512 |
+
'type' => 'string',
|
513 |
+
),
|
514 |
+
'projection' => array(
|
515 |
+
'location' => 'query',
|
516 |
+
'type' => 'string',
|
517 |
+
),
|
518 |
+
'maxResults' => array(
|
519 |
+
'location' => 'query',
|
520 |
+
'type' => 'integer',
|
521 |
+
),
|
522 |
+
),
|
523 |
+
),'patch' => array(
|
524 |
+
'path' => 'files/{fileId}',
|
525 |
+
'httpMethod' => 'PATCH',
|
526 |
+
'parameters' => array(
|
527 |
+
'fileId' => array(
|
528 |
+
'location' => 'path',
|
529 |
+
'type' => 'string',
|
530 |
+
'required' => true,
|
531 |
+
),
|
532 |
+
'convert' => array(
|
533 |
+
'location' => 'query',
|
534 |
+
'type' => 'boolean',
|
535 |
+
),
|
536 |
+
'updateViewedDate' => array(
|
537 |
+
'location' => 'query',
|
538 |
+
'type' => 'boolean',
|
539 |
+
),
|
540 |
+
'setModifiedDate' => array(
|
541 |
+
'location' => 'query',
|
542 |
+
'type' => 'boolean',
|
543 |
+
),
|
544 |
+
'useContentAsIndexableText' => array(
|
545 |
+
'location' => 'query',
|
546 |
+
'type' => 'boolean',
|
547 |
+
),
|
548 |
+
'ocrLanguage' => array(
|
549 |
+
'location' => 'query',
|
550 |
+
'type' => 'string',
|
551 |
+
),
|
552 |
+
'pinned' => array(
|
553 |
+
'location' => 'query',
|
554 |
+
'type' => 'boolean',
|
555 |
+
),
|
556 |
+
'newRevision' => array(
|
557 |
+
'location' => 'query',
|
558 |
+
'type' => 'boolean',
|
559 |
+
),
|
560 |
+
'ocr' => array(
|
561 |
+
'location' => 'query',
|
562 |
+
'type' => 'boolean',
|
563 |
+
),
|
564 |
+
'timedTextLanguage' => array(
|
565 |
+
'location' => 'query',
|
566 |
+
'type' => 'string',
|
567 |
+
),
|
568 |
+
'timedTextTrackName' => array(
|
569 |
+
'location' => 'query',
|
570 |
+
'type' => 'string',
|
571 |
+
),
|
572 |
+
),
|
573 |
+
),'touch' => array(
|
574 |
+
'path' => 'files/{fileId}/touch',
|
575 |
+
'httpMethod' => 'POST',
|
576 |
+
'parameters' => array(
|
577 |
+
'fileId' => array(
|
578 |
+
'location' => 'path',
|
579 |
+
'type' => 'string',
|
580 |
+
'required' => true,
|
581 |
+
),
|
582 |
+
),
|
583 |
+
),'trash' => array(
|
584 |
+
'path' => 'files/{fileId}/trash',
|
585 |
+
'httpMethod' => 'POST',
|
586 |
+
'parameters' => array(
|
587 |
+
'fileId' => array(
|
588 |
+
'location' => 'path',
|
589 |
+
'type' => 'string',
|
590 |
+
'required' => true,
|
591 |
+
),
|
592 |
+
),
|
593 |
+
),'untrash' => array(
|
594 |
+
'path' => 'files/{fileId}/untrash',
|
595 |
+
'httpMethod' => 'POST',
|
596 |
+
'parameters' => array(
|
597 |
+
'fileId' => array(
|
598 |
+
'location' => 'path',
|
599 |
+
'type' => 'string',
|
600 |
+
'required' => true,
|
601 |
+
),
|
602 |
+
),
|
603 |
+
),'update' => array(
|
604 |
+
'path' => 'files/{fileId}',
|
605 |
+
'httpMethod' => 'PUT',
|
606 |
+
'parameters' => array(
|
607 |
+
'fileId' => array(
|
608 |
+
'location' => 'path',
|
609 |
+
'type' => 'string',
|
610 |
+
'required' => true,
|
611 |
+
),
|
612 |
+
'convert' => array(
|
613 |
+
'location' => 'query',
|
614 |
+
'type' => 'boolean',
|
615 |
+
),
|
616 |
+
'updateViewedDate' => array(
|
617 |
+
'location' => 'query',
|
618 |
+
'type' => 'boolean',
|
619 |
+
),
|
620 |
+
'setModifiedDate' => array(
|
621 |
+
'location' => 'query',
|
622 |
+
'type' => 'boolean',
|
623 |
+
),
|
624 |
+
'useContentAsIndexableText' => array(
|
625 |
+
'location' => 'query',
|
626 |
+
'type' => 'boolean',
|
627 |
+
),
|
628 |
+
'ocrLanguage' => array(
|
629 |
+
'location' => 'query',
|
630 |
+
'type' => 'string',
|
631 |
+
),
|
632 |
+
'pinned' => array(
|
633 |
+
'location' => 'query',
|
634 |
+
'type' => 'boolean',
|
635 |
+
),
|
636 |
+
'newRevision' => array(
|
637 |
+
'location' => 'query',
|
638 |
+
'type' => 'boolean',
|
639 |
+
),
|
640 |
+
'ocr' => array(
|
641 |
+
'location' => 'query',
|
642 |
+
'type' => 'boolean',
|
643 |
+
),
|
644 |
+
'timedTextLanguage' => array(
|
645 |
+
'location' => 'query',
|
646 |
+
'type' => 'string',
|
647 |
+
),
|
648 |
+
'timedTextTrackName' => array(
|
649 |
+
'location' => 'query',
|
650 |
+
'type' => 'string',
|
651 |
+
),
|
652 |
+
),
|
653 |
+
),'watch' => array(
|
654 |
+
'path' => 'files/{fileId}/watch',
|
655 |
+
'httpMethod' => 'POST',
|
656 |
+
'parameters' => array(
|
657 |
+
'fileId' => array(
|
658 |
+
'location' => 'path',
|
659 |
+
'type' => 'string',
|
660 |
+
'required' => true,
|
661 |
+
),
|
662 |
+
'updateViewedDate' => array(
|
663 |
+
'location' => 'query',
|
664 |
+
'type' => 'boolean',
|
665 |
+
),
|
666 |
+
'projection' => array(
|
667 |
+
'location' => 'query',
|
668 |
+
'type' => 'string',
|
669 |
+
),
|
670 |
+
),
|
671 |
+
),
|
672 |
+
)
|
673 |
+
)
|
674 |
+
);
|
675 |
+
$this->parents = new Google_Service_Drive_Parents_Resource(
|
676 |
+
$this,
|
677 |
+
$this->serviceName,
|
678 |
+
'parents',
|
679 |
+
array(
|
680 |
+
'methods' => array(
|
681 |
+
'delete' => array(
|
682 |
+
'path' => 'files/{fileId}/parents/{parentId}',
|
683 |
+
'httpMethod' => 'DELETE',
|
684 |
+
'parameters' => array(
|
685 |
+
'fileId' => array(
|
686 |
+
'location' => 'path',
|
687 |
+
'type' => 'string',
|
688 |
+
'required' => true,
|
689 |
+
),
|
690 |
+
'parentId' => array(
|
691 |
+
'location' => 'path',
|
692 |
+
'type' => 'string',
|
693 |
+
'required' => true,
|
694 |
+
),
|
695 |
+
),
|
696 |
+
),'get' => array(
|
697 |
+
'path' => 'files/{fileId}/parents/{parentId}',
|
698 |
+
'httpMethod' => 'GET',
|
699 |
+
'parameters' => array(
|
700 |
+
'fileId' => array(
|
701 |
+
'location' => 'path',
|
702 |
+
'type' => 'string',
|
703 |
+
'required' => true,
|
704 |
+
),
|
705 |
+
'parentId' => array(
|
706 |
+
'location' => 'path',
|
707 |
+
'type' => 'string',
|
708 |
+
'required' => true,
|
709 |
+
),
|
710 |
+
),
|
711 |
+
),'insert' => array(
|
712 |
+
'path' => 'files/{fileId}/parents',
|
713 |
+
'httpMethod' => 'POST',
|
714 |
+
'parameters' => array(
|
715 |
+
'fileId' => array(
|
716 |
+
'location' => 'path',
|
717 |
+
'type' => 'string',
|
718 |
+
'required' => true,
|
719 |
+
),
|
720 |
+
),
|
721 |
+
),'list' => array(
|
722 |
+
'path' => 'files/{fileId}/parents',
|
723 |
+
'httpMethod' => 'GET',
|
724 |
+
'parameters' => array(
|
725 |
+
'fileId' => array(
|
726 |
+
'location' => 'path',
|
727 |
+
'type' => 'string',
|
728 |
+
'required' => true,
|
729 |
+
),
|
730 |
+
),
|
731 |
+
),
|
732 |
+
)
|
733 |
+
)
|
734 |
+
);
|
735 |
+
$this->permissions = new Google_Service_Drive_Permissions_Resource(
|
736 |
+
$this,
|
737 |
+
$this->serviceName,
|
738 |
+
'permissions',
|
739 |
+
array(
|
740 |
+
'methods' => array(
|
741 |
+
'delete' => array(
|
742 |
+
'path' => 'files/{fileId}/permissions/{permissionId}',
|
743 |
+
'httpMethod' => 'DELETE',
|
744 |
+
'parameters' => array(
|
745 |
+
'fileId' => array(
|
746 |
+
'location' => 'path',
|
747 |
+
'type' => 'string',
|
748 |
+
'required' => true,
|
749 |
+
),
|
750 |
+
'permissionId' => array(
|
751 |
+
'location' => 'path',
|
752 |
+
'type' => 'string',
|
753 |
+
'required' => true,
|
754 |
+
),
|
755 |
+
),
|
756 |
+
),'get' => array(
|
757 |
+
'path' => 'files/{fileId}/permissions/{permissionId}',
|
758 |
+
'httpMethod' => 'GET',
|
759 |
+
'parameters' => array(
|
760 |
+
'fileId' => array(
|
761 |
+
'location' => 'path',
|
762 |
+
'type' => 'string',
|
763 |
+
'required' => true,
|
764 |
+
),
|
765 |
+
'permissionId' => array(
|
766 |
+
'location' => 'path',
|
767 |
+
'type' => 'string',
|
768 |
+
'required' => true,
|
769 |
+
),
|
770 |
+
),
|
771 |
+
),'getIdForEmail' => array(
|
772 |
+
'path' => 'permissionIds/{email}',
|
773 |
+
'httpMethod' => 'GET',
|
774 |
+
'parameters' => array(
|
775 |
+
'email' => array(
|
776 |
+
'location' => 'path',
|
777 |
+
'type' => 'string',
|
778 |
+
'required' => true,
|
779 |
+
),
|
780 |
+
),
|
781 |
+
),'insert' => array(
|
782 |
+
'path' => 'files/{fileId}/permissions',
|
783 |
+
'httpMethod' => 'POST',
|
784 |
+
'parameters' => array(
|
785 |
+
'fileId' => array(
|
786 |
+
'location' => 'path',
|
787 |
+
'type' => 'string',
|
788 |
+
'required' => true,
|
789 |
+
),
|
790 |
+
'emailMessage' => array(
|
791 |
+
'location' => 'query',
|
792 |
+
'type' => 'string',
|
793 |
+
),
|
794 |
+
'sendNotificationEmails' => array(
|
795 |
+
'location' => 'query',
|
796 |
+
'type' => 'boolean',
|
797 |
+
),
|
798 |
+
),
|
799 |
+
),'list' => array(
|
800 |
+
'path' => 'files/{fileId}/permissions',
|
801 |
+
'httpMethod' => 'GET',
|
802 |
+
'parameters' => array(
|
803 |
+
'fileId' => array(
|
804 |
+
'location' => 'path',
|
805 |
+
'type' => 'string',
|
806 |
+
'required' => true,
|
807 |
+
),
|
808 |
+
),
|
809 |
+
),'patch' => array(
|
810 |
+
'path' => 'files/{fileId}/permissions/{permissionId}',
|
811 |
+
'httpMethod' => 'PATCH',
|
812 |
+
'parameters' => array(
|
813 |
+
'fileId' => array(
|
814 |
+
'location' => 'path',
|
815 |
+
'type' => 'string',
|
816 |
+
'required' => true,
|
817 |
+
),
|
818 |
+
'permissionId' => array(
|
819 |
+
'location' => 'path',
|
820 |
+
'type' => 'string',
|
821 |
+
'required' => true,
|
822 |
+
),
|
823 |
+
'transferOwnership' => array(
|
824 |
+
'location' => 'query',
|
825 |
+
'type' => 'boolean',
|
826 |
+
),
|
827 |
+
),
|
828 |
+
),'update' => array(
|
829 |
+
'path' => 'files/{fileId}/permissions/{permissionId}',
|
830 |
+
'httpMethod' => 'PUT',
|
831 |
+
'parameters' => array(
|
832 |
+
'fileId' => array(
|
833 |
+
'location' => 'path',
|
834 |
+
'type' => 'string',
|
835 |
+
'required' => true,
|
836 |
+
),
|
837 |
+
'permissionId' => array(
|
838 |
+
'location' => 'path',
|
839 |
+
'type' => 'string',
|
840 |
+
'required' => true,
|
841 |
+
),
|
842 |
+
'transferOwnership' => array(
|
843 |
+
'location' => 'query',
|
844 |
+
'type' => 'boolean',
|
845 |
+
),
|
846 |
+
),
|
847 |
+
),
|
848 |
+
)
|
849 |
+
)
|
850 |
+
);
|
851 |
+
$this->properties = new Google_Service_Drive_Properties_Resource(
|
852 |
+
$this,
|
853 |
+
$this->serviceName,
|
854 |
+
'properties',
|
855 |
+
array(
|
856 |
+
'methods' => array(
|
857 |
+
'delete' => array(
|
858 |
+
'path' => 'files/{fileId}/properties/{propertyKey}',
|
859 |
+
'httpMethod' => 'DELETE',
|
860 |
+
'parameters' => array(
|
861 |
+
'fileId' => array(
|
862 |
+
'location' => 'path',
|
863 |
+
'type' => 'string',
|
864 |
+
'required' => true,
|
865 |
+
),
|
866 |
+
'propertyKey' => array(
|
867 |
+
'location' => 'path',
|
868 |
+
'type' => 'string',
|
869 |
+
'required' => true,
|
870 |
+
),
|
871 |
+
'visibility' => array(
|
872 |
+
'location' => 'query',
|
873 |
+
'type' => 'string',
|
874 |
+
),
|
875 |
+
),
|
876 |
+
),'get' => array(
|
877 |
+
'path' => 'files/{fileId}/properties/{propertyKey}',
|
878 |
+
'httpMethod' => 'GET',
|
879 |
+
'parameters' => array(
|
880 |
+
'fileId' => array(
|
881 |
+
'location' => 'path',
|
882 |
+
'type' => 'string',
|
883 |
+
'required' => true,
|
884 |
+
),
|
885 |
+
'propertyKey' => array(
|
886 |
+
'location' => 'path',
|
887 |
+
'type' => 'string',
|
888 |
+
'required' => true,
|
889 |
+
),
|
890 |
+
'visibility' => array(
|
891 |
+
'location' => 'query',
|
892 |
+
'type' => 'string',
|
893 |
+
),
|
894 |
+
),
|
895 |
+
),'insert' => array(
|
896 |
+
'path' => 'files/{fileId}/properties',
|
897 |
+
'httpMethod' => 'POST',
|
898 |
+
'parameters' => array(
|
899 |
+
'fileId' => array(
|
900 |
+
'location' => 'path',
|
901 |
+
'type' => 'string',
|
902 |
+
'required' => true,
|
903 |
+
),
|
904 |
+
),
|
905 |
+
),'list' => array(
|
906 |
+
'path' => 'files/{fileId}/properties',
|
907 |
+
'httpMethod' => 'GET',
|
908 |
+
'parameters' => array(
|
909 |
+
'fileId' => array(
|
910 |
+
'location' => 'path',
|
911 |
+
'type' => 'string',
|
912 |
+
'required' => true,
|
913 |
+
),
|
914 |
+
),
|
915 |
+
),'patch' => array(
|
916 |
+
'path' => 'files/{fileId}/properties/{propertyKey}',
|
917 |
+
'httpMethod' => 'PATCH',
|
918 |
+
'parameters' => array(
|
919 |
+
'fileId' => array(
|
920 |
+
'location' => 'path',
|
921 |
+
'type' => 'string',
|
922 |
+
'required' => true,
|
923 |
+
),
|
924 |
+
'propertyKey' => array(
|
925 |
+
'location' => 'path',
|
926 |
+
'type' => 'string',
|
927 |
+
'required' => true,
|
928 |
+
),
|
929 |
+
'visibility' => array(
|
930 |
+
'location' => 'query',
|
931 |
+
'type' => 'string',
|
932 |
+
),
|
933 |
+
),
|
934 |
+
),'update' => array(
|
935 |
+
'path' => 'files/{fileId}/properties/{propertyKey}',
|
936 |
+
'httpMethod' => 'PUT',
|
937 |
+
'parameters' => array(
|
938 |
+
'fileId' => array(
|
939 |
+
'location' => 'path',
|
940 |
+
'type' => 'string',
|
941 |
+
'required' => true,
|
942 |
+
),
|
943 |
+
'propertyKey' => array(
|
944 |
+
'location' => 'path',
|
945 |
+
'type' => 'string',
|
946 |
+
'required' => true,
|
947 |
+
),
|
948 |
+
'visibility' => array(
|
949 |
+
'location' => 'query',
|
950 |
+
'type' => 'string',
|
951 |
+
),
|
952 |
+
),
|
953 |
+
),
|
954 |
+
)
|
955 |
+
)
|
956 |
+
);
|
957 |
+
$this->realtime = new Google_Service_Drive_Realtime_Resource(
|
958 |
+
$this,
|
959 |
+
$this->serviceName,
|
960 |
+
'realtime',
|
961 |
+
array(
|
962 |
+
'methods' => array(
|
963 |
+
'get' => array(
|
964 |
+
'path' => 'files/{fileId}/realtime',
|
965 |
+
'httpMethod' => 'GET',
|
966 |
+
'parameters' => array(
|
967 |
+
'fileId' => array(
|
968 |
+
'location' => 'path',
|
969 |
+
'type' => 'string',
|
970 |
+
'required' => true,
|
971 |
+
),
|
972 |
+
),
|
973 |
+
),'update' => array(
|
974 |
+
'path' => 'files/{fileId}/realtime',
|
975 |
+
'httpMethod' => 'PUT',
|
976 |
+
'parameters' => array(
|
977 |
+
'fileId' => array(
|
978 |
+
'location' => 'path',
|
979 |
+
'type' => 'string',
|
980 |
+
'required' => true,
|
981 |
+
),
|
982 |
+
'baseRevision' => array(
|
983 |
+
'location' => 'query',
|
984 |
+
'type' => 'string',
|
985 |
+
),
|
986 |
+
),
|
987 |
+
),
|
988 |
+
)
|
989 |
+
)
|
990 |
+
);
|
991 |
+
$this->replies = new Google_Service_Drive_Replies_Resource(
|
992 |
+
$this,
|
993 |
+
$this->serviceName,
|
994 |
+
'replies',
|
995 |
+
array(
|
996 |
+
'methods' => array(
|
997 |
+
'delete' => array(
|
998 |
+
'path' => 'files/{fileId}/comments/{commentId}/replies/{replyId}',
|
999 |
+
'httpMethod' => 'DELETE',
|
1000 |
+
'parameters' => array(
|
1001 |
+
'fileId' => array(
|
1002 |
+
'location' => 'path',
|
1003 |
+
'type' => 'string',
|
1004 |
+
'required' => true,
|
1005 |
+
),
|
1006 |
+
'commentId' => array(
|
1007 |
+
'location' => 'path',
|
1008 |
+
'type' => 'string',
|
1009 |
+
'required' => true,
|
1010 |
+
),
|
1011 |
+
'replyId' => array(
|
1012 |
+
'location' => 'path',
|
1013 |
+
'type' => 'string',
|
1014 |
+
'required' => true,
|
1015 |
+
),
|
1016 |
+
),
|
1017 |
+
),'get' => array(
|
1018 |
+
'path' => 'files/{fileId}/comments/{commentId}/replies/{replyId}',
|
1019 |
+
'httpMethod' => 'GET',
|
1020 |
+
'parameters' => array(
|
1021 |
+
'fileId' => array(
|
1022 |
+
'location' => 'path',
|
1023 |
+
'type' => 'string',
|
1024 |
+
'required' => true,
|
1025 |
+
),
|
1026 |
+
'commentId' => array(
|
1027 |
+
'location' => 'path',
|
1028 |
+
'type' => 'string',
|
1029 |
+
'required' => true,
|
1030 |
+
),
|
1031 |
+
'replyId' => array(
|
1032 |
+
'location' => 'path',
|
1033 |
+
'type' => 'string',
|
1034 |
+
'required' => true,
|
1035 |
+
),
|
1036 |
+
'includeDeleted' => array(
|
1037 |
+
'location' => 'query',
|
1038 |
+
'type' => 'boolean',
|
1039 |
+
),
|
1040 |
+
),
|
1041 |
+
),'insert' => array(
|
1042 |
+
'path' => 'files/{fileId}/comments/{commentId}/replies',
|
1043 |
+
'httpMethod' => 'POST',
|
1044 |
+
'parameters' => array(
|
1045 |
+
'fileId' => array(
|
1046 |
+
'location' => 'path',
|
1047 |
+
'type' => 'string',
|
1048 |
+
'required' => true,
|
1049 |
+
),
|
1050 |
+
'commentId' => array(
|
1051 |
+
'location' => 'path',
|
1052 |
+
'type' => 'string',
|
1053 |
+
'required' => true,
|
1054 |
+
),
|
1055 |
+
),
|
1056 |
+
),'list' => array(
|
1057 |
+
'path' => 'files/{fileId}/comments/{commentId}/replies',
|
1058 |
+
'httpMethod' => 'GET',
|
1059 |
+
'parameters' => array(
|
1060 |
+
'fileId' => array(
|
1061 |
+
'location' => 'path',
|
1062 |
+
'type' => 'string',
|
1063 |
+
'required' => true,
|
1064 |
+
),
|
1065 |
+
'commentId' => array(
|
1066 |
+
'location' => 'path',
|
1067 |
+
'type' => 'string',
|
1068 |
+
'required' => true,
|
1069 |
+
),
|
1070 |
+
'pageToken' => array(
|
1071 |
+
'location' => 'query',
|
1072 |
+
'type' => 'string',
|
1073 |
+
),
|
1074 |
+
'includeDeleted' => array(
|
1075 |
+
'location' => 'query',
|
1076 |
+
'type' => 'boolean',
|
1077 |
+
),
|
1078 |
+
'maxResults' => array(
|
1079 |
+
'location' => 'query',
|
1080 |
+
'type' => 'integer',
|
1081 |
+
),
|
1082 |
+
),
|
1083 |
+
),'patch' => array(
|
1084 |
+
'path' => 'files/{fileId}/comments/{commentId}/replies/{replyId}',
|
1085 |
+
'httpMethod' => 'PATCH',
|
1086 |
+
'parameters' => array(
|
1087 |
+
'fileId' => array(
|
1088 |
+
'location' => 'path',
|
1089 |
+
'type' => 'string',
|
1090 |
+
'required' => true,
|
1091 |
+
),
|
1092 |
+
'commentId' => array(
|
1093 |
+
'location' => 'path',
|
1094 |
+
'type' => 'string',
|
1095 |
+
'required' => true,
|
1096 |
+
),
|
1097 |
+
'replyId' => array(
|
1098 |
+
'location' => 'path',
|
1099 |
+
'type' => 'string',
|
1100 |
+
'required' => true,
|
1101 |
+
),
|
1102 |
+
),
|
1103 |
+
),'update' => array(
|
1104 |
+
'path' => 'files/{fileId}/comments/{commentId}/replies/{replyId}',
|
1105 |
+
'httpMethod' => 'PUT',
|
1106 |
+
'parameters' => array(
|
1107 |
+
'fileId' => array(
|
1108 |
+
'location' => 'path',
|
1109 |
+
'type' => 'string',
|
1110 |
+
'required' => true,
|
1111 |
+
),
|
1112 |
+
'commentId' => array(
|
1113 |
+
'location' => 'path',
|
1114 |
+
'type' => 'string',
|
1115 |
+
'required' => true,
|
1116 |
+
),
|
1117 |
+
'replyId' => array(
|
1118 |
+
'location' => 'path',
|
1119 |
+
'type' => 'string',
|
1120 |
+
'required' => true,
|
1121 |
+
),
|
1122 |
+
),
|
1123 |
+
),
|
1124 |
+
)
|
1125 |
+
)
|
1126 |
+
);
|
1127 |
+
$this->revisions = new Google_Service_Drive_Revisions_Resource(
|
1128 |
+
$this,
|
1129 |
+
$this->serviceName,
|
1130 |
+
'revisions',
|
1131 |
+
array(
|
1132 |
+
'methods' => array(
|
1133 |
+
'delete' => array(
|
1134 |
+
'path' => 'files/{fileId}/revisions/{revisionId}',
|
1135 |
+
'httpMethod' => 'DELETE',
|
1136 |
+
'parameters' => array(
|
1137 |
+
'fileId' => array(
|
1138 |
+
'location' => 'path',
|
1139 |
+
'type' => 'string',
|
1140 |
+
'required' => true,
|
1141 |
+
),
|
1142 |
+
'revisionId' => array(
|
1143 |
+
'location' => 'path',
|
1144 |
+
'type' => 'string',
|
1145 |
+
'required' => true,
|
1146 |
+
),
|
1147 |
+
),
|
1148 |
+
),'get' => array(
|
1149 |
+
'path' => 'files/{fileId}/revisions/{revisionId}',
|
1150 |
+
'httpMethod' => 'GET',
|
1151 |
+
'parameters' => array(
|
1152 |
+
'fileId' => array(
|
1153 |
+
'location' => 'path',
|
1154 |
+
'type' => 'string',
|
1155 |
+
'required' => true,
|
1156 |
+
),
|
1157 |
+
'revisionId' => array(
|
1158 |
+
'location' => 'path',
|
1159 |
+
'type' => 'string',
|
1160 |
+
'required' => true,
|
1161 |
+
),
|
1162 |
+
),
|
1163 |
+
),'list' => array(
|
1164 |
+
'path' => 'files/{fileId}/revisions',
|
1165 |
+
'httpMethod' => 'GET',
|
1166 |
+
'parameters' => array(
|
1167 |
+
'fileId' => array(
|
1168 |
+
'location' => 'path',
|
1169 |
+
'type' => 'string',
|
1170 |
+
'required' => true,
|
1171 |
+
),
|
1172 |
+
),
|
1173 |
+
),'patch' => array(
|
1174 |
+
'path' => 'files/{fileId}/revisions/{revisionId}',
|
1175 |
+
'httpMethod' => 'PATCH',
|
1176 |
+
'parameters' => array(
|
1177 |
+
'fileId' => array(
|
1178 |
+
'location' => 'path',
|
1179 |
+
'type' => 'string',
|
1180 |
+
'required' => true,
|
1181 |
+
),
|
1182 |
+
'revisionId' => array(
|
1183 |
+
'location' => 'path',
|
1184 |
+
'type' => 'string',
|
1185 |
+
'required' => true,
|
1186 |
+
),
|
1187 |
+
),
|
1188 |
+
),'update' => array(
|
1189 |
+
'path' => 'files/{fileId}/revisions/{revisionId}',
|
1190 |
+
'httpMethod' => 'PUT',
|
1191 |
+
'parameters' => array(
|
1192 |
+
'fileId' => array(
|
1193 |
+
'location' => 'path',
|
1194 |
+
'type' => 'string',
|
1195 |
+
'required' => true,
|
1196 |
+
),
|
1197 |
+
'revisionId' => array(
|
1198 |
+
'location' => 'path',
|
1199 |
+
'type' => 'string',
|
1200 |
+
'required' => true,
|
1201 |
+
),
|
1202 |
+
),
|
1203 |
+
),
|
1204 |
+
)
|
1205 |
+
)
|
1206 |
+
);
|
1207 |
+
}
|
1208 |
+
}
|
1209 |
+
|
1210 |
+
|
1211 |
+
/**
|
1212 |
+
* The "about" collection of methods.
|
1213 |
+
* Typical usage is:
|
1214 |
+
* <code>
|
1215 |
+
* $driveService = new Google_Service_Drive(...);
|
1216 |
+
* $about = $driveService->about;
|
1217 |
+
* </code>
|
1218 |
+
*/
|
1219 |
+
class Google_Service_Drive_About_Resource extends Google_Service_Resource
|
1220 |
+
{
|
1221 |
+
|
1222 |
+
/**
|
1223 |
+
* Gets the information about the current user along with Drive API settings
|
1224 |
+
* (about.get)
|
1225 |
+
*
|
1226 |
+
* @param array $optParams Optional parameters.
|
1227 |
+
*
|
1228 |
+
* @opt_param bool includeSubscribed
|
1229 |
+
* When calculating the number of remaining change IDs, whether to include shared files and public
|
1230 |
+
* files the user has opened. When set to false, this counts only change IDs for owned files and
|
1231 |
+
* any shared or public files that the user has explictly added to a folder in Drive.
|
1232 |
+
* @opt_param string maxChangeIdCount
|
1233 |
+
* Maximum number of remaining change IDs to count
|
1234 |
+
* @opt_param string startChangeId
|
1235 |
+
* Change ID to start counting from when calculating number of remaining change IDs
|
1236 |
+
* @return Google_Service_Drive_About
|
1237 |
+
*/
|
1238 |
+
public function get($optParams = array())
|
1239 |
+
{
|
1240 |
+
$params = array();
|
1241 |
+
$params = array_merge($params, $optParams);
|
1242 |
+
return $this->call('get', array($params), "Google_Service_Drive_About");
|
1243 |
+
}
|
1244 |
+
}
|
1245 |
+
|
1246 |
+
/**
|
1247 |
+
* The "apps" collection of methods.
|
1248 |
+
* Typical usage is:
|
1249 |
+
* <code>
|
1250 |
+
* $driveService = new Google_Service_Drive(...);
|
1251 |
+
* $apps = $driveService->apps;
|
1252 |
+
* </code>
|
1253 |
+
*/
|
1254 |
+
class Google_Service_Drive_Apps_Resource extends Google_Service_Resource
|
1255 |
+
{
|
1256 |
+
|
1257 |
+
/**
|
1258 |
+
* Gets a specific app. (apps.get)
|
1259 |
+
*
|
1260 |
+
* @param string $appId
|
1261 |
+
* The ID of the app.
|
1262 |
+
* @param array $optParams Optional parameters.
|
1263 |
+
* @return Google_Service_Drive_App
|
1264 |
+
*/
|
1265 |
+
public function get($appId, $optParams = array())
|
1266 |
+
{
|
1267 |
+
$params = array('appId' => $appId);
|
1268 |
+
$params = array_merge($params, $optParams);
|
1269 |
+
return $this->call('get', array($params), "Google_Service_Drive_App");
|
1270 |
+
}
|
1271 |
+
/**
|
1272 |
+
* Lists a user's installed apps. (apps.listApps)
|
1273 |
+
*
|
1274 |
+
* @param array $optParams Optional parameters.
|
1275 |
+
* @return Google_Service_Drive_AppList
|
1276 |
+
*/
|
1277 |
+
public function listApps($optParams = array())
|
1278 |
+
{
|
1279 |
+
$params = array();
|
1280 |
+
$params = array_merge($params, $optParams);
|
1281 |
+
return $this->call('list', array($params), "Google_Service_Drive_AppList");
|
1282 |
+
}
|
1283 |
+
}
|
1284 |
+
|
1285 |
+
/**
|
1286 |
+
* The "changes" collection of methods.
|
1287 |
+
* Typical usage is:
|
1288 |
+
* <code>
|
1289 |
+
* $driveService = new Google_Service_Drive(...);
|
1290 |
+
* $changes = $driveService->changes;
|
1291 |
+
* </code>
|
1292 |
+
*/
|
1293 |
+
class Google_Service_Drive_Changes_Resource extends Google_Service_Resource
|
1294 |
+
{
|
1295 |
+
|
1296 |
+
/**
|
1297 |
+
* Gets a specific change. (changes.get)
|
1298 |
+
*
|
1299 |
+
* @param string $changeId
|
1300 |
+
* The ID of the change.
|
1301 |
+
* @param array $optParams Optional parameters.
|
1302 |
+
* @return Google_Service_Drive_Change
|
1303 |
+
*/
|
1304 |
+
public function get($changeId, $optParams = array())
|
1305 |
+
{
|
1306 |
+
$params = array('changeId' => $changeId);
|
1307 |
+
$params = array_merge($params, $optParams);
|
1308 |
+
return $this->call('get', array($params), "Google_Service_Drive_Change");
|
1309 |
+
}
|
1310 |
+
/**
|
1311 |
+
* Lists the changes for a user. (changes.listChanges)
|
1312 |
+
*
|
1313 |
+
* @param array $optParams Optional parameters.
|
1314 |
+
*
|
1315 |
+
* @opt_param bool includeSubscribed
|
1316 |
+
* Whether to include shared files and public files the user has opened. When set to false, the
|
1317 |
+
* list will include owned files plus any shared or public files the user has explictly added to a
|
1318 |
+
* folder in Drive.
|
1319 |
+
* @opt_param string startChangeId
|
1320 |
+
* Change ID to start listing changes from.
|
1321 |
+
* @opt_param bool includeDeleted
|
1322 |
+
* Whether to include deleted items.
|
1323 |
+
* @opt_param int maxResults
|
1324 |
+
* Maximum number of changes to return.
|
1325 |
+
* @opt_param string pageToken
|
1326 |
+
* Page token for changes.
|
1327 |
+
* @return Google_Service_Drive_ChangeList
|
1328 |
+
*/
|
1329 |
+
public function listChanges($optParams = array())
|
1330 |
+
{
|
1331 |
+
$params = array();
|
1332 |
+
$params = array_merge($params, $optParams);
|
1333 |
+
return $this->call('list', array($params), "Google_Service_Drive_ChangeList");
|
1334 |
+
}
|
1335 |
+
/**
|
1336 |
+
* Subscribe to changes for a user. (changes.watch)
|
1337 |
+
*
|
1338 |
+
* @param Google_Channel $postBody
|
1339 |
+
* @param array $optParams Optional parameters.
|
1340 |
+
*
|
1341 |
+
* @opt_param bool includeSubscribed
|
1342 |
+
* Whether to include shared files and public files the user has opened. When set to false, the
|
1343 |
+
* list will include owned files plus any shared or public files the user has explictly added to a
|
1344 |
+
* folder in Drive.
|
1345 |
+
* @opt_param string startChangeId
|
1346 |
+
* Change ID to start listing changes from.
|
1347 |
+
* @opt_param bool includeDeleted
|
1348 |
+
* Whether to include deleted items.
|
1349 |
+
* @opt_param int maxResults
|
1350 |
+
* Maximum number of changes to return.
|
1351 |
+
* @opt_param string pageToken
|
1352 |
+
* Page token for changes.
|
1353 |
+
* @return Google_Service_Drive_Channel
|
1354 |
+
*/
|
1355 |
+
public function watch(Google_Service_Drive_Channel $postBody, $optParams = array())
|
1356 |
+
{
|
1357 |
+
$params = array('postBody' => $postBody);
|
1358 |
+
$params = array_merge($params, $optParams);
|
1359 |
+
return $this->call('watch', array($params), "Google_Service_Drive_Channel");
|
1360 |
+
}
|
1361 |
+
}
|
1362 |
+
|
1363 |
+
/**
|
1364 |
+
* The "channels" collection of methods.
|
1365 |
+
* Typical usage is:
|
1366 |
+
* <code>
|
1367 |
+
* $driveService = new Google_Service_Drive(...);
|
1368 |
+
* $channels = $driveService->channels;
|
1369 |
+
* </code>
|
1370 |
+
*/
|
1371 |
+
class Google_Service_Drive_Channels_Resource extends Google_Service_Resource
|
1372 |
+
{
|
1373 |
+
|
1374 |
+
/**
|
1375 |
+
* Stop watching resources through this channel (channels.stop)
|
1376 |
+
*
|
1377 |
+
* @param Google_Channel $postBody
|
1378 |
+
* @param array $optParams Optional parameters.
|
1379 |
+
*/
|
1380 |
+
public function stop(Google_Service_Drive_Channel $postBody, $optParams = array())
|
1381 |
+
{
|
1382 |
+
$params = array('postBody' => $postBody);
|
1383 |
+
$params = array_merge($params, $optParams);
|
1384 |
+
return $this->call('stop', array($params));
|
1385 |
+
}
|
1386 |
+
}
|
1387 |
+
|
1388 |
+
/**
|
1389 |
+
* The "children" collection of methods.
|
1390 |
+
* Typical usage is:
|
1391 |
+
* <code>
|
1392 |
+
* $driveService = new Google_Service_Drive(...);
|
1393 |
+
* $children = $driveService->children;
|
1394 |
+
* </code>
|
1395 |
+
*/
|
1396 |
+
class Google_Service_Drive_Children_Resource extends Google_Service_Resource
|
1397 |
+
{
|
1398 |
+
|
1399 |
+
/**
|
1400 |
+
* Removes a child from a folder. (children.delete)
|
1401 |
+
*
|
1402 |
+
* @param string $folderId
|
1403 |
+
* The ID of the folder.
|
1404 |
+
* @param string $childId
|
1405 |
+
* The ID of the child.
|
1406 |
+
* @param array $optParams Optional parameters.
|
1407 |
+
*/
|
1408 |
+
public function delete($folderId, $childId, $optParams = array())
|
1409 |
+
{
|
1410 |
+
$params = array('folderId' => $folderId, 'childId' => $childId);
|
1411 |
+
$params = array_merge($params, $optParams);
|
1412 |
+
return $this->call('delete', array($params));
|
1413 |
+
}
|
1414 |
+
/**
|
1415 |
+
* Gets a specific child reference. (children.get)
|
1416 |
+
*
|
1417 |
+
* @param string $folderId
|
1418 |
+
* The ID of the folder.
|
1419 |
+
* @param string $childId
|
1420 |
+
* The ID of the child.
|
1421 |
+
* @param array $optParams Optional parameters.
|
1422 |
+
* @return Google_Service_Drive_ChildReference
|
1423 |
+
*/
|
1424 |
+
public function get($folderId, $childId, $optParams = array())
|
1425 |
+
{
|
1426 |
+
$params = array('folderId' => $folderId, 'childId' => $childId);
|
1427 |
+
$params = array_merge($params, $optParams);
|
1428 |
+
return $this->call('get', array($params), "Google_Service_Drive_ChildReference");
|
1429 |
+
}
|
1430 |
+
/**
|
1431 |
+
* Inserts a file into a folder. (children.insert)
|
1432 |
+
*
|
1433 |
+
* @param string $folderId
|
1434 |
+
* The ID of the folder.
|
1435 |
+
* @param Google_ChildReference $postBody
|
1436 |
+
* @param array $optParams Optional parameters.
|
1437 |
+
* @return Google_Service_Drive_ChildReference
|
1438 |
+
*/
|
1439 |
+
public function insert($folderId, Google_Service_Drive_ChildReference $postBody, $optParams = array())
|
1440 |
+
{
|
1441 |
+
$params = array('folderId' => $folderId, 'postBody' => $postBody);
|
1442 |
+
$params = array_merge($params, $optParams);
|
1443 |
+
return $this->call('insert', array($params), "Google_Service_Drive_ChildReference");
|
1444 |
+
}
|
1445 |
+
/**
|
1446 |
+
* Lists a folder's children. (children.listChildren)
|
1447 |
+
*
|
1448 |
+
* @param string $folderId
|
1449 |
+
* The ID of the folder.
|
1450 |
+
* @param array $optParams Optional parameters.
|
1451 |
+
*
|
1452 |
+
* @opt_param string q
|
1453 |
+
* Query string for searching children.
|
1454 |
+
* @opt_param string pageToken
|
1455 |
+
* Page token for children.
|
1456 |
+
* @opt_param int maxResults
|
1457 |
+
* Maximum number of children to return.
|
1458 |
+
* @return Google_Service_Drive_ChildList
|
1459 |
+
*/
|
1460 |
+
public function listChildren($folderId, $optParams = array())
|
1461 |
+
{
|
1462 |
+
$params = array('folderId' => $folderId);
|
1463 |
+
$params = array_merge($params, $optParams);
|
1464 |
+
return $this->call('list', array($params), "Google_Service_Drive_ChildList");
|
1465 |
+
}
|
1466 |
+
}
|
1467 |
+
|
1468 |
+
/**
|
1469 |
+
* The "comments" collection of methods.
|
1470 |
+
* Typical usage is:
|
1471 |
+
* <code>
|
1472 |
+
* $driveService = new Google_Service_Drive(...);
|
1473 |
+
* $comments = $driveService->comments;
|
1474 |
+
* </code>
|
1475 |
+
*/
|
1476 |
+
class Google_Service_Drive_Comments_Resource extends Google_Service_Resource
|
1477 |
+
{
|
1478 |
+
|
1479 |
+
/**
|
1480 |
+
* Deletes a comment. (comments.delete)
|
1481 |
+
*
|
1482 |
+
* @param string $fileId
|
1483 |
+
* The ID of the file.
|
1484 |
+
* @param string $commentId
|
1485 |
+
* The ID of the comment.
|
1486 |
+
* @param array $optParams Optional parameters.
|
1487 |
+
*/
|
1488 |
+
public function delete($fileId, $commentId, $optParams = array())
|
1489 |
+
{
|
1490 |
+
$params = array('fileId' => $fileId, 'commentId' => $commentId);
|
1491 |
+
$params = array_merge($params, $optParams);
|
1492 |
+
return $this->call('delete', array($params));
|
1493 |
+
}
|
1494 |
+
/**
|
1495 |
+
* Gets a comment by ID. (comments.get)
|
1496 |
+
*
|
1497 |
+
* @param string $fileId
|
1498 |
+
* The ID of the file.
|
1499 |
+
* @param string $commentId
|
1500 |
+
* The ID of the comment.
|
1501 |
+
* @param array $optParams Optional parameters.
|
1502 |
+
*
|
1503 |
+
* @opt_param bool includeDeleted
|
1504 |
+
* If set, this will succeed when retrieving a deleted comment, and will include any deleted
|
1505 |
+
* replies.
|
1506 |
+
* @return Google_Service_Drive_Comment
|
1507 |
+
*/
|
1508 |
+
public function get($fileId, $commentId, $optParams = array())
|
1509 |
+
{
|
1510 |
+
$params = array('fileId' => $fileId, 'commentId' => $commentId);
|
1511 |
+
$params = array_merge($params, $optParams);
|
1512 |
+
return $this->call('get', array($params), "Google_Service_Drive_Comment");
|
1513 |
+
}
|
1514 |
+
/**
|
1515 |
+
* Creates a new comment on the given file. (comments.insert)
|
1516 |
+
*
|
1517 |
+
* @param string $fileId
|
1518 |
+
* The ID of the file.
|
1519 |
+
* @param Google_Comment $postBody
|
1520 |
+
* @param array $optParams Optional parameters.
|
1521 |
+
* @return Google_Service_Drive_Comment
|
1522 |
+
*/
|
1523 |
+
public function insert($fileId, Google_Service_Drive_Comment $postBody, $optParams = array())
|
1524 |
+
{
|
1525 |
+
$params = array('fileId' => $fileId, 'postBody' => $postBody);
|
1526 |
+
$params = array_merge($params, $optParams);
|
1527 |
+
return $this->call('insert', array($params), "Google_Service_Drive_Comment");
|
1528 |
+
}
|
1529 |
+
/**
|
1530 |
+
* Lists a file's comments. (comments.listComments)
|
1531 |
+
*
|
1532 |
+
* @param string $fileId
|
1533 |
+
* The ID of the file.
|
1534 |
+
* @param array $optParams Optional parameters.
|
1535 |
+
*
|
1536 |
+
* @opt_param string pageToken
|
1537 |
+
* The continuation token, used to page through large result sets. To get the next page of results,
|
1538 |
+
* set this parameter to the value of "nextPageToken" from the previous response.
|
1539 |
+
* @opt_param string updatedMin
|
1540 |
+
* Only discussions that were updated after this timestamp will be returned. Formatted as an RFC
|
1541 |
+
* 3339 timestamp.
|
1542 |
+
* @opt_param bool includeDeleted
|
1543 |
+
* If set, all comments and replies, including deleted comments and replies (with content stripped)
|
1544 |
+
* will be returned.
|
1545 |
+
* @opt_param int maxResults
|
1546 |
+
* The maximum number of discussions to include in the response, used for paging.
|
1547 |
+
* @return Google_Service_Drive_CommentList
|
1548 |
+
*/
|
1549 |
+
public function listComments($fileId, $optParams = array())
|
1550 |
+
{
|
1551 |
+
$params = array('fileId' => $fileId);
|
1552 |
+
$params = array_merge($params, $optParams);
|
1553 |
+
return $this->call('list', array($params), "Google_Service_Drive_CommentList");
|
1554 |
+
}
|
1555 |
+
/**
|
1556 |
+
* Updates an existing comment. This method supports patch semantics.
|
1557 |
+
* (comments.patch)
|
1558 |
+
*
|
1559 |
+
* @param string $fileId
|
1560 |
+
* The ID of the file.
|
1561 |
+
* @param string $commentId
|
1562 |
+
* The ID of the comment.
|
1563 |
+
* @param Google_Comment $postBody
|
1564 |
+
* @param array $optParams Optional parameters.
|
1565 |
+
* @return Google_Service_Drive_Comment
|
1566 |
+
*/
|
1567 |
+
public function patch($fileId, $commentId, Google_Service_Drive_Comment $postBody, $optParams = array())
|
1568 |
+
{
|
1569 |
+
$params = array('fileId' => $fileId, 'commentId' => $commentId, 'postBody' => $postBody);
|
1570 |
+
$params = array_merge($params, $optParams);
|
1571 |
+
return $this->call('patch', array($params), "Google_Service_Drive_Comment");
|
1572 |
+
}
|
1573 |
+
/**
|
1574 |
+
* Updates an existing comment. (comments.update)
|
1575 |
+
*
|
1576 |
+
* @param string $fileId
|
1577 |
+
* The ID of the file.
|
1578 |
+
* @param string $commentId
|
1579 |
+
* The ID of the comment.
|
1580 |
+
* @param Google_Comment $postBody
|
1581 |
+
* @param array $optParams Optional parameters.
|
1582 |
+
* @return Google_Service_Drive_Comment
|
1583 |
+
*/
|
1584 |
+
public function update($fileId, $commentId, Google_Service_Drive_Comment $postBody, $optParams = array())
|
1585 |
+
{
|
1586 |
+
$params = array('fileId' => $fileId, 'commentId' => $commentId, 'postBody' => $postBody);
|
1587 |
+
$params = array_merge($params, $optParams);
|
1588 |
+
return $this->call('update', array($params), "Google_Service_Drive_Comment");
|
1589 |
+
}
|
1590 |
+
}
|
1591 |
+
|
1592 |
+
/**
|
1593 |
+
* The "files" collection of methods.
|
1594 |
+
* Typical usage is:
|
1595 |
+
* <code>
|
1596 |
+
* $driveService = new Google_Service_Drive(...);
|
1597 |
+
* $files = $driveService->files;
|
1598 |
+
* </code>
|
1599 |
+
*/
|
1600 |
+
class Google_Service_Drive_Files_Resource extends Google_Service_Resource
|
1601 |
+
{
|
1602 |
+
|
1603 |
+
/**
|
1604 |
+
* Creates a copy of the specified file. (files.copy)
|
1605 |
+
*
|
1606 |
+
* @param string $fileId
|
1607 |
+
* The ID of the file to copy.
|
1608 |
+
* @param Google_DriveFile $postBody
|
1609 |
+
* @param array $optParams Optional parameters.
|
1610 |
+
*
|
1611 |
+
* @opt_param bool convert
|
1612 |
+
* Whether to convert this file to the corresponding Google Docs format.
|
1613 |
+
* @opt_param string ocrLanguage
|
1614 |
+
* If ocr is true, hints at the language to use. Valid values are ISO 639-1 codes.
|
1615 |
+
* @opt_param string visibility
|
1616 |
+
* The visibility of the new file. This parameter is only relevant when the source is not a native
|
1617 |
+
* Google Doc and convert=false.
|
1618 |
+
* @opt_param bool pinned
|
1619 |
+
* Whether to pin the head revision of the new copy.
|
1620 |
+
* @opt_param bool ocr
|
1621 |
+
* Whether to attempt OCR on .jpg, .png, .gif, or .pdf uploads.
|
1622 |
+
* @opt_param string timedTextTrackName
|
1623 |
+
* The timed text track name.
|
1624 |
+
* @opt_param string timedTextLanguage
|
1625 |
+
* The language of the timed text.
|
1626 |
+
* @return Google_Service_Drive_DriveFile
|
1627 |
+
*/
|
1628 |
+
public function copy($fileId, Google_Service_Drive_DriveFile $postBody, $optParams = array())
|
1629 |
+
{
|
1630 |
+
$params = array('fileId' => $fileId, 'postBody' => $postBody);
|
1631 |
+
$params = array_merge($params, $optParams);
|
1632 |
+
return $this->call('copy', array($params), "Google_Service_Drive_DriveFile");
|
1633 |
+
}
|
1634 |
+
/**
|
1635 |
+
* Permanently deletes a file by ID. Skips the trash. (files.delete)
|
1636 |
+
*
|
1637 |
+
* @param string $fileId
|
1638 |
+
* The ID of the file to delete.
|
1639 |
+
* @param array $optParams Optional parameters.
|
1640 |
+
*/
|
1641 |
+
public function delete($fileId, $optParams = array())
|
1642 |
+
{
|
1643 |
+
$params = array('fileId' => $fileId);
|
1644 |
+
$params = array_merge($params, $optParams);
|
1645 |
+
return $this->call('delete', array($params));
|
1646 |
+
}
|
1647 |
+
/**
|
1648 |
+
* Gets a file's metadata by ID. (files.get)
|
1649 |
+
*
|
1650 |
+
* @param string $fileId
|
1651 |
+
* The ID for the file in question.
|
1652 |
+
* @param array $optParams Optional parameters.
|
1653 |
+
*
|
1654 |
+
* @opt_param bool updateViewedDate
|
1655 |
+
* Whether to update the view date after successfully retrieving the file.
|
1656 |
+
* @opt_param string projection
|
1657 |
+
* This parameter is deprecated and has no function.
|
1658 |
+
* @return Google_Service_Drive_DriveFile
|
1659 |
+
*/
|
1660 |
+
public function get($fileId, $optParams = array())
|
1661 |
+
{
|
1662 |
+
$params = array('fileId' => $fileId);
|
1663 |
+
$params = array_merge($params, $optParams);
|
1664 |
+
return $this->call('get', array($params), "Google_Service_Drive_DriveFile");
|
1665 |
+
}
|
1666 |
+
/**
|
1667 |
+
* Insert a new file. (files.insert)
|
1668 |
+
*
|
1669 |
+
* @param Google_DriveFile $postBody
|
1670 |
+
* @param array $optParams Optional parameters.
|
1671 |
+
*
|
1672 |
+
* @opt_param bool convert
|
1673 |
+
* Whether to convert this file to the corresponding Google Docs format.
|
1674 |
+
* @opt_param bool useContentAsIndexableText
|
1675 |
+
* Whether to use the content as indexable text.
|
1676 |
+
* @opt_param string ocrLanguage
|
1677 |
+
* If ocr is true, hints at the language to use. Valid values are ISO 639-1 codes.
|
1678 |
+
* @opt_param string visibility
|
1679 |
+
* The visibility of the new file. This parameter is only relevant when convert=false.
|
1680 |
+
* @opt_param bool pinned
|
1681 |
+
* Whether to pin the head revision of the uploaded file.
|
1682 |
+
* @opt_param bool ocr
|
1683 |
+
* Whether to attempt OCR on .jpg, .png, .gif, or .pdf uploads.
|
1684 |
+
* @opt_param string timedTextTrackName
|
1685 |
+
* The timed text track name.
|
1686 |
+
* @opt_param string timedTextLanguage
|
1687 |
+
* The language of the timed text.
|
1688 |
+
* @return Google_Service_Drive_DriveFile
|
1689 |
+
*/
|
1690 |
+
public function insert(Google_Service_Drive_DriveFile $postBody, $optParams = array())
|
1691 |
+
{
|
1692 |
+
$params = array('postBody' => $postBody);
|
1693 |
+
$params = array_merge($params, $optParams);
|
1694 |
+
return $this->call('insert', array($params), "Google_Service_Drive_DriveFile");
|
1695 |
+
}
|
1696 |
+
/**
|
1697 |
+
* Lists the user's files. (files.listFiles)
|
1698 |
+
*
|
1699 |
+
* @param array $optParams Optional parameters.
|
1700 |
+
*
|
1701 |
+
* @opt_param string q
|
1702 |
+
* Query string for searching files.
|
1703 |
+
* @opt_param string pageToken
|
1704 |
+
* Page token for files.
|
1705 |
+
* @opt_param string projection
|
1706 |
+
* This parameter is deprecated and has no function.
|
1707 |
+
* @opt_param int maxResults
|
1708 |
+
* Maximum number of files to return.
|
1709 |
+
* @return Google_Service_Drive_FileList
|
1710 |
+
*/
|
1711 |
+
public function listFiles($optParams = array())
|
1712 |
+
{
|
1713 |
+
$params = array();
|
1714 |
+
$params = array_merge($params, $optParams);
|
1715 |
+
return $this->call('list', array($params), "Google_Service_Drive_FileList");
|
1716 |
+
}
|
1717 |
+
/**
|
1718 |
+
* Updates file metadata and/or content. This method supports patch semantics.
|
1719 |
+
* (files.patch)
|
1720 |
+
*
|
1721 |
+
* @param string $fileId
|
1722 |
+
* The ID of the file to update.
|
1723 |
+
* @param Google_DriveFile $postBody
|
1724 |
+
* @param array $optParams Optional parameters.
|
1725 |
+
*
|
1726 |
+
* @opt_param bool convert
|
1727 |
+
* Whether to convert this file to the corresponding Google Docs format.
|
1728 |
+
* @opt_param bool updateViewedDate
|
1729 |
+
* Whether to update the view date after successfully updating the file.
|
1730 |
+
* @opt_param bool setModifiedDate
|
1731 |
+
* Whether to set the modified date with the supplied modified date.
|
1732 |
+
* @opt_param bool useContentAsIndexableText
|
1733 |
+
* Whether to use the content as indexable text.
|
1734 |
+
* @opt_param string ocrLanguage
|
1735 |
+
* If ocr is true, hints at the language to use. Valid values are ISO 639-1 codes.
|
1736 |
+
* @opt_param bool pinned
|
1737 |
+
* Whether to pin the new revision.
|
1738 |
+
* @opt_param bool newRevision
|
1739 |
+
* Whether a blob upload should create a new revision. If false, the blob data in the current head
|
1740 |
+
* revision is replaced. If not set or true, a new blob is created as head revision, and previous
|
1741 |
+
* revisions are preserved (causing increased use of the user's data storage quota).
|
1742 |
+
* @opt_param bool ocr
|
1743 |
+
* Whether to attempt OCR on .jpg, .png, .gif, or .pdf uploads.
|
1744 |
+
* @opt_param string timedTextLanguage
|
1745 |
+
* The language of the timed text.
|
1746 |
+
* @opt_param string timedTextTrackName
|
1747 |
+
* The timed text track name.
|
1748 |
+
* @return Google_Service_Drive_DriveFile
|
1749 |
+
*/
|
1750 |
+
public function patch($fileId, Google_Service_Drive_DriveFile $postBody, $optParams = array())
|
1751 |
+
{
|
1752 |
+
$params = array('fileId' => $fileId, 'postBody' => $postBody);
|
1753 |
+
$params = array_merge($params, $optParams);
|
1754 |
+
return $this->call('patch', array($params), "Google_Service_Drive_DriveFile");
|
1755 |
+
}
|
1756 |
+
/**
|
1757 |
+
* Set the file's updated time to the current server time. (files.touch)
|
1758 |
+
*
|
1759 |
+
* @param string $fileId
|
1760 |
+
* The ID of the file to update.
|
1761 |
+
* @param array $optParams Optional parameters.
|
1762 |
+
* @return Google_Service_Drive_DriveFile
|
1763 |
+
*/
|
1764 |
+
public function touch($fileId, $optParams = array())
|
1765 |
+
{
|
1766 |
+
$params = array('fileId' => $fileId);
|
1767 |
+
$params = array_merge($params, $optParams);
|
1768 |
+
return $this->call('touch', array($params), "Google_Service_Drive_DriveFile");
|
1769 |
+
}
|
1770 |
+
/**
|
1771 |
+
* Moves a file to the trash. (files.trash)
|
1772 |
+
*
|
1773 |
+
* @param string $fileId
|
1774 |
+
* The ID of the file to trash.
|
1775 |
+
* @param array $optParams Optional parameters.
|
1776 |
+
* @return Google_Service_Drive_DriveFile
|
1777 |
+
*/
|
1778 |
+
public function trash($fileId, $optParams = array())
|
1779 |
+
{
|
1780 |
+
$params = array('fileId' => $fileId);
|
1781 |
+
$params = array_merge($params, $optParams);
|
1782 |
+
return $this->call('trash', array($params), "Google_Service_Drive_DriveFile");
|
1783 |
+
}
|
1784 |
+
/**
|
1785 |
+
* Restores a file from the trash. (files.untrash)
|
1786 |
+
*
|
1787 |
+
* @param string $fileId
|
1788 |
+
* The ID of the file to untrash.
|
1789 |
+
* @param array $optParams Optional parameters.
|
1790 |
+
* @return Google_Service_Drive_DriveFile
|
1791 |
+
*/
|
1792 |
+
public function untrash($fileId, $optParams = array())
|
1793 |
+
{
|
1794 |
+
$params = array('fileId' => $fileId);
|
1795 |
+
$params = array_merge($params, $optParams);
|
1796 |
+
return $this->call('untrash', array($params), "Google_Service_Drive_DriveFile");
|
1797 |
+
}
|
1798 |
+
/**
|
1799 |
+
* Updates file metadata and/or content. (files.update)
|
1800 |
+
*
|
1801 |
+
* @param string $fileId
|
1802 |
+
* The ID of the file to update.
|
1803 |
+
* @param Google_DriveFile $postBody
|
1804 |
+
* @param array $optParams Optional parameters.
|
1805 |
+
*
|
1806 |
+
* @opt_param bool convert
|
1807 |
+
* Whether to convert this file to the corresponding Google Docs format.
|
1808 |
+
* @opt_param bool updateViewedDate
|
1809 |
+
* Whether to update the view date after successfully updating the file.
|
1810 |
+
* @opt_param bool setModifiedDate
|
1811 |
+
* Whether to set the modified date with the supplied modified date.
|
1812 |
+
* @opt_param bool useContentAsIndexableText
|
1813 |
+
* Whether to use the content as indexable text.
|
1814 |
+
* @opt_param string ocrLanguage
|
1815 |
+
* If ocr is true, hints at the language to use. Valid values are ISO 639-1 codes.
|
1816 |
+
* @opt_param bool pinned
|
1817 |
+
* Whether to pin the new revision.
|
1818 |
+
* @opt_param bool newRevision
|
1819 |
+
* Whether a blob upload should create a new revision. If false, the blob data in the current head
|
1820 |
+
* revision is replaced. If not set or true, a new blob is created as head revision, and previous
|
1821 |
+
* revisions are preserved (causing increased use of the user's data storage quota).
|
1822 |
+
* @opt_param bool ocr
|
1823 |
+
* Whether to attempt OCR on .jpg, .png, .gif, or .pdf uploads.
|
1824 |
+
* @opt_param string timedTextLanguage
|
1825 |
+
* The language of the timed text.
|
1826 |
+
* @opt_param string timedTextTrackName
|
1827 |
+
* The timed text track name.
|
1828 |
+
* @return Google_Service_Drive_DriveFile
|
1829 |
+
*/
|
1830 |
+
public function update($fileId, Google_Service_Drive_DriveFile $postBody, $optParams = array())
|
1831 |
+
{
|
1832 |
+
$params = array('fileId' => $fileId, 'postBody' => $postBody);
|
1833 |
+
$params = array_merge($params, $optParams);
|
1834 |
+
return $this->call('update', array($params), "Google_Service_Drive_DriveFile");
|
1835 |
+
}
|
1836 |
+
/**
|
1837 |
+
* Subscribe to changes on a file (files.watch)
|
1838 |
+
*
|
1839 |
+
* @param string $fileId
|
1840 |
+
* The ID for the file in question.
|
1841 |
+
* @param Google_Channel $postBody
|
1842 |
+
* @param array $optParams Optional parameters.
|
1843 |
+
*
|
1844 |
+
* @opt_param bool updateViewedDate
|
1845 |
+
* Whether to update the view date after successfully retrieving the file.
|
1846 |
+
* @opt_param string projection
|
1847 |
+
* This parameter is deprecated and has no function.
|
1848 |
+
* @return Google_Service_Drive_Channel
|
1849 |
+
*/
|
1850 |
+
public function watch($fileId, Google_Service_Drive_Channel $postBody, $optParams = array())
|
1851 |
+
{
|
1852 |
+
$params = array('fileId' => $fileId, 'postBody' => $postBody);
|
1853 |
+
$params = array_merge($params, $optParams);
|
1854 |
+
return $this->call('watch', array($params), "Google_Service_Drive_Channel");
|
1855 |
+
}
|
1856 |
+
}
|
1857 |
+
|
1858 |
+
/**
|
1859 |
+
* The "parents" collection of methods.
|
1860 |
+
* Typical usage is:
|
1861 |
+
* <code>
|
1862 |
+
* $driveService = new Google_Service_Drive(...);
|
1863 |
+
* $parents = $driveService->parents;
|
1864 |
+
* </code>
|
1865 |
+
*/
|
1866 |
+
class Google_Service_Drive_Parents_Resource extends Google_Service_Resource
|
1867 |
+
{
|
1868 |
+
|
1869 |
+
/**
|
1870 |
+
* Removes a parent from a file. (parents.delete)
|
1871 |
+
*
|
1872 |
+
* @param string $fileId
|
1873 |
+
* The ID of the file.
|
1874 |
+
* @param string $parentId
|
1875 |
+
* The ID of the parent.
|
1876 |
+
* @param array $optParams Optional parameters.
|
1877 |
+
*/
|
1878 |
+
public function delete($fileId, $parentId, $optParams = array())
|
1879 |
+
{
|
1880 |
+
$params = array('fileId' => $fileId, 'parentId' => $parentId);
|
1881 |
+
$params = array_merge($params, $optParams);
|
1882 |
+
return $this->call('delete', array($params));
|
1883 |
+
}
|
1884 |
+
/**
|
1885 |
+
* Gets a specific parent reference. (parents.get)
|
1886 |
+
*
|
1887 |
+
* @param string $fileId
|
1888 |
+
* The ID of the file.
|
1889 |
+
* @param string $parentId
|
1890 |
+
* The ID of the parent.
|
1891 |
+
* @param array $optParams Optional parameters.
|
1892 |
+
* @return Google_Service_Drive_ParentReference
|
1893 |
+
*/
|
1894 |
+
public function get($fileId, $parentId, $optParams = array())
|
1895 |
+
{
|
1896 |
+
$params = array('fileId' => $fileId, 'parentId' => $parentId);
|
1897 |
+
$params = array_merge($params, $optParams);
|
1898 |
+
return $this->call('get', array($params), "Google_Service_Drive_ParentReference");
|
1899 |
+
}
|
1900 |
+
/**
|
1901 |
+
* Adds a parent folder for a file. (parents.insert)
|
1902 |
+
*
|
1903 |
+
* @param string $fileId
|
1904 |
+
* The ID of the file.
|
1905 |
+
* @param Google_ParentReference $postBody
|
1906 |
+
* @param array $optParams Optional parameters.
|
1907 |
+
* @return Google_Service_Drive_ParentReference
|
1908 |
+
*/
|
1909 |
+
public function insert($fileId, Google_Service_Drive_ParentReference $postBody, $optParams = array())
|
1910 |
+
{
|
1911 |
+
$params = array('fileId' => $fileId, 'postBody' => $postBody);
|
1912 |
+
$params = array_merge($params, $optParams);
|
1913 |
+
return $this->call('insert', array($params), "Google_Service_Drive_ParentReference");
|
1914 |
+
}
|
1915 |
+
/**
|
1916 |
+
* Lists a file's parents. (parents.listParents)
|
1917 |
+
*
|
1918 |
+
* @param string $fileId
|
1919 |
+
* The ID of the file.
|
1920 |
+
* @param array $optParams Optional parameters.
|
1921 |
+
* @return Google_Service_Drive_ParentList
|
1922 |
+
*/
|
1923 |
+
public function listParents($fileId, $optParams = array())
|
1924 |
+
{
|
1925 |
+
$params = array('fileId' => $fileId);
|
1926 |
+
$params = array_merge($params, $optParams);
|
1927 |
+
return $this->call('list', array($params), "Google_Service_Drive_ParentList");
|
1928 |
+
}
|
1929 |
+
}
|
1930 |
+
|
1931 |
+
/**
|
1932 |
+
* The "permissions" collection of methods.
|
1933 |
+
* Typical usage is:
|
1934 |
+
* <code>
|
1935 |
+
* $driveService = new Google_Service_Drive(...);
|
1936 |
+
* $permissions = $driveService->permissions;
|
1937 |
+
* </code>
|
1938 |
+
*/
|
1939 |
+
class Google_Service_Drive_Permissions_Resource extends Google_Service_Resource
|
1940 |
+
{
|
1941 |
+
|
1942 |
+
/**
|
1943 |
+
* Deletes a permission from a file. (permissions.delete)
|
1944 |
+
*
|
1945 |
+
* @param string $fileId
|
1946 |
+
* The ID for the file.
|
1947 |
+
* @param string $permissionId
|
1948 |
+
* The ID for the permission.
|
1949 |
+
* @param array $optParams Optional parameters.
|
1950 |
+
*/
|
1951 |
+
public function delete($fileId, $permissionId, $optParams = array())
|
1952 |
+
{
|
1953 |
+
$params = array('fileId' => $fileId, 'permissionId' => $permissionId);
|
1954 |
+
$params = array_merge($params, $optParams);
|
1955 |
+
return $this->call('delete', array($params));
|
1956 |
+
}
|
1957 |
+
/**
|
1958 |
+
* Gets a permission by ID. (permissions.get)
|
1959 |
+
*
|
1960 |
+
* @param string $fileId
|
1961 |
+
* The ID for the file.
|
1962 |
+
* @param string $permissionId
|
1963 |
+
* The ID for the permission.
|
1964 |
+
* @param array $optParams Optional parameters.
|
1965 |
+
* @return Google_Service_Drive_Permission
|
1966 |
+
*/
|
1967 |
+
public function get($fileId, $permissionId, $optParams = array())
|
1968 |
+
{
|
1969 |
+
$params = array('fileId' => $fileId, 'permissionId' => $permissionId);
|
1970 |
+
$params = array_merge($params, $optParams);
|
1971 |
+
return $this->call('get', array($params), "Google_Service_Drive_Permission");
|
1972 |
+
}
|
1973 |
+
/**
|
1974 |
+
* Returns the permission ID for an email address. (permissions.getIdForEmail)
|
1975 |
+
*
|
1976 |
+
* @param string $email
|
1977 |
+
* The email address for which to return a permission ID
|
1978 |
+
* @param array $optParams Optional parameters.
|
1979 |
+
* @return Google_Service_Drive_PermissionId
|
1980 |
+
*/
|
1981 |
+
public function getIdForEmail($email, $optParams = array())
|
1982 |
+
{
|
1983 |
+
$params = array('email' => $email);
|
1984 |
+
$params = array_merge($params, $optParams);
|
1985 |
+
return $this->call('getIdForEmail', array($params), "Google_Service_Drive_PermissionId");
|
1986 |
+
}
|
1987 |
+
/**
|
1988 |
+
* Inserts a permission for a file. (permissions.insert)
|
1989 |
+
*
|
1990 |
+
* @param string $fileId
|
1991 |
+
* The ID for the file.
|
1992 |
+
* @param Google_Permission $postBody
|
1993 |
+
* @param array $optParams Optional parameters.
|
1994 |
+
*
|
1995 |
+
* @opt_param string emailMessage
|
1996 |
+
* A custom message to include in notification emails.
|
1997 |
+
* @opt_param bool sendNotificationEmails
|
1998 |
+
* Whether to send notification emails when sharing to users or groups.
|
1999 |
+
* @return Google_Service_Drive_Permission
|
2000 |
+
*/
|
2001 |
+
public function insert($fileId, Google_Service_Drive_Permission $postBody, $optParams = array())
|
2002 |
+
{
|
2003 |
+
$params = array('fileId' => $fileId, 'postBody' => $postBody);
|
2004 |
+
$params = array_merge($params, $optParams);
|
2005 |
+
return $this->call('insert', array($params), "Google_Service_Drive_Permission");
|
2006 |
+
}
|
2007 |
+
/**
|
2008 |
+
* Lists a file's permissions. (permissions.listPermissions)
|
2009 |
+
*
|
2010 |
+
* @param string $fileId
|
2011 |
+
* The ID for the file.
|
2012 |
+
* @param array $optParams Optional parameters.
|
2013 |
+
* @return Google_Service_Drive_PermissionList
|
2014 |
+
*/
|
2015 |
+
public function listPermissions($fileId, $optParams = array())
|
2016 |
+
{
|
2017 |
+
$params = array('fileId' => $fileId);
|
2018 |
+
$params = array_merge($params, $optParams);
|
2019 |
+
return $this->call('list', array($params), "Google_Service_Drive_PermissionList");
|
2020 |
+
}
|
2021 |
+
/**
|
2022 |
+
* Updates a permission. This method supports patch semantics.
|
2023 |
+
* (permissions.patch)
|
2024 |
+
*
|
2025 |
+
* @param string $fileId
|
2026 |
+
* The ID for the file.
|
2027 |
+
* @param string $permissionId
|
2028 |
+
* The ID for the permission.
|
2029 |
+
* @param Google_Permission $postBody
|
2030 |
+
* @param array $optParams Optional parameters.
|
2031 |
+
*
|
2032 |
+
* @opt_param bool transferOwnership
|
2033 |
+
* Whether changing a role to 'owner' should also downgrade the current owners to writers.
|
2034 |
+
* @return Google_Service_Drive_Permission
|
2035 |
+
*/
|
2036 |
+
public function patch($fileId, $permissionId, Google_Service_Drive_Permission $postBody, $optParams = array())
|
2037 |
+
{
|
2038 |
+
$params = array('fileId' => $fileId, 'permissionId' => $permissionId, 'postBody' => $postBody);
|
2039 |
+
$params = array_merge($params, $optParams);
|
2040 |
+
return $this->call('patch', array($params), "Google_Service_Drive_Permission");
|
2041 |
+
}
|
2042 |
+
/**
|
2043 |
+
* Updates a permission. (permissions.update)
|
2044 |
+
*
|
2045 |
+
* @param string $fileId
|
2046 |
+
* The ID for the file.
|
2047 |
+
* @param string $permissionId
|
2048 |
+
* The ID for the permission.
|
2049 |
+
* @param Google_Permission $postBody
|
2050 |
+
* @param array $optParams Optional parameters.
|
2051 |
+
*
|
2052 |
+
* @opt_param bool transferOwnership
|
2053 |
+
* Whether changing a role to 'owner' should also downgrade the current owners to writers.
|
2054 |
+
* @return Google_Service_Drive_Permission
|
2055 |
+
*/
|
2056 |
+
public function update($fileId, $permissionId, Google_Service_Drive_Permission $postBody, $optParams = array())
|
2057 |
+
{
|
2058 |
+
$params = array('fileId' => $fileId, 'permissionId' => $permissionId, 'postBody' => $postBody);
|
2059 |
+
$params = array_merge($params, $optParams);
|
2060 |
+
return $this->call('update', array($params), "Google_Service_Drive_Permission");
|
2061 |
+
}
|
2062 |
+
}
|
2063 |
+
|
2064 |
+
/**
|
2065 |
+
* The "properties" collection of methods.
|
2066 |
+
* Typical usage is:
|
2067 |
+
* <code>
|
2068 |
+
* $driveService = new Google_Service_Drive(...);
|
2069 |
+
* $properties = $driveService->properties;
|
2070 |
+
* </code>
|
2071 |
+
*/
|
2072 |
+
class Google_Service_Drive_Properties_Resource extends Google_Service_Resource
|
2073 |
+
{
|
2074 |
+
|
2075 |
+
/**
|
2076 |
+
* Deletes a property. (properties.delete)
|
2077 |
+
*
|
2078 |
+
* @param string $fileId
|
2079 |
+
* The ID of the file.
|
2080 |
+
* @param string $propertyKey
|
2081 |
+
* The key of the property.
|
2082 |
+
* @param array $optParams Optional parameters.
|
2083 |
+
*
|
2084 |
+
* @opt_param string visibility
|
2085 |
+
* The visibility of the property.
|
2086 |
+
*/
|
2087 |
+
public function delete($fileId, $propertyKey, $optParams = array())
|
2088 |
+
{
|
2089 |
+
$params = array('fileId' => $fileId, 'propertyKey' => $propertyKey);
|
2090 |
+
$params = array_merge($params, $optParams);
|
2091 |
+
return $this->call('delete', array($params));
|
2092 |
+
}
|
2093 |
+
/**
|
2094 |
+
* Gets a property by its key. (properties.get)
|
2095 |
+
*
|
2096 |
+
* @param string $fileId
|
2097 |
+
* The ID of the file.
|
2098 |
+
* @param string $propertyKey
|
2099 |
+
* The key of the property.
|
2100 |
+
* @param array $optParams Optional parameters.
|
2101 |
+
*
|
2102 |
+
* @opt_param string visibility
|
2103 |
+
* The visibility of the property.
|
2104 |
+
* @return Google_Service_Drive_Property
|
2105 |
+
*/
|
2106 |
+
public function get($fileId, $propertyKey, $optParams = array())
|
2107 |
+
{
|
2108 |
+
$params = array('fileId' => $fileId, 'propertyKey' => $propertyKey);
|
2109 |
+
$params = array_merge($params, $optParams);
|
2110 |
+
return $this->call('get', array($params), "Google_Service_Drive_Property");
|
2111 |
+
}
|
2112 |
+
/**
|
2113 |
+
* Adds a property to a file. (properties.insert)
|
2114 |
+
*
|
2115 |
+
* @param string $fileId
|
2116 |
+
* The ID of the file.
|
2117 |
+
* @param Google_Property $postBody
|
2118 |
+
* @param array $optParams Optional parameters.
|
2119 |
+
* @return Google_Service_Drive_Property
|
2120 |
+
*/
|
2121 |
+
public function insert($fileId, Google_Service_Drive_Property $postBody, $optParams = array())
|
2122 |
+
{
|
2123 |
+
$params = array('fileId' => $fileId, 'postBody' => $postBody);
|
2124 |
+
$params = array_merge($params, $optParams);
|
2125 |
+
return $this->call('insert', array($params), "Google_Service_Drive_Property");
|
2126 |
+
}
|
2127 |
+
/**
|
2128 |
+
* Lists a file's properties. (properties.listProperties)
|
2129 |
+
*
|
2130 |
+
* @param string $fileId
|
2131 |
+
* The ID of the file.
|
2132 |
+
* @param array $optParams Optional parameters.
|
2133 |
+
* @return Google_Service_Drive_PropertyList
|
2134 |
+
*/
|
2135 |
+
public function listProperties($fileId, $optParams = array())
|
2136 |
+
{
|
2137 |
+
$params = array('fileId' => $fileId);
|
2138 |
+
$params = array_merge($params, $optParams);
|
2139 |
+
return $this->call('list', array($params), "Google_Service_Drive_PropertyList");
|
2140 |
+
}
|
2141 |
+
/**
|
2142 |
+
* Updates a property. This method supports patch semantics. (properties.patch)
|
2143 |
+
*
|
2144 |
+
* @param string $fileId
|
2145 |
+
* The ID of the file.
|
2146 |
+
* @param string $propertyKey
|
2147 |
+
* The key of the property.
|
2148 |
+
* @param Google_Property $postBody
|
2149 |
+
* @param array $optParams Optional parameters.
|
2150 |
+
*
|
2151 |
+
* @opt_param string visibility
|
2152 |
+
* The visibility of the property.
|
2153 |
+
* @return Google_Service_Drive_Property
|
2154 |
+
*/
|
2155 |
+
public function patch($fileId, $propertyKey, Google_Service_Drive_Property $postBody, $optParams = array())
|
2156 |
+
{
|
2157 |
+
$params = array('fileId' => $fileId, 'propertyKey' => $propertyKey, 'postBody' => $postBody);
|
2158 |
+
$params = array_merge($params, $optParams);
|
2159 |
+
return $this->call('patch', array($params), "Google_Service_Drive_Property");
|
2160 |
+
}
|
2161 |
+
/**
|
2162 |
+
* Updates a property. (properties.update)
|
2163 |
+
*
|
2164 |
+
* @param string $fileId
|
2165 |
+
* The ID of the file.
|
2166 |
+
* @param string $propertyKey
|
2167 |
+
* The key of the property.
|
2168 |
+
* @param Google_Property $postBody
|
2169 |
+
* @param array $optParams Optional parameters.
|
2170 |
+
*
|
2171 |
+
* @opt_param string visibility
|
2172 |
+
* The visibility of the property.
|
2173 |
+
* @return Google_Service_Drive_Property
|
2174 |
+
*/
|
2175 |
+
public function update($fileId, $propertyKey, Google_Service_Drive_Property $postBody, $optParams = array())
|
2176 |
+
{
|
2177 |
+
$params = array('fileId' => $fileId, 'propertyKey' => $propertyKey, 'postBody' => $postBody);
|
2178 |
+
$params = array_merge($params, $optParams);
|
2179 |
+
return $this->call('update', array($params), "Google_Service_Drive_Property");
|
2180 |
+
}
|
2181 |
+
}
|
2182 |
+
|
2183 |
+
/**
|
2184 |
+
* The "realtime" collection of methods.
|
2185 |
+
* Typical usage is:
|
2186 |
+
* <code>
|
2187 |
+
* $driveService = new Google_Service_Drive(...);
|
2188 |
+
* $realtime = $driveService->realtime;
|
2189 |
+
* </code>
|
2190 |
+
*/
|
2191 |
+
class Google_Service_Drive_Realtime_Resource extends Google_Service_Resource
|
2192 |
+
{
|
2193 |
+
|
2194 |
+
/**
|
2195 |
+
* Exports the contents of the Realtime API data model associated with this file
|
2196 |
+
* as JSON. (realtime.get)
|
2197 |
+
*
|
2198 |
+
* @param string $fileId
|
2199 |
+
* The ID of the file that the Realtime API data model is associated with.
|
2200 |
+
* @param array $optParams Optional parameters.
|
2201 |
+
*/
|
2202 |
+
public function get($fileId, $optParams = array())
|
2203 |
+
{
|
2204 |
+
$params = array('fileId' => $fileId);
|
2205 |
+
$params = array_merge($params, $optParams);
|
2206 |
+
return $this->call('get', array($params));
|
2207 |
+
}
|
2208 |
+
/**
|
2209 |
+
* Overwrites the Realtime API data model associated with this file with the
|
2210 |
+
* provided JSON data model. (realtime.update)
|
2211 |
+
*
|
2212 |
+
* @param string $fileId
|
2213 |
+
* The ID of the file that the Realtime API data model is associated with.
|
2214 |
+
* @param array $optParams Optional parameters.
|
2215 |
+
*
|
2216 |
+
* @opt_param string baseRevision
|
2217 |
+
* The revision of the model to diff the uploaded model against. If set, the uploaded model is
|
2218 |
+
* diffed against the provided revision and those differences are merged with any changes made to
|
2219 |
+
* the model after the provided revision. If not set, the uploaded model replaces the current model
|
2220 |
+
* on the server.
|
2221 |
+
*/
|
2222 |
+
public function update($fileId, $optParams = array())
|
2223 |
+
{
|
2224 |
+
$params = array('fileId' => $fileId);
|
2225 |
+
$params = array_merge($params, $optParams);
|
2226 |
+
return $this->call('update', array($params));
|
2227 |
+
}
|
2228 |
+
}
|
2229 |
+
|
2230 |
+
/**
|
2231 |
+
* The "replies" collection of methods.
|
2232 |
+
* Typical usage is:
|
2233 |
+
* <code>
|
2234 |
+
* $driveService = new Google_Service_Drive(...);
|
2235 |
+
* $replies = $driveService->replies;
|
2236 |
+
* </code>
|
2237 |
+
*/
|
2238 |
+
class Google_Service_Drive_Replies_Resource extends Google_Service_Resource
|
2239 |
+
{
|
2240 |
+
|
2241 |
+
/**
|
2242 |
+
* Deletes a reply. (replies.delete)
|
2243 |
+
*
|
2244 |
+
* @param string $fileId
|
2245 |
+
* The ID of the file.
|
2246 |
+
* @param string $commentId
|
2247 |
+
* The ID of the comment.
|
2248 |
+
* @param string $replyId
|
2249 |
+
* The ID of the reply.
|
2250 |
+
* @param array $optParams Optional parameters.
|
2251 |
+
*/
|
2252 |
+
public function delete($fileId, $commentId, $replyId, $optParams = array())
|
2253 |
+
{
|
2254 |
+
$params = array('fileId' => $fileId, 'commentId' => $commentId, 'replyId' => $replyId);
|
2255 |
+
$params = array_merge($params, $optParams);
|
2256 |
+
return $this->call('delete', array($params));
|
2257 |
+
}
|
2258 |
+
/**
|
2259 |
+
* Gets a reply. (replies.get)
|
2260 |
+
*
|
2261 |
+
* @param string $fileId
|
2262 |
+
* The ID of the file.
|
2263 |
+
* @param string $commentId
|
2264 |
+
* The ID of the comment.
|
2265 |
+
* @param string $replyId
|
2266 |
+
* The ID of the reply.
|
2267 |
+
* @param array $optParams Optional parameters.
|
2268 |
+
*
|
2269 |
+
* @opt_param bool includeDeleted
|
2270 |
+
* If set, this will succeed when retrieving a deleted reply.
|
2271 |
+
* @return Google_Service_Drive_CommentReply
|
2272 |
+
*/
|
2273 |
+
public function get($fileId, $commentId, $replyId, $optParams = array())
|
2274 |
+
{
|
2275 |
+
$params = array('fileId' => $fileId, 'commentId' => $commentId, 'replyId' => $replyId);
|
2276 |
+
$params = array_merge($params, $optParams);
|
2277 |
+
return $this->call('get', array($params), "Google_Service_Drive_CommentReply");
|
2278 |
+
}
|
2279 |
+
/**
|
2280 |
+
* Creates a new reply to the given comment. (replies.insert)
|
2281 |
+
*
|
2282 |
+
* @param string $fileId
|
2283 |
+
* The ID of the file.
|
2284 |
+
* @param string $commentId
|
2285 |
+
* The ID of the comment.
|
2286 |
+
* @param Google_CommentReply $postBody
|
2287 |
+
* @param array $optParams Optional parameters.
|
2288 |
+
* @return Google_Service_Drive_CommentReply
|
2289 |
+
*/
|
2290 |
+
public function insert($fileId, $commentId, Google_Service_Drive_CommentReply $postBody, $optParams = array())
|
2291 |
+
{
|
2292 |
+
$params = array('fileId' => $fileId, 'commentId' => $commentId, 'postBody' => $postBody);
|
2293 |
+
$params = array_merge($params, $optParams);
|
2294 |
+
return $this->call('insert', array($params), "Google_Service_Drive_CommentReply");
|
2295 |
+
}
|
2296 |
+
/**
|
2297 |
+
* Lists all of the replies to a comment. (replies.listReplies)
|
2298 |
+
*
|
2299 |
+
* @param string $fileId
|
2300 |
+
* The ID of the file.
|
2301 |
+
* @param string $commentId
|
2302 |
+
* The ID of the comment.
|
2303 |
+
* @param array $optParams Optional parameters.
|
2304 |
+
*
|
2305 |
+
* @opt_param string pageToken
|
2306 |
+
* The continuation token, used to page through large result sets. To get the next page of results,
|
2307 |
+
* set this parameter to the value of "nextPageToken" from the previous response.
|
2308 |
+
* @opt_param bool includeDeleted
|
2309 |
+
* If set, all replies, including deleted replies (with content stripped) will be returned.
|
2310 |
+
* @opt_param int maxResults
|
2311 |
+
* The maximum number of replies to include in the response, used for paging.
|
2312 |
+
* @return Google_Service_Drive_CommentReplyList
|
2313 |
+
*/
|
2314 |
+
public function listReplies($fileId, $commentId, $optParams = array())
|
2315 |
+
{
|
2316 |
+
$params = array('fileId' => $fileId, 'commentId' => $commentId);
|
2317 |
+
$params = array_merge($params, $optParams);
|
2318 |
+
return $this->call('list', array($params), "Google_Service_Drive_CommentReplyList");
|
2319 |
+
}
|
2320 |
+
/**
|
2321 |
+
* Updates an existing reply. This method supports patch semantics.
|
2322 |
+
* (replies.patch)
|
2323 |
+
*
|
2324 |
+
* @param string $fileId
|
2325 |
+
* The ID of the file.
|
2326 |
+
* @param string $commentId
|
2327 |
+
* The ID of the comment.
|
2328 |
+
* @param string $replyId
|
2329 |
+
* The ID of the reply.
|
2330 |
+
* @param Google_CommentReply $postBody
|
2331 |
+
* @param array $optParams Optional parameters.
|
2332 |
+
* @return Google_Service_Drive_CommentReply
|
2333 |
+
*/
|
2334 |
+
public function patch($fileId, $commentId, $replyId, Google_Service_Drive_CommentReply $postBody, $optParams = array())
|
2335 |
+
{
|
2336 |
+
$params = array('fileId' => $fileId, 'commentId' => $commentId, 'replyId' => $replyId, 'postBody' => $postBody);
|
2337 |
+
$params = array_merge($params, $optParams);
|
2338 |
+
return $this->call('patch', array($params), "Google_Service_Drive_CommentReply");
|
2339 |
+
}
|
2340 |
+
/**
|
2341 |
+
* Updates an existing reply. (replies.update)
|
2342 |
+
*
|
2343 |
+
* @param string $fileId
|
2344 |
+
* The ID of the file.
|
2345 |
+
* @param string $commentId
|
2346 |
+
* The ID of the comment.
|
2347 |
+
* @param string $replyId
|
2348 |
+
* The ID of the reply.
|
2349 |
+
* @param Google_CommentReply $postBody
|
2350 |
+
* @param array $optParams Optional parameters.
|
2351 |
+
* @return Google_Service_Drive_CommentReply
|
2352 |
+
*/
|
2353 |
+
public function update($fileId, $commentId, $replyId, Google_Service_Drive_CommentReply $postBody, $optParams = array())
|
2354 |
+
{
|
2355 |
+
$params = array('fileId' => $fileId, 'commentId' => $commentId, 'replyId' => $replyId, 'postBody' => $postBody);
|
2356 |
+
$params = array_merge($params, $optParams);
|
2357 |
+
return $this->call('update', array($params), "Google_Service_Drive_CommentReply");
|
2358 |
+
}
|
2359 |
+
}
|
2360 |
+
|
2361 |
+
/**
|
2362 |
+
* The "revisions" collection of methods.
|
2363 |
+
* Typical usage is:
|
2364 |
+
* <code>
|
2365 |
+
* $driveService = new Google_Service_Drive(...);
|
2366 |
+
* $revisions = $driveService->revisions;
|
2367 |
+
* </code>
|
2368 |
+
*/
|
2369 |
+
class Google_Service_Drive_Revisions_Resource extends Google_Service_Resource
|
2370 |
+
{
|
2371 |
+
|
2372 |
+
/**
|
2373 |
+
* Removes a revision. (revisions.delete)
|
2374 |
+
*
|
2375 |
+
* @param string $fileId
|
2376 |
+
* The ID of the file.
|
2377 |
+
* @param string $revisionId
|
2378 |
+
* The ID of the revision.
|
2379 |
+
* @param array $optParams Optional parameters.
|
2380 |
+
*/
|
2381 |
+
public function delete($fileId, $revisionId, $optParams = array())
|
2382 |
+
{
|
2383 |
+
$params = array('fileId' => $fileId, 'revisionId' => $revisionId);
|
2384 |
+
$params = array_merge($params, $optParams);
|
2385 |
+
return $this->call('delete', array($params));
|
2386 |
+
}
|
2387 |
+
/**
|
2388 |
+
* Gets a specific revision. (revisions.get)
|
2389 |
+
*
|
2390 |
+
* @param string $fileId
|
2391 |
+
* The ID of the file.
|
2392 |
+
* @param string $revisionId
|
2393 |
+
* The ID of the revision.
|
2394 |
+
* @param array $optParams Optional parameters.
|
2395 |
+
* @return Google_Service_Drive_Revision
|
2396 |
+
*/
|
2397 |
+
public function get($fileId, $revisionId, $optParams = array())
|
2398 |
+
{
|
2399 |
+
$params = array('fileId' => $fileId, 'revisionId' => $revisionId);
|
2400 |
+
$params = array_merge($params, $optParams);
|
2401 |
+
return $this->call('get', array($params), "Google_Service_Drive_Revision");
|
2402 |
+
}
|
2403 |
+
/**
|
2404 |
+
* Lists a file's revisions. (revisions.listRevisions)
|
2405 |
+
*
|
2406 |
+
* @param string $fileId
|
2407 |
+
* The ID of the file.
|
2408 |
+
* @param array $optParams Optional parameters.
|
2409 |
+
* @return Google_Service_Drive_RevisionList
|
2410 |
+
*/
|
2411 |
+
public function listRevisions($fileId, $optParams = array())
|
2412 |
+
{
|
2413 |
+
$params = array('fileId' => $fileId);
|
2414 |
+
$params = array_merge($params, $optParams);
|
2415 |
+
return $this->call('list', array($params), "Google_Service_Drive_RevisionList");
|
2416 |
+
}
|
2417 |
+
/**
|
2418 |
+
* Updates a revision. This method supports patch semantics. (revisions.patch)
|
2419 |
+
*
|
2420 |
+
* @param string $fileId
|
2421 |
+
* The ID for the file.
|
2422 |
+
* @param string $revisionId
|
2423 |
+
* The ID for the revision.
|
2424 |
+
* @param Google_Revision $postBody
|
2425 |
+
* @param array $optParams Optional parameters.
|
2426 |
+
* @return Google_Service_Drive_Revision
|
2427 |
+
*/
|
2428 |
+
public function patch($fileId, $revisionId, Google_Service_Drive_Revision $postBody, $optParams = array())
|
2429 |
+
{
|
2430 |
+
$params = array('fileId' => $fileId, 'revisionId' => $revisionId, 'postBody' => $postBody);
|
2431 |
+
$params = array_merge($params, $optParams);
|
2432 |
+
return $this->call('patch', array($params), "Google_Service_Drive_Revision");
|
2433 |
+
}
|
2434 |
+
/**
|
2435 |
+
* Updates a revision. (revisions.update)
|
2436 |
+
*
|
2437 |
+
* @param string $fileId
|
2438 |
+
* The ID for the file.
|
2439 |
+
* @param string $revisionId
|
2440 |
+
* The ID for the revision.
|
2441 |
+
* @param Google_Revision $postBody
|
2442 |
+
* @param array $optParams Optional parameters.
|
2443 |
+
* @return Google_Service_Drive_Revision
|
2444 |
+
*/
|
2445 |
+
public function update($fileId, $revisionId, Google_Service_Drive_Revision $postBody, $optParams = array())
|
2446 |
+
{
|
2447 |
+
$params = array('fileId' => $fileId, 'revisionId' => $revisionId, 'postBody' => $postBody);
|
2448 |
+
$params = array_merge($params, $optParams);
|
2449 |
+
return $this->call('update', array($params), "Google_Service_Drive_Revision");
|
2450 |
+
}
|
2451 |
+
}
|
2452 |
+
|
2453 |
+
|
2454 |
+
|
2455 |
+
|
2456 |
+
class Google_Service_Drive_About extends Google_Collection
|
2457 |
+
{
|
2458 |
+
protected $additionalRoleInfoType = 'Google_Service_Drive_AboutAdditionalRoleInfo';
|
2459 |
+
protected $additionalRoleInfoDataType = 'array';
|
2460 |
+
public $domainSharingPolicy;
|
2461 |
+
public $etag;
|
2462 |
+
protected $exportFormatsType = 'Google_Service_Drive_AboutExportFormats';
|
2463 |
+
protected $exportFormatsDataType = 'array';
|
2464 |
+
protected $featuresType = 'Google_Service_Drive_AboutFeatures';
|
2465 |
+
protected $featuresDataType = 'array';
|
2466 |
+
protected $importFormatsType = 'Google_Service_Drive_AboutImportFormats';
|
2467 |
+
protected $importFormatsDataType = 'array';
|
2468 |
+
public $isCurrentAppInstalled;
|
2469 |
+
public $kind;
|
2470 |
+
public $largestChangeId;
|
2471 |
+
protected $maxUploadSizesType = 'Google_Service_Drive_AboutMaxUploadSizes';
|
2472 |
+
protected $maxUploadSizesDataType = 'array';
|
2473 |
+
public $name;
|
2474 |
+
public $permissionId;
|
2475 |
+
public $quotaBytesTotal;
|
2476 |
+
public $quotaBytesUsed;
|
2477 |
+
public $quotaBytesUsedAggregate;
|
2478 |
+
public $quotaBytesUsedInTrash;
|
2479 |
+
public $remainingChangeIds;
|
2480 |
+
public $rootFolderId;
|
2481 |
+
public $selfLink;
|
2482 |
+
protected $userType = 'Google_Service_Drive_User';
|
2483 |
+
protected $userDataType = '';
|
2484 |
+
|
2485 |
+
public function setAdditionalRoleInfo($additionalRoleInfo)
|
2486 |
+
{
|
2487 |
+
$this->additionalRoleInfo = $additionalRoleInfo;
|
2488 |
+
}
|
2489 |
+
|
2490 |
+
public function getAdditionalRoleInfo()
|
2491 |
+
{
|
2492 |
+
return $this->additionalRoleInfo;
|
2493 |
+
}
|
2494 |
+
|
2495 |
+
public function setDomainSharingPolicy($domainSharingPolicy)
|
2496 |
+
{
|
2497 |
+
$this->domainSharingPolicy = $domainSharingPolicy;
|
2498 |
+
}
|
2499 |
+
|
2500 |
+
public function getDomainSharingPolicy()
|
2501 |
+
{
|
2502 |
+
return $this->domainSharingPolicy;
|
2503 |
+
}
|
2504 |
+
|
2505 |
+
public function setEtag($etag)
|
2506 |
+
{
|
2507 |
+
$this->etag = $etag;
|
2508 |
+
}
|
2509 |
+
|
2510 |
+
public function getEtag()
|
2511 |
+
{
|
2512 |
+
return $this->etag;
|
2513 |
+
}
|
2514 |
+
|
2515 |
+
public function setExportFormats($exportFormats)
|
2516 |
+
{
|
2517 |
+
$this->exportFormats = $exportFormats;
|
2518 |
+
}
|
2519 |
+
|
2520 |
+
public function getExportFormats()
|
2521 |
+
{
|
2522 |
+
return $this->exportFormats;
|
2523 |
+
}
|
2524 |
+
|
2525 |
+
public function setFeatures($features)
|
2526 |
+
{
|
2527 |
+
$this->features = $features;
|
2528 |
+
}
|
2529 |
+
|
2530 |
+
public function getFeatures()
|
2531 |
+
{
|
2532 |
+
return $this->features;
|
2533 |
+
}
|
2534 |
+
|
2535 |
+
public function setImportFormats($importFormats)
|
2536 |
+
{
|
2537 |
+
$this->importFormats = $importFormats;
|
2538 |
+
}
|
2539 |
+
|
2540 |
+
public function getImportFormats()
|
2541 |
+
{
|
2542 |
+
return $this->importFormats;
|
2543 |
+
}
|
2544 |
+
|
2545 |
+
public function setIsCurrentAppInstalled($isCurrentAppInstalled)
|
2546 |
+
{
|
2547 |
+
$this->isCurrentAppInstalled = $isCurrentAppInstalled;
|
2548 |
+
}
|
2549 |
+
|
2550 |
+
public function getIsCurrentAppInstalled()
|
2551 |
+
{
|
2552 |
+
return $this->isCurrentAppInstalled;
|
2553 |
+
}
|
2554 |
+
|
2555 |
+
public function setKind($kind)
|
2556 |
+
{
|
2557 |
+
$this->kind = $kind;
|
2558 |
+
}
|
2559 |
+
|
2560 |
+
public function getKind()
|
2561 |
+
{
|
2562 |
+
return $this->kind;
|
2563 |
+
}
|
2564 |
+
|
2565 |
+
public function setLargestChangeId($largestChangeId)
|
2566 |
+
{
|
2567 |
+
$this->largestChangeId = $largestChangeId;
|
2568 |
+
}
|
2569 |
+
|
2570 |
+
public function getLargestChangeId()
|
2571 |
+
{
|
2572 |
+
return $this->largestChangeId;
|
2573 |
+
}
|
2574 |
+
|
2575 |
+
public function setMaxUploadSizes($maxUploadSizes)
|
2576 |
+
{
|
2577 |
+
$this->maxUploadSizes = $maxUploadSizes;
|
2578 |
+
}
|
2579 |
+
|
2580 |
+
public function getMaxUploadSizes()
|
2581 |
+
{
|
2582 |
+
return $this->maxUploadSizes;
|
2583 |
+
}
|
2584 |
+
|
2585 |
+
public function setName($name)
|
2586 |
+
{
|
2587 |
+
$this->name = $name;
|
2588 |
+
}
|
2589 |
+
|
2590 |
+
public function getName()
|
2591 |
+
{
|
2592 |
+
return $this->name;
|
2593 |
+
}
|
2594 |
+
|
2595 |
+
public function setPermissionId($permissionId)
|
2596 |
+
{
|
2597 |
+
$this->permissionId = $permissionId;
|
2598 |
+
}
|
2599 |
+
|
2600 |
+
public function getPermissionId()
|
2601 |
+
{
|
2602 |
+
return $this->permissionId;
|
2603 |
+
}
|
2604 |
+
|
2605 |
+
public function setQuotaBytesTotal($quotaBytesTotal)
|
2606 |
+
{
|
2607 |
+
$this->quotaBytesTotal = $quotaBytesTotal;
|
2608 |
+
}
|
2609 |
+
|
2610 |
+
public function getQuotaBytesTotal()
|
2611 |
+
{
|
2612 |
+
return $this->quotaBytesTotal;
|
2613 |
+
}
|
2614 |
+
|
2615 |
+
public function setQuotaBytesUsed($quotaBytesUsed)
|
2616 |
+
{
|
2617 |
+
$this->quotaBytesUsed = $quotaBytesUsed;
|
2618 |
+
}
|
2619 |
+
|
2620 |
+
public function getQuotaBytesUsed()
|
2621 |
+
{
|
2622 |
+
return $this->quotaBytesUsed;
|
2623 |
+
}
|
2624 |
+
|
2625 |
+
public function setQuotaBytesUsedAggregate($quotaBytesUsedAggregate)
|
2626 |
+
{
|
2627 |
+
$this->quotaBytesUsedAggregate = $quotaBytesUsedAggregate;
|
2628 |
+
}
|
2629 |
+
|
2630 |
+
public function getQuotaBytesUsedAggregate()
|
2631 |
+
{
|
2632 |
+
return $this->quotaBytesUsedAggregate;
|
2633 |
+
}
|
2634 |
+
|
2635 |
+
public function setQuotaBytesUsedInTrash($quotaBytesUsedInTrash)
|
2636 |
+
{
|
2637 |
+
$this->quotaBytesUsedInTrash = $quotaBytesUsedInTrash;
|
2638 |
+
}
|
2639 |
+
|
2640 |
+
public function getQuotaBytesUsedInTrash()
|
2641 |
+
{
|
2642 |
+
return $this->quotaBytesUsedInTrash;
|
2643 |
+
}
|
2644 |
+
|
2645 |
+
public function setRemainingChangeIds($remainingChangeIds)
|
2646 |
+
{
|
2647 |
+
$this->remainingChangeIds = $remainingChangeIds;
|
2648 |
+
}
|
2649 |
+
|
2650 |
+
public function getRemainingChangeIds()
|
2651 |
+
{
|
2652 |
+
return $this->remainingChangeIds;
|
2653 |
+
}
|
2654 |
+
|
2655 |
+
public function setRootFolderId($rootFolderId)
|
2656 |
+
{
|
2657 |
+
$this->rootFolderId = $rootFolderId;
|
2658 |
+
}
|
2659 |
+
|
2660 |
+
public function getRootFolderId()
|
2661 |
+
{
|
2662 |
+
return $this->rootFolderId;
|
2663 |
+
}
|
2664 |
+
|
2665 |
+
public function setSelfLink($selfLink)
|
2666 |
+
{
|
2667 |
+
$this->selfLink = $selfLink;
|
2668 |
+
}
|
2669 |
+
|
2670 |
+
public function getSelfLink()
|
2671 |
+
{
|
2672 |
+
return $this->selfLink;
|
2673 |
+
}
|
2674 |
+
|
2675 |
+
public function setUser(Google_Service_Drive_User $user)
|
2676 |
+
{
|
2677 |
+
$this->user = $user;
|
2678 |
+
}
|
2679 |
+
|
2680 |
+
public function getUser()
|
2681 |
+
{
|
2682 |
+
return $this->user;
|
2683 |
+
}
|
2684 |
+
}
|
2685 |
+
|
2686 |
+
class Google_Service_Drive_AboutAdditionalRoleInfo extends Google_Collection
|
2687 |
+
{
|
2688 |
+
protected $roleSetsType = 'Google_Service_Drive_AboutAdditionalRoleInfoRoleSets';
|
2689 |
+
protected $roleSetsDataType = 'array';
|
2690 |
+
public $type;
|
2691 |
+
|
2692 |
+
public function setRoleSets($roleSets)
|
2693 |
+
{
|
2694 |
+
$this->roleSets = $roleSets;
|
2695 |
+
}
|
2696 |
+
|
2697 |
+
public function getRoleSets()
|
2698 |
+
{
|
2699 |
+
return $this->roleSets;
|
2700 |
+
}
|
2701 |
+
|
2702 |
+
public function setType($type)
|
2703 |
+
{
|
2704 |
+
$this->type = $type;
|
2705 |
+
}
|
2706 |
+
|
2707 |
+
public function getType()
|
2708 |
+
{
|
2709 |
+
return $this->type;
|
2710 |
+
}
|
2711 |
+
}
|
2712 |
+
|
2713 |
+
class Google_Service_Drive_AboutAdditionalRoleInfoRoleSets extends Google_Collection
|
2714 |
+
{
|
2715 |
+
public $additionalRoles;
|
2716 |
+
public $primaryRole;
|
2717 |
+
|
2718 |
+
public function setAdditionalRoles($additionalRoles)
|
2719 |
+
{
|
2720 |
+
$this->additionalRoles = $additionalRoles;
|
2721 |
+
}
|
2722 |
+
|
2723 |
+
public function getAdditionalRoles()
|
2724 |
+
{
|
2725 |
+
return $this->additionalRoles;
|
2726 |
+
}
|
2727 |
+
|
2728 |
+
public function setPrimaryRole($primaryRole)
|
2729 |
+
{
|
2730 |
+
$this->primaryRole = $primaryRole;
|
2731 |
+
}
|
2732 |
+
|
2733 |
+
public function getPrimaryRole()
|
2734 |
+
{
|
2735 |
+
return $this->primaryRole;
|
2736 |
+
}
|
2737 |
+
}
|
2738 |
+
|
2739 |
+
class Google_Service_Drive_AboutExportFormats extends Google_Collection
|
2740 |
+
{
|
2741 |
+
public $source;
|
2742 |
+
public $targets;
|
2743 |
+
|
2744 |
+
public function setSource($source)
|
2745 |
+
{
|
2746 |
+
$this->source = $source;
|
2747 |
+
}
|
2748 |
+
|
2749 |
+
public function getSource()
|
2750 |
+
{
|
2751 |
+
return $this->source;
|
2752 |
+
}
|
2753 |
+
|
2754 |
+
public function setTargets($targets)
|
2755 |
+
{
|
2756 |
+
$this->targets = $targets;
|
2757 |
+
}
|
2758 |
+
|
2759 |
+
public function getTargets()
|
2760 |
+
{
|
2761 |
+
return $this->targets;
|
2762 |
+
}
|
2763 |
+
}
|
2764 |
+
|
2765 |
+
class Google_Service_Drive_AboutFeatures extends Google_Model
|
2766 |
+
{
|
2767 |
+
public $featureName;
|
2768 |
+
public $featureRate;
|
2769 |
+
|
2770 |
+
public function setFeatureName($featureName)
|
2771 |
+
{
|
2772 |
+
$this->featureName = $featureName;
|
2773 |
+
}
|
2774 |
+
|
2775 |
+
public function getFeatureName()
|
2776 |
+
{
|
2777 |
+
return $this->featureName;
|
2778 |
+
}
|
2779 |
+
|
2780 |
+
public function setFeatureRate($featureRate)
|
2781 |
+
{
|
2782 |
+
$this->featureRate = $featureRate;
|
2783 |
+
}
|
2784 |
+
|
2785 |
+
public function getFeatureRate()
|
2786 |
+
{
|
2787 |
+
return $this->featureRate;
|
2788 |
+
}
|
2789 |
+
}
|
2790 |
+
|
2791 |
+
class Google_Service_Drive_AboutImportFormats extends Google_Collection
|
2792 |
+
{
|
2793 |
+
public $source;
|
2794 |
+
public $targets;
|
2795 |
+
|
2796 |
+
public function setSource($source)
|
2797 |
+
{
|
2798 |
+
$this->source = $source;
|
2799 |
+
}
|
2800 |
+
|
2801 |
+
public function getSource()
|
2802 |
+
{
|
2803 |
+
return $this->source;
|
2804 |
+
}
|
2805 |
+
|
2806 |
+
public function setTargets($targets)
|
2807 |
+
{
|
2808 |
+
$this->targets = $targets;
|
2809 |
+
}
|
2810 |
+
|
2811 |
+
public function getTargets()
|
2812 |
+
{
|
2813 |
+
return $this->targets;
|
2814 |
+
}
|
2815 |
+
}
|
2816 |
+
|
2817 |
+
class Google_Service_Drive_AboutMaxUploadSizes extends Google_Model
|
2818 |
+
{
|
2819 |
+
public $size;
|
2820 |
+
public $type;
|
2821 |
+
|
2822 |
+
public function setSize($size)
|
2823 |
+
{
|
2824 |
+
$this->size = $size;
|
2825 |
+
}
|
2826 |
+
|
2827 |
+
public function getSize()
|
2828 |
+
{
|
2829 |
+
return $this->size;
|
2830 |
+
}
|
2831 |
+
|
2832 |
+
public function setType($type)
|
2833 |
+
{
|
2834 |
+
$this->type = $type;
|
2835 |
+
}
|
2836 |
+
|
2837 |
+
public function getType()
|
2838 |
+
{
|
2839 |
+
return $this->type;
|
2840 |
+
}
|
2841 |
+
}
|
2842 |
+
|
2843 |
+
class Google_Service_Drive_App extends Google_Collection
|
2844 |
+
{
|
2845 |
+
public $authorized;
|
2846 |
+
public $createInFolderTemplate;
|
2847 |
+
public $createUrl;
|
2848 |
+
protected $iconsType = 'Google_Service_Drive_AppIcons';
|
2849 |
+
protected $iconsDataType = 'array';
|
2850 |
+
public $id;
|
2851 |
+
public $installed;
|
2852 |
+
public $kind;
|
2853 |
+
public $longDescription;
|
2854 |
+
public $name;
|
2855 |
+
public $objectType;
|
2856 |
+
public $openUrlTemplate;
|
2857 |
+
public $primaryFileExtensions;
|
2858 |
+
public $primaryMimeTypes;
|
2859 |
+
public $productId;
|
2860 |
+
public $productUrl;
|
2861 |
+
public $secondaryFileExtensions;
|
2862 |
+
public $secondaryMimeTypes;
|
2863 |
+
public $shortDescription;
|
2864 |
+
public $supportsCreate;
|
2865 |
+
public $supportsImport;
|
2866 |
+
public $supportsMultiOpen;
|
2867 |
+
public $useByDefault;
|
2868 |
+
|
2869 |
+
public function setAuthorized($authorized)
|
2870 |
+
{
|
2871 |
+
$this->authorized = $authorized;
|
2872 |
+
}
|
2873 |
+
|
2874 |
+
public function getAuthorized()
|
2875 |
+
{
|
2876 |
+
return $this->authorized;
|
2877 |
+
}
|
2878 |
+
|
2879 |
+
public function setCreateInFolderTemplate($createInFolderTemplate)
|
2880 |
+
{
|
2881 |
+
$this->createInFolderTemplate = $createInFolderTemplate;
|
2882 |
+
}
|
2883 |
+
|
2884 |
+
public function getCreateInFolderTemplate()
|
2885 |
+
{
|
2886 |
+
return $this->createInFolderTemplate;
|
2887 |
+
}
|
2888 |
+
|
2889 |
+
public function setCreateUrl($createUrl)
|
2890 |
+
{
|
2891 |
+
$this->createUrl = $createUrl;
|
2892 |
+
}
|
2893 |
+
|
2894 |
+
public function getCreateUrl()
|
2895 |
+
{
|
2896 |
+
return $this->createUrl;
|
2897 |
+
}
|
2898 |
+
|
2899 |
+
public function setIcons($icons)
|
2900 |
+
{
|
2901 |
+
$this->icons = $icons;
|
2902 |
+
}
|
2903 |
+
|
2904 |
+
public function getIcons()
|
2905 |
+
{
|
2906 |
+
return $this->icons;
|
2907 |
+
}
|
2908 |
+
|
2909 |
+
public function setId($id)
|
2910 |
+
{
|
2911 |
+
$this->id = $id;
|
2912 |
+
}
|
2913 |
+
|
2914 |
+
public function getId()
|
2915 |
+
{
|
2916 |
+
return $this->id;
|
2917 |
+
}
|
2918 |
+
|
2919 |
+
public function setInstalled($installed)
|
2920 |
+
{
|
2921 |
+
$this->installed = $installed;
|
2922 |
+
}
|
2923 |
+
|
2924 |
+
public function getInstalled()
|
2925 |
+
{
|
2926 |
+
return $this->installed;
|
2927 |
+
}
|
2928 |
+
|
2929 |
+
public function setKind($kind)
|
2930 |
+
{
|
2931 |
+
$this->kind = $kind;
|
2932 |
+
}
|
2933 |
+
|
2934 |
+
public function getKind()
|
2935 |
+
{
|
2936 |
+
return $this->kind;
|
2937 |
+
}
|
2938 |
+
|
2939 |
+
public function setLongDescription($longDescription)
|
2940 |
+
{
|
2941 |
+
$this->longDescription = $longDescription;
|
2942 |
+
}
|
2943 |
+
|
2944 |
+
public function getLongDescription()
|
2945 |
+
{
|
2946 |
+
return $this->longDescription;
|
2947 |
+
}
|
2948 |
+
|
2949 |
+
public function setName($name)
|
2950 |
+
{
|
2951 |
+
$this->name = $name;
|
2952 |
+
}
|
2953 |
+
|
2954 |
+
public function getName()
|
2955 |
+
{
|
2956 |
+
return $this->name;
|
2957 |
+
}
|
2958 |
+
|
2959 |
+
public function setObjectType($objectType)
|
2960 |
+
{
|
2961 |
+
$this->objectType = $objectType;
|
2962 |
+
}
|
2963 |
+
|
2964 |
+
public function getObjectType()
|
2965 |
+
{
|
2966 |
+
return $this->objectType;
|
2967 |
+
}
|
2968 |
+
|
2969 |
+
public function setOpenUrlTemplate($openUrlTemplate)
|
2970 |
+
{
|
2971 |
+
$this->openUrlTemplate = $openUrlTemplate;
|
2972 |
+
}
|
2973 |
+
|
2974 |
+
public function getOpenUrlTemplate()
|
2975 |
+
{
|
2976 |
+
return $this->openUrlTemplate;
|
2977 |
+
}
|
2978 |
+
|
2979 |
+
public function setPrimaryFileExtensions($primaryFileExtensions)
|
2980 |
+
{
|
2981 |
+
$this->primaryFileExtensions = $primaryFileExtensions;
|
2982 |
+
}
|
2983 |
+
|
2984 |
+
public function getPrimaryFileExtensions()
|
2985 |
+
{
|
2986 |
+
return $this->primaryFileExtensions;
|
2987 |
+
}
|
2988 |
+
|
2989 |
+
public function setPrimaryMimeTypes($primaryMimeTypes)
|
2990 |
+
{
|
2991 |
+
$this->primaryMimeTypes = $primaryMimeTypes;
|
2992 |
+
}
|
2993 |
+
|
2994 |
+
public function getPrimaryMimeTypes()
|
2995 |
+
{
|
2996 |
+
return $this->primaryMimeTypes;
|
2997 |
+
}
|
2998 |
+
|
2999 |
+
public function setProductId($productId)
|
3000 |
+
{
|
3001 |
+
$this->productId = $productId;
|
3002 |
+
}
|
3003 |
+
|
3004 |
+
public function getProductId()
|
3005 |
+
{
|
3006 |
+
return $this->productId;
|
3007 |
+
}
|
3008 |
+
|
3009 |
+
public function setProductUrl($productUrl)
|
3010 |
+
{
|
3011 |
+
$this->productUrl = $productUrl;
|
3012 |
+
}
|
3013 |
+
|
3014 |
+
public function getProductUrl()
|
3015 |
+
{
|
3016 |
+
return $this->productUrl;
|
3017 |
+
}
|
3018 |
+
|
3019 |
+
public function setSecondaryFileExtensions($secondaryFileExtensions)
|
3020 |
+
{
|
3021 |
+
$this->secondaryFileExtensions = $secondaryFileExtensions;
|
3022 |
+
}
|
3023 |
+
|
3024 |
+
public function getSecondaryFileExtensions()
|
3025 |
+
{
|
3026 |
+
return $this->secondaryFileExtensions;
|
3027 |
+
}
|
3028 |
+
|
3029 |
+
public function setSecondaryMimeTypes($secondaryMimeTypes)
|
3030 |
+
{
|
3031 |
+
$this->secondaryMimeTypes = $secondaryMimeTypes;
|
3032 |
+
}
|
3033 |
+
|
3034 |
+
public function getSecondaryMimeTypes()
|
3035 |
+
{
|
3036 |
+
return $this->secondaryMimeTypes;
|
3037 |
+
}
|
3038 |
+
|
3039 |
+
public function setShortDescription($shortDescription)
|
3040 |
+
{
|
3041 |
+
$this->shortDescription = $shortDescription;
|
3042 |
+
}
|
3043 |
+
|
3044 |
+
public function getShortDescription()
|
3045 |
+
{
|
3046 |
+
return $this->shortDescription;
|
3047 |
+
}
|
3048 |
+
|
3049 |
+
public function setSupportsCreate($supportsCreate)
|
3050 |
+
{
|
3051 |
+
$this->supportsCreate = $supportsCreate;
|
3052 |
+
}
|
3053 |
+
|
3054 |
+
public function getSupportsCreate()
|
3055 |
+
{
|
3056 |
+
return $this->supportsCreate;
|
3057 |
+
}
|
3058 |
+
|
3059 |
+
public function setSupportsImport($supportsImport)
|
3060 |
+
{
|
3061 |
+
$this->supportsImport = $supportsImport;
|
3062 |
+
}
|
3063 |
+
|
3064 |
+
public function getSupportsImport()
|
3065 |
+
{
|
3066 |
+
return $this->supportsImport;
|
3067 |
+
}
|
3068 |
+
|
3069 |
+
public function setSupportsMultiOpen($supportsMultiOpen)
|
3070 |
+
{
|
3071 |
+
$this->supportsMultiOpen = $supportsMultiOpen;
|
3072 |
+
}
|
3073 |
+
|
3074 |
+
public function getSupportsMultiOpen()
|
3075 |
+
{
|
3076 |
+
return $this->supportsMultiOpen;
|
3077 |
+
}
|
3078 |
+
|
3079 |
+
public function setUseByDefault($useByDefault)
|
3080 |
+
{
|
3081 |
+
$this->useByDefault = $useByDefault;
|
3082 |
+
}
|
3083 |
+
|
3084 |
+
public function getUseByDefault()
|
3085 |
+
{
|
3086 |
+
return $this->useByDefault;
|
3087 |
+
}
|
3088 |
+
}
|
3089 |
+
|
3090 |
+
class Google_Service_Drive_AppIcons extends Google_Model
|
3091 |
+
{
|
3092 |
+
public $category;
|
3093 |
+
public $iconUrl;
|
3094 |
+
public $size;
|
3095 |
+
|
3096 |
+
public function setCategory($category)
|
3097 |
+
{
|
3098 |
+
$this->category = $category;
|
3099 |
+
}
|
3100 |
+
|
3101 |
+
public function getCategory()
|
3102 |
+
{
|
3103 |
+
return $this->category;
|
3104 |
+
}
|
3105 |
+
|
3106 |
+
public function setIconUrl($iconUrl)
|
3107 |
+
{
|
3108 |
+
$this->iconUrl = $iconUrl;
|
3109 |
+
}
|
3110 |
+
|
3111 |
+
public function getIconUrl()
|
3112 |
+
{
|
3113 |
+
return $this->iconUrl;
|
3114 |
+
}
|
3115 |
+
|
3116 |
+
public function setSize($size)
|
3117 |
+
{
|
3118 |
+
$this->size = $size;
|
3119 |
+
}
|
3120 |
+
|
3121 |
+
public function getSize()
|
3122 |
+
{
|
3123 |
+
return $this->size;
|
3124 |
+
}
|
3125 |
+
}
|
3126 |
+
|
3127 |
+
class Google_Service_Drive_AppList extends Google_Collection
|
3128 |
+
{
|
3129 |
+
public $etag;
|
3130 |
+
protected $itemsType = 'Google_Service_Drive_App';
|
3131 |
+
protected $itemsDataType = 'array';
|
3132 |
+
public $kind;
|
3133 |
+
public $selfLink;
|
3134 |
+
|
3135 |
+
public function setEtag($etag)
|
3136 |
+
{
|
3137 |
+
$this->etag = $etag;
|
3138 |
+
}
|
3139 |
+
|
3140 |
+
public function getEtag()
|
3141 |
+
{
|
3142 |
+
return $this->etag;
|
3143 |
+
}
|
3144 |
+
|
3145 |
+
public function setItems($items)
|
3146 |
+
{
|
3147 |
+
$this->items = $items;
|
3148 |
+
}
|
3149 |
+
|
3150 |
+
public function getItems()
|
3151 |
+
{
|
3152 |
+
return $this->items;
|
3153 |
+
}
|
3154 |
+
|
3155 |
+
public function setKind($kind)
|
3156 |
+
{
|
3157 |
+
$this->kind = $kind;
|
3158 |
+
}
|
3159 |
+
|
3160 |
+
public function getKind()
|
3161 |
+
{
|
3162 |
+
return $this->kind;
|
3163 |
+
}
|
3164 |
+
|
3165 |
+
public function setSelfLink($selfLink)
|
3166 |
+
{
|
3167 |
+
$this->selfLink = $selfLink;
|
3168 |
+
}
|
3169 |
+
|
3170 |
+
public function getSelfLink()
|
3171 |
+
{
|
3172 |
+
return $this->selfLink;
|
3173 |
+
}
|
3174 |
+
}
|
3175 |
+
|
3176 |
+
class Google_Service_Drive_Change extends Google_Model
|
3177 |
+
{
|
3178 |
+
public $deleted;
|
3179 |
+
protected $fileType = 'Google_Service_Drive_DriveFile';
|
3180 |
+
protected $fileDataType = '';
|
3181 |
+
public $fileId;
|
3182 |
+
public $id;
|
3183 |
+
public $kind;
|
3184 |
+
public $modificationDate;
|
3185 |
+
public $selfLink;
|
3186 |
+
|
3187 |
+
public function setDeleted($deleted)
|
3188 |
+
{
|
3189 |
+
$this->deleted = $deleted;
|
3190 |
+
}
|
3191 |
+
|
3192 |
+
public function getDeleted()
|
3193 |
+
{
|
3194 |
+
return $this->deleted;
|
3195 |
+
}
|
3196 |
+
|
3197 |
+
public function setFile(Google_Service_Drive_DriveFile $file)
|
3198 |
+
{
|
3199 |
+
$this->file = $file;
|
3200 |
+
}
|
3201 |
+
|
3202 |
+
public function getFile()
|
3203 |
+
{
|
3204 |
+
return $this->file;
|
3205 |
+
}
|
3206 |
+
|
3207 |
+
public function setFileId($fileId)
|
3208 |
+
{
|
3209 |
+
$this->fileId = $fileId;
|
3210 |
+
}
|
3211 |
+
|
3212 |
+
public function getFileId()
|
3213 |
+
{
|
3214 |
+
return $this->fileId;
|
3215 |
+
}
|
3216 |
+
|
3217 |
+
public function setId($id)
|
3218 |
+
{
|
3219 |
+
$this->id = $id;
|
3220 |
+
}
|
3221 |
+
|
3222 |
+
public function getId()
|
3223 |
+
{
|
3224 |
+
return $this->id;
|
3225 |
+
}
|
3226 |
+
|
3227 |
+
public function setKind($kind)
|
3228 |
+
{
|
3229 |
+
$this->kind = $kind;
|
3230 |
+
}
|
3231 |
+
|
3232 |
+
public function getKind()
|
3233 |
+
{
|
3234 |
+
return $this->kind;
|
3235 |
+
}
|
3236 |
+
|
3237 |
+
public function setModificationDate($modificationDate)
|
3238 |
+
{
|
3239 |
+
$this->modificationDate = $modificationDate;
|
3240 |
+
}
|
3241 |
+
|
3242 |
+
public function getModificationDate()
|
3243 |
+
{
|
3244 |
+
return $this->modificationDate;
|
3245 |
+
}
|
3246 |
+
|
3247 |
+
public function setSelfLink($selfLink)
|
3248 |
+
{
|
3249 |
+
$this->selfLink = $selfLink;
|
3250 |
+
}
|
3251 |
+
|
3252 |
+
public function getSelfLink()
|
3253 |
+
{
|
3254 |
+
return $this->selfLink;
|
3255 |
+
}
|
3256 |
+
}
|
3257 |
+
|
3258 |
+
class Google_Service_Drive_ChangeList extends Google_Collection
|
3259 |
+
{
|
3260 |
+
public $etag;
|
3261 |
+
protected $itemsType = 'Google_Service_Drive_Change';
|
3262 |
+
protected $itemsDataType = 'array';
|
3263 |
+
public $kind;
|
3264 |
+
public $largestChangeId;
|
3265 |
+
public $nextLink;
|
3266 |
+
public $nextPageToken;
|
3267 |
+
public $selfLink;
|
3268 |
+
|
3269 |
+
public function setEtag($etag)
|
3270 |
+
{
|
3271 |
+
$this->etag = $etag;
|
3272 |
+
}
|
3273 |
+
|
3274 |
+
public function getEtag()
|
3275 |
+
{
|
3276 |
+
return $this->etag;
|
3277 |
+
}
|
3278 |
+
|
3279 |
+
public function setItems($items)
|
3280 |
+
{
|
3281 |
+
$this->items = $items;
|
3282 |
+
}
|
3283 |
+
|
3284 |
+
public function getItems()
|
3285 |
+
{
|
3286 |
+
return $this->items;
|
3287 |
+
}
|
3288 |
+
|
3289 |
+
public function setKind($kind)
|
3290 |
+
{
|
3291 |
+
$this->kind = $kind;
|
3292 |
+
}
|
3293 |
+
|
3294 |
+
public function getKind()
|
3295 |
+
{
|
3296 |
+
return $this->kind;
|
3297 |
+
}
|
3298 |
+
|
3299 |
+
public function setLargestChangeId($largestChangeId)
|
3300 |
+
{
|
3301 |
+
$this->largestChangeId = $largestChangeId;
|
3302 |
+
}
|
3303 |
+
|
3304 |
+
public function getLargestChangeId()
|
3305 |
+
{
|
3306 |
+
return $this->largestChangeId;
|
3307 |
+
}
|
3308 |
+
|
3309 |
+
public function setNextLink($nextLink)
|
3310 |
+
{
|
3311 |
+
$this->nextLink = $nextLink;
|
3312 |
+
}
|
3313 |
+
|
3314 |
+
public function getNextLink()
|
3315 |
+
{
|
3316 |
+
return $this->nextLink;
|
3317 |
+
}
|
3318 |
+
|
3319 |
+
public function setNextPageToken($nextPageToken)
|
3320 |
+
{
|
3321 |
+
$this->nextPageToken = $nextPageToken;
|
3322 |
+
}
|
3323 |
+
|
3324 |
+
public function getNextPageToken()
|
3325 |
+
{
|
3326 |
+
return $this->nextPageToken;
|
3327 |
+
}
|
3328 |
+
|
3329 |
+
public function setSelfLink($selfLink)
|
3330 |
+
{
|
3331 |
+
$this->selfLink = $selfLink;
|
3332 |
+
}
|
3333 |
+
|
3334 |
+
public function getSelfLink()
|
3335 |
+
{
|
3336 |
+
return $this->selfLink;
|
3337 |
+
}
|
3338 |
+
}
|
3339 |
+
|
3340 |
+
class Google_Service_Drive_Channel extends Google_Model
|
3341 |
+
{
|
3342 |
+
public $address;
|
3343 |
+
public $expiration;
|
3344 |
+
public $id;
|
3345 |
+
public $kind;
|
3346 |
+
public $params;
|
3347 |
+
public $payload;
|
3348 |
+
public $resourceId;
|
3349 |
+
public $resourceUri;
|
3350 |
+
public $token;
|
3351 |
+
public $type;
|
3352 |
+
|
3353 |
+
public function setAddress($address)
|
3354 |
+
{
|
3355 |
+
$this->address = $address;
|
3356 |
+
}
|
3357 |
+
|
3358 |
+
public function getAddress()
|
3359 |
+
{
|
3360 |
+
return $this->address;
|
3361 |
+
}
|
3362 |
+
|
3363 |
+
public function setExpiration($expiration)
|
3364 |
+
{
|
3365 |
+
$this->expiration = $expiration;
|
3366 |
+
}
|
3367 |
+
|
3368 |
+
public function getExpiration()
|
3369 |
+
{
|
3370 |
+
return $this->expiration;
|
3371 |
+
}
|
3372 |
+
|
3373 |
+
public function setId($id)
|
3374 |
+
{
|
3375 |
+
$this->id = $id;
|
3376 |
+
}
|
3377 |
+
|
3378 |
+
public function getId()
|
3379 |
+
{
|
3380 |
+
return $this->id;
|
3381 |
+
}
|
3382 |
+
|
3383 |
+
public function setKind($kind)
|
3384 |
+
{
|
3385 |
+
$this->kind = $kind;
|
3386 |
+
}
|
3387 |
+
|
3388 |
+
public function getKind()
|
3389 |
+
{
|
3390 |
+
return $this->kind;
|
3391 |
+
}
|
3392 |
+
|
3393 |
+
public function setParams($params)
|
3394 |
+
{
|
3395 |
+
$this->params = $params;
|
3396 |
+
}
|
3397 |
+
|
3398 |
+
public function getParams()
|
3399 |
+
{
|
3400 |
+
return $this->params;
|
3401 |
+
}
|
3402 |
+
|
3403 |
+
public function setPayload($payload)
|
3404 |
+
{
|
3405 |
+
$this->payload = $payload;
|
3406 |
+
}
|
3407 |
+
|
3408 |
+
public function getPayload()
|
3409 |
+
{
|
3410 |
+
return $this->payload;
|
3411 |
+
}
|
3412 |
+
|
3413 |
+
public function setResourceId($resourceId)
|
3414 |
+
{
|
3415 |
+
$this->resourceId = $resourceId;
|
3416 |
+
}
|
3417 |
+
|
3418 |
+
public function getResourceId()
|
3419 |
+
{
|
3420 |
+
return $this->resourceId;
|
3421 |
+
}
|
3422 |
+
|
3423 |
+
public function setResourceUri($resourceUri)
|
3424 |
+
{
|
3425 |
+
$this->resourceUri = $resourceUri;
|
3426 |
+
}
|
3427 |
+
|
3428 |
+
public function getResourceUri()
|
3429 |
+
{
|
3430 |
+
return $this->resourceUri;
|
3431 |
+
}
|
3432 |
+
|
3433 |
+
public function setToken($token)
|
3434 |
+
{
|
3435 |
+
$this->token = $token;
|
3436 |
+
}
|
3437 |
+
|
3438 |
+
public function getToken()
|
3439 |
+
{
|
3440 |
+
return $this->token;
|
3441 |
+
}
|
3442 |
+
|
3443 |
+
public function setType($type)
|
3444 |
+
{
|
3445 |
+
$this->type = $type;
|
3446 |
+
}
|
3447 |
+
|
3448 |
+
public function getType()
|
3449 |
+
{
|
3450 |
+
return $this->type;
|
3451 |
+
}
|
3452 |
+
}
|
3453 |
+
|
3454 |
+
class Google_Service_Drive_ChildList extends Google_Collection
|
3455 |
+
{
|
3456 |
+
public $etag;
|
3457 |
+
protected $itemsType = 'Google_Service_Drive_ChildReference';
|
3458 |
+
protected $itemsDataType = 'array';
|
3459 |
+
public $kind;
|
3460 |
+
public $nextLink;
|
3461 |
+
public $nextPageToken;
|
3462 |
+
public $selfLink;
|
3463 |
+
|
3464 |
+
public function setEtag($etag)
|
3465 |
+
{
|
3466 |
+
$this->etag = $etag;
|
3467 |
+
}
|
3468 |
+
|
3469 |
+
public function getEtag()
|
3470 |
+
{
|
3471 |
+
return $this->etag;
|
3472 |
+
}
|
3473 |
+
|
3474 |
+
public function setItems($items)
|
3475 |
+
{
|
3476 |
+
$this->items = $items;
|
3477 |
+
}
|
3478 |
+
|
3479 |
+
public function getItems()
|
3480 |
+
{
|
3481 |
+
return $this->items;
|
3482 |
+
}
|
3483 |
+
|
3484 |
+
public function setKind($kind)
|
3485 |
+
{
|
3486 |
+
$this->kind = $kind;
|
3487 |
+
}
|
3488 |
+
|
3489 |
+
public function getKind()
|
3490 |
+
{
|
3491 |
+
return $this->kind;
|
3492 |
+
}
|
3493 |
+
|
3494 |
+
public function setNextLink($nextLink)
|
3495 |
+
{
|
3496 |
+
$this->nextLink = $nextLink;
|
3497 |
+
}
|
3498 |
+
|
3499 |
+
public function getNextLink()
|
3500 |
+
{
|
3501 |
+
return $this->nextLink;
|
3502 |
+
}
|
3503 |
+
|
3504 |
+
public function setNextPageToken($nextPageToken)
|
3505 |
+
{
|
3506 |
+
$this->nextPageToken = $nextPageToken;
|
3507 |
+
}
|
3508 |
+
|
3509 |
+
public function getNextPageToken()
|
3510 |
+
{
|
3511 |
+
return $this->nextPageToken;
|
3512 |
+
}
|
3513 |
+
|
3514 |
+
public function setSelfLink($selfLink)
|
3515 |
+
{
|
3516 |
+
$this->selfLink = $selfLink;
|
3517 |
+
}
|
3518 |
+
|
3519 |
+
public function getSelfLink()
|
3520 |
+
{
|
3521 |
+
return $this->selfLink;
|
3522 |
+
}
|
3523 |
+
}
|
3524 |
+
|
3525 |
+
class Google_Service_Drive_ChildReference extends Google_Model
|
3526 |
+
{
|
3527 |
+
public $childLink;
|
3528 |
+
public $id;
|
3529 |
+
public $kind;
|
3530 |
+
public $selfLink;
|
3531 |
+
|
3532 |
+
public function setChildLink($childLink)
|
3533 |
+
{
|
3534 |
+
$this->childLink = $childLink;
|
3535 |
+
}
|
3536 |
+
|
3537 |
+
public function getChildLink()
|
3538 |
+
{
|
3539 |
+
return $this->childLink;
|
3540 |
+
}
|
3541 |
+
|
3542 |
+
public function setId($id)
|
3543 |
+
{
|
3544 |
+
$this->id = $id;
|
3545 |
+
}
|
3546 |
+
|
3547 |
+
public function getId()
|
3548 |
+
{
|
3549 |
+
return $this->id;
|
3550 |
+
}
|
3551 |
+
|
3552 |
+
public function setKind($kind)
|
3553 |
+
{
|
3554 |
+
$this->kind = $kind;
|
3555 |
+
}
|
3556 |
+
|
3557 |
+
public function getKind()
|
3558 |
+
{
|
3559 |
+
return $this->kind;
|
3560 |
+
}
|
3561 |
+
|
3562 |
+
public function setSelfLink($selfLink)
|
3563 |
+
{
|
3564 |
+
$this->selfLink = $selfLink;
|
3565 |
+
}
|
3566 |
+
|
3567 |
+
public function getSelfLink()
|
3568 |
+
{
|
3569 |
+
return $this->selfLink;
|
3570 |
+
}
|
3571 |
+
}
|
3572 |
+
|
3573 |
+
class Google_Service_Drive_Comment extends Google_Collection
|
3574 |
+
{
|
3575 |
+
public $anchor;
|
3576 |
+
protected $authorType = 'Google_Service_Drive_User';
|
3577 |
+
protected $authorDataType = '';
|
3578 |
+
public $commentId;
|
3579 |
+
public $content;
|
3580 |
+
protected $contextType = 'Google_Service_Drive_CommentContext';
|
3581 |
+
protected $contextDataType = '';
|
3582 |
+
public $createdDate;
|
3583 |
+
public $deleted;
|
3584 |
+
public $fileId;
|
3585 |
+
public $fileTitle;
|
3586 |
+
public $htmlContent;
|
3587 |
+
public $kind;
|
3588 |
+
public $modifiedDate;
|
3589 |
+
protected $repliesType = 'Google_Service_Drive_CommentReply';
|
3590 |
+
protected $repliesDataType = 'array';
|
3591 |
+
public $selfLink;
|
3592 |
+
public $status;
|
3593 |
+
|
3594 |
+
public function setAnchor($anchor)
|
3595 |
+
{
|
3596 |
+
$this->anchor = $anchor;
|
3597 |
+
}
|
3598 |
+
|
3599 |
+
public function getAnchor()
|
3600 |
+
{
|
3601 |
+
return $this->anchor;
|
3602 |
+
}
|
3603 |
+
|
3604 |
+
public function setAuthor(Google_Service_Drive_User $author)
|
3605 |
+
{
|
3606 |
+
$this->author = $author;
|
3607 |
+
}
|
3608 |
+
|
3609 |
+
public function getAuthor()
|
3610 |
+
{
|
3611 |
+
return $this->author;
|
3612 |
+
}
|
3613 |
+
|
3614 |
+
public function setCommentId($commentId)
|
3615 |
+
{
|
3616 |
+
$this->commentId = $commentId;
|
3617 |
+
}
|
3618 |
+
|
3619 |
+
public function getCommentId()
|
3620 |
+
{
|
3621 |
+
return $this->commentId;
|
3622 |
+
}
|
3623 |
+
|
3624 |
+
public function setContent($content)
|
3625 |
+
{
|
3626 |
+
$this->content = $content;
|
3627 |
+
}
|
3628 |
+
|
3629 |
+
public function getContent()
|
3630 |
+
{
|
3631 |
+
return $this->content;
|
3632 |
+
}
|
3633 |
+
|
3634 |
+
public function setContext(Google_Service_Drive_CommentContext $context)
|
3635 |
+
{
|
3636 |
+
$this->context = $context;
|
3637 |
+
}
|
3638 |
+
|
3639 |
+
public function getContext()
|
3640 |
+
{
|
3641 |
+
return $this->context;
|
3642 |
+
}
|
3643 |
+
|
3644 |
+
public function setCreatedDate($createdDate)
|
3645 |
+
{
|
3646 |
+
$this->createdDate = $createdDate;
|
3647 |
+
}
|
3648 |
+
|
3649 |
+
public function getCreatedDate()
|
3650 |
+
{
|
3651 |
+
return $this->createdDate;
|
3652 |
+
}
|
3653 |
+
|
3654 |
+
public function setDeleted($deleted)
|
3655 |
+
{
|
3656 |
+
$this->deleted = $deleted;
|
3657 |
+
}
|
3658 |
+
|
3659 |
+
public function getDeleted()
|
3660 |
+
{
|
3661 |
+
return $this->deleted;
|
3662 |
+
}
|
3663 |
+
|
3664 |
+
public function setFileId($fileId)
|
3665 |
+
{
|
3666 |
+
$this->fileId = $fileId;
|
3667 |
+
}
|
3668 |
+
|
3669 |
+
public function getFileId()
|
3670 |
+
{
|
3671 |
+
return $this->fileId;
|
3672 |
+
}
|
3673 |
+
|
3674 |
+
public function setFileTitle($fileTitle)
|
3675 |
+
{
|
3676 |
+
$this->fileTitle = $fileTitle;
|
3677 |
+
}
|
3678 |
+
|
3679 |
+
public function getFileTitle()
|
3680 |
+
{
|
3681 |
+
return $this->fileTitle;
|
3682 |
+
}
|
3683 |
+
|
3684 |
+
public function setHtmlContent($htmlContent)
|
3685 |
+
{
|
3686 |
+
$this->htmlContent = $htmlContent;
|
3687 |
+
}
|
3688 |
+
|
3689 |
+
public function getHtmlContent()
|
3690 |
+
{
|
3691 |
+
return $this->htmlContent;
|
3692 |
+
}
|
3693 |
+
|
3694 |
+
public function setKind($kind)
|
3695 |
+
{
|
3696 |
+
$this->kind = $kind;
|
3697 |
+
}
|
3698 |
+
|
3699 |
+
public function getKind()
|
3700 |
+
{
|
3701 |
+
return $this->kind;
|
3702 |
+
}
|
3703 |
+
|
3704 |
+
public function setModifiedDate($modifiedDate)
|
3705 |
+
{
|
3706 |
+
$this->modifiedDate = $modifiedDate;
|
3707 |
+
}
|
3708 |
+
|
3709 |
+
public function getModifiedDate()
|
3710 |
+
{
|
3711 |
+
return $this->modifiedDate;
|
3712 |
+
}
|
3713 |
+
|
3714 |
+
public function setReplies($replies)
|
3715 |
+
{
|
3716 |
+
$this->replies = $replies;
|
3717 |
+
}
|
3718 |
+
|
3719 |
+
public function getReplies()
|
3720 |
+
{
|
3721 |
+
return $this->replies;
|
3722 |
+
}
|
3723 |
+
|
3724 |
+
public function setSelfLink($selfLink)
|
3725 |
+
{
|
3726 |
+
$this->selfLink = $selfLink;
|
3727 |
+
}
|
3728 |
+
|
3729 |
+
public function getSelfLink()
|
3730 |
+
{
|
3731 |
+
return $this->selfLink;
|
3732 |
+
}
|
3733 |
+
|
3734 |
+
public function setStatus($status)
|
3735 |
+
{
|
3736 |
+
$this->status = $status;
|
3737 |
+
}
|
3738 |
+
|
3739 |
+
public function getStatus()
|
3740 |
+
{
|
3741 |
+
return $this->status;
|
3742 |
+
}
|
3743 |
+
}
|
3744 |
+
|
3745 |
+
class Google_Service_Drive_CommentContext extends Google_Model
|
3746 |
+
{
|
3747 |
+
public $type;
|
3748 |
+
public $value;
|
3749 |
+
|
3750 |
+
public function setType($type)
|
3751 |
+
{
|
3752 |
+
$this->type = $type;
|
3753 |
+
}
|
3754 |
+
|
3755 |
+
public function getType()
|
3756 |
+
{
|
3757 |
+
return $this->type;
|
3758 |
+
}
|
3759 |
+
|
3760 |
+
public function setValue($value)
|
3761 |
+
{
|
3762 |
+
$this->value = $value;
|
3763 |
+
}
|
3764 |
+
|
3765 |
+
public function getValue()
|
3766 |
+
{
|
3767 |
+
return $this->value;
|
3768 |
+
}
|
3769 |
+
}
|
3770 |
+
|
3771 |
+
class Google_Service_Drive_CommentList extends Google_Collection
|
3772 |
+
{
|
3773 |
+
protected $itemsType = 'Google_Service_Drive_Comment';
|
3774 |
+
protected $itemsDataType = 'array';
|
3775 |
+
public $kind;
|
3776 |
+
public $nextLink;
|
3777 |
+
public $nextPageToken;
|
3778 |
+
public $selfLink;
|
3779 |
+
|
3780 |
+
public function setItems($items)
|
3781 |
+
{
|
3782 |
+
$this->items = $items;
|
3783 |
+
}
|
3784 |
+
|
3785 |
+
public function getItems()
|
3786 |
+
{
|
3787 |
+
return $this->items;
|
3788 |
+
}
|
3789 |
+
|
3790 |
+
public function setKind($kind)
|
3791 |
+
{
|
3792 |
+
$this->kind = $kind;
|
3793 |
+
}
|
3794 |
+
|
3795 |
+
public function getKind()
|
3796 |
+
{
|
3797 |
+
return $this->kind;
|
3798 |
+
}
|
3799 |
+
|
3800 |
+
public function setNextLink($nextLink)
|
3801 |
+
{
|
3802 |
+
$this->nextLink = $nextLink;
|
3803 |
+
}
|
3804 |
+
|
3805 |
+
public function getNextLink()
|
3806 |
+
{
|
3807 |
+
return $this->nextLink;
|
3808 |
+
}
|
3809 |
+
|
3810 |
+
public function setNextPageToken($nextPageToken)
|
3811 |
+
{
|
3812 |
+
$this->nextPageToken = $nextPageToken;
|
3813 |
+
}
|
3814 |
+
|
3815 |
+
public function getNextPageToken()
|
3816 |
+
{
|
3817 |
+
return $this->nextPageToken;
|
3818 |
+
}
|
3819 |
+
|
3820 |
+
public function setSelfLink($selfLink)
|
3821 |
+
{
|
3822 |
+
$this->selfLink = $selfLink;
|
3823 |
+
}
|
3824 |
+
|
3825 |
+
public function getSelfLink()
|
3826 |
+
{
|
3827 |
+
return $this->selfLink;
|
3828 |
+
}
|
3829 |
+
}
|
3830 |
+
|
3831 |
+
class Google_Service_Drive_CommentReply extends Google_Model
|
3832 |
+
{
|
3833 |
+
protected $authorType = 'Google_Service_Drive_User';
|
3834 |
+
protected $authorDataType = '';
|
3835 |
+
public $content;
|
3836 |
+
public $createdDate;
|
3837 |
+
public $deleted;
|
3838 |
+
public $htmlContent;
|
3839 |
+
public $kind;
|
3840 |
+
public $modifiedDate;
|
3841 |
+
public $replyId;
|
3842 |
+
public $verb;
|
3843 |
+
|
3844 |
+
public function setAuthor(Google_Service_Drive_User $author)
|
3845 |
+
{
|
3846 |
+
$this->author = $author;
|
3847 |
+
}
|
3848 |
+
|
3849 |
+
public function getAuthor()
|
3850 |
+
{
|
3851 |
+
return $this->author;
|
3852 |
+
}
|
3853 |
+
|
3854 |
+
public function setContent($content)
|
3855 |
+
{
|
3856 |
+
$this->content = $content;
|
3857 |
+
}
|
3858 |
+
|
3859 |
+
public function getContent()
|
3860 |
+
{
|
3861 |
+
return $this->content;
|
3862 |
+
}
|
3863 |
+
|
3864 |
+
public function setCreatedDate($createdDate)
|
3865 |
+
{
|
3866 |
+
$this->createdDate = $createdDate;
|
3867 |
+
}
|
3868 |
+
|
3869 |
+
public function getCreatedDate()
|
3870 |
+
{
|
3871 |
+
return $this->createdDate;
|
3872 |
+
}
|
3873 |
+
|
3874 |
+
public function setDeleted($deleted)
|
3875 |
+
{
|
3876 |
+
$this->deleted = $deleted;
|
3877 |
+
}
|
3878 |
+
|
3879 |
+
public function getDeleted()
|
3880 |
+
{
|
3881 |
+
return $this->deleted;
|
3882 |
+
}
|
3883 |
+
|
3884 |
+
public function setHtmlContent($htmlContent)
|
3885 |
+
{
|
3886 |
+
$this->htmlContent = $htmlContent;
|
3887 |
+
}
|
3888 |
+
|
3889 |
+
public function getHtmlContent()
|
3890 |
+
{
|
3891 |
+
return $this->htmlContent;
|
3892 |
+
}
|
3893 |
+
|
3894 |
+
public function setKind($kind)
|
3895 |
+
{
|
3896 |
+
$this->kind = $kind;
|
3897 |
+
}
|
3898 |
+
|
3899 |
+
public function getKind()
|
3900 |
+
{
|
3901 |
+
return $this->kind;
|
3902 |
+
}
|
3903 |
+
|
3904 |
+
public function setModifiedDate($modifiedDate)
|
3905 |
+
{
|
3906 |
+
$this->modifiedDate = $modifiedDate;
|
3907 |
+
}
|
3908 |
+
|
3909 |
+
public function getModifiedDate()
|
3910 |
+
{
|
3911 |
+
return $this->modifiedDate;
|
3912 |
+
}
|
3913 |
+
|
3914 |
+
public function setReplyId($replyId)
|
3915 |
+
{
|
3916 |
+
$this->replyId = $replyId;
|
3917 |
+
}
|
3918 |
+
|
3919 |
+
public function getReplyId()
|
3920 |
+
{
|
3921 |
+
return $this->replyId;
|
3922 |
+
}
|
3923 |
+
|
3924 |
+
public function setVerb($verb)
|
3925 |
+
{
|
3926 |
+
$this->verb = $verb;
|
3927 |
+
}
|
3928 |
+
|
3929 |
+
public function getVerb()
|
3930 |
+
{
|
3931 |
+
return $this->verb;
|
3932 |
+
}
|
3933 |
+
}
|
3934 |
+
|
3935 |
+
class Google_Service_Drive_CommentReplyList extends Google_Collection
|
3936 |
+
{
|
3937 |
+
protected $itemsType = 'Google_Service_Drive_CommentReply';
|
3938 |
+
protected $itemsDataType = 'array';
|
3939 |
+
public $kind;
|
3940 |
+
public $nextLink;
|
3941 |
+
public $nextPageToken;
|
3942 |
+
public $selfLink;
|
3943 |
+
|
3944 |
+
public function setItems($items)
|
3945 |
+
{
|
3946 |
+
$this->items = $items;
|
3947 |
+
}
|
3948 |
+
|
3949 |
+
public function getItems()
|
3950 |
+
{
|
3951 |
+
return $this->items;
|
3952 |
+
}
|
3953 |
+
|
3954 |
+
public function setKind($kind)
|
3955 |
+
{
|
3956 |
+
$this->kind = $kind;
|
3957 |
+
}
|
3958 |
+
|
3959 |
+
public function getKind()
|
3960 |
+
{
|
3961 |
+
return $this->kind;
|
3962 |
+
}
|
3963 |
+
|
3964 |
+
public function setNextLink($nextLink)
|
3965 |
+
{
|
3966 |
+
$this->nextLink = $nextLink;
|
3967 |
+
}
|
3968 |
+
|
3969 |
+
public function getNextLink()
|
3970 |
+
{
|
3971 |
+
return $this->nextLink;
|
3972 |
+
}
|
3973 |
+
|
3974 |
+
public function setNextPageToken($nextPageToken)
|
3975 |
+
{
|
3976 |
+
$this->nextPageToken = $nextPageToken;
|
3977 |
+
}
|
3978 |
+
|
3979 |
+
public function getNextPageToken()
|
3980 |
+
{
|
3981 |
+
return $this->nextPageToken;
|
3982 |
+
}
|
3983 |
+
|
3984 |
+
public function setSelfLink($selfLink)
|
3985 |
+
{
|
3986 |
+
$this->selfLink = $selfLink;
|
3987 |
+
}
|
3988 |
+
|
3989 |
+
public function getSelfLink()
|
3990 |
+
{
|
3991 |
+
return $this->selfLink;
|
3992 |
+
}
|
3993 |
+
}
|
3994 |
+
|
3995 |
+
class Google_Service_Drive_DriveFile extends Google_Collection
|
3996 |
+
{
|
3997 |
+
public $alternateLink;
|
3998 |
+
public $appDataContents;
|
3999 |
+
public $copyable;
|
4000 |
+
public $createdDate;
|
4001 |
+
public $defaultOpenWithLink;
|
4002 |
+
public $description;
|
4003 |
+
public $downloadUrl;
|
4004 |
+
public $editable;
|
4005 |
+
public $embedLink;
|
4006 |
+
public $etag;
|
4007 |
+
public $explicitlyTrashed;
|
4008 |
+
public $exportLinks;
|
4009 |
+
public $fileExtension;
|
4010 |
+
public $fileSize;
|
4011 |
+
public $headRevisionId;
|
4012 |
+
public $iconLink;
|
4013 |
+
public $id;
|
4014 |
+
protected $imageMediaMetadataType = 'Google_Service_Drive_DriveFileImageMediaMetadata';
|
4015 |
+
protected $imageMediaMetadataDataType = '';
|
4016 |
+
protected $indexableTextType = 'Google_Service_Drive_DriveFileIndexableText';
|
4017 |
+
protected $indexableTextDataType = '';
|
4018 |
+
public $kind;
|
4019 |
+
protected $labelsType = 'Google_Service_Drive_DriveFileLabels';
|
4020 |
+
protected $labelsDataType = '';
|
4021 |
+
protected $lastModifyingUserType = 'Google_Service_Drive_User';
|
4022 |
+
protected $lastModifyingUserDataType = '';
|
4023 |
+
public $lastModifyingUserName;
|
4024 |
+
public $lastViewedByMeDate;
|
4025 |
+
public $md5Checksum;
|
4026 |
+
public $mimeType;
|
4027 |
+
public $modifiedByMeDate;
|
4028 |
+
public $modifiedDate;
|
4029 |
+
public $openWithLinks;
|
4030 |
+
public $originalFilename;
|
4031 |
+
public $ownerNames;
|
4032 |
+
protected $ownersType = 'Google_Service_Drive_User';
|
4033 |
+
protected $ownersDataType = 'array';
|
4034 |
+
protected $parentsType = 'Google_Service_Drive_ParentReference';
|
4035 |
+
protected $parentsDataType = 'array';
|
4036 |
+
protected $propertiesType = 'Google_Service_Drive_Property';
|
4037 |
+
protected $propertiesDataType = 'array';
|
4038 |
+
public $quotaBytesUsed;
|
4039 |
+
public $selfLink;
|
4040 |
+
public $shared;
|
4041 |
+
public $sharedWithMeDate;
|
4042 |
+
protected $thumbnailType = 'Google_Service_Drive_DriveFileThumbnail';
|
4043 |
+
protected $thumbnailDataType = '';
|
4044 |
+
public $thumbnailLink;
|
4045 |
+
public $title;
|
4046 |
+
protected $userPermissionType = 'Google_Service_Drive_Permission';
|
4047 |
+
protected $userPermissionDataType = '';
|
4048 |
+
public $webContentLink;
|
4049 |
+
public $webViewLink;
|
4050 |
+
public $writersCanShare;
|
4051 |
+
|
4052 |
+
public function setAlternateLink($alternateLink)
|
4053 |
+
{
|
4054 |
+
$this->alternateLink = $alternateLink;
|
4055 |
+
}
|
4056 |
+
|
4057 |
+
public function getAlternateLink()
|
4058 |
+
{
|
4059 |
+
return $this->alternateLink;
|
4060 |
+
}
|
4061 |
+
|
4062 |
+
public function setAppDataContents($appDataContents)
|
4063 |
+
{
|
4064 |
+
$this->appDataContents = $appDataContents;
|
4065 |
+
}
|
4066 |
+
|
4067 |
+
public function getAppDataContents()
|
4068 |
+
{
|
4069 |
+
return $this->appDataContents;
|
4070 |
+
}
|
4071 |
+
|
4072 |
+
public function setCopyable($copyable)
|
4073 |
+
{
|
4074 |
+
$this->copyable = $copyable;
|
4075 |
+
}
|
4076 |
+
|
4077 |
+
public function getCopyable()
|
4078 |
+
{
|
4079 |
+
return $this->copyable;
|
4080 |
+
}
|
4081 |
+
|
4082 |
+
public function setCreatedDate($createdDate)
|
4083 |
+
{
|
4084 |
+
$this->createdDate = $createdDate;
|
4085 |
+
}
|
4086 |
+
|
4087 |
+
public function getCreatedDate()
|
4088 |
+
{
|
4089 |
+
return $this->createdDate;
|
4090 |
+
}
|
4091 |
+
|
4092 |
+
public function setDefaultOpenWithLink($defaultOpenWithLink)
|
4093 |
+
{
|
4094 |
+
$this->defaultOpenWithLink = $defaultOpenWithLink;
|
4095 |
+
}
|
4096 |
+
|
4097 |
+
public function getDefaultOpenWithLink()
|
4098 |
+
{
|
4099 |
+
return $this->defaultOpenWithLink;
|
4100 |
+
}
|
4101 |
+
|
4102 |
+
public function setDescription($description)
|
4103 |
+
{
|
4104 |
+
$this->description = $description;
|
4105 |
+
}
|
4106 |
+
|
4107 |
+
public function getDescription()
|
4108 |
+
{
|
4109 |
+
return $this->description;
|
4110 |
+
}
|
4111 |
+
|
4112 |
+
public function setDownloadUrl($downloadUrl)
|
4113 |
+
{
|
4114 |
+
$this->downloadUrl = $downloadUrl;
|
4115 |
+
}
|
4116 |
+
|
4117 |
+
public function getDownloadUrl()
|
4118 |
+
{
|
4119 |
+
return $this->downloadUrl;
|
4120 |
+
}
|
4121 |
+
|
4122 |
+
public function setEditable($editable)
|
4123 |
+
{
|
4124 |
+
$this->editable = $editable;
|
4125 |
+
}
|
4126 |
+
|
4127 |
+
public function getEditable()
|
4128 |
+
{
|
4129 |
+
return $this->editable;
|
4130 |
+
}
|
4131 |
+
|
4132 |
+
public function setEmbedLink($embedLink)
|
4133 |
+
{
|
4134 |
+
$this->embedLink = $embedLink;
|
4135 |
+
}
|
4136 |
+
|
4137 |
+
public function getEmbedLink()
|
4138 |
+
{
|
4139 |
+
return $this->embedLink;
|
4140 |
+
}
|
4141 |
+
|
4142 |
+
public function setEtag($etag)
|
4143 |
+
{
|
4144 |
+
$this->etag = $etag;
|
4145 |
+
}
|
4146 |
+
|
4147 |
+
public function getEtag()
|
4148 |
+
{
|
4149 |
+
return $this->etag;
|
4150 |
+
}
|
4151 |
+
|
4152 |
+
public function setExplicitlyTrashed($explicitlyTrashed)
|
4153 |
+
{
|
4154 |
+
$this->explicitlyTrashed = $explicitlyTrashed;
|
4155 |
+
}
|
4156 |
+
|
4157 |
+
public function getExplicitlyTrashed()
|
4158 |
+
{
|
4159 |
+
return $this->explicitlyTrashed;
|
4160 |
+
}
|
4161 |
+
|
4162 |
+
public function setExportLinks($exportLinks)
|
4163 |
+
{
|
4164 |
+
$this->exportLinks = $exportLinks;
|
4165 |
+
}
|
4166 |
+
|
4167 |
+
public function getExportLinks()
|
4168 |
+
{
|
4169 |
+
return $this->exportLinks;
|
4170 |
+
}
|
4171 |
+
|
4172 |
+
public function setFileExtension($fileExtension)
|
4173 |
+
{
|
4174 |
+
$this->fileExtension = $fileExtension;
|
4175 |
+
}
|
4176 |
+
|
4177 |
+
public function getFileExtension()
|
4178 |
+
{
|
4179 |
+
return $this->fileExtension;
|
4180 |
+
}
|
4181 |
+
|
4182 |
+
public function setFileSize($fileSize)
|
4183 |
+
{
|
4184 |
+
$this->fileSize = $fileSize;
|
4185 |
+
}
|
4186 |
+
|
4187 |
+
public function getFileSize()
|
4188 |
+
{
|
4189 |
+
return $this->fileSize;
|
4190 |
+
}
|
4191 |
+
|
4192 |
+
public function setHeadRevisionId($headRevisionId)
|
4193 |
+
{
|
4194 |
+
$this->headRevisionId = $headRevisionId;
|
4195 |
+
}
|
4196 |
+
|
4197 |
+
public function getHeadRevisionId()
|
4198 |
+
{
|
4199 |
+
return $this->headRevisionId;
|
4200 |
+
}
|
4201 |
+
|
4202 |
+
public function setIconLink($iconLink)
|
4203 |
+
{
|
4204 |
+
$this->iconLink = $iconLink;
|
4205 |
+
}
|
4206 |
+
|
4207 |
+
public function getIconLink()
|
4208 |
+
{
|
4209 |
+
return $this->iconLink;
|
4210 |
+
}
|
4211 |
+
|
4212 |
+
public function setId($id)
|
4213 |
+
{
|
4214 |
+
$this->id = $id;
|
4215 |
+
}
|
4216 |
+
|
4217 |
+
public function getId()
|
4218 |
+
{
|
4219 |
+
return $this->id;
|
4220 |
+
}
|
4221 |
+
|
4222 |
+
public function setImageMediaMetadata(Google_Service_Drive_DriveFileImageMediaMetadata $imageMediaMetadata)
|
4223 |
+
{
|
4224 |
+
$this->imageMediaMetadata = $imageMediaMetadata;
|
4225 |
+
}
|
4226 |
+
|
4227 |
+
public function getImageMediaMetadata()
|
4228 |
+
{
|
4229 |
+
return $this->imageMediaMetadata;
|
4230 |
+
}
|
4231 |
+
|
4232 |
+
public function setIndexableText(Google_Service_Drive_DriveFileIndexableText $indexableText)
|
4233 |
+
{
|
4234 |
+
$this->indexableText = $indexableText;
|
4235 |
+
}
|
4236 |
+
|
4237 |
+
public function getIndexableText()
|
4238 |
+
{
|
4239 |
+
return $this->indexableText;
|
4240 |
+
}
|
4241 |
+
|
4242 |
+
public function setKind($kind)
|
4243 |
+
{
|
4244 |
+
$this->kind = $kind;
|
4245 |
+
}
|
4246 |
+
|
4247 |
+
public function getKind()
|
4248 |
+
{
|
4249 |
+
return $this->kind;
|
4250 |
+
}
|
4251 |
+
|
4252 |
+
public function setLabels(Google_Service_Drive_DriveFileLabels $labels)
|
4253 |
+
{
|
4254 |
+
$this->labels = $labels;
|
4255 |
+
}
|
4256 |
+
|
4257 |
+
public function getLabels()
|
4258 |
+
{
|
4259 |
+
return $this->labels;
|
4260 |
+
}
|
4261 |
+
|
4262 |
+
public function setLastModifyingUser(Google_Service_Drive_User $lastModifyingUser)
|
4263 |
+
{
|
4264 |
+
$this->lastModifyingUser = $lastModifyingUser;
|
4265 |
+
}
|
4266 |
+
|
4267 |
+
public function getLastModifyingUser()
|
4268 |
+
{
|
4269 |
+
return $this->lastModifyingUser;
|
4270 |
+
}
|
4271 |
+
|
4272 |
+
public function setLastModifyingUserName($lastModifyingUserName)
|
4273 |
+
{
|
4274 |
+
$this->lastModifyingUserName = $lastModifyingUserName;
|
4275 |
+
}
|
4276 |
+
|
4277 |
+
public function getLastModifyingUserName()
|
4278 |
+
{
|
4279 |
+
return $this->lastModifyingUserName;
|
4280 |
+
}
|
4281 |
+
|
4282 |
+
public function setLastViewedByMeDate($lastViewedByMeDate)
|
4283 |
+
{
|
4284 |
+
$this->lastViewedByMeDate = $lastViewedByMeDate;
|
4285 |
+
}
|
4286 |
+
|
4287 |
+
public function getLastViewedByMeDate()
|
4288 |
+
{
|
4289 |
+
return $this->lastViewedByMeDate;
|
4290 |
+
}
|
4291 |
+
|
4292 |
+
public function setMd5Checksum($md5Checksum)
|
4293 |
+
{
|
4294 |
+
$this->md5Checksum = $md5Checksum;
|
4295 |
+
}
|
4296 |
+
|
4297 |
+
public function getMd5Checksum()
|
4298 |
+
{
|
4299 |
+
return $this->md5Checksum;
|
4300 |
+
}
|
4301 |
+
|
4302 |
+
public function setMimeType($mimeType)
|
4303 |
+
{
|
4304 |
+
$this->mimeType = $mimeType;
|
4305 |
+
}
|
4306 |
+
|
4307 |
+
public function getMimeType()
|
4308 |
+
{
|
4309 |
+
return $this->mimeType;
|
4310 |
+
}
|
4311 |
+
|
4312 |
+
public function setModifiedByMeDate($modifiedByMeDate)
|
4313 |
+
{
|
4314 |
+
$this->modifiedByMeDate = $modifiedByMeDate;
|
4315 |
+
}
|
4316 |
+
|
4317 |
+
public function getModifiedByMeDate()
|
4318 |
+
{
|
4319 |
+
return $this->modifiedByMeDate;
|
4320 |
+
}
|
4321 |
+
|
4322 |
+
public function setModifiedDate($modifiedDate)
|
4323 |
+
{
|
4324 |
+
$this->modifiedDate = $modifiedDate;
|
4325 |
+
}
|
4326 |
+
|
4327 |
+
public function getModifiedDate()
|
4328 |
+
{
|
4329 |
+
return $this->modifiedDate;
|
4330 |
+
}
|
4331 |
+
|
4332 |
+
public function setOpenWithLinks($openWithLinks)
|
4333 |
+
{
|
4334 |
+
$this->openWithLinks = $openWithLinks;
|
4335 |
+
}
|
4336 |
+
|
4337 |
+
public function getOpenWithLinks()
|
4338 |
+
{
|
4339 |
+
return $this->openWithLinks;
|
4340 |
+
}
|
4341 |
+
|
4342 |
+
public function setOriginalFilename($originalFilename)
|
4343 |
+
{
|
4344 |
+
$this->originalFilename = $originalFilename;
|
4345 |
+
}
|
4346 |
+
|
4347 |
+
public function getOriginalFilename()
|
4348 |
+
{
|
4349 |
+
return $this->originalFilename;
|
4350 |
+
}
|
4351 |
+
|
4352 |
+
public function setOwnerNames($ownerNames)
|
4353 |
+
{
|
4354 |
+
$this->ownerNames = $ownerNames;
|
4355 |
+
}
|
4356 |
+
|
4357 |
+
public function getOwnerNames()
|
4358 |
+
{
|
4359 |
+
return $this->ownerNames;
|
4360 |
+
}
|
4361 |
+
|
4362 |
+
public function setOwners($owners)
|
4363 |
+
{
|
4364 |
+
$this->owners = $owners;
|
4365 |
+
}
|
4366 |
+
|
4367 |
+
public function getOwners()
|
4368 |
+
{
|
4369 |
+
return $this->owners;
|
4370 |
+
}
|
4371 |
+
|
4372 |
+
public function setParents($parents)
|
4373 |
+
{
|
4374 |
+
$this->parents = $parents;
|
4375 |
+
}
|
4376 |
+
|
4377 |
+
public function getParents()
|
4378 |
+
{
|
4379 |
+
return $this->parents;
|
4380 |
+
}
|
4381 |
+
|
4382 |
+
public function setProperties($properties)
|
4383 |
+
{
|
4384 |
+
$this->properties = $properties;
|
4385 |
+
}
|
4386 |
+
|
4387 |
+
public function getProperties()
|
4388 |
+
{
|
4389 |
+
return $this->properties;
|
4390 |
+
}
|
4391 |
+
|
4392 |
+
public function setQuotaBytesUsed($quotaBytesUsed)
|
4393 |
+
{
|
4394 |
+
$this->quotaBytesUsed = $quotaBytesUsed;
|
4395 |
+
}
|
4396 |
+
|
4397 |
+
public function getQuotaBytesUsed()
|
4398 |
+
{
|
4399 |
+
return $this->quotaBytesUsed;
|
4400 |
+
}
|
4401 |
+
|
4402 |
+
public function setSelfLink($selfLink)
|
4403 |
+
{
|
4404 |
+
$this->selfLink = $selfLink;
|
4405 |
+
}
|
4406 |
+
|
4407 |
+
public function getSelfLink()
|
4408 |
+
{
|
4409 |
+
return $this->selfLink;
|
4410 |
+
}
|
4411 |
+
|
4412 |
+
public function setShared($shared)
|
4413 |
+
{
|
4414 |
+
$this->shared = $shared;
|
4415 |
+
}
|
4416 |
+
|
4417 |
+
public function getShared()
|
4418 |
+
{
|
4419 |
+
return $this->shared;
|
4420 |
+
}
|
4421 |
+
|
4422 |
+
public function setSharedWithMeDate($sharedWithMeDate)
|
4423 |
+
{
|
4424 |
+
$this->sharedWithMeDate = $sharedWithMeDate;
|
4425 |
+
}
|
4426 |
+
|
4427 |
+
public function getSharedWithMeDate()
|
4428 |
+
{
|
4429 |
+
return $this->sharedWithMeDate;
|
4430 |
+
}
|
4431 |
+
|
4432 |
+
public function setThumbnail(Google_Service_Drive_DriveFileThumbnail $thumbnail)
|
4433 |
+
{
|
4434 |
+
$this->thumbnail = $thumbnail;
|
4435 |
+
}
|
4436 |
+
|
4437 |
+
public function getThumbnail()
|
4438 |
+
{
|
4439 |
+
return $this->thumbnail;
|
4440 |
+
}
|
4441 |
+
|
4442 |
+
public function setThumbnailLink($thumbnailLink)
|
4443 |
+
{
|
4444 |
+
$this->thumbnailLink = $thumbnailLink;
|
4445 |
+
}
|
4446 |
+
|
4447 |
+
public function getThumbnailLink()
|
4448 |
+
{
|
4449 |
+
return $this->thumbnailLink;
|
4450 |
+
}
|
4451 |
+
|
4452 |
+
public function setTitle($title)
|
4453 |
+
{
|
4454 |
+
$this->title = $title;
|
4455 |
+
}
|
4456 |
+
|
4457 |
+
public function getTitle()
|
4458 |
+
{
|
4459 |
+
return $this->title;
|
4460 |
+
}
|
4461 |
+
|
4462 |
+
public function setUserPermission(Google_Service_Drive_Permission $userPermission)
|
4463 |
+
{
|
4464 |
+
$this->userPermission = $userPermission;
|
4465 |
+
}
|
4466 |
+
|
4467 |
+
public function getUserPermission()
|
4468 |
+
{
|
4469 |
+
return $this->userPermission;
|
4470 |
+
}
|
4471 |
+
|
4472 |
+
public function setWebContentLink($webContentLink)
|
4473 |
+
{
|
4474 |
+
$this->webContentLink = $webContentLink;
|
4475 |
+
}
|
4476 |
+
|
4477 |
+
public function getWebContentLink()
|
4478 |
+
{
|
4479 |
+
return $this->webContentLink;
|
4480 |
+
}
|
4481 |
+
|
4482 |
+
public function setWebViewLink($webViewLink)
|
4483 |
+
{
|
4484 |
+
$this->webViewLink = $webViewLink;
|
4485 |
+
}
|
4486 |
+
|
4487 |
+
public function getWebViewLink()
|
4488 |
+
{
|
4489 |
+
return $this->webViewLink;
|
4490 |
+
}
|
4491 |
+
|
4492 |
+
public function setWritersCanShare($writersCanShare)
|
4493 |
+
{
|
4494 |
+
$this->writersCanShare = $writersCanShare;
|
4495 |
+
}
|
4496 |
+
|
4497 |
+
public function getWritersCanShare()
|
4498 |
+
{
|
4499 |
+
return $this->writersCanShare;
|
4500 |
+
}
|
4501 |
+
}
|
4502 |
+
|
4503 |
+
class Google_Service_Drive_DriveFileImageMediaMetadata extends Google_Model
|
4504 |
+
{
|
4505 |
+
public $aperture;
|
4506 |
+
public $cameraMake;
|
4507 |
+
public $cameraModel;
|
4508 |
+
public $colorSpace;
|
4509 |
+
public $date;
|
4510 |
+
public $exposureBias;
|
4511 |
+
public $exposureMode;
|
4512 |
+
public $exposureTime;
|
4513 |
+
public $flashUsed;
|
4514 |
+
public $focalLength;
|
4515 |
+
public $height;
|
4516 |
+
public $isoSpeed;
|
4517 |
+
public $lens;
|
4518 |
+
protected $locationType = 'Google_Service_Drive_DriveFileImageMediaMetadataLocation';
|
4519 |
+
protected $locationDataType = '';
|
4520 |
+
public $maxApertureValue;
|
4521 |
+
public $meteringMode;
|
4522 |
+
public $rotation;
|
4523 |
+
public $sensor;
|
4524 |
+
public $subjectDistance;
|
4525 |
+
public $whiteBalance;
|
4526 |
+
public $width;
|
4527 |
+
|
4528 |
+
public function setAperture($aperture)
|
4529 |
+
{
|
4530 |
+
$this->aperture = $aperture;
|
4531 |
+
}
|
4532 |
+
|
4533 |
+
public function getAperture()
|
4534 |
+
{
|
4535 |
+
return $this->aperture;
|
4536 |
+
}
|
4537 |
+
|
4538 |
+
public function setCameraMake($cameraMake)
|
4539 |
+
{
|
4540 |
+
$this->cameraMake = $cameraMake;
|
4541 |
+
}
|
4542 |
+
|
4543 |
+
public function getCameraMake()
|
4544 |
+
{
|
4545 |
+
return $this->cameraMake;
|
4546 |
+
}
|
4547 |
+
|
4548 |
+
public function setCameraModel($cameraModel)
|
4549 |
+
{
|
4550 |
+
$this->cameraModel = $cameraModel;
|
4551 |
+
}
|
4552 |
+
|
4553 |
+
public function getCameraModel()
|
4554 |
+
{
|
4555 |
+
return $this->cameraModel;
|
4556 |
+
}
|
4557 |
+
|
4558 |
+
public function setColorSpace($colorSpace)
|
4559 |
+
{
|
4560 |
+
$this->colorSpace = $colorSpace;
|
4561 |
+
}
|
4562 |
+
|
4563 |
+
public function getColorSpace()
|
4564 |
+
{
|
4565 |
+
return $this->colorSpace;
|
4566 |
+
}
|
4567 |
+
|
4568 |
+
public function setDate($date)
|
4569 |
+
{
|
4570 |
+
$this->date = $date;
|
4571 |
+
}
|
4572 |
+
|
4573 |
+
public function getDate()
|
4574 |
+
{
|
4575 |
+
return $this->date;
|
4576 |
+
}
|
4577 |
+
|
4578 |
+
public function setExposureBias($exposureBias)
|
4579 |
+
{
|
4580 |
+
$this->exposureBias = $exposureBias;
|
4581 |
+
}
|
4582 |
+
|
4583 |
+
public function getExposureBias()
|
4584 |
+
{
|
4585 |
+
return $this->exposureBias;
|
4586 |
+
}
|
4587 |
+
|
4588 |
+
public function setExposureMode($exposureMode)
|
4589 |
+
{
|
4590 |
+
$this->exposureMode = $exposureMode;
|
4591 |
+
}
|
4592 |
+
|
4593 |
+
public function getExposureMode()
|
4594 |
+
{
|
4595 |
+
return $this->exposureMode;
|
4596 |
+
}
|
4597 |
+
|
4598 |
+
public function setExposureTime($exposureTime)
|
4599 |
+
{
|
4600 |
+
$this->exposureTime = $exposureTime;
|
4601 |
+
}
|
4602 |
+
|
4603 |
+
public function getExposureTime()
|
4604 |
+
{
|
4605 |
+
return $this->exposureTime;
|
4606 |
+
}
|
4607 |
+
|
4608 |
+
public function setFlashUsed($flashUsed)
|
4609 |
+
{
|
4610 |
+
$this->flashUsed = $flashUsed;
|
4611 |
+
}
|
4612 |
+
|
4613 |
+
public function getFlashUsed()
|
4614 |
+
{
|
4615 |
+
return $this->flashUsed;
|
4616 |
+
}
|
4617 |
+
|
4618 |
+
public function setFocalLength($focalLength)
|
4619 |
+
{
|
4620 |
+
$this->focalLength = $focalLength;
|
4621 |
+
}
|
4622 |
+
|
4623 |
+
public function getFocalLength()
|
4624 |
+
{
|
4625 |
+
return $this->focalLength;
|
4626 |
+
}
|
4627 |
+
|
4628 |
+
public function setHeight($height)
|
4629 |
+
{
|
4630 |
+
$this->height = $height;
|
4631 |
+
}
|
4632 |
+
|
4633 |
+
public function getHeight()
|
4634 |
+
{
|
4635 |
+
return $this->height;
|
4636 |
+
}
|
4637 |
+
|
4638 |
+
public function setIsoSpeed($isoSpeed)
|
4639 |
+
{
|
4640 |
+
$this->isoSpeed = $isoSpeed;
|
4641 |
+
}
|
4642 |
+
|
4643 |
+
public function getIsoSpeed()
|
4644 |
+
{
|
4645 |
+
return $this->isoSpeed;
|
4646 |
+
}
|
4647 |
+
|
4648 |
+
public function setLens($lens)
|
4649 |
+
{
|
4650 |
+
$this->lens = $lens;
|
4651 |
+
}
|
4652 |
+
|
4653 |
+
public function getLens()
|
4654 |
+
{
|
4655 |
+
return $this->lens;
|
4656 |
+
}
|
4657 |
+
|
4658 |
+
public function setLocation(Google_Service_Drive_DriveFileImageMediaMetadataLocation $location)
|
4659 |
+
{
|
4660 |
+
$this->location = $location;
|
4661 |
+
}
|
4662 |
+
|
4663 |
+
public function getLocation()
|
4664 |
+
{
|
4665 |
+
return $this->location;
|
4666 |
+
}
|
4667 |
+
|
4668 |
+
public function setMaxApertureValue($maxApertureValue)
|
4669 |
+
{
|
4670 |
+
$this->maxApertureValue = $maxApertureValue;
|
4671 |
+
}
|
4672 |
+
|
4673 |
+
public function getMaxApertureValue()
|
4674 |
+
{
|
4675 |
+
return $this->maxApertureValue;
|
4676 |
+
}
|
4677 |
+
|
4678 |
+
public function setMeteringMode($meteringMode)
|
4679 |
+
{
|
4680 |
+
$this->meteringMode = $meteringMode;
|
4681 |
+
}
|
4682 |
+
|
4683 |
+
public function getMeteringMode()
|
4684 |
+
{
|
4685 |
+
return $this->meteringMode;
|
4686 |
+
}
|
4687 |
+
|
4688 |
+
public function setRotation($rotation)
|
4689 |
+
{
|
4690 |
+
$this->rotation = $rotation;
|
4691 |
+
}
|
4692 |
+
|
4693 |
+
public function getRotation()
|
4694 |
+
{
|
4695 |
+
return $this->rotation;
|
4696 |
+
}
|
4697 |
+
|
4698 |
+
public function setSensor($sensor)
|
4699 |
+
{
|
4700 |
+
$this->sensor = $sensor;
|
4701 |
+
}
|
4702 |
+
|
4703 |
+
public function getSensor()
|
4704 |
+
{
|
4705 |
+
return $this->sensor;
|
4706 |
+
}
|
4707 |
+
|
4708 |
+
public function setSubjectDistance($subjectDistance)
|
4709 |
+
{
|
4710 |
+
$this->subjectDistance = $subjectDistance;
|
4711 |
+
}
|
4712 |
+
|
4713 |
+
public function getSubjectDistance()
|
4714 |
+
{
|
4715 |
+
return $this->subjectDistance;
|
4716 |
+
}
|
4717 |
+
|
4718 |
+
public function setWhiteBalance($whiteBalance)
|
4719 |
+
{
|
4720 |
+
$this->whiteBalance = $whiteBalance;
|
4721 |
+
}
|
4722 |
+
|
4723 |
+
public function getWhiteBalance()
|
4724 |
+
{
|
4725 |
+
return $this->whiteBalance;
|
4726 |
+
}
|
4727 |
+
|
4728 |
+
public function setWidth($width)
|
4729 |
+
{
|
4730 |
+
$this->width = $width;
|
4731 |
+
}
|
4732 |
+
|
4733 |
+
public function getWidth()
|
4734 |
+
{
|
4735 |
+
return $this->width;
|
4736 |
+
}
|
4737 |
+
}
|
4738 |
+
|
4739 |
+
class Google_Service_Drive_DriveFileImageMediaMetadataLocation extends Google_Model
|
4740 |
+
{
|
4741 |
+
public $altitude;
|
4742 |
+
public $latitude;
|
4743 |
+
public $longitude;
|
4744 |
+
|
4745 |
+
public function setAltitude($altitude)
|
4746 |
+
{
|
4747 |
+
$this->altitude = $altitude;
|
4748 |
+
}
|
4749 |
+
|
4750 |
+
public function getAltitude()
|
4751 |
+
{
|
4752 |
+
return $this->altitude;
|
4753 |
+
}
|
4754 |
+
|
4755 |
+
public function setLatitude($latitude)
|
4756 |
+
{
|
4757 |
+
$this->latitude = $latitude;
|
4758 |
+
}
|
4759 |
+
|
4760 |
+
public function getLatitude()
|
4761 |
+
{
|
4762 |
+
return $this->latitude;
|
4763 |
+
}
|
4764 |
+
|
4765 |
+
public function setLongitude($longitude)
|
4766 |
+
{
|
4767 |
+
$this->longitude = $longitude;
|
4768 |
+
}
|
4769 |
+
|
4770 |
+
public function getLongitude()
|
4771 |
+
{
|
4772 |
+
return $this->longitude;
|
4773 |
+
}
|
4774 |
+
}
|
4775 |
+
|
4776 |
+
class Google_Service_Drive_DriveFileIndexableText extends Google_Model
|
4777 |
+
{
|
4778 |
+
public $text;
|
4779 |
+
|
4780 |
+
public function setText($text)
|
4781 |
+
{
|
4782 |
+
$this->text = $text;
|
4783 |
+
}
|
4784 |
+
|
4785 |
+
public function getText()
|
4786 |
+
{
|
4787 |
+
return $this->text;
|
4788 |
+
}
|
4789 |
+
}
|
4790 |
+
|
4791 |
+
class Google_Service_Drive_DriveFileLabels extends Google_Model
|
4792 |
+
{
|
4793 |
+
public $hidden;
|
4794 |
+
public $restricted;
|
4795 |
+
public $starred;
|
4796 |
+
public $trashed;
|
4797 |
+
public $viewed;
|
4798 |
+
|
4799 |
+
public function setHidden($hidden)
|
4800 |
+
{
|
4801 |
+
$this->hidden = $hidden;
|
4802 |
+
}
|
4803 |
+
|
4804 |
+
public function getHidden()
|
4805 |
+
{
|
4806 |
+
return $this->hidden;
|
4807 |
+
}
|
4808 |
+
|
4809 |
+
public function setRestricted($restricted)
|
4810 |
+
{
|
4811 |
+
$this->restricted = $restricted;
|
4812 |
+
}
|
4813 |
+
|
4814 |
+
public function getRestricted()
|
4815 |
+
{
|
4816 |
+
return $this->restricted;
|
4817 |
+
}
|
4818 |
+
|
4819 |
+
public function setStarred($starred)
|
4820 |
+
{
|
4821 |
+
$this->starred = $starred;
|
4822 |
+
}
|
4823 |
+
|
4824 |
+
public function getStarred()
|
4825 |
+
{
|
4826 |
+
return $this->starred;
|
4827 |
+
}
|
4828 |
+
|
4829 |
+
public function setTrashed($trashed)
|
4830 |
+
{
|
4831 |
+
$this->trashed = $trashed;
|
4832 |
+
}
|
4833 |
+
|
4834 |
+
public function getTrashed()
|
4835 |
+
{
|
4836 |
+
return $this->trashed;
|
4837 |
+
}
|
4838 |
+
|
4839 |
+
public function setViewed($viewed)
|
4840 |
+
{
|
4841 |
+
$this->viewed = $viewed;
|
4842 |
+
}
|
4843 |
+
|
4844 |
+
public function getViewed()
|
4845 |
+
{
|
4846 |
+
return $this->viewed;
|
4847 |
+
}
|
4848 |
+
}
|
4849 |
+
|
4850 |
+
class Google_Service_Drive_DriveFileThumbnail extends Google_Model
|
4851 |
+
{
|
4852 |
+
public $image;
|
4853 |
+
public $mimeType;
|
4854 |
+
|
4855 |
+
public function setImage($image)
|
4856 |
+
{
|
4857 |
+
$this->image = $image;
|
4858 |
+
}
|
4859 |
+
|
4860 |
+
public function getImage()
|
4861 |
+
{
|
4862 |
+
return $this->image;
|
4863 |
+
}
|
4864 |
+
|
4865 |
+
public function setMimeType($mimeType)
|
4866 |
+
{
|
4867 |
+
$this->mimeType = $mimeType;
|
4868 |
+
}
|
4869 |
+
|
4870 |
+
public function getMimeType()
|
4871 |
+
{
|
4872 |
+
return $this->mimeType;
|
4873 |
+
}
|
4874 |
+
}
|
4875 |
+
|
4876 |
+
class Google_Service_Drive_FileList extends Google_Collection
|
4877 |
+
{
|
4878 |
+
public $etag;
|
4879 |
+
protected $itemsType = 'Google_Service_Drive_DriveFile';
|
4880 |
+
protected $itemsDataType = 'array';
|
4881 |
+
public $kind;
|
4882 |
+
public $nextLink;
|
4883 |
+
public $nextPageToken;
|
4884 |
+
public $selfLink;
|
4885 |
+
|
4886 |
+
public function setEtag($etag)
|
4887 |
+
{
|
4888 |
+
$this->etag = $etag;
|
4889 |
+
}
|
4890 |
+
|
4891 |
+
public function getEtag()
|
4892 |
+
{
|
4893 |
+
return $this->etag;
|
4894 |
+
}
|
4895 |
+
|
4896 |
+
public function setItems($items)
|
4897 |
+
{
|
4898 |
+
$this->items = $items;
|
4899 |
+
}
|
4900 |
+
|
4901 |
+
public function getItems()
|
4902 |
+
{
|
4903 |
+
return $this->items;
|
4904 |
+
}
|
4905 |
+
|
4906 |
+
public function setKind($kind)
|
4907 |
+
{
|
4908 |
+
$this->kind = $kind;
|
4909 |
+
}
|
4910 |
+
|
4911 |
+
public function getKind()
|
4912 |
+
{
|
4913 |
+
return $this->kind;
|
4914 |
+
}
|
4915 |
+
|
4916 |
+
public function setNextLink($nextLink)
|
4917 |
+
{
|
4918 |
+
$this->nextLink = $nextLink;
|
4919 |
+
}
|
4920 |
+
|
4921 |
+
public function getNextLink()
|
4922 |
+
{
|
4923 |
+
return $this->nextLink;
|
4924 |
+
}
|
4925 |
+
|
4926 |
+
public function setNextPageToken($nextPageToken)
|
4927 |
+
{
|
4928 |
+
$this->nextPageToken = $nextPageToken;
|
4929 |
+
}
|
4930 |
+
|
4931 |
+
public function getNextPageToken()
|
4932 |
+
{
|
4933 |
+
return $this->nextPageToken;
|
4934 |
+
}
|
4935 |
+
|
4936 |
+
public function setSelfLink($selfLink)
|
4937 |
+
{
|
4938 |
+
$this->selfLink = $selfLink;
|
4939 |
+
}
|
4940 |
+
|
4941 |
+
public function getSelfLink()
|
4942 |
+
{
|
4943 |
+
return $this->selfLink;
|
4944 |
+
}
|
4945 |
+
}
|
4946 |
+
|
4947 |
+
class Google_Service_Drive_ParentList extends Google_Collection
|
4948 |
+
{
|
4949 |
+
public $etag;
|
4950 |
+
protected $itemsType = 'Google_Service_Drive_ParentReference';
|
4951 |
+
protected $itemsDataType = 'array';
|
4952 |
+
public $kind;
|
4953 |
+
public $selfLink;
|
4954 |
+
|
4955 |
+
public function setEtag($etag)
|
4956 |
+
{
|
4957 |
+
$this->etag = $etag;
|
4958 |
+
}
|
4959 |
+
|
4960 |
+
public function getEtag()
|
4961 |
+
{
|
4962 |
+
return $this->etag;
|
4963 |
+
}
|
4964 |
+
|
4965 |
+
public function setItems($items)
|
4966 |
+
{
|
4967 |
+
$this->items = $items;
|
4968 |
+
}
|
4969 |
+
|
4970 |
+
public function getItems()
|
4971 |
+
{
|
4972 |
+
return $this->items;
|
4973 |
+
}
|
4974 |
+
|
4975 |
+
public function setKind($kind)
|
4976 |
+
{
|
4977 |
+
$this->kind = $kind;
|
4978 |
+
}
|
4979 |
+
|
4980 |
+
public function getKind()
|
4981 |
+
{
|
4982 |
+
return $this->kind;
|
4983 |
+
}
|
4984 |
+
|
4985 |
+
public function setSelfLink($selfLink)
|
4986 |
+
{
|
4987 |
+
$this->selfLink = $selfLink;
|
4988 |
+
}
|
4989 |
+
|
4990 |
+
public function getSelfLink()
|
4991 |
+
{
|
4992 |
+
return $this->selfLink;
|
4993 |
+
}
|
4994 |
+
}
|
4995 |
+
|
4996 |
+
class Google_Service_Drive_ParentReference extends Google_Model
|
4997 |
+
{
|
4998 |
+
public $id;
|
4999 |
+
public $isRoot;
|
5000 |
+
public $kind;
|
5001 |
+
public $parentLink;
|
5002 |
+
public $selfLink;
|
5003 |
+
|
5004 |
+
public function setId($id)
|
5005 |
+
{
|
5006 |
+
$this->id = $id;
|
5007 |
+
}
|
5008 |
+
|
5009 |
+
public function getId()
|
5010 |
+
{
|
5011 |
+
return $this->id;
|
5012 |
+
}
|
5013 |
+
|
5014 |
+
public function setIsRoot($isRoot)
|
5015 |
+
{
|
5016 |
+
$this->isRoot = $isRoot;
|
5017 |
+
}
|
5018 |
+
|
5019 |
+
public function getIsRoot()
|
5020 |
+
{
|
5021 |
+
return $this->isRoot;
|
5022 |
+
}
|
5023 |
+
|
5024 |
+
public function setKind($kind)
|
5025 |
+
{
|
5026 |
+
$this->kind = $kind;
|
5027 |
+
}
|
5028 |
+
|
5029 |
+
public function getKind()
|
5030 |
+
{
|
5031 |
+
return $this->kind;
|
5032 |
+
}
|
5033 |
+
|
5034 |
+
public function setParentLink($parentLink)
|
5035 |
+
{
|
5036 |
+
$this->parentLink = $parentLink;
|
5037 |
+
}
|
5038 |
+
|
5039 |
+
public function getParentLink()
|
5040 |
+
{
|
5041 |
+
return $this->parentLink;
|
5042 |
+
}
|
5043 |
+
|
5044 |
+
public function setSelfLink($selfLink)
|
5045 |
+
{
|
5046 |
+
$this->selfLink = $selfLink;
|
5047 |
+
}
|
5048 |
+
|
5049 |
+
public function getSelfLink()
|
5050 |
+
{
|
5051 |
+
return $this->selfLink;
|
5052 |
+
}
|
5053 |
+
}
|
5054 |
+
|
5055 |
+
class Google_Service_Drive_Permission extends Google_Collection
|
5056 |
+
{
|
5057 |
+
public $additionalRoles;
|
5058 |
+
public $authKey;
|
5059 |
+
public $domain;
|
5060 |
+
public $emailAddress;
|
5061 |
+
public $etag;
|
5062 |
+
public $id;
|
5063 |
+
public $kind;
|
5064 |
+
public $name;
|
5065 |
+
public $photoLink;
|
5066 |
+
public $role;
|
5067 |
+
public $selfLink;
|
5068 |
+
public $type;
|
5069 |
+
public $value;
|
5070 |
+
public $withLink;
|
5071 |
+
|
5072 |
+
public function setAdditionalRoles($additionalRoles)
|
5073 |
+
{
|
5074 |
+
$this->additionalRoles = $additionalRoles;
|
5075 |
+
}
|
5076 |
+
|
5077 |
+
public function getAdditionalRoles()
|
5078 |
+
{
|
5079 |
+
return $this->additionalRoles;
|
5080 |
+
}
|
5081 |
+
|
5082 |
+
public function setAuthKey($authKey)
|
5083 |
+
{
|
5084 |
+
$this->authKey = $authKey;
|
5085 |
+
}
|
5086 |
+
|
5087 |
+
public function getAuthKey()
|
5088 |
+
{
|
5089 |
+
return $this->authKey;
|
5090 |
+
}
|
5091 |
+
|
5092 |
+
public function setDomain($domain)
|
5093 |
+
{
|
5094 |
+
$this->domain = $domain;
|
5095 |
+
}
|
5096 |
+
|
5097 |
+
public function getDomain()
|
5098 |
+
{
|
5099 |
+
return $this->domain;
|
5100 |
+
}
|
5101 |
+
|
5102 |
+
public function setEmailAddress($emailAddress)
|
5103 |
+
{
|
5104 |
+
$this->emailAddress = $emailAddress;
|
5105 |
+
}
|
5106 |
+
|
5107 |
+
public function getEmailAddress()
|
5108 |
+
{
|
5109 |
+
return $this->emailAddress;
|
5110 |
+
}
|
5111 |
+
|
5112 |
+
public function setEtag($etag)
|
5113 |
+
{
|
5114 |
+
$this->etag = $etag;
|
5115 |
+
}
|
5116 |
+
|
5117 |
+
public function getEtag()
|
5118 |
+
{
|
5119 |
+
return $this->etag;
|
5120 |
+
}
|
5121 |
+
|
5122 |
+
public function setId($id)
|
5123 |
+
{
|
5124 |
+
$this->id = $id;
|
5125 |
+
}
|
5126 |
+
|
5127 |
+
public function getId()
|
5128 |
+
{
|
5129 |
+
return $this->id;
|
5130 |
+
}
|
5131 |
+
|
5132 |
+
public function setKind($kind)
|
5133 |
+
{
|
5134 |
+
$this->kind = $kind;
|
5135 |
+
}
|
5136 |
+
|
5137 |
+
public function getKind()
|
5138 |
+
{
|
5139 |
+
return $this->kind;
|
5140 |
+
}
|
5141 |
+
|
5142 |
+
public function setName($name)
|
5143 |
+
{
|
5144 |
+
$this->name = $name;
|
5145 |
+
}
|
5146 |
+
|
5147 |
+
public function getName()
|
5148 |
+
{
|
5149 |
+
return $this->name;
|
5150 |
+
}
|
5151 |
+
|
5152 |
+
public function setPhotoLink($photoLink)
|
5153 |
+
{
|
5154 |
+
$this->photoLink = $photoLink;
|
5155 |
+
}
|
5156 |
+
|
5157 |
+
public function getPhotoLink()
|
5158 |
+
{
|
5159 |
+
return $this->photoLink;
|
5160 |
+
}
|
5161 |
+
|
5162 |
+
public function setRole($role)
|
5163 |
+
{
|
5164 |
+
$this->role = $role;
|
5165 |
+
}
|
5166 |
+
|
5167 |
+
public function getRole()
|
5168 |
+
{
|
5169 |
+
return $this->role;
|
5170 |
+
}
|
5171 |
+
|
5172 |
+
public function setSelfLink($selfLink)
|
5173 |
+
{
|
5174 |
+
$this->selfLink = $selfLink;
|
5175 |
+
}
|
5176 |
+
|
5177 |
+
public function getSelfLink()
|
5178 |
+
{
|
5179 |
+
return $this->selfLink;
|
5180 |
+
}
|
5181 |
+
|
5182 |
+
public function setType($type)
|
5183 |
+
{
|
5184 |
+
$this->type = $type;
|
5185 |
+
}
|
5186 |
+
|
5187 |
+
public function getType()
|
5188 |
+
{
|
5189 |
+
return $this->type;
|
5190 |
+
}
|
5191 |
+
|
5192 |
+
public function setValue($value)
|
5193 |
+
{
|
5194 |
+
$this->value = $value;
|
5195 |
+
}
|
5196 |
+
|
5197 |
+
public function getValue()
|
5198 |
+
{
|
5199 |
+
return $this->value;
|
5200 |
+
}
|
5201 |
+
|
5202 |
+
public function setWithLink($withLink)
|
5203 |
+
{
|
5204 |
+
$this->withLink = $withLink;
|
5205 |
+
}
|
5206 |
+
|
5207 |
+
public function getWithLink()
|
5208 |
+
{
|
5209 |
+
return $this->withLink;
|
5210 |
+
}
|
5211 |
+
}
|
5212 |
+
|
5213 |
+
class Google_Service_Drive_PermissionId extends Google_Model
|
5214 |
+
{
|
5215 |
+
public $id;
|
5216 |
+
public $kind;
|
5217 |
+
|
5218 |
+
public function setId($id)
|
5219 |
+
{
|
5220 |
+
$this->id = $id;
|
5221 |
+
}
|
5222 |
+
|
5223 |
+
public function getId()
|
5224 |
+
{
|
5225 |
+
return $this->id;
|
5226 |
+
}
|
5227 |
+
|
5228 |
+
public function setKind($kind)
|
5229 |
+
{
|
5230 |
+
$this->kind = $kind;
|
5231 |
+
}
|
5232 |
+
|
5233 |
+
public function getKind()
|
5234 |
+
{
|
5235 |
+
return $this->kind;
|
5236 |
+
}
|
5237 |
+
}
|
5238 |
+
|
5239 |
+
class Google_Service_Drive_PermissionList extends Google_Collection
|
5240 |
+
{
|
5241 |
+
public $etag;
|
5242 |
+
protected $itemsType = 'Google_Service_Drive_Permission';
|
5243 |
+
protected $itemsDataType = 'array';
|
5244 |
+
public $kind;
|
5245 |
+
public $selfLink;
|
5246 |
+
|
5247 |
+
public function setEtag($etag)
|
5248 |
+
{
|
5249 |
+
$this->etag = $etag;
|
5250 |
+
}
|
5251 |
+
|
5252 |
+
public function getEtag()
|
5253 |
+
{
|
5254 |
+
return $this->etag;
|
5255 |
+
}
|
5256 |
+
|
5257 |
+
public function setItems($items)
|
5258 |
+
{
|
5259 |
+
$this->items = $items;
|
5260 |
+
}
|
5261 |
+
|
5262 |
+
public function getItems()
|
5263 |
+
{
|
5264 |
+
return $this->items;
|
5265 |
+
}
|
5266 |
+
|
5267 |
+
public function setKind($kind)
|
5268 |
+
{
|
5269 |
+
$this->kind = $kind;
|
5270 |
+
}
|
5271 |
+
|
5272 |
+
public function getKind()
|
5273 |
+
{
|
5274 |
+
return $this->kind;
|
5275 |
+
}
|
5276 |
+
|
5277 |
+
public function setSelfLink($selfLink)
|
5278 |
+
{
|
5279 |
+
$this->selfLink = $selfLink;
|
5280 |
+
}
|
5281 |
+
|
5282 |
+
public function getSelfLink()
|
5283 |
+
{
|
5284 |
+
return $this->selfLink;
|
5285 |
+
}
|
5286 |
+
}
|
5287 |
+
|
5288 |
+
class Google_Service_Drive_Property extends Google_Model
|
5289 |
+
{
|
5290 |
+
public $etag;
|
5291 |
+
public $key;
|
5292 |
+
public $kind;
|
5293 |
+
public $selfLink;
|
5294 |
+
public $value;
|
5295 |
+
public $visibility;
|
5296 |
+
|
5297 |
+
public function setEtag($etag)
|
5298 |
+
{
|
5299 |
+
$this->etag = $etag;
|
5300 |
+
}
|
5301 |
+
|
5302 |
+
public function getEtag()
|
5303 |
+
{
|
5304 |
+
return $this->etag;
|
5305 |
+
}
|
5306 |
+
|
5307 |
+
public function setKey($key)
|
5308 |
+
{
|
5309 |
+
$this->key = $key;
|
5310 |
+
}
|
5311 |
+
|
5312 |
+
public function getKey()
|
5313 |
+
{
|
5314 |
+
return $this->key;
|
5315 |
+
}
|
5316 |
+
|
5317 |
+
public function setKind($kind)
|
5318 |
+
{
|
5319 |
+
$this->kind = $kind;
|
5320 |
+
}
|
5321 |
+
|
5322 |
+
public function getKind()
|
5323 |
+
{
|
5324 |
+
return $this->kind;
|
5325 |
+
}
|
5326 |
+
|
5327 |
+
public function setSelfLink($selfLink)
|
5328 |
+
{
|
5329 |
+
$this->selfLink = $selfLink;
|
5330 |
+
}
|
5331 |
+
|
5332 |
+
public function getSelfLink()
|
5333 |
+
{
|
5334 |
+
return $this->selfLink;
|
5335 |
+
}
|
5336 |
+
|
5337 |
+
public function setValue($value)
|
5338 |
+
{
|
5339 |
+
$this->value = $value;
|
5340 |
+
}
|
5341 |
+
|
5342 |
+
public function getValue()
|
5343 |
+
{
|
5344 |
+
return $this->value;
|
5345 |
+
}
|
5346 |
+
|
5347 |
+
public function setVisibility($visibility)
|
5348 |
+
{
|
5349 |
+
$this->visibility = $visibility;
|
5350 |
+
}
|
5351 |
+
|
5352 |
+
public function getVisibility()
|
5353 |
+
{
|
5354 |
+
return $this->visibility;
|
5355 |
+
}
|
5356 |
+
}
|
5357 |
+
|
5358 |
+
class Google_Service_Drive_PropertyList extends Google_Collection
|
5359 |
+
{
|
5360 |
+
public $etag;
|
5361 |
+
protected $itemsType = 'Google_Service_Drive_Property';
|
5362 |
+
protected $itemsDataType = 'array';
|
5363 |
+
public $kind;
|
5364 |
+
public $selfLink;
|
5365 |
+
|
5366 |
+
public function setEtag($etag)
|
5367 |
+
{
|
5368 |
+
$this->etag = $etag;
|
5369 |
+
}
|
5370 |
+
|
5371 |
+
public function getEtag()
|
5372 |
+
{
|
5373 |
+
return $this->etag;
|
5374 |
+
}
|
5375 |
+
|
5376 |
+
public function setItems($items)
|
5377 |
+
{
|
5378 |
+
$this->items = $items;
|
5379 |
+
}
|
5380 |
+
|
5381 |
+
public function getItems()
|
5382 |
+
{
|
5383 |
+
return $this->items;
|
5384 |
+
}
|
5385 |
+
|
5386 |
+
public function setKind($kind)
|
5387 |
+
{
|
5388 |
+
$this->kind = $kind;
|
5389 |
+
}
|
5390 |
+
|
5391 |
+
public function getKind()
|
5392 |
+
{
|
5393 |
+
return $this->kind;
|
5394 |
+
}
|
5395 |
+
|
5396 |
+
public function setSelfLink($selfLink)
|
5397 |
+
{
|
5398 |
+
$this->selfLink = $selfLink;
|
5399 |
+
}
|
5400 |
+
|
5401 |
+
public function getSelfLink()
|
5402 |
+
{
|
5403 |
+
return $this->selfLink;
|
5404 |
+
}
|
5405 |
+
}
|
5406 |
+
|
5407 |
+
class Google_Service_Drive_Revision extends Google_Model
|
5408 |
+
{
|
5409 |
+
public $downloadUrl;
|
5410 |
+
public $etag;
|
5411 |
+
public $exportLinks;
|
5412 |
+
public $fileSize;
|
5413 |
+
public $id;
|
5414 |
+
public $kind;
|
5415 |
+
protected $lastModifyingUserType = 'Google_Service_Drive_User';
|
5416 |
+
protected $lastModifyingUserDataType = '';
|
5417 |
+
public $lastModifyingUserName;
|
5418 |
+
public $md5Checksum;
|
5419 |
+
public $mimeType;
|
5420 |
+
public $modifiedDate;
|
5421 |
+
public $originalFilename;
|
5422 |
+
public $pinned;
|
5423 |
+
public $publishAuto;
|
5424 |
+
public $published;
|
5425 |
+
public $publishedLink;
|
5426 |
+
public $publishedOutsideDomain;
|
5427 |
+
public $selfLink;
|
5428 |
+
|
5429 |
+
public function setDownloadUrl($downloadUrl)
|
5430 |
+
{
|
5431 |
+
$this->downloadUrl = $downloadUrl;
|
5432 |
+
}
|
5433 |
+
|
5434 |
+
public function getDownloadUrl()
|
5435 |
+
{
|
5436 |
+
return $this->downloadUrl;
|
5437 |
+
}
|
5438 |
+
|
5439 |
+
public function setEtag($etag)
|
5440 |
+
{
|
5441 |
+
$this->etag = $etag;
|
5442 |
+
}
|
5443 |
+
|
5444 |
+
public function getEtag()
|
5445 |
+
{
|
5446 |
+
return $this->etag;
|
5447 |
+
}
|
5448 |
+
|
5449 |
+
public function setExportLinks($exportLinks)
|
5450 |
+
{
|
5451 |
+
$this->exportLinks = $exportLinks;
|
5452 |
+
}
|
5453 |
+
|
5454 |
+
public function getExportLinks()
|
5455 |
+
{
|
5456 |
+
return $this->exportLinks;
|
5457 |
+
}
|
5458 |
+
|
5459 |
+
public function setFileSize($fileSize)
|
5460 |
+
{
|
5461 |
+
$this->fileSize = $fileSize;
|
5462 |
+
}
|
5463 |
+
|
5464 |
+
public function getFileSize()
|
5465 |
+
{
|
5466 |
+
return $this->fileSize;
|
5467 |
+
}
|
5468 |
+
|
5469 |
+
public function setId($id)
|
5470 |
+
{
|
5471 |
+
$this->id = $id;
|
5472 |
+
}
|
5473 |
+
|
5474 |
+
public function getId()
|
5475 |
+
{
|
5476 |
+
return $this->id;
|
5477 |
+
}
|
5478 |
+
|
5479 |
+
public function setKind($kind)
|
5480 |
+
{
|
5481 |
+
$this->kind = $kind;
|
5482 |
+
}
|
5483 |
+
|
5484 |
+
public function getKind()
|
5485 |
+
{
|
5486 |
+
return $this->kind;
|
5487 |
+
}
|
5488 |
+
|
5489 |
+
public function setLastModifyingUser(Google_Service_Drive_User $lastModifyingUser)
|
5490 |
+
{
|
5491 |
+
$this->lastModifyingUser = $lastModifyingUser;
|
5492 |
+
}
|
5493 |
+
|
5494 |
+
public function getLastModifyingUser()
|
5495 |
+
{
|
5496 |
+
return $this->lastModifyingUser;
|
5497 |
+
}
|
5498 |
+
|
5499 |
+
public function setLastModifyingUserName($lastModifyingUserName)
|
5500 |
+
{
|
5501 |
+
$this->lastModifyingUserName = $lastModifyingUserName;
|
5502 |
+
}
|
5503 |
+
|
5504 |
+
public function getLastModifyingUserName()
|
5505 |
+
{
|
5506 |
+
return $this->lastModifyingUserName;
|
5507 |
+
}
|
5508 |
+
|
5509 |
+
public function setMd5Checksum($md5Checksum)
|
5510 |
+
{
|
5511 |
+
$this->md5Checksum = $md5Checksum;
|
5512 |
+
}
|
5513 |
+
|
5514 |
+
public function getMd5Checksum()
|
5515 |
+
{
|
5516 |
+
return $this->md5Checksum;
|
5517 |
+
}
|
5518 |
+
|
5519 |
+
public function setMimeType($mimeType)
|
5520 |
+
{
|
5521 |
+
$this->mimeType = $mimeType;
|
5522 |
+
}
|
5523 |
+
|
5524 |
+
public function getMimeType()
|
5525 |
+
{
|
5526 |
+
return $this->mimeType;
|
5527 |
+
}
|
5528 |
+
|
5529 |
+
public function setModifiedDate($modifiedDate)
|
5530 |
+
{
|
5531 |
+
$this->modifiedDate = $modifiedDate;
|
5532 |
+
}
|
5533 |
+
|
5534 |
+
public function getModifiedDate()
|
5535 |
+
{
|
5536 |
+
return $this->modifiedDate;
|
5537 |
+
}
|
5538 |
+
|
5539 |
+
public function setOriginalFilename($originalFilename)
|
5540 |
+
{
|
5541 |
+
$this->originalFilename = $originalFilename;
|
5542 |
+
}
|
5543 |
+
|
5544 |
+
public function getOriginalFilename()
|
5545 |
+
{
|
5546 |
+
return $this->originalFilename;
|
5547 |
+
}
|
5548 |
+
|
5549 |
+
public function setPinned($pinned)
|
5550 |
+
{
|
5551 |
+
$this->pinned = $pinned;
|
5552 |
+
}
|
5553 |
+
|
5554 |
+
public function getPinned()
|
5555 |
+
{
|
5556 |
+
return $this->pinned;
|
5557 |
+
}
|
5558 |
+
|
5559 |
+
public function setPublishAuto($publishAuto)
|
5560 |
+
{
|
5561 |
+
$this->publishAuto = $publishAuto;
|
5562 |
+
}
|
5563 |
+
|
5564 |
+
public function getPublishAuto()
|
5565 |
+
{
|
5566 |
+
return $this->publishAuto;
|
5567 |
+
}
|
5568 |
+
|
5569 |
+
public function setPublished($published)
|
5570 |
+
{
|
5571 |
+
$this->published = $published;
|
5572 |
+
}
|
5573 |
+
|
5574 |
+
public function getPublished()
|
5575 |
+
{
|
5576 |
+
return $this->published;
|
5577 |
+
}
|
5578 |
+
|
5579 |
+
public function setPublishedLink($publishedLink)
|
5580 |
+
{
|
5581 |
+
$this->publishedLink = $publishedLink;
|
5582 |
+
}
|
5583 |
+
|
5584 |
+
public function getPublishedLink()
|
5585 |
+
{
|
5586 |
+
return $this->publishedLink;
|
5587 |
+
}
|
5588 |
+
|
5589 |
+
public function setPublishedOutsideDomain($publishedOutsideDomain)
|
5590 |
+
{
|
5591 |
+
$this->publishedOutsideDomain = $publishedOutsideDomain;
|
5592 |
+
}
|
5593 |
+
|
5594 |
+
public function getPublishedOutsideDomain()
|
5595 |
+
{
|
5596 |
+
return $this->publishedOutsideDomain;
|
5597 |
+
}
|
5598 |
+
|
5599 |
+
public function setSelfLink($selfLink)
|
5600 |
+
{
|
5601 |
+
$this->selfLink = $selfLink;
|
5602 |
+
}
|
5603 |
+
|
5604 |
+
public function getSelfLink()
|
5605 |
+
{
|
5606 |
+
return $this->selfLink;
|
5607 |
+
}
|
5608 |
+
}
|
5609 |
+
|
5610 |
+
class Google_Service_Drive_RevisionList extends Google_Collection
|
5611 |
+
{
|
5612 |
+
public $etag;
|
5613 |
+
protected $itemsType = 'Google_Service_Drive_Revision';
|
5614 |
+
protected $itemsDataType = 'array';
|
5615 |
+
public $kind;
|
5616 |
+
public $selfLink;
|
5617 |
+
|
5618 |
+
public function setEtag($etag)
|
5619 |
+
{
|
5620 |
+
$this->etag = $etag;
|
5621 |
+
}
|
5622 |
+
|
5623 |
+
public function getEtag()
|
5624 |
+
{
|
5625 |
+
return $this->etag;
|
5626 |
+
}
|
5627 |
+
|
5628 |
+
public function setItems($items)
|
5629 |
+
{
|
5630 |
+
$this->items = $items;
|
5631 |
+
}
|
5632 |
+
|
5633 |
+
public function getItems()
|
5634 |
+
{
|
5635 |
+
return $this->items;
|
5636 |
+
}
|
5637 |
+
|
5638 |
+
public function setKind($kind)
|
5639 |
+
{
|
5640 |
+
$this->kind = $kind;
|
5641 |
+
}
|
5642 |
+
|
5643 |
+
public function getKind()
|
5644 |
+
{
|
5645 |
+
return $this->kind;
|
5646 |
+
}
|
5647 |
+
|
5648 |
+
public function setSelfLink($selfLink)
|
5649 |
+
{
|
5650 |
+
$this->selfLink = $selfLink;
|
5651 |
+
}
|
5652 |
+
|
5653 |
+
public function getSelfLink()
|
5654 |
+
{
|
5655 |
+
return $this->selfLink;
|
5656 |
+
}
|
5657 |
+
}
|
5658 |
+
|
5659 |
+
class Google_Service_Drive_User extends Google_Model
|
5660 |
+
{
|
5661 |
+
public $displayName;
|
5662 |
+
public $isAuthenticatedUser;
|
5663 |
+
public $kind;
|
5664 |
+
public $permissionId;
|
5665 |
+
protected $pictureType = 'Google_Service_Drive_UserPicture';
|
5666 |
+
protected $pictureDataType = '';
|
5667 |
+
|
5668 |
+
public function setDisplayName($displayName)
|
5669 |
+
{
|
5670 |
+
$this->displayName = $displayName;
|
5671 |
+
}
|
5672 |
+
|
5673 |
+
public function getDisplayName()
|
5674 |
+
{
|
5675 |
+
return $this->displayName;
|
5676 |
+
}
|
5677 |
+
|
5678 |
+
public function setIsAuthenticatedUser($isAuthenticatedUser)
|
5679 |
+
{
|
5680 |
+
$this->isAuthenticatedUser = $isAuthenticatedUser;
|
5681 |
+
}
|
5682 |
+
|
5683 |
+
public function getIsAuthenticatedUser()
|
5684 |
+
{
|
5685 |
+
return $this->isAuthenticatedUser;
|
5686 |
+
}
|
5687 |
+
|
5688 |
+
public function setKind($kind)
|
5689 |
+
{
|
5690 |
+
$this->kind = $kind;
|
5691 |
+
}
|
5692 |
+
|
5693 |
+
public function getKind()
|
5694 |
+
{
|
5695 |
+
return $this->kind;
|
5696 |
+
}
|
5697 |
+
|
5698 |
+
public function setPermissionId($permissionId)
|
5699 |
+
{
|
5700 |
+
$this->permissionId = $permissionId;
|
5701 |
+
}
|
5702 |
+
|
5703 |
+
public function getPermissionId()
|
5704 |
+
{
|
5705 |
+
return $this->permissionId;
|
5706 |
+
}
|
5707 |
+
|
5708 |
+
public function setPicture(Google_Service_Drive_UserPicture $picture)
|
5709 |
+
{
|
5710 |
+
$this->picture = $picture;
|
5711 |
+
}
|
5712 |
+
|
5713 |
+
public function getPicture()
|
5714 |
+
{
|
5715 |
+
return $this->picture;
|
5716 |
+
}
|
5717 |
+
}
|
5718 |
+
|
5719 |
+
class Google_Service_Drive_UserPicture extends Google_Model
|
5720 |
+
{
|
5721 |
+
public $url;
|
5722 |
+
|
5723 |
+
public function setUrl($url)
|
5724 |
+
{
|
5725 |
+
$this->url = $url;
|
5726 |
+
}
|
5727 |
+
|
5728 |
+
public function getUrl()
|
5729 |
+
{
|
5730 |
+
return $this->url;
|
5731 |
+
}
|
5732 |
+
}
|
lib/Google/Service/Exception.php
ADDED
@@ -0,0 +1,53 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
require_once $GLOBALS['iwp_mmb_plugin_dir'].'/lib/Google/Exception.php';
|
4 |
+
|
5 |
+
class Google_Service_Exception extends Google_Exception
|
6 |
+
{
|
7 |
+
/**
|
8 |
+
* Optional list of errors returned in a JSON body of an HTTP error response.
|
9 |
+
*/
|
10 |
+
protected $errors = array();
|
11 |
+
|
12 |
+
/**
|
13 |
+
* Override default constructor to add ability to set $errors.
|
14 |
+
*
|
15 |
+
* @param string $message
|
16 |
+
* @param int $code
|
17 |
+
* @param Exception|null $previous
|
18 |
+
* @param [{string, string}] errors List of errors returned in an HTTP
|
19 |
+
* response. Defaults to [].
|
20 |
+
*/
|
21 |
+
public function __construct(
|
22 |
+
$message,
|
23 |
+
$code = 0,
|
24 |
+
Exception $previous = null,
|
25 |
+
$errors = array()
|
26 |
+
) {
|
27 |
+
if (version_compare(PHP_VERSION, '5.3.0') >= 0) {
|
28 |
+
parent::__construct($message, $code, $previous);
|
29 |
+
} else {
|
30 |
+
parent::__construct($message, $code);
|
31 |
+
}
|
32 |
+
|
33 |
+
$this->errors = $errors;
|
34 |
+
}
|
35 |
+
|
36 |
+
/**
|
37 |
+
* An example of the possible errors returned.
|
38 |
+
*
|
39 |
+
* {
|
40 |
+
* "domain": "global",
|
41 |
+
* "reason": "authError",
|
42 |
+
* "message": "Invalid Credentials",
|
43 |
+
* "locationType": "header",
|
44 |
+
* "location": "Authorization",
|
45 |
+
* }
|
46 |
+
*
|
47 |
+
* @return [{string, string}] List of errors return in an HTTP response or [].
|
48 |
+
*/
|
49 |
+
public function getErrors()
|
50 |
+
{
|
51 |
+
return $this->errors;
|
52 |
+
}
|
53 |
+
}
|
lib/Google/Service/Oauth2.php
ADDED
@@ -0,0 +1,412 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* Copyright 2010 Google Inc.
|
4 |
+
*
|
5 |
+
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
|
6 |
+
* use this file except in compliance with the License. You may obtain a copy of
|
7 |
+
* 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 under
|
15 |
+
* the License.
|
16 |
+
*/
|
17 |
+
|
18 |
+
/**
|
19 |
+
* Service definition for Oauth2 (v2).
|
20 |
+
*
|
21 |
+
* <p>
|
22 |
+
* Lets you access OAuth2 protocol related APIs.
|
23 |
+
* </p>
|
24 |
+
*
|
25 |
+
* <p>
|
26 |
+
* For more information about this service, see the API
|
27 |
+
* <a href="https://developers.google.com/accounts/docs/OAuth2" target="_blank">Documentation</a>
|
28 |
+
* </p>
|
29 |
+
*
|
30 |
+
* @author Google, Inc.
|
31 |
+
*/
|
32 |
+
class Google_Service_Oauth2 extends Google_Service
|
33 |
+
{
|
34 |
+
/** Know your basic profile info and list of people in your circles.. */
|
35 |
+
const PLUS_LOGIN = "https://www.googleapis.com/auth/plus.login";
|
36 |
+
/** Know who you are on Google. */
|
37 |
+
const PLUS_ME = "https://www.googleapis.com/auth/plus.me";
|
38 |
+
/** View your email address. */
|
39 |
+
const USERINFO_EMAIL = "https://www.googleapis.com/auth/userinfo.email";
|
40 |
+
/** View basic information about your account. */
|
41 |
+
const USERINFO_PROFILE = "https://www.googleapis.com/auth/userinfo.profile";
|
42 |
+
|
43 |
+
public $userinfo;
|
44 |
+
public $userinfo_v2_me;
|
45 |
+
private $base_methods;
|
46 |
+
|
47 |
+
/**
|
48 |
+
* Constructs the internal representation of the Oauth2 service.
|
49 |
+
*
|
50 |
+
* @param Google_Client $client
|
51 |
+
*/
|
52 |
+
public function __construct(Google_Client $client)
|
53 |
+
{
|
54 |
+
parent::__construct($client);
|
55 |
+
$this->servicePath = '';
|
56 |
+
$this->version = 'v2';
|
57 |
+
$this->serviceName = 'oauth2';
|
58 |
+
|
59 |
+
$this->userinfo = new Google_Service_Oauth2_Userinfo_Resource(
|
60 |
+
$this,
|
61 |
+
$this->serviceName,
|
62 |
+
'userinfo',
|
63 |
+
array(
|
64 |
+
'methods' => array(
|
65 |
+
'get' => array(
|
66 |
+
'path' => 'oauth2/v2/userinfo',
|
67 |
+
'httpMethod' => 'GET',
|
68 |
+
'parameters' => array(),
|
69 |
+
),
|
70 |
+
)
|
71 |
+
)
|
72 |
+
);
|
73 |
+
$this->userinfo_v2_me = new Google_Service_Oauth2_UserinfoV2Me_Resource(
|
74 |
+
$this,
|
75 |
+
$this->serviceName,
|
76 |
+
'me',
|
77 |
+
array(
|
78 |
+
'methods' => array(
|
79 |
+
'get' => array(
|
80 |
+
'path' => 'userinfo/v2/me',
|
81 |
+
'httpMethod' => 'GET',
|
82 |
+
'parameters' => array(),
|
83 |
+
),
|
84 |
+
)
|
85 |
+
)
|
86 |
+
);
|
87 |
+
$this->base_methods = new Google_Service_Resource(
|
88 |
+
$this,
|
89 |
+
$this->serviceName,
|
90 |
+
'',
|
91 |
+
array(
|
92 |
+
'methods' => array(
|
93 |
+
'tokeninfo' => array(
|
94 |
+
'path' => 'oauth2/v2/tokeninfo',
|
95 |
+
'httpMethod' => 'POST',
|
96 |
+
'parameters' => array(
|
97 |
+
'access_token' => array(
|
98 |
+
'location' => 'query',
|
99 |
+
'type' => 'string',
|
100 |
+
),
|
101 |
+
'id_token' => array(
|
102 |
+
'location' => 'query',
|
103 |
+
'type' => 'string',
|
104 |
+
),
|
105 |
+
),
|
106 |
+
),
|
107 |
+
)
|
108 |
+
)
|
109 |
+
);
|
110 |
+
}
|
111 |
+
/**
|
112 |
+
* (tokeninfo)
|
113 |
+
*
|
114 |
+
* @param array $optParams Optional parameters.
|
115 |
+
*
|
116 |
+
* @opt_param string access_token
|
117 |
+
*
|
118 |
+
* @opt_param string id_token
|
119 |
+
*
|
120 |
+
* @return Google_Service_Oauth2_Tokeninfo
|
121 |
+
*/
|
122 |
+
public function tokeninfo($optParams = array())
|
123 |
+
{
|
124 |
+
$params = array();
|
125 |
+
$params = array_merge($params, $optParams);
|
126 |
+
return $this->base_methods->call('tokeninfo', array($params), "Google_Service_Oauth2_Tokeninfo");
|
127 |
+
}
|
128 |
+
}
|
129 |
+
|
130 |
+
|
131 |
+
/**
|
132 |
+
* The "userinfo" collection of methods.
|
133 |
+
* Typical usage is:
|
134 |
+
* <code>
|
135 |
+
* $oauth2Service = new Google_Service_Oauth2(...);
|
136 |
+
* $userinfo = $oauth2Service->userinfo;
|
137 |
+
* </code>
|
138 |
+
*/
|
139 |
+
class Google_Service_Oauth2_Userinfo_Resource extends Google_Service_Resource
|
140 |
+
{
|
141 |
+
|
142 |
+
/**
|
143 |
+
* (userinfo.get)
|
144 |
+
*
|
145 |
+
* @param array $optParams Optional parameters.
|
146 |
+
* @return Google_Service_Oauth2_Userinfoplus
|
147 |
+
*/
|
148 |
+
public function get($optParams = array())
|
149 |
+
{
|
150 |
+
$params = array();
|
151 |
+
$params = array_merge($params, $optParams);
|
152 |
+
return $this->call('get', array($params), "Google_Service_Oauth2_Userinfoplus");
|
153 |
+
}
|
154 |
+
}
|
155 |
+
|
156 |
+
/**
|
157 |
+
* The "v2" collection of methods.
|
158 |
+
* Typical usage is:
|
159 |
+
* <code>
|
160 |
+
* $oauth2Service = new Google_Service_Oauth2(...);
|
161 |
+
* $v2 = $oauth2Service->v2;
|
162 |
+
* </code>
|
163 |
+
*/
|
164 |
+
class Google_Service_Oauth2_UserinfoV2_Resource extends Google_Service_Resource
|
165 |
+
{
|
166 |
+
|
167 |
+
}
|
168 |
+
|
169 |
+
/**
|
170 |
+
* The "me" collection of methods.
|
171 |
+
* Typical usage is:
|
172 |
+
* <code>
|
173 |
+
* $oauth2Service = new Google_Service_Oauth2(...);
|
174 |
+
* $me = $oauth2Service->me;
|
175 |
+
* </code>
|
176 |
+
*/
|
177 |
+
class Google_Service_Oauth2_UserinfoV2Me_Resource extends Google_Service_Resource
|
178 |
+
{
|
179 |
+
|
180 |
+
/**
|
181 |
+
* (me.get)
|
182 |
+
*
|
183 |
+
* @param array $optParams Optional parameters.
|
184 |
+
* @return Google_Service_Oauth2_Userinfoplus
|
185 |
+
*/
|
186 |
+
public function get($optParams = array())
|
187 |
+
{
|
188 |
+
$params = array();
|
189 |
+
$params = array_merge($params, $optParams);
|
190 |
+
return $this->call('get', array($params), "Google_Service_Oauth2_Userinfoplus");
|
191 |
+
}
|
192 |
+
}
|
193 |
+
|
194 |
+
|
195 |
+
|
196 |
+
|
197 |
+
class Google_Service_Oauth2_Tokeninfo extends Google_Model
|
198 |
+
{
|
199 |
+
public $accessType;
|
200 |
+
public $audience;
|
201 |
+
public $email;
|
202 |
+
public $expiresIn;
|
203 |
+
public $issuedTo;
|
204 |
+
public $scope;
|
205 |
+
public $userId;
|
206 |
+
public $verifiedEmail;
|
207 |
+
|
208 |
+
public function setAccessType($accessType)
|
209 |
+
{
|
210 |
+
$this->accessType = $accessType;
|
211 |
+
}
|
212 |
+
|
213 |
+
public function getAccessType()
|
214 |
+
{
|
215 |
+
return $this->accessType;
|
216 |
+
}
|
217 |
+
|
218 |
+
public function setAudience($audience)
|
219 |
+
{
|
220 |
+
$this->audience = $audience;
|
221 |
+
}
|
222 |
+
|
223 |
+
public function getAudience()
|
224 |
+
{
|
225 |
+
return $this->audience;
|
226 |
+
}
|
227 |
+
|
228 |
+
public function setEmail($email)
|
229 |
+
{
|
230 |
+
$this->email = $email;
|
231 |
+
}
|
232 |
+
|
233 |
+
public function getEmail()
|
234 |
+
{
|
235 |
+
return $this->email;
|
236 |
+
}
|
237 |
+
|
238 |
+
public function setExpiresIn($expiresIn)
|
239 |
+
{
|
240 |
+
$this->expiresIn = $expiresIn;
|
241 |
+
}
|
242 |
+
|
243 |
+
public function getExpiresIn()
|
244 |
+
{
|
245 |
+
return $this->expiresIn;
|
246 |
+
}
|
247 |
+
|
248 |
+
public function setIssuedTo($issuedTo)
|
249 |
+
{
|
250 |
+
$this->issuedTo = $issuedTo;
|
251 |
+
}
|
252 |
+
|
253 |
+
public function getIssuedTo()
|
254 |
+
{
|
255 |
+
return $this->issuedTo;
|
256 |
+
}
|
257 |
+
|
258 |
+
public function setScope($scope)
|
259 |
+
{
|
260 |
+
$this->scope = $scope;
|
261 |
+
}
|
262 |
+
|
263 |
+
public function getScope()
|
264 |
+
{
|
265 |
+
return $this->scope;
|
266 |
+
}
|
267 |
+
|
268 |
+
public function setUserId($userId)
|
269 |
+
{
|
270 |
+
$this->userId = $userId;
|
271 |
+
}
|
272 |
+
|
273 |
+
public function getUserId()
|
274 |
+
{
|
275 |
+
return $this->userId;
|
276 |
+
}
|
277 |
+
|
278 |
+
public function setVerifiedEmail($verifiedEmail)
|
279 |
+
{
|
280 |
+
$this->verifiedEmail = $verifiedEmail;
|
281 |
+
}
|
282 |
+
|
283 |
+
public function getVerifiedEmail()
|
284 |
+
{
|
285 |
+
return $this->verifiedEmail;
|
286 |
+
}
|
287 |
+
}
|
288 |
+
|
289 |
+
class Google_Service_Oauth2_Userinfoplus extends Google_Model
|
290 |
+
{
|
291 |
+
public $email;
|
292 |
+
public $familyName;
|
293 |
+
public $gender;
|
294 |
+
public $givenName;
|
295 |
+
public $hd;
|
296 |
+
public $id;
|
297 |
+
public $link;
|
298 |
+
public $locale;
|
299 |
+
public $name;
|
300 |
+
public $picture;
|
301 |
+
public $verifiedEmail;
|
302 |
+
|
303 |
+
public function setEmail($email)
|
304 |
+
{
|
305 |
+
$this->email = $email;
|
306 |
+
}
|
307 |
+
|
308 |
+
public function getEmail()
|
309 |
+
{
|
310 |
+
return $this->email;
|
311 |
+
}
|
312 |
+
|
313 |
+
public function setFamilyName($familyName)
|
314 |
+
{
|
315 |
+
$this->familyName = $familyName;
|
316 |
+
}
|
317 |
+
|
318 |
+
public function getFamilyName()
|
319 |
+
{
|
320 |
+
return $this->familyName;
|
321 |
+
}
|
322 |
+
|
323 |
+
public function setGender($gender)
|
324 |
+
{
|
325 |
+
$this->gender = $gender;
|
326 |
+
}
|
327 |
+
|
328 |
+
public function getGender()
|
329 |
+
{
|
330 |
+
return $this->gender;
|
331 |
+
}
|
332 |
+
|
333 |
+
public function setGivenName($givenName)
|
334 |
+
{
|
335 |
+
$this->givenName = $givenName;
|
336 |
+
}
|
337 |
+
|
338 |
+
public function getGivenName()
|
339 |
+
{
|
340 |
+
return $this->givenName;
|
341 |
+
}
|
342 |
+
|
343 |
+
public function setHd($hd)
|
344 |
+
{
|
345 |
+
$this->hd = $hd;
|
346 |
+
}
|
347 |
+
|
348 |
+
public function getHd()
|
349 |
+
{
|
350 |
+
return $this->hd;
|
351 |
+
}
|
352 |
+
|
353 |
+
public function setId($id)
|
354 |
+
{
|
355 |
+
$this->id = $id;
|
356 |
+
}
|
357 |
+
|
358 |
+
public function getId()
|
359 |
+
{
|
360 |
+
return $this->id;
|
361 |
+
}
|
362 |
+
|
363 |
+
public function setLink($link)
|
364 |
+
{
|
365 |
+
$this->link = $link;
|
366 |
+
}
|
367 |
+
|
368 |
+
public function getLink()
|
369 |
+
{
|
370 |
+
return $this->link;
|
371 |
+
}
|
372 |
+
|
373 |
+
public function setLocale($locale)
|
374 |
+
{
|
375 |
+
$this->locale = $locale;
|
376 |
+
}
|
377 |
+
|
378 |
+
public function getLocale()
|
379 |
+
{
|
380 |
+
return $this->locale;
|
381 |
+
}
|
382 |
+
|
383 |
+
public function setName($name)
|
384 |
+
{
|
385 |
+
$this->name = $name;
|
386 |
+
}
|
387 |
+
|
388 |
+
public function getName()
|
389 |
+
{
|
390 |
+
return $this->name;
|
391 |
+
}
|
392 |
+
|
393 |
+
public function setPicture($picture)
|
394 |
+
{
|
395 |
+
$this->picture = $picture;
|
396 |
+
}
|
397 |
+
|
398 |
+
public function getPicture()
|
399 |
+
{
|
400 |
+
return $this->picture;
|
401 |
+
}
|
402 |
+
|
403 |
+
public function setVerifiedEmail($verifiedEmail)
|
404 |
+
{
|
405 |
+
$this->verifiedEmail = $verifiedEmail;
|
406 |
+
}
|
407 |
+
|
408 |
+
public function getVerifiedEmail()
|
409 |
+
{
|
410 |
+
return $this->verifiedEmail;
|
411 |
+
}
|
412 |
+
}
|
lib/Google/Service/Resource.php
ADDED
@@ -0,0 +1,210 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Copyright 2010 Google Inc.
|
4 |
+
*
|
5 |
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
6 |
+
* you may not use this file except in compliance with the License.
|
7 |
+
* You may obtain 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,
|
13 |
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14 |
+
* See the License for the specific language governing permissions and
|
15 |
+
* limitations under the License.
|
16 |
+
*/
|
17 |
+
|
18 |
+
require_once $GLOBALS['iwp_mmb_plugin_dir'].'/lib/Google/Client.php';
|
19 |
+
require_once $GLOBALS['iwp_mmb_plugin_dir'].'/lib/Google/Exception.php';
|
20 |
+
require_once $GLOBALS['iwp_mmb_plugin_dir'].'/lib/Google/Utils.php';
|
21 |
+
require_once $GLOBALS['iwp_mmb_plugin_dir'].'/lib/Google/Http/Request.php';
|
22 |
+
require_once $GLOBALS['iwp_mmb_plugin_dir'].'/lib/Google/Http/MediaFileUpload.php';
|
23 |
+
require_once $GLOBALS['iwp_mmb_plugin_dir'].'/lib/Google/Http/REST.php';
|
24 |
+
|
25 |
+
/**
|
26 |
+
* Implements the actual methods/resources of the discovered Google API using magic function
|
27 |
+
* calling overloading (__call()), which on call will see if the method name (plus.activities.list)
|
28 |
+
* is available in this service, and if so construct an apiHttpRequest representing it.
|
29 |
+
*
|
30 |
+
* @author Chris Chabot <chabotc@google.com>
|
31 |
+
* @author Chirag Shah <chirags@google.com>
|
32 |
+
*
|
33 |
+
*/
|
34 |
+
class Google_Service_Resource
|
35 |
+
{
|
36 |
+
// Valid query parameters that work, but don't appear in discovery.
|
37 |
+
private $stackParameters = array(
|
38 |
+
'alt' => array('type' => 'string', 'location' => 'query'),
|
39 |
+
'fields' => array('type' => 'string', 'location' => 'query'),
|
40 |
+
'trace' => array('type' => 'string', 'location' => 'query'),
|
41 |
+
'userIp' => array('type' => 'string', 'location' => 'query'),
|
42 |
+
'userip' => array('type' => 'string', 'location' => 'query'),
|
43 |
+
'quotaUser' => array('type' => 'string', 'location' => 'query'),
|
44 |
+
'data' => array('type' => 'string', 'location' => 'body'),
|
45 |
+
'mimeType' => array('type' => 'string', 'location' => 'header'),
|
46 |
+
'uploadType' => array('type' => 'string', 'location' => 'query'),
|
47 |
+
'mediaUpload' => array('type' => 'complex', 'location' => 'query'),
|
48 |
+
);
|
49 |
+
|
50 |
+
/** @var Google_Service $service */
|
51 |
+
private $service;
|
52 |
+
|
53 |
+
/** @var Google_Client $client */
|
54 |
+
private $client;
|
55 |
+
|
56 |
+
/** @var string $serviceName */
|
57 |
+
private $serviceName;
|
58 |
+
|
59 |
+
/** @var string $resourceName */
|
60 |
+
private $resourceName;
|
61 |
+
|
62 |
+
/** @var array $methods */
|
63 |
+
private $methods;
|
64 |
+
|
65 |
+
public function __construct($service, $serviceName, $resourceName, $resource)
|
66 |
+
{
|
67 |
+
$this->service = $service;
|
68 |
+
$this->client = $service->getClient();
|
69 |
+
$this->serviceName = $serviceName;
|
70 |
+
$this->resourceName = $resourceName;
|
71 |
+
$this->methods = isset($resource['methods']) ?
|
72 |
+
$resource['methods'] :
|
73 |
+
array($resourceName => $resource);
|
74 |
+
}
|
75 |
+
|
76 |
+
/**
|
77 |
+
* TODO(ianbarber): This function needs simplifying.
|
78 |
+
* @param $name
|
79 |
+
* @param $arguments
|
80 |
+
* @param $expected_class - optional, the expected class name
|
81 |
+
* @return Google_Http_Request|expected_class
|
82 |
+
* @throws Google_Exception
|
83 |
+
*/
|
84 |
+
public function call($name, $arguments, $expected_class = null)
|
85 |
+
{
|
86 |
+
if (! isset($this->methods[$name])) {
|
87 |
+
throw new Google_Exception(
|
88 |
+
"Unknown function: " .
|
89 |
+
"{$this->serviceName}->{$this->resourceName}->{$name}()"
|
90 |
+
);
|
91 |
+
}
|
92 |
+
$method = $this->methods[$name];
|
93 |
+
$parameters = $arguments[0];
|
94 |
+
|
95 |
+
// postBody is a special case since it's not defined in the discovery
|
96 |
+
// document as parameter, but we abuse the param entry for storing it.
|
97 |
+
$postBody = null;
|
98 |
+
if (isset($parameters['postBody'])) {
|
99 |
+
if ($parameters['postBody'] instanceof Google_Model) {
|
100 |
+
// In the cases the post body is an existing object, we want
|
101 |
+
// to use the smart method to create a simple object for
|
102 |
+
// for JSONification.
|
103 |
+
$parameters['postBody'] = $parameters['postBody']->toSimpleObject();
|
104 |
+
} else if (is_object($parameters['postBody'])) {
|
105 |
+
// If the post body is another kind of object, we will try and
|
106 |
+
// wrangle it into a sensible format.
|
107 |
+
$parameters['postBody'] =
|
108 |
+
$this->convertToArrayAndStripNulls($parameters['postBody']);
|
109 |
+
}
|
110 |
+
$postBody = json_encode($parameters['postBody']);
|
111 |
+
unset($parameters['postBody']);
|
112 |
+
}
|
113 |
+
|
114 |
+
// TODO(ianbarber): optParams here probably should have been
|
115 |
+
// handled already - this may well be redundant code.
|
116 |
+
if (isset($parameters['optParams'])) {
|
117 |
+
$optParams = $parameters['optParams'];
|
118 |
+
unset($parameters['optParams']);
|
119 |
+
$parameters = array_merge($parameters, $optParams);
|
120 |
+
}
|
121 |
+
|
122 |
+
if (!isset($method['parameters'])) {
|
123 |
+
$method['parameters'] = array();
|
124 |
+
}
|
125 |
+
|
126 |
+
$method['parameters'] = array_merge(
|
127 |
+
$method['parameters'],
|
128 |
+
$this->stackParameters
|
129 |
+
);
|
130 |
+
foreach ($parameters as $key => $val) {
|
131 |
+
if ($key != 'postBody' && ! isset($method['parameters'][$key])) {
|
132 |
+
throw new Google_Exception("($name) unknown parameter: '$key'");
|
133 |
+
}
|
134 |
+
}
|
135 |
+
|
136 |
+
foreach ($method['parameters'] as $paramName => $paramSpec) {
|
137 |
+
if (isset($paramSpec['required']) &&
|
138 |
+
$paramSpec['required'] &&
|
139 |
+
! isset($parameters[$paramName])
|
140 |
+
) {
|
141 |
+
throw new Google_Exception("($name) missing required param: '$paramName'");
|
142 |
+
}
|
143 |
+
if (isset($parameters[$paramName])) {
|
144 |
+
$value = $parameters[$paramName];
|
145 |
+
$parameters[$paramName] = $paramSpec;
|
146 |
+
$parameters[$paramName]['value'] = $value;
|
147 |
+
unset($parameters[$paramName]['required']);
|
148 |
+
} else {
|
149 |
+
// Ensure we don't pass nulls.
|
150 |
+
unset($parameters[$paramName]);
|
151 |
+
}
|
152 |
+
}
|
153 |
+
|
154 |
+
$servicePath = $this->service->servicePath;
|
155 |
+
|
156 |
+
$url = Google_Http_REST::createRequestUri(
|
157 |
+
$servicePath,
|
158 |
+
$method['path'],
|
159 |
+
$parameters
|
160 |
+
);
|
161 |
+
$httpRequest = new Google_Http_Request(
|
162 |
+
$url,
|
163 |
+
$method['httpMethod'],
|
164 |
+
null,
|
165 |
+
$postBody
|
166 |
+
);
|
167 |
+
$httpRequest->setBaseComponent($this->client->getBasePath());
|
168 |
+
|
169 |
+
if ($postBody) {
|
170 |
+
$contentTypeHeader = array();
|
171 |
+
$contentTypeHeader['content-type'] = 'application/json; charset=UTF-8';
|
172 |
+
$httpRequest->setRequestHeaders($contentTypeHeader);
|
173 |
+
$httpRequest->setPostBody($postBody);
|
174 |
+
}
|
175 |
+
|
176 |
+
$httpRequest = $this->client->getAuth()->sign($httpRequest);
|
177 |
+
$httpRequest->setExpectedClass($expected_class);
|
178 |
+
|
179 |
+
if (isset($parameters['data']) &&
|
180 |
+
($parameters['uploadType']['value'] == 'media' || $parameters['uploadType']['value'] == 'multipart')) {
|
181 |
+
// If we are doing a simple media upload, trigger that as a convenience.
|
182 |
+
$mfu = new Google_Http_MediaFileUpload(
|
183 |
+
$this->client,
|
184 |
+
$httpRequest,
|
185 |
+
isset($parameters['mimeType']) ? $parameters['mimeType']['value'] : 'application/octet-stream',
|
186 |
+
$parameters['data']['value']
|
187 |
+
);
|
188 |
+
}
|
189 |
+
|
190 |
+
if ($this->client->shouldDefer()) {
|
191 |
+
// If we are in batch or upload mode, return the raw request.
|
192 |
+
return $httpRequest;
|
193 |
+
}
|
194 |
+
|
195 |
+
return $this->client->execute($httpRequest);
|
196 |
+
}
|
197 |
+
|
198 |
+
protected function convertToArrayAndStripNulls($o)
|
199 |
+
{
|
200 |
+
$o = (array) $o;
|
201 |
+
foreach ($o as $k => $v) {
|
202 |
+
if ($v === null) {
|
203 |
+
unset($o[$k]);
|
204 |
+
} elseif (is_object($v) || is_array($v)) {
|
205 |
+
$o[$k] = $this->convertToArrayAndStripNulls($o[$k]);
|
206 |
+
}
|
207 |
+
}
|
208 |
+
return $o;
|
209 |
+
}
|
210 |
+
}
|
lib/Google/Signer/Abstract.php
ADDED
@@ -0,0 +1,29 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* Copyright 2011 Google Inc.
|
4 |
+
*
|
5 |
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
6 |
+
* you may not use this file except in compliance with the License.
|
7 |
+
* You may obtain 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,
|
13 |
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14 |
+
* See the License for the specific language governing permissions and
|
15 |
+
* limitations under the License.
|
16 |
+
*/
|
17 |
+
|
18 |
+
/**
|
19 |
+
* Signs data.
|
20 |
+
*
|
21 |
+
* @author Brian Eaton <beaton@google.com>
|
22 |
+
*/
|
23 |
+
abstract class Google_Signer_Abstract
|
24 |
+
{
|
25 |
+
/**
|
26 |
+
* Signs data, returns the signature as binary data.
|
27 |
+
*/
|
28 |
+
abstract public function sign($data);
|
29 |
+
}
|
lib/Google/Signer/P12.php
ADDED
@@ -0,0 +1,91 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* Copyright 2011 Google Inc.
|
4 |
+
*
|
5 |
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
6 |
+
* you may not use this file except in compliance with the License.
|
7 |
+
* You may obtain 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,
|
13 |
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14 |
+
* See the License for the specific language governing permissions and
|
15 |
+
* limitations under the License.
|
16 |
+
*/
|
17 |
+
|
18 |
+
require_once $GLOBALS['iwp_mmb_plugin_dir'].'/lib/Google/Auth/Exception.php';
|
19 |
+
require_once $GLOBALS['iwp_mmb_plugin_dir'].'/lib/Google/Signer/Abstract.php';
|
20 |
+
|
21 |
+
/**
|
22 |
+
* Signs data.
|
23 |
+
*
|
24 |
+
* Only used for testing.
|
25 |
+
*
|
26 |
+
* @author Brian Eaton <beaton@google.com>
|
27 |
+
*/
|
28 |
+
class Google_Signer_P12 extends Google_Signer_Abstract
|
29 |
+
{
|
30 |
+
// OpenSSL private key resource
|
31 |
+
private $privateKey;
|
32 |
+
|
33 |
+
// Creates a new signer from a .p12 file.
|
34 |
+
public function __construct($p12, $password)
|
35 |
+
{
|
36 |
+
if (!function_exists('openssl_x509_read')) {
|
37 |
+
throw new Google_Exception(
|
38 |
+
'The Google PHP API library needs the openssl PHP extension'
|
39 |
+
);
|
40 |
+
}
|
41 |
+
|
42 |
+
// If the private key is provided directly, then this isn't in the p12
|
43 |
+
// format. Different versions of openssl support different p12 formats
|
44 |
+
// and the key from google wasn't being accepted by the version available
|
45 |
+
// at the time.
|
46 |
+
if (!$password && strpos($p12, "-----BEGIN RSA PRIVATE KEY-----") !== false) {
|
47 |
+
$this->privateKey = openssl_pkey_get_private($p12);
|
48 |
+
} else {
|
49 |
+
// This throws on error
|
50 |
+
$certs = array();
|
51 |
+
if (!openssl_pkcs12_read($p12, $certs, $password)) {
|
52 |
+
throw new Google_Auth_Exception(
|
53 |
+
"Unable to parse the p12 file. " .
|
54 |
+
"Is this a .p12 file? Is the password correct? OpenSSL error: " .
|
55 |
+
openssl_error_string()
|
56 |
+
);
|
57 |
+
}
|
58 |
+
// TODO(beaton): is this part of the contract for the openssl_pkcs12_read
|
59 |
+
// method? What happens if there are multiple private keys? Do we care?
|
60 |
+
if (!array_key_exists("pkey", $certs) || !$certs["pkey"]) {
|
61 |
+
throw new Google_Auth_Exception("No private key found in p12 file.");
|
62 |
+
}
|
63 |
+
$this->privateKey = openssl_pkey_get_private($certs['pkey']);
|
64 |
+
}
|
65 |
+
|
66 |
+
if (!$this->privateKey) {
|
67 |
+
throw new Google_Auth_Exception("Unable to load private key");
|
68 |
+
}
|
69 |
+
}
|
70 |
+
|
71 |
+
public function __destruct()
|
72 |
+
{
|
73 |
+
if ($this->privateKey) {
|
74 |
+
openssl_pkey_free($this->privateKey);
|
75 |
+
}
|
76 |
+
}
|
77 |
+
|
78 |
+
public function sign($data)
|
79 |
+
{
|
80 |
+
if (version_compare(PHP_VERSION, '5.3.0') < 0) {
|
81 |
+
throw new Google_Auth_Exception(
|
82 |
+
"PHP 5.3.0 or higher is required to use service accounts."
|
83 |
+
);
|
84 |
+
}
|
85 |
+
$hash = defined("OPENSSL_ALGO_SHA256") ? OPENSSL_ALGO_SHA256 : "sha256";
|
86 |
+
if (!openssl_sign($data, $signature, $this->privateKey, $hash)) {
|
87 |
+
throw new Google_Auth_Exception("Unable to sign data");
|
88 |
+
}
|
89 |
+
return $signature;
|
90 |
+
}
|
91 |
+
}
|
lib/Google/Utils.php
ADDED
@@ -0,0 +1,135 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* Copyright 2011 Google Inc.
|
4 |
+
*
|
5 |
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
6 |
+
* you may not use this file except in compliance with the License.
|
7 |
+
* You may obtain 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,
|
13 |
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14 |
+
* See the License for the specific language governing permissions and
|
15 |
+
* limitations under the License.
|
16 |
+
*/
|
17 |
+
|
18 |
+
/**
|
19 |
+
* Collection of static utility methods used for convenience across
|
20 |
+
* the client library.
|
21 |
+
*
|
22 |
+
* @author Chirag Shah <chirags@google.com>
|
23 |
+
*/
|
24 |
+
class Google_Utils
|
25 |
+
{
|
26 |
+
public static function urlSafeB64Encode($data)
|
27 |
+
{
|
28 |
+
$b64 = base64_encode($data);
|
29 |
+
$b64 = str_replace(
|
30 |
+
array('+', '/', '\r', '\n', '='),
|
31 |
+
array('-', '_'),
|
32 |
+
$b64
|
33 |
+
);
|
34 |
+
return $b64;
|
35 |
+
}
|
36 |
+
|
37 |
+
public static function urlSafeB64Decode($b64)
|
38 |
+
{
|
39 |
+
$b64 = str_replace(
|
40 |
+
array('-', '_'),
|
41 |
+
array('+', '/'),
|
42 |
+
$b64
|
43 |
+
);
|
44 |
+
return base64_decode($b64);
|
45 |
+
}
|
46 |
+
|
47 |
+
/**
|
48 |
+
* Misc function used to count the number of bytes in a post body, in the
|
49 |
+
* world of multi-byte chars and the unpredictability of
|
50 |
+
* strlen/mb_strlen/sizeof, this is the only way to do that in a sane
|
51 |
+
* manner at the moment.
|
52 |
+
*
|
53 |
+
* This algorithm was originally developed for the
|
54 |
+
* Solar Framework by Paul M. Jones
|
55 |
+
*
|
56 |
+
* @link http://solarphp.com/
|
57 |
+
* @link http://svn.solarphp.com/core/trunk/Solar/Json.php
|
58 |
+
* @link http://framework.zend.com/svn/framework/standard/trunk/library/Zend/Json/Decoder.php
|
59 |
+
* @param string $str
|
60 |
+
* @return int The number of bytes in a string.
|
61 |
+
*/
|
62 |
+
public static function getStrLen($str)
|
63 |
+
{
|
64 |
+
$strlenVar = strlen($str);
|
65 |
+
$d = $ret = 0;
|
66 |
+
for ($count = 0; $count < $strlenVar; ++ $count) {
|
67 |
+
$ordinalValue = ord($str{$ret});
|
68 |
+
switch (true) {
|
69 |
+
case (($ordinalValue >= 0x20) && ($ordinalValue <= 0x7F)):
|
70 |
+
// characters U-00000000 - U-0000007F (same as ASCII)
|
71 |
+
$ret ++;
|
72 |
+
break;
|
73 |
+
case (($ordinalValue & 0xE0) == 0xC0):
|
74 |
+
// characters U-00000080 - U-000007FF, mask 110XXXXX
|
75 |
+
// see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
|
76 |
+
$ret += 2;
|
77 |
+
break;
|
78 |
+
case (($ordinalValue & 0xF0) == 0xE0):
|
79 |
+
// characters U-00000800 - U-0000FFFF, mask 1110XXXX
|
80 |
+
// see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
|
81 |
+
$ret += 3;
|
82 |
+
break;
|
83 |
+
case (($ordinalValue & 0xF8) == 0xF0):
|
84 |
+
// characters U-00010000 - U-001FFFFF, mask 11110XXX
|
85 |
+
// see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
|
86 |
+
$ret += 4;
|
87 |
+
break;
|
88 |
+
case (($ordinalValue & 0xFC) == 0xF8):
|
89 |
+
// characters U-00200000 - U-03FFFFFF, mask 111110XX
|
90 |
+
// see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
|
91 |
+
$ret += 5;
|
92 |
+
break;
|
93 |
+
case (($ordinalValue & 0xFE) == 0xFC):
|
94 |
+
// characters U-04000000 - U-7FFFFFFF, mask 1111110X
|
95 |
+
// see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
|
96 |
+
$ret += 6;
|
97 |
+
break;
|
98 |
+
default:
|
99 |
+
$ret ++;
|
100 |
+
}
|
101 |
+
}
|
102 |
+
return $ret;
|
103 |
+
}
|
104 |
+
|
105 |
+
/**
|
106 |
+
* Normalize all keys in an array to lower-case.
|
107 |
+
* @param array $arr
|
108 |
+
* @return array Normalized array.
|
109 |
+
*/
|
110 |
+
public static function normalize($arr)
|
111 |
+
{
|
112 |
+
if (!is_array($arr)) {
|
113 |
+
return array();
|
114 |
+
}
|
115 |
+
|
116 |
+
$normalized = array();
|
117 |
+
foreach ($arr as $key => $val) {
|
118 |
+
$normalized[strtolower($key)] = $val;
|
119 |
+
}
|
120 |
+
return $normalized;
|
121 |
+
}
|
122 |
+
|
123 |
+
/**
|
124 |
+
* Convert a string to camelCase
|
125 |
+
* @param string $value
|
126 |
+
* @return string
|
127 |
+
*/
|
128 |
+
public static function camelCase($value)
|
129 |
+
{
|
130 |
+
$value = ucwords(str_replace(array('-', '_'), ' ', $value));
|
131 |
+
$value = str_replace(' ', '', $value);
|
132 |
+
$value[0] = strtolower($value[0]);
|
133 |
+
return $value;
|
134 |
+
}
|
135 |
+
}
|
lib/Google/Utils/URITemplate.php
ADDED
@@ -0,0 +1,333 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* Copyright 2013 Google Inc.
|
4 |
+
*
|
5 |
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
6 |
+
* you may not use this file except in compliance with the License.
|
7 |
+
* You may obtain 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,
|
13 |
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14 |
+
* See the License for the specific language governing permissions and
|
15 |
+
* limitations under the License.
|
16 |
+
*/
|
17 |
+
|
18 |
+
/**
|
19 |
+
* Implementation of levels 1-3 of the URI Template spec.
|
20 |
+
* @see http://tools.ietf.org/html/rfc6570
|
21 |
+
*/
|
22 |
+
class Google_Utils_URITemplate
|
23 |
+
{
|
24 |
+
const TYPE_MAP = "1";
|
25 |
+
const TYPE_LIST = "2";
|
26 |
+
const TYPE_SCALAR = "4";
|
27 |
+
|
28 |
+
/**
|
29 |
+
* @var $operators array
|
30 |
+
* These are valid at the start of a template block to
|
31 |
+
* modify the way in which the variables inside are
|
32 |
+
* processed.
|
33 |
+
*/
|
34 |
+
private $operators = array(
|
35 |
+
"+" => "reserved",
|
36 |
+
"/" => "segments",
|
37 |
+
"." => "dotprefix",
|
38 |
+
"#" => "fragment",
|
39 |
+
";" => "semicolon",
|
40 |
+
"?" => "form",
|
41 |
+
"&" => "continuation"
|
42 |
+
);
|
43 |
+
|
44 |
+
/**
|
45 |
+
* @var reserved array
|
46 |
+
* These are the characters which should not be URL encoded in reserved
|
47 |
+
* strings.
|
48 |
+
*/
|
49 |
+
private $reserved = array(
|
50 |
+
"=", ",", "!", "@", "|", ":", "/", "?", "#",
|
51 |
+
"[", "]",'$', "&", "'", "(", ")", "*", "+", ";"
|
52 |
+
);
|
53 |
+
private $reservedEncoded = array(
|
54 |
+
"%3D", "%2C", "%21", "%40", "%7C", "%3A", "%2F", "%3F",
|
55 |
+
"%23", "%5B", "%5D", "%24", "%26", "%27", "%28", "%29",
|
56 |
+
"%2A", "%2B", "%3B"
|
57 |
+
);
|
58 |
+
|
59 |
+
public function parse($string, array $parameters)
|
60 |
+
{
|
61 |
+
return $this->resolveNextSection($string, $parameters);
|
62 |
+
}
|
63 |
+
|
64 |
+
/**
|
65 |
+
* This function finds the first matching {...} block and
|
66 |
+
* executes the replacement. It then calls itself to find
|
67 |
+
* subsequent blocks, if any.
|
68 |
+
*/
|
69 |
+
private function resolveNextSection($string, $parameters)
|
70 |
+
{
|
71 |
+
$start = strpos($string, "{");
|
72 |
+
if ($start === false) {
|
73 |
+
return $string;
|
74 |
+
}
|
75 |
+
$end = strpos($string, "}");
|
76 |
+
if ($end === false) {
|
77 |
+
return $string;
|
78 |
+
}
|
79 |
+
$string = $this->replace($string, $start, $end, $parameters);
|
80 |
+
return $this->resolveNextSection($string, $parameters);
|
81 |
+
}
|
82 |
+
|
83 |
+
private function replace($string, $start, $end, $parameters)
|
84 |
+
{
|
85 |
+
// We know a data block will have {} round it, so we can strip that.
|
86 |
+
$data = substr($string, $start + 1, $end - $start - 1);
|
87 |
+
|
88 |
+
// If the first character is one of the reserved operators, it effects
|
89 |
+
// the processing of the stream.
|
90 |
+
if (isset($this->operators[$data[0]])) {
|
91 |
+
$op = $this->operators[$data[0]];
|
92 |
+
$data = substr($data, 1);
|
93 |
+
$prefix = "";
|
94 |
+
$prefix_on_missing = false;
|
95 |
+
|
96 |
+
switch ($op) {
|
97 |
+
case "reserved":
|
98 |
+
// Reserved means certain characters should not be URL encoded
|
99 |
+
$data = $this->replaceVars($data, $parameters, ",", null, true);
|
100 |
+
break;
|
101 |
+
case "fragment":
|
102 |
+
// Comma separated with fragment prefix. Bare values only.
|
103 |
+
$prefix = "#";
|
104 |
+
$prefix_on_missing = true;
|
105 |
+
$data = $this->replaceVars($data, $parameters, ",", null, true);
|
106 |
+
break;
|
107 |
+
case "segments":
|
108 |
+
// Slash separated data. Bare values only.
|
109 |
+
$prefix = "/";
|
110 |
+
$data =$this->replaceVars($data, $parameters, "/");
|
111 |
+
break;
|
112 |
+
case "dotprefix":
|
113 |
+
// Dot separated data. Bare values only.
|
114 |
+
$prefix = ".";
|
115 |
+
$prefix_on_missing = true;
|
116 |
+
$data = $this->replaceVars($data, $parameters, ".");
|
117 |
+
break;
|
118 |
+
case "semicolon":
|
119 |
+
// Semicolon prefixed and separated. Uses the key name
|
120 |
+
$prefix = ";";
|
121 |
+
$data = $this->replaceVars($data, $parameters, ";", "=", false, true, false);
|
122 |
+
break;
|
123 |
+
case "form":
|
124 |
+
// Standard URL format. Uses the key name
|
125 |
+
$prefix = "?";
|
126 |
+
$data = $this->replaceVars($data, $parameters, "&", "=");
|
127 |
+
break;
|
128 |
+
case "continuation":
|
129 |
+
// Standard URL, but with leading ampersand. Uses key name.
|
130 |
+
$prefix = "&";
|
131 |
+
$data = $this->replaceVars($data, $parameters, "&", "=");
|
132 |
+
break;
|
133 |
+
}
|
134 |
+
|
135 |
+
// Add the initial prefix character if data is valid.
|
136 |
+
if ($data || ($data !== false && $prefix_on_missing)) {
|
137 |
+
$data = $prefix . $data;
|
138 |
+
}
|
139 |
+
|
140 |
+
} else {
|
141 |
+
// If no operator we replace with the defaults.
|
142 |
+
$data = $this->replaceVars($data, $parameters);
|
143 |
+
}
|
144 |
+
// This is chops out the {...} and replaces with the new section.
|
145 |
+
return substr($string, 0, $start) . $data . substr($string, $end + 1);
|
146 |
+
}
|
147 |
+
|
148 |
+
private function replaceVars(
|
149 |
+
$section,
|
150 |
+
$parameters,
|
151 |
+
$sep = ",",
|
152 |
+
$combine = null,
|
153 |
+
$reserved = false,
|
154 |
+
$tag_empty = false,
|
155 |
+
$combine_on_empty = true
|
156 |
+
) {
|
157 |
+
if (strpos($section, ",") === false) {
|
158 |
+
// If we only have a single value, we can immediately process.
|
159 |
+
return $this->combine(
|
160 |
+
$section,
|
161 |
+
$parameters,
|
162 |
+
$sep,
|
163 |
+
$combine,
|
164 |
+
$reserved,
|
165 |
+
$tag_empty,
|
166 |
+
$combine_on_empty
|
167 |
+
);
|
168 |
+
} else {
|
169 |
+
// If we have multiple values, we need to split and loop over them.
|
170 |
+
// Each is treated individually, then glued together with the
|
171 |
+
// separator character.
|
172 |
+
$vars = explode(",", $section);
|
173 |
+
return $this->combineList(
|
174 |
+
$vars,
|
175 |
+
$sep,
|
176 |
+
$parameters,
|
177 |
+
$combine,
|
178 |
+
$reserved,
|
179 |
+
false, // Never emit empty strings in multi-param replacements
|
180 |
+
$combine_on_empty
|
181 |
+
);
|
182 |
+
}
|
183 |
+
}
|
184 |
+
|
185 |
+
public function combine(
|
186 |
+
$key,
|
187 |
+
$parameters,
|
188 |
+
$sep,
|
189 |
+
$combine,
|
190 |
+
$reserved,
|
191 |
+
$tag_empty,
|
192 |
+
$combine_on_empty
|
193 |
+
) {
|
194 |
+
$length = false;
|
195 |
+
$explode = false;
|
196 |
+
$skip_final_combine = false;
|
197 |
+
$value = false;
|
198 |
+
|
199 |
+
// Check for length restriction.
|
200 |
+
if (strpos($key, ":") !== false) {
|
201 |
+
list($key, $length) = explode(":", $key);
|
202 |
+
}
|
203 |
+
|
204 |
+
// Check for explode parameter.
|
205 |
+
if ($key[strlen($key) - 1] == "*") {
|
206 |
+
$explode = true;
|
207 |
+
$key = substr($key, 0, -1);
|
208 |
+
$skip_final_combine = true;
|
209 |
+
}
|
210 |
+
|
211 |
+
// Define the list separator.
|
212 |
+
$list_sep = $explode ? $sep : ",";
|
213 |
+
|
214 |
+
if (isset($parameters[$key])) {
|
215 |
+
$data_type = $this->getDataType($parameters[$key]);
|
216 |
+
switch($data_type) {
|
217 |
+
case self::TYPE_SCALAR:
|
218 |
+
$value = $this->getValue($parameters[$key], $length);
|
219 |
+
break;
|
220 |
+
case self::TYPE_LIST:
|
221 |
+
$values = array();
|
222 |
+
foreach ($parameters[$key] as $pkey => $pvalue) {
|
223 |
+
$pvalue = $this->getValue($pvalue, $length);
|
224 |
+
if ($combine && $explode) {
|
225 |
+
$values[$pkey] = $key . $combine . $pvalue;
|
226 |
+
} else {
|
227 |
+
$values[$pkey] = $pvalue;
|
228 |
+
}
|
229 |
+
}
|
230 |
+
$value = implode($list_sep, $values);
|
231 |
+
if ($value == '') {
|
232 |
+
return '';
|
233 |
+
}
|
234 |
+
break;
|
235 |
+
case self::TYPE_MAP:
|
236 |
+
$values = array();
|
237 |
+
foreach ($parameters[$key] as $pkey => $pvalue) {
|
238 |
+
$pvalue = $this->getValue($pvalue, $length);
|
239 |
+
if ($explode) {
|
240 |
+
$pkey = $this->getValue($pkey, $length);
|
241 |
+
$values[] = $pkey . "=" . $pvalue; // Explode triggers = combine.
|
242 |
+
} else {
|
243 |
+
$values[] = $pkey;
|
244 |
+
$values[] = $pvalue;
|
245 |
+
}
|
246 |
+
}
|
247 |
+
$value = implode($list_sep, $values);
|
248 |
+
if ($value == '') {
|
249 |
+
return false;
|
250 |
+
}
|
251 |
+
break;
|
252 |
+
}
|
253 |
+
} else if ($tag_empty) {
|
254 |
+
// If we are just indicating empty values with their key name, return that.
|
255 |
+
return $key;
|
256 |
+
} else {
|
257 |
+
// Otherwise we can skip this variable due to not being defined.
|
258 |
+
return false;
|
259 |
+
}
|
260 |
+
|
261 |
+
if ($reserved) {
|
262 |
+
$value = str_replace($this->reservedEncoded, $this->reserved, $value);
|
263 |
+
}
|
264 |
+
|
265 |
+
// If we do not need to include the key name, we just return the raw
|
266 |
+
// value.
|
267 |
+
if (!$combine || $skip_final_combine) {
|
268 |
+
return $value;
|
269 |
+
}
|
270 |
+
|
271 |
+
// Else we combine the key name: foo=bar, if value is not the empty string.
|
272 |
+
return $key . ($value != '' || $combine_on_empty ? $combine . $value : '');
|
273 |
+
}
|
274 |
+
|
275 |
+
/**
|
276 |
+
* Return the type of a passed in value
|
277 |
+
*/
|
278 |
+
private function getDataType($data)
|
279 |
+
{
|
280 |
+
if (is_array($data)) {
|
281 |
+
reset($data);
|
282 |
+
if (key($data) !== 0) {
|
283 |
+
return self::TYPE_MAP;
|
284 |
+
}
|
285 |
+
return self::TYPE_LIST;
|
286 |
+
}
|
287 |
+
return self::TYPE_SCALAR;
|
288 |
+
}
|
289 |
+
|
290 |
+
/**
|
291 |
+
* Utility function that merges multiple combine calls
|
292 |
+
* for multi-key templates.
|
293 |
+
*/
|
294 |
+
private function combineList(
|
295 |
+
$vars,
|
296 |
+
$sep,
|
297 |
+
$parameters,
|
298 |
+
$combine,
|
299 |
+
$reserved,
|
300 |
+
$tag_empty,
|
301 |
+
$combine_on_empty
|
302 |
+
) {
|
303 |
+
$ret = array();
|
304 |
+
foreach ($vars as $var) {
|
305 |
+
$response = $this->combine(
|
306 |
+
$var,
|
307 |
+
$parameters,
|
308 |
+
$sep,
|
309 |
+
$combine,
|
310 |
+
$reserved,
|
311 |
+
$tag_empty,
|
312 |
+
$combine_on_empty
|
313 |
+
);
|
314 |
+
if ($response === false) {
|
315 |
+
continue;
|
316 |
+
}
|
317 |
+
$ret[] = $response;
|
318 |
+
}
|
319 |
+
return implode($sep, $ret);
|
320 |
+
}
|
321 |
+
|
322 |
+
/**
|
323 |
+
* Utility function to encode and trim values
|
324 |
+
*/
|
325 |
+
private function getValue($value, $length)
|
326 |
+
{
|
327 |
+
if ($length) {
|
328 |
+
$value = substr($value, 0, $length);
|
329 |
+
}
|
330 |
+
$value = rawurlencode($value);
|
331 |
+
return $value;
|
332 |
+
}
|
333 |
+
}
|
lib/Google/Verifier/Abstract.php
ADDED
@@ -0,0 +1,30 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* Copyright 2011 Google Inc.
|
4 |
+
*
|
5 |
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
6 |
+
* you may not use this file except in compliance with the License.
|
7 |
+
* You may obtain 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,
|
13 |
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14 |
+
* See the License for the specific language governing permissions and
|
15 |
+
* limitations under the License.
|
16 |
+
*/
|
17 |
+
|
18 |
+
/**
|
19 |
+
* Verifies signatures.
|
20 |
+
*
|
21 |
+
* @author Brian Eaton <beaton@google.com>
|
22 |
+
*/
|
23 |
+
abstract class Google_Verifier_Abstract
|
24 |
+
{
|
25 |
+
/**
|
26 |
+
* Checks a signature, returns true if the signature is correct,
|
27 |
+
* false otherwise.
|
28 |
+
*/
|
29 |
+
abstract public function verify($data, $signature);
|
30 |
+
}
|
lib/Google/Verifier/Pem.php
ADDED
@@ -0,0 +1,74 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* Copyright 2011 Google Inc.
|
4 |
+
*
|
5 |
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
6 |
+
* you may not use this file except in compliance with the License.
|
7 |
+
* You may obtain 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,
|
13 |
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14 |
+
* See the License for the specific language governing permissions and
|
15 |
+
* limitations under the License.
|
16 |
+
*/
|
17 |
+
|
18 |
+
require_once $GLOBALS['iwp_mmb_plugin_dir'].'/lib/Google/Auth/Exception.php';
|
19 |
+
require_once $GLOBALS['iwp_mmb_plugin_dir'].'/lib/Google/Verifier/Abstract.php';
|
20 |
+
|
21 |
+
/**
|
22 |
+
* Verifies signatures using PEM encoded certificates.
|
23 |
+
*
|
24 |
+
* @author Brian Eaton <beaton@google.com>
|
25 |
+
*/
|
26 |
+
class Google_Verifier_Pem extends Google_Verifier_Abstract
|
27 |
+
{
|
28 |
+
private $publicKey;
|
29 |
+
|
30 |
+
/**
|
31 |
+
* Constructs a verifier from the supplied PEM-encoded certificate.
|
32 |
+
*
|
33 |
+
* $pem: a PEM encoded certificate (not a file).
|
34 |
+
* @param $pem
|
35 |
+
* @throws Google_Auth_Exception
|
36 |
+
* @throws Google_Exception
|
37 |
+
*/
|
38 |
+
public function __construct($pem)
|
39 |
+
{
|
40 |
+
if (!function_exists('openssl_x509_read')) {
|
41 |
+
throw new Google_Exception('Google API PHP client needs the openssl PHP extension');
|
42 |
+
}
|
43 |
+
$this->publicKey = openssl_x509_read($pem);
|
44 |
+
if (!$this->publicKey) {
|
45 |
+
throw new Google_Auth_Exception("Unable to parse PEM: $pem");
|
46 |
+
}
|
47 |
+
}
|
48 |
+
|
49 |
+
public function __destruct()
|
50 |
+
{
|
51 |
+
if ($this->publicKey) {
|
52 |
+
openssl_x509_free($this->publicKey);
|
53 |
+
}
|
54 |
+
}
|
55 |
+
|
56 |
+
/**
|
57 |
+
* Verifies the signature on data.
|
58 |
+
*
|
59 |
+
* Returns true if the signature is valid, false otherwise.
|
60 |
+
* @param $data
|
61 |
+
* @param $signature
|
62 |
+
* @throws Google_Auth_Exception
|
63 |
+
* @return bool
|
64 |
+
*/
|
65 |
+
public function verify($data, $signature)
|
66 |
+
{
|
67 |
+
$hash = defined("OPENSSL_ALGO_SHA256") ? OPENSSL_ALGO_SHA256 : "sha256";
|
68 |
+
$status = openssl_verify($data, $signature, $this->publicKey, $hash);
|
69 |
+
if ($status === -1) {
|
70 |
+
throw new Google_Auth_Exception('Signature verification error: ' . openssl_error_string());
|
71 |
+
}
|
72 |
+
return $status === 1;
|
73 |
+
}
|
74 |
+
}
|
plugins/cleanup/cleanup.php
CHANGED
@@ -127,14 +127,14 @@ function iwp_mmb_handle_overhead($clear = false)
|
|
127 |
'MEMORY',
|
128 |
'ARCHIVE'
|
129 |
))) {
|
130 |
-
if ($wpdb->base_prefix != $wpdb->
|
131 |
-
if (preg_match('/^' . $wpdb->
|
132 |
if ($table['Data_free'] > 0) {
|
133 |
$total_gain += $table['Data_free'] / 1024;
|
134 |
$table_string .= $table['Name'] . ",";
|
135 |
}
|
136 |
}
|
137 |
-
} else if (preg_match('/^' . $wpdb->
|
138 |
continue;
|
139 |
} else {
|
140 |
if ($table['Data_free'] > 0) {
|
127 |
'MEMORY',
|
128 |
'ARCHIVE'
|
129 |
))) {
|
130 |
+
if ($wpdb->base_prefix != $wpdb->base_prefix) {
|
131 |
+
if (preg_match('/^' . $wpdb->base_prefix . '*/Ui', $table['Name'])) {
|
132 |
if ($table['Data_free'] > 0) {
|
133 |
$total_gain += $table['Data_free'] / 1024;
|
134 |
$table_string .= $table['Name'] . ",";
|
135 |
}
|
136 |
}
|
137 |
+
} else if (preg_match('/^' . $wpdb->base_prefix . '[0-9]{1,20}_*/Ui', $table['Name'])) {
|
138 |
continue;
|
139 |
} else {
|
140 |
if ($table['Data_free'] > 0) {
|
readme.txt
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
Contributors: infinitewp
|
3 |
Tags: admin, administration, amazon, api, authentication, automatic, dashboard, dropbox, events, integration, manage, multisite, multiple, notification, performance, s3, security, seo, stats, tracking, infinitewp, updates, backup, restore, iwp, infinite
|
4 |
Requires at least: 3.0
|
5 |
-
Tested up to: 3.
|
6 |
Stable tag: trunk
|
7 |
|
8 |
Install this plugin on unlimited sites and manage them all from a central dashboard.
|
@@ -48,6 +48,12 @@ Credits: [Vladimir Prelovac](http://prelovac.com/vladimir) for his worker plugin
|
|
48 |
|
49 |
== Changelog ==
|
50 |
|
|
|
|
|
|
|
|
|
|
|
|
|
51 |
= 1.2.11 =
|
52 |
* Fix: Bug fixes
|
53 |
|
2 |
Contributors: infinitewp
|
3 |
Tags: admin, administration, amazon, api, authentication, automatic, dashboard, dropbox, events, integration, manage, multisite, multiple, notification, performance, s3, security, seo, stats, tracking, infinitewp, updates, backup, restore, iwp, infinite
|
4 |
Requires at least: 3.0
|
5 |
+
Tested up to: 3.9
|
6 |
Stable tag: trunk
|
7 |
|
8 |
Install this plugin on unlimited sites and manage them all from a central dashboard.
|
48 |
|
49 |
== Changelog ==
|
50 |
|
51 |
+
= 1.2.12 =
|
52 |
+
* Improvement: Backup process will only backup WordPress tables which have configured prefix in wp-config.php.
|
53 |
+
* Improvement: Support for Google Drive for cloud backup addon.
|
54 |
+
* Improvement: Minor improvements.
|
55 |
+
* Fix: Bug fixes
|
56 |
+
|
57 |
= 1.2.11 =
|
58 |
* Fix: Bug fixes
|
59 |
|