aws-sdk-core 2.0.0.rc1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +7 -0
- data/.simplecov +6 -0
- data/.travis.yml +12 -0
- data/.yardopts +11 -0
- data/Gemfile +26 -0
- data/LICENSE.txt +12 -0
- data/README.md +169 -0
- data/Rakefile +15 -0
- data/apis/AutoScaling-2011-01-01.json +1852 -0
- data/apis/CloudFormation-2010-05-15.json +981 -0
- data/apis/CloudFront-2012-05-05.json +3861 -0
- data/apis/CloudFront-2013-05-12.json +4593 -0
- data/apis/CloudFront-2013-08-26.json +4849 -0
- data/apis/CloudSearch-2011-02-01.json +2080 -0
- data/apis/CloudWatch-2010-08-01.json +1206 -0
- data/apis/DataPipeline-2012-10-29.json +901 -0
- data/apis/DirectConnect-2012-10-25.json +825 -0
- data/apis/DynamoDB-2011-12-05.json +2857 -0
- data/apis/DynamoDB-2012-08-10.json +3127 -0
- data/apis/EC2-2013-06-15.json +13600 -0
- data/apis/EC2-2013-10-01.json +14574 -0
- data/apis/EMR-2009-03-31.json +957 -0
- data/apis/ElastiCache-2012-11-15.json +2921 -0
- data/apis/ElastiCache-2013-06-15.json +3586 -0
- data/apis/ElasticBeanstalk-2010-12-01.json +2225 -0
- data/apis/ElasticLoadBalancing-2012-06-01.json +1215 -0
- data/apis/ElasticTranscoder-2012-09-25.json +3692 -0
- data/apis/Glacier-2012-06-01.json +1058 -0
- data/apis/IAM-2010-05-08.json +2863 -0
- data/apis/ImportExport-2010-06-01.json +328 -0
- data/apis/OpsWorks-2013-02-18.json +3546 -0
- data/apis/RDS-2013-01-10.json +6772 -0
- data/apis/RDS-2013-02-12.json +7151 -0
- data/apis/RDS-2013-05-15.json +7809 -0
- data/apis/Redshift-2012-12-01.json +4180 -0
- data/apis/Route53-2012-12-12.json +1018 -0
- data/apis/S3-2006-03-01.json +3787 -0
- data/apis/SDB-2009-04-15.json +539 -0
- data/apis/SES-2010-12-01.json +678 -0
- data/apis/SNS-2010-03-31.json +870 -0
- data/apis/SQS-2012-11-05.json +798 -0
- data/apis/STS-2011-06-15.json +352 -0
- data/apis/SWF-2012-01-25.json +5451 -0
- data/apis/StorageGateway-2012-06-30.json +1696 -0
- data/apis/Support-2013-04-15.json +794 -0
- data/apis/configuration/endpoints.json +1337 -0
- data/apis/source/autoscaling-2011-01-01.json +3215 -0
- data/apis/source/autoscaling-2011-01-01.paginators.json +52 -0
- data/apis/source/cloudformation-2010-05-15.json +1260 -0
- data/apis/source/cloudformation-2010-05-15.paginators.json +24 -0
- data/apis/source/cloudfront-2012-05-05.json +6588 -0
- data/apis/source/cloudfront-2012-05-05.paginators.json +28 -0
- data/apis/source/cloudfront-2013-05-12.json +7614 -0
- data/apis/source/cloudfront-2013-05-12.paginators.json +28 -0
- data/apis/source/cloudfront-2013-08-26.json +8016 -0
- data/apis/source/cloudfront-2013-08-26.paginators.json +28 -0
- data/apis/source/cloudsearch-2011-02-01.json +3585 -0
- data/apis/source/cloudsearch-2011-02-01.paginators.json +13 -0
- data/apis/source/datapipeline-2012-10-29.json +2144 -0
- data/apis/source/datapipeline-2012-10-29.paginators.json +25 -0
- data/apis/source/directconnect-2012-10-25.json +1271 -0
- data/apis/source/directconnect-2012-10-25.paginators.json +16 -0
- data/apis/source/dynamodb-2011-12-05.json +4380 -0
- data/apis/source/dynamodb-2011-12-05.paginators.json +24 -0
- data/apis/source/dynamodb-2012-08-10.json +4839 -0
- data/apis/source/dynamodb-2012-08-10.paginators.json +24 -0
- data/apis/source/ec2-2013-02-01.json +18820 -0
- data/apis/source/ec2-2013-02-01.paginators.json +115 -0
- data/apis/source/ec2-2013-06-15.json +18820 -0
- data/apis/source/ec2-2013-06-15.paginators.json +115 -0
- data/apis/source/ec2-2013-10-01.json +19885 -0
- data/apis/source/ec2-2013-10-01.paginators.json +115 -0
- data/apis/source/elasticache-2012-11-15.json +4403 -0
- data/apis/source/elasticache-2012-11-15.paginators.json +64 -0
- data/apis/source/elasticache-2013-06-15.json +5421 -0
- data/apis/source/elasticache-2013-06-15.paginators.json +64 -0
- data/apis/source/elasticbeanstalk-2010-12-01.json +3151 -0
- data/apis/source/elasticbeanstalk-2010-12-01.paginators.json +25 -0
- data/apis/source/elasticloadbalancing-2012-06-01.json +2041 -0
- data/apis/source/elasticloadbalancing-2012-06-01.paginators.json +18 -0
- data/apis/source/elasticmapreduce-2009-03-31.json +1478 -0
- data/apis/source/elasticmapreduce-2009-03-31.paginators.json +7 -0
- data/apis/source/elastictranscoder-2012-09-25.json +6148 -0
- data/apis/source/elastictranscoder-2012-09-25.paginators.json +20 -0
- data/apis/source/email-2010-12-01.json +892 -0
- data/apis/source/email-2010-12-01.paginators.json +13 -0
- data/apis/source/glacier-2012-06-01.json +3147 -0
- data/apis/source/glacier-2012-06-01.paginators.json +28 -0
- data/apis/source/iam-2010-05-08.json +5857 -0
- data/apis/source/iam-2010-05-08.paginators.json +116 -0
- data/apis/source/importexport-2010-06-01.json +876 -0
- data/apis/source/importexport-2010-06-01.paginators.json +10 -0
- data/apis/source/monitoring-2010-08-01.json +1910 -0
- data/apis/source/monitoring-2010-08-01.paginators.json +24 -0
- data/apis/source/opsworks-2013-02-18.json +5848 -0
- data/apis/source/opsworks-2013-02-18.paginators.json +46 -0
- data/apis/source/rds-2013-01-10.json +9283 -0
- data/apis/source/rds-2013-01-10.paginators.json +105 -0
- data/apis/source/rds-2013-02-12.json +9777 -0
- data/apis/source/rds-2013-02-12.paginators.json +105 -0
- data/apis/source/rds-2013-05-15.json +10618 -0
- data/apis/source/rds-2013-05-15.paginators.json +105 -0
- data/apis/source/redshift-2012-12-01.json +5742 -0
- data/apis/source/redshift-2012-12-01.paginators.json +74 -0
- data/apis/source/route53-2012-12-12.json +2067 -0
- data/apis/source/route53-2012-12-12.paginators.json +33 -0
- data/apis/source/s3-2006-03-01.json +4261 -0
- data/apis/source/s3-2006-03-01.paginators.json +46 -0
- data/apis/source/sdb-2009-04-15.json +1145 -0
- data/apis/source/sdb-2009-04-15.paginators.json +15 -0
- data/apis/source/sns-2010-03-31.json +2234 -0
- data/apis/source/sns-2010-03-31.paginators.json +19 -0
- data/apis/source/sqs-2012-11-05.json +1162 -0
- data/apis/source/sqs-2012-11-05.paginators.json +7 -0
- data/apis/source/storagegateway-2012-06-30.json +9487 -0
- data/apis/source/storagegateway-2012-06-30.paginators.json +28 -0
- data/apis/source/sts-2011-06-15.json +627 -0
- data/apis/source/support-2013-04-15.json +1261 -0
- data/apis/source/support-2013-04-15.paginators.json +31 -0
- data/apis/source/swf-2012-01-25.json +8744 -0
- data/apis/source/swf-2012-01-25.paginators.json +46 -0
- data/aws-sdk-core.gemspec +21 -0
- data/bin/aws.rb +156 -0
- data/doc-src/images/lastnode.png +0 -0
- data/doc-src/images/node.png +0 -0
- data/doc-src/images/vline.png +0 -0
- data/doc-src/plugins/apis.rb +205 -0
- data/doc-src/templates/default/fulldoc/html/css/common.css +90 -0
- data/doc-src/templates/default/fulldoc/html/js/tabs.js +21 -0
- data/doc-src/templates/default/fulldoc/html/setup.rb +61 -0
- data/doc-src/templates/default/layout/html/footer.erb +29 -0
- data/doc-src/templates/default/layout/html/setup.rb +3 -0
- data/features/autoscaling/client.feature +22 -0
- data/features/autoscaling/setup.rb +6 -0
- data/features/cloudformation/client.feature +18 -0
- data/features/cloudformation/setup.rb +6 -0
- data/features/cloudfront/client.feature +21 -0
- data/features/cloudfront/setup.rb +6 -0
- data/features/cloudsearch/client.feature +18 -0
- data/features/cloudsearch/setup.rb +6 -0
- data/features/cloudwatch/client.feature +21 -0
- data/features/cloudwatch/setup.rb +6 -0
- data/features/common/step_definitions.rb +65 -0
- data/features/datapipeline/client.feature +18 -0
- data/features/datapipeline/setup.rb +6 -0
- data/features/directconnect/client.feature +18 -0
- data/features/directconnect/setup.rb +6 -0
- data/features/dynamodb/client.feature +21 -0
- data/features/dynamodb/setup.rb +8 -0
- data/features/dynamodb/simplified.feature +32 -0
- data/features/dynamodb/step_definitions.rb +3 -0
- data/features/ec2/client.feature +21 -0
- data/features/ec2/setup.rb +6 -0
- data/features/ec2/step_definitions.rb +19 -0
- data/features/elasticache/client.feature +18 -0
- data/features/elasticache/setup.rb +6 -0
- data/features/elasticbeanstalk/client.feature +18 -0
- data/features/elasticbeanstalk/setup.rb +6 -0
- data/features/elasticloadbalancing/client.feature +18 -0
- data/features/elasticloadbalancing/setup.rb +6 -0
- data/features/elastictranscoder/client.feature +18 -0
- data/features/elastictranscoder/setup.rb +6 -0
- data/features/emr/client.feature +18 -0
- data/features/emr/setup.rb +6 -0
- data/features/env.rb +23 -0
- data/features/glacier/client.feature +28 -0
- data/features/glacier/setup.rb +16 -0
- data/features/glacier/step_definitions.rb +25 -0
- data/features/iam/client.feature +18 -0
- data/features/iam/setup.rb +6 -0
- data/features/importexport/client.feature +18 -0
- data/features/importexport/setup.rb +6 -0
- data/features/opsworks/client.feature +18 -0
- data/features/opsworks/setup.rb +6 -0
- data/features/rds/client.feature +18 -0
- data/features/rds/setup.rb +6 -0
- data/features/redshift/client.feature +18 -0
- data/features/redshift/setup.rb +6 -0
- data/features/route53/client.feature +18 -0
- data/features/route53/setup.rb +6 -0
- data/features/s3/buckets.feature +22 -0
- data/features/s3/objects.feature +18 -0
- data/features/s3/setup.rb +17 -0
- data/features/s3/step_definitions.rb +66 -0
- data/features/s3/test.png +0 -0
- data/features/sdb/client.feature +18 -0
- data/features/sdb/setup.rb +6 -0
- data/features/ses/client.feature +18 -0
- data/features/ses/setup.rb +6 -0
- data/features/sns/client.feature +18 -0
- data/features/sns/setup.rb +6 -0
- data/features/sqs/client.feature +23 -0
- data/features/sqs/setup.rb +10 -0
- data/features/sqs/step_definitions.rb +18 -0
- data/features/storagegateway/client.feature +18 -0
- data/features/storagegateway/setup.rb +6 -0
- data/features/sts/client.feature +18 -0
- data/features/sts/setup.rb +6 -0
- data/features/swf/client.feature +21 -0
- data/features/swf/setup.rb +6 -0
- data/integration-test-config.json.sample +3 -0
- data/lib/aws-sdk-core.rb +11 -0
- data/lib/aws.rb +175 -0
- data/lib/aws/api/base_translator.rb +72 -0
- data/lib/aws/api/doc_example.rb +116 -0
- data/lib/aws/api/documentor.rb +140 -0
- data/lib/aws/api/operation_translator.rb +77 -0
- data/lib/aws/api/service_namer.rb +40 -0
- data/lib/aws/api/service_translators/cloud_front.rb +19 -0
- data/lib/aws/api/service_translators/dynamo_db.rb +7 -0
- data/lib/aws/api/service_translators/glacier.rb +37 -0
- data/lib/aws/api/service_translators/import_export.rb +15 -0
- data/lib/aws/api/service_translators/route53.rb +23 -0
- data/lib/aws/api/service_translators/s3.rb +11 -0
- data/lib/aws/api/service_translators/sqs.rb +10 -0
- data/lib/aws/api/service_translators/swf.rb +7 -0
- data/lib/aws/api/shape_translator.rb +96 -0
- data/lib/aws/api/translator.rb +150 -0
- data/lib/aws/api/visitor.rb +32 -0
- data/lib/aws/credentials.rb +35 -0
- data/lib/aws/error_handler.rb +48 -0
- data/lib/aws/errors.rb +83 -0
- data/lib/aws/json/builder.rb +77 -0
- data/lib/aws/json/error_parser.rb +20 -0
- data/lib/aws/json/parser.rb +67 -0
- data/lib/aws/json/serializer.rb +15 -0
- data/lib/aws/plugins/credentials.rb +48 -0
- data/lib/aws/plugins/dynamodb_extended_retries.rb +22 -0
- data/lib/aws/plugins/glacier_api_version.rb +19 -0
- data/lib/aws/plugins/glacier_checksums.rb +100 -0
- data/lib/aws/plugins/global_configuration.rb +79 -0
- data/lib/aws/plugins/json_protocol.rb +30 -0
- data/lib/aws/plugins/json_rpc_headers.rb +34 -0
- data/lib/aws/plugins/query_protocol.rb +11 -0
- data/lib/aws/plugins/regional_endpoint.rb +37 -0
- data/lib/aws/plugins/retry_errors.rb +149 -0
- data/lib/aws/plugins/s3_bucket_dns.rb +78 -0
- data/lib/aws/plugins/s3_complete_multipart_upload_fix.rb +38 -0
- data/lib/aws/plugins/s3_get_bucket_location_fix.rb +21 -0
- data/lib/aws/plugins/s3_md5s.rb +61 -0
- data/lib/aws/plugins/s3_redirects.rb +38 -0
- data/lib/aws/plugins/s3_regional_endpoint.rb +19 -0
- data/lib/aws/plugins/s3_signer.rb +9 -0
- data/lib/aws/plugins/signature_v2.rb +9 -0
- data/lib/aws/plugins/signature_v3.rb +9 -0
- data/lib/aws/plugins/signature_v4.rb +29 -0
- data/lib/aws/plugins/sqs_queue_urls.rb +33 -0
- data/lib/aws/plugins/swf_read_timeouts.rb +23 -0
- data/lib/aws/plugins/user_agent.rb +32 -0
- data/lib/aws/plugins/xml_protocol.rb +11 -0
- data/lib/aws/query/builder.rb +102 -0
- data/lib/aws/query/param.rb +43 -0
- data/lib/aws/query/param_list.rb +91 -0
- data/lib/aws/query/serializer.rb +24 -0
- data/lib/aws/request_handler.rb +39 -0
- data/lib/aws/response_handler.rb +38 -0
- data/lib/aws/service.rb +237 -0
- data/lib/aws/signers/base.rb +29 -0
- data/lib/aws/signers/handler.rb +18 -0
- data/lib/aws/signers/s3.rb +162 -0
- data/lib/aws/signers/v2.rb +48 -0
- data/lib/aws/signers/v3.rb +34 -0
- data/lib/aws/signers/v4.rb +142 -0
- data/lib/aws/structure.rb +38 -0
- data/lib/aws/timestamp_formatter.rb +16 -0
- data/lib/aws/util.rb +38 -0
- data/lib/aws/version.rb +3 -0
- data/lib/aws/xml/builder.rb +134 -0
- data/lib/aws/xml/error_parser.rb +24 -0
- data/lib/aws/xml/parser.rb +147 -0
- data/lib/aws/xml/serializer.rb +16 -0
- data/spec/aws/credentials_spec.rb +39 -0
- data/spec/aws/iam_spec.rb +17 -0
- data/spec/aws/json/builder_spec.rb +183 -0
- data/spec/aws/json/parser_spec.rb +238 -0
- data/spec/aws/operations_spec.rb +145 -0
- data/spec/aws/plugins/credentials_spec.rb +76 -0
- data/spec/aws/plugins/global_configuration_spec.rb +56 -0
- data/spec/aws/plugins/region_endpoint_spec.rb +77 -0
- data/spec/aws/plugins/retry_errors_spec.rb +253 -0
- data/spec/aws/query/builder_spec.rb +361 -0
- data/spec/aws/query/param_list_spec.rb +80 -0
- data/spec/aws/query/param_spec.rb +59 -0
- data/spec/aws/service_spec.rb +247 -0
- data/spec/aws/signers/v4_spec.rb +141 -0
- data/spec/aws/structure_spec.rb +103 -0
- data/spec/aws/xml/builder_spec.rb +404 -0
- data/spec/aws/xml/parser_spec.rb +716 -0
- data/spec/aws_spec.rb +89 -0
- data/spec/fixtures/api/swf.json +100 -0
- data/spec/fixtures/operations/cloudfront/list_distributions.yml +195 -0
- data/spec/fixtures/operations/cloudfront/max_items.yml +12 -0
- data/spec/fixtures/operations/dynamodb/error_parsing.yml +13 -0
- data/spec/fixtures/operations/glacier/error_parsing.yml +10 -0
- data/spec/fixtures/operations/glacier/list_vaults.yml +24 -0
- data/spec/fixtures/operations/iam/result_wrapped_elements.yml +31 -0
- data/spec/fixtures/operations/s3/304_response.yml +12 -0
- data/spec/fixtures/operations/s3/400_response.yml +12 -0
- data/spec/fixtures/operations/s3/403_response.yml +12 -0
- data/spec/fixtures/operations/s3/404_response.yml +12 -0
- data/spec/fixtures/operations/s3/comlete_multipart_upload_error.yml +18 -0
- data/spec/fixtures/operations/s3/create_bucket_with_location_constraint.yml +25 -0
- data/spec/fixtures/operations/s3/create_bucket_without_location_constraint.yml +9 -0
- data/spec/fixtures/operations/s3/delete_objects.yml +54 -0
- data/spec/fixtures/operations/s3/error_parsing.yml +17 -0
- data/spec/fixtures/operations/s3/get_bucket_location.yml +17 -0
- data/spec/fixtures/operations/s3/get_bucket_location_classic.yml +17 -0
- data/spec/fixtures/operations/s3/head_bucket_with_dns_incompatible_name.yml +12 -0
- data/spec/fixtures/operations/s3/head_object.yml +50 -0
- data/spec/fixtures/operations/s3/list_buckets.yml +41 -0
- data/spec/fixtures/operations/s3/md5_checksum_disabled.yml +10 -0
- data/spec/fixtures/operations/s3/md5_checksum_enabled.yml +8 -0
- data/spec/fixtures/operations/swf/list_domains.yml +20 -0
- data/spec/spec_helper.rb +55 -0
- data/tasks/apis.rake +51 -0
- data/tasks/docs.rake +59 -0
- data/tasks/test.rake +39 -0
- data/vendor/seahorse/.gitignore +5 -0
- data/vendor/seahorse/.simplecov +4 -0
- data/vendor/seahorse/.yardopts +10 -0
- data/vendor/seahorse/Gemfile +20 -0
- data/vendor/seahorse/LICENSE.txt +12 -0
- data/vendor/seahorse/README.md +129 -0
- data/vendor/seahorse/Rakefile +7 -0
- data/vendor/seahorse/ca-bundle.crt +3554 -0
- data/vendor/seahorse/lib/seahorse.rb +6 -0
- data/vendor/seahorse/lib/seahorse/client.rb +61 -0
- data/vendor/seahorse/lib/seahorse/client/base.rb +239 -0
- data/vendor/seahorse/lib/seahorse/client/block_io.rb +39 -0
- data/vendor/seahorse/lib/seahorse/client/configuration.rb +197 -0
- data/vendor/seahorse/lib/seahorse/client/handler.rb +26 -0
- data/vendor/seahorse/lib/seahorse/client/handler_builder.rb +49 -0
- data/vendor/seahorse/lib/seahorse/client/handler_list.rb +250 -0
- data/vendor/seahorse/lib/seahorse/client/http/endpoint.rb +95 -0
- data/vendor/seahorse/lib/seahorse/client/http/headers.rb +94 -0
- data/vendor/seahorse/lib/seahorse/client/http/plain_string_io.rb +11 -0
- data/vendor/seahorse/lib/seahorse/client/http/request.rb +78 -0
- data/vendor/seahorse/lib/seahorse/client/http/response.rb +45 -0
- data/vendor/seahorse/lib/seahorse/client/logging/formatter.rb +319 -0
- data/vendor/seahorse/lib/seahorse/client/logging/handler.rb +35 -0
- data/vendor/seahorse/lib/seahorse/client/net_http/connection_pool.rb +339 -0
- data/vendor/seahorse/lib/seahorse/client/net_http/handler.rb +109 -0
- data/vendor/seahorse/lib/seahorse/client/param_converter.rb +202 -0
- data/vendor/seahorse/lib/seahorse/client/param_validator.rb +139 -0
- data/vendor/seahorse/lib/seahorse/client/plugin.rb +80 -0
- data/vendor/seahorse/lib/seahorse/client/plugin_list.rb +142 -0
- data/vendor/seahorse/lib/seahorse/client/plugins/api.rb +11 -0
- data/vendor/seahorse/lib/seahorse/client/plugins/content_length.rb +22 -0
- data/vendor/seahorse/lib/seahorse/client/plugins/endpoint.rb +36 -0
- data/vendor/seahorse/lib/seahorse/client/plugins/json_simple.rb +34 -0
- data/vendor/seahorse/lib/seahorse/client/plugins/logging.rb +37 -0
- data/vendor/seahorse/lib/seahorse/client/plugins/net_http.rb +26 -0
- data/vendor/seahorse/lib/seahorse/client/plugins/operation_methods.rb +48 -0
- data/vendor/seahorse/lib/seahorse/client/plugins/param_conversion.rb +29 -0
- data/vendor/seahorse/lib/seahorse/client/plugins/param_validation.rb +30 -0
- data/vendor/seahorse/lib/seahorse/client/plugins/raise_response_errors.rb +29 -0
- data/vendor/seahorse/lib/seahorse/client/plugins/restful_bindings.rb +205 -0
- data/vendor/seahorse/lib/seahorse/client/request.rb +62 -0
- data/vendor/seahorse/lib/seahorse/client/request_context.rb +68 -0
- data/vendor/seahorse/lib/seahorse/client/response.rb +106 -0
- data/vendor/seahorse/lib/seahorse/client/xml/builder.rb +92 -0
- data/vendor/seahorse/lib/seahorse/model.rb +38 -0
- data/vendor/seahorse/lib/seahorse/model/api.rb +39 -0
- data/vendor/seahorse/lib/seahorse/model/node.rb +102 -0
- data/vendor/seahorse/lib/seahorse/model/operation.rb +32 -0
- data/vendor/seahorse/lib/seahorse/model/operation_input.rb +30 -0
- data/vendor/seahorse/lib/seahorse/model/operations.rb +59 -0
- data/vendor/seahorse/lib/seahorse/model/property.rb +141 -0
- data/vendor/seahorse/lib/seahorse/model/shapes/shape.rb +229 -0
- data/vendor/seahorse/lib/seahorse/model/types.rb +8 -0
- data/vendor/seahorse/lib/seahorse/version.rb +3 -0
- data/vendor/seahorse/seahorse.gemspec +20 -0
- data/vendor/seahorse/spec/fixtures/plugin.rb +4 -0
- data/vendor/seahorse/spec/seahorse/client/base_spec.rb +308 -0
- data/vendor/seahorse/spec/seahorse/client/configuration_spec.rb +118 -0
- data/vendor/seahorse/spec/seahorse/client/handler_builder_spec.rb +159 -0
- data/vendor/seahorse/spec/seahorse/client/handler_list_spec.rb +243 -0
- data/vendor/seahorse/spec/seahorse/client/handler_spec.rb +40 -0
- data/vendor/seahorse/spec/seahorse/client/http/endpoint_spec.rb +168 -0
- data/vendor/seahorse/spec/seahorse/client/http/headers_spec.rb +213 -0
- data/vendor/seahorse/spec/seahorse/client/http/plain_string_io_spec.rb +23 -0
- data/vendor/seahorse/spec/seahorse/client/http/request_spec.rb +142 -0
- data/vendor/seahorse/spec/seahorse/client/http/response_spec.rb +77 -0
- data/vendor/seahorse/spec/seahorse/client/logging/formatter_spec.rb +197 -0
- data/vendor/seahorse/spec/seahorse/client/logging/handler_spec.rb +63 -0
- data/vendor/seahorse/spec/seahorse/client/net_http/connection_pool_spec.rb +10 -0
- data/vendor/seahorse/spec/seahorse/client/net_http/handler_spec.rb +232 -0
- data/vendor/seahorse/spec/seahorse/client/param_converter_spec.rb +318 -0
- data/vendor/seahorse/spec/seahorse/client/param_validator_spec.rb +271 -0
- data/vendor/seahorse/spec/seahorse/client/plugin_list_spec.rb +166 -0
- data/vendor/seahorse/spec/seahorse/client/plugin_spec.rb +118 -0
- data/vendor/seahorse/spec/seahorse/client/plugins/content_length_spec.rb +19 -0
- data/vendor/seahorse/spec/seahorse/client/plugins/endpoint_spec.rb +43 -0
- data/vendor/seahorse/spec/seahorse/client/plugins/logging_spec.rb +46 -0
- data/vendor/seahorse/spec/seahorse/client/plugins/net_http_spec.rb +71 -0
- data/vendor/seahorse/spec/seahorse/client/plugins/operation_methods_spec.rb +74 -0
- data/vendor/seahorse/spec/seahorse/client/plugins/restful_bindings/uri_path_builder_spec.rb +91 -0
- data/vendor/seahorse/spec/seahorse/client/request_context_spec.rb +105 -0
- data/vendor/seahorse/spec/seahorse/client/request_spec.rb +102 -0
- data/vendor/seahorse/spec/seahorse/client/response_spec.rb +171 -0
- data/vendor/seahorse/spec/seahorse/client/xml/builder/xml_doc_spec.rb +142 -0
- data/vendor/seahorse/spec/seahorse/client/xml/builder_spec.rb +10 -0
- data/vendor/seahorse/spec/seahorse/client_spec.rb +13 -0
- data/vendor/seahorse/spec/seahorse/model/api_spec.rb +72 -0
- data/vendor/seahorse/spec/seahorse/model/node_spec.rb +114 -0
- data/vendor/seahorse/spec/seahorse/model/operation_input_spec.rb +53 -0
- data/vendor/seahorse/spec/seahorse/model/operation_spec.rb +48 -0
- data/vendor/seahorse/spec/seahorse/model/operations_spec.rb +64 -0
- data/vendor/seahorse/spec/seahorse/model/property_spec.rb +136 -0
- data/vendor/seahorse/spec/seahorse/model/shapes/shape_spec.rb +105 -0
- data/vendor/seahorse/spec/seahorse/version_spec.rb +11 -0
- data/vendor/seahorse/spec/spec_helper.rb +34 -0
- data/vendor/seahorse/tasks/ca_bundle.rake +23 -0
- data/vendor/seahorse/tasks/docs.rake +11 -0
- data/vendor/seahorse/tasks/test.rake +26 -0
- metadata +614 -0
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
module Aws
|
|
2
|
+
# @api private
|
|
3
|
+
class ErrorHandler
|
|
4
|
+
|
|
5
|
+
def initialize(parser)
|
|
6
|
+
@parser = parser
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
attr_accessor :handler
|
|
10
|
+
|
|
11
|
+
def call(context)
|
|
12
|
+
@handler.call(context).on_status(300..599) do |response|
|
|
13
|
+
if empty_body?(response)
|
|
14
|
+
error_code = error_code_for_empty_response(response)
|
|
15
|
+
error_message = ''
|
|
16
|
+
else
|
|
17
|
+
error_code, error_message = @parser.extract_error(response)
|
|
18
|
+
end
|
|
19
|
+
response.error = error(context, error_code, error_message)
|
|
20
|
+
response.data = nil
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
private
|
|
25
|
+
|
|
26
|
+
def error(context, code, message)
|
|
27
|
+
svc_class_name = context.config.api.metadata['service_class_name']
|
|
28
|
+
klass = Errors.error_class(svc_class_name, code)
|
|
29
|
+
Errors.error_class(svc_class_name, code).new(context, message)
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def empty_body?(response)
|
|
33
|
+
response.http_response.body_contents.empty?
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def error_code_for_empty_response(response)
|
|
37
|
+
error_code = response.http_response.status_code
|
|
38
|
+
{
|
|
39
|
+
302 => 'MovedTemporarily',
|
|
40
|
+
304 => 'NotModified',
|
|
41
|
+
400 => 'BadRequest',
|
|
42
|
+
403 => 'Forbidden',
|
|
43
|
+
404 => 'NotFound',
|
|
44
|
+
}[error_code] || "#{error_code}Error"
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
end
|
|
48
|
+
end
|
data/lib/aws/errors.rb
ADDED
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
module Aws
|
|
2
|
+
module Errors
|
|
3
|
+
|
|
4
|
+
# The base class for all errors returned by an Amazon Web Service.
|
|
5
|
+
# All ~400 level client errors and ~500 level server errors are raised
|
|
6
|
+
# as service errors. This indicates it was an error returned from the
|
|
7
|
+
# service and not one generated by the client.
|
|
8
|
+
class ServiceError < RuntimeError
|
|
9
|
+
|
|
10
|
+
# @param [Seahorse::Client::RequestContext] context
|
|
11
|
+
# @param [String] message
|
|
12
|
+
def initialize(context = nil, message = nil)
|
|
13
|
+
if context.is_a?(String)
|
|
14
|
+
message = context
|
|
15
|
+
else
|
|
16
|
+
@context = context
|
|
17
|
+
end
|
|
18
|
+
super(message)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
# @return [Seahorse::Client::RequestContext] The context of the request
|
|
22
|
+
# that triggered the remote service to return this error.
|
|
23
|
+
attr_reader :context
|
|
24
|
+
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
# Various plugins perform client-side checksums of responses.
|
|
28
|
+
# This error indicates a checksum failed.
|
|
29
|
+
class ChecksumError < RuntimeError; end
|
|
30
|
+
|
|
31
|
+
# Raised when a {Service} is constructed an no suitable API
|
|
32
|
+
# version is found based on configuration.
|
|
33
|
+
class NoSuchApiVersionError < RuntimeError; end
|
|
34
|
+
|
|
35
|
+
# Raised when a {Service} is constructed and credentials are not
|
|
36
|
+
# set, or the set credentials are empty.
|
|
37
|
+
class MissingCredentialsError < RuntimeError; end
|
|
38
|
+
|
|
39
|
+
# Raised when a {Service} is constructed and region is not specified.
|
|
40
|
+
class MissingRegionError < RuntimeError; end
|
|
41
|
+
|
|
42
|
+
# This module is mixed into another module, providing dynamic
|
|
43
|
+
# error classes. Error classes all inherit from {ServiceError}.
|
|
44
|
+
#
|
|
45
|
+
# # creates and returns the class
|
|
46
|
+
# Aws::S3::Errors::MyNewErrorClass
|
|
47
|
+
#
|
|
48
|
+
# Since the complete list of possible AWS errors returned by services
|
|
49
|
+
# is not known, this allows us to create them as needed. This also
|
|
50
|
+
# allows users to rescue errors by class without them being concrete
|
|
51
|
+
# classes beforehand.
|
|
52
|
+
#
|
|
53
|
+
# @api private
|
|
54
|
+
module DynamicErrors
|
|
55
|
+
|
|
56
|
+
def const_missing(constant)
|
|
57
|
+
const_set(constant, Class.new(ServiceError))
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
class << self
|
|
63
|
+
|
|
64
|
+
# Given the name of a service and an error code, this method
|
|
65
|
+
# returns an error class (that extends {ServiceError}.
|
|
66
|
+
#
|
|
67
|
+
# Aws::Errors.error_class('S3', 'NoSuchBucket').new
|
|
68
|
+
# #=> #<Aws::S3::Errors::NoSuchBucket>
|
|
69
|
+
#
|
|
70
|
+
# @api private
|
|
71
|
+
def error_class(svc_class_name, error_code)
|
|
72
|
+
constant = error_code.to_s.gsub(/\W+/, '').to_sym
|
|
73
|
+
errors = Aws.const_get(svc_class_name).const_get(:Errors)
|
|
74
|
+
if errors.constants.include?(constant)
|
|
75
|
+
errors.const_get(constant)
|
|
76
|
+
else
|
|
77
|
+
errors.const_set(constant, Class.new(ServiceError))
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
end
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
require 'multi_json'
|
|
2
|
+
require 'base64'
|
|
3
|
+
|
|
4
|
+
module Aws
|
|
5
|
+
module Json
|
|
6
|
+
class Builder
|
|
7
|
+
|
|
8
|
+
include Seahorse::Model::Shapes
|
|
9
|
+
include TimestampFormatter
|
|
10
|
+
|
|
11
|
+
# @param [Seahorse::Model::Shapes::Shape] rules
|
|
12
|
+
def initialize(rules)
|
|
13
|
+
@rules = rules
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
# @param [Hash] params
|
|
17
|
+
# @return [Hash]
|
|
18
|
+
def build(params)
|
|
19
|
+
structure(@rules, params)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# @param [Hash] params
|
|
23
|
+
# @return [String<JSON>]
|
|
24
|
+
def to_json(params)
|
|
25
|
+
MultiJson.dump(build(params))
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
class << self
|
|
29
|
+
|
|
30
|
+
# @param [Seahorse::Model::Shapes::Shape] rules
|
|
31
|
+
# @param [Hash] params
|
|
32
|
+
# @return [String<JSON>]
|
|
33
|
+
def to_json(rules, params)
|
|
34
|
+
new(rules).to_json(params)
|
|
35
|
+
end
|
|
36
|
+
alias build to_json
|
|
37
|
+
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
private
|
|
41
|
+
|
|
42
|
+
def structure(shape, values)
|
|
43
|
+
data = {}
|
|
44
|
+
values.each do |key, value|
|
|
45
|
+
if member_shape = shape.members[key]
|
|
46
|
+
data[member_shape.serialized_name] = member(member_shape, value)
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
data
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def list(shape, values)
|
|
53
|
+
values.map { |value| member(shape.members, value) }
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def map(shape, values)
|
|
57
|
+
data = {}
|
|
58
|
+
values.each do |key, value|
|
|
59
|
+
data[key] = member(shape.members, value)
|
|
60
|
+
end
|
|
61
|
+
data
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def member(shape, value)
|
|
65
|
+
case shape
|
|
66
|
+
when StructureShape then structure(shape, value)
|
|
67
|
+
when ListShape then list(shape, value)
|
|
68
|
+
when MapShape then map(shape, value)
|
|
69
|
+
when TimestampShape then timestamp(shape, value.utc)
|
|
70
|
+
when BlobShape then Base64.strict_encode64(value)
|
|
71
|
+
else value
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
module Aws
|
|
2
|
+
module Json
|
|
3
|
+
class ErrorParser
|
|
4
|
+
|
|
5
|
+
def extract_error(response)
|
|
6
|
+
json = MultiJson.load(response.http_response.body_contents)
|
|
7
|
+
error_code = json['code'] || json['__type']
|
|
8
|
+
error_code ||= response.http_response.headers['x-amzn-errortype']
|
|
9
|
+
error_code = error_code.split('#').last
|
|
10
|
+
if error_code == 'RequestEntityTooLarge'
|
|
11
|
+
error_message = 'Request body must be less than 1 MB'
|
|
12
|
+
else
|
|
13
|
+
error_message = json['message'] || json['Message']
|
|
14
|
+
end
|
|
15
|
+
[error_code, error_message]
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
require 'multi_json'
|
|
2
|
+
require 'base64'
|
|
3
|
+
|
|
4
|
+
module Aws
|
|
5
|
+
module Json
|
|
6
|
+
class Parser
|
|
7
|
+
|
|
8
|
+
include Seahorse::Model::Shapes
|
|
9
|
+
|
|
10
|
+
# @param [Seahorse::Model::Shapes::OutputShape] rules
|
|
11
|
+
# @param [String<JSON>] json
|
|
12
|
+
# @return [Hash]
|
|
13
|
+
def parse(rules, json)
|
|
14
|
+
json = '{}' if json == ''
|
|
15
|
+
structure(rules, MultiJson.load(json, max_nesting: false))
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# @param [Seahorse::Model::Shapes::OutputShape] rules
|
|
19
|
+
# @param [String<JSON>] json
|
|
20
|
+
# @return [Hash]
|
|
21
|
+
def self.parse(rules, json)
|
|
22
|
+
new.parse(rules, json)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
private
|
|
26
|
+
|
|
27
|
+
def structure(shape, values)
|
|
28
|
+
data = Structure.new(shape.members.keys)
|
|
29
|
+
values.each do |key, value|
|
|
30
|
+
if member_shape = shape.serialized_members[key]
|
|
31
|
+
data[member_shape.member_name] = member(member_shape, value)
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
data
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def list(shape, values)
|
|
38
|
+
values.map { |value| member(shape.members, value) }
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def map(shape, values)
|
|
42
|
+
data = {}
|
|
43
|
+
values.each do |key, value|
|
|
44
|
+
data[key] = member(shape.members, value)
|
|
45
|
+
end
|
|
46
|
+
data
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def member(shape, value)
|
|
50
|
+
return nil if value.nil?
|
|
51
|
+
case shape
|
|
52
|
+
when StructureShape then structure(shape, value)
|
|
53
|
+
when ListShape then list(shape, value)
|
|
54
|
+
when MapShape then map(shape, value)
|
|
55
|
+
when TimestampShape then time(value)
|
|
56
|
+
when BlobShape then Base64.decode64(value)
|
|
57
|
+
else value
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def time(value)
|
|
62
|
+
value.is_a?(Numeric) ? Time.at(value) : Time.parse(value)
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
module Aws
|
|
2
|
+
module Json
|
|
3
|
+
# @api private
|
|
4
|
+
class Serializer
|
|
5
|
+
|
|
6
|
+
def setup_request(*args); end
|
|
7
|
+
|
|
8
|
+
def serialize_params(context, rules, params)
|
|
9
|
+
json_params = Builder.new(rules).build(params)
|
|
10
|
+
context.http_request.body = MultiJson.dump(json_params)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
module Aws
|
|
2
|
+
module Plugins
|
|
3
|
+
|
|
4
|
+
# @seahorse.client.option [String] :access_key_id Your AWS account
|
|
5
|
+
# access key ID. Defaults to `ENV['AWS_ACCESS_KEY_ID']`.
|
|
6
|
+
#
|
|
7
|
+
# @seahorse.client.option [String] :secret_access_key Your AWS account
|
|
8
|
+
# secret access key. Defaults to `ENV['AWS_SECRET_ACCESS_KEY']`.
|
|
9
|
+
#
|
|
10
|
+
# @seahorse.client.option [String] :session_token If your credentials
|
|
11
|
+
# are temporary session credentials, this should be the
|
|
12
|
+
# session token. Defaults to `ENV['AWS_SESSION_TOKEN']`.
|
|
13
|
+
#
|
|
14
|
+
# @seahorse.client.option [Credentials] :credentials
|
|
15
|
+
# Your AWS account credentials. Defaults to a new {Credentials} object
|
|
16
|
+
# populated by `:access_key_id`, `:secret_access_key` and
|
|
17
|
+
# `:session_token`.
|
|
18
|
+
#
|
|
19
|
+
class Credentials < Seahorse::Client::Plugin
|
|
20
|
+
|
|
21
|
+
option(:access_key_id) {
|
|
22
|
+
ENV['AWS_ACCESS_KEY_ID'] || ENV['AMAZON_ACCESS_KEY_ID']
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
option(:secret_access_key) {
|
|
26
|
+
ENV['AWS_SECRET_ACCESS_KEY'] || ENV['AMAZON_SECRET_ACCESS_KEY']
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
option(:session_token) {
|
|
30
|
+
ENV['AWS_SESSION_TOKEN'] || ENV['AMAZON_SESSION_TOKEN']
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
option(:credentials) do |config|
|
|
34
|
+
Aws::Credentials.new(
|
|
35
|
+
config.access_key_id,
|
|
36
|
+
config.secret_access_key,
|
|
37
|
+
config.session_token)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def after_initialize(client)
|
|
41
|
+
if client.config.credentials.nil? or !client.config.credentials.set?
|
|
42
|
+
raise Errors::MissingCredentialsError
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
module Aws
|
|
2
|
+
module Plugins
|
|
3
|
+
|
|
4
|
+
# @seahorse.client.option [Integer] :retry_limit (10)
|
|
5
|
+
# The maximum number of times to retry failed requests. Only
|
|
6
|
+
# ~ 500 level server errors and certain ~ 400 level client errors
|
|
7
|
+
# are retried. Generally, these are throttling errors, data
|
|
8
|
+
# checksum errors, networking errors, timeout errors and auth
|
|
9
|
+
# errors from expired credentials.
|
|
10
|
+
class DynamoDBExtendedRetries < Seahorse::Client::Plugin
|
|
11
|
+
|
|
12
|
+
option(:retry_limit, 10)
|
|
13
|
+
|
|
14
|
+
option(:retry_backoff, lambda { |context|
|
|
15
|
+
if context.retries > 1
|
|
16
|
+
Kernel.sleep(50 * (2 ** (context.retries - 1)) / 1000.0)
|
|
17
|
+
end
|
|
18
|
+
})
|
|
19
|
+
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
module Aws
|
|
2
|
+
module Plugins
|
|
3
|
+
class GlacierApiVersion < Seahorse::Client::Plugin
|
|
4
|
+
|
|
5
|
+
class Handler < Seahorse::Client::Handler
|
|
6
|
+
|
|
7
|
+
def call(context)
|
|
8
|
+
version = context.config.api.version
|
|
9
|
+
context.http_request.headers['x-amz-glacier-version'] = version
|
|
10
|
+
@handler.call(context)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
handler(Handler)
|
|
16
|
+
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
require 'openssl'
|
|
2
|
+
|
|
3
|
+
module Aws
|
|
4
|
+
module Plugins
|
|
5
|
+
|
|
6
|
+
# Computes the `:checksum` of the HTTP request body for operations
|
|
7
|
+
# that require the `X-Amz-Sha256-Tree-Hash` header. This includes:
|
|
8
|
+
#
|
|
9
|
+
# * `:complete_multipart_upload`
|
|
10
|
+
# * `:upload_archive`
|
|
11
|
+
# * `:upload_multipart_part`
|
|
12
|
+
#
|
|
13
|
+
# The `:upload_archive` and `:upload_multipart_part` operations
|
|
14
|
+
# accept a `:checksum` request paramter. If this param
|
|
15
|
+
# is present, then the checksum is assumed to be the proper
|
|
16
|
+
# tree hash of the file to be uploaded. If this param is
|
|
17
|
+
# not present, then the required tree hash checksum will
|
|
18
|
+
# be generated.
|
|
19
|
+
#
|
|
20
|
+
# The `:complete_multipart_upload` operation does not accept
|
|
21
|
+
# a checksum and this plugin will always compute this of the
|
|
22
|
+
# HTTP request body on your behalf.
|
|
23
|
+
class GlacierChecksums < Seahorse::Client::Plugin
|
|
24
|
+
|
|
25
|
+
CHECKSUM_OPERATIONS = [
|
|
26
|
+
:complete_multipart_upload,
|
|
27
|
+
:upload_archive,
|
|
28
|
+
:upload_multipart_part,
|
|
29
|
+
]
|
|
30
|
+
|
|
31
|
+
class Handler < Seahorse::Client::Handler
|
|
32
|
+
|
|
33
|
+
HASH = 'X-Amz-Content-Sha256'
|
|
34
|
+
TREE_HASH = 'X-Amz-Sha256-Tree-Hash'
|
|
35
|
+
|
|
36
|
+
def call(context)
|
|
37
|
+
unless context.http_request.headers[TREE_HASH]
|
|
38
|
+
populate_checksum_headers(context.http_request)
|
|
39
|
+
end
|
|
40
|
+
@handler.call(context)
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
private
|
|
44
|
+
|
|
45
|
+
def populate_checksum_headers(http_req)
|
|
46
|
+
compute_checksums(http_req.body) do |hash, tree_hash|
|
|
47
|
+
http_req.headers[HASH] = hash
|
|
48
|
+
http_req.headers[TREE_HASH] = tree_hash
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
# Computes two checksums of the body. The tree hash is required
|
|
53
|
+
# by Glacier for operations where you upload a file. The other
|
|
54
|
+
# checksum is required by signature version 4. We compute both
|
|
55
|
+
# here so the sigv4 signer does not need to re-read the body.
|
|
56
|
+
def compute_checksums(body, &block)
|
|
57
|
+
|
|
58
|
+
digest = OpenSSL::Digest::Digest.new('sha256')
|
|
59
|
+
tree_digest = OpenSSL::Digest::Digest.new('sha256')
|
|
60
|
+
tree_parts = []
|
|
61
|
+
|
|
62
|
+
until body.eof?
|
|
63
|
+
|
|
64
|
+
chunk = body.read(1024 * 1024) # read 1MB
|
|
65
|
+
tree_parts << tree_digest.update(chunk).digest
|
|
66
|
+
tree_digest.reset
|
|
67
|
+
|
|
68
|
+
digest.update(chunk)
|
|
69
|
+
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
body.rewind
|
|
73
|
+
|
|
74
|
+
yield(digest.to_s, compute_tree_hash(tree_parts))
|
|
75
|
+
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def compute_tree_hash hashes
|
|
79
|
+
digest = OpenSSL::Digest::Digest.new('sha256')
|
|
80
|
+
until hashes.count == 1
|
|
81
|
+
hashes = hashes.each_slice(2).map do |h1,h2|
|
|
82
|
+
digest.reset
|
|
83
|
+
if h2
|
|
84
|
+
digest.update(h1)
|
|
85
|
+
digest.update(h2)
|
|
86
|
+
digest.digest
|
|
87
|
+
else
|
|
88
|
+
h1
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
hashes.first.bytes.map{|x| x.to_i.to_s(16).rjust(2,'0')}.join('')
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
handler(Handler, operations: CHECKSUM_OPERATIONS)
|
|
97
|
+
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
end
|