Version Description
= After an upgrade from version 2 =
Please check all settings after the update:
- Dropbox authentication must be done again
- SugarSync authentication must be done again
- S3 Settings
- Google Storage is now in S3
- Check all your passwords
Download this release
Release Info
Developer | danielhuesken |
Plugin | BackWPup – WordPress Backup Plugin |
Version | 3.0.4 |
Comparing to | |
See all releases |
Code changes from version 3.0.3 to 3.0.4
- backwpup.php +11 -8
- inc/class-create-archive.php +11 -11
- inc/class-destination-msazure.php +1 -1
- inc/class-destination-s3-v1.php +610 -0
- inc/class-encryption.php +1 -1
- inc/class-install.php +14 -7
- inc/class-job.php +13 -6
- inc/class-jobtype-dbcheck.php +2 -2
- inc/class-jobtype-dbdump.php +5 -5
- inc/class-jobtype-dboptimize.php +2 -2
- inc/class-jobtype-file.php +40 -30
- inc/class-mysqldump.php +55 -50
- inc/class-option.php +3 -2
- inc/class-page-about.php +4 -4
- inc/class-page-backwpup.php +1 -1
- inc/class-page-jobs.php +13 -0
- inc/class-page-settings.php +18 -4
- languages/backwpup-de_DE.mo +0 -0
- languages/backwpup-de_DE.po +19 -19
- readme.txt +13 -4
- sdk/Aws_v1/README.md +183 -0
- sdk/Aws_v1/authentication/signable.interface.php +48 -0
- sdk/Aws_v1/authentication/signature_v2query.class.php +163 -0
- sdk/Aws_v1/authentication/signature_v3json.class.php +216 -0
- sdk/Aws_v1/authentication/signature_v3query.class.php +192 -0
- sdk/Aws_v1/authentication/signature_v4json.class.php +349 -0
- sdk/Aws_v1/authentication/signature_v4query.class.php +379 -0
- sdk/Aws_v1/authentication/signer.abstract.php +68 -0
- sdk/Aws_v1/config.inc.php +0 -0
- sdk/Aws_v1/extensions/dynamodbsessionhandler.class.php +518 -0
- sdk/Aws_v1/extensions/s3browserupload.class.php +173 -0
- sdk/Aws_v1/extensions/s3streamwrapper.class.php +606 -0
- sdk/Aws_v1/lib/cachecore/LICENSE +25 -0
- sdk/Aws_v1/lib/cachecore/README +1 -0
- sdk/Aws_v1/lib/cachecore/cacheapc.class.php +126 -0
- sdk/Aws_v1/lib/cachecore/cachecore.class.php +160 -0
- sdk/Aws_v1/lib/cachecore/cachefile.class.php +189 -0
- sdk/Aws_v1/lib/cachecore/cachemc.class.php +183 -0
- sdk/Aws_v1/lib/cachecore/cachepdo.class.php +297 -0
- sdk/Aws_v1/lib/cachecore/cachexcache.class.php +129 -0
- sdk/Aws_v1/lib/cachecore/icachecore.interface.php +66 -0
- sdk/Aws_v1/lib/dom/ArrayToDOMDocument.php +189 -0
- sdk/Aws_v1/lib/dom/Transmogrifier.php +317 -0
- sdk/Aws_v1/lib/requestcore/LICENSE +25 -0
- sdk/Aws_v1/lib/requestcore/README.md +15 -0
- sdk/Aws_v1/lib/requestcore/cacert.pem +3390 -0
- sdk/Aws_v1/lib/requestcore/requestcore.class.php +1055 -0
- sdk/Aws_v1/lib/yaml/LICENSE +19 -0
- sdk/Aws_v1/lib/yaml/README.markdown +15 -0
- sdk/Aws_v1/lib/yaml/lib/sfYaml.php +135 -0
- sdk/Aws_v1/lib/yaml/lib/sfYamlDumper.php +60 -0
- sdk/Aws_v1/lib/yaml/lib/sfYamlInline.php +442 -0
- sdk/Aws_v1/lib/yaml/lib/sfYamlParser.php +612 -0
- sdk/Aws_v1/sdk.class.php +1517 -0
- sdk/Aws_v1/services/as.class.php +1278 -0
- sdk/Aws_v1/services/cloudformation.class.php +570 -0
- sdk/Aws_v1/services/cloudfront.class.php +1486 -0
- sdk/Aws_v1/services/cloudsearch.class.php +573 -0
- sdk/Aws_v1/services/cloudwatch.class.php +676 -0
- sdk/Aws_v1/services/dynamodb.class.php +1189 -0
- sdk/Aws_v1/services/ec2.class.php +1324 -0
backwpup.php
CHANGED
@@ -5,7 +5,7 @@
|
|
5 |
* Description: WordPress Backup and more...
|
6 |
* Author: Inpsyde GmbH
|
7 |
* Author URI: http://inpsyde.com
|
8 |
-
* Version: 3.0.
|
9 |
* Text Domain: backwpup
|
10 |
* Domain Path: /languages/
|
11 |
* Network: true
|
@@ -35,7 +35,7 @@
|
|
35 |
if ( ! class_exists( 'BackWPup' ) ) {
|
36 |
|
37 |
// Don't activate on anything less than PHP 5.2.4 or WordPress 3.1
|
38 |
-
if ( version_compare(
|
39 |
require_once ABSPATH . 'wp-admin/includes/plugin.php';
|
40 |
deactivate_plugins( basename( __FILE__ ) );
|
41 |
if ( isset( $_GET['action'] ) && ( $_GET['action'] == 'activate' || $_GET['action'] == 'error_scrape' ) )
|
@@ -87,7 +87,7 @@ if ( ! class_exists( 'BackWPup' ) ) {
|
|
87 |
if ( is_file( dirname( __FILE__ ) . '/inc/features/class-features.php' ) )
|
88 |
require dirname( __FILE__ ) . '/inc/features/class-features.php';
|
89 |
//only in backend
|
90 |
-
if ( is_admin() && current_user_can( 'backwpup' ) && class_exists( 'BackWPup_Admin' ) )
|
91 |
BackWPup_Admin::getInstance();
|
92 |
//work with wp-cli
|
93 |
if ( defined( 'WP_CLI' ) && WP_CLI ) {
|
@@ -192,12 +192,13 @@ if ( ! class_exists( 'BackWPup' ) ) {
|
|
192 |
*/
|
193 |
private function autoloader_fallback() {
|
194 |
|
195 |
-
//add class files that should excluded that
|
196 |
$loaded_class_files = array( 'class-auto-update.php', 'class-documentation.php', 'class-features.php',
|
197 |
'class-destination-msazure.php', 'class-destination-msazure-pro.php',
|
198 |
'class-destination-email.php', 'class-destination-email-pro.php',
|
199 |
'class-destination-rsc.php', 'class-destination-rsc-pro.php',
|
200 |
'class-destination-s3.php', 'class-destination-s3-pro.php',
|
|
|
201 |
'class-destinations.php', 'class-jobtypes.php', 'class-wizards.php',
|
202 |
'class-wp-cli.php' );
|
203 |
|
@@ -231,7 +232,7 @@ if ( ! class_exists( 'BackWPup' ) ) {
|
|
231 |
public function plugin_init() {
|
232 |
|
233 |
//Add Admin Bar
|
234 |
-
if ( ! defined( 'DOING_CRON' ) && current_user_can( 'backwpup' ) && current_user_can( 'backwpup' ) && is_admin_bar_showing() &&
|
235 |
BackWPup_Adminbar::getInstance();
|
236 |
}
|
237 |
|
@@ -253,11 +254,13 @@ if ( ! class_exists( 'BackWPup' ) ) {
|
|
253 |
self::$destinations[ 'FTP' ] = new BackWPup_Destination_Ftp;
|
254 |
if ( function_exists( 'curl_exec' ) )
|
255 |
self::$destinations[ 'DROPBOX' ] = new BackWPup_Destination_Dropbox;
|
256 |
-
if ( function_exists( 'curl_exec' ) && version_compare( '5.3.3',
|
257 |
self::$destinations[ 'S3' ] = new BackWPup_Destination_S3;
|
258 |
-
|
|
|
|
|
259 |
self::$destinations[ 'MSAZURE' ] = new BackWPup_Destination_MSAzure;
|
260 |
-
if ( function_exists( 'curl_exec' ) && version_compare( '5.3.0',
|
261 |
self::$destinations[ 'RSC' ] = new BackWPup_Destination_RSC;
|
262 |
if ( function_exists( 'curl_exec' ) )
|
263 |
self::$destinations[ 'SUGARSYNC' ] = new BackWPup_Destination_SugarSync;
|
5 |
* Description: WordPress Backup and more...
|
6 |
* Author: Inpsyde GmbH
|
7 |
* Author URI: http://inpsyde.com
|
8 |
+
* Version: 3.0.4
|
9 |
* Text Domain: backwpup
|
10 |
* Domain Path: /languages/
|
11 |
* Network: true
|
35 |
if ( ! class_exists( 'BackWPup' ) ) {
|
36 |
|
37 |
// Don't activate on anything less than PHP 5.2.4 or WordPress 3.1
|
38 |
+
if ( version_compare( PHP_VERSION, '5.2.6', '<' ) || version_compare( get_bloginfo( 'version' ), '3.2', '<' ) ) {
|
39 |
require_once ABSPATH . 'wp-admin/includes/plugin.php';
|
40 |
deactivate_plugins( basename( __FILE__ ) );
|
41 |
if ( isset( $_GET['action'] ) && ( $_GET['action'] == 'activate' || $_GET['action'] == 'error_scrape' ) )
|
87 |
if ( is_file( dirname( __FILE__ ) . '/inc/features/class-features.php' ) )
|
88 |
require dirname( __FILE__ ) . '/inc/features/class-features.php';
|
89 |
//only in backend
|
90 |
+
if ( is_admin() && ( current_user_can( 'backwpup' ) || $GLOBALS[ 'pagenow' ] == 'plugins.php' ) && class_exists( 'BackWPup_Admin' ) )
|
91 |
BackWPup_Admin::getInstance();
|
92 |
//work with wp-cli
|
93 |
if ( defined( 'WP_CLI' ) && WP_CLI ) {
|
192 |
*/
|
193 |
private function autoloader_fallback() {
|
194 |
|
195 |
+
//add class files that should excluded that are classes that extra loaded with require or needs spl_autoload_register to work
|
196 |
$loaded_class_files = array( 'class-auto-update.php', 'class-documentation.php', 'class-features.php',
|
197 |
'class-destination-msazure.php', 'class-destination-msazure-pro.php',
|
198 |
'class-destination-email.php', 'class-destination-email-pro.php',
|
199 |
'class-destination-rsc.php', 'class-destination-rsc-pro.php',
|
200 |
'class-destination-s3.php', 'class-destination-s3-pro.php',
|
201 |
+
'class-destination-s3-v1.php', 'class-destination-s3-v1-pro.php',
|
202 |
'class-destinations.php', 'class-jobtypes.php', 'class-wizards.php',
|
203 |
'class-wp-cli.php' );
|
204 |
|
232 |
public function plugin_init() {
|
233 |
|
234 |
//Add Admin Bar
|
235 |
+
if ( ! defined( 'DOING_CRON' ) && current_user_can( 'backwpup' ) && current_user_can( 'backwpup' ) && is_admin_bar_showing() && get_site_option( 'backwpup_cfg_showadminbar', FALSE ) )
|
236 |
BackWPup_Adminbar::getInstance();
|
237 |
}
|
238 |
|
254 |
self::$destinations[ 'FTP' ] = new BackWPup_Destination_Ftp;
|
255 |
if ( function_exists( 'curl_exec' ) )
|
256 |
self::$destinations[ 'DROPBOX' ] = new BackWPup_Destination_Dropbox;
|
257 |
+
if ( function_exists( 'curl_exec' ) && version_compare( PHP_VERSION, '5.3.3', '>=' ) && class_exists( 'BackWPup_Destination_S3' ) )
|
258 |
self::$destinations[ 'S3' ] = new BackWPup_Destination_S3;
|
259 |
+
elseif ( function_exists( 'curl_exec' ) && class_exists( 'BackWPup_Destination_S3_V1' ) )
|
260 |
+
self::$destinations[ 'S3' ] = new BackWPup_Destination_S3_V1;
|
261 |
+
if ( version_compare( PHP_VERSION, '5.3.2', '>=' ) && class_exists( 'BackWPup_Destination_MSAzure' ) )
|
262 |
self::$destinations[ 'MSAZURE' ] = new BackWPup_Destination_MSAzure;
|
263 |
+
if ( function_exists( 'curl_exec' ) && version_compare( PHP_VERSION, '5.3.0', '>=' ) && class_exists( 'BackWPup_Destination_RSC' ) )
|
264 |
self::$destinations[ 'RSC' ] = new BackWPup_Destination_RSC;
|
265 |
if ( function_exists( 'curl_exec' ) )
|
266 |
self::$destinations[ 'SUGARSYNC' ] = new BackWPup_Destination_SugarSync;
|
inc/class-create-archive.php
CHANGED
@@ -62,7 +62,7 @@ class BackWPup_Create_Archive {
|
|
62 |
|
63 |
//check param
|
64 |
if ( empty( $file ) )
|
65 |
-
throw new BackWPup_Create_Archive_Exception( __( 'The file name of an archive cannot be empty
|
66 |
|
67 |
//set file
|
68 |
$this->file = trim( $file );
|
@@ -132,7 +132,7 @@ class BackWPup_Create_Archive {
|
|
132 |
if ( $ziparchive_open !== TRUE ) {
|
133 |
$this->ziparchive_status( $ziparchive_open );
|
134 |
throw new BackWPup_Create_Archive_Exception( sprintf( _x( 'Can not create zip archive: %d','ZipArchive open() result', 'backwpup' ), $ziparchive_open ) );
|
135 |
-
}
|
136 |
}
|
137 |
if ( $this->get_method() == 'PclZip' && ! function_exists( 'gzencode' ) )
|
138 |
throw new BackWPup_Create_Archive_Exception( __( 'Functions for gz compression not available', 'backwpup' ) );
|
@@ -280,7 +280,7 @@ class BackWPup_Create_Archive {
|
|
280 |
break;
|
281 |
case 'ZipArchive':
|
282 |
//close and reopen, all added files are open on fs
|
283 |
-
if ( $this->file_count >=
|
284 |
$this->ziparchive_status( $this->ziparchive->status );
|
285 |
$this->ziparchive->close();
|
286 |
$ziparchive_open = $this->ziparchive->open( $this->file, ZipArchive::CREATE );
|
@@ -320,7 +320,7 @@ class BackWPup_Create_Archive {
|
|
320 |
* @return bool
|
321 |
*/
|
322 |
public function add_empty_folder( $folder_name, $name_in_archive = '' ) {
|
323 |
-
|
324 |
//check param
|
325 |
if ( empty( $folder_name ) )
|
326 |
throw new BackWPup_Create_Archive_Exception( __( 'Folder name cannot be empty', 'backwpup' ) );
|
@@ -358,7 +358,7 @@ class BackWPup_Create_Archive {
|
|
358 |
return TRUE;
|
359 |
break;
|
360 |
}
|
361 |
-
|
362 |
return TRUE;
|
363 |
}
|
364 |
|
@@ -372,7 +372,7 @@ class BackWPup_Create_Archive {
|
|
372 |
|
373 |
if ( $code == 0 )
|
374 |
return TRUE;
|
375 |
-
|
376 |
//define error messages
|
377 |
$zip_errors[ ZipArchive::ER_MULTIDISK ] = __( '(ER_MULTIDISK) Multi-disk zip archives not supported', 'backwpup' );
|
378 |
$zip_errors[ ZipArchive::ER_RENAME ] = __( '(ER_RENAME) Renaming temporary file failed', 'backwpup' );
|
@@ -397,7 +397,7 @@ class BackWPup_Create_Archive {
|
|
397 |
$zip_errors[ ZipArchive::ER_INCONS ] = __( '(ER_INCONS) Zip archive inconsistent', 'backwpup' );
|
398 |
$zip_errors[ ZipArchive::ER_REMOVE ] = __( '(ER_REMOVE) Can\'t remove file', 'backwpup' );
|
399 |
$zip_errors[ ZipArchive::ER_DELETED ] = __( '(ER_DELETED) Entry has been deleted', 'backwpup' );
|
400 |
-
|
401 |
//ste error massage
|
402 |
$zip_error = $code;
|
403 |
if ( isset( $zip_errors[ $zip_error ] ) )
|
@@ -484,15 +484,15 @@ class BackWPup_Create_Archive {
|
|
484 |
|
485 |
return TRUE;
|
486 |
}
|
487 |
-
|
488 |
-
|
489 |
/**
|
490 |
* Tar a empty Folder to archive
|
491 |
*/
|
492 |
private function tar_empty_folder( $folder_name, $name_in_archive ) {
|
493 |
-
|
494 |
$name_in_archive = trailingslashit( $name_in_archive );
|
495 |
-
|
496 |
//split filename larger than 100 chars
|
497 |
if ( strlen( $name_in_archive ) <= 100 ) {
|
498 |
$tar_filename = $name_in_archive;
|
62 |
|
63 |
//check param
|
64 |
if ( empty( $file ) )
|
65 |
+
throw new BackWPup_Create_Archive_Exception( __( 'The file name of an archive cannot be empty.', 'backwpup' ) );
|
66 |
|
67 |
//set file
|
68 |
$this->file = trim( $file );
|
132 |
if ( $ziparchive_open !== TRUE ) {
|
133 |
$this->ziparchive_status( $ziparchive_open );
|
134 |
throw new BackWPup_Create_Archive_Exception( sprintf( _x( 'Can not create zip archive: %d','ZipArchive open() result', 'backwpup' ), $ziparchive_open ) );
|
135 |
+
}
|
136 |
}
|
137 |
if ( $this->get_method() == 'PclZip' && ! function_exists( 'gzencode' ) )
|
138 |
throw new BackWPup_Create_Archive_Exception( __( 'Functions for gz compression not available', 'backwpup' ) );
|
280 |
break;
|
281 |
case 'ZipArchive':
|
282 |
//close and reopen, all added files are open on fs
|
283 |
+
if ( $this->file_count >= 25 ) { //35 works with PHP 5.2.4 on win
|
284 |
$this->ziparchive_status( $this->ziparchive->status );
|
285 |
$this->ziparchive->close();
|
286 |
$ziparchive_open = $this->ziparchive->open( $this->file, ZipArchive::CREATE );
|
320 |
* @return bool
|
321 |
*/
|
322 |
public function add_empty_folder( $folder_name, $name_in_archive = '' ) {
|
323 |
+
|
324 |
//check param
|
325 |
if ( empty( $folder_name ) )
|
326 |
throw new BackWPup_Create_Archive_Exception( __( 'Folder name cannot be empty', 'backwpup' ) );
|
358 |
return TRUE;
|
359 |
break;
|
360 |
}
|
361 |
+
|
362 |
return TRUE;
|
363 |
}
|
364 |
|
372 |
|
373 |
if ( $code == 0 )
|
374 |
return TRUE;
|
375 |
+
|
376 |
//define error messages
|
377 |
$zip_errors[ ZipArchive::ER_MULTIDISK ] = __( '(ER_MULTIDISK) Multi-disk zip archives not supported', 'backwpup' );
|
378 |
$zip_errors[ ZipArchive::ER_RENAME ] = __( '(ER_RENAME) Renaming temporary file failed', 'backwpup' );
|
397 |
$zip_errors[ ZipArchive::ER_INCONS ] = __( '(ER_INCONS) Zip archive inconsistent', 'backwpup' );
|
398 |
$zip_errors[ ZipArchive::ER_REMOVE ] = __( '(ER_REMOVE) Can\'t remove file', 'backwpup' );
|
399 |
$zip_errors[ ZipArchive::ER_DELETED ] = __( '(ER_DELETED) Entry has been deleted', 'backwpup' );
|
400 |
+
|
401 |
//ste error massage
|
402 |
$zip_error = $code;
|
403 |
if ( isset( $zip_errors[ $zip_error ] ) )
|
484 |
|
485 |
return TRUE;
|
486 |
}
|
487 |
+
|
488 |
+
|
489 |
/**
|
490 |
* Tar a empty Folder to archive
|
491 |
*/
|
492 |
private function tar_empty_folder( $folder_name, $name_in_archive ) {
|
493 |
+
|
494 |
$name_in_archive = trailingslashit( $name_in_archive );
|
495 |
+
|
496 |
//split filename larger than 100 chars
|
497 |
if ( strlen( $name_in_archive ) <= 100 ) {
|
498 |
$tar_filename = $name_in_archive;
|
inc/class-destination-msazure.php
CHANGED
@@ -5,7 +5,7 @@
|
|
5 |
include BackWPup::get_plugin_data( 'PluginDir' ) . '/sdk/WindowsAzure/WindowsAzure.php';
|
6 |
// Pear libs include
|
7 |
// http://www.pear.com/
|
8 |
-
set_include_path( get_include_path() . PATH_SEPARATOR .
|
9 |
|
10 |
/**
|
11 |
* Documentation: http://www.windowsazure.com/en-us/develop/php/how-to-guides/blob-service/
|
5 |
include BackWPup::get_plugin_data( 'PluginDir' ) . '/sdk/WindowsAzure/WindowsAzure.php';
|
6 |
// Pear libs include
|
7 |
// http://www.pear.com/
|
8 |
+
set_include_path( get_include_path() . PATH_SEPARATOR . BackWPup::get_plugin_data( 'PluginDir' ) . '/sdk/PEAR/');
|
9 |
|
10 |
/**
|
11 |
* Documentation: http://www.windowsazure.com/en-us/develop/php/how-to-guides/blob-service/
|
inc/class-destination-s3-v1.php
ADDED
@@ -0,0 +1,610 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
// Amazon S3 SDK v1.6.0
|
3 |
+
// http://aws.amazon.com/de/sdkforphp/
|
4 |
+
// https://github.com/amazonwebservices/aws-sdk-for-php
|
5 |
+
if ( ! class_exists( 'AmazonS3' ) )
|
6 |
+
include BackWPup::get_plugin_data( 'PluginDir' ) . '/sdk/Aws_v1/sdk.class.php';
|
7 |
+
if ( ! defined( 'E_USER_DEPRECATED') )
|
8 |
+
define( 'E_USER_DEPRECATED', 16384 );
|
9 |
+
|
10 |
+
/**
|
11 |
+
* Documentation: http://docs.amazonwebservices.com/aws-sdk-php-2/latest/class-Aws.S3.S3Client.html
|
12 |
+
*/
|
13 |
+
class BackWPup_Destination_S3_V1 extends BackWPup_Destinations {
|
14 |
+
|
15 |
+
/**
|
16 |
+
*
|
17 |
+
*/
|
18 |
+
public function __construct() {
|
19 |
+
|
20 |
+
$this->info[ 'ID' ] = 'S3';
|
21 |
+
$this->info[ 'name' ] = __( 'S3 Service', 'backwpup' );
|
22 |
+
$this->info[ 'description' ] = __( 'Backup to a S3 Service', 'backwpup' );
|
23 |
+
$this->info[ 'URI' ] = translate( BackWPup::get_plugin_data( 'PluginURI' ), 'backwpup' );
|
24 |
+
$this->info[ 'author' ] = BackWPup::get_plugin_data( 'Author' );
|
25 |
+
$this->info[ 'authorURI' ] = translate( BackWPup::get_plugin_data( 'AuthorURI' ), 'backwpup' );
|
26 |
+
$this->info[ 'version' ] = BackWPup::get_plugin_data( 'Version' );
|
27 |
+
|
28 |
+
}
|
29 |
+
|
30 |
+
/**
|
31 |
+
* @param $s3region
|
32 |
+
* @param string $s3base_url
|
33 |
+
* @return string
|
34 |
+
*/
|
35 |
+
protected function get_s3_base_url( $s3region, $s3base_url = '' ) {
|
36 |
+
|
37 |
+
if ( ! empty( $s3base_url ) )
|
38 |
+
return $s3base_url;
|
39 |
+
|
40 |
+
switch ( $s3region ) {
|
41 |
+
case 'us-east-1':
|
42 |
+
return 'https://s3.amazonaws.com';
|
43 |
+
case 'us-west-1':
|
44 |
+
return 'https://s3-us-west-1.amazonaws.com';
|
45 |
+
case 'us-west-2':
|
46 |
+
return 'https://s3-us-west-2.amazonaws.com';
|
47 |
+
case 'eu-west-1':
|
48 |
+
return 'https://s3-eu-west-1.amazonaws.com';
|
49 |
+
case 'ap-northeast-1':
|
50 |
+
return 'https://s3-ap-northeast-1.amazonaws.com';
|
51 |
+
case 'ap-southeast-1':
|
52 |
+
return 'https://s3-ap-southeast-1.amazonaws.com';
|
53 |
+
case 'ap-southeast-2':
|
54 |
+
return 'https://s3-ap-southeast-2.amazonaws.com';
|
55 |
+
case 'sa-east-1':
|
56 |
+
return 'https://s3-sa-east-1.amazonaws.com';
|
57 |
+
case 'google-storage':
|
58 |
+
return 'https://storage.googleapis.com';
|
59 |
+
case 'hosteurope':
|
60 |
+
return 'https://cs.hosteurope.de';
|
61 |
+
case 'dreamhost':
|
62 |
+
return 'https://objects.dreamhost.com';
|
63 |
+
default:
|
64 |
+
return '';
|
65 |
+
}
|
66 |
+
|
67 |
+
}
|
68 |
+
|
69 |
+
/**
|
70 |
+
* @return array
|
71 |
+
*/
|
72 |
+
public function option_defaults() {
|
73 |
+
|
74 |
+
return array( 's3accesskey' => '', 's3secretkey' => '', 's3bucket' => '', 's3region' => 'us-east-1', 's3base_url' => '', 's3ssencrypt' => '', 's3storageclass' => '', 's3dir' => trailingslashit( sanitize_title_with_dashes( get_bloginfo( 'name' ) ) ), 's3maxbackups' => 0, 's3syncnodelete' => TRUE );
|
75 |
+
}
|
76 |
+
|
77 |
+
|
78 |
+
/**
|
79 |
+
* @param $jobid
|
80 |
+
*/
|
81 |
+
public function edit_tab( $jobid ) {
|
82 |
+
|
83 |
+
?>
|
84 |
+
<h3 class="title"><?php _e( 'S3 Service', 'backwpup' ) ?></h3>
|
85 |
+
<p></p>
|
86 |
+
<table class="form-table">
|
87 |
+
<tr valign="top">
|
88 |
+
<th scope="row"><label for="s3region"><?php _e( 'Select a S3 service', 'backwpup' ) ?></label></th>
|
89 |
+
<td>
|
90 |
+
<select name="s3region" id="s3region" title="<?php _e( 'Amazon S3 Region', 'backwpup' ); ?>">
|
91 |
+
<option value="us-east-1" <?php selected( 'us-east-1', BackWPup_Option::get( $jobid, 's3region' ), TRUE ) ?>><?php _e( 'Amazon S3: US Standard', 'backwpup' ); ?></option>
|
92 |
+
<option value="us-west-1" <?php selected( 'us-west-1', BackWPup_Option::get( $jobid, 's3region' ), TRUE ) ?>><?php _e( 'Amazon S3: US West (Northern California)', 'backwpup' ); ?></option>
|
93 |
+
<option value="us-west-2" <?php selected( 'us-west-2', BackWPup_Option::get( $jobid, 's3region' ), TRUE ) ?>><?php _e( 'Amazon S3: US West (Oregon)', 'backwpup' ); ?></option>
|
94 |
+
<option value="eu-west-1" <?php selected( 'eu-west-1', BackWPup_Option::get( $jobid, 's3region' ), TRUE ) ?>><?php _e( 'Amazon S3: EU (Ireland)', 'backwpup' ); ?></option>
|
95 |
+
<option value="ap-northeast-1" <?php selected( 'ap-northeast-1', BackWPup_Option::get( $jobid, 's3region' ), TRUE ) ?>><?php _e( 'Amazon S3: Asia Pacific (Tokyo)', 'backwpup' ); ?></option>
|
96 |
+
<option value="ap-southeast-1" <?php selected( 'ap-southeast-1', BackWPup_Option::get( $jobid, 's3region' ), TRUE ) ?>><?php _e( 'Amazon S3: Asia Pacific (Singapore)', 'backwpup' ); ?></option>
|
97 |
+
<option value="ap-southeast-2" <?php selected( 'ap-southeast-2', BackWPup_Option::get( $jobid, 's3region' ), TRUE ) ?>><?php _e( 'Amazon S3: Asia Pacific (Sydney)', 'backwpup' ); ?></option>
|
98 |
+
<option value="sa-east-1" <?php selected( 'sa-east-1', BackWPup_Option::get( $jobid, 's3region' ), TRUE ) ?>><?php _e( 'Amazon S3: South America (Sao Paulo)', 'backwpup' ); ?></option>
|
99 |
+
<option value="google-storage" <?php selected( 'google-storage', BackWPup_Option::get( $jobid, 's3region' ), TRUE ) ?>><?php _e( 'Google Storage (Interoperable Access)', 'backwpup' ); ?></option>
|
100 |
+
<option value="hosteurope" <?php selected( 'hosteurope', BackWPup_Option::get( $jobid, 's3region' ), TRUE ) ?>><?php _e( 'Hosteurope Cloud Storage', 'backwpup' ); ?></option>
|
101 |
+
<option value="dreamhost" <?php selected( 'dreamhost', BackWPup_Option::get( $jobid, 's3region' ), TRUE ) ?>><?php _e( 'Dream Host Cloud Storage', 'backwpup' ); ?></option>
|
102 |
+
</select>
|
103 |
+
</td>
|
104 |
+
</tr>
|
105 |
+
<tr valign="top">
|
106 |
+
<th scope="row"><label for="s3base_url"><?php _e( 'Or a S3 Server url', 'backwpup' ) ?></label></th>
|
107 |
+
<td>
|
108 |
+
<input id="s3base_url" name="s3base_url" type="text" value="<?php echo esc_attr( BackWPup_Option::get( $jobid, 's3base_url' ) );?>" class="regular-text" autocomplete="off" />
|
109 |
+
</td>
|
110 |
+
</tr>
|
111 |
+
</table>
|
112 |
+
|
113 |
+
<h3 class="title"><?php _e( 'S3 Access Keys', 'backwpup' ); ?></h3>
|
114 |
+
<p></p>
|
115 |
+
<table class="form-table">
|
116 |
+
<tr valign="top">
|
117 |
+
<th scope="row"><label for="s3accesskey"><?php _e( 'Access Key', 'backwpup' ); ?></label></th>
|
118 |
+
<td>
|
119 |
+
<input id="s3accesskey" name="s3accesskey" type="text"
|
120 |
+
value="<?php echo esc_attr( BackWPup_Option::get( $jobid, 's3accesskey' ) );?>" class="regular-text" autocomplete="off" />
|
121 |
+
</td>
|
122 |
+
</tr>
|
123 |
+
<tr valign="top">
|
124 |
+
<th scope="row"><label for="s3secretkey"><?php _e( 'Secret Key', 'backwpup' ); ?></label></th>
|
125 |
+
<td>
|
126 |
+
<input id="s3secretkey" name="s3secretkey" type="password"
|
127 |
+
value="<?php echo esc_attr( BackWPup_Encryption::decrypt( BackWPup_Option::get( $jobid, 's3secretkey' ) ) ); ?>" class="regular-text" autocomplete="off" />
|
128 |
+
</td>
|
129 |
+
</tr>
|
130 |
+
</table>
|
131 |
+
|
132 |
+
<h3 class="title"><?php _e( 'S3 Bucket', 'backwpup' ); ?></h3>
|
133 |
+
<p></p>
|
134 |
+
<table class="form-table">
|
135 |
+
<tr valign="top">
|
136 |
+
<th scope="row"><label for="s3bucketselected"><?php _e( 'Bucket selection', 'backwpup' ); ?></label></th>
|
137 |
+
<td>
|
138 |
+
<input id="s3bucketselected" name="s3bucketselected" type="hidden" value="<?php echo esc_attr( BackWPup_Option::get( $jobid, 's3bucket' ) ); ?>" />
|
139 |
+
<?php if ( BackWPup_Option::get( $jobid, 's3accesskey' ) && BackWPup_Option::get( $jobid, 's3secretkey' ) ) $this->edit_ajax( array(
|
140 |
+
's3accesskey' => BackWPup_Option::get( $jobid, 's3accesskey' ),
|
141 |
+
's3secretkey' => BackWPup_Encryption::decrypt(BackWPup_Option::get( $jobid, 's3secretkey' ) ),
|
142 |
+
's3bucketselected' => BackWPup_Option::get( $jobid, 's3bucket' ),
|
143 |
+
's3base_url' => BackWPup_Option::get( $jobid, 's3base_url' ),
|
144 |
+
's3region' => BackWPup_Option::get( $jobid, 's3region' )
|
145 |
+
) ); ?>
|
146 |
+
</td>
|
147 |
+
</tr>
|
148 |
+
<tr valign="top">
|
149 |
+
<th scope="row"><label for="s3newbucket"><?php _e( 'Create a new Bucket', 'backwpup' ); ?></label></th>
|
150 |
+
<td>
|
151 |
+
<input id="s3newbucket" name="s3newbucket" type="text" value="" class="small-text" autocomplete="off" />
|
152 |
+
</td>
|
153 |
+
</tr>
|
154 |
+
</table>
|
155 |
+
|
156 |
+
<h3 class="title"><?php _e( 'S3 Backup settings', 'backwpup' ); ?></h3>
|
157 |
+
<p></p>
|
158 |
+
<table class="form-table">
|
159 |
+
<tr valign="top">
|
160 |
+
<th scope="row"><label for="ids3dir"><?php _e( 'Folder in bucket', 'backwpup' ); ?></label></th>
|
161 |
+
<td>
|
162 |
+
<input id="ids3dir" name="s3dir" type="text" value="<?php echo esc_attr( BackWPup_Option::get( $jobid, 's3dir' ) ); ?>" class="regular-text" />
|
163 |
+
</td>
|
164 |
+
</tr>
|
165 |
+
<tr valign="top">
|
166 |
+
<th scope="row"><?php _e( 'File deletion', 'backwpup' ); ?></th>
|
167 |
+
<td>
|
168 |
+
<?php
|
169 |
+
if ( BackWPup_Option::get( $jobid, 'backuptype' ) == 'archive' ) {
|
170 |
+
?>
|
171 |
+
<label for="ids3maxbackups"><input id="ids3maxbackups" name="s3maxbackups" type="text" size="3" value="<?php echo esc_attr( BackWPup_Option::get( $jobid, 's3maxbackups' ) ); ?>" class="small-text" />
|
172 |
+
<?php _e( 'Number of files to hold in folder.', 'backwpup' ); BackWPup_Help::tip( __( 'Oldest files will be deleted first. 0 = no deletion', 'backwpup' ) ); ?></label>
|
173 |
+
<?php } else { ?>
|
174 |
+
<label for="ids3syncnodelete"><input class="checkbox" value="1"
|
175 |
+
type="checkbox" <?php checked( BackWPup_Option::get( $jobid, 's3syncnodelete' ), TRUE ); ?>
|
176 |
+
name="s3syncnodelete" id="ids3syncnodelete" /> <?php _e( 'Do not delete files on sync to destination!', 'backwpup' ); ?></label>
|
177 |
+
<?php } ?>
|
178 |
+
</td>
|
179 |
+
</tr>
|
180 |
+
</table>
|
181 |
+
|
182 |
+
<h3 class="title"><?php _e( 'Amazon specific settings', 'backwpup' ); ?></h3>
|
183 |
+
<p></p>
|
184 |
+
<table class="form-table">
|
185 |
+
<tr valign="top">
|
186 |
+
<th scope="row"><label for="ids3storageclass"><?php _e( 'Amazon: Storage Class', 'backwpup' ); ?></label></th>
|
187 |
+
<td>
|
188 |
+
<select name="s3storageclass" id="ids3storageclass" title="<?php _e( 'Amazon: Storage Class', 'backwpup' ); ?>">
|
189 |
+
<option value="" <?php selected( 'us-east-1', BackWPup_Option::get( $jobid, 's3storageclass' ), TRUE ) ?>><?php _e( 'none', 'backwpup' ); ?></option>
|
190 |
+
<option value="REDUCED_REDUNDANCY" <?php selected( 'REDUCED_REDUNDANCY', BackWPup_Option::get( $jobid, 's3storageclass' ), TRUE ) ?>><?php _e( 'Reduced Redundancy', 'backwpup' ); ?></option>
|
191 |
+
</select>
|
192 |
+
</td>
|
193 |
+
</tr>
|
194 |
+
<tr valign="top">
|
195 |
+
<th scope="row"><label for="ids3ssencrypt"><?php _e( 'Server side encryption', 'backwpup' ); ?></label></th>
|
196 |
+
<td>
|
197 |
+
<input class="checkbox" value="AES256"
|
198 |
+
type="checkbox" <?php checked( BackWPup_Option::get( $jobid, 's3ssencrypt' ), 'AES256' ); ?>
|
199 |
+
name="s3ssencrypt" id="ids3ssencrypt" /> <?php _e( 'Save files encrypted (AES256) on server.', 'backwpup' ); ?>
|
200 |
+
</td>
|
201 |
+
</tr>
|
202 |
+
</table>
|
203 |
+
|
204 |
+
<?php
|
205 |
+
}
|
206 |
+
|
207 |
+
|
208 |
+
/**
|
209 |
+
* @param $jobid
|
210 |
+
* @return string
|
211 |
+
*/
|
212 |
+
public function edit_form_post_save( $jobid ) {
|
213 |
+
$message = '';
|
214 |
+
BackWPup_Option::update( $jobid, 's3accesskey', isset( $_POST[ 's3accesskey' ] ) ? $_POST[ 's3accesskey' ] : '' );
|
215 |
+
BackWPup_Option::update( $jobid, 's3secretkey', isset( $_POST[ 's3secretkey' ] ) ? BackWPup_Encryption::encrypt( $_POST[ 's3secretkey' ] ) : '' );
|
216 |
+
BackWPup_Option::update( $jobid, 's3base_url', isset( $_POST[ 's3base_url' ] ) ? esc_url_raw( $_POST[ 's3base_url' ] ) : '' );
|
217 |
+
BackWPup_Option::update( $jobid, 's3region', isset( $_POST[ 's3region' ] ) ? $_POST[ 's3region' ] : '' );
|
218 |
+
BackWPup_Option::update( $jobid, 's3storageclass', isset( $_POST[ 's3storageclass' ] ) ? $_POST[ 's3storageclass' ] : '' );
|
219 |
+
BackWPup_Option::update( $jobid, 's3ssencrypt', ( isset( $_POST[ 's3ssencrypt' ] ) && $_POST[ 's3ssencrypt' ] == 'AES256' ) ? 'AES256' : '' );
|
220 |
+
BackWPup_Option::update( $jobid, 's3bucket', isset( $_POST[ 's3bucket' ] ) ? $_POST[ 's3bucket' ] : '' );
|
221 |
+
|
222 |
+
$_POST[ 's3dir' ] = trailingslashit( str_replace( '//', '/', str_replace( '\\', '/', trim( stripslashes( $_POST[ 's3dir' ] ) ) ) ) );
|
223 |
+
if ( substr( $_POST[ 's3dir' ], 0, 1 ) == '/' )
|
224 |
+
$_POST[ 's3dir' ] = substr( $_POST[ 's3dir' ], 1 );
|
225 |
+
if ( $_POST[ 's3dir' ] == '/' )
|
226 |
+
$_POST[ 's3dir' ] = '';
|
227 |
+
BackWPup_Option::update( $jobid, 's3dir', $_POST[ 's3dir' ] );
|
228 |
+
|
229 |
+
BackWPup_Option::update( $jobid, 's3maxbackups', isset( $_POST[ 's3maxbackups' ] ) ? (int)$_POST[ 's3maxbackups' ] : 0 );
|
230 |
+
BackWPup_Option::update( $jobid, 's3syncnodelete', ( isset( $_POST[ 's3syncnodelete' ] ) && $_POST[ 's3syncnodelete' ] == 1 ) ? TRUE : FALSE );
|
231 |
+
BackWPup_Option::update( $jobid, 's3multipart', ( isset( $_POST[ 's3multipart' ] ) && $_POST[ 's3multipart' ] == 1 ) ? TRUE : FALSE );
|
232 |
+
|
233 |
+
//create new bucket
|
234 |
+
if ( !empty( $_POST[ 's3newbucket' ] ) ) {
|
235 |
+
try {
|
236 |
+
$s3 = new AmazonS3( array( 'key' => $_POST[ 's3accesskey' ],
|
237 |
+
'secret' => BackWPup_Encryption::decrypt( $_POST[ 's3secretkey' ] ),
|
238 |
+
'certificate_authority' => TRUE ) );
|
239 |
+
$base_url = $this->get_s3_base_url( $_POST[ 's3region' ], $_POST[ 's3base_url' ] );
|
240 |
+
if ( stristr( $base_url, 'amazonaws.com' ) ) {
|
241 |
+
$s3->set_region( str_replace( array( 'http://', 'https://' ), '', $base_url ) );
|
242 |
+
} else {
|
243 |
+
$s3->set_hostname( str_replace( array( 'http://', 'https://' ), '', $base_url ) );
|
244 |
+
$s3->allow_hostname_override( FALSE );
|
245 |
+
if ( substr( $base_url, -1 ) == '/')
|
246 |
+
$s3->enable_path_style( TRUE );
|
247 |
+
}
|
248 |
+
if ( stristr( $base_url, 'http://' ) )
|
249 |
+
$s3->disable_ssl();
|
250 |
+
|
251 |
+
// set bucket creation region
|
252 |
+
if ( $_POST[ 's3region' ] == 'google-storage' || $_POST[ 's3region' ] == 'hosteurope' )
|
253 |
+
$region = 'EU';
|
254 |
+
else
|
255 |
+
$region = str_replace( array( 'http://', 'https://' ), '', $base_url );
|
256 |
+
|
257 |
+
$bucket = $s3->create_bucket( $_POST[ 's3newbucket' ], $region, 'private' );
|
258 |
+
|
259 |
+
if ( $bucket->status == 200 )
|
260 |
+
$message .= sprintf( __( 'Bucket %1$s in %2$s created.','backwpup'), $_POST[ 's3newbucket' ], $bucket[ 'Location' ] ) . '<br />';
|
261 |
+
else
|
262 |
+
$message .= sprintf( __( 'Bucket %s could not created.','backwpup'), $_POST[ 's3newbucket' ] ) . '<br />';
|
263 |
+
|
264 |
+
}
|
265 |
+
catch ( Exception $e ) {
|
266 |
+
$message .= $e->getMessage();
|
267 |
+
}
|
268 |
+
BackWPup_Option::update( $jobid, 's3bucket', $_POST[ 's3newbucket' ] );
|
269 |
+
}
|
270 |
+
|
271 |
+
return $message;
|
272 |
+
}
|
273 |
+
|
274 |
+
/**
|
275 |
+
* @param $jobdest
|
276 |
+
* @param $backupfile
|
277 |
+
*/
|
278 |
+
public function file_delete( $jobdest, $backupfile ) {
|
279 |
+
|
280 |
+
$files = get_site_transient( 'backwpup_'. strtolower( $jobdest ), array() );
|
281 |
+
list( $jobid, $dest ) = explode( '_', $jobdest );
|
282 |
+
|
283 |
+
if ( BackWPup_Option::get( $jobid, 's3accesskey' ) && BackWPup_Option::get( $jobid, 's3secretkey' ) && BackWPup_Option::get( $jobid, 's3bucket' ) ) {
|
284 |
+
try {
|
285 |
+
$s3 = new AmazonS3( array( 'key' => BackWPup_Option::get( $jobid, 's3accesskey' ),
|
286 |
+
'secret' => BackWPup_Encryption::decrypt( BackWPup_Option::get( $jobid, 's3secretkey' ) ),
|
287 |
+
'certificate_authority' => TRUE ) );
|
288 |
+
$base_url = $this->get_s3_base_url( BackWPup_Option::get( $jobid, 's3region' ), BackWPup_Option::get( $jobid, 's3base_url' ) );
|
289 |
+
if ( stristr( $base_url, 'amazonaws.com' ) ) {
|
290 |
+
$s3->set_region( str_replace( array( 'http://', 'https://' ), '', $base_url ) );
|
291 |
+
} else {
|
292 |
+
$s3->set_hostname( str_replace( array( 'http://', 'https://' ), '', $base_url ) );
|
293 |
+
$s3->allow_hostname_override( FALSE );
|
294 |
+
if ( substr( $base_url, -1 ) == '/')
|
295 |
+
$s3->enable_path_style( TRUE );
|
296 |
+
}
|
297 |
+
if ( stristr( $base_url, 'http://' ) )
|
298 |
+
$s3->disable_ssl();
|
299 |
+
|
300 |
+
$s3->delete_object( BackWPup_Option::get( $jobid, 's3bucket' ), $backupfile );
|
301 |
+
//update file list
|
302 |
+
foreach ( $files as $key => $file ) {
|
303 |
+
if ( is_array( $file ) && $file[ 'file' ] == $backupfile )
|
304 |
+
unset( $files[ $key ] );
|
305 |
+
}
|
306 |
+
unset( $s3 );
|
307 |
+
}
|
308 |
+
catch ( Exception $e ) {
|
309 |
+
BackWPup_Admin::message( sprintf( __('S3 Service API: %s','backwpup'), $e->getMessage() ) );
|
310 |
+
}
|
311 |
+
}
|
312 |
+
|
313 |
+
set_site_transient( 'backwpup_'. strtolower( $jobdest ), $files, 60 * 60 * 24 * 7 );
|
314 |
+
}
|
315 |
+
|
316 |
+
/**
|
317 |
+
* @param $jobid
|
318 |
+
* @param $get_file
|
319 |
+
*/
|
320 |
+
public function file_download( $jobid, $get_file ) {
|
321 |
+
|
322 |
+
try {
|
323 |
+
$s3 = new AmazonS3( array( 'key' => BackWPup_Option::get( $jobid, 's3accesskey' ),
|
324 |
+
'secret' => BackWPup_Encryption::decrypt( BackWPup_Option::get( $jobid, 's3secretkey' ) ),
|
325 |
+
'certificate_authority' => TRUE ) );
|
326 |
+
$base_url = $this->get_s3_base_url( BackWPup_Option::get( $jobid, 's3region' ), BackWPup_Option::get( $jobid, 's3base_url' ) );
|
327 |
+
if ( stristr( $base_url, 'amazonaws.com' ) ) {
|
328 |
+
$s3->set_region( str_replace( array( 'http://', 'https://' ), '', $base_url ) );
|
329 |
+
} else {
|
330 |
+
$s3->set_hostname( str_replace( array( 'http://', 'https://' ), '', $base_url ) );
|
331 |
+
$s3->allow_hostname_override( FALSE );
|
332 |
+
if ( substr( $base_url, -1 ) == '/')
|
333 |
+
$s3->enable_path_style( TRUE );
|
334 |
+
}
|
335 |
+
if ( stristr( $base_url, 'http://' ) )
|
336 |
+
$s3->disable_ssl();
|
337 |
+
|
338 |
+
$s3file = $s3->get_object( BackWPup_Option::get( $jobid, 's3bucket' ), $get_file );
|
339 |
+
}
|
340 |
+
catch ( Exception $e ) {
|
341 |
+
die( $e->getMessage() );
|
342 |
+
}
|
343 |
+
|
344 |
+
if ( $s3file->status==200 ) {
|
345 |
+
header( "Pragma: public" );
|
346 |
+
header( "Expires: 0" );
|
347 |
+
header( "Cache-Control: must-revalidate, post-check=0, pre-check=0" );;
|
348 |
+
header( "Content-Type: application/octet-stream" );
|
349 |
+
header( "Content-Disposition: attachment; filename=" . basename( $get_file ) . ";" );
|
350 |
+
header( "Content-Transfer-Encoding: binary" );
|
351 |
+
header( "Content-Length: " . $s3file->header->_info->size_download );
|
352 |
+
@set_time_limit( 0 );
|
353 |
+
echo $s3file->body;
|
354 |
+
die();
|
355 |
+
}
|
356 |
+
}
|
357 |
+
|
358 |
+
/**
|
359 |
+
* @param $jobdest
|
360 |
+
* @return mixed
|
361 |
+
*/
|
362 |
+
public function file_get_list( $jobdest ) {
|
363 |
+
|
364 |
+
return get_site_transient( 'backwpup_' . strtolower( $jobdest ) );
|
365 |
+
}
|
366 |
+
|
367 |
+
/**
|
368 |
+
* @param $job_object
|
369 |
+
* @return bool
|
370 |
+
*/
|
371 |
+
public function job_run_archive( $job_object ) {
|
372 |
+
|
373 |
+
$job_object->substeps_todo = 2 + $job_object->backup_filesize;
|
374 |
+
$job_object->log( sprintf( __( '%d. Trying to send backup file to S3 Service …', 'backwpup' ), $job_object->steps_data[ $job_object->step_working ][ 'STEP_TRY' ] ), E_USER_NOTICE );
|
375 |
+
|
376 |
+
try {
|
377 |
+
|
378 |
+
$s3 = new AmazonS3( array( 'key' => $job_object->job[ 's3accesskey' ],
|
379 |
+
'secret' => BackWPup_Encryption::decrypt( $job_object->job[ 's3secretkey' ] ),
|
380 |
+
'certificate_authority' => TRUE ) );
|
381 |
+
$base_url = $this->get_s3_base_url( $job_object->job[ 's3region' ], $job_object->job[ 's3base_url' ] );
|
382 |
+
if ( stristr( $base_url, 'amazonaws.com' ) ) {
|
383 |
+
$s3->set_region( str_replace( array( 'http://', 'https://' ), '', $base_url ) );
|
384 |
+
} else {
|
385 |
+
$s3->set_hostname( str_replace( array( 'http://', 'https://' ), '', $base_url ) );
|
386 |
+
$s3->allow_hostname_override( FALSE );
|
387 |
+
if ( substr( $base_url, -1 ) == '/')
|
388 |
+
$s3->enable_path_style( TRUE );
|
389 |
+
}
|
390 |
+
if ( stristr( $base_url, 'http://' ) )
|
391 |
+
$s3->disable_ssl();
|
392 |
+
|
393 |
+
|
394 |
+
if ( $s3->if_bucket_exists( $job_object->job[ 's3bucket' ] ) ) {
|
395 |
+
$job_object->log( sprintf( __( 'Connected to S3 Bucket "%1$s" in %2$s', 'backwpup' ), $job_object->job[ 's3bucket' ], $base_url ), E_USER_NOTICE );
|
396 |
+
}
|
397 |
+
else {
|
398 |
+
$job_object->log( sprintf( __( 'S3 Bucket "%s" does not exist!', 'backwpup' ), $job_object->job[ 's3bucket' ] ), E_USER_ERROR );
|
399 |
+
|
400 |
+
return TRUE;
|
401 |
+
}
|
402 |
+
|
403 |
+
//transfer file to S3
|
404 |
+
$job_object->log( __( 'Upload to S3 Service started …', 'backwpup' ), E_USER_NOTICE );
|
405 |
+
|
406 |
+
//check memory
|
407 |
+
$job_object->need_free_memory( '6M' );
|
408 |
+
|
409 |
+
//Transfer Backup to S3
|
410 |
+
if ( $job_object->job[ 's3storageclass' ] == 'REDUCED_REDUNDANCY' ) //set reduced redundancy or not
|
411 |
+
$storage=AmazonS3::STORAGE_REDUCED;
|
412 |
+
else
|
413 |
+
$storage=AmazonS3::STORAGE_STANDARD;
|
414 |
+
|
415 |
+
if ( empty( $job_object->job[ 's3ssencrypt' ] ) )
|
416 |
+
$job_object->job[ 's3ssencrypt' ] = NULL;
|
417 |
+
|
418 |
+
//set progress bar
|
419 |
+
$s3->register_streaming_read_callback( array( $job_object, 'curl_read_callback' ) );
|
420 |
+
|
421 |
+
$result = $s3->create_object( $job_object->job[ 's3bucket' ], $job_object->job[ 's3dir' ] . $job_object->backup_file, array( 'fileUpload' => $job_object->backup_folder . $job_object->backup_file, 'acl' => AmazonS3::ACL_PRIVATE, 'storage' => $storage, 'encryption' => $job_object->job[ 's3ssencrypt' ] ) );
|
422 |
+
|
423 |
+
if ( $result->status >= 200 and $result->status < 300 ) {
|
424 |
+
$job_object->substeps_done = 1 + $job_object->backup_filesize;
|
425 |
+
$job_object->log( sprintf( __( 'Backup transferred to %s.', 'backwpup' ), $this->get_s3_base_url( $job_object->job[ 's3region' ], $job_object->job[ 's3base_url' ] ). '/' .$job_object->job[ 's3bucket' ] . '/' . $job_object->job[ 's3dir' ] . $job_object->backup_file ), E_USER_NOTICE );
|
426 |
+
if ( ! empty( $job_object->job[ 'jobid' ] ) )
|
427 |
+
BackWPup_Option::update( $job_object->job[ 'jobid' ], 'lastbackupdownloadurl', network_admin_url( 'admin.php' ) . '?page=backwpupbackups&action=downloads3&file=' . $job_object->job[ 's3dir' ] . $job_object->backup_file . '&jobid=' . $job_object->job[ 'jobid' ] );
|
428 |
+
}
|
429 |
+
else {
|
430 |
+
$job_object->log( sprintf( __( 'Can not transfer backup to S3! (%1$d) %2$s', 'backwpup' ), $result->status, $result->body ), E_USER_ERROR );
|
431 |
+
}
|
432 |
+
}
|
433 |
+
catch ( Exception $e ) {
|
434 |
+
$job_object->log( E_USER_ERROR, sprintf( __( 'S3 Service API: %s', 'backwpup' ), htmlentities( $e->getMessage() ) ), $e->getFile(), $e->getLine() );
|
435 |
+
|
436 |
+
return FALSE;
|
437 |
+
}
|
438 |
+
|
439 |
+
try {
|
440 |
+
$backupfilelist = array();
|
441 |
+
$filecounter = 0;
|
442 |
+
$files = array();
|
443 |
+
$objects = $s3->list_objects( $job_object->job[ 's3bucket' ], array( 'prefix' => $job_object->job[ 's3dir' ] ) );
|
444 |
+
if ( is_object( $objects ) ) {
|
445 |
+
foreach ( $objects->body->Contents as $object ) {
|
446 |
+
$file = basename( (string) $object->Key );
|
447 |
+
$changetime = strtotime( (string) $object->LastModified ) + ( get_option( 'gmt_offset' ) * 3600 );
|
448 |
+
if ( $job_object->is_backup_archive( $file ) )
|
449 |
+
$backupfilelist[ $changetime ] = $file;
|
450 |
+
$files[ $filecounter ][ 'folder' ] = $this->get_s3_base_url( $job_object->job[ 's3region' ], $job_object->job[ 's3base_url' ] ). '/' .$job_object->job[ 's3bucket' ] . '/' . dirname( (string) $object->Key );
|
451 |
+
$files[ $filecounter ][ 'file' ] = (string) $object->Key;
|
452 |
+
$files[ $filecounter ][ 'filename' ] = basename( $object->Key );
|
453 |
+
$files[ $filecounter ][ 'downloadurl' ] = network_admin_url( 'admin.php' ) . '?page=backwpupbackups&action=downloads3&file=' . (string) $object->Key . '&jobid=' . $job_object->job[ 'jobid' ];
|
454 |
+
$files[ $filecounter ][ 'filesize' ] = (int) $object->Size;
|
455 |
+
$files[ $filecounter ][ 'time' ] = $changetime;
|
456 |
+
$filecounter ++;
|
457 |
+
}
|
458 |
+
}
|
459 |
+
if ( $job_object->job[ 's3maxbackups' ] > 0 && is_object( $s3 ) ) { //Delete old backups
|
460 |
+
if ( count( $backupfilelist ) > $job_object->job[ 's3maxbackups' ] ) {
|
461 |
+
ksort( $backupfilelist );
|
462 |
+
$numdeltefiles = 0;
|
463 |
+
while ( $file = array_shift( $backupfilelist ) ) {
|
464 |
+
if ( count( $backupfilelist ) < $job_object->job[ 's3maxbackups' ] )
|
465 |
+
break;
|
466 |
+
//delete files on S3
|
467 |
+
$delete_s3 = $s3->delete_object( $job_object->job[ 's3bucket' ], $job_object->job[ 's3dir' ] . $file );
|
468 |
+
if ($delete_s3 ) {
|
469 |
+
foreach ( $files as $key => $filedata ) {
|
470 |
+
if ( $filedata[ 'file' ] == $job_object->job[ 's3dir' ] . $file )
|
471 |
+
unset( $files[ $key ] );
|
472 |
+
}
|
473 |
+
$numdeltefiles ++;
|
474 |
+
} else {
|
475 |
+
$job_object->log( sprintf( __( 'Can not delete backup on %s.', 'backwpup' ), $this->get_s3_base_url( $job_object->job[ 's3region' ], $job_object->job[ 's3base_url' ] ). '/' .$job_object->job[ 's3bucket' ] . '/' . $job_object->job[ 's3dir' ] . $file ), E_USER_ERROR );
|
476 |
+
}
|
477 |
+
}
|
478 |
+
if ( $numdeltefiles > 0 )
|
479 |
+
$job_object->log( sprintf( _n( 'One file deleted on S3 Bucket.', '%d files deleted on S3 Bucket', $numdeltefiles, 'backwpup' ), $numdeltefiles ), E_USER_NOTICE );
|
480 |
+
}
|
481 |
+
}
|
482 |
+
set_site_transient( 'backwpup_' . $job_object->job[ 'jobid' ] . '_s3', $files, 60 * 60 * 24 * 7 );
|
483 |
+
}
|
484 |
+
catch ( Exception $e ) {
|
485 |
+
$job_object->log( E_USER_ERROR, sprintf( __( 'S3 Service API: %s', 'backwpup' ), htmlentities( $e->getMessage() ) ), $e->getFile(), $e->getLine() );
|
486 |
+
|
487 |
+
return FALSE;
|
488 |
+
}
|
489 |
+
$job_object->substeps_done = 2 + $job_object->backup_filesize;
|
490 |
+
|
491 |
+
return TRUE;
|
492 |
+
}
|
493 |
+
|
494 |
+
|
495 |
+
/**
|
496 |
+
* @param $job_object
|
497 |
+
* @return bool
|
498 |
+
*/
|
499 |
+
public function can_run( $job_object ) {
|
500 |
+
|
501 |
+
if ( empty( $job_object->job[ 's3accesskey' ] ) )
|
502 |
+
return FALSE;
|
503 |
+
|
504 |
+
if ( empty( $job_object->job[ 's3secretkey' ] ) )
|
505 |
+
return FALSE;
|
506 |
+
|
507 |
+
if ( empty( $job_object->job[ 's3bucket' ] ) )
|
508 |
+
return FALSE;
|
509 |
+
|
510 |
+
return TRUE;
|
511 |
+
}
|
512 |
+
|
513 |
+
/**
|
514 |
+
*
|
515 |
+
*/
|
516 |
+
public function edit_inline_js() {
|
517 |
+
//<script type="text/javascript">
|
518 |
+
?>
|
519 |
+
function awsgetbucket() {
|
520 |
+
var data = {
|
521 |
+
action: 'backwpup_dest_s3',
|
522 |
+
s3accesskey: $('input[name="s3accesskey"]').val(),
|
523 |
+
s3secretkey: $('input[name="s3secretkey"]').val(),
|
524 |
+
s3bucketselected: $('input[name="s3bucketselected"]').val(),
|
525 |
+
s3base_url: $('input[name="s3base_url"]').val(),
|
526 |
+
s3region: $('#s3region').val(),
|
527 |
+
_ajax_nonce: $('#backwpupajaxnonce').val()
|
528 |
+
};
|
529 |
+
$.post(ajaxurl, data, function(response) {
|
530 |
+
$('#s3bucketerror').remove();
|
531 |
+
$('#s3bucket').remove();
|
532 |
+
$('#s3bucketselected').after(response);
|
533 |
+
});
|
534 |
+
}
|
535 |
+
$('input[name="s3accesskey"]').change(function() {awsgetbucket();});
|
536 |
+
$('input[name="s3secretkey"]').change(function() {awsgetbucket();});
|
537 |
+
$('input[name="s3base_url"]').change(function() {awsgetbucket();});
|
538 |
+
$('#s3region').change(function() {awsgetbucket();});
|
539 |
+
<?php
|
540 |
+
}
|
541 |
+
|
542 |
+
/**
|
543 |
+
* @param string $args
|
544 |
+
*/
|
545 |
+
public function edit_ajax( $args = '' ) {
|
546 |
+
|
547 |
+
$error = '';
|
548 |
+
|
549 |
+
if ( is_array( $args ) ) {
|
550 |
+
$ajax = FALSE;
|
551 |
+
}
|
552 |
+
else {
|
553 |
+
if ( ! current_user_can( 'backwpup_jobs_edit' ) )
|
554 |
+
wp_die( -1 );
|
555 |
+
check_ajax_referer( 'backwpup_ajax_nonce' );
|
556 |
+
$args[ 's3accesskey' ] = $_POST[ 's3accesskey' ];
|
557 |
+
$args[ 's3secretkey' ] = $_POST[ 's3secretkey' ];
|
558 |
+
$args[ 's3bucketselected' ] = $_POST[ 's3bucketselected' ];
|
559 |
+
$args[ 's3base_url' ] = $_POST[ 's3base_url' ];
|
560 |
+
$args[ 's3region' ] = $_POST[ 's3region' ];
|
561 |
+
$ajax = TRUE;
|
562 |
+
}
|
563 |
+
echo '<span id="s3bucketerror" style="color:red;">';
|
564 |
+
|
565 |
+
if ( ! empty( $args[ 's3accesskey' ] ) && ! empty( $args[ 's3secretkey' ] ) ) {
|
566 |
+
try {
|
567 |
+
$s3 = new AmazonS3( array( 'key' => $args[ 's3accesskey' ],
|
568 |
+
'secret' => BackWPup_Encryption::decrypt( $args[ 's3secretkey' ] ),
|
569 |
+
'certificate_authority' => TRUE ) );
|
570 |
+
$base_url = $this->get_s3_base_url( $args[ 's3region' ], $args[ 's3base_url' ] );
|
571 |
+
if ( stristr( $base_url, 'amazonaws.com' ) ) {
|
572 |
+
$s3->set_region( str_replace( array( 'http://', 'https://' ), '', $base_url ) );
|
573 |
+
} else {
|
574 |
+
$s3->set_hostname( str_replace( array( 'http://', 'https://' ), '', $base_url ) );
|
575 |
+
$s3->allow_hostname_override( FALSE );
|
576 |
+
if ( substr( $base_url, -1 ) == '/')
|
577 |
+
$s3->enable_path_style( TRUE );
|
578 |
+
}
|
579 |
+
if ( stristr( $base_url, 'http://' ) )
|
580 |
+
$s3->disable_ssl();
|
581 |
+
|
582 |
+
$buckets = $s3->list_buckets();
|
583 |
+
}
|
584 |
+
catch ( Exception $e ) {
|
585 |
+
$error = $e->getMessage();
|
586 |
+
}
|
587 |
+
}
|
588 |
+
|
589 |
+
if ( empty( $args[ 's3accesskey' ] ) )
|
590 |
+
_e( 'Missing access key!', 'backwpup' );
|
591 |
+
elseif ( empty( $args[ 's3secretkey' ] ) )
|
592 |
+
_e( 'Missing secret access key!', 'backwpup' );
|
593 |
+
elseif ( ! empty( $error ) )
|
594 |
+
echo esc_html( $error );
|
595 |
+
elseif ( ! isset( $buckets ) || count( $buckets->body->Buckets->Bucket ) < 1 )
|
596 |
+
_e( 'No bucket found!', 'backwpup' );
|
597 |
+
echo '</span>';
|
598 |
+
|
599 |
+
if ( ! empty( $buckets->body->Buckets->Bucket ) ) {
|
600 |
+
echo '<select name="s3bucket" id="s3bucket">';
|
601 |
+
foreach ( $buckets->body->Buckets->Bucket as $bucket ) {
|
602 |
+
echo "<option " . selected( $args[ 's3bucketselected' ], esc_attr( $bucket->Name ), FALSE ) . ">" . esc_attr( $bucket->Name ) . "</option>";
|
603 |
+
}
|
604 |
+
echo '</select>';
|
605 |
+
}
|
606 |
+
|
607 |
+
if ( $ajax )
|
608 |
+
die();
|
609 |
+
}
|
610 |
+
}
|
inc/class-encryption.php
CHANGED
@@ -67,7 +67,7 @@ class BackWPup_Encryption {
|
|
67 |
return $result;
|
68 |
}
|
69 |
|
70 |
-
if ( strpos( $string, '$BackWPup$RIJNDAEL$' ) !== FALSE
|
71 |
$string = str_replace( '$BackWPup$RIJNDAEL$', '', $string );
|
72 |
|
73 |
return rtrim( mcrypt_decrypt( MCRYPT_RIJNDAEL_256, md5( $key ), base64_decode( $string ), MCRYPT_MODE_CBC, md5( md5( $key ) ) ), "\0" );
|
67 |
return $result;
|
68 |
}
|
69 |
|
70 |
+
if ( function_exists( 'mcrypt_encrypt' ) && strpos( $string, '$BackWPup$RIJNDAEL$' ) !== FALSE) {
|
71 |
$string = str_replace( '$BackWPup$RIJNDAEL$', '', $string );
|
72 |
|
73 |
return rtrim( mcrypt_decrypt( MCRYPT_RIJNDAEL_256, md5( $key ), base64_decode( $string ), MCRYPT_MODE_CBC, md5( md5( $key ) ) ), "\0" );
|
inc/class-install.php
CHANGED
@@ -84,8 +84,22 @@ class BackWPup_Install {
|
|
84 |
'backwpup_settings' => FALSE,
|
85 |
) );
|
86 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
87 |
//update version
|
88 |
update_site_option( 'backwpup_version', BackWPup::get_plugin_data( 'Version' ) );
|
|
|
89 |
//show trailing page again
|
90 |
update_site_option( 'backwpup_about_page', FALSE );
|
91 |
}
|
@@ -120,13 +134,6 @@ class BackWPup_Install {
|
|
120 |
$role->remove_cap( 'backwpup_logs' );
|
121 |
$role->remove_cap( 'backwpup_logs_delete' );
|
122 |
$role->remove_cap( 'backwpup_settings' );
|
123 |
-
//delete temp folder
|
124 |
-
$temp_flies = scandir( BackWPup::get_plugin_data( 'TEMP') );
|
125 |
-
foreach ( $temp_flies as $temp_flie ) {
|
126 |
-
if ( is_file( BackWPup::get_plugin_data( 'TEMP') . $temp_flie ) )
|
127 |
-
unlink( BackWPup::get_plugin_data( 'TEMP') . $temp_flie );
|
128 |
-
}
|
129 |
-
rmdir( BackWPup::get_plugin_data( 'TEMP') );
|
130 |
//to reschedule on activation and so on
|
131 |
update_site_option( 'backwpup_version', BackWPup::get_plugin_data( 'version' ) .'-inactive' );
|
132 |
}
|
84 |
'backwpup_settings' => FALSE,
|
85 |
) );
|
86 |
|
87 |
+
//add cfg options to database prevent false false if option not exists
|
88 |
+
$cfg_options = BackWPup_Option::defaults( 'cfg', NULL );
|
89 |
+
foreach ( $cfg_options as $cfg => $option ) {
|
90 |
+
//options to exclude
|
91 |
+
if ( in_array( $cfg, array( 'dropboxappkey', 'dropboxappsecret', 'dropboxsandboxappkey', 'dropboxsandboxappsecret', 'sugarsynckey', 'sugarsyncsecret', 'sugarsyncappid' ) ) )
|
92 |
+
continue;
|
93 |
+
//detect if option already exists
|
94 |
+
$test_option_exists = get_site_option( 'backwpup_cfg_' . $cfg, 'TEST12345TEST' );
|
95 |
+
//add option if not exists
|
96 |
+
if ( $test_option_exists == 'TEST12345TEST')
|
97 |
+
add_site_option( 'backwpup_cfg_' . $cfg, $option );
|
98 |
+
}
|
99 |
+
|
100 |
//update version
|
101 |
update_site_option( 'backwpup_version', BackWPup::get_plugin_data( 'Version' ) );
|
102 |
+
|
103 |
//show trailing page again
|
104 |
update_site_option( 'backwpup_about_page', FALSE );
|
105 |
}
|
134 |
$role->remove_cap( 'backwpup_logs' );
|
135 |
$role->remove_cap( 'backwpup_logs_delete' );
|
136 |
$role->remove_cap( 'backwpup_settings' );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
137 |
//to reschedule on activation and so on
|
138 |
update_site_option( 'backwpup_version', BackWPup::get_plugin_data( 'version' ) .'-inactive' );
|
139 |
}
|
inc/class-job.php
CHANGED
@@ -282,7 +282,7 @@ final class BackWPup_Job {
|
|
282 |
$info .= __( '[INFO] BackWPup job started from external url', 'backwpup' ) . PHP_EOL;
|
283 |
elseif ( $this->jobstarttype == 'runcli' )
|
284 |
$info .= __( '[INFO] BackWPup job started form commandline interface', 'backwpup' ) . PHP_EOL;
|
285 |
-
$info .= __( '[INFO] PHP ver.:', 'backwpup' ) . ' ' .
|
286 |
$info .= sprintf( __( '[INFO] Maximum script execution time is %1$d seconds', 'backwpup' ), ini_get( 'max_execution_time' ) ) . PHP_EOL;
|
287 |
$info .= sprintf( __( '[INFO] MySQL ver.: %s', 'backwpup' ), $wpdb->get_var( "SELECT VERSION() AS version" ) ) . PHP_EOL;
|
288 |
if ( function_exists( 'curl_init' ) ) {
|
@@ -610,7 +610,7 @@ final class BackWPup_Job {
|
|
610 |
return;
|
611 |
$last_update = microtime( TRUE ) - $job_object->timestamp_last_update;
|
612 |
if ( $job_object->pid != 0 && $last_update > 300) {
|
613 |
-
$this->log( __( 'Job restart due to inactivity for more than 5 minutes.', 'backwpup' ),
|
614 |
}
|
615 |
elseif ( $this->pid != 0 && $job_object->pid != self::get_pid() ) {
|
616 |
$this->log( __( 'Second process start terminated, because a other job is already running!', 'backwpup' ), E_USER_WARNING );
|
@@ -1341,11 +1341,14 @@ final class BackWPup_Job {
|
|
1341 |
public function curl_read_callback( $curl_handle, $file_handle, $read_count ) {
|
1342 |
|
1343 |
$data = NULL;
|
1344 |
-
if ( ! empty( $file_handle ) )
|
1345 |
$data = fread( $file_handle, $read_count );
|
1346 |
-
|
1347 |
-
if (
|
1348 |
-
|
|
|
|
|
|
|
1349 |
$this->update_working_data();
|
1350 |
|
1351 |
return $data;
|
@@ -1698,6 +1701,10 @@ final class BackWPup_Job {
|
|
1698 |
public function is_backup_archive( $filename ) {
|
1699 |
|
1700 |
$filename = basename( $filename );
|
|
|
|
|
|
|
|
|
1701 |
$datevars = array( '%d', '%j', '%m', '%n', '%Y', '%y', '%a', '%A', '%B', '%g', '%G', '%h', '%H', '%i', '%s', '%u', '%U' );
|
1702 |
$dateregex = array( '(0[1-9]|[12][0-9]|3[01])', '([1-9]|[12][0-9]|3[01])', '(0[1-9]|1[0-2])', '([1-9]|1[0-2])', '((19|20|21)[0-9]{2})', '([0-9]{2})', '(am|pm)', '(AM|PM)', '([0-9]{3})', '([1-9]|1[0-2])', '([1-9]|1[0-9]|2[0-4])', '(0[1-9]|1[0-2])', '(0[1-9]|1[0-9]|2[0-4])', '(0[1-9]|[1-5][0-9])', '(0[1-9]|[1-5][0-9])', '\d', '\d' );
|
1703 |
|
282 |
$info .= __( '[INFO] BackWPup job started from external url', 'backwpup' ) . PHP_EOL;
|
283 |
elseif ( $this->jobstarttype == 'runcli' )
|
284 |
$info .= __( '[INFO] BackWPup job started form commandline interface', 'backwpup' ) . PHP_EOL;
|
285 |
+
$info .= __( '[INFO] PHP ver.:', 'backwpup' ) . ' ' . PHP_VERSION . '; ' . PHP_SAPI . '; ' . PHP_OS . PHP_EOL;
|
286 |
$info .= sprintf( __( '[INFO] Maximum script execution time is %1$d seconds', 'backwpup' ), ini_get( 'max_execution_time' ) ) . PHP_EOL;
|
287 |
$info .= sprintf( __( '[INFO] MySQL ver.: %s', 'backwpup' ), $wpdb->get_var( "SELECT VERSION() AS version" ) ) . PHP_EOL;
|
288 |
if ( function_exists( 'curl_init' ) ) {
|
610 |
return;
|
611 |
$last_update = microtime( TRUE ) - $job_object->timestamp_last_update;
|
612 |
if ( $job_object->pid != 0 && $last_update > 300) {
|
613 |
+
$this->log( __( 'Job restart due to inactivity for more than 5 minutes.', 'backwpup' ), E_USER_WARNING );
|
614 |
}
|
615 |
elseif ( $this->pid != 0 && $job_object->pid != self::get_pid() ) {
|
616 |
$this->log( __( 'Second process start terminated, because a other job is already running!', 'backwpup' ), E_USER_WARNING );
|
1341 |
public function curl_read_callback( $curl_handle, $file_handle, $read_count ) {
|
1342 |
|
1343 |
$data = NULL;
|
1344 |
+
if ( ! empty( $file_handle ) && is_numeric( $read_count ) )
|
1345 |
$data = fread( $file_handle, $read_count );
|
1346 |
+
|
1347 |
+
if ( $this->job[ 'backuptype' ] == 'sync' )
|
1348 |
+
return $data;
|
1349 |
+
|
1350 |
+
$length = ( is_numeric( $read_count ) ) ? $read_count : strlen( $read_count );
|
1351 |
+
$this->substeps_done = $this->substeps_done + $length;
|
1352 |
$this->update_working_data();
|
1353 |
|
1354 |
return $data;
|
1701 |
public function is_backup_archive( $filename ) {
|
1702 |
|
1703 |
$filename = basename( $filename );
|
1704 |
+
|
1705 |
+
if ( ! substr( $filename, -3 ) == '.gz' || ! substr( $filename, -4 ) == '.bz2' || ! substr( $filename, -4 ) == '.tar' || ! substr( $filename, -4 ) == '.zip' )
|
1706 |
+
return FALSE;
|
1707 |
+
|
1708 |
$datevars = array( '%d', '%j', '%m', '%n', '%Y', '%y', '%a', '%A', '%B', '%g', '%G', '%h', '%H', '%i', '%s', '%u', '%U' );
|
1709 |
$dateregex = array( '(0[1-9]|[12][0-9]|3[01])', '([1-9]|[12][0-9]|3[01])', '(0[1-9]|1[0-2])', '([1-9]|1[0-2])', '((19|20|21)[0-9]{2})', '([0-9]{2})', '(am|pm)', '(AM|PM)', '([0-9]{3})', '([1-9]|1[0-2])', '([1-9]|1[0-9]|2[0-4])', '(0[1-9]|1[0-2])', '(0[1-9]|1[0-9]|2[0-4])', '(0[1-9]|[1-5][0-9])', '(0[1-9]|[1-5][0-9])', '\d', '\d' );
|
1710 |
|
inc/class-jobtype-dbcheck.php
CHANGED
@@ -92,7 +92,7 @@ class BackWPup_JobType_DBCheck extends BackWPup_JobTypes {
|
|
92 |
|
93 |
//to check
|
94 |
$tables = array();
|
95 |
-
$restables = $wpdb->get_results( 'SHOW FULL TABLES FROM `' .
|
96 |
foreach ( $restables as $table ) {
|
97 |
if ( ! empty( $job_object->job[ 'dbcheckwponly' ] ) ) {
|
98 |
$tables[ ] = $table[ 0 ];
|
@@ -107,7 +107,7 @@ class BackWPup_JobType_DBCheck extends BackWPup_JobTypes {
|
|
107 |
$job_object->substeps_todo = sizeof( $tables );
|
108 |
|
109 |
//Get table status
|
110 |
-
$resstatus = $wpdb->get_results( "SHOW TABLE STATUS FROM `" .
|
111 |
foreach ( $resstatus as $tablestatus ) {
|
112 |
$status[ $tablestatus[ 'Name' ] ] = $tablestatus;
|
113 |
}
|
92 |
|
93 |
//to check
|
94 |
$tables = array();
|
95 |
+
$restables = $wpdb->get_results( 'SHOW FULL TABLES FROM `' . DB_NAME . '`', ARRAY_N );
|
96 |
foreach ( $restables as $table ) {
|
97 |
if ( ! empty( $job_object->job[ 'dbcheckwponly' ] ) ) {
|
98 |
$tables[ ] = $table[ 0 ];
|
107 |
$job_object->substeps_todo = sizeof( $tables );
|
108 |
|
109 |
//Get table status
|
110 |
+
$resstatus = $wpdb->get_results( "SHOW TABLE STATUS FROM `" . DB_NAME . "`", ARRAY_A );
|
111 |
foreach ( $resstatus as $tablestatus ) {
|
112 |
$status[ $tablestatus[ 'Name' ] ] = $tablestatus;
|
113 |
}
|
inc/class-jobtype-dbdump.php
CHANGED
@@ -35,11 +35,11 @@ class BackWPup_JobType_DBDump extends BackWPup_JobTypes {
|
|
35 |
global $wpdb;
|
36 |
|
37 |
$defaults = array(
|
38 |
-
'dbdumpexclude' => array(), 'dbdumpfile' => sanitize_title_with_dashes(
|
39 |
'dbdumpmaintenance' => FALSE
|
40 |
);
|
41 |
//set only wordpress tables as default
|
42 |
-
$dbtables = $wpdb->get_results( 'SHOW TABLES FROM `' .
|
43 |
foreach ( $dbtables as $dbtable) {
|
44 |
if ( ! strstr( $dbtable[ 0 ], $wpdb->prefix ) )
|
45 |
$defaults[ 'dbdumpexclude' ][] = $dbtable[ 0 ];
|
@@ -67,7 +67,7 @@ class BackWPup_JobType_DBDump extends BackWPup_JobTypes {
|
|
67 |
<input type="button" class="button-secondary" id="dbnone" value="<?php _e( 'none', 'backwpup' ); ?>">
|
68 |
<input type="button" class="button-secondary" id="dbwp" value="<?php echo $wpdb->prefix; ?>">
|
69 |
<?php
|
70 |
-
$tables = $wpdb->get_results( 'SHOW FULL TABLES FROM `' .
|
71 |
$num_rows = count( $tables );
|
72 |
echo '<table id="dbtables"><tr><td valign="top">';
|
73 |
$next_row = round( $num_rows / 3, 0 );
|
@@ -141,7 +141,7 @@ class BackWPup_JobType_DBDump extends BackWPup_JobTypes {
|
|
141 |
foreach ( $_POST[ 'tabledb' ] as $dbtable )
|
142 |
$checked_db_tables[ ] = rawurldecode( $dbtable );
|
143 |
}
|
144 |
-
$dbtables = $wpdb->get_results( 'SHOW TABLES FROM `' .
|
145 |
foreach ( $dbtables as $dbtable ) {
|
146 |
if ( ! in_array( $dbtable[ 0 ], $checked_db_tables ) )
|
147 |
$dbdumpexclude[ ] = $dbtable[ 0 ];
|
@@ -176,7 +176,7 @@ class BackWPup_JobType_DBDump extends BackWPup_JobTypes {
|
|
176 |
$sql_dump = new BackWPup_MySQLDump( array( 'dumpfile' => BackWPup::get_plugin_data( 'TEMP' ) . $job_object->temp[ 'dbdumpfile' ] ) );
|
177 |
|
178 |
if ( is_object( $sql_dump ) )
|
179 |
-
$job_object->log( sprintf( __( 'Connected to database %1$s on %2$s', 'backwpup' ),
|
180 |
|
181 |
//Exclude Tables
|
182 |
foreach ( $sql_dump->tables_to_dump as $key => $table ) {
|
35 |
global $wpdb;
|
36 |
|
37 |
$defaults = array(
|
38 |
+
'dbdumpexclude' => array(), 'dbdumpfile' => sanitize_title_with_dashes( DB_NAME ), 'dbdumptype' => 'sql', 'dbdumpfilecompression' => '',
|
39 |
'dbdumpmaintenance' => FALSE
|
40 |
);
|
41 |
//set only wordpress tables as default
|
42 |
+
$dbtables = $wpdb->get_results( 'SHOW TABLES FROM `' . DB_NAME . '`', ARRAY_N );
|
43 |
foreach ( $dbtables as $dbtable) {
|
44 |
if ( ! strstr( $dbtable[ 0 ], $wpdb->prefix ) )
|
45 |
$defaults[ 'dbdumpexclude' ][] = $dbtable[ 0 ];
|
67 |
<input type="button" class="button-secondary" id="dbnone" value="<?php _e( 'none', 'backwpup' ); ?>">
|
68 |
<input type="button" class="button-secondary" id="dbwp" value="<?php echo $wpdb->prefix; ?>">
|
69 |
<?php
|
70 |
+
$tables = $wpdb->get_results( 'SHOW FULL TABLES FROM `' . DB_NAME . '`', ARRAY_N );
|
71 |
$num_rows = count( $tables );
|
72 |
echo '<table id="dbtables"><tr><td valign="top">';
|
73 |
$next_row = round( $num_rows / 3, 0 );
|
141 |
foreach ( $_POST[ 'tabledb' ] as $dbtable )
|
142 |
$checked_db_tables[ ] = rawurldecode( $dbtable );
|
143 |
}
|
144 |
+
$dbtables = $wpdb->get_results( 'SHOW TABLES FROM `' . DB_NAME . '`', ARRAY_N );
|
145 |
foreach ( $dbtables as $dbtable ) {
|
146 |
if ( ! in_array( $dbtable[ 0 ], $checked_db_tables ) )
|
147 |
$dbdumpexclude[ ] = $dbtable[ 0 ];
|
176 |
$sql_dump = new BackWPup_MySQLDump( array( 'dumpfile' => BackWPup::get_plugin_data( 'TEMP' ) . $job_object->temp[ 'dbdumpfile' ] ) );
|
177 |
|
178 |
if ( is_object( $sql_dump ) )
|
179 |
+
$job_object->log( sprintf( __( 'Connected to database %1$s on %2$s', 'backwpup' ), DB_NAME, DB_HOST ) );
|
180 |
|
181 |
//Exclude Tables
|
182 |
foreach ( $sql_dump->tables_to_dump as $key => $table ) {
|
inc/class-jobtype-dboptimize.php
CHANGED
@@ -104,7 +104,7 @@ class BackWPup_JobType_DBOptimize extends BackWPup_JobTypes {
|
|
104 |
|
105 |
//tables to otimize
|
106 |
$tables = array();
|
107 |
-
$restables = $wpdb->get_results( 'SHOW FULL TABLES FROM `' .
|
108 |
foreach ( $restables as $table ) {
|
109 |
if ( ! empty( $job_object->job[ 'dboptimizewponly' ] ) ) {
|
110 |
$tables[ ] = $table[ 0 ];
|
@@ -118,7 +118,7 @@ class BackWPup_JobType_DBOptimize extends BackWPup_JobTypes {
|
|
118 |
$job_object->substeps_todo = sizeof( $tables );
|
119 |
|
120 |
//Get table status
|
121 |
-
$resstatus = $wpdb->get_results( "SHOW TABLE STATUS FROM `" .
|
122 |
foreach ( $resstatus as $tablestatus ) {
|
123 |
$status[ $tablestatus[ 'Name' ] ] = $tablestatus;
|
124 |
}
|
104 |
|
105 |
//tables to otimize
|
106 |
$tables = array();
|
107 |
+
$restables = $wpdb->get_results( 'SHOW FULL TABLES FROM `' . DB_NAME . '`', ARRAY_N );
|
108 |
foreach ( $restables as $table ) {
|
109 |
if ( ! empty( $job_object->job[ 'dboptimizewponly' ] ) ) {
|
110 |
$tables[ ] = $table[ 0 ];
|
118 |
$job_object->substeps_todo = sizeof( $tables );
|
119 |
|
120 |
//Get table status
|
121 |
+
$resstatus = $wpdb->get_results( "SHOW TABLE STATUS FROM `" . DB_NAME . "`", ARRAY_A );
|
122 |
foreach ( $resstatus as $tablestatus ) {
|
123 |
$status[ $tablestatus[ 'Name' ] ] = $tablestatus;
|
124 |
}
|
inc/class-jobtype-file.php
CHANGED
@@ -63,10 +63,13 @@ class BackWPup_JobType_File extends BackWPup_JobTypes {
|
|
63 |
<tr valign="top">
|
64 |
<th scope="row"><label for="idbackuproot"><?php _e( 'Backup root folder', 'backwpup' ); ?></label></th>
|
65 |
<td>
|
66 |
-
<?php
|
|
|
|
|
|
|
67 |
<input class="checkbox"
|
68 |
type="checkbox"<?php checked( BackWPup_Option::get( $main, 'backuproot' ), TRUE, TRUE );?>
|
69 |
-
name="backuproot" id="idbackuproot" value="1" /> <code><?php echo $folder; ?></code
|
70 |
|
71 |
<fieldset id="backuprootexcludedirs" style="padding-left:15px; margin:2px;">
|
72 |
<legend><?php _e( 'Exclude:', 'backwpup' ); ?></legend>
|
@@ -74,10 +77,9 @@ class BackWPup_JobType_File extends BackWPup_JobTypes {
|
|
74 |
if ( $dir = @opendir( $folder ) ) {
|
75 |
while ( ( $file = readdir( $dir ) ) !== FALSE ) {
|
76 |
if ( ! in_array( $file, array( '.', '..' ) ) && is_dir( $folder . '/' . $file ) && ! in_array( $folder . '/' . $file . '/', $this->get_exclude_dirs( $folder ) ) ) {
|
77 |
-
$class='';
|
78 |
-
|
79 |
-
|
80 |
-
echo '<nobr class="' . $class . '"><label for="idrootexcludedirs-'.sanitize_title_with_dashes( $file ).'"><input class="checkbox" type="checkbox"' . checked( in_array( $file, BackWPup_Option::get( $main, 'backuprootexcludedirs' ) ), TRUE, FALSE ) . ' name="backuprootexcludedirs[]" id="idrootexcludedirs-'.sanitize_title_with_dashes( $file ).'" value="' . $file . '" /> ' . $file . ' (' . size_format( BackWPup_File::get_folder_size( $folder . '/' . $file ), 2 ) . ')</label><br /></nobr>';
|
81 |
}
|
82 |
}
|
83 |
@closedir( $dir );
|
@@ -89,10 +91,13 @@ class BackWPup_JobType_File extends BackWPup_JobTypes {
|
|
89 |
<tr valign="top">
|
90 |
<th scope="row"><label for="idbackupcontent"><?php _e( 'Backup content folder', 'backwpup' ); ?></label></th>
|
91 |
<td>
|
92 |
-
<?php
|
|
|
|
|
|
|
93 |
<input class="checkbox"
|
94 |
type="checkbox"<?php checked( BackWPup_Option::get( $main, 'backupcontent' ), TRUE, TRUE );?>
|
95 |
-
name="backupcontent" id="idbackupcontent" value="1" /> <code><?php echo $folder; ?></code
|
96 |
|
97 |
<fieldset id="backupcontentexcludedirs" style="padding-left:15px; margin:2px;">
|
98 |
<legend><?php _e( 'Exclude:', 'backwpup' ); ?></legend>
|
@@ -100,10 +105,9 @@ class BackWPup_JobType_File extends BackWPup_JobTypes {
|
|
100 |
if ( $dir = @opendir( $folder ) ) {
|
101 |
while ( ( $file = readdir( $dir ) ) !== FALSE ) {
|
102 |
if ( ! in_array( $file, array( '.', '..' ) ) && is_dir( $folder . '/' . $file ) && ! in_array( $folder . '/' . $file . '/', $this->get_exclude_dirs( $folder ) ) ) {
|
103 |
-
$class='';
|
104 |
-
|
105 |
-
|
106 |
-
echo '<nobr class="' . $class . '"><label for="idcontentexcludedirs-'.sanitize_title_with_dashes( $file ).'"><input class="checkbox" type="checkbox"' . checked( in_array( $file, BackWPup_Option::get( $main, 'backupcontentexcludedirs' ) ), TRUE, FALSE ) . ' name="backupcontentexcludedirs[]" id="idcontentexcludedirs-'.sanitize_title_with_dashes( $file ).'" value="' . $file . '" /> ' . $file . ' (' . size_format( BackWPup_File::get_folder_size( $folder . '/' . $file ), 2 ) . ')</label><br /></nobr>';
|
107 |
}
|
108 |
}
|
109 |
@closedir( $dir );
|
@@ -115,10 +119,13 @@ class BackWPup_JobType_File extends BackWPup_JobTypes {
|
|
115 |
<tr valign="top">
|
116 |
<th scope="row"><label for="idbackupplugins"><?php _e( 'Backup plugins', 'backwpup' ); ?></label></th>
|
117 |
<td>
|
118 |
-
<?php
|
|
|
|
|
|
|
119 |
<input class="checkbox"
|
120 |
type="checkbox"<?php checked( BackWPup_Option::get( $main, 'backupplugins' ), TRUE, TRUE );?>
|
121 |
-
name="backupplugins" id="idbackupplugins" value="1" /> <code><?php echo $folder; ?></code
|
122 |
|
123 |
<fieldset id="backuppluginsexcludedirs" style="padding-left:15px; margin:2px;">
|
124 |
<legend><?php _e( 'Exclude:', 'backwpup' ); ?></legend>
|
@@ -126,10 +133,9 @@ class BackWPup_JobType_File extends BackWPup_JobTypes {
|
|
126 |
if ( $dir = @opendir( $folder ) ) {
|
127 |
while ( ( $file = readdir( $dir ) ) !== FALSE ) {
|
128 |
if ( ! in_array( $file, array( '.', '..' ) ) && is_dir( $folder . '/' . $file ) && ! in_array( $folder . '/' . $file . '/', $this->get_exclude_dirs( $folder ) ) ) {
|
129 |
-
$class='';
|
130 |
-
|
131 |
-
|
132 |
-
echo '<nobr class="' . $class . '"><label for="idpluginexcludedirs-'.sanitize_title_with_dashes( $file ).'"><input class="checkbox" type="checkbox"' . checked( in_array( $file, BackWPup_Option::get( $main, 'backuppluginsexcludedirs' ) ), TRUE, FALSE ) . ' name="backuppluginsexcludedirs[]" id="idpluginexcludedirs-'.sanitize_title_with_dashes( $file ).'" value="' . $file . '" /> ' . $file . ' (' . size_format( BackWPup_File::get_folder_size( $folder . '/' . $file ), 2 ) . ')</label><br /></nobr>';
|
133 |
}
|
134 |
}
|
135 |
@closedir( $dir );
|
@@ -141,10 +147,13 @@ class BackWPup_JobType_File extends BackWPup_JobTypes {
|
|
141 |
<tr valign="top">
|
142 |
<th scope="row"><label for="idbackupthemes"><?php _e( 'Backup themes', 'backwpup' ); ?></label></th>
|
143 |
<td>
|
144 |
-
<?php
|
|
|
|
|
|
|
145 |
<input class="checkbox"
|
146 |
type="checkbox"<?php checked( BackWPup_Option::get( $main, 'backupthemes' ), TRUE, TRUE );?>
|
147 |
-
name="backupthemes" id="idbackupthemes" value="1" /> <code><?php echo $folder; ?></code
|
148 |
|
149 |
<fieldset id="backupthemesexcludedirs" style="padding-left:15px; margin:2px;">
|
150 |
<legend><?php _e( 'Exclude:', 'backwpup' ); ?></legend>
|
@@ -152,10 +161,9 @@ class BackWPup_JobType_File extends BackWPup_JobTypes {
|
|
152 |
if ( $dir = @opendir( $folder ) ) {
|
153 |
while ( ( $file = readdir( $dir ) ) !== FALSE ) {
|
154 |
if ( ! in_array( $file, array( '.', '..' ) ) && is_dir( $folder . '/' . $file ) && ! in_array( $folder . '/' . $file . '/', $this->get_exclude_dirs( $folder ) ) ) {
|
155 |
-
$class='';
|
156 |
-
|
157 |
-
|
158 |
-
echo '<nobr class="' . $class . '"><label for="idthemesexcludedirs-'.sanitize_title_with_dashes( $file ).'"><input class="checkbox" type="checkbox"' . checked( in_array( $file, BackWPup_Option::get( $main, 'backupthemesexcludedirs' ) ), TRUE, FALSE ) . ' name="backupthemesexcludedirs[]" id="idthemesexcludedirs-'.sanitize_title_with_dashes( $file ).'" value="' . $file . '" /> ' . $file . ' (' . size_format( BackWPup_File::get_folder_size( $folder . '/' . $file ), 2 ) . ')</label><br /></nobr>';
|
159 |
}
|
160 |
}
|
161 |
@closedir( $dir );
|
@@ -167,10 +175,13 @@ class BackWPup_JobType_File extends BackWPup_JobTypes {
|
|
167 |
<tr valign="top">
|
168 |
<th scope="row"><label for="idbackupuploads"><?php _e( 'Backup uploads folder', 'backwpup' ); ?></label></th>
|
169 |
<td>
|
170 |
-
<?php
|
|
|
|
|
|
|
171 |
<input class="checkbox"
|
172 |
type="checkbox"<?php checked( BackWPup_Option::get( $main, 'backupuploads' ), TRUE, TRUE );?>
|
173 |
-
name="backupuploads" id="idbackupuploads" value="1" /> <code><?php echo $folder; ?></code
|
174 |
|
175 |
<fieldset id="backupuploadsexcludedirs" style="padding-left:15px; margin:2px;">
|
176 |
<legend><?php _e( 'Exclude:', 'backwpup' ); ?></legend>
|
@@ -178,10 +189,9 @@ class BackWPup_JobType_File extends BackWPup_JobTypes {
|
|
178 |
if ( $dir = @opendir( $folder ) ) {
|
179 |
while ( ( $file = readdir( $dir ) ) !== FALSE ) {
|
180 |
if ( ! in_array( $file, array( '.', '..' ) ) && is_dir( $folder . '/' . $file ) && ! in_array( $folder . '/' . $file . '/', $this->get_exclude_dirs( $folder ) ) ) {
|
181 |
-
$class='';
|
182 |
-
|
183 |
-
|
184 |
-
echo '<nobr class="' . $class . '"><label for="iduploadexcludedirs-'.sanitize_title_with_dashes( $file ).'"><input class="checkbox" type="checkbox"' . checked( in_array( $file, BackWPup_Option::get( $main, 'backupuploadsexcludedirs' ) ), TRUE, FALSE ) . ' name="backupuploadsexcludedirs[]" id="iduploadexcludedirs-'.sanitize_title_with_dashes( $file ).'" value="' . $file . '" /> ' . $file . ' (' . size_format( BackWPup_File::get_folder_size( $folder . '/' . $file ), 2 ) . ')</label><br /></nobr>';
|
185 |
}
|
186 |
}
|
187 |
@closedir( $dir );
|
63 |
<tr valign="top">
|
64 |
<th scope="row"><label for="idbackuproot"><?php _e( 'Backup root folder', 'backwpup' ); ?></label></th>
|
65 |
<td>
|
66 |
+
<?php
|
67 |
+
$folder = untrailingslashit( str_replace( '\\', '/', ABSPATH ) );
|
68 |
+
$folder_size = ( BackWPup_Option::get( 'cfg', 'showfoldersize') ) ? ' (' . size_format( BackWPup_File::get_folder_size( $folder, FALSE ), 2 ) . ')' : '';
|
69 |
+
?>
|
70 |
<input class="checkbox"
|
71 |
type="checkbox"<?php checked( BackWPup_Option::get( $main, 'backuproot' ), TRUE, TRUE );?>
|
72 |
+
name="backuproot" id="idbackuproot" value="1" /> <code><?php echo $folder; ?></code><?php echo $folder_size; ?>
|
73 |
|
74 |
<fieldset id="backuprootexcludedirs" style="padding-left:15px; margin:2px;">
|
75 |
<legend><?php _e( 'Exclude:', 'backwpup' ); ?></legend>
|
77 |
if ( $dir = @opendir( $folder ) ) {
|
78 |
while ( ( $file = readdir( $dir ) ) !== FALSE ) {
|
79 |
if ( ! in_array( $file, array( '.', '..' ) ) && is_dir( $folder . '/' . $file ) && ! in_array( $folder . '/' . $file . '/', $this->get_exclude_dirs( $folder ) ) ) {
|
80 |
+
$class = ( stristr( $file, 'backup') || stristr( $file, 'cache') || stristr( $file, 'temp') ) ? $class='tempfolder' : '';
|
81 |
+
$folder_size = ( BackWPup_Option::get( 'cfg', 'showfoldersize') ) ? ' (' . size_format( BackWPup_File::get_folder_size( $folder . '/' . $file ), 2 ) . ')' : '';
|
82 |
+
echo '<nobr class="' . $class . '"><label for="idrootexcludedirs-'.sanitize_title_with_dashes( $file ).'"><input class="checkbox" type="checkbox"' . checked( in_array( $file, BackWPup_Option::get( $main, 'backuprootexcludedirs' ) ), TRUE, FALSE ) . ' name="backuprootexcludedirs[]" id="idrootexcludedirs-'.sanitize_title_with_dashes( $file ).'" value="' . $file . '" /> ' . $file . $folder_size . '</label><br /></nobr>';
|
|
|
83 |
}
|
84 |
}
|
85 |
@closedir( $dir );
|
91 |
<tr valign="top">
|
92 |
<th scope="row"><label for="idbackupcontent"><?php _e( 'Backup content folder', 'backwpup' ); ?></label></th>
|
93 |
<td>
|
94 |
+
<?php
|
95 |
+
$folder = untrailingslashit( str_replace( '\\', '/', WP_CONTENT_DIR ) );
|
96 |
+
$folder_size = ( BackWPup_Option::get( 'cfg', 'showfoldersize') ) ? ' (' . size_format( BackWPup_File::get_folder_size( $folder, FALSE ), 2 ) . ')' : '';
|
97 |
+
?>
|
98 |
<input class="checkbox"
|
99 |
type="checkbox"<?php checked( BackWPup_Option::get( $main, 'backupcontent' ), TRUE, TRUE );?>
|
100 |
+
name="backupcontent" id="idbackupcontent" value="1" /> <code><?php echo $folder; ?></code><?php echo $folder_size; ?>
|
101 |
|
102 |
<fieldset id="backupcontentexcludedirs" style="padding-left:15px; margin:2px;">
|
103 |
<legend><?php _e( 'Exclude:', 'backwpup' ); ?></legend>
|
105 |
if ( $dir = @opendir( $folder ) ) {
|
106 |
while ( ( $file = readdir( $dir ) ) !== FALSE ) {
|
107 |
if ( ! in_array( $file, array( '.', '..' ) ) && is_dir( $folder . '/' . $file ) && ! in_array( $folder . '/' . $file . '/', $this->get_exclude_dirs( $folder ) ) ) {
|
108 |
+
$class = ( stristr( $file, 'backup') || stristr( $file, 'cache') || stristr( $file, 'temp') ) ? $class='tempfolder' : '';
|
109 |
+
$folder_size = ( BackWPup_Option::get( 'cfg', 'showfoldersize') ) ? ' (' . size_format( BackWPup_File::get_folder_size( $folder . '/' . $file ), 2 ) . ')' : '';
|
110 |
+
echo '<nobr class="' . $class . '"><label for="idcontentexcludedirs-'.sanitize_title_with_dashes( $file ).'"><input class="checkbox" type="checkbox"' . checked( in_array( $file, BackWPup_Option::get( $main, 'backupcontentexcludedirs' ) ), TRUE, FALSE ) . ' name="backupcontentexcludedirs[]" id="idcontentexcludedirs-'.sanitize_title_with_dashes( $file ).'" value="' . $file . '" /> ' . $file . $folder_size . '</label><br /></nobr>';
|
|
|
111 |
}
|
112 |
}
|
113 |
@closedir( $dir );
|
119 |
<tr valign="top">
|
120 |
<th scope="row"><label for="idbackupplugins"><?php _e( 'Backup plugins', 'backwpup' ); ?></label></th>
|
121 |
<td>
|
122 |
+
<?php
|
123 |
+
$folder = untrailingslashit( str_replace( '\\', '/', WP_PLUGIN_DIR ) );
|
124 |
+
$folder_size = ( BackWPup_Option::get( 'cfg', 'showfoldersize') ) ? ' (' . size_format( BackWPup_File::get_folder_size( $folder, FALSE ), 2 ) . ')' : '';
|
125 |
+
?>
|
126 |
<input class="checkbox"
|
127 |
type="checkbox"<?php checked( BackWPup_Option::get( $main, 'backupplugins' ), TRUE, TRUE );?>
|
128 |
+
name="backupplugins" id="idbackupplugins" value="1" /> <code><?php echo $folder; ?></code><?php echo $folder_size; ?>
|
129 |
|
130 |
<fieldset id="backuppluginsexcludedirs" style="padding-left:15px; margin:2px;">
|
131 |
<legend><?php _e( 'Exclude:', 'backwpup' ); ?></legend>
|
133 |
if ( $dir = @opendir( $folder ) ) {
|
134 |
while ( ( $file = readdir( $dir ) ) !== FALSE ) {
|
135 |
if ( ! in_array( $file, array( '.', '..' ) ) && is_dir( $folder . '/' . $file ) && ! in_array( $folder . '/' . $file . '/', $this->get_exclude_dirs( $folder ) ) ) {
|
136 |
+
$class = ( stristr( $file, 'backup') || stristr( $file, 'cache') || stristr( $file, 'temp') ) ? $class='tempfolder' : '';
|
137 |
+
$folder_size = ( BackWPup_Option::get( 'cfg', 'showfoldersize') ) ? ' (' . size_format( BackWPup_File::get_folder_size( $folder . '/' . $file ), 2 ) . ')' : '';
|
138 |
+
echo '<nobr class="' . $class . '"><label for="idpluginexcludedirs-'.sanitize_title_with_dashes( $file ).'"><input class="checkbox" type="checkbox"' . checked( in_array( $file, BackWPup_Option::get( $main, 'backuppluginsexcludedirs' ) ), TRUE, FALSE ) . ' name="backuppluginsexcludedirs[]" id="idpluginexcludedirs-'.sanitize_title_with_dashes( $file ).'" value="' . $file . '" /> ' . $file . $folder_size . '</label><br /></nobr>';
|
|
|
139 |
}
|
140 |
}
|
141 |
@closedir( $dir );
|
147 |
<tr valign="top">
|
148 |
<th scope="row"><label for="idbackupthemes"><?php _e( 'Backup themes', 'backwpup' ); ?></label></th>
|
149 |
<td>
|
150 |
+
<?php
|
151 |
+
$folder = untrailingslashit( str_replace( '\\', '/', trailingslashit( get_theme_root() ) ) );
|
152 |
+
$folder_size = ( BackWPup_Option::get( 'cfg', 'showfoldersize') ) ? ' (' . size_format( BackWPup_File::get_folder_size( $folder, FALSE ), 2 ) . ')' : '';
|
153 |
+
?>
|
154 |
<input class="checkbox"
|
155 |
type="checkbox"<?php checked( BackWPup_Option::get( $main, 'backupthemes' ), TRUE, TRUE );?>
|
156 |
+
name="backupthemes" id="idbackupthemes" value="1" /> <code><?php echo $folder; ?></code><?php echo $folder_size; ?>
|
157 |
|
158 |
<fieldset id="backupthemesexcludedirs" style="padding-left:15px; margin:2px;">
|
159 |
<legend><?php _e( 'Exclude:', 'backwpup' ); ?></legend>
|
161 |
if ( $dir = @opendir( $folder ) ) {
|
162 |
while ( ( $file = readdir( $dir ) ) !== FALSE ) {
|
163 |
if ( ! in_array( $file, array( '.', '..' ) ) && is_dir( $folder . '/' . $file ) && ! in_array( $folder . '/' . $file . '/', $this->get_exclude_dirs( $folder ) ) ) {
|
164 |
+
$class = ( stristr( $file, 'backup') || stristr( $file, 'cache') || stristr( $file, 'temp') ) ? $class='tempfolder' : '';
|
165 |
+
$folder_size = ( BackWPup_Option::get( 'cfg', 'showfoldersize') ) ? ' (' . size_format( BackWPup_File::get_folder_size( $folder . '/' . $file ), 2 ) . ')' : '';
|
166 |
+
echo '<nobr class="' . $class . '"><label for="idthemesexcludedirs-'.sanitize_title_with_dashes( $file ).'"><input class="checkbox" type="checkbox"' . checked( in_array( $file, BackWPup_Option::get( $main, 'backupthemesexcludedirs' ) ), TRUE, FALSE ) . ' name="backupthemesexcludedirs[]" id="idthemesexcludedirs-'.sanitize_title_with_dashes( $file ).'" value="' . $file . '" /> ' . $file . $folder_size . '</label><br /></nobr>';
|
|
|
167 |
}
|
168 |
}
|
169 |
@closedir( $dir );
|
175 |
<tr valign="top">
|
176 |
<th scope="row"><label for="idbackupuploads"><?php _e( 'Backup uploads folder', 'backwpup' ); ?></label></th>
|
177 |
<td>
|
178 |
+
<?php
|
179 |
+
$folder = untrailingslashit( BackWPup_File::get_upload_dir() );
|
180 |
+
$folder_size = ( BackWPup_Option::get( 'cfg', 'showfoldersize') ) ? ' (' . size_format( BackWPup_File::get_folder_size( $folder, FALSE ), 2 ) . ')' : '';
|
181 |
+
?>
|
182 |
<input class="checkbox"
|
183 |
type="checkbox"<?php checked( BackWPup_Option::get( $main, 'backupuploads' ), TRUE, TRUE );?>
|
184 |
+
name="backupuploads" id="idbackupuploads" value="1" /> <code><?php echo $folder; ?></code><?php echo $folder_size; ?>
|
185 |
|
186 |
<fieldset id="backupuploadsexcludedirs" style="padding-left:15px; margin:2px;">
|
187 |
<legend><?php _e( 'Exclude:', 'backwpup' ); ?></legend>
|
189 |
if ( $dir = @opendir( $folder ) ) {
|
190 |
while ( ( $file = readdir( $dir ) ) !== FALSE ) {
|
191 |
if ( ! in_array( $file, array( '.', '..' ) ) && is_dir( $folder . '/' . $file ) && ! in_array( $folder . '/' . $file . '/', $this->get_exclude_dirs( $folder ) ) ) {
|
192 |
+
$class = ( stristr( $file, 'backup') || stristr( $file, 'cache') || stristr( $file, 'temp') ) ? $class='tempfolder' : '';
|
193 |
+
$folder_size = ( BackWPup_Option::get( 'cfg', 'showfoldersize') ) ? ' (' . size_format( BackWPup_File::get_folder_size( $folder . '/' . $file ), 2 ) . ')' : '';
|
194 |
+
echo '<nobr class="' . $class . '"><label for="iduploadexcludedirs-'.sanitize_title_with_dashes( $file ).'"><input class="checkbox" type="checkbox"' . checked( in_array( $file, BackWPup_Option::get( $main, 'backupuploadsexcludedirs' ) ), TRUE, FALSE ) . ' name="backupuploadsexcludedirs[]" id="iduploadexcludedirs-'.sanitize_title_with_dashes( $file ).'" value="' . $file . '" /> ' . $file . $folder_size . '</label><br /></nobr>';
|
|
|
195 |
}
|
196 |
}
|
197 |
@closedir( $dir );
|
inc/class-mysqldump.php
CHANGED
@@ -51,36 +51,37 @@ class BackWPup_MySQLDump {
|
|
51 |
* @global $wpdb wpdb
|
52 |
*/
|
53 |
public function __construct( $args = array() ) {
|
54 |
-
global $wpdb;
|
55 |
|
56 |
if ( ! class_exists( 'mysqli' ) )
|
57 |
throw new BackWPup_MySQLDump_Exception( __( 'No MySQLi extension found. Please install it.', 'backwpup' ) );
|
58 |
|
59 |
$default_args = array(
|
60 |
-
'dbhost' =>
|
61 |
-
'dbname' =>
|
62 |
-
'dbuser' =>
|
63 |
-
'dbpassword' =>
|
64 |
-
'dbcharset' =>
|
65 |
'dumpfilehandle' => fopen( 'php://output', 'wb' ),
|
66 |
'dumpfile' => NULL,
|
67 |
'compression' => ''
|
68 |
);
|
69 |
|
70 |
$args = wp_parse_args( $args , $default_args );
|
|
|
|
|
|
|
|
|
71 |
|
72 |
//check if port or socket in hostname and set port and socket
|
73 |
$args[ 'dbport' ] = NULL;
|
74 |
$args[ 'dbsocket' ] = NULL;
|
75 |
if ( strstr( $args[ 'dbhost' ], ':' ) ) {
|
76 |
-
$hostparts = explode( ':', $args[ 'dbhost' ] );
|
77 |
$args[ 'dbhost' ] = $hostparts[ 0 ];
|
78 |
if ( is_numeric( $hostparts[ 1 ] ) )
|
79 |
-
$args[ 'dbport' ] = (
|
80 |
else
|
81 |
$args[ 'dbsocket' ] = $hostparts[ 1 ] ;
|
82 |
-
if ( isset( $hostparts[ 2 ] ) )
|
83 |
-
$args[ 'dbsocket' ] = $hostparts[ 2 ];
|
84 |
}
|
85 |
|
86 |
//connect to Database
|
@@ -89,7 +90,7 @@ class BackWPup_MySQLDump {
|
|
89 |
throw new BackWPup_MySQLDump_Exception( sprintf( __( 'Can not connect to MySQL Database %1$d: %2$s', 'backwpup' ), $this->mysqli->connect_errno, $this->mysqli->connect_error ) );
|
90 |
|
91 |
//set charset
|
92 |
-
if ( ! empty( $args[ 'dbcharset' ] ) && method_exists($this->mysqli, 'set_charset' ) ) {
|
93 |
$res = $this->mysqli->set_charset( $args[ 'dbcharset' ] );
|
94 |
if ( ! $res )
|
95 |
throw new BackWPup_MySQLDump_Exception( sprintf( _x( 'Can not set DB charset to %s','Database Charset', 'backwpup' ), $args[ 'dbcharset' ] ) );
|
@@ -193,7 +194,7 @@ class BackWPup_MySQLDump {
|
|
193 |
$dbdumpheader .= "/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;\n";
|
194 |
$dbdumpheader .= "/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;\n";
|
195 |
$dbdumpheader .= "/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;\n";
|
196 |
-
$dbdumpheader .= "/*!40101 SET NAMES " . $this->mysqli->
|
197 |
$dbdumpheader .= "/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;\n";
|
198 |
$dbdumpheader .= "/*!40103 SET TIME_ZONE='" . $mysqltimezone . "' */;\n";
|
199 |
$dbdumpheader .= "/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;\n";
|
@@ -213,49 +214,53 @@ class BackWPup_MySQLDump {
|
|
213 |
|
214 |
//dump Functions
|
215 |
$res = $this->mysqli->query( "SHOW FUNCTION STATUS" );
|
216 |
-
if ( $this->mysqli->error )
|
217 |
trigger_error( sprintf( __( 'Database error %1$s for query %2$s', 'backwpup' ), $this->mysqli->error, "SHOW FUNCTION STATUS" ), E_USER_WARNING );
|
218 |
-
|
219 |
-
|
220 |
-
|
221 |
-
|
222 |
-
|
223 |
-
|
224 |
-
|
225 |
-
|
226 |
-
|
227 |
-
|
228 |
-
|
229 |
-
|
230 |
-
|
231 |
-
|
232 |
-
|
233 |
-
|
|
|
|
|
|
|
234 |
}
|
235 |
-
$res->close();
|
236 |
|
237 |
//dump Procedures
|
238 |
$res = $this->mysqli->query( "SHOW PROCEDURE STATUS" );
|
239 |
-
if ( $this->mysqli->error )
|
240 |
trigger_error( sprintf( __( 'Database error %1$s for query %2$s', 'backwpup' ), $this->mysqli->error, "SHOW PROCEDURE STATUS" ), E_USER_WARNING );
|
241 |
-
|
242 |
-
|
243 |
-
|
244 |
-
|
245 |
-
|
246 |
-
|
247 |
-
|
248 |
-
|
249 |
-
|
250 |
-
|
251 |
-
|
252 |
-
|
253 |
-
|
254 |
-
|
255 |
-
|
256 |
-
|
|
|
|
|
|
|
257 |
}
|
258 |
-
$res->close();
|
259 |
|
260 |
//for better import with mysql client
|
261 |
$dbdumpfooter = "\n/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;\n";
|
@@ -282,7 +287,7 @@ class BackWPup_MySQLDump {
|
|
282 |
$tablecreate = "\n--\n-- View structure for `" . $table . "`\n--\n\n";
|
283 |
$tablecreate .= "DROP VIEW IF EXISTS `" . $table . "`;\n";
|
284 |
$tablecreate .= "/*!40101 SET @saved_cs_client = @@character_set_client */;\n";
|
285 |
-
$tablecreate .= "/*!40101 SET character_set_client = '" . $this->mysqli->
|
286 |
//Dump the view structure
|
287 |
$res = $this->mysqli->query( "SHOW CREATE VIEW `" . $table . "`" );
|
288 |
if ( $this->mysqli->error )
|
@@ -303,7 +308,7 @@ class BackWPup_MySQLDump {
|
|
303 |
$tablecreate = "\n--\n-- Table structure for `" . $table . "`\n--\n\n";
|
304 |
$tablecreate .= "DROP TABLE IF EXISTS `" . $table . "`;\n";
|
305 |
$tablecreate .= "/*!40101 SET @saved_cs_client = @@character_set_client */;\n";
|
306 |
-
$tablecreate .= "/*!40101 SET character_set_client = '" . $this->mysqli->
|
307 |
//Dump the table structure
|
308 |
$res = $this->mysqli->query( "SHOW CREATE TABLE `" . $table . "`" );
|
309 |
if ( $this->mysqli->error )
|
51 |
* @global $wpdb wpdb
|
52 |
*/
|
53 |
public function __construct( $args = array() ) {
|
|
|
54 |
|
55 |
if ( ! class_exists( 'mysqli' ) )
|
56 |
throw new BackWPup_MySQLDump_Exception( __( 'No MySQLi extension found. Please install it.', 'backwpup' ) );
|
57 |
|
58 |
$default_args = array(
|
59 |
+
'dbhost' => DB_HOST,
|
60 |
+
'dbname' => DB_NAME,
|
61 |
+
'dbuser' => DB_USER,
|
62 |
+
'dbpassword' => DB_PASSWORD,
|
63 |
+
'dbcharset' => DB_CHARSET,
|
64 |
'dumpfilehandle' => fopen( 'php://output', 'wb' ),
|
65 |
'dumpfile' => NULL,
|
66 |
'compression' => ''
|
67 |
);
|
68 |
|
69 |
$args = wp_parse_args( $args , $default_args );
|
70 |
+
|
71 |
+
//set empty host to localhost
|
72 |
+
if ( empty( $args[ 'dbhost' ] ) )
|
73 |
+
$args[ 'dbhost' ] = 'localhost';
|
74 |
|
75 |
//check if port or socket in hostname and set port and socket
|
76 |
$args[ 'dbport' ] = NULL;
|
77 |
$args[ 'dbsocket' ] = NULL;
|
78 |
if ( strstr( $args[ 'dbhost' ], ':' ) ) {
|
79 |
+
$hostparts = explode( ':', $args[ 'dbhost' ], 2 );
|
80 |
$args[ 'dbhost' ] = $hostparts[ 0 ];
|
81 |
if ( is_numeric( $hostparts[ 1 ] ) )
|
82 |
+
$args[ 'dbport' ] = (int) $hostparts[ 1 ];
|
83 |
else
|
84 |
$args[ 'dbsocket' ] = $hostparts[ 1 ] ;
|
|
|
|
|
85 |
}
|
86 |
|
87 |
//connect to Database
|
90 |
throw new BackWPup_MySQLDump_Exception( sprintf( __( 'Can not connect to MySQL Database %1$d: %2$s', 'backwpup' ), $this->mysqli->connect_errno, $this->mysqli->connect_error ) );
|
91 |
|
92 |
//set charset
|
93 |
+
if ( ! empty( $args[ 'dbcharset' ] ) && method_exists( $this->mysqli, 'set_charset' ) ) {
|
94 |
$res = $this->mysqli->set_charset( $args[ 'dbcharset' ] );
|
95 |
if ( ! $res )
|
96 |
throw new BackWPup_MySQLDump_Exception( sprintf( _x( 'Can not set DB charset to %s','Database Charset', 'backwpup' ), $args[ 'dbcharset' ] ) );
|
194 |
$dbdumpheader .= "/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;\n";
|
195 |
$dbdumpheader .= "/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;\n";
|
196 |
$dbdumpheader .= "/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;\n";
|
197 |
+
$dbdumpheader .= "/*!40101 SET NAMES " . $this->mysqli->character_set_name() . " */;\n";
|
198 |
$dbdumpheader .= "/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;\n";
|
199 |
$dbdumpheader .= "/*!40103 SET TIME_ZONE='" . $mysqltimezone . "' */;\n";
|
200 |
$dbdumpheader .= "/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;\n";
|
214 |
|
215 |
//dump Functions
|
216 |
$res = $this->mysqli->query( "SHOW FUNCTION STATUS" );
|
217 |
+
if ( $this->mysqli->error ) {
|
218 |
trigger_error( sprintf( __( 'Database error %1$s for query %2$s', 'backwpup' ), $this->mysqli->error, "SHOW FUNCTION STATUS" ), E_USER_WARNING );
|
219 |
+
} else {
|
220 |
+
while ( $function_status = $res->fetch_assoc() ) {
|
221 |
+
if ( $this->dbname != $function_status[ 'Db' ] )
|
222 |
+
continue;
|
223 |
+
$create = "\n--\n-- Function structure for " . $function_status[ 'Name' ] . "\n--\n\n";
|
224 |
+
$create .= "DROP FUNCTION IF EXISTS `" . $function_status[ 'Name' ] . "`;\n";
|
225 |
+
$create .= "/*!40101 SET @saved_cs_client = @@character_set_client */;\n";
|
226 |
+
$create .= "/*!40101 SET character_set_client = '" . $this->mysqli->character_set_name() . "' */;\n";
|
227 |
+
//Dump the view structure
|
228 |
+
$res2 = $this->mysqli->query( "SHOW CREATE FUNCTION `" . $function_status[ 'Db' ] . "`.`" . $function_status[ 'Name' ] . "`" );
|
229 |
+
if ( $this->mysqli->error )
|
230 |
+
trigger_error( sprintf( __( 'Database error %1$s for query %2$s', 'backwpup' ), $this->mysqli->error, "SHOW CREATE FUNCTION `" . $function_status[ 'Db' ] . "`.`" . $function_status[ 'Name' ] . "`" ), E_USER_WARNING );
|
231 |
+
$create_function = $res2->fetch_assoc();
|
232 |
+
$res2->close();
|
233 |
+
$create .= $create_function[ 'Create Function' ] . ";\n";
|
234 |
+
$create .= "/*!40101 SET character_set_client = @saved_cs_client */;\n";
|
235 |
+
$this->write( $create );
|
236 |
+
}
|
237 |
+
$res->close();
|
238 |
}
|
|
|
239 |
|
240 |
//dump Procedures
|
241 |
$res = $this->mysqli->query( "SHOW PROCEDURE STATUS" );
|
242 |
+
if ( $this->mysqli->error ) {
|
243 |
trigger_error( sprintf( __( 'Database error %1$s for query %2$s', 'backwpup' ), $this->mysqli->error, "SHOW PROCEDURE STATUS" ), E_USER_WARNING );
|
244 |
+
} else {
|
245 |
+
while ( $procedure_status = $res->fetch_assoc() ) {
|
246 |
+
if ( $this->dbname != $procedure_status[ 'Db' ] )
|
247 |
+
continue;
|
248 |
+
$create = "\n--\n-- Procedure structure for " . $procedure_status[ 'Name' ] . "\n--\n\n";
|
249 |
+
$create .= "DROP PROCEDURE IF EXISTS `" . $procedure_status[ 'Name' ] . "`;\n";
|
250 |
+
$create .= "/*!40101 SET @saved_cs_client = @@character_set_client */;\n";
|
251 |
+
$create .= "/*!40101 SET character_set_client = '" . $this->mysqli->character_set_name() . "' */;\n";
|
252 |
+
//Dump the view structure
|
253 |
+
$res2 = $this->mysqli->query( "SHOW CREATE PROCEDURE `" . $procedure_status[ 'Db' ] . "`.`" . $procedure_status[ 'Name' ] . "`" );
|
254 |
+
if ( $this->mysqli->error )
|
255 |
+
trigger_error( sprintf( __( 'Database error %1$s for query %2$s', 'backwpup' ), $this->mysqli->error, "SHOW CREATE PROCEDURE `" . $procedure_status[ 'Db' ] . "`.`" . $procedure_status[ 'Name' ] . "`" ), E_USER_WARNING );
|
256 |
+
$create_procedure = $res2->fetch_assoc();
|
257 |
+
$res2->close();
|
258 |
+
$create .= $create_procedure[ 'Create Procedure' ] . ";\n";
|
259 |
+
$create .= "/*!40101 SET character_set_client = @saved_cs_client */;\n";
|
260 |
+
$this->write( $create );
|
261 |
+
}
|
262 |
+
$res->close();
|
263 |
}
|
|
|
264 |
|
265 |
//for better import with mysql client
|
266 |
$dbdumpfooter = "\n/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;\n";
|
287 |
$tablecreate = "\n--\n-- View structure for `" . $table . "`\n--\n\n";
|
288 |
$tablecreate .= "DROP VIEW IF EXISTS `" . $table . "`;\n";
|
289 |
$tablecreate .= "/*!40101 SET @saved_cs_client = @@character_set_client */;\n";
|
290 |
+
$tablecreate .= "/*!40101 SET character_set_client = '" . $this->mysqli->character_set_name() . "' */;\n";
|
291 |
//Dump the view structure
|
292 |
$res = $this->mysqli->query( "SHOW CREATE VIEW `" . $table . "`" );
|
293 |
if ( $this->mysqli->error )
|
308 |
$tablecreate = "\n--\n-- Table structure for `" . $table . "`\n--\n\n";
|
309 |
$tablecreate .= "DROP TABLE IF EXISTS `" . $table . "`;\n";
|
310 |
$tablecreate .= "/*!40101 SET @saved_cs_client = @@character_set_client */;\n";
|
311 |
+
$tablecreate .= "/*!40101 SET character_set_client = '" . $this->mysqli->character_set_name() . "' */;\n";
|
312 |
//Dump the table structure
|
313 |
$res = $this->mysqli->query( "SHOW CREATE TABLE `" . $table . "`" );
|
314 |
if ( $this->mysqli->error )
|
inc/class-option.php
CHANGED
@@ -60,13 +60,14 @@ final class BackWPup_Option {
|
|
60 |
if ( $group == 'cfg' ) { //for settings
|
61 |
//generel
|
62 |
$default[ 'cfg' ][ 'showadminbar' ] = TRUE;
|
|
|
63 |
$default[ 'cfg' ][ 'protectfolders' ] = TRUE;
|
64 |
//job
|
65 |
$default[ 'cfg' ][ 'jobstepretry' ] = 3;
|
66 |
-
$default[ 'cfg' ][ 'jobsteprestart' ] =
|
67 |
$default[ 'cfg' ][ 'jobrunauthkey' ] = substr( md5( md5( SECURE_AUTH_KEY ) ), 11, 8 );
|
68 |
$default[ 'cfg' ][ 'jobnotranslate' ] = FALSE;
|
69 |
-
$default[ 'cfg' ][ 'jobwaittimems' ] =
|
70 |
//Logs
|
71 |
$default[ 'cfg' ][ 'maxlogs' ] = 50;
|
72 |
$default[ 'cfg' ][ 'gzlogs' ] = FALSE;
|
60 |
if ( $group == 'cfg' ) { //for settings
|
61 |
//generel
|
62 |
$default[ 'cfg' ][ 'showadminbar' ] = TRUE;
|
63 |
+
$default[ 'cfg' ][ 'showfoldersize' ] = FALSE;
|
64 |
$default[ 'cfg' ][ 'protectfolders' ] = TRUE;
|
65 |
//job
|
66 |
$default[ 'cfg' ][ 'jobstepretry' ] = 3;
|
67 |
+
$default[ 'cfg' ][ 'jobsteprestart' ] = FALSE;
|
68 |
$default[ 'cfg' ][ 'jobrunauthkey' ] = substr( md5( md5( SECURE_AUTH_KEY ) ), 11, 8 );
|
69 |
$default[ 'cfg' ][ 'jobnotranslate' ] = FALSE;
|
70 |
+
$default[ 'cfg' ][ 'jobwaittimems' ] = 0;
|
71 |
//Logs
|
72 |
$default[ 'cfg' ][ 'maxlogs' ] = 50;
|
73 |
$default[ 'cfg' ][ 'gzlogs' ] = FALSE;
|
inc/class-page-about.php
CHANGED
@@ -60,7 +60,7 @@ class BackWPup_Page_About {
|
|
60 |
<ul><li><?php _e('Dropbox authentication must be done again','backwpup'); ?></li>
|
61 |
<li><?php _e('SugarSync authentication must be done again','backwpup'); ?></li>
|
62 |
<li><?php _e('S3 Settings','backwpup'); ?></li>
|
63 |
-
<li><?php _e('Google Storage is now in S3','backwpup'); ?></li>
|
64 |
<li><?php _e('All your passwords','backwpup'); ?></li>
|
65 |
</ul>
|
66 |
</div>
|
@@ -87,12 +87,12 @@ _e( 'The backup files can be used to save your whole installation including <cod
|
|
87 |
</div>
|
88 |
</div>
|
89 |
<?php } ?>
|
90 |
-
<?php
|
91 |
if ( class_exists( 'marketpress_autoupdate' ) && class_exists( 'BackWPup_Features' ) ) :
|
92 |
$autoupdate = $autoupdate = marketpress_autoupdate::get_instance( BackWPup::get_plugin_data( 'Slug' ) , BackWPup::get_plugin_data( 'MainFile' ) );
|
93 |
-
if ( $autoupdate->license_check() == 'false' ) :
|
94 |
$plugins = get_plugins();
|
95 |
-
$localplugin = FALSE;
|
96 |
foreach ( $plugins as $plugin ) {
|
97 |
if ( BackWPup::get_plugin_data( 'Name' ) == $plugin[ 'Name' ] )
|
98 |
$localplugin = TRUE;
|
60 |
<ul><li><?php _e('Dropbox authentication must be done again','backwpup'); ?></li>
|
61 |
<li><?php _e('SugarSync authentication must be done again','backwpup'); ?></li>
|
62 |
<li><?php _e('S3 Settings','backwpup'); ?></li>
|
63 |
+
<li><?php _e('Google Storage is now in S3 service settings','backwpup'); ?></li>
|
64 |
<li><?php _e('All your passwords','backwpup'); ?></li>
|
65 |
</ul>
|
66 |
</div>
|
87 |
</div>
|
88 |
</div>
|
89 |
<?php } ?>
|
90 |
+
<?php
|
91 |
if ( class_exists( 'marketpress_autoupdate' ) && class_exists( 'BackWPup_Features' ) ) :
|
92 |
$autoupdate = $autoupdate = marketpress_autoupdate::get_instance( BackWPup::get_plugin_data( 'Slug' ) , BackWPup::get_plugin_data( 'MainFile' ) );
|
93 |
+
if ( $autoupdate->license_check() == 'false' ) :
|
94 |
$plugins = get_plugins();
|
95 |
+
$localplugin = FALSE;
|
96 |
foreach ( $plugins as $plugin ) {
|
97 |
if ( BackWPup::get_plugin_data( 'Name' ) == $plugin[ 'Name' ] )
|
98 |
$localplugin = TRUE;
|
inc/class-page-backwpup.php
CHANGED
@@ -28,7 +28,7 @@ class BackWPup_Page_BackWPup {
|
|
28 |
header( "Expires: 0" );
|
29 |
header( "Cache-Control: must-revalidate, post-check=0, pre-check=0" );
|
30 |
header( "Content-Type: application/octet-stream; charset=". get_bloginfo( 'charset' ) );
|
31 |
-
header( "Content-Disposition: attachment; filename=" .
|
32 |
try {
|
33 |
$sql_dump = new BackWPup_MySQLDump( array( 'compression'=> 'gz' ) );
|
34 |
foreach ( $sql_dump->tables_to_dump as $key => $table ) {
|
28 |
header( "Expires: 0" );
|
29 |
header( "Cache-Control: must-revalidate, post-check=0, pre-check=0" );
|
30 |
header( "Content-Type: application/octet-stream; charset=". get_bloginfo( 'charset' ) );
|
31 |
+
header( "Content-Disposition: attachment; filename=" . DB_NAME . ".sql.gz;" );
|
32 |
try {
|
33 |
$sql_dump = new BackWPup_MySQLDump( array( 'compression'=> 'gz' ) );
|
34 |
foreach ( $sql_dump->tables_to_dump as $key => $table ) {
|
inc/class-page-jobs.php
CHANGED
@@ -345,6 +345,19 @@ class BackWPup_Page_Jobs extends WP_List_Table {
|
|
345 |
BackWPup_Admin::message( sprintf( __( 'Backups folder %s does not exist and cannot be created. Please create it and set proper write permissions.','backwpup' ), $backups_folder ) );
|
346 |
}
|
347 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
348 |
|
349 |
//only start job if massages empty
|
350 |
$log_messages = BackWPup_Admin::get_message();
|
345 |
BackWPup_Admin::message( sprintf( __( 'Backups folder %s does not exist and cannot be created. Please create it and set proper write permissions.','backwpup' ), $backups_folder ) );
|
346 |
}
|
347 |
}
|
348 |
+
//check sever callback
|
349 |
+
$raw_response = wp_remote_get( add_query_arg( array( 'backwpup_run' => 'test', '_nonce' => substr( wp_hash( wp_nonce_tick() . 'backwup_job_run-test', 'nonce' ), - 12, 10 ) ), home_url( '/' ) ), array(
|
350 |
+
'blocking' => TRUE,
|
351 |
+
'sslverify' => apply_filters( 'https_local_ssl_verify', TRUE ),
|
352 |
+
'headers' => array( 'Authorization' => 'Basic ' . base64_encode( BackWPup_Option::get( 'cfg', 'httpauthuser' ) . ':' . BackWPup_Encryption::decrypt( BackWPup_Option::get( 'cfg', 'httpauthpassword' ) ) ) ),
|
353 |
+
'user-agent' => 'BackWPup/' . BackWPup::get_plugin_data( 'Version' ) ) );
|
354 |
+
$test_result = '';
|
355 |
+
if ( is_wp_error( $raw_response ) )
|
356 |
+
$test_result .= sprintf( __( 'The HTTP response test get a error "%s"','backwpup' ), $raw_response->get_error_message() );
|
357 |
+
if ( 200 != wp_remote_retrieve_response_code( $raw_response ) )
|
358 |
+
$test_result .= sprintf( __( 'The HTTP response test get a false http status (%s)','backwpup' ), wp_remote_retrieve_response_code( $raw_response ) );
|
359 |
+
if ( ! empty( $test_result ) )
|
360 |
+
BackWPup_Admin::message( $test_result );
|
361 |
|
362 |
//only start job if massages empty
|
363 |
$log_messages = BackWPup_Admin::get_message();
|
inc/class-page-settings.php
CHANGED
@@ -47,7 +47,7 @@ class BackWPup_Page_Settings {
|
|
47 |
if ( isset( $_POST[ 'default_settings' ] ) && $_POST[ 'default_settings' ] ) {
|
48 |
$default_cfg = BackWPup_Option::defaults( 'cfg', null );
|
49 |
foreach( $default_cfg as $optionkey => $option ) {
|
50 |
-
if ( $option == FALSE
|
51 |
unset( $_POST[ $optionkey ] );
|
52 |
else
|
53 |
$_POST[ $optionkey ] = $option;
|
@@ -56,6 +56,7 @@ class BackWPup_Page_Settings {
|
|
56 |
}
|
57 |
|
58 |
BackWPup_Option::update( 'cfg', 'showadminbar', isset( $_POST[ 'showadminbar' ] ) ? TRUE : FALSE );
|
|
|
59 |
BackWPup_Option::update( 'cfg', 'jobsteprestart', isset( $_POST[ 'jobsteprestart' ] ) ? TRUE : FALSE );
|
60 |
if ( 100 > $_POST[ 'jobstepretry' ] && 0 < $_POST[ 'jobstepretry' ] )
|
61 |
$_POST[ 'jobstepretry' ] = (int)$_POST[ 'jobstepretry' ];
|
@@ -114,7 +115,7 @@ class BackWPup_Page_Settings {
|
|
114 |
|
115 |
<div class="table ui-tabs-hide" id="backwpup-tab-general">
|
116 |
|
117 |
-
<h3 class="title"><?php _e( '
|
118 |
<p><?php _e( 'Do you want to see BackWPup in the WordPress admin bar?', 'backwpup' ); ?></p>
|
119 |
<table class="form-table">
|
120 |
<tr valign="top">
|
@@ -130,6 +131,19 @@ class BackWPup_Page_Settings {
|
|
130 |
</fieldset>
|
131 |
</td>
|
132 |
</tr>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
133 |
</table>
|
134 |
<h3 class="title"><?php _e( 'Security', 'backwpup' ); ?></h3>
|
135 |
<p><?php _e( 'Security option for BackWPup', 'backwpup' ); ?></p>
|
@@ -306,7 +320,7 @@ class BackWPup_Page_Settings {
|
|
306 |
echo '<tr title=""><td>' . __( 'BackWPup version', 'backwpup' ) . '</td><td>' . BackWPup::get_plugin_data( 'Version' ) . ' <a href="' . translate( BackWPup::get_plugin_data( 'pluginuri' ), 'backwpup' ) . '">' . __( 'Get pro.', 'backwpup' ) . '</a></td></tr>';
|
307 |
else
|
308 |
echo '<tr title=""><td>' . __( 'BackWPup Pro version', 'backwpup' ) . '</td><td>' . BackWPup::get_plugin_data( 'Version' ) . '</td></tr>';
|
309 |
-
echo '<tr title=">=5.3.3"><td>' . __( 'PHP version', 'backwpup' ) . '</td><td>' .
|
310 |
echo '<tr title=">=5.0.7"><td>' . __( 'MySQL version', 'backwpup' ) . '</td><td>' . $wpdb->get_var( "SELECT VERSION() AS version" ) . '</td></tr>';
|
311 |
if ( function_exists( 'curl_version' ) ) {
|
312 |
$curlversion = curl_version();
|
@@ -381,7 +395,7 @@ class BackWPup_Page_Settings {
|
|
381 |
echo '<tr title=""><td>' . __( 'Blog Timezone', 'backwpup' ) . '</td><td>' . get_option( 'timezone_string' ) . '</td></tr>';
|
382 |
echo '<tr title=""><td>' . __( 'Blog Time offset', 'backwpup' ) . '</td><td>' . sprintf( __( '%s hours', 'backwpup' ), get_option( 'gmt_offset' ) ) . '</td></tr>';
|
383 |
echo '<tr title="WPLANG"><td>' . __( 'Blog language', 'backwpup' ) . '</td><td>' . get_bloginfo( 'language' ) . '</td></tr>';
|
384 |
-
echo '<tr title="utf8"><td>' . __( 'MySQL Client encoding', 'backwpup' ) . '</td><td>' .
|
385 |
echo '<tr title="URF-8"><td>' . __( 'Blog charset', 'backwpup' ) . '</td><td>' . get_bloginfo( 'charset' ) . '</td></tr>';
|
386 |
echo '<tr title=">=128M"><td>' . __( 'PHP Memory limit', 'backwpup' ) . '</td><td>' . ini_get( 'memory_limit' ) . '</td></tr>';
|
387 |
echo '<tr title="WP_MEMORY_LIMIT"><td>' . __( 'WP memory limit', 'backwpup' ) . '</td><td>' . WP_MEMORY_LIMIT . '</td></tr>';
|
47 |
if ( isset( $_POST[ 'default_settings' ] ) && $_POST[ 'default_settings' ] ) {
|
48 |
$default_cfg = BackWPup_Option::defaults( 'cfg', null );
|
49 |
foreach( $default_cfg as $optionkey => $option ) {
|
50 |
+
if ( $option == FALSE )
|
51 |
unset( $_POST[ $optionkey ] );
|
52 |
else
|
53 |
$_POST[ $optionkey ] = $option;
|
56 |
}
|
57 |
|
58 |
BackWPup_Option::update( 'cfg', 'showadminbar', isset( $_POST[ 'showadminbar' ] ) ? TRUE : FALSE );
|
59 |
+
BackWPup_Option::update( 'cfg', 'showfoldersize', isset( $_POST[ 'showfoldersize' ] ) ? TRUE : FALSE );
|
60 |
BackWPup_Option::update( 'cfg', 'jobsteprestart', isset( $_POST[ 'jobsteprestart' ] ) ? TRUE : FALSE );
|
61 |
if ( 100 > $_POST[ 'jobstepretry' ] && 0 < $_POST[ 'jobstepretry' ] )
|
62 |
$_POST[ 'jobstepretry' ] = (int)$_POST[ 'jobstepretry' ];
|
115 |
|
116 |
<div class="table ui-tabs-hide" id="backwpup-tab-general">
|
117 |
|
118 |
+
<h3 class="title"><?php _e( 'Display Settings', 'backwpup' ); ?></h3>
|
119 |
<p><?php _e( 'Do you want to see BackWPup in the WordPress admin bar?', 'backwpup' ); ?></p>
|
120 |
<table class="form-table">
|
121 |
<tr valign="top">
|
131 |
</fieldset>
|
132 |
</td>
|
133 |
</tr>
|
134 |
+
<tr valign="top">
|
135 |
+
<th scope="row"><?php _e( 'Folder sizes', 'backwpup' ); ?></th>
|
136 |
+
<td>
|
137 |
+
<fieldset>
|
138 |
+
<legend class="screen-reader-text"><span><?php _e( 'Folder sizes', 'backwpup' ); ?></span>
|
139 |
+
</legend>
|
140 |
+
<label for="showfoldersize">
|
141 |
+
<input name="showfoldersize" type="checkbox" id="showfoldersize"
|
142 |
+
value="1" <?php checked( BackWPup_Option::get( 'cfg', 'showfoldersize' ), TRUE ); ?> />
|
143 |
+
<?php _e( 'Display folder sizes on files tab if job edited', 'backwpup' ); ?></label>
|
144 |
+
</fieldset>
|
145 |
+
</td>
|
146 |
+
</tr>
|
147 |
</table>
|
148 |
<h3 class="title"><?php _e( 'Security', 'backwpup' ); ?></h3>
|
149 |
<p><?php _e( 'Security option for BackWPup', 'backwpup' ); ?></p>
|
320 |
echo '<tr title=""><td>' . __( 'BackWPup version', 'backwpup' ) . '</td><td>' . BackWPup::get_plugin_data( 'Version' ) . ' <a href="' . translate( BackWPup::get_plugin_data( 'pluginuri' ), 'backwpup' ) . '">' . __( 'Get pro.', 'backwpup' ) . '</a></td></tr>';
|
321 |
else
|
322 |
echo '<tr title=""><td>' . __( 'BackWPup Pro version', 'backwpup' ) . '</td><td>' . BackWPup::get_plugin_data( 'Version' ) . '</td></tr>';
|
323 |
+
echo '<tr title=">=5.3.3"><td>' . __( 'PHP version', 'backwpup' ) . '</td><td>' . PHP_VERSION . '</td></tr>';
|
324 |
echo '<tr title=">=5.0.7"><td>' . __( 'MySQL version', 'backwpup' ) . '</td><td>' . $wpdb->get_var( "SELECT VERSION() AS version" ) . '</td></tr>';
|
325 |
if ( function_exists( 'curl_version' ) ) {
|
326 |
$curlversion = curl_version();
|
395 |
echo '<tr title=""><td>' . __( 'Blog Timezone', 'backwpup' ) . '</td><td>' . get_option( 'timezone_string' ) . '</td></tr>';
|
396 |
echo '<tr title=""><td>' . __( 'Blog Time offset', 'backwpup' ) . '</td><td>' . sprintf( __( '%s hours', 'backwpup' ), get_option( 'gmt_offset' ) ) . '</td></tr>';
|
397 |
echo '<tr title="WPLANG"><td>' . __( 'Blog language', 'backwpup' ) . '</td><td>' . get_bloginfo( 'language' ) . '</td></tr>';
|
398 |
+
echo '<tr title="utf8"><td>' . __( 'MySQL Client encoding', 'backwpup' ) . '</td><td>' . DB_CHARSET . '</td></tr>';
|
399 |
echo '<tr title="URF-8"><td>' . __( 'Blog charset', 'backwpup' ) . '</td><td>' . get_bloginfo( 'charset' ) . '</td></tr>';
|
400 |
echo '<tr title=">=128M"><td>' . __( 'PHP Memory limit', 'backwpup' ) . '</td><td>' . ini_get( 'memory_limit' ) . '</td></tr>';
|
401 |
echo '<tr title="WP_MEMORY_LIMIT"><td>' . __( 'WP memory limit', 'backwpup' ) . '</td><td>' . WP_MEMORY_LIMIT . '</td></tr>';
|
languages/backwpup-de_DE.mo
CHANGED
Binary file
|
languages/backwpup-de_DE.po
CHANGED
@@ -1,9 +1,9 @@
|
|
1 |
msgid ""
|
2 |
msgstr ""
|
3 |
-
"Project-Id-Version: BackWPup Pro v3.0.
|
4 |
"Report-Msgid-Bugs-To: \n"
|
5 |
"POT-Creation-Date: 2013-02-06 17:42+0100\n"
|
6 |
-
"PO-Revision-Date: 2013-03-
|
7 |
"Last-Translator: Frank Bueltge <frank@bueltge.de>\n"
|
8 |
"Language-Team: INPSYDE <info@inpsyde.com>\n"
|
9 |
"MIME-Version: 1.0\n"
|
@@ -5036,18 +5036,13 @@ msgstr "Sie müssen die MySQLi-Erweiterung und MySQL-Server in der Version 5.0.7
|
|
5036 |
#: inc/class-page-about.php:60
|
5037 |
#@ backwpup
|
5038 |
msgid "Dropbox authentication must be done again"
|
5039 |
-
msgstr "Die
|
5040 |
|
5041 |
#: inc/class-page-about.php:62
|
5042 |
#@ backwpup
|
5043 |
msgid "S3 Settings"
|
5044 |
msgstr "S3-Einstellungen"
|
5045 |
|
5046 |
-
#: inc/class-page-about.php:63
|
5047 |
-
#@ backwpup
|
5048 |
-
msgid "Google Storage is now in S3"
|
5049 |
-
msgstr "Google Storage ist jetzt in S3"
|
5050 |
-
|
5051 |
#: inc/class-page-about.php:64
|
5052 |
#@ backwpup
|
5053 |
msgid "All your passwords"
|
@@ -5523,11 +5518,6 @@ msgstr "CLI-Exec-Ergebnis: %s"
|
|
5523 |
msgid "You must have PHP version 5.2.6 or higher to use this plugin. You are using version %s now."
|
5524 |
msgstr "Sie brauchen PHP in der Version 5.2.6 oder höher, um das Plugin zu benutzen. Momentan haben Sie Version %s."
|
5525 |
|
5526 |
-
#: inc/class-create-archive.php:65
|
5527 |
-
#@ backwpup
|
5528 |
-
msgid "The file name of an archive cannot be empty "
|
5529 |
-
msgstr "Der Dateiname eines Archivs kann nicht leer sein."
|
5530 |
-
|
5531 |
#: inc/class-create-archive.php:72
|
5532 |
#, php-format
|
5533 |
#@ backwpup
|
@@ -5908,12 +5898,6 @@ msgstr "E-Mail Absender Name"
|
|
5908 |
msgid "Name and email of email sender in the mail formant. Name <emailadress>"
|
5909 |
msgstr "Name des E-Mail Senders im E-MAil formart. <code>Name <E-Mail-Adresse></code>"
|
5910 |
|
5911 |
-
#. translators: plugin header field 'Version'
|
5912 |
-
#: backwpup.php:0
|
5913 |
-
#@ backwpup
|
5914 |
-
msgid "3.0.2"
|
5915 |
-
msgstr ""
|
5916 |
-
|
5917 |
#: inc/class-create-archive.php:326
|
5918 |
#@ backwpup
|
5919 |
msgid "Folder name cannot be empty"
|
@@ -5966,3 +5950,19 @@ msgstr "Backups Verzeichnis %s existiert nicht und kann nicht angelegt werden. B
|
|
5966 |
msgid "Working job log"
|
5967 |
msgstr "Auftrags lLog"
|
5968 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
msgid ""
|
2 |
msgstr ""
|
3 |
+
"Project-Id-Version: BackWPup Pro v3.0.3\n"
|
4 |
"Report-Msgid-Bugs-To: \n"
|
5 |
"POT-Creation-Date: 2013-02-06 17:42+0100\n"
|
6 |
+
"PO-Revision-Date: 2013-03-02 07:56:08-0600\n"
|
7 |
"Last-Translator: Frank Bueltge <frank@bueltge.de>\n"
|
8 |
"Language-Team: INPSYDE <info@inpsyde.com>\n"
|
9 |
"MIME-Version: 1.0\n"
|
5036 |
#: inc/class-page-about.php:60
|
5037 |
#@ backwpup
|
5038 |
msgid "Dropbox authentication must be done again"
|
5039 |
+
msgstr "Die Dropbox-Authentifizierung muss wiederholt werden."
|
5040 |
|
5041 |
#: inc/class-page-about.php:62
|
5042 |
#@ backwpup
|
5043 |
msgid "S3 Settings"
|
5044 |
msgstr "S3-Einstellungen"
|
5045 |
|
|
|
|
|
|
|
|
|
|
|
5046 |
#: inc/class-page-about.php:64
|
5047 |
#@ backwpup
|
5048 |
msgid "All your passwords"
|
5518 |
msgid "You must have PHP version 5.2.6 or higher to use this plugin. You are using version %s now."
|
5519 |
msgstr "Sie brauchen PHP in der Version 5.2.6 oder höher, um das Plugin zu benutzen. Momentan haben Sie Version %s."
|
5520 |
|
|
|
|
|
|
|
|
|
|
|
5521 |
#: inc/class-create-archive.php:72
|
5522 |
#, php-format
|
5523 |
#@ backwpup
|
5898 |
msgid "Name and email of email sender in the mail formant. Name <emailadress>"
|
5899 |
msgstr "Name des E-Mail Senders im E-MAil formart. <code>Name <E-Mail-Adresse></code>"
|
5900 |
|
|
|
|
|
|
|
|
|
|
|
|
|
5901 |
#: inc/class-create-archive.php:326
|
5902 |
#@ backwpup
|
5903 |
msgid "Folder name cannot be empty"
|
5950 |
msgid "Working job log"
|
5951 |
msgstr "Auftrags lLog"
|
5952 |
|
5953 |
+
#. translators: plugin header field 'Version'
|
5954 |
+
#: backwpup.php:0
|
5955 |
+
#@ backwpup
|
5956 |
+
msgid "3.0.3"
|
5957 |
+
msgstr "3.0.3"
|
5958 |
+
|
5959 |
+
#: inc/class-page-about.php:63
|
5960 |
+
#@ backwpup
|
5961 |
+
msgid "Google Storage is now in S3 service settings"
|
5962 |
+
msgstr "Google Storage befindet sich jetzt in der Auswahl der S3-Einstellungen"
|
5963 |
+
|
5964 |
+
#: inc/class-create-archive.php:65
|
5965 |
+
#@ backwpup
|
5966 |
+
msgid "The file name of an archive cannot be empty."
|
5967 |
+
msgstr "Der Dateiname eines Archivs kann nicht leer sein."
|
5968 |
+
|
readme.txt
CHANGED
@@ -1,9 +1,9 @@
|
|
1 |
-
|
2 |
Contributors: inpsyde, danielhuesken, Bueltge, nullbyte
|
3 |
Tags: backup, dump, database, file, ftp, xml, time, upload, multisite, cloud, dropbox, storage, S3
|
4 |
Requires at least: 3.2
|
5 |
Tested up to: 3.5.1
|
6 |
-
Stable tag: 3.0.
|
7 |
License: GPLv3
|
8 |
License URI: http://www.gnu.org/licenses/gpl-3.0.html
|
9 |
|
@@ -24,7 +24,7 @@ the same server. With the single backup .zip file you are able to restore an ins
|
|
24 |
* Backups in zip, tar, tar.gz, tar.bz2 format *(needs gz, bz2, ZipArchive)*
|
25 |
* Store backup to directory
|
26 |
* Store backup to FTP server *(needs ftp)*
|
27 |
-
* Store backup to S3 services *(needs
|
28 |
* Store backup to Microsoft Azure (Blob) *(needs PHP 5.3.2, curl)*
|
29 |
* Store backup to RackSpaceCloud *(needs PHP 5.3.2, curl)*
|
30 |
* Store backup to Dropbox *(needs curl)*
|
@@ -81,6 +81,16 @@ Please check all settings after the update:
|
|
81 |
|
82 |
|
83 |
== Changelog ==
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
84 |
= Version 3.0.3 =
|
85 |
* Improved: Archive creation performance
|
86 |
* Fixed: Problem with S3 Prefix
|
@@ -145,4 +155,3 @@ Please check all settings after the update:
|
|
145 |
* Use your own API keys for Dropbox and SugarSync
|
146 |
* Premium Support
|
147 |
* Automatic updates
|
148 |
-
|
1 |
+
=== BackWPup ===
|
2 |
Contributors: inpsyde, danielhuesken, Bueltge, nullbyte
|
3 |
Tags: backup, dump, database, file, ftp, xml, time, upload, multisite, cloud, dropbox, storage, S3
|
4 |
Requires at least: 3.2
|
5 |
Tested up to: 3.5.1
|
6 |
+
Stable tag: 3.0.4
|
7 |
License: GPLv3
|
8 |
License URI: http://www.gnu.org/licenses/gpl-3.0.html
|
9 |
|
24 |
* Backups in zip, tar, tar.gz, tar.bz2 format *(needs gz, bz2, ZipArchive)*
|
25 |
* Store backup to directory
|
26 |
* Store backup to FTP server *(needs ftp)*
|
27 |
+
* Store backup to S3 services *(needs curl)*
|
28 |
* Store backup to Microsoft Azure (Blob) *(needs PHP 5.3.2, curl)*
|
29 |
* Store backup to RackSpaceCloud *(needs PHP 5.3.2, curl)*
|
30 |
* Store backup to Dropbox *(needs curl)*
|
81 |
|
82 |
|
83 |
== Changelog ==
|
84 |
+
= Version 3.0.4 =
|
85 |
+
* Changed: default settings for 'Restart on every main step' and 'Reduce server load' to disabled
|
86 |
+
* Fixed: Settings not correctly set to default
|
87 |
+
* Fixed: mysqli::get_charset() undefined method
|
88 |
+
* Fixed: Settings not saved correctly
|
89 |
+
* Fixed: Abort on MySQL Functions Backup
|
90 |
+
* Improved: MySQLi connection
|
91 |
+
* Added: Server connection test on run now.
|
92 |
+
* Added: S3 AWS SDK 1.6.0 for PHP lower than 5.3.3
|
93 |
+
|
94 |
= Version 3.0.3 =
|
95 |
* Improved: Archive creation performance
|
96 |
* Fixed: Problem with S3 Prefix
|
155 |
* Use your own API keys for Dropbox and SugarSync
|
156 |
* Premium Support
|
157 |
* Automatic updates
|
|
sdk/Aws_v1/README.md
ADDED
@@ -0,0 +1,183 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# AWS SDK for PHP
|
2 |
+
|
3 |
+
> This is the repository for version 1 of the AWS SDK for PHP. For the new **AWS SDK for PHP 2**, see <http://github.com/aws/aws-sdk-php>.
|
4 |
+
|
5 |
+
The AWS SDK for PHP enables developers to build solutions for Amazon Simple Storage Service (Amazon S3),
|
6 |
+
Amazon Elastic Compute Cloud (Amazon EC2), Amazon SimpleDB, and more. With the AWS SDK for PHP, developers
|
7 |
+
can get started in minutes with a single, downloadable package.
|
8 |
+
|
9 |
+
The SDK features:
|
10 |
+
|
11 |
+
* **AWS PHP Libraries:** Build PHP applications on top of APIs that take the complexity out of coding directly
|
12 |
+
against a web service interface. The toolkit provides APIs that hide much of the lower-level implementation.
|
13 |
+
* **Code Samples:** Practical examples for how to use the toolkit to build applications.
|
14 |
+
* **Documentation:** Complete SDK reference documentation with samples demonstrating how to use the SDK.
|
15 |
+
* **PEAR package:** The ability to install the AWS SDK for PHP as a PEAR package.
|
16 |
+
* **SDK Compatibility Test:** Includes both an HTML-based and a CLI-based SDK Compatibility Test that you can
|
17 |
+
run on your server to determine whether or not your PHP environment meets the minimum requirements.
|
18 |
+
|
19 |
+
For more information about the AWS SDK for PHP, including a complete list of supported services, see
|
20 |
+
[aws.amazon.com/sdkforphp](http://aws.amazon.com/sdkforphp).
|
21 |
+
|
22 |
+
|
23 |
+
## Staying up-to-date!
|
24 |
+
We tend to release new updates very frequently. In order to keep up with the newest features and the latest bug fixes,
|
25 |
+
we encourage you to subscribe to our release announcements, and to keep your code current.
|
26 |
+
|
27 |
+
### Release announcements
|
28 |
+
You can subscribe to release announcements via:
|
29 |
+
|
30 |
+
* [RSS feed](http://pear.amazonwebservices.com/feed.xml)
|
31 |
+
* [Twitter](https://twitter.com/awssdkforphp)
|
32 |
+
* [Facebook](https://www.facebook.com/pages/AWS-SDK-for-PHP/276240099155588)
|
33 |
+
* [Mobile notifications](http://ifttt.com/recipes/52404)
|
34 |
+
* [SMS notifications](http://ifttt.com/recipes/52409)
|
35 |
+
* [Email notifications](http://ifttt.com/recipes/52408)
|
36 |
+
|
37 |
+
Only the RSS feed is supported by AWS. The other channels are bots created/managed by third-parties.
|
38 |
+
|
39 |
+
### Getting the latest versions
|
40 |
+
You can get the latest version of the SDK via:
|
41 |
+
|
42 |
+
* [Composer/Packagist](http://packagist.org/packages/amazonwebservices/aws-sdk-for-php)
|
43 |
+
* [PEAR channel](http://pear.amazonwebservices.com)
|
44 |
+
* [GitHub](http://github.com/amazonwebservices/aws-sdk-for-php)
|
45 |
+
* [Zip file](http://aws.amazon.com/sdkforphp/)
|
46 |
+
|
47 |
+
|
48 |
+
## Source
|
49 |
+
The source tree for includes the following files and directories:
|
50 |
+
|
51 |
+
* `_compatibility_test` -- Includes both an HTML-based and a CLI-based SDK Compatibility Test that you can
|
52 |
+
run on your server to determine whether or not your PHP environment meets the minimum requirements.
|
53 |
+
* `_docs` -- Informational documents, the contents of which should be fairly self-explanatory.
|
54 |
+
* `_samples` -- Code samples that you can run out of the box.
|
55 |
+
* `extensions` -- Extra code that can be used to enhance usage of the SDK, but isn't a service class or a
|
56 |
+
third-party library.
|
57 |
+
* `lib` -- Contains any third-party libraries that the SDK depends on. The licenses for these projects will
|
58 |
+
always be Apache 2.0-compatible.
|
59 |
+
* `services` -- Contains the service-specific classes that communicate with AWS. These classes are always
|
60 |
+
prefixed with `Amazon`.
|
61 |
+
* `utilities` -- Contains any utility-type methods that the SDK uses. Includes extensions to built-in PHP
|
62 |
+
classes, as well as new functionality that is entirely custom. These classes are always prefixed with `CF`.
|
63 |
+
* `README` -- The document you're reading right now.
|
64 |
+
* `config-sample.inc.php` -- A sample configuration file that should be filled out and renamed to `config.inc.php`.
|
65 |
+
* `sdk.class.php` -- The SDK loader that you would include in your projects. Contains the base functionality
|
66 |
+
that the rest of the SDK depends on.
|
67 |
+
|
68 |
+
|
69 |
+
## Minimum Requirements in a nutshell
|
70 |
+
|
71 |
+
* You are at least an intermediate-level PHP developer and have a basic understanding of object-oriented PHP.
|
72 |
+
* You have a valid AWS account, and you've already signed up for the services you want to use.
|
73 |
+
* The PHP interpreter, version 5.2 or newer. PHP 5.2.17 or 5.3.x is highly recommended for use with the AWS SDK for PHP.
|
74 |
+
* The cURL PHP extension (compiled with the [OpenSSL](http://openssl.org) libraries for HTTPS support).
|
75 |
+
* The ability to read from and write to the file system via [file_get_contents()](http://php.net/file_get_contents) and [file_put_contents()](http://php.net/file_put_contents).
|
76 |
+
|
77 |
+
If you're not sure whether your PHP environment meets these requirements, run the
|
78 |
+
[SDK Compatibility Test](http://github.com/amazonwebservices/aws-sdk-for-php/tree/master/_compatibility_test/) script
|
79 |
+
included in the SDK download.
|
80 |
+
|
81 |
+
|
82 |
+
## Installation
|
83 |
+
|
84 |
+
### Via GitHub
|
85 |
+
|
86 |
+
[Git](http://git-scm.com) is an extremely fast, efficient, distributed version control system ideal for the
|
87 |
+
collaborative development of software. [GitHub](http://github.com/amazonwebservices) is the best way to
|
88 |
+
collaborate with others. Fork, send pull requests and manage all your public and private git repositories.
|
89 |
+
We believe that GitHub is the ideal service for working collaboratively with the open source PHP community.
|
90 |
+
|
91 |
+
Git is primarily a command-line tool. GitHub provides instructions for installing Git on
|
92 |
+
[Mac OS X](http://help.github.com/mac-git-installation/), [Windows](http://help.github.com/win-git-installation/),
|
93 |
+
and [Linux](http://help.github.com/linux-git-installation/). If you're unfamiliar with Git, there are a variety
|
94 |
+
of resources on the net that will help you learn more:
|
95 |
+
|
96 |
+
* [Git Immersion](http://gitimmersion.com) is a guided tour that walks through the fundamentals of Git, inspired
|
97 |
+
by the premise that to know a thing is to do it.
|
98 |
+
* The [PeepCode screencast on Git](https://peepcode.com/products/git) ($12) will teach you how to install and
|
99 |
+
use Git. You'll learn how to create a repository, use branches, and work with remote repositories.
|
100 |
+
* [Git Reference](http://gitref.org) is meant to be a quick reference for learning and remembering the most
|
101 |
+
important and commonly used Git commands.
|
102 |
+
* [Git Ready](http://gitready.com) provides a collection of Git tips and tricks.
|
103 |
+
* If you want to dig even further, I've [bookmarked other Git references](http://pinboard.in/u:skyzyx/t:git).
|
104 |
+
|
105 |
+
If you're comfortable working with Git and/or GitHub, you can pull down the source code as follows:
|
106 |
+
|
107 |
+
git clone git://github.com/amazonwebservices/aws-sdk-for-php.git AWSSDKforPHP
|
108 |
+
cd ./AWSSDKforPHP
|
109 |
+
|
110 |
+
### Via PEAR
|
111 |
+
|
112 |
+
[PEAR](http://pear.php.net) stands for the _PHP Extension and Application Repository_ and is a framework and
|
113 |
+
distribution system for reusable PHP components. It is the PHP equivalent to package management software such as
|
114 |
+
[MacPorts](http://macports.org) and [Homebrew](https://github.com/mxcl/homebrew) for Mac OS X,
|
115 |
+
[Yum](http://fedoraproject.org/wiki/Tools/yum) and [Apt](http://wiki.debian.org/Apt) for GNU/Linux,
|
116 |
+
[RubyGems](http://rubygems.org) for Ruby, [Easy Install](http://packages.python.org/distribute/easy_install.html)
|
117 |
+
for Python, [Maven](http://maven.apache.org) for Java, and [NPM](http://npm.mape.me) for Node.js.
|
118 |
+
|
119 |
+
PEAR packages are very easy to install, and are available in your PHP environment path so that they are accessible
|
120 |
+
to any PHP project. PEAR packages are not specific to your project, but rather to the machine that they're
|
121 |
+
installed on.
|
122 |
+
|
123 |
+
From the command-line, you can install the SDK with PEAR as follows:
|
124 |
+
|
125 |
+
pear channel-discover pear.amazonwebservices.com
|
126 |
+
pear install aws/sdk
|
127 |
+
|
128 |
+
You may need to use `sudo` for the above commands. Once the SDK has been installed via PEAR, you can load it into
|
129 |
+
your project with:
|
130 |
+
|
131 |
+
require_once 'AWSSDKforPHP/sdk.class.php';
|
132 |
+
|
133 |
+
### Via Composer
|
134 |
+
|
135 |
+
[Composer](http://getcomposer.org) is a newer dependency manager for PHP, and is now supported by the SDK.
|
136 |
+
|
137 |
+
In order to use the AWS SDK for PHP via Composer, you must do the following:
|
138 |
+
|
139 |
+
1. Add ``amazonwebservices/aws-sdk-for-php`` as a dependency in your project's ``composer.json`` file:
|
140 |
+
|
141 |
+
{
|
142 |
+
"require": {
|
143 |
+
"amazonwebservices/aws-sdk-for-php": "*"
|
144 |
+
}
|
145 |
+
}
|
146 |
+
|
147 |
+
Consider tightening your dependencies to a known version when deploying mission critical applications (e.g. ``1.5.*``).
|
148 |
+
|
149 |
+
2. Download and install Composer:
|
150 |
+
|
151 |
+
curl -s http://getcomposer.org/installer | php
|
152 |
+
|
153 |
+
3. Install your dependencies:
|
154 |
+
|
155 |
+
php composer.phar install
|
156 |
+
|
157 |
+
4. Require Composer's autoloader
|
158 |
+
|
159 |
+
Composer also prepares an autoload file that's capable of autoloading all of the classes in any of the libraries that it downloads. To use it, just add the following line to your code's bootstrap process:
|
160 |
+
|
161 |
+
require 'vendor/autoload.php';
|
162 |
+
|
163 |
+
You can find out more on how to install Composer, configure autoloading, and other best-practices for defining dependencies at [getcomposer.org](http://getcomposer.org).
|
164 |
+
|
165 |
+
## Configuration
|
166 |
+
|
167 |
+
1. Copy the contents of [config-sample.inc.php](https://github.com/amazonwebservices/aws-sdk-for-php/raw/master/config-sample.inc.php)
|
168 |
+
and add your credentials as instructed in the file.
|
169 |
+
2. Move your file to `~/.aws/sdk/config.inc.php`.
|
170 |
+
3. Make sure that `getenv('HOME')` points to your user directory. If not you'll need to set
|
171 |
+
`putenv('HOME=<your-user-directory>')`.
|
172 |
+
|
173 |
+
This is because PHP will attempt to load the file from your user directory (e.g., `~/.aws/sdk/config.inc.php`).
|
174 |
+
If PHP doesn't happen to know where your user directory is, you'll need to tell PHP where it is with the `putenv()`
|
175 |
+
function.
|
176 |
+
|
177 |
+
|
178 |
+
## Additional Information
|
179 |
+
|
180 |
+
* AWS SDK for PHP: <http://aws.amazon.com/sdkforphp>
|
181 |
+
* Documentation: <http://docs.amazonwebservices.com/AWSSDKforPHP/latest/>
|
182 |
+
* License: <http://aws.amazon.com/apache2.0/>
|
183 |
+
* Discuss: <http://aws.amazon.com/forums>
|
sdk/Aws_v1/authentication/signable.interface.php
ADDED
@@ -0,0 +1,48 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* Copyright 2010-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
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 |
+
* A copy of the License is located at
|
8 |
+
*
|
9 |
+
* http://aws.amazon.com/apache2.0
|
10 |
+
*
|
11 |
+
* or in the "license" file accompanying this file. This file is distributed
|
12 |
+
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
|
13 |
+
* express or implied. See the License for the specific language governing
|
14 |
+
* permissions and limitations under the License.
|
15 |
+
*/
|
16 |
+
|
17 |
+
|
18 |
+
/*%******************************************************************************************%*/
|
19 |
+
// INTERFACE
|
20 |
+
|
21 |
+
/**
|
22 |
+
* The interface implemented by all signing classes.
|
23 |
+
*
|
24 |
+
* @version 2011.11.22
|
25 |
+
* @license See the included NOTICE.md file for more information.
|
26 |
+
* @copyright See the included NOTICE.md file for more information.
|
27 |
+
* @link http://aws.amazon.com/php/ PHP Developer Center
|
28 |
+
*/
|
29 |
+
interface Signable
|
30 |
+
{
|
31 |
+
/**
|
32 |
+
* Constructs a new instance of the implementing class.
|
33 |
+
*
|
34 |
+
* @param string $endpoint (Required) The endpoint to direct the request to.
|
35 |
+
* @param string $operation (Required) The operation to execute as a result of this request.
|
36 |
+
* @param array $payload (Required) The options to use as part of the payload in the request.
|
37 |
+
* @param CFCredential $credentials (Required) The credentials to use for signing and making requests.
|
38 |
+
* @return void
|
39 |
+
*/
|
40 |
+
public function __construct($endpoint, $operation, $payload, CFCredential $credentials);
|
41 |
+
|
42 |
+
/**
|
43 |
+
* Generates a cURL handle with all of the required authentication bits set.
|
44 |
+
*
|
45 |
+
* @return resource A cURL handle ready for executing.
|
46 |
+
*/
|
47 |
+
public function authenticate();
|
48 |
+
}
|
sdk/Aws_v1/authentication/signature_v2query.class.php
ADDED
@@ -0,0 +1,163 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* Copyright 2010-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
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 |
+
* A copy of the License is located at
|
8 |
+
*
|
9 |
+
* http://aws.amazon.com/apache2.0
|
10 |
+
*
|
11 |
+
* or in the "license" file accompanying this file. This file is distributed
|
12 |
+
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
|
13 |
+
* express or implied. See the License for the specific language governing
|
14 |
+
* permissions and limitations under the License.
|
15 |
+
*/
|
16 |
+
|
17 |
+
|
18 |
+
/*%******************************************************************************************%*/
|
19 |
+
// CLASS
|
20 |
+
|
21 |
+
/**
|
22 |
+
* Implements support for Signature v2 (AWS Query).
|
23 |
+
*
|
24 |
+
* @version 2011.11.22
|
25 |
+
* @license See the included NOTICE.md file for more information.
|
26 |
+
* @copyright See the included NOTICE.md file for more information.
|
27 |
+
* @link http://aws.amazon.com/php/ PHP Developer Center
|
28 |
+
*/
|
29 |
+
class AuthV2Query extends Signer implements Signable
|
30 |
+
{
|
31 |
+
/**
|
32 |
+
* Constructs a new instance of the <AuthV2Query> class.
|
33 |
+
*
|
34 |
+
* @param string $endpoint (Required) The endpoint to direct the request to.
|
35 |
+
* @param string $operation (Required) The operation to execute as a result of this request.
|
36 |
+
* @param array $payload (Required) The options to use as part of the payload in the request.
|
37 |
+
* @param CFCredential $credentials (Required) The credentials to use for signing and making requests.
|
38 |
+
* @return void
|
39 |
+
*/
|
40 |
+
public function __construct($endpoint, $operation, $payload, CFCredential $credentials)
|
41 |
+
{
|
42 |
+
parent::__construct($endpoint, $operation, $payload, $credentials);
|
43 |
+
}
|
44 |
+
|
45 |
+
/**
|
46 |
+
* Generates a cURL handle with all of the required authentication bits set.
|
47 |
+
*
|
48 |
+
* @return resource A cURL handle ready for executing.
|
49 |
+
*/
|
50 |
+
public function authenticate()
|
51 |
+
{
|
52 |
+
// Determine signing values
|
53 |
+
$current_time = time();
|
54 |
+
$date = gmdate(CFUtilities::DATE_FORMAT_RFC2616, $current_time);
|
55 |
+
$timestamp = gmdate(CFUtilities::DATE_FORMAT_ISO8601, $current_time);
|
56 |
+
$query = array();
|
57 |
+
|
58 |
+
// Do we have an authentication token?
|
59 |
+
if ($this->auth_token)
|
60 |
+
{
|
61 |
+
$headers['X-Amz-Security-Token'] = $this->auth_token;
|
62 |
+
$query['SecurityToken'] = $this->auth_token;
|
63 |
+
}
|
64 |
+
|
65 |
+
// Only add it if it exists.
|
66 |
+
if ($this->api_version)
|
67 |
+
{
|
68 |
+
$query['Version'] = $this->api_version;
|
69 |
+
}
|
70 |
+
|
71 |
+
$query['Action'] = $this->operation;
|
72 |
+
$query['AWSAccessKeyId'] = $this->key;
|
73 |
+
$query['SignatureMethod'] = 'HmacSHA256';
|
74 |
+
$query['SignatureVersion'] = 2;
|
75 |
+
$query['Timestamp'] = $timestamp;
|
76 |
+
|
77 |
+
// Merge in any options that were passed in
|
78 |
+
if (is_array($this->payload))
|
79 |
+
{
|
80 |
+
$query = array_merge($query, $this->payload);
|
81 |
+
}
|
82 |
+
|
83 |
+
// Do a case-sensitive, natural order sort on the array keys.
|
84 |
+
uksort($query, 'strcmp');
|
85 |
+
|
86 |
+
// Create the string that needs to be hashed.
|
87 |
+
$canonical_query_string = $this->util->to_signable_string($query);
|
88 |
+
|
89 |
+
// Remove the default scheme from the domain.
|
90 |
+
$domain = str_replace(array('http://', 'https://'), '', $this->endpoint);
|
91 |
+
|
92 |
+
// Parse our request.
|
93 |
+
$parsed_url = parse_url('http://' . $domain);
|
94 |
+
|
95 |
+
// Set the proper host header.
|
96 |
+
if (isset($parsed_url['port']) && (integer) $parsed_url['port'] !== 80 && (integer) $parsed_url['port'] !== 443)
|
97 |
+
{
|
98 |
+
$host_header = strtolower($parsed_url['host']) . ':' . $parsed_url['port'];
|
99 |
+
}
|
100 |
+
else
|
101 |
+
{
|
102 |
+
$host_header = strtolower($parsed_url['host']);
|
103 |
+
}
|
104 |
+
|
105 |
+
// Set the proper request URI.
|
106 |
+
$request_uri = isset($parsed_url['path']) ? $parsed_url['path'] : '/';
|
107 |
+
|
108 |
+
// Prepare the string to sign
|
109 |
+
$this->string_to_sign = "POST\n$host_header\n$request_uri\n$canonical_query_string";
|
110 |
+
|
111 |
+
// Hash the AWS secret key and generate a signature for the request.
|
112 |
+
$query['Signature'] = base64_encode(hash_hmac('sha256', $this->string_to_sign, $this->secret_key, true));
|
113 |
+
|
114 |
+
// Generate the querystring from $query
|
115 |
+
$this->querystring = $this->util->to_query_string($query);
|
116 |
+
|
117 |
+
// Gather information to pass along to other classes.
|
118 |
+
$helpers = array(
|
119 |
+
'utilities' => $this->utilities_class,
|
120 |
+
'request' => $this->request_class,
|
121 |
+
'response' => $this->response_class,
|
122 |
+
);
|
123 |
+
|
124 |
+
// Compose the request.
|
125 |
+
$request_url = ($this->use_ssl ? 'https://' : 'http://') . $domain;
|
126 |
+
$request_url .= !isset($parsed_url['path']) ? '/' : '';
|
127 |
+
|
128 |
+
// Instantiate the request class
|
129 |
+
$request = new $this->request_class($request_url, $this->proxy, $helpers, $this->credentials);
|
130 |
+
$request->set_method('POST');
|
131 |
+
$request->set_body($this->querystring);
|
132 |
+
$headers['Content-Type'] = 'application/x-www-form-urlencoded; charset=utf-8';
|
133 |
+
|
134 |
+
// Pass along registered stream callbacks
|
135 |
+
if ($this->registered_streaming_read_callback)
|
136 |
+
{
|
137 |
+
$request->register_streaming_read_callback($this->registered_streaming_read_callback);
|
138 |
+
}
|
139 |
+
|
140 |
+
if ($this->registered_streaming_write_callback)
|
141 |
+
{
|
142 |
+
$request->register_streaming_write_callback($this->registered_streaming_write_callback);
|
143 |
+
}
|
144 |
+
|
145 |
+
// Sort headers
|
146 |
+
uksort($headers, 'strnatcasecmp');
|
147 |
+
|
148 |
+
// Add headers to request and compute the string to sign
|
149 |
+
foreach ($headers as $header_key => $header_value)
|
150 |
+
{
|
151 |
+
// Strip linebreaks from header values as they're illegal and can allow for security issues
|
152 |
+
$header_value = str_replace(array("\r", "\n"), '', $header_value);
|
153 |
+
|
154 |
+
// Add the header if it has a value
|
155 |
+
if ($header_value !== '')
|
156 |
+
{
|
157 |
+
$request->add_header($header_key, $header_value);
|
158 |
+
}
|
159 |
+
}
|
160 |
+
|
161 |
+
return $request;
|
162 |
+
}
|
163 |
+
}
|
sdk/Aws_v1/authentication/signature_v3json.class.php
ADDED
@@ -0,0 +1,216 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* Copyright 2010-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
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 |
+
* A copy of the License is located at
|
8 |
+
*
|
9 |
+
* http://aws.amazon.com/apache2.0
|
10 |
+
*
|
11 |
+
* or in the "license" file accompanying this file. This file is distributed
|
12 |
+
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
|
13 |
+
* express or implied. See the License for the specific language governing
|
14 |
+
* permissions and limitations under the License.
|
15 |
+
*/
|
16 |
+
|
17 |
+
|
18 |
+
/*%******************************************************************************************%*/
|
19 |
+
// CLASS
|
20 |
+
|
21 |
+
/**
|
22 |
+
* Implements support for Signature v3 (JSON).
|
23 |
+
*
|
24 |
+
* @version 2011.12.08
|
25 |
+
* @license See the included NOTICE.md file for more information.
|
26 |
+
* @copyright See the included NOTICE.md file for more information.
|
27 |
+
* @link http://aws.amazon.com/php/ PHP Developer Center
|
28 |
+
*/
|
29 |
+
class AuthV3JSON extends Signer implements Signable
|
30 |
+
{
|
31 |
+
/**
|
32 |
+
* Constructs a new instance of the <AuthV3JSON> class.
|
33 |
+
*
|
34 |
+
* @param string $endpoint (Required) The endpoint to direct the request to.
|
35 |
+
* @param string $operation (Required) The operation to execute as a result of this request.
|
36 |
+
* @param array $payload (Required) The options to use as part of the payload in the request.
|
37 |
+
* @param CFCredential $credentials (Required) The credentials to use for signing and making requests.
|
38 |
+
* @return void
|
39 |
+
*/
|
40 |
+
public function __construct($endpoint, $operation, $payload, CFCredential $credentials)
|
41 |
+
{
|
42 |
+
parent::__construct($endpoint, $operation, $payload, $credentials);
|
43 |
+
}
|
44 |
+
|
45 |
+
/**
|
46 |
+
* Generates a cURL handle with all of the required authentication bits set.
|
47 |
+
*
|
48 |
+
* @return resource A cURL handle ready for executing.
|
49 |
+
*/
|
50 |
+
public function authenticate()
|
51 |
+
{
|
52 |
+
// Determine signing values
|
53 |
+
$current_time = time();
|
54 |
+
$date = gmdate(CFUtilities::DATE_FORMAT_RFC2616, $current_time);
|
55 |
+
$timestamp = gmdate(CFUtilities::DATE_FORMAT_ISO8601, $current_time);
|
56 |
+
$nonce = $this->util->generate_guid();
|
57 |
+
$signed_headers = array();
|
58 |
+
$x_amz_target = null;
|
59 |
+
$query = array();
|
60 |
+
|
61 |
+
// Do we have an authentication token?
|
62 |
+
if ($this->auth_token)
|
63 |
+
{
|
64 |
+
$headers['X-Amz-Security-Token'] = $this->auth_token;
|
65 |
+
$query['SecurityToken'] = $this->auth_token;
|
66 |
+
}
|
67 |
+
|
68 |
+
// Manage the key-value pairs that are used in the query.
|
69 |
+
if (stripos($this->operation, 'x-amz-target') !== false)
|
70 |
+
{
|
71 |
+
$x_amz_target = trim(str_ireplace('x-amz-target:', '', $this->operation));
|
72 |
+
}
|
73 |
+
else
|
74 |
+
{
|
75 |
+
$query['Action'] = $this->operation;
|
76 |
+
}
|
77 |
+
|
78 |
+
// Only add it if it exists.
|
79 |
+
if ($this->api_version)
|
80 |
+
{
|
81 |
+
$query['Version'] = $this->api_version;
|
82 |
+
}
|
83 |
+
|
84 |
+
// Do a case-sensitive, natural order sort on the array keys.
|
85 |
+
uksort($query, 'strcmp');
|
86 |
+
|
87 |
+
// Normalize JSON input
|
88 |
+
$query['body'] = json_encode($this->payload);
|
89 |
+
if (isset($query['body']) && $query['body'] === '[]')
|
90 |
+
{
|
91 |
+
$query['body'] = '{}';
|
92 |
+
}
|
93 |
+
|
94 |
+
// Create the string that needs to be hashed.
|
95 |
+
$canonical_query_string = $this->util->encode_signature2($query['body']);
|
96 |
+
|
97 |
+
// Remove the default scheme from the domain.
|
98 |
+
$domain = str_replace(array('http://', 'https://'), '', $this->endpoint);
|
99 |
+
|
100 |
+
// Parse our request.
|
101 |
+
$parsed_url = parse_url('http://' . $domain);
|
102 |
+
|
103 |
+
// Set the proper host header.
|
104 |
+
if (isset($parsed_url['port']) && (integer) $parsed_url['port'] !== 80 && (integer) $parsed_url['port'] !== 443)
|
105 |
+
{
|
106 |
+
$host_header = strtolower($parsed_url['host']) . ':' . $parsed_url['port'];
|
107 |
+
}
|
108 |
+
else
|
109 |
+
{
|
110 |
+
$host_header = strtolower($parsed_url['host']);
|
111 |
+
}
|
112 |
+
|
113 |
+
// Set the proper request URI.
|
114 |
+
$request_uri = isset($parsed_url['path']) ? $parsed_url['path'] : '/';
|
115 |
+
|
116 |
+
// Generate the querystring from $query
|
117 |
+
$this->querystring = $this->util->to_query_string($query);
|
118 |
+
|
119 |
+
// Gather information to pass along to other classes.
|
120 |
+
$helpers = array(
|
121 |
+
'utilities' => $this->utilities_class,
|
122 |
+
'request' => $this->request_class,
|
123 |
+
'response' => $this->response_class,
|
124 |
+
);
|
125 |
+
|
126 |
+
// Compose the request.
|
127 |
+
$request_url = ($this->use_ssl ? 'https://' : 'http://') . $domain;
|
128 |
+
$request_url .= !isset($parsed_url['path']) ? '/' : '';
|
129 |
+
|
130 |
+
// Instantiate the request class
|
131 |
+
$request = new $this->request_class($request_url, $this->proxy, $helpers, $this->credentials);
|
132 |
+
$request->set_method('POST');
|
133 |
+
//$request->set_body($this->querystring);
|
134 |
+
//$headers['Content-Type'] = 'application/x-www-form-urlencoded; charset=utf-8';
|
135 |
+
|
136 |
+
// Signing using X-Amz-Target is handled differently.
|
137 |
+
$headers['X-Amz-Target'] = $x_amz_target;
|
138 |
+
$headers['Content-Type'] = 'application/x-amz-json-1.0';
|
139 |
+
$request->set_body($query['body']);
|
140 |
+
$this->querystring = $query['body'];
|
141 |
+
|
142 |
+
// Pass along registered stream callbacks
|
143 |
+
if ($this->registered_streaming_read_callback)
|
144 |
+
{
|
145 |
+
$request->register_streaming_read_callback($this->registered_streaming_read_callback);
|
146 |
+
}
|
147 |
+
|
148 |
+
if ($this->registered_streaming_write_callback)
|
149 |
+
{
|
150 |
+
$request->register_streaming_write_callback($this->registered_streaming_write_callback);
|
151 |
+
}
|
152 |
+
|
153 |
+
// Add authentication headers
|
154 |
+
// $headers['X-Amz-Nonce'] = $nonce;
|
155 |
+
$headers['Date'] = $date;
|
156 |
+
$headers['Content-Length'] = strlen($this->querystring);
|
157 |
+
$headers['Content-MD5'] = $this->util->hex_to_base64(md5($this->querystring));
|
158 |
+
$headers['Host'] = $host_header;
|
159 |
+
|
160 |
+
// Sort headers
|
161 |
+
uksort($headers, 'strnatcasecmp');
|
162 |
+
|
163 |
+
// Prepare the string to sign (HTTP)
|
164 |
+
$this->string_to_sign = "POST\n$request_uri\n\n";
|
165 |
+
|
166 |
+
// Add headers to request and compute the string to sign
|
167 |
+
foreach ($headers as $header_key => $header_value)
|
168 |
+
{
|
169 |
+
// Strip linebreaks from header values as they're illegal and can allow for security issues
|
170 |
+
$header_value = str_replace(array("\r", "\n"), '', $header_value);
|
171 |
+
|
172 |
+
// Add the header if it has a value
|
173 |
+
if ($header_value !== '')
|
174 |
+
{
|
175 |
+
$request->add_header($header_key, $header_value);
|
176 |
+
}
|
177 |
+
|
178 |
+
// Generate the string to sign
|
179 |
+
if (
|
180 |
+
substr(strtolower($header_key), 0, 8) === 'content-' ||
|
181 |
+
strtolower($header_key) === 'date' ||
|
182 |
+
strtolower($header_key) === 'expires' ||
|
183 |
+
strtolower($header_key) === 'host' ||
|
184 |
+
substr(strtolower($header_key), 0, 6) === 'x-amz-'
|
185 |
+
)
|
186 |
+
{
|
187 |
+
$this->string_to_sign .= strtolower($header_key) . ':' . $header_value . "\n";
|
188 |
+
$signed_headers[] = $header_key;
|
189 |
+
}
|
190 |
+
}
|
191 |
+
|
192 |
+
$this->string_to_sign .= "\n";
|
193 |
+
|
194 |
+
if (isset($query['body']) && $query['body'] !== '')
|
195 |
+
{
|
196 |
+
$this->string_to_sign .= $query['body'];
|
197 |
+
}
|
198 |
+
|
199 |
+
// Convert from string-to-sign to bytes-to-sign
|
200 |
+
$bytes_to_sign = hash('sha256', $this->string_to_sign, true);
|
201 |
+
|
202 |
+
// Hash the AWS secret key and generate a signature for the request.
|
203 |
+
$signature = base64_encode(hash_hmac('sha256', $bytes_to_sign, $this->secret_key, true));
|
204 |
+
|
205 |
+
$headers['X-Amzn-Authorization'] = 'AWS3'
|
206 |
+
. ' AWSAccessKeyId=' . $this->key
|
207 |
+
. ',Algorithm=HmacSHA256'
|
208 |
+
. ',SignedHeaders=' . implode(';', $signed_headers)
|
209 |
+
. ',Signature=' . $signature;
|
210 |
+
|
211 |
+
$request->add_header('X-Amzn-Authorization', $headers['X-Amzn-Authorization']);
|
212 |
+
$request->request_headers = $headers;
|
213 |
+
|
214 |
+
return $request;
|
215 |
+
}
|
216 |
+
}
|
sdk/Aws_v1/authentication/signature_v3query.class.php
ADDED
@@ -0,0 +1,192 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* Copyright 2010-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
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 |
+
* A copy of the License is located at
|
8 |
+
*
|
9 |
+
* http://aws.amazon.com/apache2.0
|
10 |
+
*
|
11 |
+
* or in the "license" file accompanying this file. This file is distributed
|
12 |
+
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
|
13 |
+
* express or implied. See the License for the specific language governing
|
14 |
+
* permissions and limitations under the License.
|
15 |
+
*/
|
16 |
+
|
17 |
+
|
18 |
+
/*%******************************************************************************************%*/
|
19 |
+
// CLASS
|
20 |
+
|
21 |
+
/**
|
22 |
+
* Implements support for Signature v3 (AWS Query).
|
23 |
+
*
|
24 |
+
* @version 2011.11.22
|
25 |
+
* @license See the included NOTICE.md file for more information.
|
26 |
+
* @copyright See the included NOTICE.md file for more information.
|
27 |
+
* @link http://aws.amazon.com/php/ PHP Developer Center
|
28 |
+
*/
|
29 |
+
class AuthV3Query extends Signer implements Signable
|
30 |
+
{
|
31 |
+
/**
|
32 |
+
* Constructs a new instance of the <AuthV3Query> class.
|
33 |
+
*
|
34 |
+
* @param string $endpoint (Required) The endpoint to direct the request to.
|
35 |
+
* @param string $operation (Required) The operation to execute as a result of this request.
|
36 |
+
* @param array $payload (Required) The options to use as part of the payload in the request.
|
37 |
+
* @param CFCredential $credentials (Required) The credentials to use for signing and making requests.
|
38 |
+
* @return void
|
39 |
+
*/
|
40 |
+
public function __construct($endpoint, $operation, $payload, CFCredential $credentials)
|
41 |
+
{
|
42 |
+
parent::__construct($endpoint, $operation, $payload, $credentials);
|
43 |
+
}
|
44 |
+
|
45 |
+
/**
|
46 |
+
* Generates a cURL handle with all of the required authentication bits set.
|
47 |
+
*
|
48 |
+
* @return resource A cURL handle ready for executing.
|
49 |
+
*/
|
50 |
+
public function authenticate()
|
51 |
+
{
|
52 |
+
// Determine signing values
|
53 |
+
$current_time = time();
|
54 |
+
$date = gmdate(CFUtilities::DATE_FORMAT_RFC2616, $current_time);
|
55 |
+
$timestamp = gmdate(CFUtilities::DATE_FORMAT_ISO8601, $current_time);
|
56 |
+
$nonce = $this->util->generate_guid();
|
57 |
+
$curlopts = array();
|
58 |
+
$signed_headers = array();
|
59 |
+
|
60 |
+
// Do we have an authentication token?
|
61 |
+
if ($this->auth_token)
|
62 |
+
{
|
63 |
+
$headers['X-Amz-Security-Token'] = $this->auth_token;
|
64 |
+
$query['SecurityToken'] = $this->auth_token;
|
65 |
+
}
|
66 |
+
|
67 |
+
$query['Action'] = $this->operation;
|
68 |
+
$query['Version'] = $this->api_version;
|
69 |
+
|
70 |
+
// Set custom CURLOPT settings
|
71 |
+
if (is_array($this->payload) && isset($this->payload['curlopts']))
|
72 |
+
{
|
73 |
+
$curlopts = $this->payload['curlopts'];
|
74 |
+
unset($this->payload['curlopts']);
|
75 |
+
}
|
76 |
+
|
77 |
+
// Merge in any options that were passed in
|
78 |
+
if (is_array($this->payload))
|
79 |
+
{
|
80 |
+
$query = array_merge($query, $this->payload);
|
81 |
+
}
|
82 |
+
|
83 |
+
$return_curl_handle = isset($query['returnCurlHandle']) ? $query['returnCurlHandle'] : false;
|
84 |
+
unset($query['returnCurlHandle']);
|
85 |
+
|
86 |
+
// Do a case-sensitive, natural order sort on the array keys.
|
87 |
+
uksort($query, 'strcmp');
|
88 |
+
$canonical_query_string = $this->util->to_signable_string($query);
|
89 |
+
|
90 |
+
// Remove the default scheme from the domain.
|
91 |
+
$domain = str_replace(array('http://', 'https://'), '', $this->endpoint);
|
92 |
+
|
93 |
+
// Parse our request.
|
94 |
+
$parsed_url = parse_url('http://' . $domain);
|
95 |
+
|
96 |
+
// Set the proper host header.
|
97 |
+
if (isset($parsed_url['port']) && (integer) $parsed_url['port'] !== 80 && (integer) $parsed_url['port'] !== 443)
|
98 |
+
{
|
99 |
+
$host_header = strtolower($parsed_url['host']) . ':' . $parsed_url['port'];
|
100 |
+
}
|
101 |
+
else
|
102 |
+
{
|
103 |
+
$host_header = strtolower($parsed_url['host']);
|
104 |
+
}
|
105 |
+
|
106 |
+
// Set the proper request URI.
|
107 |
+
$request_uri = isset($parsed_url['path']) ? $parsed_url['path'] : '/';
|
108 |
+
|
109 |
+
// Generate the querystring from $query
|
110 |
+
$this->querystring = $this->util->to_query_string($query);
|
111 |
+
|
112 |
+
// Gather information to pass along to other classes.
|
113 |
+
$helpers = array(
|
114 |
+
'utilities' => $this->utilities_class,
|
115 |
+
'request' => $this->request_class,
|
116 |
+
'response' => $this->response_class,
|
117 |
+
);
|
118 |
+
|
119 |
+
// Compose the request.
|
120 |
+
$request_url = ($this->use_ssl ? 'https://' : 'http://') . $domain;
|
121 |
+
$request_url .= !isset($parsed_url['path']) ? '/' : '';
|
122 |
+
|
123 |
+
// Instantiate the request class
|
124 |
+
$request = new $this->request_class($request_url, $this->proxy, $helpers, $this->credentials);
|
125 |
+
$request->set_method('POST');
|
126 |
+
$request->set_body($this->querystring);
|
127 |
+
$headers['Content-Type'] = 'application/x-www-form-urlencoded; charset=utf-8';
|
128 |
+
|
129 |
+
// Pass along registered stream callbacks
|
130 |
+
if ($this->registered_streaming_read_callback)
|
131 |
+
{
|
132 |
+
$request->register_streaming_read_callback($this->registered_streaming_read_callback);
|
133 |
+
}
|
134 |
+
|
135 |
+
if ($this->registered_streaming_write_callback)
|
136 |
+
{
|
137 |
+
$request->register_streaming_write_callback($this->registered_streaming_write_callback);
|
138 |
+
}
|
139 |
+
|
140 |
+
// Add authentication headers
|
141 |
+
$headers['X-Amz-Nonce'] = $nonce;
|
142 |
+
$headers['Date'] = $date;
|
143 |
+
$headers['Content-Length'] = strlen($this->querystring);
|
144 |
+
$headers['Content-MD5'] = $this->util->hex_to_base64(md5($this->querystring));
|
145 |
+
$headers['Host'] = $host_header;
|
146 |
+
|
147 |
+
// Sort headers
|
148 |
+
uksort($headers, 'strnatcasecmp');
|
149 |
+
|
150 |
+
// Prepare the string to sign (HTTPS)
|
151 |
+
$this->string_to_sign = $date . $nonce;
|
152 |
+
|
153 |
+
// Add headers to request and compute the string to sign
|
154 |
+
foreach ($headers as $header_key => $header_value)
|
155 |
+
{
|
156 |
+
// Strip linebreaks from header values as they're illegal and can allow for security issues
|
157 |
+
$header_value = str_replace(array("\r", "\n"), '', $header_value);
|
158 |
+
|
159 |
+
// Add the header if it has a value
|
160 |
+
if ($header_value !== '')
|
161 |
+
{
|
162 |
+
$request->add_header($header_key, $header_value);
|
163 |
+
}
|
164 |
+
|
165 |
+
// Generate the string to sign
|
166 |
+
if (
|
167 |
+
substr(strtolower($header_key), 0, 8) === 'content-' ||
|
168 |
+
strtolower($header_key) === 'date' ||
|
169 |
+
strtolower($header_key) === 'expires' ||
|
170 |
+
strtolower($header_key) === 'host' ||
|
171 |
+
substr(strtolower($header_key), 0, 6) === 'x-amz-'
|
172 |
+
)
|
173 |
+
{
|
174 |
+
$signed_headers[] = $header_key;
|
175 |
+
}
|
176 |
+
}
|
177 |
+
|
178 |
+
// Hash the AWS secret key and generate a signature for the request.
|
179 |
+
$signature = base64_encode(hash_hmac('sha256', $this->string_to_sign, $this->secret_key, true));
|
180 |
+
|
181 |
+
$headers['X-Amzn-Authorization'] = 'AWS3-HTTPS'
|
182 |
+
. ' AWSAccessKeyId=' . $this->key
|
183 |
+
. ',Algorithm=HmacSHA256'
|
184 |
+
. ',SignedHeaders=' . implode(';', $signed_headers)
|
185 |
+
. ',Signature=' . $signature;
|
186 |
+
|
187 |
+
$request->add_header('X-Amzn-Authorization', $headers['X-Amzn-Authorization']);
|
188 |
+
$request->request_headers = $headers;
|
189 |
+
|
190 |
+
return $request;
|
191 |
+
}
|
192 |
+
}
|
sdk/Aws_v1/authentication/signature_v4json.class.php
ADDED
@@ -0,0 +1,349 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* Copyright 2010-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
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 |
+
* A copy of the License is located at
|
8 |
+
*
|
9 |
+
* http://aws.amazon.com/apache2.0
|
10 |
+
*
|
11 |
+
* or in the "license" file accompanying this file. This file is distributed
|
12 |
+
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
|
13 |
+
* express or implied. See the License for the specific language governing
|
14 |
+
* permissions and limitations under the License.
|
15 |
+
*/
|
16 |
+
|
17 |
+
|
18 |
+
/*%******************************************************************************************%*/
|
19 |
+
// CLASS
|
20 |
+
|
21 |
+
/**
|
22 |
+
* Implements support for Signature v4 (Query).
|
23 |
+
*
|
24 |
+
* @version 2011.01.03
|
25 |
+
* @license See the included NOTICE.md file for more information.
|
26 |
+
* @copyright See the included NOTICE.md file for more information.
|
27 |
+
* @link http://aws.amazon.com/php/ PHP Developer Center
|
28 |
+
*/
|
29 |
+
class AuthV4JSON extends Signer implements Signable
|
30 |
+
{
|
31 |
+
/**
|
32 |
+
* Constructs a new instance of the <AuthV4Query> class.
|
33 |
+
*
|
34 |
+
* @param string $endpoint (Required) The endpoint to direct the request to.
|
35 |
+
* @param string $operation (Required) The operation to execute as a result of this request.
|
36 |
+
* @param array $payload (Required) The options to use as part of the payload in the request.
|
37 |
+
* @param CFCredential $credentials (Required) The credentials to use for signing and making requests.
|
38 |
+
* @return void
|
39 |
+
*/
|
40 |
+
public function __construct($endpoint, $operation, $payload, CFCredential $credentials)
|
41 |
+
{
|
42 |
+
parent::__construct($endpoint, $operation, $payload, $credentials);
|
43 |
+
}
|
44 |
+
|
45 |
+
/**
|
46 |
+
* Generates a cURL handle with all of the required authentication bits set.
|
47 |
+
*
|
48 |
+
* @return resource A cURL handle ready for executing.
|
49 |
+
*/
|
50 |
+
public function authenticate()
|
51 |
+
{
|
52 |
+
// Determine signing values
|
53 |
+
$current_time = time();
|
54 |
+
$timestamp = gmdate(CFUtilities::DATE_FORMAT_SIGV4, $current_time);
|
55 |
+
|
56 |
+
// Initialize
|
57 |
+
$x_amz_target = null;
|
58 |
+
|
59 |
+
$this->headers = array();
|
60 |
+
$this->signed_headers = array();
|
61 |
+
$this->canonical_headers = array();
|
62 |
+
$this->query = array();
|
63 |
+
|
64 |
+
// Prepare JSON structure
|
65 |
+
$this->body = json_encode($this->payload);
|
66 |
+
if ($this->body === '' || $this->body === '[]')
|
67 |
+
{
|
68 |
+
$this->body = '{}';
|
69 |
+
}
|
70 |
+
|
71 |
+
// Do we have an authentication token?
|
72 |
+
if ($this->auth_token)
|
73 |
+
{
|
74 |
+
$this->headers['X-Amz-Security-Token'] = $this->auth_token;
|
75 |
+
$this->query['SecurityToken'] = $this->auth_token;
|
76 |
+
}
|
77 |
+
|
78 |
+
// Manage the key-value pairs that are used in the query.
|
79 |
+
if (stripos($this->operation, 'x-amz-target') !== false)
|
80 |
+
{
|
81 |
+
$x_amz_target = trim(str_ireplace('x-amz-target:', '', $this->operation));
|
82 |
+
}
|
83 |
+
else
|
84 |
+
{
|
85 |
+
$this->query['Action'] = $this->operation;
|
86 |
+
}
|
87 |
+
|
88 |
+
// Only add it if it exists.
|
89 |
+
if ($this->api_version)
|
90 |
+
{
|
91 |
+
$this->query['Version'] = $this->api_version;
|
92 |
+
}
|
93 |
+
|
94 |
+
// Do a case-sensitive, natural order sort on the array keys.
|
95 |
+
uksort($this->query, 'strcmp');
|
96 |
+
|
97 |
+
// Remove the default scheme from the domain.
|
98 |
+
$domain = str_replace(array('http://', 'https://'), '', $this->endpoint);
|
99 |
+
|
100 |
+
// Parse our request.
|
101 |
+
$parsed_url = parse_url('http://' . $domain);
|
102 |
+
|
103 |
+
// Set the proper host header.
|
104 |
+
if (isset($parsed_url['port']) && (integer) $parsed_url['port'] !== 80 && (integer) $parsed_url['port'] !== 443)
|
105 |
+
{
|
106 |
+
$host_header = strtolower($parsed_url['host']) . ':' . $parsed_url['port'];
|
107 |
+
}
|
108 |
+
else
|
109 |
+
{
|
110 |
+
$host_header = strtolower($parsed_url['host']);
|
111 |
+
}
|
112 |
+
|
113 |
+
// Generate the querystring from $this->query
|
114 |
+
$this->querystring = $this->util->to_query_string($this->query);
|
115 |
+
|
116 |
+
// Gather information to pass along to other classes.
|
117 |
+
$helpers = array(
|
118 |
+
'utilities' => $this->utilities_class,
|
119 |
+
'request' => $this->request_class,
|
120 |
+
'response' => $this->response_class,
|
121 |
+
);
|
122 |
+
|
123 |
+
// Compose the request.
|
124 |
+
$request_url = ($this->use_ssl ? 'https://' : 'http://') . $domain;
|
125 |
+
$request_url .= !isset($parsed_url['path']) ? '/' : '';
|
126 |
+
|
127 |
+
// Instantiate the request class
|
128 |
+
$request = new $this->request_class($request_url, $this->proxy, $helpers, $this->credentials);
|
129 |
+
$request->set_method('POST');
|
130 |
+
$request->set_body($this->body);
|
131 |
+
$this->querystring = $this->body;
|
132 |
+
$content_type = (stripos($this->operation, 'StorageGateway') !== false) ? 'application/x-amz-json-1.1' : 'application/x-amz-json-1.0';
|
133 |
+
$this->headers['Content-Type'] = $content_type;
|
134 |
+
$this->headers['X-Amz-Target'] = $x_amz_target;
|
135 |
+
|
136 |
+
// Pass along registered stream callbacks
|
137 |
+
if ($this->registered_streaming_read_callback)
|
138 |
+
{
|
139 |
+
$request->register_streaming_read_callback($this->registered_streaming_read_callback);
|
140 |
+
}
|
141 |
+
|
142 |
+
if ($this->registered_streaming_write_callback)
|
143 |
+
{
|
144 |
+
$request->register_streaming_write_callback($this->registered_streaming_write_callback);
|
145 |
+
}
|
146 |
+
|
147 |
+
// Add authentication headers
|
148 |
+
$this->headers['X-Amz-Date'] = $timestamp;
|
149 |
+
$this->headers['Content-Length'] = strlen($this->querystring);
|
150 |
+
$this->headers['Host'] = $host_header;
|
151 |
+
|
152 |
+
// Sort headers
|
153 |
+
uksort($this->headers, 'strnatcasecmp');
|
154 |
+
|
155 |
+
// Add headers to request and compute the string to sign
|
156 |
+
foreach ($this->headers as $header_key => $header_value)
|
157 |
+
{
|
158 |
+
// Strip line breaks and remove consecutive spaces. Services collapse whitespace in signature calculation
|
159 |
+
$header_value = preg_replace('/\s+/', ' ', trim($header_value));
|
160 |
+
|
161 |
+
$request->add_header($header_key, $header_value);
|
162 |
+
$this->canonical_headers[] = strtolower($header_key) . ':' . $header_value;
|
163 |
+
$this->signed_headers[] = strtolower($header_key);
|
164 |
+
}
|
165 |
+
|
166 |
+
$this->headers['Authorization'] = $this->authorization($timestamp);
|
167 |
+
$request->add_header('Authorization', $this->headers['Authorization']);
|
168 |
+
$request->request_headers = $this->headers;
|
169 |
+
|
170 |
+
return $request;
|
171 |
+
}
|
172 |
+
|
173 |
+
/**
|
174 |
+
* Generates the authorization string to use for the request.
|
175 |
+
*
|
176 |
+
* @param string $datetime (Required) The current timestamp.
|
177 |
+
* @return string The authorization string.
|
178 |
+
*/
|
179 |
+
protected function authorization($datetime)
|
180 |
+
{
|
181 |
+
$access_key_id = $this->key;
|
182 |
+
|
183 |
+
$parts = array();
|
184 |
+
$parts[] = "AWS4-HMAC-SHA256 Credential=${access_key_id}/" . $this->credential_string($datetime);
|
185 |
+
$parts[] = 'SignedHeaders=' . implode(';', $this->signed_headers);
|
186 |
+
$parts[] = 'Signature=' . $this->hex16($this->signature($datetime));
|
187 |
+
|
188 |
+
return implode(',', $parts);
|
189 |
+
}
|
190 |
+
|
191 |
+
/**
|
192 |
+
* Calculate the signature.
|
193 |
+
*
|
194 |
+
* @param string $datetime (Required) The current timestamp.
|
195 |
+
* @return string The signature.
|
196 |
+
*/
|
197 |
+
protected function signature($datetime)
|
198 |
+
{
|
199 |
+
$k_date = $this->hmac('AWS4' . $this->secret_key, substr($datetime, 0, 8));
|
200 |
+
$k_region = $this->hmac($k_date, $this->region());
|
201 |
+
$k_service = $this->hmac($k_region, $this->service());
|
202 |
+
$k_credentials = $this->hmac($k_service, 'aws4_request');
|
203 |
+
$signature = $this->hmac($k_credentials, $this->string_to_sign($datetime));
|
204 |
+
|
205 |
+
return $signature;
|
206 |
+
}
|
207 |
+
|
208 |
+
/**
|
209 |
+
* Calculate the string to sign.
|
210 |
+
*
|
211 |
+
* @param string $datetime (Required) The current timestamp.
|
212 |
+
* @return string The string to sign.
|
213 |
+
*/
|
214 |
+
protected function string_to_sign($datetime)
|
215 |
+
{
|
216 |
+
$parts = array();
|
217 |
+
$parts[] = 'AWS4-HMAC-SHA256';
|
218 |
+
$parts[] = $datetime;
|
219 |
+
$parts[] = $this->credential_string($datetime);
|
220 |
+
$parts[] = $this->hex16($this->hash($this->canonical_request()));
|
221 |
+
|
222 |
+
$this->string_to_sign = implode("\n", $parts);
|
223 |
+
|
224 |
+
return $this->string_to_sign;
|
225 |
+
}
|
226 |
+
|
227 |
+
/**
|
228 |
+
* Generates the credential string to use for signing.
|
229 |
+
*
|
230 |
+
* @param string $datetime (Required) The current timestamp.
|
231 |
+
* @return string The credential string.
|
232 |
+
*/
|
233 |
+
protected function credential_string($datetime)
|
234 |
+
{
|
235 |
+
$parts = array();
|
236 |
+
$parts[] = substr($datetime, 0, 8);
|
237 |
+
$parts[] = $this->region();
|
238 |
+
$parts[] = $this->service();
|
239 |
+
$parts[] = 'aws4_request';
|
240 |
+
|
241 |
+
return implode('/', $parts);
|
242 |
+
}
|
243 |
+
|
244 |
+
/**
|
245 |
+
* Calculate the canonical request.
|
246 |
+
*
|
247 |
+
* @return string The canonical request.
|
248 |
+
*/
|
249 |
+
protected function canonical_request()
|
250 |
+
{
|
251 |
+
$parts = array();
|
252 |
+
$parts[] = 'POST';
|
253 |
+
$parts[] = $this->canonical_uri();
|
254 |
+
$parts[] = ''; // $parts[] = $this->canonical_querystring();
|
255 |
+
$parts[] = implode("\n", $this->canonical_headers) . "\n";
|
256 |
+
$parts[] = implode(';', $this->signed_headers);
|
257 |
+
$parts[] = $this->hex16($this->hash($this->body));
|
258 |
+
|
259 |
+
$this->canonical_request = implode("\n", $parts);
|
260 |
+
|
261 |
+
return $this->canonical_request;
|
262 |
+
}
|
263 |
+
|
264 |
+
/**
|
265 |
+
* The region ID to use in the signature.
|
266 |
+
*
|
267 |
+
* @return return The region ID.
|
268 |
+
*/
|
269 |
+
protected function region()
|
270 |
+
{
|
271 |
+
$pieces = explode('.', $this->endpoint);
|
272 |
+
|
273 |
+
// Handle cases with single/no region (i.e., service.amazonaws.com vs. service.region.amazonaws.com)
|
274 |
+
if (count($pieces) < 4)
|
275 |
+
{
|
276 |
+
return 'us-east-1';
|
277 |
+
}
|
278 |
+
|
279 |
+
return $pieces[1];
|
280 |
+
}
|
281 |
+
|
282 |
+
/**
|
283 |
+
* The service ID to use in the signature.
|
284 |
+
*
|
285 |
+
* @return return The service ID.
|
286 |
+
*/
|
287 |
+
protected function service()
|
288 |
+
{
|
289 |
+
$pieces = explode('.', $this->endpoint);
|
290 |
+
return $pieces[0];
|
291 |
+
}
|
292 |
+
|
293 |
+
/**
|
294 |
+
* The request URI path.
|
295 |
+
*
|
296 |
+
* @return string The request URI path.
|
297 |
+
*/
|
298 |
+
protected function canonical_uri()
|
299 |
+
{
|
300 |
+
return '/';
|
301 |
+
}
|
302 |
+
|
303 |
+
/**
|
304 |
+
* The canonical query string.
|
305 |
+
*
|
306 |
+
* @return string The canonical query string.
|
307 |
+
*/
|
308 |
+
protected function canonical_querystring()
|
309 |
+
{
|
310 |
+
if (!isset($this->canonical_querystring))
|
311 |
+
{
|
312 |
+
$this->canonical_querystring = $this->util->to_signable_string($this->query);
|
313 |
+
}
|
314 |
+
|
315 |
+
return $this->canonical_querystring;
|
316 |
+
}
|
317 |
+
|
318 |
+
/**
|
319 |
+
* Hex16-pack the data.
|
320 |
+
*
|
321 |
+
* @param string $value (Required) The data to hex16 pack.
|
322 |
+
* @return string The hex16-packed data.
|
323 |
+
*/
|
324 |
+
protected function hex16($value)
|
325 |
+
{
|
326 |
+
$result = unpack('H*', $value);
|
327 |
+
return reset($result);
|
328 |
+
}
|
329 |
+
|
330 |
+
/**
|
331 |
+
* Applies HMAC SHA-256 encryption to the string, salted by the key.
|
332 |
+
*
|
333 |
+
* @return string Raw HMAC SHA-256 hashed string.
|
334 |
+
*/
|
335 |
+
protected function hmac($key, $string)
|
336 |
+
{
|
337 |
+
return hash_hmac('sha256', $string, $key, true);
|
338 |
+
}
|
339 |
+
|
340 |
+
/**
|
341 |
+
* SHA-256 hashes the string.
|
342 |
+
*
|
343 |
+
* @return string Raw SHA-256 hashed string.
|
344 |
+
*/
|
345 |
+
protected function hash($string)
|
346 |
+
{
|
347 |
+
return hash('sha256', $string, true);
|
348 |
+
}
|
349 |
+
}
|
sdk/Aws_v1/authentication/signature_v4query.class.php
ADDED
@@ -0,0 +1,379 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* Copyright 2010-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
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 |
+
* A copy of the License is located at
|
8 |
+
*
|
9 |
+
* http://aws.amazon.com/apache2.0
|
10 |
+
*
|
11 |
+
* or in the "license" file accompanying this file. This file is distributed
|
12 |
+
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
|
13 |
+
* express or implied. See the License for the specific language governing
|
14 |
+
* permissions and limitations under the License.
|
15 |
+
*/
|
16 |
+
|
17 |
+
|
18 |
+
/*%******************************************************************************************%*/
|
19 |
+
// CLASS
|
20 |
+
|
21 |
+
/**
|
22 |
+
* Implements support for Signature v4 (Query).
|
23 |
+
*
|
24 |
+
* @version 2011.01.03
|
25 |
+
* @license See the included NOTICE.md file for more information.
|
26 |
+
* @copyright See the included NOTICE.md file for more information.
|
27 |
+
* @link http://aws.amazon.com/php/ PHP Developer Center
|
28 |
+
*/
|
29 |
+
class AuthV4Query extends Signer implements Signable
|
30 |
+
{
|
31 |
+
/**
|
32 |
+
* @var array Map of endpoints to services and regions for non-standard SignatureV4 endpoints
|
33 |
+
*/
|
34 |
+
protected static $endpoint_map = array(
|
35 |
+
// Amazon Simple Email Service (SES)
|
36 |
+
'email.us-east-1.amazonaws.com' => array('service' => 'ses', 'region' => 'us-east-1'),
|
37 |
+
|
38 |
+
// Amazon Simple Queue Service (SQS)
|
39 |
+
'queue.amazonaws.com' => array('service' => 'sqs', 'region' => 'us-east-1'),
|
40 |
+
'us-west-1.queue.amazonaws.com' => array('service' => 'sqs', 'region' => 'us-west-1'),
|
41 |
+
'us-west-2.queue.amazonaws.com' => array('service' => 'sqs', 'region' => 'us-west-2'),
|
42 |
+
'eu-west-1.queue.amazonaws.com' => array('service' => 'sqs', 'region' => 'eu-west-1'),
|
43 |
+
'ap-southeast-1.queue.amazonaws.com' => array('service' => 'sqs', 'region' => 'ap-southeast-1'),
|
44 |
+
'ap-southeast-2.queue.amazonaws.com' => array('service' => 'sqs', 'region' => 'ap-southeast-2'),
|
45 |
+
'ap-northeast-1.queue.amazonaws.com' => array('service' => 'sqs', 'region' => 'ap-northeast-1'),
|
46 |
+
'sa-east-1.queue.amazonaws.com' => array('service' => 'sqs', 'region' => 'sa-east-1'),
|
47 |
+
'us-gov-west-1.queue.amazonaws.com' => array('service' => 'sqs', 'region' => 'us-gov-west-1'),
|
48 |
+
);
|
49 |
+
|
50 |
+
/**
|
51 |
+
* Constructs a new instance of the <AuthV4Query> class.
|
52 |
+
*
|
53 |
+
* @param string $endpoint (Required) The endpoint to direct the request to.
|
54 |
+
* @param string $operation (Required) The operation to execute as a result of this request.
|
55 |
+
* @param array $payload (Required) The options to use as part of the payload in the request.
|
56 |
+
* @param CFCredential $credentials (Required) The credentials to use for signing and making requests.
|
57 |
+
* @return void
|
58 |
+
*/
|
59 |
+
public function __construct($endpoint, $operation, $payload, CFCredential $credentials)
|
60 |
+
{
|
61 |
+
parent::__construct($endpoint, $operation, $payload, $credentials);
|
62 |
+
}
|
63 |
+
|
64 |
+
/**
|
65 |
+
* Generates a cURL handle with all of the required authentication bits set.
|
66 |
+
*
|
67 |
+
* @return resource A cURL handle ready for executing.
|
68 |
+
*/
|
69 |
+
public function authenticate()
|
70 |
+
{
|
71 |
+
// Determine signing values
|
72 |
+
$current_time = time();
|
73 |
+
$timestamp = gmdate(CFUtilities::DATE_FORMAT_SIGV4, $current_time);
|
74 |
+
|
75 |
+
// Initialize
|
76 |
+
$x_amz_target = null;
|
77 |
+
|
78 |
+
$this->headers = array();
|
79 |
+
$this->signed_headers = array();
|
80 |
+
$this->canonical_headers = array();
|
81 |
+
$this->query = array('body' => is_array($this->payload) ? $this->payload : array());
|
82 |
+
|
83 |
+
// Do we have an authentication token?
|
84 |
+
if ($this->auth_token)
|
85 |
+
{
|
86 |
+
$this->headers['X-Amz-Security-Token'] = $this->auth_token;
|
87 |
+
$this->query['body']['SecurityToken'] = $this->auth_token;
|
88 |
+
}
|
89 |
+
|
90 |
+
// Manage the key-value pairs that are used in the query.
|
91 |
+
if (stripos($this->operation, 'x-amz-target') !== false)
|
92 |
+
{
|
93 |
+
$x_amz_target = trim(str_ireplace('x-amz-target:', '', $this->operation));
|
94 |
+
}
|
95 |
+
else
|
96 |
+
{
|
97 |
+
$this->query['body']['Action'] = $this->operation;
|
98 |
+
}
|
99 |
+
|
100 |
+
// Only add it if it exists.
|
101 |
+
if ($this->api_version)
|
102 |
+
{
|
103 |
+
$this->query['body']['Version'] = $this->api_version;
|
104 |
+
}
|
105 |
+
|
106 |
+
// Do a case-sensitive, natural order sort on the array keys.
|
107 |
+
uksort($this->query['body'], 'strcmp');
|
108 |
+
|
109 |
+
// Remove the default scheme from the domain.
|
110 |
+
$domain = str_replace(array('http://', 'https://'), '', $this->endpoint);
|
111 |
+
|
112 |
+
// Parse our request.
|
113 |
+
$parsed_url = parse_url('http://' . $domain);
|
114 |
+
|
115 |
+
// Set the proper host header.
|
116 |
+
if (isset($parsed_url['port']) && (integer) $parsed_url['port'] !== 80 && (integer) $parsed_url['port'] !== 443)
|
117 |
+
{
|
118 |
+
$host_header = strtolower($parsed_url['host']) . ':' . $parsed_url['port'];
|
119 |
+
}
|
120 |
+
else
|
121 |
+
{
|
122 |
+
$host_header = strtolower($parsed_url['host']);
|
123 |
+
}
|
124 |
+
|
125 |
+
// Generate the querystring from $this->query
|
126 |
+
$this->querystring = $this->util->to_query_string($this->query);
|
127 |
+
|
128 |
+
// Gather information to pass along to other classes.
|
129 |
+
$helpers = array(
|
130 |
+
'utilities' => $this->utilities_class,
|
131 |
+
'request' => $this->request_class,
|
132 |
+
'response' => $this->response_class,
|
133 |
+
);
|
134 |
+
|
135 |
+
// Compose the request.
|
136 |
+
$request_url = ($this->use_ssl ? 'https://' : 'http://') . $domain;
|
137 |
+
$request_url .= !isset($parsed_url['path']) ? '/' : '';
|
138 |
+
|
139 |
+
// Instantiate the request class
|
140 |
+
$request = new $this->request_class($request_url, $this->proxy, $helpers, $this->credentials);
|
141 |
+
$request->set_method('POST');
|
142 |
+
$request->set_body($this->canonical_querystring());
|
143 |
+
$this->querystring = $this->canonical_querystring();
|
144 |
+
|
145 |
+
$this->headers['Content-Type'] = 'application/x-www-form-urlencoded; charset=utf-8';
|
146 |
+
$this->headers['X-Amz-Target'] = $x_amz_target;
|
147 |
+
|
148 |
+
// Pass along registered stream callbacks
|
149 |
+
if ($this->registered_streaming_read_callback)
|
150 |
+
{
|
151 |
+
$request->register_streaming_read_callback($this->registered_streaming_read_callback);
|
152 |
+
}
|
153 |
+
|
154 |
+
if ($this->registered_streaming_write_callback)
|
155 |
+
{
|
156 |
+
$request->register_streaming_write_callback($this->registered_streaming_write_callback);
|
157 |
+
}
|
158 |
+
|
159 |
+
// Add authentication headers
|
160 |
+
$this->headers['X-Amz-Date'] = $timestamp;
|
161 |
+
$this->headers['Content-Length'] = strlen($this->querystring);
|
162 |
+
$this->headers['Content-MD5'] = $this->util->hex_to_base64(md5($this->querystring));
|
163 |
+
$this->headers['Host'] = $host_header;
|
164 |
+
|
165 |
+
// Sort headers
|
166 |
+
uksort($this->headers, 'strnatcasecmp');
|
167 |
+
|
168 |
+
// Add headers to request and compute the string to sign
|
169 |
+
foreach ($this->headers as $header_key => $header_value)
|
170 |
+
{
|
171 |
+
// Strip line breaks and remove consecutive spaces. Services collapse whitespace in signature calculation
|
172 |
+
$header_value = preg_replace('/\s+/', ' ', trim($header_value));
|
173 |
+
|
174 |
+
$request->add_header($header_key, $header_value);
|
175 |
+
$this->canonical_headers[] = strtolower($header_key) . ':' . $header_value;
|
176 |
+
$this->signed_headers[] = strtolower($header_key);
|
177 |
+
}
|
178 |
+
|
179 |
+
$this->headers['Authorization'] = $this->authorization($timestamp);
|
180 |
+
|
181 |
+
$request->add_header('Authorization', $this->headers['Authorization']);
|
182 |
+
$request->request_headers = $this->headers;
|
183 |
+
|
184 |
+
return $request;
|
185 |
+
}
|
186 |
+
|
187 |
+
/**
|
188 |
+
* Generates the authorization string to use for the request.
|
189 |
+
*
|
190 |
+
* @param string $datetime (Required) The current timestamp.
|
191 |
+
* @return string The authorization string.
|
192 |
+
*/
|
193 |
+
protected function authorization($datetime)
|
194 |
+
{
|
195 |
+
$access_key_id = $this->key;
|
196 |
+
|
197 |
+
$parts = array();
|
198 |
+
$parts[] = "AWS4-HMAC-SHA256 Credential=${access_key_id}/" . $this->credential_string($datetime);
|
199 |
+
$parts[] = 'SignedHeaders=' . implode(';', $this->signed_headers);
|
200 |
+
$parts[] = 'Signature=' . $this->hex16($this->signature($datetime));
|
201 |
+
|
202 |
+
return implode(',', $parts);
|
203 |
+
}
|
204 |
+
|
205 |
+
/**
|
206 |
+
* Calculate the signature.
|
207 |
+
*
|
208 |
+
* @param string $datetime (Required) The current timestamp.
|
209 |
+
* @return string The signature.
|
210 |
+
*/
|
211 |
+
protected function signature($datetime)
|
212 |
+
{
|
213 |
+
$k_date = $this->hmac('AWS4' . $this->secret_key, substr($datetime, 0, 8));
|
214 |
+
$k_region = $this->hmac($k_date, $this->region());
|
215 |
+
$k_service = $this->hmac($k_region, $this->service());
|
216 |
+
$k_credentials = $this->hmac($k_service, 'aws4_request');
|
217 |
+
$signature = $this->hmac($k_credentials, $this->string_to_sign($datetime));
|
218 |
+
|
219 |
+
return $signature;
|
220 |
+
}
|
221 |
+
|
222 |
+
/**
|
223 |
+
* Calculate the string to sign.
|
224 |
+
*
|
225 |
+
* @param string $datetime (Required) The current timestamp.
|
226 |
+
* @return string The string to sign.
|
227 |
+
*/
|
228 |
+
protected function string_to_sign($datetime)
|
229 |
+
{
|
230 |
+
$parts = array();
|
231 |
+
$parts[] = 'AWS4-HMAC-SHA256';
|
232 |
+
$parts[] = $datetime;
|
233 |
+
$parts[] = $this->credential_string($datetime);
|
234 |
+
$parts[] = $this->hex16($this->hash($this->canonical_request()));
|
235 |
+
|
236 |
+
$this->string_to_sign = implode("\n", $parts);
|
237 |
+
|
238 |
+
return $this->string_to_sign;
|
239 |
+
}
|
240 |
+
|
241 |
+
/**
|
242 |
+
* Generates the credential string to use for signing.
|
243 |
+
*
|
244 |
+
* @param string $datetime (Required) The current timestamp.
|
245 |
+
* @return string The credential string.
|
246 |
+
*/
|
247 |
+
protected function credential_string($datetime)
|
248 |
+
{
|
249 |
+
$parts = array();
|
250 |
+
$parts[] = substr($datetime, 0, 8);
|
251 |
+
$parts[] = $this->region();
|
252 |
+
$parts[] = $this->service();
|
253 |
+
$parts[] = 'aws4_request';
|
254 |
+
|
255 |
+
return implode('/', $parts);
|
256 |
+
}
|
257 |
+
|
258 |
+
/**
|
259 |
+
* Calculate the canonical request.
|
260 |
+
*
|
261 |
+
* @return string The canonical request.
|
262 |
+
*/
|
263 |
+
protected function canonical_request()
|
264 |
+
{
|
265 |
+
$parts = array();
|
266 |
+
$parts[] = 'POST';
|
267 |
+
$parts[] = $this->canonical_uri();
|
268 |
+
$parts[] = ''; // $parts[] = $this->canonical_querystring();
|
269 |
+
$parts[] = implode("\n", $this->canonical_headers) . "\n";
|
270 |
+
$parts[] = implode(';', $this->signed_headers);
|
271 |
+
$parts[] = $this->hex16($this->hash($this->canonical_querystring()));
|
272 |
+
|
273 |
+
$this->canonical_request = implode("\n", $parts);
|
274 |
+
|
275 |
+
return $this->canonical_request;
|
276 |
+
}
|
277 |
+
|
278 |
+
/**
|
279 |
+
* The region ID to use in the signature.
|
280 |
+
*
|
281 |
+
* @return return The region ID.
|
282 |
+
*/
|
283 |
+
protected function region()
|
284 |
+
{
|
285 |
+
$endpoint = str_replace(array('http://', 'https://'), '', $this->endpoint);
|
286 |
+
|
287 |
+
if (isset(self::$endpoint_map[$endpoint])) {
|
288 |
+
return self::$endpoint_map[$endpoint]['region'];
|
289 |
+
}
|
290 |
+
|
291 |
+
$pieces = explode('.', $endpoint);
|
292 |
+
|
293 |
+
// Handle cases with single/no region (i.e., service.amazonaws.com vs. service.region.amazonaws.com)
|
294 |
+
if (count($pieces) < 4)
|
295 |
+
{
|
296 |
+
return 'us-east-1';
|
297 |
+
}
|
298 |
+
|
299 |
+
return $pieces[1];
|
300 |
+
}
|
301 |
+
|
302 |
+
/**
|
303 |
+
* The service ID to use in the signature.
|
304 |
+
*
|
305 |
+
* @return return The service ID.
|
306 |
+
*/
|
307 |
+
protected function service()
|
308 |
+
{
|
309 |
+
$endpoint = str_replace(array('http://', 'https://'), '', $this->endpoint);
|
310 |
+
|
311 |
+
if (isset(self::$endpoint_map[$endpoint])) {
|
312 |
+
return self::$endpoint_map[$endpoint]['service'];
|
313 |
+
}
|
314 |
+
|
315 |
+
$pieces = explode('.', $endpoint);
|
316 |
+
return $pieces[0];
|
317 |
+
}
|
318 |
+
|
319 |
+
/**
|
320 |
+
* The request URI path.
|
321 |
+
*
|
322 |
+
* @return string The request URI path.
|
323 |
+
*/
|
324 |
+
protected function canonical_uri()
|
325 |
+
{
|
326 |
+
$endpoint = str_replace(array('http://', 'https://'), '', $this->endpoint);
|
327 |
+
|
328 |
+
$parsed_url = parse_url('http://' . $endpoint);
|
329 |
+
|
330 |
+
return isset($parsed_url['path']) ? $parsed_url['path'] : '/';
|
331 |
+
}
|
332 |
+
|
333 |
+
/**
|
334 |
+
* The canonical query string.
|
335 |
+
*
|
336 |
+
* @return string The canonical query string.
|
337 |
+
*/
|
338 |
+
protected function canonical_querystring()
|
339 |
+
{
|
340 |
+
if (!isset($this->canonical_querystring))
|
341 |
+
{
|
342 |
+
$this->canonical_querystring = $this->util->to_signable_string($this->query['body']);
|
343 |
+
}
|
344 |
+
|
345 |
+
return $this->canonical_querystring;
|
346 |
+
}
|
347 |
+
|
348 |
+
/**
|
349 |
+
* Hex16-pack the data.
|
350 |
+
*
|
351 |
+
* @param string $value (Required) The data to hex16 pack.
|
352 |
+
* @return string The hex16-packed data.
|
353 |
+
*/
|
354 |
+
protected function hex16($value)
|
355 |
+
{
|
356 |
+
$result = unpack('H*', $value);
|
357 |
+
return reset($result);
|
358 |
+
}
|
359 |
+
|
360 |
+
/**
|
361 |
+
* Applies HMAC SHA-256 encryption to the string, salted by the key.
|
362 |
+
*
|
363 |
+
* @return string Raw HMAC SHA-256 hashed string.
|
364 |
+
*/
|
365 |
+
protected function hmac($key, $string)
|
366 |
+
{
|
367 |
+
return hash_hmac('sha256', $string, $key, true);
|
368 |
+
}
|
369 |
+
|
370 |
+
/**
|
371 |
+
* SHA-256 hashes the string.
|
372 |
+
*
|
373 |
+
* @return string Raw SHA-256 hashed string.
|
374 |
+
*/
|
375 |
+
protected function hash($string)
|
376 |
+
{
|
377 |
+
return hash('sha256', $string, true);
|
378 |
+
}
|
379 |
+
}
|
sdk/Aws_v1/authentication/signer.abstract.php
ADDED
@@ -0,0 +1,68 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* Copyright 2010-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
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 |
+
* A copy of the License is located at
|
8 |
+
*
|
9 |
+
* http://aws.amazon.com/apache2.0
|
10 |
+
*
|
11 |
+
* or in the "license" file accompanying this file. This file is distributed
|
12 |
+
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
|
13 |
+
* express or implied. See the License for the specific language governing
|
14 |
+
* permissions and limitations under the License.
|
15 |
+
*/
|
16 |
+
|
17 |
+
|
18 |
+
/*%******************************************************************************************%*/
|
19 |
+
// CLASS
|
20 |
+
|
21 |
+
/**
|
22 |
+
* The abstract class that serves as the base class that signer classes extend.
|
23 |
+
*
|
24 |
+
* @version 2011.11.22
|
25 |
+
* @license See the included NOTICE.md file for more information.
|
26 |
+
* @copyright See the included NOTICE.md file for more information.
|
27 |
+
* @link http://aws.amazon.com/php/ PHP Developer Center
|
28 |
+
*/
|
29 |
+
abstract class Signer
|
30 |
+
{
|
31 |
+
/**
|
32 |
+
* The endpoint to direct the request to.
|
33 |
+
*/
|
34 |
+
public $endpoint;
|
35 |
+
|
36 |
+
/**
|
37 |
+
* The operation to execute as a result of this request.
|
38 |
+
*/
|
39 |
+
public $operation;
|
40 |
+
|
41 |
+
/**
|
42 |
+
* The options to use as part of the payload in the request.
|
43 |
+
*/
|
44 |
+
public $payload;
|
45 |
+
|
46 |
+
/**
|
47 |
+
* The credentials to use for signing and making requests.
|
48 |
+
*/
|
49 |
+
public $credentials;
|
50 |
+
|
51 |
+
|
52 |
+
/**
|
53 |
+
* Constructs a new instance of the implementing class.
|
54 |
+
*
|
55 |
+
* @param string $endpoint (Required) The endpoint to direct the request to.
|
56 |
+
* @param string $operation (Required) The operation to execute as a result of this request.
|
57 |
+
* @param array $payload (Required) The options to use as part of the payload in the request.
|
58 |
+
* @param CFCredential $credentials (Required) The credentials to use for signing and making requests.
|
59 |
+
* @return void
|
60 |
+
*/
|
61 |
+
public function __construct($endpoint, $operation, $payload, CFCredential $credentials)
|
62 |
+
{
|
63 |
+
$this->endpoint = $endpoint;
|
64 |
+
$this->operation = $operation;
|
65 |
+
$this->payload = $payload;
|
66 |
+
$this->credentials = $credentials;
|
67 |
+
}
|
68 |
+
}
|
sdk/Aws_v1/config.inc.php
ADDED
File without changes
|
sdk/Aws_v1/extensions/dynamodbsessionhandler.class.php
ADDED
@@ -0,0 +1,518 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* Copyright 2011-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
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 |
+
* A copy of the License is located at
|
8 |
+
*
|
9 |
+
* http://aws.amazon.com/apache2.0
|
10 |
+
*
|
11 |
+
* or in the "license" file accompanying this file. This file is distributed
|
12 |
+
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
|
13 |
+
* express or implied. See the License for the specific language governing
|
14 |
+
* permissions and limitations under the License.
|
15 |
+
*/
|
16 |
+
|
17 |
+
|
18 |
+
/**
|
19 |
+
* Provides an interface for using Amazon DynamoDB as a session store by hooking into
|
20 |
+
* PHP's session handler hooks. This class is not auto-loaded, and must be included
|
21 |
+
* manually or via the <code>AmazonDynamoDB::register_session_hander()</code> method.
|
22 |
+
*
|
23 |
+
* Once registered, You may use the native <code>$_SESSION</code> superglobal and
|
24 |
+
* session functions, and the sessions will be stored automatically in DynamoDB.
|
25 |
+
*/
|
26 |
+
class DynamoDBSessionHandler
|
27 |
+
{
|
28 |
+
/**
|
29 |
+
* @var AmazonDynamoDB The DyanamoDB client.
|
30 |
+
*/
|
31 |
+
protected $_dynamodb = null;
|
32 |
+
|
33 |
+
/**
|
34 |
+
* @var string The session save path (see <php:session_save_path()>).
|
35 |
+
*/
|
36 |
+
protected $_save_path = null;
|
37 |
+
|
38 |
+
/**
|
39 |
+
* @var string The session name (see <php:session_name()>).
|
40 |
+
*/
|
41 |
+
protected $_session_name = null;
|
42 |
+
|
43 |
+
/**
|
44 |
+
* @var boolean Keeps track of if the session is open.
|
45 |
+
*/
|
46 |
+
protected $_open_session = null;
|
47 |
+
|
48 |
+
/**
|
49 |
+
* @var boolean Keeps track of whether the session is open.
|
50 |
+
*/
|
51 |
+
protected $_session_written = false;
|
52 |
+
|
53 |
+
/**
|
54 |
+
* @var string The name of the DynamoDB table in which to store sessions.
|
55 |
+
*/
|
56 |
+
protected $_table_name = 'sessions';
|
57 |
+
|
58 |
+
/**
|
59 |
+
* @var string The name of the hash key in the DynamoDB sessions table.
|
60 |
+
*/
|
61 |
+
protected $_hash_key = 'id';
|
62 |
+
|
63 |
+
/**
|
64 |
+
* @var integer The lifetime of an inactive session before it should be garbage collected.
|
65 |
+
*/
|
66 |
+
protected $_session_lifetime = 0;
|
67 |
+
|
68 |
+
/**
|
69 |
+
* @var boolean Whether or not the session handler should do consistent reads from DynamoDB.
|
70 |
+
*/
|
71 |
+
protected $_consistent_reads = true;
|
72 |
+
|
73 |
+
/**
|
74 |
+
* @var boolean Whether or not the session handler should do session locking.
|
75 |
+
*/
|
76 |
+
protected $_session_locking = true;
|
77 |
+
|
78 |
+
/**
|
79 |
+
* @var integer Maximum time, in seconds, that the session handler should take to acquire a lock.
|
80 |
+
*/
|
81 |
+
protected $_max_lock_wait_time = 30;
|
82 |
+
|
83 |
+
/**
|
84 |
+
* @var integer Minimum time, in microseconds, that the session handler should wait to retry acquiring a lock.
|
85 |
+
*/
|
86 |
+
protected $_min_lock_retry_utime = 10000;
|
87 |
+
|
88 |
+
/**
|
89 |
+
* @var integer Maximum time, in microseconds, that the session handler should wait to retry acquiring a lock.
|
90 |
+
*/
|
91 |
+
protected $_max_lock_retry_utime = 100000;
|
92 |
+
|
93 |
+
/**
|
94 |
+
* @var array Type for casting the configuration options.
|
95 |
+
*/
|
96 |
+
protected static $_option_types = array(
|
97 |
+
'table_name' => 'string',
|
98 |
+
'hash_key' => 'string',
|
99 |
+
'session_lifetime' => 'integer',
|
100 |
+
'consistent_reads' => 'boolean',
|
101 |
+
'session_locking' => 'boolean',
|
102 |
+
'max_lock_wait_time' => 'integer',
|
103 |
+
'min_lock_retry_utime' => 'integer',
|
104 |
+
'max_lock_retry_utime' => 'integer',
|
105 |
+
);
|
106 |
+
|
107 |
+
/**
|
108 |
+
* Initializes the session handler and prepares the configuration options.
|
109 |
+
*
|
110 |
+
* @param AmazonDynamoDB $dynamodb (Required) An instance of the DynamoDB client.
|
111 |
+
* @param array $options (Optional) Configuration options.
|
112 |
+
*/
|
113 |
+
public function __construct(AmazonDynamoDB $dynamodb, array $options = array())
|
114 |
+
{
|
115 |
+
// Store the AmazonDynamoDB client for use in the session handler
|
116 |
+
$this->_dynamodb = $dynamodb;
|
117 |
+
|
118 |
+
// Do type conversions on options and store the values
|
119 |
+
foreach ($options as $key => $value)
|
120 |
+
{
|
121 |
+
if (isset(self::$_option_types[$key]))
|
122 |
+
{
|
123 |
+
settype($value, self::$_option_types[$key]);
|
124 |
+
$this->{'_' . $key} = $value;
|
125 |
+
}
|
126 |
+
}
|
127 |
+
|
128 |
+
// Make sure the lifetime is positive. Use the gc_maxlifetime otherwise
|
129 |
+
if ($this->_session_lifetime <= 0)
|
130 |
+
{
|
131 |
+
$this->_session_lifetime = (integer) ini_get('session.gc_maxlifetime');
|
132 |
+
}
|
133 |
+
}
|
134 |
+
|
135 |
+
/**
|
136 |
+
* Destruct the session handler and make sure the session gets written.
|
137 |
+
*
|
138 |
+
* NOTE: It is usually better practice to call <code>session_write_close()</code>
|
139 |
+
* manually in your application as soon as session modifications are complete. This
|
140 |
+
* is especially true if session locking is enabled (which it is by default).
|
141 |
+
*
|
142 |
+
* @see http://php.net/manual/en/function.session-set-save-handler.php#refsect1-function.session-set-save-handler-notes
|
143 |
+
*/
|
144 |
+
public function __destruct()
|
145 |
+
{
|
146 |
+
session_write_close();
|
147 |
+
}
|
148 |
+
|
149 |
+
/**
|
150 |
+
* Register DynamoDB as a session handler.
|
151 |
+
*
|
152 |
+
* Uses the PHP-provided method to register this class as a session handler.
|
153 |
+
*
|
154 |
+
* @return DynamoDBSessionHandler Chainable.
|
155 |
+
*/
|
156 |
+
public function register()
|
157 |
+
{
|
158 |
+
session_set_save_handler(
|
159 |
+
array($this, 'open'),
|
160 |
+
array($this, 'close'),
|
161 |
+
array($this, 'read'),
|
162 |
+
array($this, 'write'),
|
163 |
+
array($this, 'destroy'),
|
164 |
+
array($this, 'garbage_collect')
|
165 |
+
);
|
166 |
+
|
167 |
+
return $this;
|
168 |
+
}
|
169 |
+
|
170 |
+
/**
|
171 |
+
* Checks if the session is open and writable.
|
172 |
+
*
|
173 |
+
* @return boolean Whether or not the session is still open for writing.
|
174 |
+
*/
|
175 |
+
public function is_session_open()
|
176 |
+
{
|
177 |
+
return (boolean) $this->_open_session;
|
178 |
+
}
|
179 |
+
|
180 |
+
/**
|
181 |
+
* Delegates to <code>session_start()</code>
|
182 |
+
*
|
183 |
+
* @return DynamoDBSessionHandler Chainable.
|
184 |
+
*/
|
185 |
+
public function open_session()
|
186 |
+
{
|
187 |
+
session_start();
|
188 |
+
|
189 |
+
return $this;
|
190 |
+
}
|
191 |
+
|
192 |
+
/**
|
193 |
+
* Delegates to <code>session_commit()</code>
|
194 |
+
*
|
195 |
+
* @return DynamoDBSessionHandler Chainable.
|
196 |
+
*/
|
197 |
+
public function close_session()
|
198 |
+
{
|
199 |
+
session_commit();
|
200 |
+
|
201 |
+
return $this;
|
202 |
+
}
|
203 |
+
|
204 |
+
/**
|
205 |
+
* Delegates to <code>session_destroy()</code>
|
206 |
+
*
|
207 |
+
* @return DynamoDBSessionHandler Chainable.
|
208 |
+
*/
|
209 |
+
public function destroy_session()
|
210 |
+
{
|
211 |
+
session_destroy();
|
212 |
+
|
213 |
+
return $this;
|
214 |
+
}
|
215 |
+
|
216 |
+
/**
|
217 |
+
* Open a session for writing. Triggered by <php:session_start()>.
|
218 |
+
*
|
219 |
+
* Part of the standard PHP session handler interface.
|
220 |
+
*
|
221 |
+
* @param string $save_path (Required) The session save path (see <php:session_save_path()>).
|
222 |
+
* @param string $session_name (Required) The session name (see <php:session_name()>).
|
223 |
+
* @return boolean Whether or not the operation succeeded.
|
224 |
+
*/
|
225 |
+
public function open($save_path, $session_name)
|
226 |
+
{
|
227 |
+
$this->_save_path = $save_path;
|
228 |
+
$this->_session_name = $session_name;
|
229 |
+
$this->_open_session = session_id();
|
230 |
+
|
231 |
+
return true;
|
232 |
+
}
|
233 |
+
|
234 |
+
/**
|
235 |
+
* Close a session from writing
|
236 |
+
*
|
237 |
+
* Part of the standard PHP session handler interface
|
238 |
+
*
|
239 |
+
* @return boolean Success
|
240 |
+
*/
|
241 |
+
public function close()
|
242 |
+
{
|
243 |
+
if (!$this->_session_written)
|
244 |
+
{
|
245 |
+
// Ensure that the session is unlocked even if the write did not happen
|
246 |
+
$id = $this->_open_session;
|
247 |
+
$response = $this->_dynamodb->update_item(array(
|
248 |
+
'TableName' => $this->_table_name,
|
249 |
+
'Key' => array('HashKeyElement' => $this->_dynamodb->attribute($this->_id($id))),
|
250 |
+
'AttributeUpdates' => array(
|
251 |
+
'expires' => $this->_dynamodb->attribute(time() + $this->_session_lifetime, 'update'),
|
252 |
+
'lock' => array('Action' => AmazonDynamoDB::ACTION_DELETE)
|
253 |
+
),
|
254 |
+
));
|
255 |
+
|
256 |
+
$this->_session_written = $response->isOK();
|
257 |
+
}
|
258 |
+
|
259 |
+
$this->_open_session = null;
|
260 |
+
|
261 |
+
return $this->_session_written;
|
262 |
+
}
|
263 |
+
|
264 |
+
/**
|
265 |
+
* Read a session stored in DynamoDB
|
266 |
+
*
|
267 |
+
* Part of the standard PHP session handler interface
|
268 |
+
*
|
269 |
+
* @param string $id (Required) The session ID.
|
270 |
+
* @return string The session data.
|
271 |
+
*/
|
272 |
+
public function read($id)
|
273 |
+
{
|
274 |
+
$result = '';
|
275 |
+
|
276 |
+
// Get the session data from DynamoDB (acquire a lock if locking is enabled)
|
277 |
+
if ($this->_session_locking)
|
278 |
+
{
|
279 |
+
$response = $this->_lock_and_read($id);
|
280 |
+
$node_name = 'Attributes';
|
281 |
+
}
|
282 |
+
else
|
283 |
+
{
|
284 |
+
$response = $this->_dynamodb->get_item(array(
|
285 |
+
'TableName' => $this->_table_name,
|
286 |
+
'Key' => array('HashKeyElement' => $this->_dynamodb->attribute($this->_id($id))),
|
287 |
+
'ConsistentRead' => $this->_consistent_reads,
|
288 |
+
));
|
289 |
+
$node_name = 'Item';
|
290 |
+
}
|
291 |
+
|
292 |
+
if ($response && $response->isOK())
|
293 |
+
{
|
294 |
+
$item = array();
|
295 |
+
|
296 |
+
// Get the data from the DynamoDB response
|
297 |
+
if ($response->body->{$node_name})
|
298 |
+
{
|
299 |
+
foreach ($response->body->{$node_name}->children() as $key => $value)
|
300 |
+
{
|
301 |
+
$type = $value->children()->getName();
|
302 |
+
$item[$key] = $value->{$type}->to_string();
|
303 |
+
}
|
304 |
+
}
|
305 |
+
|
306 |
+
if (isset($item['expires']) && isset($item['data']))
|
307 |
+
{
|
308 |
+
// Check the expiration date before using
|
309 |
+
if ($item['expires'] > time())
|
310 |
+
{
|
311 |
+
$result = $item['data'];
|
312 |
+
}
|
313 |
+
else
|
314 |
+
{
|
315 |
+
$this->destroy($id);
|
316 |
+
}
|
317 |
+
}
|
318 |
+
}
|
319 |
+
|
320 |
+
return $result;
|
321 |
+
}
|
322 |
+
|
323 |
+
/**
|
324 |
+
* Write a session to DynamoDB.
|
325 |
+
*
|
326 |
+
* Part of the standard PHP session handler interface.
|
327 |
+
*
|
328 |
+
* @param string $id (Required) The session ID.
|
329 |
+
* @param string $data (Required) The session data.
|
330 |
+
* @return boolean Whether or not the operation succeeded.
|
331 |
+
*/
|
332 |
+
public function write($id, $data)
|
333 |
+
{
|
334 |
+
// Write the session data to DynamoDB
|
335 |
+
$response = $this->_dynamodb->put_item(array(
|
336 |
+
'TableName' => $this->_table_name,
|
337 |
+
'Item' => $this->_dynamodb->attributes(array(
|
338 |
+
$this->_hash_key => $this->_id($id),
|
339 |
+
'expires' => time() + $this->_session_lifetime,
|
340 |
+
'data' => $data,
|
341 |
+
)),
|
342 |
+
));
|
343 |
+
|
344 |
+
$this->_session_written = $response->isOK();
|
345 |
+
|
346 |
+
return $this->_session_written;
|
347 |
+
}
|
348 |
+
|
349 |
+
/**
|
350 |
+
* Delete a session stored in DynamoDB.
|
351 |
+
*
|
352 |
+
* Part of the standard PHP session handler interface.
|
353 |
+
*
|
354 |
+
* @param string $id (Required) The session ID.
|
355 |
+
* @param boolean $garbage_collect_mode (Optional) Whether or not the handler is doing garbage collection.
|
356 |
+
* @return boolean Whether or not the operation succeeded.
|
357 |
+
*/
|
358 |
+
public function destroy($id, $garbage_collect_mode = false)
|
359 |
+
{
|
360 |
+
// Make sure we don't prefix the ID a second time
|
361 |
+
if (!$garbage_collect_mode)
|
362 |
+
{
|
363 |
+
$id = $this->_id($id);
|
364 |
+
}
|
365 |
+
|
366 |
+
$delete_options = array(
|
367 |
+
'TableName' => $this->_table_name,
|
368 |
+
'Key' => array('HashKeyElement' => $this->_dynamodb->attribute($id)),
|
369 |
+
);
|
370 |
+
|
371 |
+
// Make sure not to garbage collect locked sessions
|
372 |
+
if ($garbage_collect_mode && $this->_session_locking)
|
373 |
+
{
|
374 |
+
$delete_options['Expected'] = array('lock' => array('Exists' => false));
|
375 |
+
}
|
376 |
+
|
377 |
+
// Send the delete request to DynamoDB
|
378 |
+
$response = $this->_dynamodb->delete_item($delete_options);
|
379 |
+
|
380 |
+
$this->_session_written = $response->isOK();
|
381 |
+
|
382 |
+
return $this->_session_written;
|
383 |
+
}
|
384 |
+
|
385 |
+
/**
|
386 |
+
* Performs garbage collection on the sessions stored in the DynamoDB table.
|
387 |
+
*
|
388 |
+
* Part of the standard PHP session handler interface.
|
389 |
+
*
|
390 |
+
* @param integer $maxlifetime (Required) The value of <code>session.gc_maxlifetime</code>. Ignored.
|
391 |
+
* @return boolean Whether or not the operation succeeded.
|
392 |
+
*/
|
393 |
+
public function garbage_collect($maxlifetime = null)
|
394 |
+
{
|
395 |
+
// Send a search request to DynamoDB looking for expired sessions
|
396 |
+
$response = $this->_dynamodb->scan(array(
|
397 |
+
'TableName' => $this->_table_name,
|
398 |
+
'ScanFilter' => array('expires' => array(
|
399 |
+
'AttributeValueList' => array($this->_dynamodb->attribute(time())),
|
400 |
+
'ComparisonOperator' => AmazonDynamoDB::CONDITION_LESS_THAN,
|
401 |
+
)),
|
402 |
+
));
|
403 |
+
|
404 |
+
// Delete the expired sessions
|
405 |
+
if ($response->isOK())
|
406 |
+
{
|
407 |
+
$deleted = array();
|
408 |
+
|
409 |
+
// Get the ID of and delete each session that is expired
|
410 |
+
foreach ($response->body->Items as $item)
|
411 |
+
{
|
412 |
+
$id = (string) $item->{$this->_hash_key}->{AmazonDynamoDB::TYPE_STRING};
|
413 |
+
$deleted[$id] = $this->destroy($id, true);
|
414 |
+
}
|
415 |
+
|
416 |
+
// Return true if all of the expired sessions were deleted
|
417 |
+
return (array_sum($deleted) === count($deleted));
|
418 |
+
}
|
419 |
+
|
420 |
+
return false;
|
421 |
+
}
|
422 |
+
|
423 |
+
/**
|
424 |
+
* Creates a table in DynamoDB for session storage according to provided configuration options.
|
425 |
+
*
|
426 |
+
* Note: Table creation may also be done via the AWS Console, which might make the most sense for this use case.
|
427 |
+
*
|
428 |
+
* @param integer $read_capacity_units (Required) Read capacity units for table throughput.
|
429 |
+
* @param integer $write_capacity_units (Required) Write capacity units for table throughput.
|
430 |
+
* @return boolean Returns <code>true</code> on success.
|
431 |
+
*/
|
432 |
+
public function create_sessions_table($read_capacity_units = 10, $write_capacity_units = 5)
|
433 |
+
{
|
434 |
+
$response = $this->_dynamodb->create_table(array(
|
435 |
+
'TableName' => $this->_table_name,
|
436 |
+
'KeySchema' => array(
|
437 |
+
'HashKeyElement' => array(
|
438 |
+
'AttributeName' => $this->_hash_key,
|
439 |
+
'AttributeType' => AmazonDynamoDB::TYPE_STRING,
|
440 |
+
)
|
441 |
+
),
|
442 |
+
'ProvisionedThroughput' => array(
|
443 |
+
'ReadCapacityUnits' => $read_capacity_units,
|
444 |
+
'WriteCapacityUnits' => $write_capacity_units,
|
445 |
+
)
|
446 |
+
));
|
447 |
+
|
448 |
+
return $response->isOK();
|
449 |
+
}
|
450 |
+
|
451 |
+
/**
|
452 |
+
* Deletes the session storage table from DynamoDB.
|
453 |
+
*
|
454 |
+
* Note: Table deletion may also be done via the AWS Console, which might make the most sense for this use case.
|
455 |
+
*
|
456 |
+
* @return boolean Returns <code>true</code> on success.
|
457 |
+
*/
|
458 |
+
public function delete_sessions_table()
|
459 |
+
{
|
460 |
+
$response = $this->_dynamodb->delete_table(array('TableName' => $this->_table_name));
|
461 |
+
|
462 |
+
return $response->isOK();
|
463 |
+
}
|
464 |
+
|
465 |
+
/**
|
466 |
+
* Prefix the session ID with the session name and prepare for DynamoDB usage
|
467 |
+
*
|
468 |
+
* @param string $id (Required) The session ID.
|
469 |
+
* @return array The HashKeyElement value formatted as an array.
|
470 |
+
*/
|
471 |
+
protected function _id($id)
|
472 |
+
{
|
473 |
+
return trim($this->_session_name . '_' . $id, '_');
|
474 |
+
}
|
475 |
+
|
476 |
+
/**
|
477 |
+
* Acquires a lock on a session in DynamoDB using conditional updates.
|
478 |
+
*
|
479 |
+
* WARNING: There is a <code>while(true);</code> in here.
|
480 |
+
*
|
481 |
+
* @param string $id (Required) The session ID.
|
482 |
+
* @return CFResponse The response from DynamoDB.
|
483 |
+
*/
|
484 |
+
protected function _lock_and_read($id)
|
485 |
+
{
|
486 |
+
$now = time();
|
487 |
+
$timeout = $now + $this->_max_lock_wait_time;
|
488 |
+
|
489 |
+
do
|
490 |
+
{
|
491 |
+
// Acquire the lock
|
492 |
+
$response = $this->_dynamodb->update_item(array(
|
493 |
+
'TableName' => $this->_table_name,
|
494 |
+
'Key' => array('HashKeyElement' => $this->_dynamodb->attribute($this->_id($id))),
|
495 |
+
'AttributeUpdates' => array('lock' => $this->_dynamodb->attribute(1, 'update')),
|
496 |
+
'Expected' => array('lock' => array('Exists' => false)),
|
497 |
+
'ReturnValues' => 'ALL_NEW',
|
498 |
+
));
|
499 |
+
|
500 |
+
// If lock succeeds (or times out), exit the loop, otherwise sleep and try again
|
501 |
+
if ($response->isOK() || $now >= $timeout)
|
502 |
+
{
|
503 |
+
return $response;
|
504 |
+
}
|
505 |
+
elseif (stripos((string) $response->body->asXML(), 'ConditionalCheckFailedException') !== false)
|
506 |
+
{
|
507 |
+
usleep(rand($this->_min_lock_retry_utime, $this->_max_lock_retry_utime));
|
508 |
+
|
509 |
+
$now = time();
|
510 |
+
}
|
511 |
+
else
|
512 |
+
{
|
513 |
+
return null;
|
514 |
+
}
|
515 |
+
}
|
516 |
+
while (true);
|
517 |
+
}
|
518 |
+
}
|
sdk/Aws_v1/extensions/s3browserupload.class.php
ADDED
@@ -0,0 +1,173 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* Copyright 2010-2012 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
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 |
+
* A copy of the License is located at
|
8 |
+
*
|
9 |
+
* http://aws.amazon.com/apache2.0
|
10 |
+
*
|
11 |
+
* or in the "license" file accompanying this file. This file is distributed
|
12 |
+
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
|
13 |
+
* express or implied. See the License for the specific language governing
|
14 |
+
* permissions and limitations under the License.
|
15 |
+
*/
|
16 |
+
|
17 |
+
|
18 |
+
class S3BrowserUpload extends AmazonS3
|
19 |
+
{
|
20 |
+
/**
|
21 |
+
* The <code>POST</code> operation adds an object to a specified bucket using HTML forms. POST is an alternate
|
22 |
+
* form of <code>PUT</code> that enables browser-based uploads as a way of putting objects in buckets.
|
23 |
+
* Parameters that are passed to <code>PUT</code> via HTTP headers are instead passed as form fields to
|
24 |
+
* <code>POST</code> in the <code>multipart/form-data</code> encoded message body. You must have
|
25 |
+
* <code>WRITE</code> access on a bucket to add an object to it. Amazon S3 never stores partial objects: if
|
26 |
+
* you receive a successful response, you can be confident the entire object was stored.
|
27 |
+
*
|
28 |
+
* @param string $bucket (Required) The name of the bucket to use.
|
29 |
+
* @param string|integer $expires (Optional) The point in time when the upload form field should expire. The default value is <code>+1 hour</code>.
|
30 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
31 |
+
* <li><code>acl</code> - <code>string</code> - Optional - The access control setting to apply to the uploaded file. Accepts any of the following constants: [Allowed values: <code>AmazonS3::ACL_PRIVATE</code>, <code>AmazonS3::ACL_PUBLIC</code>, <code>AmazonS3::ACL_OPEN</code>, <code>AmazonS3::ACL_AUTH_READ</code>, <code>AmazonS3::ACL_OWNER_READ</code>, <code>AmazonS3::ACL_OWNER_FULL_CONTROL</code>].</li>
|
32 |
+
* <li><code>Cache-Control</code> - <code>string</code> - Optional - The Cache-Control HTTP header value to apply to the uploaded file. To use a <code>starts-with</code> comparison instead of an <code>equals</code> comparison, prefix the value with a <code>^</code> (carat) character.</li>
|
33 |
+
* <li><code>Content-Disposition</code> - <code>string</code> - Optional - The Content-Disposition HTTP header value to apply to the uploaded file. To use a <code>starts-with</code> comparison instead of an <code>equals</code> comparison, prefix the value with a <code>^</code> (carat) character.</li>
|
34 |
+
* <li><code>Content-Encoding</code> - <code>string</code> - Optional - The Content-Encoding HTTP header value to apply to the uploaded file. To use a <code>starts-with</code> comparison instead of an <code>equals</code> comparison, prefix the value with a <code>^</code> (carat) character.</li>
|
35 |
+
* <li><code>Content-Type</code> - <code>string</code> - Optional - The Content-Type HTTP header value to apply to the uploaded file. The default value is <code>application/octet-stream</code>. To use a <code>starts-with</code> comparison instead of an <code>equals</code> comparison, prefix the value with a <code>^</code> (carat) character.</li>
|
36 |
+
* <li><code>Expires</code> - <code>string</code> - Optional - The Expires HTTP header value to apply to the uploaded file. To use a <code>starts-with</code> comparison instead of an <code>equals</code> comparison, prefix the value with a <code>^</code> (carat) character.</li>
|
37 |
+
* <li><code>key</code> - <code>string</code> - Optional - The location where the file should be uploaded to. The default value is <code>${filename}</code>.</li>
|
38 |
+
* <li><code>success_action_redirect</code> - <code>string</code> - Optional - The URI for Amazon S3 to redirect to upon successful upload.</li>
|
39 |
+
* <li><code>success_action_status</code> - <code>integer</code> - Optional - The status code for Amazon S3 to return upon successful upload.</li>
|
40 |
+
* <li><code>x-amz-server-side-encryption</code> - <code>string</code> - Optional - The server-side encryption mechanism to use. [Allowed values: <code>AES256</code>].</li>
|
41 |
+
* <li><code>x-amz-storage-class</code> - <code>string</code> - Optional - The storage setting to apply to the object. [Allowed values: <code>AmazonS3::STORAGE_STANDARD</code>, <code>AmazonS3::STORAGE_REDUCED</code>]. The default value is <code>AmazonS3::STORAGE_STANDARD</code>.</li>
|
42 |
+
* <li><code>x-amz-website-redirect-location</code> - <code>string</code> - Optional - The URI to send an HTTP 301 redirect to when accessing this object. Value must be prefixed either <code>/</code>, <code>http://</code> or <code>https://</code>.</li>
|
43 |
+
* <li><code>x-amz-meta-*</code> - <code>mixed</code> - Optional - Any custom meta tag that should be set to the object.</li>
|
44 |
+
* </ul>
|
45 |
+
* @return array An array of fields that can be converted into markup.
|
46 |
+
* @link http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTObjectPOST.html POST Object
|
47 |
+
*/
|
48 |
+
public function generate_upload_parameters($bucket, $expires = '+1 hour', $opt = null)
|
49 |
+
{
|
50 |
+
if (!$opt) $opt = array();
|
51 |
+
|
52 |
+
// Policy document
|
53 |
+
$policy = array(
|
54 |
+
'conditions' => array(
|
55 |
+
array('bucket' => $bucket),
|
56 |
+
)
|
57 |
+
);
|
58 |
+
|
59 |
+
// Basic form
|
60 |
+
$form = array();
|
61 |
+
$form['form'] = array(
|
62 |
+
'action' => $bucket . '.s3.amazonaws.com',
|
63 |
+
'method' => 'POST',
|
64 |
+
'enctype' => 'multipart/form-data'
|
65 |
+
);
|
66 |
+
|
67 |
+
// Inputs
|
68 |
+
$form['inputs'] = array(
|
69 |
+
'AWSAccessKeyId' => $this->key
|
70 |
+
);
|
71 |
+
|
72 |
+
// Expires
|
73 |
+
if ($expires)
|
74 |
+
{
|
75 |
+
if (is_numeric($expires))
|
76 |
+
{
|
77 |
+
$expires = gmdate('j M Y, g:i a Z', (integer) $expires);
|
78 |
+
}
|
79 |
+
|
80 |
+
$expires = $this->util->convert_date_to_iso8601($expires);
|
81 |
+
$policy['expiration'] = (string) $expires;
|
82 |
+
}
|
83 |
+
|
84 |
+
// Default values
|
85 |
+
if (!isset($opt['key']))
|
86 |
+
{
|
87 |
+
$opt['key'] = '${filename}';
|
88 |
+
}
|
89 |
+
|
90 |
+
// Success Action Status
|
91 |
+
if (isset($opt['success_action_status']) && !empty($opt['success_action_status']))
|
92 |
+
{
|
93 |
+
$form['inputs']['success_action_status'] = (string) $opt['success_action_status'];
|
94 |
+
$policy['conditions'][] = array(
|
95 |
+
'success_action_status' => (string) $opt['success_action_status']
|
96 |
+
);
|
97 |
+
unset($opt['success_action_status']);
|
98 |
+
}
|
99 |
+
|
100 |
+
// Other parameters
|
101 |
+
foreach ($opt as $param_key => $param_value)
|
102 |
+
{
|
103 |
+
if ($param_value[0] === '^')
|
104 |
+
{
|
105 |
+
$form['inputs'][$param_key] = substr((string) $param_value, 1);
|
106 |
+
$param_value = preg_replace('/\$\{(\w*)\}/', '', (string) $param_value);
|
107 |
+
$policy['conditions'][] = array('starts-with', '$' . $param_key, (substr((string) $param_value, 1) ? substr((string) $param_value, 1) : ''));
|
108 |
+
}
|
109 |
+
else
|
110 |
+
{
|
111 |
+
$form['inputs'][$param_key] = (string) $param_value;
|
112 |
+
$policy['conditions'][] = array(
|
113 |
+
$param_key => (string) $param_value
|
114 |
+
);
|
115 |
+
}
|
116 |
+
}
|
117 |
+
|
118 |
+
// Add policy
|
119 |
+
$json_policy = json_encode($policy);
|
120 |
+
$json_policy_b64 = base64_encode($json_policy);
|
121 |
+
$form['inputs']['policy'] = $json_policy_b64;
|
122 |
+
$form['metadata']['json_policy'] = $json_policy;
|
123 |
+
|
124 |
+
// Add signature
|
125 |
+
$form['inputs']['signature'] = base64_encode(hash_hmac('sha1', $json_policy_b64, $this->secret_key, true));
|
126 |
+
|
127 |
+
return $form;
|
128 |
+
}
|
129 |
+
|
130 |
+
|
131 |
+
/*%******************************************************************************************%*/
|
132 |
+
// HELPERS
|
133 |
+
|
134 |
+
/**
|
135 |
+
* Returns the protocol of the web page that this script is currently running on. This method only works
|
136 |
+
* correctly when run from a publicly-accessible web page.
|
137 |
+
*/
|
138 |
+
public static function protocol()
|
139 |
+
{
|
140 |
+
return (isset($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) === 'on') ? 'https://' : 'http://';
|
141 |
+
}
|
142 |
+
|
143 |
+
/**
|
144 |
+
* Returns the domain (and port) of the web page that this script is currently running on. This method
|
145 |
+
* only works correctly when run from a publicly-accessible web page.
|
146 |
+
*/
|
147 |
+
public static function domain()
|
148 |
+
{
|
149 |
+
if (isset($_SERVER['SERVER_NAME']) && isset($_SERVER['SERVER_PORT']))
|
150 |
+
{
|
151 |
+
return $_SERVER['SERVER_NAME'] . ((integer) $_SERVER['SERVER_PORT'] === 80 ? '' : ':' . $_SERVER['SERVER_PORT']);
|
152 |
+
}
|
153 |
+
|
154 |
+
return null;
|
155 |
+
}
|
156 |
+
|
157 |
+
/**
|
158 |
+
* Returns the URI of the web page that this script is currently running on. This method only works
|
159 |
+
* correctly when run from a publicly-accessible web page.
|
160 |
+
*/
|
161 |
+
public static function current_uri()
|
162 |
+
{
|
163 |
+
if (isset($_SERVER['REQUEST_URI']))
|
164 |
+
{
|
165 |
+
$uri = self::protocol();
|
166 |
+
$uri .= self::domain();
|
167 |
+
$uri .= $_SERVER['REQUEST_URI'];
|
168 |
+
return $uri;
|
169 |
+
}
|
170 |
+
|
171 |
+
return null;
|
172 |
+
}
|
173 |
+
}
|
sdk/Aws_v1/extensions/s3streamwrapper.class.php
ADDED
@@ -0,0 +1,606 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* Copyright 2011-2012 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
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 |
+
* A copy of the License is located at
|
8 |
+
*
|
9 |
+
* http://aws.amazon.com/apache2.0
|
10 |
+
*
|
11 |
+
* or in the "license" file accompanying this file. This file is distributed
|
12 |
+
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
|
13 |
+
* express or implied. See the License for the specific language governing
|
14 |
+
* permissions and limitations under the License.
|
15 |
+
*/
|
16 |
+
|
17 |
+
|
18 |
+
/**
|
19 |
+
* Provides an interface for accessing Amazon S3 using PHP's native file management functions.
|
20 |
+
*
|
21 |
+
* Amazon S3 file patterns take the following form: <code>s3://bucket/object</code>.
|
22 |
+
*/
|
23 |
+
class S3StreamWrapper
|
24 |
+
{
|
25 |
+
/**
|
26 |
+
* @var array An array of AmazonS3 clients registered as stream wrappers.
|
27 |
+
*/
|
28 |
+
protected static $_clients = array();
|
29 |
+
|
30 |
+
/**
|
31 |
+
* Registers the S3StreamWrapper class as a stream wrapper.
|
32 |
+
*
|
33 |
+
* @param AmazonS3 $s3 (Optional) An instance of the AmazonS3 client.
|
34 |
+
* @param string $protocol (Optional) The name of the protocol to register.
|
35 |
+
* @return boolean Whether or not the registration succeeded.
|
36 |
+
*/
|
37 |
+
public static function register(AmazonS3 $s3 = null, $protocol = 's3')
|
38 |
+
{
|
39 |
+
S3StreamWrapper::$_clients[$protocol] = $s3 ? $s3 : new AmazonS3();
|
40 |
+
|
41 |
+
return stream_wrapper_register($protocol, 'S3StreamWrapper');
|
42 |
+
}
|
43 |
+
|
44 |
+
/**
|
45 |
+
* Makes the given token PCRE-compatible.
|
46 |
+
*
|
47 |
+
* @param string $token (Required) The token
|
48 |
+
* @return string The PCRE-compatible version of the token
|
49 |
+
*/
|
50 |
+
public static function regex_token($token)
|
51 |
+
{
|
52 |
+
$token = str_replace('/', '\/', $token);
|
53 |
+
$token = quotemeta($token);
|
54 |
+
return str_replace('\\\\', '\\', $token);
|
55 |
+
}
|
56 |
+
|
57 |
+
public $position = 0;
|
58 |
+
public $path = null;
|
59 |
+
public $file_list = null;
|
60 |
+
public $open_file = null;
|
61 |
+
public $seek_position = 0;
|
62 |
+
public $eof = false;
|
63 |
+
public $buffer = null;
|
64 |
+
public $object_size = 0;
|
65 |
+
|
66 |
+
/**
|
67 |
+
* Fetches the client for the protocol being used.
|
68 |
+
*
|
69 |
+
* @param string $protocol (Optional) The protocol associated with this stream wrapper.
|
70 |
+
* @return AmazonS3 The S3 client associated with this stream wrapper.
|
71 |
+
*/
|
72 |
+
public function client($protocol = null)
|
73 |
+
{
|
74 |
+
if ($protocol == null)
|
75 |
+
{
|
76 |
+
if ($parsed = parse_url($this->path))
|
77 |
+
{
|
78 |
+
$protocol = $parsed['scheme'];
|
79 |
+
}
|
80 |
+
else
|
81 |
+
{
|
82 |
+
trigger_error(__CLASS__ . ' could not determine the protocol of the stream wrapper in use.');
|
83 |
+
}
|
84 |
+
}
|
85 |
+
|
86 |
+
return self::$_clients[$protocol];
|
87 |
+
}
|
88 |
+
|
89 |
+
/**
|
90 |
+
* Parses an S3 URL into the parts needed by the stream wrapper.
|
91 |
+
*
|
92 |
+
* @param string $path The path to parse.
|
93 |
+
* @return array An array of 3 items: protocol, bucket, and object name ready for <code>list()</code>.
|
94 |
+
*/
|
95 |
+
public function parse_path($path)
|
96 |
+
{
|
97 |
+
$url = parse_url($path);
|
98 |
+
|
99 |
+
return array(
|
100 |
+
$url['scheme'], // Protocol
|
101 |
+
$url['host'], // Bucket
|
102 |
+
(isset($url['path']) ? substr($url['path'], 1) : ''), // Object
|
103 |
+
);
|
104 |
+
}
|
105 |
+
|
106 |
+
/**
|
107 |
+
* Close directory handle. This method is called in response to <php:closedir()>.
|
108 |
+
*
|
109 |
+
* Since Amazon S3 doesn't have real directories, always return <code>true</code>.
|
110 |
+
*
|
111 |
+
* @return boolean
|
112 |
+
*/
|
113 |
+
public function dir_closedir()
|
114 |
+
{
|
115 |
+
$this->position = 0;
|
116 |
+
$this->path = null;
|
117 |
+
$this->file_list = null;
|
118 |
+
$this->open_file = null;
|
119 |
+
$this->seek_position = 0;
|
120 |
+
$this->eof = false;
|
121 |
+
$this->buffer = null;
|
122 |
+
$this->object_size = 0;
|
123 |
+
|
124 |
+
return true;
|
125 |
+
}
|
126 |
+
|
127 |
+
/**
|
128 |
+
* Open directory handle. This method is called in response to <php:opendir()>.
|
129 |
+
*
|
130 |
+
* @param string $path (Required) Specifies the URL that was passed to <php:opendir()>.
|
131 |
+
* @param integer $options (Required) Not used. Passed in by <php:opendir()>.
|
132 |
+
* @return boolean Returns <code>true</code> on success or <code>false</code> on failure.
|
133 |
+
*/
|
134 |
+
public function dir_opendir($path, $options)
|
135 |
+
{
|
136 |
+
$this->path = $path;
|
137 |
+
list($protocol, $bucket, $object_name) = $this->parse_path($path);
|
138 |
+
|
139 |
+
$pattern = '/^' . self::regex_token($object_name) . '(.*)[^\/$]/';
|
140 |
+
|
141 |
+
$this->file_list = $this->client($protocol)->get_object_list($bucket, array(
|
142 |
+
'pcre' => $pattern
|
143 |
+
));
|
144 |
+
|
145 |
+
return (count($this->file_list)) ? true : false;
|
146 |
+
}
|
147 |
+
|
148 |
+
/**
|
149 |
+
* This method is called in response to <php:readdir()>.
|
150 |
+
*
|
151 |
+
* @return string Should return a string representing the next filename, or <code>false</code> if there is no next file.
|
152 |
+
*/
|
153 |
+
public function dir_readdir()
|
154 |
+
{
|
155 |
+
if (isset($this->file_list[$this->position]))
|
156 |
+
{
|
157 |
+
$out = $this->file_list[$this->position];
|
158 |
+
$this->position++;
|
159 |
+
}
|
160 |
+
else
|
161 |
+
{
|
162 |
+
$out = false;
|
163 |
+
}
|
164 |
+
|
165 |
+
return $out;
|
166 |
+
}
|
167 |
+
|
168 |
+
/**
|
169 |
+
* This method is called in response to <php:rewinddir()>.
|
170 |
+
*
|
171 |
+
* Should reset the output generated by <php:streamWrapper::dir_readdir()>. i.e.: The next call to
|
172 |
+
* <php:streamWrapper::dir_readdir()> should return the first entry in the location returned by
|
173 |
+
* <php:streamWrapper::dir_opendir()>.
|
174 |
+
*
|
175 |
+
* @return boolean Returns <code>true</code> on success or <code>false</code> on failure.
|
176 |
+
*/
|
177 |
+
public function dir_rewinddir()
|
178 |
+
{
|
179 |
+
$this->position = 0;
|
180 |
+
|
181 |
+
return true;
|
182 |
+
}
|
183 |
+
|
184 |
+
/**
|
185 |
+
* Create a new bucket. This method is called in response to <php:mkdir()>.
|
186 |
+
*
|
187 |
+
* @param string $path (Required) The bucket name to create.
|
188 |
+
* @param integer $mode (Optional) Permissions. 700-range permissions map to ACL_PUBLIC. 600-range permissions map to ACL_AUTH_READ. All other permissions map to ACL_PRIVATE. Expects octal form.
|
189 |
+
* @param integer $options (Optional) Ignored.
|
190 |
+
* @return boolean Whether the bucket was created successfully or not.
|
191 |
+
*/
|
192 |
+
public function mkdir($path, $mode, $options)
|
193 |
+
{
|
194 |
+
// Get the value that was *actually* passed in as mode, and default to 0
|
195 |
+
$trace_slice = array_slice(debug_backtrace(), -1);
|
196 |
+
$mode = isset($trace_slice[0]['args'][1]) ? decoct($trace_slice[0]['args'][1]) : 0;
|
197 |
+
|
198 |
+
$this->path = $path;
|
199 |
+
list($protocol, $bucket, $object_name) = $this->parse_path($path);
|
200 |
+
|
201 |
+
if (in_array($mode, range(700, 799)))
|
202 |
+
{
|
203 |
+
$acl = AmazonS3::ACL_PUBLIC;
|
204 |
+
}
|
205 |
+
elseif (in_array($mode, range(600, 699)))
|
206 |
+
{
|
207 |
+
$acl = AmazonS3::ACL_AUTH_READ;
|
208 |
+
}
|
209 |
+
else
|
210 |
+
{
|
211 |
+
$acl = AmazonS3::ACL_PRIVATE;
|
212 |
+
}
|
213 |
+
|
214 |
+
$client = $this->client($protocol);
|
215 |
+
$region = $client->hostname;
|
216 |
+
$response = $client->create_bucket($bucket, $region, $acl);
|
217 |
+
|
218 |
+
return $response->isOK();
|
219 |
+
}
|
220 |
+
|
221 |
+
/**
|
222 |
+
* Renames a file or directory. This method is called in response to <php:rename()>.
|
223 |
+
*
|
224 |
+
* @param string $path_from (Required) The URL to the current file.
|
225 |
+
* @param string $path_to (Required) The URL which the <code>$path_from</code> should be renamed to.
|
226 |
+
* @return boolean Returns <code>true</code> on success or <code>false</code> on failure.
|
227 |
+
*/
|
228 |
+
public function rename($path_from, $path_to)
|
229 |
+
{
|
230 |
+
list($protocol, $from_bucket_name, $from_object_name) = $this->parse_path($path_from);
|
231 |
+
list($protocol, $to_bucket_name, $to_object_name) = $this->parse_path($path_to);
|
232 |
+
|
233 |
+
$copy_response = $this->client($protocol)->copy_object(
|
234 |
+
array('bucket' => $from_bucket_name, 'filename' => $from_object_name),
|
235 |
+
array('bucket' => $to_bucket_name, 'filename' => $to_object_name )
|
236 |
+
);
|
237 |
+
|
238 |
+
if ($copy_response->isOK())
|
239 |
+
{
|
240 |
+
$delete_response = $this->client($protocol)->delete_object($from_bucket_name, $from_object_name);
|
241 |
+
|
242 |
+
if ($delete_response->isOK())
|
243 |
+
{
|
244 |
+
return true;
|
245 |
+
}
|
246 |
+
}
|
247 |
+
|
248 |
+
return false;
|
249 |
+
}
|
250 |
+
|
251 |
+
/**
|
252 |
+
* This method is called in response to <php:rmdir()>.
|
253 |
+
*
|
254 |
+
* @param string $path (Required) The bucket name to create.
|
255 |
+
* @param boolean $context (Optional) Ignored.
|
256 |
+
* @return boolean Whether the bucket was deleted successfully or not.
|
257 |
+
*/
|
258 |
+
public function rmdir($path, $context)
|
259 |
+
{
|
260 |
+
$this->path = $path;
|
261 |
+
list($protocol, $bucket, $object_name) = $this->parse_path($path);
|
262 |
+
|
263 |
+
$response = $this->client($protocol)->delete_bucket($bucket);
|
264 |
+
|
265 |
+
return $response->isOK();
|
266 |
+
}
|
267 |
+
|
268 |
+
/**
|
269 |
+
* NOT IMPLEMENTED!
|
270 |
+
*
|
271 |
+
* @param integer $cast_as
|
272 |
+
* @return resource
|
273 |
+
*/
|
274 |
+
// public function stream_cast($cast_as) {}
|
275 |
+
|
276 |
+
/**
|
277 |
+
* Close a resource. This method is called in response to <php:fclose()>.
|
278 |
+
*
|
279 |
+
* All resources that were locked, or allocated, by the wrapper should be released.
|
280 |
+
*
|
281 |
+
* @return void
|
282 |
+
*/
|
283 |
+
public function stream_close()
|
284 |
+
{
|
285 |
+
$this->position = 0;
|
286 |
+
$this->path = null;
|
287 |
+
$this->file_list = null;
|
288 |
+
$this->open_file = null;
|
289 |
+
$this->seek_position = 0;
|
290 |
+
$this->eof = false;
|
291 |
+
$this->buffer = null;
|
292 |
+
$this->object_size = 0;
|
293 |
+
}
|
294 |
+
|
295 |
+
/**
|
296 |
+
* Tests for end-of-file on a file pointer. This method is called in response to <php:feof()>.
|
297 |
+
*
|
298 |
+
* @return boolean
|
299 |
+
*/
|
300 |
+
public function stream_eof()
|
301 |
+
{
|
302 |
+
return $this->eof;
|
303 |
+
}
|
304 |
+
|
305 |
+
/**
|
306 |
+
* Flushes the output. This method is called in response to <php:fflush()>. If you have cached data in
|
307 |
+
* your stream but not yet stored it into the underlying storage, you should do so now.
|
308 |
+
*
|
309 |
+
* Since this implementation doesn't buffer streams, simply return <code>true</code>.
|
310 |
+
*
|
311 |
+
* @return boolean Whether or not flushing succeeded
|
312 |
+
*/
|
313 |
+
public function stream_flush()
|
314 |
+
{
|
315 |
+
if ($this->buffer === null)
|
316 |
+
{
|
317 |
+
return false;
|
318 |
+
}
|
319 |
+
|
320 |
+
list($protocol, $bucket, $object_name) = $this->parse_path($this->path);
|
321 |
+
|
322 |
+
$response = $this->client($protocol)->create_object($bucket, $object_name, array(
|
323 |
+
'body' => $this->buffer,
|
324 |
+
));
|
325 |
+
|
326 |
+
$this->seek_position = 0;
|
327 |
+
$this->buffer = null;
|
328 |
+
$this->eof = true;
|
329 |
+
|
330 |
+
return $response->isOK();
|
331 |
+
}
|
332 |
+
|
333 |
+
/**
|
334 |
+
* This method is called in response to <php:flock()>, when <php:file_put_contents()> (when flags contains
|
335 |
+
* <code>LOCK_EX</code>), <php:stream_set_blocking()> and when closing the stream (<code>LOCK_UN</code>).
|
336 |
+
*
|
337 |
+
* Not implemented in S3, so it's not implemented here.
|
338 |
+
*
|
339 |
+
* @param mode $operation
|
340 |
+
* @return boolean
|
341 |
+
*/
|
342 |
+
// public function stream_lock($operation) {}
|
343 |
+
|
344 |
+
/**
|
345 |
+
* Opens file or URL. This method is called immediately after the wrapper is initialized
|
346 |
+
* (e.g., by <php:fopen()> and <php:file_get_contents()>).
|
347 |
+
*
|
348 |
+
* @param string $path (Required) Specifies the URL that was passed to the original function.
|
349 |
+
* @param string $mode (Required) Ignored.
|
350 |
+
* @param integer $options (Required) Ignored.
|
351 |
+
* @param string &$opened_path (Required) Returns the same value as was passed into <code>$path</code>.
|
352 |
+
* @return boolean Returns <code>true</code> on success or <code>false</code> on failure.
|
353 |
+
*/
|
354 |
+
public function stream_open($path, $mode, $options, &$opened_path)
|
355 |
+
{
|
356 |
+
$opened_path = $path;
|
357 |
+
$this->open_file = $path;
|
358 |
+
$this->path = $path;
|
359 |
+
$this->seek_position = 0;
|
360 |
+
$this->object_size = 0;
|
361 |
+
|
362 |
+
return true;
|
363 |
+
}
|
364 |
+
|
365 |
+
/**
|
366 |
+
* Read from stream. This method is called in response to <php:fread()> and <php:fgets()>.
|
367 |
+
*
|
368 |
+
*
|
369 |
+
*
|
370 |
+
* It is important to avoid reading files that are near to or larger than the amount of memory
|
371 |
+
* allocated to PHP, otherwise "out of memory" errors will occur.
|
372 |
+
*
|
373 |
+
* @param integer $count (Required) Always equal to 8192. PHP is fun, isn't it?
|
374 |
+
* @return string The contents of the Amazon S3 object.
|
375 |
+
*/
|
376 |
+
public function stream_read($count)
|
377 |
+
{
|
378 |
+
if ($this->eof)
|
379 |
+
{
|
380 |
+
return false;
|
381 |
+
}
|
382 |
+
|
383 |
+
list($protocol, $bucket, $object_name) = $this->parse_path($this->path);
|
384 |
+
|
385 |
+
if ($this->seek_position > 0 && $this->object_size)
|
386 |
+
{
|
387 |
+
if ($count + $this->seek_position > $this->object_size)
|
388 |
+
{
|
389 |
+
$count = $this->object_size - $this->seek_position;
|
390 |
+
}
|
391 |
+
|
392 |
+
$start = $this->seek_position;
|
393 |
+
$end = $this->seek_position + $count;
|
394 |
+
|
395 |
+
$response = $this->client($protocol)->get_object($bucket, $object_name, array(
|
396 |
+
'range' => $start . '-' . $end
|
397 |
+
));
|
398 |
+
}
|
399 |
+
else
|
400 |
+
{
|
401 |
+
$response = $this->client($protocol)->get_object($bucket, $object_name);
|
402 |
+
$this->object_size = isset($response->header['content-length']) ? $response->header['content-length'] : 0;
|
403 |
+
}
|
404 |
+
|
405 |
+
if (!$response->isOK())
|
406 |
+
{
|
407 |
+
return false;
|
408 |
+
}
|
409 |
+
|
410 |
+
$data = substr($response->body, 0, min($count, $this->object_size));
|
411 |
+
$this->seek_position += strlen($data);
|
412 |
+
|
413 |
+
|
414 |
+
if ($this->seek_position >= $this->object_size)
|
415 |
+
{
|
416 |
+
$this->eof = true;
|
417 |
+
$this->seek_position = 0;
|
418 |
+
$this->object_size = 0;
|
419 |
+
}
|
420 |
+
|
421 |
+
return $data;
|
422 |
+
}
|
423 |
+
|
424 |
+
/**
|
425 |
+
* Seeks to specific location in a stream. This method is called in response to <php:fseek()>. The read/write
|
426 |
+
* position of the stream should be updated according to the <code>$offset</code> and <code>$whence</code>
|
427 |
+
* parameters.
|
428 |
+
*
|
429 |
+
* @param integer $offset (Required) The number of bytes to offset from the start of the file.
|
430 |
+
* @param integer $whence (Optional) Ignored. Always uses <code>SEEK_SET</code>.
|
431 |
+
* @return boolean Whether or not the seek was successful.
|
432 |
+
*/
|
433 |
+
public function stream_seek($offset, $whence)
|
434 |
+
{
|
435 |
+
$this->seek_position = $offset;
|
436 |
+
|
437 |
+
return true;
|
438 |
+
}
|
439 |
+
|
440 |
+
/**
|
441 |
+
* @param integer $option
|
442 |
+
* @param integer $arg1
|
443 |
+
* @param integer $arg2
|
444 |
+
* @return boolean
|
445 |
+
*/
|
446 |
+
// public function stream_set_option($option, $arg1, $arg2) {}
|
447 |
+
|
448 |
+
/**
|
449 |
+
* Retrieve information about a file resource.
|
450 |
+
*
|
451 |
+
* @return array Returns the same data as a call to <php:stat()>.
|
452 |
+
*/
|
453 |
+
public function stream_stat()
|
454 |
+
{
|
455 |
+
return $this->url_stat($this->path, null);
|
456 |
+
}
|
457 |
+
|
458 |
+
/**
|
459 |
+
* Retrieve the current position of a stream. This method is called in response to <php:ftell()>.
|
460 |
+
*
|
461 |
+
* @return integer Returns the current position of the stream.
|
462 |
+
*/
|
463 |
+
public function stream_tell()
|
464 |
+
{
|
465 |
+
return $this->seek_position;
|
466 |
+
}
|
467 |
+
|
468 |
+
/**
|
469 |
+
* Write to stream. This method is called in response to <php:fwrite()>.
|
470 |
+
*
|
471 |
+
* It is important to avoid reading files that are larger than the amount of memory allocated to PHP,
|
472 |
+
* otherwise "out of memory" errors will occur.
|
473 |
+
*
|
474 |
+
* @param string $data (Required) The data to write to the stream.
|
475 |
+
* @return integer The number of bytes that were written to the stream.
|
476 |
+
*/
|
477 |
+
public function stream_write($data)
|
478 |
+
{
|
479 |
+
$size = strlen($data);
|
480 |
+
|
481 |
+
$this->seek_position = $size;
|
482 |
+
$this->buffer .= $data;
|
483 |
+
|
484 |
+
return $this->seek_position;
|
485 |
+
}
|
486 |
+
|
487 |
+
/**
|
488 |
+
* Delete a file. This method is called in response to <php:unlink()>.
|
489 |
+
*
|
490 |
+
* @param string $path (Required) The file URL which should be deleted.
|
491 |
+
* @return boolean Returns <code>true</code> on success or <code>false</code> on failure.
|
492 |
+
*/
|
493 |
+
public function unlink($path)
|
494 |
+
{
|
495 |
+
$this->path = $path;
|
496 |
+
list($protocol, $bucket, $object_name) = $this->parse_path($path);
|
497 |
+
|
498 |
+
$response = $this->client($protocol)->delete_object($bucket, $object_name);
|
499 |
+
|
500 |
+
return $response->isOK();
|
501 |
+
}
|
502 |
+
|
503 |
+
/**
|
504 |
+
* This method is called in response to all <php:stat()> related functions.
|
505 |
+
*
|
506 |
+
* @param string $path (Required) The file path or URL to stat. Note that in the case of a URL, it must be a <code>://</code> delimited URL. Other URL forms are not supported.
|
507 |
+
* @param integer $flags (Required) Holds additional flags set by the streams API. This implementation ignores all defined flags.
|
508 |
+
* @return array Should return as many elements as <php:stat()> does. Unknown or unavailable values should be set to a rational value (usually <code>0</code>).
|
509 |
+
*/
|
510 |
+
public function url_stat($path, $flags)
|
511 |
+
{
|
512 |
+
// Defaults
|
513 |
+
$out = array();
|
514 |
+
$out[0] = $out['dev'] = 0;
|
515 |
+
$out[1] = $out['ino'] = 0;
|
516 |
+
$out[2] = $out['mode'] = 0;
|
517 |
+
$out[3] = $out['nlink'] = 0;
|
518 |
+
$out[4] = $out['uid'] = 0;
|
519 |
+
$out[5] = $out['gid'] = 0;
|
520 |
+
$out[6] = $out['rdev'] = 0;
|
521 |
+
$out[7] = $out['size'] = 0;
|
522 |
+
$out[8] = $out['atime'] = 0;
|
523 |
+
$out[9] = $out['mtime'] = 0;
|
524 |
+
$out[10] = $out['ctime'] = 0;
|
525 |
+
$out[11] = $out['blksize'] = 0;
|
526 |
+
$out[12] = $out['blocks'] = 0;
|
527 |
+
|
528 |
+
$this->path = $path;
|
529 |
+
list($protocol, $bucket, $object_name) = $this->parse_path($this->path);
|
530 |
+
|
531 |
+
$file = null;
|
532 |
+
$mode = 0;
|
533 |
+
|
534 |
+
if ($object_name)
|
535 |
+
{
|
536 |
+
$response = $this->client($protocol)->list_objects($bucket, array(
|
537 |
+
'prefix' => $object_name
|
538 |
+
));
|
539 |
+
|
540 |
+
if (!$response->isOK())
|
541 |
+
{
|
542 |
+
return $out;
|
543 |
+
}
|
544 |
+
|
545 |
+
// Ummm... yeah...
|
546 |
+
if (is_object($response->body))
|
547 |
+
{
|
548 |
+
$file = $response->body->Contents[0];
|
549 |
+
}
|
550 |
+
else
|
551 |
+
{
|
552 |
+
$body = simplexml_load_string($response->body);
|
553 |
+
$file = $body->Contents[0];
|
554 |
+
}
|
555 |
+
}
|
556 |
+
else
|
557 |
+
{
|
558 |
+
$response = $this->client($protocol)->list_objects($bucket);
|
559 |
+
|
560 |
+
if (!$response->isOK())
|
561 |
+
{
|
562 |
+
return $out;
|
563 |
+
}
|
564 |
+
}
|
565 |
+
|
566 |
+
/*
|
567 |
+
Type & Permission bitwise values (only those that pertain to S3).
|
568 |
+
Simulate the concept of a "directory". Nothing has an executable bit because there's no executing on S3.
|
569 |
+
Reference: http://docstore.mik.ua/orelly/webprog/pcook/ch19_13.htm
|
570 |
+
|
571 |
+
0100000 => type: regular file
|
572 |
+
0040000 => type: directory
|
573 |
+
0000400 => owner: read permission
|
574 |
+
0000200 => owner: write permission
|
575 |
+
0000040 => group: read permission
|
576 |
+
0000020 => group: write permission
|
577 |
+
0000004 => others: read permission
|
578 |
+
0000002 => others: write permission
|
579 |
+
*/
|
580 |
+
|
581 |
+
// File or directory?
|
582 |
+
// @todo: Add more detailed support for permissions. Currently only takes OWNER into account.
|
583 |
+
if (!$object_name) // Root of the bucket
|
584 |
+
{
|
585 |
+
$mode = octdec('0040777');
|
586 |
+
}
|
587 |
+
elseif ($file)
|
588 |
+
{
|
589 |
+
$mode = (str_replace('//', '/', $object_name . '/') === (string) $file->Key) ? octdec('0040777') : octdec('0100777'); // Directory, Owner R/W : Regular File, Owner R/W
|
590 |
+
}
|
591 |
+
else
|
592 |
+
{
|
593 |
+
$mode = octdec('0100777');
|
594 |
+
}
|
595 |
+
|
596 |
+
// Update stat output
|
597 |
+
$out[2] = $out['mode'] = $mode;
|
598 |
+
$out[4] = $out['uid'] = (isset($file) ? (string) $file->Owner->ID : 0);
|
599 |
+
$out[7] = $out['size'] = (isset($file) ? (string) $file->Size : 0);
|
600 |
+
$out[8] = $out['atime'] = (isset($file) ? date('U', strtotime((string) $file->LastModified)) : 0);
|
601 |
+
$out[9] = $out['mtime'] = (isset($file) ? date('U', strtotime((string) $file->LastModified)) : 0);
|
602 |
+
$out[10] = $out['ctime'] = (isset($file) ? date('U', strtotime((string) $file->LastModified)) : 0);
|
603 |
+
|
604 |
+
return $out;
|
605 |
+
}
|
606 |
+
}
|
sdk/Aws_v1/lib/cachecore/LICENSE
ADDED
@@ -0,0 +1,25 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
Copyright (c) 2006-2010 Ryan Parman, Foleeo Inc., and contributors. All rights reserved.
|
2 |
+
|
3 |
+
Redistribution and use in source and binary forms, with or without modification, are
|
4 |
+
permitted provided that the following conditions are met:
|
5 |
+
|
6 |
+
* Redistributions of source code must retain the above copyright notice, this list of
|
7 |
+
conditions and the following disclaimer.
|
8 |
+
|
9 |
+
* Redistributions in binary form must reproduce the above copyright notice, this list
|
10 |
+
of conditions and the following disclaimer in the documentation and/or other materials
|
11 |
+
provided with the distribution.
|
12 |
+
|
13 |
+
* Neither the name of Ryan Parman, Foleeo Inc. nor the names of its contributors may be used to
|
14 |
+
endorse or promote products derived from this software without specific prior written
|
15 |
+
permission.
|
16 |
+
|
17 |
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
|
18 |
+
OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
|
19 |
+
AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
|
20 |
+
AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
21 |
+
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
22 |
+
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
23 |
+
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
24 |
+
OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
25 |
+
POSSIBILITY OF SUCH DAMAGE.
|
sdk/Aws_v1/lib/cachecore/README
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
A simple caching system for PHP5 that provides a single interface for a variety of storage types.
|
sdk/Aws_v1/lib/cachecore/cacheapc.class.php
ADDED
@@ -0,0 +1,126 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Container for all APC-based cache methods. Inherits additional methods from <CacheCore>. Adheres
|
4 |
+
* to the ICacheCore interface.
|
5 |
+
*
|
6 |
+
* @version 2012.04.17
|
7 |
+
* @copyright 2006-2012 Ryan Parman
|
8 |
+
* @copyright 2006-2010 Foleeo, Inc.
|
9 |
+
* @copyright 2012 Amazon.com, Inc. or its affiliates.
|
10 |
+
* @copyright 2008-2010 Contributors
|
11 |
+
* @license http://opensource.org/licenses/bsd-license.php Simplified BSD License
|
12 |
+
* @link http://github.com/skyzyx/cachecore CacheCore
|
13 |
+
* @link http://getcloudfusion.com CloudFusion
|
14 |
+
* @link http://php.net/apc APC
|
15 |
+
*/
|
16 |
+
class CacheAPC extends CacheCore implements ICacheCore
|
17 |
+
{
|
18 |
+
|
19 |
+
/*%******************************************************************************************%*/
|
20 |
+
// CONSTRUCTOR
|
21 |
+
|
22 |
+
/**
|
23 |
+
* Constructs a new instance of this class.
|
24 |
+
*
|
25 |
+
* @param string $name (Required) A name to uniquely identify the cache object.
|
26 |
+
* @param string $location (Optional) The location to store the cache object in. This may vary by cache method. The default value is NULL.
|
27 |
+
* @param integer $expires (Optional) The number of seconds until a cache object is considered stale. The default value is 0.
|
28 |
+
* @param boolean $gzip (Optional) Whether data should be gzipped before being stored. The default value is true.
|
29 |
+
* @return object Reference to the cache object.
|
30 |
+
*/
|
31 |
+
public function __construct($name, $location = null, $expires = 0, $gzip = true)
|
32 |
+
{
|
33 |
+
parent::__construct($name, null, $expires, $gzip);
|
34 |
+
$this->id = $this->name;
|
35 |
+
}
|
36 |
+
|
37 |
+
/**
|
38 |
+
* Creates a new cache.
|
39 |
+
*
|
40 |
+
* @param mixed $data (Required) The data to cache.
|
41 |
+
* @return boolean Whether the operation was successful.
|
42 |
+
*/
|
43 |
+
public function create($data)
|
44 |
+
{
|
45 |
+
$data = serialize($data);
|
46 |
+
$data = $this->gzip ? gzcompress($data) : $data;
|
47 |
+
|
48 |
+
return apc_add($this->id, $data, $this->expires);
|
49 |
+
}
|
50 |
+
|
51 |
+
/**
|
52 |
+
* Reads a cache.
|
53 |
+
*
|
54 |
+
* @return mixed Either the content of the cache object, or boolean `false`.
|
55 |
+
*/
|
56 |
+
public function read()
|
57 |
+
{
|
58 |
+
if ($data = apc_fetch($this->id))
|
59 |
+
{
|
60 |
+
$data = $this->gzip ? gzuncompress($data) : $data;
|
61 |
+
return unserialize($data);
|
62 |
+
}
|
63 |
+
|
64 |
+
return false;
|
65 |
+
}
|
66 |
+
|
67 |
+
/**
|
68 |
+
* Updates an existing cache.
|
69 |
+
*
|
70 |
+
* @param mixed $data (Required) The data to cache.
|
71 |
+
* @return boolean Whether the operation was successful.
|
72 |
+
*/
|
73 |
+
public function update($data)
|
74 |
+
{
|
75 |
+
$data = serialize($data);
|
76 |
+
$data = $this->gzip ? gzcompress($data) : $data;
|
77 |
+
|
78 |
+
return apc_store($this->id, $data, $this->expires);
|
79 |
+
}
|
80 |
+
|
81 |
+
/**
|
82 |
+
* Deletes a cache.
|
83 |
+
*
|
84 |
+
* @return boolean Whether the operation was successful.
|
85 |
+
*/
|
86 |
+
public function delete()
|
87 |
+
{
|
88 |
+
return apc_delete($this->id);
|
89 |
+
}
|
90 |
+
|
91 |
+
/**
|
92 |
+
* Implemented here, but always returns `false`. APC manages its own expirations.
|
93 |
+
*
|
94 |
+
* @return boolean Whether the cache is expired or not.
|
95 |
+
*/
|
96 |
+
public function is_expired()
|
97 |
+
{
|
98 |
+
return false;
|
99 |
+
}
|
100 |
+
|
101 |
+
/**
|
102 |
+
* Implemented here, but always returns `false`. APC manages its own expirations.
|
103 |
+
*
|
104 |
+
* @return mixed Either the Unix time stamp of the cache creation, or boolean `false`.
|
105 |
+
*/
|
106 |
+
public function timestamp()
|
107 |
+
{
|
108 |
+
return false;
|
109 |
+
}
|
110 |
+
|
111 |
+
/**
|
112 |
+
* Implemented here, but always returns `false`. APC manages its own expirations.
|
113 |
+
*
|
114 |
+
* @return boolean Whether the operation was successful.
|
115 |
+
*/
|
116 |
+
public function reset()
|
117 |
+
{
|
118 |
+
return false;
|
119 |
+
}
|
120 |
+
}
|
121 |
+
|
122 |
+
|
123 |
+
/*%******************************************************************************************%*/
|
124 |
+
// EXCEPTIONS
|
125 |
+
|
126 |
+
class CacheAPC_Exception extends CacheCore_Exception {}
|
sdk/Aws_v1/lib/cachecore/cachecore.class.php
ADDED
@@ -0,0 +1,160 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Container for all shared caching methods. This is not intended to be instantiated directly, but is
|
4 |
+
* extended by the cache-specific classes.
|
5 |
+
*
|
6 |
+
* @version 2012.04.17
|
7 |
+
* @copyright 2006-2012 Ryan Parman
|
8 |
+
* @copyright 2006-2010 Foleeo, Inc.
|
9 |
+
* @copyright 2012 Amazon.com, Inc. or its affiliates.
|
10 |
+
* @copyright 2008-2010 Contributors
|
11 |
+
* @license http://opensource.org/licenses/bsd-license.php Simplified BSD License
|
12 |
+
* @link http://github.com/skyzyx/cachecore CacheCore
|
13 |
+
* @link http://getcloudfusion.com CloudFusion
|
14 |
+
*/
|
15 |
+
class CacheCore
|
16 |
+
{
|
17 |
+
/**
|
18 |
+
* A name to uniquely identify the cache object by.
|
19 |
+
*/
|
20 |
+
var $name;
|
21 |
+
|
22 |
+
/**
|
23 |
+
* Where to store the cache.
|
24 |
+
*/
|
25 |
+
var $location;
|
26 |
+
|
27 |
+
/**
|
28 |
+
* The number of seconds before a cache object is considered stale.
|
29 |
+
*/
|
30 |
+
var $expires;
|
31 |
+
|
32 |
+
/**
|
33 |
+
* Used internally to uniquely identify the location + name of the cache object.
|
34 |
+
*/
|
35 |
+
var $id;
|
36 |
+
|
37 |
+
/**
|
38 |
+
* Stores the time when the cache object was created.
|
39 |
+
*/
|
40 |
+
var $timestamp;
|
41 |
+
|
42 |
+
/**
|
43 |
+
* Stores whether or not the content should be gzipped when stored
|
44 |
+
*/
|
45 |
+
var $gzip;
|
46 |
+
|
47 |
+
|
48 |
+
/*%******************************************************************************************%*/
|
49 |
+
// CONSTRUCTOR
|
50 |
+
|
51 |
+
/**
|
52 |
+
* Constructs a new instance of this class.
|
53 |
+
*
|
54 |
+
* @param string $name (Required) A name to uniquely identify the cache object.
|
55 |
+
* @param string $location (Optional) The location to store the cache object in. This may vary by cache method. The default value is NULL.
|
56 |
+
* @param integer $expires (Optional) The number of seconds until a cache object is considered stale. The default value is 0.
|
57 |
+
* @param boolean $gzip (Optional) Whether data should be gzipped before being stored. The default value is true.
|
58 |
+
* @return object Reference to the cache object.
|
59 |
+
*/
|
60 |
+
public function __construct($name, $location = null, $expires = 0, $gzip = true)
|
61 |
+
{
|
62 |
+
if (!extension_loaded('zlib'))
|
63 |
+
{
|
64 |
+
$gzip = false;
|
65 |
+
}
|
66 |
+
|
67 |
+
$this->name = $name;
|
68 |
+
$this->location = $location;
|
69 |
+
$this->expires = $expires;
|
70 |
+
$this->gzip = $gzip;
|
71 |
+
|
72 |
+
return $this;
|
73 |
+
}
|
74 |
+
|
75 |
+
/**
|
76 |
+
* Allows for chaining from the constructor. Requires PHP 5.3 or newer.
|
77 |
+
*
|
78 |
+
* @param string $name (Required) A name to uniquely identify the cache object.
|
79 |
+
* @param string $location (Optional) The location to store the cache object in. This may vary by cache method. The default value is NULL.
|
80 |
+
* @param integer $expires (Optional) The number of seconds until a cache object is considered stale. The default value is 0.
|
81 |
+
* @param boolean $gzip (Optional) Whether data should be gzipped before being stored. The default value is true.
|
82 |
+
* @return object Reference to the cache object.
|
83 |
+
*/
|
84 |
+
public static function init($name, $location = null, $expires = 0, $gzip = true)
|
85 |
+
{
|
86 |
+
if (version_compare(PHP_VERSION, '5.3.0', '<'))
|
87 |
+
{
|
88 |
+
throw new Exception('PHP 5.3 or newer is required to use CacheCore::init().');
|
89 |
+
}
|
90 |
+
|
91 |
+
$self = get_called_class();
|
92 |
+
return new $self($name, $location, $expires, $gzip);
|
93 |
+
}
|
94 |
+
|
95 |
+
/**
|
96 |
+
* Set the number of seconds until a cache expires.
|
97 |
+
*
|
98 |
+
* @param integer $expires (Optional) The number of seconds until a cache object is considered stale. The default value is 0.
|
99 |
+
* @return $this
|
100 |
+
*/
|
101 |
+
public function expire_in($seconds)
|
102 |
+
{
|
103 |
+
$this->expires = $seconds;
|
104 |
+
return $this;
|
105 |
+
}
|
106 |
+
|
107 |
+
/**
|
108 |
+
* Provides a simple, straightforward cache-logic mechanism. Useful for non-complex response caches.
|
109 |
+
*
|
110 |
+
* @param string|function $callback (Required) The name of the function to fire when we need to fetch new data to cache.
|
111 |
+
* @param array params (Optional) Parameters to pass into the callback function, as an array.
|
112 |
+
* @return array The cached data being requested.
|
113 |
+
*/
|
114 |
+
public function response_manager($callback, $params = null)
|
115 |
+
{
|
116 |
+
// Automatically handle $params values.
|
117 |
+
$params = is_array($params) ? $params : array($params);
|
118 |
+
|
119 |
+
if ($data = $this->read())
|
120 |
+
{
|
121 |
+
if ($this->is_expired())
|
122 |
+
{
|
123 |
+
if ($data = call_user_func_array($callback, $params))
|
124 |
+
{
|
125 |
+
$this->update($data);
|
126 |
+
}
|
127 |
+
else
|
128 |
+
{
|
129 |
+
$this->reset();
|
130 |
+
$data = $this->read();
|
131 |
+
}
|
132 |
+
}
|
133 |
+
}
|
134 |
+
else
|
135 |
+
{
|
136 |
+
if ($data = call_user_func_array($callback, $params))
|
137 |
+
{
|
138 |
+
$this->create($data);
|
139 |
+
}
|
140 |
+
}
|
141 |
+
|
142 |
+
return $data;
|
143 |
+
}
|
144 |
+
}
|
145 |
+
|
146 |
+
|
147 |
+
/*%******************************************************************************************%*/
|
148 |
+
// CORE DEPENDENCIES
|
149 |
+
|
150 |
+
// Include the ICacheCore interface.
|
151 |
+
if (file_exists(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'icachecore.interface.php'))
|
152 |
+
{
|
153 |
+
include_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'icachecore.interface.php';
|
154 |
+
}
|
155 |
+
|
156 |
+
|
157 |
+
/*%******************************************************************************************%*/
|
158 |
+
// EXCEPTIONS
|
159 |
+
|
160 |
+
class CacheCore_Exception extends Exception {}
|
sdk/Aws_v1/lib/cachecore/cachefile.class.php
ADDED
@@ -0,0 +1,189 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Container for all file-based cache methods. Inherits additional methods from <CacheCore>. Adheres
|
4 |
+
* to the ICacheCore interface.
|
5 |
+
*
|
6 |
+
* @version 2012.04.17
|
7 |
+
* @copyright 2006-2012 Ryan Parman
|
8 |
+
* @copyright 2006-2010 Foleeo, Inc.
|
9 |
+
* @copyright 2012 Amazon.com, Inc. or its affiliates.
|
10 |
+
* @copyright 2008-2010 Contributors
|
11 |
+
* @license http://opensource.org/licenses/bsd-license.php Simplified BSD License
|
12 |
+
* @link http://github.com/skyzyx/cachecore CacheCore
|
13 |
+
* @link http://getcloudfusion.com CloudFusion
|
14 |
+
*/
|
15 |
+
class CacheFile extends CacheCore implements ICacheCore
|
16 |
+
{
|
17 |
+
|
18 |
+
/*%******************************************************************************************%*/
|
19 |
+
// CONSTRUCTOR
|
20 |
+
|
21 |
+
/**
|
22 |
+
* Constructs a new instance of this class.
|
23 |
+
*
|
24 |
+
* @param string $name (Required) A name to uniquely identify the cache object.
|
25 |
+
* @param string $location (Optional) The location to store the cache object in. This may vary by cache method. The default value is NULL.
|
26 |
+
* @param integer $expires (Optional) The number of seconds until a cache object is considered stale. The default value is 0.
|
27 |
+
* @param boolean $gzip (Optional) Whether data should be gzipped before being stored. The default value is true.
|
28 |
+
* @return object Reference to the cache object.
|
29 |
+
*/
|
30 |
+
public function __construct($name, $location = null, $expires = 0, $gzip = true)
|
31 |
+
{
|
32 |
+
parent::__construct($name, $location, $expires, $gzip);
|
33 |
+
$this->id = $this->location . '/' . $this->name . '.cache';
|
34 |
+
}
|
35 |
+
|
36 |
+
/**
|
37 |
+
* Creates a new cache.
|
38 |
+
*
|
39 |
+
* @param mixed $data (Required) The data to cache.
|
40 |
+
* @return boolean Whether the operation was successful.
|
41 |
+
*/
|
42 |
+
public function create($data)
|
43 |
+
{
|
44 |
+
if (file_exists($this->id))
|
45 |
+
{
|
46 |
+
return false;
|
47 |
+
}
|
48 |
+
elseif (realpath($this->location) && file_exists($this->location) && is_writeable($this->location))
|
49 |
+
{
|
50 |
+
$data = serialize($data);
|
51 |
+
$data = $this->gzip ? gzcompress($data) : $data;
|
52 |
+
|
53 |
+
return (bool) file_put_contents($this->id, $data);
|
54 |
+
}
|
55 |
+
elseif (realpath($this->location) && file_exists($this->location))
|
56 |
+
{
|
57 |
+
throw new CacheFile_Exception('The file system location "' . $this->location . '" is not writable. Check the file system permissions for this directory.');
|
58 |
+
}
|
59 |
+
else
|
60 |
+
{
|
61 |
+
throw new CacheFile_Exception('The file system location "' . $this->location . '" does not exist. Create the directory, or double-check any relative paths that may have been set.');
|
62 |
+
}
|
63 |
+
|
64 |
+
return false;
|
65 |
+
}
|
66 |
+
|
67 |
+
/**
|
68 |
+
* Reads a cache.
|
69 |
+
*
|
70 |
+
* @return mixed Either the content of the cache object, or boolean `false`.
|
71 |
+
*/
|
72 |
+
public function read()
|
73 |
+
{
|
74 |
+
if (file_exists($this->id) && is_readable($this->id))
|
75 |
+
{
|
76 |
+
$data = file_get_contents($this->id);
|
77 |
+
$data = $this->gzip ? gzuncompress($data) : $data;
|
78 |
+
$data = unserialize($data);
|
79 |
+
|
80 |
+
if ($data === false)
|
81 |
+
{
|
82 |
+
/*
|
83 |
+
This should only happen when someone changes the gzip settings and there is
|
84 |
+
existing data or someone has been mucking about in the cache folder manually.
|
85 |
+
Delete the bad entry since the file cache doesn't clean up after itself and
|
86 |
+
then return false so fresh data will be retrieved.
|
87 |
+
*/
|
88 |
+
$this->delete();
|
89 |
+
return false;
|
90 |
+
}
|
91 |
+
|
92 |
+
return $data;
|
93 |
+
}
|
94 |
+
|
95 |
+
return false;
|
96 |
+
}
|
97 |
+
|
98 |
+
/**
|
99 |
+
* Updates an existing cache.
|
100 |
+
*
|
101 |
+
* @param mixed $data (Required) The data to cache.
|
102 |
+
* @return boolean Whether the operation was successful.
|
103 |
+
*/
|
104 |
+
public function update($data)
|
105 |
+
{
|
106 |
+
if (file_exists($this->id) && is_writeable($this->id))
|
107 |
+
{
|
108 |
+
$data = serialize($data);
|
109 |
+
$data = $this->gzip ? gzcompress($data) : $data;
|
110 |
+
|
111 |
+
return (bool) file_put_contents($this->id, $data);
|
112 |
+
}
|
113 |
+
else
|
114 |
+
{
|
115 |
+
throw new CacheFile_Exception('The file system location is not writeable. Check your file system permissions and ensure that the cache directory exists.');
|
116 |
+
}
|
117 |
+
|
118 |
+
return false;
|
119 |
+
}
|
120 |
+
|
121 |
+
/**
|
122 |
+
* Deletes a cache.
|
123 |
+
*
|
124 |
+
* @return boolean Whether the operation was successful.
|
125 |
+
*/
|
126 |
+
public function delete()
|
127 |
+
{
|
128 |
+
if (file_exists($this->id))
|
129 |
+
{
|
130 |
+
return unlink($this->id);
|
131 |
+
}
|
132 |
+
|
133 |
+
return false;
|
134 |
+
}
|
135 |
+
|
136 |
+
/**
|
137 |
+
* Checks whether the cache object is expired or not.
|
138 |
+
*
|
139 |
+
* @return boolean Whether the cache is expired or not.
|
140 |
+
*/
|
141 |
+
public function is_expired()
|
142 |
+
{
|
143 |
+
if ($this->timestamp() + $this->expires < time())
|
144 |
+
{
|
145 |
+
return true;
|
146 |
+
}
|
147 |
+
|
148 |
+
return false;
|
149 |
+
}
|
150 |
+
|
151 |
+
/**
|
152 |
+
* Retrieves the timestamp of the cache.
|
153 |
+
*
|
154 |
+
* @return mixed Either the Unix time stamp of the cache creation, or boolean `false`.
|
155 |
+
*/
|
156 |
+
public function timestamp()
|
157 |
+
{
|
158 |
+
clearstatcache();
|
159 |
+
|
160 |
+
if (file_exists($this->id))
|
161 |
+
{
|
162 |
+
$this->timestamp = filemtime($this->id);
|
163 |
+
return $this->timestamp;
|
164 |
+
}
|
165 |
+
|
166 |
+
return false;
|
167 |
+
}
|
168 |
+
|
169 |
+
/**
|
170 |
+
* Resets the freshness of the cache.
|
171 |
+
*
|
172 |
+
* @return boolean Whether the operation was successful.
|
173 |
+
*/
|
174 |
+
public function reset()
|
175 |
+
{
|
176 |
+
if (file_exists($this->id))
|
177 |
+
{
|
178 |
+
return touch($this->id);
|
179 |
+
}
|
180 |
+
|
181 |
+
return false;
|
182 |
+
}
|
183 |
+
}
|
184 |
+
|
185 |
+
|
186 |
+
/*%******************************************************************************************%*/
|
187 |
+
// EXCEPTIONS
|
188 |
+
|
189 |
+
class CacheFile_Exception extends CacheCore_Exception {}
|
sdk/Aws_v1/lib/cachecore/cachemc.class.php
ADDED
@@ -0,0 +1,183 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Container for all Memcache-based cache methods. Inherits additional methods from <CacheCore>. Adheres
|
4 |
+
* to the ICacheCore interface.
|
5 |
+
*
|
6 |
+
* @version 2012.04.17
|
7 |
+
* @copyright 2006-2012 Ryan Parman
|
8 |
+
* @copyright 2006-2010 Foleeo, Inc.
|
9 |
+
* @copyright 2012 Amazon.com, Inc. or its affiliates.
|
10 |
+
* @copyright 2008-2010 Contributors
|
11 |
+
* @license http://opensource.org/licenses/bsd-license.php Simplified BSD License
|
12 |
+
* @link http://github.com/skyzyx/cachecore CacheCore
|
13 |
+
* @link http://getcloudfusion.com CloudFusion
|
14 |
+
* @link http://php.net/memcache Memcache
|
15 |
+
* @link http://php.net/memcached Memcached
|
16 |
+
*/
|
17 |
+
class CacheMC extends CacheCore implements ICacheCore
|
18 |
+
{
|
19 |
+
/**
|
20 |
+
* Holds the Memcache object.
|
21 |
+
*/
|
22 |
+
var $memcache = null;
|
23 |
+
|
24 |
+
/**
|
25 |
+
* Whether the Memcached extension is being used (as opposed to Memcache).
|
26 |
+
*/
|
27 |
+
var $is_memcached = false;
|
28 |
+
|
29 |
+
|
30 |
+
/*%******************************************************************************************%*/
|
31 |
+
// CONSTRUCTOR
|
32 |
+
|
33 |
+
/**
|
34 |
+
* Constructs a new instance of this class.
|
35 |
+
*
|
36 |
+
* @param string $name (Required) A name to uniquely identify the cache object.
|
37 |
+
* @param string $location (Optional) The location to store the cache object in. This may vary by cache method. The default value is NULL.
|
38 |
+
* @param integer $expires (Optional) The number of seconds until a cache object is considered stale. The default value is 0.
|
39 |
+
* @param boolean $gzip (Optional) Whether data should be gzipped before being stored. The default value is true.
|
40 |
+
* @return object Reference to the cache object.
|
41 |
+
*/
|
42 |
+
public function __construct($name, $location = null, $expires = 0, $gzip = true)
|
43 |
+
{
|
44 |
+
parent::__construct($name, null, $expires, $gzip);
|
45 |
+
$this->id = $this->name;
|
46 |
+
|
47 |
+
// Prefer Memcached over Memcache.
|
48 |
+
if (class_exists('Memcached'))
|
49 |
+
{
|
50 |
+
$this->memcache = new Memcached();
|
51 |
+
$this->is_memcached = true;
|
52 |
+
}
|
53 |
+
elseif (class_exists('Memcache'))
|
54 |
+
{
|
55 |
+
$this->memcache = new Memcache();
|
56 |
+
}
|
57 |
+
else
|
58 |
+
{
|
59 |
+
return false;
|
60 |
+
}
|
61 |
+
|
62 |
+
// Enable compression, if available
|
63 |
+
if ($this->gzip)
|
64 |
+
{
|
65 |
+
if ($this->is_memcached)
|
66 |
+
{
|
67 |
+
$this->memcache->setOption(Memcached::OPT_COMPRESSION, true);
|
68 |
+
}
|
69 |
+
else
|
70 |
+
{
|
71 |
+
$this->gzip = MEMCACHE_COMPRESSED;
|
72 |
+
}
|
73 |
+
}
|
74 |
+
|
75 |
+
// Process Memcached servers.
|
76 |
+
if (isset($location) && sizeof($location) > 0)
|
77 |
+
{
|
78 |
+
foreach ($location as $loc)
|
79 |
+
{
|
80 |
+
if (isset($loc['port']) && !empty($loc['port']))
|
81 |
+
{
|
82 |
+
$this->memcache->addServer($loc['host'], $loc['port']);
|
83 |
+
}
|
84 |
+
else
|
85 |
+
{
|
86 |
+
$this->memcache->addServer($loc['host'], 11211);
|
87 |
+
}
|
88 |
+
}
|
89 |
+
}
|
90 |
+
|
91 |
+
return $this;
|
92 |
+
}
|
93 |
+
|
94 |
+
/**
|
95 |
+
* Creates a new cache.
|
96 |
+
*
|
97 |
+
* @param mixed $data (Required) The data to cache.
|
98 |
+
* @return boolean Whether the operation was successful.
|
99 |
+
*/
|
100 |
+
public function create($data)
|
101 |
+
{
|
102 |
+
if ($this->is_memcached)
|
103 |
+
{
|
104 |
+
return $this->memcache->set($this->id, $data, $this->expires);
|
105 |
+
}
|
106 |
+
return $this->memcache->set($this->id, $data, $this->gzip, $this->expires);
|
107 |
+
}
|
108 |
+
|
109 |
+
/**
|
110 |
+
* Reads a cache.
|
111 |
+
*
|
112 |
+
* @return mixed Either the content of the cache object, or boolean `false`.
|
113 |
+
*/
|
114 |
+
public function read()
|
115 |
+
{
|
116 |
+
if ($this->is_memcached)
|
117 |
+
{
|
118 |
+
return $this->memcache->get($this->id);
|
119 |
+
}
|
120 |
+
return $this->memcache->get($this->id, $this->gzip);
|
121 |
+
}
|
122 |
+
|
123 |
+
/**
|
124 |
+
* Updates an existing cache.
|
125 |
+
*
|
126 |
+
* @param mixed $data (Required) The data to cache.
|
127 |
+
* @return boolean Whether the operation was successful.
|
128 |
+
*/
|
129 |
+
public function update($data)
|
130 |
+
{
|
131 |
+
if ($this->is_memcached)
|
132 |
+
{
|
133 |
+
return $this->memcache->replace($this->id, $data, $this->expires);
|
134 |
+
}
|
135 |
+
return $this->memcache->replace($this->id, $data, $this->gzip, $this->expires);
|
136 |
+
}
|
137 |
+
|
138 |
+
/**
|
139 |
+
* Deletes a cache.
|
140 |
+
*
|
141 |
+
* @return boolean Whether the operation was successful.
|
142 |
+
*/
|
143 |
+
public function delete()
|
144 |
+
{
|
145 |
+
return $this->memcache->delete($this->id);
|
146 |
+
}
|
147 |
+
|
148 |
+
/**
|
149 |
+
* Implemented here, but always returns `false`. Memcache manages its own expirations.
|
150 |
+
*
|
151 |
+
* @return boolean Whether the cache is expired or not.
|
152 |
+
*/
|
153 |
+
public function is_expired()
|
154 |
+
{
|
155 |
+
return false;
|
156 |
+
}
|
157 |
+
|
158 |
+
/**
|
159 |
+
* Implemented here, but always returns `false`. Memcache manages its own expirations.
|
160 |
+
*
|
161 |
+
* @return mixed Either the Unix time stamp of the cache creation, or boolean `false`.
|
162 |
+
*/
|
163 |
+
public function timestamp()
|
164 |
+
{
|
165 |
+
return false;
|
166 |
+
}
|
167 |
+
|
168 |
+
/**
|
169 |
+
* Implemented here, but always returns `false`. Memcache manages its own expirations.
|
170 |
+
*
|
171 |
+
* @return boolean Whether the operation was successful.
|
172 |
+
*/
|
173 |
+
public function reset()
|
174 |
+
{
|
175 |
+
return false;
|
176 |
+
}
|
177 |
+
}
|
178 |
+
|
179 |
+
|
180 |
+
/*%******************************************************************************************%*/
|
181 |
+
// EXCEPTIONS
|
182 |
+
|
183 |
+
class CacheMC_Exception extends CacheCore_Exception {}
|
sdk/Aws_v1/lib/cachecore/cachepdo.class.php
ADDED
@@ -0,0 +1,297 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Container for all PDO-based cache methods. Inherits additional methods from <CacheCore>. Adheres
|
4 |
+
* to the ICacheCore interface.
|
5 |
+
*
|
6 |
+
* @version 2012.04.17
|
7 |
+
* @copyright 2006-2012 Ryan Parman
|
8 |
+
* @copyright 2006-2010 Foleeo, Inc.
|
9 |
+
* @copyright 2012 Amazon.com, Inc. or its affiliates.
|
10 |
+
* @copyright 2008-2010 Contributors
|
11 |
+
* @license http://opensource.org/licenses/bsd-license.php Simplified BSD License
|
12 |
+
* @link http://github.com/skyzyx/cachecore CacheCore
|
13 |
+
* @link http://getcloudfusion.com CloudFusion
|
14 |
+
* @link http://php.net/pdo PDO
|
15 |
+
*/
|
16 |
+
class CachePDO extends CacheCore implements ICacheCore
|
17 |
+
{
|
18 |
+
/**
|
19 |
+
* Reference to the PDO connection object.
|
20 |
+
*/
|
21 |
+
var $pdo = null;
|
22 |
+
|
23 |
+
/**
|
24 |
+
* Holds the parsed URL components.
|
25 |
+
*/
|
26 |
+
var $dsn = null;
|
27 |
+
|
28 |
+
/**
|
29 |
+
* Holds the PDO-friendly version of the connection string.
|
30 |
+
*/
|
31 |
+
var $dsn_string = null;
|
32 |
+
|
33 |
+
/**
|
34 |
+
* Holds the prepared statement for creating an entry.
|
35 |
+
*/
|
36 |
+
var $create = null;
|
37 |
+
|
38 |
+
/**
|
39 |
+
* Holds the prepared statement for reading an entry.
|
40 |
+
*/
|
41 |
+
var $read = null;
|
42 |
+
|
43 |
+
/**
|
44 |
+
* Holds the prepared statement for updating an entry.
|
45 |
+
*/
|
46 |
+
var $update = null;
|
47 |
+
|
48 |
+
/**
|
49 |
+
* Holds the prepared statement for resetting the expiry of an entry.
|
50 |
+
*/
|
51 |
+
var $reset = null;
|
52 |
+
|
53 |
+
/**
|
54 |
+
* Holds the prepared statement for deleting an entry.
|
55 |
+
*/
|
56 |
+
var $delete = null;
|
57 |
+
|
58 |
+
/**
|
59 |
+
* Holds the response of the read so we only need to fetch it once instead of doing
|
60 |
+
* multiple queries.
|
61 |
+
*/
|
62 |
+
var $store_read = null;
|
63 |
+
|
64 |
+
|
65 |
+
/*%******************************************************************************************%*/
|
66 |
+
// CONSTRUCTOR
|
67 |
+
|
68 |
+
/**
|
69 |
+
* Constructs a new instance of this class.
|
70 |
+
*
|
71 |
+
* Tested with [MySQL 5.0.x](http://mysql.com), [PostgreSQL](http://postgresql.com), and
|
72 |
+
* [SQLite 3.x](http://sqlite.org). SQLite 2.x is assumed to work. No other PDO-supported databases have
|
73 |
+
* been tested (e.g. Oracle, Microsoft SQL Server, IBM DB2, ODBC, Sybase, Firebird). Feel free to send
|
74 |
+
* patches for additional database support.
|
75 |
+
*
|
76 |
+
* See <http://php.net/pdo> for more information.
|
77 |
+
*
|
78 |
+
* @param string $name (Required) A name to uniquely identify the cache object.
|
79 |
+
* @param string $location (Optional) The location to store the cache object in. This may vary by cache method. The default value is NULL.
|
80 |
+
* @param integer $expires (Optional) The number of seconds until a cache object is considered stale. The default value is 0.
|
81 |
+
* @param boolean $gzip (Optional) Whether data should be gzipped before being stored. The default value is true.
|
82 |
+
* @return object Reference to the cache object.
|
83 |
+
*/
|
84 |
+
public function __construct($name, $location = null, $expires = 0, $gzip = true)
|
85 |
+
{
|
86 |
+
// Make sure the name is no longer than 40 characters.
|
87 |
+
$name = sha1($name);
|
88 |
+
|
89 |
+
// Call parent constructor and set id.
|
90 |
+
parent::__construct($name, $location, $expires, $gzip);
|
91 |
+
$this->id = $this->name;
|
92 |
+
$options = array();
|
93 |
+
|
94 |
+
// Check if the location contains :// (e.g. mysql://user:pass@hostname:port/table)
|
95 |
+
if (stripos($location, '://') === false)
|
96 |
+
{
|
97 |
+
// No? Just pass it through.
|
98 |
+
$this->dsn = parse_url($location);
|
99 |
+
$this->dsn_string = $location;
|
100 |
+
}
|
101 |
+
else
|
102 |
+
{
|
103 |
+
// Yes? Parse and set the DSN
|
104 |
+
$this->dsn = parse_url($location);
|
105 |
+
$this->dsn_string = $this->dsn['scheme'] . ':host=' . $this->dsn['host'] . ((isset($this->dsn['port'])) ? ';port=' . $this->dsn['port'] : '') . ';dbname=' . substr($this->dsn['path'], 1);
|
106 |
+
}
|
107 |
+
|
108 |
+
// Make sure that user/pass are defined.
|
109 |
+
$user = isset($this->dsn['user']) ? $this->dsn['user'] : null;
|
110 |
+
$pass = isset($this->dsn['pass']) ? $this->dsn['pass'] : null;
|
111 |
+
|
112 |
+
// Set persistence for databases that support it.
|
113 |
+
switch ($this->dsn['scheme'])
|
114 |
+
{
|
115 |
+
case 'mysql': // MySQL
|
116 |
+
case 'pgsql': // PostgreSQL
|
117 |
+
$options[PDO::ATTR_PERSISTENT] = true;
|
118 |
+
break;
|
119 |
+
}
|
120 |
+
|
121 |
+
// Instantiate a new PDO object with a persistent connection.
|
122 |
+
$this->pdo = new PDO($this->dsn_string, $user, $pass, $options);
|
123 |
+
|
124 |
+
// Define prepared statements for improved performance.
|
125 |
+
$this->create = $this->pdo->prepare("INSERT INTO cache (id, expires, data) VALUES (:id, :expires, :data)");
|
126 |
+
$this->read = $this->pdo->prepare("SELECT id, expires, data FROM cache WHERE id = :id");
|
127 |
+
$this->reset = $this->pdo->prepare("UPDATE cache SET expires = :expires WHERE id = :id");
|
128 |
+
$this->delete = $this->pdo->prepare("DELETE FROM cache WHERE id = :id");
|
129 |
+
}
|
130 |
+
|
131 |
+
/**
|
132 |
+
* Creates a new cache.
|
133 |
+
*
|
134 |
+
* @param mixed $data (Required) The data to cache.
|
135 |
+
* @return boolean Whether the operation was successful.
|
136 |
+
*/
|
137 |
+
public function create($data)
|
138 |
+
{
|
139 |
+
$data = serialize($data);
|
140 |
+
$data = $this->gzip ? gzcompress($data) : $data;
|
141 |
+
|
142 |
+
$this->create->bindParam(':id', $this->id);
|
143 |
+
$this->create->bindParam(':data', $data);
|
144 |
+
$this->create->bindParam(':expires', $this->generate_timestamp());
|
145 |
+
|
146 |
+
return (bool) $this->create->execute();
|
147 |
+
}
|
148 |
+
|
149 |
+
/**
|
150 |
+
* Reads a cache.
|
151 |
+
*
|
152 |
+
* @return mixed Either the content of the cache object, or boolean `false`.
|
153 |
+
*/
|
154 |
+
public function read()
|
155 |
+
{
|
156 |
+
if (!$this->store_read)
|
157 |
+
{
|
158 |
+
$this->read->bindParam(':id', $this->id);
|
159 |
+
$this->read->execute();
|
160 |
+
$this->store_read = $this->read->fetch(PDO::FETCH_ASSOC);
|
161 |
+
}
|
162 |
+
|
163 |
+
if ($this->store_read)
|
164 |
+
{
|
165 |
+
$data = $this->store_read['data'];
|
166 |
+
$data = $this->gzip ? gzuncompress($data) : $data;
|
167 |
+
|
168 |
+
return unserialize($data);
|
169 |
+
}
|
170 |
+
|
171 |
+
return false;
|
172 |
+
}
|
173 |
+
|
174 |
+
/**
|
175 |
+
* Updates an existing cache.
|
176 |
+
*
|
177 |
+
* @param mixed $data (Required) The data to cache.
|
178 |
+
* @return boolean Whether the operation was successful.
|
179 |
+
*/
|
180 |
+
public function update($data)
|
181 |
+
{
|
182 |
+
$this->delete();
|
183 |
+
return $this->create($data);
|
184 |
+
}
|
185 |
+
|
186 |
+
/**
|
187 |
+
* Deletes a cache.
|
188 |
+
*
|
189 |
+
* @return boolean Whether the operation was successful.
|
190 |
+
*/
|
191 |
+
public function delete()
|
192 |
+
{
|
193 |
+
$this->delete->bindParam(':id', $this->id);
|
194 |
+
return $this->delete->execute();
|
195 |
+
}
|
196 |
+
|
197 |
+
/**
|
198 |
+
* Checks whether the cache object is expired or not.
|
199 |
+
*
|
200 |
+
* @return boolean Whether the cache is expired or not.
|
201 |
+
*/
|
202 |
+
public function is_expired()
|
203 |
+
{
|
204 |
+
if ($this->timestamp() + $this->expires < time())
|
205 |
+
{
|
206 |
+
return true;
|
207 |
+
}
|
208 |
+
|
209 |
+
return false;
|
210 |
+
}
|
211 |
+
|
212 |
+
/**
|
213 |
+
* Retrieves the timestamp of the cache.
|
214 |
+
*
|
215 |
+
* @return mixed Either the Unix time stamp of the cache creation, or boolean `false`.
|
216 |
+
*/
|
217 |
+
public function timestamp()
|
218 |
+
{
|
219 |
+
if (!$this->store_read)
|
220 |
+
{
|
221 |
+
$this->read->bindParam(':id', $this->id);
|
222 |
+
$this->read->execute();
|
223 |
+
$this->store_read = $this->read->fetch(PDO::FETCH_ASSOC);
|
224 |
+
}
|
225 |
+
|
226 |
+
if ($this->store_read)
|
227 |
+
{
|
228 |
+
$value = $this->store_read['expires'];
|
229 |
+
|
230 |
+
// If 'expires' isn't yet an integer, convert it into one.
|
231 |
+
if (!is_numeric($value))
|
232 |
+
{
|
233 |
+
$value = strtotime($value);
|
234 |
+
}
|
235 |
+
|
236 |
+
$this->timestamp = date('U', $value);
|
237 |
+
return $this->timestamp;
|
238 |
+
}
|
239 |
+
|
240 |
+
return false;
|
241 |
+
}
|
242 |
+
|
243 |
+
/**
|
244 |
+
* Resets the freshness of the cache.
|
245 |
+
*
|
246 |
+
* @return boolean Whether the operation was successful.
|
247 |
+
*/
|
248 |
+
public function reset()
|
249 |
+
{
|
250 |
+
$this->reset->bindParam(':id', $this->id);
|
251 |
+
$this->reset->bindParam(':expires', $this->generate_timestamp());
|
252 |
+
return (bool) $this->reset->execute();
|
253 |
+
}
|
254 |
+
|
255 |
+
/**
|
256 |
+
* Returns a list of supported PDO database drivers. Identical to <PDO::getAvailableDrivers()>.
|
257 |
+
*
|
258 |
+
* @return array The list of supported database drivers.
|
259 |
+
* @link http://php.net/pdo.getavailabledrivers PHP Method
|
260 |
+
*/
|
261 |
+
public function get_drivers()
|
262 |
+
{
|
263 |
+
return PDO::getAvailableDrivers();
|
264 |
+
}
|
265 |
+
|
266 |
+
/**
|
267 |
+
* Returns a timestamp value apropriate to the current database type.
|
268 |
+
*
|
269 |
+
* @return mixed Timestamp for MySQL and PostgreSQL, integer value for SQLite.
|
270 |
+
*/
|
271 |
+
protected function generate_timestamp()
|
272 |
+
{
|
273 |
+
// Define 'expires' settings differently.
|
274 |
+
switch ($this->dsn['scheme'])
|
275 |
+
{
|
276 |
+
// These support timestamps.
|
277 |
+
case 'mysql': // MySQL
|
278 |
+
case 'pgsql': // PostgreSQL
|
279 |
+
$expires = date(DATE_FORMAT_MYSQL, time());
|
280 |
+
break;
|
281 |
+
|
282 |
+
// These support integers.
|
283 |
+
case 'sqlite': // SQLite 3
|
284 |
+
case 'sqlite2': // SQLite 2
|
285 |
+
$expires = time();
|
286 |
+
break;
|
287 |
+
}
|
288 |
+
|
289 |
+
return $expires;
|
290 |
+
}
|
291 |
+
}
|
292 |
+
|
293 |
+
|
294 |
+
/*%******************************************************************************************%*/
|
295 |
+
// EXCEPTIONS
|
296 |
+
|
297 |
+
class CachePDO_Exception extends CacheCore_Exception {}
|
sdk/Aws_v1/lib/cachecore/cachexcache.class.php
ADDED
@@ -0,0 +1,129 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Container for all XCache-based cache methods. Inherits additional methods from <CacheCore>. Adheres
|
4 |
+
* to the ICacheCore interface.
|
5 |
+
*
|
6 |
+
* @version 2012.04.17
|
7 |
+
* @copyright 2006-2012 Ryan Parman
|
8 |
+
* @copyright 2006-2010 Foleeo, Inc.
|
9 |
+
* @copyright 2012 Amazon.com, Inc. or its affiliates.
|
10 |
+
* @copyright 2008-2010 Contributors
|
11 |
+
* @license http://opensource.org/licenses/bsd-license.php Simplified BSD License
|
12 |
+
* @link http://github.com/skyzyx/cachecore CacheCore
|
13 |
+
* @link http://getcloudfusion.com CloudFusion
|
14 |
+
* @link http://xcache.lighttpd.net XCache
|
15 |
+
*/
|
16 |
+
class CacheXCache extends CacheCore implements ICacheCore
|
17 |
+
{
|
18 |
+
|
19 |
+
/*%******************************************************************************************%*/
|
20 |
+
// CONSTRUCTOR
|
21 |
+
|
22 |
+
/**
|
23 |
+
* Constructs a new instance of this class.
|
24 |
+
*
|
25 |
+
* @param string $name (Required) A name to uniquely identify the cache object.
|
26 |
+
* @param string $location (Optional) The location to store the cache object in. This may vary by cache method. The default value is NULL.
|
27 |
+
* @param integer $expires (Optional) The number of seconds until a cache object is considered stale. The default value is 0.
|
28 |
+
* @param boolean $gzip (Optional) Whether data should be gzipped before being stored. The default value is true.
|
29 |
+
* @return object Reference to the cache object.
|
30 |
+
*/
|
31 |
+
public function __construct($name, $location = null, $expires = 0, $gzip = true)
|
32 |
+
{
|
33 |
+
parent::__construct($name, null, $expires, $gzip);
|
34 |
+
$this->id = $this->name;
|
35 |
+
}
|
36 |
+
|
37 |
+
/**
|
38 |
+
* Creates a new cache.
|
39 |
+
*
|
40 |
+
* @param mixed $data (Required) The data to cache.
|
41 |
+
* @return boolean Whether the operation was successful.
|
42 |
+
*/
|
43 |
+
public function create($data)
|
44 |
+
{
|
45 |
+
$data = serialize($data);
|
46 |
+
$data = $this->gzip ? gzcompress($data) : $data;
|
47 |
+
|
48 |
+
return xcache_set($this->id, $data, $this->expires);
|
49 |
+
}
|
50 |
+
|
51 |
+
/**
|
52 |
+
* Reads a cache.
|
53 |
+
*
|
54 |
+
* @return mixed Either the content of the cache object, or boolean `false`.
|
55 |
+
*/
|
56 |
+
public function read()
|
57 |
+
{
|
58 |
+
if ($data = xcache_get($this->id))
|
59 |
+
{
|
60 |
+
$data = $this->gzip ? gzuncompress($data) : $data;
|
61 |
+
return unserialize($data);
|
62 |
+
}
|
63 |
+
|
64 |
+
return false;
|
65 |
+
}
|
66 |
+
|
67 |
+
/**
|
68 |
+
* Updates an existing cache.
|
69 |
+
*
|
70 |
+
* @param mixed $data (Required) The data to cache.
|
71 |
+
* @return boolean Whether the operation was successful.
|
72 |
+
*/
|
73 |
+
public function update($data)
|
74 |
+
{
|
75 |
+
$data = serialize($data);
|
76 |
+
$data = $this->gzip ? gzcompress($data) : $data;
|
77 |
+
|
78 |
+
return xcache_set($this->id, $data, $this->expires);
|
79 |
+
}
|
80 |
+
|
81 |
+
/**
|
82 |
+
* Deletes a cache.
|
83 |
+
*
|
84 |
+
* @return boolean Whether the operation was successful.
|
85 |
+
*/
|
86 |
+
public function delete()
|
87 |
+
{
|
88 |
+
return xcache_unset($this->id);
|
89 |
+
}
|
90 |
+
|
91 |
+
/**
|
92 |
+
* Defined here, but always returns false. XCache manages it's own expirations. It's worth
|
93 |
+
* mentioning that if the server is configured for a long xcache.var_gc_interval then it IS
|
94 |
+
* possible for expired data to remain in the var cache, though it is not possible to access
|
95 |
+
* it.
|
96 |
+
*
|
97 |
+
* @return boolean Whether the cache is expired or not.
|
98 |
+
*/
|
99 |
+
public function is_expired()
|
100 |
+
{
|
101 |
+
return false;
|
102 |
+
}
|
103 |
+
|
104 |
+
/**
|
105 |
+
* Implemented here, but always returns `false`. XCache manages its own expirations.
|
106 |
+
*
|
107 |
+
* @return mixed Either the Unix time stamp of the cache creation, or boolean `false`.
|
108 |
+
*/
|
109 |
+
public function timestamp()
|
110 |
+
{
|
111 |
+
return false;
|
112 |
+
}
|
113 |
+
|
114 |
+
/**
|
115 |
+
* Implemented here, but always returns `false`. XCache manages its own expirations.
|
116 |
+
*
|
117 |
+
* @return boolean Whether the operation was successful.
|
118 |
+
*/
|
119 |
+
public function reset()
|
120 |
+
{
|
121 |
+
return false;
|
122 |
+
}
|
123 |
+
}
|
124 |
+
|
125 |
+
|
126 |
+
/*%******************************************************************************************%*/
|
127 |
+
// EXCEPTIONS
|
128 |
+
|
129 |
+
class CacheXCache_Exception extends CacheCore_Exception {}
|
sdk/Aws_v1/lib/cachecore/icachecore.interface.php
ADDED
@@ -0,0 +1,66 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Defines the methods that all implementing classes MUST have. Covers CRUD (create, read, update,
|
4 |
+
* delete) methods, as well as others that are used in the base <CacheCore> class.
|
5 |
+
*
|
6 |
+
* @version 2009.03.22
|
7 |
+
* @copyright 2006-2010 Ryan Parman
|
8 |
+
* @copyright 2006-2010 Foleeo, Inc.
|
9 |
+
* @copyright 2008-2010 Contributors
|
10 |
+
* @license http://opensource.org/licenses/bsd-license.php Simplified BSD License
|
11 |
+
* @link http://github.com/skyzyx/cachecore CacheCore
|
12 |
+
* @link http://getcloudfusion.com CloudFusion
|
13 |
+
*/
|
14 |
+
interface ICacheCore
|
15 |
+
{
|
16 |
+
/**
|
17 |
+
* Creates a new cache.
|
18 |
+
*
|
19 |
+
* @param mixed $data (Required) The data to cache.
|
20 |
+
* @return boolean Whether the operation was successful.
|
21 |
+
*/
|
22 |
+
public function create($data);
|
23 |
+
|
24 |
+
/**
|
25 |
+
* Reads a cache.
|
26 |
+
*
|
27 |
+
* @return mixed Either the content of the cache object, or boolean `false`.
|
28 |
+
*/
|
29 |
+
public function read();
|
30 |
+
|
31 |
+
/**
|
32 |
+
* Updates an existing cache.
|
33 |
+
*
|
34 |
+
* @param mixed $data (Required) The data to cache.
|
35 |
+
* @return boolean Whether the operation was successful.
|
36 |
+
*/
|
37 |
+
public function update($data);
|
38 |
+
|
39 |
+
/**
|
40 |
+
* Deletes a cache.
|
41 |
+
*
|
42 |
+
* @return boolean Whether the operation was successful.
|
43 |
+
*/
|
44 |
+
public function delete();
|
45 |
+
|
46 |
+
/**
|
47 |
+
* Checks whether the cache object is expired or not.
|
48 |
+
*
|
49 |
+
* @return boolean Whether the cache is expired or not.
|
50 |
+
*/
|
51 |
+
public function is_expired();
|
52 |
+
|
53 |
+
/**
|
54 |
+
* Retrieves the timestamp of the cache.
|
55 |
+
*
|
56 |
+
* @return mixed Either the Unix time stamp of the cache creation, or boolean `false`.
|
57 |
+
*/
|
58 |
+
public function timestamp();
|
59 |
+
|
60 |
+
/**
|
61 |
+
* Resets the freshness of the cache.
|
62 |
+
*
|
63 |
+
* @return boolean Whether the operation was successful.
|
64 |
+
*/
|
65 |
+
public function reset();
|
66 |
+
}
|
sdk/Aws_v1/lib/dom/ArrayToDOMDocument.php
ADDED
@@ -0,0 +1,189 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* @author Omer Hassan
|
4 |
+
* @author Ryan Parman
|
5 |
+
* @license MIT
|
6 |
+
*/
|
7 |
+
class Array2DOM
|
8 |
+
{
|
9 |
+
const ATTRIBUTES = '__attributes__';
|
10 |
+
const CONTENT = '__content__';
|
11 |
+
|
12 |
+
/**
|
13 |
+
* @param array $source
|
14 |
+
* @param string $rootTagName
|
15 |
+
* @return DOMDocument
|
16 |
+
*/
|
17 |
+
public static function arrayToDOMDocument(array $source, $rootTagName = 'root')
|
18 |
+
{
|
19 |
+
$document = new DOMDocument();
|
20 |
+
$document->appendChild(self::createDOMElement($source, $rootTagName, $document));
|
21 |
+
|
22 |
+
return $document;
|
23 |
+
}
|
24 |
+
|
25 |
+
/**
|
26 |
+
* @param array $source
|
27 |
+
* @param string $rootTagName
|
28 |
+
* @param bool $formatOutput
|
29 |
+
* @return string
|
30 |
+
*/
|
31 |
+
public static function arrayToXMLString(array $source, $rootTagName = 'root', $formatOutput = true)
|
32 |
+
{
|
33 |
+
$document = self::arrayToDOMDocument($source, $rootTagName);
|
34 |
+
$document->formatOutput = $formatOutput;
|
35 |
+
|
36 |
+
return $document->saveXML();
|
37 |
+
}
|
38 |
+
|
39 |
+
/**
|
40 |
+
* @param DOMDocument $document
|
41 |
+
* @return array
|
42 |
+
*/
|
43 |
+
public static function domDocumentToArray(DOMDocument $document)
|
44 |
+
{
|
45 |
+
return self::createArray($document->documentElement);
|
46 |
+
}
|
47 |
+
|
48 |
+
/**
|
49 |
+
* @param string $xmlString
|
50 |
+
* @return array
|
51 |
+
*/
|
52 |
+
public static function xmlStringToArray($xmlString)
|
53 |
+
{
|
54 |
+
$document = new DOMDocument();
|
55 |
+
|
56 |
+
return $document->loadXML($xmlString) ? self::domDocumentToArray($document) : array();
|
57 |
+
}
|
58 |
+
|
59 |
+
/**
|
60 |
+
* @param mixed $source
|
61 |
+
* @param string $tagName
|
62 |
+
* @param DOMDocument $document
|
63 |
+
* @return DOMNode
|
64 |
+
*/
|
65 |
+
private static function createDOMElement($source, $tagName, DOMDocument $document)
|
66 |
+
{
|
67 |
+
if (!is_array($source))
|
68 |
+
{
|
69 |
+
$element = $document->createElement($tagName);
|
70 |
+
|
71 |
+
// Handle NULL bytes
|
72 |
+
if (strpos($source, "\0") !== false)
|
73 |
+
{
|
74 |
+
$source = 'json_encoded::' . json_encode($source);
|
75 |
+
$element->setAttribute('encoded', 'json');
|
76 |
+
}
|
77 |
+
|
78 |
+
$element->appendChild($document->createCDATASection($source));
|
79 |
+
|
80 |
+
return $element;
|
81 |
+
}
|
82 |
+
|
83 |
+
$element = $document->createElement($tagName);
|
84 |
+
|
85 |
+
foreach ($source as $key => $value)
|
86 |
+
{
|
87 |
+
if (is_string($key) && !is_numeric($key))
|
88 |
+
{
|
89 |
+
if ($key === self::ATTRIBUTES)
|
90 |
+
{
|
91 |
+
foreach ($value as $attributeName => $attributeValue)
|
92 |
+
{
|
93 |
+
$element->setAttribute($attributeName, $attributeValue);
|
94 |
+
}
|
95 |
+
}
|
96 |
+
elseif ($key === self::CONTENT)
|
97 |
+
{
|
98 |
+
$element->appendChild($document->createCDATASection($value));
|
99 |
+
}
|
100 |
+
elseif (is_string($value) && !is_numeric($value))
|
101 |
+
{
|
102 |
+
$element->appendChild(self::createDOMElement($value, $key, $document));
|
103 |
+
}
|
104 |
+
elseif (is_array($value) && count($value))
|
105 |
+
{
|
106 |
+
$keyNode = $document->createElement($key);
|
107 |
+
|
108 |
+
foreach ($value as $elementKey => $elementValue)
|
109 |
+
{
|
110 |
+
if (is_string($elementKey) && !is_numeric($elementKey))
|
111 |
+
{
|
112 |
+
$keyNode->appendChild(self::createDOMElement($elementValue, $elementKey, $document));
|
113 |
+
}
|
114 |
+
else
|
115 |
+
{
|
116 |
+
$element->appendChild(self::createDOMElement($elementValue, $key, $document));
|
117 |
+
}
|
118 |
+
}
|
119 |
+
|
120 |
+
if ($keyNode->hasChildNodes())
|
121 |
+
{
|
122 |
+
$element->appendChild($keyNode);
|
123 |
+
}
|
124 |
+
}
|
125 |
+
else
|
126 |
+
{
|
127 |
+
if (is_bool($value))
|
128 |
+
{
|
129 |
+
$value = $value ? 'true' : 'false';
|
130 |
+
}
|
131 |
+
|
132 |
+
$element->appendChild(self::createDOMElement($value, $key, $document));
|
133 |
+
}
|
134 |
+
}
|
135 |
+
else
|
136 |
+
{
|
137 |
+
$element->appendChild(self::createDOMElement($value, $tagName, $document));
|
138 |
+
}
|
139 |
+
}
|
140 |
+
|
141 |
+
return $element;
|
142 |
+
}
|
143 |
+
|
144 |
+
/**
|
145 |
+
* @param DOMNode $domNode
|
146 |
+
* @return array
|
147 |
+
*/
|
148 |
+
private static function createArray(DOMNode $domNode)
|
149 |
+
{
|
150 |
+
$array = array();
|
151 |
+
|
152 |
+
for ($i = 0; $i < $domNode->childNodes->length; $i++)
|
153 |
+
{
|
154 |
+
$item = $domNode->childNodes->item($i);
|
155 |
+
|
156 |
+
if ($item->nodeType === XML_ELEMENT_NODE)
|
157 |
+
{
|
158 |
+
$arrayElement = array();
|
159 |
+
|
160 |
+
for ($attributeIndex = 0; !is_null($attribute = $item->attributes->item($attributeIndex)); $attributeIndex++)
|
161 |
+
{
|
162 |
+
if ($attribute->nodeType === XML_ATTRIBUTE_NODE)
|
163 |
+
{
|
164 |
+
$arrayElement[self::ATTRIBUTES][$attribute->nodeName] = $attribute->nodeValue;
|
165 |
+
}
|
166 |
+
}
|
167 |
+
|
168 |
+
$children = self::createArray($item);
|
169 |
+
|
170 |
+
if (is_array($children))
|
171 |
+
{
|
172 |
+
$arrayElement = array_merge($arrayElement, $children);
|
173 |
+
}
|
174 |
+
else
|
175 |
+
{
|
176 |
+
$arrayElement[self::CONTENT] = $children;
|
177 |
+
}
|
178 |
+
|
179 |
+
$array[$item->nodeName][] = $arrayElement;
|
180 |
+
}
|
181 |
+
elseif ($item->nodeType === XML_CDATA_SECTION_NODE || ($item->nodeType === XML_TEXT_NODE && trim($item->nodeValue) !== ''))
|
182 |
+
{
|
183 |
+
return $item->nodeValue;
|
184 |
+
}
|
185 |
+
}
|
186 |
+
|
187 |
+
return $array;
|
188 |
+
}
|
189 |
+
}
|
sdk/Aws_v1/lib/dom/Transmogrifier.php
ADDED
@@ -0,0 +1,317 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Copyright (c) 2010-2012 [Ryan Parman](http://ryanparman.com)
|
4 |
+
* Copyright (c) 2012 Amazon.com, Inc. or its affiliates.
|
5 |
+
*
|
6 |
+
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
7 |
+
* of this software and associated documentation files (the "Software"), to deal
|
8 |
+
* in the Software without restriction, including without limitation the rights
|
9 |
+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
10 |
+
* copies of the Software, and to permit persons to whom the Software is
|
11 |
+
* furnished to do so, subject to the following conditions:
|
12 |
+
*
|
13 |
+
* The above copyright notice and this permission notice shall be included in
|
14 |
+
* all copies or substantial portions of the Software.
|
15 |
+
*
|
16 |
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
17 |
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
18 |
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
19 |
+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
20 |
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
21 |
+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
22 |
+
* THE SOFTWARE.
|
23 |
+
*
|
24 |
+
* <http://www.opensource.org/licenses/mit-license.php>
|
25 |
+
*/
|
26 |
+
|
27 |
+
|
28 |
+
/**
|
29 |
+
* Magically transmogrifies arrays into XML documents.
|
30 |
+
*/
|
31 |
+
class Transmogrifier
|
32 |
+
{
|
33 |
+
/******************************************************************************/
|
34 |
+
// CONSTANTS
|
35 |
+
|
36 |
+
const ATTRIBUTES = '__attributes__';
|
37 |
+
const CONTENT = '__content__';
|
38 |
+
|
39 |
+
|
40 |
+
/******************************************************************************/
|
41 |
+
// PUBLIC METHODS
|
42 |
+
|
43 |
+
/**
|
44 |
+
* Public method for converting an array into an XML DOMDocument object.
|
45 |
+
*
|
46 |
+
* @param array $source The source array to convert into an XML document.
|
47 |
+
* @param string $rootTagName The name to assign to the root element of the XML document. The default value is "root".
|
48 |
+
* @return string The XML document as a string.
|
49 |
+
*/
|
50 |
+
public static function to_dom(array $source, $rootTagName = 'root')
|
51 |
+
{
|
52 |
+
$document = new DOMDocument();
|
53 |
+
|
54 |
+
// Generate the document
|
55 |
+
$root = $document->createElement('root');
|
56 |
+
$root->appendChild(self::create_dom_element_from_array($source, 'member', $document));
|
57 |
+
$document->appendChild($root);
|
58 |
+
|
59 |
+
// Cleanup duplicated notes
|
60 |
+
self::cleanup($document);
|
61 |
+
|
62 |
+
return $document;
|
63 |
+
}
|
64 |
+
|
65 |
+
/**
|
66 |
+
* Public method for converting an array into an XML document.
|
67 |
+
*
|
68 |
+
* @param array $source The source array to convert into an XML document.
|
69 |
+
* @param string $rootTagName The name to assign to the root element of the XML document. The default value is "root".
|
70 |
+
* @return string The XML document as a string.
|
71 |
+
*/
|
72 |
+
public static function to_xml(array $source, $rootTagName = 'root')
|
73 |
+
{
|
74 |
+
$document = self::to_dom($source, $rootTagName);
|
75 |
+
|
76 |
+
// Output the content
|
77 |
+
$document->formatOutput = true;
|
78 |
+
return $document->saveXML();
|
79 |
+
}
|
80 |
+
|
81 |
+
|
82 |
+
/******************************************************************************/
|
83 |
+
// WORKER METHODS
|
84 |
+
|
85 |
+
/**
|
86 |
+
* Recursively iterates over each child of the array to produce an XML structure.
|
87 |
+
*
|
88 |
+
* @param mixed $source The content node that is being evaluated.
|
89 |
+
* @param string $tagName The name of the current element.
|
90 |
+
* @param DOMDocument $document The parent-most DOMDocument element that we're writing to.
|
91 |
+
* @return DOMDocumentFragment A DOM document fragment that can be appended to a parent DOM element.
|
92 |
+
*/
|
93 |
+
protected static function create_dom_element_from_array($source, $tagName, DOMDocument $document, $parent = null)
|
94 |
+
{
|
95 |
+
// Create a document fragment to hold the elements
|
96 |
+
$fragment = $document->createDocumentFragment();
|
97 |
+
|
98 |
+
if (is_numeric($tagName))
|
99 |
+
{
|
100 |
+
$tagName = $parent->tagName;
|
101 |
+
}
|
102 |
+
|
103 |
+
if (is_array($source))
|
104 |
+
{
|
105 |
+
// Indexed array
|
106 |
+
if (self::is_list($source))
|
107 |
+
{
|
108 |
+
// Loop through each entry in the array
|
109 |
+
foreach ($source as $key => $value)
|
110 |
+
{
|
111 |
+
// Create a new element where the name is the array key
|
112 |
+
$element = $document->createElement($tagName);
|
113 |
+
$fragment->appendChild($element);
|
114 |
+
|
115 |
+
// Recurse
|
116 |
+
$fragment_with_children = self::create_dom_element_from_array($value, $tagName, $document, $element);
|
117 |
+
|
118 |
+
// Verify the fragment has children before appending it
|
119 |
+
if ($fragment_with_children->hasChildNodes())
|
120 |
+
{
|
121 |
+
$element->appendChild($fragment_with_children);
|
122 |
+
}
|
123 |
+
|
124 |
+
// Figure out which nodes need to be removed
|
125 |
+
if ($parent && $parent->tagName === $tagName)
|
126 |
+
{
|
127 |
+
$parent->setAttribute('remove', true);
|
128 |
+
}
|
129 |
+
}
|
130 |
+
}
|
131 |
+
|
132 |
+
// Associative array
|
133 |
+
elseif (self::is_hash($source))
|
134 |
+
{
|
135 |
+
// Loop through each entry in the array
|
136 |
+
foreach ($source as $key => $value)
|
137 |
+
{
|
138 |
+
// Handle custom attributes
|
139 |
+
if ($key === self::ATTRIBUTES)
|
140 |
+
{
|
141 |
+
foreach ($value as $attributeName => $attributeValue)
|
142 |
+
{
|
143 |
+
$parent->setAttribute($attributeName, $attributeValue);
|
144 |
+
}
|
145 |
+
}
|
146 |
+
|
147 |
+
// Handle content nodes
|
148 |
+
elseif ($key === self::CONTENT)
|
149 |
+
{
|
150 |
+
$parent->appendChild($document->createCDATASection($value));
|
151 |
+
}
|
152 |
+
|
153 |
+
else
|
154 |
+
{
|
155 |
+
// Create a new element where the name is the array key
|
156 |
+
$element = $document->createElement($key);
|
157 |
+
$fragment->appendChild($element);
|
158 |
+
|
159 |
+
// Recurse
|
160 |
+
$fragment_with_children = self::create_dom_element_from_array($value, $key, $document, $element);
|
161 |
+
|
162 |
+
// Verify the fragment has children before appending it
|
163 |
+
if ($fragment_with_children->hasChildNodes())
|
164 |
+
{
|
165 |
+
$element->appendChild($fragment_with_children);
|
166 |
+
}
|
167 |
+
}
|
168 |
+
}
|
169 |
+
}
|
170 |
+
}
|
171 |
+
|
172 |
+
// Content node
|
173 |
+
else
|
174 |
+
{
|
175 |
+
$fragment->appendChild(self::handle_content($source, $document, $parent));
|
176 |
+
}
|
177 |
+
|
178 |
+
return $fragment;
|
179 |
+
}
|
180 |
+
|
181 |
+
/**
|
182 |
+
* Handle nodes that are only content.
|
183 |
+
*
|
184 |
+
* @param mixed $content The content node to handle.
|
185 |
+
* @param DOMDocument $document The parent-most DOMDocument element that we're writing to.
|
186 |
+
* @param DOMElement $element The parent node of the content to mark as encoded.
|
187 |
+
* @return DOMDocumentFragment A DOM document fragment that can be appended to a parent DOM element.
|
188 |
+
*/
|
189 |
+
protected static function handle_content($content, DOMDocument $document, DOMElement $element)
|
190 |
+
{
|
191 |
+
$fragment = $document->createDocumentFragment();
|
192 |
+
|
193 |
+
// boolean
|
194 |
+
if (is_bool($content))
|
195 |
+
{
|
196 |
+
$fragment->appendChild(
|
197 |
+
$document->createCDATASection(
|
198 |
+
($content ? 'true' : 'false')
|
199 |
+
)
|
200 |
+
);
|
201 |
+
}
|
202 |
+
|
203 |
+
// numbers
|
204 |
+
elseif (is_numeric($content))
|
205 |
+
{
|
206 |
+
$fragment->appendChild(
|
207 |
+
$document->createTextNode($content)
|
208 |
+
);
|
209 |
+
}
|
210 |
+
|
211 |
+
// strings?
|
212 |
+
else
|
213 |
+
{
|
214 |
+
// Handle NULL bytes
|
215 |
+
if (strpos($content, "\0") !== false)
|
216 |
+
{
|
217 |
+
$content = 'json_encoded::' . json_encode($content);
|
218 |
+
$element->setAttribute('encoded', 'json');
|
219 |
+
}
|
220 |
+
|
221 |
+
$fragment->appendChild(
|
222 |
+
$document->createCDATASection($content)
|
223 |
+
);
|
224 |
+
}
|
225 |
+
|
226 |
+
return $fragment;
|
227 |
+
}
|
228 |
+
|
229 |
+
/**
|
230 |
+
* Clean-up the duplicate nodes caused by not being able to reference
|
231 |
+
* grandparent nodes during the recursion flow.
|
232 |
+
*
|
233 |
+
* @param DOMDocument $document The XML document to clean-up.
|
234 |
+
* @return DOMDocument The original XML document.
|
235 |
+
*/
|
236 |
+
protected static function cleanup(DOMDocument $document)
|
237 |
+
{
|
238 |
+
// Find matches
|
239 |
+
$xpath = new DOMXPath($document);
|
240 |
+
$entries = $xpath->query('//*[@remove]');
|
241 |
+
|
242 |
+
// Loop through matches and find each node with a "remove" attribute
|
243 |
+
foreach ($entries as $entry)
|
244 |
+
{
|
245 |
+
// Grab a reference to this so that it doesn't dynamically move on us
|
246 |
+
$next_sibling = $entry->nextSibling;
|
247 |
+
|
248 |
+
// Look through each child node and add it to the parent node
|
249 |
+
while ($entry->childNodes->length > 0)
|
250 |
+
{
|
251 |
+
// If there's a next sibling, let's insert before it
|
252 |
+
if ($next_sibling)
|
253 |
+
{
|
254 |
+
$entry->parentNode->insertBefore($entry->childNodes->item(0), $next_sibling);
|
255 |
+
}
|
256 |
+
|
257 |
+
// Otherwise, just add it to the end
|
258 |
+
else
|
259 |
+
{
|
260 |
+
$entry->parentNode->appendChild($entry->childNodes->item(0));
|
261 |
+
}
|
262 |
+
}
|
263 |
+
|
264 |
+
// If there aren't any more child nodes, remove the entry
|
265 |
+
if (!$entry->hasChildNodes())
|
266 |
+
{
|
267 |
+
$entry->parentNode->removeChild($entry);
|
268 |
+
}
|
269 |
+
}
|
270 |
+
}
|
271 |
+
|
272 |
+
|
273 |
+
/******************************************************************************/
|
274 |
+
// UTILITY METHODS
|
275 |
+
|
276 |
+
/**
|
277 |
+
* Method that checks to see if the array is indexed.
|
278 |
+
*
|
279 |
+
* @param array $array The array to test.
|
280 |
+
* @return boolean Whether or not the array is indexed. A value of true means that the array is indexed. A value of false means that the array is associative.
|
281 |
+
*/
|
282 |
+
protected static function is_list(array $array)
|
283 |
+
{
|
284 |
+
foreach ($array as $key => $value)
|
285 |
+
{
|
286 |
+
// If any keys are non-numeric...
|
287 |
+
if (!is_numeric($key))
|
288 |
+
{
|
289 |
+
// Then this is not a list
|
290 |
+
return false;
|
291 |
+
}
|
292 |
+
}
|
293 |
+
|
294 |
+
return true;
|
295 |
+
}
|
296 |
+
|
297 |
+
/**
|
298 |
+
* Method that checks to see if the array is associative.
|
299 |
+
*
|
300 |
+
* @param array $array The array to test.
|
301 |
+
* @return boolean Whether or not the array is associative. A value of true means that the array is associative. A value of false means that the array is indexed.
|
302 |
+
*/
|
303 |
+
protected static function is_hash(array $array)
|
304 |
+
{
|
305 |
+
foreach ($array as $key => $value)
|
306 |
+
{
|
307 |
+
// If any keys are non-numeric...
|
308 |
+
if (!is_numeric($key))
|
309 |
+
{
|
310 |
+
// Then this is a hash
|
311 |
+
return true;
|
312 |
+
}
|
313 |
+
}
|
314 |
+
|
315 |
+
return false;
|
316 |
+
}
|
317 |
+
}
|
sdk/Aws_v1/lib/requestcore/LICENSE
ADDED
@@ -0,0 +1,25 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
Copyright (c) 2006-2010 Ryan Parman, Foleeo Inc., and contributors. All rights reserved.
|
2 |
+
|
3 |
+
Redistribution and use in source and binary forms, with or without modification, are
|
4 |
+
permitted provided that the following conditions are met:
|
5 |
+
|
6 |
+
* Redistributions of source code must retain the above copyright notice, this list of
|
7 |
+
conditions and the following disclaimer.
|
8 |
+
|
9 |
+
* Redistributions in binary form must reproduce the above copyright notice, this list
|
10 |
+
of conditions and the following disclaimer in the documentation and/or other materials
|
11 |
+
provided with the distribution.
|
12 |
+
|
13 |
+
* Neither the name of Ryan Parman, Foleeo Inc. nor the names of its contributors may be used to
|
14 |
+
endorse or promote products derived from this software without specific prior written
|
15 |
+
permission.
|
16 |
+
|
17 |
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
|
18 |
+
OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
|
19 |
+
AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
|
20 |
+
AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
21 |
+
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
22 |
+
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
23 |
+
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
24 |
+
OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
25 |
+
POSSIBILITY OF SUCH DAMAGE.
|
sdk/Aws_v1/lib/requestcore/README.md
ADDED
@@ -0,0 +1,15 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# RequestCore
|
2 |
+
|
3 |
+
RequestCore is a lightweight cURL-based HTTP request/response class that leverages MultiCurl for parallel requests.
|
4 |
+
|
5 |
+
### PEAR HTTP_Request?
|
6 |
+
|
7 |
+
RequestCore was written as a replacement for [PEAR HTTP_Request](http://pear.php.net/http_request/). While PEAR HTTP_Request is full-featured and heavy, RequestCore features only the essentials and is very lightweight. It also leverages the batch request support in cURL's `curl_multi_exec()` to enable multi-threaded requests that fire in parallel.
|
8 |
+
|
9 |
+
### Reference and Download
|
10 |
+
|
11 |
+
You can find the class reference at <http://skyzyx.github.com/requestcore/>. You can get the code from <http://github.com/skyzyx/requestcore>.
|
12 |
+
|
13 |
+
### License and Copyright
|
14 |
+
|
15 |
+
This code is Copyright (c) 2008-2010, Ryan Parman. However, I'm licensing this code for others to use under the [Simplified BSD license](http://www.opensource.org/licenses/bsd-license.php).
|
sdk/Aws_v1/lib/requestcore/cacert.pem
ADDED
@@ -0,0 +1,3390 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
##
|
2 |
+
## ca-bundle.crt -- Bundle of CA Root Certificates
|
3 |
+
##
|
4 |
+
## Certificate data from Mozilla as of: Wed Jan 18 00:04:16 2012
|
5 |
+
##
|
6 |
+
## This is a bundle of X.509 certificates of public Certificate Authorities
|
7 |
+
## (CA). These were automatically extracted from Mozilla's root certificates
|
8 |
+
## file (certdata.txt). This file can be found in the mozilla source tree:
|
9 |
+
## http://mxr.mozilla.org/mozilla/source/security/nss/lib/ckfw/builtins/certdata.txt?raw=1
|
10 |
+
##
|
11 |
+
## It contains the certificates in PEM format and therefore
|
12 |
+
## can be directly used with curl / libcurl / php_curl, or with
|
13 |
+
## an Apache+mod_ssl webserver for SSL client authentication.
|
14 |
+
## Just configure this file as the SSLCACertificateFile.
|
15 |
+
##
|
16 |
+
|
17 |
+
# ***** BEGIN LICENSE BLOCK *****
|
18 |
+
# Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
19 |
+
#
|
20 |
+
# The contents of this file are subject to the Mozilla Public License Version
|
21 |
+
# 1.1 (the "License"); you may not use this file except in compliance with
|
22 |
+
# the License. You may obtain a copy of the License at
|
23 |
+
# http://www.mozilla.org/MPL/
|
24 |
+
#
|
25 |
+
# Software distributed under the License is distributed on an "AS IS" basis,
|
26 |
+
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
27 |
+
# for the specific language governing rights and limitations under the
|
28 |
+
# License.
|
29 |
+
#
|
30 |
+
# The Original Code is the Netscape security libraries.
|
31 |
+
#
|
32 |
+
# The Initial Developer of the Original Code is
|
33 |
+
# Netscape Communications Corporation.
|
34 |
+
# Portions created by the Initial Developer are Copyright (C) 1994-2000
|
35 |
+
# the Initial Developer. All Rights Reserved.
|
36 |
+
#
|
37 |
+
# Contributor(s):
|
38 |
+
#
|
39 |
+
# Alternatively, the contents of this file may be used under the terms of
|
40 |
+
# either the GNU General Public License Version 2 or later (the "GPL"), or
|
41 |
+
# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
42 |
+
# in which case the provisions of the GPL or the LGPL are applicable instead
|
43 |
+
# of those above. If you wish to allow use of your version of this file only
|
44 |
+
# under the terms of either the GPL or the LGPL, and not to allow others to
|
45 |
+
# use your version of this file under the terms of the MPL, indicate your
|
46 |
+
# decision by deleting the provisions above and replace them with the notice
|
47 |
+
# and other provisions required by the GPL or the LGPL. If you do not delete
|
48 |
+
# the provisions above, a recipient may use your version of this file under
|
49 |
+
# the terms of any one of the MPL, the GPL or the LGPL.
|
50 |
+
#
|
51 |
+
# ***** END LICENSE BLOCK *****
|
52 |
+
# @(#) $RCSfile: certdata.txt,v $ $Revision: 1.81 $ $Date: 2012/01/17 22:02:37 $
|
53 |
+
|
54 |
+
GTE CyberTrust Global Root
|
55 |
+
==========================
|
56 |
+
-----BEGIN CERTIFICATE-----
|
57 |
+
MIICWjCCAcMCAgGlMA0GCSqGSIb3DQEBBAUAMHUxCzAJBgNVBAYTAlVTMRgwFgYDVQQKEw9HVEUg
|
58 |
+
Q29ycG9yYXRpb24xJzAlBgNVBAsTHkdURSBDeWJlclRydXN0IFNvbHV0aW9ucywgSW5jLjEjMCEG
|
59 |
+
A1UEAxMaR1RFIEN5YmVyVHJ1c3QgR2xvYmFsIFJvb3QwHhcNOTgwODEzMDAyOTAwWhcNMTgwODEz
|
60 |
+
MjM1OTAwWjB1MQswCQYDVQQGEwJVUzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQL
|
61 |
+
Ex5HVEUgQ3liZXJUcnVzdCBTb2x1dGlvbnMsIEluYy4xIzAhBgNVBAMTGkdURSBDeWJlclRydXN0
|
62 |
+
IEdsb2JhbCBSb290MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCVD6C28FCc6HrHiM3dFw4u
|
63 |
+
sJTQGz0O9pTAipTHBsiQl8i4ZBp6fmw8U+E3KHNgf7KXUwefU/ltWJTSr41tiGeA5u2ylc9yMcql
|
64 |
+
HHK6XALnZELn+aks1joNrI1CqiQBOeacPwGFVw1Yh0X404Wqk2kmhXBIgD8SFcd5tB8FLztimQID
|
65 |
+
AQABMA0GCSqGSIb3DQEBBAUAA4GBAG3rGwnpXtlR22ciYaQqPEh346B8pt5zohQDhT37qw4wxYMW
|
66 |
+
M4ETCJ57NE7fQMh017l93PR2VX2bY1QY6fDq81yx2YtCHrnAlU66+tXifPVoYb+O7AWXX1uw16OF
|
67 |
+
NMQkpw0PlZPvy5TYnh+dXIVtx6quTx8itc2VrbqnzPmrC3p/
|
68 |
+
-----END CERTIFICATE-----
|
69 |
+
|
70 |
+
Thawte Server CA
|
71 |
+
================
|
72 |
+
-----BEGIN CERTIFICATE-----
|
73 |
+
MIIDEzCCAnygAwIBAgIBATANBgkqhkiG9w0BAQQFADCBxDELMAkGA1UEBhMCWkExFTATBgNVBAgT
|
74 |
+
DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29uc3Vs
|
75 |
+
dGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcGA1UE
|
76 |
+
AxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5j
|
77 |
+
b20wHhcNOTYwODAxMDAwMDAwWhcNMjAxMjMxMjM1OTU5WjCBxDELMAkGA1UEBhMCWkExFTATBgNV
|
78 |
+
BAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29u
|
79 |
+
c3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcG
|
80 |
+
A1UEAxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0
|
81 |
+
ZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANOkUG7I/1Zr5s9dtuoMaHVHoqrC2oQl
|
82 |
+
/Kj0R1HahbUgdJSGHg91yekIYfUGbTBuFRkC6VLAYttNmZ7iagxEOM3+vuNkCXDF/rFrKbYvScg7
|
83 |
+
1CcEJRCXL+eQbcAoQpnXTEPew/UhbVSfXcNY4cDk2VuwuNy0e982OsK1ZiIS1ocNAgMBAAGjEzAR
|
84 |
+
MA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAB/pMaVz7lcxG7oWDTSEwjsrZqG9J
|
85 |
+
GubaUeNgcGyEYRGhGshIPllDfU+VPaGLtwtimHp1it2ITk6eQNuozDJ0uW8NxuOzRAvZim+aKZuZ
|
86 |
+
GCg70eNAKJpaPNW15yAbi8qkq43pUdniTCxZqdq5snUb9kLy78fyGPmJvKP/iiMucEc=
|
87 |
+
-----END CERTIFICATE-----
|
88 |
+
|
89 |
+
Thawte Premium Server CA
|
90 |
+
========================
|
91 |
+
-----BEGIN CERTIFICATE-----
|
92 |
+
MIIDJzCCApCgAwIBAgIBATANBgkqhkiG9w0BAQQFADCBzjELMAkGA1UEBhMCWkExFTATBgNVBAgT
|
93 |
+
DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29uc3Vs
|
94 |
+
dGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UE
|
95 |
+
AxMYVGhhd3RlIFByZW1pdW0gU2VydmVyIENBMSgwJgYJKoZIhvcNAQkBFhlwcmVtaXVtLXNlcnZl
|
96 |
+
ckB0aGF3dGUuY29tMB4XDTk2MDgwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgc4xCzAJBgNVBAYT
|
97 |
+
AlpBMRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsGA1UEChMU
|
98 |
+
VGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRpb24gU2VydmljZXMgRGl2
|
99 |
+
aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQcmVtaXVtIFNlcnZlciBDQTEoMCYGCSqGSIb3DQEJARYZ
|
100 |
+
cHJlbWl1bS1zZXJ2ZXJAdGhhd3RlLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0jY2
|
101 |
+
aovXwlue2oFBYo847kkEVdbQ7xwblRZH7xhINTpS9CtqBo87L+pW46+GjZ4X9560ZXUCTe/LCaIh
|
102 |
+
Udib0GfQug2SBhRz1JPLlyoAnFxODLz6FVL88kRu2hFKbgifLy3j+ao6hnO2RlNYyIkFvYMRuHM/
|
103 |
+
qgeN9EJN50CdHDcCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQQFAAOBgQAm
|
104 |
+
SCwWwlj66BZ0DKqqX1Q/8tfJeGBeXm43YyJ3Nn6yF8Q0ufUIhfzJATj/Tb7yFkJD57taRvvBxhEf
|
105 |
+
8UqwKEbJw8RCfbz6q1lu1bdRiBHjpIUZa4JMpAwSremkrj/xw0llmozFyD4lt5SZu5IycQfwhl7t
|
106 |
+
UCemDaYj+bvLpgcUQg==
|
107 |
+
-----END CERTIFICATE-----
|
108 |
+
|
109 |
+
Equifax Secure CA
|
110 |
+
=================
|
111 |
+
-----BEGIN CERTIFICATE-----
|
112 |
+
MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJVUzEQMA4GA1UE
|
113 |
+
ChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5
|
114 |
+
MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoT
|
115 |
+
B0VxdWlmYXgxLTArBgNVBAsTJEVxdWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTCB
|
116 |
+
nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2RFGiYCh7+2gRvE4RiIcPR
|
117 |
+
fM6fBeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP/PvwDN1Dulsr4R+AcJkVV5MW
|
118 |
+
8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/FP3gx7kCAwEAAaOCAQkwggEFMHAG
|
119 |
+
A1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UE
|
120 |
+
CxMkRXF1aWZheCBTZWN1cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoG
|
121 |
+
A1UdEAQTMBGBDzIwMTgwODIyMTY0MTUxWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvS
|
122 |
+
spXXR9gjIBBPM5iQn9QwHQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQFMAMB
|
123 |
+
Af8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUAA4GBAFjOKer89961
|
124 |
+
zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y7qj/WsjTVbJmcVfewCHrPSqnI0kB
|
125 |
+
BIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee95
|
126 |
+
70+sB3c4
|
127 |
+
-----END CERTIFICATE-----
|
128 |
+
|
129 |
+
Digital Signature Trust Co. Global CA 1
|
130 |
+
=======================================
|
131 |
+
-----BEGIN CERTIFICATE-----
|
132 |
+
MIIDKTCCApKgAwIBAgIENnAVljANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJVUzEkMCIGA1UE
|
133 |
+
ChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMREwDwYDVQQLEwhEU1RDQSBFMTAeFw05ODEy
|
134 |
+
MTAxODEwMjNaFw0xODEyMTAxODQwMjNaMEYxCzAJBgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFs
|
135 |
+
IFNpZ25hdHVyZSBUcnVzdCBDby4xETAPBgNVBAsTCERTVENBIEUxMIGdMA0GCSqGSIb3DQEBAQUA
|
136 |
+
A4GLADCBhwKBgQCgbIGpzzQeJN3+hijM3oMv+V7UQtLodGBmE5gGHKlREmlvMVW5SXIACH7TpWJE
|
137 |
+
NySZj9mDSI+ZbZUTu0M7LklOiDfBu1h//uG9+LthzfNHwJmm8fOR6Hh8AMthyUQncWlVSn5JTe2i
|
138 |
+
o74CTADKAqjuAQIxZA9SLRN0dja1erQtcQIBA6OCASQwggEgMBEGCWCGSAGG+EIBAQQEAwIABzBo
|
139 |
+
BgNVHR8EYTBfMF2gW6BZpFcwVTELMAkGA1UEBhMCVVMxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0
|
140 |
+
dXJlIFRydXN0IENvLjERMA8GA1UECxMIRFNUQ0EgRTExDTALBgNVBAMTBENSTDEwKwYDVR0QBCQw
|
141 |
+
IoAPMTk5ODEyMTAxODEwMjNagQ8yMDE4MTIxMDE4MTAyM1owCwYDVR0PBAQDAgEGMB8GA1UdIwQY
|
142 |
+
MBaAFGp5fpFpRhgTCgJ3pVlbYJglDqL4MB0GA1UdDgQWBBRqeX6RaUYYEwoCd6VZW2CYJQ6i+DAM
|
143 |
+
BgNVHRMEBTADAQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqGSIb3DQEBBQUAA4GB
|
144 |
+
ACIS2Hod3IEGtgllsofIH160L+nEHvI8wbsEkBFKg05+k7lNQseSJqBcNJo4cvj9axY+IO6CizEq
|
145 |
+
kzaFI4iKPANo08kJD038bKTaKHKTDomAsH3+gG9lbRgzl4vCa4nuYD3Im+9/KzJic5PLPON74nZ4
|
146 |
+
RbyhkwS7hp86W0N6w4pl
|
147 |
+
-----END CERTIFICATE-----
|
148 |
+
|
149 |
+
Digital Signature Trust Co. Global CA 3
|
150 |
+
=======================================
|
151 |
+
-----BEGIN CERTIFICATE-----
|
152 |
+
MIIDKTCCApKgAwIBAgIENm7TzjANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJVUzEkMCIGA1UE
|
153 |
+
ChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMREwDwYDVQQLEwhEU1RDQSBFMjAeFw05ODEy
|
154 |
+
MDkxOTE3MjZaFw0xODEyMDkxOTQ3MjZaMEYxCzAJBgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFs
|
155 |
+
IFNpZ25hdHVyZSBUcnVzdCBDby4xETAPBgNVBAsTCERTVENBIEUyMIGdMA0GCSqGSIb3DQEBAQUA
|
156 |
+
A4GLADCBhwKBgQC/k48Xku8zExjrEH9OFr//Bo8qhbxe+SSmJIi2A7fBw18DW9Fvrn5C6mYjuGOD
|
157 |
+
VvsoLeE4i7TuqAHhzhy2iCoiRoX7n6dwqUcUP87eZfCocfdPJmyMvMa1795JJ/9IKn3oTQPMx7JS
|
158 |
+
xhcxEzu1TdvIxPbDDyQq2gyd55FbgM2UnQIBA6OCASQwggEgMBEGCWCGSAGG+EIBAQQEAwIABzBo
|
159 |
+
BgNVHR8EYTBfMF2gW6BZpFcwVTELMAkGA1UEBhMCVVMxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0
|
160 |
+
dXJlIFRydXN0IENvLjERMA8GA1UECxMIRFNUQ0EgRTIxDTALBgNVBAMTBENSTDEwKwYDVR0QBCQw
|
161 |
+
IoAPMTk5ODEyMDkxOTE3MjZagQ8yMDE4MTIwOTE5MTcyNlowCwYDVR0PBAQDAgEGMB8GA1UdIwQY
|
162 |
+
MBaAFB6CTShlgDzJQW6sNS5ay97u+DlbMB0GA1UdDgQWBBQegk0oZYA8yUFurDUuWsve7vg5WzAM
|
163 |
+
BgNVHRMEBTADAQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqGSIb3DQEBBQUAA4GB
|
164 |
+
AEeNg61i8tuwnkUiBbmi1gMOOHLnnvx75pO2mqWilMg0HZHRxdf0CiUPPXiBng+xZ8SQTGPdXqfi
|
165 |
+
up/1902lMXucKS1M/mQ+7LZT/uqb7YLbdHVLB3luHtgZg3Pe9T7Qtd7nS2h9Qy4qIOF+oHhEngj1
|
166 |
+
mPnHfxsb1gYgAlihw6ID
|
167 |
+
-----END CERTIFICATE-----
|
168 |
+
|
169 |
+
Verisign Class 3 Public Primary Certification Authority
|
170 |
+
=======================================================
|
171 |
+
-----BEGIN CERTIFICATE-----
|
172 |
+
MIICPDCCAaUCEHC65B0Q2Sk0tjjKewPMur8wDQYJKoZIhvcNAQECBQAwXzELMAkGA1UEBhMCVVMx
|
173 |
+
FzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmltYXJ5
|
174 |
+
IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVow
|
175 |
+
XzELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAz
|
176 |
+
IFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUA
|
177 |
+
A4GNADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhEBarsAx94
|
178 |
+
f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/isI19wKTakyYbnsZogy1Ol
|
179 |
+
hec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0GCSqGSIb3DQEBAgUAA4GBALtMEivPLCYA
|
180 |
+
TxQT3ab7/AoRhIzzKBxnki98tsX63/Dolbwdj2wsqFHMc9ikwFPwTtYmwHYBV4GSXiHx0bH/59Ah
|
181 |
+
WM1pF+NEHJwZRDmJXNycAA9WjQKZ7aKQRUzkuxCkPfAyAw7xzvjoyVGM5mKf5p/AfbdynMk2Omuf
|
182 |
+
Tqj/ZA1k
|
183 |
+
-----END CERTIFICATE-----
|
184 |
+
|
185 |
+
Verisign Class 3 Public Primary Certification Authority - G2
|
186 |
+
============================================================
|
187 |
+
-----BEGIN CERTIFICATE-----
|
188 |
+
MIIDAjCCAmsCEH3Z/gfPqB63EHln+6eJNMYwDQYJKoZIhvcNAQEFBQAwgcExCzAJBgNVBAYTAlVT
|
189 |
+
MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMgUHJpbWFy
|
190 |
+
eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln
|
191 |
+
biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz
|
192 |
+
dCBOZXR3b3JrMB4XDTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVT
|
193 |
+
MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMgUHJpbWFy
|
194 |
+
eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln
|
195 |
+
biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz
|
196 |
+
dCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDMXtERXVxp0KvTuWpMmR9ZmDCO
|
197 |
+
FoUgRm1HP9SFIIThbbP4pO0M8RcPO/mn+SXXwc+EY/J8Y8+iR/LGWzOOZEAEaMGAuWQcRXfH2G71
|
198 |
+
lSk8UOg013gfqLptQ5GVj0VXXn7F+8qkBOvqlzdUMG+7AUcyM83cV5tkaWH4mx0ciU9cZwIDAQAB
|
199 |
+
MA0GCSqGSIb3DQEBBQUAA4GBAFFNzb5cy5gZnBWyATl4Lk0PZ3BwmcYQWpSkU01UbSuvDV1Ai2TT
|
200 |
+
1+7eVmGSX6bEHRBhNtMsJzzoKQm5EWR0zLVznxxIqbxhAe7iF6YM40AIOw7n60RzKprxaZLvcRTD
|
201 |
+
Oaxxp5EJb+RxBrO6WVcmeQD2+A2iMzAo1KpYoJ2daZH9
|
202 |
+
-----END CERTIFICATE-----
|
203 |
+
|
204 |
+
GlobalSign Root CA
|
205 |
+
==================
|
206 |
+
-----BEGIN CERTIFICATE-----
|
207 |
+
MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkGA1UEBhMCQkUx
|
208 |
+
GTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jvb3QgQ0ExGzAZBgNVBAMTEkds
|
209 |
+
b2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAwMDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNV
|
210 |
+
BAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYD
|
211 |
+
VQQDExJHbG9iYWxTaWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDa
|
212 |
+
DuaZjc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavpxy0Sy6sc
|
213 |
+
THAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp1Wrjsok6Vjk4bwY8iGlb
|
214 |
+
Kk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdGsnUOhugZitVtbNV4FpWi6cgKOOvyJBNP
|
215 |
+
c1STE4U6G7weNLWLBYy5d4ux2x8gkasJU26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrX
|
216 |
+
gzT/LCrBbBlDSgeF59N89iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV
|
217 |
+
HRMBAf8EBTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0BAQUF
|
218 |
+
AAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOzyj1hTdNGCbM+w6Dj
|
219 |
+
Y1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE38NflNUVyRRBnMRddWQVDf9VMOyG
|
220 |
+
j/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymPAbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhH
|
221 |
+
hm4qxFYxldBniYUr+WymXUadDKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveC
|
222 |
+
X4XSQRjbgbMEHMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A==
|
223 |
+
-----END CERTIFICATE-----
|
224 |
+
|
225 |
+
GlobalSign Root CA - R2
|
226 |
+
=======================
|
227 |
+
-----BEGIN CERTIFICATE-----
|
228 |
+
MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4GA1UECxMXR2xv
|
229 |
+
YmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh
|
230 |
+
bFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT
|
231 |
+
aWduIFJvb3QgQ0EgLSBSMjETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln
|
232 |
+
bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6
|
233 |
+
ErPLv4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8eoLrvozp
|
234 |
+
s6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklqtTleiDTsvHgMCJiEbKjN
|
235 |
+
S7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzdC9XZzPnqJworc5HGnRusyMvo4KD0L5CL
|
236 |
+
TfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pazq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6C
|
237 |
+
ygPCm48CAwEAAaOBnDCBmTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E
|
238 |
+
FgQUm+IHV2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5nbG9i
|
239 |
+
YWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG3lm0mi3f3BmGLjAN
|
240 |
+
BgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4GsJ0/WwbgcQ3izDJr86iw8bmEbTUsp
|
241 |
+
9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu
|
242 |
+
01yiPqFbQfXf5WRDLenVOavSot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG7
|
243 |
+
9G+dwfCMNYxdAfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7
|
244 |
+
TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg==
|
245 |
+
-----END CERTIFICATE-----
|
246 |
+
|
247 |
+
ValiCert Class 1 VA
|
248 |
+
===================
|
249 |
+
-----BEGIN CERTIFICATE-----
|
250 |
+
MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRp
|
251 |
+
b24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
|
252 |
+
YXNzIDEgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZh
|
253 |
+
bGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNTIy
|
254 |
+
MjM0OFoXDTE5MDYyNTIyMjM0OFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0
|
255 |
+
d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDEg
|
256 |
+
UG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0
|
257 |
+
LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMIGfMA0GCSqGSIb3DQEBAQUA
|
258 |
+
A4GNADCBiQKBgQDYWYJ6ibiWuqYvaG9YLqdUHAZu9OqNSLwxlBfw8068srg1knaw0KWlAdcAAxIi
|
259 |
+
GQj4/xEjm84H9b9pGib+TunRf50sQB1ZaG6m+FiwnRqP0z/x3BkGgagO4DrdyFNFCQbmD3DD+kCm
|
260 |
+
DuJWBQ8YTfwggtFzVXSNdnKgHZ0dwN0/cQIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFBoPUn0LBwG
|
261 |
+
lN+VYH+Wexf+T3GtZMjdd9LvWVXoP+iOBSoh8gfStadS/pyxtuJbdxdA6nLWI8sogTLDAHkY7FkX
|
262 |
+
icnGah5xyf23dKUlRWnFSKsZ4UWKJWsZ7uW7EvV/96aNUcPwnXS3qT6gpf+2SQMT2iLM7XGCK5nP
|
263 |
+
Orf1LXLI
|
264 |
+
-----END CERTIFICATE-----
|
265 |
+
|
266 |
+
ValiCert Class 2 VA
|
267 |
+
===================
|
268 |
+
-----BEGIN CERTIFICATE-----
|
269 |
+
MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRp
|
270 |
+
b24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
|
271 |
+
YXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZh
|
272 |
+
bGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAw
|
273 |
+
MTk1NFoXDTE5MDYyNjAwMTk1NFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0
|
274 |
+
d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDIg
|
275 |
+
UG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0
|
276 |
+
LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMIGfMA0GCSqGSIb3DQEBAQUA
|
277 |
+
A4GNADCBiQKBgQDOOnHK5avIWZJV16vYdA757tn2VUdZZUcOBVXc65g2PFxTXdMwzzjsvUGJ7SVC
|
278 |
+
CSRrCl6zfN1SLUzm1NZ9WlmpZdRJEy0kTRxQb7XBhVQ7/nHk01xC+YDgkRoKWzk2Z/M/VXwbP7Rf
|
279 |
+
ZHM047QSv4dk+NoS/zcnwbNDu+97bi5p9wIDAQABMA0GCSqGSIb3DQEBBQUAA4GBADt/UG9vUJSZ
|
280 |
+
SWI4OB9L+KXIPqeCgfYrx+jFzug6EILLGACOTb2oWH+heQC1u+mNr0HZDzTuIYEZoDJJKPTEjlbV
|
281 |
+
UjP9UNV+mWwD5MlM/Mtsq2azSiGM5bUMMj4QssxsodyamEwCW/POuZ6lcg5Ktz885hZo+L7tdEy8
|
282 |
+
W9ViH0Pd
|
283 |
+
-----END CERTIFICATE-----
|
284 |
+
|
285 |
+
RSA Root Certificate 1
|
286 |
+
======================
|
287 |
+
-----BEGIN CERTIFICATE-----
|
288 |
+
MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRp
|
289 |
+
b24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
|
290 |
+
YXNzIDMgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZh
|
291 |
+
bGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAw
|
292 |
+
MjIzM1oXDTE5MDYyNjAwMjIzM1owgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0
|
293 |
+
d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDMg
|
294 |
+
UG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0
|
295 |
+
LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMIGfMA0GCSqGSIb3DQEBAQUA
|
296 |
+
A4GNADCBiQKBgQDjmFGWHOjVsQaBalfDcnWTq8+epvzzFlLWLU2fNUSoLgRNB0mKOCn1dzfnt6td
|
297 |
+
3zZxFJmP3MKS8edgkpfs2Ejcv8ECIMYkpChMMFp2bbFc893enhBxoYjHW5tBbcqwuI4V7q0zK89H
|
298 |
+
BFx1cQqYJJgpp0lZpd34t0NiYfPT4tBVPwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFa7AliEZwgs
|
299 |
+
3x/be0kz9dNnnfS0ChCzycUs4pJqcXgn8nCDQtM+z6lU9PHYkhaM0QTLS6vJn0WuPIqpsHEzXcjF
|
300 |
+
V9+vqDWzf4mH6eglkrh/hXqu1rweN1gqZ8mRzyqBPu3GOd/APhmcGcwTTYJBtYze4D1gCCAPRX5r
|
301 |
+
on+jjBXu
|
302 |
+
-----END CERTIFICATE-----
|
303 |
+
|
304 |
+
Verisign Class 3 Public Primary Certification Authority - G3
|
305 |
+
============================================================
|
306 |
+
-----BEGIN CERTIFICATE-----
|
307 |
+
MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV
|
308 |
+
UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv
|
309 |
+
cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
|
310 |
+
IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh
|
311 |
+
dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw
|
312 |
+
CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy
|
313 |
+
dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv
|
314 |
+
cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkg
|
315 |
+
Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
|
316 |
+
ggEBAMu6nFL8eB8aHm8bN3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1
|
317 |
+
EUGO+i2tKmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGukxUc
|
318 |
+
cLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBmCC+Vk7+qRy+oRpfw
|
319 |
+
EuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJXwzw3sJ2zq/3avL6QaaiMxTJ5Xpj
|
320 |
+
055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWuimi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA
|
321 |
+
ERSWwauSCPc/L8my/uRan2Te2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5f
|
322 |
+
j267Cz3qWhMeDGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC
|
323 |
+
/Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565pF4ErWjfJXir0
|
324 |
+
xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGtTxzhT5yvDwyd93gN2PQ1VoDa
|
325 |
+
t20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ==
|
326 |
+
-----END CERTIFICATE-----
|
327 |
+
|
328 |
+
Verisign Class 4 Public Primary Certification Authority - G3
|
329 |
+
============================================================
|
330 |
+
-----BEGIN CERTIFICATE-----
|
331 |
+
MIIEGjCCAwICEQDsoKeLbnVqAc/EfMwvlF7XMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV
|
332 |
+
UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv
|
333 |
+
cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
|
334 |
+
IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh
|
335 |
+
dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw
|
336 |
+
CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy
|
337 |
+
dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv
|
338 |
+
cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDQgUHVibGljIFByaW1hcnkg
|
339 |
+
Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
|
340 |
+
ggEBAK3LpRFpxlmr8Y+1GQ9Wzsy1HyDkniYlS+BzZYlZ3tCD5PUPtbut8XzoIfzk6AzufEUiGXaS
|
341 |
+
tBO3IFsJ+mGuqPKljYXCKtbeZjbSmwL0qJJgfJxptI8kHtCGUvYynEFYHiK9zUVilQhu0GbdU6LM
|
342 |
+
8BDcVHOLBKFGMzNcF0C5nk3T875Vg+ixiY5afJqWIpA7iCXy0lOIAgwLePLmNxdLMEYH5IBtptiW
|
343 |
+
Lugs+BGzOA1mppvqySNb247i8xOOGlktqgLw7KSHZtzBP/XYufTsgsbSPZUd5cBPhMnZo0QoBmrX
|
344 |
+
Razwa2rvTl/4EYIeOGM0ZlDUPpNz+jDDZq3/ky2X7wMCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA
|
345 |
+
j/ola09b5KROJ1WrIhVZPMq1CtRK26vdoV9TxaBXOcLORyu+OshWv8LZJxA6sQU8wHcxuzrTBXtt
|
346 |
+
mhwwjIDLk5Mqg6sFUYICABFna/OIYUdfA5PVWw3g8dShMjWFsjrbsIKr0csKvE+MW8VLADsfKoKm
|
347 |
+
fjaF3H48ZwC15DtS4KjrXRX5xm3wrR0OhbepmnMUWluPQSjA1egtTaRezarZ7c7c2NU8Qh0XwRJd
|
348 |
+
RTjDOPP8hS6DRkiy1yBfkjaP53kPmF6Z6PDQpLv1U70qzlmwr25/bLvSHgCwIe34QWKCudiyxLtG
|
349 |
+
UPMxxY8BqHTr9Xgn2uf3ZkPznoM+IKrDNWCRzg==
|
350 |
+
-----END CERTIFICATE-----
|
351 |
+
|
352 |
+
Entrust.net Secure Server CA
|
353 |
+
============================
|
354 |
+
-----BEGIN CERTIFICATE-----
|
355 |
+
MIIE2DCCBEGgAwIBAgIEN0rSQzANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMCVVMxFDASBgNV
|
356 |
+
BAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5uZXQvQ1BTIGluY29ycC4gYnkg
|
357 |
+
cmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRl
|
358 |
+
ZDE6MDgGA1UEAxMxRW50cnVzdC5uZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhv
|
359 |
+
cml0eTAeFw05OTA1MjUxNjA5NDBaFw0xOTA1MjUxNjM5NDBaMIHDMQswCQYDVQQGEwJVUzEUMBIG
|
360 |
+
A1UEChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5jb3JwLiBi
|
361 |
+
eSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBFbnRydXN0Lm5ldCBMaW1p
|
362 |
+
dGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRpb24gQXV0
|
363 |
+
aG9yaXR5MIGdMA0GCSqGSIb3DQEBAQUAA4GLADCBhwKBgQDNKIM0VBuJ8w+vN5Ex/68xYMmo6LIQ
|
364 |
+
aO2f55M28Qpku0f1BBc/I0dNxScZgSYMVHINiC3ZH5oSn7yzcdOAGT9HZnuMNSjSuQrfJNqc1lB5
|
365 |
+
gXpa0zf3wkrYKZImZNHkmGw6AIr1NJtl+O3jEP/9uElY3KDegjlrgbEWGWG5VLbmQwIBA6OCAdcw
|
366 |
+
ggHTMBEGCWCGSAGG+EIBAQQEAwIABzCCARkGA1UdHwSCARAwggEMMIHeoIHboIHYpIHVMIHSMQsw
|
367 |
+
CQYDVQQGEwJVUzEUMBIGA1UEChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5l
|
368 |
+
dC9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBF
|
369 |
+
bnRydXN0Lm5ldCBMaW1pdGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENl
|
370 |
+
cnRpZmljYXRpb24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCmgJ6AlhiNodHRwOi8vd3d3LmVu
|
371 |
+
dHJ1c3QubmV0L0NSTC9uZXQxLmNybDArBgNVHRAEJDAigA8xOTk5MDUyNTE2MDk0MFqBDzIwMTkw
|
372 |
+
NTI1MTYwOTQwWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAU8BdiE1U9s/8KAGv7UISX8+1i0Bow
|
373 |
+
HQYDVR0OBBYEFPAXYhNVPbP/CgBr+1CEl/PtYtAaMAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EA
|
374 |
+
BAwwChsEVjQuMAMCBJAwDQYJKoZIhvcNAQEFBQADgYEAkNwwAvpkdMKnCqV8IY00F6j7Rw7/JXyN
|
375 |
+
Ewr75Ji174z4xRAN95K+8cPV1ZVqBLssziY2ZcgxxufuP+NXdYR6Ee9GTxj005i7qIcyunL2POI9
|
376 |
+
n9cd2cNgQ4xYDiKWL2KjLB+6rQXvqzJ4h6BUcxm1XAX5Uj5tLUUL9wqT6u0G+bI=
|
377 |
+
-----END CERTIFICATE-----
|
378 |
+
|
379 |
+
Entrust.net Premium 2048 Secure Server CA
|
380 |
+
=========================================
|
381 |
+
-----BEGIN CERTIFICATE-----
|
382 |
+
MIIEXDCCA0SgAwIBAgIEOGO5ZjANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChMLRW50cnVzdC5u
|
383 |
+
ZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBpbmNvcnAuIGJ5IHJlZi4gKGxp
|
384 |
+
bWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNV
|
385 |
+
BAMTKkVudHJ1c3QubmV0IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQx
|
386 |
+
NzUwNTFaFw0xOTEyMjQxODIwNTFaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3
|
387 |
+
d3d3LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTEl
|
388 |
+
MCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5u
|
389 |
+
ZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgpMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
|
390 |
+
MIIBCgKCAQEArU1LqRKGsuqjIAcVFmQqK0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOL
|
391 |
+
Gp18EzoOH1u3Hs/lJBQesYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSr
|
392 |
+
hRSGlVuXMlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVTXTzW
|
393 |
+
nLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/HoZdenoVve8AjhUi
|
394 |
+
VBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH4QIDAQABo3QwcjARBglghkgBhvhC
|
395 |
+
AQEEBAMCAAcwHwYDVR0jBBgwFoAUVeSB0RGAvtiJuQijMfmhJAkWuXAwHQYDVR0OBBYEFFXkgdER
|
396 |
+
gL7YibkIozH5oSQJFrlwMB0GCSqGSIb2fQdBAAQQMA4bCFY1LjA6NC4wAwIEkDANBgkqhkiG9w0B
|
397 |
+
AQUFAAOCAQEAWUesIYSKF8mciVMeuoCFGsY8Tj6xnLZ8xpJdGGQC49MGCBFhfGPjK50xA3B20qMo
|
398 |
+
oPS7mmNz7W3lKtvtFKkrxjYR0CvrB4ul2p5cGZ1WEvVUKcgF7bISKo30Axv/55IQh7A6tcOdBTcS
|
399 |
+
o8f0FbnVpDkWm1M6I5HxqIKiaohowXkCIryqptau37AUX7iH0N18f3v/rxzP5tsHrV7bhZ3QKw0z
|
400 |
+
2wTR5klAEyt2+z7pnIkPFc4YsIV4IU9rTw76NmfNB/L/CNDi3tm/Kq+4h4YhPATKt5Rof8886ZjX
|
401 |
+
OP/swNlQ8C5LWK5Gb9Auw2DaclVyvUxFnmG6v4SBkgPR0ml8xQ==
|
402 |
+
-----END CERTIFICATE-----
|
403 |
+
|
404 |
+
Baltimore CyberTrust Root
|
405 |
+
=========================
|
406 |
+
-----BEGIN CERTIFICATE-----
|
407 |
+
MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJRTESMBAGA1UE
|
408 |
+
ChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYDVQQDExlCYWx0aW1vcmUgQ3li
|
409 |
+
ZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoXDTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMC
|
410 |
+
SUUxEjAQBgNVBAoTCUJhbHRpbW9yZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFs
|
411 |
+
dGltb3JlIEN5YmVyVHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKME
|
412 |
+
uyKrmD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjrIZ3AQSsB
|
413 |
+
UnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeKmpYcqWe4PwzV9/lSEy/C
|
414 |
+
G9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSuXmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9
|
415 |
+
XbIGevOF6uvUA65ehD5f/xXtabz5OTZydc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjpr
|
416 |
+
l3RjM71oGDHweI12v/yejl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoI
|
417 |
+
VDaGezq1BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEB
|
418 |
+
BQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT929hkTI7gQCvlYpNRh
|
419 |
+
cL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3WgxjkzSswF07r51XgdIGn9w/xZchMB5
|
420 |
+
hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsa
|
421 |
+
Y71k5h+3zvDyny67G7fyUIhzksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9H
|
422 |
+
RCwBXbsdtTLSR9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp
|
423 |
+
-----END CERTIFICATE-----
|
424 |
+
|
425 |
+
Equifax Secure Global eBusiness CA
|
426 |
+
==================================
|
427 |
+
-----BEGIN CERTIFICATE-----
|
428 |
+
MIICkDCCAfmgAwIBAgIBATANBgkqhkiG9w0BAQQFADBaMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT
|
429 |
+
RXF1aWZheCBTZWN1cmUgSW5jLjEtMCsGA1UEAxMkRXF1aWZheCBTZWN1cmUgR2xvYmFsIGVCdXNp
|
430 |
+
bmVzcyBDQS0xMB4XDTk5MDYyMTA0MDAwMFoXDTIwMDYyMTA0MDAwMFowWjELMAkGA1UEBhMCVVMx
|
431 |
+
HDAaBgNVBAoTE0VxdWlmYXggU2VjdXJlIEluYy4xLTArBgNVBAMTJEVxdWlmYXggU2VjdXJlIEds
|
432 |
+
b2JhbCBlQnVzaW5lc3MgQ0EtMTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAuucXkAJlsTRV
|
433 |
+
PEnCUdXfp9E3j9HngXNBUmCbnaEXJnitx7HoJpQytd4zjTov2/KaelpzmKNc6fuKcxtc58O/gGzN
|
434 |
+
qfTWK8D3+ZmqY6KxRwIP1ORROhI8bIpaVIRw28HFkM9yRcuoWcDNM50/o5brhTMhHD4ePmBudpxn
|
435 |
+
hcXIw2ECAwEAAaNmMGQwEQYJYIZIAYb4QgEBBAQDAgAHMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0j
|
436 |
+
BBgwFoAUvqigdHJQa0S3ySPY+6j/s1draGwwHQYDVR0OBBYEFL6ooHRyUGtEt8kj2Puo/7NXa2hs
|
437 |
+
MA0GCSqGSIb3DQEBBAUAA4GBADDiAVGqx+pf2rnQZQ8w1j7aDRRJbpGTJxQx78T3LUX47Me/okEN
|
438 |
+
I7SS+RkAZ70Br83gcfxaz2TE4JaY0KNA4gGK7ycH8WUBikQtBmV1UsCGECAhX2xrD2yuCRyv8qIY
|
439 |
+
NMR1pHMc8Y3c7635s3a0kr/clRAevsvIO1qEYBlWlKlV
|
440 |
+
-----END CERTIFICATE-----
|
441 |
+
|
442 |
+
Equifax Secure eBusiness CA 1
|
443 |
+
=============================
|
444 |
+
-----BEGIN CERTIFICATE-----
|
445 |
+
MIICgjCCAeugAwIBAgIBBDANBgkqhkiG9w0BAQQFADBTMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT
|
446 |
+
RXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1c2luZXNzIENB
|
447 |
+
LTEwHhcNOTkwNjIxMDQwMDAwWhcNMjAwNjIxMDQwMDAwWjBTMQswCQYDVQQGEwJVUzEcMBoGA1UE
|
448 |
+
ChMTRXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1c2luZXNz
|
449 |
+
IENBLTEwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAM4vGbwXt3fek6lfWg0XTzQaDJj0ItlZ
|
450 |
+
1MRoRvC0NcWFAyDGr0WlIVFFQesWWDYyb+JQYmT5/VGcqiTZ9J2DKocKIdMSODRsjQBuWqDZQu4a
|
451 |
+
IZX5UkxVWsUPOE9G+m34LjXWHXzr4vCwdYDIqROsvojvOm6rXyo4YgKwEnv+j6YDAgMBAAGjZjBk
|
452 |
+
MBEGCWCGSAGG+EIBAQQEAwIABzAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFEp4MlIR21kW
|
453 |
+
Nl7fwRQ2QGpHfEyhMB0GA1UdDgQWBBRKeDJSEdtZFjZe38EUNkBqR3xMoTANBgkqhkiG9w0BAQQF
|
454 |
+
AAOBgQB1W6ibAxHm6VZMzfmpTMANmvPMZWnmJXbMWbfWVMMdzZmsGd20hdXgPfxiIKeES1hl8eL5
|
455 |
+
lSE/9dR+WB5Hh1Q+WKG1tfgq73HnvMP2sUlG4tega+VWeponmHxGYhTnyfxuAxJ5gDgdSIKN/Bf+
|
456 |
+
KpYrtWKmpj29f5JZzVoqgrI3eQ==
|
457 |
+
-----END CERTIFICATE-----
|
458 |
+
|
459 |
+
Equifax Secure eBusiness CA 2
|
460 |
+
=============================
|
461 |
+
-----BEGIN CERTIFICATE-----
|
462 |
+
MIIDIDCCAomgAwIBAgIEN3DPtTANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJVUzEXMBUGA1UE
|
463 |
+
ChMORXF1aWZheCBTZWN1cmUxJjAkBgNVBAsTHUVxdWlmYXggU2VjdXJlIGVCdXNpbmVzcyBDQS0y
|
464 |
+
MB4XDTk5MDYyMzEyMTQ0NVoXDTE5MDYyMzEyMTQ0NVowTjELMAkGA1UEBhMCVVMxFzAVBgNVBAoT
|
465 |
+
DkVxdWlmYXggU2VjdXJlMSYwJAYDVQQLEx1FcXVpZmF4IFNlY3VyZSBlQnVzaW5lc3MgQ0EtMjCB
|
466 |
+
nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA5Dk5kx5SBhsoNviyoynF7Y6yEb3+6+e0dMKP/wXn
|
467 |
+
2Z0GvxLIPw7y1tEkshHe0XMJitSxLJgJDR5QRrKDpkWNYmi7hRsgcDKqQM2mll/EcTc/BPO3QSQ5
|
468 |
+
BxoeLmFYoBIL5aXfxavqN3HMHMg3OrmXUqesxWoklE6ce8/AatbfIb0CAwEAAaOCAQkwggEFMHAG
|
469 |
+
A1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEXMBUGA1UEChMORXF1aWZheCBTZWN1cmUx
|
470 |
+
JjAkBgNVBAsTHUVxdWlmYXggU2VjdXJlIGVCdXNpbmVzcyBDQS0yMQ0wCwYDVQQDEwRDUkwxMBoG
|
471 |
+
A1UdEAQTMBGBDzIwMTkwNjIzMTIxNDQ1WjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUUJ4L6q9e
|
472 |
+
uSBIplBqy/3YIHqngnYwHQYDVR0OBBYEFFCeC+qvXrkgSKZQasv92CB6p4J2MAwGA1UdEwQFMAMB
|
473 |
+
Af8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUAA4GBAAyGgq3oThr1
|
474 |
+
jokn4jVYPSm0B482UJW/bsGe68SQsoWou7dC4A8HOd/7npCy0cE+U58DRLB+S/Rv5Hwf5+Kx5Lia
|
475 |
+
78O9zt4LMjTZ3ijtM2vE1Nc9ElirfQkty3D1E4qUoSek1nDFbZS1yX2doNLGCEnZZpum0/QL3MUm
|
476 |
+
V+GRMOrN
|
477 |
+
-----END CERTIFICATE-----
|
478 |
+
|
479 |
+
AddTrust Low-Value Services Root
|
480 |
+
================================
|
481 |
+
-----BEGIN CERTIFICATE-----
|
482 |
+
MIIEGDCCAwCgAwIBAgIBATANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
|
483 |
+
QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYDVQQDExhBZGRU
|
484 |
+
cnVzdCBDbGFzcyAxIENBIFJvb3QwHhcNMDAwNTMwMTAzODMxWhcNMjAwNTMwMTAzODMxWjBlMQsw
|
485 |
+
CQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBO
|
486 |
+
ZXR3b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwggEiMA0GCSqGSIb3DQEB
|
487 |
+
AQUAA4IBDwAwggEKAoIBAQCWltQhSWDia+hBBwzexODcEyPNwTXH+9ZOEQpnXvUGW2ulCDtbKRY6
|
488 |
+
54eyNAbFvAWlA3yCyykQruGIgb3WntP+LVbBFc7jJp0VLhD7Bo8wBN6ntGO0/7Gcrjyvd7ZWxbWr
|
489 |
+
oulpOj0OM3kyP3CCkplhbY0wCI9xP6ZIVxn4JdxLZlyldI+Yrsj5wAYi56xz36Uu+1LcsRVlIPo1
|
490 |
+
Zmne3yzxbrww2ywkEtvrNTVokMsAsJchPXQhI2U0K7t4WaPW4XY5mqRJjox0r26kmqPZm9I4XJui
|
491 |
+
GMx1I4S+6+JNM3GOGvDC+Mcdoq0Dlyz4zyXG9rgkMbFjXZJ/Y/AlyVMuH79NAgMBAAGjgdIwgc8w
|
492 |
+
HQYDVR0OBBYEFJWxtPCUtr3H2tERCSG+wa9J/RB7MAsGA1UdDwQEAwIBBjAPBgNVHRMBAf8EBTAD
|
493 |
+
AQH/MIGPBgNVHSMEgYcwgYSAFJWxtPCUtr3H2tERCSG+wa9J/RB7oWmkZzBlMQswCQYDVQQGEwJT
|
494 |
+
RTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEw
|
495 |
+
HwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBACxt
|
496 |
+
ZBsfzQ3duQH6lmM0MkhHma6X7f1yFqZzR1r0693p9db7RcwpiURdv0Y5PejuvE1Uhh4dbOMXJ0Ph
|
497 |
+
iVYrqW9yTkkz43J8KiOavD7/KCrto/8cI7pDVwlnTUtiBi34/2ydYB7YHEt9tTEv2dB8Xfjea4MY
|
498 |
+
eDdXL+gzB2ffHsdrKpV2ro9Xo/D0UrSpUwjP4E/TelOL/bscVjby/rK25Xa71SJlpz/+0WatC7xr
|
499 |
+
mYbvP33zGDLKe8bjq2RGlfgmadlVg3sslgf/WSxEo8bl6ancoWOAWiFeIc9TVPC6b4nbqKqVz4vj
|
500 |
+
ccweGyBECMB6tkD9xOQ14R0WHNC8K47Wcdk=
|
501 |
+
-----END CERTIFICATE-----
|
502 |
+
|
503 |
+
AddTrust External Root
|
504 |
+
======================
|
505 |
+
-----BEGIN CERTIFICATE-----
|
506 |
+
MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
|
507 |
+
QWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFsIFRUUCBOZXR3b3JrMSIwIAYD
|
508 |
+
VQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEw
|
509 |
+
NDgzOFowbzELMAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRU
|
510 |
+
cnVzdCBFeHRlcm5hbCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0Eg
|
511 |
+
Um9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvtH7xsD821
|
512 |
+
+iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9uMq/NzgtHj6RQa1wVsfw
|
513 |
+
Tz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzXmk6vBbOmcZSccbNQYArHE504B4YCqOmo
|
514 |
+
aSYYkKtMsE8jqzpPhNjfzp/haW+710LXa0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy
|
515 |
+
2xSoRcRdKn23tNbE7qzNE0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv7
|
516 |
+
7+ldU9U0WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYDVR0P
|
517 |
+
BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0Jvf6xCZU7wO94CTL
|
518 |
+
VBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEmMCQGA1UECxMdQWRk
|
519 |
+
VHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsxIjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENB
|
520 |
+
IFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZl
|
521 |
+
j7DYd7usQWxHYINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5
|
522 |
+
6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvCNr4TDea9Y355
|
523 |
+
e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEXc4g/VhsxOBi0cQ+azcgOno4u
|
524 |
+
G+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5amnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ=
|
525 |
+
-----END CERTIFICATE-----
|
526 |
+
|
527 |
+
AddTrust Public Services Root
|
528 |
+
=============================
|
529 |
+
-----BEGIN CERTIFICATE-----
|
530 |
+
MIIEFTCCAv2gAwIBAgIBATANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
|
531 |
+
QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSAwHgYDVQQDExdBZGRU
|
532 |
+
cnVzdCBQdWJsaWMgQ0EgUm9vdDAeFw0wMDA1MzAxMDQxNTBaFw0yMDA1MzAxMDQxNTBaMGQxCzAJ
|
533 |
+
BgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5l
|
534 |
+
dHdvcmsxIDAeBgNVBAMTF0FkZFRydXN0IFB1YmxpYyBDQSBSb290MIIBIjANBgkqhkiG9w0BAQEF
|
535 |
+
AAOCAQ8AMIIBCgKCAQEA6Rowj4OIFMEg2Dybjxt+A3S72mnTRqX4jsIMEZBRpS9mVEBV6tsfSlbu
|
536 |
+
nyNu9DnLoblv8n75XYcmYZ4c+OLspoH4IcUkzBEMP9smcnrHAZcHF/nXGCwwfQ56HmIexkvA/X1i
|
537 |
+
d9NEHif2P0tEs7c42TkfYNVRknMDtABp4/MUTu7R3AnPdzRGULD4EfL+OHn3Bzn+UZKXC1sIXzSG
|
538 |
+
Aa2Il+tmzV7R/9x98oTaunet3IAIx6eH1lWfl2royBFkuucZKT8Rs3iQhCBSWxHveNCD9tVIkNAw
|
539 |
+
HM+A+WD+eeSI8t0A65RF62WUaUC6wNW0uLp9BBGo6zEFlpROWCGOn9Bg/QIDAQABo4HRMIHOMB0G
|
540 |
+
A1UdDgQWBBSBPjfYkrAfd59ctKtzquf2NGAv+jALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB
|
541 |
+
/zCBjgYDVR0jBIGGMIGDgBSBPjfYkrAfd59ctKtzquf2NGAv+qFopGYwZDELMAkGA1UEBhMCU0Ux
|
542 |
+
FDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRUcnVzdCBUVFAgTmV0d29yazEgMB4G
|
543 |
+
A1UEAxMXQWRkVHJ1c3QgUHVibGljIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBAAP3FUr4
|
544 |
+
JNojVhaTdt02KLmuG7jD8WS6IBh4lSknVwW8fCr0uVFV2ocC3g8WFzH4qnkuCRO7r7IgGRLlk/lL
|
545 |
+
+YPoRNWyQSW/iHVv/xD8SlTQX/D67zZzfRs2RcYhbbQVuE7PnFylPVoAjgbjPGsye/Kf8Lb93/Ao
|
546 |
+
GEjwxrzQvzSAlsJKsW2Ox5BF3i9nrEUEo3rcVZLJR2bYGozH7ZxOmuASu7VqTITh4SINhwBk/ox9
|
547 |
+
Yjllpu9CtoAlEmEBqCQTcAARJl/6NVDFSMwGR+gn2HCNX2TmoUQmXiLsks3/QppEIW1cxeMiHV9H
|
548 |
+
EufOX1362KqxMy3ZdvJOOjMMK7MtkAY=
|
549 |
+
-----END CERTIFICATE-----
|
550 |
+
|
551 |
+
AddTrust Qualified Certificates Root
|
552 |
+
====================================
|
553 |
+
-----BEGIN CERTIFICATE-----
|
554 |
+
MIIEHjCCAwagAwIBAgIBATANBgkqhkiG9w0BAQUFADBnMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
|
555 |
+
QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSMwIQYDVQQDExpBZGRU
|
556 |
+
cnVzdCBRdWFsaWZpZWQgQ0EgUm9vdDAeFw0wMDA1MzAxMDQ0NTBaFw0yMDA1MzAxMDQ0NTBaMGcx
|
557 |
+
CzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQ
|
558 |
+
IE5ldHdvcmsxIzAhBgNVBAMTGkFkZFRydXN0IFF1YWxpZmllZCBDQSBSb290MIIBIjANBgkqhkiG
|
559 |
+
9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5B6a/twJWoekn0e+EV+vhDTbYjx5eLfpMLXsDBwqxBb/4Oxx
|
560 |
+
64r1EW7tTw2R0hIYLUkVAcKkIhPHEWT/IhKauY5cLwjPcWqzZwFZ8V1G87B4pfYOQnrjfxvM0PC3
|
561 |
+
KP0q6p6zsLkEqv32x7SxuCqg+1jxGaBvcCV+PmlKfw8i2O+tCBGaKZnhqkRFmhJePp1tUvznoD1o
|
562 |
+
L/BLcHwTOK28FSXx1s6rosAx1i+f4P8UWfyEk9mHfExUE+uf0S0R+Bg6Ot4l2ffTQO2kBhLEO+GR
|
563 |
+
wVY18BTcZTYJbqukB8c10cIDMzZbdSZtQvESa0NvS3GU+jQd7RNuyoB/mC9suWXY6QIDAQABo4HU
|
564 |
+
MIHRMB0GA1UdDgQWBBQ5lYtii1zJ1IC6WA+XPxUIQ8yYpzALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/
|
565 |
+
BAUwAwEB/zCBkQYDVR0jBIGJMIGGgBQ5lYtii1zJ1IC6WA+XPxUIQ8yYp6FrpGkwZzELMAkGA1UE
|
566 |
+
BhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRUcnVzdCBUVFAgTmV0d29y
|
567 |
+
azEjMCEGA1UEAxMaQWRkVHJ1c3QgUXVhbGlmaWVkIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQAD
|
568 |
+
ggEBABmrder4i2VhlRO6aQTvhsoToMeqT2QbPxj2qC0sVY8FtzDqQmodwCVRLae/DLPt7wh/bDxG
|
569 |
+
GuoYQ992zPlmhpwsaPXpF/gxsxjE1kh9I0xowX67ARRvxdlu3rsEQmr49lx95dr6h+sNNVJn0J6X
|
570 |
+
dgWTP5XHAeZpVTh/EGGZyeNfpso+gmNIquIISD6q8rKFYqa0p9m9N5xotS1WfbC3P6CxB9bpT9ze
|
571 |
+
RXEwMn8bLgn5v1Kh7sKAPgZcLlVAwRv1cEWw3F369nJad9Jjzc9YiQBCYz95OdBEsIJuQRno3eDB
|
572 |
+
iFrRHnGTHyQwdOUeqN48Jzd/g66ed8/wMLH/S5noxqE=
|
573 |
+
-----END CERTIFICATE-----
|
574 |
+
|
575 |
+
Entrust Root Certification Authority
|
576 |
+
====================================
|
577 |
+
-----BEGIN CERTIFICATE-----
|
578 |
+
MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMCVVMxFjAUBgNV
|
579 |
+
BAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0Lm5ldC9DUFMgaXMgaW5jb3Jw
|
580 |
+
b3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMWKGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsG
|
581 |
+
A1UEAxMkRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0
|
582 |
+
MloXDTI2MTEyNzIwNTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMu
|
583 |
+
MTkwNwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSByZWZlcmVu
|
584 |
+
Y2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNVBAMTJEVudHJ1c3QgUm9v
|
585 |
+
dCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
|
586 |
+
ALaVtkNC+sZtKm9I35RMOVcF7sN5EUFoNu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYsz
|
587 |
+
A9u3g3s+IIRe7bJWKKf44LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOww
|
588 |
+
Cj0Yzfv9KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGIrb68
|
589 |
+
j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi94DkZfs0Nw4pgHBN
|
590 |
+
rziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOBsDCBrTAOBgNVHQ8BAf8EBAMCAQYw
|
591 |
+
DwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAigA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1
|
592 |
+
MzQyWjAfBgNVHSMEGDAWgBRokORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DH
|
593 |
+
hmak8fdLQ/uEvW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA
|
594 |
+
A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9tO1KzKtvn1ISM
|
595 |
+
Y/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6ZuaAGAT/3B+XxFNSRuzFVJ7yVTa
|
596 |
+
v52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTS
|
597 |
+
W3iDVuycNsMm4hH2Z0kdkquM++v/eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0
|
598 |
+
tHuu2guQOHXvgR1m0vdXcDazv/wor3ElhVsT/h5/WrQ8
|
599 |
+
-----END CERTIFICATE-----
|
600 |
+
|
601 |
+
RSA Security 2048 v3
|
602 |
+
====================
|
603 |
+
-----BEGIN CERTIFICATE-----
|
604 |
+
MIIDYTCCAkmgAwIBAgIQCgEBAQAAAnwAAAAKAAAAAjANBgkqhkiG9w0BAQUFADA6MRkwFwYDVQQK
|
605 |
+
ExBSU0EgU2VjdXJpdHkgSW5jMR0wGwYDVQQLExRSU0EgU2VjdXJpdHkgMjA0OCBWMzAeFw0wMTAy
|
606 |
+
MjIyMDM5MjNaFw0yNjAyMjIyMDM5MjNaMDoxGTAXBgNVBAoTEFJTQSBTZWN1cml0eSBJbmMxHTAb
|
607 |
+
BgNVBAsTFFJTQSBTZWN1cml0eSAyMDQ4IFYzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
|
608 |
+
AQEAt49VcdKA3XtpeafwGFAyPGJn9gqVB93mG/Oe2dJBVGutn3y+Gc37RqtBaB4Y6lXIL5F4iSj7
|
609 |
+
Jylg/9+PjDvJSZu1pJTOAeo+tWN7fyb9Gd3AIb2E0S1PRsNO3Ng3OTsor8udGuorryGlwSMiuLgb
|
610 |
+
WhOHV4PR8CDn6E8jQrAApX2J6elhc5SYcSa8LWrg903w8bYqODGBDSnhAMFRD0xS+ARaqn1y07iH
|
611 |
+
KrtjEAMqs6FPDVpeRrc9DvV07Jmf+T0kgYim3WBU6JU2PcYJk5qjEoAAVZkZR73QpXzDuvsf9/UP
|
612 |
+
+Ky5tfQ3mBMY3oVbtwyCO4dvlTlYMNpuAWgXIszACwIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/
|
613 |
+
MA4GA1UdDwEB/wQEAwIBBjAfBgNVHSMEGDAWgBQHw1EwpKrpRa41JPr/JCwz0LGdjDAdBgNVHQ4E
|
614 |
+
FgQUB8NRMKSq6UWuNST6/yQsM9CxnYwwDQYJKoZIhvcNAQEFBQADggEBAF8+hnZuuDU8TjYcHnmY
|
615 |
+
v/3VEhF5Ug7uMYm83X/50cYVIeiKAVQNOvtUudZj1LGqlk2iQk3UUx+LEN5/Zb5gEydxiKRz44Rj
|
616 |
+
0aRV4VCT5hsOedBnvEbIvz8XDZXmxpBp3ue0L96VfdASPz0+f00/FGj1EVDVwfSQpQgdMWD/YIwj
|
617 |
+
VAqv/qFuxdF6Kmh4zx6CCiC0H63lhbJqaHVOrSU3lIW+vaHU6rcMSzyd6BIA8F+sDeGscGNz9395
|
618 |
+
nzIlQnQFgCi/vcEkllgVsRch6YlL2weIZ/QVrXA+L02FO8K32/6YaCOJ4XQP3vTFhGMpG8zLB8kA
|
619 |
+
pKnXwiJPZ9d37CAFYd4=
|
620 |
+
-----END CERTIFICATE-----
|
621 |
+
|
622 |
+
GeoTrust Global CA
|
623 |
+
==================
|
624 |
+
-----BEGIN CERTIFICATE-----
|
625 |
+
MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVTMRYwFAYDVQQK
|
626 |
+
Ew1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9iYWwgQ0EwHhcNMDIwNTIxMDQw
|
627 |
+
MDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5j
|
628 |
+
LjEbMBkGA1UEAxMSR2VvVHJ1c3QgR2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
|
629 |
+
CgKCAQEA2swYYzD99BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjo
|
630 |
+
BbdqfnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDviS2Aelet
|
631 |
+
8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU1XupGc1V3sjs0l44U+Vc
|
632 |
+
T4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+bw8HHa8sHo9gOeL6NlMTOdReJivbPagU
|
633 |
+
vTLrGAMoUgRx5aszPeE4uwc2hGKceeoWMPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTAD
|
634 |
+
AQH/MB0GA1UdDgQWBBTAephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVk
|
635 |
+
DBF9qn1luMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKInZ57Q
|
636 |
+
zxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfStQWVYrmm3ok9Nns4
|
637 |
+
d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcFPseKUgzbFbS9bZvlxrFUaKnjaZC2
|
638 |
+
mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Unhw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6p
|
639 |
+
XE0zX5IJL4hmXXeXxx12E6nV5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvm
|
640 |
+
Mw==
|
641 |
+
-----END CERTIFICATE-----
|
642 |
+
|
643 |
+
GeoTrust Global CA 2
|
644 |
+
====================
|
645 |
+
-----BEGIN CERTIFICATE-----
|
646 |
+
MIIDZjCCAk6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBEMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN
|
647 |
+
R2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFsIENBIDIwHhcNMDQwMzA0MDUw
|
648 |
+
MDAwWhcNMTkwMzA0MDUwMDAwWjBEMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5j
|
649 |
+
LjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFsIENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
|
650 |
+
ggEKAoIBAQDvPE1APRDfO1MA4Wf+lGAVPoWI8YkNkMgoI5kF6CsgncbzYEbYwbLVjDHZ3CB5JIG/
|
651 |
+
NTL8Y2nbsSpr7iFY8gjpeMtvy/wWUsiRxP89c96xPqfCfWbB9X5SJBri1WeR0IIQ13hLTytCOb1k
|
652 |
+
LUCgsBDTOEhGiKEMuzozKmKY+wCdE1l/bztyqu6mD4b5BWHqZ38MN5aL5mkWRxHCJ1kDs6ZgwiFA
|
653 |
+
Vvqgx306E+PsV8ez1q6diYD3Aecs9pYrEw15LNnA5IZ7S4wMcoKK+xfNAGw6EzywhIdLFnopsk/b
|
654 |
+
HdQL82Y3vdj2V7teJHq4PIu5+pIaGoSe2HSPqht/XvT+RSIhAgMBAAGjYzBhMA8GA1UdEwEB/wQF
|
655 |
+
MAMBAf8wHQYDVR0OBBYEFHE4NvICMVNHK266ZUapEBVYIAUJMB8GA1UdIwQYMBaAFHE4NvICMVNH
|
656 |
+
K266ZUapEBVYIAUJMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQUFAAOCAQEAA/e1K6tdEPx7
|
657 |
+
srJerJsOflN4WT5CBP51o62sgU7XAotexC3IUnbHLB/8gTKY0UvGkpMzNTEv/NgdRN3ggX+d6Yvh
|
658 |
+
ZJFiCzkIjKx0nVnZellSlxG5FntvRdOW2TF9AjYPnDtuzywNA0ZF66D0f0hExghAzN4bcLUprbqL
|
659 |
+
OzRldRtxIR0sFAqwlpW41uryZfspuk/qkZN0abby/+Ea0AzRdoXLiiW9l14sbxWZJue2Kf8i7MkC
|
660 |
+
x1YAzUm5s2x7UwQa4qjJqhIFI8LO57sEAszAR6LkxCkvW0VXiVHuPOtSCP8HNR6fNWpHSlaY0VqF
|
661 |
+
H4z1Ir+rzoPz4iIprn2DQKi6bA==
|
662 |
+
-----END CERTIFICATE-----
|
663 |
+
|
664 |
+
GeoTrust Universal CA
|
665 |
+
=====================
|
666 |
+
-----BEGIN CERTIFICATE-----
|
667 |
+
MIIFaDCCA1CgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN
|
668 |
+
R2VvVHJ1c3QgSW5jLjEeMBwGA1UEAxMVR2VvVHJ1c3QgVW5pdmVyc2FsIENBMB4XDTA0MDMwNDA1
|
669 |
+
MDAwMFoXDTI5MDMwNDA1MDAwMFowRTELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IElu
|
670 |
+
Yy4xHjAcBgNVBAMTFUdlb1RydXN0IFVuaXZlcnNhbCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIP
|
671 |
+
ADCCAgoCggIBAKYVVaCjxuAfjJ0hUNfBvitbtaSeodlyWL0AG0y/YckUHUWCq8YdgNY96xCcOq9t
|
672 |
+
JPi8cQGeBvV8Xx7BDlXKg5pZMK4ZyzBIle0iN430SppyZj6tlcDgFgDgEB8rMQ7XlFTTQjOgNB0e
|
673 |
+
RXbdT8oYN+yFFXoZCPzVx5zw8qkuEKmS5j1YPakWaDwvdSEYfyh3peFhF7em6fgemdtzbvQKoiFs
|
674 |
+
7tqqhZJmr/Z6a4LauiIINQ/PQvE1+mrufislzDoR5G2vc7J2Ha3QsnhnGqQ5HFELZ1aD/ThdDc7d
|
675 |
+
8Lsrlh/eezJS/R27tQahsiFepdaVaH/wmZ7cRQg+59IJDTWU3YBOU5fXtQlEIGQWFwMCTFMNaN7V
|
676 |
+
qnJNk22CDtucvc+081xdVHppCZbW2xHBjXWotM85yM48vCR85mLK4b19p71XZQvk/iXttmkQ3Cga
|
677 |
+
Rr0BHdCXteGYO8A3ZNY9lO4L4fUorgtWv3GLIylBjobFS1J72HGrH4oVpjuDWtdYAVHGTEHZf9hB
|
678 |
+
Z3KiKN9gg6meyHv8U3NyWfWTehd2Ds735VzZC1U0oqpbtWpU5xPKV+yXbfReBi9Fi1jUIxaS5BZu
|
679 |
+
KGNZMN9QAZxjiRqf2xeUgnA3wySemkfWWspOqGmJch+RbNt+nhutxx9z3SxPGWX9f5NAEC7S8O08
|
680 |
+
ni4oPmkmM8V7AgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNq7LqqwDLiIJlF0
|
681 |
+
XG0D08DYj3rWMB8GA1UdIwQYMBaAFNq7LqqwDLiIJlF0XG0D08DYj3rWMA4GA1UdDwEB/wQEAwIB
|
682 |
+
hjANBgkqhkiG9w0BAQUFAAOCAgEAMXjmx7XfuJRAyXHEqDXsRh3ChfMoWIawC/yOsjmPRFWrZIRc
|
683 |
+
aanQmjg8+uUfNeVE44B5lGiku8SfPeE0zTBGi1QrlaXv9z+ZhP015s8xxtxqv6fXIwjhmF7DWgh2
|
684 |
+
qaavdy+3YL1ERmrvl/9zlcGO6JP7/TG37FcREUWbMPEaiDnBTzynANXH/KttgCJwpQzgXQQpAvvL
|
685 |
+
oJHRfNbDflDVnVi+QTjruXU8FdmbyUqDWcDaU/0zuzYYm4UPFd3uLax2k7nZAY1IEKj79TiG8dsK
|
686 |
+
xr2EoyNB3tZ3b4XUhRxQ4K5RirqNPnbiucon8l+f725ZDQbYKxek0nxru18UGkiPGkzns0ccjkxF
|
687 |
+
KyDuSN/n3QmOGKjaQI2SJhFTYXNd673nxE0pN2HrrDktZy4W1vUAg4WhzH92xH3kt0tm7wNFYGm2
|
688 |
+
DFKWkoRepqO1pD4r2czYG0eq8kTaT/kD6PAUyz/zg97QwVTjt+gKN02LIFkDMBmhLMi9ER/frslK
|
689 |
+
xfMnZmaGrGiR/9nmUxwPi1xpZQomyB40w11Re9epnAahNt3ViZS82eQtDF4JbAiXfKM9fJP/P6EU
|
690 |
+
p8+1Xevb2xzEdt+Iub1FBZUbrvxGakyvSOPOrg/SfuvmbJxPgWp6ZKy7PtXny3YuxadIwVyQD8vI
|
691 |
+
P/rmMuGNG2+k5o7Y+SlIis5z/iw=
|
692 |
+
-----END CERTIFICATE-----
|
693 |
+
|
694 |
+
GeoTrust Universal CA 2
|
695 |
+
=======================
|
696 |
+
-----BEGIN CERTIFICATE-----
|
697 |
+
MIIFbDCCA1SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBHMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN
|
698 |
+
R2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVyc2FsIENBIDIwHhcNMDQwMzA0
|
699 |
+
MDUwMDAwWhcNMjkwMzA0MDUwMDAwWjBHMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3Qg
|
700 |
+
SW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVyc2FsIENBIDIwggIiMA0GCSqGSIb3DQEBAQUA
|
701 |
+
A4ICDwAwggIKAoICAQCzVFLByT7y2dyxUxpZKeexw0Uo5dfR7cXFS6GqdHtXr0om/Nj1XqduGdt0
|
702 |
+
DE81WzILAePb63p3NeqqWuDW6KFXlPCQo3RWlEQwAx5cTiuFJnSCegx2oG9NzkEtoBUGFF+3Qs17
|
703 |
+
j1hhNNwqCPkuwwGmIkQcTAeC5lvO0Ep8BNMZcyfwqph/Lq9O64ceJHdqXbboW0W63MOhBW9Wjo8Q
|
704 |
+
JqVJwy7XQYci4E+GymC16qFjwAGXEHm9ADwSbSsVsaxLse4YuU6W3Nx2/zu+z18DwPw76L5GG//a
|
705 |
+
QMJS9/7jOvdqdzXQ2o3rXhhqMcceujwbKNZrVMaqW9eiLBsZzKIC9ptZvTdrhrVtgrrY6slWvKk2
|
706 |
+
WP0+GfPtDCapkzj4T8FdIgbQl+rhrcZV4IErKIM6+vR7IVEAvlI4zs1meaj0gVbi0IMJR1FbUGrP
|
707 |
+
20gaXT73y/Zl92zxlfgCOzJWgjl6W70viRu/obTo/3+NjN8D8WBOWBFM66M/ECuDmgFz2ZRthAAn
|
708 |
+
ZqzwcEAJQpKtT5MNYQlRJNiS1QuUYbKHsu3/mjX/hVTK7URDrBs8FmtISgocQIgfksILAAX/8sgC
|
709 |
+
SqSqqcyZlpwvWOB94b67B9xfBHJcMTTD7F8t4D1kkCLm0ey4Lt1ZrtmhN79UNdxzMk+MBB4zsslG
|
710 |
+
8dhcyFVQyWi9qLo2CQIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBR281Xh+qQ2
|
711 |
+
+/CfXGJx7Tz0RzgQKzAfBgNVHSMEGDAWgBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAOBgNVHQ8BAf8E
|
712 |
+
BAMCAYYwDQYJKoZIhvcNAQEFBQADggIBAGbBxiPz2eAubl/oz66wsCVNK/g7WJtAJDday6sWSf+z
|
713 |
+
dXkzoS9tcBc0kf5nfo/sm+VegqlVHy/c1FEHEv6sFj4sNcZj/NwQ6w2jqtB8zNHQL1EuxBRa3ugZ
|
714 |
+
4T7GzKQp5y6EqgYweHZUcyiYWTjgAA1i00J9IZ+uPTqM1fp3DRgrFg5fNuH8KrUwJM/gYwx7WBr+
|
715 |
+
mbpCErGR9Hxo4sjoryzqyX6uuyo9DRXcNJW2GHSoag/HtPQTxORb7QrSpJdMKu0vbBKJPfEncKpq
|
716 |
+
A1Ihn0CoZ1Dy81of398j9tx4TuaYT1U6U+Pv8vSfx3zYWK8pIpe44L2RLrB27FcRz+8pRPPphXpg
|
717 |
+
Y+RdM4kX2TGq2tbzGDVyz4crL2MjhF2EjD9XoIj8mZEoJmmZ1I+XRL6O1UixpCgp8RW04eWe3fiP
|
718 |
+
pm8m1wk8OhwRDqZsN/etRIcsKMfYdIKz0G9KV7s1KSegi+ghp4dkNl3M2Basx7InQJJVOCiNUW7d
|
719 |
+
FGdTbHFcJoRNdVq2fmBWqU2t+5sel/MN2dKXVHfaPRK34B7vCAas+YWH6aLcr34YEoP9VhdBLtUp
|
720 |
+
gn2Z9DH2canPLAEnpQW5qrJITirvn5NSUZU8UnOOVkwXQMAJKOSLakhT2+zNVVXxxvjpoixMptEm
|
721 |
+
X36vWkzaH6byHCx+rgIW0lbQL1dTR+iS
|
722 |
+
-----END CERTIFICATE-----
|
723 |
+
|
724 |
+
America Online Root Certification Authority 1
|
725 |
+
=============================================
|
726 |
+
-----BEGIN CERTIFICATE-----
|
727 |
+
MIIDpDCCAoygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT
|
728 |
+
QW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBPbmxpbmUgUm9vdCBDZXJ0aWZp
|
729 |
+
Y2F0aW9uIEF1dGhvcml0eSAxMB4XDTAyMDUyODA2MDAwMFoXDTM3MTExOTIwNDMwMFowYzELMAkG
|
730 |
+
A1UEBhMCVVMxHDAaBgNVBAoTE0FtZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2Eg
|
731 |
+
T25saW5lIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMTCCASIwDQYJKoZIhvcNAQEBBQAD
|
732 |
+
ggEPADCCAQoCggEBAKgv6KRpBgNHw+kqmP8ZonCaxlCyfqXfaE0bfA+2l2h9LaaLl+lkhsmj76CG
|
733 |
+
v2BlnEtUiMJIxUo5vxTjWVXlGbR0yLQFOVwWpeKVBeASrlmLojNoWBym1BW32J/X3HGrfpq/m44z
|
734 |
+
DyL9Hy7nBzbvYjnF3cu6JRQj3gzGPTzOggjmZj7aUTsWOqMFf6Dch9Wc/HKpoH145LcxVR5lu9Rh
|
735 |
+
sCFg7RAycsWSJR74kEoYeEfffjA3PlAb2xzTa5qGUwew76wGePiEmf4hjUyAtgyC9mZweRrTT6PP
|
736 |
+
8c9GsEsPPt2IYriMqQkoO3rHl+Ee5fSfwMCuJKDIodkP1nsmgmkyPacCAwEAAaNjMGEwDwYDVR0T
|
737 |
+
AQH/BAUwAwEB/zAdBgNVHQ4EFgQUAK3Zo/Z59m50qX8zPYEX10zPM94wHwYDVR0jBBgwFoAUAK3Z
|
738 |
+
o/Z59m50qX8zPYEX10zPM94wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBBQUAA4IBAQB8itEf
|
739 |
+
GDeC4Liwo+1WlchiYZwFos3CYiZhzRAW18y0ZTTQEYqtqKkFZu90821fnZmv9ov761KyBZiibyrF
|
740 |
+
VL0lvV+uyIbqRizBs73B6UlwGBaXCBOMIOAbLjpHyx7kADCVW/RFo8AasAFOq73AI25jP4BKxQft
|
741 |
+
3OJvx8Fi8eNy1gTIdGcL+oiroQHIb/AUr9KZzVGTfu0uOMe9zkZQPXLjeSWdm4grECDdpbgyn43g
|
742 |
+
Kd8hdIaC2y+CMMbHNYaz+ZZfRtsMRf3zUMNvxsNIrUam4SdHCh0Om7bCd39j8uB9Gr784N/Xx6ds
|
743 |
+
sPmuujz9dLQR6FgNgLzTqIA6me11zEZ7
|
744 |
+
-----END CERTIFICATE-----
|
745 |
+
|
746 |
+
America Online Root Certification Authority 2
|
747 |
+
=============================================
|
748 |
+
-----BEGIN CERTIFICATE-----
|
749 |
+
MIIFpDCCA4ygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT
|
750 |
+
QW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBPbmxpbmUgUm9vdCBDZXJ0aWZp
|
751 |
+
Y2F0aW9uIEF1dGhvcml0eSAyMB4XDTAyMDUyODA2MDAwMFoXDTM3MDkyOTE0MDgwMFowYzELMAkG
|
752 |
+
A1UEBhMCVVMxHDAaBgNVBAoTE0FtZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2Eg
|
753 |
+
T25saW5lIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMjCCAiIwDQYJKoZIhvcNAQEBBQAD
|
754 |
+
ggIPADCCAgoCggIBAMxBRR3pPU0Q9oyxQcngXssNt79Hc9PwVU3dxgz6sWYFas14tNwC206B89en
|
755 |
+
fHG8dWOgXeMHDEjsJcQDIPT/DjsS/5uN4cbVG7RtIuOx238hZK+GvFciKtZHgVdEglZTvYYUAQv8
|
756 |
+
f3SkWq7xuhG1m1hagLQ3eAkzfDJHA1zEpYNI9FdWboE2JxhP7JsowtS013wMPgwr38oE18aO6lhO
|
757 |
+
qKSlGBxsRZijQdEt0sdtjRnxrXm3gT+9BoInLRBYBbV4Bbkv2wxrkJB+FFk4u5QkE+XRnRTf04JN
|
758 |
+
RvCAOVIyD+OEsnpD8l7eXz8d3eOyG6ChKiMDbi4BFYdcpnV1x5dhvt6G3NRI270qv0pV2uh9UPu0
|
759 |
+
gBe4lL8BPeraunzgWGcXuVjgiIZGZ2ydEEdYMtA1fHkqkKJaEBEjNa0vzORKW6fIJ/KD3l67Xnfn
|
760 |
+
6KVuY8INXWHQjNJsWiEOyiijzirplcdIz5ZvHZIlyMbGwcEMBawmxNJ10uEqZ8A9W6Wa6897Gqid
|
761 |
+
FEXlD6CaZd4vKL3Ob5Rmg0gp2OpljK+T2WSfVVcmv2/LNzGZo2C7HK2JNDJiuEMhBnIMoVxtRsX6
|
762 |
+
Kc8w3onccVvdtjc+31D1uAclJuW8tf48ArO3+L5DwYcRlJ4jbBeKuIonDFRH8KmzwICMoCfrHRnj
|
763 |
+
B453cMor9H124HhnAgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFE1FwWg4u3Op
|
764 |
+
aaEg5+31IqEjFNeeMB8GA1UdIwQYMBaAFE1FwWg4u3OpaaEg5+31IqEjFNeeMA4GA1UdDwEB/wQE
|
765 |
+
AwIBhjANBgkqhkiG9w0BAQUFAAOCAgEAZ2sGuV9FOypLM7PmG2tZTiLMubekJcmnxPBUlgtk87FY
|
766 |
+
T15R/LKXeydlwuXK5w0MJXti4/qftIe3RUavg6WXSIylvfEWK5t2LHo1YGwRgJfMqZJS5ivmae2p
|
767 |
+
+DYtLHe/YUjRYwu5W1LtGLBDQiKmsXeu3mnFzcccobGlHBD7GL4acN3Bkku+KVqdPzW+5X1R+FXg
|
768 |
+
JXUjhx5c3LqdsKyzadsXg8n33gy8CNyRnqjQ1xU3c6U1uPx+xURABsPr+CKAXEfOAuMRn0T//Zoy
|
769 |
+
zH1kUQ7rVyZ2OuMeIjzCpjbdGe+n/BLzJsBZMYVMnNjP36TMzCmT/5RtdlwTCJfy7aULTd3oyWgO
|
770 |
+
ZtMADjMSW7yV5TKQqLPGbIOtd+6Lfn6xqavT4fG2wLHqiMDn05DpKJKUe2h7lyoKZy2FAjgQ5ANh
|
771 |
+
1NolNscIWC2hp1GvMApJ9aZphwctREZ2jirlmjvXGKL8nDgQzMY70rUXOm/9riW99XJZZLF0Kjhf
|
772 |
+
GEzfz3EEWjbUvy+ZnOjZurGV5gJLIaFb1cFPj65pbVPbAZO1XB4Y3WRayhgoPmMEEf0cjQAPuDff
|
773 |
+
Z4qdZqkCapH/E8ovXYO8h5Ns3CRRFgQlZvqz2cK6Kb6aSDiCmfS/O0oxGfm/jiEzFMpPVF/7zvuP
|
774 |
+
cX/9XhmgD0uRuMRUvAawRY8mkaKO/qk=
|
775 |
+
-----END CERTIFICATE-----
|
776 |
+
|
777 |
+
Visa eCommerce Root
|
778 |
+
===================
|
779 |
+
-----BEGIN CERTIFICATE-----
|
780 |
+
MIIDojCCAoqgAwIBAgIQE4Y1TR0/BvLB+WUF1ZAcYjANBgkqhkiG9w0BAQUFADBrMQswCQYDVQQG
|
781 |
+
EwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2Ug
|
782 |
+
QXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNvbW1lcmNlIFJvb3QwHhcNMDIwNjI2MDIxODM2
|
783 |
+
WhcNMjIwNjI0MDAxNjEyWjBrMQswCQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMm
|
784 |
+
VmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNv
|
785 |
+
bW1lcmNlIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvV95WHm6h2mCxlCfL
|
786 |
+
F9sHP4CFT8icttD0b0/Pmdjh28JIXDqsOTPHH2qLJj0rNfVIsZHBAk4ElpF7sDPwsRROEW+1QK8b
|
787 |
+
RaVK7362rPKgH1g/EkZgPI2h4H3PVz4zHvtH8aoVlwdVZqW1LS7YgFmypw23RuwhY/81q6UCzyr0
|
788 |
+
TP579ZRdhE2o8mCP2w4lPJ9zcc+U30rq299yOIzzlr3xF7zSujtFWsan9sYXiwGd/BmoKoMWuDpI
|
789 |
+
/k4+oKsGGelT84ATB+0tvz8KPFUgOSwsAGl0lUq8ILKpeeUYiZGo3BxN77t+Nwtd/jmliFKMAGzs
|
790 |
+
GHxBvfaLdXe6YJ2E5/4tAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEG
|
791 |
+
MB0GA1UdDgQWBBQVOIMPPyw/cDMezUb+B4wg4NfDtzANBgkqhkiG9w0BAQUFAAOCAQEAX/FBfXxc
|
792 |
+
CLkr4NWSR/pnXKUTwwMhmytMiUbPWU3J/qVAtmPN3XEolWcRzCSs00Rsca4BIGsDoo8Ytyk6feUW
|
793 |
+
YFN4PMCvFYP3j1IzJL1kk5fui/fbGKhtcbP3LBfQdCVp9/5rPJS+TUtBjE7ic9DjkCJzQ83z7+pz
|
794 |
+
zkWKsKZJ/0x9nXGIxHYdkFsd7v3M9+79YKWxehZx0RbQfBI8bGmX265fOZpwLwU8GUYEmSA20GBu
|
795 |
+
YQa7FkKMcPcw++DbZqMAAb3mLNqRX6BGi01qnD093QVG/na/oAo85ADmJ7f/hC3euiInlhBx6yLt
|
796 |
+
398znM/jra6O1I7mT1GvFpLgXPYHDw==
|
797 |
+
-----END CERTIFICATE-----
|
798 |
+
|
799 |
+
Certum Root CA
|
800 |
+
==============
|
801 |
+
-----BEGIN CERTIFICATE-----
|
802 |
+
MIIDDDCCAfSgAwIBAgIDAQAgMA0GCSqGSIb3DQEBBQUAMD4xCzAJBgNVBAYTAlBMMRswGQYDVQQK
|
803 |
+
ExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBDQTAeFw0wMjA2MTExMDQ2Mzla
|
804 |
+
Fw0yNzA2MTExMDQ2MzlaMD4xCzAJBgNVBAYTAlBMMRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8u
|
805 |
+
by4xEjAQBgNVBAMTCUNlcnR1bSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM6x
|
806 |
+
wS7TT3zNJc4YPk/EjG+AanPIW1H4m9LcuwBcsaD8dQPugfCI7iNS6eYVM42sLQnFdvkrOYCJ5JdL
|
807 |
+
kKWoePhzQ3ukYbDYWMzhbGZ+nPMJXlVjhNWo7/OxLjBos8Q82KxujZlakE403Daaj4GIULdtlkIJ
|
808 |
+
89eVgw1BS7Bqa/j8D35in2fE7SZfECYPCE/wpFcozo+47UX2bu4lXapuOb7kky/ZR6By6/qmW6/K
|
809 |
+
Uz/iDsaWVhFu9+lmqSbYf5VT7QqFiLpPKaVCjF62/IUgAKpoC6EahQGcxEZjgoi2IrHu/qpGWX7P
|
810 |
+
NSzVttpd90gzFFS269lvzs2I1qsb2pY7HVkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkq
|
811 |
+
hkiG9w0BAQUFAAOCAQEAuI3O7+cUus/usESSbLQ5PqKEbq24IXfS1HeCh+YgQYHu4vgRt2PRFze+
|
812 |
+
GXYkHAQaTOs9qmdvLdTN/mUxcMUbpgIKumB7bVjCmkn+YzILa+M6wKyrO7Do0wlRjBCDxjTgxSvg
|
813 |
+
GrZgFCdsMneMvLJymM/NzD+5yCRCFNZX/OYmQ6kd5YCQzgNUKD73P9P4Te1qCjqTE5s7FCMTY5w/
|
814 |
+
0YcneeVMUeMBrYVdGjux1XMQpNPyvG5k9VpWkKjHDkx0Dy5xO/fIR/RpbxXyEV6DHpx8Uq79AtoS
|
815 |
+
qFlnGNu8cN2bsWntgM6JQEhqDjXKKWYVIZQs6GAqm4VKQPNriiTsBhYscw==
|
816 |
+
-----END CERTIFICATE-----
|
817 |
+
|
818 |
+
Comodo AAA Services root
|
819 |
+
========================
|
820 |
+
-----BEGIN CERTIFICATE-----
|
821 |
+
MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS
|
822 |
+
R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg
|
823 |
+
TGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAw
|
824 |
+
MFoXDTI4MTIzMTIzNTk1OVowezELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hl
|
825 |
+
c3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNV
|
826 |
+
BAMMGEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
|
827 |
+
ggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQuaBtDFcCLNSS1UY8y2bmhG
|
828 |
+
C1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe3M/vg4aijJRPn2jymJBGhCfHdr/jzDUs
|
829 |
+
i14HZGWCwEiwqJH5YZ92IFCokcdmtet4YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszW
|
830 |
+
Y19zjNoFmag4qMsXeDZRrOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjH
|
831 |
+
Ypy+g8cmez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQUoBEK
|
832 |
+
Iz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wewYDVR0f
|
833 |
+
BHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20vQUFBQ2VydGlmaWNhdGVTZXJ2aWNl
|
834 |
+
cy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29tb2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2Vz
|
835 |
+
LmNybDANBgkqhkiG9w0BAQUFAAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm
|
836 |
+
7l3sAg9g1o1QGE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz
|
837 |
+
Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2G9w84FoVxp7Z
|
838 |
+
8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsil2D4kF501KKaU73yqWjgom7C
|
839 |
+
12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg==
|
840 |
+
-----END CERTIFICATE-----
|
841 |
+
|
842 |
+
Comodo Secure Services root
|
843 |
+
===========================
|
844 |
+
-----BEGIN CERTIFICATE-----
|
845 |
+
MIIEPzCCAyegAwIBAgIBATANBgkqhkiG9w0BAQUFADB+MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS
|
846 |
+
R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg
|
847 |
+
TGltaXRlZDEkMCIGA1UEAwwbU2VjdXJlIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAw
|
848 |
+
MDAwMFoXDTI4MTIzMTIzNTk1OVowfjELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFu
|
849 |
+
Y2hlc3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxJDAi
|
850 |
+
BgNVBAMMG1NlY3VyZSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEP
|
851 |
+
ADCCAQoCggEBAMBxM4KK0HDrc4eCQNUd5MvJDkKQ+d40uaG6EfQlhfPMcm3ye5drswfxdySRXyWP
|
852 |
+
9nQ95IDC+DwN879A6vfIUtFyb+/Iq0G4bi4XKpVpDM3SHpR7LZQdqnXXs5jLrLxkU0C8j6ysNstc
|
853 |
+
rbvd4JQX7NFc0L/vpZXJkMWwrPsbQ996CF23uPJAGysnnlDOXmWCiIxe004MeuoIkbY2qitC++rC
|
854 |
+
oznl2yY4rYsK7hljxxwk3wN42ubqwUcaCwtGCd0C/N7Lh1/XMGNooa7cMqG6vv5Eq2i2pRcV/b3V
|
855 |
+
p6ea5EQz6YiO/O1R65NxTq0B50SOqy3LqP4BSUjwwN3HaNiS/j0CAwEAAaOBxzCBxDAdBgNVHQ4E
|
856 |
+
FgQUPNiTiMLAggnMAZkGkyDpnnAJY08wDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8w
|
857 |
+
gYEGA1UdHwR6MHgwO6A5oDeGNWh0dHA6Ly9jcmwuY29tb2RvY2EuY29tL1NlY3VyZUNlcnRpZmlj
|
858 |
+
YXRlU2VydmljZXMuY3JsMDmgN6A1hjNodHRwOi8vY3JsLmNvbW9kby5uZXQvU2VjdXJlQ2VydGlm
|
859 |
+
aWNhdGVTZXJ2aWNlcy5jcmwwDQYJKoZIhvcNAQEFBQADggEBAIcBbSMdflsXfcFhMs+P5/OKlFlm
|
860 |
+
4J4oqF7Tt/Q05qo5spcWxYJvMqTpjOev/e/C6LlLqqP05tqNZSH7uoDrJiiFGv45jN5bBAS0VPmj
|
861 |
+
Z55B+glSzAVIqMk/IQQezkhr/IXownuvf7fM+F86/TXGDe+X3EyrEeFryzHRbPtIgKvcnDe4IRRL
|
862 |
+
DXE97IMzbtFuMhbsmMcWi1mmNKsFVy2T96oTy9IT4rcuO81rUBcJaD61JlfutuC23bkpgHl9j6Pw
|
863 |
+
pCikFcSF9CfUa7/lXORlAnZUtOM3ZiTTGWHIUhDlizeauan5Hb/qmZJhlv8BzaFfDbxxvA6sCx1H
|
864 |
+
RR3B7Hzs/Sk=
|
865 |
+
-----END CERTIFICATE-----
|
866 |
+
|
867 |
+
Comodo Trusted Services root
|
868 |
+
============================
|
869 |
+
-----BEGIN CERTIFICATE-----
|
870 |
+
MIIEQzCCAyugAwIBAgIBATANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS
|
871 |
+
R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg
|
872 |
+
TGltaXRlZDElMCMGA1UEAwwcVHJ1c3RlZCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczAeFw0wNDAxMDEw
|
873 |
+
MDAwMDBaFw0yODEyMzEyMzU5NTlaMH8xCzAJBgNVBAYTAkdCMRswGQYDVQQIDBJHcmVhdGVyIE1h
|
874 |
+
bmNoZXN0ZXIxEDAOBgNVBAcMB1NhbGZvcmQxGjAYBgNVBAoMEUNvbW9kbyBDQSBMaW1pdGVkMSUw
|
875 |
+
IwYDVQQDDBxUcnVzdGVkIENlcnRpZmljYXRlIFNlcnZpY2VzMIIBIjANBgkqhkiG9w0BAQEFAAOC
|
876 |
+
AQ8AMIIBCgKCAQEA33FvNlhTWvI2VFeAxHQIIO0Yfyod5jWaHiWsnOWWfnJSoBVC21ndZHoa0Lh7
|
877 |
+
3TkVvFVIxO06AOoxEbrycXQaZ7jPM8yoMa+j49d/vzMtTGo87IvDktJTdyR0nAducPy9C1t2ul/y
|
878 |
+
/9c3S0pgePfw+spwtOpZqqPOSC+pw7ILfhdyFgymBwwbOM/JYrc/oJOlh0Hyt3BAd9i+FHzjqMB6
|
879 |
+
juljatEPmsbS9Is6FARW1O24zG71++IsWL1/T2sr92AkWCTOJu80kTrV44HQsvAEAtdbtz6SrGsS
|
880 |
+
ivnkBbA7kUlcsutT6vifR4buv5XAwAaf0lteERv0xwQ1KdJVXOTt6wIDAQABo4HJMIHGMB0GA1Ud
|
881 |
+
DgQWBBTFe1i97doladL3WRaoszLAeydb9DAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB
|
882 |
+
/zCBgwYDVR0fBHwwejA8oDqgOIY2aHR0cDovL2NybC5jb21vZG9jYS5jb20vVHJ1c3RlZENlcnRp
|
883 |
+
ZmljYXRlU2VydmljZXMuY3JsMDqgOKA2hjRodHRwOi8vY3JsLmNvbW9kby5uZXQvVHJ1c3RlZENl
|
884 |
+
cnRpZmljYXRlU2VydmljZXMuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQDIk4E7ibSvuIQSTI3S8Ntw
|
885 |
+
uleGFTQQuS9/HrCoiWChisJ3DFBKmwCL2Iv0QeLQg4pKHBQGsKNoBXAxMKdTmw7pSqBYaWcOrp32
|
886 |
+
pSxBvzwGa+RZzG0Q8ZZvH9/0BAKkn0U+yNj6NkZEUD+Cl5EfKNsYEYwq5GWDVxISjBc/lDb+XbDA
|
887 |
+
BHcTuPQV1T84zJQ6VdCsmPW6AF/ghhmBeC8owH7TzEIK9a5QoNE+xqFx7D+gIIxmOom0jtTYsU0l
|
888 |
+
R+4viMi14QVFwL4Ucd56/Y57fU0IlqUSc/AtyjcndBInTMu2l+nZrghtWjlA3QVHdWpaIbOjGM9O
|
889 |
+
9y5Xt5hwXsjEeLBi
|
890 |
+
-----END CERTIFICATE-----
|
891 |
+
|
892 |
+
QuoVadis Root CA
|
893 |
+
================
|
894 |
+
-----BEGIN CERTIFICATE-----
|
895 |
+
MIIF0DCCBLigAwIBAgIEOrZQizANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJCTTEZMBcGA1UE
|
896 |
+
ChMQUXVvVmFkaXMgTGltaXRlZDElMCMGA1UECxMcUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
|
897 |
+
eTEuMCwGA1UEAxMlUXVvVmFkaXMgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMTAz
|
898 |
+
MTkxODMzMzNaFw0yMTAzMTcxODMzMzNaMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRp
|
899 |
+
cyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQD
|
900 |
+
EyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEF
|
901 |
+
AAOCAQ8AMIIBCgKCAQEAv2G1lVO6V/z68mcLOhrfEYBklbTRvM16z/Ypli4kVEAkOPcahdxYTMuk
|
902 |
+
J0KX0J+DisPkBgNbAKVRHnAEdOLB1Dqr1607BxgFjv2DrOpm2RgbaIr1VxqYuvXtdj182d6UajtL
|
903 |
+
F8HVj71lODqV0D1VNk7feVcxKh7YWWVJWCCYfqtffp/p1k3sg3Spx2zY7ilKhSoGFPlU5tPaZQeL
|
904 |
+
YzcS19Dsw3sgQUSj7cugF+FxZc4dZjH3dgEZyH0DWLaVSR2mEiboxgx24ONmy+pdpibu5cxfvWen
|
905 |
+
AScOospUxbF6lR1xHkopigPcakXBpBlebzbNw6Kwt/5cOOJSvPhEQ+aQuwIDAQABo4ICUjCCAk4w
|
906 |
+
PQYIKwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwczovL29jc3AucXVvdmFkaXNvZmZzaG9y
|
907 |
+
ZS5jb20wDwYDVR0TAQH/BAUwAwEB/zCCARoGA1UdIASCAREwggENMIIBCQYJKwYBBAG+WAABMIH7
|
908 |
+
MIHUBggrBgEFBQcCAjCBxxqBxFJlbGlhbmNlIG9uIHRoZSBRdW9WYWRpcyBSb290IENlcnRpZmlj
|
909 |
+
YXRlIGJ5IGFueSBwYXJ0eSBhc3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJs
|
910 |
+
ZSBzdGFuZGFyZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRpb24gcHJh
|
911 |
+
Y3RpY2VzLCBhbmQgdGhlIFF1b1ZhZGlzIENlcnRpZmljYXRlIFBvbGljeS4wIgYIKwYBBQUHAgEW
|
912 |
+
Fmh0dHA6Ly93d3cucXVvdmFkaXMuYm0wHQYDVR0OBBYEFItLbe3TKbkGGew5Oanwl4Rqy+/fMIGu
|
913 |
+
BgNVHSMEgaYwgaOAFItLbe3TKbkGGew5Oanwl4Rqy+/foYGEpIGBMH8xCzAJBgNVBAYTAkJNMRkw
|
914 |
+
FwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0
|
915 |
+
aG9yaXR5MS4wLAYDVQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggQ6
|
916 |
+
tlCLMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAitQUtf70mpKnGdSkfnIYj9lo
|
917 |
+
fFIk3WdvOXrEql494liwTXCYhGHoG+NpGA7O+0dQoE7/8CQfvbLO9Sf87C9TqnN7Az10buYWnuul
|
918 |
+
LsS/VidQK2K6vkscPFVcQR0kvoIgR13VRH56FmjffU1RcHhXHTMe/QKZnAzNCgVPx7uOpHX6Sm2x
|
919 |
+
gI4JVrmcGmD+XcHXetwReNDWXcG31a0ymQM6isxUJTkxgXsTIlG6Rmyhu576BGxJJnSP0nPrzDCi
|
920 |
+
5upZIof4l/UO/erMkqQWxFIY6iHOsfHmhIHluqmGKPJDWl0Snawe2ajlCmqnf6CHKc/yiU3U7MXi
|
921 |
+
5nrQNiOKSnQ2+Q==
|
922 |
+
-----END CERTIFICATE-----
|
923 |
+
|
924 |
+
QuoVadis Root CA 2
|
925 |
+
==================
|
926 |
+
-----BEGIN CERTIFICATE-----
|
927 |
+
MIIFtzCCA5+gAwIBAgICBQkwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoT
|
928 |
+
EFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJvb3QgQ0EgMjAeFw0wNjExMjQx
|
929 |
+
ODI3MDBaFw0zMTExMjQxODIzMzNaMEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM
|
930 |
+
aW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4IC
|
931 |
+
DwAwggIKAoICAQCaGMpLlA0ALa8DKYrwD4HIrkwZhR0In6spRIXzL4GtMh6QRr+jhiYaHv5+HBg6
|
932 |
+
XJxgFyo6dIMzMH1hVBHL7avg5tKifvVrbxi3Cgst/ek+7wrGsxDp3MJGF/hd/aTa/55JWpzmM+Yk
|
933 |
+
lvc/ulsrHHo1wtZn/qtmUIttKGAr79dgw8eTvI02kfN/+NsRE8Scd3bBrrcCaoF6qUWD4gXmuVbB
|
934 |
+
lDePSHFjIuwXZQeVikvfj8ZaCuWw419eaxGrDPmF60Tp+ARz8un+XJiM9XOva7R+zdRcAitMOeGy
|
935 |
+
lZUtQofX1bOQQ7dsE/He3fbE+Ik/0XX1ksOR1YqI0JDs3G3eicJlcZaLDQP9nL9bFqyS2+r+eXyt
|
936 |
+
66/3FsvbzSUr5R/7mp/iUcw6UwxI5g69ybR2BlLmEROFcmMDBOAENisgGQLodKcftslWZvB1Jdxn
|
937 |
+
wQ5hYIizPtGo/KPaHbDRsSNU30R2be1B2MGyIrZTHN81Hdyhdyox5C315eXbyOD/5YDXC2Og/zOh
|
938 |
+
D7osFRXql7PSorW+8oyWHhqPHWykYTe5hnMz15eWniN9gqRMgeKh0bpnX5UHoycR7hYQe7xFSkyy
|
939 |
+
BNKr79X9DFHOUGoIMfmR2gyPZFwDwzqLID9ujWc9Otb+fVuIyV77zGHcizN300QyNQliBJIWENie
|
940 |
+
J0f7OyHj+OsdWwIDAQABo4GwMIGtMA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1Ud
|
941 |
+
DgQWBBQahGK8SEwzJQTU7tD2A8QZRtGUazBuBgNVHSMEZzBlgBQahGK8SEwzJQTU7tD2A8QZRtGU
|
942 |
+
a6FJpEcwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMT
|
943 |
+
ElF1b1ZhZGlzIFJvb3QgQ0EgMoICBQkwDQYJKoZIhvcNAQEFBQADggIBAD4KFk2fBluornFdLwUv
|
944 |
+
Z+YTRYPENvbzwCYMDbVHZF34tHLJRqUDGCdViXh9duqWNIAXINzng/iN/Ae42l9NLmeyhP3ZRPx3
|
945 |
+
UIHmfLTJDQtyU/h2BwdBR5YM++CCJpNVjP4iH2BlfF/nJrP3MpCYUNQ3cVX2kiF495V5+vgtJodm
|
946 |
+
VjB3pjd4M1IQWK4/YY7yarHvGH5KWWPKjaJW1acvvFYfzznB4vsKqBUsfU16Y8Zsl0Q80m/DShcK
|
947 |
+
+JDSV6IZUaUtl0HaB0+pUNqQjZRG4T7wlP0QADj1O+hA4bRuVhogzG9Yje0uRY/W6ZM/57Es3zrW
|
948 |
+
IozchLsib9D45MY56QSIPMO661V6bYCZJPVsAfv4l7CUW+v90m/xd2gNNWQjrLhVoQPRTUIZ3Ph1
|
949 |
+
WVaj+ahJefivDrkRoHy3au000LYmYjgahwz46P0u05B/B5EqHdZ+XIWDmbA4CD/pXvk1B+TJYm5X
|
950 |
+
f6dQlfe6yJvmjqIBxdZmv3lh8zwc4bmCXF2gw+nYSL0ZohEUGW6yhhtoPkg3Goi3XZZenMfvJ2II
|
951 |
+
4pEZXNLxId26F0KCl3GBUzGpn/Z9Yr9y4aOTHcyKJloJONDO1w2AFrR4pTqHTI2KpdVGl/IsELm8
|
952 |
+
VCLAAVBpQ570su9t+Oza8eOx79+Rj1QqCyXBJhnEUhAFZdWCEOrCMc0u
|
953 |
+
-----END CERTIFICATE-----
|
954 |
+
|
955 |
+
QuoVadis Root CA 3
|
956 |
+
==================
|
957 |
+
-----BEGIN CERTIFICATE-----
|
958 |
+
MIIGnTCCBIWgAwIBAgICBcYwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoT
|
959 |
+
EFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJvb3QgQ0EgMzAeFw0wNjExMjQx
|
960 |
+
OTExMjNaFw0zMTExMjQxOTA2NDRaMEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM
|
961 |
+
aW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4IC
|
962 |
+
DwAwggIKAoICAQDMV0IWVJzmmNPTTe7+7cefQzlKZbPoFog02w1ZkXTPkrgEQK0CSzGrvI2RaNgg
|
963 |
+
DhoB4hp7Thdd4oq3P5kazethq8Jlph+3t723j/z9cI8LoGe+AaJZz3HmDyl2/7FWeUUrH556VOij
|
964 |
+
KTVopAFPD6QuN+8bv+OPEKhyq1hX51SGyMnzW9os2l2ObjyjPtr7guXd8lyyBTNvijbO0BNO/79K
|
965 |
+
DDRMpsMhvVAEVeuxu537RR5kFd5VAYwCdrXLoT9CabwvvWhDFlaJKjdhkf2mrk7AyxRllDdLkgbv
|
966 |
+
BNDInIjbC3uBr7E9KsRlOni27tyAsdLTmZw67mtaa7ONt9XOnMK+pUsvFrGeaDsGb659n/je7Mwp
|
967 |
+
p5ijJUMv7/FfJuGITfhebtfZFG4ZM2mnO4SJk8RTVROhUXhA+LjJou57ulJCg54U7QVSWllWp5f8
|
968 |
+
nT8KKdjcT5EOE7zelaTfi5m+rJsziO+1ga8bxiJTyPbH7pcUsMV8eFLI8M5ud2CEpukqdiDtWAEX
|
969 |
+
MJPpGovgc2PZapKUSU60rUqFxKMiMPwJ7Wgic6aIDFUhWMXhOp8q3crhkODZc6tsgLjoC2SToJyM
|
970 |
+
Gf+z0gzskSaHirOi4XCPLArlzW1oUevaPwV/izLmE1xr/l9A4iLItLRkT9a6fUg+qGkM17uGcclz
|
971 |
+
uD87nSVL2v9A6wIDAQABo4IBlTCCAZEwDwYDVR0TAQH/BAUwAwEB/zCB4QYDVR0gBIHZMIHWMIHT
|
972 |
+
BgkrBgEEAb5YAAMwgcUwgZMGCCsGAQUFBwICMIGGGoGDQW55IHVzZSBvZiB0aGlzIENlcnRpZmlj
|
973 |
+
YXRlIGNvbnN0aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlIFF1b1ZhZGlzIFJvb3QgQ0EgMyBDZXJ0
|
974 |
+
aWZpY2F0ZSBQb2xpY3kgLyBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVudC4wLQYIKwYB
|
975 |
+
BQUHAgEWIWh0dHA6Ly93d3cucXVvdmFkaXNnbG9iYWwuY29tL2NwczALBgNVHQ8EBAMCAQYwHQYD
|
976 |
+
VR0OBBYEFPLAE+CCQz777i9nMpY1XNu4ywLQMG4GA1UdIwRnMGWAFPLAE+CCQz777i9nMpY1XNu4
|
977 |
+
ywLQoUmkRzBFMQswCQYDVQQGEwJCTTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDEbMBkGA1UE
|
978 |
+
AxMSUXVvVmFkaXMgUm9vdCBDQSAzggIFxjANBgkqhkiG9w0BAQUFAAOCAgEAT62gLEz6wPJv92ZV
|
979 |
+
qyM07ucp2sNbtrCD2dDQ4iH782CnO11gUyeim/YIIirnv6By5ZwkajGxkHon24QRiSemd1o417+s
|
980 |
+
hvzuXYO8BsbRd2sPbSQvS3pspweWyuOEn62Iix2rFo1bZhfZFvSLgNLd+LJ2w/w4E6oM3kJpK27z
|
981 |
+
POuAJ9v1pkQNn1pVWQvVDVJIxa6f8i+AxeoyUDUSly7B4f/xI4hROJ/yZlZ25w9Rl6VSDE1JUZU2
|
982 |
+
Pb+iSwwQHYaZTKrzchGT5Or2m9qoXadNt54CrnMAyNojA+j56hl0YgCUyyIgvpSnWbWCar6ZeXqp
|
983 |
+
8kokUvd0/bpO5qgdAm6xDYBEwa7TIzdfu4V8K5Iu6H6li92Z4b8nby1dqnuH/grdS/yO9SbkbnBC
|
984 |
+
bjPsMZ57k8HkyWkaPcBrTiJt7qtYTcbQQcEr6k8Sh17rRdhs9ZgC06DYVYoGmRmioHfRMJ6szHXu
|
985 |
+
g/WwYjnPbFfiTNKRCw51KBuav/0aQ/HKd/s7j2G4aSgWQgRecCocIdiP4b0jWy10QJLZYxkNc91p
|
986 |
+
vGJHvOB0K7Lrfb5BG7XARsWhIstfTsEokt4YutUqKLsRixeTmJlglFwjz1onl14LBQaTNx47aTbr
|
987 |
+
qZ5hHY8y2o4M1nQ+ewkk2gF3R8Q7zTSMmfXK4SVhM7JZG+Ju1zdXtg2pEto=
|
988 |
+
-----END CERTIFICATE-----
|
989 |
+
|
990 |
+
Security Communication Root CA
|
991 |
+
==============================
|
992 |
+
-----BEGIN CERTIFICATE-----
|
993 |
+
MIIDWjCCAkKgAwIBAgIBADANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP
|
994 |
+
U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw
|
995 |
+
HhcNMDMwOTMwMDQyMDQ5WhcNMjMwOTMwMDQyMDQ5WjBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP
|
996 |
+
U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw
|
997 |
+
ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCzs/5/022x7xZ8V6UMbXaKL0u/ZPtM7orw
|
998 |
+
8yl89f/uKuDp6bpbZCKamm8sOiZpUQWZJtzVHGpxxpp9Hp3dfGzGjGdnSj74cbAZJ6kJDKaVv0uM
|
999 |
+
DPpVmDvY6CKhS3E4eayXkmmziX7qIWgGmBSWh9JhNrxtJ1aeV+7AwFb9Ms+k2Y7CI9eNqPPYJayX
|
1000 |
+
5HA49LY6tJ07lyZDo6G8SVlyTCMwhwFY9k6+HGhWZq/NQV3Is00qVUarH9oe4kA92819uZKAnDfd
|
1001 |
+
DJZkndwi92SL32HeFZRSFaB9UslLqCHJxrHty8OVYNEP8Ktw+N/LTX7s1vqr2b1/VPKl6Xn62dZ2
|
1002 |
+
JChzAgMBAAGjPzA9MB0GA1UdDgQWBBSgc0mZaNyFW2XjmygvV5+9M7wHSDALBgNVHQ8EBAMCAQYw
|
1003 |
+
DwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAaECpqLvkT115swW1F7NgE+vGkl3g
|
1004 |
+
0dNq/vu+m22/xwVtWSDEHPC32oRYAmP6SBbvT6UL90qY8j+eG61Ha2POCEfrUj94nK9NrvjVT8+a
|
1005 |
+
mCoQQTlSxN3Zmw7vkwGusi7KaEIkQmywszo+zenaSMQVy+n5Bw+SUEmK3TGXX8npN6o7WWWXlDLJ
|
1006 |
+
s58+OmJYxUmtYg5xpTKqL8aJdkNAExNnPaJUJRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ
|
1007 |
+
6rBK+1YWc26sTfcioU+tHXotRSflMMFe8toTyyVCUZVHA4xsIcx0Qu1T/zOLjw9XARYvz6buyXAi
|
1008 |
+
FL39vmwLAw==
|
1009 |
+
-----END CERTIFICATE-----
|
1010 |
+
|
1011 |
+
Sonera Class 2 Root CA
|
1012 |
+
======================
|
1013 |
+
-----BEGIN CERTIFICATE-----
|
1014 |
+
MIIDIDCCAgigAwIBAgIBHTANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEPMA0GA1UEChMG
|
1015 |
+
U29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MyIENBMB4XDTAxMDQwNjA3Mjk0MFoXDTIxMDQw
|
1016 |
+
NjA3Mjk0MFowOTELMAkGA1UEBhMCRkkxDzANBgNVBAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJh
|
1017 |
+
IENsYXNzMiBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJAXSjWdyvANlsdE+hY3
|
1018 |
+
/Ei9vX+ALTU74W+oZ6m/AxxNjG8yR9VBaKQTBME1DJqEQ/xcHf+Js+gXGM2RX/uJ4+q/Tl18GybT
|
1019 |
+
dXnt5oTjV+WtKcT0OijnpXuENmmz/V52vaMtmdOQTiMofRhj8VQ7Jp12W5dCsv+u8E7s3TmVToMG
|
1020 |
+
f+dJQMjFAbJUWmYdPfz56TwKnoG4cPABi+QjVHzIrviQHgCWctRUz2EjvOr7nQKV0ba5cTppCD8P
|
1021 |
+
tOFCx4j1P5iop7oc4HFx71hXgVB6XGt0Rg6DA5jDjqhu8nYybieDwnPz3BjotJPqdURrBGAgcVeH
|
1022 |
+
nfO+oJAjPYok4doh28MCAwEAAaMzMDEwDwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQISqCqWITT
|
1023 |
+
XjwwCwYDVR0PBAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQBazof5FnIVV0sd2ZvnoiYw7JNn39Yt
|
1024 |
+
0jSv9zilzqsWuasvfDXLrNAPtEwr/IDva4yRXzZ299uzGxnq9LIR/WFxRL8oszodv7ND6J+/3DEI
|
1025 |
+
cbCdjdY0RzKQxmUk96BKfARzjzlvF4xytb1LyHr4e4PDKE6cCepnP7JnBBvDFNr450kkkdAdavph
|
1026 |
+
Oe9r5yF1BgfYErQhIHBCcYHaPJo2vqZbDWpsmh+Re/n570K6Tk6ezAyNlNzZRZxe7EJQY670XcSx
|
1027 |
+
EtzKO6gunRRaBXW37Ndj4ro1tgQIkejanZz2ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLH
|
1028 |
+
llpwrN9M
|
1029 |
+
-----END CERTIFICATE-----
|
1030 |
+
|
1031 |
+
Staat der Nederlanden Root CA
|
1032 |
+
=============================
|
1033 |
+
-----BEGIN CERTIFICATE-----
|
1034 |
+
MIIDujCCAqKgAwIBAgIEAJiWijANBgkqhkiG9w0BAQUFADBVMQswCQYDVQQGEwJOTDEeMBwGA1UE
|
1035 |
+
ChMVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSYwJAYDVQQDEx1TdGFhdCBkZXIgTmVkZXJsYW5kZW4g
|
1036 |
+
Um9vdCBDQTAeFw0wMjEyMTcwOTIzNDlaFw0xNTEyMTYwOTE1MzhaMFUxCzAJBgNVBAYTAk5MMR4w
|
1037 |
+
HAYDVQQKExVTdGFhdCBkZXIgTmVkZXJsYW5kZW4xJjAkBgNVBAMTHVN0YWF0IGRlciBOZWRlcmxh
|
1038 |
+
bmRlbiBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmNK1URF6gaYUmHFt
|
1039 |
+
vsznExvWJw56s2oYHLZhWtVhCb/ekBPHZ+7d89rFDBKeNVU+LCeIQGv33N0iYfXCxw719tV2U02P
|
1040 |
+
jLwYdjeFnejKScfST5gTCaI+Ioicf9byEGW07l8Y1Rfj+MX94p2i71MOhXeiD+EwR+4A5zN9RGca
|
1041 |
+
C1Hoi6CeUJhoNFIfLm0B8mBF8jHrqTFoKbt6QZ7GGX+UtFE5A3+y3qcym7RHjm+0Sq7lr7HcsBth
|
1042 |
+
vJly3uSJt3omXdozSVtSnA71iq3DuD3oBmrC1SoLbHuEvVYFy4ZlkuxEK7COudxwC0barbxjiDn6
|
1043 |
+
22r+I/q85Ej0ZytqERAhSQIDAQABo4GRMIGOMAwGA1UdEwQFMAMBAf8wTwYDVR0gBEgwRjBEBgRV
|
1044 |
+
HSAAMDwwOgYIKwYBBQUHAgEWLmh0dHA6Ly93d3cucGtpb3ZlcmhlaWQubmwvcG9saWNpZXMvcm9v
|
1045 |
+
dC1wb2xpY3kwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBSofeu8Y6R0E3QA7Jbg0zTBLL9s+DAN
|
1046 |
+
BgkqhkiG9w0BAQUFAAOCAQEABYSHVXQ2YcG70dTGFagTtJ+k/rvuFbQvBgwp8qiSpGEN/KtcCFtR
|
1047 |
+
EytNwiphyPgJWPwtArI5fZlmgb9uXJVFIGzmeafR2Bwp/MIgJ1HI8XxdNGdphREwxgDS1/PTfLbw
|
1048 |
+
MVcoEoJz6TMvplW0C5GUR5z6u3pCMuiufi3IvKwUv9kP2Vv8wfl6leF9fpb8cbDCTMjfRTTJzg3y
|
1049 |
+
nGQI0DvDKcWy7ZAEwbEpkcUwb8GpcjPM/l0WFywRaed+/sWDCN+83CI6LiBpIzlWYGeQiy52OfsR
|
1050 |
+
iJf2fL1LuCAWZwWN4jvBcj+UlTfHXbme2JOhF4//DGYVwSR8MnwDHTuhWEUykw==
|
1051 |
+
-----END CERTIFICATE-----
|
1052 |
+
|
1053 |
+
TDC Internet Root CA
|
1054 |
+
====================
|
1055 |
+
-----BEGIN CERTIFICATE-----
|
1056 |
+
MIIEKzCCAxOgAwIBAgIEOsylTDANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQGEwJESzEVMBMGA1UE
|
1057 |
+
ChMMVERDIEludGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQgUm9vdCBDQTAeFw0wMTA0MDUx
|
1058 |
+
NjMzMTdaFw0yMTA0MDUxNzAzMTdaMEMxCzAJBgNVBAYTAkRLMRUwEwYDVQQKEwxUREMgSW50ZXJu
|
1059 |
+
ZXQxHTAbBgNVBAsTFFREQyBJbnRlcm5ldCBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
|
1060 |
+
MIIBCgKCAQEAxLhAvJHVYx/XmaCLDEAedLdInUaMArLgJF/wGROnN4NrXceO+YQwzho7+vvOi20j
|
1061 |
+
xsNuZp+Jpd/gQlBn+h9sHvTQBda/ytZO5GhgbEaqHF1j4QeGDmUApy6mcca8uYGoOn0a0vnRrEvL
|
1062 |
+
znWv3Hv6gXPU/Lq9QYjUdLP5Xjg6PEOo0pVOd20TDJ2PeAG3WiAfAzc14izbSysseLlJ28TQx5yc
|
1063 |
+
5IogCSEWVmb/Bexb4/DPqyQkXsN/cHoSxNK1EKC2IeGNeGlVRGn1ypYcNIUXJXfi9i8nmHj9eQY6
|
1064 |
+
otZaQ8H/7AQ77hPv01ha/5Lr7K7a8jcDR0G2l8ktCkEiu7vmpwIDAQABo4IBJTCCASEwEQYJYIZI
|
1065 |
+
AYb4QgEBBAQDAgAHMGUGA1UdHwReMFwwWqBYoFakVDBSMQswCQYDVQQGEwJESzEVMBMGA1UEChMM
|
1066 |
+
VERDIEludGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQgUm9vdCBDQTENMAsGA1UEAxMEQ1JM
|
1067 |
+
MTArBgNVHRAEJDAigA8yMDAxMDQwNTE2MzMxN1qBDzIwMjEwNDA1MTcwMzE3WjALBgNVHQ8EBAMC
|
1068 |
+
AQYwHwYDVR0jBBgwFoAUbGQBx/2FbazI2p5QCIUItTxWqFAwHQYDVR0OBBYEFGxkAcf9hW2syNqe
|
1069 |
+
UAiFCLU8VqhQMAwGA1UdEwQFMAMBAf8wHQYJKoZIhvZ9B0EABBAwDhsIVjUuMDo0LjADAgSQMA0G
|
1070 |
+
CSqGSIb3DQEBBQUAA4IBAQBOQ8zR3R0QGwZ/t6T609lN+yOfI1Rb5osvBCiLtSdtiaHsmGnc540m
|
1071 |
+
gwV5dOy0uaOXwTUA/RXaOYE6lTGQ3pfphqiZdwzlWqCE/xIWrG64jcN7ksKsLtB9KOy282A4aW8+
|
1072 |
+
2ARVPp7MVdK6/rtHBNcK2RYKNCn1WBPVT8+PVkuzHu7TmHnaCB4Mb7j4Fifvwm899qNLPg7kbWzb
|
1073 |
+
O0ESm70NRyN/PErQr8Cv9u8btRXE64PECV90i9kR+8JWsTz4cMo0jUNAE4z9mQNUecYu6oah9jrU
|
1074 |
+
Cbz0vGbMPVjQV0kK7iXiQe4T+Zs4NNEA9X7nlB38aQNiuJkFBT1reBK9sG9l
|
1075 |
+
-----END CERTIFICATE-----
|
1076 |
+
|
1077 |
+
TDC OCES Root CA
|
1078 |
+
================
|
1079 |
+
-----BEGIN CERTIFICATE-----
|
1080 |
+
MIIFGTCCBAGgAwIBAgIEPki9xDANBgkqhkiG9w0BAQUFADAxMQswCQYDVQQGEwJESzEMMAoGA1UE
|
1081 |
+
ChMDVERDMRQwEgYDVQQDEwtUREMgT0NFUyBDQTAeFw0wMzAyMTEwODM5MzBaFw0zNzAyMTEwOTA5
|
1082 |
+
MzBaMDExCzAJBgNVBAYTAkRLMQwwCgYDVQQKEwNUREMxFDASBgNVBAMTC1REQyBPQ0VTIENBMIIB
|
1083 |
+
IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArGL2YSCyz8DGhdfjeebM7fI5kqSXLmSjhFuH
|
1084 |
+
nEz9pPPEXyG9VhDr2y5h7JNp46PMvZnDBfwGuMo2HP6QjklMxFaaL1a8z3sM8W9Hpg1DTeLpHTk0
|
1085 |
+
zY0s2RKY+ePhwUp8hjjEqcRhiNJerxomTdXkoCJHhNlktxmW/OwZ5LKXJk5KTMuPJItUGBxIYXvV
|
1086 |
+
iGjaXbXqzRowwYCDdlCqT9HU3Tjw7xb04QxQBr/q+3pJoSgrHPb8FTKjdGqPqcNiKXEx5TukYBde
|
1087 |
+
dObaE+3pHx8b0bJoc8YQNHVGEBDjkAB2QMuLt0MJIf+rTpPGWOmlgtt3xDqZsXKVSQTwtyv6e1mO
|
1088 |
+
3QIDAQABo4ICNzCCAjMwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwgewGA1UdIASB
|
1089 |
+
5DCB4TCB3gYIKoFQgSkBAQEwgdEwLwYIKwYBBQUHAgEWI2h0dHA6Ly93d3cuY2VydGlmaWthdC5k
|
1090 |
+
ay9yZXBvc2l0b3J5MIGdBggrBgEFBQcCAjCBkDAKFgNUREMwAwIBARqBgUNlcnRpZmlrYXRlciBm
|
1091 |
+
cmEgZGVubmUgQ0EgdWRzdGVkZXMgdW5kZXIgT0lEIDEuMi4yMDguMTY5LjEuMS4xLiBDZXJ0aWZp
|
1092 |
+
Y2F0ZXMgZnJvbSB0aGlzIENBIGFyZSBpc3N1ZWQgdW5kZXIgT0lEIDEuMi4yMDguMTY5LjEuMS4x
|
1093 |
+
LjARBglghkgBhvhCAQEEBAMCAAcwgYEGA1UdHwR6MHgwSKBGoESkQjBAMQswCQYDVQQGEwJESzEM
|
1094 |
+
MAoGA1UEChMDVERDMRQwEgYDVQQDEwtUREMgT0NFUyBDQTENMAsGA1UEAxMEQ1JMMTAsoCqgKIYm
|
1095 |
+
aHR0cDovL2NybC5vY2VzLmNlcnRpZmlrYXQuZGsvb2Nlcy5jcmwwKwYDVR0QBCQwIoAPMjAwMzAy
|
1096 |
+
MTEwODM5MzBagQ8yMDM3MDIxMTA5MDkzMFowHwYDVR0jBBgwFoAUYLWF7FZkfhIZJ2cdUBVLc647
|
1097 |
+
+RIwHQYDVR0OBBYEFGC1hexWZH4SGSdnHVAVS3OuO/kSMB0GCSqGSIb2fQdBAAQQMA4bCFY2LjA6
|
1098 |
+
NC4wAwIEkDANBgkqhkiG9w0BAQUFAAOCAQEACromJkbTc6gJ82sLMJn9iuFXehHTuJTXCRBuo7E4
|
1099 |
+
A9G28kNBKWKnctj7fAXmMXAnVBhOinxO5dHKjHiIzxvTkIvmI/gLDjNDfZziChmPyQE+dF10yYsc
|
1100 |
+
A+UYyAFMP8uXBV2YcaaYb7Z8vTd/vuGTJW1v8AqtFxjhA7wHKcitJuj4YfD9IQl+mo6paH1IYnK9
|
1101 |
+
AOoBmbgGglGBTvH1tJFUuSN6AJqfXY3gPGS5GhKSKseCRHI53OI8xthV9RVOyAUO28bQYqbsFbS1
|
1102 |
+
AoLbrIyigfCbmTH1ICCoiGEKB5+U/NDXG8wuF/MEJ3Zn61SD/aSQfgY9BKNDLdr8C2LqL19iUw==
|
1103 |
+
-----END CERTIFICATE-----
|
1104 |
+
|
1105 |
+
UTN DATACorp SGC Root CA
|
1106 |
+
========================
|
1107 |
+
-----BEGIN CERTIFICATE-----
|
1108 |
+
MIIEXjCCA0agAwIBAgIQRL4Mi1AAIbQR0ypoBqmtaTANBgkqhkiG9w0BAQUFADCBkzELMAkGA1UE
|
1109 |
+
BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl
|
1110 |
+
IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xGzAZ
|
1111 |
+
BgNVBAMTElVUTiAtIERBVEFDb3JwIFNHQzAeFw05OTA2MjQxODU3MjFaFw0xOTA2MjQxOTA2MzBa
|
1112 |
+
MIGTMQswCQYDVQQGEwJVUzELMAkGA1UECBMCVVQxFzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4w
|
1113 |
+
HAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cudXNlcnRy
|
1114 |
+
dXN0LmNvbTEbMBkGA1UEAxMSVVROIC0gREFUQUNvcnAgU0dDMIIBIjANBgkqhkiG9w0BAQEFAAOC
|
1115 |
+
AQ8AMIIBCgKCAQEA3+5YEKIrblXEjr8uRgnn4AgPLit6E5Qbvfa2gI5lBZMAHryv4g+OGQ0SR+ys
|
1116 |
+
raP6LnD43m77VkIVni5c7yPeIbkFdicZD0/Ww5y0vpQZY/KmEQrrU0icvvIpOxboGqBMpsn0GFlo
|
1117 |
+
wHDyUwDAXlCCpVZvNvlK4ESGoE1O1kduSUrLZ9emxAW5jh70/P/N5zbgnAVssjMiFdC04MwXwLLA
|
1118 |
+
9P4yPykqlXvY8qdOD1R8oQ2AswkDwf9c3V6aPryuvEeKaq5xyh+xKrhfQgUL7EYw0XILyulWbfXv
|
1119 |
+
33i+Ybqypa4ETLyorGkVl73v67SMvzX41MPRKA5cOp9wGDMgd8SirwIDAQABo4GrMIGoMAsGA1Ud
|
1120 |
+
DwQEAwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRTMtGzz3/64PGgXYVOktKeRR20TzA9
|
1121 |
+
BgNVHR8ENjA0MDKgMKAuhixodHRwOi8vY3JsLnVzZXJ0cnVzdC5jb20vVVROLURBVEFDb3JwU0dD
|
1122 |
+
LmNybDAqBgNVHSUEIzAhBggrBgEFBQcDAQYKKwYBBAGCNwoDAwYJYIZIAYb4QgQBMA0GCSqGSIb3
|
1123 |
+
DQEBBQUAA4IBAQAnNZcAiosovcYzMB4p/OL31ZjUQLtgyr+rFywJNn9Q+kHcrpY6CiM+iVnJowft
|
1124 |
+
Gzet/Hy+UUla3joKVAgWRcKZsYfNjGjgaQPpxE6YsjuMFrMOoAyYUJuTqXAJyCyjj98C5OBxOvG0
|
1125 |
+
I3KgqgHf35g+FFCgMSa9KOlaMCZ1+XtgHI3zzVAmbQQnmt/VDUVHKWss5nbZqSl9Mt3JNjy9rjXx
|
1126 |
+
EZ4du5A/EkdOjtd+D2JzHVImOBwYSf0wdJrE5SIv2MCN7ZF6TACPcn9d2t0bi0Vr591pl6jFVkwP
|
1127 |
+
DPafepE39peC4N1xaf92P2BNPM/3mfnGV/TJVTl4uix5yaaIK/QI
|
1128 |
+
-----END CERTIFICATE-----
|
1129 |
+
|
1130 |
+
UTN USERFirst Hardware Root CA
|
1131 |
+
==============================
|
1132 |
+
-----BEGIN CERTIFICATE-----
|
1133 |
+
MIIEdDCCA1ygAwIBAgIQRL4Mi1AAJLQR0zYq/mUK/TANBgkqhkiG9w0BAQUFADCBlzELMAkGA1UE
|
1134 |
+
BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl
|
1135 |
+
IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHzAd
|
1136 |
+
BgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdhcmUwHhcNOTkwNzA5MTgxMDQyWhcNMTkwNzA5MTgx
|
1137 |
+
OTIyWjCBlzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0
|
1138 |
+
eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVz
|
1139 |
+
ZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdhcmUwggEiMA0GCSqGSIb3
|
1140 |
+
DQEBAQUAA4IBDwAwggEKAoIBAQCx98M4P7Sof885glFn0G2f0v9Y8+efK+wNiVSZuTiZFvfgIXlI
|
1141 |
+
wrthdBKWHTxqctU8EGc6Oe0rE81m65UJM6Rsl7HoxuzBdXmcRl6Nq9Bq/bkqVRcQVLMZ8Jr28bFd
|
1142 |
+
tqdt++BxF2uiiPsA3/4aMXcMmgF6sTLjKwEHOG7DpV4jvEWbe1DByTCP2+UretNb+zNAHqDVmBe8
|
1143 |
+
i4fDidNdoI6yqqr2jmmIBsX6iSHzCJ1pLgkzmykNRg+MzEk0sGlRvfkGzWitZky8PqxhvQqIDsjf
|
1144 |
+
Pe58BEydCl5rkdbux+0ojatNh4lz0G6k0B4WixThdkQDf2Os5M1JnMWS9KsyoUhbAgMBAAGjgbkw
|
1145 |
+
gbYwCwYDVR0PBAQDAgHGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFKFyXyYbKJhDlV0HN9WF
|
1146 |
+
lp1L0sNFMEQGA1UdHwQ9MDswOaA3oDWGM2h0dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9VVE4tVVNF
|
1147 |
+
UkZpcnN0LUhhcmR3YXJlLmNybDAxBgNVHSUEKjAoBggrBgEFBQcDAQYIKwYBBQUHAwUGCCsGAQUF
|
1148 |
+
BwMGBggrBgEFBQcDBzANBgkqhkiG9w0BAQUFAAOCAQEARxkP3nTGmZev/K0oXnWO6y1n7k57K9cM
|
1149 |
+
//bey1WiCuFMVGWTYGufEpytXoMs61quwOQt9ABjHbjAbPLPSbtNk28GpgoiskliCE7/yMgUsogW
|
1150 |
+
XecB5BKV5UU0s4tpvc+0hY91UZ59Ojg6FEgSxvunOxqNDYJAB+gECJChicsZUN/KHAG8HQQZexB2
|
1151 |
+
lzvukJDKxA4fFm517zP4029bHpbj4HR3dHuKom4t3XbWOTCC8KucUvIqx69JXn7HaOWCgchqJ/kn
|
1152 |
+
iCrVWFCVH/A7HFe7fRQ5YiuayZSSKqMiDP+JJn1fIytH1xUdqWqeUQ0qUZ6B+dQ7XnASfxAynB67
|
1153 |
+
nfhmqA==
|
1154 |
+
-----END CERTIFICATE-----
|
1155 |
+
|
1156 |
+
Camerfirma Chambers of Commerce Root
|
1157 |
+
====================================
|
1158 |
+
-----BEGIN CERTIFICATE-----
|
1159 |
+
MIIEvTCCA6WgAwIBAgIBADANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJFVTEnMCUGA1UEChMe
|
1160 |
+
QUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1i
|
1161 |
+
ZXJzaWduLm9yZzEiMCAGA1UEAxMZQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdDAeFw0wMzA5MzAx
|
1162 |
+
NjEzNDNaFw0zNzA5MzAxNjEzNDRaMH8xCzAJBgNVBAYTAkVVMScwJQYDVQQKEx5BQyBDYW1lcmZp
|
1163 |
+
cm1hIFNBIENJRiBBODI3NDMyODcxIzAhBgNVBAsTGmh0dHA6Ly93d3cuY2hhbWJlcnNpZ24ub3Jn
|
1164 |
+
MSIwIAYDVQQDExlDaGFtYmVycyBvZiBDb21tZXJjZSBSb290MIIBIDANBgkqhkiG9w0BAQEFAAOC
|
1165 |
+
AQ0AMIIBCAKCAQEAtzZV5aVdGDDg2olUkfzIx1L4L1DZ77F1c2VHfRtbunXF/KGIJPov7coISjlU
|
1166 |
+
xFF6tdpg6jg8gbLL8bvZkSM/SAFwdakFKq0fcfPJVD0dBmpAPrMMhe5cG3nCYsS4No41XQEMIwRH
|
1167 |
+
NaqbYE6gZj3LJgqcQKH0XZi/caulAGgq7YN6D6IUtdQis4CwPAxaUWktWBiP7Zme8a7ileb2R6jW
|
1168 |
+
DA+wWFjbw2Y3npuRVDM30pQcakjJyfKl2qUMI/cjDpwyVV5xnIQFUZot/eZOKjRa3spAN2cMVCFV
|
1169 |
+
d9oKDMyXroDclDZK9D7ONhMeU+SsTjoF7Nuucpw4i9A5O4kKPnf+dQIBA6OCAUQwggFAMBIGA1Ud
|
1170 |
+
EwEB/wQIMAYBAf8CAQwwPAYDVR0fBDUwMzAxoC+gLYYraHR0cDovL2NybC5jaGFtYmVyc2lnbi5v
|
1171 |
+
cmcvY2hhbWJlcnNyb290LmNybDAdBgNVHQ4EFgQU45T1sU3p26EpW1eLTXYGduHRooowDgYDVR0P
|
1172 |
+
AQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzAnBgNVHREEIDAegRxjaGFtYmVyc3Jvb3RAY2hh
|
1173 |
+
bWJlcnNpZ24ub3JnMCcGA1UdEgQgMB6BHGNoYW1iZXJzcm9vdEBjaGFtYmVyc2lnbi5vcmcwWAYD
|
1174 |
+
VR0gBFEwTzBNBgsrBgEEAYGHLgoDATA+MDwGCCsGAQUFBwIBFjBodHRwOi8vY3BzLmNoYW1iZXJz
|
1175 |
+
aWduLm9yZy9jcHMvY2hhbWJlcnNyb290Lmh0bWwwDQYJKoZIhvcNAQEFBQADggEBAAxBl8IahsAi
|
1176 |
+
fJ/7kPMa0QOx7xP5IV8EnNrJpY0nbJaHkb5BkAFyk+cefV/2icZdp0AJPaxJRUXcLo0waLIJuvvD
|
1177 |
+
L8y6C98/d3tGfToSJI6WjzwFCm/SlCgdbQzALogi1djPHRPH8EjX1wWnz8dHnjs8NMiAT9QUu/wN
|
1178 |
+
UPf6s+xCX6ndbcj0dc97wXImsQEcXCz9ek60AcUFV7nnPKoF2YjpB0ZBzu9Bga5Y34OirsrXdx/n
|
1179 |
+
ADydb47kMgkdTXg0eDQ8lJsm7U9xxhl6vSAiSFr+S30Dt+dYvsYyTnQeaN2oaFuzPu5ifdmA6Ap1
|
1180 |
+
erfutGWaIZDgqtCYvDi1czyL+Nw=
|
1181 |
+
-----END CERTIFICATE-----
|
1182 |
+
|
1183 |
+
Camerfirma Global Chambersign Root
|
1184 |
+
==================================
|
1185 |
+
-----BEGIN CERTIFICATE-----
|
1186 |
+
MIIExTCCA62gAwIBAgIBADANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJFVTEnMCUGA1UEChMe
|
1187 |
+
QUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1i
|
1188 |
+
ZXJzaWduLm9yZzEgMB4GA1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwHhcNMDMwOTMwMTYx
|
1189 |
+
NDE4WhcNMzcwOTMwMTYxNDE4WjB9MQswCQYDVQQGEwJFVTEnMCUGA1UEChMeQUMgQ2FtZXJmaXJt
|
1190 |
+
YSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEg
|
1191 |
+
MB4GA1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwggEgMA0GCSqGSIb3DQEBAQUAA4IBDQAw
|
1192 |
+
ggEIAoIBAQCicKLQn0KuWxfH2H3PFIP8T8mhtxOviteePgQKkotgVvq0Mi+ITaFgCPS3CU6gSS9J
|
1193 |
+
1tPfnZdan5QEcOw/Wdm3zGaLmFIoCQLfxS+EjXqXd7/sQJ0lcqu1PzKY+7e3/HKE5TWH+VX6ox8O
|
1194 |
+
by4o3Wmg2UIQxvi1RMLQQ3/bvOSiPGpVeAp3qdjqGTK3L/5cPxvusZjsyq16aUXjlg9V9ubtdepl
|
1195 |
+
6DJWk0aJqCWKZQbua795B9Dxt6/tLE2Su8CoX6dnfQTyFQhwrJLWfQTSM/tMtgsL+xrJxI0DqX5c
|
1196 |
+
8lCrEqWhz0hQpe/SyBoT+rB/sYIcd2oPX9wLlY/vQ37mRQklAgEDo4IBUDCCAUwwEgYDVR0TAQH/
|
1197 |
+
BAgwBgEB/wIBDDA/BgNVHR8EODA2MDSgMqAwhi5odHRwOi8vY3JsLmNoYW1iZXJzaWduLm9yZy9j
|
1198 |
+
aGFtYmVyc2lnbnJvb3QuY3JsMB0GA1UdDgQWBBRDnDafsJ4wTcbOX60Qq+UDpfqpFDAOBgNVHQ8B
|
1199 |
+
Af8EBAMCAQYwEQYJYIZIAYb4QgEBBAQDAgAHMCoGA1UdEQQjMCGBH2NoYW1iZXJzaWducm9vdEBj
|
1200 |
+
aGFtYmVyc2lnbi5vcmcwKgYDVR0SBCMwIYEfY2hhbWJlcnNpZ25yb290QGNoYW1iZXJzaWduLm9y
|
1201 |
+
ZzBbBgNVHSAEVDBSMFAGCysGAQQBgYcuCgEBMEEwPwYIKwYBBQUHAgEWM2h0dHA6Ly9jcHMuY2hh
|
1202 |
+
bWJlcnNpZ24ub3JnL2Nwcy9jaGFtYmVyc2lnbnJvb3QuaHRtbDANBgkqhkiG9w0BAQUFAAOCAQEA
|
1203 |
+
PDtwkfkEVCeR4e3t/mh/YV3lQWVPMvEYBZRqHN4fcNs+ezICNLUMbKGKfKX0j//U2K0X1S0E0T9Y
|
1204 |
+
gOKBWYi+wONGkyT+kL0mojAt6JcmVzWJdJYY9hXiryQZVgICsroPFOrGimbBhkVVi76SvpykBMdJ
|
1205 |
+
PJ7oKXqJ1/6v/2j1pReQvayZzKWGVwlnRtvWFsJG8eSpUPWP0ZIV018+xgBJOm5YstHRJw0lyDL4
|
1206 |
+
IBHNfTIzSJRUTN3cecQwn+uOuFW114hcxWokPbLTBQNRxgfvzBRydD1ucs4YKIxKoHflCStFREes
|
1207 |
+
t2d/AYoFWpO+ocH/+OcOZ6RHSXZddZAa9SaP8A==
|
1208 |
+
-----END CERTIFICATE-----
|
1209 |
+
|
1210 |
+
NetLock Notary (Class A) Root
|
1211 |
+
=============================
|
1212 |
+
-----BEGIN CERTIFICATE-----
|
1213 |
+
MIIGfTCCBWWgAwIBAgICAQMwDQYJKoZIhvcNAQEEBQAwga8xCzAJBgNVBAYTAkhVMRAwDgYDVQQI
|
1214 |
+
EwdIdW5nYXJ5MREwDwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6
|
1215 |
+
dG9uc2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9j
|
1216 |
+
ayBLb3pqZWd5em9pIChDbGFzcyBBKSBUYW51c2l0dmFueWtpYWRvMB4XDTk5MDIyNDIzMTQ0N1oX
|
1217 |
+
DTE5MDIxOTIzMTQ0N1owga8xCzAJBgNVBAYTAkhVMRAwDgYDVQQIEwdIdW5nYXJ5MREwDwYDVQQH
|
1218 |
+
EwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6dG9uc2FnaSBLZnQuMRowGAYD
|
1219 |
+
VQQLExFUYW51c2l0dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9jayBLb3pqZWd5em9pIChDbGFz
|
1220 |
+
cyBBKSBUYW51c2l0dmFueWtpYWRvMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvHSM
|
1221 |
+
D7tM9DceqQWC2ObhbHDqeLVu0ThEDaiDzl3S1tWBxdRL51uUcCbbO51qTGL3cfNk1mE7PetzozfZ
|
1222 |
+
z+qMkjvN9wfcZnSX9EUi3fRc4L9t875lM+QVOr/bmJBVOMTtplVjC7B4BPTjbsE/jvxReB+SnoPC
|
1223 |
+
/tmwqcm8WgD/qaiYdPv2LD4VOQ22BFWoDpggQrOxJa1+mm9dU7GrDPzr4PN6s6iz/0b2Y6LYOph7
|
1224 |
+
tqyF/7AlT3Rj5xMHpQqPBffAZG9+pyeAlt7ULoZgx2srXnN7F+eRP2QM2EsiNCubMvJIH5+hCoR6
|
1225 |
+
4sKtlz2O1cH5VqNQ6ca0+pii7pXmKgOM3wIDAQABo4ICnzCCApswDgYDVR0PAQH/BAQDAgAGMBIG
|
1226 |
+
A1UdEwEB/wQIMAYBAf8CAQQwEQYJYIZIAYb4QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaC
|
1227 |
+
Ak1GSUdZRUxFTSEgRXplbiB0YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFub3MgU3pv
|
1228 |
+
bGdhbHRhdGFzaSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBhbGFwamFuIGtlc3p1bHQu
|
1229 |
+
IEEgaGl0ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExvY2sgS2Z0LiB0ZXJtZWtmZWxlbG9zc2Vn
|
1230 |
+
LWJpenRvc2l0YXNhIHZlZGkuIEEgZGlnaXRhbGlzIGFsYWlyYXMgZWxmb2dhZGFzYW5hayBmZWx0
|
1231 |
+
ZXRlbGUgYXogZWxvaXJ0IGVsbGVub3J6ZXNpIGVsamFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFz
|
1232 |
+
IGxlaXJhc2EgbWVndGFsYWxoYXRvIGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGphbiBh
|
1233 |
+
IGh0dHBzOi8vd3d3Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJoZXRvIGF6IGVsbGVu
|
1234 |
+
b3J6ZXNAbmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBPUlRBTlQhIFRoZSBpc3N1YW5jZSBh
|
1235 |
+
bmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGlzIHN1YmplY3QgdG8gdGhlIE5ldExvY2sg
|
1236 |
+
Q1BTIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFp
|
1237 |
+
bCBhdCBjcHNAbmV0bG9jay5uZXQuMA0GCSqGSIb3DQEBBAUAA4IBAQBIJEb3ulZv+sgoA0BO5TE5
|
1238 |
+
ayZrU3/b39/zcT0mwBQOxmd7I6gMc90Bu8bKbjc5VdXHjFYgDigKDtIqpLBJUsY4B/6+CgmM0ZjP
|
1239 |
+
ytoUMaFP0jn8DxEsQ8Pdq5PHVT5HfBgaANzze9jyf1JsIPQLX2lS9O74silg6+NJMSEN1rUQQeJB
|
1240 |
+
CWziGppWS3cC9qCbmieH6FUpccKQn0V4GuEVZD3QDtigdp+uxdAu6tYPVuxkf1qbFFgBJ34TUMdr
|
1241 |
+
KuZoPL9coAob4Q566eKAw+np9v1sEZ7Q5SgnK1QyQhSCdeZK8CtmdWOMovsEPoMOmzbwGOQmIMOM
|
1242 |
+
8CgHrTwXZoi1/baI
|
1243 |
+
-----END CERTIFICATE-----
|
1244 |
+
|
1245 |
+
NetLock Business (Class B) Root
|
1246 |
+
===============================
|
1247 |
+
-----BEGIN CERTIFICATE-----
|
1248 |
+
MIIFSzCCBLSgAwIBAgIBaTANBgkqhkiG9w0BAQQFADCBmTELMAkGA1UEBhMCSFUxETAPBgNVBAcT
|
1249 |
+
CEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0b25zYWdpIEtmdC4xGjAYBgNV
|
1250 |
+
BAsTEVRhbnVzaXR2YW55a2lhZG9rMTIwMAYDVQQDEylOZXRMb2NrIFV6bGV0aSAoQ2xhc3MgQikg
|
1251 |
+
VGFudXNpdHZhbnlraWFkbzAeFw05OTAyMjUxNDEwMjJaFw0xOTAyMjAxNDEwMjJaMIGZMQswCQYD
|
1252 |
+
VQQGEwJIVTERMA8GA1UEBxMIQnVkYXBlc3QxJzAlBgNVBAoTHk5ldExvY2sgSGFsb3phdGJpenRv
|
1253 |
+
bnNhZ2kgS2Z0LjEaMBgGA1UECxMRVGFudXNpdHZhbnlraWFkb2sxMjAwBgNVBAMTKU5ldExvY2sg
|
1254 |
+
VXpsZXRpIChDbGFzcyBCKSBUYW51c2l0dmFueWtpYWRvMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCB
|
1255 |
+
iQKBgQCx6gTsIKAjwo84YM/HRrPVG/77uZmeBNwcf4xKgZjupNTKihe5In+DCnVMm8Bp2GQ5o+2S
|
1256 |
+
o/1bXHQawEfKOml2mrriRBf8TKPV/riXiK+IA4kfpPIEPsgHC+b5sy96YhQJRhTKZPWLgLViqNhr
|
1257 |
+
1nGTLbO/CVRY7QbrqHvcQ7GhaQIDAQABo4ICnzCCApswEgYDVR0TAQH/BAgwBgEB/wIBBDAOBgNV
|
1258 |
+
HQ8BAf8EBAMCAAYwEQYJYIZIAYb4QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaCAk1GSUdZ
|
1259 |
+
RUxFTSEgRXplbiB0YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFub3MgU3pvbGdhbHRh
|
1260 |
+
dGFzaSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBhbGFwamFuIGtlc3p1bHQuIEEgaGl0
|
1261 |
+
ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExvY2sgS2Z0LiB0ZXJtZWtmZWxlbG9zc2VnLWJpenRv
|
1262 |
+
c2l0YXNhIHZlZGkuIEEgZGlnaXRhbGlzIGFsYWlyYXMgZWxmb2dhZGFzYW5hayBmZWx0ZXRlbGUg
|
1263 |
+
YXogZWxvaXJ0IGVsbGVub3J6ZXNpIGVsamFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFzIGxlaXJh
|
1264 |
+
c2EgbWVndGFsYWxoYXRvIGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGphbiBhIGh0dHBz
|
1265 |
+
Oi8vd3d3Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJoZXRvIGF6IGVsbGVub3J6ZXNA
|
1266 |
+
bmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBPUlRBTlQhIFRoZSBpc3N1YW5jZSBhbmQgdGhl
|
1267 |
+
IHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGlzIHN1YmplY3QgdG8gdGhlIE5ldExvY2sgQ1BTIGF2
|
1268 |
+
YWlsYWJsZSBhdCBodHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFpbCBhdCBj
|
1269 |
+
cHNAbmV0bG9jay5uZXQuMA0GCSqGSIb3DQEBBAUAA4GBAATbrowXr/gOkDFOzT4JwG06sPgzTEdM
|
1270 |
+
43WIEJessDgVkcYplswhwG08pXTP2IKlOcNl40JwuyKQ433bNXbhoLXan3BukxowOR0w2y7jfLKR
|
1271 |
+
stE3Kfq51hdcR0/jHTjrn9V7lagonhVK0dHQKwCXoOKSNitjrFgBazMpUIaD8QFI
|
1272 |
+
-----END CERTIFICATE-----
|
1273 |
+
|
1274 |
+
NetLock Express (Class C) Root
|
1275 |
+
==============================
|
1276 |
+
-----BEGIN CERTIFICATE-----
|
1277 |
+
MIIFTzCCBLigAwIBAgIBaDANBgkqhkiG9w0BAQQFADCBmzELMAkGA1UEBhMCSFUxETAPBgNVBAcT
|
1278 |
+
CEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0b25zYWdpIEtmdC4xGjAYBgNV
|
1279 |
+
BAsTEVRhbnVzaXR2YW55a2lhZG9rMTQwMgYDVQQDEytOZXRMb2NrIEV4cHJlc3N6IChDbGFzcyBD
|
1280 |
+
KSBUYW51c2l0dmFueWtpYWRvMB4XDTk5MDIyNTE0MDgxMVoXDTE5MDIyMDE0MDgxMVowgZsxCzAJ
|
1281 |
+
BgNVBAYTAkhVMREwDwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6
|
1282 |
+
dG9uc2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE0MDIGA1UEAxMrTmV0TG9j
|
1283 |
+
ayBFeHByZXNzeiAoQ2xhc3MgQykgVGFudXNpdHZhbnlraWFkbzCBnzANBgkqhkiG9w0BAQEFAAOB
|
1284 |
+
jQAwgYkCgYEA6+ywbGGKIyWvYCDj2Z/8kwvbXY2wobNAOoLO/XXgeDIDhlqGlZHtU/qdQPzm6N3Z
|
1285 |
+
W3oDvV3zOwzDUXmbrVWg6dADEK8KuhRC2VImESLH0iDMgqSaqf64gXadarfSNnU+sYYJ9m5tfk63
|
1286 |
+
euyucYT2BDMIJTLrdKwWRMbkQJMdf60CAwEAAaOCAp8wggKbMBIGA1UdEwEB/wQIMAYBAf8CAQQw
|
1287 |
+
DgYDVR0PAQH/BAQDAgAGMBEGCWCGSAGG+EIBAQQEAwIABzCCAmAGCWCGSAGG+EIBDQSCAlEWggJN
|
1288 |
+
RklHWUVMRU0hIEV6ZW4gdGFudXNpdHZhbnkgYSBOZXRMb2NrIEtmdC4gQWx0YWxhbm9zIFN6b2xn
|
1289 |
+
YWx0YXRhc2kgRmVsdGV0ZWxlaWJlbiBsZWlydCBlbGphcmFzb2sgYWxhcGphbiBrZXN6dWx0LiBB
|
1290 |
+
IGhpdGVsZXNpdGVzIGZvbHlhbWF0YXQgYSBOZXRMb2NrIEtmdC4gdGVybWVrZmVsZWxvc3NlZy1i
|
1291 |
+
aXp0b3NpdGFzYSB2ZWRpLiBBIGRpZ2l0YWxpcyBhbGFpcmFzIGVsZm9nYWRhc2FuYWsgZmVsdGV0
|
1292 |
+
ZWxlIGF6IGVsb2lydCBlbGxlbm9yemVzaSBlbGphcmFzIG1lZ3RldGVsZS4gQXogZWxqYXJhcyBs
|
1293 |
+
ZWlyYXNhIG1lZ3RhbGFsaGF0byBhIE5ldExvY2sgS2Z0LiBJbnRlcm5ldCBob25sYXBqYW4gYSBo
|
1294 |
+
dHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIGNpbWVuIHZhZ3kga2VyaGV0byBheiBlbGxlbm9y
|
1295 |
+
emVzQG5ldGxvY2submV0IGUtbWFpbCBjaW1lbi4gSU1QT1JUQU5UISBUaGUgaXNzdWFuY2UgYW5k
|
1296 |
+
IHRoZSB1c2Ugb2YgdGhpcyBjZXJ0aWZpY2F0ZSBpcyBzdWJqZWN0IHRvIHRoZSBOZXRMb2NrIENQ
|
1297 |
+
UyBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cubmV0bG9jay5uZXQvZG9jcyBvciBieSBlLW1haWwg
|
1298 |
+
YXQgY3BzQG5ldGxvY2submV0LjANBgkqhkiG9w0BAQQFAAOBgQAQrX/XDDKACtiG8XmYta3UzbM2
|
1299 |
+
xJZIwVzNmtkFLp++UOv0JhQQLdRmF/iewSf98e3ke0ugbLWrmldwpu2gpO0u9f38vf5NNwgMvOOW
|
1300 |
+
gyL1SRt/Syu0VMGAfJlOHdCM7tCs5ZL6dVb+ZKATj7i4Fp1hBWeAyNDYpQcCNJgEjTME1A==
|
1301 |
+
-----END CERTIFICATE-----
|
1302 |
+
|
1303 |
+
XRamp Global CA Root
|
1304 |
+
====================
|
1305 |
+
-----BEGIN CERTIFICATE-----
|
1306 |
+
MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UE
|
1307 |
+
BhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2Vj
|
1308 |
+
dXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB
|
1309 |
+
dXRob3JpdHkwHhcNMDQxMTAxMTcxNDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMx
|
1310 |
+
HjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkg
|
1311 |
+
U2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
|
1312 |
+
dHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS638eMpSe2OAtp87ZOqCwu
|
1313 |
+
IR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCPKZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMx
|
1314 |
+
foArtYzAQDsRhtDLooY2YKTVMIJt2W7QDxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FE
|
1315 |
+
zG+gSqmUsE3a56k0enI4qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqs
|
1316 |
+
AxcZZPRaJSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNViPvry
|
1317 |
+
xS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud
|
1318 |
+
EwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASsjVy16bYbMDYGA1UdHwQvMC0wK6Ap
|
1319 |
+
oCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMC
|
1320 |
+
AQEwDQYJKoZIhvcNAQEFBQADggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc
|
1321 |
+
/Kh4ZzXxHfARvbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt
|
1322 |
+
qZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLaIR9NmXmd4c8n
|
1323 |
+
nxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSyi6mx5O+aGtA9aZnuqCij4Tyz
|
1324 |
+
8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQO+7ETPTsJ3xCwnR8gooJybQDJbw=
|
1325 |
+
-----END CERTIFICATE-----
|
1326 |
+
|
1327 |
+
Go Daddy Class 2 CA
|
1328 |
+
===================
|
1329 |
+
-----BEGIN CERTIFICATE-----
|
1330 |
+
MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMY
|
1331 |
+
VGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRp
|
1332 |
+
ZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkG
|
1333 |
+
A1UEBhMCVVMxITAfBgNVBAoTGFRoZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28g
|
1334 |
+
RGFkZHkgQ2xhc3MgMiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQAD
|
1335 |
+
ggENADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCAPVYYYwhv
|
1336 |
+
2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6wwdhFJ2+qN1j3hybX2C32
|
1337 |
+
qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXiEqITLdiOr18SPaAIBQi2XKVlOARFmR6j
|
1338 |
+
YGB0xUGlcmIbYsUfb18aQr4CUWWoriMYavx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmY
|
1339 |
+
vLEHZ6IVDd2gWMZEewo+YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0O
|
1340 |
+
BBYEFNLEsNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h/t2o
|
1341 |
+
atTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMu
|
1342 |
+
MTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwG
|
1343 |
+
A1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wim
|
1344 |
+
PQoZ+YeAEW5p5JYXMP80kWNyOO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKt
|
1345 |
+
I3lpjbi2Tc7PTMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ
|
1346 |
+
HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mERdEr/VxqHD3VI
|
1347 |
+
Ls9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5CufReYNnyicsbkqWletNw+vHX/b
|
1348 |
+
vZ8=
|
1349 |
+
-----END CERTIFICATE-----
|
1350 |
+
|
1351 |
+
Starfield Class 2 CA
|
1352 |
+
====================
|
1353 |
+
-----BEGIN CERTIFICATE-----
|
1354 |
+
MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzElMCMGA1UEChMc
|
1355 |
+
U3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZpZWxkIENsYXNzIDIg
|
1356 |
+
Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQwNjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBo
|
1357 |
+
MQswCQYDVQQGEwJVUzElMCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAG
|
1358 |
+
A1UECxMpU3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqG
|
1359 |
+
SIb3DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf8MOh2tTY
|
1360 |
+
bitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN+lq2cwQlZut3f+dZxkqZ
|
1361 |
+
JRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVm
|
1362 |
+
epsZGD3/cVE8MC5fvj13c7JdBmzDI1aaK4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSN
|
1363 |
+
F4Azbl5KXZnJHoe0nRrA1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HF
|
1364 |
+
MIHCMB0GA1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fRzt0f
|
1365 |
+
hvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNo
|
1366 |
+
bm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBDbGFzcyAyIENlcnRpZmljYXRpb24g
|
1367 |
+
QXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGs
|
1368 |
+
afPzWdqbAYcaT1epoXkJKtv3L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLM
|
1369 |
+
PUxA2IGvd56Deruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl
|
1370 |
+
xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynpVSJYACPq4xJD
|
1371 |
+
KVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEYWQPJIrSPnNVeKtelttQKbfi3
|
1372 |
+
QBFGmh95DmK/D5fs4C8fF5Q=
|
1373 |
+
-----END CERTIFICATE-----
|
1374 |
+
|
1375 |
+
StartCom Certification Authority
|
1376 |
+
================================
|
1377 |
+
-----BEGIN CERTIFICATE-----
|
1378 |
+
MIIHyTCCBbGgAwIBAgIBATANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMN
|
1379 |
+
U3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmlu
|
1380 |
+
ZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0
|
1381 |
+
NjM2WhcNMzYwOTE3MTk0NjM2WjB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRk
|
1382 |
+
LjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMg
|
1383 |
+
U3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw
|
1384 |
+
ggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZkpMyONvg45iPwbm2xPN1y
|
1385 |
+
o4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rfOQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/
|
1386 |
+
Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/CJi/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/d
|
1387 |
+
eMotHweXMAEtcnn6RtYTKqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt
|
1388 |
+
2PZE4XNiHzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMMAv+Z
|
1389 |
+
6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w+2OqqGwaVLRcJXrJ
|
1390 |
+
osmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/
|
1391 |
+
untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVc
|
1392 |
+
UjyJthkqcwEKDwOzEmDyei+B26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT
|
1393 |
+
37uMdBNSSwIDAQABo4ICUjCCAk4wDAYDVR0TBAUwAwEB/zALBgNVHQ8EBAMCAa4wHQYDVR0OBBYE
|
1394 |
+
FE4L7xqkQFulF2mHMMo0aEPQQa7yMGQGA1UdHwRdMFswLKAqoCiGJmh0dHA6Ly9jZXJ0LnN0YXJ0
|
1395 |
+
Y29tLm9yZy9zZnNjYS1jcmwuY3JsMCugKaAnhiVodHRwOi8vY3JsLnN0YXJ0Y29tLm9yZy9zZnNj
|
1396 |
+
YS1jcmwuY3JsMIIBXQYDVR0gBIIBVDCCAVAwggFMBgsrBgEEAYG1NwEBATCCATswLwYIKwYBBQUH
|
1397 |
+
AgEWI2h0dHA6Ly9jZXJ0LnN0YXJ0Y29tLm9yZy9wb2xpY3kucGRmMDUGCCsGAQUFBwIBFilodHRw
|
1398 |
+
Oi8vY2VydC5zdGFydGNvbS5vcmcvaW50ZXJtZWRpYXRlLnBkZjCB0AYIKwYBBQUHAgIwgcMwJxYg
|
1399 |
+
U3RhcnQgQ29tbWVyY2lhbCAoU3RhcnRDb20pIEx0ZC4wAwIBARqBl0xpbWl0ZWQgTGlhYmlsaXR5
|
1400 |
+
LCByZWFkIHRoZSBzZWN0aW9uICpMZWdhbCBMaW1pdGF0aW9ucyogb2YgdGhlIFN0YXJ0Q29tIENl
|
1401 |
+
cnRpZmljYXRpb24gQXV0aG9yaXR5IFBvbGljeSBhdmFpbGFibGUgYXQgaHR0cDovL2NlcnQuc3Rh
|
1402 |
+
cnRjb20ub3JnL3BvbGljeS5wZGYwEQYJYIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilT
|
1403 |
+
dGFydENvbSBGcmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQUFAAOC
|
1404 |
+
AgEAFmyZ9GYMNPXQhV59CuzaEE44HF7fpiUFS5Eyweg78T3dRAlbB0mKKctmArexmvclmAk8jhvh
|
1405 |
+
3TaHK0u7aNM5Zj2gJsfyOZEdUauCe37Vzlrk4gNXcGmXCPleWKYK34wGmkUWFjgKXlf2Ysd6AgXm
|
1406 |
+
vB618p70qSmD+LIU424oh0TDkBreOKk8rENNZEXO3SipXPJzewT4F+irsfMuXGRuczE6Eri8sxHk
|
1407 |
+
fY+BUZo7jYn0TZNmezwD7dOaHZrzZVD1oNB1ny+v8OqCQ5j4aZyJecRDjkZy42Q2Eq/3JR44iZB3
|
1408 |
+
fsNrarnDy0RLrHiQi+fHLB5LEUTINFInzQpdn4XBidUaePKVEFMy3YCEZnXZtWgo+2EuvoSoOMCZ
|
1409 |
+
EoalHmdkrQYuL6lwhceWD3yJZfWOQ1QOq92lgDmUYMA0yZZwLKMS9R9Ie70cfmu3nZD0Ijuu+Pwq
|
1410 |
+
yvqCUqDvr0tVk+vBtfAii6w0TiYiBKGHLHVKt+V9E9e4DGTANtLJL4YSjCMJwRuCO3NJo2pXh5Tl
|
1411 |
+
1njFmUNj403gdy3hZZlyaQQaRwnmDwFWJPsfvw55qVguucQJAX6Vum0ABj6y6koQOdjQK/W/7HW/
|
1412 |
+
lwLFCRsI3FU34oH7N4RDYiDK51ZLZer+bMEkkyShNOsF/5oirpt9P/FlUQqmMGqz9IgcgA38coro
|
1413 |
+
g14=
|
1414 |
+
-----END CERTIFICATE-----
|
1415 |
+
|
1416 |
+
Taiwan GRCA
|
1417 |
+
===========
|
1418 |
+
-----BEGIN CERTIFICATE-----
|
1419 |
+
MIIFcjCCA1qgAwIBAgIQH51ZWtcvwgZEpYAIaeNe9jANBgkqhkiG9w0BAQUFADA/MQswCQYDVQQG
|
1420 |
+
EwJUVzEwMC4GA1UECgwnR292ZXJubWVudCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4X
|
1421 |
+
DTAyMTIwNTEzMjMzM1oXDTMyMTIwNTEzMjMzM1owPzELMAkGA1UEBhMCVFcxMDAuBgNVBAoMJ0dv
|
1422 |
+
dmVybm1lbnQgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEBBQAD
|
1423 |
+
ggIPADCCAgoCggIBAJoluOzMonWoe/fOW1mKydGGEghU7Jzy50b2iPN86aXfTEc2pBsBHH8eV4qN
|
1424 |
+
w8XRIePaJD9IK/ufLqGU5ywck9G/GwGHU5nOp/UKIXZ3/6m3xnOUT0b3EEk3+qhZSV1qgQdW8or5
|
1425 |
+
BtD3cCJNtLdBuTK4sfCxw5w/cP1T3YGq2GN49thTbqGsaoQkclSGxtKyyhwOeYHWtXBiCAEuTk8O
|
1426 |
+
1RGvqa/lmr/czIdtJuTJV6L7lvnM4T9TjGxMfptTCAtsF/tnyMKtsc2AtJfcdgEWFelq16TheEfO
|
1427 |
+
htX7MfP6Mb40qij7cEwdScevLJ1tZqa2jWR+tSBqnTuBto9AAGdLiYa4zGX+FVPpBMHWXx1E1wov
|
1428 |
+
J5pGfaENda1UhhXcSTvxls4Pm6Dso3pdvtUqdULle96ltqqvKKyskKw4t9VoNSZ63Pc78/1Fm9G7
|
1429 |
+
Q3hub/FCVGqY8A2tl+lSXunVanLeavcbYBT0peS2cWeqH+riTcFCQP5nRhc4L0c/cZyu5SHKYS1t
|
1430 |
+
B6iEfC3uUSXxY5Ce/eFXiGvviiNtsea9P63RPZYLhY3Naye7twWb7LuRqQoHEgKXTiCQ8P8NHuJB
|
1431 |
+
O9NAOueNXdpm5AKwB1KYXA6OM5zCppX7VRluTI6uSw+9wThNXo+EHWbNxWCWtFJaBYmOlXqYwZE8
|
1432 |
+
lSOyDvR5tMl8wUohAgMBAAGjajBoMB0GA1UdDgQWBBTMzO/MKWCkO7GStjz6MmKPrCUVOzAMBgNV
|
1433 |
+
HRMEBTADAQH/MDkGBGcqBwAEMTAvMC0CAQAwCQYFKw4DAhoFADAHBgVnKgMAAAQUA5vwIhP/lSg2
|
1434 |
+
09yewDL7MTqKUWUwDQYJKoZIhvcNAQEFBQADggIBAECASvomyc5eMN1PhnR2WPWus4MzeKR6dBcZ
|
1435 |
+
TulStbngCnRiqmjKeKBMmo4sIy7VahIkv9Ro04rQ2JyftB8M3jh+Vzj8jeJPXgyfqzvS/3WXy6Tj
|
1436 |
+
Zwj/5cAWtUgBfen5Cv8b5Wppv3ghqMKnI6mGq3ZW6A4M9hPdKmaKZEk9GhiHkASfQlK3T8v+R0F2
|
1437 |
+
Ne//AHY2RTKbxkaFXeIksB7jSJaYV0eUVXoPQbFEJPPB/hprv4j9wabak2BegUqZIJxIZhm1AHlU
|
1438 |
+
D7gsL0u8qV1bYH+Mh6XgUmMqvtg7hUAV/h62ZT/FS9p+tXo1KaMuephgIqP0fSdOLeq0dDzpD6Qz
|
1439 |
+
DxARvBMB1uUO07+1EqLhRSPAzAhuYbeJq4PjJB7mXQfnHyA+z2fI56wwbSdLaG5LKlwCCDTb+Hbk
|
1440 |
+
Z6MmnD+iMsJKxYEYMRBWqoTvLQr/uB930r+lWKBi5NdLkXWNiYCYfm3LU05er/ayl4WXudpVBrkk
|
1441 |
+
7tfGOB5jGxI7leFYrPLfhNVfmS8NVVvmONsuP3LpSIXLuykTjx44VbnzssQwmSNOXfJIoRIM3BKQ
|
1442 |
+
CZBUkQM8R+XVyWXgt0t97EfTsws+rZ7QdAAO671RrcDeLMDDav7v3Aun+kbfYNucpllQdSNpc5Oy
|
1443 |
+
+fwC00fmcc4QAu4njIT/rEUNE1yDMuAlpYYsfPQS
|
1444 |
+
-----END CERTIFICATE-----
|
1445 |
+
|
1446 |
+
Firmaprofesional Root CA
|
1447 |
+
========================
|
1448 |
+
-----BEGIN CERTIFICATE-----
|
1449 |
+
MIIEVzCCAz+gAwIBAgIBATANBgkqhkiG9w0BAQUFADCBnTELMAkGA1UEBhMCRVMxIjAgBgNVBAcT
|
1450 |
+
GUMvIE11bnRhbmVyIDI0NCBCYXJjZWxvbmExQjBABgNVBAMTOUF1dG9yaWRhZCBkZSBDZXJ0aWZp
|
1451 |
+
Y2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2MjYzNDA2ODEmMCQGCSqGSIb3DQEJARYXY2FA
|
1452 |
+
ZmlybWFwcm9mZXNpb25hbC5jb20wHhcNMDExMDI0MjIwMDAwWhcNMTMxMDI0MjIwMDAwWjCBnTEL
|
1453 |
+
MAkGA1UEBhMCRVMxIjAgBgNVBAcTGUMvIE11bnRhbmVyIDI0NCBCYXJjZWxvbmExQjBABgNVBAMT
|
1454 |
+
OUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2MjYzNDA2
|
1455 |
+
ODEmMCQGCSqGSIb3DQEJARYXY2FAZmlybWFwcm9mZXNpb25hbC5jb20wggEiMA0GCSqGSIb3DQEB
|
1456 |
+
AQUAA4IBDwAwggEKAoIBAQDnIwNvbyOlXnjOlSztlB5uCp4Bx+ow0Syd3Tfom5h5VtP8c9/Qit5V
|
1457 |
+
j1H5WuretXDE7aTt/6MNbg9kUDGvASdYrv5sp0ovFy3Tc9UTHI9ZpTQsHVQERc1ouKDAA6XPhUJH
|
1458 |
+
lShbz++AbOCQl4oBPB3zhxAwJkh91/zpnZFx/0GaqUC1N5wpIE8fUuOgfRNtVLcK3ulqTgesrBlf
|
1459 |
+
3H5idPayBQC6haD9HThuy1q7hryUZzM1gywfI834yJFxzJeL764P3CkDG8A563DtwW4O2GcLiam8
|
1460 |
+
NeTvtjS0pbbELaW+0MOUJEjb35bTALVmGotmBQ/dPz/LP6pemkr4tErvlTcbAgMBAAGjgZ8wgZww
|
1461 |
+
KgYDVR0RBCMwIYYfaHR0cDovL3d3dy5maXJtYXByb2Zlc2lvbmFsLmNvbTASBgNVHRMBAf8ECDAG
|
1462 |
+
AQH/AgEBMCsGA1UdEAQkMCKADzIwMDExMDI0MjIwMDAwWoEPMjAxMzEwMjQyMjAwMDBaMA4GA1Ud
|
1463 |
+
DwEB/wQEAwIBBjAdBgNVHQ4EFgQUMwugZtHq2s7eYpMEKFK1FH84aLcwDQYJKoZIhvcNAQEFBQAD
|
1464 |
+
ggEBAEdz/o0nVPD11HecJ3lXV7cVVuzH2Fi3AQL0M+2TUIiefEaxvT8Ub/GzR0iLjJcG1+p+o1wq
|
1465 |
+
u00vR+L4OQbJnC4xGgN49Lw4xiKLMzHwFgQEffl25EvXwOaD7FnMP97/T2u3Z36mhoEyIwOdyPdf
|
1466 |
+
wUpgpZKpsaSgYMN4h7Mi8yrrW6ntBas3D7Hi05V2Y1Z0jFhyGzflZKG+TQyTmAyX9odtsz/ny4Cm
|
1467 |
+
7YjHX1BiAuiZdBbQ5rQ58SfLyEDW44YQqSMSkuBpQWOnryULwMWSyx6Yo1q6xTMPoJcB3X/ge9YG
|
1468 |
+
VM+h4k0460tQtcsm9MracEpqoeJ5quGnM/b9Sh/22WA=
|
1469 |
+
-----END CERTIFICATE-----
|
1470 |
+
|
1471 |
+
Wells Fargo Root CA
|
1472 |
+
===================
|
1473 |
+
-----BEGIN CERTIFICATE-----
|
1474 |
+
MIID5TCCAs2gAwIBAgIEOeSXnjANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UEBhMCVVMxFDASBgNV
|
1475 |
+
BAoTC1dlbGxzIEZhcmdvMSwwKgYDVQQLEyNXZWxscyBGYXJnbyBDZXJ0aWZpY2F0aW9uIEF1dGhv
|
1476 |
+
cml0eTEvMC0GA1UEAxMmV2VsbHMgRmFyZ28gUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcN
|
1477 |
+
MDAxMDExMTY0MTI4WhcNMjEwMTE0MTY0MTI4WjCBgjELMAkGA1UEBhMCVVMxFDASBgNVBAoTC1dl
|
1478 |
+
bGxzIEZhcmdvMSwwKgYDVQQLEyNXZWxscyBGYXJnbyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEv
|
1479 |
+
MC0GA1UEAxMmV2VsbHMgRmFyZ28gUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0GCSqG
|
1480 |
+
SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDVqDM7Jvk0/82bfuUER84A4n135zHCLielTWi5MbqNQ1mX
|
1481 |
+
x3Oqfz1cQJ4F5aHiidlMuD+b+Qy0yGIZLEWukR5zcUHESxP9cMIlrCL1dQu3U+SlK93OvRw6esP3
|
1482 |
+
E48mVJwWa2uv+9iWsWCaSOAlIiR5NM4OJgALTqv9i86C1y8IcGjBqAr5dE8Hq6T54oN+J3N0Prj5
|
1483 |
+
OEL8pahbSCOz6+MlsoCultQKnMJ4msZoGK43YjdeUXWoWGPAUe5AeH6orxqg4bB4nVCMe+ez/I4j
|
1484 |
+
sNtlAHCEAQgAFG5Uhpq6zPk3EPbg3oQtnaSFN9OH4xXQwReQfhkhahKpdv0SAulPIV4XAgMBAAGj
|
1485 |
+
YTBfMA8GA1UdEwEB/wQFMAMBAf8wTAYDVR0gBEUwQzBBBgtghkgBhvt7hwcBCzAyMDAGCCsGAQUF
|
1486 |
+
BwIBFiRodHRwOi8vd3d3LndlbGxzZmFyZ28uY29tL2NlcnRwb2xpY3kwDQYJKoZIhvcNAQEFBQAD
|
1487 |
+
ggEBANIn3ZwKdyu7IvICtUpKkfnRLb7kuxpo7w6kAOnu5+/u9vnldKTC2FJYxHT7zmu1Oyl5GFrv
|
1488 |
+
m+0fazbuSCUlFLZWohDo7qd/0D+j0MNdJu4HzMPBJCGHHt8qElNvQRbn7a6U+oxy+hNH8Dx+rn0R
|
1489 |
+
OhPs7fpvcmR7nX1/Jv16+yWt6j4pf0zjAFcysLPp7VMX2YuyFA4w6OXVE8Zkr8QA1dhYJPz1j+zx
|
1490 |
+
x32l2w8n0cbyQIjmH/ZhqPRCyLk306m+LFZ4wnKbWV01QIroTmMatukgalHizqSQ33ZwmVxwQ023
|
1491 |
+
tqcZZE6St8WRPH9IFmV7Fv3L/PvZ1dZPIWU7Sn9Ho/s=
|
1492 |
+
-----END CERTIFICATE-----
|
1493 |
+
|
1494 |
+
Swisscom Root CA 1
|
1495 |
+
==================
|
1496 |
+
-----BEGIN CERTIFICATE-----
|
1497 |
+
MIIF2TCCA8GgAwIBAgIQXAuFXAvnWUHfV8w/f52oNjANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQG
|
1498 |
+
EwJjaDERMA8GA1UEChMIU3dpc3Njb20xJTAjBgNVBAsTHERpZ2l0YWwgQ2VydGlmaWNhdGUgU2Vy
|
1499 |
+
dmljZXMxGzAZBgNVBAMTElN3aXNzY29tIFJvb3QgQ0EgMTAeFw0wNTA4MTgxMjA2MjBaFw0yNTA4
|
1500 |
+
MTgyMjA2MjBaMGQxCzAJBgNVBAYTAmNoMREwDwYDVQQKEwhTd2lzc2NvbTElMCMGA1UECxMcRGln
|
1501 |
+
aXRhbCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczEbMBkGA1UEAxMSU3dpc3Njb20gUm9vdCBDQSAxMIIC
|
1502 |
+
IjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0LmwqAzZuz8h+BvVM5OAFmUgdbI9m2BtRsiM
|
1503 |
+
MW8Xw/qabFbtPMWRV8PNq5ZJkCoZSx6jbVfd8StiKHVFXqrWW/oLJdihFvkcxC7mlSpnzNApbjyF
|
1504 |
+
NDhhSbEAn9Y6cV9Nbc5fuankiX9qUvrKm/LcqfmdmUc/TilftKaNXXsLmREDA/7n29uj/x2lzZAe
|
1505 |
+
AR81sH8A25Bvxn570e56eqeqDFdvpG3FEzuwpdntMhy0XmeLVNxzh+XTF3xmUHJd1BpYwdnP2IkC
|
1506 |
+
b6dJtDZd0KTeByy2dbcokdaXvij1mB7qWybJvbCXc9qukSbraMH5ORXWZ0sKbU/Lz7DkQnGMU3nn
|
1507 |
+
7uHbHaBuHYwadzVcFh4rUx80i9Fs/PJnB3r1re3WmquhsUvhzDdf/X/NTa64H5xD+SpYVUNFvJbN
|
1508 |
+
cA78yeNmuk6NO4HLFWR7uZToXTNShXEuT46iBhFRyePLoW4xCGQMwtI89Tbo19AOeCMgkckkKmUp
|
1509 |
+
WyL3Ic6DXqTz3kvTaI9GdVyDCW4pa8RwjPWd1yAv/0bSKzjCL3UcPX7ape8eYIVpQtPM+GP+HkM5
|
1510 |
+
haa2Y0EQs3MevNP6yn0WR+Kn1dCjigoIlmJWbjTb2QK5MHXjBNLnj8KwEUAKrNVxAmKLMb7dxiNY
|
1511 |
+
MUJDLXT5xp6mig/p/r+D5kNXJLrvRjSq1xIBOO0CAwEAAaOBhjCBgzAOBgNVHQ8BAf8EBAMCAYYw
|
1512 |
+
HQYDVR0hBBYwFDASBgdghXQBUwABBgdghXQBUwABMBIGA1UdEwEB/wQIMAYBAf8CAQcwHwYDVR0j
|
1513 |
+
BBgwFoAUAyUv3m+CATpcLNwroWm1Z9SM0/0wHQYDVR0OBBYEFAMlL95vggE6XCzcK6FptWfUjNP9
|
1514 |
+
MA0GCSqGSIb3DQEBBQUAA4ICAQA1EMvspgQNDQ/NwNurqPKIlwzfky9NfEBWMXrrpA9gzXrzvsMn
|
1515 |
+
jgM+pN0S734edAY8PzHyHHuRMSG08NBsl9Tpl7IkVh5WwzW9iAUPWxAaZOHHgjD5Mq2eUCzneAXQ
|
1516 |
+
MbFamIp1TpBcahQq4FJHgmDmHtqBsfsUC1rxn9KVuj7QG9YVHaO+htXbD8BJZLsuUBlL0iT43R4H
|
1517 |
+
VtA4oJVwIHaM190e3p9xxCPvgxNcoyQVTSlAPGrEqdi3pkSlDfTgnXceQHAm/NrZNuR55LU/vJtl
|
1518 |
+
vrsRls/bxig5OgjOR1tTWsWZ/l2p3e9M1MalrQLmjAcSHm8D0W+go/MpvRLHUKKwf4ipmXeascCl
|
1519 |
+
OS5cfGniLLDqN2qk4Vrh9VDlg++luyqI54zb/W1elxmofmZ1a3Hqv7HHb6D0jqTsNFFbjCYDcKF3
|
1520 |
+
1QESVwA12yPeDooomf2xEG9L/zgtYE4snOtnta1J7ksfrK/7DZBaZmBwXarNeNQk7shBoJMBkpxq
|
1521 |
+
nvy5JMWzFYJ+vq6VK+uxwNrjAWALXmmshFZhvnEX/h0TD/7Gh0Xp/jKgGg0TpJRVcaUWi7rKibCy
|
1522 |
+
x/yP2FS1k2Kdzs9Z+z0YzirLNRWCXf9UIltxUvu3yf5gmwBBZPCqKuy2QkPOiWaByIufOVQDJdMW
|
1523 |
+
NY6E0F/6MBr1mmz0DlP5OlvRHA==
|
1524 |
+
-----END CERTIFICATE-----
|
1525 |
+
|
1526 |
+
DigiCert Assured ID Root CA
|
1527 |
+
===========================
|
1528 |
+
-----BEGIN CERTIFICATE-----
|
1529 |
+
MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQG
|
1530 |
+
EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQw
|
1531 |
+
IgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzEx
|
1532 |
+
MTEwMDAwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQL
|
1533 |
+
ExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0Ew
|
1534 |
+
ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7cJpSIqvTO
|
1535 |
+
9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYPmDI2dsze3Tyoou9q+yHy
|
1536 |
+
UmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW
|
1537 |
+
/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpy
|
1538 |
+
oeb6pNnVFzF1roV9Iq4/AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whf
|
1539 |
+
GHdPAgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRF
|
1540 |
+
66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYunpyGd823IDzANBgkq
|
1541 |
+
hkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRCdWKuh+vy1dneVrOfzM4UKLkNl2Bc
|
1542 |
+
EkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTffwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38Fn
|
1543 |
+
SbNd67IJKusm7Xi+fT8r87cmNW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i
|
1544 |
+
8b5QZ7dsvfPxH2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe
|
1545 |
+
+o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g==
|
1546 |
+
-----END CERTIFICATE-----
|
1547 |
+
|
1548 |
+
DigiCert Global Root CA
|
1549 |
+
=======================
|
1550 |
+
-----BEGIN CERTIFICATE-----
|
1551 |
+
MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBhMQswCQYDVQQG
|
1552 |
+
EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAw
|
1553 |
+
HgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBDQTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAw
|
1554 |
+
MDAwMDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3
|
1555 |
+
dy5kaWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkq
|
1556 |
+
hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsBCSDMAZOn
|
1557 |
+
TjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97nh6Vfe63SKMI2tavegw5
|
1558 |
+
BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt43C/dxC//AH2hdmoRBBYMql1GNXRor5H
|
1559 |
+
4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7PT19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y
|
1560 |
+
7vrTC0LUq7dBMtoM1O/4gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQAB
|
1561 |
+
o2MwYTAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbRTLtm
|
1562 |
+
8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUwDQYJKoZIhvcNAQEF
|
1563 |
+
BQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/EsrhMAtudXH/vTBH1jLuG2cenTnmCmr
|
1564 |
+
EbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIt
|
1565 |
+
tep3Sp+dWOIrWcBAI+0tKIJFPnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886
|
1566 |
+
UAb3LujEV0lsYSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk
|
1567 |
+
CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=
|
1568 |
+
-----END CERTIFICATE-----
|
1569 |
+
|
1570 |
+
DigiCert High Assurance EV Root CA
|
1571 |
+
==================================
|
1572 |
+
-----BEGIN CERTIFICATE-----
|
1573 |
+
MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBsMQswCQYDVQQG
|
1574 |
+
EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSsw
|
1575 |
+
KQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5jZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAw
|
1576 |
+
MFoXDTMxMTExMDAwMDAwMFowbDELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZ
|
1577 |
+
MBcGA1UECxMQd3d3LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFu
|
1578 |
+
Y2UgRVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm+9S75S0t
|
1579 |
+
Mqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTWPNt0OKRKzE0lgvdKpVMS
|
1580 |
+
OO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEMxChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3
|
1581 |
+
MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFBIk5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQ
|
1582 |
+
NAQTXKFx01p8VdteZOE3hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUe
|
1583 |
+
h10aUAsgEsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQFMAMB
|
1584 |
+
Af8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaAFLE+w2kD+L9HAdSY
|
1585 |
+
JhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3NecnzyIZgYIVyHbIUf4KmeqvxgydkAQ
|
1586 |
+
V8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6zeM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFp
|
1587 |
+
myPInngiK3BD41VHMWEZ71jFhS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkK
|
1588 |
+
mNEVX58Svnw2Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe
|
1589 |
+
vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep+OkuE6N36B9K
|
1590 |
+
-----END CERTIFICATE-----
|
1591 |
+
|
1592 |
+
Certplus Class 2 Primary CA
|
1593 |
+
===========================
|
1594 |
+
-----BEGIN CERTIFICATE-----
|
1595 |
+
MIIDkjCCAnqgAwIBAgIRAIW9S/PY2uNp9pTXX8OlRCMwDQYJKoZIhvcNAQEFBQAwPTELMAkGA1UE
|
1596 |
+
BhMCRlIxETAPBgNVBAoTCENlcnRwbHVzMRswGQYDVQQDExJDbGFzcyAyIFByaW1hcnkgQ0EwHhcN
|
1597 |
+
OTkwNzA3MTcwNTAwWhcNMTkwNzA2MjM1OTU5WjA9MQswCQYDVQQGEwJGUjERMA8GA1UEChMIQ2Vy
|
1598 |
+
dHBsdXMxGzAZBgNVBAMTEkNsYXNzIDIgUHJpbWFyeSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEP
|
1599 |
+
ADCCAQoCggEBANxQltAS+DXSCHh6tlJw/W/uz7kRy1134ezpfgSN1sxvc0NXYKwzCkTsA18cgCSR
|
1600 |
+
5aiRVhKC9+Ar9NuuYS6JEI1rbLqzAr3VNsVINyPi8Fo3UjMXEuLRYE2+L0ER4/YXJQyLkcAbmXuZ
|
1601 |
+
Vg2v7tK8R1fjeUl7NIknJITesezpWE7+Tt9avkGtrAjFGA7v0lPubNCdEgETjdyAYveVqUSISnFO
|
1602 |
+
YFWe2yMZeVYHDD9jC1yw4r5+FfyUM1hBOHTE4Y+L3yasH7WLO7dDWWuwJKZtkIvEcupdM5i3y95e
|
1603 |
+
e++U8Rs+yskhwcWYAqqi9lt3m/V+llU0HGdpwPFC40es/CgcZlUCAwEAAaOBjDCBiTAPBgNVHRME
|
1604 |
+
CDAGAQH/AgEKMAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQU43Mt38sOKAze3bOkynm4jrvoMIkwEQYJ
|
1605 |
+
YIZIAYb4QgEBBAQDAgEGMDcGA1UdHwQwMC4wLKAqoCiGJmh0dHA6Ly93d3cuY2VydHBsdXMuY29t
|
1606 |
+
L0NSTC9jbGFzczIuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQCnVM+IRBnL39R/AN9WM2K191EBkOvD
|
1607 |
+
P9GIROkkXe/nFL0gt5o8AP5tn9uQ3Nf0YtaLcF3n5QRIqWh8yfFC82x/xXp8HVGIutIKPidd3i1R
|
1608 |
+
TtMTZGnkLuPT55sJmabglZvOGtd/vjzOUrMRFcEPF80Du5wlFbqidon8BvEY0JNLDnyCt6X09l/+
|
1609 |
+
7UCmnYR0ObncHoUW2ikbhiMAybuJfm6AiB4vFLQDJKgybwOaRywwvlbGp0ICcBvqQNi6BQNwB6SW
|
1610 |
+
//1IMwrh3KWBkJtN3X3n57LNXMhqlfil9o3EXXgIvnsG1knPGTZQIy4I5p4FTUcY1Rbpsda2ENW7
|
1611 |
+
l7+ijrRU
|
1612 |
+
-----END CERTIFICATE-----
|
1613 |
+
|
1614 |
+
DST Root CA X3
|
1615 |
+
==============
|
1616 |
+
-----BEGIN CERTIFICATE-----
|
1617 |
+
MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/MSQwIgYDVQQK
|
1618 |
+
ExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMTDkRTVCBSb290IENBIFgzMB4X
|
1619 |
+
DTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVowPzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1
|
1620 |
+
cmUgVHJ1c3QgQ28uMRcwFQYDVQQDEw5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQAD
|
1621 |
+
ggEPADCCAQoCggEBAN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmT
|
1622 |
+
rE4Orz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEqOLl5CjH9
|
1623 |
+
UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9bxiqKqy69cK3FCxolkHRy
|
1624 |
+
xXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40d
|
1625 |
+
utolucbY38EVAjqr2m7xPi71XAicPNaDaeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0T
|
1626 |
+
AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQ
|
1627 |
+
MA0GCSqGSIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69ikug
|
1628 |
+
dB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXrAvHRAosZy5Q6XkjE
|
1629 |
+
GB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZzR8srzJmwN0jP41ZL9c8PDHIyh8bw
|
1630 |
+
RLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubS
|
1631 |
+
fZGL+T0yjWW06XyxV3bqxbYoOb8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ
|
1632 |
+
-----END CERTIFICATE-----
|
1633 |
+
|
1634 |
+
DST ACES CA X6
|
1635 |
+
==============
|
1636 |
+
-----BEGIN CERTIFICATE-----
|
1637 |
+
MIIECTCCAvGgAwIBAgIQDV6ZCtadt3js2AdWO4YV2TANBgkqhkiG9w0BAQUFADBbMQswCQYDVQQG
|
1638 |
+
EwJVUzEgMB4GA1UEChMXRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QxETAPBgNVBAsTCERTVCBBQ0VT
|
1639 |
+
MRcwFQYDVQQDEw5EU1QgQUNFUyBDQSBYNjAeFw0wMzExMjAyMTE5NThaFw0xNzExMjAyMTE5NTha
|
1640 |
+
MFsxCzAJBgNVBAYTAlVTMSAwHgYDVQQKExdEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdDERMA8GA1UE
|
1641 |
+
CxMIRFNUIEFDRVMxFzAVBgNVBAMTDkRTVCBBQ0VTIENBIFg2MIIBIjANBgkqhkiG9w0BAQEFAAOC
|
1642 |
+
AQ8AMIIBCgKCAQEAuT31LMmU3HWKlV1j6IR3dma5WZFcRt2SPp/5DgO0PWGSvSMmtWPuktKe1jzI
|
1643 |
+
DZBfZIGxqAgNTNj50wUoUrQBJcWVHAx+PhCEdc/BGZFjz+iokYi5Q1K7gLFViYsx+tC3dr5BPTCa
|
1644 |
+
pCIlF3PoHuLTrCq9Wzgh1SpL11V94zpVvddtawJXa+ZHfAjIgrrep4c9oW24MFbCswKBXy314pow
|
1645 |
+
GCi4ZtPLAZZv6opFVdbgnf9nKxcCpk4aahELfrd755jWjHZvwTvbUJN+5dCOHze4vbrGn2zpfDPy
|
1646 |
+
MjwmR/onJALJfh1biEITajV8fTXpLmaRcpPVMibEdPVTo7NdmvYJywIDAQABo4HIMIHFMA8GA1Ud
|
1647 |
+
EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgHGMB8GA1UdEQQYMBaBFHBraS1vcHNAdHJ1c3Rkc3Qu
|
1648 |
+
Y29tMGIGA1UdIARbMFkwVwYKYIZIAWUDAgEBATBJMEcGCCsGAQUFBwIBFjtodHRwOi8vd3d3LnRy
|
1649 |
+
dXN0ZHN0LmNvbS9jZXJ0aWZpY2F0ZXMvcG9saWN5L0FDRVMtaW5kZXguaHRtbDAdBgNVHQ4EFgQU
|
1650 |
+
CXIGThhDD+XWzMNqizF7eI+og7gwDQYJKoZIhvcNAQEFBQADggEBAKPYjtay284F5zLNAdMEA+V2
|
1651 |
+
5FYrnJmQ6AgwbN99Pe7lv7UkQIRJ4dEorsTCOlMwiPH1d25Ryvr/ma8kXxug/fKshMrfqfBfBC6t
|
1652 |
+
Fr8hlxCBPeP/h40y3JTlR4peahPJlJU90u7INJXQgNStMgiAVDzgvVJT11J8smk/f3rPanTK+gQq
|
1653 |
+
nExaBqXpIK1FZg9p8d2/6eMyi/rgwYZNcjwu2JN4Cir42NInPRmJX1p7ijvMDNpRrscL9yuwNwXs
|
1654 |
+
vFcj4jjSm2jzVhKIT0J8uDHEtdvkyCE06UgRNe76x5JXxZ805Mf29w4LTJxoeHtxMcfrHuBnQfO3
|
1655 |
+
oKfN5XozNmr6mis=
|
1656 |
+
-----END CERTIFICATE-----
|
1657 |
+
|
1658 |
+
TURKTRUST Certificate Services Provider Root 1
|
1659 |
+
==============================================
|
1660 |
+
-----BEGIN CERTIFICATE-----
|
1661 |
+
MIID+zCCAuOgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBtzE/MD0GA1UEAww2VMOcUktUUlVTVCBF
|
1662 |
+
bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGDAJUUjEP
|
1663 |
+
MA0GA1UEBwwGQU5LQVJBMVYwVAYDVQQKDE0oYykgMjAwNSBUw5xSS1RSVVNUIEJpbGdpIMSwbGV0
|
1664 |
+
acWfaW0gdmUgQmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLjAeFw0wNTA1MTMx
|
1665 |
+
MDI3MTdaFw0xNTAzMjIxMDI3MTdaMIG3MT8wPQYDVQQDDDZUw5xSS1RSVVNUIEVsZWt0cm9uaWsg
|
1666 |
+
U2VydGlmaWthIEhpem1ldCBTYcSfbGF5xLFjxLFzxLExCzAJBgNVBAYMAlRSMQ8wDQYDVQQHDAZB
|
1667 |
+
TktBUkExVjBUBgNVBAoMTShjKSAyMDA1IFTDnFJLVFJVU1QgQmlsZ2kgxLBsZXRpxZ9pbSB2ZSBC
|
1668 |
+
aWxpxZ9pbSBHw7x2ZW5sacSfaSBIaXptZXRsZXJpIEEuxZ4uMIIBIjANBgkqhkiG9w0BAQEFAAOC
|
1669 |
+
AQ8AMIIBCgKCAQEAylIF1mMD2Bxf3dJ7XfIMYGFbazt0K3gNfUW9InTojAPBxhEqPZW8qZSwu5GX
|
1670 |
+
yGl8hMW0kWxsE2qkVa2kheiVfrMArwDCBRj1cJ02i67L5BuBf5OI+2pVu32Fks66WJ/bMsW9Xe8i
|
1671 |
+
Si9BB35JYbOG7E6mQW6EvAPs9TscyB/C7qju6hJKjRTP8wrgUDn5CDX4EVmt5yLqS8oUBt5CurKZ
|
1672 |
+
8y1UiBAG6uEaPj1nH/vO+3yC6BFdSsG5FOpU2WabfIl9BJpiyelSPJ6c79L1JuTm5Rh8i27fbMx4
|
1673 |
+
W09ysstcP4wFjdFMjK2Sx+F4f2VsSQZQLJ4ywtdKxnWKWU51b0dewQIDAQABoxAwDjAMBgNVHRME
|
1674 |
+
BTADAQH/MA0GCSqGSIb3DQEBBQUAA4IBAQAV9VX/N5aAWSGk/KEVTCD21F/aAyT8z5Aa9CEKmu46
|
1675 |
+
sWrv7/hg0Uw2ZkUd82YCdAR7kjCo3gp2D++Vbr3JN+YaDayJSFvMgzbC9UZcWYJWtNX+I7TYVBxE
|
1676 |
+
q8Sn5RTOPEFhfEPmzcSBCYsk+1Ql1haolgxnB2+zUEfjHCQo3SqYpGH+2+oSN7wBGjSFvW5P55Fy
|
1677 |
+
B0SFHljKVETd96y5y4khctuPwGkplyqjrhgjlxxBKot8KsF8kOipKMDTkcatKIdAaLX/7KfS0zgY
|
1678 |
+
nNN9aV3wxqUeJBujR/xpB2jn5Jq07Q+hh4cCzofSSE7hvP/L8XKSRGQDJereW26fyfJOrN3H
|
1679 |
+
-----END CERTIFICATE-----
|
1680 |
+
|
1681 |
+
TURKTRUST Certificate Services Provider Root 2
|
1682 |
+
==============================================
|
1683 |
+
-----BEGIN CERTIFICATE-----
|
1684 |
+
MIIEPDCCAySgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBvjE/MD0GA1UEAww2VMOcUktUUlVTVCBF
|
1685 |
+
bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJUUjEP
|
1686 |
+
MA0GA1UEBwwGQW5rYXJhMV0wWwYDVQQKDFRUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUg
|
1687 |
+
QmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLiAoYykgS2FzxLFtIDIwMDUwHhcN
|
1688 |
+
MDUxMTA3MTAwNzU3WhcNMTUwOTE2MTAwNzU3WjCBvjE/MD0GA1UEAww2VMOcUktUUlVTVCBFbGVr
|
1689 |
+
dHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJUUjEPMA0G
|
1690 |
+
A1UEBwwGQW5rYXJhMV0wWwYDVQQKDFRUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmls
|
1691 |
+
acWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLiAoYykgS2FzxLFtIDIwMDUwggEiMA0G
|
1692 |
+
CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCpNn7DkUNMwxmYCMjHWHtPFoylzkkBH3MOrHUTpvqe
|
1693 |
+
LCDe2JAOCtFp0if7qnefJ1Il4std2NiDUBd9irWCPwSOtNXwSadktx4uXyCcUHVPr+G1QRT0mJKI
|
1694 |
+
x+XlZEdhR3n9wFHxwZnn3M5q+6+1ATDcRhzviuyV79z/rxAc653YsKpqhRgNF8k+v/Gb0AmJQv2g
|
1695 |
+
QrSdiVFVKc8bcLyEVK3BEx+Y9C52YItdP5qtygy/p1Zbj3e41Z55SZI/4PGXJHpsmxcPbe9TmJEr
|
1696 |
+
5A++WXkHeLuXlfSfadRYhwqp48y2WBmfJiGxxFmNskF1wK1pzpwACPI2/z7woQ8arBT9pmAPAgMB
|
1697 |
+
AAGjQzBBMB0GA1UdDgQWBBTZN7NOBf3Zz58SFq62iS/rJTqIHDAPBgNVHQ8BAf8EBQMDBwYAMA8G
|
1698 |
+
A1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAHJglrfJ3NgpXiOFX7KzLXb7iNcX/ntt
|
1699 |
+
Rbj2hWyfIvwqECLsqrkw9qtY1jkQMZkpAL2JZkH7dN6RwRgLn7Vhy506vvWolKMiVW4XSf/SKfE4
|
1700 |
+
Jl3vpao6+XF75tpYHdN0wgH6PmlYX63LaL4ULptswLbcoCb6dxriJNoaN+BnrdFzgw2lGh1uEpJ+
|
1701 |
+
hGIAF728JRhX8tepb1mIvDS3LoV4nZbcFMMsilKbloxSZj2GFotHuFEJjOp9zYhys2AzsfAKRO8P
|
1702 |
+
9Qk3iCQOLGsgOqL6EfJANZxEaGM7rDNvY7wsu/LSy3Z9fYjYHcgFHW68lKlmjHdxx/qR+i9Rnuk5
|
1703 |
+
UrbnBEI=
|
1704 |
+
-----END CERTIFICATE-----
|
1705 |
+
|
1706 |
+
SwissSign Gold CA - G2
|
1707 |
+
======================
|
1708 |
+
-----BEGIN CERTIFICATE-----
|
1709 |
+
MIIFujCCA6KgAwIBAgIJALtAHEP1Xk+wMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNVBAYTAkNIMRUw
|
1710 |
+
EwYDVQQKEwxTd2lzc1NpZ24gQUcxHzAdBgNVBAMTFlN3aXNzU2lnbiBHb2xkIENBIC0gRzIwHhcN
|
1711 |
+
MDYxMDI1MDgzMDM1WhcNMzYxMDI1MDgzMDM1WjBFMQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU3dp
|
1712 |
+
c3NTaWduIEFHMR8wHQYDVQQDExZTd2lzc1NpZ24gR29sZCBDQSAtIEcyMIICIjANBgkqhkiG9w0B
|
1713 |
+
AQEFAAOCAg8AMIICCgKCAgEAr+TufoskDhJuqVAtFkQ7kpJcyrhdhJJCEyq8ZVeCQD5XJM1QiyUq
|
1714 |
+
t2/876LQwB8CJEoTlo8jE+YoWACjR8cGp4QjK7u9lit/VcyLwVcfDmJlD909Vopz2q5+bbqBHH5C
|
1715 |
+
jCA12UNNhPqE21Is8w4ndwtrvxEvcnifLtg+5hg3Wipy+dpikJKVyh+c6bM8K8vzARO/Ws/BtQpg
|
1716 |
+
vd21mWRTuKCWs2/iJneRjOBiEAKfNA+k1ZIzUd6+jbqEemA8atufK+ze3gE/bk3lUIbLtK/tREDF
|
1717 |
+
ylqM2tIrfKjuvqblCqoOpd8FUrdVxyJdMmqXl2MT28nbeTZ7hTpKxVKJ+STnnXepgv9VHKVxaSvR
|
1718 |
+
AiTysybUa9oEVeXBCsdtMDeQKuSeFDNeFhdVxVu1yzSJkvGdJo+hB9TGsnhQ2wwMC3wLjEHXuend
|
1719 |
+
jIj3o02yMszYF9rNt85mndT9Xv+9lz4pded+p2JYryU0pUHHPbwNUMoDAw8IWh+Vc3hiv69yFGkO
|
1720 |
+
peUDDniOJihC8AcLYiAQZzlG+qkDzAQ4embvIIO1jEpWjpEA/I5cgt6IoMPiaG59je883WX0XaxR
|
1721 |
+
7ySArqpWl2/5rX3aYT+YdzylkbYcjCbaZaIJbcHiVOO5ykxMgI93e2CaHt+28kgeDrpOVG2Y4OGi
|
1722 |
+
GqJ3UM/EY5LsRxmd6+ZrzsECAwEAAaOBrDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUw
|
1723 |
+
AwEB/zAdBgNVHQ4EFgQUWyV7lqRlUX64OfPAeGZe6Drn8O4wHwYDVR0jBBgwFoAUWyV7lqRlUX64
|
1724 |
+
OfPAeGZe6Drn8O4wRgYDVR0gBD8wPTA7BglghXQBWQECAQEwLjAsBggrBgEFBQcCARYgaHR0cDov
|
1725 |
+
L3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBACe645R88a7A3hfm
|
1726 |
+
5djV9VSwg/S7zV4Fe0+fdWavPOhWfvxyeDgD2StiGwC5+OlgzczOUYrHUDFu4Up+GC9pWbY9ZIEr
|
1727 |
+
44OE5iKHjn3g7gKZYbge9LgriBIWhMIxkziWMaa5O1M/wySTVltpkuzFwbs4AOPsF6m43Md8AYOf
|
1728 |
+
Mke6UiI0HTJ6CVanfCU2qT1L2sCCbwq7EsiHSycR+R4tx5M/nttfJmtS2S6K8RTGRI0Vqbe/vd6m
|
1729 |
+
Gu6uLftIdxf+u+yvGPUqUfA5hJeVbG4bwyvEdGB5JbAKJ9/fXtI5z0V9QkvfsywexcZdylU6oJxp
|
1730 |
+
mo/a77KwPJ+HbBIrZXAVUjEaJM9vMSNQH4xPjyPDdEFjHFWoFN0+4FFQz/EbMFYOkrCChdiDyyJk
|
1731 |
+
vC24JdVUorgG6q2SpCSgwYa1ShNqR88uC1aVVMvOmttqtKay20EIhid392qgQmwLOM7XdVAyksLf
|
1732 |
+
KzAiSNDVQTglXaTpXZ/GlHXQRf0wl0OPkKsKx4ZzYEppLd6leNcG2mqeSz53OiATIgHQv2ieY2Br
|
1733 |
+
NU0LbbqhPcCT4H8js1WtciVORvnSFu+wZMEBnunKoGqYDs/YYPIvSbjkQuE4NRb0yG5P94FW6Lqj
|
1734 |
+
viOvrv1vA+ACOzB2+httQc8Bsem4yWb02ybzOqR08kkkW8mw0FfB+j564ZfJ
|
1735 |
+
-----END CERTIFICATE-----
|
1736 |
+
|
1737 |
+
SwissSign Silver CA - G2
|
1738 |
+
========================
|
1739 |
+
-----BEGIN CERTIFICATE-----
|
1740 |
+
MIIFvTCCA6WgAwIBAgIITxvUL1S7L0swDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCQ0gxFTAT
|
1741 |
+
BgNVBAoTDFN3aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMB4X
|
1742 |
+
DTA2MTAyNTA4MzI0NloXDTM2MTAyNTA4MzI0NlowRzELMAkGA1UEBhMCQ0gxFTATBgNVBAoTDFN3
|
1743 |
+
aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMIICIjANBgkqhkiG
|
1744 |
+
9w0BAQEFAAOCAg8AMIICCgKCAgEAxPGHf9N4Mfc4yfjDmUO8x/e8N+dOcbpLj6VzHVxumK4DV644
|
1745 |
+
N0MvFz0fyM5oEMF4rhkDKxD6LHmD9ui5aLlV8gREpzn5/ASLHvGiTSf5YXu6t+WiE7brYT7QbNHm
|
1746 |
+
+/pe7R20nqA1W6GSy/BJkv6FCgU+5tkL4k+73JU3/JHpMjUi0R86TieFnbAVlDLaYQ1HTWBCrpJH
|
1747 |
+
6INaUFjpiou5XaHc3ZlKHzZnu0jkg7Y360g6rw9njxcH6ATK72oxh9TAtvmUcXtnZLi2kUpCe2Uu
|
1748 |
+
MGoM9ZDulebyzYLs2aFK7PayS+VFheZteJMELpyCbTapxDFkH4aDCyr0NQp4yVXPQbBH6TCfmb5h
|
1749 |
+
qAaEuSh6XzjZG6k4sIN/c8HDO0gqgg8hm7jMqDXDhBuDsz6+pJVpATqJAHgE2cn0mRmrVn5bi4Y5
|
1750 |
+
FZGkECwJMoBgs5PAKrYYC51+jUnyEEp/+dVGLxmSo5mnJqy7jDzmDrxHB9xzUfFwZC8I+bRHHTBs
|
1751 |
+
ROopN4WSaGa8gzj+ezku01DwH/teYLappvonQfGbGHLy9YR0SslnxFSuSGTfjNFusB3hB48IHpmc
|
1752 |
+
celM2KX3RxIfdNFRnobzwqIjQAtz20um53MGjMGg6cFZrEb65i/4z3GcRm25xBWNOHkDRUjvxF3X
|
1753 |
+
CO6HOSKGsg0PWEP3calILv3q1h8CAwEAAaOBrDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/
|
1754 |
+
BAUwAwEB/zAdBgNVHQ4EFgQUF6DNweRBtjpbO8tFnb0cwpj6hlgwHwYDVR0jBBgwFoAUF6DNweRB
|
1755 |
+
tjpbO8tFnb0cwpj6hlgwRgYDVR0gBD8wPTA7BglghXQBWQEDAQEwLjAsBggrBgEFBQcCARYgaHR0
|
1756 |
+
cDovL3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBAHPGgeAn0i0P
|
1757 |
+
4JUw4ppBf1AsX19iYamGamkYDHRJ1l2E6kFSGG9YrVBWIGrGvShpWJHckRE1qTodvBqlYJ7YH39F
|
1758 |
+
kWnZfrt4csEGDyrOj4VwYaygzQu4OSlWhDJOhrs9xCrZ1x9y7v5RoSJBsXECYxqCsGKrXlcSH9/L
|
1759 |
+
3XWgwF15kIwb4FDm3jH+mHtwX6WQ2K34ArZv02DdQEsixT2tOnqfGhpHkXkzuoLcMmkDlm4fS/Bx
|
1760 |
+
/uNncqCxv1yL5PqZIseEuRuNI5c/7SXgz2W79WEE790eslpBIlqhn10s6FvJbakMDHiqYMZWjwFa
|
1761 |
+
DGi8aRl5xB9+lwW/xekkUV7U1UtT7dkjWjYDZaPBA61BMPNGG4WQr2W11bHkFlt4dR2Xem1ZqSqP
|
1762 |
+
e97Dh4kQmUlzeMg9vVE1dCrV8X5pGyq7O70luJpaPXJhkGaH7gzWTdQRdAtq/gsD/KNVV4n+Ssuu
|
1763 |
+
WxcFyPKNIzFTONItaj+CuY0IavdeQXRuwxF+B6wpYJE/OMpXEA29MC/HpeZBoNquBYeaoKRlbEwJ
|
1764 |
+
DIm6uNO5wJOKMPqN5ZprFQFOZ6raYlY+hAhm0sQ2fac+EPyI4NSA5QC9qvNOBqN6avlicuMJT+ub
|
1765 |
+
DgEj8Z+7fNzcbBGXJbLytGMU0gYqZ4yD9c7qB9iaah7s5Aq7KkzrCWA5zspi2C5u
|
1766 |
+
-----END CERTIFICATE-----
|
1767 |
+
|
1768 |
+
GeoTrust Primary Certification Authority
|
1769 |
+
========================================
|
1770 |
+
-----BEGIN CERTIFICATE-----
|
1771 |
+
MIIDfDCCAmSgAwIBAgIQGKy1av1pthU6Y2yv2vrEoTANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQG
|
1772 |
+
EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjExMC8GA1UEAxMoR2VvVHJ1c3QgUHJpbWFyeSBD
|
1773 |
+
ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjExMjcwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMFgx
|
1774 |
+
CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTEwLwYDVQQDEyhHZW9UcnVzdCBQ
|
1775 |
+
cmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
|
1776 |
+
CgKCAQEAvrgVe//UfH1nrYNke8hCUy3f9oQIIGHWAVlqnEQRr+92/ZV+zmEwu3qDXwK9AWbK7hWN
|
1777 |
+
b6EwnL2hhZ6UOvNWiAAxz9juapYC2e0DjPt1befquFUWBRaa9OBesYjAZIVcFU2Ix7e64HXprQU9
|
1778 |
+
nceJSOC7KMgD4TCTZF5SwFlwIjVXiIrxlQqD17wxcwE07e9GceBrAqg1cmuXm2bgyxx5X9gaBGge
|
1779 |
+
RwLmnWDiNpcB3841kt++Z8dtd1k7j53WkBWUvEI0EME5+bEnPn7WinXFsq+W06Lem+SYvn3h6YGt
|
1780 |
+
tm/81w7a4DSwDRp35+MImO9Y+pyEtzavwt+s0vQQBnBxNQIDAQABo0IwQDAPBgNVHRMBAf8EBTAD
|
1781 |
+
AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQULNVQQZcVi/CPNmFbSvtr2ZnJM5IwDQYJKoZI
|
1782 |
+
hvcNAQEFBQADggEBAFpwfyzdtzRP9YZRqSa+S7iq8XEN3GHHoOo0Hnp3DwQ16CePbJC/kRYkRj5K
|
1783 |
+
Ts4rFtULUh38H2eiAkUxT87z+gOneZ1TatnaYzr4gNfTmeGl4b7UVXGYNTq+k+qurUKykG/g/CFN
|
1784 |
+
NWMziUnWm07Kx+dOCQD32sfvmWKZd7aVIl6KoKv0uHiYyjgZmclynnjNS6yvGaBzEi38wkG6gZHa
|
1785 |
+
Floxt/m0cYASSJlyc1pZU8FjUjPtp8nSOQJw+uCxQmYpqptR7TBUIhRf2asdweSU8Pj1K/fqynhG
|
1786 |
+
1riR/aYNKxoUAT6A8EKglQdebc3MS6RFjasS6LPeWuWgfOgPIh1a6Vk=
|
1787 |
+
-----END CERTIFICATE-----
|
1788 |
+
|
1789 |
+
thawte Primary Root CA
|
1790 |
+
======================
|
1791 |
+
-----BEGIN CERTIFICATE-----
|
1792 |
+
MIIEIDCCAwigAwIBAgIQNE7VVyDV7exJ9C/ON9srbTANBgkqhkiG9w0BAQUFADCBqTELMAkGA1UE
|
1793 |
+
BhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2
|
1794 |
+
aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhv
|
1795 |
+
cml6ZWQgdXNlIG9ubHkxHzAdBgNVBAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwHhcNMDYxMTE3
|
1796 |
+
MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCBqTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwg
|
1797 |
+
SW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMv
|
1798 |
+
KGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNVBAMT
|
1799 |
+
FnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCs
|
1800 |
+
oPD7gFnUnMekz52hWXMJEEUMDSxuaPFsW0hoSVk3/AszGcJ3f8wQLZU0HObrTQmnHNK4yZc2AreJ
|
1801 |
+
1CRfBsDMRJSUjQJib+ta3RGNKJpchJAQeg29dGYvajig4tVUROsdB58Hum/u6f1OCyn1PoSgAfGc
|
1802 |
+
q/gcfomk6KHYcWUNo1F77rzSImANuVud37r8UVsLr5iy6S7pBOhih94ryNdOwUxkHt3Ph1i6Sk/K
|
1803 |
+
aAcdHJ1KxtUvkcx8cXIcxcBn6zL9yZJclNqFwJu/U30rCfSMnZEfl2pSy94JNqR32HuHUETVPm4p
|
1804 |
+
afs5SSYeCaWAe0At6+gnhcn+Yf1+5nyXHdWdAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYD
|
1805 |
+
VR0PAQH/BAQDAgEGMB0GA1UdDgQWBBR7W0XPr87Lev0xkhpqtvNG61dIUDANBgkqhkiG9w0BAQUF
|
1806 |
+
AAOCAQEAeRHAS7ORtvzw6WfUDW5FvlXok9LOAz/t2iWwHVfLHjp2oEzsUHboZHIMpKnxuIvW1oeE
|
1807 |
+
uzLlQRHAd9mzYJ3rG9XRbkREqaYB7FViHXe4XI5ISXycO1cRrK1zN44veFyQaEfZYGDm/Ac9IiAX
|
1808 |
+
xPcW6cTYcvnIc3zfFi8VqT79aie2oetaupgf1eNNZAqdE8hhuvU5HIe6uL17In/2/qxAeeWsEG89
|
1809 |
+
jxt5dovEN7MhGITlNgDrYyCZuen+MwS7QcjBAvlEYyCegc5C09Y/LHbTY5xZ3Y+m4Q6gLkH3LpVH
|
1810 |
+
z7z9M/P2C2F+fpErgUfCJzDupxBdN49cOSvkBPB7jVaMaA==
|
1811 |
+
-----END CERTIFICATE-----
|
1812 |
+
|
1813 |
+
VeriSign Class 3 Public Primary Certification Authority - G5
|
1814 |
+
============================================================
|
1815 |
+
-----BEGIN CERTIFICATE-----
|
1816 |
+
MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCByjELMAkGA1UE
|
1817 |
+
BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBO
|
1818 |
+
ZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVk
|
1819 |
+
IHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRp
|
1820 |
+
ZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCB
|
1821 |
+
yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2ln
|
1822 |
+
biBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZvciBh
|
1823 |
+
dXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmlt
|
1824 |
+
YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
|
1825 |
+
ggEKAoIBAQCvJAgIKXo1nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKz
|
1826 |
+
j/i5Vbext0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIzSdhD
|
1827 |
+
Y2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQGBO+QueQA5N06tRn/
|
1828 |
+
Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+rCpSx4/VBEnkjWNHiDxpg8v+R70r
|
1829 |
+
fk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/
|
1830 |
+
BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2Uv
|
1831 |
+
Z2lmMCEwHzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy
|
1832 |
+
aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKvMzEzMA0GCSqG
|
1833 |
+
SIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzEp6B4Eq1iDkVwZMXnl2YtmAl+
|
1834 |
+
X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKE
|
1835 |
+
KQsTb47bDN0lAtukixlE0kF6BWlKWE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiC
|
1836 |
+
Km0oHw0LxOXnGiYZ4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vE
|
1837 |
+
ZV8NhnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq
|
1838 |
+
-----END CERTIFICATE-----
|
1839 |
+
|
1840 |
+
SecureTrust CA
|
1841 |
+
==============
|
1842 |
+
-----BEGIN CERTIFICATE-----
|
1843 |
+
MIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBIMQswCQYDVQQG
|
1844 |
+
EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xFzAVBgNVBAMTDlNlY3VyZVRy
|
1845 |
+
dXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIzMTE5NDA1NVowSDELMAkGA1UEBhMCVVMxIDAe
|
1846 |
+
BgNVBAoTF1NlY3VyZVRydXN0IENvcnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTCC
|
1847 |
+
ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7CT8rU4niVWJxB4Q2ZQCQX
|
1848 |
+
OZEzZum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/jep4G6pkjGnx29vo6pQT64lO0pGtSO0gMdA+9t
|
1849 |
+
DWccV9cGrcrI9f4Or2YlSASWC12juhbDCE/RRvgUXPLIXgGZbf2IzIaowW8xQmxSPmjL8xk037uH
|
1850 |
+
GFaAJsTQ3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj7DaUaHp3pLHnDi+BeuK1cobvomuL8A/b
|
1851 |
+
01k/unK8RCSc43Oz969XL0Imnal0ugBS8kvNU3xHCzaFDmapCJcWNFfBZveA4+1wVMeT4C4oFVmH
|
1852 |
+
ursCAwEAAaOBnTCBmjATBgkrBgEEAYI3FAIEBh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/
|
1853 |
+
BAUwAwEB/zAdBgNVHQ4EFgQUQjK2FvoE/f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCegJYYj
|
1854 |
+
aHR0cDovL2NybC5zZWN1cmV0cnVzdC5jb20vU1RDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQAwDQYJ
|
1855 |
+
KoZIhvcNAQEFBQADggEBADDtT0rhWDpSclu1pqNlGKa7UTt36Z3q059c4EVlew3KW+JwULKUBRSu
|
1856 |
+
SceNQQcSc5R+DCMh/bwQf2AQWnL1mA6s7Ll/3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHf
|
1857 |
+
mbx8IVQr5Fiiu1cprp6poxkmD5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZ
|
1858 |
+
nMUFdAvnZyPSCPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR
|
1859 |
+
3ItHuuG51WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShLHZ4swrhovO0C7jE=
|
1860 |
+
-----END CERTIFICATE-----
|
1861 |
+
|
1862 |
+
Secure Global CA
|
1863 |
+
================
|
1864 |
+
-----BEGIN CERTIFICATE-----
|
1865 |
+
MIIDvDCCAqSgAwIBAgIQB1YipOjUiolN9BPI8PjqpTANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQG
|
1866 |
+
EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBH
|
1867 |
+
bG9iYWwgQ0EwHhcNMDYxMTA3MTk0MjI4WhcNMjkxMjMxMTk1MjA2WjBKMQswCQYDVQQGEwJVUzEg
|
1868 |
+
MB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwg
|
1869 |
+
Q0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvNS7YrGxVaQZx5RNoJLNP2MwhR/jx
|
1870 |
+
YDiJiQPpvepeRlMJ3Fz1Wuj3RSoC6zFh1ykzTM7HfAo3fg+6MpjhHZevj8fcyTiW89sa/FHtaMbQ
|
1871 |
+
bqR8JNGuQsiWUGMu4P51/pinX0kuleM5M2SOHqRfkNJnPLLZ/kG5VacJjnIFHovdRIWCQtBJwB1g
|
1872 |
+
8NEXLJXr9qXBkqPFwqcIYA1gBBCWeZ4WNOaptvolRTnIHmX5k/Wq8VLcmZg9pYYaDDUz+kulBAYV
|
1873 |
+
HDGA76oYa8J719rO+TMg1fW9ajMtgQT7sFzUnKPiXB3jqUJ1XnvUd+85VLrJChgbEplJL4hL/VBi
|
1874 |
+
0XPnj3pDAgMBAAGjgZ0wgZowEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud
|
1875 |
+
EwEB/wQFMAMBAf8wHQYDVR0OBBYEFK9EBMJBfkiD2045AuzshHrmzsmkMDQGA1UdHwQtMCswKaAn
|
1876 |
+
oCWGI2h0dHA6Ly9jcmwuc2VjdXJldHJ1c3QuY29tL1NHQ0EuY3JsMBAGCSsGAQQBgjcVAQQDAgEA
|
1877 |
+
MA0GCSqGSIb3DQEBBQUAA4IBAQBjGghAfaReUw132HquHw0LURYD7xh8yOOvaliTFGCRsoTciE6+
|
1878 |
+
OYo68+aCiV0BN7OrJKQVDpI1WkpEXk5X+nXOH0jOZvQ8QCaSmGwb7iRGDBezUqXbpZGRzzfTb+cn
|
1879 |
+
CDpOGR86p1hcF895P4vkp9MmI50mD1hp/Ed+stCNi5O/KU9DaXR2Z0vPB4zmAve14bRDtUstFJ/5
|
1880 |
+
3CYNv6ZHdAbYiNE6KTCEztI5gGIbqMdXSbxqVVFnFUq+NQfk1XWYN3kwFNspnWzFacxHVaIw98xc
|
1881 |
+
f8LDmBxrThaA63p4ZUWiABqvDA1VZDRIuJK58bRQKfJPIx/abKwfROHdI3hRW8cW
|
1882 |
+
-----END CERTIFICATE-----
|
1883 |
+
|
1884 |
+
COMODO Certification Authority
|
1885 |
+
==============================
|
1886 |
+
-----BEGIN CERTIFICATE-----
|
1887 |
+
MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCBgTELMAkGA1UE
|
1888 |
+
BhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgG
|
1889 |
+
A1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNVBAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1
|
1890 |
+
dGhvcml0eTAeFw0wNjEyMDEwMDAwMDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEb
|
1891 |
+
MBkGA1UECBMSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFD
|
1892 |
+
T01PRE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0aG9yaXR5
|
1893 |
+
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3UcEbVASY06m/weaKXTuH
|
1894 |
+
+7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI2GqGd0S7WWaXUF601CxwRM/aN5VCaTww
|
1895 |
+
xHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV
|
1896 |
+
4EajcNxo2f8ESIl33rXp+2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA
|
1897 |
+
1KGzqSX+DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5OnKVI
|
1898 |
+
rLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW/zAOBgNVHQ8BAf8E
|
1899 |
+
BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6gPKA6hjhodHRwOi8vY3JsLmNvbW9k
|
1900 |
+
b2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9uQXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOC
|
1901 |
+
AQEAPpiem/Yb6dc5t3iuHXIYSdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CP
|
1902 |
+
OGEIqB6BCsAvIC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/
|
1903 |
+
RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4zJVSk/BwJVmc
|
1904 |
+
IGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5ddBA6+C4OmF4O5MBKgxTMVBbkN
|
1905 |
+
+8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IBZQ==
|
1906 |
+
-----END CERTIFICATE-----
|
1907 |
+
|
1908 |
+
Network Solutions Certificate Authority
|
1909 |
+
=======================================
|
1910 |
+
-----BEGIN CERTIFICATE-----
|
1911 |
+
MIID5jCCAs6gAwIBAgIQV8szb8JcFuZHFhfjkDFo4DANBgkqhkiG9w0BAQUFADBiMQswCQYDVQQG
|
1912 |
+
EwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMuMTAwLgYDVQQDEydOZXR3b3Jr
|
1913 |
+
IFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDYxMjAxMDAwMDAwWhcNMjkxMjMx
|
1914 |
+
MjM1OTU5WjBiMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMu
|
1915 |
+
MTAwLgYDVQQDEydOZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0G
|
1916 |
+
CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkvH6SMG3G2I4rC7xGzuAnlt7e+foS0zwzc7MEL7xx
|
1917 |
+
jOWftiJgPl9dzgn/ggwbmlFQGiaJ3dVhXRncEg8tCqJDXRfQNJIg6nPPOCwGJgl6cvf6UDL4wpPT
|
1918 |
+
aaIjzkGxzOTVHzbRijr4jGPiFFlp7Q3Tf2vouAPlT2rlmGNpSAW+Lv8ztumXWWn4Zxmuk2GWRBXT
|
1919 |
+
crA/vGp97Eh/jcOrqnErU2lBUzS1sLnFBgrEsEX1QV1uiUV7PTsmjHTC5dLRfbIR1PtYMiKagMnc
|
1920 |
+
/Qzpf14Dl847ABSHJ3A4qY5usyd2mFHgBeMhqxrVhSI8KbWaFsWAqPS7azCPL0YCorEMIuDTAgMB
|
1921 |
+
AAGjgZcwgZQwHQYDVR0OBBYEFCEwyfsA106Y2oeqKtCnLrFAMadMMA4GA1UdDwEB/wQEAwIBBjAP
|
1922 |
+
BgNVHRMBAf8EBTADAQH/MFIGA1UdHwRLMEkwR6BFoEOGQWh0dHA6Ly9jcmwubmV0c29sc3NsLmNv
|
1923 |
+
bS9OZXR3b3JrU29sdXRpb25zQ2VydGlmaWNhdGVBdXRob3JpdHkuY3JsMA0GCSqGSIb3DQEBBQUA
|
1924 |
+
A4IBAQC7rkvnt1frf6ott3NHhWrB5KUd5Oc86fRZZXe1eltajSU24HqXLjjAV2CDmAaDn7l2em5Q
|
1925 |
+
4LqILPxFzBiwmZVRDuwduIj/h1AcgsLj4DKAv6ALR8jDMe+ZZzKATxcheQxpXN5eNK4CtSbqUN9/
|
1926 |
+
GGUsyfJj4akH/nxxH2szJGoeBfcFaMBqEssuXmHLrijTfsK0ZpEmXzwuJF/LWA/rKOyvEZbz3Htv
|
1927 |
+
wKeI8lN3s2Berq4o2jUsbzRF0ybh3uxbTydrFny9RAQYgrOJeRcQcT16ohZO9QHNpGxlaKFJdlxD
|
1928 |
+
ydi8NmdspZS11My5vWo1ViHe2MPr+8ukYEywVaCge1ey
|
1929 |
+
-----END CERTIFICATE-----
|
1930 |
+
|
1931 |
+
WellsSecure Public Root Certificate Authority
|
1932 |
+
=============================================
|
1933 |
+
-----BEGIN CERTIFICATE-----
|
1934 |
+
MIIEvTCCA6WgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoM
|
1935 |
+
F1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYw
|
1936 |
+
NAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcN
|
1937 |
+
MDcxMjEzMTcwNzU0WhcNMjIxMjE0MDAwNzU0WjCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoMF1dl
|
1938 |
+
bGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYD
|
1939 |
+
VQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0G
|
1940 |
+
CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDub7S9eeKPCCGeOARBJe+rWxxTkqxtnt3CxC5FlAM1
|
1941 |
+
iGd0V+PfjLindo8796jE2yljDpFoNoqXjopxaAkH5OjUDk/41itMpBb570OYj7OeUt9tkTmPOL13
|
1942 |
+
i0Nj67eT/DBMHAGTthP796EfvyXhdDcsHqRePGj4S78NuR4uNuip5Kf4D8uCdXw1LSLWwr8L87T8
|
1943 |
+
bJVhHlfXBIEyg1J55oNjz7fLY4sR4r1e6/aN7ZVyKLSsEmLpSjPmgzKuBXWVvYSV2ypcm44uDLiB
|
1944 |
+
K0HmOFafSZtsdvqKXfcBeYF8wYNABf5x/Qw/zE5gCQ5lRxAvAcAFP4/4s0HvWkJ+We/SlwxlAgMB
|
1945 |
+
AAGjggE0MIIBMDAPBgNVHRMBAf8EBTADAQH/MDkGA1UdHwQyMDAwLqAsoCqGKGh0dHA6Ly9jcmwu
|
1946 |
+
cGtpLndlbGxzZmFyZ28uY29tL3dzcHJjYS5jcmwwDgYDVR0PAQH/BAQDAgHGMB0GA1UdDgQWBBQm
|
1947 |
+
lRkQ2eihl5H/3BnZtQQ+0nMKajCBsgYDVR0jBIGqMIGngBQmlRkQ2eihl5H/3BnZtQQ+0nMKaqGB
|
1948 |
+
i6SBiDCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoMF1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRww
|
1949 |
+
GgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMg
|
1950 |
+
Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHmCAQEwDQYJKoZIhvcNAQEFBQADggEBALkVsUSRzCPI
|
1951 |
+
K0134/iaeycNzXK7mQDKfGYZUMbVmO2rvwNa5U3lHshPcZeG1eMd/ZDJPHV3V3p9+N701NX3leZ0
|
1952 |
+
bh08rnyd2wIDBSxxSyU+B+NemvVmFymIGjifz6pBA4SXa5M4esowRBskRDPQ5NHcKDj0E0M1NSlj
|
1953 |
+
qHyita04pO2t/caaH/+Xc/77szWnk4bGdpEA5qxRFsQnMlzbc9qlk1eOPm01JghZ1edE13YgY+es
|
1954 |
+
E2fDbbFwRnzVlhE9iW9dqKHrjQrawx0zbKPqZxmamX9LPYNRKh3KL4YMon4QLSvUFpULB6ouFJJJ
|
1955 |
+
tylv2G0xffX8oRAHh84vWdw+WNs=
|
1956 |
+
-----END CERTIFICATE-----
|
1957 |
+
|
1958 |
+
COMODO ECC Certification Authority
|
1959 |
+
==================================
|
1960 |
+
-----BEGIN CERTIFICATE-----
|
1961 |
+
MIICiTCCAg+gAwIBAgIQH0evqmIAcFBUTAGem2OZKjAKBggqhkjOPQQDAzCBhTELMAkGA1UEBhMC
|
1962 |
+
R0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UE
|
1963 |
+
ChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBB
|
1964 |
+
dXRob3JpdHkwHhcNMDgwMzA2MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0Ix
|
1965 |
+
GzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMR
|
1966 |
+
Q09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRo
|
1967 |
+
b3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQDR3svdcmCFYX7deSRFtSrYpn1PlILBs5BAH+X
|
1968 |
+
4QokPB0BBO490o0JlwzgdeT6+3eKKvUDYEs2ixYjFq0JcfRK9ChQtP6IHG4/bC8vCVlbpVsLM5ni
|
1969 |
+
wz2J+Wos77LTBumjQjBAMB0GA1UdDgQWBBR1cacZSBm8nZ3qQUfflMRId5nTeTAOBgNVHQ8BAf8E
|
1970 |
+
BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjEA7wNbeqy3eApyt4jf/7VG
|
1971 |
+
FAkK+qDmfQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdvGDeA
|
1972 |
+
U/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY=
|
1973 |
+
-----END CERTIFICATE-----
|
1974 |
+
|
1975 |
+
IGC/A
|
1976 |
+
=====
|
1977 |
+
-----BEGIN CERTIFICATE-----
|
1978 |
+
MIIEAjCCAuqgAwIBAgIFORFFEJQwDQYJKoZIhvcNAQEFBQAwgYUxCzAJBgNVBAYTAkZSMQ8wDQYD
|
1979 |
+
VQQIEwZGcmFuY2UxDjAMBgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQTS9TR0ROMQ4wDAYDVQQLEwVE
|
1980 |
+
Q1NTSTEOMAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2LmZy
|
1981 |
+
MB4XDTAyMTIxMzE0MjkyM1oXDTIwMTAxNzE0MjkyMlowgYUxCzAJBgNVBAYTAkZSMQ8wDQYDVQQI
|
1982 |
+
EwZGcmFuY2UxDjAMBgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQTS9TR0ROMQ4wDAYDVQQLEwVEQ1NT
|
1983 |
+
STEOMAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2LmZyMIIB
|
1984 |
+
IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsh/R0GLFMzvABIaIs9z4iPf930Pfeo2aSVz2
|
1985 |
+
TqrMHLmh6yeJ8kbpO0px1R2OLc/mratjUMdUC24SyZA2xtgv2pGqaMVy/hcKshd+ebUyiHDKcMCW
|
1986 |
+
So7kVc0dJ5S/znIq7Fz5cyD+vfcuiWe4u0dzEvfRNWk68gq5rv9GQkaiv6GFGvm/5P9JhfejcIYy
|
1987 |
+
HF2fYPepraX/z9E0+X1bF8bc1g4oa8Ld8fUzaJ1O/Id8NhLWo4DoQw1VYZTqZDdH6nfK0LJYBcNd
|
1988 |
+
frGoRpAxVs5wKpayMLh35nnAvSk7/ZR3TL0gzUEl4C7HG7vupARB0l2tEmqKm0f7yd1GQOGdPDPQ
|
1989 |
+
tQIDAQABo3cwdTAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIBRjAVBgNVHSAEDjAMMAoGCCqB
|
1990 |
+
egF5AQEBMB0GA1UdDgQWBBSjBS8YYFDCiQrdKyFP/45OqDAxNjAfBgNVHSMEGDAWgBSjBS8YYFDC
|
1991 |
+
iQrdKyFP/45OqDAxNjANBgkqhkiG9w0BAQUFAAOCAQEABdwm2Pp3FURo/C9mOnTgXeQp/wYHE4RK
|
1992 |
+
q89toB9RlPhJy3Q2FLwV3duJL92PoF189RLrn544pEfMs5bZvpwlqwN+Mw+VgQ39FuCIvjfwbF3Q
|
1993 |
+
MZsyK10XZZOYYLxuj7GoPB7ZHPOpJkL5ZB3C55L29B5aqhlSXa/oovdgoPaN8In1buAKBQGVyYsg
|
1994 |
+
Crpa/JosPL3Dt8ldeCUFP1YUmwza+zpI/pdpXsoQhvdOlgQITeywvl3cO45Pwf2aNjSaTFR+FwNI
|
1995 |
+
lQgRHAdvhQh+XU3Endv7rs6y0bO4g2wdsrN58dhwmX7wEwLOXt1R0982gaEbeC9xs/FZTEYYKKuF
|
1996 |
+
0mBWWg==
|
1997 |
+
-----END CERTIFICATE-----
|
1998 |
+
|
1999 |
+
Security Communication EV RootCA1
|
2000 |
+
=================================
|
2001 |
+
-----BEGIN CERTIFICATE-----
|
2002 |
+
MIIDfTCCAmWgAwIBAgIBADANBgkqhkiG9w0BAQUFADBgMQswCQYDVQQGEwJKUDElMCMGA1UEChMc
|
2003 |
+
U0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEqMCgGA1UECxMhU2VjdXJpdHkgQ29tbXVuaWNh
|
2004 |
+
dGlvbiBFViBSb290Q0ExMB4XDTA3MDYwNjAyMTIzMloXDTM3MDYwNjAyMTIzMlowYDELMAkGA1UE
|
2005 |
+
BhMCSlAxJTAjBgNVBAoTHFNFQ09NIFRydXN0IFN5c3RlbXMgQ08uLExURC4xKjAoBgNVBAsTIVNl
|
2006 |
+
Y3VyaXR5IENvbW11bmljYXRpb24gRVYgUm9vdENBMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
|
2007 |
+
AQoCggEBALx/7FebJOD+nLpCeamIivqA4PUHKUPqjgo0No0c+qe1OXj/l3X3L+SqawSERMqm4miO
|
2008 |
+
/VVQYg+kcQ7OBzgtQoVQrTyWb4vVog7P3kmJPdZkLjjlHmy1V4qe70gOzXppFodEtZDkBp2uoQSX
|
2009 |
+
WHnvIEqCa4wiv+wfD+mEce3xDuS4GBPMVjZd0ZoeUWs5bmB2iDQL87PRsJ3KYeJkHcFGB7hj3R4z
|
2010 |
+
ZbOOCVVSPbW9/wfrrWFVGCypaZhKqkDFMxRldAD5kd6vA0jFQFTcD4SQaCDFkpbcLuUCRarAX1T4
|
2011 |
+
bepJz11sS6/vmsJWXMY1VkJqMF/Cq/biPT+zyRGPMUzXn0kCAwEAAaNCMEAwHQYDVR0OBBYEFDVK
|
2012 |
+
9U2vP9eCOKyrcWUXdYydVZPmMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqG
|
2013 |
+
SIb3DQEBBQUAA4IBAQCoh+ns+EBnXcPBZsdAS5f8hxOQWsTvoMpfi7ent/HWtWS3irO4G8za+6xm
|
2014 |
+
iEHO6Pzk2x6Ipu0nUBsCMCRGef4Eh3CXQHPRwMFXGZpppSeZq51ihPZRwSzJIxXYKLerJRO1RuGG
|
2015 |
+
Av8mjMSIkh1W/hln8lXkgKNrnKt34VFxDSDbEJrbvXZ5B3eZKK2aXtqxT0QsNY6llsf9g/BYxnnW
|
2016 |
+
mHyojf6GPgcWkuF75x3sM3Z+Qi5KhfmRiWiEA4Glm5q+4zfFVKtWOxgtQaQM+ELbmaDgcm+7XeEW
|
2017 |
+
T1MKZPlO9L9OVL14bIjqv5wTJMJwaaJ/D8g8rQjJsJhAoyrniIPtd490
|
2018 |
+
-----END CERTIFICATE-----
|
2019 |
+
|
2020 |
+
OISTE WISeKey Global Root GA CA
|
2021 |
+
===============================
|
2022 |
+
-----BEGIN CERTIFICATE-----
|
2023 |
+
MIID8TCCAtmgAwIBAgIQQT1yx/RrH4FDffHSKFTfmjANBgkqhkiG9w0BAQUFADCBijELMAkGA1UE
|
2024 |
+
BhMCQ0gxEDAOBgNVBAoTB1dJU2VLZXkxGzAZBgNVBAsTEkNvcHlyaWdodCAoYykgMjAwNTEiMCAG
|
2025 |
+
A1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNlZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBH
|
2026 |
+
bG9iYWwgUm9vdCBHQSBDQTAeFw0wNTEyMTExNjAzNDRaFw0zNzEyMTExNjA5NTFaMIGKMQswCQYD
|
2027 |
+
VQQGEwJDSDEQMA4GA1UEChMHV0lTZUtleTEbMBkGA1UECxMSQ29weXJpZ2h0IChjKSAyMDA1MSIw
|
2028 |
+
IAYDVQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5
|
2029 |
+
IEdsb2JhbCBSb290IEdBIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAy0+zAJs9
|
2030 |
+
Nt350UlqaxBJH+zYK7LG+DKBKUOVTJoZIyEVRd7jyBxRVVuuk+g3/ytr6dTqvirdqFEr12bDYVxg
|
2031 |
+
Asj1znJ7O7jyTmUIms2kahnBAbtzptf2w93NvKSLtZlhuAGio9RN1AU9ka34tAhxZK9w8RxrfvbD
|
2032 |
+
d50kc3vkDIzh2TbhmYsFmQvtRTEJysIA2/dyoJaqlYfQjse2YXMNdmaM3Bu0Y6Kff5MTMPGhJ9vZ
|
2033 |
+
/yxViJGg4E8HsChWjBgbl0SOid3gF27nKu+POQoxhILYQBRJLnpB5Kf+42TMwVlxSywhp1t94B3R
|
2034 |
+
LoGbw9ho972WG6xwsRYUC9tguSYBBQIDAQABo1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUw
|
2035 |
+
AwEB/zAdBgNVHQ4EFgQUswN+rja8sHnR3JQmthG+IbJphpQwEAYJKwYBBAGCNxUBBAMCAQAwDQYJ
|
2036 |
+
KoZIhvcNAQEFBQADggEBAEuh/wuHbrP5wUOxSPMowB0uyQlB+pQAHKSkq0lPjz0e701vvbyk9vIm
|
2037 |
+
MMkQyh2I+3QZH4VFvbBsUfk2ftv1TDI6QU9bR8/oCy22xBmddMVHxjtqD6wU2zz0c5ypBd8A3HR4
|
2038 |
+
+vg1YFkCExh8vPtNsCBtQ7tgMHpnM1zFmdH4LTlSc/uMqpclXHLZCB6rTjzjgTGfA6b7wP4piFXa
|
2039 |
+
hNVQA7bihKOmNqoROgHhGEvWRGizPflTdISzRpFGlgC3gCy24eMQ4tui5yiPAZZiFj4A4xylNoEY
|
2040 |
+
okxSdsARo27mHbrjWr42U8U+dY+GaSlYU7Wcu2+fXMUY7N0v4ZjJ/L7fCg0=
|
2041 |
+
-----END CERTIFICATE-----
|
2042 |
+
|
2043 |
+
Microsec e-Szigno Root CA
|
2044 |
+
=========================
|
2045 |
+
-----BEGIN CERTIFICATE-----
|
2046 |
+
MIIHqDCCBpCgAwIBAgIRAMy4579OKRr9otxmpRwsDxEwDQYJKoZIhvcNAQEFBQAwcjELMAkGA1UE
|
2047 |
+
BhMCSFUxETAPBgNVBAcTCEJ1ZGFwZXN0MRYwFAYDVQQKEw1NaWNyb3NlYyBMdGQuMRQwEgYDVQQL
|
2048 |
+
EwtlLVN6aWdubyBDQTEiMCAGA1UEAxMZTWljcm9zZWMgZS1Temlnbm8gUm9vdCBDQTAeFw0wNTA0
|
2049 |
+
MDYxMjI4NDRaFw0xNzA0MDYxMjI4NDRaMHIxCzAJBgNVBAYTAkhVMREwDwYDVQQHEwhCdWRhcGVz
|
2050 |
+
dDEWMBQGA1UEChMNTWljcm9zZWMgTHRkLjEUMBIGA1UECxMLZS1Temlnbm8gQ0ExIjAgBgNVBAMT
|
2051 |
+
GU1pY3Jvc2VjIGUtU3ppZ25vIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
|
2052 |
+
AQDtyADVgXvNOABHzNuEwSFpLHSQDCHZU4ftPkNEU6+r+ICbPHiN1I2uuO/TEdyB5s87lozWbxXG
|
2053 |
+
d36hL+BfkrYn13aaHUM86tnsL+4582pnS4uCzyL4ZVX+LMsvfUh6PXX5qqAnu3jCBspRwn5mS6/N
|
2054 |
+
oqdNAoI/gqyFxuEPkEeZlApxcpMqyabAvjxWTHOSJ/FrtfX9/DAFYJLG65Z+AZHCabEeHXtTRbjc
|
2055 |
+
QR/Ji3HWVBTji1R4P770Yjtb9aPs1ZJ04nQw7wHb4dSrmZsqa/i9phyGI0Jf7Enemotb9HI6QMVJ
|
2056 |
+
PqW+jqpx62z69Rrkav17fVVA71hu5tnVvCSrwe+3AgMBAAGjggQ3MIIEMzBnBggrBgEFBQcBAQRb
|
2057 |
+
MFkwKAYIKwYBBQUHMAGGHGh0dHBzOi8vcmNhLmUtc3ppZ25vLmh1L29jc3AwLQYIKwYBBQUHMAKG
|
2058 |
+
IWh0dHA6Ly93d3cuZS1zemlnbm8uaHUvUm9vdENBLmNydDAPBgNVHRMBAf8EBTADAQH/MIIBcwYD
|
2059 |
+
VR0gBIIBajCCAWYwggFiBgwrBgEEAYGoGAIBAQEwggFQMCgGCCsGAQUFBwIBFhxodHRwOi8vd3d3
|
2060 |
+
LmUtc3ppZ25vLmh1L1NaU1ovMIIBIgYIKwYBBQUHAgIwggEUHoIBEABBACAAdABhAG4A+gBzAO0A
|
2061 |
+
dAB2AOEAbgB5ACAA6QByAHQAZQBsAG0AZQB6AOkAcwDpAGgAZQB6ACAA6QBzACAAZQBsAGYAbwBn
|
2062 |
+
AGEAZADhAHMA4QBoAG8AegAgAGEAIABTAHoAbwBsAGcA4QBsAHQAYQB0APMAIABTAHoAbwBsAGcA
|
2063 |
+
4QBsAHQAYQB0AOEAcwBpACAAUwB6AGEAYgDhAGwAeQB6AGEAdABhACAAcwB6AGUAcgBpAG4AdAAg
|
2064 |
+
AGsAZQBsAGwAIABlAGwAagDhAHIAbgBpADoAIABoAHQAdABwADoALwAvAHcAdwB3AC4AZQAtAHMA
|
2065 |
+
egBpAGcAbgBvAC4AaAB1AC8AUwBaAFMAWgAvMIHIBgNVHR8EgcAwgb0wgbqggbeggbSGIWh0dHA6
|
2066 |
+
Ly93d3cuZS1zemlnbm8uaHUvUm9vdENBLmNybIaBjmxkYXA6Ly9sZGFwLmUtc3ppZ25vLmh1L0NO
|
2067 |
+
PU1pY3Jvc2VjJTIwZS1Temlnbm8lMjBSb290JTIwQ0EsT1U9ZS1Temlnbm8lMjBDQSxPPU1pY3Jv
|
2068 |
+
c2VjJTIwTHRkLixMPUJ1ZGFwZXN0LEM9SFU/Y2VydGlmaWNhdGVSZXZvY2F0aW9uTGlzdDtiaW5h
|
2069 |
+
cnkwDgYDVR0PAQH/BAQDAgEGMIGWBgNVHREEgY4wgYuBEGluZm9AZS1zemlnbm8uaHWkdzB1MSMw
|
2070 |
+
IQYDVQQDDBpNaWNyb3NlYyBlLVN6aWduw7MgUm9vdCBDQTEWMBQGA1UECwwNZS1TemlnbsOzIEhT
|
2071 |
+
WjEWMBQGA1UEChMNTWljcm9zZWMgS2Z0LjERMA8GA1UEBxMIQnVkYXBlc3QxCzAJBgNVBAYTAkhV
|
2072 |
+
MIGsBgNVHSMEgaQwgaGAFMegSXUWYYTbMUuE0vE3QJDvTtz3oXakdDByMQswCQYDVQQGEwJIVTER
|
2073 |
+
MA8GA1UEBxMIQnVkYXBlc3QxFjAUBgNVBAoTDU1pY3Jvc2VjIEx0ZC4xFDASBgNVBAsTC2UtU3pp
|
2074 |
+
Z25vIENBMSIwIAYDVQQDExlNaWNyb3NlYyBlLVN6aWdubyBSb290IENBghEAzLjnv04pGv2i3Gal
|
2075 |
+
HCwPETAdBgNVHQ4EFgQUx6BJdRZhhNsxS4TS8TdAkO9O3PcwDQYJKoZIhvcNAQEFBQADggEBANMT
|
2076 |
+
nGZjWS7KXHAM/IO8VbH0jgdsZifOwTsgqRy7RlRw7lrMoHfqaEQn6/Ip3Xep1fvj1KcExJW4C+FE
|
2077 |
+
aGAHQzAxQmHl7tnlJNUb3+FKG6qfx1/4ehHqE5MAyopYse7tDk2016g2JnzgOsHVV4Lxdbb9iV/a
|
2078 |
+
86g4nzUGCM4ilb7N1fy+W955a9x6qWVmvrElWl/tftOsRm1M9DKHtCAE4Gx4sHfRhUZLphK3dehK
|
2079 |
+
yVZs15KrnfVJONJPU+NVkBHbmJbGSfI+9J8b4PeI3CVimUTYc78/MPMMNz7UwiiAc7EBt51alhQB
|
2080 |
+
S6kRnSlqLtBdgcDPsiBDxwPgN05dCtxZICU=
|
2081 |
+
-----END CERTIFICATE-----
|
2082 |
+
|
2083 |
+
Certigna
|
2084 |
+
========
|
2085 |
+
-----BEGIN CERTIFICATE-----
|
2086 |
+
MIIDqDCCApCgAwIBAgIJAP7c4wEPyUj/MA0GCSqGSIb3DQEBBQUAMDQxCzAJBgNVBAYTAkZSMRIw
|
2087 |
+
EAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hMB4XDTA3MDYyOTE1MTMwNVoXDTI3
|
2088 |
+
MDYyOTE1MTMwNVowNDELMAkGA1UEBhMCRlIxEjAQBgNVBAoMCURoaW15b3RpczERMA8GA1UEAwwI
|
2089 |
+
Q2VydGlnbmEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDIaPHJ1tazNHUmgh7stL7q
|
2090 |
+
XOEm7RFHYeGifBZ4QCHkYJ5ayGPhxLGWkv8YbWkj4Sti993iNi+RB7lIzw7sebYs5zRLcAglozyH
|
2091 |
+
GxnygQcPOJAZ0xH+hrTy0V4eHpbNgGzOOzGTtvKg0KmVEn2lmsxryIRWijOp5yIVUxbwzBfsV1/p
|
2092 |
+
ogqYCd7jX5xv3EjjhQsVWqa6n6xI4wmy9/Qy3l40vhx4XUJbzg4ij02Q130yGLMLLGq/jj8UEYkg
|
2093 |
+
DncUtT2UCIf3JR7VsmAA7G8qKCVuKj4YYxclPz5EIBb2JsglrgVKtOdjLPOMFlN+XPsRGgjBRmKf
|
2094 |
+
Irjxwo1p3Po6WAbfAgMBAAGjgbwwgbkwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUGu3+QTmQ
|
2095 |
+
tCRZvgHyUtVF9lo53BEwZAYDVR0jBF0wW4AUGu3+QTmQtCRZvgHyUtVF9lo53BGhOKQ2MDQxCzAJ
|
2096 |
+
BgNVBAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hggkA/tzjAQ/J
|
2097 |
+
SP8wDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG9w0BAQUFAAOCAQEA
|
2098 |
+
hQMeknH2Qq/ho2Ge6/PAD/Kl1NqV5ta+aDY9fm4fTIrv0Q8hbV6lUmPOEvjvKtpv6zf+EwLHyzs+
|
2099 |
+
ImvaYS5/1HI93TDhHkxAGYwP15zRgzB7mFncfca5DClMoTOi62c6ZYTTluLtdkVwj7Ur3vkj1klu
|
2100 |
+
PBS1xp81HlDQwY9qcEQCYsuuHWhBp6pX6FOqB9IG9tUUBguRA3UsbHK1YZWaDYu5Def131TN3ubY
|
2101 |
+
1gkIl2PlwS6wt0QmwCbAr1UwnjvVNioZBPRcHv/PLLf/0P2HQBHVESO7SMAhqaQoLf0V+LBOK/Qw
|
2102 |
+
WyH8EZE0vkHve52Xdf+XlcCWWC/qu0bXu+TZLg==
|
2103 |
+
-----END CERTIFICATE-----
|
2104 |
+
|
2105 |
+
AC Ra\xC3\xADz Certic\xC3\xA1mara S.A.
|
2106 |
+
======================================
|
2107 |
+
-----BEGIN CERTIFICATE-----
|
2108 |
+
MIIGZjCCBE6gAwIBAgIPB35Sk3vgFeNX8GmMy+wMMA0GCSqGSIb3DQEBBQUAMHsxCzAJBgNVBAYT
|
2109 |
+
AkNPMUcwRQYDVQQKDD5Tb2NpZWRhZCBDYW1lcmFsIGRlIENlcnRpZmljYWNpw7NuIERpZ2l0YWwg
|
2110 |
+
LSBDZXJ0aWPDoW1hcmEgUy5BLjEjMCEGA1UEAwwaQUMgUmHDrXogQ2VydGljw6FtYXJhIFMuQS4w
|
2111 |
+
HhcNMDYxMTI3MjA0NjI5WhcNMzAwNDAyMjE0MjAyWjB7MQswCQYDVQQGEwJDTzFHMEUGA1UECgw+
|
2112 |
+
U29jaWVkYWQgQ2FtZXJhbCBkZSBDZXJ0aWZpY2FjacOzbiBEaWdpdGFsIC0gQ2VydGljw6FtYXJh
|
2113 |
+
IFMuQS4xIzAhBgNVBAMMGkFDIFJhw616IENlcnRpY8OhbWFyYSBTLkEuMIICIjANBgkqhkiG9w0B
|
2114 |
+
AQEFAAOCAg8AMIICCgKCAgEAq2uJo1PMSCMI+8PPUZYILrgIem08kBeGqentLhM0R7LQcNzJPNCN
|
2115 |
+
yu5LF6vQhbCnIwTLqKL85XXbQMpiiY9QngE9JlsYhBzLfDe3fezTf3MZsGqy2IiKLUV0qPezuMDU
|
2116 |
+
2s0iiXRNWhU5cxh0T7XrmafBHoi0wpOQY5fzp6cSsgkiBzPZkc0OnB8OIMfuuzONj8LSWKdf/WU3
|
2117 |
+
4ojC2I+GdV75LaeHM/J4Ny+LvB2GNzmxlPLYvEqcgxhaBvzz1NS6jBUJJfD5to0EfhcSM2tXSExP
|
2118 |
+
2yYe68yQ54v5aHxwD6Mq0Do43zeX4lvegGHTgNiRg0JaTASJaBE8rF9ogEHMYELODVoqDA+bMMCm
|
2119 |
+
8Ibbq0nXl21Ii/kDwFJnmxL3wvIumGVC2daa49AZMQyth9VXAnow6IYm+48jilSH5L887uvDdUhf
|
2120 |
+
HjlvgWJsxS3EF1QZtzeNnDeRyPYL1epjb4OsOMLzP96a++EjYfDIJss2yKHzMI+ko6Kh3VOz3vCa
|
2121 |
+
Mh+DkXkwwakfU5tTohVTP92dsxA7SH2JD/ztA/X7JWR1DhcZDY8AFmd5ekD8LVkH2ZD6mq093ICK
|
2122 |
+
5lw1omdMEWux+IBkAC1vImHFrEsm5VoQgpukg3s0956JkSCXjrdCx2bD0Omk1vUgjcTDlaxECp1b
|
2123 |
+
czwmPS9KvqfJpxAe+59QafMCAwEAAaOB5jCB4zAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQE
|
2124 |
+
AwIBBjAdBgNVHQ4EFgQU0QnQ6dfOeXRU+Tows/RtLAMDG2gwgaAGA1UdIASBmDCBlTCBkgYEVR0g
|
2125 |
+
ADCBiTArBggrBgEFBQcCARYfaHR0cDovL3d3dy5jZXJ0aWNhbWFyYS5jb20vZHBjLzBaBggrBgEF
|
2126 |
+
BQcCAjBOGkxMaW1pdGFjaW9uZXMgZGUgZ2FyYW507WFzIGRlIGVzdGUgY2VydGlmaWNhZG8gc2Ug
|
2127 |
+
cHVlZGVuIGVuY29udHJhciBlbiBsYSBEUEMuMA0GCSqGSIb3DQEBBQUAA4ICAQBclLW4RZFNjmEf
|
2128 |
+
AygPU3zmpFmps4p6xbD/CHwso3EcIRNnoZUSQDWDg4902zNc8El2CoFS3UnUmjIz75uny3XlesuX
|
2129 |
+
EpBcunvFm9+7OSPI/5jOCk0iAUgHforA1SBClETvv3eiiWdIG0ADBaGJ7M9i4z0ldma/Jre7Ir5v
|
2130 |
+
/zlXdLp6yQGVwZVR6Kss+LGGIOk/yzVb0hfpKv6DExdA7ohiZVvVO2Dpezy4ydV/NgIlqmjCMRW3
|
2131 |
+
MGXrfx1IebHPOeJCgBbT9ZMj/EyXyVo3bHwi2ErN0o42gzmRkBDI8ck1fj+404HGIGQatlDCIaR4
|
2132 |
+
3NAvO2STdPCWkPHv+wlaNECW8DYSwaN0jJN+Qd53i+yG2dIPPy3RzECiiWZIHiCznCNZc6lEc7wk
|
2133 |
+
eZBWN7PGKX6jD/EpOe9+XCgycDWs2rjIdWb8m0w5R44bb5tNAlQiM+9hup4phO9OSzNHdpdqy35f
|
2134 |
+
/RWmnkJDW2ZaiogN9xa5P1FlK2Zqi9E4UqLWRhH6/JocdJ6PlwsCT2TG9WjTSy3/pDceiz+/RL5h
|
2135 |
+
RqGEPQgnTIEgd4kI6mdAXmwIUV80WoyWaM3X94nCHNMyAK9Sy9NgWyo6R35rMDOhYil/SrnhLecU
|
2136 |
+
Iw4OGEfhefwVVdCx/CVxY3UzHCMrr1zZ7Ud3YA47Dx7SwNxkBYn8eNZcLCZDqQ==
|
2137 |
+
-----END CERTIFICATE-----
|
2138 |
+
|
2139 |
+
TC TrustCenter Class 2 CA II
|
2140 |
+
============================
|
2141 |
+
-----BEGIN CERTIFICATE-----
|
2142 |
+
MIIEqjCCA5KgAwIBAgIOLmoAAQACH9dSISwRXDswDQYJKoZIhvcNAQEFBQAwdjELMAkGA1UEBhMC
|
2143 |
+
REUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNVBAsTGVRDIFRydXN0Q2VudGVy
|
2144 |
+
IENsYXNzIDIgQ0ExJTAjBgNVBAMTHFRDIFRydXN0Q2VudGVyIENsYXNzIDIgQ0EgSUkwHhcNMDYw
|
2145 |
+
MTEyMTQzODQzWhcNMjUxMjMxMjI1OTU5WjB2MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1
|
2146 |
+
c3RDZW50ZXIgR21iSDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQTElMCMGA1UE
|
2147 |
+
AxMcVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQSBJSTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
|
2148 |
+
AQoCggEBAKuAh5uO8MN8h9foJIIRszzdQ2Lu+MNF2ujhoF/RKrLqk2jftMjWQ+nEdVl//OEd+DFw
|
2149 |
+
IxuInie5e/060smp6RQvkL4DUsFJzfb95AhmC1eKokKguNV/aVyQMrKXDcpK3EY+AlWJU+MaWss2
|
2150 |
+
xgdW94zPEfRMuzBwBJWl9jmM/XOBCH2JXjIeIqkiRUuwZi4wzJ9l/fzLganx4Duvo4bRierERXlQ
|
2151 |
+
Xa7pIXSSTYtZgo+U4+lK8edJsBTj9WLL1XK9H7nSn6DNqPoByNkN39r8R52zyFTfSUrxIan+GE7u
|
2152 |
+
SNQZu+995OKdy1u2bv/jzVrndIIFuoAlOMvkaZ6vQaoahPUCAwEAAaOCATQwggEwMA8GA1UdEwEB
|
2153 |
+
/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTjq1RMgKHbVkO3kUrL84J6E1wIqzCB
|
2154 |
+
7QYDVR0fBIHlMIHiMIHfoIHcoIHZhjVodHRwOi8vd3d3LnRydXN0Y2VudGVyLmRlL2NybC92Mi90
|
2155 |
+
Y19jbGFzc18yX2NhX0lJLmNybIaBn2xkYXA6Ly93d3cudHJ1c3RjZW50ZXIuZGUvQ049VEMlMjBU
|
2156 |
+
cnVzdENlbnRlciUyMENsYXNzJTIwMiUyMENBJTIwSUksTz1UQyUyMFRydXN0Q2VudGVyJTIwR21i
|
2157 |
+
SCxPVT1yb290Y2VydHMsREM9dHJ1c3RjZW50ZXIsREM9ZGU/Y2VydGlmaWNhdGVSZXZvY2F0aW9u
|
2158 |
+
TGlzdD9iYXNlPzANBgkqhkiG9w0BAQUFAAOCAQEAjNfffu4bgBCzg/XbEeprS6iSGNn3Bzn1LL4G
|
2159 |
+
dXpoUxUc6krtXvwjshOg0wn/9vYua0Fxec3ibf2uWWuFHbhOIprtZjluS5TmVfwLG4t3wVMTZonZ
|
2160 |
+
KNaL80VKY7f9ewthXbhtvsPcW3nS7Yblok2+XnR8au0WOB9/WIFaGusyiC2y8zl3gK9etmF1Kdsj
|
2161 |
+
TYjKUCjLhdLTEKJZbtOTVAB6okaVhgWcqRmY5TFyDADiZ9lA4CQze28suVyrZZ0srHbqNZn1l7kP
|
2162 |
+
JOzHdiEoZa5X6AeIdUpWoNIFOqTmjZKILPPy4cHGYdtBxceb9w4aUUXCYWvcZCcXjFq32nQozZfk
|
2163 |
+
vQ==
|
2164 |
+
-----END CERTIFICATE-----
|
2165 |
+
|
2166 |
+
TC TrustCenter Class 3 CA II
|
2167 |
+
============================
|
2168 |
+
-----BEGIN CERTIFICATE-----
|
2169 |
+
MIIEqjCCA5KgAwIBAgIOSkcAAQAC5aBd1j8AUb8wDQYJKoZIhvcNAQEFBQAwdjELMAkGA1UEBhMC
|
2170 |
+
REUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNVBAsTGVRDIFRydXN0Q2VudGVy
|
2171 |
+
IENsYXNzIDMgQ0ExJTAjBgNVBAMTHFRDIFRydXN0Q2VudGVyIENsYXNzIDMgQ0EgSUkwHhcNMDYw
|
2172 |
+
MTEyMTQ0MTU3WhcNMjUxMjMxMjI1OTU5WjB2MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1
|
2173 |
+
c3RDZW50ZXIgR21iSDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMyBDQTElMCMGA1UE
|
2174 |
+
AxMcVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMyBDQSBJSTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
|
2175 |
+
AQoCggEBALTgu1G7OVyLBMVMeRwjhjEQY0NVJz/GRcekPewJDRoeIMJWHt4bNwcwIi9v8Qbxq63W
|
2176 |
+
yKthoy9DxLCyLfzDlml7forkzMA5EpBCYMnMNWju2l+QVl/NHE1bWEnrDgFPZPosPIlY2C8u4rBo
|
2177 |
+
6SI7dYnWRBpl8huXJh0obazovVkdKyT21oQDZogkAHhg8fir/gKya/si+zXmFtGt9i4S5Po1auUZ
|
2178 |
+
uV3bOx4a+9P/FRQI2AlqukWdFHlgfa9Aigdzs5OW03Q0jTo3Kd5c7PXuLjHCINy+8U9/I1LZW+Jk
|
2179 |
+
2ZyqBwi1Rb3R0DHBq1SfqdLDYmAD8bs5SpJKPQq5ncWg/jcCAwEAAaOCATQwggEwMA8GA1UdEwEB
|
2180 |
+
/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTUovyfs8PYA9NXXAek0CSnwPIA1DCB
|
2181 |
+
7QYDVR0fBIHlMIHiMIHfoIHcoIHZhjVodHRwOi8vd3d3LnRydXN0Y2VudGVyLmRlL2NybC92Mi90
|
2182 |
+
Y19jbGFzc18zX2NhX0lJLmNybIaBn2xkYXA6Ly93d3cudHJ1c3RjZW50ZXIuZGUvQ049VEMlMjBU
|
2183 |
+
cnVzdENlbnRlciUyMENsYXNzJTIwMyUyMENBJTIwSUksTz1UQyUyMFRydXN0Q2VudGVyJTIwR21i
|
2184 |
+
SCxPVT1yb290Y2VydHMsREM9dHJ1c3RjZW50ZXIsREM9ZGU/Y2VydGlmaWNhdGVSZXZvY2F0aW9u
|
2185 |
+
TGlzdD9iYXNlPzANBgkqhkiG9w0BAQUFAAOCAQEANmDkcPcGIEPZIxpC8vijsrlNirTzwppVMXzE
|
2186 |
+
O2eatN9NDoqTSheLG43KieHPOh6sHfGcMrSOWXaiQYUlN6AT0PV8TtXqluJucsG7Kv5sbviRmEb8
|
2187 |
+
yRtXW+rIGjs/sFGYPAfaLFkB2otE6OF0/ado3VS6g0bsyEa1+K+XwDsJHI/OcpY9M1ZwvJbL2NV9
|
2188 |
+
IJqDnxrcOfHFcqMRA/07QlIp2+gB95tejNaNhk4Z+rwcvsUhpYeeeC422wlxo3I0+GzjBgnyXlal
|
2189 |
+
092Y+tTmBvTwtiBjS+opvaqCZh77gaqnN60TGOaSw4HBM7uIHqHn4rS9MWwOUT1v+5ZWgOI2F9Hc
|
2190 |
+
5A==
|
2191 |
+
-----END CERTIFICATE-----
|
2192 |
+
|
2193 |
+
TC TrustCenter Universal CA I
|
2194 |
+
=============================
|
2195 |
+
-----BEGIN CERTIFICATE-----
|
2196 |
+
MIID3TCCAsWgAwIBAgIOHaIAAQAC7LdggHiNtgYwDQYJKoZIhvcNAQEFBQAweTELMAkGA1UEBhMC
|
2197 |
+
REUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxJDAiBgNVBAsTG1RDIFRydXN0Q2VudGVy
|
2198 |
+
IFVuaXZlcnNhbCBDQTEmMCQGA1UEAxMdVEMgVHJ1c3RDZW50ZXIgVW5pdmVyc2FsIENBIEkwHhcN
|
2199 |
+
MDYwMzIyMTU1NDI4WhcNMjUxMjMxMjI1OTU5WjB5MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMg
|
2200 |
+
VHJ1c3RDZW50ZXIgR21iSDEkMCIGA1UECxMbVEMgVHJ1c3RDZW50ZXIgVW5pdmVyc2FsIENBMSYw
|
2201 |
+
JAYDVQQDEx1UQyBUcnVzdENlbnRlciBVbml2ZXJzYWwgQ0EgSTCCASIwDQYJKoZIhvcNAQEBBQAD
|
2202 |
+
ggEPADCCAQoCggEBAKR3I5ZEr5D0MacQ9CaHnPM42Q9e3s9B6DGtxnSRJJZ4Hgmgm5qVSkr1YnwC
|
2203 |
+
qMqs+1oEdjneX/H5s7/zA1hV0qq34wQi0fiU2iIIAI3TfCZdzHd55yx4Oagmcw6iXSVphU9VDprv
|
2204 |
+
xrlE4Vc93x9UIuVvZaozhDrzznq+VZeujRIPFDPiUHDDSYcTvFHe15gSWu86gzOSBnWLknwSaHtw
|
2205 |
+
ag+1m7Z3W0hZneTvWq3zwZ7U10VOylY0Ibw+F1tvdwxIAUMpsN0/lm7mlaoMwCC2/T42J5zjXM9O
|
2206 |
+
gdwZu5GQfezmlwQek8wiSdeXhrYTCjxDI3d+8NzmzSQfO4ObNDqDNOMCAwEAAaNjMGEwHwYDVR0j
|
2207 |
+
BBgwFoAUkqR1LKSevoFE63n8isWVpesQdXMwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
|
2208 |
+
AYYwHQYDVR0OBBYEFJKkdSyknr6BROt5/IrFlaXrEHVzMA0GCSqGSIb3DQEBBQUAA4IBAQAo0uCG
|
2209 |
+
1eb4e/CX3CJrO5UUVg8RMKWaTzqwOuAGy2X17caXJ/4l8lfmXpWMPmRgFVp/Lw0BxbFg/UU1z/Cy
|
2210 |
+
vwbZ71q+s2IhtNerNXxTPqYn8aEt2hojnczd7Dwtnic0XQ/CNnm8yUpiLe1r2X1BQ3y2qsrtYbE3
|
2211 |
+
ghUJGooWMNjsydZHcnhLEEYUjl8Or+zHL6sQ17bxbuyGssLoDZJz3KL0Dzq/YSMQiZxIQG5wALPT
|
2212 |
+
ujdEWBF6AmqI8Dc08BnprNRlc/ZpjGSUOnmFKbAWKwyCPwacx/0QK54PLLae4xW/2TYcuiUaUj0a
|
2213 |
+
7CIMHOCkoj3w6DnPgcB77V0fb8XQC9eY
|
2214 |
+
-----END CERTIFICATE-----
|
2215 |
+
|
2216 |
+
Deutsche Telekom Root CA 2
|
2217 |
+
==========================
|
2218 |
+
-----BEGIN CERTIFICATE-----
|
2219 |
+
MIIDnzCCAoegAwIBAgIBJjANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJERTEcMBoGA1UEChMT
|
2220 |
+
RGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxlU2VjIFRydXN0IENlbnRlcjEjMCEG
|
2221 |
+
A1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290IENBIDIwHhcNOTkwNzA5MTIxMTAwWhcNMTkwNzA5
|
2222 |
+
MjM1OTAwWjBxMQswCQYDVQQGEwJERTEcMBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0G
|
2223 |
+
A1UECxMWVC1UZWxlU2VjIFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBS
|
2224 |
+
b290IENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCrC6M14IspFLEUha88EOQ5
|
2225 |
+
bzVdSq7d6mGNlUn0b2SjGmBmpKlAIoTZ1KXleJMOaAGtuU1cOs7TuKhCQN/Po7qCWWqSG6wcmtoI
|
2226 |
+
KyUn+WkjR/Hg6yx6m/UTAtB+NHzCnjwAWav12gz1MjwrrFDa1sPeg5TKqAyZMg4ISFZbavva4VhY
|
2227 |
+
AUlfckE8FQYBjl2tqriTtM2e66foai1SNNs671x1Udrb8zH57nGYMsRUFUQM+ZtV7a3fGAigo4aK
|
2228 |
+
Se5TBY8ZTNXeWHmb0mocQqvF1afPaA+W5OFhmHZhyJF81j4A4pFQh+GdCuatl9Idxjp9y7zaAzTV
|
2229 |
+
jlsB9WoHtxa2bkp/AgMBAAGjQjBAMB0GA1UdDgQWBBQxw3kbuvVT1xfgiXotF2wKsyudMzAPBgNV
|
2230 |
+
HRMECDAGAQH/AgEFMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAlGRZrTlk5ynr
|
2231 |
+
E/5aw4sTV8gEJPB0d8Bg42f76Ymmg7+Wgnxu1MM9756AbrsptJh6sTtU6zkXR34ajgv8HzFZMQSy
|
2232 |
+
zhfzLMdiNlXiItiJVbSYSKpk+tYcNthEeFpaIzpXl/V6ME+un2pMSyuOoAPjPuCp1NJ70rOo4nI8
|
2233 |
+
rZ7/gFnkm0W09juwzTkZmDLl6iFhkOQxIY40sfcvNUqFENrnijchvllj4PKFiDFT1FQUhXB59C4G
|
2234 |
+
dyd1Lx+4ivn+xbrYNuSD7Odlt79jWvNGr4GUN9RBjNYj1h7P9WgbRGOiWrqnNVmh5XAFmw4jV5mU
|
2235 |
+
Cm26OWMohpLzGITY+9HPBVZkVw==
|
2236 |
+
-----END CERTIFICATE-----
|
2237 |
+
|
2238 |
+
ComSign Secured CA
|
2239 |
+
==================
|
2240 |
+
-----BEGIN CERTIFICATE-----
|
2241 |
+
MIIDqzCCApOgAwIBAgIRAMcoRwmzuGxFjB36JPU2TukwDQYJKoZIhvcNAQEFBQAwPDEbMBkGA1UE
|
2242 |
+
AxMSQ29tU2lnbiBTZWN1cmVkIENBMRAwDgYDVQQKEwdDb21TaWduMQswCQYDVQQGEwJJTDAeFw0w
|
2243 |
+
NDAzMjQxMTM3MjBaFw0yOTAzMTYxNTA0NTZaMDwxGzAZBgNVBAMTEkNvbVNpZ24gU2VjdXJlZCBD
|
2244 |
+
QTEQMA4GA1UEChMHQ29tU2lnbjELMAkGA1UEBhMCSUwwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
|
2245 |
+
ggEKAoIBAQDGtWhfHZQVw6QIVS3joFd67+l0Kru5fFdJGhFeTymHDEjWaueP1H5XJLkGieQcPOqs
|
2246 |
+
49ohgHMhCu95mGwfCP+hUH3ymBvJVG8+pSjsIQQPRbsHPaHA+iqYHU4Gk/v1iDurX8sWv+bznkqH
|
2247 |
+
7Rnqwp9D5PGBpX8QTz7RSmKtUxvLg/8HZaWSLWapW7ha9B20IZFKF3ueMv5WJDmyVIRD9YTC2LxB
|
2248 |
+
kMyd1mja6YJQqTtoz7VdApRgFrFD2UNd3V2Hbuq7s8lr9gOUCXDeFhF6K+h2j0kQmHe5Y1yLM5d1
|
2249 |
+
9guMsqtb3nQgJT/j8xH5h2iGNXHDHYwt6+UarA9z1YJZQIDTAgMBAAGjgacwgaQwDAYDVR0TBAUw
|
2250 |
+
AwEB/zBEBgNVHR8EPTA7MDmgN6A1hjNodHRwOi8vZmVkaXIuY29tc2lnbi5jby5pbC9jcmwvQ29t
|
2251 |
+
U2lnblNlY3VyZWRDQS5jcmwwDgYDVR0PAQH/BAQDAgGGMB8GA1UdIwQYMBaAFMFL7XC29z58ADsA
|
2252 |
+
j8c+DkWfHl3sMB0GA1UdDgQWBBTBS+1wtvc+fAA7AI/HPg5Fnx5d7DANBgkqhkiG9w0BAQUFAAOC
|
2253 |
+
AQEAFs/ukhNQq3sUnjO2QiBq1BW9Cav8cujvR3qQrFHBZE7piL1DRYHjZiM/EoZNGeQFsOY3wo3a
|
2254 |
+
BijJD4mkU6l1P7CW+6tMM1X5eCZGbxs2mPtCdsGCuY7e+0X5YxtiOzkGynd6qDwJz2w2PQ8KRUtp
|
2255 |
+
FhpFfTMDZflScZAmlaxMDPWLkz/MdXSFmLr/YnpNH4n+rr2UAJm/EaXc4HnFFgt9AmEd6oX5AhVP
|
2256 |
+
51qJThRv4zdLhfXBPGHg/QVBspJ/wx2g0K5SZGBrGMYmnNj1ZOQ2GmKfig8+/21OGVZOIJFsnzQz
|
2257 |
+
OjRXUDpvgV4GxvU+fE6OK85lBi5d0ipTdF7Tbieejw==
|
2258 |
+
-----END CERTIFICATE-----
|
2259 |
+
|
2260 |
+
Cybertrust Global Root
|
2261 |
+
======================
|
2262 |
+
-----BEGIN CERTIFICATE-----
|
2263 |
+
MIIDoTCCAomgAwIBAgILBAAAAAABD4WqLUgwDQYJKoZIhvcNAQEFBQAwOzEYMBYGA1UEChMPQ3li
|
2264 |
+
ZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2JhbCBSb290MB4XDTA2MTIxNTA4
|
2265 |
+
MDAwMFoXDTIxMTIxNTA4MDAwMFowOzEYMBYGA1UEChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQD
|
2266 |
+
ExZDeWJlcnRydXN0IEdsb2JhbCBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
|
2267 |
+
+Mi8vRRQZhP/8NN57CPytxrHjoXxEnOmGaoQ25yiZXRadz5RfVb23CO21O1fWLE3TdVJDm71aofW
|
2268 |
+
0ozSJ8bi/zafmGWgE07GKmSb1ZASzxQG9Dvj1Ci+6A74q05IlG2OlTEQXO2iLb3VOm2yHLtgwEZL
|
2269 |
+
AfVJrn5GitB0jaEMAs7u/OePuGtm839EAL9mJRQr3RAwHQeWP032a7iPt3sMpTjr3kfb1V05/Iin
|
2270 |
+
89cqdPHoWqI7n1C6poxFNcJQZZXcY4Lv3b93TZxiyWNzFtApD0mpSPCzqrdsxacwOUBdrsTiXSZT
|
2271 |
+
8M4cIwhhqJQZugRiQOwfOHB3EgZxpzAYXSUnpQIDAQABo4GlMIGiMA4GA1UdDwEB/wQEAwIBBjAP
|
2272 |
+
BgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBS2CHsNesysIEyGVjJez6tuhS1wVzA/BgNVHR8EODA2
|
2273 |
+
MDSgMqAwhi5odHRwOi8vd3d3Mi5wdWJsaWMtdHJ1c3QuY29tL2NybC9jdC9jdHJvb3QuY3JsMB8G
|
2274 |
+
A1UdIwQYMBaAFLYIew16zKwgTIZWMl7Pq26FLXBXMA0GCSqGSIb3DQEBBQUAA4IBAQBW7wojoFRO
|
2275 |
+
lZfJ+InaRcHUowAl9B8Tq7ejhVhpwjCt2BWKLePJzYFa+HMjWqd8BfP9IjsO0QbE2zZMcwSO5bAi
|
2276 |
+
5MXzLqXZI+O4Tkogp24CJJ8iYGd7ix1yCcUxXOl5n4BHPa2hCwcUPUf/A2kaDAtE52Mlp3+yybh2
|
2277 |
+
hO0j9n0Hq0V+09+zv+mKts2oomcrUtW3ZfA5TGOgkXmTUg9U3YO7n9GPp1Nzw8v/MOx8BLjYRB+T
|
2278 |
+
X3EJIrduPuocA06dGiBh+4E37F78CkWr1+cXVdCg6mCbpvbjjFspwgZgFJ0tl0ypkxWdYcQBX0jW
|
2279 |
+
WL1WMRJOEcgh4LMRkWXbtKaIOM5V
|
2280 |
+
-----END CERTIFICATE-----
|
2281 |
+
|
2282 |
+
ePKI Root Certification Authority
|
2283 |
+
=================================
|
2284 |
+
-----BEGIN CERTIFICATE-----
|
2285 |
+
MIIFsDCCA5igAwIBAgIQFci9ZUdcr7iXAF7kBtK8nTANBgkqhkiG9w0BAQUFADBeMQswCQYDVQQG
|
2286 |
+
EwJUVzEjMCEGA1UECgwaQ2h1bmdod2EgVGVsZWNvbSBDby4sIEx0ZC4xKjAoBgNVBAsMIWVQS0kg
|
2287 |
+
Um9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNDEyMjAwMjMxMjdaFw0zNDEyMjAwMjMx
|
2288 |
+
MjdaMF4xCzAJBgNVBAYTAlRXMSMwIQYDVQQKDBpDaHVuZ2h3YSBUZWxlY29tIENvLiwgTHRkLjEq
|
2289 |
+
MCgGA1UECwwhZVBLSSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0B
|
2290 |
+
AQEFAAOCAg8AMIICCgKCAgEA4SUP7o3biDN1Z82tH306Tm2d0y8U82N0ywEhajfqhFAHSyZbCUNs
|
2291 |
+
IZ5qyNUD9WBpj8zwIuQf5/dqIjG3LBXy4P4AakP/h2XGtRrBp0xtInAhijHyl3SJCRImHJ7K2RKi
|
2292 |
+
lTza6We/CKBk49ZCt0Xvl/T29de1ShUCWH2YWEtgvM3XDZoTM1PRYfl61dd4s5oz9wCGzh1NlDiv
|
2293 |
+
qOx4UXCKXBCDUSH3ET00hl7lSM2XgYI1TBnsZfZrxQWh7kcT1rMhJ5QQCtkkO7q+RBNGMD+XPNjX
|
2294 |
+
12ruOzjjK9SXDrkb5wdJfzcq+Xd4z1TtW0ado4AOkUPB1ltfFLqfpo0kR0BZv3I4sjZsN/+Z0V0O
|
2295 |
+
WQqraffAsgRFelQArr5T9rXn4fg8ozHSqf4hUmTFpmfwdQcGlBSBVcYn5AGPF8Fqcde+S/uUWH1+
|
2296 |
+
ETOxQvdibBjWzwloPn9s9h6PYq2lY9sJpx8iQkEeb5mKPtf5P0B6ebClAZLSnT0IFaUQAS2zMnao
|
2297 |
+
lQ2zepr7BxB4EW/hj8e6DyUadCrlHJhBmd8hh+iVBmoKs2pHdmX2Os+PYhcZewoozRrSgx4hxyy/
|
2298 |
+
vv9haLdnG7t4TY3OZ+XkwY63I2binZB1NJipNiuKmpS5nezMirH4JYlcWrYvjB9teSSnUmjDhDXi
|
2299 |
+
Zo1jDiVN1Rmy5nk3pyKdVDECAwEAAaNqMGgwHQYDVR0OBBYEFB4M97Zn8uGSJglFwFU5Lnc/Qkqi
|
2300 |
+
MAwGA1UdEwQFMAMBAf8wOQYEZyoHAAQxMC8wLQIBADAJBgUrDgMCGgUAMAcGBWcqAwAABBRFsMLH
|
2301 |
+
ClZ87lt4DJX5GFPBphzYEDANBgkqhkiG9w0BAQUFAAOCAgEACbODU1kBPpVJufGBuvl2ICO1J2B0
|
2302 |
+
1GqZNF5sAFPZn/KmsSQHRGoqxqWOeBLoR9lYGxMqXnmbnwoqZ6YlPwZpVnPDimZI+ymBV3QGypzq
|
2303 |
+
KOg4ZyYr8dW1P2WT+DZdjo2NQCCHGervJ8A9tDkPJXtoUHRVnAxZfVo9QZQlUgjgRywVMRnVvwdV
|
2304 |
+
xrsStZf0X4OFunHB2WyBEXYKCrC/gpf36j36+uwtqSiUO1bd0lEursC9CBWMd1I0ltabrNMdjmEP
|
2305 |
+
NXubrjlpC2JgQCA2j6/7Nu4tCEoduL+bXPjqpRugc6bY+G7gMwRfaKonh+3ZwZCc7b3jajWvY9+r
|
2306 |
+
GNm65ulK6lCKD2GTHuItGeIwlDWSXQ62B68ZgI9HkFFLLk3dheLSClIKF5r8GrBQAuUBo2M3IUxE
|
2307 |
+
xJtRmREOc5wGj1QupyheRDmHVi03vYVElOEMSyycw5KFNGHLD7ibSkNS/jQ6fbjpKdx2qcgw+BRx
|
2308 |
+
gMYeNkh0IkFch4LoGHGLQYlE535YW6i4jRPpp2zDR+2zGp1iro2C6pSe3VkQw63d4k3jMdXH7Ojy
|
2309 |
+
sP6SHhYKGvzZ8/gntsm+HbRsZJB/9OTEW9c3rkIO3aQab3yIVMUWbuF6aC74Or8NpDyJO3inTmOD
|
2310 |
+
BCEIZ43ygknQW/2xzQ+DhNQ+IIX3Sj0rnP0qCglN6oH4EZw=
|
2311 |
+
-----END CERTIFICATE-----
|
2312 |
+
|
2313 |
+
T\xc3\x9c\x42\xC4\xB0TAK UEKAE K\xC3\xB6k Sertifika Hizmet Sa\xC4\x9Flay\xc4\xb1\x63\xc4\xb1s\xc4\xb1 - S\xC3\xBCr\xC3\xBCm 3
|
2314 |
+
=============================================================================================================================
|
2315 |
+
-----BEGIN CERTIFICATE-----
|
2316 |
+
MIIFFzCCA/+gAwIBAgIBETANBgkqhkiG9w0BAQUFADCCASsxCzAJBgNVBAYTAlRSMRgwFgYDVQQH
|
2317 |
+
DA9HZWJ6ZSAtIEtvY2FlbGkxRzBFBgNVBAoMPlTDvHJraXllIEJpbGltc2VsIHZlIFRla25vbG9q
|
2318 |
+
aWsgQXJhxZ90xLFybWEgS3VydW11IC0gVMOcQsSwVEFLMUgwRgYDVQQLDD9VbHVzYWwgRWxla3Ry
|
2319 |
+
b25payB2ZSBLcmlwdG9sb2ppIEFyYcWfdMSxcm1hIEVuc3RpdMO8c8O8IC0gVUVLQUUxIzAhBgNV
|
2320 |
+
BAsMGkthbXUgU2VydGlmaWthc3lvbiBNZXJrZXppMUowSAYDVQQDDEFUw5xCxLBUQUsgVUVLQUUg
|
2321 |
+
S8O2ayBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsSAtIFPDvHLDvG0gMzAeFw0wNzA4
|
2322 |
+
MjQxMTM3MDdaFw0xNzA4MjExMTM3MDdaMIIBKzELMAkGA1UEBhMCVFIxGDAWBgNVBAcMD0dlYnpl
|
2323 |
+
IC0gS29jYWVsaTFHMEUGA1UECgw+VMO8cmtpeWUgQmlsaW1zZWwgdmUgVGVrbm9sb2ppayBBcmHF
|
2324 |
+
n3TEsXJtYSBLdXJ1bXUgLSBUw5xCxLBUQUsxSDBGBgNVBAsMP1VsdXNhbCBFbGVrdHJvbmlrIHZl
|
2325 |
+
IEtyaXB0b2xvamkgQXJhxZ90xLFybWEgRW5zdGl0w7xzw7wgLSBVRUtBRTEjMCEGA1UECwwaS2Ft
|
2326 |
+
dSBTZXJ0aWZpa2FzeW9uIE1lcmtlemkxSjBIBgNVBAMMQVTDnELEsFRBSyBVRUtBRSBLw7ZrIFNl
|
2327 |
+
cnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxIC0gU8O8csO8bSAzMIIBIjANBgkqhkiG9w0B
|
2328 |
+
AQEFAAOCAQ8AMIIBCgKCAQEAim1L/xCIOsP2fpTo6iBkcK4hgb46ezzb8R1Sf1n68yJMlaCQvEhO
|
2329 |
+
Eav7t7WNeoMojCZG2E6VQIdhn8WebYGHV2yKO7Rm6sxA/OOqbLLLAdsyv9Lrhc+hDVXDWzhXcLh1
|
2330 |
+
xnnRFDDtG1hba+818qEhTsXOfJlfbLm4IpNQp81McGq+agV/E5wrHur+R84EpW+sky58K5+eeROR
|
2331 |
+
6Oqeyjh1jmKwlZMq5d/pXpduIF9fhHpEORlAHLpVK/swsoHvhOPc7Jg4OQOFCKlUAwUp8MmPi+oL
|
2332 |
+
hmUZEdPpCSPeaJMDyTYcIW7OjGbxmTDY17PDHfiBLqi9ggtm/oLL4eAagsNAgQIDAQABo0IwQDAd
|
2333 |
+
BgNVHQ4EFgQUvYiHyY/2pAoLquvF/pEjnatKijIwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF
|
2334 |
+
MAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAB18+kmPNOm3JpIWmgV050vQbTlswyb2zrgxvMTfvCr4
|
2335 |
+
N5EY3ATIZJkrGG2AA1nJrvhY0D7twyOfaTyGOBye79oneNGEN3GKPEs5z35FBtYt2IpNeBLWrcLT
|
2336 |
+
y9LQQfMmNkqblWwM7uXRQydmwYj3erMgbOqwaSvHIOgMA8RBBZniP+Rr+KCGgceExh/VS4ESshYh
|
2337 |
+
LBOhgLJeDEoTniDYYkCrkOpkSi+sDQESeUWoL4cZaMjihccwsnX5OD+ywJO0a+IDRM5noN+J1q2M
|
2338 |
+
dqMTw5RhK2vZbMEHCiIHhWyFJEapvj+LeISCfiQMnf2BN+MlqO02TpUsyZyQ2uypQjyttgI=
|
2339 |
+
-----END CERTIFICATE-----
|
2340 |
+
|
2341 |
+
Buypass Class 2 CA 1
|
2342 |
+
====================
|
2343 |
+
-----BEGIN CERTIFICATE-----
|
2344 |
+
MIIDUzCCAjugAwIBAgIBATANBgkqhkiG9w0BAQUFADBLMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU
|
2345 |
+
QnV5cGFzcyBBUy05ODMxNjMzMjcxHTAbBgNVBAMMFEJ1eXBhc3MgQ2xhc3MgMiBDQSAxMB4XDTA2
|
2346 |
+
MTAxMzEwMjUwOVoXDTE2MTAxMzEwMjUwOVowSzELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBh
|
2347 |
+
c3MgQVMtOTgzMTYzMzI3MR0wGwYDVQQDDBRCdXlwYXNzIENsYXNzIDIgQ0EgMTCCASIwDQYJKoZI
|
2348 |
+
hvcNAQEBBQADggEPADCCAQoCggEBAIs8B0XY9t/mx8q6jUPFR42wWsE425KEHK8T1A9vNkYgxC7M
|
2349 |
+
cXA0ojTTNy7Y3Tp3L8DrKehc0rWpkTSHIln+zNvnma+WwajHQN2lFYxuyHyXA8vmIPLXl18xoS83
|
2350 |
+
0r7uvqmtqEyeIWZDO6i88wmjONVZJMHCR3axiFyCO7srpgTXjAePzdVBHfCuuCkslFJgNJQ72uA4
|
2351 |
+
0Z0zPhX0kzLFANq1KWYOOngPIVJfAuWSeyXTkh4vFZ2B5J2O6O+JzhRMVB0cgRJNcKi+EAUXfh/R
|
2352 |
+
uFdV7c27UsKwHnjCTTZoy1YmwVLBvXb3WNVyfh9EdrsAiR0WnVE1703CVu9r4Iw7DekCAwEAAaNC
|
2353 |
+
MEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUP42aWYv8e3uco684sDntkHGA1sgwDgYDVR0P
|
2354 |
+
AQH/BAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQAVGn4TirnoB6NLJzKyQJHyIdFkhb5jatLPgcIV
|
2355 |
+
1Xp+DCmsNx4cfHZSldq1fyOhKXdlyTKdqC5Wq2B2zha0jX94wNWZUYN/Xtm+DKhQ7SLHrQVMdvvt
|
2356 |
+
7h5HZPb3J31cKA9FxVxiXqaakZG3Uxcu3K1gnZZkOb1naLKuBctN518fV4bVIJwo+28TOPX2EZL2
|
2357 |
+
fZleHwzoq0QkKXJAPTZSr4xYkHPB7GEseaHsh7U/2k3ZIQAw3pDaDtMaSKk+hQsUi4y8QZ5q9w5w
|
2358 |
+
wDX3OaJdZtB7WZ+oRxKaJyOkLY4ng5IgodcVf/EuGO70SH8vf/GhGLWhC5SgYiAynB321O+/TIho
|
2359 |
+
-----END CERTIFICATE-----
|
2360 |
+
|
2361 |
+
Buypass Class 3 CA 1
|
2362 |
+
====================
|
2363 |
+
-----BEGIN CERTIFICATE-----
|
2364 |
+
MIIDUzCCAjugAwIBAgIBAjANBgkqhkiG9w0BAQUFADBLMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU
|
2365 |
+
QnV5cGFzcyBBUy05ODMxNjMzMjcxHTAbBgNVBAMMFEJ1eXBhc3MgQ2xhc3MgMyBDQSAxMB4XDTA1
|
2366 |
+
MDUwOTE0MTMwM1oXDTE1MDUwOTE0MTMwM1owSzELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBh
|
2367 |
+
c3MgQVMtOTgzMTYzMzI3MR0wGwYDVQQDDBRCdXlwYXNzIENsYXNzIDMgQ0EgMTCCASIwDQYJKoZI
|
2368 |
+
hvcNAQEBBQADggEPADCCAQoCggEBAKSO13TZKWTeXx+HgJHqTjnmGcZEC4DVC69TB4sSveZn8AKx
|
2369 |
+
ifZgisRbsELRwCGoy+Gb72RRtqfPFfV0gGgEkKBYouZ0plNTVUhjP5JW3SROjvi6K//zNIqeKNc0
|
2370 |
+
n6wv1g/xpC+9UrJJhW05NfBEMJNGJPO251P7vGGvqaMU+8IXF4Rs4HyI+MkcVyzwPX6UvCWThOia
|
2371 |
+
AJpFBUJXgPROztmuOfbIUxAMZTpHe2DC1vqRycZxbL2RhzyRhkmr8w+gbCZ2Xhysm3HljbybIR6c
|
2372 |
+
1jh+JIAVMYKWsUnTYjdbiAwKYjT+p0h+mbEwi5A3lRyoH6UsjfRVyNvdWQrCrXig9IsCAwEAAaNC
|
2373 |
+
MEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUOBTmyPCppAP0Tj4io1vy1uCtQHQwDgYDVR0P
|
2374 |
+
AQH/BAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQABZ6OMySU9E2NdFm/soT4JXJEVKirZgCFPBdy7
|
2375 |
+
pYmrEzMqnji3jG8CcmPHc3ceCQa6Oyh7pEfJYWsICCD8igWKH7y6xsL+z27sEzNxZy5p+qksP2bA
|
2376 |
+
EllNC1QCkoS72xLvg3BweMhT+t/Gxv/ciC8HwEmdMldg0/L2mSlf56oBzKwzqBwKu5HEA6BvtjT5
|
2377 |
+
htOzdlSY9EqBs1OdTUDs5XcTRa9bqh/YL0yCe/4qxFi7T/ye/QNlGioOw6UgFpRreaaiErS7GqQj
|
2378 |
+
el/wroQk5PMr+4okoyeYZdowdXb8GZHo2+ubPzK/QJcHJrrM85SFSnonk8+QQtS4Wxam58tAA915
|
2379 |
+
-----END CERTIFICATE-----
|
2380 |
+
|
2381 |
+
EBG Elektronik Sertifika Hizmet Sa\xC4\x9Flay\xc4\xb1\x63\xc4\xb1s\xc4\xb1
|
2382 |
+
==========================================================================
|
2383 |
+
-----BEGIN CERTIFICATE-----
|
2384 |
+
MIIF5zCCA8+gAwIBAgIITK9zQhyOdAIwDQYJKoZIhvcNAQEFBQAwgYAxODA2BgNVBAMML0VCRyBF
|
2385 |
+
bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMTcwNQYDVQQKDC5FQkcg
|
2386 |
+
QmlsacWfaW0gVGVrbm9sb2ppbGVyaSB2ZSBIaXptZXRsZXJpIEEuxZ4uMQswCQYDVQQGEwJUUjAe
|
2387 |
+
Fw0wNjA4MTcwMDIxMDlaFw0xNjA4MTQwMDMxMDlaMIGAMTgwNgYDVQQDDC9FQkcgRWxla3Ryb25p
|
2388 |
+
ayBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsTE3MDUGA1UECgwuRUJHIEJpbGnFn2lt
|
2389 |
+
IFRla25vbG9qaWxlcmkgdmUgSGl6bWV0bGVyaSBBLsWeLjELMAkGA1UEBhMCVFIwggIiMA0GCSqG
|
2390 |
+
SIb3DQEBAQUAA4ICDwAwggIKAoICAQDuoIRh0DpqZhAy2DE4f6en5f2h4fuXd7hxlugTlkaDT7by
|
2391 |
+
X3JWbhNgpQGR4lvFzVcfd2NR/y8927k/qqk153nQ9dAktiHq6yOU/im/+4mRDGSaBUorzAzu8T2b
|
2392 |
+
gmmkTPiab+ci2hC6X5L8GCcKqKpE+i4stPtGmggDg3KriORqcsnlZR9uKg+ds+g75AxuetpX/dfr
|
2393 |
+
eYteIAbTdgtsApWjluTLdlHRKJ2hGvxEok3MenaoDT2/F08iiFD9rrbskFBKW5+VQarKD7JK/oCZ
|
2394 |
+
TqNGFav4c0JqwmZ2sQomFd2TkuzbqV9UIlKRcF0T6kjsbgNs2d1s/OsNA/+mgxKb8amTD8UmTDGy
|
2395 |
+
Y5lhcucqZJnSuOl14nypqZoaqsNW2xCaPINStnuWt6yHd6i58mcLlEOzrz5z+kI2sSXFCjEmN1Zn
|
2396 |
+
uqMLfdb3ic1nobc6HmZP9qBVFCVMLDMNpkGMvQQxahByCp0OLna9XvNRiYuoP1Vzv9s6xiQFlpJI
|
2397 |
+
qkuNKgPlV5EQ9GooFW5Hd4RcUXSfGenmHmMWOeMRFeNYGkS9y8RsZteEBt8w9DeiQyJ50hBs37vm
|
2398 |
+
ExH8nYQKE3vwO9D8owrXieqWfo1IhR5kX9tUoqzVegJ5a9KK8GfaZXINFHDk6Y54jzJ0fFfy1tb0
|
2399 |
+
Nokb+Clsi7n2l9GkLqq+CxnCRelwXQIDAJ3Zo2MwYTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB
|
2400 |
+
/wQEAwIBBjAdBgNVHQ4EFgQU587GT/wWZ5b6SqMHwQSny2re2kcwHwYDVR0jBBgwFoAU587GT/wW
|
2401 |
+
Z5b6SqMHwQSny2re2kcwDQYJKoZIhvcNAQEFBQADggIBAJuYml2+8ygjdsZs93/mQJ7ANtyVDR2t
|
2402 |
+
FcU22NU57/IeIl6zgrRdu0waypIN30ckHrMk2pGI6YNw3ZPX6bqz3xZaPt7gyPvT/Wwp+BVGoGgm
|
2403 |
+
zJNSroIBk5DKd8pNSe/iWtkqvTDOTLKBtjDOWU/aWR1qeqRFsIImgYZ29fUQALjuswnoT4cCB64k
|
2404 |
+
XPBfrAowzIpAoHMEwfuJJPaaHFy3PApnNgUIMbOv2AFoKuB4j3TeuFGkjGwgPaL7s9QJ/XvCgKqT
|
2405 |
+
bCmYIai7FvOpEl90tYeY8pUm3zTvilORiF0alKM/fCL414i6poyWqD1SNGKfAB5UVUJnxk1Gj7sU
|
2406 |
+
RT0KlhaOEKGXmdXTMIXM3rRyt7yKPBgpaP3ccQfuJDlq+u2lrDgv+R4QDgZxGhBM/nV+/x5XOULK
|
2407 |
+
1+EVoVZVWRvRo68R2E7DpSvvkL/A7IITW43WciyTTo9qKd+FPNMN4KIYEsxVL0e3p5sC/kH2iExt
|
2408 |
+
2qkBR4NkJ2IQgtYSe14DHzSpyZH+r11thie3I6p1GMog57AP14kOpmciY/SDQSsGS7tY1dHXt7kQ
|
2409 |
+
Y9iJSrSq3RZj9W6+YKH47ejWkE8axsWgKdOnIaj1Wjz3x0miIZpKlVIglnKaZsv30oZDfCK+lvm9
|
2410 |
+
AahH3eU7QPl1K5srRmSGjR70j/sHd9DqSaIcjVIUpgqT
|
2411 |
+
-----END CERTIFICATE-----
|
2412 |
+
|
2413 |
+
certSIGN ROOT CA
|
2414 |
+
================
|
2415 |
+
-----BEGIN CERTIFICATE-----
|
2416 |
+
MIIDODCCAiCgAwIBAgIGIAYFFnACMA0GCSqGSIb3DQEBBQUAMDsxCzAJBgNVBAYTAlJPMREwDwYD
|
2417 |
+
VQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBDQTAeFw0wNjA3MDQxNzIwMDRa
|
2418 |
+
Fw0zMTA3MDQxNzIwMDRaMDsxCzAJBgNVBAYTAlJPMREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UE
|
2419 |
+
CxMQY2VydFNJR04gUk9PVCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALczuX7I
|
2420 |
+
JUqOtdu0KBuqV5Do0SLTZLrTk+jUrIZhQGpgV2hUhE28alQCBf/fm5oqrl0Hj0rDKH/v+yv6efHH
|
2421 |
+
rfAQUySQi2bJqIirr1qjAOm+ukbuW3N7LBeCgV5iLKECZbO9xSsAfsT8AzNXDe3i+s5dRdY4zTW2
|
2422 |
+
ssHQnIFKquSyAVwdj1+ZxLGt24gh65AIgoDzMKND5pCCrlUoSe1b16kQOA7+j0xbm0bqQfWwCHTD
|
2423 |
+
0IgztnzXdN/chNFDDnU5oSVAKOp4yw4sLjmdjItuFhwvJoIQ4uNllAoEwF73XVv4EOLQunpL+943
|
2424 |
+
AAAaWyjj0pxzPjKHmKHJUS/X3qwzs08CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8B
|
2425 |
+
Af8EBAMCAcYwHQYDVR0OBBYEFOCMm9slSbPxfIbWskKHC9BroNnkMA0GCSqGSIb3DQEBBQUAA4IB
|
2426 |
+
AQA+0hyJLjX8+HXd5n9liPRyTMks1zJO890ZeUe9jjtbkw9QSSQTaxQGcu8J06Gh40CEyecYMnQ8
|
2427 |
+
SG4Pn0vU9x7Tk4ZkVJdjclDVVc/6IJMCopvDI5NOFlV2oHB5bc0hH88vLbwZ44gx+FkagQnIl6Z0
|
2428 |
+
x2DEW8xXjrJ1/RsCCdtZb3KTafcxQdaIOL+Hsr0Wefmq5L6IJd1hJyMctTEHBDa0GpC9oHRxUIlt
|
2429 |
+
vBTjD4au8as+x6AJzKNI0eDbZOeStc+vckNwi/nDhDwTqn6Sm1dTk/pwwpEOMfmbZ13pljheX7Nz
|
2430 |
+
TogVZ96edhBiIL5VaZVDADlN9u6wWk5JRFRYX0KD
|
2431 |
+
-----END CERTIFICATE-----
|
2432 |
+
|
2433 |
+
CNNIC ROOT
|
2434 |
+
==========
|
2435 |
+
-----BEGIN CERTIFICATE-----
|
2436 |
+
MIIDVTCCAj2gAwIBAgIESTMAATANBgkqhkiG9w0BAQUFADAyMQswCQYDVQQGEwJDTjEOMAwGA1UE
|
2437 |
+
ChMFQ05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1QwHhcNMDcwNDE2MDcwOTE0WhcNMjcwNDE2MDcw
|
2438 |
+
OTE0WjAyMQswCQYDVQQGEwJDTjEOMAwGA1UEChMFQ05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1Qw
|
2439 |
+
ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDTNfc/c3et6FtzF8LRb+1VvG7q6KR5smzD
|
2440 |
+
o+/hn7E7SIX1mlwhIhAsxYLO2uOabjfhhyzcuQxauohV3/2q2x8x6gHx3zkBwRP9SFIhxFXf2tiz
|
2441 |
+
VHa6dLG3fdfA6PZZxU3Iva0fFNrfWEQlMhkqx35+jq44sDB7R3IJMfAw28Mbdim7aXZOV/kbZKKT
|
2442 |
+
VrdvmW7bCgScEeOAH8tjlBAKqeFkgjH5jCftppkA9nCTGPihNIaj3XrCGHn2emU1z5DrvTOTn1Or
|
2443 |
+
czvmmzQgLx3vqR1jGqCA2wMv+SYahtKNu6m+UjqHZ0gNv7Sg2Ca+I19zN38m5pIEo3/PIKe38zrK
|
2444 |
+
y5nLAgMBAAGjczBxMBEGCWCGSAGG+EIBAQQEAwIABzAfBgNVHSMEGDAWgBRl8jGtKvf33VKWCscC
|
2445 |
+
wQ7vptU7ETAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIB/jAdBgNVHQ4EFgQUZfIxrSr3991S
|
2446 |
+
lgrHAsEO76bVOxEwDQYJKoZIhvcNAQEFBQADggEBAEs17szkrr/Dbq2flTtLP1se31cpolnKOOK5
|
2447 |
+
Gv+e5m4y3R6u6jW39ZORTtpC4cMXYFDy0VwmuYK36m3knITnA3kXr5g9lNvHugDnuL8BV8F3RTIM
|
2448 |
+
O/G0HAiw/VGgod2aHRM2mm23xzy54cXZF/qD1T0VoDy7HgviyJA/qIYM/PmLXoXLT1tLYhFHxUV8
|
2449 |
+
BS9BsZ4QaRuZluBVeftOhpm4lNqGOGqTo+fLbuXf6iFViZx9fX+Y9QCJ7uOEwFyWtcVG6kbghVW2
|
2450 |
+
G8kS1sHNzYDzAgE8yGnLRUhj2JTQ7IUOO04RZfSCjKY9ri4ilAnIXOo8gV0WKgOXFlUJ24pBgp5m
|
2451 |
+
mxE=
|
2452 |
+
-----END CERTIFICATE-----
|
2453 |
+
|
2454 |
+
ApplicationCA - Japanese Government
|
2455 |
+
===================================
|
2456 |
+
-----BEGIN CERTIFICATE-----
|
2457 |
+
MIIDoDCCAoigAwIBAgIBMTANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQGEwJKUDEcMBoGA1UEChMT
|
2458 |
+
SmFwYW5lc2UgR292ZXJubWVudDEWMBQGA1UECxMNQXBwbGljYXRpb25DQTAeFw0wNzEyMTIxNTAw
|
2459 |
+
MDBaFw0xNzEyMTIxNTAwMDBaMEMxCzAJBgNVBAYTAkpQMRwwGgYDVQQKExNKYXBhbmVzZSBHb3Zl
|
2460 |
+
cm5tZW50MRYwFAYDVQQLEw1BcHBsaWNhdGlvbkNBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
|
2461 |
+
CgKCAQEAp23gdE6Hj6UG3mii24aZS2QNcfAKBZuOquHMLtJqO8F6tJdhjYq+xpqcBrSGUeQ3DnR4
|
2462 |
+
fl+Kf5Sk10cI/VBaVuRorChzoHvpfxiSQE8tnfWuREhzNgaeZCw7NCPbXCbkcXmP1G55IrmTwcrN
|
2463 |
+
wVbtiGrXoDkhBFcsovW8R0FPXjQilbUfKW1eSvNNcr5BViCH/OlQR9cwFO5cjFW6WY2H/CPek9AE
|
2464 |
+
jP3vbb3QesmlOmpyM8ZKDQUXKi17safY1vC+9D/qDihtQWEjdnjDuGWk81quzMKq2edY3rZ+nYVu
|
2465 |
+
nyoKb58DKTCXKB28t89UKU5RMfkntigm/qJj5kEW8DOYRwIDAQABo4GeMIGbMB0GA1UdDgQWBBRU
|
2466 |
+
WssmP3HMlEYNllPqa0jQk/5CdTAOBgNVHQ8BAf8EBAMCAQYwWQYDVR0RBFIwUKROMEwxCzAJBgNV
|
2467 |
+
BAYTAkpQMRgwFgYDVQQKDA/ml6XmnKzlm73mlL/lupwxIzAhBgNVBAsMGuOCouODl+ODquOCseOD
|
2468 |
+
vOOCt+ODp+ODs0NBMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBADlqRHZ3ODrs
|
2469 |
+
o2dGD/mLBqj7apAxzn7s2tGJfHrrLgy9mTLnsCTWw//1sogJhyzjVOGjprIIC8CFqMjSnHH2HZ9g
|
2470 |
+
/DgzE+Ge3Atf2hZQKXsvcJEPmbo0NI2VdMV+eKlmXb3KIXdCEKxmJj3ekav9FfBv7WxfEPjzFvYD
|
2471 |
+
io+nEhEMy/0/ecGc/WLuo89UDNErXxc+4z6/wCs+CZv+iKZ+tJIX/COUgb1up8WMwusRRdv4QcmW
|
2472 |
+
dupwX3kSa+SjB1oF7ydJzyGfikwJcGapJsErEU4z0g781mzSDjJkaP+tBXhfAx2o45CsJOAPQKdL
|
2473 |
+
rosot4LKGAfmt1t06SAZf7IbiVQ=
|
2474 |
+
-----END CERTIFICATE-----
|
2475 |
+
|
2476 |
+
GeoTrust Primary Certification Authority - G3
|
2477 |
+
=============================================
|
2478 |
+
-----BEGIN CERTIFICATE-----
|
2479 |
+
MIID/jCCAuagAwIBAgIQFaxulBmyeUtB9iepwxgPHzANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UE
|
2480 |
+
BhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChjKSAyMDA4IEdlb1RydXN0
|
2481 |
+
IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFy
|
2482 |
+
eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEczMB4XDTA4MDQwMjAwMDAwMFoXDTM3MTIwMTIz
|
2483 |
+
NTk1OVowgZgxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAo
|
2484 |
+
YykgMjAwOCBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNVBAMT
|
2485 |
+
LUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZI
|
2486 |
+
hvcNAQEBBQADggEPADCCAQoCggEBANziXmJYHTNXOTIz+uvLh4yn1ErdBojqZI4xmKU4kB6Yzy5j
|
2487 |
+
K/BGvESyiaHAKAxJcCGVn2TAppMSAmUmhsalifD614SgcK9PGpc/BkTVyetyEH3kMSj7HGHmKAdE
|
2488 |
+
c5IiaacDiGydY8hS2pgn5whMcD60yRLBxWeDXTPzAxHsatBT4tG6NmCUgLthY2xbF37fQJQeqw3C
|
2489 |
+
IShwiP/WJmxsYAQlTlV+fe+/lEjetx3dcI0FX4ilm/LC7urRQEFtYjgdVgbFA0dRIBn8exALDmKu
|
2490 |
+
dlW/X3e+PkkBUz2YJQN2JFodtNuJ6nnltrM7P7pMKEF/BqxqjsHQ9gUdfeZChuOl1UcCAwEAAaNC
|
2491 |
+
MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMR5yo6hTgMdHNxr
|
2492 |
+
2zFblD4/MH8tMA0GCSqGSIb3DQEBCwUAA4IBAQAtxRPPVoB7eni9n64smefv2t+UXglpp+duaIy9
|
2493 |
+
cr5HqQ6XErhK8WTTOd8lNNTBzU6B8A8ExCSzNJbGpqow32hhc9f5joWJ7w5elShKKiePEI4ufIbE
|
2494 |
+
Ap7aDHdlDkQNkv39sxY2+hENHYwOB4lqKVb3cvTdFZx3NWZXqxNT2I7BQMXXExZacse3aQHEerGD
|
2495 |
+
AWh9jUGhlBjBJVz88P6DAod8DQ3PLghcSkANPuyBYeYk28rgDi0Hsj5W3I31QYUHSJsMC8tJP33s
|
2496 |
+
t/3LjWeJGqvtux6jAAgIFyqCXDFdRootD4abdNlF+9RAsXqqaC2Gspki4cErx5z481+oghLrGREt
|
2497 |
+
-----END CERTIFICATE-----
|
2498 |
+
|
2499 |
+
thawte Primary Root CA - G2
|
2500 |
+
===========================
|
2501 |
+
-----BEGIN CERTIFICATE-----
|
2502 |
+
MIICiDCCAg2gAwIBAgIQNfwmXNmET8k9Jj1Xm67XVjAKBggqhkjOPQQDAzCBhDELMAkGA1UEBhMC
|
2503 |
+
VVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjE4MDYGA1UECxMvKGMpIDIwMDcgdGhhd3RlLCBJbmMu
|
2504 |
+
IC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAiBgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3Qg
|
2505 |
+
Q0EgLSBHMjAeFw0wNzExMDUwMDAwMDBaFw0zODAxMTgyMzU5NTlaMIGEMQswCQYDVQQGEwJVUzEV
|
2506 |
+
MBMGA1UEChMMdGhhd3RlLCBJbmMuMTgwNgYDVQQLEy8oYykgMjAwNyB0aGF3dGUsIEluYy4gLSBG
|
2507 |
+
b3IgYXV0aG9yaXplZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAt
|
2508 |
+
IEcyMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEotWcgnuVnfFSeIf+iha/BebfowJPDQfGAFG6DAJS
|
2509 |
+
LSKkQjnE/o/qycG+1E3/n3qe4rF8mq2nhglzh9HnmuN6papu+7qzcMBniKI11KOasf2twu8x+qi5
|
2510 |
+
8/sIxpHR+ymVo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQU
|
2511 |
+
mtgAMADna3+FGO6Lts6KDPgR4bswCgYIKoZIzj0EAwMDaQAwZgIxAN344FdHW6fmCsO99YCKlzUN
|
2512 |
+
G4k8VIZ3KMqh9HneteY4sPBlcIx/AlTCv//YoT7ZzwIxAMSNlPzcU9LcnXgWHxUzI1NS41oxXZ3K
|
2513 |
+
rr0TKUQNJ1uo52icEvdYPy5yAlejj6EULg==
|
2514 |
+
-----END CERTIFICATE-----
|
2515 |
+
|
2516 |
+
thawte Primary Root CA - G3
|
2517 |
+
===========================
|
2518 |
+
-----BEGIN CERTIFICATE-----
|
2519 |
+
MIIEKjCCAxKgAwIBAgIQYAGXt0an6rS0mtZLL/eQ+zANBgkqhkiG9w0BAQsFADCBrjELMAkGA1UE
|
2520 |
+
BhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2
|
2521 |
+
aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIwMDggdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhv
|
2522 |
+
cml6ZWQgdXNlIG9ubHkxJDAiBgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMzAeFw0w
|
2523 |
+
ODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIGuMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhh
|
2524 |
+
d3RlLCBJbmMuMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNlcnZpY2VzIERpdmlzaW9uMTgwNgYD
|
2525 |
+
VQQLEy8oYykgMjAwOCB0aGF3dGUsIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEkMCIG
|
2526 |
+
A1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAtIEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
|
2527 |
+
MIIBCgKCAQEAsr8nLPvb2FvdeHsbnndmgcs+vHyu86YnmjSjaDFxODNi5PNxZnmxqWWjpYvVj2At
|
2528 |
+
P0LMqmsywCPLLEHd5N/8YZzic7IilRFDGF/Eth9XbAoFWCLINkw6fKXRz4aviKdEAhN0cXMKQlkC
|
2529 |
+
+BsUa0Lfb1+6a4KinVvnSr0eAXLbS3ToO39/fR8EtCab4LRarEc9VbjXsCZSKAExQGbY2SS99irY
|
2530 |
+
7CFJXJv2eul/VTV+lmuNk5Mny5K76qxAwJ/C+IDPXfRa3M50hqY+bAtTyr2SzhkGcuYMXDhpxwTW
|
2531 |
+
vGzOW/b3aJzcJRVIiKHpqfiYnODz1TEoYRFsZ5aNOZnLwkUkOQIDAQABo0IwQDAPBgNVHRMBAf8E
|
2532 |
+
BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUrWyqlGCc7eT/+j4KdCtjA/e2Wb8wDQYJ
|
2533 |
+
KoZIhvcNAQELBQADggEBABpA2JVlrAmSicY59BDlqQ5mU1143vokkbvnRFHfxhY0Cu9qRFHqKweK
|
2534 |
+
A3rD6z8KLFIWoCtDuSWQP3CpMyVtRRooOyfPqsMpQhvfO0zAMzRbQYi/aytlryjvsvXDqmbOe1bu
|
2535 |
+
t8jLZ8HJnBoYuMTDSQPxYA5QzUbF83d597YV4Djbxy8ooAw/dyZ02SUS2jHaGh7cKUGRIjxpp7sC
|
2536 |
+
8rZcJwOJ9Abqm+RyguOhCcHpABnTPtRwa7pxpqpYrvS76Wy274fMm7v/OeZWYdMKp8RcTGB7BXcm
|
2537 |
+
er/YB1IsYvdwY9k5vG8cwnncdimvzsUsZAReiDZuMdRAGmI0Nj81Aa6sY6A=
|
2538 |
+
-----END CERTIFICATE-----
|
2539 |
+
|
2540 |
+
GeoTrust Primary Certification Authority - G2
|
2541 |
+
=============================================
|
2542 |
+
-----BEGIN CERTIFICATE-----
|
2543 |
+
MIICrjCCAjWgAwIBAgIQPLL0SAoA4v7rJDteYD7DazAKBggqhkjOPQQDAzCBmDELMAkGA1UEBhMC
|
2544 |
+
VVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChjKSAyMDA3IEdlb1RydXN0IElu
|
2545 |
+
Yy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBD
|
2546 |
+
ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMB4XDTA3MTEwNTAwMDAwMFoXDTM4MDExODIzNTk1
|
2547 |
+
OVowgZgxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykg
|
2548 |
+
MjAwNyBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNVBAMTLUdl
|
2549 |
+
b1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjB2MBAGByqGSM49AgEG
|
2550 |
+
BSuBBAAiA2IABBWx6P0DFUPlrOuHNxFi79KDNlJ9RVcLSo17VDs6bl8VAsBQps8lL33KSLjHUGMc
|
2551 |
+
KiEIfJo22Av+0SbFWDEwKCXzXV2juLaltJLtbCyf691DiaI8S0iRHVDsJt/WYC69IaNCMEAwDwYD
|
2552 |
+
VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBVfNVdRVfslsq0DafwBo/q+
|
2553 |
+
EVXVMAoGCCqGSM49BAMDA2cAMGQCMGSWWaboCd6LuvpaiIjwH5HTRqjySkwCY/tsXzjbLkGTqQ7m
|
2554 |
+
ndwxHLKgpxgceeHHNgIwOlavmnRs9vuD4DPTCF+hnMJbn0bWtsuRBmOiBuczrD6ogRLQy7rQkgu2
|
2555 |
+
npaqBA+K
|
2556 |
+
-----END CERTIFICATE-----
|
2557 |
+
|
2558 |
+
VeriSign Universal Root Certification Authority
|
2559 |
+
===============================================
|
2560 |
+
-----BEGIN CERTIFICATE-----
|
2561 |
+
MIIEuTCCA6GgAwIBAgIQQBrEZCGzEyEDDrvkEhrFHTANBgkqhkiG9w0BAQsFADCBvTELMAkGA1UE
|
2562 |
+
BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBO
|
2563 |
+
ZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVk
|
2564 |
+
IHVzZSBvbmx5MTgwNgYDVQQDEy9WZXJpU2lnbiBVbml2ZXJzYWwgUm9vdCBDZXJ0aWZpY2F0aW9u
|
2565 |
+
IEF1dGhvcml0eTAeFw0wODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIG9MQswCQYDVQQGEwJV
|
2566 |
+
UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv
|
2567 |
+
cmsxOjA4BgNVBAsTMShjKSAyMDA4IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
|
2568 |
+
IG9ubHkxODA2BgNVBAMTL1ZlcmlTaWduIFVuaXZlcnNhbCBSb290IENlcnRpZmljYXRpb24gQXV0
|
2569 |
+
aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx2E3XrEBNNti1xWb/1hajCMj
|
2570 |
+
1mCOkdeQmIN65lgZOIzF9uVkhbSicfvtvbnazU0AtMgtc6XHaXGVHzk8skQHnOgO+k1KxCHfKWGP
|
2571 |
+
MiJhgsWHH26MfF8WIFFE0XBPV+rjHOPMee5Y2A7Cs0WTwCznmhcrewA3ekEzeOEz4vMQGn+HLL72
|
2572 |
+
9fdC4uW/h2KJXwBL38Xd5HVEMkE6HnFuacsLdUYI0crSK5XQz/u5QGtkjFdN/BMReYTtXlT2NJ8I
|
2573 |
+
AfMQJQYXStrxHXpma5hgZqTZ79IugvHw7wnqRMkVauIDbjPTrJ9VAMf2CGqUuV/c4DPxhGD5WycR
|
2574 |
+
tPwW8rtWaoAljQIDAQABo4GyMIGvMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMG0G
|
2575 |
+
CCsGAQUFBwEMBGEwX6FdoFswWTBXMFUWCWltYWdlL2dpZjAhMB8wBwYFKw4DAhoEFI/l0xqGrI2O
|
2576 |
+
a8PPgGrUSBgsexkuMCUWI2h0dHA6Ly9sb2dvLnZlcmlzaWduLmNvbS92c2xvZ28uZ2lmMB0GA1Ud
|
2577 |
+
DgQWBBS2d/ppSEefUxLVwuoHMnYH0ZcHGTANBgkqhkiG9w0BAQsFAAOCAQEASvj4sAPmLGd75JR3
|
2578 |
+
Y8xuTPl9Dg3cyLk1uXBPY/ok+myDjEedO2Pzmvl2MpWRsXe8rJq+seQxIcaBlVZaDrHC1LGmWazx
|
2579 |
+
Y8u4TB1ZkErvkBYoH1quEPuBUDgMbMzxPcP1Y+Oz4yHJJDnp/RVmRvQbEdBNc6N9Rvk97ahfYtTx
|
2580 |
+
P/jgdFcrGJ2BtMQo2pSXpXDrrB2+BxHw1dvd5Yzw1TKwg+ZX4o+/vqGqvz0dtdQ46tewXDpPaj+P
|
2581 |
+
wGZsY6rp2aQW9IHRlRQOfc2VNNnSj3BzgXucfr2YYdhFh5iQxeuGMMY1v/D/w1WIg0vvBZIGcfK4
|
2582 |
+
mJO37M2CYfE45k+XmCpajQ==
|
2583 |
+
-----END CERTIFICATE-----
|
2584 |
+
|
2585 |
+
VeriSign Class 3 Public Primary Certification Authority - G4
|
2586 |
+
============================================================
|
2587 |
+
-----BEGIN CERTIFICATE-----
|
2588 |
+
MIIDhDCCAwqgAwIBAgIQL4D+I4wOIg9IZxIokYesszAKBggqhkjOPQQDAzCByjELMAkGA1UEBhMC
|
2589 |
+
VVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3
|
2590 |
+
b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVz
|
2591 |
+
ZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmlj
|
2592 |
+
YXRpb24gQXV0aG9yaXR5IC0gRzQwHhcNMDcxMTA1MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCByjEL
|
2593 |
+
MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBU
|
2594 |
+
cnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRo
|
2595 |
+
b3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5
|
2596 |
+
IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzQwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASnVnp8
|
2597 |
+
Utpkmw4tXNherJI9/gHmGUo9FANL+mAnINmDiWn6VMaaGF5VKmTeBvaNSjutEDxlPZCIBIngMGGz
|
2598 |
+
rl0Bp3vefLK+ymVhAIau2o970ImtTR1ZmkGxvEeA3J5iw/mjgbIwga8wDwYDVR0TAQH/BAUwAwEB
|
2599 |
+
/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEw
|
2600 |
+
HzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVyaXNpZ24u
|
2601 |
+
Y29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFLMWkf3upm7ktS5Jj4d4gYDs5bG1MAoGCCqGSM49BAMD
|
2602 |
+
A2gAMGUCMGYhDBgmYFo4e1ZC4Kf8NoRRkSAsdk1DPcQdhCPQrNZ8NQbOzWm9kA3bbEhCHQ6qQgIx
|
2603 |
+
AJw9SDkjOVgaFRJZap7v1VmyHVIsmXHNxynfGyphe3HR3vPA5Q06Sqotp9iGKt0uEA==
|
2604 |
+
-----END CERTIFICATE-----
|
2605 |
+
|
2606 |
+
NetLock Arany (Class Gold) FÅ‘tanúsÃtvány
|
2607 |
+
============================================
|
2608 |
+
-----BEGIN CERTIFICATE-----
|
2609 |
+
MIIEFTCCAv2gAwIBAgIGSUEs5AAQMA0GCSqGSIb3DQEBCwUAMIGnMQswCQYDVQQGEwJIVTERMA8G
|
2610 |
+
A1UEBwwIQnVkYXBlc3QxFTATBgNVBAoMDE5ldExvY2sgS2Z0LjE3MDUGA1UECwwuVGFuw7pzw610
|
2611 |
+
dsOhbnlraWFkw7NrIChDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzKTE1MDMGA1UEAwwsTmV0TG9jayBB
|
2612 |
+
cmFueSAoQ2xhc3MgR29sZCkgRsWRdGFuw7pzw610dsOhbnkwHhcNMDgxMjExMTUwODIxWhcNMjgx
|
2613 |
+
MjA2MTUwODIxWjCBpzELMAkGA1UEBhMCSFUxETAPBgNVBAcMCEJ1ZGFwZXN0MRUwEwYDVQQKDAxO
|
2614 |
+
ZXRMb2NrIEtmdC4xNzA1BgNVBAsMLlRhbsO6c8OtdHbDoW55a2lhZMOzayAoQ2VydGlmaWNhdGlv
|
2615 |
+
biBTZXJ2aWNlcykxNTAzBgNVBAMMLE5ldExvY2sgQXJhbnkgKENsYXNzIEdvbGQpIEbFkXRhbsO6
|
2616 |
+
c8OtdHbDoW55MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxCRec75LbRTDofTjl5Bu
|
2617 |
+
0jBFHjzuZ9lk4BqKf8owyoPjIMHj9DrTlF8afFttvzBPhCf2nx9JvMaZCpDyD/V/Q4Q3Y1GLeqVw
|
2618 |
+
/HpYzY6b7cNGbIRwXdrzAZAj/E4wqX7hJ2Pn7WQ8oLjJM2P+FpD/sLj916jAwJRDC7bVWaaeVtAk
|
2619 |
+
H3B5r9s5VA1lddkVQZQBr17s9o3x/61k/iCa11zr/qYfCGSji3ZVrR47KGAuhyXoqq8fxmRGILdw
|
2620 |
+
fzzeSNuWU7c5d+Qa4scWhHaXWy+7GRWF+GmF9ZmnqfI0p6m2pgP8b4Y9VHx2BJtr+UBdADTHLpl1
|
2621 |
+
neWIA6pN+APSQnbAGwIDAKiLo0UwQzASBgNVHRMBAf8ECDAGAQH/AgEEMA4GA1UdDwEB/wQEAwIB
|
2622 |
+
BjAdBgNVHQ4EFgQUzPpnk/C2uNClwB7zU/2MU9+D15YwDQYJKoZIhvcNAQELBQADggEBAKt/7hwW
|
2623 |
+
qZw8UQCgwBEIBaeZ5m8BiFRhbvG5GK1Krf6BQCOUL/t1fC8oS2IkgYIL9WHxHG64YTjrgfpioTta
|
2624 |
+
YtOUZcTh5m2C+C8lcLIhJsFyUR+MLMOEkMNaj7rP9KdlpeuY0fsFskZ1FSNqb4VjMIDw1Z4fKRzC
|
2625 |
+
bLBQWV2QWzuoDTDPv31/zvGdg73JRm4gpvlhUbohL3u+pRVjodSVh/GeufOJ8z2FuLjbvrW5Kfna
|
2626 |
+
NwUASZQDhETnv0Mxz3WLJdH0pmT1kvarBes96aULNmLazAZfNou2XjG4Kvte9nHfRCaexOYNkbQu
|
2627 |
+
dZWAUWpLMKawYqGT8ZvYzsRjdT9ZR7E=
|
2628 |
+
-----END CERTIFICATE-----
|
2629 |
+
|
2630 |
+
Staat der Nederlanden Root CA - G2
|
2631 |
+
==================================
|
2632 |
+
-----BEGIN CERTIFICATE-----
|
2633 |
+
MIIFyjCCA7KgAwIBAgIEAJiWjDANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJOTDEeMBwGA1UE
|
2634 |
+
CgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSswKQYDVQQDDCJTdGFhdCBkZXIgTmVkZXJsYW5kZW4g
|
2635 |
+
Um9vdCBDQSAtIEcyMB4XDTA4MDMyNjExMTgxN1oXDTIwMDMyNTExMDMxMFowWjELMAkGA1UEBhMC
|
2636 |
+
TkwxHjAcBgNVBAoMFVN0YWF0IGRlciBOZWRlcmxhbmRlbjErMCkGA1UEAwwiU3RhYXQgZGVyIE5l
|
2637 |
+
ZGVybGFuZGVuIFJvb3QgQ0EgLSBHMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMVZ
|
2638 |
+
5291qj5LnLW4rJ4L5PnZyqtdj7U5EILXr1HgO+EASGrP2uEGQxGZqhQlEq0i6ABtQ8SpuOUfiUtn
|
2639 |
+
vWFI7/3S4GCI5bkYYCjDdyutsDeqN95kWSpGV+RLufg3fNU254DBtvPUZ5uW6M7XxgpT0GtJlvOj
|
2640 |
+
CwV3SPcl5XCsMBQgJeN/dVrlSPhOewMHBPqCYYdu8DvEpMfQ9XQ+pV0aCPKbJdL2rAQmPlU6Yiil
|
2641 |
+
e7Iwr/g3wtG61jj99O9JMDeZJiFIhQGp5Rbn3JBV3w/oOM2ZNyFPXfUib2rFEhZgF1XyZWampzCR
|
2642 |
+
OME4HYYEhLoaJXhena/MUGDWE4dS7WMfbWV9whUYdMrhfmQpjHLYFhN9C0lK8SgbIHRrxT3dsKpI
|
2643 |
+
CT0ugpTNGmXZK4iambwYfp/ufWZ8Pr2UuIHOzZgweMFvZ9C+X+Bo7d7iscksWXiSqt8rYGPy5V65
|
2644 |
+
48r6f1CGPqI0GAwJaCgRHOThuVw+R7oyPxjMW4T182t0xHJ04eOLoEq9jWYv6q012iDTiIJh8BIi
|
2645 |
+
trzQ1aTsr1SIJSQ8p22xcik/Plemf1WvbibG/ufMQFxRRIEKeN5KzlW/HdXZt1bv8Hb/C3m1r737
|
2646 |
+
qWmRRpdogBQ2HbN/uymYNqUg+oJgYjOk7Na6B6duxc8UpufWkjTYgfX8HV2qXB72o007uPc5AgMB
|
2647 |
+
AAGjgZcwgZQwDwYDVR0TAQH/BAUwAwEB/zBSBgNVHSAESzBJMEcGBFUdIAAwPzA9BggrBgEFBQcC
|
2648 |
+
ARYxaHR0cDovL3d3dy5wa2lvdmVyaGVpZC5ubC9wb2xpY2llcy9yb290LXBvbGljeS1HMjAOBgNV
|
2649 |
+
HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJFoMocVHYnitfGsNig0jQt8YojrMA0GCSqGSIb3DQEBCwUA
|
2650 |
+
A4ICAQCoQUpnKpKBglBu4dfYszk78wIVCVBR7y29JHuIhjv5tLySCZa59sCrI2AGeYwRTlHSeYAz
|
2651 |
+
+51IvuxBQ4EffkdAHOV6CMqqi3WtFMTC6GY8ggen5ieCWxjmD27ZUD6KQhgpxrRW/FYQoAUXvQwj
|
2652 |
+
f/ST7ZwaUb7dRUG/kSS0H4zpX897IZmflZ85OkYcbPnNe5yQzSipx6lVu6xiNGI1E0sUOlWDuYaN
|
2653 |
+
kqbG9AclVMwWVxJKgnjIFNkXgiYtXSAfea7+1HAWFpWD2DU5/1JddRwWxRNVz0fMdWVSSt7wsKfk
|
2654 |
+
CpYL+63C4iWEst3kvX5ZbJvw8NjnyvLplzh+ib7M+zkXYT9y2zqR2GUBGR2tUKRXCnxLvJxxcypF
|
2655 |
+
URmFzI79R6d0lR2o0a9OF7FpJsKqeFdbxU2n5Z4FF5TKsl+gSRiNNOkmbEgeqmiSBeGCc1qb3Adb
|
2656 |
+
CG19ndeNIdn8FCCqwkXfP+cAslHkwvgFuXkajDTznlvkN1trSt8sV4pAWja63XVECDdCcAz+3F4h
|
2657 |
+
oKOKwJCcaNpQ5kUQR3i2TtJlycM33+FCY7BXN0Ute4qcvwXqZVUz9zkQxSgqIXobisQk+T8VyJoV
|
2658 |
+
IPVVYpbtbZNQvOSqeK3Zywplh6ZmwcSBo3c6WB4L7oOLnR7SUqTMHW+wmG2UMbX4cQrcufx9MmDm
|
2659 |
+
66+KAQ==
|
2660 |
+
-----END CERTIFICATE-----
|
2661 |
+
|
2662 |
+
CA Disig
|
2663 |
+
========
|
2664 |
+
-----BEGIN CERTIFICATE-----
|
2665 |
+
MIIEDzCCAvegAwIBAgIBATANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQGEwJTSzETMBEGA1UEBxMK
|
2666 |
+
QnJhdGlzbGF2YTETMBEGA1UEChMKRGlzaWcgYS5zLjERMA8GA1UEAxMIQ0EgRGlzaWcwHhcNMDYw
|
2667 |
+
MzIyMDEzOTM0WhcNMTYwMzIyMDEzOTM0WjBKMQswCQYDVQQGEwJTSzETMBEGA1UEBxMKQnJhdGlz
|
2668 |
+
bGF2YTETMBEGA1UEChMKRGlzaWcgYS5zLjERMA8GA1UEAxMIQ0EgRGlzaWcwggEiMA0GCSqGSIb3
|
2669 |
+
DQEBAQUAA4IBDwAwggEKAoIBAQCS9jHBfYj9mQGp2HvycXXxMcbzdWb6UShGhJd4NLxs/LxFWYgm
|
2670 |
+
GErENx+hSkS943EE9UQX4j/8SFhvXJ56CbpRNyIjZkMhsDxkovhqFQ4/61HhVKndBpnXmjxUizkD
|
2671 |
+
Pw/Fzsbrg3ICqB9x8y34dQjbYkzo+s7552oftms1grrijxaSfQUMbEYDXcDtab86wYqg6I7ZuUUo
|
2672 |
+
hwjstMoVvoLdtUSLLa2GDGhibYVW8qwUYzrG0ZmsNHhWS8+2rT+MitcE5eN4TPWGqvWP+j1scaMt
|
2673 |
+
ymfraHtuM6kMgiioTGohQBUgDCZbg8KpFhXAJIJdKxatymP2dACw30PEEGBWZ2NFAgMBAAGjgf8w
|
2674 |
+
gfwwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUjbJJaJ1yCCW5wCf1UJNWSEZx+Y8wDgYDVR0P
|
2675 |
+
AQH/BAQDAgEGMDYGA1UdEQQvMC2BE2Nhb3BlcmF0b3JAZGlzaWcuc2uGFmh0dHA6Ly93d3cuZGlz
|
2676 |
+
aWcuc2svY2EwZgYDVR0fBF8wXTAtoCugKYYnaHR0cDovL3d3dy5kaXNpZy5zay9jYS9jcmwvY2Ff
|
2677 |
+
ZGlzaWcuY3JsMCygKqAohiZodHRwOi8vY2EuZGlzaWcuc2svY2EvY3JsL2NhX2Rpc2lnLmNybDAa
|
2678 |
+
BgNVHSAEEzARMA8GDSuBHpGT5goAAAABAQEwDQYJKoZIhvcNAQEFBQADggEBAF00dGFMrzvY/59t
|
2679 |
+
WDYcPQuBDRIrRhCA/ec8J9B6yKm2fnQwM6M6int0wHl5QpNt/7EpFIKrIYwvF/k/Ji/1WcbvgAa3
|
2680 |
+
mkkp7M5+cTxqEEHA9tOasnxakZzArFvITV734VP/Q3f8nktnbNfzg9Gg4H8l37iYC5oyOGwwoPP/
|
2681 |
+
CBUz91BKez6jPiCp3C9WgArtQVCwyfTssuMmRAAOb54GvCKWU3BlxFAKRmukLyeBEicTXxChds6K
|
2682 |
+
ezfqwzlhA5WYOudsiCUI/HloDYd9Yvi0X/vF2Ey9WLw/Q1vUHgFNPGO+I++MzVpQuGhU+QqZMxEA
|
2683 |
+
4Z7CRneC9VkGjCFMhwnN5ag=
|
2684 |
+
-----END CERTIFICATE-----
|
2685 |
+
|
2686 |
+
Juur-SK
|
2687 |
+
=======
|
2688 |
+
-----BEGIN CERTIFICATE-----
|
2689 |
+
MIIE5jCCA86gAwIBAgIEO45L/DANBgkqhkiG9w0BAQUFADBdMRgwFgYJKoZIhvcNAQkBFglwa2lA
|
2690 |
+
c2suZWUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKExlBUyBTZXJ0aWZpdHNlZXJpbWlza2Vza3VzMRAw
|
2691 |
+
DgYDVQQDEwdKdXVyLVNLMB4XDTAxMDgzMDE0MjMwMVoXDTE2MDgyNjE0MjMwMVowXTEYMBYGCSqG
|
2692 |
+
SIb3DQEJARYJcGtpQHNrLmVlMQswCQYDVQQGEwJFRTEiMCAGA1UEChMZQVMgU2VydGlmaXRzZWVy
|
2693 |
+
aW1pc2tlc2t1czEQMA4GA1UEAxMHSnV1ci1TSzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
|
2694 |
+
ggEBAIFxNj4zB9bjMI0TfncyRsvPGbJgMUaXhvSYRqTCZUXP00B841oiqBB4M8yIsdOBSvZiF3tf
|
2695 |
+
TQou0M+LI+5PAk676w7KvRhj6IAcjeEcjT3g/1tf6mTll+g/mX8MCgkzABpTpyHhOEvWgxutr2TC
|
2696 |
+
+Rx6jGZITWYfGAriPrsfB2WThbkasLnE+w0R9vXW+RvHLCu3GFH+4Hv2qEivbDtPL+/40UceJlfw
|
2697 |
+
UR0zlv/vWT3aTdEVNMfqPxZIe5EcgEMPPbgFPtGzlc3Yyg/CQ2fbt5PgIoIuvvVoKIO5wTtpeyDa
|
2698 |
+
Tpxt4brNj3pssAki14sL2xzVWiZbDcDq5WDQn/413z8CAwEAAaOCAawwggGoMA8GA1UdEwEB/wQF
|
2699 |
+
MAMBAf8wggEWBgNVHSAEggENMIIBCTCCAQUGCisGAQQBzh8BAQEwgfYwgdAGCCsGAQUFBwICMIHD
|
2700 |
+
HoHAAFMAZQBlACAAcwBlAHIAdABpAGYAaQBrAGEAYQB0ACAAbwBuACAAdgDkAGwAagBhAHMAdABh
|
2701 |
+
AHQAdQBkACAAQQBTAC0AaQBzACAAUwBlAHIAdABpAGYAaQB0AHMAZQBlAHIAaQBtAGkAcwBrAGUA
|
2702 |
+
cwBrAHUAcwAgAGEAbABhAG0ALQBTAEsAIABzAGUAcgB0AGkAZgBpAGsAYQBhAHQAaQBkAGUAIABr
|
2703 |
+
AGkAbgBuAGkAdABhAG0AaQBzAGUAawBzMCEGCCsGAQUFBwIBFhVodHRwOi8vd3d3LnNrLmVlL2Nw
|
2704 |
+
cy8wKwYDVR0fBCQwIjAgoB6gHIYaaHR0cDovL3d3dy5zay5lZS9qdXVyL2NybC8wHQYDVR0OBBYE
|
2705 |
+
FASqekej5ImvGs8KQKcYP2/v6X2+MB8GA1UdIwQYMBaAFASqekej5ImvGs8KQKcYP2/v6X2+MA4G
|
2706 |
+
A1UdDwEB/wQEAwIB5jANBgkqhkiG9w0BAQUFAAOCAQEAe8EYlFOiCfP+JmeaUOTDBS8rNXiRTHyo
|
2707 |
+
ERF5TElZrMj3hWVcRrs7EKACr81Ptcw2Kuxd/u+gkcm2k298gFTsxwhwDY77guwqYHhpNjbRxZyL
|
2708 |
+
abVAyJRld/JXIWY7zoVAtjNjGr95HvxcHdMdkxuLDF2FvZkwMhgJkVLpfKG6/2SSmuz+Ne6ML678
|
2709 |
+
IIbsSt4beDI3poHSna9aEhbKmVv8b20OxaAehsmR0FyYgl9jDIpaq9iVpszLita/ZEuOyoqysOkh
|
2710 |
+
Mp6qqIWYNIE5ITuoOlIyPfZrN4YGWhWY3PARZv40ILcD9EEQfTmEeZZyY7aWAuVrua0ZTbvGRNs2
|
2711 |
+
yyqcjg==
|
2712 |
+
-----END CERTIFICATE-----
|
2713 |
+
|
2714 |
+
Hongkong Post Root CA 1
|
2715 |
+
=======================
|
2716 |
+
-----BEGIN CERTIFICATE-----
|
2717 |
+
MIIDMDCCAhigAwIBAgICA+gwDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCSEsxFjAUBgNVBAoT
|
2718 |
+
DUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3QgUm9vdCBDQSAxMB4XDTAzMDUx
|
2719 |
+
NTA1MTMxNFoXDTIzMDUxNTA0NTIyOVowRzELMAkGA1UEBhMCSEsxFjAUBgNVBAoTDUhvbmdrb25n
|
2720 |
+
IFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3QgUm9vdCBDQSAxMIIBIjANBgkqhkiG9w0BAQEF
|
2721 |
+
AAOCAQ8AMIIBCgKCAQEArP84tulmAknjorThkPlAj3n54r15/gK97iSSHSL22oVyaf7XPwnU3ZG1
|
2722 |
+
ApzQjVrhVcNQhrkpJsLj2aDxaQMoIIBFIi1WpztUlVYiWR8o3x8gPW2iNr4joLFutbEnPzlTCeqr
|
2723 |
+
auh0ssJlXI6/fMN4hM2eFvz1Lk8gKgifd/PFHsSaUmYeSF7jEAaPIpjhZY4bXSNmO7ilMlHIhqqh
|
2724 |
+
qZ5/dpTCpmy3QfDVyAY45tQM4vM7TG1QjMSDJ8EThFk9nnV0ttgCXjqQesBCNnLsak3c78QA3xMY
|
2725 |
+
V18meMjWCnl3v/evt3a5pQuEF10Q6m/hq5URX208o1xNg1vysxmKgIsLhwIDAQABoyYwJDASBgNV
|
2726 |
+
HRMBAf8ECDAGAQH/AgEDMA4GA1UdDwEB/wQEAwIBxjANBgkqhkiG9w0BAQUFAAOCAQEADkbVPK7i
|
2727 |
+
h9legYsCmEEIjEy82tvuJxuC52pF7BaLT4Wg87JwvVqWuspube5Gi27nKi6Wsxkz67SfqLI37pio
|
2728 |
+
l7Yutmcn1KZJ/RyTZXaeQi/cImyaT/JaFTmxcdcrUehtHJjA2Sr0oYJ71clBoiMBdDhViw+5Lmei
|
2729 |
+
IAQ32pwL0xch4I+XeTRvhEgCIDMb5jREn5Fw9IBehEPCKdJsEhTkYY2sEJCehFC78JZvRZ+K88ps
|
2730 |
+
T/oROhUVRsPNH4NbLUES7VBnQRM9IauUiqpOfMGx+6fWtScvl6tu4B3i0RwsH0Ti/L6RoZz71ilT
|
2731 |
+
c4afU9hDDl3WY4JxHYB0yvbiAmvZWg==
|
2732 |
+
-----END CERTIFICATE-----
|
2733 |
+
|
2734 |
+
SecureSign RootCA11
|
2735 |
+
===================
|
2736 |
+
-----BEGIN CERTIFICATE-----
|
2737 |
+
MIIDbTCCAlWgAwIBAgIBATANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQGEwJKUDErMCkGA1UEChMi
|
2738 |
+
SmFwYW4gQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcywgSW5jLjEcMBoGA1UEAxMTU2VjdXJlU2lnbiBS
|
2739 |
+
b290Q0ExMTAeFw0wOTA0MDgwNDU2NDdaFw0yOTA0MDgwNDU2NDdaMFgxCzAJBgNVBAYTAkpQMSsw
|
2740 |
+
KQYDVQQKEyJKYXBhbiBDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzLCBJbmMuMRwwGgYDVQQDExNTZWN1
|
2741 |
+
cmVTaWduIFJvb3RDQTExMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA/XeqpRyQBTvL
|
2742 |
+
TJszi1oURaTnkBbR31fSIRCkF/3frNYfp+TbfPfs37gD2pRY/V1yfIw/XwFndBWW4wI8h9uuywGO
|
2743 |
+
wvNmxoVF9ALGOrVisq/6nL+k5tSAMJjzDbaTj6nU2DbysPyKyiyhFTOVMdrAG/LuYpmGYz+/3ZMq
|
2744 |
+
g6h2uRMft85OQoWPIucuGvKVCbIFtUROd6EgvanyTgp9UK31BQ1FT0Zx/Sg+U/sE2C3XZR1KG/rP
|
2745 |
+
O7AxmjVuyIsG0wCR8pQIZUyxNAYAeoni8McDWc/V1uinMrPmmECGxc0nEovMe863ETxiYAcjPitA
|
2746 |
+
bpSACW22s293bzUIUPsCh8U+iQIDAQABo0IwQDAdBgNVHQ4EFgQUW/hNT7KlhtQ60vFjmqC+CfZX
|
2747 |
+
t94wDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAKCh
|
2748 |
+
OBZmLqdWHyGcBvod7bkixTgm2E5P7KN/ed5GIaGHd48HCJqypMWvDzKYC3xmKbabfSVSSUOrTC4r
|
2749 |
+
bnpwrxYO4wJs+0LmGJ1F2FXI6Dvd5+H0LgscNFxsWEr7jIhQX5Ucv+2rIrVls4W6ng+4reV6G4pQ
|
2750 |
+
Oh29Dbx7VFALuUKvVaAYga1lme++5Jy/xIWrQbJUb9wlze144o4MjQlJ3WN7WmmWAiGovVJZ6X01
|
2751 |
+
y8hSyn+B/tlr0/cR7SXf+Of5pPpyl4RTDaXQMhhRdlkUbA/r7F+AjHVDg8OFmP9Mni0N5HeDk061
|
2752 |
+
lgeLKBObjBmNQSdJQO7e5iNEOdyhIta6A/I=
|
2753 |
+
-----END CERTIFICATE-----
|
2754 |
+
|
2755 |
+
ACEDICOM Root
|
2756 |
+
=============
|
2757 |
+
-----BEGIN CERTIFICATE-----
|
2758 |
+
MIIFtTCCA52gAwIBAgIIYY3HhjsBggUwDQYJKoZIhvcNAQEFBQAwRDEWMBQGA1UEAwwNQUNFRElD
|
2759 |
+
T00gUm9vdDEMMAoGA1UECwwDUEtJMQ8wDQYDVQQKDAZFRElDT00xCzAJBgNVBAYTAkVTMB4XDTA4
|
2760 |
+
MDQxODE2MjQyMloXDTI4MDQxMzE2MjQyMlowRDEWMBQGA1UEAwwNQUNFRElDT00gUm9vdDEMMAoG
|
2761 |
+
A1UECwwDUEtJMQ8wDQYDVQQKDAZFRElDT00xCzAJBgNVBAYTAkVTMIICIjANBgkqhkiG9w0BAQEF
|
2762 |
+
AAOCAg8AMIICCgKCAgEA/5KV4WgGdrQsyFhIyv2AVClVYyT/kGWbEHV7w2rbYgIB8hiGtXxaOLHk
|
2763 |
+
WLn709gtn70yN78sFW2+tfQh0hOR2QetAQXW8713zl9CgQr5auODAKgrLlUTY4HKRxx7XBZXehuD
|
2764 |
+
YAQ6PmXDzQHe3qTWDLqO3tkE7hdWIpuPY/1NFgu3e3eM+SW10W2ZEi5PGrjm6gSSrj0RuVFCPYew
|
2765 |
+
MYWveVqc/udOXpJPQ/yrOq2lEiZmueIM15jO1FillUAKt0SdE3QrwqXrIhWYENiLxQSfHY9g5QYb
|
2766 |
+
m8+5eaA9oiM/Qj9r+hwDezCNzmzAv+YbX79nuIQZ1RXve8uQNjFiybwCq0Zfm/4aaJQ0PZCOrfbk
|
2767 |
+
HQl/Sog4P75n/TSW9R28MHTLOO7VbKvU/PQAtwBbhTIWdjPp2KOZnQUAqhbm84F9b32qhm2tFXTT
|
2768 |
+
xKJxqvQUfecyuB+81fFOvW8XAjnXDpVCOscAPukmYxHqC9FK/xidstd7LzrZlvvoHpKuE1XI2Sf2
|
2769 |
+
3EgbsCTBheN3nZqk8wwRHQ3ItBTutYJXCb8gWH8vIiPYcMt5bMlL8qkqyPyHK9caUPgn6C9D4zq9
|
2770 |
+
2Fdx/c6mUlv53U3t5fZvie27k5x2IXXwkkwp9y+cAS7+UEaeZAwUswdbxcJzbPEHXEUkFDWug/Fq
|
2771 |
+
TYl6+rPYLWbwNof1K1MCAwEAAaOBqjCBpzAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFKaz
|
2772 |
+
4SsrSbbXc6GqlPUB53NlTKxQMA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUprPhKytJttdzoaqU
|
2773 |
+
9QHnc2VMrFAwRAYDVR0gBD0wOzA5BgRVHSAAMDEwLwYIKwYBBQUHAgEWI2h0dHA6Ly9hY2VkaWNv
|
2774 |
+
bS5lZGljb21ncm91cC5jb20vZG9jMA0GCSqGSIb3DQEBBQUAA4ICAQDOLAtSUWImfQwng4/F9tqg
|
2775 |
+
aHtPkl7qpHMyEVNEskTLnewPeUKzEKbHDZ3Ltvo/Onzqv4hTGzz3gvoFNTPhNahXwOf9jU8/kzJP
|
2776 |
+
eGYDdwdY6ZXIfj7QeQCM8htRM5u8lOk6e25SLTKeI6RF+7YuE7CLGLHdztUdp0J/Vb77W7tH1Pwk
|
2777 |
+
zQSulgUV1qzOMPPKC8W64iLgpq0i5ALudBF/TP94HTXa5gI06xgSYXcGCRZj6hitoocf8seACQl1
|
2778 |
+
ThCojz2GuHURwCRiipZ7SkXp7FnFvmuD5uHorLUwHv4FB4D54SMNUI8FmP8sX+g7tq3PgbUhh8oI
|
2779 |
+
KiMnMCArz+2UW6yyetLHKKGKC5tNSixthT8Jcjxn4tncB7rrZXtaAWPWkFtPF2Y9fwsZo5NjEFIq
|
2780 |
+
nxQWWOLcpfShFosOkYuByptZ+thrkQdlVV9SH686+5DdaaVbnG0OLLb6zqylfDJKZ0DcMDQj3dcE
|
2781 |
+
I2bw/FWAp/tmGYI1Z2JwOV5vx+qQQEQIHriy1tvuWacNGHk0vFQYXlPKNFHtRQrmjseCNj6nOGOp
|
2782 |
+
MCwXEGCSn1WHElkQwg9naRHMTh5+Spqtr0CodaxWkHS4oJyleW/c6RrIaQXpuvoDs3zk4E7Czp3o
|
2783 |
+
tkYNbn5XOmeUwssfnHdKZ05phkOTOPu220+DkdRgfks+KzgHVZhepA==
|
2784 |
+
-----END CERTIFICATE-----
|
2785 |
+
|
2786 |
+
Verisign Class 3 Public Primary Certification Authority
|
2787 |
+
=======================================================
|
2788 |
+
-----BEGIN CERTIFICATE-----
|
2789 |
+
MIICPDCCAaUCEDyRMcsf9tAbDpq40ES/Er4wDQYJKoZIhvcNAQEFBQAwXzELMAkGA1UEBhMCVVMx
|
2790 |
+
FzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmltYXJ5
|
2791 |
+
IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2MDEyOTAwMDAwMFoXDTI4MDgwMjIzNTk1OVow
|
2792 |
+
XzELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAz
|
2793 |
+
IFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUA
|
2794 |
+
A4GNADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhEBarsAx94
|
2795 |
+
f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/isI19wKTakyYbnsZogy1Ol
|
2796 |
+
hec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBABByUqkFFBky
|
2797 |
+
CEHwxWsKzH4PIRnN5GfcX6kb5sroc50i2JhucwNhkcV8sEVAbkSdjbCxlnRhLQ2pRdKkkirWmnWX
|
2798 |
+
bj9T/UWZYB2oK0z5XqcJ2HUw19JlYD1n1khVdWk/kfVIC0dpImmClr7JyDiGSnoscxlIaU5rfGW/
|
2799 |
+
D/xwzoiQ
|
2800 |
+
-----END CERTIFICATE-----
|
2801 |
+
|
2802 |
+
Microsec e-Szigno Root CA 2009
|
2803 |
+
==============================
|
2804 |
+
-----BEGIN CERTIFICATE-----
|
2805 |
+
MIIECjCCAvKgAwIBAgIJAMJ+QwRORz8ZMA0GCSqGSIb3DQEBCwUAMIGCMQswCQYDVQQGEwJIVTER
|
2806 |
+
MA8GA1UEBwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jv
|
2807 |
+
c2VjIGUtU3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5o
|
2808 |
+
dTAeFw0wOTA2MTYxMTMwMThaFw0yOTEyMzAxMTMwMThaMIGCMQswCQYDVQQGEwJIVTERMA8GA1UE
|
2809 |
+
BwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUt
|
2810 |
+
U3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5odTCCASIw
|
2811 |
+
DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOn4j/NjrdqG2KfgQvvPkd6mJviZpWNwrZuuyjNA
|
2812 |
+
fW2WbqEORO7hE52UQlKavXWFdCyoDh2Tthi3jCyoz/tccbna7P7ofo/kLx2yqHWH2Leh5TvPmUpG
|
2813 |
+
0IMZfcChEhyVbUr02MelTTMuhTlAdX4UfIASmFDHQWe4oIBhVKZsTh/gnQ4H6cm6M+f+wFUoLAKA
|
2814 |
+
pxn1ntxVUwOXewdI/5n7N4okxFnMUBBjjqqpGrCEGob5X7uxUG6k0QrM1XF+H6cbfPVTbiJfyyvm
|
2815 |
+
1HxdrtbCxkzlBQHZ7Vf8wSN5/PrIJIOV87VqUQHQd9bpEqH5GoP7ghu5sJf0dgYzQ0mg/wu1+rUC
|
2816 |
+
AwEAAaOBgDB+MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTLD8bf
|
2817 |
+
QkPMPcu1SCOhGnqmKrs0aDAfBgNVHSMEGDAWgBTLD8bfQkPMPcu1SCOhGnqmKrs0aDAbBgNVHREE
|
2818 |
+
FDASgRBpbmZvQGUtc3ppZ25vLmh1MA0GCSqGSIb3DQEBCwUAA4IBAQDJ0Q5eLtXMs3w+y/w9/w0o
|
2819 |
+
lZMEyL/azXm4Q5DwpL7v8u8hmLzU1F0G9u5C7DBsoKqpyvGvivo/C3NqPuouQH4frlRheesuCDfX
|
2820 |
+
I/OMn74dseGkddug4lQUsbocKaQY9hK6ohQU4zE1yED/t+AFdlfBHFny+L/k7SViXITwfn4fs775
|
2821 |
+
tyERzAMBVnCnEJIeGzSBHq2cGsMEPO0CYdYeBvNfOofyK/FFh+U9rNHHV4S9a67c2Pm2G2JwCz02
|
2822 |
+
yULyMtd6YebS2z3PyKnJm9zbWETXbzivf3jTo60adbocwTZ8jx5tHMN1Rq41Bab2XD0h7lbwyYIi
|
2823 |
+
LXpUq3DDfSJlgnCW
|
2824 |
+
-----END CERTIFICATE-----
|
2825 |
+
|
2826 |
+
E-Guven Kok Elektronik Sertifika Hizmet Saglayicisi
|
2827 |
+
===================================================
|
2828 |
+
-----BEGIN CERTIFICATE-----
|
2829 |
+
MIIDtjCCAp6gAwIBAgIQRJmNPMADJ72cdpW56tustTANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQG
|
2830 |
+
EwJUUjEoMCYGA1UEChMfRWxla3Ryb25payBCaWxnaSBHdXZlbmxpZ2kgQS5TLjE8MDoGA1UEAxMz
|
2831 |
+
ZS1HdXZlbiBLb2sgRWxla3Ryb25payBTZXJ0aWZpa2EgSGl6bWV0IFNhZ2xheWljaXNpMB4XDTA3
|
2832 |
+
MDEwNDExMzI0OFoXDTE3MDEwNDExMzI0OFowdTELMAkGA1UEBhMCVFIxKDAmBgNVBAoTH0VsZWt0
|
2833 |
+
cm9uaWsgQmlsZ2kgR3V2ZW5saWdpIEEuUy4xPDA6BgNVBAMTM2UtR3V2ZW4gS29rIEVsZWt0cm9u
|
2834 |
+
aWsgU2VydGlmaWthIEhpem1ldCBTYWdsYXlpY2lzaTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
|
2835 |
+
AQoCggEBAMMSIJ6wXgBljU5Gu4Bc6SwGl9XzcslwuedLZYDBS75+PNdUMZTe1RK6UxYC6lhj71vY
|
2836 |
+
8+0qGqpxSKPcEC1fX+tcS5yWCEIlKBHMilpiAVDV6wlTL/jDj/6z/P2douNffb7tC+Bg62nsM+3Y
|
2837 |
+
jfsSSYMAyYuXjDtzKjKzEve5TfL0TW3H5tYmNwjy2f1rXKPlSFxYvEK+A1qBuhw1DADT9SN+cTAI
|
2838 |
+
JjjcJRFHLfO6IxClv7wC90Nex/6wN1CZew+TzuZDLMN+DfIcQ2Zgy2ExR4ejT669VmxMvLz4Bcpk
|
2839 |
+
9Ok0oSy1c+HCPujIyTQlCFzz7abHlJ+tiEMl1+E5YP6sOVkCAwEAAaNCMEAwDgYDVR0PAQH/BAQD
|
2840 |
+
AgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFJ/uRLOU1fqRTy7ZVZoEVtstxNulMA0GCSqG
|
2841 |
+
SIb3DQEBBQUAA4IBAQB/X7lTW2M9dTLn+sR0GstG30ZpHFLPqk/CaOv/gKlR6D1id4k9CnU58W5d
|
2842 |
+
F4dvaAXBlGzZXd/aslnLpRCKysw5zZ/rTt5S/wzw9JKp8mxTq5vSR6AfdPebmvEvFZ96ZDAYBzwq
|
2843 |
+
D2fK/A+JYZ1lpTzlvBNbCNvj/+27BrtqBrF6T2XGgv0enIu1De5Iu7i9qgi0+6N8y5/NkHZchpZ4
|
2844 |
+
Vwpm+Vganf2XKWDeEaaQHBkc7gGWIjQ0LpH5t8Qn0Xvmv/uARFoW5evg1Ao4vOSR49XrXMGs3xtq
|
2845 |
+
fJ7lddK2l4fbzIcrQzqECK+rPNv3PGYxhrCdU3nt+CPeQuMtgvEP5fqX
|
2846 |
+
-----END CERTIFICATE-----
|
2847 |
+
|
2848 |
+
GlobalSign Root CA - R3
|
2849 |
+
=======================
|
2850 |
+
-----BEGIN CERTIFICATE-----
|
2851 |
+
MIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4GA1UECxMXR2xv
|
2852 |
+
YmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh
|
2853 |
+
bFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4MTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT
|
2854 |
+
aWduIFJvb3QgQ0EgLSBSMzETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln
|
2855 |
+
bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWt
|
2856 |
+
iHL8RgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsTgHeMCOFJ
|
2857 |
+
0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmmKPZpO/bLyCiR5Z2KYVc3
|
2858 |
+
rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zdQQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjl
|
2859 |
+
OCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZXriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2
|
2860 |
+
xmmFghcCAwEAAaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE
|
2861 |
+
FI/wS3+oLkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZURUm7
|
2862 |
+
lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMpjjM5RcOO5LlXbKr8
|
2863 |
+
EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK6fBdRoyV3XpYKBovHd7NADdBj+1E
|
2864 |
+
bddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQXmcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18
|
2865 |
+
YIvDQVETI53O9zJrlAGomecsMx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7r
|
2866 |
+
kpeDMdmztcpHWD9f
|
2867 |
+
-----END CERTIFICATE-----
|
2868 |
+
|
2869 |
+
TC TrustCenter Universal CA III
|
2870 |
+
===============================
|
2871 |
+
-----BEGIN CERTIFICATE-----
|
2872 |
+
MIID4TCCAsmgAwIBAgIOYyUAAQACFI0zFQLkbPQwDQYJKoZIhvcNAQEFBQAwezELMAkGA1UEBhMC
|
2873 |
+
REUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxJDAiBgNVBAsTG1RDIFRydXN0Q2VudGVy
|
2874 |
+
IFVuaXZlcnNhbCBDQTEoMCYGA1UEAxMfVEMgVHJ1c3RDZW50ZXIgVW5pdmVyc2FsIENBIElJSTAe
|
2875 |
+
Fw0wOTA5MDkwODE1MjdaFw0yOTEyMzEyMzU5NTlaMHsxCzAJBgNVBAYTAkRFMRwwGgYDVQQKExNU
|
2876 |
+
QyBUcnVzdENlbnRlciBHbWJIMSQwIgYDVQQLExtUQyBUcnVzdENlbnRlciBVbml2ZXJzYWwgQ0Ex
|
2877 |
+
KDAmBgNVBAMTH1RDIFRydXN0Q2VudGVyIFVuaXZlcnNhbCBDQSBJSUkwggEiMA0GCSqGSIb3DQEB
|
2878 |
+
AQUAA4IBDwAwggEKAoIBAQDC2pxisLlxErALyBpXsq6DFJmzNEubkKLF5+cvAqBNLaT6hdqbJYUt
|
2879 |
+
QCggbergvbFIgyIpRJ9Og+41URNzdNW88jBmlFPAQDYvDIRlzg9uwliT6CwLOunBjvvya8o84pxO
|
2880 |
+
juT5fdMnnxvVZ3iHLX8LR7PH6MlIfK8vzArZQe+f/prhsq75U7Xl6UafYOPfjdN/+5Z+s7Vy+Eut
|
2881 |
+
CHnNaYlAJ/Uqwa1D7KRTyGG299J5KmcYdkhtWyUB0SbFt1dpIxVbYYqt8Bst2a9c8SaQaanVDED1
|
2882 |
+
M4BDj5yjdipFtK+/fz6HP3bFzSreIMUWWMv5G/UPyw0RUmS40nZid4PxWJ//AgMBAAGjYzBhMB8G
|
2883 |
+
A1UdIwQYMBaAFFbn4VslQ4Dg9ozhcbyO5YAvxEjiMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/
|
2884 |
+
BAQDAgEGMB0GA1UdDgQWBBRW5+FbJUOA4PaM4XG8juWAL8RI4jANBgkqhkiG9w0BAQUFAAOCAQEA
|
2885 |
+
g8ev6n9NCjw5sWi+e22JLumzCecYV42FmhfzdkJQEw/HkG8zrcVJYCtsSVgZ1OK+t7+rSbyUyKu+
|
2886 |
+
KGwWaODIl0YgoGhnYIg5IFHYaAERzqf2EQf27OysGh+yZm5WZ2B6dF7AbZc2rrUNXWZzwCUyRdhK
|
2887 |
+
BgePxLcHsU0GDeGl6/R1yrqc0L2z0zIkTO5+4nYES0lT2PLpVDP85XEfPRRclkvxOvIAu2y0+pZV
|
2888 |
+
CIgJwcyRGSmwIC3/yzikQOEXvnlhgP8HA4ZMTnsGnxGGjYnuJ8Tb4rwZjgvDwxPHLQNjO9Po5KIq
|
2889 |
+
woIIlBZU8O8fJ5AluA0OKBtHd0e9HKgl8ZS0Zg==
|
2890 |
+
-----END CERTIFICATE-----
|
2891 |
+
|
2892 |
+
Autoridad de Certificacion Firmaprofesional CIF A62634068
|
2893 |
+
=========================================================
|
2894 |
+
-----BEGIN CERTIFICATE-----
|
2895 |
+
MIIGFDCCA/ygAwIBAgIIU+w77vuySF8wDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCRVMxQjBA
|
2896 |
+
BgNVBAMMOUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2
|
2897 |
+
MjYzNDA2ODAeFw0wOTA1MjAwODM4MTVaFw0zMDEyMzEwODM4MTVaMFExCzAJBgNVBAYTAkVTMUIw
|
2898 |
+
QAYDVQQDDDlBdXRvcmlkYWQgZGUgQ2VydGlmaWNhY2lvbiBGaXJtYXByb2Zlc2lvbmFsIENJRiBB
|
2899 |
+
NjI2MzQwNjgwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKlmuO6vj78aI14H9M2uDD
|
2900 |
+
Utd9thDIAl6zQyrET2qyyhxdKJp4ERppWVevtSBC5IsP5t9bpgOSL/UR5GLXMnE42QQMcas9UX4P
|
2901 |
+
B99jBVzpv5RvwSmCwLTaUbDBPLutN0pcyvFLNg4kq7/DhHf9qFD0sefGL9ItWY16Ck6WaVICqjaY
|
2902 |
+
7Pz6FIMMNx/Jkjd/14Et5cS54D40/mf0PmbR0/RAz15iNA9wBj4gGFrO93IbJWyTdBSTo3OxDqqH
|
2903 |
+
ECNZXyAFGUftaI6SEspd/NYrspI8IM/hX68gvqB2f3bl7BqGYTM+53u0P6APjqK5am+5hyZvQWyI
|
2904 |
+
plD9amML9ZMWGxmPsu2bm8mQ9QEM3xk9Dz44I8kvjwzRAv4bVdZO0I08r0+k8/6vKtMFnXkIoctX
|
2905 |
+
MbScyJCyZ/QYFpM6/EfY0XiWMR+6KwxfXZmtY4laJCB22N/9q06mIqqdXuYnin1oKaPnirjaEbsX
|
2906 |
+
LZmdEyRG98Xi2J+Of8ePdG1asuhy9azuJBCtLxTa/y2aRnFHvkLfuwHb9H/TKI8xWVvTyQKmtFLK
|
2907 |
+
bpf7Q8UIJm+K9Lv9nyiqDdVF8xM6HdjAeI9BZzwelGSuewvF6NkBiDkal4ZkQdU7hwxu+g/GvUgU
|
2908 |
+
vzlN1J5Bto+WHWOWk9mVBngxaJ43BjuAiUVhOSPHG0SjFeUc+JIwuwIDAQABo4HvMIHsMBIGA1Ud
|
2909 |
+
EwEB/wQIMAYBAf8CAQEwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRlzeurNR4APn7VdMActHNH
|
2910 |
+
DhpkLzCBpgYDVR0gBIGeMIGbMIGYBgRVHSAAMIGPMC8GCCsGAQUFBwIBFiNodHRwOi8vd3d3LmZp
|
2911 |
+
cm1hcHJvZmVzaW9uYWwuY29tL2NwczBcBggrBgEFBQcCAjBQHk4AUABhAHMAZQBvACAAZABlACAA
|
2912 |
+
bABhACAAQgBvAG4AYQBuAG8AdgBhACAANAA3ACAAQgBhAHIAYwBlAGwAbwBuAGEAIAAwADgAMAAx
|
2913 |
+
ADcwDQYJKoZIhvcNAQEFBQADggIBABd9oPm03cXF661LJLWhAqvdpYhKsg9VSytXjDvlMd3+xDLx
|
2914 |
+
51tkljYyGOylMnfX40S2wBEqgLk9am58m9Ot/MPWo+ZkKXzR4Tgegiv/J2Wv+xYVxC5xhOW1//qk
|
2915 |
+
R71kMrv2JYSiJ0L1ILDCExARzRAVukKQKtJE4ZYm6zFIEv0q2skGz3QeqUvVhyj5eTSSPi5E6PaP
|
2916 |
+
T481PyWzOdxjKpBrIF/EUhJOlywqrJ2X3kjyo2bbwtKDlaZmp54lD+kLM5FlClrD2VQS3a/DTg4f
|
2917 |
+
Jl4N3LON7NWBcN7STyQF82xO9UxJZo3R/9ILJUFI/lGExkKvgATP0H5kSeTy36LssUzAKh3ntLFl
|
2918 |
+
osS88Zj0qnAHY7S42jtM+kAiMFsRpvAFDsYCA0irhpuF3dvd6qJ2gHN99ZwExEWN57kci57q13XR
|
2919 |
+
crHedUTnQn3iV2t93Jm8PYMo6oCTjcVMZcFwgbg4/EMxsvYDNEeyrPsiBsse3RdHHF9mudMaotoR
|
2920 |
+
saS8I8nkvof/uZS2+F0gStRf571oe2XyFR7SOqkt6dhrJKyXWERHrVkY8SFlcN7ONGCoQPHzPKTD
|
2921 |
+
KCOM/iczQ0CgFzzr6juwcqajuUpLXhZI9LK8yIySxZ2frHI2vDSANGupi5LAuBft7HZT9SQBjLMi
|
2922 |
+
6Et8Vcad+qMUu2WFbm5PEn4KPJ2V
|
2923 |
+
-----END CERTIFICATE-----
|
2924 |
+
|
2925 |
+
Izenpe.com
|
2926 |
+
==========
|
2927 |
+
-----BEGIN CERTIFICATE-----
|
2928 |
+
MIIF8TCCA9mgAwIBAgIQALC3WhZIX7/hy/WL1xnmfTANBgkqhkiG9w0BAQsFADA4MQswCQYDVQQG
|
2929 |
+
EwJFUzEUMBIGA1UECgwLSVpFTlBFIFMuQS4xEzARBgNVBAMMCkl6ZW5wZS5jb20wHhcNMDcxMjEz
|
2930 |
+
MTMwODI4WhcNMzcxMjEzMDgyNzI1WjA4MQswCQYDVQQGEwJFUzEUMBIGA1UECgwLSVpFTlBFIFMu
|
2931 |
+
QS4xEzARBgNVBAMMCkl6ZW5wZS5jb20wggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDJ
|
2932 |
+
03rKDx6sp4boFmVqscIbRTJxldn+EFvMr+eleQGPicPK8lVx93e+d5TzcqQsRNiekpsUOqHnJJAK
|
2933 |
+
ClaOxdgmlOHZSOEtPtoKct2jmRXagaKH9HtuJneJWK3W6wyyQXpzbm3benhB6QiIEn6HLmYRY2xU
|
2934 |
+
+zydcsC8Lv/Ct90NduM61/e0aL6i9eOBbsFGb12N4E3GVFWJGjMxCrFXuaOKmMPsOzTFlUFpfnXC
|
2935 |
+
PCDFYbpRR6AgkJOhkEvzTnyFRVSa0QUmQbC1TR0zvsQDyCV8wXDbO/QJLVQnSKwv4cSsPsjLkkxT
|
2936 |
+
OTcj7NMB+eAJRE1NZMDhDVqHIrytG6P+JrUV86f8hBnp7KGItERphIPzidF0BqnMC9bC3ieFUCbK
|
2937 |
+
F7jJeodWLBoBHmy+E60QrLUk9TiRodZL2vG70t5HtfG8gfZZa88ZU+mNFctKy6lvROUbQc/hhqfK
|
2938 |
+
0GqfvEyNBjNaooXlkDWgYlwWTvDjovoDGrQscbNYLN57C9saD+veIR8GdwYDsMnvmfzAuU8Lhij+
|
2939 |
+
0rnq49qlw0dpEuDb8PYZi+17cNcC1u2HGCgsBCRMd+RIihrGO5rUD8r6ddIBQFqNeb+Lz0vPqhbB
|
2940 |
+
leStTIo+F5HUsWLlguWABKQDfo2/2n+iD5dPDNMN+9fR5XJ+HMh3/1uaD7euBUbl8agW7EekFwID
|
2941 |
+
AQABo4H2MIHzMIGwBgNVHREEgagwgaWBD2luZm9AaXplbnBlLmNvbaSBkTCBjjFHMEUGA1UECgw+
|
2942 |
+
SVpFTlBFIFMuQS4gLSBDSUYgQTAxMzM3MjYwLVJNZXJjLlZpdG9yaWEtR2FzdGVpeiBUMTA1NSBG
|
2943 |
+
NjIgUzgxQzBBBgNVBAkMOkF2ZGEgZGVsIE1lZGl0ZXJyYW5lbyBFdG9yYmlkZWEgMTQgLSAwMTAx
|
2944 |
+
MCBWaXRvcmlhLUdhc3RlaXowDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0O
|
2945 |
+
BBYEFB0cZQ6o8iV7tJHP5LGx5r1VdGwFMA0GCSqGSIb3DQEBCwUAA4ICAQB4pgwWSp9MiDrAyw6l
|
2946 |
+
Fn2fuUhfGI8NYjb2zRlrrKvV9pF9rnHzP7MOeIWblaQnIUdCSnxIOvVFfLMMjlF4rJUT3sb9fbga
|
2947 |
+
kEyrkgPH7UIBzg/YsfqikuFgba56awmqxinuaElnMIAkejEWOVt+8Rwu3WwJrfIxwYJOubv5vr8q
|
2948 |
+
hT/AQKM6WfxZSzwoJNu0FXWuDYi6LnPAvViH5ULy617uHjAimcs30cQhbIHsvm0m5hzkQiCeR7Cs
|
2949 |
+
g1lwLDXWrzY0tM07+DKo7+N4ifuNRSzanLh+QBxh5z6ikixL8s36mLYp//Pye6kfLqCTVyvehQP5
|
2950 |
+
aTfLnnhqBbTFMXiJ7HqnheG5ezzevh55hM6fcA5ZwjUukCox2eRFekGkLhObNA5me0mrZJfQRsN5
|
2951 |
+
nXJQY6aYWwa9SG3YOYNw6DXwBdGqvOPbyALqfP2C2sJbUjWumDqtujWTI6cfSN01RpiyEGjkpTHC
|
2952 |
+
ClguGYEQyVB1/OpaFs4R1+7vUIgtYf8/QnMFlEPVjjxOAToZpR9GTnfQXeWBIiGH/pR9hNiTrdZo
|
2953 |
+
Q0iy2+tzJOeRf1SktoA+naM8THLCV8Sg1Mw4J87VBp6iSNnpn86CcDaTmjvfliHjWbcM2pE38P1Z
|
2954 |
+
WrOZyGlsQyYBNWNgVYkDOnXYukrZVP/u3oDYLdE41V4tC5h9Pmzb/CaIxw==
|
2955 |
+
-----END CERTIFICATE-----
|
2956 |
+
|
2957 |
+
Chambers of Commerce Root - 2008
|
2958 |
+
================================
|
2959 |
+
-----BEGIN CERTIFICATE-----
|
2960 |
+
MIIHTzCCBTegAwIBAgIJAKPaQn6ksa7aMA0GCSqGSIb3DQEBBQUAMIGuMQswCQYDVQQGEwJFVTFD
|
2961 |
+
MEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNv
|
2962 |
+
bS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMu
|
2963 |
+
QS4xKTAnBgNVBAMTIENoYW1iZXJzIG9mIENvbW1lcmNlIFJvb3QgLSAyMDA4MB4XDTA4MDgwMTEy
|
2964 |
+
Mjk1MFoXDTM4MDczMTEyMjk1MFowga4xCzAJBgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNl
|
2965 |
+
ZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNhbWVyZmlybWEuY29tL2FkZHJlc3MpMRIwEAYDVQQF
|
2966 |
+
EwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENhbWVyZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJl
|
2967 |
+
cnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDgwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC
|
2968 |
+
AQCvAMtwNyuAWko6bHiUfaN/Gh/2NdW928sNRHI+JrKQUrpjOyhYb6WzbZSm891kDFX29ufyIiKA
|
2969 |
+
XuFixrYp4YFs8r/lfTJqVKAyGVn+H4vXPWCGhSRv4xGzdz4gljUha7MI2XAuZPeEklPWDrCQiorj
|
2970 |
+
h40G072QDuKZoRuGDtqaCrsLYVAGUvGef3bsyw/QHg3PmTA9HMRFEFis1tPo1+XqxQEHd9ZR5gN/
|
2971 |
+
ikilTWh1uem8nk4ZcfUyS5xtYBkL+8ydddy/Js2Pk3g5eXNeJQ7KXOt3EgfLZEFHcpOrUMPrCXZk
|
2972 |
+
NNI5t3YRCQ12RcSprj1qr7V9ZS+UWBDsXHyvfuK2GNnQm05aSd+pZgvMPMZ4fKecHePOjlO+Bd5g
|
2973 |
+
D2vlGts/4+EhySnB8esHnFIbAURRPHsl18TlUlRdJQfKFiC4reRB7noI/plvg6aRArBsNlVq5331
|
2974 |
+
lubKgdaX8ZSD6e2wsWsSaR6s+12pxZjptFtYer49okQ6Y1nUCyXeG0+95QGezdIp1Z8XGQpvvwyQ
|
2975 |
+
0wlf2eOKNcx5Wk0ZN5K3xMGtr/R5JJqyAQuxr1yW84Ay+1w9mPGgP0revq+ULtlVmhduYJ1jbLhj
|
2976 |
+
ya6BXBg14JC7vjxPNyK5fuvPnnchpj04gftI2jE9K+OJ9dC1vX7gUMQSibMjmhAxhduub+84Mxh2
|
2977 |
+
EQIDAQABo4IBbDCCAWgwEgYDVR0TAQH/BAgwBgEB/wIBDDAdBgNVHQ4EFgQU+SSsD7K1+HnA+mCI
|
2978 |
+
G8TZTQKeFxkwgeMGA1UdIwSB2zCB2IAU+SSsD7K1+HnA+mCIG8TZTQKeFxmhgbSkgbEwga4xCzAJ
|
2979 |
+
BgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNlZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNh
|
2980 |
+
bWVyZmlybWEuY29tL2FkZHJlc3MpMRIwEAYDVQQFEwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENh
|
2981 |
+
bWVyZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDiC
|
2982 |
+
CQCj2kJ+pLGu2jAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUH
|
2983 |
+
AgEWHGh0dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZIhvcNAQEFBQADggIBAJASryI1
|
2984 |
+
wqM58C7e6bXpeHxIvj99RZJe6dqxGfwWPJ+0W2aeaufDuV2I6A+tzyMP3iU6XsxPpcG1Lawk0lgH
|
2985 |
+
3qLPaYRgM+gQDROpI9CF5Y57pp49chNyM/WqfcZjHwj0/gF/JM8rLFQJ3uIrbZLGOU8W6jx+ekbU
|
2986 |
+
RWpGqOt1glanq6B8aBMz9p0w8G8nOSQjKpD9kCk18pPfNKXG9/jvjA9iSnyu0/VU+I22mlaHFoI6
|
2987 |
+
M6taIgj3grrqLuBHmrS1RaMFO9ncLkVAO+rcf+g769HsJtg1pDDFOqxXnrN2pSB7+R5KBWIBpih1
|
2988 |
+
YJeSDW4+TTdDDZIVnBgizVGZoCkaPF+KMjNbMMeJL0eYD6MDxvbxrN8y8NmBGuScvfaAFPDRLLmF
|
2989 |
+
9dijscilIeUcE5fuDr3fKanvNFNb0+RqE4QGtjICxFKuItLcsiFCGtpA8CnJ7AoMXOLQusxI0zcK
|
2990 |
+
zBIKinmwPQN/aUv0NCB9szTqjktk9T79syNnFQ0EuPAtwQlRPLJsFfClI9eDdOTlLsn+mCdCxqvG
|
2991 |
+
nrDQWzilm1DefhiYtUU79nm06PcaewaD+9CL2rvHvRirCG88gGtAPxkZumWK5r7VXNM21+9AUiRg
|
2992 |
+
OGcEMeyP84LG3rlV8zsxkVrctQgVrXYlCg17LofiDKYGvCYQbTed7N14jHyAxfDZd0jQ
|
2993 |
+
-----END CERTIFICATE-----
|
2994 |
+
|
2995 |
+
Global Chambersign Root - 2008
|
2996 |
+
==============================
|
2997 |
+
-----BEGIN CERTIFICATE-----
|
2998 |
+
MIIHSTCCBTGgAwIBAgIJAMnN0+nVfSPOMA0GCSqGSIb3DQEBBQUAMIGsMQswCQYDVQQGEwJFVTFD
|
2999 |
+
MEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNv
|
3000 |
+
bS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMu
|
3001 |
+
QS4xJzAlBgNVBAMTHkdsb2JhbCBDaGFtYmVyc2lnbiBSb290IC0gMjAwODAeFw0wODA4MDExMjMx
|
3002 |
+
NDBaFw0zODA3MzExMjMxNDBaMIGsMQswCQYDVQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUg
|
3003 |
+
Y3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJ
|
3004 |
+
QTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xJzAlBgNVBAMTHkdsb2JhbCBD
|
3005 |
+
aGFtYmVyc2lnbiBSb290IC0gMjAwODCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMDf
|
3006 |
+
VtPkOpt2RbQT2//BthmLN0EYlVJH6xedKYiONWwGMi5HYvNJBL99RDaxccy9Wglz1dmFRP+RVyXf
|
3007 |
+
XjaOcNFccUMd2drvXNL7G706tcuto8xEpw2uIRU/uXpbknXYpBI4iRmKt4DS4jJvVpyR1ogQC7N0
|
3008 |
+
ZJJ0YPP2zxhPYLIj0Mc7zmFLmY/CDNBAspjcDahOo7kKrmCgrUVSY7pmvWjg+b4aqIG7HkF4ddPB
|
3009 |
+
/gBVsIdU6CeQNR1MM62X/JcumIS/LMmjv9GYERTtY/jKmIhYF5ntRQOXfjyGHoiMvvKRhI9lNNgA
|
3010 |
+
TH23MRdaKXoKGCQwoze1eqkBfSbW+Q6OWfH9GzO1KTsXO0G2Id3UwD2ln58fQ1DJu7xsepeY7s2M
|
3011 |
+
H/ucUa6LcL0nn3HAa6x9kGbo1106DbDVwo3VyJ2dwW3Q0L9R5OP4wzg2rtandeavhENdk5IMagfe
|
3012 |
+
Ox2YItaswTXbo6Al/3K1dh3ebeksZixShNBFks4c5eUzHdwHU1SjqoI7mjcv3N2gZOnm3b2u/GSF
|
3013 |
+
HTynyQbehP9r6GsaPMWis0L7iwk+XwhSx2LE1AVxv8Rk5Pihg+g+EpuoHtQ2TS9x9o0o9oOpE9Jh
|
3014 |
+
wZG7SMA0j0GMS0zbaRL/UJScIINZc+18ofLx/d33SdNDWKBWY8o9PeU1VlnpDsogzCtLkykPAgMB
|
3015 |
+
AAGjggFqMIIBZjASBgNVHRMBAf8ECDAGAQH/AgEMMB0GA1UdDgQWBBS5CcqcHtvTbDprru1U8VuT
|
3016 |
+
BjUuXjCB4QYDVR0jBIHZMIHWgBS5CcqcHtvTbDprru1U8VuTBjUuXqGBsqSBrzCBrDELMAkGA1UE
|
3017 |
+
BhMCRVUxQzBBBgNVBAcTOk1hZHJpZCAoc2VlIGN1cnJlbnQgYWRkcmVzcyBhdCB3d3cuY2FtZXJm
|
3018 |
+
aXJtYS5jb20vYWRkcmVzcykxEjAQBgNVBAUTCUE4Mjc0MzI4NzEbMBkGA1UEChMSQUMgQ2FtZXJm
|
3019 |
+
aXJtYSBTLkEuMScwJQYDVQQDEx5HbG9iYWwgQ2hhbWJlcnNpZ24gUm9vdCAtIDIwMDiCCQDJzdPp
|
3020 |
+
1X0jzjAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUHAgEWHGh0
|
3021 |
+
dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZIhvcNAQEFBQADggIBAICIf3DekijZBZRG
|
3022 |
+
/5BXqfEv3xoNa/p8DhxJJHkn2EaqbylZUohwEurdPfWbU1Rv4WCiqAm57OtZfMY18dwY6fFn5a+6
|
3023 |
+
ReAJ3spED8IXDneRRXozX1+WLGiLwUePmJs9wOzL9dWCkoQ10b42OFZyMVtHLaoXpGNR6woBrX/s
|
3024 |
+
dZ7LoR/xfxKxueRkf2fWIyr0uDldmOghp+G9PUIadJpwr2hsUF1Jz//7Dl3mLEfXgTpZALVza2Mg
|
3025 |
+
9jFFCDkO9HB+QHBaP9BrQql0PSgvAm11cpUJjUhjxsYjV5KTXjXBjfkK9yydYhz2rXzdpjEetrHH
|
3026 |
+
foUm+qRqtdpjMNHvkzeyZi99Bffnt0uYlDXA2TopwZ2yUDMdSqlapskD7+3056huirRXhOukP9Du
|
3027 |
+
qqqHW2Pok+JrqNS4cnhrG+055F3Lm6qH1U9OAP7Zap88MQ8oAgF9mOinsKJknnn4SPIVqczmyETr
|
3028 |
+
P3iZ8ntxPjzxmKfFGBI/5rsoM0LpRQp8bfKGeS/Fghl9CYl8slR2iK7ewfPM4W7bMdaTrpmg7yVq
|
3029 |
+
c5iJWzouE4gev8CSlDQb4ye3ix5vQv/n6TebUB0tovkC7stYWDpxvGjjqsGvHCgfotwjZT+B6q6Z
|
3030 |
+
09gwzxMNTxXJhLynSC34MCN32EZLeW32jO06f2ARePTpm67VVMB0gNELQp/B
|
3031 |
+
-----END CERTIFICATE-----
|
3032 |
+
|
3033 |
+
Go Daddy Root Certificate Authority - G2
|
3034 |
+
========================================
|
3035 |
+
-----BEGIN CERTIFICATE-----
|
3036 |
+
MIIDxTCCAq2gAwIBAgIBADANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMxEDAOBgNVBAgT
|
3037 |
+
B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoTEUdvRGFkZHkuY29tLCBJbmMu
|
3038 |
+
MTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5
|
3039 |
+
MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgYMxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6
|
3040 |
+
b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjExMC8G
|
3041 |
+
A1UEAxMoR28gRGFkZHkgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZI
|
3042 |
+
hvcNAQEBBQADggEPADCCAQoCggEBAL9xYgjx+lk09xvJGKP3gElY6SKDE6bFIEMBO4Tx5oVJnyfq
|
3043 |
+
9oQbTqC023CYxzIBsQU+B07u9PpPL1kwIuerGVZr4oAH/PMWdYA5UXvl+TW2dE6pjYIT5LY/qQOD
|
3044 |
+
+qK+ihVqf94Lw7YZFAXK6sOoBJQ7RnwyDfMAZiLIjWltNowRGLfTshxgtDj6AozO091GB94KPutd
|
3045 |
+
fMh8+7ArU6SSYmlRJQVhGkSBjCypQ5Yj36w6gZoOKcUcqeldHraenjAKOc7xiID7S13MMuyFYkMl
|
3046 |
+
NAJWJwGRtDtwKj9useiciAF9n9T521NtYJ2/LOdYq7hfRvzOxBsDPAnrSTFcaUaz4EcCAwEAAaNC
|
3047 |
+
MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFDqahQcQZyi27/a9
|
3048 |
+
BUFuIMGU2g/eMA0GCSqGSIb3DQEBCwUAA4IBAQCZ21151fmXWWcDYfF+OwYxdS2hII5PZYe096ac
|
3049 |
+
vNjpL9DbWu7PdIxztDhC2gV7+AJ1uP2lsdeu9tfeE8tTEH6KRtGX+rcuKxGrkLAngPnon1rpN5+r
|
3050 |
+
5N9ss4UXnT3ZJE95kTXWXwTrgIOrmgIttRD02JDHBHNA7XIloKmf7J6raBKZV8aPEjoJpL1E/QYV
|
3051 |
+
N8Gb5DKj7Tjo2GTzLH4U/ALqn83/B2gX2yKQOC16jdFU8WnjXzPKej17CuPKf1855eJ1usV2GDPO
|
3052 |
+
LPAvTK33sefOT6jEm0pUBsV/fdUID+Ic/n4XuKxe9tQWskMJDE32p2u0mYRlynqI4uJEvlz36hz1
|
3053 |
+
-----END CERTIFICATE-----
|
3054 |
+
|
3055 |
+
Starfield Root Certificate Authority - G2
|
3056 |
+
=========================================
|
3057 |
+
-----BEGIN CERTIFICATE-----
|
3058 |
+
MIID3TCCAsWgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBjzELMAkGA1UEBhMCVVMxEDAOBgNVBAgT
|
3059 |
+
B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9s
|
3060 |
+
b2dpZXMsIEluYy4xMjAwBgNVBAMTKVN0YXJmaWVsZCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0
|
3061 |
+
eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgY8xCzAJBgNVBAYTAlVTMRAw
|
3062 |
+
DgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQg
|
3063 |
+
VGVjaG5vbG9naWVzLCBJbmMuMTIwMAYDVQQDEylTdGFyZmllbGQgUm9vdCBDZXJ0aWZpY2F0ZSBB
|
3064 |
+
dXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL3twQP89o/8ArFv
|
3065 |
+
W59I2Z154qK3A2FWGMNHttfKPTUuiUP3oWmb3ooa/RMgnLRJdzIpVv257IzdIvpy3Cdhl+72WoTs
|
3066 |
+
bhm5iSzchFvVdPtrX8WJpRBSiUZV9Lh1HOZ/5FSuS/hVclcCGfgXcVnrHigHdMWdSL5stPSksPNk
|
3067 |
+
N3mSwOxGXn/hbVNMYq/NHwtjuzqd+/x5AJhhdM8mgkBj87JyahkNmcrUDnXMN/uLicFZ8WJ/X7Nf
|
3068 |
+
ZTD4p7dNdloedl40wOiWVpmKs/B/pM293DIxfJHP4F8R+GuqSVzRmZTRouNjWwl2tVZi4Ut0HZbU
|
3069 |
+
JtQIBFnQmA4O5t78w+wfkPECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
|
3070 |
+
AQYwHQYDVR0OBBYEFHwMMh+n2TB/xH1oo2Kooc6rB1snMA0GCSqGSIb3DQEBCwUAA4IBAQARWfol
|
3071 |
+
TwNvlJk7mh+ChTnUdgWUXuEok21iXQnCoKjUsHU48TRqneSfioYmUeYs0cYtbpUgSpIB7LiKZ3sx
|
3072 |
+
4mcujJUDJi5DnUox9g61DLu34jd/IroAow57UvtruzvE03lRTs2Q9GcHGcg8RnoNAX3FWOdt5oUw
|
3073 |
+
F5okxBDgBPfg8n/Uqgr/Qh037ZTlZFkSIHc40zI+OIF1lnP6aI+xy84fxez6nH7PfrHxBy22/L/K
|
3074 |
+
pL/QlwVKvOoYKAKQvVR4CSFx09F9HdkWsKlhPdAKACL8x3vLCWRFCztAgfd9fDL1mMpYjn0q7pBZ
|
3075 |
+
c2T5NnReJaH1ZgUufzkVqSr7UIuOhWn0
|
3076 |
+
-----END CERTIFICATE-----
|
3077 |
+
|
3078 |
+
Starfield Services Root Certificate Authority - G2
|
3079 |
+
==================================================
|
3080 |
+
-----BEGIN CERTIFICATE-----
|
3081 |
+
MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMxEDAOBgNVBAgT
|
3082 |
+
B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9s
|
3083 |
+
b2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVsZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRl
|
3084 |
+
IEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNV
|
3085 |
+
BAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxT
|
3086 |
+
dGFyZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2VydmljZXMg
|
3087 |
+
Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
|
3088 |
+
AQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20pOsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2
|
3089 |
+
h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm28xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4Pa
|
3090 |
+
hHQUw2eeBGg6345AWh1KTs9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLP
|
3091 |
+
LJGmpufehRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk6mFB
|
3092 |
+
rMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAwDwYDVR0TAQH/BAUw
|
3093 |
+
AwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+qAdcwKziIorhtSpzyEZGDMA0GCSqG
|
3094 |
+
SIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMIbw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPP
|
3095 |
+
E95Dz+I0swSdHynVv/heyNXBve6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTy
|
3096 |
+
xQGjhdByPq1zqwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkd
|
3097 |
+
iEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn0q23KXB56jza
|
3098 |
+
YyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCNsSi6
|
3099 |
+
-----END CERTIFICATE-----
|
3100 |
+
|
3101 |
+
AffirmTrust Commercial
|
3102 |
+
======================
|
3103 |
+
-----BEGIN CERTIFICATE-----
|
3104 |
+
MIIDTDCCAjSgAwIBAgIId3cGJyapsXwwDQYJKoZIhvcNAQELBQAwRDELMAkGA1UEBhMCVVMxFDAS
|
3105 |
+
BgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBDb21tZXJjaWFsMB4XDTEw
|
3106 |
+
MDEyOTE0MDYwNloXDTMwMTIzMTE0MDYwNlowRDELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmly
|
3107 |
+
bVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBDb21tZXJjaWFsMIIBIjANBgkqhkiG9w0BAQEF
|
3108 |
+
AAOCAQ8AMIIBCgKCAQEA9htPZwcroRX1BiLLHwGy43NFBkRJLLtJJRTWzsO3qyxPxkEylFf6Eqdb
|
3109 |
+
DuKPHx6GGaeqtS25Xw2Kwq+FNXkyLbscYjfysVtKPcrNcV/pQr6U6Mje+SJIZMblq8Yrba0F8PrV
|
3110 |
+
C8+a5fBQpIs7R6UjW3p6+DM/uO+Zl+MgwdYoic+U+7lF7eNAFxHUdPALMeIrJmqbTFeurCA+ukV6
|
3111 |
+
BfO9m2kVrn1OIGPENXY6BwLJN/3HR+7o8XYdcxXyl6S1yHp52UKqK39c/s4mT6NmgTWvRLpUHhww
|
3112 |
+
MmWd5jyTXlBOeuM61G7MGvv50jeuJCqrVwMiKA1JdX+3KNp1v47j3A55MQIDAQABo0IwQDAdBgNV
|
3113 |
+
HQ4EFgQUnZPGU4teyq8/nx4P5ZmVvCT2lI8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
|
3114 |
+
AQYwDQYJKoZIhvcNAQELBQADggEBAFis9AQOzcAN/wr91LoWXym9e2iZWEnStB03TX8nfUYGXUPG
|
3115 |
+
hi4+c7ImfU+TqbbEKpqrIZcUsd6M06uJFdhrJNTxFq7YpFzUf1GO7RgBsZNjvbz4YYCanrHOQnDi
|
3116 |
+
qX0GJX0nof5v7LMeJNrjS1UaADs1tDvZ110w/YETifLCBivtZ8SOyUOyXGsViQK8YvxO8rUzqrJv
|
3117 |
+
0wqiUOP2O+guRMLbZjipM1ZI8W0bM40NjD9gN53Tym1+NH4Nn3J2ixufcv1SNUFFApYvHLKac0kh
|
3118 |
+
sUlHRUe072o0EclNmsxZt9YCnlpOZbWUrhvfKbAW8b8Angc6F2S1BLUjIZkKlTuXfO8=
|
3119 |
+
-----END CERTIFICATE-----
|
3120 |
+
|
3121 |
+
AffirmTrust Networking
|
3122 |
+
======================
|
3123 |
+
-----BEGIN CERTIFICATE-----
|
3124 |
+
MIIDTDCCAjSgAwIBAgIIfE8EORzUmS0wDQYJKoZIhvcNAQEFBQAwRDELMAkGA1UEBhMCVVMxFDAS
|
3125 |
+
BgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBOZXR3b3JraW5nMB4XDTEw
|
3126 |
+
MDEyOTE0MDgyNFoXDTMwMTIzMTE0MDgyNFowRDELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmly
|
3127 |
+
bVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBOZXR3b3JraW5nMIIBIjANBgkqhkiG9w0BAQEF
|
3128 |
+
AAOCAQ8AMIIBCgKCAQEAtITMMxcua5Rsa2FSoOujz3mUTOWUgJnLVWREZY9nZOIG41w3SfYvm4SE
|
3129 |
+
Hi3yYJ0wTsyEheIszx6e/jarM3c1RNg1lho9Nuh6DtjVR6FqaYvZ/Ls6rnla1fTWcbuakCNrmreI
|
3130 |
+
dIcMHl+5ni36q1Mr3Lt2PpNMCAiMHqIjHNRqrSK6mQEubWXLviRmVSRLQESxG9fhwoXA3hA/Pe24
|
3131 |
+
/PHxI1Pcv2WXb9n5QHGNfb2V1M6+oF4nI979ptAmDgAp6zxG8D1gvz9Q0twmQVGeFDdCBKNwV6gb
|
3132 |
+
h+0t+nvujArjqWaJGctB+d1ENmHP4ndGyH329JKBNv3bNPFyfvMMFr20FQIDAQABo0IwQDAdBgNV
|
3133 |
+
HQ4EFgQUBx/S55zawm6iQLSwelAQUHTEyL0wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
|
3134 |
+
AQYwDQYJKoZIhvcNAQEFBQADggEBAIlXshZ6qML91tmbmzTCnLQyFE2npN/svqe++EPbkTfOtDIu
|
3135 |
+
UFUaNU52Q3Eg75N3ThVwLofDwR1t3Mu1J9QsVtFSUzpE0nPIxBsFZVpikpzuQY0x2+c06lkh1QF6
|
3136 |
+
12S4ZDnNye2v7UsDSKegmQGA3GWjNq5lWUhPgkvIZfFXHeVZLgo/bNjR9eUJtGxUAArgFU2HdW23
|
3137 |
+
WJZa3W3SAKD0m0i+wzekujbgfIeFlxoVot4uolu9rxj5kFDNcFn4J2dHy8egBzp90SxdbBk6ZrV9
|
3138 |
+
/ZFvgrG+CJPbFEfxojfHRZ48x3evZKiT3/Zpg4Jg8klCNO1aAFSFHBY2kgxc+qatv9s=
|
3139 |
+
-----END CERTIFICATE-----
|
3140 |
+
|
3141 |
+
AffirmTrust Premium
|
3142 |
+
===================
|
3143 |
+
-----BEGIN CERTIFICATE-----
|
3144 |
+
MIIFRjCCAy6gAwIBAgIIbYwURrGmCu4wDQYJKoZIhvcNAQEMBQAwQTELMAkGA1UEBhMCVVMxFDAS
|
3145 |
+
BgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVzdCBQcmVtaXVtMB4XDTEwMDEy
|
3146 |
+
OTE0MTAzNloXDTQwMTIzMTE0MTAzNlowQTELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRy
|
3147 |
+
dXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVzdCBQcmVtaXVtMIICIjANBgkqhkiG9w0BAQEFAAOCAg8A
|
3148 |
+
MIICCgKCAgEAxBLfqV/+Qd3d9Z+K4/as4Tx4mrzY8H96oDMq3I0gW64tb+eT2TZwamjPjlGjhVtn
|
3149 |
+
BKAQJG9dKILBl1fYSCkTtuG+kU3fhQxTGJoeJKJPj/CihQvL9Cl/0qRY7iZNyaqoe5rZ+jjeRFcV
|
3150 |
+
5fiMyNlI4g0WJx0eyIOFJbe6qlVBzAMiSy2RjYvmia9mx+n/K+k8rNrSs8PhaJyJ+HoAVt70VZVs
|
3151 |
+
+7pk3WKL3wt3MutizCaam7uqYoNMtAZ6MMgpv+0GTZe5HMQxK9VfvFMSF5yZVylmd2EhMQcuJUmd
|
3152 |
+
GPLu8ytxjLW6OQdJd/zvLpKQBY0tL3d770O/Nbua2Plzpyzy0FfuKE4mX4+QaAkvuPjcBukumj5R
|
3153 |
+
p9EixAqnOEhss/n/fauGV+O61oV4d7pD6kh/9ti+I20ev9E2bFhc8e6kGVQa9QPSdubhjL08s9NI
|
3154 |
+
S+LI+H+SqHZGnEJlPqQewQcDWkYtuJfzt9WyVSHvutxMAJf7FJUnM7/oQ0dG0giZFmA7mn7S5u04
|
3155 |
+
6uwBHjxIVkkJx0w3AJ6IDsBz4W9m6XJHMD4Q5QsDyZpCAGzFlH5hxIrff4IaC1nEWTJ3s7xgaVY5
|
3156 |
+
/bQGeyzWZDbZvUjthB9+pSKPKrhC9IK31FOQeE4tGv2Bb0TXOwF0lkLgAOIua+rF7nKsu7/+6qqo
|
3157 |
+
+Nz2snmKtmcCAwEAAaNCMEAwHQYDVR0OBBYEFJ3AZ6YMItkm9UWrpmVSESfYRaxjMA8GA1UdEwEB
|
3158 |
+
/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBDAUAA4ICAQCzV00QYk465KzquByv
|
3159 |
+
MiPIs0laUZx2KI15qldGF9X1Uva3ROgIRL8YhNILgM3FEv0AVQVhh0HctSSePMTYyPtwni94loMg
|
3160 |
+
Nt58D2kTiKV1NpgIpsbfrM7jWNa3Pt668+s0QNiigfV4Py/VpfzZotReBA4Xrf5B8OWycvpEgjNC
|
3161 |
+
6C1Y91aMYj+6QrCcDFx+LmUmXFNPALJ4fqENmS2NuB2OosSw/WDQMKSOyARiqcTtNd56l+0OOF6S
|
3162 |
+
L5Nwpamcb6d9Ex1+xghIsV5n61EIJenmJWtSKZGc0jlzCFfemQa0W50QBuHCAKi4HEoCChTQwUHK
|
3163 |
+
+4w1IX2COPKpVJEZNZOUbWo6xbLQu4mGk+ibyQ86p3q4ofB4Rvr8Ny/lioTz3/4E2aFooC8k4gmV
|
3164 |
+
BtWVyuEklut89pMFu+1z6S3RdTnX5yTb2E5fQ4+e0BQ5v1VwSJlXMbSc7kqYA5YwH2AG7hsj/oFg
|
3165 |
+
IxpHYoWlzBk0gG+zrBrjn/B7SK3VAdlntqlyk+otZrWyuOQ9PLLvTIzq6we/qzWaVYa8GKa1qF60
|
3166 |
+
g2xraUDTn9zxw2lrueFtCfTxqlB2Cnp9ehehVZZCmTEJ3WARjQUwfuaORtGdFNrHF+QFlozEJLUb
|
3167 |
+
zxQHskD4o55BhrwE0GuWyCqANP2/7waj3VjFhT0+j/6eKeC2uAloGRwYQw==
|
3168 |
+
-----END CERTIFICATE-----
|
3169 |
+
|
3170 |
+
AffirmTrust Premium ECC
|
3171 |
+
=======================
|
3172 |
+
-----BEGIN CERTIFICATE-----
|
3173 |
+
MIIB/jCCAYWgAwIBAgIIdJclisc/elQwCgYIKoZIzj0EAwMwRTELMAkGA1UEBhMCVVMxFDASBgNV
|
3174 |
+
BAoMC0FmZmlybVRydXN0MSAwHgYDVQQDDBdBZmZpcm1UcnVzdCBQcmVtaXVtIEVDQzAeFw0xMDAx
|
3175 |
+
MjkxNDIwMjRaFw00MDEyMzExNDIwMjRaMEUxCzAJBgNVBAYTAlVTMRQwEgYDVQQKDAtBZmZpcm1U
|
3176 |
+
cnVzdDEgMB4GA1UEAwwXQWZmaXJtVHJ1c3QgUHJlbWl1bSBFQ0MwdjAQBgcqhkjOPQIBBgUrgQQA
|
3177 |
+
IgNiAAQNMF4bFZ0D0KF5Nbc6PJJ6yhUczWLznCZcBz3lVPqj1swS6vQUX+iOGasvLkjmrBhDeKzQ
|
3178 |
+
N8O9ss0s5kfiGuZjuD0uL3jET9v0D6RoTFVya5UdThhClXjMNzyR4ptlKymjQjBAMB0GA1UdDgQW
|
3179 |
+
BBSaryl6wBE1NSZRMADDav5A1a7WPDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAK
|
3180 |
+
BggqhkjOPQQDAwNnADBkAjAXCfOHiFBar8jAQr9HX/VsaobgxCd05DhT1wV/GzTjxi+zygk8N53X
|
3181 |
+
57hG8f2h4nECMEJZh0PUUd+60wkyWs6Iflc9nF9Ca/UHLbXwgpP5WW+uZPpY5Yse42O+tYHNbwKM
|
3182 |
+
eQ==
|
3183 |
+
-----END CERTIFICATE-----
|
3184 |
+
|
3185 |
+
Certum Trusted Network CA
|
3186 |
+
=========================
|
3187 |
+
-----BEGIN CERTIFICATE-----
|
3188 |
+
MIIDuzCCAqOgAwIBAgIDBETAMA0GCSqGSIb3DQEBBQUAMH4xCzAJBgNVBAYTAlBMMSIwIAYDVQQK
|
3189 |
+
ExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlv
|
3190 |
+
biBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBUcnVzdGVkIE5ldHdvcmsgQ0EwHhcNMDgxMDIy
|
3191 |
+
MTIwNzM3WhcNMjkxMjMxMTIwNzM3WjB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBU
|
3192 |
+
ZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5
|
3193 |
+
MSIwIAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMIIBIjANBgkqhkiG9w0BAQEFAAOC
|
3194 |
+
AQ8AMIIBCgKCAQEA4/t9o3K6wvDJFIf1awFO4W5AB7ptJ11/91sts1rHUV+rpDKmYYe2bg+G0jAC
|
3195 |
+
l/jXaVehGDldamR5xgFZrDwxSjh80gTSSyjoIF87B6LMTXPb865Px1bVWqeWifrzq2jUI4ZZJ88J
|
3196 |
+
J7ysbnKDHDBy3+Ci6dLhdHUZvSqeexVUBBvXQzmtVSjF4hq79MDkrjhJM8x2hZ85RdKknvISjFH4
|
3197 |
+
fOQtf/WsX+sWn7Et0brMkUJ3TCXJkDhv2/DM+44el1k+1WBO5gUo7Ul5E0u6SNsv+XLTOcr+H9g0
|
3198 |
+
cvW0QM8xAcPs3hEtF10fuFDRXhmnad4HMyjKUJX5p1TLVIZQRan5SQIDAQABo0IwQDAPBgNVHRMB
|
3199 |
+
Af8EBTADAQH/MB0GA1UdDgQWBBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNVHQ8BAf8EBAMCAQYw
|
3200 |
+
DQYJKoZIhvcNAQEFBQADggEBAKaorSLOAT2mo/9i0Eidi15ysHhE49wcrwn9I0j6vSrEuVUEtRCj
|
3201 |
+
jSfeC4Jj0O7eDDd5QVsisrCaQVymcODU0HfLI9MA4GxWL+FpDQ3Zqr8hgVDZBqWo/5U30Kr+4rP1
|
3202 |
+
mS1FhIrlQgnXdAIv94nYmem8J9RHjboNRhx3zxSkHLmkMcScKHQDNP8zGSal6Q10tz6XxnboJ5aj
|
3203 |
+
Zt3hrvJBW8qYVoNzcOSGGtIxQbovvi0TWnZvTuhOgQ4/WwMioBK+ZlgRSssDxLQqKi2WF+A5VLxI
|
3204 |
+
03YnnZotBqbJ7DnSq9ufmgsnAjUpsUCV5/nonFWIGUbWtzT1fs45mtk48VH3Tyw=
|
3205 |
+
-----END CERTIFICATE-----
|
3206 |
+
|
3207 |
+
Certinomis - Autorité Racine
|
3208 |
+
=============================
|
3209 |
+
-----BEGIN CERTIFICATE-----
|
3210 |
+
MIIFnDCCA4SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJGUjETMBEGA1UEChMK
|
3211 |
+
Q2VydGlub21pczEXMBUGA1UECxMOMDAwMiA0MzM5OTg5MDMxJjAkBgNVBAMMHUNlcnRpbm9taXMg
|
3212 |
+
LSBBdXRvcml0w6kgUmFjaW5lMB4XDTA4MDkxNzA4Mjg1OVoXDTI4MDkxNzA4Mjg1OVowYzELMAkG
|
3213 |
+
A1UEBhMCRlIxEzARBgNVBAoTCkNlcnRpbm9taXMxFzAVBgNVBAsTDjAwMDIgNDMzOTk4OTAzMSYw
|
3214 |
+
JAYDVQQDDB1DZXJ0aW5vbWlzIC0gQXV0b3JpdMOpIFJhY2luZTCCAiIwDQYJKoZIhvcNAQEBBQAD
|
3215 |
+
ggIPADCCAgoCggIBAJ2Fn4bT46/HsmtuM+Cet0I0VZ35gb5j2CN2DpdUzZlMGvE5x4jYF1AMnmHa
|
3216 |
+
wE5V3udauHpOd4cN5bjr+p5eex7Ezyh0x5P1FMYiKAT5kcOrJ3NqDi5N8y4oH3DfVS9O7cdxbwly
|
3217 |
+
Lu3VMpfQ8Vh30WC8Tl7bmoT2R2FFK/ZQpn9qcSdIhDWerP5pqZ56XjUl+rSnSTV3lqc2W+HN3yNw
|
3218 |
+
2F1MpQiD8aYkOBOo7C+ooWfHpi2GR+6K/OybDnT0K0kCe5B1jPyZOQE51kqJ5Z52qz6WKDgmi92N
|
3219 |
+
jMD2AR5vpTESOH2VwnHu7XSu5DaiQ3XV8QCb4uTXzEIDS3h65X27uK4uIJPT5GHfceF2Z5c/tt9q
|
3220 |
+
c1pkIuVC28+BA5PY9OMQ4HL2AHCs8MF6DwV/zzRpRbWT5BnbUhYjBYkOjUjkJW+zeL9i9Qf6lSTC
|
3221 |
+
lrLooyPCXQP8w9PlfMl1I9f09bze5N/NgL+RiH2nE7Q5uiy6vdFrzPOlKO1Enn1So2+WLhl+HPNb
|
3222 |
+
xxaOu2B9d2ZHVIIAEWBsMsGoOBvrbpgT1u449fCfDu/+MYHB0iSVL1N6aaLwD4ZFjliCK0wi1F6g
|
3223 |
+
530mJ0jfJUaNSih8hp75mxpZuWW/Bd22Ql095gBIgl4g9xGC3srYn+Y3RyYe63j3YcNBZFgCQfna
|
3224 |
+
4NH4+ej9Uji29YnfAgMBAAGjWzBZMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0G
|
3225 |
+
A1UdDgQWBBQNjLZh2kS40RR9w759XkjwzspqsDAXBgNVHSAEEDAOMAwGCiqBegFWAgIAAQEwDQYJ
|
3226 |
+
KoZIhvcNAQEFBQADggIBACQ+YAZ+He86PtvqrxyaLAEL9MW12Ukx9F1BjYkMTv9sov3/4gbIOZ/x
|
3227 |
+
WqndIlgVqIrTseYyCYIDbNc/CMf4uboAbbnW/FIyXaR/pDGUu7ZMOH8oMDX/nyNTt7buFHAAQCva
|
3228 |
+
R6s0fl6nVjBhK4tDrP22iCj1a7Y+YEq6QpA0Z43q619FVDsXrIvkxmUP7tCMXWY5zjKn2BCXwH40
|
3229 |
+
nJ+U8/aGH88bc62UeYdocMMzpXDn2NU4lG9jeeu/Cg4I58UvD0KgKxRA/yHgBcUn4YQRE7rWhh1B
|
3230 |
+
CxMjidPJC+iKunqjo3M3NYB9Ergzd0A4wPpeMNLytqOx1qKVl4GbUu1pTP+A5FPbVFsDbVRfsbjv
|
3231 |
+
JL1vnxHDx2TCDyhihWZeGnuyt++uNckZM6i4J9szVb9o4XVIRFb7zdNIu0eJOqxp9YDG5ERQL1TE
|
3232 |
+
qkPFMTFYvZbF6nVsmnWxTfj3l/+WFvKXTej28xH5On2KOG4Ey+HTRRWqpdEdnV1j6CTmNhTih60b
|
3233 |
+
WfVEm/vXd3wfAXBioSAaosUaKPQhA+4u2cGA6rnZgtZbdsLLO7XSAPCjDuGtbkD326C00EauFddE
|
3234 |
+
wk01+dIL8hf2rGbVJLJP0RyZwG71fet0BLj5TXcJ17TPBzAJ8bgAVtkXFhYKK4bfjwEZGuW7gmP/
|
3235 |
+
vgt2Fl43N+bYdJeimUV5
|
3236 |
+
-----END CERTIFICATE-----
|
3237 |
+
|
3238 |
+
Root CA Generalitat Valenciana
|
3239 |
+
==============================
|
3240 |
+
-----BEGIN CERTIFICATE-----
|
3241 |
+
MIIGizCCBXOgAwIBAgIEO0XlaDANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJFUzEfMB0GA1UE
|
3242 |
+
ChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UECxMGUEtJR1ZBMScwJQYDVQQDEx5Sb290
|
3243 |
+
IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmEwHhcNMDEwNzA2MTYyMjQ3WhcNMjEwNzAxMTUyMjQ3
|
3244 |
+
WjBoMQswCQYDVQQGEwJFUzEfMB0GA1UEChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UE
|
3245 |
+
CxMGUEtJR1ZBMScwJQYDVQQDEx5Sb290IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmEwggEiMA0G
|
3246 |
+
CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDGKqtXETcvIorKA3Qdyu0togu8M1JAJke+WmmmO3I2
|
3247 |
+
F0zo37i7L3bhQEZ0ZQKQUgi0/6iMweDHiVYQOTPvaLRfX9ptI6GJXiKjSgbwJ/BXufjpTjJ3Cj9B
|
3248 |
+
ZPPrZe52/lSqfR0grvPXdMIKX/UIKFIIzFVd0g/bmoGlu6GzwZTNVOAydTGRGmKy3nXiz0+J2ZGQ
|
3249 |
+
D0EbtFpKd71ng+CT516nDOeB0/RSrFOyA8dEJvt55cs0YFAQexvba9dHq198aMpunUEDEO5rmXte
|
3250 |
+
JajCq+TA81yc477OMUxkHl6AovWDfgzWyoxVjr7gvkkHD6MkQXpYHYTqWBLI4bft75PelAgxAgMB
|
3251 |
+
AAGjggM7MIIDNzAyBggrBgEFBQcBAQQmMCQwIgYIKwYBBQUHMAGGFmh0dHA6Ly9vY3NwLnBraS5n
|
3252 |
+
dmEuZXMwEgYDVR0TAQH/BAgwBgEB/wIBAjCCAjQGA1UdIASCAiswggInMIICIwYKKwYBBAG/VQIB
|
3253 |
+
ADCCAhMwggHoBggrBgEFBQcCAjCCAdoeggHWAEEAdQB0AG8AcgBpAGQAYQBkACAAZABlACAAQwBl
|
3254 |
+
AHIAdABpAGYAaQBjAGEAYwBpAPMAbgAgAFIAYQDtAHoAIABkAGUAIABsAGEAIABHAGUAbgBlAHIA
|
3255 |
+
YQBsAGkAdABhAHQAIABWAGEAbABlAG4AYwBpAGEAbgBhAC4ADQAKAEwAYQAgAEQAZQBjAGwAYQBy
|
3256 |
+
AGEAYwBpAPMAbgAgAGQAZQAgAFAAcgDhAGMAdABpAGMAYQBzACAAZABlACAAQwBlAHIAdABpAGYA
|
3257 |
+
aQBjAGEAYwBpAPMAbgAgAHEAdQBlACAAcgBpAGcAZQAgAGUAbAAgAGYAdQBuAGMAaQBvAG4AYQBt
|
3258 |
+
AGkAZQBuAHQAbwAgAGQAZQAgAGwAYQAgAHAAcgBlAHMAZQBuAHQAZQAgAEEAdQB0AG8AcgBpAGQA
|
3259 |
+
YQBkACAAZABlACAAQwBlAHIAdABpAGYAaQBjAGEAYwBpAPMAbgAgAHMAZQAgAGUAbgBjAHUAZQBu
|
3260 |
+
AHQAcgBhACAAZQBuACAAbABhACAAZABpAHIAZQBjAGMAaQDzAG4AIAB3AGUAYgAgAGgAdAB0AHAA
|
3261 |
+
OgAvAC8AdwB3AHcALgBwAGsAaQAuAGcAdgBhAC4AZQBzAC8AYwBwAHMwJQYIKwYBBQUHAgEWGWh0
|
3262 |
+
dHA6Ly93d3cucGtpLmd2YS5lcy9jcHMwHQYDVR0OBBYEFHs100DSHHgZZu90ECjcPk+yeAT8MIGV
|
3263 |
+
BgNVHSMEgY0wgYqAFHs100DSHHgZZu90ECjcPk+yeAT8oWykajBoMQswCQYDVQQGEwJFUzEfMB0G
|
3264 |
+
A1UEChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UECxMGUEtJR1ZBMScwJQYDVQQDEx5S
|
3265 |
+
b290IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmGCBDtF5WgwDQYJKoZIhvcNAQEFBQADggEBACRh
|
3266 |
+
TvW1yEICKrNcda3FbcrnlD+laJWIwVTAEGmiEi8YPyVQqHxK6sYJ2fR1xkDar1CdPaUWu20xxsdz
|
3267 |
+
Ckj+IHLtb8zog2EWRpABlUt9jppSCS/2bxzkoXHPjCpaF3ODR00PNvsETUlR4hTJZGH71BTg9J63
|
3268 |
+
NI8KJr2XXPR5OkowGcytT6CYirQxlyric21+eLj4iIlPsSKRZEv1UN4D2+XFducTZnV+ZfsBn5OH
|
3269 |
+
iJ35Rld8TWCvmHMTI6QgkYH60GFmuH3Rr9ZvHmw96RH9qfmCIoaZM3Fa6hlXPZHNqcCjbgcTpsnt
|
3270 |
+
+GijnsNacgmHKNHEc8RzGF9QdRYxn7fofMM=
|
3271 |
+
-----END CERTIFICATE-----
|
3272 |
+
|
3273 |
+
A-Trust-nQual-03
|
3274 |
+
================
|
3275 |
+
-----BEGIN CERTIFICATE-----
|
3276 |
+
MIIDzzCCAregAwIBAgIDAWweMA0GCSqGSIb3DQEBBQUAMIGNMQswCQYDVQQGEwJBVDFIMEYGA1UE
|
3277 |
+
Cgw/QS1UcnVzdCBHZXMuIGYuIFNpY2hlcmhlaXRzc3lzdGVtZSBpbSBlbGVrdHIuIERhdGVudmVy
|
3278 |
+
a2VociBHbWJIMRkwFwYDVQQLDBBBLVRydXN0LW5RdWFsLTAzMRkwFwYDVQQDDBBBLVRydXN0LW5R
|
3279 |
+
dWFsLTAzMB4XDTA1MDgxNzIyMDAwMFoXDTE1MDgxNzIyMDAwMFowgY0xCzAJBgNVBAYTAkFUMUgw
|
3280 |
+
RgYDVQQKDD9BLVRydXN0IEdlcy4gZi4gU2ljaGVyaGVpdHNzeXN0ZW1lIGltIGVsZWt0ci4gRGF0
|
3281 |
+
ZW52ZXJrZWhyIEdtYkgxGTAXBgNVBAsMEEEtVHJ1c3QtblF1YWwtMDMxGTAXBgNVBAMMEEEtVHJ1
|
3282 |
+
c3QtblF1YWwtMDMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtPWFuA/OQO8BBC4SA
|
3283 |
+
zewqo51ru27CQoT3URThoKgtUaNR8t4j8DRE/5TrzAUjlUC5B3ilJfYKvUWG6Nm9wASOhURh73+n
|
3284 |
+
yfrBJcyFLGM/BWBzSQXgYHiVEEvc+RFZznF/QJuKqiTfC0Li21a8StKlDJu3Qz7dg9MmEALP6iPE
|
3285 |
+
SU7l0+m0iKsMrmKS1GWH2WrX9IWf5DMiJaXlyDO6w8dB3F/GaswADm0yqLaHNgBid5seHzTLkDx4
|
3286 |
+
iHQF63n1k3Flyp3HaxgtPVxO59X4PzF9j4fsCiIvI+n+u33J4PTs63zEsMMtYrWacdaxaujs2e3V
|
3287 |
+
cuy+VwHOBVWf3tFgiBCzAgMBAAGjNjA0MA8GA1UdEwEB/wQFMAMBAf8wEQYDVR0OBAoECERqlWdV
|
3288 |
+
eRFPMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAVdRU0VlIXLOThaq/Yy/kgM40
|
3289 |
+
ozRiPvbY7meIMQQDbwvUB/tOdQ/TLtPAF8fGKOwGDREkDg6lXb+MshOWcdzUzg4NCmgybLlBMRmr
|
3290 |
+
sQd7TZjTXLDR8KdCoLXEjq/+8T/0709GAHbrAvv5ndJAlseIOrifEXnzgGWovR/TeIGgUUw3tKZd
|
3291 |
+
JXDRZslo+S4RFGjxVJgIrCaSD96JntT6s3kr0qN51OyLrIdTaEJMUVF0HhsnLuP1Hyl0Te2v9+GS
|
3292 |
+
mYHovjrHF1D2t8b8m7CKa9aIA5GPBnc6hQLdmNVDeD/GMBWsm2vLV7eJUYs66MmEDNuxUCAKGkq6
|
3293 |
+
ahq97BvIxYSazQ==
|
3294 |
+
-----END CERTIFICATE-----
|
3295 |
+
|
3296 |
+
TWCA Root Certification Authority
|
3297 |
+
=================================
|
3298 |
+
-----BEGIN CERTIFICATE-----
|
3299 |
+
MIIDezCCAmOgAwIBAgIBATANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQGEwJUVzESMBAGA1UECgwJ
|
3300 |
+
VEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NBIFJvb3QgQ2VydGlmaWNh
|
3301 |
+
dGlvbiBBdXRob3JpdHkwHhcNMDgwODI4MDcyNDMzWhcNMzAxMjMxMTU1OTU5WjBfMQswCQYDVQQG
|
3302 |
+
EwJUVzESMBAGA1UECgwJVEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NB
|
3303 |
+
IFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
|
3304 |
+
AoIBAQCwfnK4pAOU5qfeCTiRShFAh6d8WWQUe7UREN3+v9XAu1bihSX0NXIP+FPQQeFEAcK0HMMx
|
3305 |
+
QhZHhTMidrIKbw/lJVBPhYa+v5guEGcevhEFhgWQxFnQfHgQsIBct+HHK3XLfJ+utdGdIzdjp9xC
|
3306 |
+
oi2SBBtQwXu4PhvJVgSLL1KbralW6cH/ralYhzC2gfeXRfwZVzsrb+RH9JlF/h3x+JejiB03HFyP
|
3307 |
+
4HYlmlD4oFT/RJB2I9IyxsOrBr/8+7/zrX2SYgJbKdM1o5OaQ2RgXbL6Mv87BK9NQGr5x+PvI/1r
|
3308 |
+
y+UPizgN7gr8/g+YnzAx3WxSZfmLgb4i4RxYA7qRG4kHAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIB
|
3309 |
+
BjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqOFsmjd6LWvJPelSDGRjjCDWmujANBgkqhkiG
|
3310 |
+
9w0BAQUFAAOCAQEAPNV3PdrfibqHDAhUaiBQkr6wQT25JmSDCi/oQMCXKCeCMErJk/9q56YAf4lC
|
3311 |
+
mtYR5VPOL8zy2gXE/uJQxDqGfczafhAJO5I1KlOy/usrBdlsXebQ79NqZp4VKIV66IIArB6nCWlW
|
3312 |
+
QtNoURi+VJq/REG6Sb4gumlc7rh3zc5sH62Dlhh9DrUUOYTxKOkto557HnpyWoOzeW/vtPzQCqVY
|
3313 |
+
T0bf+215WfKEIlKuD8z7fDvnaspHYcN6+NOSBB+4IIThNlQWx0DeO4pz3N/GCUzf7Nr/1FNCocny
|
3314 |
+
Yh0igzyXxfkZYiesZSLX0zzG5Y6yU8xJzrww/nsOM5D77dIUkR8Hrw==
|
3315 |
+
-----END CERTIFICATE-----
|
3316 |
+
|
3317 |
+
Security Communication RootCA2
|
3318 |
+
==============================
|
3319 |
+
-----BEGIN CERTIFICATE-----
|
3320 |
+
MIIDdzCCAl+gAwIBAgIBADANBgkqhkiG9w0BAQsFADBdMQswCQYDVQQGEwJKUDElMCMGA1UEChMc
|
3321 |
+
U0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEnMCUGA1UECxMeU2VjdXJpdHkgQ29tbXVuaWNh
|
3322 |
+
dGlvbiBSb290Q0EyMB4XDTA5MDUyOTA1MDAzOVoXDTI5MDUyOTA1MDAzOVowXTELMAkGA1UEBhMC
|
3323 |
+
SlAxJTAjBgNVBAoTHFNFQ09NIFRydXN0IFN5c3RlbXMgQ08uLExURC4xJzAlBgNVBAsTHlNlY3Vy
|
3324 |
+
aXR5IENvbW11bmljYXRpb24gUm9vdENBMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
|
3325 |
+
ANAVOVKxUrO6xVmCxF1SrjpDZYBLx/KWvNs2l9amZIyoXvDjChz335c9S672XewhtUGrzbl+dp++
|
3326 |
+
+T42NKA7wfYxEUV0kz1XgMX5iZnK5atq1LXaQZAQwdbWQonCv/Q4EpVMVAX3NuRFg3sUZdbcDE3R
|
3327 |
+
3n4MqzvEFb46VqZab3ZpUql6ucjrappdUtAtCms1FgkQhNBqyjoGADdH5H5XTz+L62e4iKrFvlNV
|
3328 |
+
spHEfbmwhRkGeC7bYRr6hfVKkaHnFtWOojnflLhwHyg/i/xAXmODPIMqGplrz95Zajv8bxbXH/1K
|
3329 |
+
EOtOghY6rCcMU/Gt1SSwawNQwS08Ft1ENCcadfsCAwEAAaNCMEAwHQYDVR0OBBYEFAqFqXdlBZh8
|
3330 |
+
QIH4D5csOPEK7DzPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEB
|
3331 |
+
CwUAA4IBAQBMOqNErLlFsceTfsgLCkLfZOoc7llsCLqJX2rKSpWeeo8HxdpFcoJxDjrSzG+ntKEj
|
3332 |
+
u/Ykn8sX/oymzsLS28yN/HH8AynBbF0zX2S2ZTuJbxh2ePXcokgfGT+Ok+vx+hfuzU7jBBJV1uXk
|
3333 |
+
3fs+BXziHV7Gp7yXT2g69ekuCkO2r1dcYmh8t/2jioSgrGK+KwmHNPBqAbubKVY8/gA3zyNs8U6q
|
3334 |
+
tnRGEmyR7jTV7JqR50S+kDFy1UkC9gLl9B/rfNmWVan/7Ir5mUf/NVoCqgTLiluHcSmRvaS0eg29
|
3335 |
+
mvVXIwAHIRc/SjnRBUkLp7Y3gaVdjKozXoEofKd9J+sAro03
|
3336 |
+
-----END CERTIFICATE-----
|
3337 |
+
|
3338 |
+
EC-ACC
|
3339 |
+
======
|
3340 |
+
-----BEGIN CERTIFICATE-----
|
3341 |
+
MIIFVjCCBD6gAwIBAgIQ7is969Qh3hSoYqwE893EATANBgkqhkiG9w0BAQUFADCB8zELMAkGA1UE
|
3342 |
+
BhMCRVMxOzA5BgNVBAoTMkFnZW5jaWEgQ2F0YWxhbmEgZGUgQ2VydGlmaWNhY2lvIChOSUYgUS0w
|
3343 |
+
ODAxMTc2LUkpMSgwJgYDVQQLEx9TZXJ2ZWlzIFB1YmxpY3MgZGUgQ2VydGlmaWNhY2lvMTUwMwYD
|
3344 |
+
VQQLEyxWZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5ldC92ZXJhcnJlbCAoYykwMzE1MDMGA1UE
|
3345 |
+
CxMsSmVyYXJxdWlhIEVudGl0YXRzIGRlIENlcnRpZmljYWNpbyBDYXRhbGFuZXMxDzANBgNVBAMT
|
3346 |
+
BkVDLUFDQzAeFw0wMzAxMDcyMzAwMDBaFw0zMTAxMDcyMjU5NTlaMIHzMQswCQYDVQQGEwJFUzE7
|
3347 |
+
MDkGA1UEChMyQWdlbmNpYSBDYXRhbGFuYSBkZSBDZXJ0aWZpY2FjaW8gKE5JRiBRLTA4MDExNzYt
|
3348 |
+
SSkxKDAmBgNVBAsTH1NlcnZlaXMgUHVibGljcyBkZSBDZXJ0aWZpY2FjaW8xNTAzBgNVBAsTLFZl
|
3349 |
+
Z2V1IGh0dHBzOi8vd3d3LmNhdGNlcnQubmV0L3ZlcmFycmVsIChjKTAzMTUwMwYDVQQLEyxKZXJh
|
3350 |
+
cnF1aWEgRW50aXRhdHMgZGUgQ2VydGlmaWNhY2lvIENhdGFsYW5lczEPMA0GA1UEAxMGRUMtQUND
|
3351 |
+
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsyLHT+KXQpWIR4NA9h0X84NzJB5R85iK
|
3352 |
+
w5K4/0CQBXCHYMkAqbWUZRkiFRfCQ2xmRJoNBD45b6VLeqpjt4pEndljkYRm4CgPukLjbo73FCeT
|
3353 |
+
ae6RDqNfDrHrZqJyTxIThmV6PttPB/SnCWDaOkKZx7J/sxaVHMf5NLWUhdWZXqBIoH7nF2W4onW4
|
3354 |
+
HvPlQn2v7fOKSGRdghST2MDk/7NQcvJ29rNdQlB50JQ+awwAvthrDk4q7D7SzIKiGGUzE3eeml0a
|
3355 |
+
E9jD2z3Il3rucO2n5nzbcc8tlGLfbdb1OL4/pYUKGbio2Al1QnDE6u/LDsg0qBIimAy4E5S2S+zw
|
3356 |
+
0JDnJwIDAQABo4HjMIHgMB0GA1UdEQQWMBSBEmVjX2FjY0BjYXRjZXJ0Lm5ldDAPBgNVHRMBAf8E
|
3357 |
+
BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUoMOLRKo3pUW/l4Ba0fF4opvpXY0wfwYD
|
3358 |
+
VR0gBHgwdjB0BgsrBgEEAfV4AQMBCjBlMCwGCCsGAQUFBwIBFiBodHRwczovL3d3dy5jYXRjZXJ0
|
3359 |
+
Lm5ldC92ZXJhcnJlbDA1BggrBgEFBQcCAjApGidWZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5l
|
3360 |
+
dC92ZXJhcnJlbCAwDQYJKoZIhvcNAQEFBQADggEBAKBIW4IB9k1IuDlVNZyAelOZ1Vr/sXE7zDkJ
|
3361 |
+
lF7W2u++AVtd0x7Y/X1PzaBB4DSTv8vihpw3kpBWHNzrKQXlxJ7HNd+KDM3FIUPpqojlNcAZQmNa
|
3362 |
+
Al6kSBg6hW/cnbw/nZzBh7h6YQjpdwt/cKt63dmXLGQehb+8dJahw3oS7AwaboMMPOhyRp/7SNVe
|
3363 |
+
l+axofjk70YllJyJ22k4vuxcDlbHZVHlUIiIv0LVKz3l+bqeLrPK9HOSAgu+TGbrIP65y7WZf+a2
|
3364 |
+
E/rKS03Z7lNGBjvGTq2TWoF+bCpLagVFjPIhpDGQh2xlnJ2lYJU6Un/10asIbvPuW/mIPX64b24D
|
3365 |
+
5EI=
|
3366 |
+
-----END CERTIFICATE-----
|
3367 |
+
|
3368 |
+
Hellenic Academic and Research Institutions RootCA 2011
|
3369 |
+
=======================================================
|
3370 |
+
-----BEGIN CERTIFICATE-----
|
3371 |
+
MIIEMTCCAxmgAwIBAgIBADANBgkqhkiG9w0BAQUFADCBlTELMAkGA1UEBhMCR1IxRDBCBgNVBAoT
|
3372 |
+
O0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ2VydC4gQXV0aG9y
|
3373 |
+
aXR5MUAwPgYDVQQDEzdIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25z
|
3374 |
+
IFJvb3RDQSAyMDExMB4XDTExMTIwNjEzNDk1MloXDTMxMTIwMTEzNDk1MlowgZUxCzAJBgNVBAYT
|
3375 |
+
AkdSMUQwQgYDVQQKEztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25z
|
3376 |
+
IENlcnQuIEF1dGhvcml0eTFAMD4GA1UEAxM3SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNo
|
3377 |
+
IEluc3RpdHV0aW9ucyBSb290Q0EgMjAxMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
|
3378 |
+
AKlTAOMupvaO+mDYLZU++CwqVE7NuYRhlFhPjz2L5EPzdYmNUeTDN9KKiE15HrcS3UN4SoqS5tdI
|
3379 |
+
1Q+kOilENbgH9mgdVc04UfCMJDGFr4PJfel3r+0ae50X+bOdOFAPplp5kYCvN66m0zH7tSYJnTxa
|
3380 |
+
71HFK9+WXesyHgLacEnsbgzImjeN9/E2YEsmLIKe0HjzDQ9jpFEw4fkrJxIH2Oq9GGKYsFk3fb7u
|
3381 |
+
8yBRQlqD75O6aRXxYp2fmTmCobd0LovUxQt7L/DICto9eQqakxylKHJzkUOap9FNhYS5qXSPFEDH
|
3382 |
+
3N6sQWRstBmbAmNtJGSPRLIl6s5ddAxjMlyNh+UCAwEAAaOBiTCBhjAPBgNVHRMBAf8EBTADAQH/
|
3383 |
+
MAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQUppFC/RNhSiOeCKQp5dgTBCPuQSUwRwYDVR0eBEAwPqA8
|
3384 |
+
MAWCAy5ncjAFggMuZXUwBoIELmVkdTAGggQub3JnMAWBAy5ncjAFgQMuZXUwBoEELmVkdTAGgQQu
|
3385 |
+
b3JnMA0GCSqGSIb3DQEBBQUAA4IBAQAf73lB4XtuP7KMhjdCSk4cNx6NZrokgclPEg8hwAOXhiVt
|
3386 |
+
XdMiKahsog2p6z0GW5k6x8zDmjR/qw7IThzh+uTczQ2+vyT+bOdrwg3IBp5OjWEopmr95fZi6hg8
|
3387 |
+
TqBTnbI6nOulnJEWtk2C4AwFSKls9cz4y51JtPACpf1wA+2KIaWuE4ZJwzNzvoc7dIsXRSZMFpGD
|
3388 |
+
/md9zU1jZ/rzAxKWeAaNsWftjj++n08C9bMJL/NMh98qy5V8AcysNnq/onN694/BtZqhFLKPM58N
|
3389 |
+
7yLcZnuEvUUXBj08yrl3NI/K6s8/MT7jiOOASSXIl7WdmplNsDz4SgCbZN2fOUvRJ9e4
|
3390 |
+
-----END CERTIFICATE-----
|
sdk/Aws_v1/lib/requestcore/requestcore.class.php
ADDED
@@ -0,0 +1,1055 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Handles all HTTP requests using cURL and manages the responses.
|
4 |
+
*
|
5 |
+
* @version 2012.01.17
|
6 |
+
* @copyright 2006-2011 Ryan Parman
|
7 |
+
* @copyright 2006-2010 Foleeo Inc.
|
8 |
+
* @copyright 2010-2011 Amazon.com, Inc. or its affiliates.
|
9 |
+
* @copyright 2008-2011 Contributors
|
10 |
+
* @license http://opensource.org/licenses/bsd-license.php Simplified BSD License
|
11 |
+
*/
|
12 |
+
class RequestCore
|
13 |
+
{
|
14 |
+
/**
|
15 |
+
* The URL being requested.
|
16 |
+
*/
|
17 |
+
public $request_url;
|
18 |
+
|
19 |
+
/**
|
20 |
+
* The headers being sent in the request.
|
21 |
+
*/
|
22 |
+
public $request_headers;
|
23 |
+
|
24 |
+
/**
|
25 |
+
* The body being sent in the request.
|
26 |
+
*/
|
27 |
+
public $request_body;
|
28 |
+
|
29 |
+
/**
|
30 |
+
* The response returned by the request.
|
31 |
+
*/
|
32 |
+
public $response;
|
33 |
+
|
34 |
+
/**
|
35 |
+
* The headers returned by the request.
|
36 |
+
*/
|
37 |
+
public $response_headers;
|
38 |
+
|
39 |
+
/**
|
40 |
+
* The body returned by the request.
|
41 |
+
*/
|
42 |
+
public $response_body;
|
43 |
+
|
44 |
+
/**
|
45 |
+
* The HTTP status code returned by the request.
|
46 |
+
*/
|
47 |
+
public $response_code;
|
48 |
+
|
49 |
+
/**
|
50 |
+
* Additional response data.
|
51 |
+
*/
|
52 |
+
public $response_info;
|
53 |
+
|
54 |
+
/**
|
55 |
+
* The handle for the cURL object.
|
56 |
+
*/
|
57 |
+
public $curl_handle;
|
58 |
+
|
59 |
+
/**
|
60 |
+
* The method by which the request is being made.
|
61 |
+
*/
|
62 |
+
public $method;
|
63 |
+
|
64 |
+
/**
|
65 |
+
* Stores the proxy settings to use for the request.
|
66 |
+
*/
|
67 |
+
public $proxy = null;
|
68 |
+
|
69 |
+
/**
|
70 |
+
* The username to use for the request.
|
71 |
+
*/
|
72 |
+
public $username = null;
|
73 |
+
|
74 |
+
/**
|
75 |
+
* The password to use for the request.
|
76 |
+
*/
|
77 |
+
public $password = null;
|
78 |
+
|
79 |
+
/**
|
80 |
+
* Custom CURLOPT settings.
|
81 |
+
*/
|
82 |
+
public $curlopts = null;
|
83 |
+
|
84 |
+
/**
|
85 |
+
* The state of debug mode.
|
86 |
+
*/
|
87 |
+
public $debug_mode = false;
|
88 |
+
|
89 |
+
/**
|
90 |
+
* The default class to use for HTTP Requests (defaults to <RequestCore>).
|
91 |
+
*/
|
92 |
+
public $request_class = 'RequestCore';
|
93 |
+
|
94 |
+
/**
|
95 |
+
* The default class to use for HTTP Responses (defaults to <ResponseCore>).
|
96 |
+
*/
|
97 |
+
public $response_class = 'ResponseCore';
|
98 |
+
|
99 |
+
/**
|
100 |
+
* Default useragent string to use.
|
101 |
+
*/
|
102 |
+
public $useragent = 'RequestCore/1.4.4';
|
103 |
+
|
104 |
+
/**
|
105 |
+
* File to read from while streaming up.
|
106 |
+
*/
|
107 |
+
public $read_file = null;
|
108 |
+
|
109 |
+
/**
|
110 |
+
* The resource to read from while streaming up.
|
111 |
+
*/
|
112 |
+
public $read_stream = null;
|
113 |
+
|
114 |
+
/**
|
115 |
+
* The size of the stream to read from.
|
116 |
+
*/
|
117 |
+
public $read_stream_size = null;
|
118 |
+
|
119 |
+
/**
|
120 |
+
* The length already read from the stream.
|
121 |
+
*/
|
122 |
+
public $read_stream_read = 0;
|
123 |
+
|
124 |
+
/**
|
125 |
+
* File to write to while streaming down.
|
126 |
+
*/
|
127 |
+
public $write_file = null;
|
128 |
+
|
129 |
+
/**
|
130 |
+
* The resource to write to while streaming down.
|
131 |
+
*/
|
132 |
+
public $write_stream = null;
|
133 |
+
|
134 |
+
/**
|
135 |
+
* Stores the intended starting seek position.
|
136 |
+
*/
|
137 |
+
public $seek_position = null;
|
138 |
+
|
139 |
+
/**
|
140 |
+
* The location of the cacert.pem file to use.
|
141 |
+
*/
|
142 |
+
public $cacert_location = false;
|
143 |
+
|
144 |
+
/**
|
145 |
+
* The state of SSL certificate verification.
|
146 |
+
*/
|
147 |
+
public $ssl_verification = true;
|
148 |
+
|
149 |
+
/**
|
150 |
+
* The user-defined callback function to call when a stream is read from.
|
151 |
+
*/
|
152 |
+
public $registered_streaming_read_callback = null;
|
153 |
+
|
154 |
+
/**
|
155 |
+
* The user-defined callback function to call when a stream is written to.
|
156 |
+
*/
|
157 |
+
public $registered_streaming_write_callback = null;
|
158 |
+
|
159 |
+
/**
|
160 |
+
* Whether or not the set_time_limit function should be called.
|
161 |
+
*/
|
162 |
+
public $allow_set_time_limit = true;
|
163 |
+
|
164 |
+
/**
|
165 |
+
* Whether or not to use gzip encoding via CURLOPT_ENCODING
|
166 |
+
*/
|
167 |
+
public $use_gzip_enconding = true;
|
168 |
+
|
169 |
+
|
170 |
+
/*%******************************************************************************************%*/
|
171 |
+
// CONSTANTS
|
172 |
+
|
173 |
+
/**
|
174 |
+
* GET HTTP Method
|
175 |
+
*/
|
176 |
+
const HTTP_GET = 'GET';
|
177 |
+
|
178 |
+
/**
|
179 |
+
* POST HTTP Method
|
180 |
+
*/
|
181 |
+
const HTTP_POST = 'POST';
|
182 |
+
|
183 |
+
/**
|
184 |
+
* PUT HTTP Method
|
185 |
+
*/
|
186 |
+
const HTTP_PUT = 'PUT';
|
187 |
+
|
188 |
+
/**
|
189 |
+
* DELETE HTTP Method
|
190 |
+
*/
|
191 |
+
const HTTP_DELETE = 'DELETE';
|
192 |
+
|
193 |
+
/**
|
194 |
+
* HEAD HTTP Method
|
195 |
+
*/
|
196 |
+
const HTTP_HEAD = 'HEAD';
|
197 |
+
|
198 |
+
|
199 |
+
/*%******************************************************************************************%*/
|
200 |
+
// CONSTRUCTOR/DESTRUCTOR
|
201 |
+
|
202 |
+
/**
|
203 |
+
* Constructs a new instance of this class.
|
204 |
+
*
|
205 |
+
* @param string $url (Optional) The URL to request or service endpoint to query.
|
206 |
+
* @param string $proxy (Optional) The faux-url to use for proxy settings. Takes the following format: `proxy://user:pass@hostname:port`
|
207 |
+
* @param array $helpers (Optional) An associative array of classnames to use for request, and response functionality. Gets passed in automatically by the calling class.
|
208 |
+
* @return $this A reference to the current instance.
|
209 |
+
*/
|
210 |
+
public function __construct($url = null, $proxy = null, $helpers = null)
|
211 |
+
{
|
212 |
+
// Set some default values.
|
213 |
+
$this->request_url = $url;
|
214 |
+
$this->method = self::HTTP_GET;
|
215 |
+
$this->request_headers = array();
|
216 |
+
$this->request_body = '';
|
217 |
+
|
218 |
+
// Determine if set_time_limit can be called
|
219 |
+
if (strpos(ini_get('disable_functions'), 'set_time_limit') !== false)
|
220 |
+
{
|
221 |
+
$this->allow_set_time_limit = false;
|
222 |
+
}
|
223 |
+
|
224 |
+
// Set a new Request class if one was set.
|
225 |
+
if (isset($helpers['request']) && !empty($helpers['request']))
|
226 |
+
{
|
227 |
+
$this->request_class = $helpers['request'];
|
228 |
+
}
|
229 |
+
|
230 |
+
// Set a new Request class if one was set.
|
231 |
+
if (isset($helpers['response']) && !empty($helpers['response']))
|
232 |
+
{
|
233 |
+
$this->response_class = $helpers['response'];
|
234 |
+
}
|
235 |
+
|
236 |
+
if ($proxy)
|
237 |
+
{
|
238 |
+
$this->set_proxy($proxy);
|
239 |
+
}
|
240 |
+
|
241 |
+
return $this;
|
242 |
+
}
|
243 |
+
|
244 |
+
/**
|
245 |
+
* Destructs the instance. Closes opened file handles.
|
246 |
+
*
|
247 |
+
* @return $this A reference to the current instance.
|
248 |
+
*/
|
249 |
+
public function __destruct()
|
250 |
+
{
|
251 |
+
if (isset($this->read_file) && isset($this->read_stream))
|
252 |
+
{
|
253 |
+
fclose($this->read_stream);
|
254 |
+
}
|
255 |
+
|
256 |
+
if (isset($this->write_file) && isset($this->write_stream))
|
257 |
+
{
|
258 |
+
fclose($this->write_stream);
|
259 |
+
}
|
260 |
+
|
261 |
+
return $this;
|
262 |
+
}
|
263 |
+
|
264 |
+
|
265 |
+
/*%******************************************************************************************%*/
|
266 |
+
// REQUEST METHODS
|
267 |
+
|
268 |
+
/**
|
269 |
+
* Sets the credentials to use for authentication.
|
270 |
+
*
|
271 |
+
* @param string $user (Required) The username to authenticate with.
|
272 |
+
* @param string $pass (Required) The password to authenticate with.
|
273 |
+
* @return $this A reference to the current instance.
|
274 |
+
*/
|
275 |
+
public function set_credentials($user, $pass)
|
276 |
+
{
|
277 |
+
$this->username = $user;
|
278 |
+
$this->password = $pass;
|
279 |
+
return $this;
|
280 |
+
}
|
281 |
+
|
282 |
+
/**
|
283 |
+
* Adds a custom HTTP header to the cURL request.
|
284 |
+
*
|
285 |
+
* @param string $key (Required) The custom HTTP header to set.
|
286 |
+
* @param mixed $value (Required) The value to assign to the custom HTTP header.
|
287 |
+
* @return $this A reference to the current instance.
|
288 |
+
*/
|
289 |
+
public function add_header($key, $value)
|
290 |
+
{
|
291 |
+
$this->request_headers[$key] = $value;
|
292 |
+
return $this;
|
293 |
+
}
|
294 |
+
|
295 |
+
/**
|
296 |
+
* Removes an HTTP header from the cURL request.
|
297 |
+
*
|
298 |
+
* @param string $key (Required) The custom HTTP header to set.
|
299 |
+
* @return $this A reference to the current instance.
|
300 |
+
*/
|
301 |
+
public function remove_header($key)
|
302 |
+
{
|
303 |
+
if (isset($this->request_headers[$key]))
|
304 |
+
{
|
305 |
+
unset($this->request_headers[$key]);
|
306 |
+
}
|
307 |
+
return $this;
|
308 |
+
}
|
309 |
+
|
310 |
+
/**
|
311 |
+
* Set the method type for the request.
|
312 |
+
*
|
313 |
+
* @param string $method (Required) One of the following constants: <HTTP_GET>, <HTTP_POST>, <HTTP_PUT>, <HTTP_HEAD>, <HTTP_DELETE>.
|
314 |
+
* @return $this A reference to the current instance.
|
315 |
+
*/
|
316 |
+
public function set_method($method)
|
317 |
+
{
|
318 |
+
$this->method = strtoupper($method);
|
319 |
+
return $this;
|
320 |
+
}
|
321 |
+
|
322 |
+
/**
|
323 |
+
* Sets a custom useragent string for the class.
|
324 |
+
*
|
325 |
+
* @param string $ua (Required) The useragent string to use.
|
326 |
+
* @return $this A reference to the current instance.
|
327 |
+
*/
|
328 |
+
public function set_useragent($ua)
|
329 |
+
{
|
330 |
+
$this->useragent = $ua;
|
331 |
+
return $this;
|
332 |
+
}
|
333 |
+
|
334 |
+
/**
|
335 |
+
* Set the body to send in the request.
|
336 |
+
*
|
337 |
+
* @param string $body (Required) The textual content to send along in the body of the request.
|
338 |
+
* @return $this A reference to the current instance.
|
339 |
+
*/
|
340 |
+
public function set_body($body)
|
341 |
+
{
|
342 |
+
$this->request_body = $body;
|
343 |
+
return $this;
|
344 |
+
}
|
345 |
+
|
346 |
+
/**
|
347 |
+
* Set the URL to make the request to.
|
348 |
+
*
|
349 |
+
* @param string $url (Required) The URL to make the request to.
|
350 |
+
* @return $this A reference to the current instance.
|
351 |
+
*/
|
352 |
+
public function set_request_url($url)
|
353 |
+
{
|
354 |
+
$this->request_url = $url;
|
355 |
+
return $this;
|
356 |
+
}
|
357 |
+
|
358 |
+
/**
|
359 |
+
* Set additional CURLOPT settings. These will merge with the default settings, and override if
|
360 |
+
* there is a duplicate.
|
361 |
+
*
|
362 |
+
* @param array $curlopts (Optional) A set of key-value pairs that set `CURLOPT` options. These will merge with the existing CURLOPTs, and ones passed here will override the defaults. Keys should be the `CURLOPT_*` constants, not strings.
|
363 |
+
* @return $this A reference to the current instance.
|
364 |
+
*/
|
365 |
+
public function set_curlopts($curlopts)
|
366 |
+
{
|
367 |
+
$this->curlopts = $curlopts;
|
368 |
+
return $this;
|
369 |
+
}
|
370 |
+
|
371 |
+
/**
|
372 |
+
* Sets the length in bytes to read from the stream while streaming up.
|
373 |
+
*
|
374 |
+
* @param integer $size (Required) The length in bytes to read from the stream.
|
375 |
+
* @return $this A reference to the current instance.
|
376 |
+
*/
|
377 |
+
public function set_read_stream_size($size)
|
378 |
+
{
|
379 |
+
$this->read_stream_size = $size;
|
380 |
+
|
381 |
+
return $this;
|
382 |
+
}
|
383 |
+
|
384 |
+
/**
|
385 |
+
* Sets the resource to read from while streaming up. Reads the stream from its current position until
|
386 |
+
* EOF or `$size` bytes have been read. If `$size` is not given it will be determined by <php:fstat()> and
|
387 |
+
* <php:ftell()>.
|
388 |
+
*
|
389 |
+
* @param resource $resource (Required) The readable resource to read from.
|
390 |
+
* @param integer $size (Optional) The size of the stream to read.
|
391 |
+
* @return $this A reference to the current instance.
|
392 |
+
*/
|
393 |
+
public function set_read_stream($resource, $size = null)
|
394 |
+
{
|
395 |
+
if (!isset($size) || $size < 0)
|
396 |
+
{
|
397 |
+
$stats = fstat($resource);
|
398 |
+
|
399 |
+
if ($stats && $stats['size'] >= 0)
|
400 |
+
{
|
401 |
+
$position = ftell($resource);
|
402 |
+
|
403 |
+
if ($position !== false && $position >= 0)
|
404 |
+
{
|
405 |
+
$size = $stats['size'] - $position;
|
406 |
+
}
|
407 |
+
}
|
408 |
+
}
|
409 |
+
|
410 |
+
$this->read_stream = $resource;
|
411 |
+
|
412 |
+
return $this->set_read_stream_size($size);
|
413 |
+
}
|
414 |
+
|
415 |
+
/**
|
416 |
+
* Sets the file to read from while streaming up.
|
417 |
+
*
|
418 |
+
* @param string $location (Required) The readable location to read from.
|
419 |
+
* @return $this A reference to the current instance.
|
420 |
+
*/
|
421 |
+
public function set_read_file($location)
|
422 |
+
{
|
423 |
+
$this->read_file = $location;
|
424 |
+
$read_file_handle = fopen($location, 'r');
|
425 |
+
|
426 |
+
return $this->set_read_stream($read_file_handle);
|
427 |
+
}
|
428 |
+
|
429 |
+
/**
|
430 |
+
* Sets the resource to write to while streaming down.
|
431 |
+
*
|
432 |
+
* @param resource $resource (Required) The writeable resource to write to.
|
433 |
+
* @return $this A reference to the current instance.
|
434 |
+
*/
|
435 |
+
public function set_write_stream($resource)
|
436 |
+
{
|
437 |
+
$this->write_stream = $resource;
|
438 |
+
|
439 |
+
return $this;
|
440 |
+
}
|
441 |
+
|
442 |
+
/**
|
443 |
+
* Sets the file to write to while streaming down.
|
444 |
+
*
|
445 |
+
* @param string $location (Required) The writeable location to write to.
|
446 |
+
* @return $this A reference to the current instance.
|
447 |
+
*/
|
448 |
+
public function set_write_file($location)
|
449 |
+
{
|
450 |
+
$this->write_file = $location;
|
451 |
+
$write_file_handle = fopen($location, 'w');
|
452 |
+
|
453 |
+
return $this->set_write_stream($write_file_handle);
|
454 |
+
}
|
455 |
+
|
456 |
+
/**
|
457 |
+
* Set the proxy to use for making requests.
|
458 |
+
*
|
459 |
+
* @param string $proxy (Required) The faux-url to use for proxy settings. Takes the following format: `proxy://user:pass@hostname:port`
|
460 |
+
* @return $this A reference to the current instance.
|
461 |
+
*/
|
462 |
+
public function set_proxy($proxy)
|
463 |
+
{
|
464 |
+
$proxy = parse_url($proxy);
|
465 |
+
$proxy['user'] = isset($proxy['user']) ? $proxy['user'] : null;
|
466 |
+
$proxy['pass'] = isset($proxy['pass']) ? $proxy['pass'] : null;
|
467 |
+
$proxy['port'] = isset($proxy['port']) ? $proxy['port'] : null;
|
468 |
+
$this->proxy = $proxy;
|
469 |
+
return $this;
|
470 |
+
}
|
471 |
+
|
472 |
+
/**
|
473 |
+
* Set the intended starting seek position.
|
474 |
+
*
|
475 |
+
* @param integer $position (Required) The byte-position of the stream to begin reading from.
|
476 |
+
* @return $this A reference to the current instance.
|
477 |
+
*/
|
478 |
+
public function set_seek_position($position)
|
479 |
+
{
|
480 |
+
$this->seek_position = isset($position) ? (integer) $position : null;
|
481 |
+
|
482 |
+
return $this;
|
483 |
+
}
|
484 |
+
|
485 |
+
/**
|
486 |
+
* Register a callback function to execute whenever a data stream is read from using
|
487 |
+
* <CFRequest::streaming_read_callback()>.
|
488 |
+
*
|
489 |
+
* The user-defined callback function should accept three arguments:
|
490 |
+
*
|
491 |
+
* <ul>
|
492 |
+
* <li><code>$curl_handle</code> - <code>resource</code> - Required - The cURL handle resource that represents the in-progress transfer.</li>
|
493 |
+
* <li><code>$file_handle</code> - <code>resource</code> - Required - The file handle resource that represents the file on the local file system.</li>
|
494 |
+
* <li><code>$length</code> - <code>integer</code> - Required - The length in kilobytes of the data chunk that was transferred.</li>
|
495 |
+
* </ul>
|
496 |
+
*
|
497 |
+
* @param string|array|function $callback (Required) The callback function is called by <php:call_user_func()>, so you can pass the following values: <ul>
|
498 |
+
* <li>The name of a global function to execute, passed as a string.</li>
|
499 |
+
* <li>A method to execute, passed as <code>array('ClassName', 'MethodName')</code>.</li>
|
500 |
+
* <li>An anonymous function (PHP 5.3+).</li></ul>
|
501 |
+
* @return $this A reference to the current instance.
|
502 |
+
*/
|
503 |
+
public function register_streaming_read_callback($callback)
|
504 |
+
{
|
505 |
+
$this->registered_streaming_read_callback = $callback;
|
506 |
+
|
507 |
+
return $this;
|
508 |
+
}
|
509 |
+
|
510 |
+
/**
|
511 |
+
* Register a callback function to execute whenever a data stream is written to using
|
512 |
+
* <CFRequest::streaming_write_callback()>.
|
513 |
+
*
|
514 |
+
* The user-defined callback function should accept two arguments:
|
515 |
+
*
|
516 |
+
* <ul>
|
517 |
+
* <li><code>$curl_handle</code> - <code>resource</code> - Required - The cURL handle resource that represents the in-progress transfer.</li>
|
518 |
+
* <li><code>$length</code> - <code>integer</code> - Required - The length in kilobytes of the data chunk that was transferred.</li>
|
519 |
+
* </ul>
|
520 |
+
*
|
521 |
+
* @param string|array|function $callback (Required) The callback function is called by <php:call_user_func()>, so you can pass the following values: <ul>
|
522 |
+
* <li>The name of a global function to execute, passed as a string.</li>
|
523 |
+
* <li>A method to execute, passed as <code>array('ClassName', 'MethodName')</code>.</li>
|
524 |
+
* <li>An anonymous function (PHP 5.3+).</li></ul>
|
525 |
+
* @return $this A reference to the current instance.
|
526 |
+
*/
|
527 |
+
public function register_streaming_write_callback($callback)
|
528 |
+
{
|
529 |
+
$this->registered_streaming_write_callback = $callback;
|
530 |
+
|
531 |
+
return $this;
|
532 |
+
}
|
533 |
+
|
534 |
+
|
535 |
+
/*%******************************************************************************************%*/
|
536 |
+
// PREPARE, SEND, AND PROCESS REQUEST
|
537 |
+
|
538 |
+
/**
|
539 |
+
* A callback function that is invoked by cURL for streaming up.
|
540 |
+
*
|
541 |
+
* @param resource $curl_handle (Required) The cURL handle for the request.
|
542 |
+
* @param resource $file_handle (Required) The open file handle resource.
|
543 |
+
* @param integer $length (Required) The maximum number of bytes to read.
|
544 |
+
* @return binary Binary data from a stream.
|
545 |
+
*/
|
546 |
+
public function streaming_read_callback($curl_handle, $file_handle, $length)
|
547 |
+
{
|
548 |
+
// Once we've sent as much as we're supposed to send...
|
549 |
+
if ($this->read_stream_read >= $this->read_stream_size)
|
550 |
+
{
|
551 |
+
// Send EOF
|
552 |
+
return '';
|
553 |
+
}
|
554 |
+
|
555 |
+
// If we're at the beginning of an upload and need to seek...
|
556 |
+
if ($this->read_stream_read == 0 && isset($this->seek_position) && $this->seek_position !== ftell($this->read_stream))
|
557 |
+
{
|
558 |
+
if (fseek($this->read_stream, $this->seek_position) !== 0)
|
559 |
+
{
|
560 |
+
throw new RequestCore_Exception('The stream does not support seeking and is either not at the requested position or the position is unknown.');
|
561 |
+
}
|
562 |
+
}
|
563 |
+
|
564 |
+
$read = fread($this->read_stream, min($this->read_stream_size - $this->read_stream_read, $length)); // Remaining upload data or cURL's requested chunk size
|
565 |
+
$this->read_stream_read += strlen($read);
|
566 |
+
|
567 |
+
$out = $read === false ? '' : $read;
|
568 |
+
|
569 |
+
// Execute callback function
|
570 |
+
if ($this->registered_streaming_read_callback)
|
571 |
+
{
|
572 |
+
call_user_func($this->registered_streaming_read_callback, $curl_handle, $file_handle, $out);
|
573 |
+
}
|
574 |
+
|
575 |
+
return $out;
|
576 |
+
}
|
577 |
+
|
578 |
+
/**
|
579 |
+
* A callback function that is invoked by cURL for streaming down.
|
580 |
+
*
|
581 |
+
* @param resource $curl_handle (Required) The cURL handle for the request.
|
582 |
+
* @param binary $data (Required) The data to write.
|
583 |
+
* @return integer The number of bytes written.
|
584 |
+
*/
|
585 |
+
public function streaming_write_callback($curl_handle, $data)
|
586 |
+
{
|
587 |
+
$length = strlen($data);
|
588 |
+
$written_total = 0;
|
589 |
+
$written_last = 0;
|
590 |
+
|
591 |
+
while ($written_total < $length)
|
592 |
+
{
|
593 |
+
$written_last = fwrite($this->write_stream, substr($data, $written_total));
|
594 |
+
|
595 |
+
if ($written_last === false)
|
596 |
+
{
|
597 |
+
return $written_total;
|
598 |
+
}
|
599 |
+
|
600 |
+
$written_total += $written_last;
|
601 |
+
}
|
602 |
+
|
603 |
+
// Execute callback function
|
604 |
+
if ($this->registered_streaming_write_callback)
|
605 |
+
{
|
606 |
+
call_user_func($this->registered_streaming_write_callback, $curl_handle, $written_total);
|
607 |
+
}
|
608 |
+
|
609 |
+
return $written_total;
|
610 |
+
}
|
611 |
+
|
612 |
+
/**
|
613 |
+
* Prepares and adds the details of the cURL request. This can be passed along to a <php:curl_multi_exec()>
|
614 |
+
* function.
|
615 |
+
*
|
616 |
+
* @return resource The handle for the cURL object.
|
617 |
+
*/
|
618 |
+
public function prep_request()
|
619 |
+
{
|
620 |
+
$curl_handle = curl_init();
|
621 |
+
|
622 |
+
// Set default options.
|
623 |
+
curl_setopt($curl_handle, CURLOPT_URL, $this->request_url);
|
624 |
+
curl_setopt($curl_handle, CURLOPT_FILETIME, true);
|
625 |
+
curl_setopt($curl_handle, CURLOPT_FRESH_CONNECT, false);
|
626 |
+
curl_setopt($curl_handle, CURLOPT_CLOSEPOLICY, CURLCLOSEPOLICY_LEAST_RECENTLY_USED);
|
627 |
+
curl_setopt($curl_handle, CURLOPT_MAXREDIRS, 5);
|
628 |
+
curl_setopt($curl_handle, CURLOPT_HEADER, true);
|
629 |
+
curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, true);
|
630 |
+
curl_setopt($curl_handle, CURLOPT_TIMEOUT, 5184000);
|
631 |
+
curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT, 120);
|
632 |
+
curl_setopt($curl_handle, CURLOPT_NOSIGNAL, true);
|
633 |
+
curl_setopt($curl_handle, CURLOPT_REFERER, $this->request_url);
|
634 |
+
curl_setopt($curl_handle, CURLOPT_USERAGENT, $this->useragent);
|
635 |
+
curl_setopt($curl_handle, CURLOPT_READFUNCTION, array($this, 'streaming_read_callback'));
|
636 |
+
|
637 |
+
// Verification of the SSL cert
|
638 |
+
if ($this->ssl_verification)
|
639 |
+
{
|
640 |
+
curl_setopt($curl_handle, CURLOPT_SSL_VERIFYPEER, true);
|
641 |
+
curl_setopt($curl_handle, CURLOPT_SSL_VERIFYHOST, 2);
|
642 |
+
}
|
643 |
+
else
|
644 |
+
{
|
645 |
+
curl_setopt($curl_handle, CURLOPT_SSL_VERIFYPEER, false);
|
646 |
+
curl_setopt($curl_handle, CURLOPT_SSL_VERIFYHOST, false);
|
647 |
+
}
|
648 |
+
|
649 |
+
// chmod the file as 0755
|
650 |
+
if ($this->cacert_location === true)
|
651 |
+
{
|
652 |
+
curl_setopt($curl_handle, CURLOPT_CAINFO, dirname(__FILE__) . '/cacert.pem');
|
653 |
+
}
|
654 |
+
elseif (is_string($this->cacert_location))
|
655 |
+
{
|
656 |
+
curl_setopt($curl_handle, CURLOPT_CAINFO, $this->cacert_location);
|
657 |
+
}
|
658 |
+
|
659 |
+
// Debug mode
|
660 |
+
if ($this->debug_mode)
|
661 |
+
{
|
662 |
+
curl_setopt($curl_handle, CURLOPT_VERBOSE, true);
|
663 |
+
}
|
664 |
+
|
665 |
+
// Handle open_basedir & safe mode
|
666 |
+
if (!ini_get('safe_mode') && !ini_get('open_basedir'))
|
667 |
+
{
|
668 |
+
curl_setopt($curl_handle, CURLOPT_FOLLOWLOCATION, true);
|
669 |
+
}
|
670 |
+
|
671 |
+
// Enable a proxy connection if requested.
|
672 |
+
if ($this->proxy)
|
673 |
+
{
|
674 |
+
curl_setopt($curl_handle, CURLOPT_HTTPPROXYTUNNEL, true);
|
675 |
+
|
676 |
+
$host = $this->proxy['host'];
|
677 |
+
$host .= ($this->proxy['port']) ? ':' . $this->proxy['port'] : '';
|
678 |
+
curl_setopt($curl_handle, CURLOPT_PROXY, $host);
|
679 |
+
|
680 |
+
if (isset($this->proxy['user']) && isset($this->proxy['pass']))
|
681 |
+
{
|
682 |
+
curl_setopt($curl_handle, CURLOPT_PROXYUSERPWD, $this->proxy['user'] . ':' . $this->proxy['pass']);
|
683 |
+
}
|
684 |
+
}
|
685 |
+
|
686 |
+
// Set credentials for HTTP Basic/Digest Authentication.
|
687 |
+
if ($this->username && $this->password)
|
688 |
+
{
|
689 |
+
curl_setopt($curl_handle, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
|
690 |
+
curl_setopt($curl_handle, CURLOPT_USERPWD, $this->username . ':' . $this->password);
|
691 |
+
}
|
692 |
+
|
693 |
+
// Handle the encoding if we can.
|
694 |
+
if ($this->use_gzip_enconding && extension_loaded('zlib'))
|
695 |
+
{
|
696 |
+
curl_setopt($curl_handle, CURLOPT_ENCODING, 'gzip, deflate');
|
697 |
+
}
|
698 |
+
|
699 |
+
// Process custom headers
|
700 |
+
if (isset($this->request_headers) && count($this->request_headers))
|
701 |
+
{
|
702 |
+
$temp_headers = array();
|
703 |
+
|
704 |
+
if (!array_key_exists('Expect', $this->request_headers))
|
705 |
+
{
|
706 |
+
$this->request_headers['Expect'] = '';
|
707 |
+
}
|
708 |
+
|
709 |
+
foreach ($this->request_headers as $k => $v)
|
710 |
+
{
|
711 |
+
$temp_headers[] = $k . ': ' . $v;
|
712 |
+
}
|
713 |
+
|
714 |
+
curl_setopt($curl_handle, CURLOPT_HTTPHEADER, $temp_headers);
|
715 |
+
}
|
716 |
+
|
717 |
+
switch ($this->method)
|
718 |
+
{
|
719 |
+
case self::HTTP_PUT:
|
720 |
+
curl_setopt($curl_handle, CURLOPT_CUSTOMREQUEST, 'PUT');
|
721 |
+
if (isset($this->read_stream))
|
722 |
+
{
|
723 |
+
if (!isset($this->read_stream_size) || $this->read_stream_size < 0)
|
724 |
+
{
|
725 |
+
throw new RequestCore_Exception('The stream size for the streaming upload cannot be determined.');
|
726 |
+
}
|
727 |
+
|
728 |
+
curl_setopt($curl_handle, CURLOPT_INFILESIZE, $this->read_stream_size);
|
729 |
+
curl_setopt($curl_handle, CURLOPT_UPLOAD, true);
|
730 |
+
}
|
731 |
+
else
|
732 |
+
{
|
733 |
+
curl_setopt($curl_handle, CURLOPT_POSTFIELDS, $this->request_body);
|
734 |
+
}
|
735 |
+
break;
|
736 |
+
|
737 |
+
case self::HTTP_POST:
|
738 |
+
curl_setopt($curl_handle, CURLOPT_POST, true);
|
739 |
+
curl_setopt($curl_handle, CURLOPT_POSTFIELDS, $this->request_body);
|
740 |
+
break;
|
741 |
+
|
742 |
+
case self::HTTP_HEAD:
|
743 |
+
curl_setopt($curl_handle, CURLOPT_CUSTOMREQUEST, self::HTTP_HEAD);
|
744 |
+
curl_setopt($curl_handle, CURLOPT_NOBODY, 1);
|
745 |
+
break;
|
746 |
+
|
747 |
+
default: // Assumed GET
|
748 |
+
curl_setopt($curl_handle, CURLOPT_CUSTOMREQUEST, $this->method);
|
749 |
+
if (isset($this->write_stream))
|
750 |
+
{
|
751 |
+
curl_setopt($curl_handle, CURLOPT_WRITEFUNCTION, array($this, 'streaming_write_callback'));
|
752 |
+
curl_setopt($curl_handle, CURLOPT_HEADER, false);
|
753 |
+
}
|
754 |
+
else
|
755 |
+
{
|
756 |
+
curl_setopt($curl_handle, CURLOPT_POSTFIELDS, $this->request_body);
|
757 |
+
}
|
758 |
+
break;
|
759 |
+
}
|
760 |
+
|
761 |
+
// Merge in the CURLOPTs
|
762 |
+
if (isset($this->curlopts) && sizeof($this->curlopts) > 0)
|
763 |
+
{
|
764 |
+
foreach ($this->curlopts as $k => $v)
|
765 |
+
{
|
766 |
+
curl_setopt($curl_handle, $k, $v);
|
767 |
+
}
|
768 |
+
}
|
769 |
+
|
770 |
+
return $curl_handle;
|
771 |
+
}
|
772 |
+
|
773 |
+
/**
|
774 |
+
* Take the post-processed cURL data and break it down into useful header/body/info chunks. Uses the
|
775 |
+
* data stored in the `curl_handle` and `response` properties unless replacement data is passed in via
|
776 |
+
* parameters.
|
777 |
+
*
|
778 |
+
* @param resource $curl_handle (Optional) The reference to the already executed cURL request.
|
779 |
+
* @param string $response (Optional) The actual response content itself that needs to be parsed.
|
780 |
+
* @return ResponseCore A <ResponseCore> object containing a parsed HTTP response.
|
781 |
+
*/
|
782 |
+
public function process_response($curl_handle = null, $response = null)
|
783 |
+
{
|
784 |
+
// Accept a custom one if it's passed.
|
785 |
+
if ($curl_handle && $response)
|
786 |
+
{
|
787 |
+
$this->curl_handle = $curl_handle;
|
788 |
+
$this->response = $response;
|
789 |
+
}
|
790 |
+
|
791 |
+
// As long as this came back as a valid resource...
|
792 |
+
if (is_resource($this->curl_handle))
|
793 |
+
{
|
794 |
+
// Determine what's what.
|
795 |
+
$header_size = curl_getinfo($this->curl_handle, CURLINFO_HEADER_SIZE);
|
796 |
+
$this->response_headers = substr($this->response, 0, $header_size);
|
797 |
+
$this->response_body = substr($this->response, $header_size);
|
798 |
+
$this->response_code = curl_getinfo($this->curl_handle, CURLINFO_HTTP_CODE);
|
799 |
+
$this->response_info = curl_getinfo($this->curl_handle);
|
800 |
+
|
801 |
+
// Parse out the headers
|
802 |
+
$this->response_headers = explode("\r\n\r\n", trim($this->response_headers));
|
803 |
+
$this->response_headers = array_pop($this->response_headers);
|
804 |
+
$this->response_headers = explode("\r\n", $this->response_headers);
|
805 |
+
array_shift($this->response_headers);
|
806 |
+
|
807 |
+
// Loop through and split up the headers.
|
808 |
+
$header_assoc = array();
|
809 |
+
foreach ($this->response_headers as $header)
|
810 |
+
{
|
811 |
+
$kv = explode(': ', $header);
|
812 |
+
$header_assoc[strtolower($kv[0])] = $kv[1];
|
813 |
+
}
|
814 |
+
|
815 |
+
// Reset the headers to the appropriate property.
|
816 |
+
$this->response_headers = $header_assoc;
|
817 |
+
$this->response_headers['_info'] = $this->response_info;
|
818 |
+
$this->response_headers['_info']['method'] = $this->method;
|
819 |
+
|
820 |
+
if ($curl_handle && $response)
|
821 |
+
{
|
822 |
+
return new $this->response_class($this->response_headers, $this->response_body, $this->response_code, $this->curl_handle);
|
823 |
+
}
|
824 |
+
}
|
825 |
+
|
826 |
+
// Return false
|
827 |
+
return false;
|
828 |
+
}
|
829 |
+
|
830 |
+
/**
|
831 |
+
* Sends the request, calling necessary utility functions to update built-in properties.
|
832 |
+
*
|
833 |
+
* @param boolean $parse (Optional) Whether to parse the response with ResponseCore or not.
|
834 |
+
* @return string The resulting unparsed data from the request.
|
835 |
+
*/
|
836 |
+
public function send_request($parse = false)
|
837 |
+
{
|
838 |
+
if ($this->allow_set_time_limit)
|
839 |
+
{
|
840 |
+
set_time_limit(0);
|
841 |
+
}
|
842 |
+
|
843 |
+
$curl_handle = $this->prep_request();
|
844 |
+
$this->response = curl_exec($curl_handle);
|
845 |
+
|
846 |
+
if ($this->response === false)
|
847 |
+
{
|
848 |
+
throw new cURL_Exception('cURL resource: ' . (string) $curl_handle . '; cURL error: ' . curl_error($curl_handle) . ' (cURL error code ' . curl_errno($curl_handle) . '). See http://curl.haxx.se/libcurl/c/libcurl-errors.html for an explanation of error codes.');
|
849 |
+
}
|
850 |
+
|
851 |
+
$parsed_response = $this->process_response($curl_handle, $this->response);
|
852 |
+
|
853 |
+
curl_close($curl_handle);
|
854 |
+
|
855 |
+
if ($parse)
|
856 |
+
{
|
857 |
+
return $parsed_response;
|
858 |
+
}
|
859 |
+
|
860 |
+
return $this->response;
|
861 |
+
}
|
862 |
+
|
863 |
+
/**
|
864 |
+
* Sends the request using <php:curl_multi_exec()>, enabling parallel requests. Uses the "rolling" method.
|
865 |
+
*
|
866 |
+
* @param array $handles (Required) An indexed array of cURL handles to process simultaneously.
|
867 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
868 |
+
* <li><code>callback</code> - <code>string|array</code> - Optional - The string name of a function to pass the response data to. If this is a method, pass an array where the <code>[0]</code> index is the class and the <code>[1]</code> index is the method name.</li>
|
869 |
+
* <li><code>limit</code> - <code>integer</code> - Optional - The number of simultaneous requests to make. This can be useful for scaling around slow server responses. Defaults to trusting cURLs judgement as to how many to use.</li></ul>
|
870 |
+
* @return array Post-processed cURL responses.
|
871 |
+
*/
|
872 |
+
public function send_multi_request($handles, $opt = null)
|
873 |
+
{
|
874 |
+
if ($this->allow_set_time_limit)
|
875 |
+
{
|
876 |
+
set_time_limit(0);
|
877 |
+
}
|
878 |
+
|
879 |
+
// Skip everything if there are no handles to process.
|
880 |
+
if (count($handles) === 0) return array();
|
881 |
+
|
882 |
+
if (!$opt) $opt = array();
|
883 |
+
|
884 |
+
// Initialize any missing options
|
885 |
+
$limit = isset($opt['limit']) ? $opt['limit'] : -1;
|
886 |
+
|
887 |
+
// Initialize
|
888 |
+
$handle_list = $handles;
|
889 |
+
$http = new $this->request_class();
|
890 |
+
$multi_handle = curl_multi_init();
|
891 |
+
$handles_post = array();
|
892 |
+
$added = count($handles);
|
893 |
+
$last_handle = null;
|
894 |
+
$count = 0;
|
895 |
+
$i = 0;
|
896 |
+
|
897 |
+
// Loop through the cURL handles and add as many as it set by the limit parameter.
|
898 |
+
while ($i < $added)
|
899 |
+
{
|
900 |
+
if ($limit > 0 && $i >= $limit) break;
|
901 |
+
curl_multi_add_handle($multi_handle, array_shift($handles));
|
902 |
+
$i++;
|
903 |
+
}
|
904 |
+
|
905 |
+
do
|
906 |
+
{
|
907 |
+
$active = false;
|
908 |
+
|
909 |
+
// Start executing and wait for a response.
|
910 |
+
while (($status = curl_multi_exec($multi_handle, $active)) === CURLM_CALL_MULTI_PERFORM)
|
911 |
+
{
|
912 |
+
// Start looking for possible responses immediately when we have to add more handles
|
913 |
+
if (count($handles) > 0) break;
|
914 |
+
}
|
915 |
+
|
916 |
+
// Figure out which requests finished.
|
917 |
+
$to_process = array();
|
918 |
+
|
919 |
+
while ($done = curl_multi_info_read($multi_handle))
|
920 |
+
{
|
921 |
+
// Since curl_errno() isn't reliable for handles that were in multirequests, we check the 'result' of the info read, which contains the curl error number, (listed here http://curl.haxx.se/libcurl/c/libcurl-errors.html )
|
922 |
+
if ($done['result'] > 0)
|
923 |
+
{
|
924 |
+
throw new cURL_Multi_Exception('cURL resource: ' . (string) $done['handle'] . '; cURL error: ' . curl_error($done['handle']) . ' (cURL error code ' . $done['result'] . '). See http://curl.haxx.se/libcurl/c/libcurl-errors.html for an explanation of error codes.');
|
925 |
+
}
|
926 |
+
|
927 |
+
// Because curl_multi_info_read() might return more than one message about a request, we check to see if this request is already in our array of completed requests
|
928 |
+
elseif (!isset($to_process[(int) $done['handle']]))
|
929 |
+
{
|
930 |
+
$to_process[(int) $done['handle']] = $done;
|
931 |
+
}
|
932 |
+
}
|
933 |
+
|
934 |
+
// Actually deal with the request
|
935 |
+
foreach ($to_process as $pkey => $done)
|
936 |
+
{
|
937 |
+
$response = $http->process_response($done['handle'], curl_multi_getcontent($done['handle']));
|
938 |
+
$key = array_search($done['handle'], $handle_list, true);
|
939 |
+
$handles_post[$key] = $response;
|
940 |
+
|
941 |
+
if (count($handles) > 0)
|
942 |
+
{
|
943 |
+
curl_multi_add_handle($multi_handle, array_shift($handles));
|
944 |
+
}
|
945 |
+
|
946 |
+
curl_multi_remove_handle($multi_handle, $done['handle']);
|
947 |
+
curl_close($done['handle']);
|
948 |
+
}
|
949 |
+
}
|
950 |
+
while ($active || count($handles_post) < $added);
|
951 |
+
|
952 |
+
curl_multi_close($multi_handle);
|
953 |
+
|
954 |
+
ksort($handles_post, SORT_NUMERIC);
|
955 |
+
return $handles_post;
|
956 |
+
}
|
957 |
+
|
958 |
+
|
959 |
+
/*%******************************************************************************************%*/
|
960 |
+
// RESPONSE METHODS
|
961 |
+
|
962 |
+
/**
|
963 |
+
* Get the HTTP response headers from the request.
|
964 |
+
*
|
965 |
+
* @param string $header (Optional) A specific header value to return. Defaults to all headers.
|
966 |
+
* @return string|array All or selected header values.
|
967 |
+
*/
|
968 |
+
public function get_response_header($header = null)
|
969 |
+
{
|
970 |
+
if ($header)
|
971 |
+
{
|
972 |
+
return $this->response_headers[strtolower($header)];
|
973 |
+
}
|
974 |
+
return $this->response_headers;
|
975 |
+
}
|
976 |
+
|
977 |
+
/**
|
978 |
+
* Get the HTTP response body from the request.
|
979 |
+
*
|
980 |
+
* @return string The response body.
|
981 |
+
*/
|
982 |
+
public function get_response_body()
|
983 |
+
{
|
984 |
+
return $this->response_body;
|
985 |
+
}
|
986 |
+
|
987 |
+
/**
|
988 |
+
* Get the HTTP response code from the request.
|
989 |
+
*
|
990 |
+
* @return string The HTTP response code.
|
991 |
+
*/
|
992 |
+
public function get_response_code()
|
993 |
+
{
|
994 |
+
return $this->response_code;
|
995 |
+
}
|
996 |
+
}
|
997 |
+
|
998 |
+
|
999 |
+
/**
|
1000 |
+
* Container for all response-related methods.
|
1001 |
+
*/
|
1002 |
+
class ResponseCore
|
1003 |
+
{
|
1004 |
+
/**
|
1005 |
+
* Stores the HTTP header information.
|
1006 |
+
*/
|
1007 |
+
public $header;
|
1008 |
+
|
1009 |
+
/**
|
1010 |
+
* Stores the SimpleXML response.
|
1011 |
+
*/
|
1012 |
+
public $body;
|
1013 |
+
|
1014 |
+
/**
|
1015 |
+
* Stores the HTTP response code.
|
1016 |
+
*/
|
1017 |
+
public $status;
|
1018 |
+
|
1019 |
+
/**
|
1020 |
+
* Constructs a new instance of this class.
|
1021 |
+
*
|
1022 |
+
* @param array $header (Required) Associative array of HTTP headers (typically returned by <RequestCore::get_response_header()>).
|
1023 |
+
* @param string $body (Required) XML-formatted response from AWS.
|
1024 |
+
* @param integer $status (Optional) HTTP response status code from the request.
|
1025 |
+
* @return object Contains an <php:array> `header` property (HTTP headers as an associative array), a <php:SimpleXMLElement> or <php:string> `body` property, and an <php:integer> `status` code.
|
1026 |
+
*/
|
1027 |
+
public function __construct($header, $body, $status = null)
|
1028 |
+
{
|
1029 |
+
$this->header = $header;
|
1030 |
+
$this->body = $body;
|
1031 |
+
$this->status = $status;
|
1032 |
+
|
1033 |
+
return $this;
|
1034 |
+
}
|
1035 |
+
|
1036 |
+
/**
|
1037 |
+
* Did we receive the status code we expected?
|
1038 |
+
*
|
1039 |
+
* @param integer|array $codes (Optional) The status code(s) to expect. Pass an <php:integer> for a single acceptable value, or an <php:array> of integers for multiple acceptable values.
|
1040 |
+
* @return boolean Whether we received the expected status code or not.
|
1041 |
+
*/
|
1042 |
+
public function isOK($codes = array(200, 201, 204, 206))
|
1043 |
+
{
|
1044 |
+
if (is_array($codes))
|
1045 |
+
{
|
1046 |
+
return in_array($this->status, $codes);
|
1047 |
+
}
|
1048 |
+
|
1049 |
+
return $this->status === $codes;
|
1050 |
+
}
|
1051 |
+
}
|
1052 |
+
|
1053 |
+
class cURL_Exception extends Exception {}
|
1054 |
+
class cURL_Multi_Exception extends cURL_Exception {}
|
1055 |
+
class RequestCore_Exception extends Exception {}
|
sdk/Aws_v1/lib/yaml/LICENSE
ADDED
@@ -0,0 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
Copyright (c) 2008-2009 Fabien Potencier
|
2 |
+
|
3 |
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
4 |
+
of this software and associated documentation files (the "Software"), to deal
|
5 |
+
in the Software without restriction, including without limitation the rights
|
6 |
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
7 |
+
copies of the Software, and to permit persons to whom the Software is furnished
|
8 |
+
to do so, subject to the following conditions:
|
9 |
+
|
10 |
+
The above copyright notice and this permission notice shall be included in all
|
11 |
+
copies or substantial portions of the Software.
|
12 |
+
|
13 |
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
14 |
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
15 |
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
16 |
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
17 |
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
18 |
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
19 |
+
THE SOFTWARE.
|
sdk/Aws_v1/lib/yaml/README.markdown
ADDED
@@ -0,0 +1,15 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
Symfony YAML: A PHP library that speaks YAML
|
2 |
+
============================================
|
3 |
+
|
4 |
+
Symfony YAML is a PHP library that parses YAML strings and converts them to
|
5 |
+
PHP arrays. It can also converts PHP arrays to YAML strings. Its official
|
6 |
+
website is at http://components.symfony-project.org/yaml/.
|
7 |
+
|
8 |
+
The documentation is to be found in the `doc/` directory.
|
9 |
+
|
10 |
+
Symfony YAML is licensed under the MIT license (see LICENSE file).
|
11 |
+
|
12 |
+
The Symfony YAML library is developed and maintained by the
|
13 |
+
[symfony](http://www.symfony-project.org/) project team. It has been extracted
|
14 |
+
from symfony to be used as a standalone library. Symfony YAML is part of the
|
15 |
+
[symfony components project](http://components.symfony-project.org/).
|
sdk/Aws_v1/lib/yaml/lib/sfYaml.php
ADDED
@@ -0,0 +1,135 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* This file is part of the symfony package.
|
5 |
+
* (c) 2004-2006 Fabien Potencier <fabien.potencier@symfony-project.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
+
|
11 |
+
/**
|
12 |
+
* sfYaml offers convenience methods to load and dump YAML.
|
13 |
+
*
|
14 |
+
* @package symfony
|
15 |
+
* @subpackage yaml
|
16 |
+
* @author Fabien Potencier <fabien.potencier@symfony-project.com>
|
17 |
+
* @version SVN: $Id: sfYaml.class.php 8988 2008-05-15 20:24:26Z fabien $
|
18 |
+
*/
|
19 |
+
class sfYaml
|
20 |
+
{
|
21 |
+
static protected
|
22 |
+
$spec = '1.2';
|
23 |
+
|
24 |
+
/**
|
25 |
+
* Sets the YAML specification version to use.
|
26 |
+
*
|
27 |
+
* @param string $version The YAML specification version
|
28 |
+
*/
|
29 |
+
static public function setSpecVersion($version)
|
30 |
+
{
|
31 |
+
if (!in_array($version, array('1.1', '1.2')))
|
32 |
+
{
|
33 |
+
throw new InvalidArgumentException(sprintf('Version %s of the YAML specifications is not supported', $version));
|
34 |
+
}
|
35 |
+
|
36 |
+
self::$spec = $version;
|
37 |
+
}
|
38 |
+
|
39 |
+
/**
|
40 |
+
* Gets the YAML specification version to use.
|
41 |
+
*
|
42 |
+
* @return string The YAML specification version
|
43 |
+
*/
|
44 |
+
static public function getSpecVersion()
|
45 |
+
{
|
46 |
+
return self::$spec;
|
47 |
+
}
|
48 |
+
|
49 |
+
/**
|
50 |
+
* Loads YAML into a PHP array.
|
51 |
+
*
|
52 |
+
* The load method, when supplied with a YAML stream (string or file),
|
53 |
+
* will do its best to convert YAML in a file into a PHP array.
|
54 |
+
*
|
55 |
+
* Usage:
|
56 |
+
* <code>
|
57 |
+
* $array = sfYaml::load('config.yml');
|
58 |
+
* print_r($array);
|
59 |
+
* </code>
|
60 |
+
*
|
61 |
+
* @param string $input Path of YAML file or string containing YAML
|
62 |
+
*
|
63 |
+
* @return array The YAML converted to a PHP array
|
64 |
+
*
|
65 |
+
* @throws InvalidArgumentException If the YAML is not valid
|
66 |
+
*/
|
67 |
+
public static function load($input)
|
68 |
+
{
|
69 |
+
$file = '';
|
70 |
+
|
71 |
+
// if input is a file, process it
|
72 |
+
if (strpos($input, "\n") === false && is_file($input))
|
73 |
+
{
|
74 |
+
$file = $input;
|
75 |
+
|
76 |
+
ob_start();
|
77 |
+
$retval = include($input);
|
78 |
+
$content = ob_get_clean();
|
79 |
+
|
80 |
+
// if an array is returned by the config file assume it's in plain php form else in YAML
|
81 |
+
$input = is_array($retval) ? $retval : $content;
|
82 |
+
}
|
83 |
+
|
84 |
+
// if an array is returned by the config file assume it's in plain php form else in YAML
|
85 |
+
if (is_array($input))
|
86 |
+
{
|
87 |
+
return $input;
|
88 |
+
}
|
89 |
+
|
90 |
+
require_once dirname(__FILE__).'/sfYamlParser.php';
|
91 |
+
|
92 |
+
$yaml = new sfYamlParser();
|
93 |
+
|
94 |
+
try
|
95 |
+
{
|
96 |
+
$ret = $yaml->parse($input);
|
97 |
+
}
|
98 |
+
catch (Exception $e)
|
99 |
+
{
|
100 |
+
throw new InvalidArgumentException(sprintf('Unable to parse %s: %s', $file ? sprintf('file "%s"', $file) : 'string', $e->getMessage()));
|
101 |
+
}
|
102 |
+
|
103 |
+
return $ret;
|
104 |
+
}
|
105 |
+
|
106 |
+
/**
|
107 |
+
* Dumps a PHP array to a YAML string.
|
108 |
+
*
|
109 |
+
* The dump method, when supplied with an array, will do its best
|
110 |
+
* to convert the array into friendly YAML.
|
111 |
+
*
|
112 |
+
* @param array $array PHP array
|
113 |
+
* @param integer $inline The level where you switch to inline YAML
|
114 |
+
*
|
115 |
+
* @return string A YAML string representing the original PHP array
|
116 |
+
*/
|
117 |
+
public static function dump($array, $inline = 2)
|
118 |
+
{
|
119 |
+
require_once dirname(__FILE__).'/sfYamlDumper.php';
|
120 |
+
|
121 |
+
$yaml = new sfYamlDumper();
|
122 |
+
|
123 |
+
return $yaml->dump($array, $inline);
|
124 |
+
}
|
125 |
+
}
|
126 |
+
|
127 |
+
/**
|
128 |
+
* Wraps echo to automatically provide a newline.
|
129 |
+
*
|
130 |
+
* @param string $string The string to echo with new line
|
131 |
+
*/
|
132 |
+
function echoln($string)
|
133 |
+
{
|
134 |
+
echo $string."\n";
|
135 |
+
}
|
sdk/Aws_v1/lib/yaml/lib/sfYamlDumper.php
ADDED
@@ -0,0 +1,60 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* This file is part of the symfony package.
|
5 |
+
* (c) Fabien Potencier <fabien.potencier@symfony-project.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
+
|
11 |
+
require_once(dirname(__FILE__).'/sfYamlInline.php');
|
12 |
+
|
13 |
+
/**
|
14 |
+
* sfYamlDumper dumps PHP variables to YAML strings.
|
15 |
+
*
|
16 |
+
* @package symfony
|
17 |
+
* @subpackage yaml
|
18 |
+
* @author Fabien Potencier <fabien.potencier@symfony-project.com>
|
19 |
+
* @version SVN: $Id: sfYamlDumper.class.php 10575 2008-08-01 13:08:42Z nicolas $
|
20 |
+
*/
|
21 |
+
class sfYamlDumper
|
22 |
+
{
|
23 |
+
/**
|
24 |
+
* Dumps a PHP value to YAML.
|
25 |
+
*
|
26 |
+
* @param mixed $input The PHP value
|
27 |
+
* @param integer $inline The level where you switch to inline YAML
|
28 |
+
* @param integer $indent The level o indentation indentation (used internally)
|
29 |
+
*
|
30 |
+
* @return string The YAML representation of the PHP value
|
31 |
+
*/
|
32 |
+
public function dump($input, $inline = 0, $indent = 0)
|
33 |
+
{
|
34 |
+
$output = '';
|
35 |
+
$prefix = $indent ? str_repeat(' ', $indent) : '';
|
36 |
+
|
37 |
+
if ($inline <= 0 || !is_array($input) || empty($input))
|
38 |
+
{
|
39 |
+
$output .= $prefix.sfYamlInline::dump($input);
|
40 |
+
}
|
41 |
+
else
|
42 |
+
{
|
43 |
+
$isAHash = array_keys($input) !== range(0, count($input) - 1);
|
44 |
+
|
45 |
+
foreach ($input as $key => $value)
|
46 |
+
{
|
47 |
+
$willBeInlined = $inline - 1 <= 0 || !is_array($value) || empty($value);
|
48 |
+
|
49 |
+
$output .= sprintf('%s%s%s%s',
|
50 |
+
$prefix,
|
51 |
+
$isAHash ? sfYamlInline::dump($key).':' : '-',
|
52 |
+
$willBeInlined ? ' ' : "\n",
|
53 |
+
$this->dump($value, $inline - 1, $willBeInlined ? 0 : $indent + 2)
|
54 |
+
).($willBeInlined ? "\n" : '');
|
55 |
+
}
|
56 |
+
}
|
57 |
+
|
58 |
+
return $output;
|
59 |
+
}
|
60 |
+
}
|
sdk/Aws_v1/lib/yaml/lib/sfYamlInline.php
ADDED
@@ -0,0 +1,442 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* This file is part of the symfony package.
|
5 |
+
* (c) Fabien Potencier <fabien.potencier@symfony-project.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
+
|
11 |
+
require_once dirname(__FILE__).'/sfYaml.php';
|
12 |
+
|
13 |
+
/**
|
14 |
+
* sfYamlInline implements a YAML parser/dumper for the YAML inline syntax.
|
15 |
+
*
|
16 |
+
* @package symfony
|
17 |
+
* @subpackage yaml
|
18 |
+
* @author Fabien Potencier <fabien.potencier@symfony-project.com>
|
19 |
+
* @version SVN: $Id: sfYamlInline.class.php 16177 2009-03-11 08:32:48Z fabien $
|
20 |
+
*/
|
21 |
+
class sfYamlInline
|
22 |
+
{
|
23 |
+
const REGEX_QUOTED_STRING = '(?:"([^"\\\\]*(?:\\\\.[^"\\\\]*)*)"|\'([^\']*(?:\'\'[^\']*)*)\')';
|
24 |
+
|
25 |
+
/**
|
26 |
+
* Convert a YAML string to a PHP array.
|
27 |
+
*
|
28 |
+
* @param string $value A YAML string
|
29 |
+
*
|
30 |
+
* @return array A PHP array representing the YAML string
|
31 |
+
*/
|
32 |
+
static public function load($value)
|
33 |
+
{
|
34 |
+
$value = trim($value);
|
35 |
+
|
36 |
+
if (0 == strlen($value))
|
37 |
+
{
|
38 |
+
return '';
|
39 |
+
}
|
40 |
+
|
41 |
+
if (function_exists('mb_internal_encoding') && ((int) ini_get('mbstring.func_overload')) & 2)
|
42 |
+
{
|
43 |
+
$mbEncoding = mb_internal_encoding();
|
44 |
+
mb_internal_encoding('ASCII');
|
45 |
+
}
|
46 |
+
|
47 |
+
switch ($value[0])
|
48 |
+
{
|
49 |
+
case '[':
|
50 |
+
$result = self::parseSequence($value);
|
51 |
+
break;
|
52 |
+
case '{':
|
53 |
+
$result = self::parseMapping($value);
|
54 |
+
break;
|
55 |
+
default:
|
56 |
+
$result = self::parseScalar($value);
|
57 |
+
}
|
58 |
+
|
59 |
+
if (isset($mbEncoding))
|
60 |
+
{
|
61 |
+
mb_internal_encoding($mbEncoding);
|
62 |
+
}
|
63 |
+
|
64 |
+
return $result;
|
65 |
+
}
|
66 |
+
|
67 |
+
/**
|
68 |
+
* Dumps a given PHP variable to a YAML string.
|
69 |
+
*
|
70 |
+
* @param mixed $value The PHP variable to convert
|
71 |
+
*
|
72 |
+
* @return string The YAML string representing the PHP array
|
73 |
+
*/
|
74 |
+
static public function dump($value)
|
75 |
+
{
|
76 |
+
if ('1.1' === sfYaml::getSpecVersion())
|
77 |
+
{
|
78 |
+
$trueValues = array('true', 'on', '+', 'yes', 'y');
|
79 |
+
$falseValues = array('false', 'off', '-', 'no', 'n');
|
80 |
+
}
|
81 |
+
else
|
82 |
+
{
|
83 |
+
$trueValues = array('true');
|
84 |
+
$falseValues = array('false');
|
85 |
+
}
|
86 |
+
|
87 |
+
switch (true)
|
88 |
+
{
|
89 |
+
case is_resource($value):
|
90 |
+
throw new InvalidArgumentException('Unable to dump PHP resources in a YAML file.');
|
91 |
+
case is_object($value):
|
92 |
+
return '!!php/object:'.serialize($value);
|
93 |
+
case is_array($value):
|
94 |
+
return self::dumpArray($value);
|
95 |
+
case null === $value:
|
96 |
+
return 'null';
|
97 |
+
case true === $value:
|
98 |
+
return 'true';
|
99 |
+
case false === $value:
|
100 |
+
return 'false';
|
101 |
+
case ctype_digit($value):
|
102 |
+
return is_string($value) ? "'$value'" : (int) $value;
|
103 |
+
case is_numeric($value):
|
104 |
+
return is_infinite($value) ? str_ireplace('INF', '.Inf', strval($value)) : (is_string($value) ? "'$value'" : $value);
|
105 |
+
case false !== strpos($value, "\n") || false !== strpos($value, "\r"):
|
106 |
+
return sprintf('"%s"', str_replace(array('"', "\n", "\r"), array('\\"', '\n', '\r'), $value));
|
107 |
+
case preg_match('/[ \s \' " \: \{ \} \[ \] , & \* \# \?] | \A[ - ? | < > = ! % @ ` ]/x', $value):
|
108 |
+
return sprintf("'%s'", str_replace('\'', '\'\'', $value));
|
109 |
+
case '' == $value:
|
110 |
+
return "''";
|
111 |
+
case preg_match(self::getTimestampRegex(), $value):
|
112 |
+
return "'$value'";
|
113 |
+
case in_array(strtolower($value), $trueValues):
|
114 |
+
return "'$value'";
|
115 |
+
case in_array(strtolower($value), $falseValues):
|
116 |
+
return "'$value'";
|
117 |
+
case in_array(strtolower($value), array('null', '~')):
|
118 |
+
return "'$value'";
|
119 |
+
default:
|
120 |
+
return $value;
|
121 |
+
}
|
122 |
+
}
|
123 |
+
|
124 |
+
/**
|
125 |
+
* Dumps a PHP array to a YAML string.
|
126 |
+
*
|
127 |
+
* @param array $value The PHP array to dump
|
128 |
+
*
|
129 |
+
* @return string The YAML string representing the PHP array
|
130 |
+
*/
|
131 |
+
static protected function dumpArray($value)
|
132 |
+
{
|
133 |
+
// array
|
134 |
+
$keys = array_keys($value);
|
135 |
+
if (
|
136 |
+
(1 == count($keys) && '0' == $keys[0])
|
137 |
+
||
|
138 |
+
(count($keys) > 1 && array_reduce($keys, create_function('$v,$w', 'return (integer) $v + $w;'), 0) == count($keys) * (count($keys) - 1) / 2))
|
139 |
+
{
|
140 |
+
$output = array();
|
141 |
+
foreach ($value as $val)
|
142 |
+
{
|
143 |
+
$output[] = self::dump($val);
|
144 |
+
}
|
145 |
+
|
146 |
+
return sprintf('[%s]', implode(', ', $output));
|
147 |
+
}
|
148 |
+
|
149 |
+
// mapping
|
150 |
+
$output = array();
|
151 |
+
foreach ($value as $key => $val)
|
152 |
+
{
|
153 |
+
$output[] = sprintf('%s: %s', self::dump($key), self::dump($val));
|
154 |
+
}
|
155 |
+
|
156 |
+
return sprintf('{ %s }', implode(', ', $output));
|
157 |
+
}
|
158 |
+
|
159 |
+
/**
|
160 |
+
* Parses a scalar to a YAML string.
|
161 |
+
*
|
162 |
+
* @param scalar $scalar
|
163 |
+
* @param string $delimiters
|
164 |
+
* @param array $stringDelimiter
|
165 |
+
* @param integer $i
|
166 |
+
* @param boolean $evaluate
|
167 |
+
*
|
168 |
+
* @return string A YAML string
|
169 |
+
*/
|
170 |
+
static public function parseScalar($scalar, $delimiters = null, $stringDelimiters = array('"', "'"), &$i = 0, $evaluate = true)
|
171 |
+
{
|
172 |
+
if (in_array($scalar[$i], $stringDelimiters))
|
173 |
+
{
|
174 |
+
// quoted scalar
|
175 |
+
$output = self::parseQuotedScalar($scalar, $i);
|
176 |
+
}
|
177 |
+
else
|
178 |
+
{
|
179 |
+
// "normal" string
|
180 |
+
if (!$delimiters)
|
181 |
+
{
|
182 |
+
$output = substr($scalar, $i);
|
183 |
+
$i += strlen($output);
|
184 |
+
|
185 |
+
// remove comments
|
186 |
+
if (false !== $strpos = strpos($output, ' #'))
|
187 |
+
{
|
188 |
+
$output = rtrim(substr($output, 0, $strpos));
|
189 |
+
}
|
190 |
+
}
|
191 |
+
else if (preg_match('/^(.+?)('.implode('|', $delimiters).')/', substr($scalar, $i), $match))
|
192 |
+
{
|
193 |
+
$output = $match[1];
|
194 |
+
$i += strlen($output);
|
195 |
+
}
|
196 |
+
else
|
197 |
+
{
|
198 |
+
throw new InvalidArgumentException(sprintf('Malformed inline YAML string (%s).', $scalar));
|
199 |
+
}
|
200 |
+
|
201 |
+
$output = $evaluate ? self::evaluateScalar($output) : $output;
|
202 |
+
}
|
203 |
+
|
204 |
+
return $output;
|
205 |
+
}
|
206 |
+
|
207 |
+
/**
|
208 |
+
* Parses a quoted scalar to YAML.
|
209 |
+
*
|
210 |
+
* @param string $scalar
|
211 |
+
* @param integer $i
|
212 |
+
*
|
213 |
+
* @return string A YAML string
|
214 |
+
*/
|
215 |
+
static protected function parseQuotedScalar($scalar, &$i)
|
216 |
+
{
|
217 |
+
if (!preg_match('/'.self::REGEX_QUOTED_STRING.'/A', substr($scalar, $i), $match))
|
218 |
+
{
|
219 |
+
throw new InvalidArgumentException(sprintf('Malformed inline YAML string (%s).', substr($scalar, $i)));
|
220 |
+
}
|
221 |
+
|
222 |
+
$output = substr($match[0], 1, strlen($match[0]) - 2);
|
223 |
+
|
224 |
+
if ('"' == $scalar[$i])
|
225 |
+
{
|
226 |
+
// evaluate the string
|
227 |
+
$output = str_replace(array('\\"', '\\n', '\\r'), array('"', "\n", "\r"), $output);
|
228 |
+
}
|
229 |
+
else
|
230 |
+
{
|
231 |
+
// unescape '
|
232 |
+
$output = str_replace('\'\'', '\'', $output);
|
233 |
+
}
|
234 |
+
|
235 |
+
$i += strlen($match[0]);
|
236 |
+
|
237 |
+
return $output;
|
238 |
+
}
|
239 |
+
|
240 |
+
/**
|
241 |
+
* Parses a sequence to a YAML string.
|
242 |
+
*
|
243 |
+
* @param string $sequence
|
244 |
+
* @param integer $i
|
245 |
+
*
|
246 |
+
* @return string A YAML string
|
247 |
+
*/
|
248 |
+
static protected function parseSequence($sequence, &$i = 0)
|
249 |
+
{
|
250 |
+
$output = array();
|
251 |
+
$len = strlen($sequence);
|
252 |
+
$i += 1;
|
253 |
+
|
254 |
+
// [foo, bar, ...]
|
255 |
+
while ($i < $len)
|
256 |
+
{
|
257 |
+
switch ($sequence[$i])
|
258 |
+
{
|
259 |
+
case '[':
|
260 |
+
// nested sequence
|
261 |
+
$output[] = self::parseSequence($sequence, $i);
|
262 |
+
break;
|
263 |
+
case '{':
|
264 |
+
// nested mapping
|
265 |
+
$output[] = self::parseMapping($sequence, $i);
|
266 |
+
break;
|
267 |
+
case ']':
|
268 |
+
return $output;
|
269 |
+
case ',':
|
270 |
+
case ' ':
|
271 |
+
break;
|
272 |
+
default:
|
273 |
+
$isQuoted = in_array($sequence[$i], array('"', "'"));
|
274 |
+
$value = self::parseScalar($sequence, array(',', ']'), array('"', "'"), $i);
|
275 |
+
|
276 |
+
if (!$isQuoted && false !== strpos($value, ': '))
|
277 |
+
{
|
278 |
+
// embedded mapping?
|
279 |
+
try
|
280 |
+
{
|
281 |
+
$value = self::parseMapping('{'.$value.'}');
|
282 |
+
}
|
283 |
+
catch (InvalidArgumentException $e)
|
284 |
+
{
|
285 |
+
// no, it's not
|
286 |
+
}
|
287 |
+
}
|
288 |
+
|
289 |
+
$output[] = $value;
|
290 |
+
|
291 |
+
--$i;
|
292 |
+
}
|
293 |
+
|
294 |
+
++$i;
|
295 |
+
}
|
296 |
+
|
297 |
+
throw new InvalidArgumentException(sprintf('Malformed inline YAML string %s', $sequence));
|
298 |
+
}
|
299 |
+
|
300 |
+
/**
|
301 |
+
* Parses a mapping to a YAML string.
|
302 |
+
*
|
303 |
+
* @param string $mapping
|
304 |
+
* @param integer $i
|
305 |
+
*
|
306 |
+
* @return string A YAML string
|
307 |
+
*/
|
308 |
+
static protected function parseMapping($mapping, &$i = 0)
|
309 |
+
{
|
310 |
+
$output = array();
|
311 |
+
$len = strlen($mapping);
|
312 |
+
$i += 1;
|
313 |
+
|
314 |
+
// {foo: bar, bar:foo, ...}
|
315 |
+
while ($i < $len)
|
316 |
+
{
|
317 |
+
switch ($mapping[$i])
|
318 |
+
{
|
319 |
+
case ' ':
|
320 |
+
case ',':
|
321 |
+
++$i;
|
322 |
+
continue 2;
|
323 |
+
case '}':
|
324 |
+
return $output;
|
325 |
+
}
|
326 |
+
|
327 |
+
// key
|
328 |
+
$key = self::parseScalar($mapping, array(':', ' '), array('"', "'"), $i, false);
|
329 |
+
|
330 |
+
// value
|
331 |
+
$done = false;
|
332 |
+
while ($i < $len)
|
333 |
+
{
|
334 |
+
switch ($mapping[$i])
|
335 |
+
{
|
336 |
+
case '[':
|
337 |
+
// nested sequence
|
338 |
+
$output[$key] = self::parseSequence($mapping, $i);
|
339 |
+
$done = true;
|
340 |
+
break;
|
341 |
+
case '{':
|
342 |
+
// nested mapping
|
343 |
+
$output[$key] = self::parseMapping($mapping, $i);
|
344 |
+
$done = true;
|
345 |
+
break;
|
346 |
+
case ':':
|
347 |
+
case ' ':
|
348 |
+
break;
|
349 |
+
default:
|
350 |
+
$output[$key] = self::parseScalar($mapping, array(',', '}'), array('"', "'"), $i);
|
351 |
+
$done = true;
|
352 |
+
--$i;
|
353 |
+
}
|
354 |
+
|
355 |
+
++$i;
|
356 |
+
|
357 |
+
if ($done)
|
358 |
+
{
|
359 |
+
continue 2;
|
360 |
+
}
|
361 |
+
}
|
362 |
+
}
|
363 |
+
|
364 |
+
throw new InvalidArgumentException(sprintf('Malformed inline YAML string %s', $mapping));
|
365 |
+
}
|
366 |
+
|
367 |
+
/**
|
368 |
+
* Evaluates scalars and replaces magic values.
|
369 |
+
*
|
370 |
+
* @param string $scalar
|
371 |
+
*
|
372 |
+
* @return string A YAML string
|
373 |
+
*/
|
374 |
+
static protected function evaluateScalar($scalar)
|
375 |
+
{
|
376 |
+
$scalar = trim($scalar);
|
377 |
+
|
378 |
+
if ('1.1' === sfYaml::getSpecVersion())
|
379 |
+
{
|
380 |
+
$trueValues = array('true', 'on', '+', 'yes', 'y');
|
381 |
+
$falseValues = array('false', 'off', '-', 'no', 'n');
|
382 |
+
}
|
383 |
+
else
|
384 |
+
{
|
385 |
+
$trueValues = array('true');
|
386 |
+
$falseValues = array('false');
|
387 |
+
}
|
388 |
+
|
389 |
+
switch (true)
|
390 |
+
{
|
391 |
+
case 'null' == strtolower($scalar):
|
392 |
+
case '' == $scalar:
|
393 |
+
case '~' == $scalar:
|
394 |
+
return null;
|
395 |
+
case 0 === strpos($scalar, '!str'):
|
396 |
+
return (string) substr($scalar, 5);
|
397 |
+
case 0 === strpos($scalar, '! '):
|
398 |
+
return intval(self::parseScalar(substr($scalar, 2)));
|
399 |
+
case 0 === strpos($scalar, '!!php/object:'):
|
400 |
+
return unserialize(substr($scalar, 13));
|
401 |
+
case ctype_digit($scalar):
|
402 |
+
$raw = $scalar;
|
403 |
+
$cast = intval($scalar);
|
404 |
+
return '0' == $scalar[0] ? octdec($scalar) : (((string) $raw == (string) $cast) ? $cast : $raw);
|
405 |
+
case in_array(strtolower($scalar), $trueValues):
|
406 |
+
return true;
|
407 |
+
case in_array(strtolower($scalar), $falseValues):
|
408 |
+
return false;
|
409 |
+
case is_numeric($scalar):
|
410 |
+
return '0x' == $scalar[0].$scalar[1] ? hexdec($scalar) : floatval($scalar);
|
411 |
+
case 0 == strcasecmp($scalar, '.inf'):
|
412 |
+
case 0 == strcasecmp($scalar, '.NaN'):
|
413 |
+
return -log(0);
|
414 |
+
case 0 == strcasecmp($scalar, '-.inf'):
|
415 |
+
return log(0);
|
416 |
+
case preg_match('/^(-|\+)?[0-9,]+(\.[0-9]+)?$/', $scalar):
|
417 |
+
return floatval(str_replace(',', '', $scalar));
|
418 |
+
case preg_match(self::getTimestampRegex(), $scalar):
|
419 |
+
return strtotime($scalar);
|
420 |
+
default:
|
421 |
+
return (string) $scalar;
|
422 |
+
}
|
423 |
+
}
|
424 |
+
|
425 |
+
static protected function getTimestampRegex()
|
426 |
+
{
|
427 |
+
return <<<EOF
|
428 |
+
~^
|
429 |
+
(?P<year>[0-9][0-9][0-9][0-9])
|
430 |
+
-(?P<month>[0-9][0-9]?)
|
431 |
+
-(?P<day>[0-9][0-9]?)
|
432 |
+
(?:(?:[Tt]|[ \t]+)
|
433 |
+
(?P<hour>[0-9][0-9]?)
|
434 |
+
:(?P<minute>[0-9][0-9])
|
435 |
+
:(?P<second>[0-9][0-9])
|
436 |
+
(?:\.(?P<fraction>[0-9]*))?
|
437 |
+
(?:[ \t]*(?P<tz>Z|(?P<tz_sign>[-+])(?P<tz_hour>[0-9][0-9]?)
|
438 |
+
(?::(?P<tz_minute>[0-9][0-9]))?))?)?
|
439 |
+
$~x
|
440 |
+
EOF;
|
441 |
+
}
|
442 |
+
}
|
sdk/Aws_v1/lib/yaml/lib/sfYamlParser.php
ADDED
@@ -0,0 +1,612 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* This file is part of the symfony package.
|
5 |
+
* (c) Fabien Potencier <fabien.potencier@symfony-project.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
+
|
11 |
+
require_once(dirname(__FILE__).'/sfYamlInline.php');
|
12 |
+
|
13 |
+
if (!defined('PREG_BAD_UTF8_OFFSET_ERROR'))
|
14 |
+
{
|
15 |
+
define('PREG_BAD_UTF8_OFFSET_ERROR', 5);
|
16 |
+
}
|
17 |
+
|
18 |
+
/**
|
19 |
+
* sfYamlParser parses YAML strings to convert them to PHP arrays.
|
20 |
+
*
|
21 |
+
* @package symfony
|
22 |
+
* @subpackage yaml
|
23 |
+
* @author Fabien Potencier <fabien.potencier@symfony-project.com>
|
24 |
+
* @version SVN: $Id: sfYamlParser.class.php 10832 2008-08-13 07:46:08Z fabien $
|
25 |
+
*/
|
26 |
+
class sfYamlParser
|
27 |
+
{
|
28 |
+
protected
|
29 |
+
$offset = 0,
|
30 |
+
$lines = array(),
|
31 |
+
$currentLineNb = -1,
|
32 |
+
$currentLine = '',
|
33 |
+
$refs = array();
|
34 |
+
|
35 |
+
/**
|
36 |
+
* Constructor
|
37 |
+
*
|
38 |
+
* @param integer $offset The offset of YAML document (used for line numbers in error messages)
|
39 |
+
*/
|
40 |
+
public function __construct($offset = 0)
|
41 |
+
{
|
42 |
+
$this->offset = $offset;
|
43 |
+
}
|
44 |
+
|
45 |
+
/**
|
46 |
+
* Parses a YAML string to a PHP value.
|
47 |
+
*
|
48 |
+
* @param string $value A YAML string
|
49 |
+
*
|
50 |
+
* @return mixed A PHP value
|
51 |
+
*
|
52 |
+
* @throws InvalidArgumentException If the YAML is not valid
|
53 |
+
*/
|
54 |
+
public function parse($value)
|
55 |
+
{
|
56 |
+
$value = str_replace("\t", ' ', $value); // Convert tabs to spaces.
|
57 |
+
|
58 |
+
$this->currentLineNb = -1;
|
59 |
+
$this->currentLine = '';
|
60 |
+
$this->lines = explode("\n", $this->cleanup($value));
|
61 |
+
|
62 |
+
if (function_exists('mb_internal_encoding') && ((int) ini_get('mbstring.func_overload')) & 2)
|
63 |
+
{
|
64 |
+
$mbEncoding = mb_internal_encoding();
|
65 |
+
mb_internal_encoding('ASCII');
|
66 |
+
}
|
67 |
+
|
68 |
+
$data = array();
|
69 |
+
while ($this->moveToNextLine())
|
70 |
+
{
|
71 |
+
if ($this->isCurrentLineEmpty())
|
72 |
+
{
|
73 |
+
continue;
|
74 |
+
}
|
75 |
+
|
76 |
+
// tab?
|
77 |
+
if (preg_match('#^\t+#', $this->currentLine))
|
78 |
+
{
|
79 |
+
throw new InvalidArgumentException(sprintf('A YAML file cannot contain tabs as indentation at line %d (%s).', $this->getRealCurrentLineNb() + 1, $this->currentLine));
|
80 |
+
}
|
81 |
+
|
82 |
+
$isRef = $isInPlace = $isProcessed = false;
|
83 |
+
if (preg_match('#^\-((?P<leadspaces>\s+)(?P<value>.+?))?\s*$#', $this->currentLine, $values))
|
84 |
+
{
|
85 |
+
if (isset($values['value']) && preg_match('#^&(?P<ref>[^ ]+) *(?P<value>.*)#', $values['value'], $matches))
|
86 |
+
{
|
87 |
+
$isRef = $matches['ref'];
|
88 |
+
$values['value'] = $matches['value'];
|
89 |
+
}
|
90 |
+
|
91 |
+
// array
|
92 |
+
if (!isset($values['value']) || '' == trim($values['value'], ' ') || 0 === strpos(ltrim($values['value'], ' '), '#'))
|
93 |
+
{
|
94 |
+
$c = $this->getRealCurrentLineNb() + 1;
|
95 |
+
$parser = new sfYamlParser($c);
|
96 |
+
$parser->refs =& $this->refs;
|
97 |
+
$data[] = $parser->parse($this->getNextEmbedBlock());
|
98 |
+
}
|
99 |
+
else
|
100 |
+
{
|
101 |
+
if (isset($values['leadspaces'])
|
102 |
+
&& ' ' == $values['leadspaces']
|
103 |
+
&& preg_match('#^(?P<key>'.sfYamlInline::REGEX_QUOTED_STRING.'|[^ \'"\{].*?) *\:(\s+(?P<value>.+?))?\s*$#', $values['value'], $matches))
|
104 |
+
{
|
105 |
+
// this is a compact notation element, add to next block and parse
|
106 |
+
$c = $this->getRealCurrentLineNb();
|
107 |
+
$parser = new sfYamlParser($c);
|
108 |
+
$parser->refs =& $this->refs;
|
109 |
+
|
110 |
+
$block = $values['value'];
|
111 |
+
if (!$this->isNextLineIndented())
|
112 |
+
{
|
113 |
+
$block .= "\n".$this->getNextEmbedBlock($this->getCurrentLineIndentation() + 2);
|
114 |
+
}
|
115 |
+
|
116 |
+
$data[] = $parser->parse($block);
|
117 |
+
}
|
118 |
+
else
|
119 |
+
{
|
120 |
+
$data[] = $this->parseValue($values['value']);
|
121 |
+
}
|
122 |
+
}
|
123 |
+
}
|
124 |
+
else if (preg_match('#^(?P<key>'.sfYamlInline::REGEX_QUOTED_STRING.'|[^ \'"].*?) *\:(\s+(?P<value>.+?))?\s*$#', $this->currentLine, $values))
|
125 |
+
{
|
126 |
+
$key = sfYamlInline::parseScalar($values['key']);
|
127 |
+
|
128 |
+
if ('<<' === $key)
|
129 |
+
{
|
130 |
+
if (isset($values['value']) && '*' === substr($values['value'], 0, 1))
|
131 |
+
{
|
132 |
+
$isInPlace = substr($values['value'], 1);
|
133 |
+
if (!array_key_exists($isInPlace, $this->refs))
|
134 |
+
{
|
135 |
+
throw new InvalidArgumentException(sprintf('Reference "%s" does not exist at line %s (%s).', $isInPlace, $this->getRealCurrentLineNb() + 1, $this->currentLine));
|
136 |
+
}
|
137 |
+
}
|
138 |
+
else
|
139 |
+
{
|
140 |
+
if (isset($values['value']) && $values['value'] !== '')
|
141 |
+
{
|
142 |
+
$value = $values['value'];
|
143 |
+
}
|
144 |
+
else
|
145 |
+
{
|
146 |
+
$value = $this->getNextEmbedBlock();
|
147 |
+
}
|
148 |
+
$c = $this->getRealCurrentLineNb() + 1;
|
149 |
+
$parser = new sfYamlParser($c);
|
150 |
+
$parser->refs =& $this->refs;
|
151 |
+
$parsed = $parser->parse($value);
|
152 |
+
|
153 |
+
$merged = array();
|
154 |
+
if (!is_array($parsed))
|
155 |
+
{
|
156 |
+
throw new InvalidArgumentException(sprintf("YAML merge keys used with a scalar value instead of an array at line %s (%s)", $this->getRealCurrentLineNb() + 1, $this->currentLine));
|
157 |
+
}
|
158 |
+
else if (isset($parsed[0]))
|
159 |
+
{
|
160 |
+
// Numeric array, merge individual elements
|
161 |
+
foreach (array_reverse($parsed) as $parsedItem)
|
162 |
+
{
|
163 |
+
if (!is_array($parsedItem))
|
164 |
+
{
|
165 |
+
throw new InvalidArgumentException(sprintf("Merge items must be arrays at line %s (%s).", $this->getRealCurrentLineNb() + 1, $parsedItem));
|
166 |
+
}
|
167 |
+
$merged = array_merge($parsedItem, $merged);
|
168 |
+
}
|
169 |
+
}
|
170 |
+
else
|
171 |
+
{
|
172 |
+
// Associative array, merge
|
173 |
+
$merged = array_merge($merge, $parsed);
|
174 |
+
}
|
175 |
+
|
176 |
+
$isProcessed = $merged;
|
177 |
+
}
|
178 |
+
}
|
179 |
+
else if (isset($values['value']) && preg_match('#^&(?P<ref>[^ ]+) *(?P<value>.*)#', $values['value'], $matches))
|
180 |
+
{
|
181 |
+
$isRef = $matches['ref'];
|
182 |
+
$values['value'] = $matches['value'];
|
183 |
+
}
|
184 |
+
|
185 |
+
if ($isProcessed)
|
186 |
+
{
|
187 |
+
// Merge keys
|
188 |
+
$data = $isProcessed;
|
189 |
+
}
|
190 |
+
// hash
|
191 |
+
else if (!isset($values['value']) || '' == trim($values['value'], ' ') || 0 === strpos(ltrim($values['value'], ' '), '#'))
|
192 |
+
{
|
193 |
+
// if next line is less indented or equal, then it means that the current value is null
|
194 |
+
if ($this->isNextLineIndented())
|
195 |
+
{
|
196 |
+
$data[$key] = null;
|
197 |
+
}
|
198 |
+
else
|
199 |
+
{
|
200 |
+
$c = $this->getRealCurrentLineNb() + 1;
|
201 |
+
$parser = new sfYamlParser($c);
|
202 |
+
$parser->refs =& $this->refs;
|
203 |
+
$data[$key] = $parser->parse($this->getNextEmbedBlock());
|
204 |
+
}
|
205 |
+
}
|
206 |
+
else
|
207 |
+
{
|
208 |
+
if ($isInPlace)
|
209 |
+
{
|
210 |
+
$data = $this->refs[$isInPlace];
|
211 |
+
}
|
212 |
+
else
|
213 |
+
{
|
214 |
+
$data[$key] = $this->parseValue($values['value']);
|
215 |
+
}
|
216 |
+
}
|
217 |
+
}
|
218 |
+
else
|
219 |
+
{
|
220 |
+
// 1-liner followed by newline
|
221 |
+
if (2 == count($this->lines) && empty($this->lines[1]))
|
222 |
+
{
|
223 |
+
$value = sfYamlInline::load($this->lines[0]);
|
224 |
+
if (is_array($value))
|
225 |
+
{
|
226 |
+
$first = reset($value);
|
227 |
+
if ('*' === substr($first, 0, 1))
|
228 |
+
{
|
229 |
+
$data = array();
|
230 |
+
foreach ($value as $alias)
|
231 |
+
{
|
232 |
+
$data[] = $this->refs[substr($alias, 1)];
|
233 |
+
}
|
234 |
+
$value = $data;
|
235 |
+
}
|
236 |
+
}
|
237 |
+
|
238 |
+
if (isset($mbEncoding))
|
239 |
+
{
|
240 |
+
mb_internal_encoding($mbEncoding);
|
241 |
+
}
|
242 |
+
|
243 |
+
return $value;
|
244 |
+
}
|
245 |
+
|
246 |
+
switch (preg_last_error())
|
247 |
+
{
|
248 |
+
case PREG_INTERNAL_ERROR:
|
249 |
+
$error = 'Internal PCRE error on line';
|
250 |
+
break;
|
251 |
+
case PREG_BACKTRACK_LIMIT_ERROR:
|
252 |
+
$error = 'pcre.backtrack_limit reached on line';
|
253 |
+
break;
|
254 |
+
case PREG_RECURSION_LIMIT_ERROR:
|
255 |
+
$error = 'pcre.recursion_limit reached on line';
|
256 |
+
break;
|
257 |
+
case PREG_BAD_UTF8_ERROR:
|
258 |
+
$error = 'Malformed UTF-8 data on line';
|
259 |
+
break;
|
260 |
+
case PREG_BAD_UTF8_OFFSET_ERROR:
|
261 |
+
$error = 'Offset doesn\'t correspond to the begin of a valid UTF-8 code point on line';
|
262 |
+
break;
|
263 |
+
default:
|
264 |
+
$error = 'Unable to parse line';
|
265 |
+
}
|
266 |
+
|
267 |
+
throw new InvalidArgumentException(sprintf('%s %d (%s).', $error, $this->getRealCurrentLineNb() + 1, $this->currentLine));
|
268 |
+
}
|
269 |
+
|
270 |
+
if ($isRef)
|
271 |
+
{
|
272 |
+
$this->refs[$isRef] = end($data);
|
273 |
+
}
|
274 |
+
}
|
275 |
+
|
276 |
+
if (isset($mbEncoding))
|
277 |
+
{
|
278 |
+
mb_internal_encoding($mbEncoding);
|
279 |
+
}
|
280 |
+
|
281 |
+
return empty($data) ? null : $data;
|
282 |
+
}
|
283 |
+
|
284 |
+
/**
|
285 |
+
* Returns the current line number (takes the offset into account).
|
286 |
+
*
|
287 |
+
* @return integer The current line number
|
288 |
+
*/
|
289 |
+
protected function getRealCurrentLineNb()
|
290 |
+
{
|
291 |
+
return $this->currentLineNb + $this->offset;
|
292 |
+
}
|
293 |
+
|
294 |
+
/**
|
295 |
+
* Returns the current line indentation.
|
296 |
+
*
|
297 |
+
* @return integer The current line indentation
|
298 |
+
*/
|
299 |
+
protected function getCurrentLineIndentation()
|
300 |
+
{
|
301 |
+
return strlen($this->currentLine) - strlen(ltrim($this->currentLine, ' '));
|
302 |
+
}
|
303 |
+
|
304 |
+
/**
|
305 |
+
* Returns the next embed block of YAML.
|
306 |
+
*
|
307 |
+
* @param integer $indentation The indent level at which the block is to be read, or null for default
|
308 |
+
*
|
309 |
+
* @return string A YAML string
|
310 |
+
*/
|
311 |
+
protected function getNextEmbedBlock($indentation = null)
|
312 |
+
{
|
313 |
+
$this->moveToNextLine();
|
314 |
+
|
315 |
+
if (null === $indentation)
|
316 |
+
{
|
317 |
+
$newIndent = $this->getCurrentLineIndentation();
|
318 |
+
|
319 |
+
if (!$this->isCurrentLineEmpty() && 0 == $newIndent)
|
320 |
+
{
|
321 |
+
throw new InvalidArgumentException(sprintf('Indentation problem at line %d (%s)', $this->getRealCurrentLineNb() + 1, $this->currentLine));
|
322 |
+
}
|
323 |
+
}
|
324 |
+
else
|
325 |
+
{
|
326 |
+
$newIndent = $indentation;
|
327 |
+
}
|
328 |
+
|
329 |
+
$data = array(substr($this->currentLine, $newIndent));
|
330 |
+
|
331 |
+
while ($this->moveToNextLine())
|
332 |
+
{
|
333 |
+
if ($this->isCurrentLineEmpty())
|
334 |
+
{
|
335 |
+
if ($this->isCurrentLineBlank())
|
336 |
+
{
|
337 |
+
$data[] = substr($this->currentLine, $newIndent);
|
338 |
+
}
|
339 |
+
|
340 |
+
continue;
|
341 |
+
}
|
342 |
+
|
343 |
+
$indent = $this->getCurrentLineIndentation();
|
344 |
+
|
345 |
+
if (preg_match('#^(?P<text> *)$#', $this->currentLine, $match))
|
346 |
+
{
|
347 |
+
// empty line
|
348 |
+
$data[] = $match['text'];
|
349 |
+
}
|
350 |
+
else if ($indent >= $newIndent)
|
351 |
+
{
|
352 |
+
$data[] = substr($this->currentLine, $newIndent);
|
353 |
+
}
|
354 |
+
else if (0 == $indent)
|
355 |
+
{
|
356 |
+
$this->moveToPreviousLine();
|
357 |
+
|
358 |
+
break;
|
359 |
+
}
|
360 |
+
else
|
361 |
+
{
|
362 |
+
throw new InvalidArgumentException(sprintf('Indentation problem at line %d (%s)', $this->getRealCurrentLineNb() + 1, $this->currentLine));
|
363 |
+
}
|
364 |
+
}
|
365 |
+
|
366 |
+
return implode("\n", $data);
|
367 |
+
}
|
368 |
+
|
369 |
+
/**
|
370 |
+
* Moves the parser to the next line.
|
371 |
+
*/
|
372 |
+
protected function moveToNextLine()
|
373 |
+
{
|
374 |
+
if ($this->currentLineNb >= count($this->lines) - 1)
|
375 |
+
{
|
376 |
+
return false;
|
377 |
+
}
|
378 |
+
|
379 |
+
$this->currentLine = $this->lines[++$this->currentLineNb];
|
380 |
+
|
381 |
+
return true;
|
382 |
+
}
|
383 |
+
|
384 |
+
/**
|
385 |
+
* Moves the parser to the previous line.
|
386 |
+
*/
|
387 |
+
protected function moveToPreviousLine()
|
388 |
+
{
|
389 |
+
$this->currentLine = $this->lines[--$this->currentLineNb];
|
390 |
+
}
|
391 |
+
|
392 |
+
/**
|
393 |
+
* Parses a YAML value.
|
394 |
+
*
|
395 |
+
* @param string $value A YAML value
|
396 |
+
*
|
397 |
+
* @return mixed A PHP value
|
398 |
+
*/
|
399 |
+
protected function parseValue($value)
|
400 |
+
{
|
401 |
+
if ('*' === substr($value, 0, 1))
|
402 |
+
{
|
403 |
+
if (false !== $pos = strpos($value, '#'))
|
404 |
+
{
|
405 |
+
$value = substr($value, 1, $pos - 2);
|
406 |
+
}
|
407 |
+
else
|
408 |
+
{
|
409 |
+
$value = substr($value, 1);
|
410 |
+
}
|
411 |
+
|
412 |
+
if (!array_key_exists($value, $this->refs))
|
413 |
+
{
|
414 |
+
throw new InvalidArgumentException(sprintf('Reference "%s" does not exist (%s).', $value, $this->currentLine));
|
415 |
+
}
|
416 |
+
return $this->refs[$value];
|
417 |
+
}
|
418 |
+
|
419 |
+
if (preg_match('/^(?P<separator>\||>)(?P<modifiers>\+|\-|\d+|\+\d+|\-\d+|\d+\+|\d+\-)?(?P<comments> +#.*)?$/', $value, $matches))
|
420 |
+
{
|
421 |
+
$modifiers = isset($matches['modifiers']) ? $matches['modifiers'] : '';
|
422 |
+
|
423 |
+
return $this->parseFoldedScalar($matches['separator'], preg_replace('#\d+#', '', $modifiers), intval(abs($modifiers)));
|
424 |
+
}
|
425 |
+
else
|
426 |
+
{
|
427 |
+
return sfYamlInline::load($value);
|
428 |
+
}
|
429 |
+
}
|
430 |
+
|
431 |
+
/**
|
432 |
+
* Parses a folded scalar.
|
433 |
+
*
|
434 |
+
* @param string $separator The separator that was used to begin this folded scalar (| or >)
|
435 |
+
* @param string $indicator The indicator that was used to begin this folded scalar (+ or -)
|
436 |
+
* @param integer $indentation The indentation that was used to begin this folded scalar
|
437 |
+
*
|
438 |
+
* @return string The text value
|
439 |
+
*/
|
440 |
+
protected function parseFoldedScalar($separator, $indicator = '', $indentation = 0)
|
441 |
+
{
|
442 |
+
$separator = '|' == $separator ? "\n" : ' ';
|
443 |
+
$text = '';
|
444 |
+
|
445 |
+
$notEOF = $this->moveToNextLine();
|
446 |
+
|
447 |
+
while ($notEOF && $this->isCurrentLineBlank())
|
448 |
+
{
|
449 |
+
$text .= "\n";
|
450 |
+
|
451 |
+
$notEOF = $this->moveToNextLine();
|
452 |
+
}
|
453 |
+
|
454 |
+
if (!$notEOF)
|
455 |
+
{
|
456 |
+
return '';
|
457 |
+
}
|
458 |
+
|
459 |
+
if (!preg_match('#^(?P<indent>'.($indentation ? str_repeat(' ', $indentation) : ' +').')(?P<text>.*)$#', $this->currentLine, $matches))
|
460 |
+
{
|
461 |
+
$this->moveToPreviousLine();
|
462 |
+
|
463 |
+
return '';
|
464 |
+
}
|
465 |
+
|
466 |
+
$textIndent = $matches['indent'];
|
467 |
+
$previousIndent = 0;
|
468 |
+
|
469 |
+
$text .= $matches['text'].$separator;
|
470 |
+
while ($this->currentLineNb + 1 < count($this->lines))
|
471 |
+
{
|
472 |
+
$this->moveToNextLine();
|
473 |
+
|
474 |
+
if (preg_match('#^(?P<indent> {'.strlen($textIndent).',})(?P<text>.+)$#', $this->currentLine, $matches))
|
475 |
+
{
|
476 |
+
if (' ' == $separator && $previousIndent != $matches['indent'])
|
477 |
+
{
|
478 |
+
$text = substr($text, 0, -1)."\n";
|
479 |
+
}
|
480 |
+
$previousIndent = $matches['indent'];
|
481 |
+
|
482 |
+
$text .= str_repeat(' ', $diff = strlen($matches['indent']) - strlen($textIndent)).$matches['text'].($diff ? "\n" : $separator);
|
483 |
+
}
|
484 |
+
else if (preg_match('#^(?P<text> *)$#', $this->currentLine, $matches))
|
485 |
+
{
|
486 |
+
$text .= preg_replace('#^ {1,'.strlen($textIndent).'}#', '', $matches['text'])."\n";
|
487 |
+
}
|
488 |
+
else
|
489 |
+
{
|
490 |
+
$this->moveToPreviousLine();
|
491 |
+
|
492 |
+
break;
|
493 |
+
}
|
494 |
+
}
|
495 |
+
|
496 |
+
if (' ' == $separator)
|
497 |
+
{
|
498 |
+
// replace last separator by a newline
|
499 |
+
$text = preg_replace('/ (\n*)$/', "\n$1", $text);
|
500 |
+
}
|
501 |
+
|
502 |
+
switch ($indicator)
|
503 |
+
{
|
504 |
+
case '':
|
505 |
+
$text = preg_replace('#\n+$#s', "\n", $text);
|
506 |
+
break;
|
507 |
+
case '+':
|
508 |
+
break;
|
509 |
+
case '-':
|
510 |
+
$text = preg_replace('#\n+$#s', '', $text);
|
511 |
+
break;
|
512 |
+
}
|
513 |
+
|
514 |
+
return $text;
|
515 |
+
}
|
516 |
+
|
517 |
+
/**
|
518 |
+
* Returns true if the next line is indented.
|
519 |
+
*
|
520 |
+
* @return Boolean Returns true if the next line is indented, false otherwise
|
521 |
+
*/
|
522 |
+
protected function isNextLineIndented()
|
523 |
+
{
|
524 |
+
$currentIndentation = $this->getCurrentLineIndentation();
|
525 |
+
$notEOF = $this->moveToNextLine();
|
526 |
+
|
527 |
+
while ($notEOF && $this->isCurrentLineEmpty())
|
528 |
+
{
|
529 |
+
$notEOF = $this->moveToNextLine();
|
530 |
+
}
|
531 |
+
|
532 |
+
if (false === $notEOF)
|
533 |
+
{
|
534 |
+
return false;
|
535 |
+
}
|
536 |
+
|
537 |
+
$ret = false;
|
538 |
+
if ($this->getCurrentLineIndentation() <= $currentIndentation)
|
539 |
+
{
|
540 |
+
$ret = true;
|
541 |
+
}
|
542 |
+
|
543 |
+
$this->moveToPreviousLine();
|
544 |
+
|
545 |
+
return $ret;
|
546 |
+
}
|
547 |
+
|
548 |
+
/**
|
549 |
+
* Returns true if the current line is blank or if it is a comment line.
|
550 |
+
*
|
551 |
+
* @return Boolean Returns true if the current line is empty or if it is a comment line, false otherwise
|
552 |
+
*/
|
553 |
+
protected function isCurrentLineEmpty()
|
554 |
+
{
|
555 |
+
return $this->isCurrentLineBlank() || $this->isCurrentLineComment();
|
556 |
+
}
|
557 |
+
|
558 |
+
/**
|
559 |
+
* Returns true if the current line is blank.
|
560 |
+
*
|
561 |
+
* @return Boolean Returns true if the current line is blank, false otherwise
|
562 |
+
*/
|
563 |
+
protected function isCurrentLineBlank()
|
564 |
+
{
|
565 |
+
return '' == trim($this->currentLine, ' ');
|
566 |
+
}
|
567 |
+
|
568 |
+
/**
|
569 |
+
* Returns true if the current line is a comment line.
|
570 |
+
*
|
571 |
+
* @return Boolean Returns true if the current line is a comment line, false otherwise
|
572 |
+
*/
|
573 |
+
protected function isCurrentLineComment()
|
574 |
+
{
|
575 |
+
//checking explicitly the first char of the trim is faster than loops or strpos
|
576 |
+
$ltrimmedLine = ltrim($this->currentLine, ' ');
|
577 |
+
return $ltrimmedLine[0] === '#';
|
578 |
+
}
|
579 |
+
|
580 |
+
/**
|
581 |
+
* Cleanups a YAML string to be parsed.
|
582 |
+
*
|
583 |
+
* @param string $value The input YAML string
|
584 |
+
*
|
585 |
+
* @return string A cleaned up YAML string
|
586 |
+
*/
|
587 |
+
protected function cleanup($value)
|
588 |
+
{
|
589 |
+
$value = str_replace(array("\r\n", "\r"), "\n", $value);
|
590 |
+
|
591 |
+
if (!preg_match("#\n$#", $value))
|
592 |
+
{
|
593 |
+
$value .= "\n";
|
594 |
+
}
|
595 |
+
|
596 |
+
// strip YAML header
|
597 |
+
$count = 0;
|
598 |
+
$value = preg_replace('#^\%YAML[: ][\d\.]+.*\n#s', '', $value, -1, $count);
|
599 |
+
$this->offset += $count;
|
600 |
+
|
601 |
+
// remove leading comments and/or ---
|
602 |
+
$trimmedValue = preg_replace('#^((\#.*?\n)|(\-\-\-.*?\n))*#s', '', $value, -1, $count);
|
603 |
+
if ($count == 1)
|
604 |
+
{
|
605 |
+
// items have been removed, update the offset
|
606 |
+
$this->offset += substr_count($value, "\n") - substr_count($trimmedValue, "\n");
|
607 |
+
$value = $trimmedValue;
|
608 |
+
}
|
609 |
+
|
610 |
+
return $value;
|
611 |
+
}
|
612 |
+
}
|
sdk/Aws_v1/sdk.class.php
ADDED
@@ -0,0 +1,1517 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* Copyright 2010-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
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 |
+
* A copy of the License is located at
|
8 |
+
*
|
9 |
+
* http://aws.amazon.com/apache2.0
|
10 |
+
*
|
11 |
+
* or in the "license" file accompanying this file. This file is distributed
|
12 |
+
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
|
13 |
+
* express or implied. See the License for the specific language governing
|
14 |
+
* permissions and limitations under the License.
|
15 |
+
*/
|
16 |
+
|
17 |
+
|
18 |
+
/*%******************************************************************************************%*/
|
19 |
+
// EXCEPTIONS
|
20 |
+
|
21 |
+
/**
|
22 |
+
* Default CFRuntime Exception.
|
23 |
+
*/
|
24 |
+
class CFRuntime_Exception extends Exception {}
|
25 |
+
|
26 |
+
/**
|
27 |
+
* Parsing Exception.
|
28 |
+
*/
|
29 |
+
class Parser_Exception extends Exception {}
|
30 |
+
|
31 |
+
|
32 |
+
/*%******************************************************************************************%*/
|
33 |
+
// INTERMEDIARY CONSTANTS
|
34 |
+
|
35 |
+
define('CFRUNTIME_NAME', 'aws-sdk-php');
|
36 |
+
define('CFRUNTIME_VERSION', '1.6.0');
|
37 |
+
define('CFRUNTIME_BUILD', '20130121120000');
|
38 |
+
$user_agent = sprintf('%s/%s PHP/%s', CFRUNTIME_NAME, CFRUNTIME_VERSION, PHP_VERSION);
|
39 |
+
if (function_exists('curl_version'))
|
40 |
+
{
|
41 |
+
$curl_version = curl_version();
|
42 |
+
$user_agent .= ' curl/' . $curl_version['version'];
|
43 |
+
}
|
44 |
+
if (defined('OPENSSL_VERSION_TEXT'))
|
45 |
+
{
|
46 |
+
$openssl_version = explode(' ', OPENSSL_VERSION_TEXT);
|
47 |
+
$user_agent .= ' openssl/' . $openssl_version[1];
|
48 |
+
}
|
49 |
+
define('CFRUNTIME_USERAGENT', $user_agent);
|
50 |
+
unset($user_agent);
|
51 |
+
|
52 |
+
|
53 |
+
/*%******************************************************************************************%*/
|
54 |
+
// CLASS
|
55 |
+
|
56 |
+
/**
|
57 |
+
* Core functionality and default settings shared across all SDK classes. All methods and properties in this
|
58 |
+
* class are inherited by the service-specific classes.
|
59 |
+
*
|
60 |
+
* @version 2012.05.25
|
61 |
+
* @license See the included NOTICE.md file for more information.
|
62 |
+
* @copyright See the included NOTICE.md file for more information.
|
63 |
+
* @link http://aws.amazon.com/php/ PHP Developer Center
|
64 |
+
*/
|
65 |
+
class CFRuntime
|
66 |
+
{
|
67 |
+
/*%******************************************************************************************%*/
|
68 |
+
// CONSTANTS
|
69 |
+
|
70 |
+
/**
|
71 |
+
* Name of the software.
|
72 |
+
*/
|
73 |
+
const NAME = CFRUNTIME_NAME;
|
74 |
+
|
75 |
+
/**
|
76 |
+
* Version of the software.
|
77 |
+
*/
|
78 |
+
const VERSION = CFRUNTIME_VERSION;
|
79 |
+
|
80 |
+
/**
|
81 |
+
* Build ID of the software.
|
82 |
+
*/
|
83 |
+
const BUILD = CFRUNTIME_BUILD;
|
84 |
+
|
85 |
+
/**
|
86 |
+
* User agent string used to identify the software.
|
87 |
+
*/
|
88 |
+
const USERAGENT = CFRUNTIME_USERAGENT;
|
89 |
+
|
90 |
+
|
91 |
+
/*%******************************************************************************************%*/
|
92 |
+
// PROPERTIES
|
93 |
+
|
94 |
+
/**
|
95 |
+
* The Amazon API Key.
|
96 |
+
*/
|
97 |
+
public $key;
|
98 |
+
|
99 |
+
/**
|
100 |
+
* The Amazon API Secret Key.
|
101 |
+
*/
|
102 |
+
public $secret_key;
|
103 |
+
|
104 |
+
/**
|
105 |
+
* The Amazon Authentication Token.
|
106 |
+
*/
|
107 |
+
public $auth_token;
|
108 |
+
|
109 |
+
/**
|
110 |
+
* Handle for the utility functions.
|
111 |
+
*/
|
112 |
+
public $util;
|
113 |
+
|
114 |
+
/**
|
115 |
+
* An identifier for the current AWS service.
|
116 |
+
*/
|
117 |
+
public $service = null;
|
118 |
+
|
119 |
+
/**
|
120 |
+
* The supported API version.
|
121 |
+
*/
|
122 |
+
public $api_version = null;
|
123 |
+
|
124 |
+
/**
|
125 |
+
* The state of whether auth should be handled as AWS Query.
|
126 |
+
*/
|
127 |
+
public $use_aws_query = true;
|
128 |
+
|
129 |
+
/**
|
130 |
+
* The default class to use for utilities (defaults to <CFUtilities>).
|
131 |
+
*/
|
132 |
+
public $utilities_class = 'CFUtilities';
|
133 |
+
|
134 |
+
/**
|
135 |
+
* The default class to use for HTTP requests (defaults to <CFRequest>).
|
136 |
+
*/
|
137 |
+
public $request_class = 'CFRequest';
|
138 |
+
|
139 |
+
/**
|
140 |
+
* The default class to use for HTTP responses (defaults to <CFResponse>).
|
141 |
+
*/
|
142 |
+
public $response_class = 'CFResponse';
|
143 |
+
|
144 |
+
/**
|
145 |
+
* The default class to use for parsing XML (defaults to <CFSimpleXML>).
|
146 |
+
*/
|
147 |
+
public $parser_class = 'CFSimpleXML';
|
148 |
+
|
149 |
+
/**
|
150 |
+
* The default class to use for handling batch requests (defaults to <CFBatchRequest>).
|
151 |
+
*/
|
152 |
+
public $batch_class = 'CFBatchRequest';
|
153 |
+
|
154 |
+
/**
|
155 |
+
* The state of SSL/HTTPS use.
|
156 |
+
*/
|
157 |
+
public $use_ssl = true;
|
158 |
+
|
159 |
+
/**
|
160 |
+
* The state of SSL certificate verification.
|
161 |
+
*/
|
162 |
+
public $ssl_verification = true;
|
163 |
+
|
164 |
+
/**
|
165 |
+
* The proxy to use for connecting.
|
166 |
+
*/
|
167 |
+
public $proxy = null;
|
168 |
+
|
169 |
+
/**
|
170 |
+
* The alternate hostname to use, if any.
|
171 |
+
*/
|
172 |
+
public $hostname = null;
|
173 |
+
|
174 |
+
/**
|
175 |
+
* The state of the capability to override the hostname with <set_hostname()>.
|
176 |
+
*/
|
177 |
+
public $override_hostname = true;
|
178 |
+
|
179 |
+
/**
|
180 |
+
* The alternate port number to use, if any.
|
181 |
+
*/
|
182 |
+
public $port_number = null;
|
183 |
+
|
184 |
+
/**
|
185 |
+
* The alternate resource prefix to use, if any.
|
186 |
+
*/
|
187 |
+
public $resource_prefix = null;
|
188 |
+
|
189 |
+
/**
|
190 |
+
* The state of cache flow usage.
|
191 |
+
*/
|
192 |
+
public $use_cache_flow = false;
|
193 |
+
|
194 |
+
/**
|
195 |
+
* The caching class to use.
|
196 |
+
*/
|
197 |
+
public $cache_class = null;
|
198 |
+
|
199 |
+
/**
|
200 |
+
* The caching location to use.
|
201 |
+
*/
|
202 |
+
public $cache_location = null;
|
203 |
+
|
204 |
+
/**
|
205 |
+
* When the cache should be considered stale.
|
206 |
+
*/
|
207 |
+
public $cache_expires = null;
|
208 |
+
|
209 |
+
/**
|
210 |
+
* The state of cache compression.
|
211 |
+
*/
|
212 |
+
public $cache_compress = null;
|
213 |
+
|
214 |
+
/**
|
215 |
+
* The current instantiated cache object.
|
216 |
+
*/
|
217 |
+
public $cache_object = null;
|
218 |
+
|
219 |
+
/**
|
220 |
+
* The current instantiated batch request object.
|
221 |
+
*/
|
222 |
+
public $batch_object = null;
|
223 |
+
|
224 |
+
/**
|
225 |
+
* The internally instantiated batch request object.
|
226 |
+
*/
|
227 |
+
public $internal_batch_object = null;
|
228 |
+
|
229 |
+
/**
|
230 |
+
* The state of batch flow usage.
|
231 |
+
*/
|
232 |
+
public $use_batch_flow = false;
|
233 |
+
|
234 |
+
/**
|
235 |
+
* The state of the cache deletion setting.
|
236 |
+
*/
|
237 |
+
public $delete_cache = false;
|
238 |
+
|
239 |
+
/**
|
240 |
+
* The state of the debug mode setting.
|
241 |
+
*/
|
242 |
+
public $debug_mode = false;
|
243 |
+
|
244 |
+
/**
|
245 |
+
* The number of times to retry failed requests.
|
246 |
+
*/
|
247 |
+
public $max_retries = 3;
|
248 |
+
|
249 |
+
/**
|
250 |
+
* The user-defined callback function to call when a stream is read from.
|
251 |
+
*/
|
252 |
+
public $registered_streaming_read_callback = null;
|
253 |
+
|
254 |
+
/**
|
255 |
+
* The user-defined callback function to call when a stream is written to.
|
256 |
+
*/
|
257 |
+
public $registered_streaming_write_callback = null;
|
258 |
+
|
259 |
+
/**
|
260 |
+
* The credentials to use for authentication.
|
261 |
+
*/
|
262 |
+
public $credentials = array();
|
263 |
+
|
264 |
+
/**
|
265 |
+
* The authentication class to use.
|
266 |
+
*/
|
267 |
+
public $auth_class = null;
|
268 |
+
|
269 |
+
/**
|
270 |
+
* The operation to execute.
|
271 |
+
*/
|
272 |
+
public $operation = null;
|
273 |
+
|
274 |
+
/**
|
275 |
+
* The payload to send.
|
276 |
+
*/
|
277 |
+
public $payload = array();
|
278 |
+
|
279 |
+
/**
|
280 |
+
* The string prefix to prepend to the operation name.
|
281 |
+
*/
|
282 |
+
public $operation_prefix = '';
|
283 |
+
|
284 |
+
/**
|
285 |
+
* The number of times a request has been retried.
|
286 |
+
*/
|
287 |
+
public $redirects = 0;
|
288 |
+
|
289 |
+
/**
|
290 |
+
* The state of whether the response should be parsed or not.
|
291 |
+
*/
|
292 |
+
public $parse_the_response = true;
|
293 |
+
|
294 |
+
|
295 |
+
/*%******************************************************************************************%*/
|
296 |
+
// CONSTRUCTOR
|
297 |
+
|
298 |
+
/**
|
299 |
+
* The constructor. This class should not be instantiated directly. Rather, a service-specific class
|
300 |
+
* should be instantiated.
|
301 |
+
*
|
302 |
+
* @param array $options (Optional) An associative array of parameters that can have the following keys: <ul>
|
303 |
+
* <li><code>certificate_authority</code> - <code>boolean</code> - Optional - Determines which Cerificate Authority file to use. A value of boolean <code>false</code> will use the Certificate Authority file available on the system. A value of boolean <code>true</code> will use the Certificate Authority provided by the SDK. Passing a file system path to a Certificate Authority file (chmodded to <code>0755</code>) will use that. Leave this set to <code>false</code> if you're not sure.</li>
|
304 |
+
* <li><code>credentials</code> - <code>string</code> - Optional - The name of the credential set to use for authentication.</li>
|
305 |
+
* <li><code>default_cache_config</code> - <code>string</code> - Optional - This option allows a preferred storage type to be configured for long-term caching. This can be changed later using the <set_cache_config()> method. Valid values are: <code>apc</code>, <code>xcache</code>, or a file system path such as <code>./cache</code> or <code>/tmp/cache/</code>.</li>
|
306 |
+
* <li><code>key</code> - <code>string</code> - Optional - Your AWS key, or a session key. If blank, the default credential set will be used.</li>
|
307 |
+
* <li><code>instance_profile_timeout</code> - <code>integer</code> - Optional - When retrieving IAM instance profile credentials, there is a hard connection timeout that defaults to 2 seconds to prevent unnecessary on non-EC2 systems. This setting allows you to change that timeout if needed.</li>
|
308 |
+
* <li><code>secret</code> - <code>string</code> - Optional - Your AWS secret key, or a session secret key. If blank, the default credential set will be used.</li>
|
309 |
+
* <li><code>token</code> - <code>string</code> - Optional - An AWS session token.</li>
|
310 |
+
* <li><code>use_instance_profile_credentials</code> - <code>boolean</code> - Optional - Forces the use of IAM Instance Profile credentials, even when regular credentials are provided.</li></ul>
|
311 |
+
* @return void
|
312 |
+
*/
|
313 |
+
public function __construct(array $options = array())
|
314 |
+
{
|
315 |
+
// Instantiate the utilities class.
|
316 |
+
$this->util = new $this->utilities_class();
|
317 |
+
|
318 |
+
// Determine the current service.
|
319 |
+
$this->service = get_class($this);
|
320 |
+
|
321 |
+
// Create credentials based on the options
|
322 |
+
$runtime_credentials = new CFCredential($options);
|
323 |
+
$credentials_provided = false;
|
324 |
+
|
325 |
+
// Retrieve a credential set from config.inc.php if it exists
|
326 |
+
if (isset($options['credentials']))
|
327 |
+
{
|
328 |
+
// Use a specific credential set and merge with the runtime credentials
|
329 |
+
$this->credentials = CFCredentials::get($options['credentials'])
|
330 |
+
->merge($runtime_credentials);
|
331 |
+
}
|
332 |
+
else
|
333 |
+
{
|
334 |
+
try
|
335 |
+
{
|
336 |
+
// Use the default credential set and merge with the runtime credentials
|
337 |
+
$this->credentials = CFCredentials::get(CFCredentials::DEFAULT_KEY)
|
338 |
+
->merge($runtime_credentials);
|
339 |
+
}
|
340 |
+
catch (CFCredentials_Exception $e)
|
341 |
+
{
|
342 |
+
// Only the runtime credentials were provided
|
343 |
+
$this->credentials = $runtime_credentials;
|
344 |
+
}
|
345 |
+
}
|
346 |
+
|
347 |
+
// Check if keys were actually provided
|
348 |
+
if (isset($this->credentials['key']) && isset($this->credentials['secret']))
|
349 |
+
{
|
350 |
+
$credentials_provided = true;
|
351 |
+
}
|
352 |
+
|
353 |
+
// Check for an instance profile credentials override
|
354 |
+
if (isset($this->credentials['use_instance_profile_credentials']) && $this->credentials['use_instance_profile_credentials'])
|
355 |
+
{
|
356 |
+
$credentials_provided = false;
|
357 |
+
}
|
358 |
+
|
359 |
+
// Automatically enable whichever caching mechanism is set to default.
|
360 |
+
$this->set_cache_config($this->credentials->default_cache_config);
|
361 |
+
|
362 |
+
// If no credentials were provided, try to get them from the EC2 instance profile
|
363 |
+
if (!$credentials_provided)
|
364 |
+
{
|
365 |
+
// Default caching mechanism is required
|
366 |
+
if (!$this->credentials->default_cache_config)
|
367 |
+
{
|
368 |
+
// @codeCoverageIgnoreStart
|
369 |
+
throw new CFCredentials_Exception('No credentials were provided. The SDK attempts to retrieve Instance '
|
370 |
+
. 'Profile credentials from the EC2 Instance Metadata Service, but doing this requires the '
|
371 |
+
. '"default_cache_config" option to be set in the config.inc.php file or constructor. In order to '
|
372 |
+
. 'cache the retrieved credentials.');
|
373 |
+
// @codeCoverageIgnoreEnd
|
374 |
+
}
|
375 |
+
|
376 |
+
// Instantiate and invoke the cache for instance profile credentials
|
377 |
+
$cache = new $this->cache_class('instance_profile_credentials', $this->cache_location, 0, $this->cache_compress);
|
378 |
+
if ($data = $cache->read())
|
379 |
+
{
|
380 |
+
$cache->expire_in((strtotime($data['expires']) - time()) * 0.85);
|
381 |
+
}
|
382 |
+
$instance_profile_credentials = $cache->response_manager(array($this, 'cache_instance_profile_credentials'), array($cache, $options));
|
383 |
+
|
384 |
+
$this->credentials->key = $instance_profile_credentials['key'];
|
385 |
+
$this->credentials->secret = $instance_profile_credentials['secret'];
|
386 |
+
$this->credentials->token = $instance_profile_credentials['token'];
|
387 |
+
}
|
388 |
+
|
389 |
+
// Set internal credentials after they are resolved
|
390 |
+
$this->key = $this->credentials->key;
|
391 |
+
$this->secret_key = $this->credentials->secret;
|
392 |
+
$this->auth_token = $this->credentials->token;
|
393 |
+
}
|
394 |
+
|
395 |
+
/**
|
396 |
+
* Alternate approach to constructing a new instance. Supports chaining.
|
397 |
+
*
|
398 |
+
* @param array $options (Optional) An associative array of parameters that can have the following keys: <ul>
|
399 |
+
* <li><code>certificate_authority</code> - <code>boolean</code> - Optional - Determines which Cerificate Authority file to use. A value of boolean <code>false</code> will use the Certificate Authority file available on the system. A value of boolean <code>true</code> will use the Certificate Authority provided by the SDK. Passing a file system path to a Certificate Authority file (chmodded to <code>0755</code>) will use that. Leave this set to <code>false</code> if you're not sure.</li>
|
400 |
+
* <li><code>credentials</code> - <code>string</code> - Optional - The name of the credential set to use for authentication.</li>
|
401 |
+
* <li><code>default_cache_config</code> - <code>string</code> - Optional - This option allows a preferred storage type to be configured for long-term caching. This can be changed later using the <set_cache_config()> method. Valid values are: <code>apc</code>, <code>xcache</code>, or a file system path such as <code>./cache</code> or <code>/tmp/cache/</code>.</li>
|
402 |
+
* <li><code>key</code> - <code>string</code> - Optional - Your AWS key, or a session key. If blank, the default credential set will be used.</li>
|
403 |
+
* <li><code>secret</code> - <code>string</code> - Optional - Your AWS secret key, or a session secret key. If blank, the default credential set will be used.</li>
|
404 |
+
* <li><code>token</code> - <code>string</code> - Optional - An AWS session token.</li></ul>
|
405 |
+
* @return void
|
406 |
+
*/
|
407 |
+
public static function factory(array $options = array())
|
408 |
+
{
|
409 |
+
if (version_compare(PHP_VERSION, '5.3.0', '<'))
|
410 |
+
{
|
411 |
+
throw new Exception('PHP 5.3 or newer is required to instantiate a new class with CLASS::factory().');
|
412 |
+
}
|
413 |
+
|
414 |
+
$self = get_called_class();
|
415 |
+
return new $self($options);
|
416 |
+
}
|
417 |
+
|
418 |
+
|
419 |
+
/*%******************************************************************************************%*/
|
420 |
+
// MAGIC METHODS
|
421 |
+
|
422 |
+
/**
|
423 |
+
* A magic method that allows `camelCase` method names to be translated into `snake_case` names.
|
424 |
+
*
|
425 |
+
* @param string $name (Required) The name of the method.
|
426 |
+
* @param array $arguments (Required) The arguments passed to the method.
|
427 |
+
* @return mixed The results of the intended method.
|
428 |
+
*/
|
429 |
+
public function __call($name, $arguments)
|
430 |
+
{
|
431 |
+
// Convert camelCase method calls to snake_case.
|
432 |
+
$method_name = strtolower(preg_replace('/([a-z])([A-Z])/', '$1_$2', $name));
|
433 |
+
|
434 |
+
if (method_exists($this, $method_name))
|
435 |
+
{
|
436 |
+
return call_user_func_array(array($this, $method_name), $arguments);
|
437 |
+
}
|
438 |
+
|
439 |
+
throw new CFRuntime_Exception('The method ' . $name . '() is undefined. Attempted to map to ' . $method_name . '() which is also undefined. Error occurred');
|
440 |
+
}
|
441 |
+
|
442 |
+
|
443 |
+
/*%******************************************************************************************%*/
|
444 |
+
// SET CUSTOM SETTINGS
|
445 |
+
|
446 |
+
/**
|
447 |
+
* Set the proxy settings to use.
|
448 |
+
*
|
449 |
+
* @param string $proxy (Required) Accepts proxy credentials in the following format: `proxy://user:pass@hostname:port`
|
450 |
+
* @return $this A reference to the current instance.
|
451 |
+
*/
|
452 |
+
public function set_proxy($proxy)
|
453 |
+
{
|
454 |
+
$this->proxy = $proxy;
|
455 |
+
return $this;
|
456 |
+
}
|
457 |
+
|
458 |
+
/**
|
459 |
+
* Set the hostname to connect to. This is useful for alternate services that are API-compatible with
|
460 |
+
* AWS, but run from a different hostname.
|
461 |
+
*
|
462 |
+
* @param string $hostname (Required) The alternate hostname to use in place of the default one. Useful for mock or test applications living on different hostnames.
|
463 |
+
* @param integer $port_number (Optional) The alternate port number to use in place of the default one. Useful for mock or test applications living on different port numbers.
|
464 |
+
* @return $this A reference to the current instance.
|
465 |
+
*/
|
466 |
+
public function set_hostname($hostname, $port_number = null)
|
467 |
+
{
|
468 |
+
if ($this->override_hostname)
|
469 |
+
{
|
470 |
+
$this->hostname = $hostname;
|
471 |
+
|
472 |
+
if ($port_number)
|
473 |
+
{
|
474 |
+
$this->port_number = $port_number;
|
475 |
+
$this->hostname .= ':' . (string) $this->port_number;
|
476 |
+
}
|
477 |
+
}
|
478 |
+
|
479 |
+
return $this;
|
480 |
+
}
|
481 |
+
|
482 |
+
/**
|
483 |
+
* Set the resource prefix to use. This method is useful for alternate services that are API-compatible
|
484 |
+
* with AWS.
|
485 |
+
*
|
486 |
+
* @param string $prefix (Required) An alternate prefix to prepend to the resource path. Useful for mock or test applications.
|
487 |
+
* @return $this A reference to the current instance.
|
488 |
+
*/
|
489 |
+
public function set_resource_prefix($prefix)
|
490 |
+
{
|
491 |
+
$this->resource_prefix = $prefix;
|
492 |
+
return $this;
|
493 |
+
}
|
494 |
+
|
495 |
+
/**
|
496 |
+
* Disables any subsequent use of the <set_hostname()> method.
|
497 |
+
*
|
498 |
+
* @param boolean $override (Optional) Whether or not subsequent calls to <set_hostname()> should be obeyed. A `false` value disables the further effectiveness of <set_hostname()>. Defaults to `true`.
|
499 |
+
* @return $this A reference to the current instance.
|
500 |
+
*/
|
501 |
+
public function allow_hostname_override($override = true)
|
502 |
+
{
|
503 |
+
$this->override_hostname = $override;
|
504 |
+
return $this;
|
505 |
+
}
|
506 |
+
|
507 |
+
/**
|
508 |
+
* Disables SSL/HTTPS connections for hosts that don't support them. Some services, however, still
|
509 |
+
* require SSL support.
|
510 |
+
*
|
511 |
+
* This method will throw a user warning when invoked, which can be hidden by changing your
|
512 |
+
* <php:error_reporting()> settings.
|
513 |
+
*
|
514 |
+
* @return $this A reference to the current instance.
|
515 |
+
*/
|
516 |
+
public function disable_ssl()
|
517 |
+
{
|
518 |
+
trigger_error('Disabling SSL connections is potentially unsafe and highly discouraged.', E_USER_WARNING);
|
519 |
+
$this->use_ssl = false;
|
520 |
+
return $this;
|
521 |
+
}
|
522 |
+
|
523 |
+
/**
|
524 |
+
* Disables the verification of the SSL Certificate Authority. Doing so can enable an attacker to carry
|
525 |
+
* out a man-in-the-middle attack.
|
526 |
+
*
|
527 |
+
* https://secure.wikimedia.org/wikipedia/en/wiki/Man-in-the-middle_attack
|
528 |
+
*
|
529 |
+
* This method will throw a user warning when invoked, which can be hidden by changing your
|
530 |
+
* <php:error_reporting()> settings.
|
531 |
+
*
|
532 |
+
* @return $this A reference to the current instance.
|
533 |
+
*/
|
534 |
+
public function disable_ssl_verification($ssl_verification = false)
|
535 |
+
{
|
536 |
+
trigger_error('Disabling the verification of SSL certificates can lead to man-in-the-middle attacks. It is potentially unsafe and highly discouraged.', E_USER_WARNING);
|
537 |
+
$this->ssl_verification = $ssl_verification;
|
538 |
+
return $this;
|
539 |
+
}
|
540 |
+
|
541 |
+
/**
|
542 |
+
* Enables HTTP request/response header logging to `STDERR`.
|
543 |
+
*
|
544 |
+
* @param boolean $enabled (Optional) Whether or not to enable debug mode. Defaults to `true`.
|
545 |
+
* @return $this A reference to the current instance.
|
546 |
+
*/
|
547 |
+
public function enable_debug_mode($enabled = true)
|
548 |
+
{
|
549 |
+
$this->debug_mode = $enabled;
|
550 |
+
return $this;
|
551 |
+
}
|
552 |
+
|
553 |
+
/**
|
554 |
+
* Sets the maximum number of times to retry failed requests.
|
555 |
+
*
|
556 |
+
* @param integer $retries (Optional) The maximum number of times to retry failed requests. Defaults to `3`.
|
557 |
+
* @return $this A reference to the current instance.
|
558 |
+
*/
|
559 |
+
public function set_max_retries($retries = 3)
|
560 |
+
{
|
561 |
+
$this->max_retries = $retries;
|
562 |
+
return $this;
|
563 |
+
}
|
564 |
+
|
565 |
+
/**
|
566 |
+
* Set the caching configuration to use for response caching.
|
567 |
+
*
|
568 |
+
* @param string $location (Required) <p>The location to store the cache object in. This may vary by cache method.</p><ul><li>File - The local file system paths such as <code>./cache</code> (relative) or <code>/tmp/cache/</code> (absolute). The location must be server-writable.</li><li>APC - Pass in <code>apc</code> to use this lightweight cache. You must have the <a href="http://php.net/apc">APC extension</a> installed.</li><li>XCache - Pass in <code>xcache</code> to use this lightweight cache. You must have the <a href="http://xcache.lighttpd.net">XCache</a> extension installed.</li><li>Memcached - Pass in an indexed array of associative arrays. Each associative array should have a <code>host</code> and a <code>port</code> value representing a <a href="http://php.net/memcached">Memcached</a> server to connect to.</li><li>PDO - A URL-style string (e.g. <code>pdo.mysql://user:pass@localhost/cache</code>) or a standard DSN-style string (e.g. <code>pdo.sqlite:/sqlite/cache.db</code>). MUST be prefixed with <code>pdo.</code>. See <code>CachePDO</code> and <a href="http://php.net/pdo">PDO</a> for more details.</li></ul>
|
569 |
+
* @param boolean $gzip (Optional) Whether or not data should be gzipped before being stored. A value of `true` will compress the contents before caching them. A value of `false` will leave the contents uncompressed. Defaults to `true`.
|
570 |
+
* @return $this A reference to the current instance.
|
571 |
+
*/
|
572 |
+
public function set_cache_config($location, $gzip = true)
|
573 |
+
{
|
574 |
+
// If location is empty, don't do anything.
|
575 |
+
if (empty($location))
|
576 |
+
{
|
577 |
+
return $this;
|
578 |
+
}
|
579 |
+
|
580 |
+
// If we have an array, we're probably passing in Memcached servers and ports.
|
581 |
+
if (is_array($location))
|
582 |
+
{
|
583 |
+
$this->cache_class = 'CacheMC';
|
584 |
+
}
|
585 |
+
else
|
586 |
+
{
|
587 |
+
// I would expect locations like `/tmp/cache`, `pdo.mysql://user:pass@hostname:port`, `pdo.sqlite:memory:`, and `apc`.
|
588 |
+
$type = strtolower(substr($location, 0, 3));
|
589 |
+
switch ($type)
|
590 |
+
{
|
591 |
+
case 'apc':
|
592 |
+
$this->cache_class = 'CacheAPC';
|
593 |
+
break;
|
594 |
+
|
595 |
+
case 'xca': // First three letters of `xcache`
|
596 |
+
$this->cache_class = 'CacheXCache';
|
597 |
+
break;
|
598 |
+
|
599 |
+
case 'pdo':
|
600 |
+
$this->cache_class = 'CachePDO';
|
601 |
+
$location = substr($location, 4);
|
602 |
+
break;
|
603 |
+
|
604 |
+
default:
|
605 |
+
$this->cache_class = 'CacheFile';
|
606 |
+
break;
|
607 |
+
}
|
608 |
+
}
|
609 |
+
|
610 |
+
// Set the remaining cache information.
|
611 |
+
$this->cache_location = $location;
|
612 |
+
$this->cache_compress = $gzip;
|
613 |
+
|
614 |
+
return $this;
|
615 |
+
}
|
616 |
+
|
617 |
+
/**
|
618 |
+
* Register a callback function to execute whenever a data stream is read from using
|
619 |
+
* <CFRequest::streaming_read_callback()>.
|
620 |
+
*
|
621 |
+
* The user-defined callback function should accept three arguments:
|
622 |
+
*
|
623 |
+
* <ul>
|
624 |
+
* <li><code>$curl_handle</code> - <code>resource</code> - Required - The cURL handle resource that represents the in-progress transfer.</li>
|
625 |
+
* <li><code>$file_handle</code> - <code>resource</code> - Required - The file handle resource that represents the file on the local file system.</li>
|
626 |
+
* <li><code>$length</code> - <code>integer</code> - Required - The length in kilobytes of the data chunk that was transferred.</li>
|
627 |
+
* </ul>
|
628 |
+
*
|
629 |
+
* @param string|array|function $callback (Required) The callback function is called by <php:call_user_func()>, so you can pass the following values: <ul>
|
630 |
+
* <li>The name of a global function to execute, passed as a string.</li>
|
631 |
+
* <li>A method to execute, passed as <code>array('ClassName', 'MethodName')</code>.</li>
|
632 |
+
* <li>An anonymous function (PHP 5.3+).</li></ul>
|
633 |
+
* @return $this A reference to the current instance.
|
634 |
+
*/
|
635 |
+
public function register_streaming_read_callback($callback)
|
636 |
+
{
|
637 |
+
$this->registered_streaming_read_callback = $callback;
|
638 |
+
return $this;
|
639 |
+
}
|
640 |
+
|
641 |
+
/**
|
642 |
+
* Register a callback function to execute whenever a data stream is written to using
|
643 |
+
* <CFRequest::streaming_write_callback()>.
|
644 |
+
*
|
645 |
+
* The user-defined callback function should accept two arguments:
|
646 |
+
*
|
647 |
+
* <ul>
|
648 |
+
* <li><code>$curl_handle</code> - <code>resource</code> - Required - The cURL handle resource that represents the in-progress transfer.</li>
|
649 |
+
* <li><code>$length</code> - <code>integer</code> - Required - The length in kilobytes of the data chunk that was transferred.</li>
|
650 |
+
* </ul>
|
651 |
+
*
|
652 |
+
* @param string|array|function $callback (Required) The callback function is called by <php:call_user_func()>, so you can pass the following values: <ul>
|
653 |
+
* <li>The name of a global function to execute, passed as a string.</li>
|
654 |
+
* <li>A method to execute, passed as <code>array('ClassName', 'MethodName')</code>.</li>
|
655 |
+
* <li>An anonymous function (PHP 5.3+).</li></ul>
|
656 |
+
* @return $this A reference to the current instance.
|
657 |
+
*/
|
658 |
+
public function register_streaming_write_callback($callback)
|
659 |
+
{
|
660 |
+
$this->registered_streaming_write_callback = $callback;
|
661 |
+
return $this;
|
662 |
+
}
|
663 |
+
|
664 |
+
/**
|
665 |
+
* Fetches and caches STS credentials. This is meant to be used by the constructor, and is not to be
|
666 |
+
* manually invoked.
|
667 |
+
*
|
668 |
+
* @param CacheCore $cache (Required) The a reference to the cache object that is being used to handle the caching.
|
669 |
+
* @param array $options (Required) The options that were passed into the constructor.
|
670 |
+
* @return mixed The data to be cached, or NULL.
|
671 |
+
*/
|
672 |
+
public function cache_sts_credentials($cache, $options)
|
673 |
+
{
|
674 |
+
$token = new AmazonSTS($options);
|
675 |
+
$response = $token->get_session_token();
|
676 |
+
|
677 |
+
if ($response->isOK())
|
678 |
+
{
|
679 |
+
// Update the expiration
|
680 |
+
$expiration_time = strtotime((string) $response->body->GetSessionTokenResult->Credentials->Expiration);
|
681 |
+
$expiration_duration = round(($expiration_time - time()) * 0.85);
|
682 |
+
$cache->expire_in($expiration_duration);
|
683 |
+
|
684 |
+
// Return the important data
|
685 |
+
$credentials = $response->body->GetSessionTokenResult->Credentials;
|
686 |
+
|
687 |
+
return array(
|
688 |
+
'key' => (string) $credentials->AccessKeyId,
|
689 |
+
'secret' => (string) $credentials->SecretAccessKey,
|
690 |
+
'token' => (string) $credentials->SessionToken,
|
691 |
+
'expires' => (string) $credentials->Expiration,
|
692 |
+
);
|
693 |
+
}
|
694 |
+
|
695 |
+
// @codeCoverageIgnoreStart
|
696 |
+
throw new STS_Exception('Temporary credentials from the AWS Security '
|
697 |
+
. 'Token Service could not be retrieved using the provided long '
|
698 |
+
. 'term credentials. It\'s possible that the provided long term '
|
699 |
+
. 'credentials were invalid.');
|
700 |
+
// @codeCoverageIgnoreEnd
|
701 |
+
}
|
702 |
+
|
703 |
+
/**
|
704 |
+
* Fetches and caches EC2 instance profile credentials. This is meant to be used by the constructor, and is not to
|
705 |
+
* be manually invoked.
|
706 |
+
*
|
707 |
+
* @param CacheCore $cache (Required) The a reference to the cache object that is being used to handle the caching.
|
708 |
+
* @param array $options (Required) The options that were passed into the constructor.
|
709 |
+
* @return mixed The data to be cached, or NULL.
|
710 |
+
*/
|
711 |
+
public function cache_instance_profile_credentials($cache, $options)
|
712 |
+
{
|
713 |
+
$instance_profile_url = 'http://169.254.169.254/latest/meta-data/iam/security-credentials/';
|
714 |
+
$connect_timeout = isset($options['instance_profile_timeout']) ? $options['instance_profile_timeout'] : 2;
|
715 |
+
|
716 |
+
try
|
717 |
+
{
|
718 |
+
// Make a call to the EC2 Metadata Service to find the available instance profile
|
719 |
+
$request = new RequestCore($instance_profile_url);
|
720 |
+
$request->set_curlopts(array(CURLOPT_CONNECTTIMEOUT => $connect_timeout));
|
721 |
+
$response = $request->send_request(true);
|
722 |
+
|
723 |
+
if ($response->isOK())
|
724 |
+
{
|
725 |
+
// Get the instance profile name
|
726 |
+
$profile = (string) $response->body;
|
727 |
+
|
728 |
+
// Make a call to the EC2 Metadata Service to get the instance profile credentials
|
729 |
+
$request = new RequestCore($instance_profile_url . $profile);
|
730 |
+
$request->set_curlopts(array(CURLOPT_CONNECTTIMEOUT => $connect_timeout));
|
731 |
+
$response = $request->send_request(true);
|
732 |
+
|
733 |
+
if ($response->isOK())
|
734 |
+
{
|
735 |
+
// Get the credentials
|
736 |
+
$credentials = json_decode($response->body, true);
|
737 |
+
|
738 |
+
if ($credentials['Code'] === 'Success')
|
739 |
+
{
|
740 |
+
// Determine the expiration time
|
741 |
+
$expiration_time = strtotime((string) $credentials['Expiration']);
|
742 |
+
$expiration_duration = round(($expiration_time - time()) * 0.85);
|
743 |
+
$cache->expire_in($expiration_duration);
|
744 |
+
|
745 |
+
// Return the credential information
|
746 |
+
return array(
|
747 |
+
'key' => $credentials['AccessKeyId'],
|
748 |
+
'secret' => $credentials['SecretAccessKey'],
|
749 |
+
'token' => $credentials['Token'],
|
750 |
+
'expires' => $credentials['Expiration'],
|
751 |
+
);
|
752 |
+
}
|
753 |
+
}
|
754 |
+
}
|
755 |
+
}
|
756 |
+
catch (cURL_Exception $e)
|
757 |
+
{
|
758 |
+
// The EC2 Metadata Service does not exist or had timed out.
|
759 |
+
// An exception will be thrown on the next line.
|
760 |
+
}
|
761 |
+
|
762 |
+
// @codeCoverageIgnoreStart
|
763 |
+
throw new CFCredentials_Exception('No credentials were provided. The SDK attempted to retrieve Instance '
|
764 |
+
. 'Profile credentials from the EC2 Instance Metadata Service, but failed to do so. Instance profile '
|
765 |
+
. 'credentials are only accessible on EC2 instances configured with a specific IAM role.');
|
766 |
+
// @codeCoverageIgnoreEnd
|
767 |
+
}
|
768 |
+
|
769 |
+
|
770 |
+
/*%******************************************************************************************%*/
|
771 |
+
// SET CUSTOM CLASSES
|
772 |
+
|
773 |
+
/**
|
774 |
+
* Set a custom class for this functionality. Use this method when extending/overriding existing classes
|
775 |
+
* with new functionality.
|
776 |
+
*
|
777 |
+
* The replacement class must extend from <CFUtilities>.
|
778 |
+
*
|
779 |
+
* @param string $class (Optional) The name of the new class to use for this functionality.
|
780 |
+
* @return $this A reference to the current instance.
|
781 |
+
*/
|
782 |
+
public function set_utilities_class($class = 'CFUtilities')
|
783 |
+
{
|
784 |
+
$this->utilities_class = $class;
|
785 |
+
$this->util = new $this->utilities_class();
|
786 |
+
return $this;
|
787 |
+
}
|
788 |
+
|
789 |
+
/**
|
790 |
+
* Set a custom class for this functionality. Use this method when extending/overriding existing classes
|
791 |
+
* with new functionality.
|
792 |
+
*
|
793 |
+
* The replacement class must extend from <CFRequest>.
|
794 |
+
*
|
795 |
+
* @param string $class (Optional) The name of the new class to use for this functionality.
|
796 |
+
* @param $this A reference to the current instance.
|
797 |
+
*/
|
798 |
+
public function set_request_class($class = 'CFRequest')
|
799 |
+
{
|
800 |
+
$this->request_class = $class;
|
801 |
+
return $this;
|
802 |
+
}
|
803 |
+
|
804 |
+
/**
|
805 |
+
* Set a custom class for this functionality. Use this method when extending/overriding existing classes
|
806 |
+
* with new functionality.
|
807 |
+
*
|
808 |
+
* The replacement class must extend from <CFResponse>.
|
809 |
+
*
|
810 |
+
* @param string $class (Optional) The name of the new class to use for this functionality.
|
811 |
+
* @return $this A reference to the current instance.
|
812 |
+
*/
|
813 |
+
public function set_response_class($class = 'CFResponse')
|
814 |
+
{
|
815 |
+
$this->response_class = $class;
|
816 |
+
return $this;
|
817 |
+
}
|
818 |
+
|
819 |
+
/**
|
820 |
+
* Set a custom class for this functionality. Use this method when extending/overriding existing classes
|
821 |
+
* with new functionality.
|
822 |
+
*
|
823 |
+
* The replacement class must extend from <CFSimpleXML>.
|
824 |
+
*
|
825 |
+
* @param string $class (Optional) The name of the new class to use for this functionality.
|
826 |
+
* @return $this A reference to the current instance.
|
827 |
+
*/
|
828 |
+
public function set_parser_class($class = 'CFSimpleXML')
|
829 |
+
{
|
830 |
+
$this->parser_class = $class;
|
831 |
+
return $this;
|
832 |
+
}
|
833 |
+
|
834 |
+
/**
|
835 |
+
* Set a custom class for this functionality. Use this method when extending/overriding existing classes
|
836 |
+
* with new functionality.
|
837 |
+
*
|
838 |
+
* The replacement class must extend from <CFBatchRequest>.
|
839 |
+
*
|
840 |
+
* @param string $class (Optional) The name of the new class to use for this functionality.
|
841 |
+
* @return $this A reference to the current instance.
|
842 |
+
*/
|
843 |
+
public function set_batch_class($class = 'CFBatchRequest')
|
844 |
+
{
|
845 |
+
$this->batch_class = $class;
|
846 |
+
return $this;
|
847 |
+
}
|
848 |
+
|
849 |
+
|
850 |
+
/*%******************************************************************************************%*/
|
851 |
+
// AUTHENTICATION
|
852 |
+
|
853 |
+
/**
|
854 |
+
* Default, shared method for authenticating a connection to AWS.
|
855 |
+
*
|
856 |
+
* @param string $operation (Required) Indicates the operation to perform.
|
857 |
+
* @param array $payload (Required) An associative array of parameters for authenticating. See the individual methods for allowed keys.
|
858 |
+
* @return CFResponse Object containing a parsed HTTP response.
|
859 |
+
*/
|
860 |
+
public function authenticate($operation, $payload)
|
861 |
+
{
|
862 |
+
$original_payload = $payload;
|
863 |
+
$method_arguments = func_get_args();
|
864 |
+
$curlopts = array();
|
865 |
+
$return_curl_handle = false;
|
866 |
+
|
867 |
+
if (substr($operation, 0, strlen($this->operation_prefix)) !== $this->operation_prefix)
|
868 |
+
{
|
869 |
+
$operation = $this->operation_prefix . $operation;
|
870 |
+
}
|
871 |
+
|
872 |
+
// Extract the custom CURLOPT settings from the payload
|
873 |
+
if (is_array($payload) && isset($payload['curlopts']))
|
874 |
+
{
|
875 |
+
$curlopts = $payload['curlopts'];
|
876 |
+
unset($payload['curlopts']);
|
877 |
+
}
|
878 |
+
|
879 |
+
// Determine whether the response or curl handle should be returned
|
880 |
+
if (is_array($payload) && isset($payload['returnCurlHandle']))
|
881 |
+
{
|
882 |
+
$return_curl_handle = isset($payload['returnCurlHandle']) ? $payload['returnCurlHandle'] : false;
|
883 |
+
unset($payload['returnCurlHandle']);
|
884 |
+
}
|
885 |
+
|
886 |
+
// Use the caching flow to determine if we need to do a round-trip to the server.
|
887 |
+
if ($this->use_cache_flow)
|
888 |
+
{
|
889 |
+
// Generate an identifier specific to this particular set of arguments.
|
890 |
+
$cache_id = $this->key . '_' . get_class($this) . '_' . $operation . '_' . sha1(serialize($method_arguments));
|
891 |
+
|
892 |
+
// Instantiate the appropriate caching object.
|
893 |
+
$this->cache_object = new $this->cache_class($cache_id, $this->cache_location, $this->cache_expires, $this->cache_compress);
|
894 |
+
|
895 |
+
if ($this->delete_cache)
|
896 |
+
{
|
897 |
+
$this->use_cache_flow = false;
|
898 |
+
$this->delete_cache = false;
|
899 |
+
return $this->cache_object->delete();
|
900 |
+
}
|
901 |
+
|
902 |
+
// Invoke the cache callback function to determine whether to pull data from the cache or make a fresh request.
|
903 |
+
$data = $this->cache_object->response_manager(array($this, 'cache_callback'), $method_arguments);
|
904 |
+
|
905 |
+
// Parse the XML body
|
906 |
+
$data = $this->parse_callback($data);
|
907 |
+
|
908 |
+
// End!
|
909 |
+
return $data;
|
910 |
+
}
|
911 |
+
|
912 |
+
/*%******************************************************************************************%*/
|
913 |
+
|
914 |
+
// Signer
|
915 |
+
$signer = new $this->auth_class($this->hostname, $operation, $payload, $this->credentials);
|
916 |
+
$signer->key = $this->key;
|
917 |
+
$signer->secret_key = $this->secret_key;
|
918 |
+
$signer->auth_token = $this->auth_token;
|
919 |
+
$signer->api_version = $this->api_version;
|
920 |
+
$signer->utilities_class = $this->utilities_class;
|
921 |
+
$signer->request_class = $this->request_class;
|
922 |
+
$signer->response_class = $this->response_class;
|
923 |
+
$signer->use_ssl = $this->use_ssl;
|
924 |
+
$signer->proxy = $this->proxy;
|
925 |
+
$signer->util = $this->util;
|
926 |
+
$signer->registered_streaming_read_callback = $this->registered_streaming_read_callback;
|
927 |
+
$signer->registered_streaming_write_callback = $this->registered_streaming_write_callback;
|
928 |
+
$request = $signer->authenticate();
|
929 |
+
|
930 |
+
// Update RequestCore settings
|
931 |
+
$request->request_class = $this->request_class;
|
932 |
+
$request->response_class = $this->response_class;
|
933 |
+
$request->ssl_verification = $this->ssl_verification;
|
934 |
+
|
935 |
+
/*%******************************************************************************************%*/
|
936 |
+
|
937 |
+
// Debug mode
|
938 |
+
if ($this->debug_mode)
|
939 |
+
{
|
940 |
+
$request->debug_mode = $this->debug_mode;
|
941 |
+
}
|
942 |
+
|
943 |
+
// Set custom CURLOPT settings
|
944 |
+
if (count($curlopts))
|
945 |
+
{
|
946 |
+
$request->set_curlopts($curlopts);
|
947 |
+
}
|
948 |
+
|
949 |
+
// Manage the (newer) batch request API or the (older) returnCurlHandle setting.
|
950 |
+
if ($this->use_batch_flow)
|
951 |
+
{
|
952 |
+
$handle = $request->prep_request();
|
953 |
+
$this->batch_object->add($handle);
|
954 |
+
$this->use_batch_flow = false;
|
955 |
+
|
956 |
+
return $handle;
|
957 |
+
}
|
958 |
+
elseif ($return_curl_handle)
|
959 |
+
{
|
960 |
+
return $request->prep_request();
|
961 |
+
}
|
962 |
+
|
963 |
+
// Send!
|
964 |
+
$request->send_request();
|
965 |
+
|
966 |
+
// Prepare the response.
|
967 |
+
$headers = $request->get_response_header();
|
968 |
+
$headers['x-aws-stringtosign'] = $signer->string_to_sign;
|
969 |
+
|
970 |
+
if (isset($signer->canonical_request))
|
971 |
+
{
|
972 |
+
$headers['x-aws-canonicalrequest'] = $signer->canonical_request;
|
973 |
+
}
|
974 |
+
|
975 |
+
$headers['x-aws-request-headers'] = $request->request_headers;
|
976 |
+
$headers['x-aws-body'] = $signer->querystring;
|
977 |
+
|
978 |
+
$data = new $this->response_class($headers, ($this->parse_the_response === true) ? $this->parse_callback($request->get_response_body()) : $request->get_response_body(), $request->get_response_code());
|
979 |
+
|
980 |
+
$response_body = (string) $request->get_response_body();
|
981 |
+
|
982 |
+
// Was it Amazon's fault the request failed? Retry the request until we reach $max_retries.
|
983 |
+
if (
|
984 |
+
(integer) $request->get_response_code() === 500 || // Internal Error (presumably transient)
|
985 |
+
(integer) $request->get_response_code() === 503) // Service Unavailable (presumably transient)
|
986 |
+
{
|
987 |
+
if ($this->redirects <= $this->max_retries)
|
988 |
+
{
|
989 |
+
// Exponential backoff
|
990 |
+
$delay = (integer) (pow(4, $this->redirects) * 100000);
|
991 |
+
usleep($delay);
|
992 |
+
$this->redirects++;
|
993 |
+
$data = $this->authenticate($operation, $original_payload);
|
994 |
+
}
|
995 |
+
}
|
996 |
+
|
997 |
+
// DynamoDB has additional, custom logic for retrying requests
|
998 |
+
else
|
999 |
+
{
|
1000 |
+
// If the request to DynamoDB was throttled, we need to retry
|
1001 |
+
$need_to_retry_dynamodb_request = (
|
1002 |
+
(integer) $request->get_response_code() === 400 &&
|
1003 |
+
stripos($response_body, 'com.amazonaws.dynamodb.') !== false &&
|
1004 |
+
stripos($response_body, 'ProvisionedThroughputExceededException') !== false
|
1005 |
+
);
|
1006 |
+
|
1007 |
+
// If the CRC32 of the response does not match the expected value, we need to retry
|
1008 |
+
$response_headers = $request->get_response_header();
|
1009 |
+
if (!$need_to_retry_dynamodb_request && isset($response_headers['x-amz-crc32']))
|
1010 |
+
{
|
1011 |
+
$crc32_expected = $response_headers['x-amz-crc32'];
|
1012 |
+
$crc32_actual = hexdec(hash('crc32b', $response_body));
|
1013 |
+
$need_to_retry_dynamodb_request = ($crc32_expected != $crc32_actual);
|
1014 |
+
}
|
1015 |
+
|
1016 |
+
// Perform retry if necessary using a more aggressive exponential backoff
|
1017 |
+
if ($need_to_retry_dynamodb_request)
|
1018 |
+
{
|
1019 |
+
if ($this->redirects === 0)
|
1020 |
+
{
|
1021 |
+
$this->redirects++;
|
1022 |
+
$data = $this->authenticate($operation, $original_payload);
|
1023 |
+
}
|
1024 |
+
elseif ($this->redirects <= max($this->max_retries, 10))
|
1025 |
+
{
|
1026 |
+
// Exponential backoff
|
1027 |
+
$delay = (integer) (pow(2, ($this->redirects - 1)) * 50000);
|
1028 |
+
usleep($delay);
|
1029 |
+
$this->redirects++;
|
1030 |
+
$data = $this->authenticate($operation, $original_payload);
|
1031 |
+
}
|
1032 |
+
}
|
1033 |
+
}
|
1034 |
+
|
1035 |
+
$this->redirects = 0;
|
1036 |
+
return $data;
|
1037 |
+
}
|
1038 |
+
|
1039 |
+
|
1040 |
+
/*%******************************************************************************************%*/
|
1041 |
+
// BATCH REQUEST LAYER
|
1042 |
+
|
1043 |
+
/**
|
1044 |
+
* Specifies that the intended request should be queued for a later batch request.
|
1045 |
+
*
|
1046 |
+
* @param CFBatchRequest $queue (Optional) The <CFBatchRequest> instance to use for managing batch requests. If not available, it generates a new instance of <CFBatchRequest>.
|
1047 |
+
* @return $this A reference to the current instance.
|
1048 |
+
*/
|
1049 |
+
public function batch(CFBatchRequest &$queue = null)
|
1050 |
+
{
|
1051 |
+
if ($queue)
|
1052 |
+
{
|
1053 |
+
$this->batch_object = $queue;
|
1054 |
+
}
|
1055 |
+
elseif ($this->internal_batch_object)
|
1056 |
+
{
|
1057 |
+
$this->batch_object = &$this->internal_batch_object;
|
1058 |
+
}
|
1059 |
+
else
|
1060 |
+
{
|
1061 |
+
$this->internal_batch_object = new $this->batch_class();
|
1062 |
+
$this->batch_object = &$this->internal_batch_object;
|
1063 |
+
}
|
1064 |
+
|
1065 |
+
$this->use_batch_flow = true;
|
1066 |
+
|
1067 |
+
return $this;
|
1068 |
+
}
|
1069 |
+
|
1070 |
+
/**
|
1071 |
+
* Executes the batch request queue by sending all queued requests.
|
1072 |
+
*
|
1073 |
+
* @param boolean $clear_after_send (Optional) Whether or not to clear the batch queue after sending a request. Defaults to `true`. Set this to `false` if you are caching batch responses and want to retrieve results later.
|
1074 |
+
* @return array An array of <CFResponse> objects.
|
1075 |
+
*/
|
1076 |
+
public function send($clear_after_send = true)
|
1077 |
+
{
|
1078 |
+
if ($this->use_batch_flow)
|
1079 |
+
{
|
1080 |
+
// When we send the request, disable batch flow.
|
1081 |
+
$this->use_batch_flow = false;
|
1082 |
+
|
1083 |
+
// If we're not caching, simply send the request.
|
1084 |
+
if (!$this->use_cache_flow)
|
1085 |
+
{
|
1086 |
+
$response = $this->batch_object->send();
|
1087 |
+
$parsed_data = array_map(array($this, 'parse_callback'), $response);
|
1088 |
+
$parsed_data = new CFArray($parsed_data);
|
1089 |
+
|
1090 |
+
// Clear the queue
|
1091 |
+
if ($clear_after_send)
|
1092 |
+
{
|
1093 |
+
$this->batch_object->queue = array();
|
1094 |
+
}
|
1095 |
+
|
1096 |
+
return $parsed_data;
|
1097 |
+
}
|
1098 |
+
|
1099 |
+
// Generate an identifier specific to this particular set of arguments.
|
1100 |
+
$cache_id = $this->key . '_' . get_class($this) . '_' . sha1(serialize($this->batch_object));
|
1101 |
+
|
1102 |
+
// Instantiate the appropriate caching object.
|
1103 |
+
$this->cache_object = new $this->cache_class($cache_id, $this->cache_location, $this->cache_expires, $this->cache_compress);
|
1104 |
+
|
1105 |
+
if ($this->delete_cache)
|
1106 |
+
{
|
1107 |
+
$this->use_cache_flow = false;
|
1108 |
+
$this->delete_cache = false;
|
1109 |
+
return $this->cache_object->delete();
|
1110 |
+
}
|
1111 |
+
|
1112 |
+
// Invoke the cache callback function to determine whether to pull data from the cache or make a fresh request.
|
1113 |
+
$data_set = $this->cache_object->response_manager(array($this, 'cache_callback_batch'), array($this->batch_object));
|
1114 |
+
$parsed_data = array_map(array($this, 'parse_callback'), $data_set);
|
1115 |
+
$parsed_data = new CFArray($parsed_data);
|
1116 |
+
|
1117 |
+
// Clear the queue
|
1118 |
+
if ($clear_after_send)
|
1119 |
+
{
|
1120 |
+
$this->batch_object->queue = array();
|
1121 |
+
}
|
1122 |
+
|
1123 |
+
// End!
|
1124 |
+
return $parsed_data;
|
1125 |
+
}
|
1126 |
+
|
1127 |
+
// Load the class
|
1128 |
+
$null = new CFBatchRequest();
|
1129 |
+
unset($null);
|
1130 |
+
|
1131 |
+
throw new CFBatchRequest_Exception('You must use $object->batch()->send()');
|
1132 |
+
}
|
1133 |
+
|
1134 |
+
/**
|
1135 |
+
* Parses a response body into a PHP object if appropriate.
|
1136 |
+
*
|
1137 |
+
* @param CFResponse|string $response (Required) The <CFResponse> object to parse, or an XML string that would otherwise be a response body.
|
1138 |
+
* @param string $content_type (Optional) The content-type to use when determining how to parse the content.
|
1139 |
+
* @return CFResponse|string A parsed <CFResponse> object, or parsed XML.
|
1140 |
+
*/
|
1141 |
+
public function parse_callback($response, $headers = null)
|
1142 |
+
{
|
1143 |
+
// Bail out
|
1144 |
+
if (!$this->parse_the_response) return $response;
|
1145 |
+
|
1146 |
+
// Shorten this so we have a (mostly) single code path
|
1147 |
+
if (isset($response->body))
|
1148 |
+
{
|
1149 |
+
if (is_string($response->body))
|
1150 |
+
{
|
1151 |
+
$body = $response->body;
|
1152 |
+
}
|
1153 |
+
else
|
1154 |
+
{
|
1155 |
+
return $response;
|
1156 |
+
}
|
1157 |
+
}
|
1158 |
+
elseif (is_string($response))
|
1159 |
+
{
|
1160 |
+
$body = $response;
|
1161 |
+
}
|
1162 |
+
else
|
1163 |
+
{
|
1164 |
+
return $response;
|
1165 |
+
}
|
1166 |
+
|
1167 |
+
// Decompress gzipped content
|
1168 |
+
if (isset($headers['content-encoding']))
|
1169 |
+
{
|
1170 |
+
switch (strtolower(trim($headers['content-encoding'], "\x09\x0A\x0D\x20")))
|
1171 |
+
{
|
1172 |
+
case 'gzip':
|
1173 |
+
case 'x-gzip':
|
1174 |
+
$decoder = new CFGzipDecode($body);
|
1175 |
+
if ($decoder->parse())
|
1176 |
+
{
|
1177 |
+
$body = $decoder->data;
|
1178 |
+
}
|
1179 |
+
break;
|
1180 |
+
|
1181 |
+
case 'deflate':
|
1182 |
+
if (($uncompressed = gzuncompress($body)) !== false)
|
1183 |
+
{
|
1184 |
+
$body = $uncompressed;
|
1185 |
+
}
|
1186 |
+
elseif (($uncompressed = gzinflate($body)) !== false)
|
1187 |
+
{
|
1188 |
+
$body = $uncompressed;
|
1189 |
+
}
|
1190 |
+
break;
|
1191 |
+
}
|
1192 |
+
}
|
1193 |
+
|
1194 |
+
// Look for XML cues
|
1195 |
+
if (
|
1196 |
+
(isset($headers['content-type']) && ($headers['content-type'] === 'text/xml' || $headers['content-type'] === 'application/xml')) || // We know it's XML
|
1197 |
+
(!isset($headers['content-type']) && (stripos($body, '<?xml') === 0 || strpos($body, '<Error>') === 0) || preg_match('/^<(\w*) xmlns="http(s?):\/\/(\w*).amazon(aws)?.com/im', $body)) // Sniff for XML
|
1198 |
+
)
|
1199 |
+
{
|
1200 |
+
// Strip the default XML namespace to simplify XPath expressions
|
1201 |
+
$body = str_replace("xmlns=", "ns=", $body);
|
1202 |
+
|
1203 |
+
try {
|
1204 |
+
// Parse the XML body
|
1205 |
+
$body = new $this->parser_class($body);
|
1206 |
+
}
|
1207 |
+
catch (Exception $e)
|
1208 |
+
{
|
1209 |
+
throw new Parser_Exception($e->getMessage());
|
1210 |
+
}
|
1211 |
+
}
|
1212 |
+
// Look for JSON cues
|
1213 |
+
elseif (
|
1214 |
+
(isset($headers['content-type']) && ($headers['content-type'] === 'application/json') || $headers['content-type'] === 'application/x-amz-json-1.0') || // We know it's JSON
|
1215 |
+
(!isset($headers['content-type']) && $this->util->is_json($body)) // Sniff for JSON
|
1216 |
+
)
|
1217 |
+
{
|
1218 |
+
// Normalize JSON to a CFSimpleXML object
|
1219 |
+
$body = CFJSON::to_xml($body, $this->parser_class);
|
1220 |
+
}
|
1221 |
+
|
1222 |
+
// Put the parsed data back where it goes
|
1223 |
+
if (isset($response->body))
|
1224 |
+
{
|
1225 |
+
$response->body = $body;
|
1226 |
+
}
|
1227 |
+
else
|
1228 |
+
{
|
1229 |
+
$response = $body;
|
1230 |
+
}
|
1231 |
+
|
1232 |
+
return $response;
|
1233 |
+
}
|
1234 |
+
|
1235 |
+
|
1236 |
+
/*%******************************************************************************************%*/
|
1237 |
+
// CACHING LAYER
|
1238 |
+
|
1239 |
+
/**
|
1240 |
+
* Specifies that the resulting <CFResponse> object should be cached according to the settings from
|
1241 |
+
* <set_cache_config()>.
|
1242 |
+
*
|
1243 |
+
* @param string|integer $expires (Required) The time the cache is to expire. Accepts a number of seconds as an integer, or an amount of time, as a string, that is understood by <php:strtotime()> (e.g. "1 hour").
|
1244 |
+
* @return $this A reference to the current instance.
|
1245 |
+
*/
|
1246 |
+
public function cache($expires)
|
1247 |
+
{
|
1248 |
+
// Die if they haven't used set_cache_config().
|
1249 |
+
if (!$this->cache_class)
|
1250 |
+
{
|
1251 |
+
throw new CFRuntime_Exception('Must call set_cache_config() before using cache()');
|
1252 |
+
}
|
1253 |
+
|
1254 |
+
if (is_string($expires))
|
1255 |
+
{
|
1256 |
+
$expires = strtotime($expires);
|
1257 |
+
$this->cache_expires = $expires - time();
|
1258 |
+
}
|
1259 |
+
elseif (is_int($expires))
|
1260 |
+
{
|
1261 |
+
$this->cache_expires = $expires;
|
1262 |
+
}
|
1263 |
+
|
1264 |
+
$this->use_cache_flow = true;
|
1265 |
+
|
1266 |
+
return $this;
|
1267 |
+
}
|
1268 |
+
|
1269 |
+
/**
|
1270 |
+
* The callback function that is executed when the cache doesn't exist or has expired. The response of
|
1271 |
+
* this method is cached. Accepts identical parameters as the <authenticate()> method. Never call this
|
1272 |
+
* method directly -- it is used internally by the caching system.
|
1273 |
+
*
|
1274 |
+
* @param string $operation (Required) Indicates the operation to perform.
|
1275 |
+
* @param array $payload (Required) An associative array of parameters for authenticating. See the individual methods for allowed keys.
|
1276 |
+
* @return CFResponse A parsed HTTP response.
|
1277 |
+
*/
|
1278 |
+
public function cache_callback($operation, $payload)
|
1279 |
+
{
|
1280 |
+
// Disable the cache flow since it's already been handled.
|
1281 |
+
$this->use_cache_flow = false;
|
1282 |
+
|
1283 |
+
// Make the request
|
1284 |
+
$response = $this->authenticate($operation, $payload);
|
1285 |
+
|
1286 |
+
// If this is an XML document, convert it back to a string.
|
1287 |
+
if (isset($response->body) && ($response->body instanceof SimpleXMLElement))
|
1288 |
+
{
|
1289 |
+
$response->body = $response->body->asXML();
|
1290 |
+
}
|
1291 |
+
|
1292 |
+
return $response;
|
1293 |
+
}
|
1294 |
+
|
1295 |
+
/**
|
1296 |
+
* Used for caching the results of a batch request. Never call this method directly; it is used
|
1297 |
+
* internally by the caching system.
|
1298 |
+
*
|
1299 |
+
* @param CFBatchRequest $batch (Required) The batch request object to send.
|
1300 |
+
* @return CFResponse A parsed HTTP response.
|
1301 |
+
*/
|
1302 |
+
public function cache_callback_batch(CFBatchRequest $batch)
|
1303 |
+
{
|
1304 |
+
return $batch->send();
|
1305 |
+
}
|
1306 |
+
|
1307 |
+
/**
|
1308 |
+
* Deletes a cached <CFResponse> object using the specified cache storage type.
|
1309 |
+
*
|
1310 |
+
* @return boolean A value of `true` if cached object exists and is successfully deleted, otherwise `false`.
|
1311 |
+
*/
|
1312 |
+
public function delete_cache()
|
1313 |
+
{
|
1314 |
+
$this->use_cache_flow = true;
|
1315 |
+
$this->delete_cache = true;
|
1316 |
+
|
1317 |
+
return $this;
|
1318 |
+
}
|
1319 |
+
}
|
1320 |
+
|
1321 |
+
|
1322 |
+
/**
|
1323 |
+
* Contains the functionality for auto-loading service classes.
|
1324 |
+
*/
|
1325 |
+
class CFLoader
|
1326 |
+
{
|
1327 |
+
/*%******************************************************************************************%*/
|
1328 |
+
// AUTO-LOADER
|
1329 |
+
|
1330 |
+
/**
|
1331 |
+
* Automatically load classes that aren't included.
|
1332 |
+
*
|
1333 |
+
* @param string $class (Required) The classname to load.
|
1334 |
+
* @return boolean Whether or not the file was successfully loaded.
|
1335 |
+
*/
|
1336 |
+
public static function autoloader($class)
|
1337 |
+
{
|
1338 |
+
$path = dirname(__FILE__) . DIRECTORY_SEPARATOR;
|
1339 |
+
|
1340 |
+
// Amazon SDK classes
|
1341 |
+
if (strstr($class, 'Amazon'))
|
1342 |
+
{
|
1343 |
+
if (file_exists($require_this = $path . 'services' . DIRECTORY_SEPARATOR . str_ireplace('Amazon', '', strtolower($class)) . '.class.php'))
|
1344 |
+
{
|
1345 |
+
require_once $require_this;
|
1346 |
+
return true;
|
1347 |
+
}
|
1348 |
+
|
1349 |
+
return false;
|
1350 |
+
}
|
1351 |
+
|
1352 |
+
// Utility classes
|
1353 |
+
elseif (strstr($class, 'CF'))
|
1354 |
+
{
|
1355 |
+
if (file_exists($require_this = $path . 'utilities' . DIRECTORY_SEPARATOR . str_ireplace('CF', '', strtolower($class)) . '.class.php'))
|
1356 |
+
{
|
1357 |
+
require_once $require_this;
|
1358 |
+
return true;
|
1359 |
+
}
|
1360 |
+
|
1361 |
+
return false;
|
1362 |
+
}
|
1363 |
+
|
1364 |
+
// Load CacheCore
|
1365 |
+
elseif (strstr($class, 'Cache'))
|
1366 |
+
{
|
1367 |
+
if (file_exists($require_this = $path . 'lib' . DIRECTORY_SEPARATOR . 'cachecore' . DIRECTORY_SEPARATOR . strtolower($class) . '.class.php'))
|
1368 |
+
{
|
1369 |
+
require_once $require_this;
|
1370 |
+
return true;
|
1371 |
+
}
|
1372 |
+
|
1373 |
+
return false;
|
1374 |
+
}
|
1375 |
+
|
1376 |
+
// Load RequestCore
|
1377 |
+
elseif (strstr($class, 'RequestCore') || strstr($class, 'ResponseCore'))
|
1378 |
+
{
|
1379 |
+
if (file_exists($require_this = $path . 'lib' . DIRECTORY_SEPARATOR . 'requestcore' . DIRECTORY_SEPARATOR . 'requestcore.class.php'))
|
1380 |
+
{
|
1381 |
+
require_once $require_this;
|
1382 |
+
return true;
|
1383 |
+
}
|
1384 |
+
|
1385 |
+
return false;
|
1386 |
+
}
|
1387 |
+
|
1388 |
+
// Load Transmogrifier
|
1389 |
+
elseif (strstr($class, 'Transmogrifier'))
|
1390 |
+
{
|
1391 |
+
if (file_exists($require_this = $path . 'lib' . DIRECTORY_SEPARATOR . 'dom' . DIRECTORY_SEPARATOR . 'Transmogrifier.php'))
|
1392 |
+
{
|
1393 |
+
require_once $require_this;
|
1394 |
+
return true;
|
1395 |
+
}
|
1396 |
+
|
1397 |
+
return false;
|
1398 |
+
}
|
1399 |
+
|
1400 |
+
// Load Authentication Signers
|
1401 |
+
elseif (strstr($class, 'Auth'))
|
1402 |
+
{
|
1403 |
+
if (file_exists($require_this = $path . 'authentication' . DIRECTORY_SEPARATOR . str_replace('auth', 'signature_', strtolower($class)) . '.class.php'))
|
1404 |
+
{
|
1405 |
+
require_once $require_this;
|
1406 |
+
return true;
|
1407 |
+
}
|
1408 |
+
|
1409 |
+
return false;
|
1410 |
+
}
|
1411 |
+
|
1412 |
+
// Load Signer interface
|
1413 |
+
elseif ($class === 'Signer')
|
1414 |
+
{
|
1415 |
+
if (!interface_exists('Signable', false) &&
|
1416 |
+
file_exists($require_this = $path . 'authentication' . DIRECTORY_SEPARATOR . 'signable.interface.php'))
|
1417 |
+
{
|
1418 |
+
require_once $require_this;
|
1419 |
+
}
|
1420 |
+
|
1421 |
+
if (file_exists($require_this = $path . 'authentication' . DIRECTORY_SEPARATOR . 'signer.abstract.php'))
|
1422 |
+
{
|
1423 |
+
require_once $require_this;
|
1424 |
+
return true;
|
1425 |
+
}
|
1426 |
+
|
1427 |
+
return false;
|
1428 |
+
}
|
1429 |
+
|
1430 |
+
// Load Symfony YAML classes
|
1431 |
+
elseif (strstr($class, 'sfYaml'))
|
1432 |
+
{
|
1433 |
+
if (file_exists($require_this = $path . 'lib' . DIRECTORY_SEPARATOR . 'yaml' . DIRECTORY_SEPARATOR . 'lib' . DIRECTORY_SEPARATOR . 'sfYaml.php'))
|
1434 |
+
{
|
1435 |
+
require_once $require_this;
|
1436 |
+
return true;
|
1437 |
+
}
|
1438 |
+
|
1439 |
+
return false;
|
1440 |
+
}
|
1441 |
+
|
1442 |
+
return false;
|
1443 |
+
}
|
1444 |
+
}
|
1445 |
+
|
1446 |
+
// Register the autoloader.
|
1447 |
+
spl_autoload_register(array('CFLoader', 'autoloader'));
|
1448 |
+
|
1449 |
+
|
1450 |
+
/*%******************************************************************************************%*/
|
1451 |
+
// CONFIGURATION
|
1452 |
+
|
1453 |
+
// If config auto-discovery is explicitly disabled, stop here
|
1454 |
+
if (defined('AWS_DISABLE_CONFIG_AUTO_DISCOVERY')) return;
|
1455 |
+
|
1456 |
+
// Look for include file in the same directory (e.g. `./config.inc.php`).
|
1457 |
+
if (file_exists(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'config.inc.php'))
|
1458 |
+
{
|
1459 |
+
include_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'config.inc.php';
|
1460 |
+
}
|
1461 |
+
// Fallback to `~/.aws/sdk/config.inc.php`
|
1462 |
+
else
|
1463 |
+
{
|
1464 |
+
if (!isset($_ENV['HOME']) && isset($_SERVER['HOME']))
|
1465 |
+
{
|
1466 |
+
$_ENV['HOME'] = $_SERVER['HOME'];
|
1467 |
+
}
|
1468 |
+
elseif (!isset($_ENV['HOME']) && !isset($_SERVER['HOME']))
|
1469 |
+
{
|
1470 |
+
$os = strtolower(PHP_OS);
|
1471 |
+
if (in_array($os, array('windows', 'winnt', 'win32')))
|
1472 |
+
{
|
1473 |
+
$_ENV['HOME'] = false;
|
1474 |
+
}
|
1475 |
+
else
|
1476 |
+
{
|
1477 |
+
$dir = exec('(cd ~ && pwd) 2>&1', $out, $exit);
|
1478 |
+
if ($exit === 0)
|
1479 |
+
{
|
1480 |
+
$_ENV['HOME'] = trim($dir);
|
1481 |
+
}
|
1482 |
+
else
|
1483 |
+
{
|
1484 |
+
error_log('Failed to determine HOME directory after trying "' . $dir . '" (exit code ' . $exit . ')');
|
1485 |
+
$_ENV['HOME'] = false;
|
1486 |
+
}
|
1487 |
+
}
|
1488 |
+
|
1489 |
+
if (!$_ENV['HOME'])
|
1490 |
+
{
|
1491 |
+
switch ($os)
|
1492 |
+
{
|
1493 |
+
case 'darwin':
|
1494 |
+
$_ENV['HOME'] = '/Users/' . get_current_user();
|
1495 |
+
break;
|
1496 |
+
|
1497 |
+
case 'windows':
|
1498 |
+
case 'winnt':
|
1499 |
+
case 'win32':
|
1500 |
+
$_ENV['HOME'] = 'c:' . DIRECTORY_SEPARATOR . 'Documents and Settings' . DIRECTORY_SEPARATOR . get_current_user();
|
1501 |
+
break;
|
1502 |
+
|
1503 |
+
default:
|
1504 |
+
$_ENV['HOME'] = '/home/' . get_current_user();
|
1505 |
+
break;
|
1506 |
+
}
|
1507 |
+
}
|
1508 |
+
}
|
1509 |
+
|
1510 |
+
$path = DIRECTORY_SEPARATOR . '.aws' . DIRECTORY_SEPARATOR . 'sdk' . DIRECTORY_SEPARATOR . 'config.inc.php';
|
1511 |
+
if (isset($_ENV['HOME']) && file_exists($_ENV['HOME'] . $path))
|
1512 |
+
{
|
1513 |
+
include_once $_ENV['HOME'] . $path;
|
1514 |
+
}
|
1515 |
+
|
1516 |
+
unset($os, $dir, $out, $exit, $path);
|
1517 |
+
}
|
sdk/Aws_v1/services/as.class.php
ADDED
@@ -0,0 +1,1278 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* Copyright 2010-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
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 |
+
* A copy of the License is located at
|
8 |
+
*
|
9 |
+
* http://aws.amazon.com/apache2.0
|
10 |
+
*
|
11 |
+
* or in the "license" file accompanying this file. This file is distributed
|
12 |
+
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
|
13 |
+
* express or implied. See the License for the specific language governing
|
14 |
+
* permissions and limitations under the License.
|
15 |
+
*/
|
16 |
+
|
17 |
+
/**
|
18 |
+
* This guide provides detailed information about Auto Scaling actions, data types, parameters,
|
19 |
+
* and errors. For detailed information about Auto Scaling features and their associated API
|
20 |
+
* calls, go to the <a href=
|
21 |
+
* "http://docs.amazonwebservices.com/AutoScaling/latest/DeveloperGuide/">Auto Scaling Developer
|
22 |
+
* Guide</a>.
|
23 |
+
*
|
24 |
+
* Auto Scaling is a web service designed to automatically launch or terminate Amazon Elastic
|
25 |
+
* Compute Cloud (Amazon EC2) instances based on user-defined policies, schedules, and health
|
26 |
+
* checks. This service is used in conjunction with Amazon CloudWatch and Elastic Load Balancing
|
27 |
+
* services.
|
28 |
+
*
|
29 |
+
* This reference is based on the current WSDL, which is available at:
|
30 |
+
*
|
31 |
+
* <a href=
|
32 |
+
* "http://autoscaling.amazonaws.com/doc/2011-01-01/AutoScaling.wsdl">http://autoscaling.amazonaws.com/doc/2011-01-01/AutoScaling.wsdl</a>
|
33 |
+
*
|
34 |
+
* <strong>Endpoints</strong>
|
35 |
+
*
|
36 |
+
* For information about this product's regions and endpoints, go to <a href=
|
37 |
+
* "http://docs.amazonwebservices.com/general/latest/gr/index.html?rande.html">Regions and
|
38 |
+
* Endpoints</a> in the Amazon Web Services General Reference.
|
39 |
+
*
|
40 |
+
* @version 2013.01.14
|
41 |
+
* @license See the included NOTICE.md file for complete information.
|
42 |
+
* @copyright See the included NOTICE.md file for complete information.
|
43 |
+
* @link http://aws.amazon.com/as/ Auto Scaling
|
44 |
+
* @link http://aws.amazon.com/as/documentation/ Auto Scaling documentation
|
45 |
+
*/
|
46 |
+
class AmazonAS extends CFRuntime
|
47 |
+
{
|
48 |
+
/*%******************************************************************************************%*/
|
49 |
+
// CLASS CONSTANTS
|
50 |
+
|
51 |
+
/**
|
52 |
+
* Specify the queue URL for the United States East (Northern Virginia) Region.
|
53 |
+
*/
|
54 |
+
const REGION_US_E1 = 'autoscaling.us-east-1.amazonaws.com';
|
55 |
+
|
56 |
+
/**
|
57 |
+
* Specify the queue URL for the United States East (Northern Virginia) Region.
|
58 |
+
*/
|
59 |
+
const REGION_VIRGINIA = self::REGION_US_E1;
|
60 |
+
|
61 |
+
/**
|
62 |
+
* Specify the queue URL for the United States West (Northern California) Region.
|
63 |
+
*/
|
64 |
+
const REGION_US_W1 = 'autoscaling.us-west-1.amazonaws.com';
|
65 |
+
|
66 |
+
/**
|
67 |
+
* Specify the queue URL for the United States West (Northern California) Region.
|
68 |
+
*/
|
69 |
+
const REGION_CALIFORNIA = self::REGION_US_W1;
|
70 |
+
|
71 |
+
/**
|
72 |
+
* Specify the queue URL for the United States West (Oregon) Region.
|
73 |
+
*/
|
74 |
+
const REGION_US_W2 = 'autoscaling.us-west-2.amazonaws.com';
|
75 |
+
|
76 |
+
/**
|
77 |
+
* Specify the queue URL for the United States West (Oregon) Region.
|
78 |
+
*/
|
79 |
+
const REGION_OREGON = self::REGION_US_W2;
|
80 |
+
|
81 |
+
/**
|
82 |
+
* Specify the queue URL for the Europe West (Ireland) Region.
|
83 |
+
*/
|
84 |
+
const REGION_EU_W1 = 'autoscaling.eu-west-1.amazonaws.com';
|
85 |
+
|
86 |
+
/**
|
87 |
+
* Specify the queue URL for the Europe West (Ireland) Region.
|
88 |
+
*/
|
89 |
+
const REGION_IRELAND = self::REGION_EU_W1;
|
90 |
+
|
91 |
+
/**
|
92 |
+
* Specify the queue URL for the Asia Pacific Southeast (Singapore) Region.
|
93 |
+
*/
|
94 |
+
const REGION_APAC_SE1 = 'autoscaling.ap-southeast-1.amazonaws.com';
|
95 |
+
|
96 |
+
/**
|
97 |
+
* Specify the queue URL for the Asia Pacific Southeast (Singapore) Region.
|
98 |
+
*/
|
99 |
+
const REGION_SINGAPORE = self::REGION_APAC_SE1;
|
100 |
+
|
101 |
+
/**
|
102 |
+
* Specify the queue URL for the Asia Pacific Southeast (Singapore) Region.
|
103 |
+
*/
|
104 |
+
const REGION_APAC_SE2 = 'autoscaling.ap-southeast-2.amazonaws.com';
|
105 |
+
|
106 |
+
/**
|
107 |
+
* Specify the queue URL for the Asia Pacific Southeast (Singapore) Region.
|
108 |
+
*/
|
109 |
+
const REGION_SYDNEY = self::REGION_APAC_SE2;
|
110 |
+
|
111 |
+
/**
|
112 |
+
* Specify the queue URL for the Asia Pacific Northeast (Tokyo) Region.
|
113 |
+
*/
|
114 |
+
const REGION_APAC_NE1 = 'autoscaling.ap-northeast-1.amazonaws.com';
|
115 |
+
|
116 |
+
/**
|
117 |
+
* Specify the queue URL for the Asia Pacific Northeast (Tokyo) Region.
|
118 |
+
*/
|
119 |
+
const REGION_TOKYO = self::REGION_APAC_NE1;
|
120 |
+
|
121 |
+
/**
|
122 |
+
* Specify the queue URL for the South America (Sao Paulo) Region.
|
123 |
+
*/
|
124 |
+
const REGION_SA_E1 = 'autoscaling.sa-east-1.amazonaws.com';
|
125 |
+
|
126 |
+
/**
|
127 |
+
* Specify the queue URL for the South America (Sao Paulo) Region.
|
128 |
+
*/
|
129 |
+
const REGION_SAO_PAULO = self::REGION_SA_E1;
|
130 |
+
|
131 |
+
/**
|
132 |
+
* Specify the queue URL for the United States GovCloud Region.
|
133 |
+
*/
|
134 |
+
const REGION_US_GOV1 = 'autoscaling.us-gov-west-1.amazonaws.com';
|
135 |
+
|
136 |
+
/**
|
137 |
+
* Default service endpoint.
|
138 |
+
*/
|
139 |
+
const DEFAULT_URL = self::REGION_US_E1;
|
140 |
+
|
141 |
+
|
142 |
+
/*%******************************************************************************************%*/
|
143 |
+
// CONSTRUCTOR
|
144 |
+
|
145 |
+
/**
|
146 |
+
* Constructs a new instance of <AmazonAS>.
|
147 |
+
*
|
148 |
+
* @param array $options (Optional) An associative array of parameters that can have the following keys: <ul>
|
149 |
+
* <li><code>certificate_authority</code> - <code>boolean</code> - Optional - Determines which Cerificate Authority file to use. A value of boolean <code>false</code> will use the Certificate Authority file available on the system. A value of boolean <code>true</code> will use the Certificate Authority provided by the SDK. Passing a file system path to a Certificate Authority file (chmodded to <code>0755</code>) will use that. Leave this set to <code>false</code> if you're not sure.</li>
|
150 |
+
* <li><code>credentials</code> - <code>string</code> - Optional - The name of the credential set to use for authentication.</li>
|
151 |
+
* <li><code>default_cache_config</code> - <code>string</code> - Optional - This option allows a preferred storage type to be configured for long-term caching. This can be changed later using the <set_cache_config()> method. Valid values are: <code>apc</code>, <code>xcache</code>, or a file system path such as <code>./cache</code> or <code>/tmp/cache/</code>.</li>
|
152 |
+
* <li><code>key</code> - <code>string</code> - Optional - Your AWS key, or a session key. If blank, the default credential set will be used.</li>
|
153 |
+
* <li><code>secret</code> - <code>string</code> - Optional - Your AWS secret key, or a session secret key. If blank, the default credential set will be used.</li>
|
154 |
+
* <li><code>token</code> - <code>string</code> - Optional - An AWS session token.</li></ul>
|
155 |
+
* @return void
|
156 |
+
*/
|
157 |
+
public function __construct(array $options = array())
|
158 |
+
{
|
159 |
+
$this->api_version = '2011-01-01';
|
160 |
+
$this->hostname = self::DEFAULT_URL;
|
161 |
+
$this->auth_class = 'AuthV4Query';
|
162 |
+
|
163 |
+
return parent::__construct($options);
|
164 |
+
}
|
165 |
+
|
166 |
+
|
167 |
+
/*%******************************************************************************************%*/
|
168 |
+
// SETTERS
|
169 |
+
|
170 |
+
/**
|
171 |
+
* This allows you to explicitly sets the region for the service to use.
|
172 |
+
*
|
173 |
+
* @param string $region (Required) The region to explicitly set. Available options are <REGION_US_E1>, <REGION_US_W1>, <REGION_US_W2>, <REGION_EU_W1>, <REGION_APAC_SE1>, <REGION_APAC_SE2>, <REGION_APAC_NE1>, <REGION_SA_E1>, <REGION_US_GOV1>.
|
174 |
+
* @return $this A reference to the current instance.
|
175 |
+
*/
|
176 |
+
public function set_region($region)
|
177 |
+
{
|
178 |
+
// @codeCoverageIgnoreStart
|
179 |
+
$this->set_hostname($region);
|
180 |
+
return $this;
|
181 |
+
// @codeCoverageIgnoreEnd
|
182 |
+
}
|
183 |
+
|
184 |
+
|
185 |
+
/*%******************************************************************************************%*/
|
186 |
+
// SERVICE METHODS
|
187 |
+
|
188 |
+
/**
|
189 |
+
* Creates a new Auto Scaling group with the specified name and other attributes. When the
|
190 |
+
* creation request is completed, the Auto Scaling group is ready to be used in other calls.
|
191 |
+
*
|
192 |
+
* <p class="note">
|
193 |
+
* The Auto Scaling group name must be unique within the scope of your AWS account, and under the
|
194 |
+
* quota of Auto Scaling groups allowed for your account.
|
195 |
+
* </p>
|
196 |
+
*
|
197 |
+
* @param string $auto_scaling_group_name (Required) The name of the Auto Scaling group. [Constraints: The value must be between 1 and 255 characters, and must match the following regular expression pattern: <code>[\u0020-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF\r\n\t]*</code>]
|
198 |
+
* @param string $launch_configuration_name (Required) The name of the launch configuration to use with the Auto Scaling group. [Constraints: The value must be between 1 and 1600 characters, and must match the following regular expression pattern: <code>[\u0020-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF\r\n\t]*</code>]
|
199 |
+
* @param integer $min_size (Required) The minimum size of the Auto Scaling group.
|
200 |
+
* @param integer $max_size (Required) The maximum size of the Auto Scaling group.
|
201 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
202 |
+
* <li><code>DesiredCapacity</code> - <code>integer</code> - Optional - The number of Amazon EC2 instances that should be running in the group.</li>
|
203 |
+
* <li><code>DefaultCooldown</code> - <code>integer</code> - Optional - The amount of time, in seconds, after a scaling activity completes before any further trigger-related scaling activities can start.</li>
|
204 |
+
* <li><code>AvailabilityZones</code> - <code>string|array</code> - Optional - A list of Availability Zones for the Auto Scaling group. Pass a string for a single value, or an indexed array for multiple values.</li>
|
205 |
+
* <li><code>LoadBalancerNames</code> - <code>string|array</code> - Optional - A list of load balancers to use. Pass a string for a single value, or an indexed array for multiple values.</li>
|
206 |
+
* <li><code>HealthCheckType</code> - <code>string</code> - Optional - The service you want the health status from, Amazon EC2 or Elastic Load Balancer. Valid values are <code>EC2</code> or <code>ELB</code>. [Constraints: The value must be between 1 and 32 characters, and must match the following regular expression pattern: <code>[\u0020-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF\r\n\t]*</code>]</li>
|
207 |
+
* <li><code>HealthCheckGracePeriod</code> - <code>integer</code> - Optional - Length of time in seconds after a new Amazon EC2 instance comes into service that Auto Scaling starts checking its health.</li>
|
208 |
+
* <li><code>PlacementGroup</code> - <code>string</code> - Optional - Physical location of your cluster placement group created in Amazon EC2. For more information about cluster placement group, see <a href="http://docs.amazonwebservices.com/AWSEC2/latest/UserGuide/using_cluster_computing.html">Using Cluster Instances</a> [Constraints: The value must be between 1 and 255 characters, and must match the following regular expression pattern: <code>[\u0020-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF\r\n\t]*</code>]</li>
|
209 |
+
* <li><code>VPCZoneIdentifier</code> - <code>string</code> - Optional - A comma-separated list of subnet identifiers of Amazon Virtual Private Clouds (Amazon VPCs). When you specify subnets and Availability Zones with this call, ensure that the subnets' Availability Zones match the Availability Zones specified. [Constraints: The value must be between 1 and 255 characters, and must match the following regular expression pattern: <code>[\u0020-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF\r\n\t]*</code>]</li>
|
210 |
+
* <li><code>TerminationPolicies</code> - <code>string|array</code> - Optional - A standalone termination policy or a list of termination policies used to select the instance to terminate. The policies are executed in the order that they are listed. For more information on configuring a termination policy for your Auto Scaling group, go to <a href="http://docs.amazonwebservices.com/AutoScaling/latest/DeveloperGuide/us-termination-policy.html">Instance Termination Policy for Your Auto Scaling Group</a> in the the <em>Auto Scaling Developer Guide</em>. Pass a string for a single value, or an indexed array for multiple values.</li>
|
211 |
+
* <li><code>Tags</code> - <code>array</code> - Optional - The tag to be created or updated. Each tag should be defined by its resource type, resource ID, key, value, and a propagate flag. Valid values: key= <em>value</em>, value= <em>value</em>, propagate= <em>true</em> or <em>false</em>. Value and propagate are optional parameters. <ul>
|
212 |
+
* <li><code>x</code> - <code>array</code> - Optional - This represents a simple array index. <ul>
|
213 |
+
* <li><code>ResourceId</code> - <code>string</code> - Optional - The name of the Auto Scaling group. [Constraints: The value must match the following regular expression pattern: <code>[\u0020-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF\r\n\t]*</code>]</li>
|
214 |
+
* <li><code>ResourceType</code> - <code>string</code> - Optional - The kind of resource to which the tag is applied. Currently, Auto Scaling supports the <code>auto-scaling-group</code> resource type. [Constraints: The value must match the following regular expression pattern: <code>[\u0020-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF\r\n\t]*</code>]</li>
|
215 |
+
* <li><code>Key</code> - <code>string</code> - Required - The key of the tag. [Constraints: The value must be between 1 and 128 characters, and must match the following regular expression pattern: <code>[\u0020-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF\r\n\t]*</code>]</li>
|
216 |
+
* <li><code>Value</code> - <code>string</code> - Optional - The value of the tag. [Constraints: The value must be between 0 and 256 characters, and must match the following regular expression pattern: <code>[\u0020-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF\r\n\t]*</code>]</li>
|
217 |
+
* <li><code>PropagateAtLaunch</code> - <code>boolean</code> - Optional - Specifies whether the new tag will be applied to instances launched after the tag is created. The same behavior applies to updates: If you change a tag, the changed tag will be applied to all instances launched after you made the change.</li>
|
218 |
+
* </ul></li>
|
219 |
+
* </ul></li>
|
220 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
221 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
222 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
223 |
+
*/
|
224 |
+
public function create_auto_scaling_group($auto_scaling_group_name, $launch_configuration_name, $min_size, $max_size, $opt = null)
|
225 |
+
{
|
226 |
+
if (!$opt) $opt = array();
|
227 |
+
$opt['AutoScalingGroupName'] = $auto_scaling_group_name;
|
228 |
+
$opt['LaunchConfigurationName'] = $launch_configuration_name;
|
229 |
+
$opt['MinSize'] = $min_size;
|
230 |
+
$opt['MaxSize'] = $max_size;
|
231 |
+
|
232 |
+
// Optional list (non-map)
|
233 |
+
if (isset($opt['AvailabilityZones']))
|
234 |
+
{
|
235 |
+
$opt = array_merge($opt, CFComplexType::map(array(
|
236 |
+
'AvailabilityZones' => (is_array($opt['AvailabilityZones']) ? $opt['AvailabilityZones'] : array($opt['AvailabilityZones']))
|
237 |
+
), 'member'));
|
238 |
+
unset($opt['AvailabilityZones']);
|
239 |
+
}
|
240 |
+
|
241 |
+
// Optional list (non-map)
|
242 |
+
if (isset($opt['LoadBalancerNames']))
|
243 |
+
{
|
244 |
+
$opt = array_merge($opt, CFComplexType::map(array(
|
245 |
+
'LoadBalancerNames' => (is_array($opt['LoadBalancerNames']) ? $opt['LoadBalancerNames'] : array($opt['LoadBalancerNames']))
|
246 |
+
), 'member'));
|
247 |
+
unset($opt['LoadBalancerNames']);
|
248 |
+
}
|
249 |
+
|
250 |
+
// Optional list (non-map)
|
251 |
+
if (isset($opt['TerminationPolicies']))
|
252 |
+
{
|
253 |
+
$opt = array_merge($opt, CFComplexType::map(array(
|
254 |
+
'TerminationPolicies' => (is_array($opt['TerminationPolicies']) ? $opt['TerminationPolicies'] : array($opt['TerminationPolicies']))
|
255 |
+
), 'member'));
|
256 |
+
unset($opt['TerminationPolicies']);
|
257 |
+
}
|
258 |
+
|
259 |
+
// Optional list + map
|
260 |
+
if (isset($opt['Tags']))
|
261 |
+
{
|
262 |
+
$opt = array_merge($opt, CFComplexType::map(array(
|
263 |
+
'Tags' => $opt['Tags']
|
264 |
+
), 'member'));
|
265 |
+
unset($opt['Tags']);
|
266 |
+
}
|
267 |
+
|
268 |
+
return $this->authenticate('CreateAutoScalingGroup', $opt);
|
269 |
+
}
|
270 |
+
|
271 |
+
/**
|
272 |
+
* Creates a new launch configuration. The launch configuration name must be unique within the
|
273 |
+
* scope of the client's AWS account. The maximum limit of launch configurations, which by default
|
274 |
+
* is 100, must not yet have been met; otherwise, the call will fail. When created, the new launch
|
275 |
+
* configuration is available for immediate use.
|
276 |
+
*
|
277 |
+
* You can create a launch configuration with Amazon EC2 security groups or with Amazon VPC
|
278 |
+
* security groups. However, you can't use Amazon EC2 security groups together with Amazon VPC
|
279 |
+
* security groups, or vice versa.
|
280 |
+
*
|
281 |
+
* <p class="note">
|
282 |
+
* At this time, Auto Scaling launch configurations don't support compressed (e.g. zipped) user
|
283 |
+
* data files.
|
284 |
+
* </p>
|
285 |
+
*
|
286 |
+
* @param string $launch_configuration_name (Required) The name of the launch configuration to create. [Constraints: The value must be between 1 and 255 characters, and must match the following regular expression pattern: <code>[\u0020-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF\r\n\t]*</code>]
|
287 |
+
* @param string $image_id (Required) Unique ID of the <em>Amazon Machine Image</em> (AMI) which was assigned during registration. For more information about Amazon EC2 images, please see <a href="http://aws.amazon.com/ec2/">Amazon EC2 product documentation</a>. [Constraints: The value must be between 1 and 255 characters, and must match the following regular expression pattern: <code>[\u0020-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF\r\n\t]*</code>]
|
288 |
+
* @param string $instance_type (Required) The instance type of the Amazon EC2 instance. For more information about Amazon EC2 instance types, please see <a href="http://aws.amazon.com/ec2/">Amazon EC2 product documentation</a> [Constraints: The value must be between 1 and 255 characters, and must match the following regular expression pattern: <code>[\u0020-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF\r\n\t]*</code>]
|
289 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
290 |
+
* <li><code>KeyName</code> - <code>string</code> - Optional - The name of the Amazon EC2 key pair. [Constraints: The value must be between 1 and 255 characters, and must match the following regular expression pattern: <code>[\u0020-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF\r\n\t]*</code>]</li>
|
291 |
+
* <li><code>SecurityGroups</code> - <code>string|array</code> - Optional - The names of the security groups with which to associate Amazon EC2 or Amazon VPC instances. Specify Amazon EC2 security groups using security group names, such as <code>websrv</code>. Specify Amazon VPC security groups using security group IDs, such as <code>sg-12345678</code>. For more information about Amazon EC2 security groups, go to <a href="http://docs.amazonwebservices.com/AWSEC2/latest/UserGuide/index.html?using-network-security.html">Using Security Groups</a> in the Amazon EC2 product documentation. For more information about Amazon VPC security groups, go to <a href="http://docs.amazonwebservices.com/AmazonVPC/latest/UserGuide/index.html?VPC_SecurityGroups.html">Security Groups</a> in the Amazon VPC product documentation. Pass a string for a single value, or an indexed array for multiple values.</li>
|
292 |
+
* <li><code>UserData</code> - <code>string</code> - Optional - The user data available to the launched Amazon EC2 instances. For more information about Amazon EC2 user data, please see <a href="http://aws.amazon.com/ec2/">Amazon EC2 product documentation</a>. [Constraints: The value must be between 0 and 21847 characters, and must match the following regular expression pattern: <code>[\u0020-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF\r\n\t]*</code>]</li>
|
293 |
+
* <li><code>KernelId</code> - <code>string</code> - Optional - The ID of the kernel associated with the Amazon EC2 AMI. [Constraints: The value must be between 1 and 255 characters, and must match the following regular expression pattern: <code>[\u0020-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF\r\n\t]*</code>]</li>
|
294 |
+
* <li><code>RamdiskId</code> - <code>string</code> - Optional - The ID of the RAM disk associated with the Amazon EC2 AMI. [Constraints: The value must be between 1 and 255 characters, and must match the following regular expression pattern: <code>[\u0020-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF\r\n\t]*</code>]</li>
|
295 |
+
* <li><code>BlockDeviceMappings</code> - <code>array</code> - Optional - A list of mappings that specify how block devices are exposed to the instance. Each mapping is made up of a <em>VirtualName</em>, a <em>DeviceName</em>, and an <em>ebs</em> data structure that contains information about the associated Elastic Block Storage volume. For more information about Amazon EC2 BlockDeviceMappings, go to <a href="http://docs.amazonwebservices.com/AWSEC2/latest/UserGuide/index.html?block-device-mapping-concepts.html">Block Device Mapping</a> in the Amazon EC2 product documentation. <ul>
|
296 |
+
* <li><code>x</code> - <code>array</code> - Optional - This represents a simple array index. <ul>
|
297 |
+
* <li><code>VirtualName</code> - <code>string</code> - Optional - The virtual name associated with the device. [Constraints: The value must be between 1 and 255 characters, and must match the following regular expression pattern: <code>[\u0020-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF\r\n\t]*</code>]</li>
|
298 |
+
* <li><code>DeviceName</code> - <code>string</code> - Required - The name of the device within Amazon EC2. [Constraints: The value must be between 1 and 255 characters, and must match the following regular expression pattern: <code>[\u0020-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF\r\n\t]*</code>]</li>
|
299 |
+
* <li><code>Ebs</code> - <code>array</code> - Optional - The Elastic Block Storage volume information. <ul>
|
300 |
+
* <li><code>x</code> - <code>array</code> - Optional - This represents a simple array index. <ul>
|
301 |
+
* <li><code>SnapshotId</code> - <code>string</code> - Optional - The snapshot ID. [Constraints: The value must be between 1 and 255 characters, and must match the following regular expression pattern: <code>[\u0020-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF\r\n\t]*</code>]</li>
|
302 |
+
* <li><code>VolumeSize</code> - <code>integer</code> - Optional - The volume size, in gigabytes.</li>
|
303 |
+
* </ul></li>
|
304 |
+
* </ul></li>
|
305 |
+
* </ul></li>
|
306 |
+
* </ul></li>
|
307 |
+
* <li><code>InstanceMonitoring</code> - <code>array</code> - Optional - Enables detailed monitoring, which is enabled by default. When detailed monitoring is enabled, CloudWatch will generate metrics every minute and your account will be charged a fee. When you disable detailed monitoring, by specifying <code>False</code>, Cloudwatch will generate metrics every 5 minutes. For information about monitoring, see the <a href="http://aws.amazon.com/cloudwatch/">Amazon CloudWatch</a> product page. <ul>
|
308 |
+
* <li><code>x</code> - <code>array</code> - Optional - This represents a simple array index. <ul>
|
309 |
+
* <li><code>Enabled</code> - <code>boolean</code> - Optional - If <code>True</code>, instance monitoring is enabled.</li>
|
310 |
+
* </ul></li>
|
311 |
+
* </ul></li>
|
312 |
+
* <li><code>SpotPrice</code> - <code>string</code> - Optional - The maximum hourly price to be paid for any Spot Instance launched to fulfill the request. Spot Instances are launched when the price you specify exceeds the current Spot market price. For more information on launching Spot Instances, go to <a href="http://docs.amazonwebservices.com/AutoScaling/latest/DeveloperGuide/US-SpotInstances.html">Using Auto Scaling to Launch Spot Instances</a> in the <em>Auto Scaling Developer Guide</em>.</li>
|
313 |
+
* <li><code>IamInstanceProfile</code> - <code>string</code> - Optional - The name or the Amazon Resource Name (ARN) of the instance profile associated with the IAM role for the instance. For information on launching EC2 instances with an IAM role, go to <a href="http://docs.amazonwebservices.com/AutoScaling/latest/DeveloperGuide/us-iam-role.html">Launching Auto Scaling Instances With an IAM Role</a> in the <em>Auto Scaling Developer Guide</em>. [Constraints: The value must be between 1 and 1600 characters, and must match the following regular expression pattern: <code>[\u0020-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF\r\n\t]*</code>]</li>
|
314 |
+
* <li><code>EbsOptimized</code> - <code>boolean</code> - Optional - </li>
|
315 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
316 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
317 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
318 |
+
*/
|
319 |
+
public function create_launch_configuration($launch_configuration_name, $image_id, $instance_type, $opt = null)
|
320 |
+
{
|
321 |
+
if (!$opt) $opt = array();
|
322 |
+
$opt['LaunchConfigurationName'] = $launch_configuration_name;
|
323 |
+
$opt['ImageId'] = $image_id;
|
324 |
+
$opt['InstanceType'] = $instance_type;
|
325 |
+
|
326 |
+
// Optional list (non-map)
|
327 |
+
if (isset($opt['SecurityGroups']))
|
328 |
+
{
|
329 |
+
$opt = array_merge($opt, CFComplexType::map(array(
|
330 |
+
'SecurityGroups' => (is_array($opt['SecurityGroups']) ? $opt['SecurityGroups'] : array($opt['SecurityGroups']))
|
331 |
+
), 'member'));
|
332 |
+
unset($opt['SecurityGroups']);
|
333 |
+
}
|
334 |
+
|
335 |
+
// Optional list + map
|
336 |
+
if (isset($opt['BlockDeviceMappings']))
|
337 |
+
{
|
338 |
+
$opt = array_merge($opt, CFComplexType::map(array(
|
339 |
+
'BlockDeviceMappings' => $opt['BlockDeviceMappings']
|
340 |
+
), 'member'));
|
341 |
+
unset($opt['BlockDeviceMappings']);
|
342 |
+
}
|
343 |
+
|
344 |
+
// Optional map (non-list)
|
345 |
+
if (isset($opt['InstanceMonitoring']))
|
346 |
+
{
|
347 |
+
$opt = array_merge($opt, CFComplexType::map(array(
|
348 |
+
'InstanceMonitoring' => $opt['InstanceMonitoring']
|
349 |
+
), 'member'));
|
350 |
+
unset($opt['InstanceMonitoring']);
|
351 |
+
}
|
352 |
+
|
353 |
+
return $this->authenticate('CreateLaunchConfiguration', $opt);
|
354 |
+
}
|
355 |
+
|
356 |
+
/**
|
357 |
+
* Creates new tags or updates existing tags for an Auto Scaling group.
|
358 |
+
*
|
359 |
+
* <p class="note">
|
360 |
+
* A tag's definition is composed of a resource ID, resource type, key and value, and the
|
361 |
+
* propagate flag. Value and the propagate flag are optional parameters. See the Request
|
362 |
+
* Parameters for more information.
|
363 |
+
* </p>
|
364 |
+
*
|
365 |
+
* @param array $tags (Required) The tag to be created or updated. Each tag should be defined by its resource type, resource ID, key, value, and a propagate flag. The resource type and resource ID identify the type and name of resource for which the tag is created. Currently, <code>auto-scaling-group</code> is the only supported resource type. The valid value for the resource ID is <em>groupname</em>. The <code>PropagateAtLaunch</code> flag defines whether the new tag will be applied to instances launched by the Auto Scaling group. Valid values are <code>true</code> or <code>false</code>. However, instances that are already running will not get the new or updated tag. Likewise, when you modify a tag, the updated version will be applied only to new instances launched by the Auto Scaling group after the change. Running instances that had the previous version of the tag will continue to have the older tag. When you create a tag and a tag of the same name already exists, the operation overwrites the previous tag definition, but you will not get an error message. <ul>
|
366 |
+
* <li><code>x</code> - <code>array</code> - Optional - This represents a simple array index. <ul>
|
367 |
+
* <li><code>ResourceId</code> - <code>string</code> - Optional - The name of the Auto Scaling group. [Constraints: The value must match the following regular expression pattern: <code>[\u0020-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF\r\n\t]*</code>]</li>
|
368 |
+
* <li><code>ResourceType</code> - <code>string</code> - Optional - The kind of resource to which the tag is applied. Currently, Auto Scaling supports the <code>auto-scaling-group</code> resource type. [Constraints: The value must match the following regular expression pattern: <code>[\u0020-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF\r\n\t]*</code>]</li>
|
369 |
+
* <li><code>Key</code> - <code>string</code> - Required - The key of the tag. [Constraints: The value must be between 1 and 128 characters, and must match the following regular expression pattern: <code>[\u0020-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF\r\n\t]*</code>]</li>
|
370 |
+
* <li><code>Value</code> - <code>string</code> - Optional - The value of the tag. [Constraints: The value must be between 0 and 256 characters, and must match the following regular expression pattern: <code>[\u0020-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF\r\n\t]*</code>]</li>
|
371 |
+
* <li><code>PropagateAtLaunch</code> - <code>boolean</code> - Optional - Specifies whether the new tag will be applied to instances launched after the tag is created. The same behavior applies to updates: If you change a tag, the changed tag will be applied to all instances launched after you made the change.</li>
|
372 |
+
* </ul></li>
|
373 |
+
* </ul>
|
374 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
375 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
376 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
377 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
378 |
+
*/
|
379 |
+
public function create_or_update_tags($tags, $opt = null)
|
380 |
+
{
|
381 |
+
if (!$opt) $opt = array();
|
382 |
+
|
383 |
+
// Required list + map
|
384 |
+
$opt = array_merge($opt, CFComplexType::map(array(
|
385 |
+
'Tags' => (is_array($tags) ? $tags : array($tags))
|
386 |
+
), 'member'));
|
387 |
+
|
388 |
+
return $this->authenticate('CreateOrUpdateTags', $opt);
|
389 |
+
}
|
390 |
+
|
391 |
+
/**
|
392 |
+
* Deletes the specified Auto Scaling group if the group has no instances and no scaling
|
393 |
+
* activities in progress.
|
394 |
+
*
|
395 |
+
* <p class="note">
|
396 |
+
* To remove all instances before calling <code>DeleteAutoScalingGroup</code>, you can call
|
397 |
+
* <code>UpdateAutoScalingGroup</code> to set the minimum and maximum size of the AutoScalingGroup
|
398 |
+
* to zero.
|
399 |
+
* </p>
|
400 |
+
*
|
401 |
+
* @param string $auto_scaling_group_name (Required) The name of the Auto Scaling group. [Constraints: The value must be between 1 and 1600 characters, and must match the following regular expression pattern: <code>[\u0020-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF\r\n\t]*</code>]
|
402 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
403 |
+
* <li><code>ForceDelete</code> - <code>boolean</code> - Optional - Starting with API version 2011-01-01, specifies that the Auto Scaling group will be deleted along with all instances associated with the group, without waiting for all instances to be terminated.</li>
|
404 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
405 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
406 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
407 |
+
*/
|
408 |
+
public function delete_auto_scaling_group($auto_scaling_group_name, $opt = null)
|
409 |
+
{
|
410 |
+
if (!$opt) $opt = array();
|
411 |
+
$opt['AutoScalingGroupName'] = $auto_scaling_group_name;
|
412 |
+
|
413 |
+
return $this->authenticate('DeleteAutoScalingGroup', $opt);
|
414 |
+
}
|
415 |
+
|
416 |
+
/**
|
417 |
+
* Deletes the specified <code>LaunchConfiguration</code>.
|
418 |
+
*
|
419 |
+
* The specified launch configuration must not be attached to an Auto Scaling group. When this
|
420 |
+
* call completes, the launch configuration is no longer available for use.
|
421 |
+
*
|
422 |
+
* @param string $launch_configuration_name (Required) The name of the launch configuration. [Constraints: The value must be between 1 and 1600 characters, and must match the following regular expression pattern: <code>[\u0020-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF\r\n\t]*</code>]
|
423 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
424 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
425 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
426 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
427 |
+
*/
|
428 |
+
public function delete_launch_configuration($launch_configuration_name, $opt = null)
|
429 |
+
{
|
430 |
+
if (!$opt) $opt = array();
|
431 |
+
$opt['LaunchConfigurationName'] = $launch_configuration_name;
|
432 |
+
|
433 |
+
return $this->authenticate('DeleteLaunchConfiguration', $opt);
|
434 |
+
}
|
435 |
+
|
436 |
+
/**
|
437 |
+
* Deletes notifications created by <code>PutNotificationConfiguration</code>.
|
438 |
+
*
|
439 |
+
* @param string $auto_scaling_group_name (Required) The name of the Auto Scaling group. [Constraints: The value must be between 1 and 1600 characters, and must match the following regular expression pattern: <code>[\u0020-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF\r\n\t]*</code>]
|
440 |
+
* @param string $topic_arn (Required) The Amazon Resource Name (ARN) of the Amazon Simple Notification Service (SNS) topic. [Constraints: The value must be between 1 and 1600 characters, and must match the following regular expression pattern: <code>[\u0020-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF\r\n\t]*</code>]
|
441 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
442 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
443 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
444 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
445 |
+
*/
|
446 |
+
public function delete_notification_configuration($auto_scaling_group_name, $topic_arn, $opt = null)
|
447 |
+
{
|
448 |
+
if (!$opt) $opt = array();
|
449 |
+
$opt['AutoScalingGroupName'] = $auto_scaling_group_name;
|
450 |
+
$opt['TopicARN'] = $topic_arn;
|
451 |
+
|
452 |
+
return $this->authenticate('DeleteNotificationConfiguration', $opt);
|
453 |
+
}
|
454 |
+
|
455 |
+
/**
|
456 |
+
* Deletes a policy created by <code>PutScalingPolicy</code>.
|
457 |
+
*
|
458 |
+
* @param string $policy_name (Required) The name or PolicyARN of the policy you want to delete. [Constraints: The value must be between 1 and 1600 characters, and must match the following regular expression pattern: <code>[\u0020-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF\r\n\t]*</code>]
|
459 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
460 |
+
* <li><code>AutoScalingGroupName</code> - <code>string</code> - Optional - The name of the Auto Scaling group. [Constraints: The value must be between 1 and 1600 characters, and must match the following regular expression pattern: <code>[\u0020-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF\r\n\t]*</code>]</li>
|
461 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
462 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
463 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
464 |
+
*/
|
465 |
+
public function delete_policy($policy_name, $opt = null)
|
466 |
+
{
|
467 |
+
if (!$opt) $opt = array();
|
468 |
+
$opt['PolicyName'] = $policy_name;
|
469 |
+
|
470 |
+
return $this->authenticate('DeletePolicy', $opt);
|
471 |
+
}
|
472 |
+
|
473 |
+
/**
|
474 |
+
* Deletes a scheduled action previously created using the
|
475 |
+
* <code>PutScheduledUpdateGroupAction</code>.
|
476 |
+
*
|
477 |
+
* @param string $scheduled_action_name (Required) The name of the action you want to delete. [Constraints: The value must be between 1 and 1600 characters, and must match the following regular expression pattern: <code>[\u0020-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF\r\n\t]*</code>]
|
478 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
479 |
+
* <li><code>AutoScalingGroupName</code> - <code>string</code> - Optional - The name of the Auto Scaling group. [Constraints: The value must be between 1 and 1600 characters, and must match the following regular expression pattern: <code>[\u0020-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF\r\n\t]*</code>]</li>
|
480 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
481 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
482 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
483 |
+
*/
|
484 |
+
public function delete_scheduled_action($scheduled_action_name, $opt = null)
|
485 |
+
{
|
486 |
+
if (!$opt) $opt = array();
|
487 |
+
$opt['ScheduledActionName'] = $scheduled_action_name;
|
488 |
+
|
489 |
+
return $this->authenticate('DeleteScheduledAction', $opt);
|
490 |
+
}
|
491 |
+
|
492 |
+
/**
|
493 |
+
* Removes the specified tags or a set of tags from a set of resources.
|
494 |
+
*
|
495 |
+
* @param array $tags (Required) Each tag should be defined by its resource type, resource ID, key, value, and a propagate flag. Valid values are: Resource type = <em>auto-scaling-group</em>, Resource ID = <em>AutoScalingGroupName</em>, key= <em>value</em>, value= <em>value</em>, propagate= <em>true</em> or <em>false</em>. <ul>
|
496 |
+
* <li><code>x</code> - <code>array</code> - Optional - This represents a simple array index. <ul>
|
497 |
+
* <li><code>ResourceId</code> - <code>string</code> - Optional - The name of the Auto Scaling group. [Constraints: The value must match the following regular expression pattern: <code>[\u0020-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF\r\n\t]*</code>]</li>
|
498 |
+
* <li><code>ResourceType</code> - <code>string</code> - Optional - The kind of resource to which the tag is applied. Currently, Auto Scaling supports the <code>auto-scaling-group</code> resource type. [Constraints: The value must match the following regular expression pattern: <code>[\u0020-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF\r\n\t]*</code>]</li>
|
499 |
+
* <li><code>Key</code> - <code>string</code> - Required - The key of the tag. [Constraints: The value must be between 1 and 128 characters, and must match the following regular expression pattern: <code>[\u0020-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF\r\n\t]*</code>]</li>
|
500 |
+
* <li><code>Value</code> - <code>string</code> - Optional - The value of the tag. [Constraints: The value must be between 0 and 256 characters, and must match the following regular expression pattern: <code>[\u0020-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF\r\n\t]*</code>]</li>
|
501 |
+
* <li><code>PropagateAtLaunch</code> - <code>boolean</code> - Optional - Specifies whether the new tag will be applied to instances launched after the tag is created. The same behavior applies to updates: If you change a tag, the changed tag will be applied to all instances launched after you made the change.</li>
|
502 |
+
* </ul></li>
|
503 |
+
* </ul>
|
504 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
505 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
506 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
507 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
508 |
+
*/
|
509 |
+
public function delete_tags($tags, $opt = null)
|
510 |
+
{
|
511 |
+
if (!$opt) $opt = array();
|
512 |
+
|
513 |
+
// Required list + map
|
514 |
+
$opt = array_merge($opt, CFComplexType::map(array(
|
515 |
+
'Tags' => (is_array($tags) ? $tags : array($tags))
|
516 |
+
), 'member'));
|
517 |
+
|
518 |
+
return $this->authenticate('DeleteTags', $opt);
|
519 |
+
}
|
520 |
+
|
521 |
+
/**
|
522 |
+
* Returns policy adjustment types for use in the <code>PutScalingPolicy</code> action.
|
523 |
+
*
|
524 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
525 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
526 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
527 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
528 |
+
*/
|
529 |
+
public function describe_adjustment_types($opt = null)
|
530 |
+
{
|
531 |
+
if (!$opt) $opt = array();
|
532 |
+
|
533 |
+
return $this->authenticate('DescribeAdjustmentTypes', $opt);
|
534 |
+
}
|
535 |
+
|
536 |
+
/**
|
537 |
+
* Returns a full description of each Auto Scaling group in the given list. This includes all
|
538 |
+
* Amazon EC2 instances that are members of the group. If a list of names is not provided, the
|
539 |
+
* service returns the full details of all Auto Scaling groups.
|
540 |
+
*
|
541 |
+
* This action supports pagination by returning a token if there are more pages to retrieve. To
|
542 |
+
* get the next page, call this action again with the returned token as the <code>NextToken</code>
|
543 |
+
* parameter.
|
544 |
+
*
|
545 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
546 |
+
* <li><code>AutoScalingGroupNames</code> - <code>string|array</code> - Optional - A list of Auto Scaling group names. Pass a string for a single value, or an indexed array for multiple values.</li>
|
547 |
+
* <li><code>NextToken</code> - <code>string</code> - Optional - A string that marks the start of the next batch of returned results. [Constraints: The value must match the following regular expression pattern: <code>[\u0020-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF\r\n\t]*</code>]</li>
|
548 |
+
* <li><code>MaxRecords</code> - <code>integer</code> - Optional - The maximum number of records to return.</li>
|
549 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
550 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
551 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
552 |
+
*/
|
553 |
+
public function describe_auto_scaling_groups($opt = null)
|
554 |
+
{
|
555 |
+
if (!$opt) $opt = array();
|
556 |
+
|
557 |
+
// Optional list (non-map)
|
558 |
+
if (isset($opt['AutoScalingGroupNames']))
|
559 |
+
{
|
560 |
+
$opt = array_merge($opt, CFComplexType::map(array(
|
561 |
+
'AutoScalingGroupNames' => (is_array($opt['AutoScalingGroupNames']) ? $opt['AutoScalingGroupNames'] : array($opt['AutoScalingGroupNames']))
|
562 |
+
), 'member'));
|
563 |
+
unset($opt['AutoScalingGroupNames']);
|
564 |
+
}
|
565 |
+
|
566 |
+
return $this->authenticate('DescribeAutoScalingGroups', $opt);
|
567 |
+
}
|
568 |
+
|
569 |
+
/**
|
570 |
+
* Returns a description of each Auto Scaling instance in the <code>InstanceIds</code> list. If a
|
571 |
+
* list is not provided, the service returns the full details of all instances up to a maximum of
|
572 |
+
* 50. By default, the service returns a list of 20 items.
|
573 |
+
*
|
574 |
+
* This action supports pagination by returning a token if there are more pages to retrieve. To
|
575 |
+
* get the next page, call this action again with the returned token as the <code>NextToken</code>
|
576 |
+
* parameter.
|
577 |
+
*
|
578 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
579 |
+
* <li><code>InstanceIds</code> - <code>string|array</code> - Optional - The list of Auto Scaling instances to describe. If this list is omitted, all auto scaling instances are described. The list of requested instances cannot contain more than 50 items. If unknown instances are requested, they are ignored with no error. Pass a string for a single value, or an indexed array for multiple values.</li>
|
580 |
+
* <li><code>MaxRecords</code> - <code>integer</code> - Optional - The maximum number of Auto Scaling instances to be described with each call.</li>
|
581 |
+
* <li><code>NextToken</code> - <code>string</code> - Optional - The token returned by a previous call to indicate that there is more data available. [Constraints: The value must match the following regular expression pattern: <code>[\u0020-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF\r\n\t]*</code>]</li>
|
582 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
583 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
584 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
585 |
+
*/
|
586 |
+
public function describe_auto_scaling_instances($opt = null)
|
587 |
+
{
|
588 |
+
if (!$opt) $opt = array();
|
589 |
+
|
590 |
+
// Optional list (non-map)
|
591 |
+
if (isset($opt['InstanceIds']))
|
592 |
+
{
|
593 |
+
$opt = array_merge($opt, CFComplexType::map(array(
|
594 |
+
'InstanceIds' => (is_array($opt['InstanceIds']) ? $opt['InstanceIds'] : array($opt['InstanceIds']))
|
595 |
+
), 'member'));
|
596 |
+
unset($opt['InstanceIds']);
|
597 |
+
}
|
598 |
+
|
599 |
+
return $this->authenticate('DescribeAutoScalingInstances', $opt);
|
600 |
+
}
|
601 |
+
|
602 |
+
/**
|
603 |
+
* Returns a list of all notification types that are supported by Auto Scaling.
|
604 |
+
*
|
605 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
606 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
607 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
608 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
609 |
+
*/
|
610 |
+
public function describe_auto_scaling_notification_types($opt = null)
|
611 |
+
{
|
612 |
+
if (!$opt) $opt = array();
|
613 |
+
|
614 |
+
return $this->authenticate('DescribeAutoScalingNotificationTypes', $opt);
|
615 |
+
}
|
616 |
+
|
617 |
+
/**
|
618 |
+
* Returns a full description of the launch configurations, or the specified launch
|
619 |
+
* configurations, if they exist.
|
620 |
+
*
|
621 |
+
* If no name is specified, then the full details of all launch configurations are returned.
|
622 |
+
*
|
623 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
624 |
+
* <li><code>LaunchConfigurationNames</code> - <code>string|array</code> - Optional - A list of launch configuration names. Pass a string for a single value, or an indexed array for multiple values.</li>
|
625 |
+
* <li><code>NextToken</code> - <code>string</code> - Optional - A string that marks the start of the next batch of returned results. [Constraints: The value must match the following regular expression pattern: <code>[\u0020-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF\r\n\t]*</code>]</li>
|
626 |
+
* <li><code>MaxRecords</code> - <code>integer</code> - Optional - The maximum number of launch configurations. The default is 100.</li>
|
627 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
628 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
629 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
630 |
+
*/
|
631 |
+
public function describe_launch_configurations($opt = null)
|
632 |
+
{
|
633 |
+
if (!$opt) $opt = array();
|
634 |
+
|
635 |
+
// Optional list (non-map)
|
636 |
+
if (isset($opt['LaunchConfigurationNames']))
|
637 |
+
{
|
638 |
+
$opt = array_merge($opt, CFComplexType::map(array(
|
639 |
+
'LaunchConfigurationNames' => (is_array($opt['LaunchConfigurationNames']) ? $opt['LaunchConfigurationNames'] : array($opt['LaunchConfigurationNames']))
|
640 |
+
), 'member'));
|
641 |
+
unset($opt['LaunchConfigurationNames']);
|
642 |
+
}
|
643 |
+
|
644 |
+
return $this->authenticate('DescribeLaunchConfigurations', $opt);
|
645 |
+
}
|
646 |
+
|
647 |
+
/**
|
648 |
+
* Returns a list of metrics and a corresponding list of granularities for each metric.
|
649 |
+
*
|
650 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
651 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
652 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
653 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
654 |
+
*/
|
655 |
+
public function describe_metric_collection_types($opt = null)
|
656 |
+
{
|
657 |
+
if (!$opt) $opt = array();
|
658 |
+
|
659 |
+
return $this->authenticate('DescribeMetricCollectionTypes', $opt);
|
660 |
+
}
|
661 |
+
|
662 |
+
/**
|
663 |
+
* Returns a list of notification actions associated with Auto Scaling groups for specified
|
664 |
+
* events.
|
665 |
+
*
|
666 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
667 |
+
* <li><code>AutoScalingGroupNames</code> - <code>string|array</code> - Optional - The name of the Auto Scaling group. Pass a string for a single value, or an indexed array for multiple values.</li>
|
668 |
+
* <li><code>NextToken</code> - <code>string</code> - Optional - A string that is used to mark the start of the next batch of returned results for pagination. [Constraints: The value must match the following regular expression pattern: <code>[\u0020-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF\r\n\t]*</code>]</li>
|
669 |
+
* <li><code>MaxRecords</code> - <code>integer</code> - Optional - Maximum number of records to be returned.</li>
|
670 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
671 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
672 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
673 |
+
*/
|
674 |
+
public function describe_notification_configurations($opt = null)
|
675 |
+
{
|
676 |
+
if (!$opt) $opt = array();
|
677 |
+
|
678 |
+
// Optional list (non-map)
|
679 |
+
if (isset($opt['AutoScalingGroupNames']))
|
680 |
+
{
|
681 |
+
$opt = array_merge($opt, CFComplexType::map(array(
|
682 |
+
'AutoScalingGroupNames' => (is_array($opt['AutoScalingGroupNames']) ? $opt['AutoScalingGroupNames'] : array($opt['AutoScalingGroupNames']))
|
683 |
+
), 'member'));
|
684 |
+
unset($opt['AutoScalingGroupNames']);
|
685 |
+
}
|
686 |
+
|
687 |
+
return $this->authenticate('DescribeNotificationConfigurations', $opt);
|
688 |
+
}
|
689 |
+
|
690 |
+
/**
|
691 |
+
* Returns descriptions of what each policy does. This action supports pagination. If the response
|
692 |
+
* includes a token, there are more records available. To get the additional records, repeat the
|
693 |
+
* request with the response token as the <code>NextToken</code> parameter.
|
694 |
+
*
|
695 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
696 |
+
* <li><code>AutoScalingGroupName</code> - <code>string</code> - Optional - The name of the Auto Scaling group. [Constraints: The value must be between 1 and 1600 characters, and must match the following regular expression pattern: <code>[\u0020-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF\r\n\t]*</code>]</li>
|
697 |
+
* <li><code>PolicyNames</code> - <code>string|array</code> - Optional - A list of policy names or policy ARNs to be described. If this list is omitted, all policy names are described. If an auto scaling group name is provided, the results are limited to that group. The list of requested policy names cannot contain more than 50 items. If unknown policy names are requested, they are ignored with no error. Pass a string for a single value, or an indexed array for multiple values.</li>
|
698 |
+
* <li><code>NextToken</code> - <code>string</code> - Optional - A string that is used to mark the start of the next batch of returned results for pagination. [Constraints: The value must match the following regular expression pattern: <code>[\u0020-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF\r\n\t]*</code>]</li>
|
699 |
+
* <li><code>MaxRecords</code> - <code>integer</code> - Optional - The maximum number of policies that will be described with each call.</li>
|
700 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
701 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
702 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
703 |
+
*/
|
704 |
+
public function describe_policies($opt = null)
|
705 |
+
{
|
706 |
+
if (!$opt) $opt = array();
|
707 |
+
|
708 |
+
// Optional list (non-map)
|
709 |
+
if (isset($opt['PolicyNames']))
|
710 |
+
{
|
711 |
+
$opt = array_merge($opt, CFComplexType::map(array(
|
712 |
+
'PolicyNames' => (is_array($opt['PolicyNames']) ? $opt['PolicyNames'] : array($opt['PolicyNames']))
|
713 |
+
), 'member'));
|
714 |
+
unset($opt['PolicyNames']);
|
715 |
+
}
|
716 |
+
|
717 |
+
return $this->authenticate('DescribePolicies', $opt);
|
718 |
+
}
|
719 |
+
|
720 |
+
/**
|
721 |
+
* Returns the scaling activities for the specified Auto Scaling group.
|
722 |
+
*
|
723 |
+
* If the specified <code>ActivityIds</code> list is empty, all the activities from the past six
|
724 |
+
* weeks are returned. Activities are sorted by completion time. Activities still in progress
|
725 |
+
* appear first on the list.
|
726 |
+
*
|
727 |
+
* This action supports pagination. If the response includes a token, there are more records
|
728 |
+
* available. To get the additional records, repeat the request with the response token as the
|
729 |
+
* <code>NextToken</code> parameter.
|
730 |
+
*
|
731 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
732 |
+
* <li><code>ActivityIds</code> - <code>string|array</code> - Optional - A list containing the activity IDs of the desired scaling activities. If this list is omitted, all activities are described. If an <code>AutoScalingGroupName</code> is provided, the results are limited to that group. The list of requested activities cannot contain more than 50 items. If unknown activities are requested, they are ignored with no error. Pass a string for a single value, or an indexed array for multiple values.</li>
|
733 |
+
* <li><code>AutoScalingGroupName</code> - <code>string</code> - Optional - The name of the <code>AutoScalingGroup</code>. [Constraints: The value must be between 1 and 1600 characters, and must match the following regular expression pattern: <code>[\u0020-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF\r\n\t]*</code>]</li>
|
734 |
+
* <li><code>MaxRecords</code> - <code>integer</code> - Optional - The maximum number of scaling activities to return.</li>
|
735 |
+
* <li><code>NextToken</code> - <code>string</code> - Optional - A string that marks the start of the next batch of returned results for pagination. [Constraints: The value must match the following regular expression pattern: <code>[\u0020-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF\r\n\t]*</code>]</li>
|
736 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
737 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
738 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
739 |
+
*/
|
740 |
+
public function describe_scaling_activities($opt = null)
|
741 |
+
{
|
742 |
+
if (!$opt) $opt = array();
|
743 |
+
|
744 |
+
// Optional list (non-map)
|
745 |
+
if (isset($opt['ActivityIds']))
|
746 |
+
{
|
747 |
+
$opt = array_merge($opt, CFComplexType::map(array(
|
748 |
+
'ActivityIds' => (is_array($opt['ActivityIds']) ? $opt['ActivityIds'] : array($opt['ActivityIds']))
|
749 |
+
), 'member'));
|
750 |
+
unset($opt['ActivityIds']);
|
751 |
+
}
|
752 |
+
|
753 |
+
return $this->authenticate('DescribeScalingActivities', $opt);
|
754 |
+
}
|
755 |
+
|
756 |
+
/**
|
757 |
+
* Returns scaling process types for use in the <code>ResumeProcesses</code> and
|
758 |
+
* <code>SuspendProcesses</code> actions.
|
759 |
+
*
|
760 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
761 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
762 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
763 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
764 |
+
*/
|
765 |
+
public function describe_scaling_process_types($opt = null)
|
766 |
+
{
|
767 |
+
if (!$opt) $opt = array();
|
768 |
+
|
769 |
+
return $this->authenticate('DescribeScalingProcessTypes', $opt);
|
770 |
+
}
|
771 |
+
|
772 |
+
/**
|
773 |
+
* Lists all the actions scheduled for your Auto Scaling group that haven't been executed. To see
|
774 |
+
* a list of actions already executed, see the activity record returned in
|
775 |
+
* <code>DescribeScalingActivities</code>.
|
776 |
+
*
|
777 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
778 |
+
* <li><code>AutoScalingGroupName</code> - <code>string</code> - Optional - The name of the Auto Scaling group. [Constraints: The value must be between 1 and 1600 characters, and must match the following regular expression pattern: <code>[\u0020-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF\r\n\t]*</code>]</li>
|
779 |
+
* <li><code>ScheduledActionNames</code> - <code>string|array</code> - Optional - A list of scheduled actions to be described. If this list is omitted, all scheduled actions are described. The list of requested scheduled actions cannot contain more than 50 items. If an auto scaling group name is provided, the results are limited to that group. If unknown scheduled actions are requested, they are ignored with no error. Pass a string for a single value, or an indexed array for multiple values.</li>
|
780 |
+
* <li><code>StartTime</code> - <code>string</code> - Optional - The earliest scheduled start time to return. If scheduled action names are provided, this field will be ignored. May be passed as a number of seconds since UNIX Epoch, or any string compatible with <php:strtotime()>.</li>
|
781 |
+
* <li><code>EndTime</code> - <code>string</code> - Optional - The latest scheduled start time to return. If scheduled action names are provided, this field is ignored. May be passed as a number of seconds since UNIX Epoch, or any string compatible with <php:strtotime()>.</li>
|
782 |
+
* <li><code>NextToken</code> - <code>string</code> - Optional - A string that marks the start of the next batch of returned results. [Constraints: The value must match the following regular expression pattern: <code>[\u0020-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF\r\n\t]*</code>]</li>
|
783 |
+
* <li><code>MaxRecords</code> - <code>integer</code> - Optional - The maximum number of scheduled actions to return.</li>
|
784 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
785 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
786 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
787 |
+
*/
|
788 |
+
public function describe_scheduled_actions($opt = null)
|
789 |
+
{
|
790 |
+
if (!$opt) $opt = array();
|
791 |
+
|
792 |
+
// Optional DateTime
|
793 |
+
if (isset($opt['StartTime']))
|
794 |
+
{
|
795 |
+
$opt['StartTime'] = $this->util->convert_date_to_iso8601($opt['StartTime']);
|
796 |
+
}
|
797 |
+
|
798 |
+
// Optional DateTime
|
799 |
+
if (isset($opt['EndTime']))
|
800 |
+
{
|
801 |
+
$opt['EndTime'] = $this->util->convert_date_to_iso8601($opt['EndTime']);
|
802 |
+
}
|
803 |
+
|
804 |
+
// Optional list (non-map)
|
805 |
+
if (isset($opt['ScheduledActionNames']))
|
806 |
+
{
|
807 |
+
$opt = array_merge($opt, CFComplexType::map(array(
|
808 |
+
'ScheduledActionNames' => (is_array($opt['ScheduledActionNames']) ? $opt['ScheduledActionNames'] : array($opt['ScheduledActionNames']))
|
809 |
+
), 'member'));
|
810 |
+
unset($opt['ScheduledActionNames']);
|
811 |
+
}
|
812 |
+
|
813 |
+
return $this->authenticate('DescribeScheduledActions', $opt);
|
814 |
+
}
|
815 |
+
|
816 |
+
/**
|
817 |
+
* Lists the Auto Scaling group tags.
|
818 |
+
*
|
819 |
+
* You can use filters to limit results when describing tags. For example, you can query for tags
|
820 |
+
* of a particular Auto Scaling group. You can specify multiple values for a filter. A tag must
|
821 |
+
* match at least one of the specified values for it to be included in the results.
|
822 |
+
*
|
823 |
+
* You can also specify multiple filters. The result includes information for a particular tag
|
824 |
+
* only if it matches all your filters. If there's no match, no special message is returned.
|
825 |
+
*
|
826 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
827 |
+
* <li><code>Filters</code> - <code>array</code> - Optional - The value of the filter type used to identify the tags to be returned. For example, you can filter so that tags are returned according to Auto Scaling group, the key and value, or whether the new tag will be applied to instances launched after the tag is created (PropagateAtLaunch). <ul>
|
828 |
+
* <li><code>x</code> - <code>array</code> - Optional - This represents a simple array index. <ul>
|
829 |
+
* <li><code>Name</code> - <code>string</code> - Optional - The name of the filter. Valid Name values are: <code>"auto-scaling-group"</code>, <code>"key"</code>, <code>"value"</code>, and <code>"propagate-at-launch"</code>. [Constraints: The value must match the following regular expression pattern: <code>[\u0020-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF\r\n\t]*</code>]</li>
|
830 |
+
* <li><code>Values</code> - <code>string|array</code> - Optional - The value of the filter. Pass a string for a single value, or an indexed array for multiple values.</li>
|
831 |
+
* </ul></li>
|
832 |
+
* </ul></li>
|
833 |
+
* <li><code>NextToken</code> - <code>string</code> - Optional - A string that marks the start of the next batch of returned results. [Constraints: The value must match the following regular expression pattern: <code>[\u0020-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF\r\n\t]*</code>]</li>
|
834 |
+
* <li><code>MaxRecords</code> - <code>integer</code> - Optional - The maximum number of records to return.</li>
|
835 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
836 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
837 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
838 |
+
*/
|
839 |
+
public function describe_tags($opt = null)
|
840 |
+
{
|
841 |
+
if (!$opt) $opt = array();
|
842 |
+
|
843 |
+
// Optional list + map
|
844 |
+
if (isset($opt['Filters']))
|
845 |
+
{
|
846 |
+
$opt = array_merge($opt, CFComplexType::map(array(
|
847 |
+
'Filters' => $opt['Filters']
|
848 |
+
), 'member'));
|
849 |
+
unset($opt['Filters']);
|
850 |
+
}
|
851 |
+
|
852 |
+
return $this->authenticate('DescribeTags', $opt);
|
853 |
+
}
|
854 |
+
|
855 |
+
/**
|
856 |
+
* Returns a list of all termination policies supported by Auto Scaling.
|
857 |
+
*
|
858 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
859 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
860 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
861 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
862 |
+
*/
|
863 |
+
public function describe_termination_policy_types($opt = null)
|
864 |
+
{
|
865 |
+
if (!$opt) $opt = array();
|
866 |
+
|
867 |
+
return $this->authenticate('DescribeTerminationPolicyTypes', $opt);
|
868 |
+
}
|
869 |
+
|
870 |
+
/**
|
871 |
+
* Disables monitoring of group metrics for the Auto Scaling group specified in
|
872 |
+
* <code>AutoScalingGroupName</code>. You can specify the list of affected metrics with the
|
873 |
+
* <code>Metrics</code> parameter.
|
874 |
+
*
|
875 |
+
* @param string $auto_scaling_group_name (Required) The name or ARN of the Auto Scaling Group. [Constraints: The value must be between 1 and 1600 characters, and must match the following regular expression pattern: <code>[\u0020-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF\r\n\t]*</code>]
|
876 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
877 |
+
* <li><code>Metrics</code> - <code>string|array</code> - Optional - The list of metrics to disable. If no metrics are specified, all metrics are disabled. The following metrics are supported:<ul><li>GroupMinSize</li><li>GroupMaxSize</li><li>GroupDesiredCapacity</li><li>GroupInServiceInstances</li><li>GroupPendingInstances</li><li>GroupTerminatingInstances</li><li>GroupTotalInstances</li></ul> Pass a string for a single value, or an indexed array for multiple values.</li>
|
878 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
879 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
880 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
881 |
+
*/
|
882 |
+
public function disable_metrics_collection($auto_scaling_group_name, $opt = null)
|
883 |
+
{
|
884 |
+
if (!$opt) $opt = array();
|
885 |
+
$opt['AutoScalingGroupName'] = $auto_scaling_group_name;
|
886 |
+
|
887 |
+
// Optional list (non-map)
|
888 |
+
if (isset($opt['Metrics']))
|
889 |
+
{
|
890 |
+
$opt = array_merge($opt, CFComplexType::map(array(
|
891 |
+
'Metrics' => (is_array($opt['Metrics']) ? $opt['Metrics'] : array($opt['Metrics']))
|
892 |
+
), 'member'));
|
893 |
+
unset($opt['Metrics']);
|
894 |
+
}
|
895 |
+
|
896 |
+
return $this->authenticate('DisableMetricsCollection', $opt);
|
897 |
+
}
|
898 |
+
|
899 |
+
/**
|
900 |
+
* Enables monitoring of group metrics for the Auto Scaling group specified in
|
901 |
+
* <code>AutoScalingGroupName</code>. You can specify the list of enabled metrics with the
|
902 |
+
* <code>Metrics</code> parameter.
|
903 |
+
*
|
904 |
+
* Auto scaling metrics collection can be turned on only if the <code>InstanceMonitoring</code>
|
905 |
+
* flag, in the Auto Scaling group's launch configuration, is set to <code>True</code>.
|
906 |
+
*
|
907 |
+
* @param string $auto_scaling_group_name (Required) The name or ARN of the Auto Scaling group. [Constraints: The value must be between 1 and 1600 characters, and must match the following regular expression pattern: <code>[\u0020-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF\r\n\t]*</code>]
|
908 |
+
* @param string $granularity (Required) The granularity to associate with the metrics to collect. Currently, the only legal granularity is "1Minute". [Constraints: The value must be between 1 and 255 characters, and must match the following regular expression pattern: <code>[\u0020-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF\r\n\t]*</code>]
|
909 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
910 |
+
* <li><code>Metrics</code> - <code>string|array</code> - Optional - The list of metrics to collect. If no metrics are specified, all metrics are enabled. The following metrics are supported:<ul><li>GroupMinSize</li><li>GroupMaxSize</li><li>GroupDesiredCapacity</li><li>GroupInServiceInstances</li><li>GroupPendingInstances</li><li>GroupTerminatingInstances</li><li>GroupTotalInstances</li></ul> Pass a string for a single value, or an indexed array for multiple values.</li>
|
911 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
912 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
913 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
914 |
+
*/
|
915 |
+
public function enable_metrics_collection($auto_scaling_group_name, $granularity, $opt = null)
|
916 |
+
{
|
917 |
+
if (!$opt) $opt = array();
|
918 |
+
$opt['AutoScalingGroupName'] = $auto_scaling_group_name;
|
919 |
+
$opt['Granularity'] = $granularity;
|
920 |
+
|
921 |
+
// Optional list (non-map)
|
922 |
+
if (isset($opt['Metrics']))
|
923 |
+
{
|
924 |
+
$opt = array_merge($opt, CFComplexType::map(array(
|
925 |
+
'Metrics' => (is_array($opt['Metrics']) ? $opt['Metrics'] : array($opt['Metrics']))
|
926 |
+
), 'member'));
|
927 |
+
unset($opt['Metrics']);
|
928 |
+
}
|
929 |
+
|
930 |
+
return $this->authenticate('EnableMetricsCollection', $opt);
|
931 |
+
}
|
932 |
+
|
933 |
+
/**
|
934 |
+
* Runs the policy you create for your Auto Scaling group in <code>PutScalingPolicy</code>.
|
935 |
+
*
|
936 |
+
* @param string $policy_name (Required) The name or PolicyARN of the policy you want to run. [Constraints: The value must be between 1 and 1600 characters, and must match the following regular expression pattern: <code>[\u0020-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF\r\n\t]*</code>]
|
937 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
938 |
+
* <li><code>AutoScalingGroupName</code> - <code>string</code> - Optional - The name or ARN of the Auto Scaling group. [Constraints: The value must be between 1 and 1600 characters, and must match the following regular expression pattern: <code>[\u0020-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF\r\n\t]*</code>]</li>
|
939 |
+
* <li><code>HonorCooldown</code> - <code>boolean</code> - Optional - Set to <code>True</code> if you want Auto Scaling to reject this request when the Auto Scaling group is in cooldown.</li>
|
940 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
941 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
942 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
943 |
+
*/
|
944 |
+
public function execute_policy($policy_name, $opt = null)
|
945 |
+
{
|
946 |
+
if (!$opt) $opt = array();
|
947 |
+
$opt['PolicyName'] = $policy_name;
|
948 |
+
|
949 |
+
return $this->authenticate('ExecutePolicy', $opt);
|
950 |
+
}
|
951 |
+
|
952 |
+
/**
|
953 |
+
* Configures an Auto Scaling group to send notifications when specified events take place.
|
954 |
+
* Subscribers to this topic can have messages for events delivered to an endpoint such as a web
|
955 |
+
* server or email address.
|
956 |
+
*
|
957 |
+
* A new <code>PutNotificationConfiguration</code> overwrites an existing configuration.
|
958 |
+
*
|
959 |
+
* @param string $auto_scaling_group_name (Required) The name of the Auto Scaling group. [Constraints: The value must be between 1 and 1600 characters, and must match the following regular expression pattern: <code>[\u0020-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF\r\n\t]*</code>]
|
960 |
+
* @param string $topic_arn (Required) The Amazon Resource Name (ARN) of the Amazon Simple Notification Service (SNS) topic. [Constraints: The value must be between 1 and 1600 characters, and must match the following regular expression pattern: <code>[\u0020-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF\r\n\t]*</code>]
|
961 |
+
* @param string|array $notification_types (Required) The type of events that will trigger the notification. For more information, go to <code>DescribeAutoScalingNotificationTypes</code>. Pass a string for a single value, or an indexed array for multiple values.
|
962 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
963 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
964 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
965 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
966 |
+
*/
|
967 |
+
public function put_notification_configuration($auto_scaling_group_name, $topic_arn, $notification_types, $opt = null)
|
968 |
+
{
|
969 |
+
if (!$opt) $opt = array();
|
970 |
+
$opt['AutoScalingGroupName'] = $auto_scaling_group_name;
|
971 |
+
$opt['TopicARN'] = $topic_arn;
|
972 |
+
|
973 |
+
// Required list (non-map)
|
974 |
+
$opt = array_merge($opt, CFComplexType::map(array(
|
975 |
+
'NotificationTypes' => (is_array($notification_types) ? $notification_types : array($notification_types))
|
976 |
+
), 'member'));
|
977 |
+
|
978 |
+
return $this->authenticate('PutNotificationConfiguration', $opt);
|
979 |
+
}
|
980 |
+
|
981 |
+
/**
|
982 |
+
* Creates or updates a policy for an Auto Scaling group. To update an existing policy, use the
|
983 |
+
* existing policy name and set the parameter(s) you want to change. Any existing parameter not
|
984 |
+
* changed in an update to an existing policy is not changed in this update request.
|
985 |
+
*
|
986 |
+
* @param string $auto_scaling_group_name (Required) The name or ARN of the Auto Scaling group. [Constraints: The value must be between 1 and 1600 characters, and must match the following regular expression pattern: <code>[\u0020-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF\r\n\t]*</code>]
|
987 |
+
* @param string $policy_name (Required) The name of the policy you want to create or update. [Constraints: The value must be between 1 and 255 characters, and must match the following regular expression pattern: <code>[\u0020-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF\r\n\t]*</code>]
|
988 |
+
* @param integer $scaling_adjustment (Required) The number of instances by which to scale. <code>AdjustmentType</code> determines the interpretation of this number (e.g., as an absolute number or as a percentage of the existing Auto Scaling group size). A positive increment adds to the current capacity and a negative value removes from the current capacity.
|
989 |
+
* @param string $adjustment_type (Required) Specifies whether the <code>ScalingAdjustment</code> is an absolute number or a percentage of the current capacity. Valid values are <code>ChangeInCapacity</code>, <code>ExactCapacity</code>, and <code>PercentChangeInCapacity</code>. [Constraints: The value must be between 1 and 255 characters, and must match the following regular expression pattern: <code>[\u0020-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF\r\n\t]*</code>]
|
990 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
991 |
+
* <li><code>Cooldown</code> - <code>integer</code> - Optional - The amount of time, in seconds, after a scaling activity completes before any further trigger-related scaling activities can start.</li>
|
992 |
+
* <li><code>MinAdjustmentStep</code> - <code>integer</code> - Optional - Used with <code>AdjustmentType</code> with the value <code>PercentChangeInCapacity</code>, the scaling policy changes the <code>DesiredCapacity</code> of the Auto Scaling group by at least the number of instances specified in the value. You will get a <code>ValidationError</code> if you use <code>MinAdjustmentStep</code> on a policy with an <code>AdjustmentType</code> other than <code>PercentChangeInCapacity</code>.</li>
|
993 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
994 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
995 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
996 |
+
*/
|
997 |
+
public function put_scaling_policy($auto_scaling_group_name, $policy_name, $scaling_adjustment, $adjustment_type, $opt = null)
|
998 |
+
{
|
999 |
+
if (!$opt) $opt = array();
|
1000 |
+
$opt['AutoScalingGroupName'] = $auto_scaling_group_name;
|
1001 |
+
$opt['PolicyName'] = $policy_name;
|
1002 |
+
$opt['ScalingAdjustment'] = $scaling_adjustment;
|
1003 |
+
$opt['AdjustmentType'] = $adjustment_type;
|
1004 |
+
|
1005 |
+
return $this->authenticate('PutScalingPolicy', $opt);
|
1006 |
+
}
|
1007 |
+
|
1008 |
+
/**
|
1009 |
+
* Creates a scheduled scaling action for an Auto Scaling group. If you leave a parameter
|
1010 |
+
* unspecified, the corresponding value remains unchanged in the affected Auto Scaling group.
|
1011 |
+
*
|
1012 |
+
* @param string $auto_scaling_group_name (Required) The name or ARN of the Auto Scaling group. [Constraints: The value must be between 1 and 1600 characters, and must match the following regular expression pattern: <code>[\u0020-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF\r\n\t]*</code>]
|
1013 |
+
* @param string $scheduled_action_name (Required) The name of this scaling action. [Constraints: The value must be between 1 and 255 characters, and must match the following regular expression pattern: <code>[\u0020-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF\r\n\t]*</code>]
|
1014 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
1015 |
+
* <li><code>Time</code> - <code>string</code> - Optional - <code>Time</code> is deprecated. The time for this action to start. <code>Time</code> is an alias for <code>StartTime</code> and can be specified instead of <code>StartTime</code>, or vice versa. If both <code>Time</code> and <code>StartTime</code> are specified, their values should be identical. Otherwise, <code>PutScheduledUpdateGroupAction</code> will return an error. May be passed as a number of seconds since UNIX Epoch, or any string compatible with <php:strtotime()>.</li>
|
1016 |
+
* <li><code>StartTime</code> - <code>string</code> - Optional - The time for this action to start, as in <code>--start-time 2010-06-01T00:00:00Z</code>. When <code>StartTime</code> and <code>EndTime</code> are specified with <code>Recurrence</code>, they form the boundaries of when the recurring action will start and stop. May be passed as a number of seconds since UNIX Epoch, or any string compatible with <php:strtotime()>.</li>
|
1017 |
+
* <li><code>EndTime</code> - <code>string</code> - Optional - The time for this action to end. May be passed as a number of seconds since UNIX Epoch, or any string compatible with <php:strtotime()>.</li>
|
1018 |
+
* <li><code>Recurrence</code> - <code>string</code> - Optional - The time when recurring future actions will start. Start time is specified by the user following the Unix cron syntax format. For information about cron syntax, go to <a href="http://en.wikipedia.org/wiki/Cron">Wikipedia, The Free Encyclopedia</a>. When <code>StartTime</code> and <code>EndTime</code> are specified with <code>Recurrence</code>, they form the boundaries of when the recurring action will start and stop. [Constraints: The value must be between 1 and 255 characters, and must match the following regular expression pattern: <code>[\u0020-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF\r\n\t]*</code>]</li>
|
1019 |
+
* <li><code>MinSize</code> - <code>integer</code> - Optional - The minimum size for the new Auto Scaling group.</li>
|
1020 |
+
* <li><code>MaxSize</code> - <code>integer</code> - Optional - The maximum size for the Auto Scaling group.</li>
|
1021 |
+
* <li><code>DesiredCapacity</code> - <code>integer</code> - Optional - The number of Amazon EC2 instances that should be running in the group.</li>
|
1022 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
1023 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
1024 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
1025 |
+
*/
|
1026 |
+
public function put_scheduled_update_group_action($auto_scaling_group_name, $scheduled_action_name, $opt = null)
|
1027 |
+
{
|
1028 |
+
if (!$opt) $opt = array();
|
1029 |
+
$opt['AutoScalingGroupName'] = $auto_scaling_group_name;
|
1030 |
+
$opt['ScheduledActionName'] = $scheduled_action_name;
|
1031 |
+
|
1032 |
+
// Optional DateTime
|
1033 |
+
if (isset($opt['Time']))
|
1034 |
+
{
|
1035 |
+
$opt['Time'] = $this->util->convert_date_to_iso8601($opt['Time']);
|
1036 |
+
}
|
1037 |
+
|
1038 |
+
// Optional DateTime
|
1039 |
+
if (isset($opt['StartTime']))
|
1040 |
+
{
|
1041 |
+
$opt['StartTime'] = $this->util->convert_date_to_iso8601($opt['StartTime']);
|
1042 |
+
}
|
1043 |
+
|
1044 |
+
// Optional DateTime
|
1045 |
+
if (isset($opt['EndTime']))
|
1046 |
+
{
|
1047 |
+
$opt['EndTime'] = $this->util->convert_date_to_iso8601($opt['EndTime']);
|
1048 |
+
}
|
1049 |
+
|
1050 |
+
return $this->authenticate('PutScheduledUpdateGroupAction', $opt);
|
1051 |
+
}
|
1052 |
+
|
1053 |
+
/**
|
1054 |
+
* Resumes Auto Scaling processes for an Auto Scaling group. For more information, see
|
1055 |
+
* <code>SuspendProcesses</code> and <code>ProcessType</code>.
|
1056 |
+
*
|
1057 |
+
* @param string $auto_scaling_group_name (Required) The name or Amazon Resource Name (ARN) of the Auto Scaling group. [Constraints: The value must be between 1 and 1600 characters, and must match the following regular expression pattern: <code>[\u0020-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF\r\n\t]*</code>]
|
1058 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
1059 |
+
* <li><code>ScalingProcesses</code> - <code>string|array</code> - Optional - The processes that you want to suspend or resume, which can include one or more of the following:<ul><li>Launch</li><li>Terminate</li><li>HealthCheck</li><li>ReplaceUnhealthy</li><li>AZRebalance</li><li>AlarmNotification</li><li>ScheduledActions</li><li>AddToLoadBalancer</li></ul>To suspend all process types, omit this parameter. Pass a string for a single value, or an indexed array for multiple values.</li>
|
1060 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
1061 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
1062 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
1063 |
+
*/
|
1064 |
+
public function resume_processes($auto_scaling_group_name, $opt = null)
|
1065 |
+
{
|
1066 |
+
if (!$opt) $opt = array();
|
1067 |
+
$opt['AutoScalingGroupName'] = $auto_scaling_group_name;
|
1068 |
+
|
1069 |
+
// Optional list (non-map)
|
1070 |
+
if (isset($opt['ScalingProcesses']))
|
1071 |
+
{
|
1072 |
+
$opt = array_merge($opt, CFComplexType::map(array(
|
1073 |
+
'ScalingProcesses' => (is_array($opt['ScalingProcesses']) ? $opt['ScalingProcesses'] : array($opt['ScalingProcesses']))
|
1074 |
+
), 'member'));
|
1075 |
+
unset($opt['ScalingProcesses']);
|
1076 |
+
}
|
1077 |
+
|
1078 |
+
return $this->authenticate('ResumeProcesses', $opt);
|
1079 |
+
}
|
1080 |
+
|
1081 |
+
/**
|
1082 |
+
* Adjusts the desired size of the <code>AutoScalingGroup</code> by initiating scaling activities.
|
1083 |
+
* When reducing the size of the group, it is not possible to define which Amazon EC2 instances
|
1084 |
+
* will be terminated. This applies to any Auto Scaling decisions that might result in terminating
|
1085 |
+
* instances.
|
1086 |
+
*
|
1087 |
+
* There are two common use cases for <code>SetDesiredCapacity</code>: one for users of the Auto
|
1088 |
+
* Scaling triggering system, and another for developers who write their own triggering systems.
|
1089 |
+
* Both use cases relate to the concept of cooldown.
|
1090 |
+
*
|
1091 |
+
* In the first case, if you use the Auto Scaling triggering system,
|
1092 |
+
* <code>SetDesiredCapacity</code> changes the size of your Auto Scaling group without regard to
|
1093 |
+
* the cooldown period. This could be useful, for example, if Auto Scaling did something
|
1094 |
+
* unexpected for some reason. If your cooldown period is 10 minutes, Auto Scaling would normally
|
1095 |
+
* reject requests to change the size of the group for that entire 10-minute period. The
|
1096 |
+
* <code>SetDesiredCapacity</code> command allows you to circumvent this restriction and change
|
1097 |
+
* the size of the group before the end of the cooldown period.
|
1098 |
+
*
|
1099 |
+
* In the second case, if you write your own triggering system, you can use
|
1100 |
+
* <code>SetDesiredCapacity</code> to control the size of your Auto Scaling group. If you want the
|
1101 |
+
* same cooldown functionality that Auto Scaling offers, you can configure
|
1102 |
+
* <code>SetDesiredCapacity</code> to honor cooldown by setting the <code>HonorCooldown</code>
|
1103 |
+
* parameter to <code>true</code>.
|
1104 |
+
*
|
1105 |
+
* @param string $auto_scaling_group_name (Required) The name of the Auto Scaling group. [Constraints: The value must be between 1 and 1600 characters, and must match the following regular expression pattern: <code>[\u0020-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF\r\n\t]*</code>]
|
1106 |
+
* @param integer $desired_capacity (Required) The new capacity setting for the Auto Scaling group.
|
1107 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
1108 |
+
* <li><code>HonorCooldown</code> - <code>boolean</code> - Optional - By default, <code>SetDesiredCapacity</code> overrides any cooldown period. Set to <code>True</code> if you want Auto Scaling to reject this request when the Auto Scaling group is in cooldown.</li>
|
1109 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
1110 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
1111 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
1112 |
+
*/
|
1113 |
+
public function set_desired_capacity($auto_scaling_group_name, $desired_capacity, $opt = null)
|
1114 |
+
{
|
1115 |
+
if (!$opt) $opt = array();
|
1116 |
+
$opt['AutoScalingGroupName'] = $auto_scaling_group_name;
|
1117 |
+
$opt['DesiredCapacity'] = $desired_capacity;
|
1118 |
+
|
1119 |
+
return $this->authenticate('SetDesiredCapacity', $opt);
|
1120 |
+
}
|
1121 |
+
|
1122 |
+
/**
|
1123 |
+
* Sets the health status of an instance.
|
1124 |
+
*
|
1125 |
+
* @param string $instance_id (Required) The identifier of the Amazon EC2 instance. [Constraints: The value must be between 1 and 16 characters, and must match the following regular expression pattern: <code>[\u0020-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF\r\n\t]*</code>]
|
1126 |
+
* @param string $health_status (Required) The health status of the instance. "Healthy" means that the instance is healthy and should remain in service. "Unhealthy" means that the instance is unhealthy. Auto Scaling should terminate and replace it. [Constraints: The value must be between 1 and 32 characters, and must match the following regular expression pattern: <code>[\u0020-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF\r\n\t]*</code>]
|
1127 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
1128 |
+
* <li><code>ShouldRespectGracePeriod</code> - <code>boolean</code> - Optional - If True, this call should respect the grace period associated with the group.</li>
|
1129 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
1130 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
1131 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
1132 |
+
*/
|
1133 |
+
public function set_instance_health($instance_id, $health_status, $opt = null)
|
1134 |
+
{
|
1135 |
+
if (!$opt) $opt = array();
|
1136 |
+
$opt['InstanceId'] = $instance_id;
|
1137 |
+
$opt['HealthStatus'] = $health_status;
|
1138 |
+
|
1139 |
+
return $this->authenticate('SetInstanceHealth', $opt);
|
1140 |
+
}
|
1141 |
+
|
1142 |
+
/**
|
1143 |
+
* Suspends Auto Scaling processes for an Auto Scaling group. To suspend specific process types,
|
1144 |
+
* specify them by name with the <code>ScalingProcesses.member.N</code> parameter. To suspend all
|
1145 |
+
* process types, omit the <code>ScalingProcesses.member.N</code> parameter.
|
1146 |
+
*
|
1147 |
+
* <p class="important"></p>
|
1148 |
+
* Suspending either of the two primary process types, <code>Launch</code> or
|
1149 |
+
* <code>Terminate</code>, can prevent other process types from functioning properly. For more
|
1150 |
+
* information about processes and their dependencies, see <code>ProcessType</code>.
|
1151 |
+
*
|
1152 |
+
* To resume processes that have been suspended, use <code>ResumeProcesses</code>.
|
1153 |
+
*
|
1154 |
+
* @param string $auto_scaling_group_name (Required) The name or Amazon Resource Name (ARN) of the Auto Scaling group. [Constraints: The value must be between 1 and 1600 characters, and must match the following regular expression pattern: <code>[\u0020-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF\r\n\t]*</code>]
|
1155 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
1156 |
+
* <li><code>ScalingProcesses</code> - <code>string|array</code> - Optional - The processes that you want to suspend or resume, which can include one or more of the following:<ul><li>Launch</li><li>Terminate</li><li>HealthCheck</li><li>ReplaceUnhealthy</li><li>AZRebalance</li><li>AlarmNotification</li><li>ScheduledActions</li><li>AddToLoadBalancer</li></ul>To suspend all process types, omit this parameter. Pass a string for a single value, or an indexed array for multiple values.</li>
|
1157 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
1158 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
1159 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
1160 |
+
*/
|
1161 |
+
public function suspend_processes($auto_scaling_group_name, $opt = null)
|
1162 |
+
{
|
1163 |
+
if (!$opt) $opt = array();
|
1164 |
+
$opt['AutoScalingGroupName'] = $auto_scaling_group_name;
|
1165 |
+
|
1166 |
+
// Optional list (non-map)
|
1167 |
+
if (isset($opt['ScalingProcesses']))
|
1168 |
+
{
|
1169 |
+
$opt = array_merge($opt, CFComplexType::map(array(
|
1170 |
+
'ScalingProcesses' => (is_array($opt['ScalingProcesses']) ? $opt['ScalingProcesses'] : array($opt['ScalingProcesses']))
|
1171 |
+
), 'member'));
|
1172 |
+
unset($opt['ScalingProcesses']);
|
1173 |
+
}
|
1174 |
+
|
1175 |
+
return $this->authenticate('SuspendProcesses', $opt);
|
1176 |
+
}
|
1177 |
+
|
1178 |
+
/**
|
1179 |
+
* Terminates the specified instance. Optionally, the desired group size can be adjusted.
|
1180 |
+
*
|
1181 |
+
* <p class="note">
|
1182 |
+
* This call simply registers a termination request. The termination of the instance cannot happen
|
1183 |
+
* immediately.
|
1184 |
+
* </p>
|
1185 |
+
*
|
1186 |
+
* @param string $instance_id (Required) The ID of the Amazon EC2 instance to be terminated. [Constraints: The value must be between 1 and 16 characters, and must match the following regular expression pattern: <code>[\u0020-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF\r\n\t]*</code>]
|
1187 |
+
* @param boolean $should_decrement_desired_capacity (Required) Specifies whether (<em>true</em>) or not (<em>false</em>) terminating this instance should also decrement the size of the <code>AutoScalingGroup</code>.
|
1188 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
1189 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
1190 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
1191 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
1192 |
+
*/
|
1193 |
+
public function terminate_instance_in_auto_scaling_group($instance_id, $should_decrement_desired_capacity, $opt = null)
|
1194 |
+
{
|
1195 |
+
if (!$opt) $opt = array();
|
1196 |
+
$opt['InstanceId'] = $instance_id;
|
1197 |
+
$opt['ShouldDecrementDesiredCapacity'] = $should_decrement_desired_capacity;
|
1198 |
+
|
1199 |
+
return $this->authenticate('TerminateInstanceInAutoScalingGroup', $opt);
|
1200 |
+
}
|
1201 |
+
|
1202 |
+
/**
|
1203 |
+
* Updates the configuration for the specified <code>AutoScalingGroup</code>.
|
1204 |
+
*
|
1205 |
+
* <p class="note"></p>
|
1206 |
+
* To update an Auto Scaling group with a launch configuration that has the
|
1207 |
+
* <code>InstanceMonitoring</code> flag set to <code>False</code>, you must first ensure that
|
1208 |
+
* collection of group metrics is disabled. Otherwise, calls to
|
1209 |
+
* <code>UpdateAutoScalingGroup</code> will fail. If you have previously enabled group metrics
|
1210 |
+
* collection, you can disable collection of all group metrics by calling
|
1211 |
+
* <code>DisableMetricsCollection</code>.
|
1212 |
+
*
|
1213 |
+
* The new settings are registered upon the completion of this call. Any launch configuration
|
1214 |
+
* settings take effect on any triggers after this call returns. Triggers that are currently in
|
1215 |
+
* progress aren't affected.
|
1216 |
+
*
|
1217 |
+
* <p class="note"></p>
|
1218 |
+
* <ul>
|
1219 |
+
* <li>If a new value is specified for <em>MinSize</em> without specifying the value for
|
1220 |
+
* <em>DesiredCapacity</em>, and if the new <em>MinSize</em> is larger than the current
|
1221 |
+
* size of the Auto Scaling Group, there will be an implicit call to
|
1222 |
+
* <code>SetDesiredCapacity</code> to set the group to the new <em>MinSize</em>.</li>
|
1223 |
+
* <li>If a new value is specified for <em>MaxSize</em> without specifying the value for
|
1224 |
+
* <em>DesiredCapacity</em>, and the new <em>MaxSize</em> is smaller than the current size
|
1225 |
+
* of the Auto Scaling Group, there will be an implicit call to
|
1226 |
+
* <code>SetDesiredCapacity</code> to set the group to the new <em>MaxSize</em>.</li>
|
1227 |
+
* <li>All other optional parameters are left unchanged if not passed in the request.</li>
|
1228 |
+
* </ul>
|
1229 |
+
*
|
1230 |
+
* @param string $auto_scaling_group_name (Required) The name of the Auto Scaling group. [Constraints: The value must be between 1 and 1600 characters, and must match the following regular expression pattern: <code>[\u0020-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF\r\n\t]*</code>]
|
1231 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
1232 |
+
* <li><code>LaunchConfigurationName</code> - <code>string</code> - Optional - The name of the launch configuration. [Constraints: The value must be between 1 and 1600 characters, and must match the following regular expression pattern: <code>[\u0020-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF\r\n\t]*</code>]</li>
|
1233 |
+
* <li><code>MinSize</code> - <code>integer</code> - Optional - The minimum size of the Auto Scaling group.</li>
|
1234 |
+
* <li><code>MaxSize</code> - <code>integer</code> - Optional - The maximum size of the Auto Scaling group.</li>
|
1235 |
+
* <li><code>DesiredCapacity</code> - <code>integer</code> - Optional - The desired capacity for the Auto Scaling group.</li>
|
1236 |
+
* <li><code>DefaultCooldown</code> - <code>integer</code> - Optional - The amount of time, in seconds, after a scaling activity completes before any further trigger-related scaling activities can start.</li>
|
1237 |
+
* <li><code>AvailabilityZones</code> - <code>string|array</code> - Optional - Availability Zones for the group. Pass a string for a single value, or an indexed array for multiple values.</li>
|
1238 |
+
* <li><code>HealthCheckType</code> - <code>string</code> - Optional - The service of interest for the health status check, either "EC2" for Amazon EC2 or "ELB" for Elastic Load Balancing. [Constraints: The value must be between 1 and 32 characters, and must match the following regular expression pattern: <code>[\u0020-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF\r\n\t]*</code>]</li>
|
1239 |
+
* <li><code>HealthCheckGracePeriod</code> - <code>integer</code> - Optional - The length of time that Auto Scaling waits before checking an instance's health status. The grace period begins when an instance comes into service.</li>
|
1240 |
+
* <li><code>PlacementGroup</code> - <code>string</code> - Optional - The name of the cluster placement group, if applicable. For more information, go to <a href="http://docs.amazonwebservices.com/AWSEC2/latest/UserGuide/using_cluster_computing.html">Using Cluster Instances</a> in the Amazon EC2 User Guide. [Constraints: The value must be between 1 and 255 characters, and must match the following regular expression pattern: <code>[\u0020-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF\r\n\t]*</code>]</li>
|
1241 |
+
* <li><code>VPCZoneIdentifier</code> - <code>string</code> - Optional - The subnet identifier for the Amazon VPC connection, if applicable. You can specify several subnets in a comma-separated list. When you specify <code>VPCZoneIdentifier</code> with <code>AvailabilityZones</code>, ensure that the subnets' Availability Zones match the values you specify for <code>AvailabilityZones</code>. [Constraints: The value must be between 1 and 255 characters, and must match the following regular expression pattern: <code>[\u0020-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF\r\n\t]*</code>]</li>
|
1242 |
+
* <li><code>TerminationPolicies</code> - <code>string|array</code> - Optional - A standalone termination policy or a list of termination policies used to select the instance to terminate. The policies are executed in the order that they are listed. For more information on creating a termination policy for your Auto Scaling group, go to <a href="http://docs.amazonwebservices.com/AutoScaling/latest/DeveloperGuide/us-termination-policy.html">Instance Termination Policy for Your Auto Scaling Group</a> in the the <em>Auto Scaling Developer Guide</em>. Pass a string for a single value, or an indexed array for multiple values.</li>
|
1243 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
1244 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
1245 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
1246 |
+
*/
|
1247 |
+
public function update_auto_scaling_group($auto_scaling_group_name, $opt = null)
|
1248 |
+
{
|
1249 |
+
if (!$opt) $opt = array();
|
1250 |
+
$opt['AutoScalingGroupName'] = $auto_scaling_group_name;
|
1251 |
+
|
1252 |
+
// Optional list (non-map)
|
1253 |
+
if (isset($opt['AvailabilityZones']))
|
1254 |
+
{
|
1255 |
+
$opt = array_merge($opt, CFComplexType::map(array(
|
1256 |
+
'AvailabilityZones' => (is_array($opt['AvailabilityZones']) ? $opt['AvailabilityZones'] : array($opt['AvailabilityZones']))
|
1257 |
+
), 'member'));
|
1258 |
+
unset($opt['AvailabilityZones']);
|
1259 |
+
}
|
1260 |
+
|
1261 |
+
// Optional list (non-map)
|
1262 |
+
if (isset($opt['TerminationPolicies']))
|
1263 |
+
{
|
1264 |
+
$opt = array_merge($opt, CFComplexType::map(array(
|
1265 |
+
'TerminationPolicies' => (is_array($opt['TerminationPolicies']) ? $opt['TerminationPolicies'] : array($opt['TerminationPolicies']))
|
1266 |
+
), 'member'));
|
1267 |
+
unset($opt['TerminationPolicies']);
|
1268 |
+
}
|
1269 |
+
|
1270 |
+
return $this->authenticate('UpdateAutoScalingGroup', $opt);
|
1271 |
+
}
|
1272 |
+
}
|
1273 |
+
|
1274 |
+
|
1275 |
+
/*%******************************************************************************************%*/
|
1276 |
+
// EXCEPTIONS
|
1277 |
+
|
1278 |
+
class AS_Exception extends Exception {}
|
sdk/Aws_v1/services/cloudformation.class.php
ADDED
@@ -0,0 +1,570 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* Copyright 2010-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
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 |
+
* A copy of the License is located at
|
8 |
+
*
|
9 |
+
* http://aws.amazon.com/apache2.0
|
10 |
+
*
|
11 |
+
* or in the "license" file accompanying this file. This file is distributed
|
12 |
+
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
|
13 |
+
* express or implied. See the License for the specific language governing
|
14 |
+
* permissions and limitations under the License.
|
15 |
+
*/
|
16 |
+
|
17 |
+
/**
|
18 |
+
* AWS CloudFormation enables you to create and manage AWS infrastructure deployments predictably
|
19 |
+
* and repeatedly. AWS CloudFormation helps you leverage AWS products such as Amazon EC2, EBS,
|
20 |
+
* Amazon SNS, ELB, and Auto Scaling to build highly-reliable, highly scalable, cost effective
|
21 |
+
* applications without worrying about creating and configuring the underlying the AWS
|
22 |
+
* infrastructure.
|
23 |
+
*
|
24 |
+
* With AWS CloudFormation, you declare all of your resources and dependencies in a template file.
|
25 |
+
* The template defines a collection of resources as a single unit called a stack. AWS
|
26 |
+
* CloudFormation creates and deletes all member resources of the stack together and manages all
|
27 |
+
* dependencies between the resources for you.
|
28 |
+
*
|
29 |
+
* For more information about this product, go to the <a href=
|
30 |
+
* "http://aws.amazon.com/cloudformation/">CloudFormation Product Page</a>.
|
31 |
+
*
|
32 |
+
* Amazon CloudFormation makes use of other AWS products. If you need additional technical
|
33 |
+
* information about a specific AWS product, you can find the product's technical documentation at
|
34 |
+
* <a href="http://aws.amazon.com/documentation/">http://aws.amazon.com/documentation/</a>.
|
35 |
+
*
|
36 |
+
* @version 2013.01.14
|
37 |
+
* @license See the included NOTICE.md file for complete information.
|
38 |
+
* @copyright See the included NOTICE.md file for complete information.
|
39 |
+
* @link http://aws.amazon.com/cloudformation/ AWS CloudFormation
|
40 |
+
* @link http://aws.amazon.com/cloudformation/documentation/ AWS CloudFormation documentation
|
41 |
+
*/
|
42 |
+
class AmazonCloudFormation extends CFRuntime
|
43 |
+
{
|
44 |
+
/*%******************************************************************************************%*/
|
45 |
+
// CLASS CONSTANTS
|
46 |
+
|
47 |
+
/**
|
48 |
+
* Specify the queue URL for the United States East (Northern Virginia) Region.
|
49 |
+
*/
|
50 |
+
const REGION_US_E1 = 'cloudformation.us-east-1.amazonaws.com';
|
51 |
+
|
52 |
+
/**
|
53 |
+
* Specify the queue URL for the United States East (Northern Virginia) Region.
|
54 |
+
*/
|
55 |
+
const REGION_VIRGINIA = self::REGION_US_E1;
|
56 |
+
|
57 |
+
/**
|
58 |
+
* Specify the queue URL for the United States West (Northern California) Region.
|
59 |
+
*/
|
60 |
+
const REGION_US_W1 = 'cloudformation.us-west-1.amazonaws.com';
|
61 |
+
|
62 |
+
/**
|
63 |
+
* Specify the queue URL for the United States West (Northern California) Region.
|
64 |
+
*/
|
65 |
+
const REGION_CALIFORNIA = self::REGION_US_W1;
|
66 |
+
|
67 |
+
/**
|
68 |
+
* Specify the queue URL for the United States West (Oregon) Region.
|
69 |
+
*/
|
70 |
+
const REGION_US_W2 = 'cloudformation.us-west-2.amazonaws.com';
|
71 |
+
|
72 |
+
/**
|
73 |
+
* Specify the queue URL for the United States West (Oregon) Region.
|
74 |
+
*/
|
75 |
+
const REGION_OREGON = self::REGION_US_W2;
|
76 |
+
|
77 |
+
/**
|
78 |
+
* Specify the queue URL for the Europe West (Ireland) Region.
|
79 |
+
*/
|
80 |
+
const REGION_EU_W1 = 'cloudformation.eu-west-1.amazonaws.com';
|
81 |
+
|
82 |
+
/**
|
83 |
+
* Specify the queue URL for the Europe West (Ireland) Region.
|
84 |
+
*/
|
85 |
+
const REGION_IRELAND = self::REGION_EU_W1;
|
86 |
+
|
87 |
+
/**
|
88 |
+
* Specify the queue URL for the Asia Pacific Southeast (Singapore) Region.
|
89 |
+
*/
|
90 |
+
const REGION_APAC_SE1 = 'cloudformation.ap-southeast-1.amazonaws.com';
|
91 |
+
|
92 |
+
/**
|
93 |
+
* Specify the queue URL for the Asia Pacific Southeast (Singapore) Region.
|
94 |
+
*/
|
95 |
+
const REGION_SINGAPORE = self::REGION_APAC_SE1;
|
96 |
+
|
97 |
+
/**
|
98 |
+
* Specify the queue URL for the Asia Pacific Southeast (Singapore) Region.
|
99 |
+
*/
|
100 |
+
const REGION_APAC_SE2 = 'cloudformation.ap-southeast-2.amazonaws.com';
|
101 |
+
|
102 |
+
/**
|
103 |
+
* Specify the queue URL for the Asia Pacific Southeast (Singapore) Region.
|
104 |
+
*/
|
105 |
+
const REGION_SYDNEY = self::REGION_APAC_SE2;
|
106 |
+
|
107 |
+
/**
|
108 |
+
* Specify the queue URL for the Asia Pacific Northeast (Tokyo) Region.
|
109 |
+
*/
|
110 |
+
const REGION_APAC_NE1 = 'cloudformation.ap-northeast-1.amazonaws.com';
|
111 |
+
|
112 |
+
/**
|
113 |
+
* Specify the queue URL for the Asia Pacific Northeast (Tokyo) Region.
|
114 |
+
*/
|
115 |
+
const REGION_TOKYO = self::REGION_APAC_NE1;
|
116 |
+
|
117 |
+
/**
|
118 |
+
* Specify the queue URL for the South America (Sao Paulo) Region.
|
119 |
+
*/
|
120 |
+
const REGION_SA_E1 = 'cloudformation.sa-east-1.amazonaws.com';
|
121 |
+
|
122 |
+
/**
|
123 |
+
* Specify the queue URL for the South America (Sao Paulo) Region.
|
124 |
+
*/
|
125 |
+
const REGION_SAO_PAULO = self::REGION_SA_E1;
|
126 |
+
|
127 |
+
/**
|
128 |
+
* Default service endpoint.
|
129 |
+
*/
|
130 |
+
const DEFAULT_URL = self::REGION_US_E1;
|
131 |
+
|
132 |
+
|
133 |
+
/*%******************************************************************************************%*/
|
134 |
+
// CONSTRUCTOR
|
135 |
+
|
136 |
+
/**
|
137 |
+
* Constructs a new instance of <AmazonCloudFormation>.
|
138 |
+
*
|
139 |
+
* @param array $options (Optional) An associative array of parameters that can have the following keys: <ul>
|
140 |
+
* <li><code>certificate_authority</code> - <code>boolean</code> - Optional - Determines which Cerificate Authority file to use. A value of boolean <code>false</code> will use the Certificate Authority file available on the system. A value of boolean <code>true</code> will use the Certificate Authority provided by the SDK. Passing a file system path to a Certificate Authority file (chmodded to <code>0755</code>) will use that. Leave this set to <code>false</code> if you're not sure.</li>
|
141 |
+
* <li><code>credentials</code> - <code>string</code> - Optional - The name of the credential set to use for authentication.</li>
|
142 |
+
* <li><code>default_cache_config</code> - <code>string</code> - Optional - This option allows a preferred storage type to be configured for long-term caching. This can be changed later using the <set_cache_config()> method. Valid values are: <code>apc</code>, <code>xcache</code>, or a file system path such as <code>./cache</code> or <code>/tmp/cache/</code>.</li>
|
143 |
+
* <li><code>key</code> - <code>string</code> - Optional - Your AWS key, or a session key. If blank, the default credential set will be used.</li>
|
144 |
+
* <li><code>secret</code> - <code>string</code> - Optional - Your AWS secret key, or a session secret key. If blank, the default credential set will be used.</li>
|
145 |
+
* <li><code>token</code> - <code>string</code> - Optional - An AWS session token.</li></ul>
|
146 |
+
* @return void
|
147 |
+
*/
|
148 |
+
public function __construct(array $options = array())
|
149 |
+
{
|
150 |
+
$this->api_version = '2010-05-15';
|
151 |
+
$this->hostname = self::DEFAULT_URL;
|
152 |
+
$this->auth_class = 'AuthV4Query';
|
153 |
+
|
154 |
+
return parent::__construct($options);
|
155 |
+
}
|
156 |
+
|
157 |
+
|
158 |
+
/*%******************************************************************************************%*/
|
159 |
+
// SETTERS
|
160 |
+
|
161 |
+
/**
|
162 |
+
* This allows you to explicitly sets the region for the service to use.
|
163 |
+
*
|
164 |
+
* @param string $region (Required) The region to explicitly set. Available options are <REGION_US_E1>, <REGION_US_W1>, <REGION_US_W2>, <REGION_EU_W1>, <REGION_APAC_SE1>, <REGION_APAC_SE2>, <REGION_APAC_NE1>, <REGION_SA_E1>.
|
165 |
+
* @return $this A reference to the current instance.
|
166 |
+
*/
|
167 |
+
public function set_region($region)
|
168 |
+
{
|
169 |
+
// @codeCoverageIgnoreStart
|
170 |
+
$this->set_hostname($region);
|
171 |
+
return $this;
|
172 |
+
// @codeCoverageIgnoreEnd
|
173 |
+
}
|
174 |
+
|
175 |
+
|
176 |
+
/*%******************************************************************************************%*/
|
177 |
+
// SERVICE METHODS
|
178 |
+
|
179 |
+
/**
|
180 |
+
* Creates a stack as specified in the template. After the call completes successfully, the stack
|
181 |
+
* creation starts. You can check the status of the stack via the <code>DescribeStacks</code> API.
|
182 |
+
*
|
183 |
+
* <p class="note">
|
184 |
+
* Currently, the limit for stacks is 20 stacks per account per region.
|
185 |
+
* </p>
|
186 |
+
*
|
187 |
+
* @param string $stack_name (Required) The name associated with the stack. The name must be unique within your AWS account. <p class="note">Must contain only alphanumeric characters (case sensitive) and start with an alpha character. Maximum length of the name is 255 characters.</p>
|
188 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
189 |
+
* <li><code>TemplateBody</code> - <code>string</code> - Optional - Structure containing the template body. (For more information, go to the <a href="http://docs.amazonwebservices.com/AWSCloudFormation/latest/UserGuide">AWS CloudFormation User Guide</a>.) Conditional: You must pass <code>TemplateBody</code> or <code>TemplateURL</code>. If both are passed, only <code>TemplateBody</code> is used.</li>
|
190 |
+
* <li><code>TemplateURL</code> - <code>string</code> - Optional - Location of file containing the template body. The URL must point to a template located in an S3 bucket in the same region as the stack. For more information, go to the <a href="http://docs.amazonwebservices.com/AWSCloudFormation/latest/UserGuide">AWS CloudFormation User Guide</a>. Conditional: You must pass <code>TemplateURL</code> or <code>TemplateBody</code>. If both are passed, only <code>TemplateBody</code> is used.</li>
|
191 |
+
* <li><code>Parameters</code> - <code>array</code> - Optional - A list of <code>Parameter</code> structures that specify input parameters for the stack. <ul>
|
192 |
+
* <li><code>x</code> - <code>array</code> - Optional - This represents a simple array index. <ul>
|
193 |
+
* <li><code>ParameterKey</code> - <code>string</code> - Optional - The key associated with the parameter.</li>
|
194 |
+
* <li><code>ParameterValue</code> - <code>string</code> - Optional - The value associated with the parameter.</li>
|
195 |
+
* </ul></li>
|
196 |
+
* </ul></li>
|
197 |
+
* <li><code>DisableRollback</code> - <code>boolean</code> - Optional - Set to <code>true</code> to disable rollback of the stack if stack creation failed. You can specify either <code>DisableRollback</code> or <code>OnFailure</code>, but not both. Default: <code>false</code></li>
|
198 |
+
* <li><code>TimeoutInMinutes</code> - <code>integer</code> - Optional - The amount of time that can pass before the stack status becomes CREATE_FAILED; if <code>DisableRollback</code> is not set or is set to <code>false</code>, the stack will be rolled back.</li>
|
199 |
+
* <li><code>NotificationARNs</code> - <code>string|array</code> - Optional - The Simple Notification Service (SNS) topic ARNs to publish stack related events. You can find your SNS topic ARNs using the <a href="http://console.aws.amazon.com/sns">SNS console</a> or your Command Line Interface (CLI). Pass a string for a single value, or an indexed array for multiple values.</li>
|
200 |
+
* <li><code>Capabilities</code> - <code>string|array</code> - Optional - The list of capabilities that you want to allow in the stack. If your template contains IAM resources, you must specify the CAPABILITY_IAM value for this parameter; otherwise, this action returns an InsufficientCapabilities error. IAM resources are the following: <a href="http://docs.amazonwebservices.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-accesskey.html">AWS::IAM::AccessKey</a>, <a href="http://docs.amazonwebservices.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-group.html">AWS::IAM::Group</a>, <a href="http://docs.amazonwebservices.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-policy.html">AWS::IAM::Policy</a>, <a href="http://docs.amazonwebservices.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-user.html">AWS::IAM::User</a>, and <a href="http://docs.amazonwebservices.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-addusertogroup.html">AWS::IAM::UserToGroupAddition</a>. Pass a string for a single value, or an indexed array for multiple values.</li>
|
201 |
+
* <li><code>OnFailure</code> - <code>string</code> - Optional - Determines what action will be taken if stack creation fails. This must be one of: DO_NOTHING, ROLLBACK, or DELETE. You can specify either <code>OnFailure</code> or <code>DisableRollback</code>, but not both. Default: <code>ROLLBACK</code> [Allowed values: <code>DO_NOTHING</code>, <code>ROLLBACK</code>, <code>DELETE</code>]</li>
|
202 |
+
* <li><code>Tags</code> - <code>array</code> - Optional - A set of user-defined <code>Tags</code> to associate with this stack, represented by key/value pairs. Tags defined for the stack are propogated to EC2 resources that are created as part of the stack. A maximum number of 10 tags can be specified. <ul>
|
203 |
+
* <li><code>x</code> - <code>array</code> - Optional - This represents a simple array index. <ul>
|
204 |
+
* <li><code>Key</code> - <code>string</code> - Optional - <em>Required</em>. A string used to identify this tag. You can specify a maximum of 128 characters for a tag key. Tags owned by Amazon Web Services (AWS) have the reserved prefix: <code>aws:</code>.</li>
|
205 |
+
* <li><code>Value</code> - <code>string</code> - Optional - <em>Required</em>. A string containing the value for this tag. You can specify a maximum of 256 characters for a tag value.</li>
|
206 |
+
* </ul></li>
|
207 |
+
* </ul></li>
|
208 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
209 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
210 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
211 |
+
*/
|
212 |
+
public function create_stack($stack_name, $opt = null)
|
213 |
+
{
|
214 |
+
if (!$opt) $opt = array();
|
215 |
+
$opt['StackName'] = $stack_name;
|
216 |
+
|
217 |
+
// Optional list + map
|
218 |
+
if (isset($opt['Parameters']))
|
219 |
+
{
|
220 |
+
$opt = array_merge($opt, CFComplexType::map(array(
|
221 |
+
'Parameters' => $opt['Parameters']
|
222 |
+
), 'member'));
|
223 |
+
unset($opt['Parameters']);
|
224 |
+
}
|
225 |
+
|
226 |
+
// Optional list (non-map)
|
227 |
+
if (isset($opt['NotificationARNs']))
|
228 |
+
{
|
229 |
+
$opt = array_merge($opt, CFComplexType::map(array(
|
230 |
+
'NotificationARNs' => (is_array($opt['NotificationARNs']) ? $opt['NotificationARNs'] : array($opt['NotificationARNs']))
|
231 |
+
), 'member'));
|
232 |
+
unset($opt['NotificationARNs']);
|
233 |
+
}
|
234 |
+
|
235 |
+
// Optional list (non-map)
|
236 |
+
if (isset($opt['Capabilities']))
|
237 |
+
{
|
238 |
+
$opt = array_merge($opt, CFComplexType::map(array(
|
239 |
+
'Capabilities' => (is_array($opt['Capabilities']) ? $opt['Capabilities'] : array($opt['Capabilities']))
|
240 |
+
), 'member'));
|
241 |
+
unset($opt['Capabilities']);
|
242 |
+
}
|
243 |
+
|
244 |
+
// Optional list + map
|
245 |
+
if (isset($opt['Tags']))
|
246 |
+
{
|
247 |
+
$opt = array_merge($opt, CFComplexType::map(array(
|
248 |
+
'Tags' => $opt['Tags']
|
249 |
+
), 'member'));
|
250 |
+
unset($opt['Tags']);
|
251 |
+
}
|
252 |
+
|
253 |
+
return $this->authenticate('CreateStack', $opt);
|
254 |
+
}
|
255 |
+
|
256 |
+
/**
|
257 |
+
* Deletes a specified stack. Once the call completes successfully, stack deletion starts. Deleted
|
258 |
+
* stacks do not show up in the <code>DescribeStacks</code> API if the deletion has been completed
|
259 |
+
* successfully.
|
260 |
+
*
|
261 |
+
* @param string $stack_name (Required) The name or the unique identifier associated with the stack.
|
262 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
263 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
264 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
265 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
266 |
+
*/
|
267 |
+
public function delete_stack($stack_name, $opt = null)
|
268 |
+
{
|
269 |
+
if (!$opt) $opt = array();
|
270 |
+
$opt['StackName'] = $stack_name;
|
271 |
+
|
272 |
+
return $this->authenticate('DeleteStack', $opt);
|
273 |
+
}
|
274 |
+
|
275 |
+
/**
|
276 |
+
* Returns all the stack related events for the AWS account. If <code>StackName</code> is
|
277 |
+
* specified, returns events related to all the stacks with the given name. If
|
278 |
+
* <code>StackName</code> is not specified, returns all the events for the account. For more
|
279 |
+
* information about a stack's event history, go to the <a href=
|
280 |
+
* "http://docs.amazonwebservices.com/AWSCloudFormation/latest/UserGuide">AWS CloudFormation User
|
281 |
+
* Guide</a>.
|
282 |
+
*
|
283 |
+
* <p class="note">
|
284 |
+
* Events are returned, even if the stack never existed or has been successfully deleted.
|
285 |
+
* </p>
|
286 |
+
*
|
287 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
288 |
+
* <li><code>StackName</code> - <code>string</code> - Optional - The name or the unique identifier associated with the stack. Default: There is no default value.</li>
|
289 |
+
* <li><code>NextToken</code> - <code>string</code> - Optional - String that identifies the start of the next list of events, if there is one. Default: There is no default value.</li>
|
290 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
291 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
292 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
293 |
+
*/
|
294 |
+
public function describe_stack_events($opt = null)
|
295 |
+
{
|
296 |
+
if (!$opt) $opt = array();
|
297 |
+
|
298 |
+
return $this->authenticate('DescribeStackEvents', $opt);
|
299 |
+
}
|
300 |
+
|
301 |
+
/**
|
302 |
+
* Returns a description of the specified resource in the specified stack.
|
303 |
+
*
|
304 |
+
* For deleted stacks, DescribeStackResource returns resource information for up to 90 days after
|
305 |
+
* the stack has been deleted.
|
306 |
+
*
|
307 |
+
* @param string $stack_name (Required) The name or the unique identifier associated with the stack. Default: There is no default value.
|
308 |
+
* @param string $logical_resource_id (Required) The logical name of the resource as specified in the template. Default: There is no default value.
|
309 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
310 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
311 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
312 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
313 |
+
*/
|
314 |
+
public function describe_stack_resource($stack_name, $logical_resource_id, $opt = null)
|
315 |
+
{
|
316 |
+
if (!$opt) $opt = array();
|
317 |
+
$opt['StackName'] = $stack_name;
|
318 |
+
$opt['LogicalResourceId'] = $logical_resource_id;
|
319 |
+
|
320 |
+
return $this->authenticate('DescribeStackResource', $opt);
|
321 |
+
}
|
322 |
+
|
323 |
+
/**
|
324 |
+
* Returns AWS resource descriptions for running and deleted stacks. If <code>StackName</code> is
|
325 |
+
* specified, all the associated resources that are part of the stack are returned. If
|
326 |
+
* <code>PhysicalResourceId</code> is specified, all the associated resources of the stack the
|
327 |
+
* resource belongs to are returned.
|
328 |
+
*
|
329 |
+
* For deleted stacks, DescribeStackResources returns resource information for up to 90 days after
|
330 |
+
* the stack has been deleted.
|
331 |
+
*
|
332 |
+
* If you do not provide either a stack or resource id, information for all stacks and resources
|
333 |
+
* will be returned, up to a limit of 100 records.
|
334 |
+
*
|
335 |
+
* <p class="note"></p>
|
336 |
+
* To list more than 100 resources use <code>ListStackResources</code> instead.
|
337 |
+
*
|
338 |
+
* You can specify either <code>StackName</code> or <code>PhysicalResourceId.</code>, but not
|
339 |
+
* both. In addition, you can specify <code>LogicalResourceId</code> to filter the returned
|
340 |
+
* result. For more information about resources, the <code>LogicalResourceId</code> and
|
341 |
+
* <code>PhysicalResourceId</code>, go to the <a href=
|
342 |
+
* "http://docs.amazonwebservices.com/AWSCloudFormation/latest/UserGuide">AWS CloudFormation User
|
343 |
+
* Guide</a>.
|
344 |
+
*
|
345 |
+
* <p class="note">
|
346 |
+
* A <code>ValidationError</code> is returned if you specify both <code>StackName</code> and
|
347 |
+
* <code>PhysicalResourceId</code> in the same request.
|
348 |
+
* </p>
|
349 |
+
*
|
350 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
351 |
+
* <li><code>StackName</code> - <code>string</code> - Optional - The name or the unique identifier associated with the stack. Default: There is no default value.</li>
|
352 |
+
* <li><code>LogicalResourceId</code> - <code>string</code> - Optional - The logical name of the resource as specified in the template. Default: There is no default value.</li>
|
353 |
+
* <li><code>PhysicalResourceId</code> - <code>string</code> - Optional - The name or unique identifier that corresponds to a physical instance ID of a resource supported by AWS CloudFormation. For example, for an Amazon Elastic Compute Cloud (EC2) instance, <code>PhysicalResourceId</code> corresponds to the <code>InstanceId</code>. You can pass the EC2 <code>InstanceId</code> to <code>DescribeStackResources</code> to find which stack the instance belongs to and what other resources are part of the stack. Default: There is no default value.</li>
|
354 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
355 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
356 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
357 |
+
*/
|
358 |
+
public function describe_stack_resources($opt = null)
|
359 |
+
{
|
360 |
+
if (!$opt) $opt = array();
|
361 |
+
|
362 |
+
return $this->authenticate('DescribeStackResources', $opt);
|
363 |
+
}
|
364 |
+
|
365 |
+
/**
|
366 |
+
* Returns the description for the specified stack; if no stack name was specified, then it
|
367 |
+
* returns the description for all the stacks created.
|
368 |
+
*
|
369 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
370 |
+
* <li><code>StackName</code> - <code>string</code> - Optional - The name or the unique identifier associated with the stack. Default: There is no default value.</li>
|
371 |
+
* <li><code>NextToken</code> - <code>string</code> - Optional - </li>
|
372 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
373 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
374 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
375 |
+
*/
|
376 |
+
public function describe_stacks($opt = null)
|
377 |
+
{
|
378 |
+
if (!$opt) $opt = array();
|
379 |
+
|
380 |
+
return $this->authenticate('DescribeStacks', $opt);
|
381 |
+
}
|
382 |
+
|
383 |
+
/**
|
384 |
+
* Returns the estimated monthly cost of a template. The return value is an AWS Simple Monthly
|
385 |
+
* Calculator URL with a query string that describes the resources required to run the template.
|
386 |
+
*
|
387 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
388 |
+
* <li><code>TemplateBody</code> - <code>string</code> - Optional - Structure containing the template body. (For more information, go to the <a href="http://docs.amazonwebservices.com/AWSCloudFormation/latest/UserGuide">AWS CloudFormation User Guide</a>.) Conditional: You must pass <code>TemplateBody</code> or <code>TemplateURL</code>. If both are passed, only <code>TemplateBody</code> is used.</li>
|
389 |
+
* <li><code>TemplateURL</code> - <code>string</code> - Optional - Location of file containing the template body. The URL must point to a template located in an S3 bucket in the same region as the stack. For more information, go to the <a href="http://docs.amazonwebservices.com/AWSCloudFormation/latest/UserGuide">AWS CloudFormation User Guide</a>. Conditional: You must pass <code>TemplateURL</code> or <code>TemplateBody</code>. If both are passed, only <code>TemplateBody</code> is used.</li>
|
390 |
+
* <li><code>Parameters</code> - <code>array</code> - Optional - A list of <code>Parameter</code> structures that specify input parameters. <ul>
|
391 |
+
* <li><code>x</code> - <code>array</code> - Optional - This represents a simple array index. <ul>
|
392 |
+
* <li><code>ParameterKey</code> - <code>string</code> - Optional - The key associated with the parameter.</li>
|
393 |
+
* <li><code>ParameterValue</code> - <code>string</code> - Optional - The value associated with the parameter.</li>
|
394 |
+
* </ul></li>
|
395 |
+
* </ul></li>
|
396 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
397 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
398 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
399 |
+
*/
|
400 |
+
public function estimate_template_cost($opt = null)
|
401 |
+
{
|
402 |
+
if (!$opt) $opt = array();
|
403 |
+
|
404 |
+
// Optional list + map
|
405 |
+
if (isset($opt['Parameters']))
|
406 |
+
{
|
407 |
+
$opt = array_merge($opt, CFComplexType::map(array(
|
408 |
+
'Parameters' => $opt['Parameters']
|
409 |
+
), 'member'));
|
410 |
+
unset($opt['Parameters']);
|
411 |
+
}
|
412 |
+
|
413 |
+
return $this->authenticate('EstimateTemplateCost', $opt);
|
414 |
+
}
|
415 |
+
|
416 |
+
/**
|
417 |
+
* Returns the template body for a specified stack name. You can get the template for running or
|
418 |
+
* deleted stacks.
|
419 |
+
*
|
420 |
+
* For deleted stacks, GetTemplate returns the template for up to 90 days after the stack has been
|
421 |
+
* deleted.
|
422 |
+
*
|
423 |
+
* <p class="note">
|
424 |
+
* If the template does not exist, a <code>ValidationError</code> is returned.
|
425 |
+
* </p>
|
426 |
+
*
|
427 |
+
* @param string $stack_name (Required) The name or the unique identifier associated with the stack.
|
428 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
429 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
430 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
431 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
432 |
+
*/
|
433 |
+
public function get_template($stack_name, $opt = null)
|
434 |
+
{
|
435 |
+
if (!$opt) $opt = array();
|
436 |
+
$opt['StackName'] = $stack_name;
|
437 |
+
|
438 |
+
return $this->authenticate('GetTemplate', $opt);
|
439 |
+
}
|
440 |
+
|
441 |
+
/**
|
442 |
+
* Returns descriptions of all resources of the specified stack.
|
443 |
+
*
|
444 |
+
* For deleted stacks, ListStackResources returns resource information for up to 90 days after the
|
445 |
+
* stack has been deleted.
|
446 |
+
*
|
447 |
+
* @param string $stack_name (Required) The name or the unique identifier associated with the stack. Default: There is no default value.
|
448 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
449 |
+
* <li><code>NextToken</code> - <code>string</code> - Optional - String that identifies the start of the next list of stack resource summaries, if there is one. Default: There is no default value.</li>
|
450 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
451 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
452 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
453 |
+
*/
|
454 |
+
public function list_stack_resources($stack_name, $opt = null)
|
455 |
+
{
|
456 |
+
if (!$opt) $opt = array();
|
457 |
+
$opt['StackName'] = $stack_name;
|
458 |
+
|
459 |
+
return $this->authenticate('ListStackResources', $opt);
|
460 |
+
}
|
461 |
+
|
462 |
+
/**
|
463 |
+
* Returns the summary information for stacks whose status matches the specified
|
464 |
+
* StackStatusFilter. Summary information for stacks that have been deleted is kept for 90 days
|
465 |
+
* after the stack is deleted. If no StackStatusFilter is specified, summary information for all
|
466 |
+
* stacks is returned (including existing stacks and stacks that have been deleted).
|
467 |
+
*
|
468 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
469 |
+
* <li><code>NextToken</code> - <code>string</code> - Optional - String that identifies the start of the next list of stacks, if there is one. Default: There is no default value.</li>
|
470 |
+
* <li><code>StackStatusFilter</code> - <code>string|array</code> - Optional - Stack status to use as a filter. Specify one or more stack status codes to list only stacks with the specified status codes. For a complete list of stack status codes, see the <code>StackStatus</code> parameter of the <code>Stack</code> data type. Pass a string for a single value, or an indexed array for multiple values.</li>
|
471 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
472 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
473 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
474 |
+
*/
|
475 |
+
public function list_stacks($opt = null)
|
476 |
+
{
|
477 |
+
if (!$opt) $opt = array();
|
478 |
+
|
479 |
+
// Optional list (non-map)
|
480 |
+
if (isset($opt['StackStatusFilter']))
|
481 |
+
{
|
482 |
+
$opt = array_merge($opt, CFComplexType::map(array(
|
483 |
+
'StackStatusFilter' => (is_array($opt['StackStatusFilter']) ? $opt['StackStatusFilter'] : array($opt['StackStatusFilter']))
|
484 |
+
), 'member'));
|
485 |
+
unset($opt['StackStatusFilter']);
|
486 |
+
}
|
487 |
+
|
488 |
+
return $this->authenticate('ListStacks', $opt);
|
489 |
+
}
|
490 |
+
|
491 |
+
/**
|
492 |
+
* Updates a stack as specified in the template. After the call completes successfully, the stack
|
493 |
+
* update starts. You can check the status of the stack via the <code>DescribeStacks</code>
|
494 |
+
* action.
|
495 |
+
*
|
496 |
+
* To get a copy of the template for an existing stack, you can use the <code>GetTemplate</code>
|
497 |
+
* action.
|
498 |
+
*
|
499 |
+
* Tags that were associated with this stack during creation time will still be associated with
|
500 |
+
* the stack after an <code>UpdateStack</code> operation.
|
501 |
+
*
|
502 |
+
* For more information about creating an update template, updating a stack, and monitoring the
|
503 |
+
* progress of the update, see <a href=
|
504 |
+
* "http://docs.amazonwebservices.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks.html">
|
505 |
+
* Updating a Stack</a>.
|
506 |
+
*
|
507 |
+
* @param string $stack_name (Required) The name or stack ID of the stack to update. <p class="note">Must contain only alphanumeric characters (case sensitive) and start with an alpha character. Maximum length of the name is 255 characters.</p>
|
508 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
509 |
+
* <li><code>TemplateBody</code> - <code>string</code> - Optional - Structure containing the template body. (For more information, go to the <a href="http://docs.amazonwebservices.com/AWSCloudFormation/latest/UserGuide">AWS CloudFormation User Guide</a>.) Conditional: You must pass <code>TemplateBody</code> or <code>TemplateURL</code>. If both are passed, only <code>TemplateBody</code> is used.</li>
|
510 |
+
* <li><code>TemplateURL</code> - <code>string</code> - Optional - Location of file containing the template body. The URL must point to a template located in an S3 bucket in the same region as the stack. For more information, go to the <a href="http://docs.amazonwebservices.com/AWSCloudFormation/latest/UserGuide">AWS CloudFormation User Guide</a>. Conditional: You must pass <code>TemplateURL</code> or <code>TemplateBody</code>. If both are passed, only <code>TemplateBody</code> is used.</li>
|
511 |
+
* <li><code>Parameters</code> - <code>array</code> - Optional - A list of <code>Parameter</code> structures that specify input parameters for the stack. <ul>
|
512 |
+
* <li><code>x</code> - <code>array</code> - Optional - This represents a simple array index. <ul>
|
513 |
+
* <li><code>ParameterKey</code> - <code>string</code> - Optional - The key associated with the parameter.</li>
|
514 |
+
* <li><code>ParameterValue</code> - <code>string</code> - Optional - The value associated with the parameter.</li>
|
515 |
+
* </ul></li>
|
516 |
+
* </ul></li>
|
517 |
+
* <li><code>Capabilities</code> - <code>string|array</code> - Optional - The list of capabilities that you want to allow in the stack. If your stack contains IAM resources, you must specify the CAPABILITY_IAM value for this parameter; otherwise, this action returns an InsufficientCapabilities error. IAM resources are the following: <a href="http://docs.amazonwebservices.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-accesskey.html">AWS::IAM::AccessKey</a>, <a href="http://docs.amazonwebservices.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-group.html">AWS::IAM::Group</a>, <a href="http://docs.amazonwebservices.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-policy.html">AWS::IAM::Policy</a>, <a href="http://docs.amazonwebservices.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-user.html">AWS::IAM::User</a>, and <a href="http://docs.amazonwebservices.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-addusertogroup.html">AWS::IAM::UserToGroupAddition</a>. Pass a string for a single value, or an indexed array for multiple values.</li>
|
518 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
519 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
520 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
521 |
+
*/
|
522 |
+
public function update_stack($stack_name, $opt = null)
|
523 |
+
{
|
524 |
+
if (!$opt) $opt = array();
|
525 |
+
$opt['StackName'] = $stack_name;
|
526 |
+
|
527 |
+
// Optional list + map
|
528 |
+
if (isset($opt['Parameters']))
|
529 |
+
{
|
530 |
+
$opt = array_merge($opt, CFComplexType::map(array(
|
531 |
+
'Parameters' => $opt['Parameters']
|
532 |
+
), 'member'));
|
533 |
+
unset($opt['Parameters']);
|
534 |
+
}
|
535 |
+
|
536 |
+
// Optional list (non-map)
|
537 |
+
if (isset($opt['Capabilities']))
|
538 |
+
{
|
539 |
+
$opt = array_merge($opt, CFComplexType::map(array(
|
540 |
+
'Capabilities' => (is_array($opt['Capabilities']) ? $opt['Capabilities'] : array($opt['Capabilities']))
|
541 |
+
), 'member'));
|
542 |
+
unset($opt['Capabilities']);
|
543 |
+
}
|
544 |
+
|
545 |
+
return $this->authenticate('UpdateStack', $opt);
|
546 |
+
}
|
547 |
+
|
548 |
+
/**
|
549 |
+
* Validates a specified template.
|
550 |
+
*
|
551 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
552 |
+
* <li><code>TemplateBody</code> - <code>string</code> - Optional - String containing the template body. (For more information, go to the <a href="http://docs.amazonwebservices.com/AWSCloudFormation/latest/UserGuide">AWS CloudFormation User Guide</a>.) Conditional: You must pass <code>TemplateURL</code> or <code>TemplateBody</code>. If both are passed, only <code>TemplateBody</code> is used.</li>
|
553 |
+
* <li><code>TemplateURL</code> - <code>string</code> - Optional - Location of file containing the template body. The URL must point to a template located in an S3 bucket in the same region as the stack. For more information, go to the <a href="http://docs.amazonwebservices.com/AWSCloudFormation/latest/UserGuide">AWS CloudFormation User Guide</a>. Conditional: You must pass <code>TemplateURL</code> or <code>TemplateBody</code>. If both are passed, only <code>TemplateBody</code> is used.</li>
|
554 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
555 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
556 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
557 |
+
*/
|
558 |
+
public function validate_template($opt = null)
|
559 |
+
{
|
560 |
+
if (!$opt) $opt = array();
|
561 |
+
|
562 |
+
return $this->authenticate('ValidateTemplate', $opt);
|
563 |
+
}
|
564 |
+
}
|
565 |
+
|
566 |
+
|
567 |
+
/*%******************************************************************************************%*/
|
568 |
+
// EXCEPTIONS
|
569 |
+
|
570 |
+
class CloudFormation_Exception extends Exception {}
|
sdk/Aws_v1/services/cloudfront.class.php
ADDED
@@ -0,0 +1,1486 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* Copyright 2010-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
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 |
+
* A copy of the License is located at
|
8 |
+
*
|
9 |
+
* http://aws.amazon.com/apache2.0
|
10 |
+
*
|
11 |
+
* or in the "license" file accompanying this file. This file is distributed
|
12 |
+
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
|
13 |
+
* express or implied. See the License for the specific language governing
|
14 |
+
* permissions and limitations under the License.
|
15 |
+
*/
|
16 |
+
|
17 |
+
|
18 |
+
/*%******************************************************************************************%*/
|
19 |
+
// EXCEPTIONS
|
20 |
+
|
21 |
+
/**
|
22 |
+
* Default CloudFront Exception.
|
23 |
+
*/
|
24 |
+
class CloudFront_Exception extends Exception {}
|
25 |
+
|
26 |
+
|
27 |
+
/*%******************************************************************************************%*/
|
28 |
+
// MAIN CLASS
|
29 |
+
|
30 |
+
/**
|
31 |
+
* Amazon CloudFront is a web service for content delivery. It makes it easier for you to distribute content
|
32 |
+
* to end users quickly, with low latency and high data transfer speeds.
|
33 |
+
*
|
34 |
+
* CloudFront delivers your content through a worldwide network of edge locations. End users are routed to
|
35 |
+
* the nearest edge location, so content is delivered with the best possible performance. CloudFront works
|
36 |
+
* seamlessly with the Amazon Simple Storage Service, which durably stores the original, definitive versions
|
37 |
+
* of your files.
|
38 |
+
*
|
39 |
+
* @version 2012.04.20
|
40 |
+
* @license See the included NOTICE.md file for more information.
|
41 |
+
* @copyright See the included NOTICE.md file for more information.
|
42 |
+
* @link http://aws.amazon.com/cloudfront/ Amazon CloudFront
|
43 |
+
* @link http://aws.amazon.com/documentation/cloudfront/ Amazon CloudFront documentation
|
44 |
+
*/
|
45 |
+
class AmazonCloudFront extends CFRuntime
|
46 |
+
{
|
47 |
+
/**
|
48 |
+
* Specify the default queue URL.
|
49 |
+
*/
|
50 |
+
const DEFAULT_URL = 'cloudfront.amazonaws.com';
|
51 |
+
|
52 |
+
/**
|
53 |
+
* The InProgress state.
|
54 |
+
*/
|
55 |
+
const STATE_INPROGRESS = 'InProgress';
|
56 |
+
|
57 |
+
/**
|
58 |
+
* The Deployed state.
|
59 |
+
*/
|
60 |
+
const STATE_DEPLOYED = 'Deployed';
|
61 |
+
|
62 |
+
/**
|
63 |
+
* The base content to use for generating the DistributionConfig XML.
|
64 |
+
*/
|
65 |
+
var $base_xml;
|
66 |
+
|
67 |
+
/**
|
68 |
+
* The CloudFront distribution domain to use.
|
69 |
+
*/
|
70 |
+
var $domain;
|
71 |
+
|
72 |
+
/**
|
73 |
+
* The RSA key pair ID to use.
|
74 |
+
*/
|
75 |
+
var $key_pair_id;
|
76 |
+
|
77 |
+
/**
|
78 |
+
* The RSA private key resource locator.
|
79 |
+
*/
|
80 |
+
var $private_key;
|
81 |
+
|
82 |
+
|
83 |
+
/*%******************************************************************************************%*/
|
84 |
+
// CONSTRUCTOR
|
85 |
+
|
86 |
+
/**
|
87 |
+
* Constructs a new instance of <AmazonCloudFront>.
|
88 |
+
*
|
89 |
+
* @param array $options (Optional) An associative array of parameters that can have the following keys: <ul>
|
90 |
+
* <li><code>certificate_authority</code> - <code>boolean</code> - Optional - Determines which Cerificate Authority file to use. A value of boolean <code>false</code> will use the Certificate Authority file available on the system. A value of boolean <code>true</code> will use the Certificate Authority provided by the SDK. Passing a file system path to a Certificate Authority file (chmodded to <code>0755</code>) will use that. Leave this set to <code>false</code> if you're not sure.</li>
|
91 |
+
* <li><code>credentials</code> - <code>string</code> - Optional - The name of the credential set to use for authentication.</li>
|
92 |
+
* <li><code>default_cache_config</code> - <code>string</code> - Optional - This option allows a preferred storage type to be configured for long-term caching. This can be changed later using the <set_cache_config()> method. Valid values are: <code>apc</code>, <code>xcache</code>, or a file system path such as <code>./cache</code> or <code>/tmp/cache/</code>.</li>
|
93 |
+
* <li><code>key</code> - <code>string</code> - Optional - Your AWS key, or a session key. If blank, the default credential set will be used.</li>
|
94 |
+
* <li><code>secret</code> - <code>string</code> - Optional - Your AWS secret key, or a session secret key. If blank, the default credential set will be used.</li>
|
95 |
+
* <li><code>token</code> - <code>string</code> - Optional - An AWS session token.</li></ul>
|
96 |
+
* @return void
|
97 |
+
*/
|
98 |
+
public function __construct(array $options = array())
|
99 |
+
{
|
100 |
+
$this->api_version = '2012-03-15';
|
101 |
+
$this->hostname = self::DEFAULT_URL;
|
102 |
+
$this->auth_class = 'AuthV2REST';
|
103 |
+
|
104 |
+
$this->base_xml = '<?xml version="1.0" encoding="UTF-8"?><%s xmlns="http://cloudfront.amazonaws.com/doc/' . $this->api_version . '/"></%1$s>';
|
105 |
+
|
106 |
+
parent::__construct($options);
|
107 |
+
|
108 |
+
// Set a default key pair ID and private key
|
109 |
+
$this->key_pair_id = $this->credentials->cloudfront_keypair;
|
110 |
+
$this->private_key = $this->credentials->cloudfront_pem;
|
111 |
+
}
|
112 |
+
|
113 |
+
|
114 |
+
/*%******************************************************************************************%*/
|
115 |
+
// AUTHENTICATION
|
116 |
+
|
117 |
+
/**
|
118 |
+
* Authenticates a connection to Amazon CloudFront. This method should not be used directly unless
|
119 |
+
* you're writing custom methods for this class.
|
120 |
+
*
|
121 |
+
* @param string $operation (Required) The HTTP method to use to connect. Accepts <code>GET</code>, <code>POST</code>, <code>PUT</code>, <code>DELETE</code>, and <code>HEAD</code>.
|
122 |
+
* @param array $payload (Required) An associative array of parameters for authenticating. See the individual methods for allowed keys.
|
123 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
124 |
+
* @link http://docs.amazonwebservices.com/AmazonCloudFront/latest/DeveloperGuide/RESTAuthentication.html Authentication
|
125 |
+
*/
|
126 |
+
public function authenticate($operation, $payload)
|
127 |
+
{
|
128 |
+
// Extract data from payload
|
129 |
+
$querystring = null;
|
130 |
+
$opt = ($payload) ? $payload : array();
|
131 |
+
$method = $operation;
|
132 |
+
$path = isset($opt['path']) ? $opt['path'] : null;
|
133 |
+
$xml = isset($opt['xml']) ? $opt['xml'] : null;
|
134 |
+
$etag = isset($opt['etag']) ? $opt['etag'] : null;
|
135 |
+
|
136 |
+
$method_arguments = func_get_args();
|
137 |
+
|
138 |
+
// Use the caching flow to determine if we need to do a round-trip to the server.
|
139 |
+
if ($this->use_cache_flow)
|
140 |
+
{
|
141 |
+
// Generate an identifier specific to this particular set of arguments.
|
142 |
+
$cache_id = $this->key . '_' . get_class($this) . '_' . $method . sha1($path) . '_' . sha1(serialize($method_arguments));
|
143 |
+
|
144 |
+
// Instantiate the appropriate caching object.
|
145 |
+
$this->cache_object = new $this->cache_class($cache_id, $this->cache_location, $this->cache_expires, $this->cache_compress);
|
146 |
+
|
147 |
+
if ($this->delete_cache)
|
148 |
+
{
|
149 |
+
$this->use_cache_flow = false;
|
150 |
+
$this->delete_cache = false;
|
151 |
+
return $this->cache_object->delete();
|
152 |
+
}
|
153 |
+
|
154 |
+
// Invoke the cache callback function to determine whether to pull data from the cache or make a fresh request.
|
155 |
+
$data = $this->cache_object->response_manager(array($this, 'cache_callback'), $method_arguments);
|
156 |
+
|
157 |
+
// Parse the XML body
|
158 |
+
$data = $this->parse_callback($data);
|
159 |
+
|
160 |
+
// End!
|
161 |
+
return $data;
|
162 |
+
}
|
163 |
+
|
164 |
+
// Generate query string
|
165 |
+
if (isset($opt['query_string']) && count($opt['query_string']))
|
166 |
+
{
|
167 |
+
$querystring = '?' . $this->util->to_query_string($opt['query_string']);
|
168 |
+
}
|
169 |
+
|
170 |
+
// Gather information to pass along to other classes.
|
171 |
+
$helpers = array(
|
172 |
+
'utilities' => $this->utilities_class,
|
173 |
+
'request' => $this->request_class,
|
174 |
+
'response' => $this->response_class,
|
175 |
+
);
|
176 |
+
|
177 |
+
// Compose the endpoint URL.
|
178 |
+
$request_url = 'https://' . $this->hostname . '/' . $this->api_version;
|
179 |
+
$request_url .= ($path) ? $path : '';
|
180 |
+
$request_url .= ($querystring) ? $querystring : '';
|
181 |
+
|
182 |
+
// Compose the request.
|
183 |
+
$request = new $this->request_class($request_url, $this->proxy, $helpers, $this->credentials);
|
184 |
+
|
185 |
+
// Update RequestCore settings
|
186 |
+
$request->request_class = $this->request_class;
|
187 |
+
$request->response_class = $this->response_class;
|
188 |
+
$request->ssl_verification = $this->ssl_verification;
|
189 |
+
|
190 |
+
// Pass along registered stream callbacks
|
191 |
+
if ($this->registered_streaming_read_callback)
|
192 |
+
{
|
193 |
+
$request->register_streaming_read_callback($this->registered_streaming_read_callback);
|
194 |
+
}
|
195 |
+
|
196 |
+
if ($this->registered_streaming_write_callback)
|
197 |
+
{
|
198 |
+
$request->register_streaming_write_callback($this->registered_streaming_write_callback);
|
199 |
+
}
|
200 |
+
|
201 |
+
// Generate required headers.
|
202 |
+
$request->set_method($method);
|
203 |
+
$canonical_date = gmdate($this->util->konst($this->util, 'DATE_FORMAT_RFC2616'));
|
204 |
+
$request->add_header('x-amz-date', $canonical_date);
|
205 |
+
$signature = base64_encode(hash_hmac('sha1', $canonical_date, $this->secret_key, true));
|
206 |
+
$request->add_header('Authorization', 'AWS ' . $this->key . ':' . $signature);
|
207 |
+
|
208 |
+
// Add configuration XML if we have it.
|
209 |
+
if ($xml)
|
210 |
+
{
|
211 |
+
$request->add_header('Content-Length', strlen($xml));
|
212 |
+
$request->add_header('Content-Type', 'application/xml');
|
213 |
+
$request->set_body($xml);
|
214 |
+
}
|
215 |
+
|
216 |
+
// Set If-Match: ETag header if we have one.
|
217 |
+
if ($etag)
|
218 |
+
{
|
219 |
+
$request->add_header('If-Match', $etag);
|
220 |
+
}
|
221 |
+
|
222 |
+
$curlopts = array();
|
223 |
+
|
224 |
+
// Set custom CURLOPT settings
|
225 |
+
if (isset($opt['curlopts']))
|
226 |
+
{
|
227 |
+
$curlopts = $opt['curlopts'];
|
228 |
+
}
|
229 |
+
|
230 |
+
// Debug mode
|
231 |
+
if ($this->debug_mode)
|
232 |
+
{
|
233 |
+
$curlopts[CURLOPT_VERBOSE] = true;
|
234 |
+
}
|
235 |
+
|
236 |
+
if (count($curlopts))
|
237 |
+
{
|
238 |
+
$request->set_curlopts($curlopts);
|
239 |
+
}
|
240 |
+
|
241 |
+
// Manage the (newer) batch request API or the (older) returnCurlHandle setting.
|
242 |
+
if ($this->use_batch_flow)
|
243 |
+
{
|
244 |
+
$handle = $request->prep_request();
|
245 |
+
$this->batch_object->add($handle);
|
246 |
+
$this->use_batch_flow = false;
|
247 |
+
|
248 |
+
return $handle;
|
249 |
+
}
|
250 |
+
elseif (isset($opt['returnCurlHandle']) && $opt['returnCurlHandle'] == (bool) true)
|
251 |
+
{
|
252 |
+
return $request->prep_request();
|
253 |
+
}
|
254 |
+
|
255 |
+
// Send!
|
256 |
+
$request->send_request();
|
257 |
+
|
258 |
+
// Prepare the response.
|
259 |
+
$headers = $request->get_response_header();
|
260 |
+
if ($xml) $headers['x-aws-body'] = $xml;
|
261 |
+
|
262 |
+
$data = new $this->response_class($headers, $this->parse_callback($request->get_response_body()), $request->get_response_code());
|
263 |
+
|
264 |
+
// Was it Amazon's fault the request failed? Retry the request until we reach $max_retries.
|
265 |
+
if ((integer) $request->get_response_code() === 500 || (integer) $request->get_response_code() === 503)
|
266 |
+
{
|
267 |
+
if ($this->redirects <= $this->max_retries)
|
268 |
+
{
|
269 |
+
// Exponential backoff
|
270 |
+
$delay = (integer) (pow(4, $this->redirects) * 100000);
|
271 |
+
usleep($delay);
|
272 |
+
$this->redirects++;
|
273 |
+
$data = $this->authenticate($method, $opt);
|
274 |
+
}
|
275 |
+
}
|
276 |
+
|
277 |
+
$this->redirects = 0;
|
278 |
+
return $data;
|
279 |
+
}
|
280 |
+
|
281 |
+
|
282 |
+
/*%******************************************************************************************%*/
|
283 |
+
// SETTERS
|
284 |
+
|
285 |
+
/**
|
286 |
+
* Set the key ID of the RSA key pair being used.
|
287 |
+
*
|
288 |
+
* @param string $key_pair_id (Required) The ID of the RSA key pair being used.
|
289 |
+
* @return $this A reference to the current instance.
|
290 |
+
*/
|
291 |
+
public function set_keypair_id($key_pair_id)
|
292 |
+
{
|
293 |
+
$this->key_pair_id = $key_pair_id;
|
294 |
+
return $this;
|
295 |
+
}
|
296 |
+
|
297 |
+
/**
|
298 |
+
* Set the private key resource locator being used.
|
299 |
+
*
|
300 |
+
* @param string $private_key (Optional) The contents of the RSA private key used to sign requests.
|
301 |
+
* @return $this A reference to the current instance.
|
302 |
+
*/
|
303 |
+
public function set_private_key($private_key)
|
304 |
+
{
|
305 |
+
$this->private_key = $private_key;
|
306 |
+
return $this;
|
307 |
+
}
|
308 |
+
|
309 |
+
/**
|
310 |
+
* Overrides the <CFRuntime::disable_ssl()> method from the base class. SSL is required for CloudFront.
|
311 |
+
*
|
312 |
+
* @return void
|
313 |
+
*/
|
314 |
+
public function disable_ssl()
|
315 |
+
{
|
316 |
+
throw new CloudFront_Exception('SSL/HTTPS is REQUIRED for Amazon CloudFront and cannot be disabled.');
|
317 |
+
}
|
318 |
+
|
319 |
+
|
320 |
+
/*%******************************************************************************************%*/
|
321 |
+
// GENERATE CONFIG XML
|
322 |
+
|
323 |
+
/**
|
324 |
+
* Generates the distribution configuration XML used with <create_distribution()> and
|
325 |
+
* <set_distribution_config()>.
|
326 |
+
*
|
327 |
+
* @param string $origin (Required) The source to use for the Amazon CloudFront distribution. Use an Amazon S3 bucket name, or a fully-qualified non-S3 domain name prefixed with <code>http://</code> or <code>https://</code>.
|
328 |
+
* @param string $caller_reference (Required) A unique identifier for the request. A timestamp-appended string is recommended.
|
329 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
330 |
+
* <li><code>CNAME</code> - <code>string|array</code> - Optional - A DNS CNAME to use to map to the Amazon CloudFront distribution. If setting more than one, use an indexed array. Supports 1-10 CNAMEs.</li>
|
331 |
+
* <li><code>Comment</code> - <code>string</code> - Optional - A comment to apply to the distribution. Cannot exceed 128 characters.</li>
|
332 |
+
* <li><code>DefaultRootObject</code> - <code>string</code> - Optional - The file to load when someone accesses the root of your Amazon CloudFront domain (e.g., <code>index.html</code>).</li>
|
333 |
+
* <li><code>Enabled</code> - <code>string</code> - Optional - A value of <code>true</code> enables the distribution. A value of <code>false</code> disables it. The default value is <code>true</code>.</li>
|
334 |
+
* <li><code>Logging</code> - <code>array</code> - Optional - An array that contains two keys: <code>Bucket</code>, specifying where logs are written to, and <code>Prefix</code>, specifying a prefix to append to log file names.</li>
|
335 |
+
* <li><code>OriginAccessIdentity</code> - <code>string</code> - Optional - The origin access identity (OAI) associated with this distribution. Use the Identity ID from the OAI, not the <code>CanonicalId</code>. Requires an S3 origin.</li>
|
336 |
+
* <li><code>OriginProtocolPolicy</code> - <code>string</code> - Optional - The origin protocol policy to apply to your origin. If you specify <code>http-only</code>, CloudFront will use HTTP only to access the origin. If you specify <code>match-viewer</code>, CloudFront will fetch from your origin using HTTP or HTTPS, based on the protocol of the viewer request. It has a default value of <code>match-viewer</code>. [Allowed values: <code>http-only</code>, <code>match-viewer</code>]</li>
|
337 |
+
* <li><code>Streaming</code> - <code>boolean</code> - Optional - Whether or not this should be for a streaming distribution. A value of <code>true</code> will create a streaming distribution. A value of <code>false</code> will create a standard distribution. The default value is <code>false</code>.</li>
|
338 |
+
* <li><code>TrustedSigners</code> - <code>array</code> - Optional - An array of AWS account numbers for users who are trusted signers. Explicity add the value <code>Self</code> to the array to add your own account as a trusted signer.</li></ul>
|
339 |
+
* @return string An XML document to be used as the distribution configuration.
|
340 |
+
*/
|
341 |
+
public function generate_config_xml($origin, $caller_reference, $opt = null)
|
342 |
+
{
|
343 |
+
// Default, empty XML
|
344 |
+
$xml = simplexml_load_string(sprintf($this->base_xml, (
|
345 |
+
(isset($opt['Streaming']) && $opt['Streaming'] == (bool) true) ? 'StreamingDistributionConfig' : 'DistributionConfig')
|
346 |
+
));
|
347 |
+
|
348 |
+
if (substr($origin, 0, 7) === 'http://' || substr($origin, 0, 8) === 'https://')
|
349 |
+
{
|
350 |
+
// Custom Origin
|
351 |
+
$custom_origin = $xml->addChild('CustomOrigin');
|
352 |
+
$custom_origin->addChild('DNSName', str_replace(array('http://', 'https://'), '', $origin));
|
353 |
+
|
354 |
+
if (isset($opt['OriginProtocolPolicy']))
|
355 |
+
{
|
356 |
+
$custom_origin->addChild('OriginProtocolPolicy', $opt['OriginProtocolPolicy']);
|
357 |
+
}
|
358 |
+
else
|
359 |
+
{
|
360 |
+
$custom_origin->addChild('OriginProtocolPolicy', 'match-viewer');
|
361 |
+
}
|
362 |
+
}
|
363 |
+
else
|
364 |
+
{
|
365 |
+
// S3 Origin
|
366 |
+
$s3_origin = $xml->addChild('S3Origin');
|
367 |
+
$s3_origin->addChild('DNSName', $origin . ((stripos($origin, '.s3.amazonaws.com') === false) ? '.s3.amazonaws.com' : ''));
|
368 |
+
|
369 |
+
// Origin Access Identity
|
370 |
+
if (isset($opt['OriginAccessIdentity']))
|
371 |
+
{
|
372 |
+
$s3_origin->addChild('OriginAccessIdentity', 'origin-access-identity/cloudfront/' . $opt['OriginAccessIdentity']);
|
373 |
+
}
|
374 |
+
}
|
375 |
+
|
376 |
+
// CallerReference
|
377 |
+
$xml->addChild('CallerReference', $caller_reference);
|
378 |
+
|
379 |
+
// CNAME
|
380 |
+
if (isset($opt['CNAME']))
|
381 |
+
{
|
382 |
+
if (is_array($opt['CNAME']))
|
383 |
+
{
|
384 |
+
foreach ($opt['CNAME'] as $cname)
|
385 |
+
{
|
386 |
+
$xml->addChild('CNAME', $cname);
|
387 |
+
}
|
388 |
+
}
|
389 |
+
else
|
390 |
+
{
|
391 |
+
$xml->addChild('CNAME', $opt['CNAME']);
|
392 |
+
}
|
393 |
+
}
|
394 |
+
|
395 |
+
// Comment
|
396 |
+
if (isset($opt['Comment']))
|
397 |
+
{
|
398 |
+
$xml->addChild('Comment', $opt['Comment']);
|
399 |
+
}
|
400 |
+
|
401 |
+
// Enabled
|
402 |
+
if (isset($opt['Enabled']))
|
403 |
+
{
|
404 |
+
$xml->addChild('Enabled', $opt['Enabled'] ? 'true' : 'false');
|
405 |
+
}
|
406 |
+
else
|
407 |
+
{
|
408 |
+
$xml->addChild('Enabled', 'true');
|
409 |
+
}
|
410 |
+
|
411 |
+
// Logging
|
412 |
+
if (isset($opt['Logging']))
|
413 |
+
{
|
414 |
+
if (is_array($opt['Logging']))
|
415 |
+
{
|
416 |
+
$logging = $xml->addChild('Logging');
|
417 |
+
$bucket_name = $opt['Logging']['Bucket'];
|
418 |
+
|
419 |
+
// Origin
|
420 |
+
$logging->addChild('Bucket', $bucket_name . (
|
421 |
+
(stripos($bucket_name, '.s3.amazonaws.com') === false) ? '.s3.amazonaws.com' : ''
|
422 |
+
));
|
423 |
+
|
424 |
+
$logging->addChild('Prefix', $opt['Logging']['Prefix']);
|
425 |
+
}
|
426 |
+
}
|
427 |
+
|
428 |
+
// Required Protocols
|
429 |
+
if (isset($opt['RequiredProtocols']))
|
430 |
+
{
|
431 |
+
$required_protocols = $xml->addChild('RequiredProtocols');
|
432 |
+
$required_protocols->addChild('Protocol', $opt['RequiredProtocols']);
|
433 |
+
}
|
434 |
+
|
435 |
+
// Caching Behavior
|
436 |
+
if (isset($opt['CachingBehavior']) && is_array($opt['CachingBehavior']))
|
437 |
+
{
|
438 |
+
$caching_behavior = $xml->addChild('CachingBehavior');
|
439 |
+
|
440 |
+
if (isset($opt['CachingBehavior']['MinTTL']))
|
441 |
+
{
|
442 |
+
$min_ttl = $opt['CachingBehavior']['MinTTL'];
|
443 |
+
|
444 |
+
if (is_string($min_ttl))
|
445 |
+
{
|
446 |
+
$min_ttl = strtotime($min_ttl);
|
447 |
+
}
|
448 |
+
|
449 |
+
$caching_behavior->addChild('MinTTL', $min_ttl);
|
450 |
+
}
|
451 |
+
}
|
452 |
+
|
453 |
+
// Trusted Signers
|
454 |
+
if (isset($opt['TrustedSigners']))
|
455 |
+
{
|
456 |
+
$trusted_signers = $xml->addChild('TrustedSigners');
|
457 |
+
|
458 |
+
// Not an array? Convert to one.
|
459 |
+
if (!is_array($opt['TrustedSigners']))
|
460 |
+
{
|
461 |
+
$opt['TrustedSigners'] = array($opt['TrustedSigners']);
|
462 |
+
}
|
463 |
+
|
464 |
+
// Handle 'Self' vs. everything else
|
465 |
+
foreach ($opt['TrustedSigners'] as $signer)
|
466 |
+
{
|
467 |
+
if (strtolower($signer) === 'self')
|
468 |
+
{
|
469 |
+
$trusted_signers->addChild('Self');
|
470 |
+
}
|
471 |
+
else
|
472 |
+
{
|
473 |
+
$trusted_signers->addChild('AwsAccountNumber', $signer);
|
474 |
+
}
|
475 |
+
}
|
476 |
+
}
|
477 |
+
|
478 |
+
// DefaultRootObject
|
479 |
+
if (isset($opt['DefaultRootObject']))
|
480 |
+
{
|
481 |
+
$xml->addChild('DefaultRootObject', $opt['DefaultRootObject']);
|
482 |
+
}
|
483 |
+
|
484 |
+
return $xml->asXML();
|
485 |
+
}
|
486 |
+
|
487 |
+
/**
|
488 |
+
* Updates an existing configuration XML document.
|
489 |
+
*
|
490 |
+
* @param CFSimpleXML|CFResponse|string $xml (Required) The source configuration XML to make updates to. Can be the <CFSimpleXML> body of a <get_distribution_config()> response, the entire <CFResponse> of a <get_distribution_config()> response, or a string of XML generated by <generate_config_xml()> or <update_config_xml()>.
|
491 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
492 |
+
* <li><code>CNAME</code> - <code>string|array</code> - Optional - The value or values to add to the existing list of CNAME values. If setting more than one, use an indexed array. Supports up to 10 CNAMEs.</li>
|
493 |
+
* <li><code>Comment</code> - <code>string</code> - Optional - A comment to apply to the distribution. Cannot exceed 128 characters.</li>
|
494 |
+
* <li><code>DefaultRootObject</code> - <code>string</code> - Optional - The file to load when someone accesses the root of your Amazon CloudFront domain (e.g., <code>index.html</code>).</li>
|
495 |
+
* <li><code>Enabled</code> - <code>string</code> - Optional - A value of <code>true</code> enables the distribution. A value of <code>false</code> disables it. The default value is <code>true</code>.</li>
|
496 |
+
* <li><code>Logging</code> - <code>array</code> - Optional - An array that contains two keys: <code>Bucket</code>, specifying where logs are written to, and <code>Prefix</code>, specifying a prefix to append to log file names.</li>
|
497 |
+
* <li><code>OriginAccessIdentity</code> - <code>string</code> - Optional - The origin access identity (OAI) associated with this distribution. Use the Identity ID from the OAI, not the <code>CanonicalId</code>.</li>
|
498 |
+
* <li><code>TrustedSigners</code> - <code>array</code> - Optional - An array of AWS account numbers for users who are trusted signers. Explicity add the value <code>Self</code> to the array to add your own account as a trusted signer.</li></ul>
|
499 |
+
* @return string XML document.
|
500 |
+
*/
|
501 |
+
public function update_config_xml($xml, $opt = null)
|
502 |
+
{
|
503 |
+
// If we receive a full CFResponse object, only use the body.
|
504 |
+
if ($xml instanceof CFResponse)
|
505 |
+
{
|
506 |
+
$xml = $xml->body;
|
507 |
+
}
|
508 |
+
|
509 |
+
// If we received a string of XML, convert it into a CFSimpleXML object.
|
510 |
+
if (is_string($xml))
|
511 |
+
{
|
512 |
+
$xml = simplexml_load_string($xml, $this->parser_class);
|
513 |
+
}
|
514 |
+
|
515 |
+
// Default, empty XML
|
516 |
+
$update = simplexml_load_string(sprintf($this->base_xml, (
|
517 |
+
(isset($opt['Streaming']) && $opt['Streaming'] == (bool) true) ? 'StreamingDistributionConfig' : 'DistributionConfig')
|
518 |
+
), $this->parser_class);
|
519 |
+
|
520 |
+
// These can't change.
|
521 |
+
if (isset($xml->S3Origin))
|
522 |
+
{
|
523 |
+
$origin = $update->addChild('S3Origin');
|
524 |
+
$origin->addChild('DNSName', $xml->S3Origin->DNSName);
|
525 |
+
|
526 |
+
// origin access identity
|
527 |
+
if (isset($opt['OriginAccessIdentity']))
|
528 |
+
{
|
529 |
+
$origin->addChild('OriginAccessIdentity', 'origin-access-identity/cloudfront/' . $opt['OriginAccessIdentity']);
|
530 |
+
}
|
531 |
+
elseif (isset($xml->S3Origin->OriginAccessIdentity))
|
532 |
+
{
|
533 |
+
$origin->addChild('OriginAccessIdentity', $xml->S3Origin->OriginAccessIdentity);
|
534 |
+
}
|
535 |
+
}
|
536 |
+
elseif (isset($xml->CustomOrigin))
|
537 |
+
{
|
538 |
+
$origin = $update->addChild('CustomOrigin');
|
539 |
+
$origin->addChild('DNSName', $xml->CustomOrigin->DNSName);
|
540 |
+
|
541 |
+
// Copy OriginProtocolPolicy for update
|
542 |
+
if ( isset($xml->CustomOrigin->OriginProtocolPolicy) )
|
543 |
+
{
|
544 |
+
$origin->addChild('OriginProtocolPolicy', $xml->CustomOrigin->OriginProtocolPolicy);
|
545 |
+
}
|
546 |
+
|
547 |
+
// origin access identity
|
548 |
+
if (isset($opt['OriginAccessIdentity']))
|
549 |
+
{
|
550 |
+
$origin->addChild('OriginAccessIdentity', 'origin-access-identity/cloudfront/' . $opt['OriginAccessIdentity']);
|
551 |
+
}
|
552 |
+
elseif (isset($xml->CustomOrigin->OriginAccessIdentity))
|
553 |
+
{
|
554 |
+
$origin->addChild('OriginAccessIdentity', $xml->CustomOrigin->OriginAccessIdentity);
|
555 |
+
}
|
556 |
+
}
|
557 |
+
|
558 |
+
$update->addChild('CallerReference', $xml->CallerReference);
|
559 |
+
|
560 |
+
// Add existing CNAME values
|
561 |
+
if ($xml->CNAME)
|
562 |
+
{
|
563 |
+
$update->addChild('CNAME', $xml->CNAME);
|
564 |
+
}
|
565 |
+
|
566 |
+
// Add new CNAME values
|
567 |
+
if (isset($opt['CNAME']))
|
568 |
+
{
|
569 |
+
if (is_array($opt['CNAME']))
|
570 |
+
{
|
571 |
+
foreach ($opt['CNAME'] as $cname)
|
572 |
+
{
|
573 |
+
$update->addChild('CNAME', $cname);
|
574 |
+
}
|
575 |
+
}
|
576 |
+
else
|
577 |
+
{
|
578 |
+
$update->addChild('CNAME', $opt['CNAME']);
|
579 |
+
}
|
580 |
+
}
|
581 |
+
|
582 |
+
// Comment
|
583 |
+
if (isset($opt['Comment']))
|
584 |
+
{
|
585 |
+
$update->addChild('Comment', $opt['Comment']);
|
586 |
+
}
|
587 |
+
elseif (isset($xml->Comment))
|
588 |
+
{
|
589 |
+
$update->addChild('Comment', $xml->Comment);
|
590 |
+
}
|
591 |
+
|
592 |
+
// DefaultRootObject
|
593 |
+
if (isset($opt['DefaultRootObject']))
|
594 |
+
{
|
595 |
+
$update->addChild('DefaultRootObject', $opt['DefaultRootObject']);
|
596 |
+
}
|
597 |
+
elseif (isset($xml->DefaultRootObject))
|
598 |
+
{
|
599 |
+
$update->addChild('DefaultRootObject', $xml->DefaultRootObject);
|
600 |
+
}
|
601 |
+
|
602 |
+
// Enabled
|
603 |
+
if (isset($opt['Enabled']))
|
604 |
+
{
|
605 |
+
$update->addChild('Enabled', $opt['Enabled'] ? 'true' : 'false');
|
606 |
+
}
|
607 |
+
elseif (isset($xml->Enabled))
|
608 |
+
{
|
609 |
+
$update->addChild('Enabled', $xml->Enabled);
|
610 |
+
}
|
611 |
+
|
612 |
+
// Logging
|
613 |
+
if (isset($opt['Logging']))
|
614 |
+
{
|
615 |
+
if (is_array($opt['Logging']))
|
616 |
+
{
|
617 |
+
$logging = $update->addChild('Logging');
|
618 |
+
$bucket_name = $opt['Logging']['Bucket'];
|
619 |
+
|
620 |
+
// Origin
|
621 |
+
$logging->addChild('Bucket', $bucket_name . ((stripos($bucket_name, '.s3.amazonaws.com') === false) ? '.s3.amazonaws.com' : ''));
|
622 |
+
|
623 |
+
$logging->addChild('Prefix', $opt['Logging']['Prefix']);
|
624 |
+
}
|
625 |
+
}
|
626 |
+
elseif (isset($xml->Logging))
|
627 |
+
{
|
628 |
+
$logging = $update->addChild('Logging');
|
629 |
+
$logging->addChild('Bucket', $xml->Logging->Bucket);
|
630 |
+
$logging->addChild('Prefix', $xml->Logging->Prefix);
|
631 |
+
}
|
632 |
+
|
633 |
+
// Required Protocols
|
634 |
+
if (isset($opt['RequiredProtocols']))
|
635 |
+
{
|
636 |
+
$required_protocols = $xml->addChild('RequiredProtocols');
|
637 |
+
$required_protocols->addChild('Protocol', $opt['RequiredProtocols']);
|
638 |
+
}
|
639 |
+
elseif (isset($xml->RequiredProtocols))
|
640 |
+
{
|
641 |
+
$required_protocols = $update->addChild('RequiredProtocols');
|
642 |
+
$required_protocols->addChild('Protocol', $xml->RequiredProtocols->Protocol);
|
643 |
+
}
|
644 |
+
|
645 |
+
// Caching Behavior
|
646 |
+
if (isset($opt['CachingBehavior']) && is_array($opt['CachingBehavior']))
|
647 |
+
{
|
648 |
+
$caching_behavior = $xml->addChild('CachingBehavior');
|
649 |
+
|
650 |
+
if (isset($opt['CachingBehavior']['MinTTL']))
|
651 |
+
{
|
652 |
+
$min_ttl = $opt['CachingBehavior']['MinTTL'];
|
653 |
+
|
654 |
+
if (is_string($min_ttl))
|
655 |
+
{
|
656 |
+
$min_ttl = strtotime($min_ttl);
|
657 |
+
}
|
658 |
+
|
659 |
+
$caching_behavior->addChild('MinTTL', $min_ttl);
|
660 |
+
}
|
661 |
+
}
|
662 |
+
elseif (isset($xml->CachingBehavior))
|
663 |
+
{
|
664 |
+
$caching_behavior = $update->addChild('CachingBehavior');
|
665 |
+
$caching_behavior->addChild('MinTTL', $xml->CachingBehavior->MinTTL);
|
666 |
+
}
|
667 |
+
|
668 |
+
// Trusted Signers
|
669 |
+
if (isset($opt['TrustedSigners']))
|
670 |
+
{
|
671 |
+
$trusted_signers = $update->addChild('TrustedSigners');
|
672 |
+
|
673 |
+
// Not an array? Convert to one.
|
674 |
+
if (!is_array($opt['TrustedSigners']))
|
675 |
+
{
|
676 |
+
$opt['TrustedSigners'] = array($opt['TrustedSigners']);
|
677 |
+
}
|
678 |
+
|
679 |
+
// Handle 'Self' vs. everything else
|
680 |
+
foreach ($opt['TrustedSigners'] as $signer)
|
681 |
+
{
|
682 |
+
if (strtolower($signer) === 'self')
|
683 |
+
{
|
684 |
+
$trusted_signers->addChild('Self');
|
685 |
+
}
|
686 |
+
else
|
687 |
+
{
|
688 |
+
$trusted_signers->addChild('AwsAccountNumber', $signer);
|
689 |
+
}
|
690 |
+
}
|
691 |
+
}
|
692 |
+
elseif (isset($xml->TrustedSigners) && $xml->TrustedSigners->count())
|
693 |
+
{
|
694 |
+
$trusted_signers = $update->addChild('TrustedSigners');
|
695 |
+
|
696 |
+
// Handle 'Self' vs. everything else
|
697 |
+
foreach ($xml->TrustedSigners->children() as $signer_key => $signer_value)
|
698 |
+
{
|
699 |
+
if (strtolower((string) $signer_key) === 'self')
|
700 |
+
{
|
701 |
+
$trusted_signers->addChild('Self');
|
702 |
+
}
|
703 |
+
else
|
704 |
+
{
|
705 |
+
$trusted_signers->addChild('AwsAccountNumber', (string) $signer_value);
|
706 |
+
}
|
707 |
+
}
|
708 |
+
}
|
709 |
+
|
710 |
+
// Output
|
711 |
+
return $update->asXML();
|
712 |
+
}
|
713 |
+
|
714 |
+
/**
|
715 |
+
* Removes one or more CNAMEs from a <code>DistibutionConfig</code> XML document.
|
716 |
+
*
|
717 |
+
* @param CFSimpleXML|CFResponse|string $xml (Required) The source DistributionConfig XML to make updates to. Can be the <CFSimpleXML> body of a <get_distribution_config()> response, the entire <CFResponse> of a <get_distribution_config()> response, or a string of XML generated by <generate_config_xml()> or <update_config_xml()>.
|
718 |
+
* @param string|array $cname (Optional) The value or values to remove from the existing list of CNAME values. To add a CNAME value, see <update_config_xml()>.
|
719 |
+
* @return string XML document.
|
720 |
+
*/
|
721 |
+
public function remove_cname($xml, $cname)
|
722 |
+
{
|
723 |
+
// If we receive a full CFResponse object, only use the body.
|
724 |
+
if ($xml instanceof CFResponse)
|
725 |
+
{
|
726 |
+
$xml = $xml->body;
|
727 |
+
}
|
728 |
+
|
729 |
+
// If we received a string of XML, convert it into a CFSimpleXML object.
|
730 |
+
if (is_string($xml))
|
731 |
+
{
|
732 |
+
$xml = simplexml_load_string($xml);
|
733 |
+
}
|
734 |
+
|
735 |
+
// Let's make sure that we have CNAMEs to remove in the first place.
|
736 |
+
if (isset($xml->CNAME))
|
737 |
+
{
|
738 |
+
// If we have an array of CNAME values...
|
739 |
+
if (is_array($cname))
|
740 |
+
{
|
741 |
+
foreach ($cname as $cn)
|
742 |
+
{
|
743 |
+
for ($i = 0, $length = sizeof($xml->CNAME); $i < $length; $i++)
|
744 |
+
{
|
745 |
+
if ((string) $xml->CNAME[$i] == $cn)
|
746 |
+
{
|
747 |
+
unset($xml->CNAME[$i]);
|
748 |
+
break;
|
749 |
+
}
|
750 |
+
}
|
751 |
+
}
|
752 |
+
}
|
753 |
+
|
754 |
+
// If we only have one CNAME value...
|
755 |
+
else
|
756 |
+
{
|
757 |
+
for ($i = 0, $length = sizeof($xml->CNAME); $i < $length; $i++)
|
758 |
+
{
|
759 |
+
if ((string) $xml->CNAME[$i] == $cname)
|
760 |
+
{
|
761 |
+
unset($xml->CNAME[$i]);
|
762 |
+
break;
|
763 |
+
}
|
764 |
+
}
|
765 |
+
}
|
766 |
+
}
|
767 |
+
|
768 |
+
return $xml->asXML();
|
769 |
+
}
|
770 |
+
|
771 |
+
/**
|
772 |
+
* Used to generate the origin access identity (OAI) Config XML used in <create_oai()>.
|
773 |
+
*
|
774 |
+
* @param string $caller_reference (Required) A unique identifier for the request. A timestamp-appended string is recommended.
|
775 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
776 |
+
* <li><code>Comment</code> - <code>string</code> - Optional - Replaces the existing value for "Comment". Cannot exceed 128 characters.</li></ul>
|
777 |
+
* @return string An XML document to be used as the OAI configuration.
|
778 |
+
*/
|
779 |
+
public function generate_oai_xml($caller_reference, $opt = null)
|
780 |
+
{
|
781 |
+
// Default, empty XML
|
782 |
+
$xml = simplexml_load_string(sprintf($this->base_xml, 'CloudFrontOriginAccessIdentityConfig'));
|
783 |
+
|
784 |
+
// CallerReference
|
785 |
+
$xml->addChild('CallerReference', $caller_reference);
|
786 |
+
|
787 |
+
// Comment
|
788 |
+
if (isset($opt['Comment']))
|
789 |
+
{
|
790 |
+
$xml->addChild('Comment', $opt['Comment']);
|
791 |
+
}
|
792 |
+
|
793 |
+
return $xml->asXML();
|
794 |
+
}
|
795 |
+
|
796 |
+
/**
|
797 |
+
* Updates the origin access identity (OAI) configureation XML used in <create_oai()>.
|
798 |
+
*
|
799 |
+
* @param CFSimpleXML|CFResponse|string $xml (Required) The source configuration XML to make updates to. Can be the <CFSimpleXML> body of a <get_oai_config()> response, the entire <CFResponse> of a <get_oai_config()> response, or a string of XML generated by <generate_oai_xml()> or <update_oai_xml()>.
|
800 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
801 |
+
* <li><code>Comment</code> - <code>string</code> - Optional - Replaces the existing value for "Comment". Cannot exceed 128 characters.</li></ul>
|
802 |
+
* @return string XML document.
|
803 |
+
*/
|
804 |
+
public function update_oai_xml($xml, $opt = null)
|
805 |
+
{
|
806 |
+
// If we receive a full CFResponse object, only use the body.
|
807 |
+
if ($xml instanceof CFResponse)
|
808 |
+
{
|
809 |
+
$xml = $xml->body;
|
810 |
+
}
|
811 |
+
|
812 |
+
// If we received a string of XML, convert it into a CFSimpleXML object.
|
813 |
+
if (is_string($xml))
|
814 |
+
{
|
815 |
+
$xml = simplexml_load_string($xml, $this->parser_class);
|
816 |
+
}
|
817 |
+
|
818 |
+
// Update the comment, if we have one.
|
819 |
+
if (isset($opt['Comment']) && isset($xml->Comment))
|
820 |
+
{
|
821 |
+
$xml->Comment = $opt['Comment'];
|
822 |
+
}
|
823 |
+
elseif (isset($opt['Comment']))
|
824 |
+
{
|
825 |
+
$xml->addChild('Comment', $opt['Comment']);
|
826 |
+
}
|
827 |
+
|
828 |
+
return $xml->asXML();
|
829 |
+
}
|
830 |
+
|
831 |
+
/**
|
832 |
+
* Generates the Invalidation Config XML used in <create_invalidation()>.
|
833 |
+
*
|
834 |
+
* @param string $caller_reference (Required) A unique identifier for the request. A timestamp-appended string is recommended.
|
835 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
836 |
+
* <li><code>Paths</code> - <code>string|array</code> - Optional - One or more paths to set for invalidation. Pass a string for a single value, or an indexed array for multiple values.</li></ul>
|
837 |
+
* @return string An XML document to be used as the Invalidation configuration.
|
838 |
+
*/
|
839 |
+
public function generate_invalidation_xml($caller_reference, $opt = null)
|
840 |
+
{
|
841 |
+
// Default, empty XML
|
842 |
+
$xml = simplexml_load_string(sprintf($this->base_xml, 'InvalidationBatch'));
|
843 |
+
|
844 |
+
// CallerReference
|
845 |
+
$xml->addChild('CallerReference', $caller_reference);
|
846 |
+
|
847 |
+
// Paths
|
848 |
+
if (isset($opt['Paths']))
|
849 |
+
{
|
850 |
+
$paths = is_array($opt['Paths']) ? $opt['Paths'] : array($opt['Paths']);
|
851 |
+
|
852 |
+
foreach ($paths as $path)
|
853 |
+
{
|
854 |
+
$path = str_replace('%2F', '/', rawurlencode($path));
|
855 |
+
$path = (substr($path, 0, 1) === '/') ? $path : ('/' . $path);
|
856 |
+
$xml->addChild('Path', $path);
|
857 |
+
}
|
858 |
+
}
|
859 |
+
|
860 |
+
return $xml->asXML();
|
861 |
+
}
|
862 |
+
|
863 |
+
|
864 |
+
/*%******************************************************************************************%*/
|
865 |
+
// DISTRIBUTIONS
|
866 |
+
|
867 |
+
/**
|
868 |
+
* Creates an Amazon CloudFront distribution. You can have up to 100 distributions in the Amazon
|
869 |
+
* CloudFront system.
|
870 |
+
*
|
871 |
+
* For an Adobe Real-Time Messaging Protocol (RTMP) streaming distribution, set the <code>Streaming</code> option
|
872 |
+
* to true.
|
873 |
+
*
|
874 |
+
* @param string $origin (Required) The source to use for the Amazon CloudFront distribution. Use an Amazon S3 bucket name, or a fully-qualified non-S3 domain name prefixed with <code>http://</code> or <code>https://</code>.
|
875 |
+
* @param string $caller_reference (Required) A unique identifier for the request. A timestamp-appended string is recommended.
|
876 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
877 |
+
* <li><code>CNAME</code> - <code>string|array</code> - Optional - A DNS CNAME to use to map to the Amazon CloudFront distribution. If setting more than one, use an indexed array. Supports 1-10 CNAMEs.</li>
|
878 |
+
* <li><code>Comment</code> - <code>string</code> - Optional - A comment to apply to the distribution. Cannot exceed 128 characters.</li>
|
879 |
+
* <li><code>DefaultRootObject</code> - <code>string</code> - Optional - The file to load when someone accesses the root of the Amazon CloudFront domain (e.g., <code>index.html</code>).</li>
|
880 |
+
* <li><code>Enabled</code> - <code>string</code> - Optional - A value of <code>true</code> will enable the distribution. A value of <code>false</code> will disable it. The default value is <code>true</code>.</li>
|
881 |
+
* <li><code>OriginAccessIdentity</code> - <code>string</code> - Optional - The origin access identity (OAI) associated with this distribution. Use the Identity ID from the OAI, not the <code>CanonicalId</code>. Requires an S3 origin.</li>
|
882 |
+
* <li><code>OriginProtocolPolicy</code> - <code>string</code> - Optional - The origin protocol policy to apply to your origin. If you specify <code>http-only</code>, CloudFront will use HTTP only to access the origin. If you specify <code>match-viewer</code>, CloudFront will fetch from your origin using HTTP or HTTPS, based on the protocol of the viewer request. [Allowed values: <code>http-only</code>, <code>match-viewer</code>]. The default value is <code>match-viewer</code>. Requires a non-S3 origin.</li>
|
883 |
+
* <li><code>Streaming</code> - <code>boolean</code> - Optional - Whether or not this should be for a streaming distribution. A value of <code>true</code> creates a streaming distribution. A value of <code>false</code> creates a standard distribution. The default value is <code>false</code>.</li>
|
884 |
+
* <li><code>Logging</code> - <code>array</code> - Optional - Controls whether access logs are written for the distribution. If you want to turn on access logs, include this element; if you want to turn off access logs, remove this element.</li>
|
885 |
+
* <li><code>TrustedSigners</code> - <code>array</code> - Optional - An array of AWS account numbers for users who are trusted signers. Explicity add the value <code>Self</code> to the array to add your own account as a trusted signer.</li>
|
886 |
+
* <li><code>RequiredProtocols</code> - <code>string<code> - Optional - Use this element to restrict access to your distribution solely to HTTPS requests. Without this element, CloudFront can use any available protocol to serve the request.</li>
|
887 |
+
* <li><code>CachingBehavior</code> - <code>array</code> - Optional - Determines the minimum TTL for objects in the CloudFront cache. This value specifies a lower bound for values in the headers for an object, for example, in the Cache-Control max-age directive.</li>
|
888 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
889 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
890 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
891 |
+
* @link http://docs.amazonwebservices.com/AmazonCloudFront/latest/APIReference/CreateDistribution.html POST Distribution
|
892 |
+
* @link http://docs.amazonwebservices.com/AmazonCloudFront/latest/APIReference/CreateStreamingDistribution.html POST Streaming Distribution
|
893 |
+
*/
|
894 |
+
public function create_distribution($origin, $caller_reference, $opt = null)
|
895 |
+
{
|
896 |
+
if (!$opt) $opt = array();
|
897 |
+
|
898 |
+
$xml = $this->generate_config_xml($origin, $caller_reference, $opt);
|
899 |
+
$path = '/' . ((isset($opt['Streaming']) && $opt['Streaming'] == (bool) true) ? 'streaming-distribution' : 'distribution');
|
900 |
+
|
901 |
+
$opt = array_merge($opt, array('path' => $path, 'xml' => $xml));
|
902 |
+
|
903 |
+
return $this->authenticate('POST', $opt);
|
904 |
+
}
|
905 |
+
|
906 |
+
/**
|
907 |
+
* Gets a list of distributions. By default, the list is returned as one result. If needed, paginate the
|
908 |
+
* list by specifying values for the <code>MaxItems</code> and <code>Marker</code> parameters.
|
909 |
+
*
|
910 |
+
* Standard distributions are listed separately from streaming distributions. For streaming distributions,
|
911 |
+
* set the <code>Streaming</code> option to true.
|
912 |
+
*
|
913 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
914 |
+
* <li><code>Marker</code> - <code>string</code> - Optional - Use this setting when paginating results to indicate where in your list of distributions to begin. The results include distributions in the list that occur after the marker. To get the next page of results, set the <code>Marker</code> to the value of the <code>NextMarker</code> from the current page's response (which is also the ID of the last distribution on that page).</li>
|
915 |
+
* <li><code>MaxItems</code> - <code>integer</code> - Optional - The maximum number of distributions you want in the response body. Maximum of 100.</li>
|
916 |
+
* <li><code>Streaming</code> - <code>boolean</code> - Optional - Whether or not this should be for a streaming distribution. A value of <code>true</code> will create a streaming distribution. A value of <code>false</code> will create a standard distribution. The default value is <code>false</code>.</li>
|
917 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
918 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
919 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
920 |
+
* @link http://docs.amazonwebservices.com/AmazonCloudFront/latest/APIReference/ListDistributions.html GET Distribution List
|
921 |
+
* @link http://docs.amazonwebservices.com/AmazonCloudFront/latest/APIReference/ListStreamingDistributions.html GET Streaming Distribution List
|
922 |
+
*/
|
923 |
+
public function list_distributions($opt = null)
|
924 |
+
{
|
925 |
+
if (!$opt) $opt = array();
|
926 |
+
$opt['query_string'] = array();
|
927 |
+
|
928 |
+
// Pass these to the query string
|
929 |
+
foreach (array('Marker', 'MaxItems') as $option)
|
930 |
+
{
|
931 |
+
if (isset($opt[$option]))
|
932 |
+
{
|
933 |
+
$opt['query_string'][$option] = $opt[$option];
|
934 |
+
}
|
935 |
+
}
|
936 |
+
|
937 |
+
$path = '/' . ((isset($opt['Streaming']) && $opt['Streaming'] == (bool) true) ? 'streaming-distribution' : 'distribution');
|
938 |
+
|
939 |
+
$opt = array_merge($opt, array('path' => $path));
|
940 |
+
|
941 |
+
return $this->authenticate('GET', $opt);
|
942 |
+
}
|
943 |
+
|
944 |
+
/**
|
945 |
+
* Gets distribution information for the specified distribution ID.
|
946 |
+
*
|
947 |
+
* Standard distributions are handled separately from streaming distributions. For streaming
|
948 |
+
* distributions, set the <code>Streaming</code> option to true.
|
949 |
+
*
|
950 |
+
* @param string $distribution_id (Required) The distribution ID returned from <create_distribution()> or <list_distributions()>.
|
951 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
952 |
+
* <li><code>Streaming</code> - <code>boolean</code> - Optional - Whether or not this should be for a streaming distribution. A value of <code>true</code> will create a streaming distribution. A value of <code>false</code> will create a standard distribution. The default value is <code>false</code>.</li>
|
953 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
954 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
955 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
956 |
+
* @link http://docs.amazonwebservices.com/AmazonCloudFront/latest/APIReference/GetDistribution.html GET Distribution
|
957 |
+
* @link http://docs.amazonwebservices.com/AmazonCloudFront/latest/APIReference/GetStreamingDistribution.html GET Streaming Distribution
|
958 |
+
*/
|
959 |
+
public function get_distribution_info($distribution_id, $opt = null)
|
960 |
+
{
|
961 |
+
if (!$opt) $opt = array();
|
962 |
+
|
963 |
+
$path = '/' . ((isset($opt['Streaming']) && $opt['Streaming'] == (bool) true) ? 'streaming-distribution' : 'distribution');
|
964 |
+
$path .= '/' . $distribution_id;
|
965 |
+
|
966 |
+
$opt = array_merge($opt, array('path' => $path));
|
967 |
+
|
968 |
+
return $this->authenticate('GET', $opt);
|
969 |
+
}
|
970 |
+
|
971 |
+
/**
|
972 |
+
* Deletes a disabled distribution. If distribution hasn't been disabled, Amazon CloudFront returns a
|
973 |
+
* <code>DistributionNotDisabled</code> error. Use <set_distribution_config()> to disable a distribution before
|
974 |
+
* attempting to delete.
|
975 |
+
*
|
976 |
+
* For an Adobe Real-Time Messaging Protocol (RTMP) streaming distribution, set the <code>Streaming</code> option
|
977 |
+
* to be <code>true</code>.
|
978 |
+
*
|
979 |
+
* @param string $distribution_id (Required) The distribution ID returned from <create_distribution()> or <list_distributions()>.
|
980 |
+
* @param string $etag (Required) The <code>ETag</code> header value retrieved from <get_distribution_config()>.
|
981 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
982 |
+
* <li><code>Streaming</code> - <code>boolean</code> - Optional - Whether or not this should be for a streaming distribution. A value of <code>true</code> will create a streaming distribution. A value of <code>false</code> will create a standard distribution. The default value is <code>false</code>.</li>
|
983 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
984 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
985 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
986 |
+
* @link http://docs.amazonwebservices.com/AmazonCloudFront/latest/APIReference/DeleteDistribution.html DELETE Distribution
|
987 |
+
* @link http://docs.amazonwebservices.com/AmazonCloudFront/latest/APIReference/DeleteStreamingDistribution.html DELETE Streaming Distribution
|
988 |
+
*/
|
989 |
+
public function delete_distribution($distribution_id, $etag, $opt = null)
|
990 |
+
{
|
991 |
+
if (!$opt) $opt = array();
|
992 |
+
|
993 |
+
$path = '/' . ((isset($opt['Streaming']) && $opt['Streaming'] == (bool) true) ? 'streaming-distribution' : 'distribution');
|
994 |
+
$path .= '/' . $distribution_id;
|
995 |
+
|
996 |
+
$opt = array_merge($opt, array('path' => $path, 'etag' => $etag));
|
997 |
+
|
998 |
+
return $this->authenticate('DELETE', $opt);
|
999 |
+
}
|
1000 |
+
|
1001 |
+
/**
|
1002 |
+
* Gets the current distribution configuration for the specified distribution ID.
|
1003 |
+
*
|
1004 |
+
* Standard distributions are handled separately from streaming distributions. For streaming
|
1005 |
+
* distributions, set the <code>Streaming</code> option to true.
|
1006 |
+
*
|
1007 |
+
* @param string $distribution_id (Required) The distribution ID returned from <create_distribution()> or <list_distributions()>.
|
1008 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
1009 |
+
* <li><code>Streaming</code> - <code>boolean</code> - Optional - Whether or not this should be for a streaming distribution. A value of <code>true</code> will create a streaming distribution. A value of <code>false</code> will create a standard distribution. The default value is <code>false</code>.</li>
|
1010 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
1011 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
1012 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
1013 |
+
* @link http://docs.amazonwebservices.com/AmazonCloudFront/latest/APIReference/GetConfig.html GET Distribution Config
|
1014 |
+
* @link http://docs.amazonwebservices.com/AmazonCloudFront/latest/APIReference/GetStreamingDistConfig.html GET Streaming Distribution Config
|
1015 |
+
*/
|
1016 |
+
public function get_distribution_config($distribution_id, $opt = null)
|
1017 |
+
{
|
1018 |
+
if (!$opt) $opt = array();
|
1019 |
+
|
1020 |
+
$path = '/' . ((isset($opt['Streaming']) && $opt['Streaming'] == (bool) true) ? 'streaming-distribution' : 'distribution');
|
1021 |
+
$path .= '/' . $distribution_id . '/config';
|
1022 |
+
|
1023 |
+
$opt = array_merge($opt, array('path' => $path));
|
1024 |
+
|
1025 |
+
return $this->authenticate('GET', $opt);
|
1026 |
+
}
|
1027 |
+
|
1028 |
+
/**
|
1029 |
+
* Sets a new distribution configuration for the specified distribution ID.
|
1030 |
+
*
|
1031 |
+
* Standard distributions are handled separately from streaming distributions. For streaming
|
1032 |
+
* distributions, set the <code>Streaming</code> option to true.
|
1033 |
+
*
|
1034 |
+
* @param string $distribution_id (Required) The distribution ID returned from <create_distribution()> or <list_distributions()>.
|
1035 |
+
* @param string $xml (Required) The DistributionConfig XML generated by <generate_config_xml()> or <update_config_xml()>.
|
1036 |
+
* @param string $etag (Required) The ETag header value retrieved from <get_distribution_config()>.
|
1037 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
1038 |
+
* <li><code>Streaming</code> - <code>boolean</code> - Optional - Whether or not this should be for a streaming distribution. A value of <code>true</code> will create a streaming distribution. A value of <code>false</code> will create a standard distribution. The default value is <code>false</code>.</li>
|
1039 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
1040 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
1041 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
1042 |
+
* @link http://docs.amazonwebservices.com/AmazonCloudFront/latest/APIReference/PutConfig.html PUT Distribution Config
|
1043 |
+
* @link http://docs.amazonwebservices.com/AmazonCloudFront/latest/APIReference/PutStreamingDistConfig.html PUT Streaming Distribution Config
|
1044 |
+
*/
|
1045 |
+
public function set_distribution_config($distribution_id, $xml, $etag, $opt = null)
|
1046 |
+
{
|
1047 |
+
if (!$opt) $opt = array();
|
1048 |
+
|
1049 |
+
$path = '/' . ((isset($opt['Streaming']) && $opt['Streaming'] == (bool) true) ? 'streaming-distribution' : 'distribution');
|
1050 |
+
$path .= '/' . $distribution_id . '/config';
|
1051 |
+
|
1052 |
+
$opt = array_merge($opt, array('path' => $path, 'xml' => $xml, 'etag' => $etag));
|
1053 |
+
|
1054 |
+
return $this->authenticate('PUT', $opt);
|
1055 |
+
}
|
1056 |
+
|
1057 |
+
|
1058 |
+
/*%******************************************************************************************%*/
|
1059 |
+
// Origin Access Identity
|
1060 |
+
|
1061 |
+
/**
|
1062 |
+
* Creates a new Amazon CloudFront origin access identity (OAI). You can create up to 100 OAIs per AWS
|
1063 |
+
* account. For more information, see the Amazon CloudFront Developer Guide.
|
1064 |
+
*
|
1065 |
+
* @param string $caller_reference (Required) A unique identifier for the request. A timestamp-appended string is recommended.
|
1066 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
1067 |
+
* <li><code>Comment</code> - <code>string</code> - Optional - A comment about the OAI.</li>
|
1068 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
1069 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
1070 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
1071 |
+
* @link http://docs.amazonwebservices.com/AmazonCloudFront/latest/APIReference/CreateOAI.html POST Origin Access Identity
|
1072 |
+
*/
|
1073 |
+
public function create_oai($caller_reference, $opt = null)
|
1074 |
+
{
|
1075 |
+
if (!$opt) $opt = array();
|
1076 |
+
|
1077 |
+
$path = '/origin-access-identity/cloudfront';
|
1078 |
+
$xml = $this->generate_oai_xml($caller_reference, $opt);
|
1079 |
+
|
1080 |
+
$opt = array_merge($opt, array('path' => $path, 'xml' => $xml));
|
1081 |
+
|
1082 |
+
return $this->authenticate('POST', $opt);
|
1083 |
+
}
|
1084 |
+
|
1085 |
+
/**
|
1086 |
+
* Gets a list of origin access identity (OAI) summaries. By default, the list is returned as one result.
|
1087 |
+
* If needed, paginate the list by specifying values for the <code>MaxItems</code> and <code>Marker</code>
|
1088 |
+
* parameters.
|
1089 |
+
*
|
1090 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
1091 |
+
* <li><code>Marker</code> - <code>string</code> - Optional - Use this when paginating results to indicate where in your list of distributions to begin. The results include distributions in the list that occur after the marker. To get the next page of results, set the Marker to the value of the NextMarker from the current page's response (which is also the ID of the last distribution on that page).</li>
|
1092 |
+
* <li><code>MaxItems</code> - <code>integer</code> - Optional - The maximum number of distributions you want in the response body. Maximum of 100.</li>
|
1093 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
1094 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
1095 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
1096 |
+
* @link http://docs.amazonwebservices.com/AmazonCloudFront/latest/APIReference/ListOAIs.html GET Origin Access Identity List
|
1097 |
+
*/
|
1098 |
+
public function list_oais($opt = null)
|
1099 |
+
{
|
1100 |
+
if (!$opt) $opt = array();
|
1101 |
+
$opt['query_string'] = array();
|
1102 |
+
|
1103 |
+
// Pass these to the query string
|
1104 |
+
foreach (array('Marker', 'MaxItems') as $option)
|
1105 |
+
{
|
1106 |
+
if (isset($opt[$option]))
|
1107 |
+
{
|
1108 |
+
$opt['query_string'][$option] = $opt[$option];
|
1109 |
+
}
|
1110 |
+
}
|
1111 |
+
|
1112 |
+
$path = '/origin-access-identity/cloudfront';
|
1113 |
+
|
1114 |
+
$opt = array_merge($opt, array('path' => $path));
|
1115 |
+
|
1116 |
+
return $this->authenticate('GET', $opt);
|
1117 |
+
}
|
1118 |
+
|
1119 |
+
/**
|
1120 |
+
* Gets information about an origin access identity (OAI).
|
1121 |
+
*
|
1122 |
+
* @param string $identity_id (Required) The Identity ID for an existing OAI.
|
1123 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
1124 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
1125 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
1126 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
1127 |
+
* @link http://docs.amazonwebservices.com/AmazonCloudFront/latest/APIReference/GetOAI.html GET Origin Access Identity
|
1128 |
+
*/
|
1129 |
+
public function get_oai($identity_id, $opt = null)
|
1130 |
+
{
|
1131 |
+
if (!$opt) $opt = array();
|
1132 |
+
|
1133 |
+
$path = '/origin-access-identity/cloudfront/' . $identity_id;
|
1134 |
+
|
1135 |
+
$opt = array_merge($opt, array('path' => $path));
|
1136 |
+
|
1137 |
+
return $this->authenticate('GET', $opt);
|
1138 |
+
}
|
1139 |
+
|
1140 |
+
/**
|
1141 |
+
* Deletes an Amazon CloudFront origin access identity (OAI). To delete an OAI, the identity must first
|
1142 |
+
* be disassociated from all distributions (by updating each distribution's configuration to omit the
|
1143 |
+
* <code>OriginAccessIdentity</code> element). Wait until each distribution's state is <code>Deployed</code>
|
1144 |
+
* before deleting the OAI.
|
1145 |
+
*
|
1146 |
+
* @param string $identity_id (Required) An Identity ID for an existing OAI.
|
1147 |
+
* @param string $etag (Required) The <code>ETag</code> header value retrieved from a call to <get_oai()>.
|
1148 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
1149 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
1150 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
1151 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
1152 |
+
* @link http://docs.amazonwebservices.com/AmazonCloudFront/latest/APIReference/DeleteOAI.html DELETE Origin Access Identity
|
1153 |
+
*/
|
1154 |
+
public function delete_oai($identity_id, $etag, $opt = null)
|
1155 |
+
{
|
1156 |
+
if (!$opt) $opt = array();
|
1157 |
+
|
1158 |
+
$path = '/origin-access-identity/cloudfront/' . $identity_id;
|
1159 |
+
|
1160 |
+
$opt = array_merge($opt, array('path' => $path, 'etag' => $etag));
|
1161 |
+
|
1162 |
+
return $this->authenticate('DELETE', $opt);
|
1163 |
+
}
|
1164 |
+
|
1165 |
+
/**
|
1166 |
+
* Gets the configuration of the origin access identity (OAI) for the specified identity ID.
|
1167 |
+
*
|
1168 |
+
* @param string $identity_id (Required) An Identity ID for an existing OAI.
|
1169 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
1170 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
1171 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
1172 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
1173 |
+
* @link http://docs.amazonwebservices.com/AmazonCloudFront/latest/APIReference/GetOAIConfig.html GET Origin Access Identity Config
|
1174 |
+
*/
|
1175 |
+
public function get_oai_config($identity_id, $opt = null)
|
1176 |
+
{
|
1177 |
+
if (!$opt) $opt = array();
|
1178 |
+
|
1179 |
+
$path = '/origin-access-identity/cloudfront/' . $identity_id . '/config';
|
1180 |
+
|
1181 |
+
$opt = array_merge($opt, array('path' => $path));
|
1182 |
+
|
1183 |
+
return $this->authenticate('GET', $opt);
|
1184 |
+
}
|
1185 |
+
|
1186 |
+
/**
|
1187 |
+
* Sets the configuration for an Amazon CloudFront origin access identity (OAI). Use this when updating
|
1188 |
+
* the configuration. Currently, only comments may be updated. Follow the same process as when updating
|
1189 |
+
* an identity's configuration as you do when updating a distribution's configuration. For more
|
1190 |
+
* information, go to Updating a Distribution's Configuration in the Amazon CloudFront Developer Guide.
|
1191 |
+
*
|
1192 |
+
* When attempting to change configuration items that are not allowed to be updated, Amazon CloudFront
|
1193 |
+
* returns an <code>IllegalUpdate</code> error.
|
1194 |
+
*
|
1195 |
+
* @param string $identity_id (Required) An Identity ID for an existing OAI.
|
1196 |
+
* @param string $xml (Required) The configuration XML generated by <generate_oai_xml()>.
|
1197 |
+
* @param string $etag (Required) The ETag header value retrieved from a call to <get_distribution_config()>.
|
1198 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
1199 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
1200 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
1201 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
1202 |
+
* @link http://docs.amazonwebservices.com/AmazonCloudFront/latest/APIReference/PutOAIConfig.html PUT Origin Access Identity Config
|
1203 |
+
*/
|
1204 |
+
public function set_oai_config($identity_id, $xml, $etag, $opt = null)
|
1205 |
+
{
|
1206 |
+
if (!$opt) $opt = array();
|
1207 |
+
|
1208 |
+
$path = '/origin-access-identity/cloudfront/' . $identity_id . '/config';
|
1209 |
+
|
1210 |
+
$opt = array_merge($opt, array('path' => $path, 'xml' => $xml, 'etag' => $etag));
|
1211 |
+
|
1212 |
+
return $this->authenticate('PUT', $opt);
|
1213 |
+
}
|
1214 |
+
|
1215 |
+
|
1216 |
+
/*%******************************************************************************************%*/
|
1217 |
+
// INVALIDATION
|
1218 |
+
|
1219 |
+
/**
|
1220 |
+
* Creates a new invalidation request.
|
1221 |
+
*
|
1222 |
+
* @param string $distribution_id (Required) The distribution ID returned from <create_distribution()> or <list_distributions()>.
|
1223 |
+
* @param string $caller_reference (Required) A unique identifier for the request. A timestamp-appended string is recommended.
|
1224 |
+
* @param string|array $paths (Required) One or more paths to set for invalidation. Pass a string for a single value, or an indexed array for multiple values. values.
|
1225 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
1226 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
1227 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
1228 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
1229 |
+
* @link http://docs.amazonwebservices.com/AmazonCloudFront/latest/APIReference/CreateInvalidation.html POST Invalidation
|
1230 |
+
*/
|
1231 |
+
public function create_invalidation($distribution_id, $caller_reference, $paths, $opt = null)
|
1232 |
+
{
|
1233 |
+
if (!$opt) $opt = array();
|
1234 |
+
$opt['Paths'] = $paths;
|
1235 |
+
|
1236 |
+
$path = '/distribution/' . $distribution_id . '/invalidation';
|
1237 |
+
$xml = $this->generate_invalidation_xml($caller_reference, $opt);
|
1238 |
+
|
1239 |
+
$opt = array_merge($opt, array('path' => $path, 'xml' => $xml));
|
1240 |
+
|
1241 |
+
return $this->authenticate('POST', $opt);
|
1242 |
+
}
|
1243 |
+
|
1244 |
+
/**
|
1245 |
+
* Gets a list of invalidations. By default, the list is returned as one result. If needed, paginate the
|
1246 |
+
* list by specifying values for the <code>MaxItems</code> and <code>Marker</code> parameters.
|
1247 |
+
*
|
1248 |
+
* @param string $distribution_id (Required) The distribution ID returned from <create_distribution()> or <list_distributions()>.
|
1249 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
1250 |
+
* <li><code>Marker</code> - <code>string</code> - Optional - Use this when paginating results to indicate where in the list of invalidations to begin. The results include invalidations in the list that occur after the marker. To get the next page of results, set the <code>Marker</code> parameter to the value of the <code>NextMarker</code> parameter from the current page's response, which is also the ID of the last invalidation on that page.</li>
|
1251 |
+
* <li><code>MaxItems</code> - <code>integer</code> - Optional - The maximum number of invalidations you want in the response body. A maximum value of 100 can be used.</li>
|
1252 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
1253 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
1254 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
1255 |
+
* @link http://docs.amazonwebservices.com/AmazonCloudFront/latest/APIReference/ListInvalidation.html GET Invalidation List
|
1256 |
+
*/
|
1257 |
+
public function list_invalidations($distribution_id, $opt = null)
|
1258 |
+
{
|
1259 |
+
if (!$opt) $opt = array();
|
1260 |
+
$opt['query_string'] = array();
|
1261 |
+
|
1262 |
+
// Pass these to the query string
|
1263 |
+
foreach (array('Marker', 'MaxItems') as $option)
|
1264 |
+
{
|
1265 |
+
if (isset($opt[$option]))
|
1266 |
+
{
|
1267 |
+
$opt['query_string'][$option] = $opt[$option];
|
1268 |
+
}
|
1269 |
+
}
|
1270 |
+
|
1271 |
+
$path = '/distribution/' . $distribution_id . '/invalidation';
|
1272 |
+
|
1273 |
+
$opt = array_merge($opt, array('path' => $path));
|
1274 |
+
|
1275 |
+
return $this->authenticate('GET', $opt);
|
1276 |
+
}
|
1277 |
+
|
1278 |
+
/**
|
1279 |
+
* Gets information about an invalidation.
|
1280 |
+
*
|
1281 |
+
* @param string $distribution_id (Required) The distribution ID returned from <create_distribution()> or <list_distributions()>.
|
1282 |
+
* @param string $invalidation_id (Required) The invalidation ID returned from <create_invalidation()> or <list_invalidations()>.
|
1283 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
1284 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
1285 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
1286 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
1287 |
+
* @link http://docs.amazonwebservices.com/AmazonCloudFront/latest/APIReference/GetInvalidation.html GET Invalidation
|
1288 |
+
*/
|
1289 |
+
public function get_invalidation($distribution_id, $invalidation_id, $opt = null)
|
1290 |
+
{
|
1291 |
+
if (!$opt) $opt = array();
|
1292 |
+
|
1293 |
+
$path = '/distribution/' . $distribution_id . '/invalidation/' . $invalidation_id;
|
1294 |
+
|
1295 |
+
$opt = array_merge($opt, array('path' => $path));
|
1296 |
+
|
1297 |
+
return $this->authenticate('GET', $opt);
|
1298 |
+
}
|
1299 |
+
|
1300 |
+
|
1301 |
+
/*%******************************************************************************************%*/
|
1302 |
+
// CONVENIENCE METHODS
|
1303 |
+
|
1304 |
+
/**
|
1305 |
+
* Gets a simplified list of standard distribution IDs.
|
1306 |
+
*
|
1307 |
+
* @param string $pcre (Optional) A Perl-Compatible Regular Expression (PCRE) to filter the distribution caller references against.
|
1308 |
+
* @return array A list of standard distribution IDs.
|
1309 |
+
*/
|
1310 |
+
public function get_distribution_list($pcre = null)
|
1311 |
+
{
|
1312 |
+
if ($this->use_batch_flow)
|
1313 |
+
{
|
1314 |
+
throw new CloudFront_Exception(__FUNCTION__ . '() cannot be batch requested');
|
1315 |
+
}
|
1316 |
+
|
1317 |
+
$list = $this->list_distributions();
|
1318 |
+
if ($list = $list->body->Id())
|
1319 |
+
{
|
1320 |
+
$list = $list->map_string($pcre);
|
1321 |
+
return $list;
|
1322 |
+
}
|
1323 |
+
|
1324 |
+
return array();
|
1325 |
+
}
|
1326 |
+
|
1327 |
+
/**
|
1328 |
+
* Gets a simplified list of streaming distribution IDs.
|
1329 |
+
*
|
1330 |
+
* @param string $pcre (Optional) A Perl-Compatible Regular Expression (PCRE) to filter the distribution caller references against.
|
1331 |
+
* @return array A list of streaming distribution IDs.
|
1332 |
+
*/
|
1333 |
+
public function get_streaming_distribution_list($pcre = null)
|
1334 |
+
{
|
1335 |
+
if ($this->use_batch_flow)
|
1336 |
+
{
|
1337 |
+
throw new CloudFront_Exception(__FUNCTION__ . '() cannot be batch requested');
|
1338 |
+
}
|
1339 |
+
|
1340 |
+
$list = $this->list_distributions(array(
|
1341 |
+
'Streaming' => true
|
1342 |
+
));
|
1343 |
+
if ($list = $list->body->Id())
|
1344 |
+
{
|
1345 |
+
$list = $list->map_string($pcre);
|
1346 |
+
return $list;
|
1347 |
+
}
|
1348 |
+
|
1349 |
+
return array();
|
1350 |
+
}
|
1351 |
+
|
1352 |
+
/**
|
1353 |
+
* Gets a simplified list of origin access identity (OAI) IDs.
|
1354 |
+
*
|
1355 |
+
* @param string $pcre (Optional) A Perl-Compatible Regular Expression (PCRE) to filter the OAI caller references against.
|
1356 |
+
* @return array A list of OAI IDs.
|
1357 |
+
*/
|
1358 |
+
public function get_oai_list($pcre = null)
|
1359 |
+
{
|
1360 |
+
if ($this->use_batch_flow)
|
1361 |
+
{
|
1362 |
+
throw new CloudFront_Exception(__FUNCTION__ . '() cannot be batch requested');
|
1363 |
+
}
|
1364 |
+
|
1365 |
+
$list = $this->list_oais();
|
1366 |
+
if ($list = $list->body->Id())
|
1367 |
+
{
|
1368 |
+
$list = $list->map_string($pcre);
|
1369 |
+
return $list;
|
1370 |
+
}
|
1371 |
+
|
1372 |
+
return array();
|
1373 |
+
}
|
1374 |
+
|
1375 |
+
|
1376 |
+
/*%******************************************************************************************%*/
|
1377 |
+
// URLS
|
1378 |
+
|
1379 |
+
/**
|
1380 |
+
* Generates a time-limited and/or query signed request for a private file with additional optional
|
1381 |
+
* restrictions.
|
1382 |
+
*
|
1383 |
+
* @param string $distribution_hostname (Required) The hostname of the distribution. Obtained from <create_distribution()> or <get_distribution_info()>.
|
1384 |
+
* @param string $filename (Required) The file name of the object. Query parameters can be included. You can use multicharacter match wild cards () or a single-character match wild card (?) anywhere in the string.
|
1385 |
+
* @param integer|string $expires (Required) The expiration time expressed either as a number of seconds since UNIX Epoch, or any string that <php:strtotime()> can understand.
|
1386 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
1387 |
+
* <li><code>BecomeAvailable</code> - <code>integer|string</code> - Optional - The time when the private URL becomes active. Can be expressed either as a number of seconds since UNIX Epoch, or any string that <code>strtotime()</code> can understand.</li>
|
1388 |
+
* <li><code>IPAddress</code> - <code>string</code> - Optional - A single IP address to restrict the access to.</li>
|
1389 |
+
* <li><code>Secure</code> - <code>boolean</code> - Optional - Whether or not to use HTTPS as the protocol scheme. A value of <code>true</code> uses <code>https</code>. A value of <code>false</code> uses <code>http</code>. The default value is <code>false</code>.</li></ul>
|
1390 |
+
* @return string The file URL with authentication parameters.
|
1391 |
+
* @link http://docs.amazonwebservices.com/AmazonCloudFront/latest/DeveloperGuide/PrivateContent.html Serving Private Content
|
1392 |
+
*/
|
1393 |
+
public function get_private_object_url($distribution_hostname, $filename, $expires, $opt = null)
|
1394 |
+
{
|
1395 |
+
if (!$this->key_pair_id || !$this->private_key)
|
1396 |
+
{
|
1397 |
+
throw new CloudFront_Exception('You must set both a Amazon CloudFront keypair ID and an RSA private key for that keypair before using ' . __FUNCTION__ . '()');
|
1398 |
+
}
|
1399 |
+
if (!function_exists('openssl_sign'))
|
1400 |
+
{
|
1401 |
+
throw new CloudFront_Exception(__FUNCTION__ . '() uses functions from the OpenSSL PHP Extension <http://php.net/openssl>, which is not installed in this PHP installation');
|
1402 |
+
}
|
1403 |
+
|
1404 |
+
if (!$opt) $opt = array();
|
1405 |
+
|
1406 |
+
$resource = '';
|
1407 |
+
$expiration_key = 'Expires';
|
1408 |
+
if (is_string($expires))
|
1409 |
+
{
|
1410 |
+
$expires = strtotime($expires);
|
1411 |
+
}
|
1412 |
+
$conjunction = (strpos($filename, '?') === false ? '?' : '&');
|
1413 |
+
|
1414 |
+
// Determine the protocol scheme
|
1415 |
+
switch (substr($distribution_hostname, 0, 1) === 's')
|
1416 |
+
{
|
1417 |
+
// Streaming
|
1418 |
+
case 's':
|
1419 |
+
$scheme = 'rtmp';
|
1420 |
+
$resource = str_replace(array('%3F', '%3D', '%26', '%2F'), array('?', '=', '&', '/'), rawurlencode($filename));
|
1421 |
+
break;
|
1422 |
+
|
1423 |
+
// Default
|
1424 |
+
case 'd':
|
1425 |
+
default:
|
1426 |
+
$scheme = 'http';
|
1427 |
+
$scheme .= (isset($opt['Secure']) && $opt['Secure'] === true ? 's' : '');
|
1428 |
+
$resource = $scheme . '://' . $distribution_hostname . '/' . str_replace(array('%3F', '%3D', '%26', '%2F'), array('?', '=', '&', '/'), rawurlencode($filename));
|
1429 |
+
break;
|
1430 |
+
}
|
1431 |
+
|
1432 |
+
// Generate default policy
|
1433 |
+
$raw_policy = array(
|
1434 |
+
'Statement' => array(
|
1435 |
+
array(
|
1436 |
+
'Resource' => $resource,
|
1437 |
+
'Condition' => array(
|
1438 |
+
'DateLessThan' => array(
|
1439 |
+
'AWS:EpochTime' => $expires
|
1440 |
+
)
|
1441 |
+
)
|
1442 |
+
)
|
1443 |
+
)
|
1444 |
+
);
|
1445 |
+
|
1446 |
+
// Become Available
|
1447 |
+
if (isset($opt['BecomeAvailable']))
|
1448 |
+
{
|
1449 |
+
// Switch to 'Policy' instead
|
1450 |
+
$expiration_key = 'Policy';
|
1451 |
+
|
1452 |
+
// Update the policy
|
1453 |
+
$raw_policy['Statement'][0]['Condition']['DateGreaterThan'] = array(
|
1454 |
+
'AWS:EpochTime' => strtotime($opt['BecomeAvailable'])
|
1455 |
+
);
|
1456 |
+
}
|
1457 |
+
|
1458 |
+
// IP Address
|
1459 |
+
if (isset($opt['IPAddress']))
|
1460 |
+
{
|
1461 |
+
// Switch to 'Policy' instead
|
1462 |
+
$expiration_key = 'Policy';
|
1463 |
+
|
1464 |
+
// Update the policy
|
1465 |
+
$raw_policy['Statement'][0]['Condition']['IpAddress'] = array(
|
1466 |
+
'AWS:SourceIp' => $opt['IPAddress']
|
1467 |
+
);
|
1468 |
+
}
|
1469 |
+
|
1470 |
+
// Munge the policy
|
1471 |
+
$json_policy = str_replace('\/', '/', json_encode($raw_policy));
|
1472 |
+
$json_policy = $this->util->decode_uhex($json_policy);
|
1473 |
+
$encoded_policy = strtr(base64_encode($json_policy), '+=/', '-_~');
|
1474 |
+
|
1475 |
+
// Generate the signature
|
1476 |
+
openssl_sign($json_policy, $signature, $this->private_key);
|
1477 |
+
$signature = strtr(base64_encode($signature), '+=/', '-_~');
|
1478 |
+
|
1479 |
+
return $scheme . '://' . $distribution_hostname . '/'
|
1480 |
+
. str_replace(array('%3F', '%3D', '%26', '%2F'), array('?', '=', '&', '/'), rawurlencode($filename))
|
1481 |
+
. $conjunction
|
1482 |
+
. ($expiration_key === 'Expires' ? ($expiration_key . '=' . $expires) : ($expiration_key . '=' . $encoded_policy))
|
1483 |
+
. '&Key-Pair-Id=' . $this->key_pair_id
|
1484 |
+
. '&Signature=' . $signature;
|
1485 |
+
}
|
1486 |
+
}
|
sdk/Aws_v1/services/cloudsearch.class.php
ADDED
@@ -0,0 +1,573 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* Copyright 2010-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
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 |
+
* A copy of the License is located at
|
8 |
+
*
|
9 |
+
* http://aws.amazon.com/apache2.0
|
10 |
+
*
|
11 |
+
* or in the "license" file accompanying this file. This file is distributed
|
12 |
+
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
|
13 |
+
* express or implied. See the License for the specific language governing
|
14 |
+
* permissions and limitations under the License.
|
15 |
+
*/
|
16 |
+
|
17 |
+
/**
|
18 |
+
* You use the Configuration Service to create, configure, and manage search domains. Amazon
|
19 |
+
* CloudSearch configuration requests are submitted to
|
20 |
+
* <code>cloudsearch.us-east-1.amazonaws.com</code> using the AWS Query protocol.
|
21 |
+
*
|
22 |
+
* @version 2013.01.14
|
23 |
+
* @license See the included NOTICE.md file for complete information.
|
24 |
+
* @copyright See the included NOTICE.md file for complete information.
|
25 |
+
* @link http://aws.amazon.com/cloudsearch/ Amazon CloudSearch
|
26 |
+
* @link http://aws.amazon.com/cloudsearch/documentation/ Amazon CloudSearch documentation
|
27 |
+
*/
|
28 |
+
class AmazonCloudSearch extends CFRuntime
|
29 |
+
{
|
30 |
+
/*%******************************************************************************************%*/
|
31 |
+
// CLASS CONSTANTS
|
32 |
+
|
33 |
+
/**
|
34 |
+
* Specify the queue URL for the United States East (Northern Virginia) Region.
|
35 |
+
*/
|
36 |
+
const REGION_US_E1 = 'cloudsearch.us-east-1.amazonaws.com';
|
37 |
+
|
38 |
+
/**
|
39 |
+
* Specify the queue URL for the United States East (Northern Virginia) Region.
|
40 |
+
*/
|
41 |
+
const REGION_VIRGINIA = self::REGION_US_E1;
|
42 |
+
|
43 |
+
/**
|
44 |
+
* Default service endpoint.
|
45 |
+
*/
|
46 |
+
const DEFAULT_URL = self::REGION_US_E1;
|
47 |
+
|
48 |
+
|
49 |
+
/*%******************************************************************************************%*/
|
50 |
+
// CONSTRUCTOR
|
51 |
+
|
52 |
+
/**
|
53 |
+
* Constructs a new instance of <AmazonCloudSearch>.
|
54 |
+
*
|
55 |
+
* @param array $options (Optional) An associative array of parameters that can have the following keys: <ul>
|
56 |
+
* <li><code>certificate_authority</code> - <code>boolean</code> - Optional - Determines which Cerificate Authority file to use. A value of boolean <code>false</code> will use the Certificate Authority file available on the system. A value of boolean <code>true</code> will use the Certificate Authority provided by the SDK. Passing a file system path to a Certificate Authority file (chmodded to <code>0755</code>) will use that. Leave this set to <code>false</code> if you're not sure.</li>
|
57 |
+
* <li><code>credentials</code> - <code>string</code> - Optional - The name of the credential set to use for authentication.</li>
|
58 |
+
* <li><code>default_cache_config</code> - <code>string</code> - Optional - This option allows a preferred storage type to be configured for long-term caching. This can be changed later using the <set_cache_config()> method. Valid values are: <code>apc</code>, <code>xcache</code>, or a file system path such as <code>./cache</code> or <code>/tmp/cache/</code>.</li>
|
59 |
+
* <li><code>key</code> - <code>string</code> - Optional - Your AWS key, or a session key. If blank, the default credential set will be used.</li>
|
60 |
+
* <li><code>secret</code> - <code>string</code> - Optional - Your AWS secret key, or a session secret key. If blank, the default credential set will be used.</li>
|
61 |
+
* <li><code>token</code> - <code>string</code> - Optional - An AWS session token.</li></ul>
|
62 |
+
* @return void
|
63 |
+
*/
|
64 |
+
public function __construct(array $options = array())
|
65 |
+
{
|
66 |
+
$this->api_version = '2011-02-01';
|
67 |
+
$this->hostname = self::DEFAULT_URL;
|
68 |
+
$this->auth_class = 'AuthV4Query';
|
69 |
+
|
70 |
+
return parent::__construct($options);
|
71 |
+
}
|
72 |
+
|
73 |
+
|
74 |
+
/*%******************************************************************************************%*/
|
75 |
+
// SETTERS
|
76 |
+
|
77 |
+
/**
|
78 |
+
* This allows you to explicitly sets the region for the service to use.
|
79 |
+
*
|
80 |
+
* @param string $region (Required) The region to explicitly set. Available options are <REGION_US_E1>.
|
81 |
+
* @return $this A reference to the current instance.
|
82 |
+
*/
|
83 |
+
public function set_region($region)
|
84 |
+
{
|
85 |
+
// @codeCoverageIgnoreStart
|
86 |
+
$this->set_hostname($region);
|
87 |
+
return $this;
|
88 |
+
// @codeCoverageIgnoreEnd
|
89 |
+
}
|
90 |
+
|
91 |
+
|
92 |
+
/*%******************************************************************************************%*/
|
93 |
+
// SERVICE METHODS
|
94 |
+
|
95 |
+
/**
|
96 |
+
* Creates a new search domain.
|
97 |
+
*
|
98 |
+
* @param string $domain_name (Required) A string that represents the name of a domain. Domain names must be unique across the domains owned by an account within an AWS region. Domain names must start with a letter or number and can contain the following characters: a-z (lowercase), 0-9, and - (hyphen). Uppercase letters and underscores are not allowed. [Constraints: The value must be between 3 and 28 characters, and must match the following regular expression pattern: <code>[a-z][a-z0-9\-]+</code>]
|
99 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
100 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
101 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
102 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
103 |
+
*/
|
104 |
+
public function create_domain($domain_name, $opt = null)
|
105 |
+
{
|
106 |
+
if (!$opt) $opt = array();
|
107 |
+
$opt['DomainName'] = $domain_name;
|
108 |
+
|
109 |
+
return $this->authenticate('CreateDomain', $opt);
|
110 |
+
}
|
111 |
+
|
112 |
+
/**
|
113 |
+
* Configures an <code>IndexField</code> for the search domain. Used to create new fields and
|
114 |
+
* modify existing ones. If the field exists, the new configuration replaces the old one. You can
|
115 |
+
* configure a maximum of 200 index fields.
|
116 |
+
*
|
117 |
+
* @param string $domain_name (Required) A string that represents the name of a domain. Domain names must be unique across the domains owned by an account within an AWS region. Domain names must start with a letter or number and can contain the following characters: a-z (lowercase), 0-9, and - (hyphen). Uppercase letters and underscores are not allowed. [Constraints: The value must be between 3 and 28 characters, and must match the following regular expression pattern: <code>[a-z][a-z0-9\-]+</code>]
|
118 |
+
* @param array $index_field (Required) Defines a field in the index, including its name, type, and the source of its data. The <code>IndexFieldType</code> indicates which of the options will be present. It is invalid to specify options for a type other than the <code>IndexFieldType</code>. <ul>
|
119 |
+
* <li><code>x</code> - <code>array</code> - Optional - This represents a simple array index. <ul>
|
120 |
+
* <li><code>IndexFieldName</code> - <code>string</code> - Required - The name of a field in the search index. Field names must begin with a letter and can contain the following characters: a-z (lowercase), 0-9, and _ (underscore). Uppercase letters and hyphens are not allowed. The names "body", "docid", and "text_relevance" are reserved and cannot be specified as field or rank expression names. [Constraints: The value must be between 1 and 64 characters, and must match the following regular expression pattern: <code>[a-z][a-z0-9_]*</code>]</li>
|
121 |
+
* <li><code>IndexFieldType</code> - <code>string</code> - Required - The type of field. Based on this type, exactly one of the <code>UIntOptions</code>, <code>LiteralOptions</code> or <code>TextOptions</code> must be present. [Allowed values: <code>uint</code>, <code>literal</code>, <code>text</code>]</li>
|
122 |
+
* <li><code>UIntOptions</code> - <code>array</code> - Optional - Options for an unsigned integer field. Present if <code>IndexFieldType</code> specifies the field is of type unsigned integer. <ul>
|
123 |
+
* <li><code>x</code> - <code>array</code> - Optional - This represents a simple array index. <ul>
|
124 |
+
* <li><code>DefaultValue</code> - <code>integer</code> - Optional - The default value for an unsigned integer field.</li>
|
125 |
+
* </ul></li>
|
126 |
+
* </ul></li>
|
127 |
+
* <li><code>LiteralOptions</code> - <code>array</code> - Optional - Options for literal field. Present if <code>IndexFieldType</code> specifies the field is of type literal. <ul>
|
128 |
+
* <li><code>x</code> - <code>array</code> - Optional - This represents a simple array index. <ul>
|
129 |
+
* <li><code>DefaultValue</code> - <code>string</code> - Optional - The default value for a literal field.</li>
|
130 |
+
* <li><code>SearchEnabled</code> - <code>boolean</code> - Optional - Specifies whether search is enabled for this field.</li>
|
131 |
+
* <li><code>FacetEnabled</code> - <code>boolean</code> - Optional - Specifies whether facets are enabled for this field.</li>
|
132 |
+
* <li><code>ResultEnabled</code> - <code>boolean</code> - Optional - Specifies whether values of this field can be returned in search results and used for ranking.</li>
|
133 |
+
* </ul></li>
|
134 |
+
* </ul></li>
|
135 |
+
* <li><code>TextOptions</code> - <code>array</code> - Optional - Options for text field. Present if <code>IndexFieldType</code> specifies the field is of type text. <ul>
|
136 |
+
* <li><code>x</code> - <code>array</code> - Optional - This represents a simple array index. <ul>
|
137 |
+
* <li><code>DefaultValue</code> - <code>string</code> - Optional - The default value for a text field.</li>
|
138 |
+
* <li><code>FacetEnabled</code> - <code>boolean</code> - Optional - Specifies whether facets are enabled for this field.</li>
|
139 |
+
* <li><code>ResultEnabled</code> - <code>boolean</code> - Optional - Specifies whether values of this field can be returned in search results and used for ranking.</li>
|
140 |
+
* </ul></li>
|
141 |
+
* </ul></li>
|
142 |
+
* <li><code>SourceAttributes</code> - <code>array</code> - Optional - An optional list of source attributes that provide data for this index field. If not specified, the data is pulled from a source attribute with the same name as this <code>IndexField</code>. When one or more source attributes are specified, an optional data transformation can be applied to the source data when populating the index field. You can configure a maximum of 20 sources for an <code>IndexField</code>. <ul>
|
143 |
+
* <li><code>x</code> - <code>array</code> - Optional - This represents a simple array index. <ul>
|
144 |
+
* <li><code>SourceDataFunction</code> - <code>string</code> - Required - Identifies the transformation to apply when copying data from a source attribute. [Allowed values: <code>Copy</code>, <code>TrimTitle</code>, <code>Map</code>]</li>
|
145 |
+
* <li><code>SourceDataCopy</code> - <code>array</code> - Optional - Copies data from a source document attribute to an <code>IndexField</code>. <ul>
|
146 |
+
* <li><code>x</code> - <code>array</code> - Optional - This represents a simple array index. <ul>
|
147 |
+
* <li><code>SourceName</code> - <code>string</code> - Required - The name of the document source field to add to this <code>IndexField</code>. [Constraints: The value must be between 1 and 64 characters, and must match the following regular expression pattern: <code>[a-z][a-z0-9_]*</code>]</li>
|
148 |
+
* <li><code>DefaultValue</code> - <code>string</code> - Optional - The value of a field or source document attribute.</li>
|
149 |
+
* </ul></li>
|
150 |
+
* </ul></li>
|
151 |
+
* <li><code>SourceDataTrimTitle</code> - <code>array</code> - Optional - Trims common title words from a source document attribute when populating an <code>IndexField</code>. This can be used to create an <code>IndexField</code> you can use for sorting. <ul>
|
152 |
+
* <li><code>x</code> - <code>array</code> - Optional - This represents a simple array index. <ul>
|
153 |
+
* <li><code>SourceName</code> - <code>string</code> - Required - The name of the document source field to add to this <code>IndexField</code>. [Constraints: The value must be between 1 and 64 characters, and must match the following regular expression pattern: <code>[a-z][a-z0-9_]*</code>]</li>
|
154 |
+
* <li><code>DefaultValue</code> - <code>string</code> - Optional - The value of a field or source document attribute.</li>
|
155 |
+
* <li><code>Separator</code> - <code>string</code> - Optional - The separator that follows the text to trim.</li>
|
156 |
+
* <li><code>Language</code> - <code>string</code> - Optional - An <a href="http://tools.ietf.org/html/rfc4646">IETF RFC 4646</a> language code. Only the primary language is considered. English (en) is currently the only supported language. [Constraints: The value must match the following regular expression pattern: <code>[a-zA-Z]{2,8}(?:-[a-zA-Z]{2,8})*</code>]</li>
|
157 |
+
* </ul></li>
|
158 |
+
* </ul></li>
|
159 |
+
* <li><code>SourceDataMap</code> - <code>array</code> - Optional - Maps source document attribute values to new values when populating the <code>IndexField</code>. <ul>
|
160 |
+
* <li><code>x</code> - <code>array</code> - Optional - This represents a simple array index. <ul>
|
161 |
+
* <li><code>SourceName</code> - <code>string</code> - Required - The name of the document source field to add to this <code>IndexField</code>. [Constraints: The value must be between 1 and 64 characters, and must match the following regular expression pattern: <code>[a-z][a-z0-9_]*</code>]</li>
|
162 |
+
* <li><code>DefaultValue</code> - <code>string</code> - Optional - The value of a field or source document attribute.</li>
|
163 |
+
* <li><code>Cases</code> - <code>array</code> - Optional - A map that translates source field values to custom values. <ul>
|
164 |
+
* <li><code>x</code> - <code>array</code> - Optional - This represents a simple array index. <ul>
|
165 |
+
* <li><code>[custom-key]</code> - <code>string</code> - Optional - The value of a field or source document attribute.</li>
|
166 |
+
* </ul></li>
|
167 |
+
* </ul></li>
|
168 |
+
* </ul></li>
|
169 |
+
* </ul></li>
|
170 |
+
* </ul></li>
|
171 |
+
* </ul></li>
|
172 |
+
* </ul></li>
|
173 |
+
* </ul>
|
174 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
175 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
176 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
177 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
178 |
+
*/
|
179 |
+
public function define_index_field($domain_name, $index_field, $opt = null)
|
180 |
+
{
|
181 |
+
if (!$opt) $opt = array();
|
182 |
+
$opt['DomainName'] = $domain_name;
|
183 |
+
|
184 |
+
// Required map (non-list)
|
185 |
+
$opt = array_merge($opt, CFComplexType::map(array(
|
186 |
+
'IndexField' => (is_array($index_field) ? $index_field : array($index_field))
|
187 |
+
), 'member'));
|
188 |
+
|
189 |
+
return $this->authenticate('DefineIndexField', $opt);
|
190 |
+
}
|
191 |
+
|
192 |
+
/**
|
193 |
+
* Configures a <code>RankExpression</code> for the search domain. Used to create new rank
|
194 |
+
* expressions and modify existing ones. If the expression exists, the new configuration replaces
|
195 |
+
* the old one. You can configure a maximum of 50 rank expressions.
|
196 |
+
*
|
197 |
+
* @param string $domain_name (Required) A string that represents the name of a domain. Domain names must be unique across the domains owned by an account within an AWS region. Domain names must start with a letter or number and can contain the following characters: a-z (lowercase), 0-9, and - (hyphen). Uppercase letters and underscores are not allowed. [Constraints: The value must be between 3 and 28 characters, and must match the following regular expression pattern: <code>[a-z][a-z0-9\-]+</code>]
|
198 |
+
* @param array $rank_expression (Required) A named expression that can be evaluated at search time and used for ranking or thresholding in a search query. <ul>
|
199 |
+
* <li><code>x</code> - <code>array</code> - Optional - This represents a simple array index. <ul>
|
200 |
+
* <li><code>RankName</code> - <code>string</code> - Required - The name of a rank expression. Rank expression names must begin with a letter and can contain the following characters: a-z (lowercase), 0-9, and _ (underscore). Uppercase letters and hyphens are not allowed. The names "body", "docid", and "text_relevance" are reserved and cannot be specified as field or rank expression names. [Constraints: The value must be between 1 and 64 characters, and must match the following regular expression pattern: <code>[a-z][a-z0-9_]*</code>]</li>
|
201 |
+
* <li><code>RankExpression</code> - <code>string</code> - Required - The expression to evaluate for ranking or thresholding while processing a search request. The <code>RankExpression</code> syntax is based on JavaScript expressions and supports:<ul><li>Integer, floating point, hex and octal literals</li><li>Shortcut evaluation of logical operators such that an expression <code>a || b</code> evaluates to the value <code>a</code> if <code>a</code> is <code>true</code> without evaluting <code>b</code> at all</li><li>JavaScript order of precendence for operators</li><li>Arithmetic operators: <code>+ - * / %</code> </li><li>Boolean operators (including the ternary operator)</li><li>Bitwise operators</li><li>Comparison operators</li><li>Common mathematic functions: <code>abs ceil erf exp floor lgamma ln log2 log10 max min sqrt pow</code> </li><li>Trigonometric library functions: <code>acosh acos asinh asin atanh atan cosh cos sinh sin tanh tan</code> </li><li>Random generation of a number between 0 and 1: <code>rand</code> </li><li>Current time in epoch: <code>time</code> </li><li>The <code>min max</code> functions that operate on a variable argument list</li></ul>Intermediate results are calculated as double precision floating point values. The final return value of a <code>RankExpression</code> is automatically converted from floating point to a 32-bit unsigned integer by rounding to the nearest integer, with a natural floor of 0 and a ceiling of max(uint32_t), 4294967295. Mathematical errors such as dividing by 0 will fail during evaluation and return a value of 0. The source data for a <code>RankExpression</code> can be the name of an <code>IndexField</code> of type uint, another <code>RankExpression</code> or the reserved name <em>text_relevance</em>. The text_relevance source is defined to return an integer from 0 to 1000 (inclusive) to indicate how relevant a document is to the search request, taking into account repetition of search terms in the document and proximity of search terms to each other in each matching <code>IndexField</code> in the document. For more information about using rank expressions to customize ranking, see the Amazon CloudSearch Developer Guide.</li>
|
202 |
+
* </ul></li>
|
203 |
+
* </ul>
|
204 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
205 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
206 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
207 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
208 |
+
*/
|
209 |
+
public function define_rank_expression($domain_name, $rank_expression, $opt = null)
|
210 |
+
{
|
211 |
+
if (!$opt) $opt = array();
|
212 |
+
$opt['DomainName'] = $domain_name;
|
213 |
+
|
214 |
+
// Required map (non-list)
|
215 |
+
$opt = array_merge($opt, CFComplexType::map(array(
|
216 |
+
'RankExpression' => (is_array($rank_expression) ? $rank_expression : array($rank_expression))
|
217 |
+
), 'member'));
|
218 |
+
|
219 |
+
return $this->authenticate('DefineRankExpression', $opt);
|
220 |
+
}
|
221 |
+
|
222 |
+
/**
|
223 |
+
* Permanently deletes a search domain and all of its data.
|
224 |
+
*
|
225 |
+
* @param string $domain_name (Required) A string that represents the name of a domain. Domain names must be unique across the domains owned by an account within an AWS region. Domain names must start with a letter or number and can contain the following characters: a-z (lowercase), 0-9, and - (hyphen). Uppercase letters and underscores are not allowed. [Constraints: The value must be between 3 and 28 characters, and must match the following regular expression pattern: <code>[a-z][a-z0-9\-]+</code>]
|
226 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
227 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
228 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
229 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
230 |
+
*/
|
231 |
+
public function delete_domain($domain_name, $opt = null)
|
232 |
+
{
|
233 |
+
if (!$opt) $opt = array();
|
234 |
+
$opt['DomainName'] = $domain_name;
|
235 |
+
|
236 |
+
return $this->authenticate('DeleteDomain', $opt);
|
237 |
+
}
|
238 |
+
|
239 |
+
/**
|
240 |
+
* Removes an <code>IndexField</code> from the search domain.
|
241 |
+
*
|
242 |
+
* @param string $domain_name (Required) A string that represents the name of a domain. Domain names must be unique across the domains owned by an account within an AWS region. Domain names must start with a letter or number and can contain the following characters: a-z (lowercase), 0-9, and - (hyphen). Uppercase letters and underscores are not allowed. [Constraints: The value must be between 3 and 28 characters, and must match the following regular expression pattern: <code>[a-z][a-z0-9\-]+</code>]
|
243 |
+
* @param string $index_field_name (Required) A string that represents the name of an index field. Field names must begin with a letter and can contain the following characters: a-z (lowercase), 0-9, and _ (underscore). Uppercase letters and hyphens are not allowed. The names "body", "docid", and "text_relevance" are reserved and cannot be specified as field or rank expression names. [Constraints: The value must be between 1 and 64 characters, and must match the following regular expression pattern: <code>[a-z][a-z0-9_]*</code>]
|
244 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
245 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
246 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
247 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
248 |
+
*/
|
249 |
+
public function delete_index_field($domain_name, $index_field_name, $opt = null)
|
250 |
+
{
|
251 |
+
if (!$opt) $opt = array();
|
252 |
+
$opt['DomainName'] = $domain_name;
|
253 |
+
$opt['IndexFieldName'] = $index_field_name;
|
254 |
+
|
255 |
+
return $this->authenticate('DeleteIndexField', $opt);
|
256 |
+
}
|
257 |
+
|
258 |
+
/**
|
259 |
+
* Removes a <code>RankExpression</code> from the search domain.
|
260 |
+
*
|
261 |
+
* @param string $domain_name (Required) A string that represents the name of a domain. Domain names must be unique across the domains owned by an account within an AWS region. Domain names must start with a letter or number and can contain the following characters: a-z (lowercase), 0-9, and - (hyphen). Uppercase letters and underscores are not allowed. [Constraints: The value must be between 3 and 28 characters, and must match the following regular expression pattern: <code>[a-z][a-z0-9\-]+</code>]
|
262 |
+
* @param string $rank_name (Required) The name of the <code>RankExpression</code> to delete. [Constraints: The value must be between 1 and 64 characters, and must match the following regular expression pattern: <code>[a-z][a-z0-9_]*</code>]
|
263 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
264 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
265 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
266 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
267 |
+
*/
|
268 |
+
public function delete_rank_expression($domain_name, $rank_name, $opt = null)
|
269 |
+
{
|
270 |
+
if (!$opt) $opt = array();
|
271 |
+
$opt['DomainName'] = $domain_name;
|
272 |
+
$opt['RankName'] = $rank_name;
|
273 |
+
|
274 |
+
return $this->authenticate('DeleteRankExpression', $opt);
|
275 |
+
}
|
276 |
+
|
277 |
+
/**
|
278 |
+
* Gets the default search field configured for the search domain.
|
279 |
+
*
|
280 |
+
* @param string $domain_name (Required) A string that represents the name of a domain. Domain names must be unique across the domains owned by an account within an AWS region. Domain names must start with a letter or number and can contain the following characters: a-z (lowercase), 0-9, and - (hyphen). Uppercase letters and underscores are not allowed. [Constraints: The value must be between 3 and 28 characters, and must match the following regular expression pattern: <code>[a-z][a-z0-9\-]+</code>]
|
281 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
282 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
283 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
284 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
285 |
+
*/
|
286 |
+
public function describe_default_search_field($domain_name, $opt = null)
|
287 |
+
{
|
288 |
+
if (!$opt) $opt = array();
|
289 |
+
$opt['DomainName'] = $domain_name;
|
290 |
+
|
291 |
+
return $this->authenticate('DescribeDefaultSearchField', $opt);
|
292 |
+
}
|
293 |
+
|
294 |
+
/**
|
295 |
+
* Gets information about the search domains owned by this account. Can be limited to specific
|
296 |
+
* domains. Shows all domains by default.
|
297 |
+
*
|
298 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
299 |
+
* <li><code>DomainNames</code> - <code>string|array</code> - Optional - Limits the DescribeDomains response to the specified search domains. Pass a string for a single value, or an indexed array for multiple values.</li>
|
300 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
301 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
302 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
303 |
+
*/
|
304 |
+
public function describe_domains($opt = null)
|
305 |
+
{
|
306 |
+
if (!$opt) $opt = array();
|
307 |
+
|
308 |
+
// Optional list (non-map)
|
309 |
+
if (isset($opt['DomainNames']))
|
310 |
+
{
|
311 |
+
$opt = array_merge($opt, CFComplexType::map(array(
|
312 |
+
'DomainNames' => (is_array($opt['DomainNames']) ? $opt['DomainNames'] : array($opt['DomainNames']))
|
313 |
+
), 'member'));
|
314 |
+
unset($opt['DomainNames']);
|
315 |
+
}
|
316 |
+
|
317 |
+
return $this->authenticate('DescribeDomains', $opt);
|
318 |
+
}
|
319 |
+
|
320 |
+
/**
|
321 |
+
* Gets information about the index fields configured for the search domain. Can be limited to
|
322 |
+
* specific fields by name. Shows all fields by default.
|
323 |
+
*
|
324 |
+
* @param string $domain_name (Required) A string that represents the name of a domain. Domain names must be unique across the domains owned by an account within an AWS region. Domain names must start with a letter or number and can contain the following characters: a-z (lowercase), 0-9, and - (hyphen). Uppercase letters and underscores are not allowed. [Constraints: The value must be between 3 and 28 characters, and must match the following regular expression pattern: <code>[a-z][a-z0-9\-]+</code>]
|
325 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
326 |
+
* <li><code>FieldNames</code> - <code>string|array</code> - Optional - Limits the <code>DescribeIndexFields</code> response to the specified fields. Pass a string for a single value, or an indexed array for multiple values.</li>
|
327 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
328 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
329 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
330 |
+
*/
|
331 |
+
public function describe_index_fields($domain_name, $opt = null)
|
332 |
+
{
|
333 |
+
if (!$opt) $opt = array();
|
334 |
+
$opt['DomainName'] = $domain_name;
|
335 |
+
|
336 |
+
// Optional list (non-map)
|
337 |
+
if (isset($opt['FieldNames']))
|
338 |
+
{
|
339 |
+
$opt = array_merge($opt, CFComplexType::map(array(
|
340 |
+
'FieldNames' => (is_array($opt['FieldNames']) ? $opt['FieldNames'] : array($opt['FieldNames']))
|
341 |
+
), 'member'));
|
342 |
+
unset($opt['FieldNames']);
|
343 |
+
}
|
344 |
+
|
345 |
+
return $this->authenticate('DescribeIndexFields', $opt);
|
346 |
+
}
|
347 |
+
|
348 |
+
/**
|
349 |
+
* Gets the rank expressions configured for the search domain. Can be limited to specific rank
|
350 |
+
* expressions by name. Shows all rank expressions by default.
|
351 |
+
*
|
352 |
+
* @param string $domain_name (Required) A string that represents the name of a domain. Domain names must be unique across the domains owned by an account within an AWS region. Domain names must start with a letter or number and can contain the following characters: a-z (lowercase), 0-9, and - (hyphen). Uppercase letters and underscores are not allowed. [Constraints: The value must be between 3 and 28 characters, and must match the following regular expression pattern: <code>[a-z][a-z0-9\-]+</code>]
|
353 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
354 |
+
* <li><code>RankNames</code> - <code>string|array</code> - Optional - Limits the <code>DescribeRankExpressions</code> response to the specified fields. Pass a string for a single value, or an indexed array for multiple values.</li>
|
355 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
356 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
357 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
358 |
+
*/
|
359 |
+
public function describe_rank_expressions($domain_name, $opt = null)
|
360 |
+
{
|
361 |
+
if (!$opt) $opt = array();
|
362 |
+
$opt['DomainName'] = $domain_name;
|
363 |
+
|
364 |
+
// Optional list (non-map)
|
365 |
+
if (isset($opt['RankNames']))
|
366 |
+
{
|
367 |
+
$opt = array_merge($opt, CFComplexType::map(array(
|
368 |
+
'RankNames' => (is_array($opt['RankNames']) ? $opt['RankNames'] : array($opt['RankNames']))
|
369 |
+
), 'member'));
|
370 |
+
unset($opt['RankNames']);
|
371 |
+
}
|
372 |
+
|
373 |
+
return $this->authenticate('DescribeRankExpressions', $opt);
|
374 |
+
}
|
375 |
+
|
376 |
+
/**
|
377 |
+
* Gets information about the resource-based policies that control access to the domain's document
|
378 |
+
* and search services.
|
379 |
+
*
|
380 |
+
* @param string $domain_name (Required) A string that represents the name of a domain. Domain names must be unique across the domains owned by an account within an AWS region. Domain names must start with a letter or number and can contain the following characters: a-z (lowercase), 0-9, and - (hyphen). Uppercase letters and underscores are not allowed. [Constraints: The value must be between 3 and 28 characters, and must match the following regular expression pattern: <code>[a-z][a-z0-9\-]+</code>]
|
381 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
382 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
383 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
384 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
385 |
+
*/
|
386 |
+
public function describe_service_access_policies($domain_name, $opt = null)
|
387 |
+
{
|
388 |
+
if (!$opt) $opt = array();
|
389 |
+
$opt['DomainName'] = $domain_name;
|
390 |
+
|
391 |
+
return $this->authenticate('DescribeServiceAccessPolicies', $opt);
|
392 |
+
}
|
393 |
+
|
394 |
+
/**
|
395 |
+
* Gets the stemming dictionary configured for the search domain.
|
396 |
+
*
|
397 |
+
* @param string $domain_name (Required) A string that represents the name of a domain. Domain names must be unique across the domains owned by an account within an AWS region. Domain names must start with a letter or number and can contain the following characters: a-z (lowercase), 0-9, and - (hyphen). Uppercase letters and underscores are not allowed. [Constraints: The value must be between 3 and 28 characters, and must match the following regular expression pattern: <code>[a-z][a-z0-9\-]+</code>]
|
398 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
399 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
400 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
401 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
402 |
+
*/
|
403 |
+
public function describe_stemming_options($domain_name, $opt = null)
|
404 |
+
{
|
405 |
+
if (!$opt) $opt = array();
|
406 |
+
$opt['DomainName'] = $domain_name;
|
407 |
+
|
408 |
+
return $this->authenticate('DescribeStemmingOptions', $opt);
|
409 |
+
}
|
410 |
+
|
411 |
+
/**
|
412 |
+
* Gets the stopwords configured for the search domain.
|
413 |
+
*
|
414 |
+
* @param string $domain_name (Required) A string that represents the name of a domain. Domain names must be unique across the domains owned by an account within an AWS region. Domain names must start with a letter or number and can contain the following characters: a-z (lowercase), 0-9, and - (hyphen). Uppercase letters and underscores are not allowed. [Constraints: The value must be between 3 and 28 characters, and must match the following regular expression pattern: <code>[a-z][a-z0-9\-]+</code>]
|
415 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
416 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
417 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
418 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
419 |
+
*/
|
420 |
+
public function describe_stopword_options($domain_name, $opt = null)
|
421 |
+
{
|
422 |
+
if (!$opt) $opt = array();
|
423 |
+
$opt['DomainName'] = $domain_name;
|
424 |
+
|
425 |
+
return $this->authenticate('DescribeStopwordOptions', $opt);
|
426 |
+
}
|
427 |
+
|
428 |
+
/**
|
429 |
+
* Gets the synonym dictionary configured for the search domain.
|
430 |
+
*
|
431 |
+
* @param string $domain_name (Required) A string that represents the name of a domain. Domain names must be unique across the domains owned by an account within an AWS region. Domain names must start with a letter or number and can contain the following characters: a-z (lowercase), 0-9, and - (hyphen). Uppercase letters and underscores are not allowed. [Constraints: The value must be between 3 and 28 characters, and must match the following regular expression pattern: <code>[a-z][a-z0-9\-]+</code>]
|
432 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
433 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
434 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
435 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
436 |
+
*/
|
437 |
+
public function describe_synonym_options($domain_name, $opt = null)
|
438 |
+
{
|
439 |
+
if (!$opt) $opt = array();
|
440 |
+
$opt['DomainName'] = $domain_name;
|
441 |
+
|
442 |
+
return $this->authenticate('DescribeSynonymOptions', $opt);
|
443 |
+
}
|
444 |
+
|
445 |
+
/**
|
446 |
+
* Tells the search domain to start indexing its documents using the latest text processing
|
447 |
+
* options and <code>IndexFields</code>. This operation must be invoked to make options whose
|
448 |
+
* <code>OptionStatus</code> has <code>OptionState</code> of <code>RequiresIndexDocuments</code>
|
449 |
+
* visible in search results.
|
450 |
+
*
|
451 |
+
* @param string $domain_name (Required) A string that represents the name of a domain. Domain names must be unique across the domains owned by an account within an AWS region. Domain names must start with a letter or number and can contain the following characters: a-z (lowercase), 0-9, and - (hyphen). Uppercase letters and underscores are not allowed. [Constraints: The value must be between 3 and 28 characters, and must match the following regular expression pattern: <code>[a-z][a-z0-9\-]+</code>]
|
452 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
453 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
454 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
455 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
456 |
+
*/
|
457 |
+
public function index_documents($domain_name, $opt = null)
|
458 |
+
{
|
459 |
+
if (!$opt) $opt = array();
|
460 |
+
$opt['DomainName'] = $domain_name;
|
461 |
+
|
462 |
+
return $this->authenticate('IndexDocuments', $opt);
|
463 |
+
}
|
464 |
+
|
465 |
+
/**
|
466 |
+
* Configures the default search field for the search domain. The default search field is used
|
467 |
+
* when a search request does not specify which fields to search. By default, it is configured to
|
468 |
+
* include the contents of all of the domain's text fields.
|
469 |
+
*
|
470 |
+
* @param string $domain_name (Required) A string that represents the name of a domain. Domain names must be unique across the domains owned by an account within an AWS region. Domain names must start with a letter or number and can contain the following characters: a-z (lowercase), 0-9, and - (hyphen). Uppercase letters and underscores are not allowed. [Constraints: The value must be between 3 and 28 characters, and must match the following regular expression pattern: <code>[a-z][a-z0-9\-]+</code>]
|
471 |
+
* @param string $default_search_field (Required) The <code>IndexField</code> to use for search requests issued with the <code>q</code> parameter. The default is an empty string, which automatically searches all text fields.
|
472 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
473 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
474 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
475 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
476 |
+
*/
|
477 |
+
public function update_default_search_field($domain_name, $default_search_field, $opt = null)
|
478 |
+
{
|
479 |
+
if (!$opt) $opt = array();
|
480 |
+
$opt['DomainName'] = $domain_name;
|
481 |
+
$opt['DefaultSearchField'] = $default_search_field;
|
482 |
+
|
483 |
+
return $this->authenticate('UpdateDefaultSearchField', $opt);
|
484 |
+
}
|
485 |
+
|
486 |
+
/**
|
487 |
+
* Configures the policies that control access to the domain's document and search services. The
|
488 |
+
* maximum size of an access policy document is 100KB.
|
489 |
+
*
|
490 |
+
* @param string $domain_name (Required) A string that represents the name of a domain. Domain names must be unique across the domains owned by an account within an AWS region. Domain names must start with a letter or number and can contain the following characters: a-z (lowercase), 0-9, and - (hyphen). Uppercase letters and underscores are not allowed. [Constraints: The value must be between 3 and 28 characters, and must match the following regular expression pattern: <code>[a-z][a-z0-9\-]+</code>]
|
491 |
+
* @param string $access_policies (Required) An IAM access policy as described in <a href="http://docs.amazonwebservices.com/IAM/latest/UserGuide/index.html?AccessPolicyLanguage.html" target="_blank">The Access Policy Language</a> in <em>Using AWS Identity and Access Management</em>. The maximum size of an access policy document is 100KB. Example: <code>{"Statement": [{"Effect":"Allow", "Action": "*", "Resource": "arn:aws:cs:us-east-1:1234567890:search/movies", "Condition": { "IpAddress": { aws:SourceIp": ["203.0.113.1/32"] } }}, {"Effect":"Allow", "Action": "*", "Resource": "arn:aws:cs:us-east-1:1234567890:documents/movies", "Condition": { "IpAddress": { aws:SourceIp": ["203.0.113.1/32"] } }} ]}</code>
|
492 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
493 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
494 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
495 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
496 |
+
*/
|
497 |
+
public function update_service_access_policies($domain_name, $access_policies, $opt = null)
|
498 |
+
{
|
499 |
+
if (!$opt) $opt = array();
|
500 |
+
$opt['DomainName'] = $domain_name;
|
501 |
+
$opt['AccessPolicies'] = $access_policies;
|
502 |
+
|
503 |
+
return $this->authenticate('UpdateServiceAccessPolicies', $opt);
|
504 |
+
}
|
505 |
+
|
506 |
+
/**
|
507 |
+
* Configures a stemming dictionary for the search domain. The stemming dictionary is used during
|
508 |
+
* indexing and when processing search requests. The maximum size of the stemming dictionary is
|
509 |
+
* 500KB.
|
510 |
+
*
|
511 |
+
* @param string $domain_name (Required) A string that represents the name of a domain. Domain names must be unique across the domains owned by an account within an AWS region. Domain names must start with a letter or number and can contain the following characters: a-z (lowercase), 0-9, and - (hyphen). Uppercase letters and underscores are not allowed. [Constraints: The value must be between 3 and 28 characters, and must match the following regular expression pattern: <code>[a-z][a-z0-9\-]+</code>]
|
512 |
+
* @param string $stems (Required) Maps terms to their stems, serialized as a JSON document. The document has a single object with one property "stems" whose value is an object mapping terms to their stems. The maximum size of a stemming document is 500KB. Example: <code>{ "stems": {"people": "person", "walking": "walk"} }</code>
|
513 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
514 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
515 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
516 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
517 |
+
*/
|
518 |
+
public function update_stemming_options($domain_name, $stems, $opt = null)
|
519 |
+
{
|
520 |
+
if (!$opt) $opt = array();
|
521 |
+
$opt['DomainName'] = $domain_name;
|
522 |
+
$opt['Stems'] = $stems;
|
523 |
+
|
524 |
+
return $this->authenticate('UpdateStemmingOptions', $opt);
|
525 |
+
}
|
526 |
+
|
527 |
+
/**
|
528 |
+
* Configures stopwords for the search domain. Stopwords are used during indexing and when
|
529 |
+
* processing search requests. The maximum size of the stopwords dictionary is 10KB.
|
530 |
+
*
|
531 |
+
* @param string $domain_name (Required) A string that represents the name of a domain. Domain names must be unique across the domains owned by an account within an AWS region. Domain names must start with a letter or number and can contain the following characters: a-z (lowercase), 0-9, and - (hyphen). Uppercase letters and underscores are not allowed. [Constraints: The value must be between 3 and 28 characters, and must match the following regular expression pattern: <code>[a-z][a-z0-9\-]+</code>]
|
532 |
+
* @param string $stopwords (Required) Lists stopwords serialized as a JSON document. The document has a single object with one property "stopwords" whose value is an array of strings. The maximum size of a stopwords document is 10KB. Example: <code>{ "stopwords": ["a", "an", "the", "of"] }</code>
|
533 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
534 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
535 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
536 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
537 |
+
*/
|
538 |
+
public function update_stopword_options($domain_name, $stopwords, $opt = null)
|
539 |
+
{
|
540 |
+
if (!$opt) $opt = array();
|
541 |
+
$opt['DomainName'] = $domain_name;
|
542 |
+
$opt['Stopwords'] = $stopwords;
|
543 |
+
|
544 |
+
return $this->authenticate('UpdateStopwordOptions', $opt);
|
545 |
+
}
|
546 |
+
|
547 |
+
/**
|
548 |
+
* Configures a synonym dictionary for the search domain. The synonym dictionary is used during
|
549 |
+
* indexing to configure mappings for terms that occur in text fields. The maximum size of the
|
550 |
+
* synonym dictionary is 100KB.
|
551 |
+
*
|
552 |
+
* @param string $domain_name (Required) A string that represents the name of a domain. Domain names must be unique across the domains owned by an account within an AWS region. Domain names must start with a letter or number and can contain the following characters: a-z (lowercase), 0-9, and - (hyphen). Uppercase letters and underscores are not allowed. [Constraints: The value must be between 3 and 28 characters, and must match the following regular expression pattern: <code>[a-z][a-z0-9\-]+</code>]
|
553 |
+
* @param string $synonyms (Required) Maps terms to their synonyms, serialized as a JSON document. The document has a single object with one property "synonyms" whose value is an object mapping terms to their synonyms. Each synonym is a simple string or an array of strings. The maximum size of a stopwords document is 100KB. Example: <code>{ "synonyms": {"cat": ["feline", "kitten"], "puppy": "dog"} }</code>
|
554 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
555 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
556 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
557 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
558 |
+
*/
|
559 |
+
public function update_synonym_options($domain_name, $synonyms, $opt = null)
|
560 |
+
{
|
561 |
+
if (!$opt) $opt = array();
|
562 |
+
$opt['DomainName'] = $domain_name;
|
563 |
+
$opt['Synonyms'] = $synonyms;
|
564 |
+
|
565 |
+
return $this->authenticate('UpdateSynonymOptions', $opt);
|
566 |
+
}
|
567 |
+
}
|
568 |
+
|
569 |
+
|
570 |
+
/*%******************************************************************************************%*/
|
571 |
+
// EXCEPTIONS
|
572 |
+
|
573 |
+
class CloudSearch_Exception extends Exception {}
|
sdk/Aws_v1/services/cloudwatch.class.php
ADDED
@@ -0,0 +1,676 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* Copyright 2010-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
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 |
+
* A copy of the License is located at
|
8 |
+
*
|
9 |
+
* http://aws.amazon.com/apache2.0
|
10 |
+
*
|
11 |
+
* or in the "license" file accompanying this file. This file is distributed
|
12 |
+
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
|
13 |
+
* express or implied. See the License for the specific language governing
|
14 |
+
* permissions and limitations under the License.
|
15 |
+
*/
|
16 |
+
|
17 |
+
/**
|
18 |
+
* This is the <em>Amazon CloudWatch API Reference</em>. This guide provides detailed information
|
19 |
+
* about Amazon CloudWatch actions, data types, parameters, and errors. For detailed information
|
20 |
+
* about Amazon CloudWatch features and their associated API calls, go to the <a href=
|
21 |
+
* "http://docs.amazonwebservices.com/AmazonCloudWatch/latest/DeveloperGuide">Amazon CloudWatch
|
22 |
+
* Developer Guide</a>.
|
23 |
+
*
|
24 |
+
* Amazon CloudWatch is a web service that enables you to publish, monitor, and manage various
|
25 |
+
* metrics, as well as configure alarm actions based on data from metrics. For more information
|
26 |
+
* about this product go to <a href=
|
27 |
+
* "http://aws.amazon.com/cloudwatch">http://aws.amazon.com/cloudwatch</a>.
|
28 |
+
*
|
29 |
+
* Use the following links to get started using the <em>Amazon CloudWatch API Reference</em>:
|
30 |
+
*
|
31 |
+
* <ul>
|
32 |
+
* <li><a href=
|
33 |
+
* "http://docs.amazonwebservices.com/AmazonCloudWatch/latest/APIReference/API_Operations.html">
|
34 |
+
* Actions</a>: An alphabetical list of all Amazon CloudWatch actions.</li>
|
35 |
+
* <li><a href=
|
36 |
+
* "http://docs.amazonwebservices.com/AmazonCloudWatch/latest/APIReference/API_Types.html">Data
|
37 |
+
* Types</a>: An alphabetical list of all Amazon CloudWatch data types.</li>
|
38 |
+
* <li><a href=
|
39 |
+
* "http://docs.amazonwebservices.com/AmazonCloudWatch/latest/APIReference/CommonParameters.html">
|
40 |
+
* Common Parameters</a>: Parameters that all Query actions can use.</li>
|
41 |
+
* <li><a href=
|
42 |
+
* "http://docs.amazonwebservices.com/AmazonCloudWatch/latest/APIReference/CommonErrors.html">Common
|
43 |
+
* Errors</a>: Client and server errors that all actions can return.</li>
|
44 |
+
* <li><a href="http://docs.amazonwebservices.com/general/latest/gr/index.html?rande.html">Regions
|
45 |
+
* and Endpoints</a>: Itemized regions and endpoints for all AWS products.</li>
|
46 |
+
* <li><a href="http://monitoring.amazonaws.com/doc/2010-08-01/CloudWatch.wsdl">WSDL Location</a>:
|
47 |
+
* http://monitoring.amazonaws.com/doc/2010-08-01/CloudWatch.wsdl</li>
|
48 |
+
* </ul>
|
49 |
+
*
|
50 |
+
* @version 2013.01.14
|
51 |
+
* @license See the included NOTICE.md file for complete information.
|
52 |
+
* @copyright See the included NOTICE.md file for complete information.
|
53 |
+
* @link http://aws.amazon.com/cloudwatch/ Amazon CloudWatch
|
54 |
+
* @link http://aws.amazon.com/cloudwatch/documentation/ Amazon CloudWatch documentation
|
55 |
+
*/
|
56 |
+
class AmazonCloudWatch extends CFRuntime
|
57 |
+
{
|
58 |
+
/*%******************************************************************************************%*/
|
59 |
+
// CLASS CONSTANTS
|
60 |
+
|
61 |
+
/**
|
62 |
+
* Specify the queue URL for the United States East (Northern Virginia) Region.
|
63 |
+
*/
|
64 |
+
const REGION_US_E1 = 'monitoring.us-east-1.amazonaws.com';
|
65 |
+
|
66 |
+
/**
|
67 |
+
* Specify the queue URL for the United States East (Northern Virginia) Region.
|
68 |
+
*/
|
69 |
+
const REGION_VIRGINIA = self::REGION_US_E1;
|
70 |
+
|
71 |
+
/**
|
72 |
+
* Specify the queue URL for the United States West (Northern California) Region.
|
73 |
+
*/
|
74 |
+
const REGION_US_W1 = 'monitoring.us-west-1.amazonaws.com';
|
75 |
+
|
76 |
+
/**
|
77 |
+
* Specify the queue URL for the United States West (Northern California) Region.
|
78 |
+
*/
|
79 |
+
const REGION_CALIFORNIA = self::REGION_US_W1;
|
80 |
+
|
81 |
+
/**
|
82 |
+
* Specify the queue URL for the United States West (Oregon) Region.
|
83 |
+
*/
|
84 |
+
const REGION_US_W2 = 'monitoring.us-west-2.amazonaws.com';
|
85 |
+
|
86 |
+
/**
|
87 |
+
* Specify the queue URL for the United States West (Oregon) Region.
|
88 |
+
*/
|
89 |
+
const REGION_OREGON = self::REGION_US_W2;
|
90 |
+
|
91 |
+
/**
|
92 |
+
* Specify the queue URL for the Europe West (Ireland) Region.
|
93 |
+
*/
|
94 |
+
const REGION_EU_W1 = 'monitoring.eu-west-1.amazonaws.com';
|
95 |
+
|
96 |
+
/**
|
97 |
+
* Specify the queue URL for the Europe West (Ireland) Region.
|
98 |
+
*/
|
99 |
+
const REGION_IRELAND = self::REGION_EU_W1;
|
100 |
+
|
101 |
+
/**
|
102 |
+
* Specify the queue URL for the Asia Pacific Southeast (Singapore) Region.
|
103 |
+
*/
|
104 |
+
const REGION_APAC_SE1 = 'monitoring.ap-southeast-1.amazonaws.com';
|
105 |
+
|
106 |
+
/**
|
107 |
+
* Specify the queue URL for the Asia Pacific Southeast (Singapore) Region.
|
108 |
+
*/
|
109 |
+
const REGION_SINGAPORE = self::REGION_APAC_SE1;
|
110 |
+
|
111 |
+
/**
|
112 |
+
* Specify the queue URL for the Asia Pacific Southeast (Singapore) Region.
|
113 |
+
*/
|
114 |
+
const REGION_APAC_SE2 = 'monitoring.ap-southeast-2.amazonaws.com';
|
115 |
+
|
116 |
+
/**
|
117 |
+
* Specify the queue URL for the Asia Pacific Southeast (Singapore) Region.
|
118 |
+
*/
|
119 |
+
const REGION_SYDNEY = self::REGION_APAC_SE2;
|
120 |
+
|
121 |
+
/**
|
122 |
+
* Specify the queue URL for the Asia Pacific Northeast (Tokyo) Region.
|
123 |
+
*/
|
124 |
+
const REGION_APAC_NE1 = 'monitoring.ap-northeast-1.amazonaws.com';
|
125 |
+
|
126 |
+
/**
|
127 |
+
* Specify the queue URL for the Asia Pacific Northeast (Tokyo) Region.
|
128 |
+
*/
|
129 |
+
const REGION_TOKYO = self::REGION_APAC_NE1;
|
130 |
+
|
131 |
+
/**
|
132 |
+
* Specify the queue URL for the United States GovCloud Region.
|
133 |
+
*/
|
134 |
+
const REGION_US_GOV1 = 'monitoring.us-gov-west-1.amazonaws.com';
|
135 |
+
|
136 |
+
/**
|
137 |
+
* Specify the queue URL for the South America (Sao Paulo) Region.
|
138 |
+
*/
|
139 |
+
const REGION_SA_E1 = 'monitoring.sa-east-1.amazonaws.com';
|
140 |
+
|
141 |
+
/**
|
142 |
+
* Specify the queue URL for the South America (Sao Paulo) Region.
|
143 |
+
*/
|
144 |
+
const REGION_SAO_PAULO = self::REGION_SA_E1;
|
145 |
+
|
146 |
+
/**
|
147 |
+
* Default service endpoint.
|
148 |
+
*/
|
149 |
+
const DEFAULT_URL = self::REGION_US_E1;
|
150 |
+
|
151 |
+
|
152 |
+
/*%******************************************************************************************%*/
|
153 |
+
// CONSTRUCTOR
|
154 |
+
|
155 |
+
/**
|
156 |
+
* Constructs a new instance of <AmazonCloudWatch>.
|
157 |
+
*
|
158 |
+
* @param array $options (Optional) An associative array of parameters that can have the following keys: <ul>
|
159 |
+
* <li><code>certificate_authority</code> - <code>boolean</code> - Optional - Determines which Cerificate Authority file to use. A value of boolean <code>false</code> will use the Certificate Authority file available on the system. A value of boolean <code>true</code> will use the Certificate Authority provided by the SDK. Passing a file system path to a Certificate Authority file (chmodded to <code>0755</code>) will use that. Leave this set to <code>false</code> if you're not sure.</li>
|
160 |
+
* <li><code>credentials</code> - <code>string</code> - Optional - The name of the credential set to use for authentication.</li>
|
161 |
+
* <li><code>default_cache_config</code> - <code>string</code> - Optional - This option allows a preferred storage type to be configured for long-term caching. This can be changed later using the <set_cache_config()> method. Valid values are: <code>apc</code>, <code>xcache</code>, or a file system path such as <code>./cache</code> or <code>/tmp/cache/</code>.</li>
|
162 |
+
* <li><code>key</code> - <code>string</code> - Optional - Your AWS key, or a session key. If blank, the default credential set will be used.</li>
|
163 |
+
* <li><code>secret</code> - <code>string</code> - Optional - Your AWS secret key, or a session secret key. If blank, the default credential set will be used.</li>
|
164 |
+
* <li><code>token</code> - <code>string</code> - Optional - An AWS session token.</li></ul>
|
165 |
+
* @return void
|
166 |
+
*/
|
167 |
+
public function __construct(array $options = array())
|
168 |
+
{
|
169 |
+
$this->api_version = '2010-08-01';
|
170 |
+
$this->hostname = self::DEFAULT_URL;
|
171 |
+
$this->auth_class = 'AuthV4Query';
|
172 |
+
|
173 |
+
return parent::__construct($options);
|
174 |
+
}
|
175 |
+
|
176 |
+
|
177 |
+
/*%******************************************************************************************%*/
|
178 |
+
// SETTERS
|
179 |
+
|
180 |
+
/**
|
181 |
+
* This allows you to explicitly sets the region for the service to use.
|
182 |
+
*
|
183 |
+
* @param string $region (Required) The region to explicitly set. Available options are <REGION_US_E1>, <REGION_US_W1>, <REGION_US_W2>, <REGION_EU_W1>, <REGION_APAC_SE1>, <REGION_APAC_SE2>, <REGION_APAC_NE1>, <REGION_US_GOV1>, <REGION_SA_E1>.
|
184 |
+
* @return $this A reference to the current instance.
|
185 |
+
*/
|
186 |
+
public function set_region($region)
|
187 |
+
{
|
188 |
+
// @codeCoverageIgnoreStart
|
189 |
+
$this->set_hostname($region);
|
190 |
+
return $this;
|
191 |
+
// @codeCoverageIgnoreEnd
|
192 |
+
}
|
193 |
+
|
194 |
+
|
195 |
+
/*%******************************************************************************************%*/
|
196 |
+
// SERVICE METHODS
|
197 |
+
|
198 |
+
/**
|
199 |
+
* Deletes all specified alarms. In the event of an error, no alarms are deleted.
|
200 |
+
*
|
201 |
+
* @param string|array $alarm_names (Required) A list of alarms to be deleted. Pass a string for a single value, or an indexed array for multiple values.
|
202 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
203 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
204 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
205 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
206 |
+
*/
|
207 |
+
public function delete_alarms($alarm_names, $opt = null)
|
208 |
+
{
|
209 |
+
if (!$opt) $opt = array();
|
210 |
+
|
211 |
+
// Required list (non-map)
|
212 |
+
$opt = array_merge($opt, CFComplexType::map(array(
|
213 |
+
'AlarmNames' => (is_array($alarm_names) ? $alarm_names : array($alarm_names))
|
214 |
+
), 'member'));
|
215 |
+
|
216 |
+
return $this->authenticate('DeleteAlarms', $opt);
|
217 |
+
}
|
218 |
+
|
219 |
+
/**
|
220 |
+
* Retrieves history for the specified alarm. Filter alarms by date range or item type. If an
|
221 |
+
* alarm name is not specified, Amazon CloudWatch returns histories for all of the owner's alarms.
|
222 |
+
*
|
223 |
+
* <p class="note">
|
224 |
+
* Amazon CloudWatch retains the history of an alarm for two weeks, whether or not you delete the
|
225 |
+
* alarm.
|
226 |
+
* </p>
|
227 |
+
*
|
228 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
229 |
+
* <li><code>AlarmName</code> - <code>string</code> - Optional - The name of the alarm.</li>
|
230 |
+
* <li><code>HistoryItemType</code> - <code>string</code> - Optional - The type of alarm histories to retrieve. [Allowed values: <code>ConfigurationUpdate</code>, <code>StateUpdate</code>, <code>Action</code>]</li>
|
231 |
+
* <li><code>StartDate</code> - <code>string</code> - Optional - The starting date to retrieve alarm history. May be passed as a number of seconds since UNIX Epoch, or any string compatible with <php:strtotime()>.</li>
|
232 |
+
* <li><code>EndDate</code> - <code>string</code> - Optional - The ending date to retrieve alarm history. May be passed as a number of seconds since UNIX Epoch, or any string compatible with <php:strtotime()>.</li>
|
233 |
+
* <li><code>MaxRecords</code> - <code>integer</code> - Optional - The maximum number of alarm history records to retrieve.</li>
|
234 |
+
* <li><code>NextToken</code> - <code>string</code> - Optional - The token returned by a previous call to indicate that there is more data available.</li>
|
235 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
236 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
237 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
238 |
+
*/
|
239 |
+
public function describe_alarm_history($opt = null)
|
240 |
+
{
|
241 |
+
if (!$opt) $opt = array();
|
242 |
+
|
243 |
+
// Optional DateTime
|
244 |
+
if (isset($opt['StartDate']))
|
245 |
+
{
|
246 |
+
$opt['StartDate'] = $this->util->convert_date_to_iso8601($opt['StartDate']);
|
247 |
+
}
|
248 |
+
|
249 |
+
// Optional DateTime
|
250 |
+
if (isset($opt['EndDate']))
|
251 |
+
{
|
252 |
+
$opt['EndDate'] = $this->util->convert_date_to_iso8601($opt['EndDate']);
|
253 |
+
}
|
254 |
+
|
255 |
+
return $this->authenticate('DescribeAlarmHistory', $opt);
|
256 |
+
}
|
257 |
+
|
258 |
+
/**
|
259 |
+
* Retrieves alarms with the specified names. If no name is specified, all alarms for the user are
|
260 |
+
* returned. Alarms can be retrieved by using only a prefix for the alarm name, the alarm state,
|
261 |
+
* or a prefix for any action.
|
262 |
+
*
|
263 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
264 |
+
* <li><code>AlarmNames</code> - <code>string|array</code> - Optional - A list of alarm names to retrieve information for. Pass a string for a single value, or an indexed array for multiple values.</li>
|
265 |
+
* <li><code>AlarmNamePrefix</code> - <code>string</code> - Optional - The alarm name prefix. <code>AlarmNames</code> cannot be specified if this parameter is specified.</li>
|
266 |
+
* <li><code>StateValue</code> - <code>string</code> - Optional - The state value to be used in matching alarms. [Allowed values: <code>OK</code>, <code>ALARM</code>, <code>INSUFFICIENT_DATA</code>]</li>
|
267 |
+
* <li><code>ActionPrefix</code> - <code>string</code> - Optional - The action name prefix.</li>
|
268 |
+
* <li><code>MaxRecords</code> - <code>integer</code> - Optional - The maximum number of alarm descriptions to retrieve.</li>
|
269 |
+
* <li><code>NextToken</code> - <code>string</code> - Optional - The token returned by a previous call to indicate that there is more data available.</li>
|
270 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
271 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
272 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
273 |
+
*/
|
274 |
+
public function describe_alarms($opt = null)
|
275 |
+
{
|
276 |
+
if (!$opt) $opt = array();
|
277 |
+
|
278 |
+
// Optional list (non-map)
|
279 |
+
if (isset($opt['AlarmNames']))
|
280 |
+
{
|
281 |
+
$opt = array_merge($opt, CFComplexType::map(array(
|
282 |
+
'AlarmNames' => (is_array($opt['AlarmNames']) ? $opt['AlarmNames'] : array($opt['AlarmNames']))
|
283 |
+
), 'member'));
|
284 |
+
unset($opt['AlarmNames']);
|
285 |
+
}
|
286 |
+
|
287 |
+
return $this->authenticate('DescribeAlarms', $opt);
|
288 |
+
}
|
289 |
+
|
290 |
+
/**
|
291 |
+
* Retrieves all alarms for a single metric. Specify a statistic, period, or unit to filter the
|
292 |
+
* set of alarms further.
|
293 |
+
*
|
294 |
+
* @param string $metric_name (Required) The name of the metric.
|
295 |
+
* @param string $namespace (Required) The namespace of the metric. [Constraints: The value must be between 1 and 255 characters, and must match the following regular expression pattern: <code>[^:].*</code>]
|
296 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
297 |
+
* <li><code>Statistic</code> - <code>string</code> - Optional - The statistic for the metric. [Allowed values: <code>SampleCount</code>, <code>Average</code>, <code>Sum</code>, <code>Minimum</code>, <code>Maximum</code>]</li>
|
298 |
+
* <li><code>Dimensions</code> - <code>array</code> - Optional - The list of dimensions associated with the metric. <ul>
|
299 |
+
* <li><code>x</code> - <code>array</code> - Optional - This represents a simple array index. <ul>
|
300 |
+
* <li><code>Name</code> - <code>string</code> - Required - The name of the dimension.</li>
|
301 |
+
* <li><code>Value</code> - <code>string</code> - Required - The value representing the dimension measurement</li>
|
302 |
+
* </ul></li>
|
303 |
+
* </ul></li>
|
304 |
+
* <li><code>Period</code> - <code>integer</code> - Optional - The period in seconds over which the statistic is applied.</li>
|
305 |
+
* <li><code>Unit</code> - <code>string</code> - Optional - The unit for the metric. [Allowed values: <code>Seconds</code>, <code>Microseconds</code>, <code>Milliseconds</code>, <code>Bytes</code>, <code>Kilobytes</code>, <code>Megabytes</code>, <code>Gigabytes</code>, <code>Terabytes</code>, <code>Bits</code>, <code>Kilobits</code>, <code>Megabits</code>, <code>Gigabits</code>, <code>Terabits</code>, <code>Percent</code>, <code>Count</code>, <code>Bytes/Second</code>, <code>Kilobytes/Second</code>, <code>Megabytes/Second</code>, <code>Gigabytes/Second</code>, <code>Terabytes/Second</code>, <code>Bits/Second</code>, <code>Kilobits/Second</code>, <code>Megabits/Second</code>, <code>Gigabits/Second</code>, <code>Terabits/Second</code>, <code>Count/Second</code>, <code>None</code>]</li>
|
306 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
307 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
308 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
309 |
+
*/
|
310 |
+
public function describe_alarms_for_metric($metric_name, $namespace, $opt = null)
|
311 |
+
{
|
312 |
+
if (!$opt) $opt = array();
|
313 |
+
$opt['MetricName'] = $metric_name;
|
314 |
+
$opt['Namespace'] = $namespace;
|
315 |
+
|
316 |
+
// Optional list + map
|
317 |
+
if (isset($opt['Dimensions']))
|
318 |
+
{
|
319 |
+
$opt = array_merge($opt, CFComplexType::map(array(
|
320 |
+
'Dimensions' => $opt['Dimensions']
|
321 |
+
), 'member'));
|
322 |
+
unset($opt['Dimensions']);
|
323 |
+
}
|
324 |
+
|
325 |
+
return $this->authenticate('DescribeAlarmsForMetric', $opt);
|
326 |
+
}
|
327 |
+
|
328 |
+
/**
|
329 |
+
* Disables actions for the specified alarms. When an alarm's actions are disabled the alarm's
|
330 |
+
* state may change, but none of the alarm's actions will execute.
|
331 |
+
*
|
332 |
+
* @param string|array $alarm_names (Required) The names of the alarms to disable actions for. Pass a string for a single value, or an indexed array for multiple values.
|
333 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
334 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
335 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
336 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
337 |
+
*/
|
338 |
+
public function disable_alarm_actions($alarm_names, $opt = null)
|
339 |
+
{
|
340 |
+
if (!$opt) $opt = array();
|
341 |
+
|
342 |
+
// Required list (non-map)
|
343 |
+
$opt = array_merge($opt, CFComplexType::map(array(
|
344 |
+
'AlarmNames' => (is_array($alarm_names) ? $alarm_names : array($alarm_names))
|
345 |
+
), 'member'));
|
346 |
+
|
347 |
+
return $this->authenticate('DisableAlarmActions', $opt);
|
348 |
+
}
|
349 |
+
|
350 |
+
/**
|
351 |
+
* Enables actions for the specified alarms.
|
352 |
+
*
|
353 |
+
* @param string|array $alarm_names (Required) The names of the alarms to enable actions for. Pass a string for a single value, or an indexed array for multiple values.
|
354 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
355 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
356 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
357 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
358 |
+
*/
|
359 |
+
public function enable_alarm_actions($alarm_names, $opt = null)
|
360 |
+
{
|
361 |
+
if (!$opt) $opt = array();
|
362 |
+
|
363 |
+
// Required list (non-map)
|
364 |
+
$opt = array_merge($opt, CFComplexType::map(array(
|
365 |
+
'AlarmNames' => (is_array($alarm_names) ? $alarm_names : array($alarm_names))
|
366 |
+
), 'member'));
|
367 |
+
|
368 |
+
return $this->authenticate('EnableAlarmActions', $opt);
|
369 |
+
}
|
370 |
+
|
371 |
+
/**
|
372 |
+
* Gets statistics for the specified metric.
|
373 |
+
*
|
374 |
+
* <p class="note">
|
375 |
+
* The maximum number of data points returned from a single <code>GetMetricStatistics</code>
|
376 |
+
* request is 1,440. If a request is made that generates more than 1,440 data points, Amazon
|
377 |
+
* CloudWatch returns an error. In such a case, alter the request by narrowing the specified time
|
378 |
+
* range or increasing the specified period. Alternatively, make multiple requests across adjacent
|
379 |
+
* time ranges.
|
380 |
+
* </p>
|
381 |
+
* Amazon CloudWatch aggregates data points based on the length of the <code>period</code> that
|
382 |
+
* you specify. For example, if you request statistics with a one-minute granularity, Amazon
|
383 |
+
* CloudWatch aggregates data points with time stamps that fall within the same one-minute period.
|
384 |
+
* In such a case, the data points queried can greatly outnumber the data points returned.
|
385 |
+
*
|
386 |
+
* <p class="note">
|
387 |
+
* The maximum number of data points that can be queried is 50,850; whereas the maximum number of
|
388 |
+
* data points returned is 1,440.
|
389 |
+
* </p>
|
390 |
+
* The following examples show various statistics allowed by the data point query maximum of
|
391 |
+
* 50,850 when you call <code>GetMetricStatistics</code> on Amazon EC2 instances with detailed
|
392 |
+
* (one-minute) monitoring enabled:
|
393 |
+
*
|
394 |
+
* <ul>
|
395 |
+
* <li>Statistics for up to 400 instances for a span of one hour</li>
|
396 |
+
* <li>Statistics for up to 35 instances over a span of 24 hours</li>
|
397 |
+
* <li>Statistics for up to 2 instances over a span of 2 weeks</li>
|
398 |
+
* </ul>
|
399 |
+
*
|
400 |
+
* @param string $namespace (Required) The namespace of the metric. [Constraints: The value must be between 1 and 255 characters, and must match the following regular expression pattern: <code>[^:].*</code>]
|
401 |
+
* @param string $metric_name (Required) The name of the metric.
|
402 |
+
* @param string $start_time (Required) The time stamp to use for determining the first datapoint to return. The value specified is inclusive; results include datapoints with the time stamp specified. <p class="note">The specified start time is rounded down to the nearest value. Datapoints are returned for start times up to two weeks in the past. Specified start times that are more than two weeks in the past will not return datapoints for metrics that are older than two weeks.</p> May be passed as a number of seconds since UNIX Epoch, or any string compatible with <php:strtotime()>.
|
403 |
+
* @param string $end_time (Required) The time stamp to use for determining the last datapoint to return. The value specified is exclusive; results will include datapoints up to the time stamp specified. May be passed as a number of seconds since UNIX Epoch, or any string compatible with <php:strtotime()>.
|
404 |
+
* @param integer $period (Required) The granularity, in seconds, of the returned datapoints. <code>Period</code> must be at least 60 seconds and must be a multiple of 60. The default value is 60.
|
405 |
+
* @param string|array $statistics (Required) The metric statistics to return. Pass a string for a single value, or an indexed array for multiple values.
|
406 |
+
* @param string $unit (Required) The unit for the metric. [Allowed values: <code>Seconds</code>, <code>Microseconds</code>, <code>Milliseconds</code>, <code>Bytes</code>, <code>Kilobytes</code>, <code>Megabytes</code>, <code>Gigabytes</code>, <code>Terabytes</code>, <code>Bits</code>, <code>Kilobits</code>, <code>Megabits</code>, <code>Gigabits</code>, <code>Terabits</code>, <code>Percent</code>, <code>Count</code>, <code>Bytes/Second</code>, <code>Kilobytes/Second</code>, <code>Megabytes/Second</code>, <code>Gigabytes/Second</code>, <code>Terabytes/Second</code>, <code>Bits/Second</code>, <code>Kilobits/Second</code>, <code>Megabits/Second</code>, <code>Gigabits/Second</code>, <code>Terabits/Second</code>, <code>Count/Second</code>, <code>None</code>]
|
407 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
408 |
+
* <li><code>Dimensions</code> - <code>array</code> - Optional - A list of dimensions describing qualities of the metric. <ul>
|
409 |
+
* <li><code>x</code> - <code>array</code> - Optional - This represents a simple array index. <ul>
|
410 |
+
* <li><code>Name</code> - <code>string</code> - Required - The name of the dimension.</li>
|
411 |
+
* <li><code>Value</code> - <code>string</code> - Required - The value representing the dimension measurement</li>
|
412 |
+
* </ul></li>
|
413 |
+
* </ul></li>
|
414 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
415 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
416 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
417 |
+
*/
|
418 |
+
public function get_metric_statistics($namespace, $metric_name, $start_time, $end_time, $period, $statistics, $unit, $opt = null)
|
419 |
+
{
|
420 |
+
if (!$opt) $opt = array();
|
421 |
+
$opt['Namespace'] = $namespace;
|
422 |
+
$opt['MetricName'] = $metric_name;
|
423 |
+
$opt['Period'] = $period;
|
424 |
+
$opt['Unit'] = $unit;
|
425 |
+
$opt['StartTime'] = $this->util->convert_date_to_iso8601($start_time);
|
426 |
+
$opt['EndTime'] = $this->util->convert_date_to_iso8601($end_time);
|
427 |
+
|
428 |
+
// Required list (non-map)
|
429 |
+
$opt = array_merge($opt, CFComplexType::map(array(
|
430 |
+
'Statistics' => (is_array($statistics) ? $statistics : array($statistics))
|
431 |
+
), 'member'));
|
432 |
+
|
433 |
+
// Optional list + map
|
434 |
+
if (isset($opt['Dimensions']))
|
435 |
+
{
|
436 |
+
$opt = array_merge($opt, CFComplexType::map(array(
|
437 |
+
'Dimensions' => $opt['Dimensions']
|
438 |
+
), 'member'));
|
439 |
+
unset($opt['Dimensions']);
|
440 |
+
}
|
441 |
+
|
442 |
+
return $this->authenticate('GetMetricStatistics', $opt);
|
443 |
+
}
|
444 |
+
|
445 |
+
/**
|
446 |
+
* Returns a list of valid metrics stored for the AWS account owner. Returned metrics can be used
|
447 |
+
* with <code>GetMetricStatistics</code> to obtain statistical data for a given metric.
|
448 |
+
*
|
449 |
+
* <p class="note">
|
450 |
+
* Up to 500 results are returned for any one call. To retrieve further results, use returned
|
451 |
+
* <code>NextToken</code> values with subsequent <code>ListMetrics</code> operations.
|
452 |
+
* </p>
|
453 |
+
* <p class="note">
|
454 |
+
* If you create a metric with the <code>PutMetricData</code> action, allow up to fifteen minutes
|
455 |
+
* for the metric to appear in calls to the <code>ListMetrics</code> action.
|
456 |
+
* </p>
|
457 |
+
*
|
458 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
459 |
+
* <li><code>Namespace</code> - <code>string</code> - Optional - The namespace to filter against. [Constraints: The value must be between 1 and 255 characters, and must match the following regular expression pattern: <code>[^:].*</code>]</li>
|
460 |
+
* <li><code>MetricName</code> - <code>string</code> - Optional - The name of the metric to filter against.</li>
|
461 |
+
* <li><code>Dimensions</code> - <code>array</code> - Optional - A list of dimensions to filter against. <ul>
|
462 |
+
* <li><code>x</code> - <code>array</code> - Optional - This represents a simple array index. <ul>
|
463 |
+
* <li><code>Name</code> - <code>string</code> - Required - The dimension name to be matched.</li>
|
464 |
+
* <li><code>Value</code> - <code>string</code> - Optional - The value of the dimension to be matched. <p class="note">Specifying a <code>Name</code> without specifying a <code>Value</code> returns all values associated with that <code>Name</code>.</p></li>
|
465 |
+
* </ul></li>
|
466 |
+
* </ul></li>
|
467 |
+
* <li><code>NextToken</code> - <code>string</code> - Optional - The token returned by a previous call to indicate that there is more data available.</li>
|
468 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
469 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
470 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
471 |
+
*/
|
472 |
+
public function list_metrics($opt = null)
|
473 |
+
{
|
474 |
+
if (!$opt) $opt = array();
|
475 |
+
|
476 |
+
// Optional list + map
|
477 |
+
if (isset($opt['Dimensions']))
|
478 |
+
{
|
479 |
+
$opt = array_merge($opt, CFComplexType::map(array(
|
480 |
+
'Dimensions' => $opt['Dimensions']
|
481 |
+
), 'member'));
|
482 |
+
unset($opt['Dimensions']);
|
483 |
+
}
|
484 |
+
|
485 |
+
return $this->authenticate('ListMetrics', $opt);
|
486 |
+
}
|
487 |
+
|
488 |
+
/**
|
489 |
+
* Creates or updates an alarm and associates it with the specified Amazon CloudWatch metric.
|
490 |
+
* Optionally, this operation can associate one or more Amazon Simple Notification Service
|
491 |
+
* resources with the alarm.
|
492 |
+
*
|
493 |
+
* When this operation creates an alarm, the alarm state is immediately set to
|
494 |
+
* <code>INSUFFICIENT_DATA</code>. The alarm is evaluated and its <code>StateValue</code> is set
|
495 |
+
* appropriately. Any actions associated with the <code>StateValue</code> is then executed.
|
496 |
+
*
|
497 |
+
* <p class="note">
|
498 |
+
* When updating an existing alarm, its <code>StateValue</code> is left unchanged.
|
499 |
+
* </p>
|
500 |
+
*
|
501 |
+
* @param string $alarm_name (Required) The descriptive name for the alarm. This name must be unique within the user's AWS account
|
502 |
+
* @param string $metric_name (Required) The name for the alarm's associated metric.
|
503 |
+
* @param string $namespace (Required) The namespace for the alarm's associated metric. [Constraints: The value must be between 1 and 255 characters, and must match the following regular expression pattern: <code>[^:].*</code>]
|
504 |
+
* @param string $statistic (Required) The statistic to apply to the alarm's associated metric. [Allowed values: <code>SampleCount</code>, <code>Average</code>, <code>Sum</code>, <code>Minimum</code>, <code>Maximum</code>]
|
505 |
+
* @param integer $period (Required) The period in seconds over which the specified statistic is applied.
|
506 |
+
* @param integer $evaluation_periods (Required) The number of periods over which data is compared to the specified threshold.
|
507 |
+
* @param double $threshold (Required) The value against which the specified statistic is compared.
|
508 |
+
* @param string $comparison_operator (Required) The arithmetic operation to use when comparing the specified <code>Statistic</code> and <code>Threshold</code>. The specified <code>Statistic</code> value is used as the first operand. [Allowed values: <code>GreaterThanOrEqualToThreshold</code>, <code>GreaterThanThreshold</code>, <code>LessThanThreshold</code>, <code>LessThanOrEqualToThreshold</code>]
|
509 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
510 |
+
* <li><code>AlarmDescription</code> - <code>string</code> - Optional - The description for the alarm.</li>
|
511 |
+
* <li><code>ActionsEnabled</code> - <code>boolean</code> - Optional - Indicates whether or not actions should be executed during any changes to the alarm's state.</li>
|
512 |
+
* <li><code>OKActions</code> - <code>string|array</code> - Optional - The list of actions to execute when this alarm transitions into an <code>OK</code> state from any other state. Each action is specified as an Amazon Resource Number (ARN). Currently the only action supported is publishing to an Amazon SNS topic or an Amazon Auto Scaling policy. Pass a string for a single value, or an indexed array for multiple values.</li>
|
513 |
+
* <li><code>AlarmActions</code> - <code>string|array</code> - Optional - The list of actions to execute when this alarm transitions into an <code>ALARM</code> state from any other state. Each action is specified as an Amazon Resource Number (ARN). Currently the only action supported is publishing to an Amazon SNS topic or an Amazon Auto Scaling policy. Pass a string for a single value, or an indexed array for multiple values.</li>
|
514 |
+
* <li><code>InsufficientDataActions</code> - <code>string|array</code> - Optional - The list of actions to execute when this alarm transitions into an <code>INSUFFICIENT_DATA</code> state from any other state. Each action is specified as an Amazon Resource Number (ARN). Currently the only action supported is publishing to an Amazon SNS topic or an Amazon Auto Scaling policy. Pass a string for a single value, or an indexed array for multiple values.</li>
|
515 |
+
* <li><code>Dimensions</code> - <code>array</code> - Optional - The dimensions for the alarm's associated metric. <ul>
|
516 |
+
* <li><code>x</code> - <code>array</code> - Optional - This represents a simple array index. <ul>
|
517 |
+
* <li><code>Name</code> - <code>string</code> - Required - The name of the dimension.</li>
|
518 |
+
* <li><code>Value</code> - <code>string</code> - Required - The value representing the dimension measurement</li>
|
519 |
+
* </ul></li>
|
520 |
+
* </ul></li>
|
521 |
+
* <li><code>Unit</code> - <code>string</code> - Optional - The unit for the alarm's associated metric. [Allowed values: <code>Seconds</code>, <code>Microseconds</code>, <code>Milliseconds</code>, <code>Bytes</code>, <code>Kilobytes</code>, <code>Megabytes</code>, <code>Gigabytes</code>, <code>Terabytes</code>, <code>Bits</code>, <code>Kilobits</code>, <code>Megabits</code>, <code>Gigabits</code>, <code>Terabits</code>, <code>Percent</code>, <code>Count</code>, <code>Bytes/Second</code>, <code>Kilobytes/Second</code>, <code>Megabytes/Second</code>, <code>Gigabytes/Second</code>, <code>Terabytes/Second</code>, <code>Bits/Second</code>, <code>Kilobits/Second</code>, <code>Megabits/Second</code>, <code>Gigabits/Second</code>, <code>Terabits/Second</code>, <code>Count/Second</code>, <code>None</code>]</li>
|
522 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
523 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
524 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
525 |
+
*/
|
526 |
+
public function put_metric_alarm($alarm_name, $metric_name, $namespace, $statistic, $period, $evaluation_periods, $threshold, $comparison_operator, $opt = null)
|
527 |
+
{
|
528 |
+
if (!$opt) $opt = array();
|
529 |
+
$opt['AlarmName'] = $alarm_name;
|
530 |
+
$opt['MetricName'] = $metric_name;
|
531 |
+
$opt['Namespace'] = $namespace;
|
532 |
+
$opt['Statistic'] = $statistic;
|
533 |
+
$opt['Period'] = $period;
|
534 |
+
$opt['EvaluationPeriods'] = $evaluation_periods;
|
535 |
+
$opt['Threshold'] = $threshold;
|
536 |
+
$opt['ComparisonOperator'] = $comparison_operator;
|
537 |
+
|
538 |
+
// Optional list (non-map)
|
539 |
+
if (isset($opt['OKActions']))
|
540 |
+
{
|
541 |
+
$opt = array_merge($opt, CFComplexType::map(array(
|
542 |
+
'OKActions' => (is_array($opt['OKActions']) ? $opt['OKActions'] : array($opt['OKActions']))
|
543 |
+
), 'member'));
|
544 |
+
unset($opt['OKActions']);
|
545 |
+
}
|
546 |
+
|
547 |
+
// Optional list (non-map)
|
548 |
+
if (isset($opt['AlarmActions']))
|
549 |
+
{
|
550 |
+
$opt = array_merge($opt, CFComplexType::map(array(
|
551 |
+
'AlarmActions' => (is_array($opt['AlarmActions']) ? $opt['AlarmActions'] : array($opt['AlarmActions']))
|
552 |
+
), 'member'));
|
553 |
+
unset($opt['AlarmActions']);
|
554 |
+
}
|
555 |
+
|
556 |
+
// Optional list (non-map)
|
557 |
+
if (isset($opt['InsufficientDataActions']))
|
558 |
+
{
|
559 |
+
$opt = array_merge($opt, CFComplexType::map(array(
|
560 |
+
'InsufficientDataActions' => (is_array($opt['InsufficientDataActions']) ? $opt['InsufficientDataActions'] : array($opt['InsufficientDataActions']))
|
561 |
+
), 'member'));
|
562 |
+
unset($opt['InsufficientDataActions']);
|
563 |
+
}
|
564 |
+
|
565 |
+
// Optional list + map
|
566 |
+
if (isset($opt['Dimensions']))
|
567 |
+
{
|
568 |
+
$opt = array_merge($opt, CFComplexType::map(array(
|
569 |
+
'Dimensions' => $opt['Dimensions']
|
570 |
+
), 'member'));
|
571 |
+
unset($opt['Dimensions']);
|
572 |
+
}
|
573 |
+
|
574 |
+
return $this->authenticate('PutMetricAlarm', $opt);
|
575 |
+
}
|
576 |
+
|
577 |
+
/**
|
578 |
+
* Publishes metric data points to Amazon CloudWatch. Amazon Cloudwatch associates the data points
|
579 |
+
* with the specified metric. If the specified metric does not exist, Amazon CloudWatch creates
|
580 |
+
* the metric.
|
581 |
+
*
|
582 |
+
* <p class="note">
|
583 |
+
* If you create a metric with the <code>PutMetricData</code> action, allow up to fifteen minutes
|
584 |
+
* for the metric to appear in calls to the <code>ListMetrics</code> action.
|
585 |
+
* </p>
|
586 |
+
* The size of aPutMetricDatarequest is limited to 8 KB for HTTP GET requests and 40 KB for HTTP
|
587 |
+
* POST requests.
|
588 |
+
*
|
589 |
+
* <p class="important">
|
590 |
+
* Although the <code>Value</code> parameter accepts numbers of type <code>Double</code>, Amazon
|
591 |
+
* CloudWatch truncates values with very large exponents. Values with base-10 exponents greater
|
592 |
+
* than 126 (1 x 10^126) are truncated. Likewise, values with base-10 exponents less than -130 (1
|
593 |
+
* x 10^-130) are also truncated.
|
594 |
+
* </p>
|
595 |
+
*
|
596 |
+
* @param string $namespace (Required) The namespace for the metric data. [Constraints: The value must be between 1 and 255 characters, and must match the following regular expression pattern: <code>[^:].*</code>]
|
597 |
+
* @param array $metric_data (Required) A list of data describing the metric. <ul>
|
598 |
+
* <li><code>x</code> - <code>array</code> - Optional - This represents a simple array index. <ul>
|
599 |
+
* <li><code>MetricName</code> - <code>string</code> - Required - The name of the metric.</li>
|
600 |
+
* <li><code>Dimensions</code> - <code>array</code> - Optional - A list of dimensions associated with the metric. <ul>
|
601 |
+
* <li><code>x</code> - <code>array</code> - Optional - This represents a simple array index. <ul>
|
602 |
+
* <li><code>Name</code> - <code>string</code> - Required - The name of the dimension.</li>
|
603 |
+
* <li><code>Value</code> - <code>string</code> - Required - The value representing the dimension measurement</li>
|
604 |
+
* </ul></li>
|
605 |
+
* </ul></li>
|
606 |
+
* <li><code>Timestamp</code> - <code>string</code> - Optional - The time stamp used for the metric. If not specified, the default value is set to the time the metric data was received. May be passed as a number of seconds since UNIX Epoch, or any string compatible with <php:strtotime()>.</li>
|
607 |
+
* <li><code>Value</code> - <code>double</code> - Optional - The value for the metric. <p class="important">Although the <code>Value</code> parameter accepts numbers of type <code>Double</code>, Amazon CloudWatch truncates values with very large exponents. Values with base-10 exponents greater than 126 (1 x 10^126) are truncated. Likewise, values with base-10 exponents less than -130 (1 x 10^-130) are also truncated.</p></li>
|
608 |
+
* <li><code>StatisticValues</code> - <code>array</code> - Optional - A set of statistical values describing the metric. <ul>
|
609 |
+
* <li><code>x</code> - <code>array</code> - Optional - This represents a simple array index. <ul>
|
610 |
+
* <li><code>SampleCount</code> - <code>double</code> - Required - The number of samples used for the statistic set.</li>
|
611 |
+
* <li><code>Sum</code> - <code>double</code> - Required - The sum of values for the sample set.</li>
|
612 |
+
* <li><code>Minimum</code> - <code>double</code> - Required - The minimum value of the sample set.</li>
|
613 |
+
* <li><code>Maximum</code> - <code>double</code> - Required - The maximum value of the sample set.</li>
|
614 |
+
* </ul></li>
|
615 |
+
* </ul></li>
|
616 |
+
* <li><code>Unit</code> - <code>string</code> - Optional - The unit of the metric. [Allowed values: <code>Seconds</code>, <code>Microseconds</code>, <code>Milliseconds</code>, <code>Bytes</code>, <code>Kilobytes</code>, <code>Megabytes</code>, <code>Gigabytes</code>, <code>Terabytes</code>, <code>Bits</code>, <code>Kilobits</code>, <code>Megabits</code>, <code>Gigabits</code>, <code>Terabits</code>, <code>Percent</code>, <code>Count</code>, <code>Bytes/Second</code>, <code>Kilobytes/Second</code>, <code>Megabytes/Second</code>, <code>Gigabytes/Second</code>, <code>Terabytes/Second</code>, <code>Bits/Second</code>, <code>Kilobits/Second</code>, <code>Megabits/Second</code>, <code>Gigabits/Second</code>, <code>Terabits/Second</code>, <code>Count/Second</code>, <code>None</code>]</li>
|
617 |
+
* </ul></li>
|
618 |
+
* </ul>
|
619 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
620 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
621 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
622 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
623 |
+
*/
|
624 |
+
public function put_metric_data($namespace, $metric_data, $opt = null)
|
625 |
+
{
|
626 |
+
if (!$opt) $opt = array();
|
627 |
+
$opt['Namespace'] = $namespace;
|
628 |
+
|
629 |
+
// Handle Timestamps
|
630 |
+
for ($i = 0, $max = count($metric_data); $i < $max; $i++)
|
631 |
+
{
|
632 |
+
if (isset($metric_data[$i]['Timestamp']))
|
633 |
+
{
|
634 |
+
$metric_data[$i]['Timestamp'] = $this->util->convert_date_to_iso8601($metric_data[$i]['Timestamp']);
|
635 |
+
}
|
636 |
+
}
|
637 |
+
|
638 |
+
// Required parameter
|
639 |
+
$opt = array_merge($opt, CFComplexType::map(array(
|
640 |
+
'MetricData' => (is_array($metric_data) ? $metric_data : array($metric_data))
|
641 |
+
), 'member'));
|
642 |
+
|
643 |
+
return $this->authenticate('PutMetricData', $opt, $this->hostname);
|
644 |
+
}
|
645 |
+
|
646 |
+
/**
|
647 |
+
* Temporarily sets the state of an alarm. When the updated <code>StateValue</code> differs from
|
648 |
+
* the previous value, the action configured for the appropriate state is invoked. This is not a
|
649 |
+
* permanent change. The next periodic alarm check (in about a minute) will set the alarm to its
|
650 |
+
* actual state.
|
651 |
+
*
|
652 |
+
* @param string $alarm_name (Required) The descriptive name for the alarm. This name must be unique within the user's AWS account. The maximum length is 255 characters.
|
653 |
+
* @param string $state_value (Required) The value of the state. [Allowed values: <code>OK</code>, <code>ALARM</code>, <code>INSUFFICIENT_DATA</code>]
|
654 |
+
* @param string $state_reason (Required) The reason that this alarm is set to this specific state (in human-readable text format)
|
655 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
656 |
+
* <li><code>StateReasonData</code> - <code>string</code> - Optional - The reason that this alarm is set to this specific state (in machine-readable JSON format)</li>
|
657 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
658 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
659 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
660 |
+
*/
|
661 |
+
public function set_alarm_state($alarm_name, $state_value, $state_reason, $opt = null)
|
662 |
+
{
|
663 |
+
if (!$opt) $opt = array();
|
664 |
+
$opt['AlarmName'] = $alarm_name;
|
665 |
+
$opt['StateValue'] = $state_value;
|
666 |
+
$opt['StateReason'] = $state_reason;
|
667 |
+
|
668 |
+
return $this->authenticate('SetAlarmState', $opt);
|
669 |
+
}
|
670 |
+
}
|
671 |
+
|
672 |
+
|
673 |
+
/*%******************************************************************************************%*/
|
674 |
+
// EXCEPTIONS
|
675 |
+
|
676 |
+
class CloudWatch_Exception extends Exception {}
|
sdk/Aws_v1/services/dynamodb.class.php
ADDED
@@ -0,0 +1,1189 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* Copyright 2010-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
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 |
+
* A copy of the License is located at
|
8 |
+
*
|
9 |
+
* http://aws.amazon.com/apache2.0
|
10 |
+
*
|
11 |
+
* or in the "license" file accompanying this file. This file is distributed
|
12 |
+
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
|
13 |
+
* express or implied. See the License for the specific language governing
|
14 |
+
* permissions and limitations under the License.
|
15 |
+
*/
|
16 |
+
|
17 |
+
/**
|
18 |
+
* Amazon DynamoDB is a fast, highly scalable, highly available, cost-effective non-relational
|
19 |
+
* database service.
|
20 |
+
*
|
21 |
+
* Amazon DynamoDB removes traditional scalability limitations on data storage while maintaining
|
22 |
+
* low latency and predictable performance.
|
23 |
+
*
|
24 |
+
* @version 2013.01.14
|
25 |
+
* @license See the included NOTICE.md file for complete information.
|
26 |
+
* @copyright See the included NOTICE.md file for complete information.
|
27 |
+
* @link http://aws.amazon.com/dynamodb/ Amazon DynamoDB
|
28 |
+
* @link http://aws.amazon.com/dynamodb/documentation/ Amazon DynamoDB documentation
|
29 |
+
*/
|
30 |
+
class AmazonDynamoDB extends CFRuntime
|
31 |
+
{
|
32 |
+
/*%******************************************************************************************%*/
|
33 |
+
// CLASS CONSTANTS
|
34 |
+
|
35 |
+
/**
|
36 |
+
* Specify the queue URL for the United States East (Northern Virginia) Region.
|
37 |
+
*/
|
38 |
+
const REGION_US_E1 = 'dynamodb.us-east-1.amazonaws.com';
|
39 |
+
|
40 |
+
/**
|
41 |
+
* Specify the queue URL for the United States East (Northern Virginia) Region.
|
42 |
+
*/
|
43 |
+
const REGION_VIRGINIA = self::REGION_US_E1;
|
44 |
+
|
45 |
+
/**
|
46 |
+
* Specify the queue URL for the United States West (Northern California) Region.
|
47 |
+
*/
|
48 |
+
const REGION_US_W1 = 'dynamodb.us-west-1.amazonaws.com';
|
49 |
+
|
50 |
+
/**
|
51 |
+
* Specify the queue URL for the United States West (Northern California) Region.
|
52 |
+
*/
|
53 |
+
const REGION_CALIFORNIA = self::REGION_US_W1;
|
54 |
+
|
55 |
+
/**
|
56 |
+
* Specify the queue URL for the United States West (Oregon) Region.
|
57 |
+
*/
|
58 |
+
const REGION_US_W2 = 'dynamodb.us-west-2.amazonaws.com';
|
59 |
+
|
60 |
+
/**
|
61 |
+
* Specify the queue URL for the United States West (Oregon) Region.
|
62 |
+
*/
|
63 |
+
const REGION_OREGON = self::REGION_US_W2;
|
64 |
+
|
65 |
+
/**
|
66 |
+
* Specify the queue URL for the Europe West (Ireland) Region.
|
67 |
+
*/
|
68 |
+
const REGION_EU_W1 = 'dynamodb.eu-west-1.amazonaws.com';
|
69 |
+
|
70 |
+
/**
|
71 |
+
* Specify the queue URL for the Europe West (Ireland) Region.
|
72 |
+
*/
|
73 |
+
const REGION_IRELAND = self::REGION_EU_W1;
|
74 |
+
|
75 |
+
/**
|
76 |
+
* Specify the queue URL for the Asia Pacific Southeast (Singapore) Region.
|
77 |
+
*/
|
78 |
+
const REGION_APAC_SE1 = 'dynamodb.ap-southeast-1.amazonaws.com';
|
79 |
+
|
80 |
+
/**
|
81 |
+
* Specify the queue URL for the Asia Pacific Southeast (Singapore) Region.
|
82 |
+
*/
|
83 |
+
const REGION_SINGAPORE = self::REGION_APAC_SE1;
|
84 |
+
|
85 |
+
/**
|
86 |
+
* Specify the queue URL for the Asia Pacific Southeast (Singapore) Region.
|
87 |
+
*/
|
88 |
+
const REGION_APAC_SE2 = 'dynamodb.ap-southeast-2.amazonaws.com';
|
89 |
+
|
90 |
+
/**
|
91 |
+
* Specify the queue URL for the Asia Pacific Southeast (Singapore) Region.
|
92 |
+
*/
|
93 |
+
const REGION_SYDNEY = self::REGION_APAC_SE2;
|
94 |
+
|
95 |
+
/**
|
96 |
+
* Specify the queue URL for the Asia Pacific Northeast (Tokyo) Region.
|
97 |
+
*/
|
98 |
+
const REGION_APAC_NE1 = 'dynamodb.ap-northeast-1.amazonaws.com';
|
99 |
+
|
100 |
+
/**
|
101 |
+
* Specify the queue URL for the Asia Pacific Northeast (Tokyo) Region.
|
102 |
+
*/
|
103 |
+
const REGION_TOKYO = self::REGION_APAC_NE1;
|
104 |
+
|
105 |
+
/**
|
106 |
+
* Specify the queue URL for the South America (Sao Paulo) Region.
|
107 |
+
*/
|
108 |
+
const REGION_SA_E1 = 'dynamodb.sa-east-1.amazonaws.com';
|
109 |
+
|
110 |
+
/**
|
111 |
+
* Specify the queue URL for the South America (Sao Paulo) Region.
|
112 |
+
*/
|
113 |
+
const REGION_SAO_PAULO = self::REGION_SA_E1;
|
114 |
+
|
115 |
+
/**
|
116 |
+
* Specify the queue URL for the United States GovCloud Region.
|
117 |
+
*/
|
118 |
+
const REGION_US_GOV1 = 'dynamodb.us-gov-west-1.amazonaws.com';
|
119 |
+
|
120 |
+
/**
|
121 |
+
* Default service endpoint.
|
122 |
+
*/
|
123 |
+
const DEFAULT_URL = self::REGION_US_E1;
|
124 |
+
|
125 |
+
|
126 |
+
/*%******************************************************************************************%*/
|
127 |
+
// ACTION CONSTANTS
|
128 |
+
|
129 |
+
/**
|
130 |
+
* Action: Add
|
131 |
+
*/
|
132 |
+
const ACTION_ADD = 'ADD';
|
133 |
+
|
134 |
+
/**
|
135 |
+
* Action: Delete
|
136 |
+
*/
|
137 |
+
const ACTION_DELETE = 'DELETE';
|
138 |
+
|
139 |
+
/**
|
140 |
+
* Action: Put
|
141 |
+
*/
|
142 |
+
const ACTION_PUT = 'PUT';
|
143 |
+
|
144 |
+
|
145 |
+
/*%******************************************************************************************%*/
|
146 |
+
// CONDITION CONSTANTS
|
147 |
+
|
148 |
+
/**
|
149 |
+
* Condition operator: Equal To
|
150 |
+
*/
|
151 |
+
const CONDITION_EQUAL = 'EQ';
|
152 |
+
|
153 |
+
/**
|
154 |
+
* Condition operator: Not Equal To
|
155 |
+
*/
|
156 |
+
const CONDITION_NOT_EQUAL = 'NE';
|
157 |
+
|
158 |
+
/**
|
159 |
+
* Condition operator: Less Than
|
160 |
+
*/
|
161 |
+
const CONDITION_LESS_THAN = 'LT';
|
162 |
+
|
163 |
+
/**
|
164 |
+
* Condition operator: Less Than or Equal To
|
165 |
+
*/
|
166 |
+
const CONDITION_LESS_THAN_OR_EQUAL = 'LE';
|
167 |
+
|
168 |
+
/**
|
169 |
+
* Condition operator: Greater Than or Equal To
|
170 |
+
*/
|
171 |
+
const CONDITION_GREATER_THAN = 'GT';
|
172 |
+
|
173 |
+
/**
|
174 |
+
* Condition operator: Greater Than or Equal To
|
175 |
+
*/
|
176 |
+
const CONDITION_GREATER_THAN_OR_EQUAL = 'GE';
|
177 |
+
|
178 |
+
/**
|
179 |
+
* Condition operator: Null
|
180 |
+
*/
|
181 |
+
const CONDITION_NULL = 'NULL';
|
182 |
+
|
183 |
+
/**
|
184 |
+
* Condition operator: Not Null
|
185 |
+
*/
|
186 |
+
const CONDITION_NOT_NULL = 'NOT_NULL';
|
187 |
+
|
188 |
+
/**
|
189 |
+
* Condition operator: Contains
|
190 |
+
*/
|
191 |
+
const CONDITION_CONTAINS = 'CONTAINS';
|
192 |
+
|
193 |
+
/**
|
194 |
+
* Condition operator: Doesn't Contain
|
195 |
+
*/
|
196 |
+
const CONDITION_DOESNT_CONTAIN = 'NOT_CONTAINS';
|
197 |
+
|
198 |
+
/**
|
199 |
+
* Condition operator: In
|
200 |
+
*/
|
201 |
+
const CONDITION_IN = 'IN';
|
202 |
+
|
203 |
+
/**
|
204 |
+
* Condition operator: Between
|
205 |
+
*/
|
206 |
+
const CONDITION_BETWEEN = 'BETWEEN';
|
207 |
+
|
208 |
+
/**
|
209 |
+
* Condition operator: Begins With
|
210 |
+
*/
|
211 |
+
const CONDITION_BEGINS_WITH = 'BEGINS_WITH';
|
212 |
+
|
213 |
+
|
214 |
+
/*%******************************************************************************************%*/
|
215 |
+
// RETURN CONSTANTS
|
216 |
+
|
217 |
+
/**
|
218 |
+
* Return value type: NONE
|
219 |
+
*/
|
220 |
+
const RETURN_NONE = 'NONE';
|
221 |
+
|
222 |
+
/**
|
223 |
+
* Return value type: ALL_OLD
|
224 |
+
*/
|
225 |
+
const RETURN_ALL_OLD = 'ALL_OLD';
|
226 |
+
|
227 |
+
/**
|
228 |
+
* Return value type: ALL_NEW
|
229 |
+
*/
|
230 |
+
const RETURN_ALL_NEW = 'ALL_NEW';
|
231 |
+
|
232 |
+
/**
|
233 |
+
* Return value type: UPDATED_OLD
|
234 |
+
*/
|
235 |
+
const RETURN_UPDATED_OLD = 'UPDATED_OLD';
|
236 |
+
|
237 |
+
/**
|
238 |
+
* Return value type: UPDATED_NEW
|
239 |
+
*/
|
240 |
+
const RETURN_UPDATED_NEW = 'UPDATED_NEW';
|
241 |
+
|
242 |
+
|
243 |
+
/*%******************************************************************************************%*/
|
244 |
+
// TYPE CONSTANTS
|
245 |
+
|
246 |
+
/**
|
247 |
+
* Content type: string
|
248 |
+
*/
|
249 |
+
const TYPE_STRING = 'S';
|
250 |
+
|
251 |
+
/**
|
252 |
+
* Content type: number
|
253 |
+
*/
|
254 |
+
const TYPE_NUMBER = 'N';
|
255 |
+
|
256 |
+
/**
|
257 |
+
* Content type: binary
|
258 |
+
*/
|
259 |
+
const TYPE_BINARY = 'B';
|
260 |
+
|
261 |
+
/**
|
262 |
+
* Content type: string set
|
263 |
+
*/
|
264 |
+
const TYPE_STRING_SET = 'SS';
|
265 |
+
|
266 |
+
/**
|
267 |
+
* Content type: number set
|
268 |
+
*/
|
269 |
+
const TYPE_NUMBER_SET = 'NS';
|
270 |
+
|
271 |
+
/**
|
272 |
+
* Content type: binary set
|
273 |
+
*/
|
274 |
+
const TYPE_BINARY_SET = 'BS';
|
275 |
+
|
276 |
+
/**
|
277 |
+
* Content type: string set
|
278 |
+
* @deprecated Please use TYPE_STRING_SET
|
279 |
+
*/
|
280 |
+
const TYPE_ARRAY_OF_STRINGS = self::TYPE_STRING_SET;
|
281 |
+
|
282 |
+
/**
|
283 |
+
* Content type: number set
|
284 |
+
* @deprecated Please use TYPE_NUMBER_SET
|
285 |
+
*/
|
286 |
+
const TYPE_ARRAY_OF_NUMBERS = self::TYPE_NUMBER_SET;
|
287 |
+
|
288 |
+
/**
|
289 |
+
* Content type: binary set
|
290 |
+
* @deprecated Please use TYPE_BINARY_SET
|
291 |
+
*/
|
292 |
+
const TYPE_ARRAY_OF_BINARIES = self::TYPE_BINARY_SET;
|
293 |
+
|
294 |
+
/**
|
295 |
+
* The suffix used for identifying a set type
|
296 |
+
*/
|
297 |
+
const SUFFIX_FOR_TYPES = 'S';
|
298 |
+
|
299 |
+
|
300 |
+
/*%******************************************************************************************%*/
|
301 |
+
// CONSTRUCTOR
|
302 |
+
|
303 |
+
/**
|
304 |
+
* Constructs a new instance of <AmazonDynamoDB>.
|
305 |
+
*
|
306 |
+
* @param array $options (Optional) An associative array of parameters that can have the following keys: <ul>
|
307 |
+
* <li><code>certificate_authority</code> - <code>boolean</code> - Optional - Determines which Cerificate Authority file to use. A value of boolean <code>false</code> will use the Certificate Authority file available on the system. A value of boolean <code>true</code> will use the Certificate Authority provided by the SDK. Passing a file system path to a Certificate Authority file (chmodded to <code>0755</code>) will use that. Leave this set to <code>false</code> if you're not sure.</li>
|
308 |
+
* <li><code>credentials</code> - <code>string</code> - Optional - The name of the credential set to use for authentication.</li>
|
309 |
+
* <li><code>default_cache_config</code> - <code>string</code> - Optional - This option allows a preferred storage type to be configured for long-term caching. This can be changed later using the <set_cache_config()> method. Valid values are: <code>apc</code>, <code>xcache</code>, or a file system path such as <code>./cache</code> or <code>/tmp/cache/</code>.</li>
|
310 |
+
* <li><code>key</code> - <code>string</code> - Optional - Your AWS key, or a session key. If blank, the default credential set will be used.</li>
|
311 |
+
* <li><code>secret</code> - <code>string</code> - Optional - Your AWS secret key, or a session secret key. If blank, the default credential set will be used.</li>
|
312 |
+
* <li><code>token</code> - <code>string</code> - Optional - An AWS session token.</li></ul>
|
313 |
+
* @return void
|
314 |
+
*/
|
315 |
+
public function __construct(array $options = array())
|
316 |
+
{
|
317 |
+
$this->api_version = '2011-12-05';
|
318 |
+
$this->hostname = self::DEFAULT_URL;
|
319 |
+
$this->auth_class = 'AuthV4JSON';
|
320 |
+
$this->operation_prefix = 'x-amz-target:DynamoDB_20111205.';
|
321 |
+
|
322 |
+
parent::__construct($options);
|
323 |
+
}
|
324 |
+
|
325 |
+
|
326 |
+
/*%******************************************************************************************%*/
|
327 |
+
// SETTERS
|
328 |
+
|
329 |
+
/**
|
330 |
+
* This allows you to explicitly sets the region for the service to use.
|
331 |
+
*
|
332 |
+
* @param string $region (Required) The region to explicitly set. Available options are <REGION_US_E1>, <REGION_US_W1>, <REGION_US_W2>, <REGION_EU_W1>, <REGION_APAC_SE1>, <REGION_APAC_SE2>, <REGION_APAC_NE1>, <REGION_SA_E1>, <REGION_US_GOV1>.
|
333 |
+
* @return $this A reference to the current instance.
|
334 |
+
*/
|
335 |
+
public function set_region($region)
|
336 |
+
{
|
337 |
+
// @codeCoverageIgnoreStart
|
338 |
+
$this->set_hostname($region);
|
339 |
+
return $this;
|
340 |
+
// @codeCoverageIgnoreEnd
|
341 |
+
}
|
342 |
+
|
343 |
+
|
344 |
+
/*%******************************************************************************************%*/
|
345 |
+
// CONVENIENCE METHODS
|
346 |
+
|
347 |
+
/**
|
348 |
+
* Registers DynamoDB as the default session handler for PHP.
|
349 |
+
*
|
350 |
+
* @param array $config (Optional) An array of configuration items for the session handler.
|
351 |
+
* @return DynamoDBSessionHandler The session handler object.
|
352 |
+
*/
|
353 |
+
public function register_session_handler(array $config = array())
|
354 |
+
{
|
355 |
+
require_once dirname(dirname(__FILE__)) . DIRECTORY_SEPARATOR . 'extensions'
|
356 |
+
. DIRECTORY_SEPARATOR . 'dynamodbsessionhandler.class.php';
|
357 |
+
|
358 |
+
$dynamo_session_handler = new DynamoDBSessionHandler($this, $config);
|
359 |
+
$dynamo_session_handler->register();
|
360 |
+
|
361 |
+
return $dynamo_session_handler;
|
362 |
+
}
|
363 |
+
|
364 |
+
/**
|
365 |
+
* Formats a value into the DynamoDB attribute value format (e.g. <code>array('S' => 'value')</code> ).
|
366 |
+
*
|
367 |
+
* @param mixed $value (Required) The value to be formatted.
|
368 |
+
* @param string $format (Optional) The format of the result (based loosely on the type of operation)
|
369 |
+
* @param string $type_override (Optional) Any valid attribute type to override the calculated type.
|
370 |
+
* @return array An attribute value suitable for DynamoDB.
|
371 |
+
*/
|
372 |
+
public function attribute($value, $format = 'put', $type_override = null)
|
373 |
+
{
|
374 |
+
$info = $this->get_attribute_value_info($value);
|
375 |
+
|
376 |
+
if (!$info)
|
377 |
+
{
|
378 |
+
return null;
|
379 |
+
}
|
380 |
+
|
381 |
+
if ($type_override)
|
382 |
+
{
|
383 |
+
static $valid_types = array(
|
384 |
+
self::TYPE_STRING,
|
385 |
+
self::TYPE_NUMBER,
|
386 |
+
self::TYPE_BINARY,
|
387 |
+
self::TYPE_STRING_SET,
|
388 |
+
self::TYPE_NUMBER_SET,
|
389 |
+
self::TYPE_BINARY_SET,
|
390 |
+
);
|
391 |
+
|
392 |
+
$info['type'] = in_array($type_override, $valid_types) ? $type_override : $info['type'];
|
393 |
+
}
|
394 |
+
|
395 |
+
$result = array($info['type'] => $info['value']);
|
396 |
+
|
397 |
+
// In some cases the result needs to be wrapped with "Value"
|
398 |
+
if ($format === 'update' || $format === 'expected')
|
399 |
+
{
|
400 |
+
$result = array('Value' => $result);
|
401 |
+
}
|
402 |
+
|
403 |
+
return $result;
|
404 |
+
}
|
405 |
+
|
406 |
+
/**
|
407 |
+
* Formats a set of values into the DynamoDB attribute value format.
|
408 |
+
*
|
409 |
+
* @param array $values (Required) The values to be formatted.
|
410 |
+
* @param string $format (Optional) The format of the result (based loosely on the type of operation)
|
411 |
+
* @return array The formatted array.
|
412 |
+
*/
|
413 |
+
public function attributes(array $values, $format = 'put')
|
414 |
+
{
|
415 |
+
$results = array();
|
416 |
+
|
417 |
+
foreach ($values as $key => $value)
|
418 |
+
{
|
419 |
+
$results[$key] = $this->attribute($value, $format);
|
420 |
+
}
|
421 |
+
|
422 |
+
$results = array_filter($results);
|
423 |
+
|
424 |
+
return $results;
|
425 |
+
}
|
426 |
+
|
427 |
+
/**
|
428 |
+
* An internal, recursive function for doing the attribute value formatting.
|
429 |
+
*
|
430 |
+
* @param mixed $value (Required) The value being formatted.
|
431 |
+
* @param integer $depth (Optional) The current recursion level. Anything higher than one will terminate the function.
|
432 |
+
* @return array An array of information about the attribute value, including it's string value and type.
|
433 |
+
*/
|
434 |
+
protected function get_attribute_value_info($value, $depth = 0)
|
435 |
+
{
|
436 |
+
// If the recursion limit is succeeded, then the value is invalid
|
437 |
+
if ($depth > 1)
|
438 |
+
{
|
439 |
+
return null;
|
440 |
+
}
|
441 |
+
|
442 |
+
// Handle objects (including DynamoDB Binary types)
|
443 |
+
if (is_object($value))
|
444 |
+
{
|
445 |
+
if ($value instanceof DynamoDB_Binary || $value instanceof DynamoDB_BinarySet)
|
446 |
+
{
|
447 |
+
$type = ($value instanceof DynamoDB_Binary) ? self::TYPE_BINARY : self::TYPE_BINARY_SET;
|
448 |
+
return array(
|
449 |
+
'value' => $value->{$type},
|
450 |
+
'type' => $type
|
451 |
+
);
|
452 |
+
}
|
453 |
+
elseif ($value instanceof Traversable)
|
454 |
+
{
|
455 |
+
$value = iterator_to_array($value);
|
456 |
+
}
|
457 |
+
elseif (method_exists($value, '__toString'))
|
458 |
+
{
|
459 |
+
$value = (string) $value;
|
460 |
+
}
|
461 |
+
else
|
462 |
+
{
|
463 |
+
return null;
|
464 |
+
}
|
465 |
+
}
|
466 |
+
|
467 |
+
// Handle empty values (zeroes are OK though) and resources
|
468 |
+
if ($value === null || $value === array() || $value === '' || is_resource($value))
|
469 |
+
{
|
470 |
+
return null;
|
471 |
+
}
|
472 |
+
|
473 |
+
// Create the attribute value info
|
474 |
+
$info = array();
|
475 |
+
|
476 |
+
// Handle boolean values
|
477 |
+
if (is_bool($value))
|
478 |
+
{
|
479 |
+
$info['type'] = self::TYPE_NUMBER;
|
480 |
+
$info['value'] = $value ? '1' : '0';
|
481 |
+
}
|
482 |
+
// Handle numeric values
|
483 |
+
elseif (is_int($value) || is_float($value))
|
484 |
+
{
|
485 |
+
$info['type'] = self::TYPE_NUMBER;
|
486 |
+
$info['value'] = (string) $value;
|
487 |
+
}
|
488 |
+
// Handle arrays
|
489 |
+
elseif (is_array($value))
|
490 |
+
{
|
491 |
+
$set_type = null;
|
492 |
+
$info['value'] = array();
|
493 |
+
|
494 |
+
// Loop through each value to analyze and prepare it
|
495 |
+
foreach ($value as $sub_value)
|
496 |
+
{
|
497 |
+
// Recursively get the info for this sub-value. The depth param only allows one level of recursion
|
498 |
+
$sub_info = $this->get_attribute_value_info($sub_value, $depth + 1);
|
499 |
+
|
500 |
+
// If a sub-value is invalid, the whole array is invalid as well
|
501 |
+
if ($sub_info === null)
|
502 |
+
{
|
503 |
+
return null;
|
504 |
+
}
|
505 |
+
|
506 |
+
// The type of each sub-value must be the same, or else the whole array is invalid
|
507 |
+
if ($set_type === null)
|
508 |
+
{
|
509 |
+
$set_type = $sub_info['type'];
|
510 |
+
}
|
511 |
+
elseif ($set_type !== $sub_info['type'])
|
512 |
+
{
|
513 |
+
return null;
|
514 |
+
}
|
515 |
+
|
516 |
+
// Save the value for the upstream array
|
517 |
+
$info['value'][] = $sub_info['value'];
|
518 |
+
}
|
519 |
+
|
520 |
+
// Make sure the type is changed to be the appropriate array/set type
|
521 |
+
$info['type'] = $set_type . self::SUFFIX_FOR_TYPES;
|
522 |
+
}
|
523 |
+
// Handle strings
|
524 |
+
else
|
525 |
+
{
|
526 |
+
$info = array('value' => (string) $value, 'type' => self::TYPE_STRING);
|
527 |
+
}
|
528 |
+
|
529 |
+
return $info;
|
530 |
+
}
|
531 |
+
|
532 |
+
/**
|
533 |
+
* A shortcut/factory-type method for indicating a DynamoDB binary type. Binary types are
|
534 |
+
* like strings but get base64 encoded automatically. The DynamoDB service decodes these
|
535 |
+
* values and stores them in the raw format. This allows the transfer of binary data to
|
536 |
+
* DynamoDB without the extra storage costs of the base64 encoding inflation.
|
537 |
+
*
|
538 |
+
* @param string $value (Required) The value to be converted to a binary type
|
539 |
+
* @return DynamoDB_Binary
|
540 |
+
*/
|
541 |
+
public function binary($value)
|
542 |
+
{
|
543 |
+
return new DynamoDB_Binary($value);
|
544 |
+
}
|
545 |
+
|
546 |
+
/**
|
547 |
+
* A shortcut/factory-type method for indicating a DynamoDB binary set type.
|
548 |
+
*
|
549 |
+
* @param array $values (Required) The values to be converted to a binary set.
|
550 |
+
* @return DynamoDB_BinarySet
|
551 |
+
*/
|
552 |
+
public function binary_set($values)
|
553 |
+
{
|
554 |
+
if (is_scalar($values))
|
555 |
+
{
|
556 |
+
$values = func_get_args();
|
557 |
+
}
|
558 |
+
|
559 |
+
return new DynamoDB_BinarySet($values);
|
560 |
+
}
|
561 |
+
|
562 |
+
|
563 |
+
/*%******************************************************************************************%*/
|
564 |
+
// SERVICE METHODS
|
565 |
+
|
566 |
+
/**
|
567 |
+
* Retrieves the attributes for multiple items from multiple tables using their primary keys.
|
568 |
+
*
|
569 |
+
* The maximum number of item attributes that can be retrieved for a single operation is 100.
|
570 |
+
* Also, the number of items retrieved is constrained by a 1 MB the size limit. If the response
|
571 |
+
* size limit is exceeded or a partial result is returned due to an internal processing failure,
|
572 |
+
* Amazon DynamoDB returns an <code>UnprocessedKeys</code> value so you can retry the operation
|
573 |
+
* starting with the next item to get.
|
574 |
+
*
|
575 |
+
* Amazon DynamoDB automatically adjusts the number of items returned per page to enforce this
|
576 |
+
* limit. For example, even if you ask to retrieve 100 items, but each individual item is 50k in
|
577 |
+
* size, the system returns 20 items and an appropriate <code>UnprocessedKeys</code> value so you
|
578 |
+
* can get the next page of results. If necessary, your application needs its own logic to
|
579 |
+
* assemble the pages of results into one set.
|
580 |
+
*
|
581 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
582 |
+
* <li><code>RequestItems</code> - <code>array</code> - Required - A map of the table name and corresponding items to get by primary key. While requesting items, each table name can be invoked only once per operation. <ul>
|
583 |
+
* <li><code>[custom-key]</code> - <code>array</code> - Optional - This key is variable (e.g., user-specified). [Constraints: The value must be between 3 and 255 characters, and must match the following regular expression pattern: <code>[a-zA-Z0-9_.-]+</code>] <ul>
|
584 |
+
* <li><code>Keys</code> - <code>array</code> - Required - The primary key that uniquely identifies each item in a table. A primary key can be a one attribute (hash) primary key or a two attribute (hash-and-range) primary key. <ul>
|
585 |
+
* <li><code>x</code> - <code>array</code> - Optional - This represents a simple array index. <ul>
|
586 |
+
* <li><code>HashKeyElement</code> - <code>array</code> - Required - A hash key element is treated as the primary key, and can be a string or a number. Single attribute primary keys have one index value. The value can be <code>String</code>, <code>Number</code>, <code>StringSet</code>, <code>NumberSet</code>. <ul>
|
587 |
+
* <li><code>S</code> - <code>string</code> - Optional - Strings are Unicode with UTF-8 binary encoding. The maximum size is limited by the size of the primary key (1024 bytes as a range part of a key or 2048 bytes as a single part hash key) or the item size (64k).</li>
|
588 |
+
* <li><code>N</code> - <code>string</code> - Optional - Numbers are positive or negative exact-value decimals and integers. A number can have up to 38 digits precision and can be between 10^-128 to 10^+126.</li>
|
589 |
+
* <li><code>B</code> - <code>blob</code> - Optional - Binary attributes are sequences of unsigned bytes.</li>
|
590 |
+
* <li><code>SS</code> - <code>string|array</code> - Optional - A set of strings. Pass a string for a single value, or an indexed array for multiple values.</li>
|
591 |
+
* <li><code>NS</code> - <code>string|array</code> - Optional - A set of numbers. Pass a string for a single value, or an indexed array for multiple values.</li>
|
592 |
+
* <li><code>BS</code> - <code>blob</code> - Optional - A set of binary attributes.</li>
|
593 |
+
* </ul></li>
|
594 |
+
* <li><code>RangeKeyElement</code> - <code>array</code> - Optional - A range key element is treated as a secondary key (used in conjunction with the primary key), and can be a string or a number, and is only used for hash-and-range primary keys. The value can be <code>String</code>, <code>Number</code>, <code>StringSet</code>, <code>NumberSet</code>. <ul>
|
595 |
+
* <li><code>S</code> - <code>string</code> - Optional - Strings are Unicode with UTF-8 binary encoding. The maximum size is limited by the size of the primary key (1024 bytes as a range part of a key or 2048 bytes as a single part hash key) or the item size (64k).</li>
|
596 |
+
* <li><code>N</code> - <code>string</code> - Optional - Numbers are positive or negative exact-value decimals and integers. A number can have up to 38 digits precision and can be between 10^-128 to 10^+126.</li>
|
597 |
+
* <li><code>B</code> - <code>blob</code> - Optional - Binary attributes are sequences of unsigned bytes.</li>
|
598 |
+
* <li><code>SS</code> - <code>string|array</code> - Optional - A set of strings. Pass a string for a single value, or an indexed array for multiple values.</li>
|
599 |
+
* <li><code>NS</code> - <code>string|array</code> - Optional - A set of numbers. Pass a string for a single value, or an indexed array for multiple values.</li>
|
600 |
+
* <li><code>BS</code> - <code>blob</code> - Optional - A set of binary attributes.</li>
|
601 |
+
* </ul></li>
|
602 |
+
* </ul></li>
|
603 |
+
* </ul></li>
|
604 |
+
* <li><code>AttributesToGet</code> - <code>string|array</code> - Optional - List of <code>Attribute</code> names. If attribute names are not specified then all attributes will be returned. If some attributes are not found, they will not appear in the result. Pass a string for a single value, or an indexed array for multiple values.</li>
|
605 |
+
* <li><code>ConsistentRead</code> - <code>boolean</code> - Optional - If set to <code>true</code>, then a consistent read is issued. Otherwise eventually-consistent is used.</li>
|
606 |
+
* </ul></li>
|
607 |
+
* </ul></li>
|
608 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
609 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
610 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
611 |
+
*/
|
612 |
+
public function batch_get_item($opt = null)
|
613 |
+
{
|
614 |
+
if (!$opt) $opt = array();
|
615 |
+
|
616 |
+
return $this->authenticate('BatchGetItem', $opt);
|
617 |
+
}
|
618 |
+
|
619 |
+
/**
|
620 |
+
* Allows to execute a batch of Put and/or Delete Requests for many tables in a single call. A
|
621 |
+
* total of 25 requests are allowed.
|
622 |
+
*
|
623 |
+
* There are no transaction guarantees provided by this API. It does not allow conditional puts
|
624 |
+
* nor does it support return values.
|
625 |
+
*
|
626 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
627 |
+
* <li><code>RequestItems</code> - <code>array</code> - Required - A map of table name to list-of-write-requests. Used as input to the <code>BatchWriteItem</code> API call <ul>
|
628 |
+
* <li><code>[custom-key]</code> - <code>array</code> - Optional - This key is variable (e.g., user-specified). <ul>
|
629 |
+
* <li><code>x</code> - <code>array</code> - Optional - This represents a simple array index. <ul>
|
630 |
+
* <li><code>PutRequest</code> - <code>array</code> - Optional - A container for a Put BatchWrite request <ul>
|
631 |
+
* <li><code>Item</code> - <code>array</code> - Required - The item to put <ul>
|
632 |
+
* <li><code>[custom-key]</code> - <code>array</code> - Optional - AttributeValue can be <code>String</code>, <code>Number</code>, <code>Binary</code>, <code>StringSet</code>, <code>NumberSet</code>, <code>BinarySet</code>. <ul>
|
633 |
+
* <li><code>S</code> - <code>string</code> - Optional - Strings are Unicode with UTF-8 binary encoding. The maximum size is limited by the size of the primary key (1024 bytes as a range part of a key or 2048 bytes as a single part hash key) or the item size (64k).</li>
|
634 |
+
* <li><code>N</code> - <code>string</code> - Optional - Numbers are positive or negative exact-value decimals and integers. A number can have up to 38 digits precision and can be between 10^-128 to 10^+126.</li>
|
635 |
+
* <li><code>B</code> - <code>blob</code> - Optional - Binary attributes are sequences of unsigned bytes.</li>
|
636 |
+
* <li><code>SS</code> - <code>string|array</code> - Optional - A set of strings. Pass a string for a single value, or an indexed array for multiple values.</li>
|
637 |
+
* <li><code>NS</code> - <code>string|array</code> - Optional - A set of numbers. Pass a string for a single value, or an indexed array for multiple values.</li>
|
638 |
+
* <li><code>BS</code> - <code>blob</code> - Optional - A set of binary attributes.</li>
|
639 |
+
* </ul></li>
|
640 |
+
* </ul></li>
|
641 |
+
* </ul></li>
|
642 |
+
* <li><code>DeleteRequest</code> - <code>array</code> - Optional - A container for a Delete BatchWrite request <ul>
|
643 |
+
* <li><code>Key</code> - <code>array</code> - Required - The item's key to be delete <ul>
|
644 |
+
* <li><code>HashKeyElement</code> - <code>array</code> - Required - A hash key element is treated as the primary key, and can be a string or a number. Single attribute primary keys have one index value. The value can be <code>String</code>, <code>Number</code>, <code>StringSet</code>, <code>NumberSet</code>. <ul>
|
645 |
+
* <li><code>S</code> - <code>string</code> - Optional - Strings are Unicode with UTF-8 binary encoding. The maximum size is limited by the size of the primary key (1024 bytes as a range part of a key or 2048 bytes as a single part hash key) or the item size (64k).</li>
|
646 |
+
* <li><code>N</code> - <code>string</code> - Optional - Numbers are positive or negative exact-value decimals and integers. A number can have up to 38 digits precision and can be between 10^-128 to 10^+126.</li>
|
647 |
+
* <li><code>B</code> - <code>blob</code> - Optional - Binary attributes are sequences of unsigned bytes.</li>
|
648 |
+
* <li><code>SS</code> - <code>string|array</code> - Optional - A set of strings. Pass a string for a single value, or an indexed array for multiple values.</li>
|
649 |
+
* <li><code>NS</code> - <code>string|array</code> - Optional - A set of numbers. Pass a string for a single value, or an indexed array for multiple values.</li>
|
650 |
+
* <li><code>BS</code> - <code>blob</code> - Optional - A set of binary attributes.</li>
|
651 |
+
* </ul></li>
|
652 |
+
* <li><code>RangeKeyElement</code> - <code>array</code> - Optional - A range key element is treated as a secondary key (used in conjunction with the primary key), and can be a string or a number, and is only used for hash-and-range primary keys. The value can be <code>String</code>, <code>Number</code>, <code>StringSet</code>, <code>NumberSet</code>. <ul>
|
653 |
+
* <li><code>S</code> - <code>string</code> - Optional - Strings are Unicode with UTF-8 binary encoding. The maximum size is limited by the size of the primary key (1024 bytes as a range part of a key or 2048 bytes as a single part hash key) or the item size (64k).</li>
|
654 |
+
* <li><code>N</code> - <code>string</code> - Optional - Numbers are positive or negative exact-value decimals and integers. A number can have up to 38 digits precision and can be between 10^-128 to 10^+126.</li>
|
655 |
+
* <li><code>B</code> - <code>blob</code> - Optional - Binary attributes are sequences of unsigned bytes.</li>
|
656 |
+
* <li><code>SS</code> - <code>string|array</code> - Optional - A set of strings. Pass a string for a single value, or an indexed array for multiple values.</li>
|
657 |
+
* <li><code>NS</code> - <code>string|array</code> - Optional - A set of numbers. Pass a string for a single value, or an indexed array for multiple values.</li>
|
658 |
+
* <li><code>BS</code> - <code>blob</code> - Optional - A set of binary attributes.</li>
|
659 |
+
* </ul></li>
|
660 |
+
* </ul></li>
|
661 |
+
* </ul></li>
|
662 |
+
* </ul></li>
|
663 |
+
* </ul></li>
|
664 |
+
* <li><code>value</code> - <code>array</code> - Optional - AttributeValue can be <code>String</code>, <code>Number</code>, <code>Binary</code>, <code>StringSet</code>, <code>NumberSet</code>, <code>BinarySet</code>. <ul>
|
665 |
+
* <li><code>S</code> - <code>string</code> - Optional - Strings are Unicode with UTF-8 binary encoding. The maximum size is limited by the size of the primary key (1024 bytes as a range part of a key or 2048 bytes as a single part hash key) or the item size (64k).</li>
|
666 |
+
* <li><code>N</code> - <code>string</code> - Optional - Numbers are positive or negative exact-value decimals and integers. A number can have up to 38 digits precision and can be between 10^-128 to 10^+126.</li>
|
667 |
+
* <li><code>B</code> - <code>blob</code> - Optional - Binary attributes are sequences of unsigned bytes.</li>
|
668 |
+
* <li><code>SS</code> - <code>string|array</code> - Optional - A set of strings. Pass a string for a single value, or an indexed array for multiple values.</li>
|
669 |
+
* <li><code>NS</code> - <code>string|array</code> - Optional - A set of numbers. Pass a string for a single value, or an indexed array for multiple values.</li>
|
670 |
+
* <li><code>BS</code> - <code>blob</code> - Optional - A set of binary attributes.</li>
|
671 |
+
* </ul></li>
|
672 |
+
* </ul></li>
|
673 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
674 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
675 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
676 |
+
*/
|
677 |
+
public function batch_write_item($opt = null)
|
678 |
+
{
|
679 |
+
if (!$opt) $opt = array();
|
680 |
+
|
681 |
+
return $this->authenticate('BatchWriteItem', $opt);
|
682 |
+
}
|
683 |
+
|
684 |
+
/**
|
685 |
+
* Adds a new table to your account.
|
686 |
+
*
|
687 |
+
* The table name must be unique among those associated with the AWS Account issuing the request,
|
688 |
+
* and the AWS Region that receives the request (e.g. <code>us-east-1</code>).
|
689 |
+
*
|
690 |
+
* The <code>CreateTable</code> operation triggers an asynchronous workflow to begin creating the
|
691 |
+
* table. Amazon DynamoDB immediately returns the state of the table (<code>CREATING</code>) until
|
692 |
+
* the table is in the <code>ACTIVE</code> state. Once the table is in the <code>ACTIVE</code>
|
693 |
+
* state, you can perform data plane operations.
|
694 |
+
*
|
695 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
696 |
+
* <li><code>TableName</code> - <code>string</code> - Required - The name of the table you want to create. Allowed characters are <code>a-z</code>, <code>A-Z</code>, <code>0-9</code>, <code>_</code> (underscore), <code>-</code> (hyphen) and <code>.</code> (period). [Constraints: The value must be between 3 and 255 characters, and must match the following regular expression pattern: <code>[a-zA-Z0-9_.-]+</code>]</li>
|
697 |
+
* <li><code>KeySchema</code> - <code>array</code> - Required - The KeySchema identifies the primary key as a one attribute primary key (hash) or a composite two attribute (hash-and-range) primary key. Single attribute primary keys have one index value: a <code>HashKeyElement</code>. A composite hash-and-range primary key contains two attribute values: a <code>HashKeyElement</code> and a <code>RangeKeyElement</code>. <ul>
|
698 |
+
* <li><code>HashKeyElement</code> - <code>array</code> - Required - A hash key element is treated as the primary key, and can be a string or a number. Single attribute primary keys have one index value. The value can be <code>String</code>, <code>Number</code>, <code>StringSet</code>, <code>NumberSet</code>. <ul>
|
699 |
+
* <li><code>AttributeName</code> - <code>string</code> - Required - The <code>AttributeName</code> of the <code>KeySchemaElement</code>.</li>
|
700 |
+
* <li><code>AttributeType</code> - <code>string</code> - Required - The <code>AttributeType</code> of the <code>KeySchemaElement</code> which can be a <code>String</code> or a <code>Number</code>. [Allowed values: <code>S</code>, <code>N</code>, <code>B</code>]</li>
|
701 |
+
* </ul></li>
|
702 |
+
* <li><code>RangeKeyElement</code> - <code>array</code> - Optional - A range key element is treated as a secondary key (used in conjunction with the primary key), and can be a string or a number, and is only used for hash-and-range primary keys. The value can be <code>String</code>, <code>Number</code>, <code>StringSet</code>, <code>NumberSet</code>. <ul>
|
703 |
+
* <li><code>AttributeName</code> - <code>string</code> - Required - The <code>AttributeName</code> of the <code>KeySchemaElement</code>.</li>
|
704 |
+
* <li><code>AttributeType</code> - <code>string</code> - Required - The <code>AttributeType</code> of the <code>KeySchemaElement</code> which can be a <code>String</code> or a <code>Number</code>. [Allowed values: <code>S</code>, <code>N</code>, <code>B</code>]</li>
|
705 |
+
* </ul></li>
|
706 |
+
* </ul></li>
|
707 |
+
* <li><code>ProvisionedThroughput</code> - <code>array</code> - Required - Provisioned throughput reserves the required read and write resources for your table in terms of <code>ReadCapacityUnits</code> and <code>WriteCapacityUnits</code>. Values for provisioned throughput depend upon your expected read/write rates, item size, and consistency. Provide the expected number of read and write operations, assuming an item size of 1k and strictly consistent reads. For 2k item size, double the value. For 3k, triple the value, etc. Eventually-consistent reads consume half the resources of strictly consistent reads. <ul>
|
708 |
+
* <li><code>ReadCapacityUnits</code> - <code>long</code> - Required - <code>ReadCapacityUnits</code> are in terms of strictly consistent reads, assuming items of 1k. 2k items require twice the <code>ReadCapacityUnits</code>. Eventually-consistent reads only require half the <code>ReadCapacityUnits</code> of stirctly consistent reads.</li>
|
709 |
+
* <li><code>WriteCapacityUnits</code> - <code>long</code> - Required - <code>WriteCapacityUnits</code> are in terms of strictly consistent reads, assuming items of 1k. 2k items require twice the <code>WriteCapacityUnits</code>.</li>
|
710 |
+
* </ul></li>
|
711 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
712 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
713 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
714 |
+
*/
|
715 |
+
public function create_table($opt = null)
|
716 |
+
{
|
717 |
+
if (!$opt) $opt = array();
|
718 |
+
|
719 |
+
return $this->authenticate('CreateTable', $opt);
|
720 |
+
}
|
721 |
+
|
722 |
+
/**
|
723 |
+
* Deletes a single item in a table by primary key.
|
724 |
+
*
|
725 |
+
* You can perform a conditional delete operation that deletes the item if it exists, or if it has
|
726 |
+
* an expected attribute value.
|
727 |
+
*
|
728 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
729 |
+
* <li><code>TableName</code> - <code>string</code> - Required - The name of the table in which you want to delete an item. Allowed characters are <code>a-z</code>, <code>A-Z</code>, <code>0-9</code>, <code>_</code> (underscore), <code>-</code> (hyphen) and <code>.</code> (period). [Constraints: The value must be between 3 and 255 characters, and must match the following regular expression pattern: <code>[a-zA-Z0-9_.-]+</code>]</li>
|
730 |
+
* <li><code>Key</code> - <code>array</code> - Required - The primary key that uniquely identifies each item in a table. A primary key can be a one attribute (hash) primary key or a two attribute (hash-and-range) primary key. <ul>
|
731 |
+
* <li><code>HashKeyElement</code> - <code>array</code> - Required - A hash key element is treated as the primary key, and can be a string or a number. Single attribute primary keys have one index value. The value can be <code>String</code>, <code>Number</code>, <code>StringSet</code>, <code>NumberSet</code>. <ul>
|
732 |
+
* <li><code>S</code> - <code>string</code> - Optional - Strings are Unicode with UTF-8 binary encoding. The maximum size is limited by the size of the primary key (1024 bytes as a range part of a key or 2048 bytes as a single part hash key) or the item size (64k).</li>
|
733 |
+
* <li><code>N</code> - <code>string</code> - Optional - Numbers are positive or negative exact-value decimals and integers. A number can have up to 38 digits precision and can be between 10^-128 to 10^+126.</li>
|
734 |
+
* <li><code>B</code> - <code>blob</code> - Optional - Binary attributes are sequences of unsigned bytes.</li>
|
735 |
+
* <li><code>SS</code> - <code>string|array</code> - Optional - A set of strings. Pass a string for a single value, or an indexed array for multiple values.</li>
|
736 |
+
* <li><code>NS</code> - <code>string|array</code> - Optional - A set of numbers. Pass a string for a single value, or an indexed array for multiple values.</li>
|
737 |
+
* <li><code>BS</code> - <code>blob</code> - Optional - A set of binary attributes.</li>
|
738 |
+
* </ul></li>
|
739 |
+
* <li><code>RangeKeyElement</code> - <code>array</code> - Optional - A range key element is treated as a secondary key (used in conjunction with the primary key), and can be a string or a number, and is only used for hash-and-range primary keys. The value can be <code>String</code>, <code>Number</code>, <code>StringSet</code>, <code>NumberSet</code>. <ul>
|
740 |
+
* <li><code>S</code> - <code>string</code> - Optional - Strings are Unicode with UTF-8 binary encoding. The maximum size is limited by the size of the primary key (1024 bytes as a range part of a key or 2048 bytes as a single part hash key) or the item size (64k).</li>
|
741 |
+
* <li><code>N</code> - <code>string</code> - Optional - Numbers are positive or negative exact-value decimals and integers. A number can have up to 38 digits precision and can be between 10^-128 to 10^+126.</li>
|
742 |
+
* <li><code>B</code> - <code>blob</code> - Optional - Binary attributes are sequences of unsigned bytes.</li>
|
743 |
+
* <li><code>SS</code> - <code>string|array</code> - Optional - A set of strings. Pass a string for a single value, or an indexed array for multiple values.</li>
|
744 |
+
* <li><code>NS</code> - <code>string|array</code> - Optional - A set of numbers. Pass a string for a single value, or an indexed array for multiple values.</li>
|
745 |
+
* <li><code>BS</code> - <code>blob</code> - Optional - A set of binary attributes.</li>
|
746 |
+
* </ul></li>
|
747 |
+
* </ul></li>
|
748 |
+
* <li><code>Expected</code> - <code>array</code> - Optional - Designates an attribute for a conditional modification. The <code>Expected</code> parameter allows you to provide an attribute name, and whether or not Amazon DynamoDB should check to see if the attribute has a particular value before modifying it. <ul>
|
749 |
+
* <li><code>[custom-key]</code> - <code>array</code> - Optional - Allows you to provide an attribute name, and whether or not Amazon DynamoDB should check to see if the attribute value already exists; or if the attribute value exists and has a particular value before changing it. <ul>
|
750 |
+
* <li><code>Value</code> - <code>array</code> - Optional - Specify whether or not a value already exists and has a specific content for the attribute name-value pair. <ul>
|
751 |
+
* <li><code>S</code> - <code>string</code> - Optional - Strings are Unicode with UTF-8 binary encoding. The maximum size is limited by the size of the primary key (1024 bytes as a range part of a key or 2048 bytes as a single part hash key) or the item size (64k).</li>
|
752 |
+
* <li><code>N</code> - <code>string</code> - Optional - Numbers are positive or negative exact-value decimals and integers. A number can have up to 38 digits precision and can be between 10^-128 to 10^+126.</li>
|
753 |
+
* <li><code>B</code> - <code>blob</code> - Optional - Binary attributes are sequences of unsigned bytes.</li>
|
754 |
+
* <li><code>SS</code> - <code>string|array</code> - Optional - A set of strings. Pass a string for a single value, or an indexed array for multiple values.</li>
|
755 |
+
* <li><code>NS</code> - <code>string|array</code> - Optional - A set of numbers. Pass a string for a single value, or an indexed array for multiple values.</li>
|
756 |
+
* <li><code>BS</code> - <code>blob</code> - Optional - A set of binary attributes.</li>
|
757 |
+
* </ul></li>
|
758 |
+
* <li><code>Exists</code> - <code>boolean</code> - Optional - Specify whether or not a value already exists for the attribute name-value pair.</li>
|
759 |
+
* </ul></li>
|
760 |
+
* </ul></li>
|
761 |
+
* <li><code>ReturnValues</code> - <code>string</code> - Optional - Use this parameter if you want to get the attribute name-value pairs before or after they are modified. For <code>PUT</code> operations, the possible parameter values are <code>NONE</code> (default) or <code>ALL_OLD</code>. For update operations, the possible parameter values are <code>NONE</code> (default) or <code>ALL_OLD</code>, <code>UPDATED_OLD</code>, <code>ALL_NEW</code> or <code>UPDATED_NEW</code>.<ul><li> <code>NONE</code>: Nothing is returned.</li><li> <code>ALL_OLD</code>: Returns the attributes of the item as they were before the operation.</li><li> <code>UPDATED_OLD</code>: Returns the values of the updated attributes, only, as they were before the operation.</li><li> <code>ALL_NEW</code>: Returns all the attributes and their new values after the operation.</li><li> <code>UPDATED_NEW</code>: Returns the values of the updated attributes, only, as they are after the operation.</li></ul> [Allowed values: <code>NONE</code>, <code>ALL_OLD</code>, <code>UPDATED_OLD</code>, <code>ALL_NEW</code>, <code>UPDATED_NEW</code>]</li>
|
762 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
763 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
764 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
765 |
+
*/
|
766 |
+
public function delete_item($opt = null)
|
767 |
+
{
|
768 |
+
if (!$opt) $opt = array();
|
769 |
+
|
770 |
+
return $this->authenticate('DeleteItem', $opt);
|
771 |
+
}
|
772 |
+
|
773 |
+
/**
|
774 |
+
* Deletes a table and all of its items.
|
775 |
+
*
|
776 |
+
* If the table is in the <code>ACTIVE</code> state, you can delete it. If a table is in
|
777 |
+
* <code>CREATING</code> or <code>UPDATING</code> states then Amazon DynamoDB returns a
|
778 |
+
* <code>ResourceInUseException</code>. If the specified table does not exist, Amazon DynamoDB
|
779 |
+
* returns a <code>ResourceNotFoundException</code>.
|
780 |
+
*
|
781 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
782 |
+
* <li><code>TableName</code> - <code>string</code> - Required - The name of the table you want to delete. Allowed characters are <code>a-z</code>, <code>A-Z</code>, <code>0-9</code>, <code>_</code> (underscore), <code>-</code> (hyphen) and <code>.</code> (period). [Constraints: The value must be between 3 and 255 characters, and must match the following regular expression pattern: <code>[a-zA-Z0-9_.-]+</code>]</li>
|
783 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
784 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
785 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
786 |
+
*/
|
787 |
+
public function delete_table($opt = null)
|
788 |
+
{
|
789 |
+
if (!$opt) $opt = array();
|
790 |
+
|
791 |
+
return $this->authenticate('DeleteTable', $opt);
|
792 |
+
}
|
793 |
+
|
794 |
+
/**
|
795 |
+
* Retrieves information about the table, including the current status of the table, the primary
|
796 |
+
* key schema and when the table was created.
|
797 |
+
*
|
798 |
+
* If the table does not exist, Amazon DynamoDB returns a <code>ResourceNotFoundException</code>.
|
799 |
+
*
|
800 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
801 |
+
* <li><code>TableName</code> - <code>string</code> - Required - The name of the table you want to describe. Allowed characters are <code>a-z</code>, <code>A-Z</code>, <code>0-9</code>, <code>_</code> (underscore), <code>-</code> (hyphen) and <code>.</code> (period). [Constraints: The value must be between 3 and 255 characters, and must match the following regular expression pattern: <code>[a-zA-Z0-9_.-]+</code>]</li>
|
802 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
803 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
804 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
805 |
+
*/
|
806 |
+
public function describe_table($opt = null)
|
807 |
+
{
|
808 |
+
if (!$opt) $opt = array();
|
809 |
+
|
810 |
+
return $this->authenticate('DescribeTable', $opt);
|
811 |
+
}
|
812 |
+
|
813 |
+
/**
|
814 |
+
* Retrieves a set of Attributes for an item that matches the primary key.
|
815 |
+
*
|
816 |
+
* The <code>GetItem</code> operation provides an eventually-consistent read by default. If
|
817 |
+
* eventually-consistent reads are not acceptable for your application, use
|
818 |
+
* <code>ConsistentRead</code>. Although this operation might take longer than a standard read, it
|
819 |
+
* always returns the last updated value.
|
820 |
+
*
|
821 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
822 |
+
* <li><code>TableName</code> - <code>string</code> - Required - The name of the table in which you want to get an item. Allowed characters are <code>a-z</code>, <code>A-Z</code>, <code>0-9</code>, <code>_</code> (underscore), <code>-</code> (hyphen) and <code>.</code> (period). [Constraints: The value must be between 3 and 255 characters, and must match the following regular expression pattern: <code>[a-zA-Z0-9_.-]+</code>]</li>
|
823 |
+
* <li><code>Key</code> - <code>array</code> - Required - The primary key that uniquely identifies each item in a table. A primary key can be a one attribute (hash) primary key or a two attribute (hash-and-range) primary key. <ul>
|
824 |
+
* <li><code>HashKeyElement</code> - <code>array</code> - Required - A hash key element is treated as the primary key, and can be a string or a number. Single attribute primary keys have one index value. The value can be <code>String</code>, <code>Number</code>, <code>StringSet</code>, <code>NumberSet</code>. <ul>
|
825 |
+
* <li><code>S</code> - <code>string</code> - Optional - Strings are Unicode with UTF-8 binary encoding. The maximum size is limited by the size of the primary key (1024 bytes as a range part of a key or 2048 bytes as a single part hash key) or the item size (64k).</li>
|
826 |
+
* <li><code>N</code> - <code>string</code> - Optional - Numbers are positive or negative exact-value decimals and integers. A number can have up to 38 digits precision and can be between 10^-128 to 10^+126.</li>
|
827 |
+
* <li><code>B</code> - <code>blob</code> - Optional - Binary attributes are sequences of unsigned bytes.</li>
|
828 |
+
* <li><code>SS</code> - <code>string|array</code> - Optional - A set of strings. Pass a string for a single value, or an indexed array for multiple values.</li>
|
829 |
+
* <li><code>NS</code> - <code>string|array</code> - Optional - A set of numbers. Pass a string for a single value, or an indexed array for multiple values.</li>
|
830 |
+
* <li><code>BS</code> - <code>blob</code> - Optional - A set of binary attributes.</li>
|
831 |
+
* </ul></li>
|
832 |
+
* <li><code>RangeKeyElement</code> - <code>array</code> - Optional - A range key element is treated as a secondary key (used in conjunction with the primary key), and can be a string or a number, and is only used for hash-and-range primary keys. The value can be <code>String</code>, <code>Number</code>, <code>StringSet</code>, <code>NumberSet</code>. <ul>
|
833 |
+
* <li><code>S</code> - <code>string</code> - Optional - Strings are Unicode with UTF-8 binary encoding. The maximum size is limited by the size of the primary key (1024 bytes as a range part of a key or 2048 bytes as a single part hash key) or the item size (64k).</li>
|
834 |
+
* <li><code>N</code> - <code>string</code> - Optional - Numbers are positive or negative exact-value decimals and integers. A number can have up to 38 digits precision and can be between 10^-128 to 10^+126.</li>
|
835 |
+
* <li><code>B</code> - <code>blob</code> - Optional - Binary attributes are sequences of unsigned bytes.</li>
|
836 |
+
* <li><code>SS</code> - <code>string|array</code> - Optional - A set of strings. Pass a string for a single value, or an indexed array for multiple values.</li>
|
837 |
+
* <li><code>NS</code> - <code>string|array</code> - Optional - A set of numbers. Pass a string for a single value, or an indexed array for multiple values.</li>
|
838 |
+
* <li><code>BS</code> - <code>blob</code> - Optional - A set of binary attributes.</li>
|
839 |
+
* </ul></li>
|
840 |
+
* </ul></li>
|
841 |
+
* <li><code>AttributesToGet</code> - <code>string|array</code> - Optional - List of <code>Attribute</code> names. If attribute names are not specified then all attributes will be returned. If some attributes are not found, they will not appear in the result. Pass a string for a single value, or an indexed array for multiple values.</li>
|
842 |
+
* <li><code>ConsistentRead</code> - <code>boolean</code> - Optional - If set to <code>true</code>, then a consistent read is issued. Otherwise eventually-consistent is used.</li>
|
843 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
844 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
845 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
846 |
+
*/
|
847 |
+
public function get_item($opt = null)
|
848 |
+
{
|
849 |
+
if (!$opt) $opt = array();
|
850 |
+
|
851 |
+
// List (non-map)
|
852 |
+
if (isset($opt['AttributesToGet']))
|
853 |
+
{
|
854 |
+
$opt['AttributesToGet'] = (is_array($opt['AttributesToGet']) ? $opt['AttributesToGet'] : array($opt['AttributesToGet']));
|
855 |
+
}
|
856 |
+
|
857 |
+
return $this->authenticate('GetItem', $opt);
|
858 |
+
}
|
859 |
+
|
860 |
+
/**
|
861 |
+
* Retrieves a paginated list of table names created by the AWS Account of the caller in the AWS
|
862 |
+
* Region (e.g. <code>us-east-1</code>).
|
863 |
+
*
|
864 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
865 |
+
* <li><code>ExclusiveStartTableName</code> - <code>string</code> - Optional - The name of the table that starts the list. If you already ran a <code>ListTables</code> operation and received a <code>LastEvaluatedTableName</code> value in the response, use that value here to continue the list. [Constraints: The value must be between 3 and 255 characters, and must match the following regular expression pattern: <code>[a-zA-Z0-9_.-]+</code>]</li>
|
866 |
+
* <li><code>Limit</code> - <code>integer</code> - Optional - A number of maximum table names to return.</li>
|
867 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
868 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
869 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
870 |
+
*/
|
871 |
+
public function list_tables($opt = null)
|
872 |
+
{
|
873 |
+
if (!$opt) $opt = array();
|
874 |
+
|
875 |
+
return $this->authenticate('ListTables', $opt);
|
876 |
+
}
|
877 |
+
|
878 |
+
/**
|
879 |
+
* Creates a new item, or replaces an old item with a new item (including all the attributes).
|
880 |
+
*
|
881 |
+
* If an item already exists in the specified table with the same primary key, the new item
|
882 |
+
* completely replaces the existing item. You can perform a conditional put (insert a new item if
|
883 |
+
* one with the specified primary key doesn't exist), or replace an existing item if it has
|
884 |
+
* certain attribute values.
|
885 |
+
*
|
886 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
887 |
+
* <li><code>TableName</code> - <code>string</code> - Required - The name of the table in which you want to put an item. Allowed characters are <code>a-z</code>, <code>A-Z</code>, <code>0-9</code>, <code>_</code> (underscore), <code>-</code> (hyphen) and <code>.</code> (period). [Constraints: The value must be between 3 and 255 characters, and must match the following regular expression pattern: <code>[a-zA-Z0-9_.-]+</code>]</li>
|
888 |
+
* <li><code>Item</code> - <code>array</code> - Required - A map of the attributes for the item, and must include the primary key values that define the item. Other attribute name-value pairs can be provided for the item. <ul>
|
889 |
+
* <li><code>[custom-key]</code> - <code>array</code> - Optional - AttributeValue can be <code>String</code>, <code>Number</code>, <code>Binary</code>, <code>StringSet</code>, <code>NumberSet</code>, <code>BinarySet</code>. <ul>
|
890 |
+
* <li><code>S</code> - <code>string</code> - Optional - Strings are Unicode with UTF-8 binary encoding. The maximum size is limited by the size of the primary key (1024 bytes as a range part of a key or 2048 bytes as a single part hash key) or the item size (64k).</li>
|
891 |
+
* <li><code>N</code> - <code>string</code> - Optional - Numbers are positive or negative exact-value decimals and integers. A number can have up to 38 digits precision and can be between 10^-128 to 10^+126.</li>
|
892 |
+
* <li><code>B</code> - <code>blob</code> - Optional - Binary attributes are sequences of unsigned bytes.</li>
|
893 |
+
* <li><code>SS</code> - <code>string|array</code> - Optional - A set of strings. Pass a string for a single value, or an indexed array for multiple values.</li>
|
894 |
+
* <li><code>NS</code> - <code>string|array</code> - Optional - A set of numbers. Pass a string for a single value, or an indexed array for multiple values.</li>
|
895 |
+
* <li><code>BS</code> - <code>blob</code> - Optional - A set of binary attributes.</li>
|
896 |
+
* </ul></li>
|
897 |
+
* </ul></li>
|
898 |
+
* <li><code>Expected</code> - <code>array</code> - Optional - Designates an attribute for a conditional modification. The <code>Expected</code> parameter allows you to provide an attribute name, and whether or not Amazon DynamoDB should check to see if the attribute has a particular value before modifying it. <ul>
|
899 |
+
* <li><code>[custom-key]</code> - <code>array</code> - Optional - Allows you to provide an attribute name, and whether or not Amazon DynamoDB should check to see if the attribute value already exists; or if the attribute value exists and has a particular value before changing it. <ul>
|
900 |
+
* <li><code>Value</code> - <code>array</code> - Optional - Specify whether or not a value already exists and has a specific content for the attribute name-value pair. <ul>
|
901 |
+
* <li><code>S</code> - <code>string</code> - Optional - Strings are Unicode with UTF-8 binary encoding. The maximum size is limited by the size of the primary key (1024 bytes as a range part of a key or 2048 bytes as a single part hash key) or the item size (64k).</li>
|
902 |
+
* <li><code>N</code> - <code>string</code> - Optional - Numbers are positive or negative exact-value decimals and integers. A number can have up to 38 digits precision and can be between 10^-128 to 10^+126.</li>
|
903 |
+
* <li><code>B</code> - <code>blob</code> - Optional - Binary attributes are sequences of unsigned bytes.</li>
|
904 |
+
* <li><code>SS</code> - <code>string|array</code> - Optional - A set of strings. Pass a string for a single value, or an indexed array for multiple values.</li>
|
905 |
+
* <li><code>NS</code> - <code>string|array</code> - Optional - A set of numbers. Pass a string for a single value, or an indexed array for multiple values.</li>
|
906 |
+
* <li><code>BS</code> - <code>blob</code> - Optional - A set of binary attributes.</li>
|
907 |
+
* </ul></li>
|
908 |
+
* <li><code>Exists</code> - <code>boolean</code> - Optional - Specify whether or not a value already exists for the attribute name-value pair.</li>
|
909 |
+
* </ul></li>
|
910 |
+
* </ul></li>
|
911 |
+
* <li><code>ReturnValues</code> - <code>string</code> - Optional - Use this parameter if you want to get the attribute name-value pairs before or after they are modified. For <code>PUT</code> operations, the possible parameter values are <code>NONE</code> (default) or <code>ALL_OLD</code>. For update operations, the possible parameter values are <code>NONE</code> (default) or <code>ALL_OLD</code>, <code>UPDATED_OLD</code>, <code>ALL_NEW</code> or <code>UPDATED_NEW</code>.<ul><li> <code>NONE</code>: Nothing is returned.</li><li> <code>ALL_OLD</code>: Returns the attributes of the item as they were before the operation.</li><li> <code>UPDATED_OLD</code>: Returns the values of the updated attributes, only, as they were before the operation.</li><li> <code>ALL_NEW</code>: Returns all the attributes and their new values after the operation.</li><li> <code>UPDATED_NEW</code>: Returns the values of the updated attributes, only, as they are after the operation.</li></ul> [Allowed values: <code>NONE</code>, <code>ALL_OLD</code>, <code>UPDATED_OLD</code>, <code>ALL_NEW</code>, <code>UPDATED_NEW</code>]</li>
|
912 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
913 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
914 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
915 |
+
*/
|
916 |
+
public function put_item($opt = null)
|
917 |
+
{
|
918 |
+
if (!$opt) $opt = array();
|
919 |
+
|
920 |
+
return $this->authenticate('PutItem', $opt);
|
921 |
+
}
|
922 |
+
|
923 |
+
/**
|
924 |
+
* Gets the values of one or more items and its attributes by primary key (composite primary key,
|
925 |
+
* only).
|
926 |
+
*
|
927 |
+
* Narrow the scope of the query using comparison operators on the <code>RangeKeyValue</code> of
|
928 |
+
* the composite key. Use the <code>ScanIndexForward</code> parameter to get results in forward or
|
929 |
+
* reverse order by range key.
|
930 |
+
*
|
931 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
932 |
+
* <li><code>TableName</code> - <code>string</code> - Required - The name of the table in which you want to query. Allowed characters are <code>a-z</code>, <code>A-Z</code>, <code>0-9</code>, <code>_</code> (underscore), <code>-</code> (hyphen) and <code>.</code> (period). [Constraints: The value must be between 3 and 255 characters, and must match the following regular expression pattern: <code>[a-zA-Z0-9_.-]+</code>]</li>
|
933 |
+
* <li><code>AttributesToGet</code> - <code>string|array</code> - Optional - List of <code>Attribute</code> names. If attribute names are not specified then all attributes will be returned. If some attributes are not found, they will not appear in the result. Pass a string for a single value, or an indexed array for multiple values.</li>
|
934 |
+
* <li><code>Limit</code> - <code>integer</code> - Optional - The maximum number of items to return. If Amazon DynamoDB hits this limit while querying the table, it stops the query and returns the matching values up to the limit, and a <code>LastEvaluatedKey</code> to apply in a subsequent operation to continue the query. Also, if the result set size exceeds 1MB before Amazon DynamoDB hits this limit, it stops the query and returns the matching values, and a <code>LastEvaluatedKey</code> to apply in a subsequent operation to continue the query.</li>
|
935 |
+
* <li><code>ConsistentRead</code> - <code>boolean</code> - Optional - If set to <code>true</code>, then a consistent read is issued. Otherwise eventually-consistent is used.</li>
|
936 |
+
* <li><code>Count</code> - <code>boolean</code> - Optional - If set to <code>true</code>, Amazon DynamoDB returns a total number of items that match the query parameters, instead of a list of the matching items and their attributes. Do not set <code>Count</code> to <code>true</code> while providing a list of <code>AttributesToGet</code>, otherwise Amazon DynamoDB returns a validation error.</li>
|
937 |
+
* <li><code>HashKeyValue</code> - <code>array</code> - Required - Attribute value of the hash component of the composite primary key. <ul>
|
938 |
+
* <li><code>S</code> - <code>string</code> - Optional - Strings are Unicode with UTF-8 binary encoding. The maximum size is limited by the size of the primary key (1024 bytes as a range part of a key or 2048 bytes as a single part hash key) or the item size (64k).</li>
|
939 |
+
* <li><code>N</code> - <code>string</code> - Optional - Numbers are positive or negative exact-value decimals and integers. A number can have up to 38 digits precision and can be between 10^-128 to 10^+126.</li>
|
940 |
+
* <li><code>B</code> - <code>blob</code> - Optional - Binary attributes are sequences of unsigned bytes.</li>
|
941 |
+
* <li><code>SS</code> - <code>string|array</code> - Optional - A set of strings. Pass a string for a single value, or an indexed array for multiple values.</li>
|
942 |
+
* <li><code>NS</code> - <code>string|array</code> - Optional - A set of numbers. Pass a string for a single value, or an indexed array for multiple values.</li>
|
943 |
+
* <li><code>BS</code> - <code>blob</code> - Optional - A set of binary attributes.</li>
|
944 |
+
* </ul></li>
|
945 |
+
* <li><code>RangeKeyCondition</code> - <code>array</code> - Optional - A container for the attribute values and comparison operators to use for the query. <ul>
|
946 |
+
* <li><code>AttributeValueList</code> - <code>array</code> - Optional - A list of attribute values to be used with a comparison operator for a scan or query operation. For comparisons that require more than one value, such as a <code>BETWEEN</code> comparison, the AttributeValueList contains two attribute values and the comparison operator. <ul>
|
947 |
+
* <li><code>x</code> - <code>array</code> - Optional - This represents a simple array index. <ul>
|
948 |
+
* <li><code>S</code> - <code>string</code> - Optional - Strings are Unicode with UTF-8 binary encoding. The maximum size is limited by the size of the primary key (1024 bytes as a range part of a key or 2048 bytes as a single part hash key) or the item size (64k).</li>
|
949 |
+
* <li><code>N</code> - <code>string</code> - Optional - Numbers are positive or negative exact-value decimals and integers. A number can have up to 38 digits precision and can be between 10^-128 to 10^+126.</li>
|
950 |
+
* <li><code>B</code> - <code>blob</code> - Optional - Binary attributes are sequences of unsigned bytes.</li>
|
951 |
+
* <li><code>SS</code> - <code>string|array</code> - Optional - A set of strings. Pass a string for a single value, or an indexed array for multiple values.</li>
|
952 |
+
* <li><code>NS</code> - <code>string|array</code> - Optional - A set of numbers. Pass a string for a single value, or an indexed array for multiple values.</li>
|
953 |
+
* <li><code>BS</code> - <code>blob</code> - Optional - A set of binary attributes.</li>
|
954 |
+
* </ul></li>
|
955 |
+
* </ul></li>
|
956 |
+
* <li><code>ComparisonOperator</code> - <code>string</code> - Required - A comparison operator is an enumeration of several operations:<ul><li> <code>EQ</code> for <em>equal</em>.</li><li> <code>NE</code> for <em>not equal</em>.</li><li> <code>IN</code> checks for exact matches.</li><li> <code>LE</code> for <em>less than or equal to</em>.</li><li> <code>LT</code> for <em>less than</em>.</li><li> <code>GE</code> for <em>greater than or equal to</em>.</li><li> <code>GT</code> for <em>greater than</em>.</li><li> <code>BETWEEN</code> for <em>between</em>.</li><li> <code>NOT_NULL</code> for <em>exists</em>.</li><li> <code>NULL</code> for <em>not exists</em>.</li><li> <code>CONTAINS</code> for substring or value in a set.</li><li> <code>NOT_CONTAINS</code> for absence of a substring or absence of a value in a set.</li><li> <code>BEGINS_WITH</code> for a substring prefix.</li></ul>Scan operations support all available comparison operators. Query operations support a subset of the available comparison operators: EQ, LE, LT, GE, GT, BETWEEN, and BEGINS_WITH. [Allowed values: <code>EQ</code>, <code>NE</code>, <code>IN</code>, <code>LE</code>, <code>LT</code>, <code>GE</code>, <code>GT</code>, <code>BETWEEN</code>, <code>NOT_NULL</code>, <code>NULL</code>, <code>CONTAINS</code>, <code>NOT_CONTAINS</code>, <code>BEGINS_WITH</code>]</li>
|
957 |
+
* </ul></li>
|
958 |
+
* <li><code>ScanIndexForward</code> - <code>boolean</code> - Optional - Specifies forward or backward traversal of the index. Amazon DynamoDB returns results reflecting the requested order, determined by the range key. The default value is <code>true</code> (forward).</li>
|
959 |
+
* <li><code>ExclusiveStartKey</code> - <code>array</code> - Optional - Primary key of the item from which to continue an earlier query. An earlier query might provide this value as the <code>LastEvaluatedKey</code> if that query operation was interrupted before completing the query; either because of the result set size or the <code>Limit</code> parameter. The <code>LastEvaluatedKey</code> can be passed back in a new query request to continue the operation from that point. <ul>
|
960 |
+
* <li><code>HashKeyElement</code> - <code>array</code> - Required - A hash key element is treated as the primary key, and can be a string or a number. Single attribute primary keys have one index value. The value can be <code>String</code>, <code>Number</code>, <code>StringSet</code>, <code>NumberSet</code>. <ul>
|
961 |
+
* <li><code>S</code> - <code>string</code> - Optional - Strings are Unicode with UTF-8 binary encoding. The maximum size is limited by the size of the primary key (1024 bytes as a range part of a key or 2048 bytes as a single part hash key) or the item size (64k).</li>
|
962 |
+
* <li><code>N</code> - <code>string</code> - Optional - Numbers are positive or negative exact-value decimals and integers. A number can have up to 38 digits precision and can be between 10^-128 to 10^+126.</li>
|
963 |
+
* <li><code>B</code> - <code>blob</code> - Optional - Binary attributes are sequences of unsigned bytes.</li>
|
964 |
+
* <li><code>SS</code> - <code>string|array</code> - Optional - A set of strings. Pass a string for a single value, or an indexed array for multiple values.</li>
|
965 |
+
* <li><code>NS</code> - <code>string|array</code> - Optional - A set of numbers. Pass a string for a single value, or an indexed array for multiple values.</li>
|
966 |
+
* <li><code>BS</code> - <code>blob</code> - Optional - A set of binary attributes.</li>
|
967 |
+
* </ul></li>
|
968 |
+
* <li><code>RangeKeyElement</code> - <code>array</code> - Optional - A range key element is treated as a secondary key (used in conjunction with the primary key), and can be a string or a number, and is only used for hash-and-range primary keys. The value can be <code>String</code>, <code>Number</code>, <code>StringSet</code>, <code>NumberSet</code>. <ul>
|
969 |
+
* <li><code>S</code> - <code>string</code> - Optional - Strings are Unicode with UTF-8 binary encoding. The maximum size is limited by the size of the primary key (1024 bytes as a range part of a key or 2048 bytes as a single part hash key) or the item size (64k).</li>
|
970 |
+
* <li><code>N</code> - <code>string</code> - Optional - Numbers are positive or negative exact-value decimals and integers. A number can have up to 38 digits precision and can be between 10^-128 to 10^+126.</li>
|
971 |
+
* <li><code>B</code> - <code>blob</code> - Optional - Binary attributes are sequences of unsigned bytes.</li>
|
972 |
+
* <li><code>SS</code> - <code>string|array</code> - Optional - A set of strings. Pass a string for a single value, or an indexed array for multiple values.</li>
|
973 |
+
* <li><code>NS</code> - <code>string|array</code> - Optional - A set of numbers. Pass a string for a single value, or an indexed array for multiple values.</li>
|
974 |
+
* <li><code>BS</code> - <code>blob</code> - Optional - A set of binary attributes.</li>
|
975 |
+
* </ul></li>
|
976 |
+
* </ul></li>
|
977 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
978 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
979 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
980 |
+
*/
|
981 |
+
public function query($opt = null)
|
982 |
+
{
|
983 |
+
if (!$opt) $opt = array();
|
984 |
+
|
985 |
+
// List (non-map)
|
986 |
+
if (isset($opt['AttributesToGet']))
|
987 |
+
{
|
988 |
+
$opt['AttributesToGet'] = (is_array($opt['AttributesToGet']) ? $opt['AttributesToGet'] : array($opt['AttributesToGet']));
|
989 |
+
}
|
990 |
+
|
991 |
+
return $this->authenticate('Query', $opt);
|
992 |
+
}
|
993 |
+
|
994 |
+
/**
|
995 |
+
* Retrieves one or more items and its attributes by performing a full scan of a table.
|
996 |
+
*
|
997 |
+
* Provide a <code>ScanFilter</code> to get more specific results.
|
998 |
+
*
|
999 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
1000 |
+
* <li><code>TableName</code> - <code>string</code> - Required - The name of the table in which you want to scan. Allowed characters are <code>a-z</code>, <code>A-Z</code>, <code>0-9</code>, <code>_</code> (underscore), <code>-</code> (hyphen) and <code>.</code> (period). [Constraints: The value must be between 3 and 255 characters, and must match the following regular expression pattern: <code>[a-zA-Z0-9_.-]+</code>]</li>
|
1001 |
+
* <li><code>AttributesToGet</code> - <code>string|array</code> - Optional - List of <code>Attribute</code> names. If attribute names are not specified then all attributes will be returned. If some attributes are not found, they will not appear in the result. Pass a string for a single value, or an indexed array for multiple values.</li>
|
1002 |
+
* <li><code>Limit</code> - <code>integer</code> - Optional - The maximum number of items to return. If Amazon DynamoDB hits this limit while scanning the table, it stops the scan and returns the matching values up to the limit, and a <code>LastEvaluatedKey</code> to apply in a subsequent operation to continue the scan. Also, if the scanned data set size exceeds 1 MB before Amazon DynamoDB hits this limit, it stops the scan and returns the matching values up to the limit, and a <code>LastEvaluatedKey</code> to apply in a subsequent operation to continue the scan.</li>
|
1003 |
+
* <li><code>Count</code> - <code>boolean</code> - Optional - If set to <code>true</code>, Amazon DynamoDB returns a total number of items for the <code>Scan</code> operation, even if the operation has no matching items for the assigned filter. Do not set <code>Count</code> to <code>true</code> while providing a list of <code>AttributesToGet</code>, otherwise Amazon DynamoDB returns a validation error.</li>
|
1004 |
+
* <li><code>ScanFilter</code> - <code>array</code> - Optional - Evaluates the scan results and returns only the desired values. <ul>
|
1005 |
+
* <li><code>[custom-key]</code> - <code>array</code> - Optional - This key is variable (e.g., user-specified). <ul>
|
1006 |
+
* <li><code>AttributeValueList</code> - <code>array</code> - Optional - A list of attribute values to be used with a comparison operator for a scan or query operation. For comparisons that require more than one value, such as a <code>BETWEEN</code> comparison, the AttributeValueList contains two attribute values and the comparison operator. <ul>
|
1007 |
+
* <li><code>x</code> - <code>array</code> - Optional - This represents a simple array index. <ul>
|
1008 |
+
* <li><code>S</code> - <code>string</code> - Optional - Strings are Unicode with UTF-8 binary encoding. The maximum size is limited by the size of the primary key (1024 bytes as a range part of a key or 2048 bytes as a single part hash key) or the item size (64k).</li>
|
1009 |
+
* <li><code>N</code> - <code>string</code> - Optional - Numbers are positive or negative exact-value decimals and integers. A number can have up to 38 digits precision and can be between 10^-128 to 10^+126.</li>
|
1010 |
+
* <li><code>B</code> - <code>blob</code> - Optional - Binary attributes are sequences of unsigned bytes.</li>
|
1011 |
+
* <li><code>SS</code> - <code>string|array</code> - Optional - A set of strings. Pass a string for a single value, or an indexed array for multiple values.</li>
|
1012 |
+
* <li><code>NS</code> - <code>string|array</code> - Optional - A set of numbers. Pass a string for a single value, or an indexed array for multiple values.</li>
|
1013 |
+
* <li><code>BS</code> - <code>blob</code> - Optional - A set of binary attributes.</li>
|
1014 |
+
* </ul></li>
|
1015 |
+
* </ul></li>
|
1016 |
+
* <li><code>ComparisonOperator</code> - <code>string</code> - Required - A comparison operator is an enumeration of several operations:<ul><li> <code>EQ</code> for <em>equal</em>.</li><li> <code>NE</code> for <em>not equal</em>.</li><li> <code>IN</code> checks for exact matches.</li><li> <code>LE</code> for <em>less than or equal to</em>.</li><li> <code>LT</code> for <em>less than</em>.</li><li> <code>GE</code> for <em>greater than or equal to</em>.</li><li> <code>GT</code> for <em>greater than</em>.</li><li> <code>BETWEEN</code> for <em>between</em>.</li><li> <code>NOT_NULL</code> for <em>exists</em>.</li><li> <code>NULL</code> for <em>not exists</em>.</li><li> <code>CONTAINS</code> for substring or value in a set.</li><li> <code>NOT_CONTAINS</code> for absence of a substring or absence of a value in a set.</li><li> <code>BEGINS_WITH</code> for a substring prefix.</li></ul>Scan operations support all available comparison operators. Query operations support a subset of the available comparison operators: EQ, LE, LT, GE, GT, BETWEEN, and BEGINS_WITH. [Allowed values: <code>EQ</code>, <code>NE</code>, <code>IN</code>, <code>LE</code>, <code>LT</code>, <code>GE</code>, <code>GT</code>, <code>BETWEEN</code>, <code>NOT_NULL</code>, <code>NULL</code>, <code>CONTAINS</code>, <code>NOT_CONTAINS</code>, <code>BEGINS_WITH</code>]</li>
|
1017 |
+
* </ul></li>
|
1018 |
+
* </ul></li>
|
1019 |
+
* <li><code>ExclusiveStartKey</code> - <code>array</code> - Optional - Primary key of the item from which to continue an earlier scan. An earlier scan might provide this value if that scan operation was interrupted before scanning the entire table; either because of the result set size or the <code>Limit</code> parameter. The <code>LastEvaluatedKey</code> can be passed back in a new scan request to continue the operation from that point. <ul>
|
1020 |
+
* <li><code>HashKeyElement</code> - <code>array</code> - Required - A hash key element is treated as the primary key, and can be a string or a number. Single attribute primary keys have one index value. The value can be <code>String</code>, <code>Number</code>, <code>StringSet</code>, <code>NumberSet</code>. <ul>
|
1021 |
+
* <li><code>S</code> - <code>string</code> - Optional - Strings are Unicode with UTF-8 binary encoding. The maximum size is limited by the size of the primary key (1024 bytes as a range part of a key or 2048 bytes as a single part hash key) or the item size (64k).</li>
|
1022 |
+
* <li><code>N</code> - <code>string</code> - Optional - Numbers are positive or negative exact-value decimals and integers. A number can have up to 38 digits precision and can be between 10^-128 to 10^+126.</li>
|
1023 |
+
* <li><code>B</code> - <code>blob</code> - Optional - Binary attributes are sequences of unsigned bytes.</li>
|
1024 |
+
* <li><code>SS</code> - <code>string|array</code> - Optional - A set of strings. Pass a string for a single value, or an indexed array for multiple values.</li>
|
1025 |
+
* <li><code>NS</code> - <code>string|array</code> - Optional - A set of numbers. Pass a string for a single value, or an indexed array for multiple values.</li>
|
1026 |
+
* <li><code>BS</code> - <code>blob</code> - Optional - A set of binary attributes.</li>
|
1027 |
+
* </ul></li>
|
1028 |
+
* <li><code>RangeKeyElement</code> - <code>array</code> - Optional - A range key element is treated as a secondary key (used in conjunction with the primary key), and can be a string or a number, and is only used for hash-and-range primary keys. The value can be <code>String</code>, <code>Number</code>, <code>StringSet</code>, <code>NumberSet</code>. <ul>
|
1029 |
+
* <li><code>S</code> - <code>string</code> - Optional - Strings are Unicode with UTF-8 binary encoding. The maximum size is limited by the size of the primary key (1024 bytes as a range part of a key or 2048 bytes as a single part hash key) or the item size (64k).</li>
|
1030 |
+
* <li><code>N</code> - <code>string</code> - Optional - Numbers are positive or negative exact-value decimals and integers. A number can have up to 38 digits precision and can be between 10^-128 to 10^+126.</li>
|
1031 |
+
* <li><code>B</code> - <code>blob</code> - Optional - Binary attributes are sequences of unsigned bytes.</li>
|
1032 |
+
* <li><code>SS</code> - <code>string|array</code> - Optional - A set of strings. Pass a string for a single value, or an indexed array for multiple values.</li>
|
1033 |
+
* <li><code>NS</code> - <code>string|array</code> - Optional - A set of numbers. Pass a string for a single value, or an indexed array for multiple values.</li>
|
1034 |
+
* <li><code>BS</code> - <code>blob</code> - Optional - A set of binary attributes.</li>
|
1035 |
+
* </ul></li>
|
1036 |
+
* </ul></li>
|
1037 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
1038 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
1039 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
1040 |
+
*/
|
1041 |
+
public function scan($opt = null)
|
1042 |
+
{
|
1043 |
+
if (!$opt) $opt = array();
|
1044 |
+
|
1045 |
+
// List (non-map)
|
1046 |
+
if (isset($opt['AttributesToGet']))
|
1047 |
+
{
|
1048 |
+
$opt['AttributesToGet'] = (is_array($opt['AttributesToGet']) ? $opt['AttributesToGet'] : array($opt['AttributesToGet']));
|
1049 |
+
}
|
1050 |
+
|
1051 |
+
return $this->authenticate('Scan', $opt);
|
1052 |
+
}
|
1053 |
+
|
1054 |
+
/**
|
1055 |
+
* Edits an existing item's attributes.
|
1056 |
+
*
|
1057 |
+
* You can perform a conditional update (insert a new attribute name-value pair if it doesn't
|
1058 |
+
* exist, or replace an existing name-value pair if it has certain expected attribute values).
|
1059 |
+
*
|
1060 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
1061 |
+
* <li><code>TableName</code> - <code>string</code> - Required - The name of the table in which you want to update an item. Allowed characters are <code>a-z</code>, <code>A-Z</code>, <code>0-9</code>, <code>_</code> (underscore), <code>-</code> (hyphen) and <code>.</code> (period). [Constraints: The value must be between 3 and 255 characters, and must match the following regular expression pattern: <code>[a-zA-Z0-9_.-]+</code>]</li>
|
1062 |
+
* <li><code>Key</code> - <code>array</code> - Required - The primary key that uniquely identifies each item in a table. A primary key can be a one attribute (hash) primary key or a two attribute (hash-and-range) primary key. <ul>
|
1063 |
+
* <li><code>HashKeyElement</code> - <code>array</code> - Required - A hash key element is treated as the primary key, and can be a string or a number. Single attribute primary keys have one index value. The value can be <code>String</code>, <code>Number</code>, <code>StringSet</code>, <code>NumberSet</code>. <ul>
|
1064 |
+
* <li><code>S</code> - <code>string</code> - Optional - Strings are Unicode with UTF-8 binary encoding. The maximum size is limited by the size of the primary key (1024 bytes as a range part of a key or 2048 bytes as a single part hash key) or the item size (64k).</li>
|
1065 |
+
* <li><code>N</code> - <code>string</code> - Optional - Numbers are positive or negative exact-value decimals and integers. A number can have up to 38 digits precision and can be between 10^-128 to 10^+126.</li>
|
1066 |
+
* <li><code>B</code> - <code>blob</code> - Optional - Binary attributes are sequences of unsigned bytes.</li>
|
1067 |
+
* <li><code>SS</code> - <code>string|array</code> - Optional - A set of strings. Pass a string for a single value, or an indexed array for multiple values.</li>
|
1068 |
+
* <li><code>NS</code> - <code>string|array</code> - Optional - A set of numbers. Pass a string for a single value, or an indexed array for multiple values.</li>
|
1069 |
+
* <li><code>BS</code> - <code>blob</code> - Optional - A set of binary attributes.</li>
|
1070 |
+
* </ul></li>
|
1071 |
+
* <li><code>RangeKeyElement</code> - <code>array</code> - Optional - A range key element is treated as a secondary key (used in conjunction with the primary key), and can be a string or a number, and is only used for hash-and-range primary keys. The value can be <code>String</code>, <code>Number</code>, <code>StringSet</code>, <code>NumberSet</code>. <ul>
|
1072 |
+
* <li><code>S</code> - <code>string</code> - Optional - Strings are Unicode with UTF-8 binary encoding. The maximum size is limited by the size of the primary key (1024 bytes as a range part of a key or 2048 bytes as a single part hash key) or the item size (64k).</li>
|
1073 |
+
* <li><code>N</code> - <code>string</code> - Optional - Numbers are positive or negative exact-value decimals and integers. A number can have up to 38 digits precision and can be between 10^-128 to 10^+126.</li>
|
1074 |
+
* <li><code>B</code> - <code>blob</code> - Optional - Binary attributes are sequences of unsigned bytes.</li>
|
1075 |
+
* <li><code>SS</code> - <code>string|array</code> - Optional - A set of strings. Pass a string for a single value, or an indexed array for multiple values.</li>
|
1076 |
+
* <li><code>NS</code> - <code>string|array</code> - Optional - A set of numbers. Pass a string for a single value, or an indexed array for multiple values.</li>
|
1077 |
+
* <li><code>BS</code> - <code>blob</code> - Optional - A set of binary attributes.</li>
|
1078 |
+
* </ul></li>
|
1079 |
+
* </ul></li>
|
1080 |
+
* <li><code>AttributeUpdates</code> - <code>array</code> - Required - Map of attribute name to the new value and action for the update. The attribute names specify the attributes to modify, and cannot contain any primary key attributes. <ul>
|
1081 |
+
* <li><code>[custom-key]</code> - <code>array</code> - Optional - Specifies the attribute to update and how to perform the update. Possible values: <code>PUT</code> (default), <code>ADD</code> or <code>DELETE</code>. <ul>
|
1082 |
+
* <li><code>Value</code> - <code>array</code> - Optional - AttributeValue can be <code>String</code>, <code>Number</code>, <code>Binary</code>, <code>StringSet</code>, <code>NumberSet</code>, <code>BinarySet</code>. <ul>
|
1083 |
+
* <li><code>S</code> - <code>string</code> - Optional - Strings are Unicode with UTF-8 binary encoding. The maximum size is limited by the size of the primary key (1024 bytes as a range part of a key or 2048 bytes as a single part hash key) or the item size (64k).</li>
|
1084 |
+
* <li><code>N</code> - <code>string</code> - Optional - Numbers are positive or negative exact-value decimals and integers. A number can have up to 38 digits precision and can be between 10^-128 to 10^+126.</li>
|
1085 |
+
* <li><code>B</code> - <code>blob</code> - Optional - Binary attributes are sequences of unsigned bytes.</li>
|
1086 |
+
* <li><code>SS</code> - <code>string|array</code> - Optional - A set of strings. Pass a string for a single value, or an indexed array for multiple values.</li>
|
1087 |
+
* <li><code>NS</code> - <code>string|array</code> - Optional - A set of numbers. Pass a string for a single value, or an indexed array for multiple values.</li>
|
1088 |
+
* <li><code>BS</code> - <code>blob</code> - Optional - A set of binary attributes.</li>
|
1089 |
+
* </ul></li>
|
1090 |
+
* <li><code>Action</code> - <code>string</code> - Optional - The type of action for an item update operation. Only use the add action for numbers or sets; the specified value is added to the existing value. If a set of values is specified, the values are added to the existing set. Adds the specified attribute. If the attribute exists, it is replaced by the new value. If no value is specified, this removes the attribute and its value. If a set of values is specified, then the values in the specified set are removed from the old set. [Allowed values: <code>ADD</code>, <code>PUT</code>, <code>DELETE</code>]</li>
|
1091 |
+
* </ul></li>
|
1092 |
+
* </ul></li>
|
1093 |
+
* <li><code>Expected</code> - <code>array</code> - Optional - Designates an attribute for a conditional modification. The <code>Expected</code> parameter allows you to provide an attribute name, and whether or not Amazon DynamoDB should check to see if the attribute has a particular value before modifying it. <ul>
|
1094 |
+
* <li><code>[custom-key]</code> - <code>array</code> - Optional - Allows you to provide an attribute name, and whether or not Amazon DynamoDB should check to see if the attribute value already exists; or if the attribute value exists and has a particular value before changing it. <ul>
|
1095 |
+
* <li><code>Value</code> - <code>array</code> - Optional - Specify whether or not a value already exists and has a specific content for the attribute name-value pair. <ul>
|
1096 |
+
* <li><code>S</code> - <code>string</code> - Optional - Strings are Unicode with UTF-8 binary encoding. The maximum size is limited by the size of the primary key (1024 bytes as a range part of a key or 2048 bytes as a single part hash key) or the item size (64k).</li>
|
1097 |
+
* <li><code>N</code> - <code>string</code> - Optional - Numbers are positive or negative exact-value decimals and integers. A number can have up to 38 digits precision and can be between 10^-128 to 10^+126.</li>
|
1098 |
+
* <li><code>B</code> - <code>blob</code> - Optional - Binary attributes are sequences of unsigned bytes.</li>
|
1099 |
+
* <li><code>SS</code> - <code>string|array</code> - Optional - A set of strings. Pass a string for a single value, or an indexed array for multiple values.</li>
|
1100 |
+
* <li><code>NS</code> - <code>string|array</code> - Optional - A set of numbers. Pass a string for a single value, or an indexed array for multiple values.</li>
|
1101 |
+
* <li><code>BS</code> - <code>blob</code> - Optional - A set of binary attributes.</li>
|
1102 |
+
* </ul></li>
|
1103 |
+
* <li><code>Exists</code> - <code>boolean</code> - Optional - Specify whether or not a value already exists for the attribute name-value pair.</li>
|
1104 |
+
* </ul></li>
|
1105 |
+
* </ul></li>
|
1106 |
+
* <li><code>ReturnValues</code> - <code>string</code> - Optional - Use this parameter if you want to get the attribute name-value pairs before or after they are modified. For <code>PUT</code> operations, the possible parameter values are <code>NONE</code> (default) or <code>ALL_OLD</code>. For update operations, the possible parameter values are <code>NONE</code> (default) or <code>ALL_OLD</code>, <code>UPDATED_OLD</code>, <code>ALL_NEW</code> or <code>UPDATED_NEW</code>.<ul><li> <code>NONE</code>: Nothing is returned.</li><li> <code>ALL_OLD</code>: Returns the attributes of the item as they were before the operation.</li><li> <code>UPDATED_OLD</code>: Returns the values of the updated attributes, only, as they were before the operation.</li><li> <code>ALL_NEW</code>: Returns all the attributes and their new values after the operation.</li><li> <code>UPDATED_NEW</code>: Returns the values of the updated attributes, only, as they are after the operation.</li></ul> [Allowed values: <code>NONE</code>, <code>ALL_OLD</code>, <code>UPDATED_OLD</code>, <code>ALL_NEW</code>, <code>UPDATED_NEW</code>]</li>
|
1107 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
1108 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
1109 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
1110 |
+
*/
|
1111 |
+
public function update_item($opt = null)
|
1112 |
+
{
|
1113 |
+
if (!$opt) $opt = array();
|
1114 |
+
|
1115 |
+
return $this->authenticate('UpdateItem', $opt);
|
1116 |
+
}
|
1117 |
+
|
1118 |
+
/**
|
1119 |
+
* Updates the provisioned throughput for the given table.
|
1120 |
+
*
|
1121 |
+
* Setting the throughput for a table helps you manage performance and is part of the Provisioned
|
1122 |
+
* Throughput feature of Amazon DynamoDB.
|
1123 |
+
*
|
1124 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
1125 |
+
* <li><code>TableName</code> - <code>string</code> - Required - The name of the table you want to update. Allowed characters are <code>a-z</code>, <code>A-Z</code>, <code>0-9</code>, <code>_</code> (underscore), <code>-</code> (hyphen) and <code>.</code> (period). [Constraints: The value must be between 3 and 255 characters, and must match the following regular expression pattern: <code>[a-zA-Z0-9_.-]+</code>]</li>
|
1126 |
+
* <li><code>ProvisionedThroughput</code> - <code>array</code> - Required - Provisioned throughput reserves the required read and write resources for your table in terms of <code>ReadCapacityUnits</code> and <code>WriteCapacityUnits</code>. Values for provisioned throughput depend upon your expected read/write rates, item size, and consistency. Provide the expected number of read and write operations, assuming an item size of 1k and strictly consistent reads. For 2k item size, double the value. For 3k, triple the value, etc. Eventually-consistent reads consume half the resources of strictly consistent reads. <ul>
|
1127 |
+
* <li><code>ReadCapacityUnits</code> - <code>long</code> - Required - <code>ReadCapacityUnits</code> are in terms of strictly consistent reads, assuming items of 1k. 2k items require twice the <code>ReadCapacityUnits</code>. Eventually-consistent reads only require half the <code>ReadCapacityUnits</code> of stirctly consistent reads.</li>
|
1128 |
+
* <li><code>WriteCapacityUnits</code> - <code>long</code> - Required - <code>WriteCapacityUnits</code> are in terms of strictly consistent reads, assuming items of 1k. 2k items require twice the <code>WriteCapacityUnits</code>.</li>
|
1129 |
+
* </ul></li>
|
1130 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
1131 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
1132 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
1133 |
+
*/
|
1134 |
+
public function update_table($opt = null)
|
1135 |
+
{
|
1136 |
+
if (!$opt) $opt = array();
|
1137 |
+
|
1138 |
+
return $this->authenticate('UpdateTable', $opt);
|
1139 |
+
}
|
1140 |
+
}
|
1141 |
+
|
1142 |
+
|
1143 |
+
/*%******************************************************************************************%*/
|
1144 |
+
// EXCEPTIONS
|
1145 |
+
|
1146 |
+
class DynamoDB_Exception extends Exception {}
|
1147 |
+
|
1148 |
+
|
1149 |
+
/*%******************************************************************************************%*/
|
1150 |
+
// BINARY TYPE HELPER CLASSES
|
1151 |
+
|
1152 |
+
/**
|
1153 |
+
* Represents a DynamoDB Binary type. Does base64_encoding automatically and can be
|
1154 |
+
* json_encoded directly.
|
1155 |
+
*/
|
1156 |
+
class DynamoDB_Binary
|
1157 |
+
{
|
1158 |
+
/**
|
1159 |
+
* Constructor for DynamoDB Binary type.
|
1160 |
+
*
|
1161 |
+
* @param string $value The binary value.
|
1162 |
+
*/
|
1163 |
+
public function __construct($value)
|
1164 |
+
{
|
1165 |
+
$this->{AmazonDynamoDB::TYPE_BINARY} = base64_encode((string) $value);
|
1166 |
+
}
|
1167 |
+
}
|
1168 |
+
|
1169 |
+
/**
|
1170 |
+
* Represents a DynamoDB binary set type. Does base64_encoding automatically and can be
|
1171 |
+
* json_encoded directly.
|
1172 |
+
*/
|
1173 |
+
class DynamoDB_BinarySet
|
1174 |
+
{
|
1175 |
+
/**
|
1176 |
+
* Constructor for DynamoDB Binary Set type.
|
1177 |
+
*
|
1178 |
+
* @param array $values Array of binary values.
|
1179 |
+
*/
|
1180 |
+
public function __construct(array $values)
|
1181 |
+
{
|
1182 |
+
foreach ($values as &$value)
|
1183 |
+
{
|
1184 |
+
$value = base64_encode((string) $value);
|
1185 |
+
}
|
1186 |
+
|
1187 |
+
$this->{AmazonDynamoDB::TYPE_BINARY_SET} = array_values($values);
|
1188 |
+
}
|
1189 |
+
}
|
sdk/Aws_v1/services/ec2.class.php
ADDED
@@ -0,0 +1,5277 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* Copyright 2010-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
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 |
+
* A copy of the License is located at
|
8 |
+
*
|
9 |
+
* http://aws.amazon.com/apache2.0
|
10 |
+
*
|
11 |
+
* or in the "license" file accompanying this file. This file is distributed
|
12 |
+
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
|
13 |
+
* express or implied. See the License for the specific language governing
|
14 |
+
* permissions and limitations under the License.
|
15 |
+
*/
|
16 |
+
|
17 |
+
/**
|
18 |
+
* Amazon Elastic Compute Cloud (Amazon EC2) is a web service that provides resizable compute
|
19 |
+
* capacity in the cloud. It is designed to make web-scale computing easier for developers.
|
20 |
+
*
|
21 |
+
* Amazon EC2's simple web service interface allows you to obtain and configure capacity with
|
22 |
+
* minimal friction. It provides you with complete control of your computing resources and lets
|
23 |
+
* you run on Amazon's proven computing environment. Amazon EC2 reduces the time required to
|
24 |
+
* obtain and boot new server instances to minutes, allowing you to quickly scale capacity, both
|
25 |
+
* up and down, as your computing requirements change. Amazon EC2 changes the economics of
|
26 |
+
* computing by allowing you to pay only for capacity that you actually use. Amazon EC2 provides
|
27 |
+
* developers the tools to build failure resilient applications and isolate themselves from common
|
28 |
+
* failure scenarios.
|
29 |
+
*
|
30 |
+
* Visit <a href="http://aws.amazon.com/ec2/">http://aws.amazon.com/ec2/</a> for more information.
|
31 |
+
*
|
32 |
+
* @version 2013.01.18
|
33 |
+
* @license See the included NOTICE.md file for complete information.
|
34 |
+
* @copyright See the included NOTICE.md file for complete information.
|
35 |
+
* @link http://aws.amazon.com/ec2/ Amazon EC2
|
36 |
+
* @link http://aws.amazon.com/ec2/documentation/ Amazon EC2 documentation
|
37 |
+
*/
|
38 |
+
class AmazonEC2 extends CFRuntime
|
39 |
+
{
|
40 |
+
/*%******************************************************************************************%*/
|
41 |
+
// CLASS CONSTANTS
|
42 |
+
|
43 |
+
/**
|
44 |
+
* Specify the queue URL for the United States East (Northern Virginia) Region.
|
45 |
+
*/
|
46 |
+
const REGION_US_E1 = 'ec2.us-east-1.amazonaws.com';
|
47 |
+
|
48 |
+
/**
|
49 |
+
* Specify the queue URL for the United States East (Northern Virginia) Region.
|
50 |
+
*/
|
51 |
+
const REGION_VIRGINIA = self::REGION_US_E1;
|
52 |
+
|
53 |
+
/**
|
54 |
+
* Specify the queue URL for the United States West (Northern California) Region.
|
55 |
+
*/
|
56 |
+
const REGION_US_W1 = 'ec2.us-west-1.amazonaws.com';
|
57 |
+
|
58 |
+
/**
|
59 |
+
* Specify the queue URL for the United States West (Northern California) Region.
|
60 |
+
*/
|
61 |
+
const REGION_CALIFORNIA = self::REGION_US_W1;
|
62 |
+
|
63 |
+
/**
|
64 |
+
* Specify the queue URL for the United States West (Oregon) Region.
|
65 |
+
*/
|
66 |
+
const REGION_US_W2 = 'ec2.us-west-2.amazonaws.com';
|
67 |
+
|
68 |
+
/**
|
69 |
+
* Specify the queue URL for the United States West (Oregon) Region.
|
70 |
+
*/
|
71 |
+
const REGION_OREGON = self::REGION_US_W2;
|
72 |
+
|
73 |
+
/**
|
74 |
+
* Specify the queue URL for the Europe West (Ireland) Region.
|
75 |
+
*/
|
76 |
+
const REGION_EU_W1 = 'ec2.eu-west-1.amazonaws.com';
|
77 |
+
|
78 |
+
/**
|
79 |
+
* Specify the queue URL for the Europe West (Ireland) Region.
|
80 |
+
*/
|
81 |
+
const REGION_IRELAND = self::REGION_EU_W1;
|
82 |
+
|
83 |
+
/**
|
84 |
+
* Specify the queue URL for the Asia Pacific Southeast (Singapore) Region.
|
85 |
+
*/
|
86 |
+
const REGION_APAC_SE1 = 'ec2.ap-southeast-1.amazonaws.com';
|
87 |
+
|
88 |
+
/**
|
89 |
+
* Specify the queue URL for the Asia Pacific Southeast (Singapore) Region.
|
90 |
+
*/
|
91 |
+
const REGION_SINGAPORE = self::REGION_APAC_SE1;
|
92 |
+
|
93 |
+
/**
|
94 |
+
* Specify the queue URL for the Asia Pacific Southeast (Singapore) Region.
|
95 |
+
*/
|
96 |
+
const REGION_APAC_SE2 = 'ec2.ap-southeast-2.amazonaws.com';
|
97 |
+
|
98 |
+
/**
|
99 |
+
* Specify the queue URL for the Asia Pacific Southeast (Singapore) Region.
|
100 |
+
*/
|
101 |
+
const REGION_SYDNEY = self::REGION_APAC_SE2;
|
102 |
+
|
103 |
+
/**
|
104 |
+
* Specify the queue URL for the Asia Pacific Northeast (Tokyo) Region.
|
105 |
+
*/
|
106 |
+
const REGION_APAC_NE1 = 'ec2.ap-northeast-1.amazonaws.com';
|
107 |
+
|
108 |
+
/**
|
109 |
+
* Specify the queue URL for the Asia Pacific Northeast (Tokyo) Region.
|
110 |
+
*/
|
111 |
+
const REGION_TOKYO = self::REGION_APAC_NE1;
|
112 |
+
|
113 |
+
/**
|
114 |
+
* Specify the queue URL for the United States GovCloud Region.
|
115 |
+
*/
|
116 |
+
const REGION_US_GOV1 = 'ec2.us-gov-west-1.amazonaws.com';
|
117 |
+
|
118 |
+
/**
|
119 |
+
* Specify the queue URL for the South America (Sao Paulo) Region.
|
120 |
+
*/
|
121 |
+
const REGION_SA_E1 = 'ec2.sa-east-1.amazonaws.com';
|
122 |
+
|
123 |
+
/**
|
124 |
+
* Specify the queue URL for the South America (Sao Paulo) Region.
|
125 |
+
*/
|
126 |
+
const REGION_SAO_PAULO = self::REGION_SA_E1;
|
127 |
+
|
128 |
+
/**
|
129 |
+
* Default service endpoint.
|
130 |
+
*/
|
131 |
+
const DEFAULT_URL = self::REGION_US_E1;
|
132 |
+
|
133 |
+
|
134 |
+
/*%******************************************************************************************%*/
|
135 |
+
// CONSTRUCTOR
|
136 |
+
|
137 |
+
/**
|
138 |
+
* Constructs a new instance of <AmazonEC2>.
|
139 |
+
*
|
140 |
+
* @param array $options (Optional) An associative array of parameters that can have the following keys: <ul>
|
141 |
+
* <li><code>certificate_authority</code> - <code>boolean</code> - Optional - Determines which Cerificate Authority file to use. A value of boolean <code>false</code> will use the Certificate Authority file available on the system. A value of boolean <code>true</code> will use the Certificate Authority provided by the SDK. Passing a file system path to a Certificate Authority file (chmodded to <code>0755</code>) will use that. Leave this set to <code>false</code> if you're not sure.</li>
|
142 |
+
* <li><code>credentials</code> - <code>string</code> - Optional - The name of the credential set to use for authentication.</li>
|
143 |
+
* <li><code>default_cache_config</code> - <code>string</code> - Optional - This option allows a preferred storage type to be configured for long-term caching. This can be changed later using the <set_cache_config()> method. Valid values are: <code>apc</code>, <code>xcache</code>, or a file system path such as <code>./cache</code> or <code>/tmp/cache/</code>.</li>
|
144 |
+
* <li><code>key</code> - <code>string</code> - Optional - Your AWS key, or a session key. If blank, the default credential set will be used.</li>
|
145 |
+
* <li><code>secret</code> - <code>string</code> - Optional - Your AWS secret key, or a session secret key. If blank, the default credential set will be used.</li>
|
146 |
+
* <li><code>token</code> - <code>string</code> - Optional - An AWS session token.</li></ul>
|
147 |
+
* @return void
|
148 |
+
*/
|
149 |
+
public function __construct(array $options = array())
|
150 |
+
{
|
151 |
+
$this->api_version = '2012-12-01';
|
152 |
+
$this->hostname = self::DEFAULT_URL;
|
153 |
+
$this->auth_class = 'AuthV2Query';
|
154 |
+
|
155 |
+
return parent::__construct($options);
|
156 |
+
}
|
157 |
+
|
158 |
+
|
159 |
+
/*%******************************************************************************************%*/
|
160 |
+
// STATE CONSTANTS
|
161 |
+
|
162 |
+
const STATE_PENDING = 0;
|
163 |
+
const STATE_RUNNING = 16;
|
164 |
+
const STATE_SHUTTING_DOWN = 32;
|
165 |
+
const STATE_TERMINATED = 48;
|
166 |
+
const STATE_STOPPING = 64;
|
167 |
+
const STATE_STOPPED = 80;
|
168 |
+
|
169 |
+
|
170 |
+
/*%******************************************************************************************%*/
|
171 |
+
// INSTANCE CONSTANTS
|
172 |
+
|
173 |
+
// Standard
|
174 |
+
const INSTANCE_MICRO = 't1.micro';
|
175 |
+
const INSTANCE_SMALL = 'm1.small';
|
176 |
+
const INSTANCE_MEDIUM = 'm1.medium';
|
177 |
+
const INSTANCE_LARGE = 'm1.large';
|
178 |
+
const INSTANCE_XLARGE = 'm1.xlarge';
|
179 |
+
|
180 |
+
// High Memory
|
181 |
+
const INSTANCE_HIGH_MEM_XLARGE = 'm2.xlarge';
|
182 |
+
const INSTANCE_HIGH_MEM_2XLARGE = 'm2.2xlarge';
|
183 |
+
const INSTANCE_HIGH_MEM_4XLARGE = 'm2.4xlarge';
|
184 |
+
const INSTANCE_M3_XLARGE = 'm3.xlarge';
|
185 |
+
const INSTANCE_M3_4XLARGE = 'm3.4xlarge';
|
186 |
+
|
187 |
+
// High CPU
|
188 |
+
const INSTANCE_HIGH_CPU_MEDIUM = 'c1.medium';
|
189 |
+
const INSTANCE_HIGH_CPU_XLARGE = 'c1.xlarge';
|
190 |
+
|
191 |
+
// Cluster
|
192 |
+
const INSTANCE_CLUSTER_4XLARGE = 'cc1.4xlarge';
|
193 |
+
const INSTANCE_CLUSTER_8XLARGE = 'cc2.8xlarge';
|
194 |
+
const INSTANCE_CLUSTER_GPU_XLARGE = 'cg1.4xlarge';
|
195 |
+
|
196 |
+
// High I/O
|
197 |
+
const INSTANCE_HIGH_IO_4XLARGE = 'hi1.4xlarge';
|
198 |
+
|
199 |
+
// High Storage
|
200 |
+
const INSTANCE_STORAGE_8XLARGE = 'hs1.8xlarge';
|
201 |
+
|
202 |
+
|
203 |
+
/*%******************************************************************************************%*/
|
204 |
+
// SETTERS
|
205 |
+
|
206 |
+
/**
|
207 |
+
* This allows you to explicitly sets the region for the service to use.
|
208 |
+
*
|
209 |
+
* @param string $region (Required) The region to explicitly set. Available options are <REGION_US_E1>, <REGION_US_W1>, <REGION_US_W2>, <REGION_EU_W1>, <REGION_APAC_SE1>, <REGION_APAC_SE2>, <REGION_APAC_NE1>, <REGION_US_GOV1>, <REGION_SA_E1>.
|
210 |
+
* @return $this A reference to the current instance.
|
211 |
+
*/
|
212 |
+
public function set_region($region)
|
213 |
+
{
|
214 |
+
// @codeCoverageIgnoreStart
|
215 |
+
$this->set_hostname($region);
|
216 |
+
return $this;
|
217 |
+
// @codeCoverageIgnoreEnd
|
218 |
+
}
|
219 |
+
|
220 |
+
|
221 |
+
/*%******************************************************************************************%*/
|
222 |
+
// SERVICE METHODS
|
223 |
+
|
224 |
+
/**
|
225 |
+
* Activates a specific number of licenses for a 90-day period. Activations can be done against a
|
226 |
+
* specific license ID.
|
227 |
+
*
|
228 |
+
* @param string $license_id (Required) Specifies the ID for the specific license to activate against.
|
229 |
+
* @param integer $capacity (Required) Specifies the additional number of licenses to activate.
|
230 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
231 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
232 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
233 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
234 |
+
*/
|
235 |
+
public function activate_license($license_id, $capacity, $opt = null)
|
236 |
+
{
|
237 |
+
if (!$opt) $opt = array();
|
238 |
+
$opt['LicenseId'] = $license_id;
|
239 |
+
$opt['Capacity'] = $capacity;
|
240 |
+
|
241 |
+
return $this->authenticate('ActivateLicense', $opt);
|
242 |
+
}
|
243 |
+
|
244 |
+
/**
|
245 |
+
* The AllocateAddress operation acquires an elastic IP address for use with your account.
|
246 |
+
*
|
247 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
248 |
+
* <li><code>Domain</code> - <code>string</code> - Optional - Set to <code>vpc</code> to allocate the address to your VPC. By default, will allocate to EC2. [Allowed values: <code>vpc</code>, <code>standard</code>]</li>
|
249 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
250 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
251 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
252 |
+
*/
|
253 |
+
public function allocate_address($opt = null)
|
254 |
+
{
|
255 |
+
if (!$opt) $opt = array();
|
256 |
+
|
257 |
+
return $this->authenticate('AllocateAddress', $opt);
|
258 |
+
}
|
259 |
+
|
260 |
+
/**
|
261 |
+
*
|
262 |
+
*
|
263 |
+
* @param string $network_interface_id (Required)
|
264 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
265 |
+
* <li><code>PrivateIpAddress</code> - <code>string|array</code> - Optional - Pass a string for a single value, or an indexed array for multiple values.</li>
|
266 |
+
* <li><code>SecondaryPrivateIpAddressCount</code> - <code>integer</code> - Optional - </li>
|
267 |
+
* <li><code>AllowReassignment</code> - <code>boolean</code> - Optional - </li>
|
268 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
269 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
270 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
271 |
+
*/
|
272 |
+
public function assign_private_ip_addresses($network_interface_id, $opt = null)
|
273 |
+
{
|
274 |
+
if (!$opt) $opt = array();
|
275 |
+
$opt['NetworkInterfaceId'] = $network_interface_id;
|
276 |
+
|
277 |
+
// Optional list (non-map)
|
278 |
+
if (isset($opt['PrivateIpAddress']))
|
279 |
+
{
|
280 |
+
$opt = array_merge($opt, CFComplexType::map(array(
|
281 |
+
'PrivateIpAddress' => (is_array($opt['PrivateIpAddress']) ? $opt['PrivateIpAddress'] : array($opt['PrivateIpAddress']))
|
282 |
+
)));
|
283 |
+
unset($opt['PrivateIpAddress']);
|
284 |
+
}
|
285 |
+
|
286 |
+
return $this->authenticate('AssignPrivateIpAddresses', $opt);
|
287 |
+
}
|
288 |
+
|
289 |
+
/**
|
290 |
+
* The AssociateAddress operation associates an elastic IP address with an instance.
|
291 |
+
*
|
292 |
+
* If the IP address is currently assigned to another instance, the IP address is assigned to the
|
293 |
+
* new instance. This is an idempotent operation. If you enter it more than once, Amazon EC2 does
|
294 |
+
* not return an error.
|
295 |
+
*
|
296 |
+
* @param string $instance_id (Required) The instance to associate with the IP address.
|
297 |
+
* @param string $public_ip (Required) IP address that you are assigning to the instance.
|
298 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
299 |
+
* <li><code>AllocationId</code> - <code>string</code> - Optional - The allocation ID that AWS returned when you allocated the elastic IP address for use with Amazon VPC.</li>
|
300 |
+
* <li><code>NetworkInterfaceId</code> - <code>string</code> - Optional - </li>
|
301 |
+
* <li><code>PrivateIpAddress</code> - <code>string</code> - Optional - </li>
|
302 |
+
* <li><code>AllowReassociation</code> - <code>boolean</code> - Optional - </li>
|
303 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
304 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
305 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
306 |
+
*/
|
307 |
+
public function associate_address($instance_id, $public_ip, $opt = null)
|
308 |
+
{
|
309 |
+
if (!$opt) $opt = array();
|
310 |
+
$opt['InstanceId'] = $instance_id;
|
311 |
+
$opt['PublicIp'] = $public_ip;
|
312 |
+
|
313 |
+
return $this->authenticate('AssociateAddress', $opt);
|
314 |
+
}
|
315 |
+
|
316 |
+
/**
|
317 |
+
* Associates a set of DHCP options (that you've previously created) with the specified VPC. Or,
|
318 |
+
* associates the default DHCP options with the VPC. The default set consists of the standard EC2
|
319 |
+
* host name, no domain name, no DNS server, no NTP server, and no NetBIOS server or node type.
|
320 |
+
* After you associate the options with the VPC, any existing instances and all new instances that
|
321 |
+
* you launch in that VPC use the options. For more information about the supported DHCP options
|
322 |
+
* and using them with Amazon VPC, go to Using DHCP Options in the Amazon Virtual Private Cloud
|
323 |
+
* Developer Guide.
|
324 |
+
*
|
325 |
+
* @param string $dhcp_options_id (Required) The ID of the DHCP options to associate with the VPC. Specify "default" to associate the default DHCP options with the VPC.
|
326 |
+
* @param string $vpc_id (Required) The ID of the VPC to associate the DHCP options with.
|
327 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
328 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
329 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
330 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
331 |
+
*/
|
332 |
+
public function associate_dhcp_options($dhcp_options_id, $vpc_id, $opt = null)
|
333 |
+
{
|
334 |
+
if (!$opt) $opt = array();
|
335 |
+
$opt['DhcpOptionsId'] = $dhcp_options_id;
|
336 |
+
$opt['VpcId'] = $vpc_id;
|
337 |
+
|
338 |
+
return $this->authenticate('AssociateDhcpOptions', $opt);
|
339 |
+
}
|
340 |
+
|
341 |
+
/**
|
342 |
+
* Associates a subnet with a route table. The subnet and route table must be in the same VPC.
|
343 |
+
* This association causes traffic originating from the subnet to be routed according to the
|
344 |
+
* routes in the route table. The action returns an association ID, which you need if you want to
|
345 |
+
* disassociate the route table from the subnet later. A route table can be associated with
|
346 |
+
* multiple subnets.
|
347 |
+
*
|
348 |
+
* For more information about route tables, go to <a href=
|
349 |
+
* "http://docs.amazonwebservices.com/AmazonVPC/latest/UserGuide/VPC_Route_Tables.html">Route
|
350 |
+
* Tables</a> in the Amazon Virtual Private Cloud User Guide.
|
351 |
+
*
|
352 |
+
* @param string $subnet_id (Required) The ID of the subnet.
|
353 |
+
* @param string $route_table_id (Required) The ID of the route table.
|
354 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
355 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
356 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
357 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
358 |
+
*/
|
359 |
+
public function associate_route_table($subnet_id, $route_table_id, $opt = null)
|
360 |
+
{
|
361 |
+
if (!$opt) $opt = array();
|
362 |
+
$opt['SubnetId'] = $subnet_id;
|
363 |
+
$opt['RouteTableId'] = $route_table_id;
|
364 |
+
|
365 |
+
return $this->authenticate('AssociateRouteTable', $opt);
|
366 |
+
}
|
367 |
+
|
368 |
+
/**
|
369 |
+
* Attaches an Internet gateway to a VPC, enabling connectivity between the Internet and the VPC.
|
370 |
+
* For more information about your VPC and Internet gateway, go to the Amazon Virtual Private
|
371 |
+
* Cloud User Guide.
|
372 |
+
*
|
373 |
+
* @param string $internet_gateway_id (Required) The ID of the Internet gateway to attach.
|
374 |
+
* @param string $vpc_id (Required) The ID of the VPC.
|
375 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
376 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
377 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
378 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
379 |
+
*/
|
380 |
+
public function attach_internet_gateway($internet_gateway_id, $vpc_id, $opt = null)
|
381 |
+
{
|
382 |
+
if (!$opt) $opt = array();
|
383 |
+
$opt['InternetGatewayId'] = $internet_gateway_id;
|
384 |
+
$opt['VpcId'] = $vpc_id;
|
385 |
+
|
386 |
+
return $this->authenticate('AttachInternetGateway', $opt);
|
387 |
+
}
|
388 |
+
|
389 |
+
/**
|
390 |
+
*
|
391 |
+
*
|
392 |
+
* @param string $network_interface_id (Required)
|
393 |
+
* @param string $instance_id (Required)
|
394 |
+
* @param integer $device_index (Required)
|
395 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
396 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
397 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
398 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
399 |
+
*/
|
400 |
+
public function attach_network_interface($network_interface_id, $instance_id, $device_index, $opt = null)
|
401 |
+
{
|
402 |
+
if (!$opt) $opt = array();
|
403 |
+
$opt['NetworkInterfaceId'] = $network_interface_id;
|
404 |
+
$opt['InstanceId'] = $instance_id;
|
405 |
+
$opt['DeviceIndex'] = $device_index;
|
406 |
+
|
407 |
+
return $this->authenticate('AttachNetworkInterface', $opt);
|
408 |
+
}
|
409 |
+
|
410 |
+
/**
|
411 |
+
* Attach a previously created volume to a running instance.
|
412 |
+
*
|
413 |
+
* @param string $volume_id (Required) The ID of the Amazon EBS volume. The volume and instance must be within the same Availability Zone and the instance must be running.
|
414 |
+
* @param string $instance_id (Required) The ID of the instance to which the volume attaches. The volume and instance must be within the same Availability Zone and the instance must be running.
|
415 |
+
* @param string $device (Required) Specifies how the device is exposed to the instance (e.g., <code>/dev/sdh</code>).
|
416 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
417 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
418 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
419 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
420 |
+
*/
|
421 |
+
public function attach_volume($volume_id, $instance_id, $device, $opt = null)
|
422 |
+
{
|
423 |
+
if (!$opt) $opt = array();
|
424 |
+
$opt['VolumeId'] = $volume_id;
|
425 |
+
$opt['InstanceId'] = $instance_id;
|
426 |
+
$opt['Device'] = $device;
|
427 |
+
|
428 |
+
return $this->authenticate('AttachVolume', $opt);
|
429 |
+
}
|
430 |
+
|
431 |
+
/**
|
432 |
+
* Attaches a VPN gateway to a VPC. This is the last step required to get your VPC fully connected
|
433 |
+
* to your data center before launching instances in it. For more information, go to Process for
|
434 |
+
* Using Amazon VPC in the Amazon Virtual Private Cloud Developer Guide.
|
435 |
+
*
|
436 |
+
* @param string $vpn_gateway_id (Required) The ID of the VPN gateway to attach to the VPC.
|
437 |
+
* @param string $vpc_id (Required) The ID of the VPC to attach to the VPN gateway.
|
438 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
439 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
440 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
441 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
442 |
+
*/
|
443 |
+
public function attach_vpn_gateway($vpn_gateway_id, $vpc_id, $opt = null)
|
444 |
+
{
|
445 |
+
if (!$opt) $opt = array();
|
446 |
+
$opt['VpnGatewayId'] = $vpn_gateway_id;
|
447 |
+
$opt['VpcId'] = $vpc_id;
|
448 |
+
|
449 |
+
return $this->authenticate('AttachVpnGateway', $opt);
|
450 |
+
}
|
451 |
+
|
452 |
+
/**
|
453 |
+
* This action applies only to security groups in a VPC; it's not supported for EC2 security
|
454 |
+
* groups. For information about Amazon Virtual Private Cloud and VPC security groups, go to the
|
455 |
+
* Amazon Virtual Private Cloud User Guide.
|
456 |
+
*
|
457 |
+
* The action adds one or more egress rules to a VPC security group. Specifically, this permits
|
458 |
+
* instances in a security group to send traffic to either one or more destination CIDR IP address
|
459 |
+
* ranges, or to one or more destination security groups in the same VPC.
|
460 |
+
*
|
461 |
+
* Each rule consists of the protocol (e.g., TCP), plus either a CIDR range, or a source group.
|
462 |
+
* For the TCP and UDP protocols, you must also specify the destination port or port range. For
|
463 |
+
* the ICMP protocol, you must also specify the ICMP type and code. You can use <code>-1</code> as
|
464 |
+
* a wildcard for the ICMP type or code.
|
465 |
+
*
|
466 |
+
* Rule changes are propagated to instances within the security group as quickly as possible.
|
467 |
+
* However, a small delay might occur.
|
468 |
+
*
|
469 |
+
* <strong>Important:</strong> For VPC security groups: You can have up to 50 rules total per
|
470 |
+
* group (covering both ingress and egress).
|
471 |
+
*
|
472 |
+
* @param string $group_id (Required) ID of the VPC security group to modify.
|
473 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
474 |
+
* <li><code>IpPermissions</code> - <code>array</code> - Optional - List of IP permissions to authorize on the specified security group. Specifying permissions through IP permissions is the preferred way of authorizing permissions since it offers more flexibility and control. <ul>
|
475 |
+
* <li><code>x</code> - <code>array</code> - Optional - This represents a simple array index. <ul>
|
476 |
+
* <li><code>IpProtocol</code> - <code>string</code> - Optional - The IP protocol of this permission. Valid protocol values: <code>tcp</code>, <code>udp</code>, <code>icmp</code></li>
|
477 |
+
* <li><code>FromPort</code> - <code>integer</code> - Optional - Start of port range for the TCP and UDP protocols, or an ICMP type number. An ICMP type number of <code>-1</code> indicates a wildcard (i.e., any ICMP type number).</li>
|
478 |
+
* <li><code>ToPort</code> - <code>integer</code> - Optional - End of port range for the TCP and UDP protocols, or an ICMP code. An ICMP code of <code>-1</code> indicates a wildcard (i.e., any ICMP code).</li>
|
479 |
+
* <li><code>Groups</code> - <code>array</code> - Optional - The list of AWS user IDs and groups included in this permission. <ul>
|
480 |
+
* <li><code>x</code> - <code>array</code> - Optional - This represents a simple array index. <ul>
|
481 |
+
* <li><code>UserId</code> - <code>string</code> - Optional - The AWS user ID of an account.</li>
|
482 |
+
* <li><code>GroupName</code> - <code>string</code> - Optional - Name of the security group in the specified AWS account. Cannot be used when specifying a CIDR IP address range.</li>
|
483 |
+
* <li><code>GroupId</code> - <code>string</code> - Optional - ID of the security group in the specified AWS account. Cannot be used when specifying a CIDR IP address range.</li>
|
484 |
+
* </ul></li>
|
485 |
+
* </ul></li>
|
486 |
+
* <li><code>IpRanges</code> - <code>string|array</code> - Optional - The list of CIDR IP ranges included in this permission. Pass a string for a single value, or an indexed array for multiple values.</li>
|
487 |
+
* </ul></li>
|
488 |
+
* </ul></li>
|
489 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
490 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
491 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
492 |
+
*/
|
493 |
+
public function authorize_security_group_egress($group_id, $opt = null)
|
494 |
+
{
|
495 |
+
if (!$opt) $opt = array();
|
496 |
+
$opt['GroupId'] = $group_id;
|
497 |
+
|
498 |
+
// Optional list + map
|
499 |
+
if (isset($opt['IpPermissions']))
|
500 |
+
{
|
501 |
+
$opt = array_merge($opt, CFComplexType::map(array(
|
502 |
+
'IpPermissions' => $opt['IpPermissions']
|
503 |
+
)));
|
504 |
+
unset($opt['IpPermissions']);
|
505 |
+
}
|
506 |
+
|
507 |
+
return $this->authenticate('AuthorizeSecurityGroupEgress', $opt);
|
508 |
+
}
|
509 |
+
|
510 |
+
/**
|
511 |
+
* The AuthorizeSecurityGroupIngress operation adds permissions to a security group.
|
512 |
+
*
|
513 |
+
* Permissions are specified by the IP protocol (TCP, UDP or ICMP), the source of the request (by
|
514 |
+
* IP range or an Amazon EC2 user-group pair), the source and destination port ranges (for TCP and
|
515 |
+
* UDP), and the ICMP codes and types (for ICMP). When authorizing ICMP, <code>-1</code> can be
|
516 |
+
* used as a wildcard in the type and code fields.
|
517 |
+
*
|
518 |
+
* Permission changes are propagated to instances within the security group as quickly as
|
519 |
+
* possible. However, depending on the number of instances, a small delay might occur.
|
520 |
+
*
|
521 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
522 |
+
* <li><code>GroupName</code> - <code>string</code> - Optional - Name of the standard (EC2) security group to modify. The group must belong to your account. Can be used instead of GroupID for standard (EC2) security groups.</li>
|
523 |
+
* <li><code>GroupId</code> - <code>string</code> - Optional - ID of the standard (EC2) or VPC security group to modify. The group must belong to your account. Required for VPC security groups; can be used instead of GroupName for standard (EC2) security groups.</li>
|
524 |
+
* <li><code>IpPermissions</code> - <code>array</code> - Optional - List of IP permissions to authorize on the specified security group. Specifying permissions through IP permissions is the preferred way of authorizing permissions since it offers more flexibility and control. <ul>
|
525 |
+
* <li><code>x</code> - <code>array</code> - Optional - This represents a simple array index. <ul>
|
526 |
+
* <li><code>IpProtocol</code> - <code>string</code> - Optional - The IP protocol of this permission. Valid protocol values: <code>tcp</code>, <code>udp</code>, <code>icmp</code></li>
|
527 |
+
* <li><code>FromPort</code> - <code>integer</code> - Optional - Start of port range for the TCP and UDP protocols, or an ICMP type number. An ICMP type number of <code>-1</code> indicates a wildcard (i.e., any ICMP type number).</li>
|
528 |
+
* <li><code>ToPort</code> - <code>integer</code> - Optional - End of port range for the TCP and UDP protocols, or an ICMP code. An ICMP code of <code>-1</code> indicates a wildcard (i.e., any ICMP code).</li>
|
529 |
+
* <li><code>Groups</code> - <code>array</code> - Optional - The list of AWS user IDs and groups included in this permission. <ul>
|
530 |
+
* <li><code>x</code> - <code>array</code> - Optional - This represents a simple array index. <ul>
|
531 |
+
* <li><code>UserId</code> - <code>string</code> - Optional - The AWS user ID of an account.</li>
|
532 |
+
* <li><code>GroupName</code> - <code>string</code> - Optional - Name of the security group in the specified AWS account. Cannot be used when specifying a CIDR IP address range.</li>
|
533 |
+
* <li><code>GroupId</code> - <code>string</code> - Optional - ID of the security group in the specified AWS account. Cannot be used when specifying a CIDR IP address range.</li>
|
534 |
+
* </ul></li>
|
535 |
+
* </ul></li>
|
536 |
+
* <li><code>IpRanges</code> - <code>string|array</code> - Optional - The list of CIDR IP ranges included in this permission. Pass a string for a single value, or an indexed array for multiple values.</li>
|
537 |
+
* </ul></li>
|
538 |
+
* </ul></li>
|
539 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
540 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
541 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
542 |
+
*/
|
543 |
+
public function authorize_security_group_ingress($opt = null)
|
544 |
+
{
|
545 |
+
if (!$opt) $opt = array();
|
546 |
+
|
547 |
+
// Optional list + map
|
548 |
+
if (isset($opt['IpPermissions']))
|
549 |
+
{
|
550 |
+
$opt = array_merge($opt, CFComplexType::map(array(
|
551 |
+
'IpPermissions' => $opt['IpPermissions']
|
552 |
+
)));
|
553 |
+
unset($opt['IpPermissions']);
|
554 |
+
}
|
555 |
+
|
556 |
+
return $this->authenticate('AuthorizeSecurityGroupIngress', $opt);
|
557 |
+
}
|
558 |
+
|
559 |
+
/**
|
560 |
+
* The BundleInstance operation request that an instance is bundled the next time it boots. The
|
561 |
+
* bundling process creates a new image from a running instance and stores the AMI data in S3. Once
|
562 |
+
* bundled, the image must be registered in the normal way using the RegisterImage API.
|
563 |
+
*
|
564 |
+
* @param string $instance_id (Required) The ID of the instance to bundle.
|
565 |
+
* @param array $policy (Required) The details of S3 storage for bundling a Windows instance. Takes an associative array of parameters that can have the following keys: <ul>
|
566 |
+
* <li><code>Bucket</code> - <code>string</code> - Optional - The bucket in which to store the AMI. You can specify a bucket that you already own or a new bucket that Amazon EC2 creates on your behalf. If you specify a bucket that belongs to someone else, Amazon EC2 returns an error.</li>
|
567 |
+
* <li><code>Prefix</code> - <code>string</code> - Optional - The prefix to use when storing the AMI in S3.</li>
|
568 |
+
* <li><code>AWSAccessKeyId</code> - <code>string</code> - Optional - The Access Key ID of the owner of the Amazon S3 bucket. Use the <CFPolicy::get_key()> method of a <CFPolicy> instance.</li>
|
569 |
+
* <li><code>UploadPolicy</code> - <code>string</code> - Optional - A Base64-encoded Amazon S3 upload policy that gives Amazon EC2 permission to upload items into Amazon S3 on the user's behalf. Use the <CFPolicy::get_policy()> method of a <CFPolicy> instance.</li>
|
570 |
+
* <li><code>UploadPolicySignature</code> - <code>string</code> - Optional - The signature of the Base64 encoded JSON document. Use the <CFPolicy::get_policy_signature()> method of a <CFPolicy> instance.</li></ul>
|
571 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
572 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
573 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This is useful for manually-managed batch requests.</li></ul>
|
574 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
575 |
+
*/
|
576 |
+
public function bundle_instance($instance_id, $policy, $opt = null)
|
577 |
+
{
|
578 |
+
if (!$opt) $opt = array();
|
579 |
+
$opt['InstanceId'] = $instance_id;
|
580 |
+
|
581 |
+
$opt = array_merge($opt, CFComplexType::map(array(
|
582 |
+
'Storage.S3' => $policy
|
583 |
+
)));
|
584 |
+
|
585 |
+
return $this->authenticate('BundleInstance', $opt, $this->hostname);
|
586 |
+
}
|
587 |
+
|
588 |
+
/**
|
589 |
+
* CancelBundleTask operation cancels a pending or in-progress bundling task. This is an
|
590 |
+
* asynchronous call and it make take a while for the task to be canceled. If a task is canceled
|
591 |
+
* while it is storing items, there may be parts of the incomplete AMI stored in S3. It is up to
|
592 |
+
* the caller to clean up these parts from S3.
|
593 |
+
*
|
594 |
+
* @param string $bundle_id (Required) The ID of the bundle task to cancel.
|
595 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
596 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
597 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
598 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
599 |
+
*/
|
600 |
+
public function cancel_bundle_task($bundle_id, $opt = null)
|
601 |
+
{
|
602 |
+
if (!$opt) $opt = array();
|
603 |
+
$opt['BundleId'] = $bundle_id;
|
604 |
+
|
605 |
+
return $this->authenticate('CancelBundleTask', $opt);
|
606 |
+
}
|
607 |
+
|
608 |
+
/**
|
609 |
+
*
|
610 |
+
*
|
611 |
+
* @param string $conversion_task_id (Required)
|
612 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
613 |
+
* <li><code>ReasonMessage</code> - <code>string</code> - Optional - </li>
|
614 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
615 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
616 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
617 |
+
*/
|
618 |
+
public function cancel_conversion_task($conversion_task_id, $opt = null)
|
619 |
+
{
|
620 |
+
if (!$opt) $opt = array();
|
621 |
+
$opt['ConversionTaskId'] = $conversion_task_id;
|
622 |
+
|
623 |
+
return $this->authenticate('CancelConversionTask', $opt);
|
624 |
+
}
|
625 |
+
|
626 |
+
/**
|
627 |
+
*
|
628 |
+
*
|
629 |
+
* @param string $export_task_id (Required)
|
630 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
631 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
632 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
633 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
634 |
+
*/
|
635 |
+
public function cancel_export_task($export_task_id, $opt = null)
|
636 |
+
{
|
637 |
+
if (!$opt) $opt = array();
|
638 |
+
$opt['ExportTaskId'] = $export_task_id;
|
639 |
+
|
640 |
+
return $this->authenticate('CancelExportTask', $opt);
|
641 |
+
}
|
642 |
+
|
643 |
+
/**
|
644 |
+
*
|
645 |
+
*
|
646 |
+
* @param string $reserved_instances_listing_id (Required)
|
647 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
648 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
649 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
650 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
651 |
+
*/
|
652 |
+
public function cancel_reserved_instances_listing($reserved_instances_listing_id, $opt = null)
|
653 |
+
{
|
654 |
+
if (!$opt) $opt = array();
|
655 |
+
$opt['ReservedInstancesListingId'] = $reserved_instances_listing_id;
|
656 |
+
|
657 |
+
return $this->authenticate('CancelReservedInstancesListing', $opt);
|
658 |
+
}
|
659 |
+
|
660 |
+
/**
|
661 |
+
* Cancels one or more Spot Instance requests.
|
662 |
+
*
|
663 |
+
* Spot Instances are instances that Amazon EC2 starts on your behalf when the maximum price that
|
664 |
+
* you specify exceeds the current Spot Price. Amazon EC2 periodically sets the Spot Price based
|
665 |
+
* on available Spot Instance capacity and current spot instance requests.
|
666 |
+
*
|
667 |
+
* For conceptual information about Spot Instances, refer to the <a href=
|
668 |
+
* "http://docs.amazonwebservices.com/AWSEC2/2009-11-30/DeveloperGuide/">Amazon Elastic Compute
|
669 |
+
* Cloud Developer Guide</a> or <a href=
|
670 |
+
* "http://docs.amazonwebservices.com/AWSEC2/2009-11-30/UserGuide/">Amazon Elastic Compute Cloud
|
671 |
+
* User Guide</a>.
|
672 |
+
*
|
673 |
+
* @param string|array $spot_instance_request_id (Required) Specifies the ID of the Spot Instance request. Pass a string for a single value, or an indexed array for multiple values.
|
674 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
675 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
676 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
677 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
678 |
+
*/
|
679 |
+
public function cancel_spot_instance_requests($spot_instance_request_id, $opt = null)
|
680 |
+
{
|
681 |
+
if (!$opt) $opt = array();
|
682 |
+
|
683 |
+
// Required list (non-map)
|
684 |
+
$opt = array_merge($opt, CFComplexType::map(array(
|
685 |
+
'SpotInstanceRequestId' => (is_array($spot_instance_request_id) ? $spot_instance_request_id : array($spot_instance_request_id))
|
686 |
+
)));
|
687 |
+
|
688 |
+
return $this->authenticate('CancelSpotInstanceRequests', $opt);
|
689 |
+
}
|
690 |
+
|
691 |
+
/**
|
692 |
+
* The ConfirmProductInstance operation returns true if the specified product code is attached to
|
693 |
+
* the specified instance. The operation returns false if the product code is not attached to the
|
694 |
+
* instance.
|
695 |
+
*
|
696 |
+
* The ConfirmProductInstance operation can only be executed by the owner of the AMI. This feature
|
697 |
+
* is useful when an AMI owner is providing support and wants to verify whether a user's instance
|
698 |
+
* is eligible.
|
699 |
+
*
|
700 |
+
* @param string $product_code (Required) The product code to confirm.
|
701 |
+
* @param string $instance_id (Required) The ID of the instance to confirm.
|
702 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
703 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
704 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
705 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
706 |
+
*/
|
707 |
+
public function confirm_product_instance($product_code, $instance_id, $opt = null)
|
708 |
+
{
|
709 |
+
if (!$opt) $opt = array();
|
710 |
+
$opt['ProductCode'] = $product_code;
|
711 |
+
$opt['InstanceId'] = $instance_id;
|
712 |
+
|
713 |
+
return $this->authenticate('ConfirmProductInstance', $opt);
|
714 |
+
}
|
715 |
+
|
716 |
+
/**
|
717 |
+
*
|
718 |
+
*
|
719 |
+
* @param string $source_region (Required)
|
720 |
+
* @param string $source_snapshot_id (Required)
|
721 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
722 |
+
* <li><code>Description</code> - <code>string</code> - Optional - </li>
|
723 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
724 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
725 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
726 |
+
*/
|
727 |
+
public function copy_snapshot($source_region, $source_snapshot_id, $opt = null)
|
728 |
+
{
|
729 |
+
if (!$opt) $opt = array();
|
730 |
+
$opt['SourceRegion'] = $source_region;
|
731 |
+
$opt['SourceSnapshotId'] = $source_snapshot_id;
|
732 |
+
|
733 |
+
return $this->authenticate('CopySnapshot', $opt);
|
734 |
+
}
|
735 |
+
|
736 |
+
/**
|
737 |
+
* Provides information to AWS about your customer gateway device. The customer gateway is the
|
738 |
+
* appliance at your end of the VPN connection (compared to the VPN gateway, which is the device
|
739 |
+
* at the AWS side of the VPN connection). You can have a single active customer gateway per AWS
|
740 |
+
* account (active means that you've created a VPN connection to use with the customer gateway).
|
741 |
+
* AWS might delete any customer gateway that you create with this operation if you leave it
|
742 |
+
* inactive for an extended period of time.
|
743 |
+
*
|
744 |
+
* You must provide the Internet-routable IP address of the customer gateway's external interface.
|
745 |
+
* The IP address must be static.
|
746 |
+
*
|
747 |
+
* You must also provide the device's Border Gateway Protocol (BGP) Autonomous System Number
|
748 |
+
* (ASN). You can use an existing ASN assigned to your network. If you don't have an ASN already,
|
749 |
+
* you can use a private ASN (in the 64512 - 65534 range). For more information about ASNs, go to
|
750 |
+
* <a href=
|
751 |
+
* "http://en.wikipedia.org/wiki/Autonomous_system_%28Internet%29">http://en.wikipedia.org/wiki/Autonomous_system_%28Internet%29</a>.
|
752 |
+
*
|
753 |
+
* @param string $type (Required) The type of VPN connection this customer gateway supports.
|
754 |
+
* @param string $ip_address (Required) The Internet-routable IP address for the customer gateway's outside interface. The address must be static
|
755 |
+
* @param integer $bgp_asn (Required) The customer gateway's Border Gateway Protocol (BGP) Autonomous System Number (ASN).
|
756 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
757 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
758 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
759 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
760 |
+
*/
|
761 |
+
public function create_customer_gateway($type, $ip_address, $bgp_asn, $opt = null)
|
762 |
+
{
|
763 |
+
if (!$opt) $opt = array();
|
764 |
+
$opt['Type'] = $type;
|
765 |
+
$opt['IpAddress'] = $ip_address;
|
766 |
+
$opt['BgpAsn'] = $bgp_asn;
|
767 |
+
|
768 |
+
return $this->authenticate('CreateCustomerGateway', $opt);
|
769 |
+
}
|
770 |
+
|
771 |
+
/**
|
772 |
+
* Creates a set of DHCP options that you can then associate with one or more VPCs, causing all
|
773 |
+
* existing and new instances that you launch in those VPCs to use the set of DHCP options. The
|
774 |
+
* following table lists the individual DHCP options you can specify. For more information about
|
775 |
+
* the options, go to <a href=
|
776 |
+
* "http://www.ietf.org/rfc/rfc2132.txt">http://www.ietf.org/rfc/rfc2132.txt</a>
|
777 |
+
*
|
778 |
+
* @param array $dhcp_configuration (Required) A set of one or more DHCP configurations. <ul>
|
779 |
+
* <li><code>x</code> - <code>array</code> - Optional - This represents a simple array index. <ul>
|
780 |
+
* <li><code>Key</code> - <code>string</code> - Optional - Contains the name of a DHCP option.</li>
|
781 |
+
* <li><code>Value</code> - <code>string|array</code> - Optional - Contains a set of values for a DHCP option. Pass a string for a single value, or an indexed array for multiple values.</li>
|
782 |
+
* </ul></li>
|
783 |
+
* </ul>
|
784 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
785 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
786 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
787 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
788 |
+
*/
|
789 |
+
public function create_dhcp_options($dhcp_configuration, $opt = null)
|
790 |
+
{
|
791 |
+
if (!$opt) $opt = array();
|
792 |
+
|
793 |
+
// Required list + map
|
794 |
+
$opt = array_merge($opt, CFComplexType::map(array(
|
795 |
+
'DhcpConfiguration' => (is_array($dhcp_configuration) ? $dhcp_configuration : array($dhcp_configuration))
|
796 |
+
)));
|
797 |
+
|
798 |
+
return $this->authenticate('CreateDhcpOptions', $opt);
|
799 |
+
}
|
800 |
+
|
801 |
+
/**
|
802 |
+
* Creates an Amazon EBS-backed AMI from a "running" or "stopped" instance. AMIs that use an
|
803 |
+
* Amazon EBS root device boot faster than AMIs that use instance stores. They can be up to 1 TiB
|
804 |
+
* in size, use storage that persists on instance failure, and can be stopped and started.
|
805 |
+
*
|
806 |
+
* @param string $instance_id (Required) The ID of the instance from which to create the new image.
|
807 |
+
* @param string $name (Required) The name for the new AMI being created.
|
808 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
809 |
+
* <li><code>Description</code> - <code>string</code> - Optional - The description for the new AMI being created.</li>
|
810 |
+
* <li><code>NoReboot</code> - <code>boolean</code> - Optional - By default this property is set to <code>false</code>, which means Amazon EC2 attempts to cleanly shut down the instance before image creation and reboots the instance afterwards. When set to true, Amazon EC2 will not shut down the instance before creating the image. When this option is used, file system integrity on the created image cannot be guaranteed.</li>
|
811 |
+
* <li><code>BlockDeviceMapping</code> - <code>array</code> - Optional - The BlockDeviceMappingItemType data type. <ul>
|
812 |
+
* <li><code>x</code> - <code>array</code> - Optional - This represents a simple array index. <ul>
|
813 |
+
* <li><code>VirtualName</code> - <code>string</code> - Optional - Specifies the virtual device name.</li>
|
814 |
+
* <li><code>DeviceName</code> - <code>string</code> - Optional - Specifies the device name (e.g., <code>/dev/sdh</code>).</li>
|
815 |
+
* <li><code>Ebs</code> - <code>array</code> - Optional - Specifies parameters used to automatically setup Amazon EBS volumes when the instance is launched. <ul>
|
816 |
+
* <li><code>x</code> - <code>array</code> - Optional - This represents a simple array index. <ul>
|
817 |
+
* <li><code>SnapshotId</code> - <code>string</code> - Optional - The ID of the snapshot from which the volume will be created.</li>
|
818 |
+
* <li><code>VolumeSize</code> - <code>integer</code> - Optional - The size of the volume, in gigabytes.</li>
|
819 |
+
* <li><code>DeleteOnTermination</code> - <code>boolean</code> - Optional - Specifies whether the Amazon EBS volume is deleted on instance termination.</li>
|
820 |
+
* <li><code>VolumeType</code> - <code>string</code> - Optional - [Allowed values: <code>standard</code>, <code>io1</code>]</li>
|
821 |
+
* <li><code>Iops</code> - <code>integer</code> - Optional - </li>
|
822 |
+
* </ul></li>
|
823 |
+
* </ul></li>
|
824 |
+
* <li><code>NoDevice</code> - <code>string</code> - Optional - Specifies the device name to suppress during instance launch.</li>
|
825 |
+
* </ul></li>
|
826 |
+
* </ul></li>
|
827 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
828 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
829 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
830 |
+
*/
|
831 |
+
public function create_image($instance_id, $name, $opt = null)
|
832 |
+
{
|
833 |
+
if (!$opt) $opt = array();
|
834 |
+
$opt['InstanceId'] = $instance_id;
|
835 |
+
$opt['Name'] = $name;
|
836 |
+
|
837 |
+
// Optional list + map
|
838 |
+
if (isset($opt['BlockDeviceMapping']))
|
839 |
+
{
|
840 |
+
$opt = array_merge($opt, CFComplexType::map(array(
|
841 |
+
'BlockDeviceMapping' => $opt['BlockDeviceMapping']
|
842 |
+
)));
|
843 |
+
unset($opt['BlockDeviceMapping']);
|
844 |
+
}
|
845 |
+
|
846 |
+
return $this->authenticate('CreateImage', $opt);
|
847 |
+
}
|
848 |
+
|
849 |
+
/**
|
850 |
+
*
|
851 |
+
*
|
852 |
+
* @param string $instance_id (Required)
|
853 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
854 |
+
* <li><code>Description</code> - <code>string</code> - Optional - </li>
|
855 |
+
* <li><code>TargetEnvironment</code> - <code>string</code> - Optional - [Allowed values: <code>citrix</code>, <code>vmware</code>]</li>
|
856 |
+
* <li><code>ExportToS3</code> - <code>array</code> - Optional - <ul>
|
857 |
+
* <li><code>x</code> - <code>array</code> - Optional - This represents a simple array index. <ul>
|
858 |
+
* <li><code>DiskImageFormat</code> - <code>string</code> - Optional - [Allowed values: <code>vmdk</code>, <code>vhd</code>]</li>
|
859 |
+
* <li><code>ContainerFormat</code> - <code>string</code> - Optional - [Allowed values: <code>ova</code>]</li>
|
860 |
+
* <li><code>S3Bucket</code> - <code>string</code> - Optional - </li>
|
861 |
+
* <li><code>S3Prefix</code> - <code>string</code> - Optional - </li>
|
862 |
+
* </ul></li>
|
863 |
+
* </ul></li>
|
864 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
865 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
866 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
867 |
+
*/
|
868 |
+
public function create_instance_export_task($instance_id, $opt = null)
|
869 |
+
{
|
870 |
+
if (!$opt) $opt = array();
|
871 |
+
$opt['InstanceId'] = $instance_id;
|
872 |
+
|
873 |
+
// Optional map (non-list)
|
874 |
+
if (isset($opt['ExportToS3']))
|
875 |
+
{
|
876 |
+
$opt = array_merge($opt, CFComplexType::map(array(
|
877 |
+
'ExportToS3' => $opt['ExportToS3']
|
878 |
+
)));
|
879 |
+
unset($opt['ExportToS3']);
|
880 |
+
}
|
881 |
+
|
882 |
+
return $this->authenticate('CreateInstanceExportTask', $opt);
|
883 |
+
}
|
884 |
+
|
885 |
+
/**
|
886 |
+
* Creates a new Internet gateway in your AWS account. After creating the Internet gateway, you
|
887 |
+
* then attach it to a VPC using <code>AttachInternetGateway</code>. For more information about
|
888 |
+
* your VPC and Internet gateway, go to Amazon Virtual Private Cloud User Guide.
|
889 |
+
*
|
890 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
891 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
892 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
893 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
894 |
+
*/
|
895 |
+
public function create_internet_gateway($opt = null)
|
896 |
+
{
|
897 |
+
if (!$opt) $opt = array();
|
898 |
+
|
899 |
+
return $this->authenticate('CreateInternetGateway', $opt);
|
900 |
+
}
|
901 |
+
|
902 |
+
/**
|
903 |
+
* The CreateKeyPair operation creates a new 2048 bit RSA key pair and returns a unique ID that
|
904 |
+
* can be used to reference this key pair when launching new instances. For more information, see
|
905 |
+
* RunInstances.
|
906 |
+
*
|
907 |
+
* @param string $key_name (Required) The unique name for the new key pair.
|
908 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
909 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
910 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
911 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
912 |
+
*/
|
913 |
+
public function create_key_pair($key_name, $opt = null)
|
914 |
+
{
|
915 |
+
if (!$opt) $opt = array();
|
916 |
+
$opt['KeyName'] = $key_name;
|
917 |
+
|
918 |
+
return $this->authenticate('CreateKeyPair', $opt);
|
919 |
+
}
|
920 |
+
|
921 |
+
/**
|
922 |
+
* Creates a new network ACL in a VPC. Network ACLs provide an optional layer of security (on top
|
923 |
+
* of security groups) for the instances in your VPC. For more information about network ACLs, go
|
924 |
+
* to Network ACLs in the Amazon Virtual Private Cloud User Guide.
|
925 |
+
*
|
926 |
+
* @param string $vpc_id (Required) The ID of the VPC where the network ACL will be created.
|
927 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
928 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
929 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
930 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
931 |
+
*/
|
932 |
+
public function create_network_acl($vpc_id, $opt = null)
|
933 |
+
{
|
934 |
+
if (!$opt) $opt = array();
|
935 |
+
$opt['VpcId'] = $vpc_id;
|
936 |
+
|
937 |
+
return $this->authenticate('CreateNetworkAcl', $opt);
|
938 |
+
}
|
939 |
+
|
940 |
+
/**
|
941 |
+
* Creates an entry (i.e., rule) in a network ACL with a rule number you specify. Each network ACL
|
942 |
+
* has a set of numbered ingress rules and a separate set of numbered egress rules. When
|
943 |
+
* determining whether a packet should be allowed in or out of a subnet associated with the ACL,
|
944 |
+
* Amazon VPC processes the entries in the ACL according to the rule numbers, in ascending order.
|
945 |
+
*
|
946 |
+
* <strong>Important:</strong> We recommend that you leave room between the rules (e.g., 100, 110,
|
947 |
+
* 120, etc.), and not number them sequentially (101, 102, 103, etc.). This allows you to easily
|
948 |
+
* add a new rule between existing ones without having to renumber the rules.
|
949 |
+
*
|
950 |
+
* After you add an entry, you can't modify it; you must either replace it, or create a new entry
|
951 |
+
* and delete the old one.
|
952 |
+
*
|
953 |
+
* For more information about network ACLs, go to Network ACLs in the Amazon Virtual Private Cloud
|
954 |
+
* User Guide.
|
955 |
+
*
|
956 |
+
* @param string $network_acl_id (Required) ID of the ACL where the entry will be created.
|
957 |
+
* @param integer $rule_number (Required) Rule number to assign to the entry (e.g., 100). ACL entries are processed in ascending order by rule number.
|
958 |
+
* @param string $protocol (Required) IP protocol the rule applies to. Valid Values: <code>tcp</code>, <code>udp</code>, <code>icmp</code> or an IP protocol number.
|
959 |
+
* @param string $rule_action (Required) Whether to allow or deny traffic that matches the rule. [Allowed values: <code>allow</code>, <code>deny</code>]
|
960 |
+
* @param boolean $egress (Required) Whether this rule applies to egress traffic from the subnet (<code>true</code>) or ingress traffic to the subnet (<code>false</code>).
|
961 |
+
* @param string $cidr_block (Required) The CIDR range to allow or deny, in CIDR notation (e.g., <code>172.16.0.0/24</code>).
|
962 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
963 |
+
* <li><code>Icmp</code> - <code>array</code> - Optional - ICMP values. <ul>
|
964 |
+
* <li><code>x</code> - <code>array</code> - Optional - This represents a simple array index. <ul>
|
965 |
+
* <li><code>Type</code> - <code>integer</code> - Optional - For the ICMP protocol, the ICMP type. A value of <code>-1</code> is a wildcard meaning all types. Required if specifying <code>icmp</code> for the protocol.</li>
|
966 |
+
* <li><code>Code</code> - <code>integer</code> - Optional - For the ICMP protocol, the ICMP code. A value of <code>-1</code> is a wildcard meaning all codes. Required if specifying <code>icmp</code> for the protocol.</li>
|
967 |
+
* </ul></li>
|
968 |
+
* </ul></li>
|
969 |
+
* <li><code>PortRange</code> - <code>array</code> - Optional - Port ranges. <ul>
|
970 |
+
* <li><code>x</code> - <code>array</code> - Optional - This represents a simple array index. <ul>
|
971 |
+
* <li><code>From</code> - <code>integer</code> - Optional - The first port in the range. Required if specifying <code>tcp</code> or <code>udp</code> for the protocol.</li>
|
972 |
+
* <li><code>To</code> - <code>integer</code> - Optional - The last port in the range. Required if specifying <code>tcp</code> or <code>udp</code> for the protocol.</li>
|
973 |
+
* </ul></li>
|
974 |
+
* </ul></li>
|
975 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
976 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
977 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
978 |
+
*/
|
979 |
+
public function create_network_acl_entry($network_acl_id, $rule_number, $protocol, $rule_action, $egress, $cidr_block, $opt = null)
|
980 |
+
{
|
981 |
+
if (!$opt) $opt = array();
|
982 |
+
$opt['NetworkAclId'] = $network_acl_id;
|
983 |
+
$opt['RuleNumber'] = $rule_number;
|
984 |
+
$opt['Protocol'] = $protocol;
|
985 |
+
$opt['RuleAction'] = $rule_action;
|
986 |
+
$opt['Egress'] = $egress;
|
987 |
+
$opt['CidrBlock'] = $cidr_block;
|
988 |
+
|
989 |
+
// Optional map (non-list)
|
990 |
+
if (isset($opt['Icmp']))
|
991 |
+
{
|
992 |
+
$opt = array_merge($opt, CFComplexType::map(array(
|
993 |
+
'Icmp' => $opt['Icmp']
|
994 |
+
)));
|
995 |
+
unset($opt['Icmp']);
|
996 |
+
}
|
997 |
+
|
998 |
+
// Optional map (non-list)
|
999 |
+
if (isset($opt['PortRange']))
|
1000 |
+
{
|
1001 |
+
$opt = array_merge($opt, CFComplexType::map(array(
|
1002 |
+
'PortRange' => $opt['PortRange']
|
1003 |
+
)));
|
1004 |
+
unset($opt['PortRange']);
|
1005 |
+
}
|
1006 |
+
|
1007 |
+
return $this->authenticate('CreateNetworkAclEntry', $opt);
|
1008 |
+
}
|
1009 |
+
|
1010 |
+
/**
|
1011 |
+
*
|
1012 |
+
*
|
1013 |
+
* @param string $subnet_id (Required)
|
1014 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
1015 |
+
* <li><code>Description</code> - <code>string</code> - Optional - </li>
|
1016 |
+
* <li><code>PrivateIpAddress</code> - <code>string</code> - Optional - </li>
|
1017 |
+
* <li><code>SecurityGroupId</code> - <code>string|array</code> - Optional - Pass a string for a single value, or an indexed array for multiple values.</li>
|
1018 |
+
* <li><code>PrivateIpAddresses</code> - <code>array</code> - Optional - <ul>
|
1019 |
+
* <li><code>x</code> - <code>array</code> - Optional - This represents a simple array index. <ul>
|
1020 |
+
* <li><code>PrivateIpAddress</code> - <code>string</code> - Required - </li>
|
1021 |
+
* <li><code>Primary</code> - <code>boolean</code> - Optional - </li>
|
1022 |
+
* </ul></li>
|
1023 |
+
* </ul></li>
|
1024 |
+
* <li><code>SecondaryPrivateIpAddressCount</code> - <code>integer</code> - Optional - </li>
|
1025 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
1026 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
1027 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
1028 |
+
*/
|
1029 |
+
public function create_network_interface($subnet_id, $opt = null)
|
1030 |
+
{
|
1031 |
+
if (!$opt) $opt = array();
|
1032 |
+
$opt['SubnetId'] = $subnet_id;
|
1033 |
+
|
1034 |
+
// Optional list (non-map)
|
1035 |
+
if (isset($opt['SecurityGroupId']))
|
1036 |
+
{
|
1037 |
+
$opt = array_merge($opt, CFComplexType::map(array(
|
1038 |
+
'SecurityGroupId' => (is_array($opt['SecurityGroupId']) ? $opt['SecurityGroupId'] : array($opt['SecurityGroupId']))
|
1039 |
+
)));
|
1040 |
+
unset($opt['SecurityGroupId']);
|
1041 |
+
}
|
1042 |
+
|
1043 |
+
// Optional list + map
|
1044 |
+
if (isset($opt['PrivateIpAddresses']))
|
1045 |
+
{
|
1046 |
+
$opt = array_merge($opt, CFComplexType::map(array(
|
1047 |
+
'PrivateIpAddresses' => $opt['PrivateIpAddresses']
|
1048 |
+
)));
|
1049 |
+
unset($opt['PrivateIpAddresses']);
|
1050 |
+
}
|
1051 |
+
|
1052 |
+
return $this->authenticate('CreateNetworkInterface', $opt);
|
1053 |
+
}
|
1054 |
+
|
1055 |
+
/**
|
1056 |
+
* Creates a <code>PlacementGroup</code> into which multiple Amazon EC2 instances can be launched.
|
1057 |
+
* Users must give the group a name unique within the scope of the user account.
|
1058 |
+
*
|
1059 |
+
* @param string $group_name (Required) The name of the <code>PlacementGroup</code>.
|
1060 |
+
* @param string $strategy (Required) The <code>PlacementGroup</code> strategy. [Allowed values: <code>cluster</code>]
|
1061 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
1062 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
1063 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
1064 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
1065 |
+
*/
|
1066 |
+
public function create_placement_group($group_name, $strategy, $opt = null)
|
1067 |
+
{
|
1068 |
+
if (!$opt) $opt = array();
|
1069 |
+
$opt['GroupName'] = $group_name;
|
1070 |
+
$opt['Strategy'] = $strategy;
|
1071 |
+
|
1072 |
+
return $this->authenticate('CreatePlacementGroup', $opt);
|
1073 |
+
}
|
1074 |
+
|
1075 |
+
/**
|
1076 |
+
*
|
1077 |
+
*
|
1078 |
+
* @param string $reserved_instances_id (Required)
|
1079 |
+
* @param integer $instance_count (Required)
|
1080 |
+
* @param array $price_schedules (Required) <ul>
|
1081 |
+
* <li><code>x</code> - <code>array</code> - Optional - This represents a simple array index. <ul>
|
1082 |
+
* <li><code>Term</code> - <code>long</code> - Optional - </li>
|
1083 |
+
* <li><code>Price</code> - <code>double</code> - Optional - </li>
|
1084 |
+
* <li><code>CurrencyCode</code> - <code>string</code> - Optional - </li>
|
1085 |
+
* </ul></li>
|
1086 |
+
* </ul>
|
1087 |
+
* @param string $client_token (Required)
|
1088 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
1089 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
1090 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
1091 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
1092 |
+
*/
|
1093 |
+
public function create_reserved_instances_listing($reserved_instances_id, $instance_count, $price_schedules, $client_token, $opt = null)
|
1094 |
+
{
|
1095 |
+
if (!$opt) $opt = array();
|
1096 |
+
$opt['ReservedInstancesId'] = $reserved_instances_id;
|
1097 |
+
$opt['InstanceCount'] = $instance_count;
|
1098 |
+
$opt['ClientToken'] = $client_token;
|
1099 |
+
|
1100 |
+
// Required list + map
|
1101 |
+
$opt = array_merge($opt, CFComplexType::map(array(
|
1102 |
+
'PriceSchedules' => (is_array($price_schedules) ? $price_schedules : array($price_schedules))
|
1103 |
+
)));
|
1104 |
+
|
1105 |
+
return $this->authenticate('CreateReservedInstancesListing', $opt);
|
1106 |
+
}
|
1107 |
+
|
1108 |
+
/**
|
1109 |
+
* Creates a new route in a route table within a VPC. The route's target can be either a gateway
|
1110 |
+
* attached to the VPC or a NAT instance in the VPC.
|
1111 |
+
*
|
1112 |
+
* When determining how to route traffic, we use the route with the most specific match. For
|
1113 |
+
* example, let's say the traffic is destined for <code>192.0.2.3</code>, and the route table
|
1114 |
+
* includes the following two routes:
|
1115 |
+
*
|
1116 |
+
* <ul>
|
1117 |
+
* <li><code>192.0.2.0/24</code> (goes to some target A)</li>
|
1118 |
+
* <li><code>192.0.2.0/28</code> (goes to some target B)</li>
|
1119 |
+
* </ul>
|
1120 |
+
*
|
1121 |
+
* Both routes apply to the traffic destined for <code>192.0.2.3</code>. However, the second route
|
1122 |
+
* in the list is more specific, so we use that route to determine where to target the traffic.
|
1123 |
+
*
|
1124 |
+
* For more information about route tables, go to <a href=
|
1125 |
+
* "http://docs.amazonwebservices.com/AmazonVPC/latest/UserGuide/VPC_Route_Tables.html">Route
|
1126 |
+
* Tables</a> in the Amazon Virtual Private Cloud User Guide.
|
1127 |
+
*
|
1128 |
+
* @param string $route_table_id (Required) The ID of the route table where the route will be added.
|
1129 |
+
* @param string $destination_cidr_block (Required) The CIDR address block used for the destination match. For example: <code>0.0.0.0/0</code>. Routing decisions are based on the most specific match.
|
1130 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
1131 |
+
* <li><code>GatewayId</code> - <code>string</code> - Optional - The ID of a VPN or Internet gateway attached to your VPC. You must provide either <code>GatewayId</code> or <code>InstanceId</code>, but not both.</li>
|
1132 |
+
* <li><code>InstanceId</code> - <code>string</code> - Optional - The ID of a NAT instance in your VPC. You must provide either <code>GatewayId</code> or <code>InstanceId</code>, but not both.</li>
|
1133 |
+
* <li><code>NetworkInterfaceId</code> - <code>string</code> - Optional - </li>
|
1134 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
1135 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
1136 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
1137 |
+
*/
|
1138 |
+
public function create_route($route_table_id, $destination_cidr_block, $opt = null)
|
1139 |
+
{
|
1140 |
+
if (!$opt) $opt = array();
|
1141 |
+
$opt['RouteTableId'] = $route_table_id;
|
1142 |
+
$opt['DestinationCidrBlock'] = $destination_cidr_block;
|
1143 |
+
|
1144 |
+
return $this->authenticate('CreateRoute', $opt);
|
1145 |
+
}
|
1146 |
+
|
1147 |
+
/**
|
1148 |
+
* Creates a new route table within a VPC. After you create a new route table, you can add routes
|
1149 |
+
* and associate the table with a subnet. For more information about route tables, go to <a href=
|
1150 |
+
* "http://docs.amazonwebservices.com/AmazonVPC/latest/UserGuide/VPC_Route_Tables.html">Route
|
1151 |
+
* Tables</a> in the Amazon Virtual Private Cloud User Guide.
|
1152 |
+
*
|
1153 |
+
* @param string $vpc_id (Required) The ID of the VPC where the route table will be created.
|
1154 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
1155 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
1156 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
1157 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
1158 |
+
*/
|
1159 |
+
public function create_route_table($vpc_id, $opt = null)
|
1160 |
+
{
|
1161 |
+
if (!$opt) $opt = array();
|
1162 |
+
$opt['VpcId'] = $vpc_id;
|
1163 |
+
|
1164 |
+
return $this->authenticate('CreateRouteTable', $opt);
|
1165 |
+
}
|
1166 |
+
|
1167 |
+
/**
|
1168 |
+
* The CreateSecurityGroup operation creates a new security group.
|
1169 |
+
*
|
1170 |
+
* Every instance is launched in a security group. If no security group is specified during
|
1171 |
+
* launch, the instances are launched in the default security group. Instances within the same
|
1172 |
+
* security group have unrestricted network access to each other. Instances will reject network
|
1173 |
+
* access attempts from other instances in a different security group. As the owner of instances
|
1174 |
+
* you can grant or revoke specific permissions using the AuthorizeSecurityGroupIngress and
|
1175 |
+
* RevokeSecurityGroupIngress operations.
|
1176 |
+
*
|
1177 |
+
* @param string $group_name (Required) Name of the security group.
|
1178 |
+
* @param string $group_description (Required) Description of the group. This is informational only.
|
1179 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
1180 |
+
* <li><code>VpcId</code> - <code>string</code> - Optional - ID of the VPC.</li>
|
1181 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
1182 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
1183 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
1184 |
+
*/
|
1185 |
+
public function create_security_group($group_name, $group_description, $opt = null)
|
1186 |
+
{
|
1187 |
+
if (!$opt) $opt = array();
|
1188 |
+
$opt['GroupName'] = $group_name;
|
1189 |
+
$opt['GroupDescription'] = $group_description;
|
1190 |
+
|
1191 |
+
return $this->authenticate('CreateSecurityGroup', $opt);
|
1192 |
+
}
|
1193 |
+
|
1194 |
+
/**
|
1195 |
+
* Create a snapshot of the volume identified by volume ID. A volume does not have to be detached
|
1196 |
+
* at the time the snapshot is taken.
|
1197 |
+
*
|
1198 |
+
* <p class="note">
|
1199 |
+
* Snapshot creation requires that the system is in a consistent state. For instance, this means
|
1200 |
+
* that if taking a snapshot of a database, the tables must be read-only locked to ensure that the
|
1201 |
+
* snapshot will not contain a corrupted version of the database. Therefore, be careful when using
|
1202 |
+
* this API to ensure that the system remains in the consistent state until the create snapshot
|
1203 |
+
* status has returned.
|
1204 |
+
* </p>
|
1205 |
+
*
|
1206 |
+
* @param string $volume_id (Required) The ID of the volume from which to create the snapshot.
|
1207 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
1208 |
+
* <li><code>Description</code> - <code>string</code> - Optional - The description for the new snapshot.</li>
|
1209 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
1210 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
1211 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
1212 |
+
*/
|
1213 |
+
public function create_snapshot($volume_id, $opt = null)
|
1214 |
+
{
|
1215 |
+
if (!$opt) $opt = array();
|
1216 |
+
$opt['VolumeId'] = $volume_id;
|
1217 |
+
|
1218 |
+
return $this->authenticate('CreateSnapshot', $opt);
|
1219 |
+
}
|
1220 |
+
|
1221 |
+
/**
|
1222 |
+
* Creates the data feed for Spot Instances, enabling you to view Spot Instance usage logs. You
|
1223 |
+
* can create one data feed per account.
|
1224 |
+
*
|
1225 |
+
* For conceptual information about Spot Instances, refer to the <a href=
|
1226 |
+
* "http://docs.amazonwebservices.com/AWSEC2/2009-11-30/DeveloperGuide/">Amazon Elastic Compute
|
1227 |
+
* Cloud Developer Guide</a> or <a href=
|
1228 |
+
* "http://docs.amazonwebservices.com/AWSEC2/2009-11-30/UserGuide/">Amazon Elastic Compute Cloud
|
1229 |
+
* User Guide</a>.
|
1230 |
+
*
|
1231 |
+
* @param string $bucket (Required) The Amazon S3 bucket in which to store the Spot Instance datafeed.
|
1232 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
1233 |
+
* <li><code>Prefix</code> - <code>string</code> - Optional - The prefix that is prepended to datafeed files.</li>
|
1234 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
1235 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
1236 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
1237 |
+
*/
|
1238 |
+
public function create_spot_datafeed_subscription($bucket, $opt = null)
|
1239 |
+
{
|
1240 |
+
if (!$opt) $opt = array();
|
1241 |
+
$opt['Bucket'] = $bucket;
|
1242 |
+
|
1243 |
+
return $this->authenticate('CreateSpotDatafeedSubscription', $opt);
|
1244 |
+
}
|
1245 |
+
|
1246 |
+
/**
|
1247 |
+
* Creates a subnet in an existing VPC. You can create up to 20 subnets in a VPC. If you add more
|
1248 |
+
* than one subnet to a VPC, they're set up in a star topology with a logical router in the
|
1249 |
+
* middle. When you create each subnet, you provide the VPC ID and the CIDR block you want for the
|
1250 |
+
* subnet. Once you create a subnet, you can't change its CIDR block. The subnet's CIDR block can
|
1251 |
+
* be the same as the VPC's CIDR block (assuming you want only a single subnet in the VPC), or a
|
1252 |
+
* subset of the VPC's CIDR block. If you create more than one subnet in a VPC, the subnets' CIDR
|
1253 |
+
* blocks must not overlap. The smallest subnet (and VPC) you can create uses a <code>/28</code>
|
1254 |
+
* netmask (16 IP addresses), and the largest uses a <code>/18</code> netmask (16,384 IP
|
1255 |
+
* addresses).
|
1256 |
+
*
|
1257 |
+
* <p class="important"></p>
|
1258 |
+
* AWS reserves both the first four and the last IP address in each subnet's CIDR block. They're
|
1259 |
+
* not available for use.
|
1260 |
+
*
|
1261 |
+
* @param string $vpc_id (Required) The ID of the VPC to create the subnet in.
|
1262 |
+
* @param string $cidr_block (Required) The CIDR block the subnet is to cover.
|
1263 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
1264 |
+
* <li><code>AvailabilityZone</code> - <code>string</code> - Optional - The Availability Zone to create the subnet in.</li>
|
1265 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
1266 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
1267 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
1268 |
+
*/
|
1269 |
+
public function create_subnet($vpc_id, $cidr_block, $opt = null)
|
1270 |
+
{
|
1271 |
+
if (!$opt) $opt = array();
|
1272 |
+
$opt['VpcId'] = $vpc_id;
|
1273 |
+
$opt['CidrBlock'] = $cidr_block;
|
1274 |
+
|
1275 |
+
return $this->authenticate('CreateSubnet', $opt);
|
1276 |
+
}
|
1277 |
+
|
1278 |
+
/**
|
1279 |
+
* Adds or overwrites tags for the specified resources. Each resource can have a maximum of 10
|
1280 |
+
* tags. Each tag consists of a key-value pair. Tag keys must be unique per resource.
|
1281 |
+
*
|
1282 |
+
* @param string|array $resource_id (Required) One or more IDs of resources to tag. This could be the ID of an AMI, an instance, an EBS volume, or snapshot, etc. Pass a string for a single value, or an indexed array for multiple values.
|
1283 |
+
* @param array $tag (Required) The tags to add or overwrite for the specified resources. Each tag item consists of a key-value pair. <ul>
|
1284 |
+
* <li><code>x</code> - <code>array</code> - Optional - This represents a simple array index. <ul>
|
1285 |
+
* <li><code>Key</code> - <code>string</code> - Optional - The tag's key.</li>
|
1286 |
+
* <li><code>Value</code> - <code>string</code> - Optional - The tag's value.</li>
|
1287 |
+
* </ul></li>
|
1288 |
+
* </ul>
|
1289 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
1290 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
1291 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
1292 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
1293 |
+
*/
|
1294 |
+
public function create_tags($resource_id, $tag, $opt = null)
|
1295 |
+
{
|
1296 |
+
if (!$opt) $opt = array();
|
1297 |
+
|
1298 |
+
// Required list (non-map)
|
1299 |
+
$opt = array_merge($opt, CFComplexType::map(array(
|
1300 |
+
'ResourceId' => (is_array($resource_id) ? $resource_id : array($resource_id))
|
1301 |
+
)));
|
1302 |
+
|
1303 |
+
// Required list + map
|
1304 |
+
$opt = array_merge($opt, CFComplexType::map(array(
|
1305 |
+
'Tag' => (is_array($tag) ? $tag : array($tag))
|
1306 |
+
)));
|
1307 |
+
|
1308 |
+
return $this->authenticate('CreateTags', $opt);
|
1309 |
+
}
|
1310 |
+
|
1311 |
+
/**
|
1312 |
+
* Initializes an empty volume of a given size.
|
1313 |
+
*
|
1314 |
+
* @param string $availability_zone (Required) The Availability Zone in which to create the new volume.
|
1315 |
+
* @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
|
1316 |
+
* <li><code>Size</code> - <code>integer</code> - Optional - The size of the volume, in gigabytes. Required if you are not creating a volume from a snapshot.</li>
|
1317 |
+
* <li><code>SnapshotId</code> - <code>string</code> - Optional - The ID of the snapshot from which to create the new volume.</li>
|
1318 |
+
* <li><code>VolumeType</code> - <code>string</code> - Optional - [Allowed values: <code>standard</code>, <code>io1</code>]</li>
|
1319 |
+
* <li><code>Iops</code> - <code>integer</code> - Optional - </li>
|
1320 |
+
* <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
|
1321 |
+
* <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
|
1322 |
+
* @return CFResponse A <CFResponse> object containing a parsed HTTP response.
|
1323 |
+
*/
|
1324 |
+
public function create_volume($a
|