aws-sdk-euca 1.8.5
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.
- data/.yardopts +5 -0
- data/LICENSE.txt +12 -0
- data/README.rdoc +189 -0
- data/ca-bundle.crt +3895 -0
- data/lib/aws-sdk-euca.rb +79 -0
- data/lib/aws-sdk.rb +79 -0
- data/lib/aws.rb +14 -0
- data/lib/aws/api_config/AutoScaling-2011-01-01.yml +825 -0
- data/lib/aws/api_config/CloudFormation-2010-05-15.yml +322 -0
- data/lib/aws/api_config/CloudFront-2012-05-05.yml +2102 -0
- data/lib/aws/api_config/CloudSearch-2011-02-01.yml +681 -0
- data/lib/aws/api_config/CloudWatch-2010-08-01.yml +433 -0
- data/lib/aws/api_config/DataPipeline-2012-10-29.yml +422 -0
- data/lib/aws/api_config/DynamoDB-2011-12-05.yml +1160 -0
- data/lib/aws/api_config/EC2-2013-02-01.yml +4368 -0
- data/lib/aws/api_config/ELB-2012-06-01.yml +597 -0
- data/lib/aws/api_config/EMR-2009-03-31.yml +370 -0
- data/lib/aws/api_config/ElastiCache-2012-03-09.yml +777 -0
- data/lib/aws/api_config/ElastiCache-2012-11-15.yml +979 -0
- data/lib/aws/api_config/ElasticBeanstalk-2010-12-01.yml +823 -0
- data/lib/aws/api_config/ElasticTranscoder-2012-09-25.yml +1036 -0
- data/lib/aws/api_config/Glacier-2012-06-01.yml +618 -0
- data/lib/aws/api_config/IAM-2010-05-08.yml +1222 -0
- data/lib/aws/api_config/ImportExport-2010-06-01.yml +109 -0
- data/lib/aws/api_config/OpsWorks-2013-02-18.yml +1463 -0
- data/lib/aws/api_config/RDS-2012-09-17.yml +1861 -0
- data/lib/aws/api_config/RDS-2013-02-12.yml +2377 -0
- data/lib/aws/api_config/Redshift-2012-12-01.yml +1149 -0
- data/lib/aws/api_config/Route53-2012-02-29.yml +380 -0
- data/lib/aws/api_config/Route53-2012-12-12.yml +547 -0
- data/lib/aws/api_config/SNS-2010-03-31.yml +249 -0
- data/lib/aws/api_config/SQS-2012-11-05.yml +317 -0
- data/lib/aws/api_config/STS-2011-06-15.yml +81 -0
- data/lib/aws/api_config/SimpleDB-2009-04-15.yml +306 -0
- data/lib/aws/api_config/SimpleEmailService-2010-12-01.yml +346 -0
- data/lib/aws/api_config/SimpleWorkflow-2012-01-25.yml +2358 -0
- data/lib/aws/api_config/StorageGateway-2012-06-30.yml +748 -0
- data/lib/aws/auto_scaling.rb +164 -0
- data/lib/aws/auto_scaling/activity.rb +102 -0
- data/lib/aws/auto_scaling/activity_collection.rb +82 -0
- data/lib/aws/auto_scaling/client.rb +521 -0
- data/lib/aws/auto_scaling/config.rb +18 -0
- data/lib/aws/auto_scaling/errors.rb +22 -0
- data/lib/aws/auto_scaling/group.rb +420 -0
- data/lib/aws/auto_scaling/group_collection.rb +96 -0
- data/lib/aws/auto_scaling/group_options.rb +146 -0
- data/lib/aws/auto_scaling/instance.rb +192 -0
- data/lib/aws/auto_scaling/instance_collection.rb +63 -0
- data/lib/aws/auto_scaling/launch_configuration.rb +158 -0
- data/lib/aws/auto_scaling/launch_configuration_collection.rb +154 -0
- data/lib/aws/auto_scaling/notification_configuration.rb +89 -0
- data/lib/aws/auto_scaling/notification_configuration_collection.rb +184 -0
- data/lib/aws/auto_scaling/request.rb +29 -0
- data/lib/aws/auto_scaling/scaling_policy.rb +142 -0
- data/lib/aws/auto_scaling/scaling_policy_collection.rb +72 -0
- data/lib/aws/auto_scaling/scaling_policy_options.rb +64 -0
- data/lib/aws/auto_scaling/scheduled_action.rb +145 -0
- data/lib/aws/auto_scaling/scheduled_action_collection.rb +195 -0
- data/lib/aws/auto_scaling/tag.rb +59 -0
- data/lib/aws/auto_scaling/tag_collection.rb +112 -0
- data/lib/aws/cloud_formation.rb +272 -0
- data/lib/aws/cloud_formation/client.rb +369 -0
- data/lib/aws/cloud_formation/config.rb +18 -0
- data/lib/aws/cloud_formation/errors.rb +22 -0
- data/lib/aws/cloud_formation/request.rb +29 -0
- data/lib/aws/cloud_formation/stack.rb +255 -0
- data/lib/aws/cloud_formation/stack_collection.rb +209 -0
- data/lib/aws/cloud_formation/stack_event.rb +75 -0
- data/lib/aws/cloud_formation/stack_event_collection.rb +47 -0
- data/lib/aws/cloud_formation/stack_options.rb +72 -0
- data/lib/aws/cloud_formation/stack_output.rb +53 -0
- data/lib/aws/cloud_formation/stack_resource.rb +117 -0
- data/lib/aws/cloud_formation/stack_resource_collection.rb +84 -0
- data/lib/aws/cloud_formation/stack_resource_summary_collection.rb +64 -0
- data/lib/aws/cloud_formation/stack_summary_collection.rb +123 -0
- data/lib/aws/cloud_front.rb +73 -0
- data/lib/aws/cloud_front/client.rb +1307 -0
- data/lib/aws/cloud_front/config.rb +18 -0
- data/lib/aws/cloud_front/errors.rb +22 -0
- data/lib/aws/cloud_front/request.rb +44 -0
- data/lib/aws/cloud_search.rb +74 -0
- data/lib/aws/cloud_search/client.rb +558 -0
- data/lib/aws/cloud_search/config.rb +18 -0
- data/lib/aws/cloud_search/errors.rb +22 -0
- data/lib/aws/cloud_search/request.rb +23 -0
- data/lib/aws/cloud_watch.rb +119 -0
- data/lib/aws/cloud_watch/alarm.rb +272 -0
- data/lib/aws/cloud_watch/alarm_collection.rb +153 -0
- data/lib/aws/cloud_watch/alarm_history_item.rb +50 -0
- data/lib/aws/cloud_watch/alarm_history_item_collection.rb +84 -0
- data/lib/aws/cloud_watch/client.rb +247 -0
- data/lib/aws/cloud_watch/config.rb +18 -0
- data/lib/aws/cloud_watch/errors.rb +22 -0
- data/lib/aws/cloud_watch/metric.rb +135 -0
- data/lib/aws/cloud_watch/metric_alarm_collection.rb +160 -0
- data/lib/aws/cloud_watch/metric_collection.rb +131 -0
- data/lib/aws/cloud_watch/metric_statistics.rb +69 -0
- data/lib/aws/cloud_watch/request.rb +23 -0
- data/lib/aws/core.rb +587 -0
- data/lib/aws/core/async_handle.rb +90 -0
- data/lib/aws/core/autoloader.rb +64 -0
- data/lib/aws/core/cacheable.rb +78 -0
- data/lib/aws/core/client.rb +691 -0
- data/lib/aws/core/collection.rb +267 -0
- data/lib/aws/core/collection/simple.rb +82 -0
- data/lib/aws/core/collection/with_limit_and_next_token.rb +71 -0
- data/lib/aws/core/collection/with_next_token.rb +97 -0
- data/lib/aws/core/configuration.rb +546 -0
- data/lib/aws/core/credential_providers.rb +461 -0
- data/lib/aws/core/data.rb +247 -0
- data/lib/aws/core/http/curb_handler.rb +155 -0
- data/lib/aws/core/http/handler.rb +89 -0
- data/lib/aws/core/http/net_http_handler.rb +128 -0
- data/lib/aws/core/http/request.rb +263 -0
- data/lib/aws/core/http/response.rb +81 -0
- data/lib/aws/core/indifferent_hash.rb +88 -0
- data/lib/aws/core/inflection.rb +56 -0
- data/lib/aws/core/json_client.rb +47 -0
- data/lib/aws/core/json_parser.rb +76 -0
- data/lib/aws/core/json_request_builder.rb +35 -0
- data/lib/aws/core/json_response_parser.rb +79 -0
- data/lib/aws/core/lazy_error_classes.rb +90 -0
- data/lib/aws/core/log_formatter.rb +462 -0
- data/lib/aws/core/managed_file.rb +32 -0
- data/lib/aws/core/meta_utils.rb +45 -0
- data/lib/aws/core/model.rb +57 -0
- data/lib/aws/core/naming.rb +30 -0
- data/lib/aws/core/option_grammar.rb +735 -0
- data/lib/aws/core/options/json_serializer.rb +82 -0
- data/lib/aws/core/options/validator.rb +155 -0
- data/lib/aws/core/options/xml_serializer.rb +118 -0
- data/lib/aws/core/page_result.rb +75 -0
- data/lib/aws/core/policy.rb +916 -0
- data/lib/aws/core/query_client.rb +41 -0
- data/lib/aws/core/query_error_parser.rb +24 -0
- data/lib/aws/core/query_request_builder.rb +47 -0
- data/lib/aws/core/query_response_parser.rb +35 -0
- data/lib/aws/core/resource.rb +413 -0
- data/lib/aws/core/resource_cache.rb +40 -0
- data/lib/aws/core/response.rb +208 -0
- data/lib/aws/core/response_cache.rb +50 -0
- data/lib/aws/core/rest_error_parser.rb +24 -0
- data/lib/aws/core/rest_json_client.rb +40 -0
- data/lib/aws/core/rest_request_builder.rb +146 -0
- data/lib/aws/core/rest_response_parser.rb +66 -0
- data/lib/aws/core/rest_xml_client.rb +47 -0
- data/lib/aws/core/service_interface.rb +61 -0
- data/lib/aws/core/signature/version_2.rb +56 -0
- data/lib/aws/core/signature/version_3.rb +77 -0
- data/lib/aws/core/signature/version_3_https.rb +54 -0
- data/lib/aws/core/signature/version_4.rb +135 -0
- data/lib/aws/core/signer.rb +46 -0
- data/lib/aws/core/uri_escape.rb +44 -0
- data/lib/aws/core/xml/frame.rb +244 -0
- data/lib/aws/core/xml/frame_stack.rb +85 -0
- data/lib/aws/core/xml/grammar.rb +307 -0
- data/lib/aws/core/xml/parser.rb +70 -0
- data/lib/aws/core/xml/root_frame.rb +65 -0
- data/lib/aws/core/xml/sax_handlers/libxml.rb +47 -0
- data/lib/aws/core/xml/sax_handlers/nokogiri.rb +55 -0
- data/lib/aws/core/xml/sax_handlers/ox.rb +41 -0
- data/lib/aws/core/xml/sax_handlers/rexml.rb +43 -0
- data/lib/aws/core/xml/stub.rb +123 -0
- data/lib/aws/data_pipeline.rb +73 -0
- data/lib/aws/data_pipeline/client.rb +339 -0
- data/lib/aws/data_pipeline/config.rb +18 -0
- data/lib/aws/data_pipeline/errors.rb +20 -0
- data/lib/aws/data_pipeline/request.rb +26 -0
- data/lib/aws/dynamo_db.rb +206 -0
- data/lib/aws/dynamo_db/attribute_collection.rb +461 -0
- data/lib/aws/dynamo_db/batch_get.rb +213 -0
- data/lib/aws/dynamo_db/batch_write.rb +252 -0
- data/lib/aws/dynamo_db/binary.rb +35 -0
- data/lib/aws/dynamo_db/client.rb +904 -0
- data/lib/aws/dynamo_db/config.rb +24 -0
- data/lib/aws/dynamo_db/errors.rb +20 -0
- data/lib/aws/dynamo_db/expectations.rb +40 -0
- data/lib/aws/dynamo_db/item.rb +133 -0
- data/lib/aws/dynamo_db/item_collection.rb +852 -0
- data/lib/aws/dynamo_db/item_data.rb +31 -0
- data/lib/aws/dynamo_db/keys.rb +41 -0
- data/lib/aws/dynamo_db/primary_key_element.rb +48 -0
- data/lib/aws/dynamo_db/request.rb +26 -0
- data/lib/aws/dynamo_db/resource.rb +33 -0
- data/lib/aws/dynamo_db/table.rb +491 -0
- data/lib/aws/dynamo_db/table_collection.rb +165 -0
- data/lib/aws/dynamo_db/types.rb +111 -0
- data/lib/aws/ec2.rb +440 -0
- data/lib/aws/ec2/attachment.rb +140 -0
- data/lib/aws/ec2/attachment_collection.rb +54 -0
- data/lib/aws/ec2/availability_zone.rb +86 -0
- data/lib/aws/ec2/availability_zone_collection.rb +43 -0
- data/lib/aws/ec2/block_device_mappings.rb +53 -0
- data/lib/aws/ec2/client.rb +3621 -0
- data/lib/aws/ec2/collection.rb +36 -0
- data/lib/aws/ec2/config.rb +18 -0
- data/lib/aws/ec2/config_transform.rb +63 -0
- data/lib/aws/ec2/customer_gateway.rb +90 -0
- data/lib/aws/ec2/customer_gateway_collection.rb +73 -0
- data/lib/aws/ec2/dhcp_options.rb +106 -0
- data/lib/aws/ec2/dhcp_options_collection.rb +87 -0
- data/lib/aws/ec2/elastic_ip.rb +208 -0
- data/lib/aws/ec2/elastic_ip_collection.rb +97 -0
- data/lib/aws/ec2/errors.rb +32 -0
- data/lib/aws/ec2/export_task.rb +120 -0
- data/lib/aws/ec2/export_task_collection.rb +67 -0
- data/lib/aws/ec2/filtered_collection.rb +89 -0
- data/lib/aws/ec2/has_permissions.rb +44 -0
- data/lib/aws/ec2/image.rb +264 -0
- data/lib/aws/ec2/image_collection.rb +228 -0
- data/lib/aws/ec2/instance.rb +796 -0
- data/lib/aws/ec2/instance_collection.rb +372 -0
- data/lib/aws/ec2/internet_gateway.rb +122 -0
- data/lib/aws/ec2/internet_gateway/attachment.rb +78 -0
- data/lib/aws/ec2/internet_gateway_collection.rb +54 -0
- data/lib/aws/ec2/key_pair.rb +82 -0
- data/lib/aws/ec2/key_pair_collection.rb +99 -0
- data/lib/aws/ec2/network_acl.rb +256 -0
- data/lib/aws/ec2/network_acl/association.rb +56 -0
- data/lib/aws/ec2/network_acl/entry.rb +147 -0
- data/lib/aws/ec2/network_acl_collection.rb +64 -0
- data/lib/aws/ec2/network_interface.rb +228 -0
- data/lib/aws/ec2/network_interface/attachment.rb +100 -0
- data/lib/aws/ec2/network_interface_collection.rb +103 -0
- data/lib/aws/ec2/permission_collection.rb +174 -0
- data/lib/aws/ec2/region.rb +106 -0
- data/lib/aws/ec2/region_collection.rb +51 -0
- data/lib/aws/ec2/request.rb +21 -0
- data/lib/aws/ec2/reserved_instances.rb +56 -0
- data/lib/aws/ec2/reserved_instances_collection.rb +40 -0
- data/lib/aws/ec2/reserved_instances_offering.rb +60 -0
- data/lib/aws/ec2/reserved_instances_offering_collection.rb +39 -0
- data/lib/aws/ec2/resource.rb +161 -0
- data/lib/aws/ec2/resource_tag_collection.rb +211 -0
- data/lib/aws/ec2/route_table.rb +205 -0
- data/lib/aws/ec2/route_table/association.rb +119 -0
- data/lib/aws/ec2/route_table/route.rb +119 -0
- data/lib/aws/ec2/route_table_collection.rb +72 -0
- data/lib/aws/ec2/security_group.rb +484 -0
- data/lib/aws/ec2/security_group/ip_permission.rb +135 -0
- data/lib/aws/ec2/security_group/ip_permission_collection.rb +82 -0
- data/lib/aws/ec2/security_group_collection.rb +135 -0
- data/lib/aws/ec2/snapshot.rb +143 -0
- data/lib/aws/ec2/snapshot_collection.rb +132 -0
- data/lib/aws/ec2/subnet.rb +161 -0
- data/lib/aws/ec2/subnet_collection.rb +115 -0
- data/lib/aws/ec2/tag.rb +81 -0
- data/lib/aws/ec2/tag_collection.rb +107 -0
- data/lib/aws/ec2/tagged_collection.rb +53 -0
- data/lib/aws/ec2/tagged_item.rb +85 -0
- data/lib/aws/ec2/volume.rb +174 -0
- data/lib/aws/ec2/volume_collection.rb +101 -0
- data/lib/aws/ec2/vpc.rb +166 -0
- data/lib/aws/ec2/vpc_collection.rb +70 -0
- data/lib/aws/ec2/vpn_connection.rb +99 -0
- data/lib/aws/ec2/vpn_connection/telemetry.rb +49 -0
- data/lib/aws/ec2/vpn_connection_collection.rb +96 -0
- data/lib/aws/ec2/vpn_gateway.rb +123 -0
- data/lib/aws/ec2/vpn_gateway/attachment.rb +45 -0
- data/lib/aws/ec2/vpn_gateway_collection.rb +77 -0
- data/lib/aws/elastic_beanstalk.rb +50 -0
- data/lib/aws/elastic_beanstalk/client.rb +867 -0
- data/lib/aws/elastic_beanstalk/config.rb +18 -0
- data/lib/aws/elastic_beanstalk/errors.rb +22 -0
- data/lib/aws/elastic_beanstalk/request.rb +29 -0
- data/lib/aws/elastic_transcoder.rb +30 -0
- data/lib/aws/elastic_transcoder/client.rb +672 -0
- data/lib/aws/elastic_transcoder/config.rb +18 -0
- data/lib/aws/elastic_transcoder/errors.rb +23 -0
- data/lib/aws/elastic_transcoder/request.rb +30 -0
- data/lib/aws/elasticache.rb +50 -0
- data/lib/aws/elasticache/client.rb +920 -0
- data/lib/aws/elasticache/config.rb +18 -0
- data/lib/aws/elasticache/errors.rb +22 -0
- data/lib/aws/elasticache/request.rb +23 -0
- data/lib/aws/elb.rb +67 -0
- data/lib/aws/elb/availability_zone_collection.rb +138 -0
- data/lib/aws/elb/backend_server_policy_collection.rb +139 -0
- data/lib/aws/elb/client.rb +500 -0
- data/lib/aws/elb/config.rb +18 -0
- data/lib/aws/elb/errors.rb +26 -0
- data/lib/aws/elb/instance_collection.rb +173 -0
- data/lib/aws/elb/listener.rb +190 -0
- data/lib/aws/elb/listener_collection.rb +113 -0
- data/lib/aws/elb/listener_opts.rb +45 -0
- data/lib/aws/elb/load_balancer.rb +281 -0
- data/lib/aws/elb/load_balancer_collection.rb +134 -0
- data/lib/aws/elb/load_balancer_policy.rb +93 -0
- data/lib/aws/elb/load_balancer_policy_collection.rb +208 -0
- data/lib/aws/elb/request.rb +29 -0
- data/lib/aws/emr.rb +86 -0
- data/lib/aws/emr/client.rb +330 -0
- data/lib/aws/emr/config.rb +18 -0
- data/lib/aws/emr/errors.rb +22 -0
- data/lib/aws/emr/instance_group.rb +138 -0
- data/lib/aws/emr/instance_group_collection.rb +82 -0
- data/lib/aws/emr/job_flow.rb +306 -0
- data/lib/aws/emr/job_flow_collection.rb +185 -0
- data/lib/aws/emr/request.rb +23 -0
- data/lib/aws/errors.rb +162 -0
- data/lib/aws/glacier.rb +80 -0
- data/lib/aws/glacier/archive.rb +56 -0
- data/lib/aws/glacier/archive_collection.rb +146 -0
- data/lib/aws/glacier/client.rb +286 -0
- data/lib/aws/glacier/config.rb +19 -0
- data/lib/aws/glacier/errors.rb +22 -0
- data/lib/aws/glacier/request.rb +34 -0
- data/lib/aws/glacier/resource.rb +30 -0
- data/lib/aws/glacier/vault.rb +145 -0
- data/lib/aws/glacier/vault_collection.rb +75 -0
- data/lib/aws/glacier/vault_notification_configuration.rb +29 -0
- data/lib/aws/iam.rb +420 -0
- data/lib/aws/iam/access_key.rb +180 -0
- data/lib/aws/iam/access_key_collection.rb +128 -0
- data/lib/aws/iam/account_alias_collection.rb +79 -0
- data/lib/aws/iam/client.rb +1092 -0
- data/lib/aws/iam/collection.rb +83 -0
- data/lib/aws/iam/config.rb +18 -0
- data/lib/aws/iam/errors.rb +22 -0
- data/lib/aws/iam/group.rb +111 -0
- data/lib/aws/iam/group_collection.rb +132 -0
- data/lib/aws/iam/group_policy_collection.rb +47 -0
- data/lib/aws/iam/group_user_collection.rb +84 -0
- data/lib/aws/iam/login_profile.rb +99 -0
- data/lib/aws/iam/mfa_device.rb +52 -0
- data/lib/aws/iam/mfa_device_collection.rb +127 -0
- data/lib/aws/iam/policy.rb +46 -0
- data/lib/aws/iam/policy_collection.rb +188 -0
- data/lib/aws/iam/request.rb +29 -0
- data/lib/aws/iam/resource.rb +62 -0
- data/lib/aws/iam/server_certificate.rb +141 -0
- data/lib/aws/iam/server_certificate_collection.rb +138 -0
- data/lib/aws/iam/signing_certificate.rb +169 -0
- data/lib/aws/iam/signing_certificate_collection.rb +131 -0
- data/lib/aws/iam/user.rb +205 -0
- data/lib/aws/iam/user_collection.rb +133 -0
- data/lib/aws/iam/user_group_collection.rb +98 -0
- data/lib/aws/iam/user_policy.rb +90 -0
- data/lib/aws/iam/user_policy_collection.rb +45 -0
- data/lib/aws/iam/virtual_mfa_device.rb +139 -0
- data/lib/aws/iam/virtual_mfa_device_collection.rb +73 -0
- data/lib/aws/import_export.rb +73 -0
- data/lib/aws/import_export/client.rb +109 -0
- data/lib/aws/import_export/config.rb +19 -0
- data/lib/aws/import_export/errors.rb +22 -0
- data/lib/aws/import_export/request.rb +23 -0
- data/lib/aws/ops_works.rb +30 -0
- data/lib/aws/ops_works/client.rb +713 -0
- data/lib/aws/ops_works/config.rb +18 -0
- data/lib/aws/ops_works/errors.rb +20 -0
- data/lib/aws/ops_works/request.rb +27 -0
- data/lib/aws/rails.rb +195 -0
- data/lib/aws/rds.rb +71 -0
- data/lib/aws/rds/client.rb +2228 -0
- data/lib/aws/rds/config.rb +18 -0
- data/lib/aws/rds/db_instance.rb +205 -0
- data/lib/aws/rds/db_instance_collection.rb +75 -0
- data/lib/aws/rds/db_snapshot.rb +163 -0
- data/lib/aws/rds/db_snapshot_collection.rb +89 -0
- data/lib/aws/rds/errors.rb +22 -0
- data/lib/aws/rds/request.rb +23 -0
- data/lib/aws/record.rb +116 -0
- data/lib/aws/record/abstract_base.rb +701 -0
- data/lib/aws/record/attributes.rb +384 -0
- data/lib/aws/record/conversion.rb +38 -0
- data/lib/aws/record/dirty_tracking.rb +285 -0
- data/lib/aws/record/errors.rb +143 -0
- data/lib/aws/record/exceptions.rb +48 -0
- data/lib/aws/record/hash_model.rb +161 -0
- data/lib/aws/record/hash_model/attributes.rb +197 -0
- data/lib/aws/record/hash_model/finder_methods.rb +172 -0
- data/lib/aws/record/hash_model/scope.rb +108 -0
- data/lib/aws/record/model.rb +427 -0
- data/lib/aws/record/model/attributes.rb +379 -0
- data/lib/aws/record/model/finder_methods.rb +232 -0
- data/lib/aws/record/model/scope.rb +213 -0
- data/lib/aws/record/naming.rb +31 -0
- data/lib/aws/record/scope.rb +199 -0
- data/lib/aws/record/validations.rb +712 -0
- data/lib/aws/record/validator.rb +246 -0
- data/lib/aws/record/validators/acceptance.rb +51 -0
- data/lib/aws/record/validators/block.rb +38 -0
- data/lib/aws/record/validators/confirmation.rb +43 -0
- data/lib/aws/record/validators/count.rb +108 -0
- data/lib/aws/record/validators/exclusion.rb +43 -0
- data/lib/aws/record/validators/format.rb +57 -0
- data/lib/aws/record/validators/inclusion.rb +56 -0
- data/lib/aws/record/validators/length.rb +107 -0
- data/lib/aws/record/validators/method.rb +33 -0
- data/lib/aws/record/validators/numericality.rb +138 -0
- data/lib/aws/record/validators/presence.rb +45 -0
- data/lib/aws/redshift.rb +52 -0
- data/lib/aws/redshift/client.rb +1291 -0
- data/lib/aws/redshift/config.rb +18 -0
- data/lib/aws/redshift/errors.rb +22 -0
- data/lib/aws/redshift/request.rb +29 -0
- data/lib/aws/route_53.rb +87 -0
- data/lib/aws/route_53/change_batch.rb +159 -0
- data/lib/aws/route_53/change_info.rb +72 -0
- data/lib/aws/route_53/client.rb +387 -0
- data/lib/aws/route_53/config.rb +18 -0
- data/lib/aws/route_53/errors.rb +22 -0
- data/lib/aws/route_53/hosted_zone.rb +111 -0
- data/lib/aws/route_53/hosted_zone_collection.rb +100 -0
- data/lib/aws/route_53/request.rb +23 -0
- data/lib/aws/route_53/resource_record_set.rb +237 -0
- data/lib/aws/route_53/resource_record_set_collection.rb +110 -0
- data/lib/aws/s3.rb +155 -0
- data/lib/aws/s3/access_control_list.rb +257 -0
- data/lib/aws/s3/acl_object.rb +264 -0
- data/lib/aws/s3/acl_options.rb +204 -0
- data/lib/aws/s3/bucket.rb +742 -0
- data/lib/aws/s3/bucket_collection.rb +160 -0
- data/lib/aws/s3/bucket_lifecycle_configuration.rb +458 -0
- data/lib/aws/s3/bucket_tag_collection.rb +109 -0
- data/lib/aws/s3/bucket_version_collection.rb +77 -0
- data/lib/aws/s3/cipher_io.rb +119 -0
- data/lib/aws/s3/client.rb +1700 -0
- data/lib/aws/s3/client/xml.rb +231 -0
- data/lib/aws/s3/config.rb +36 -0
- data/lib/aws/s3/cors_rule.rb +106 -0
- data/lib/aws/s3/cors_rule_collection.rb +192 -0
- data/lib/aws/s3/data_options.rb +185 -0
- data/lib/aws/s3/encryption_utils.rb +139 -0
- data/lib/aws/s3/errors.rb +94 -0
- data/lib/aws/s3/multipart_upload.rb +320 -0
- data/lib/aws/s3/multipart_upload_collection.rb +68 -0
- data/lib/aws/s3/object_collection.rb +355 -0
- data/lib/aws/s3/object_metadata.rb +96 -0
- data/lib/aws/s3/object_upload_collection.rb +77 -0
- data/lib/aws/s3/object_version.rb +148 -0
- data/lib/aws/s3/object_version_collection.rb +89 -0
- data/lib/aws/s3/paginated_collection.rb +75 -0
- data/lib/aws/s3/policy.rb +74 -0
- data/lib/aws/s3/prefix_and_delimiter_collection.rb +47 -0
- data/lib/aws/s3/prefixed_collection.rb +81 -0
- data/lib/aws/s3/presigned_post.rb +555 -0
- data/lib/aws/s3/request.rb +201 -0
- data/lib/aws/s3/s3_object.rb +1690 -0
- data/lib/aws/s3/tree.rb +118 -0
- data/lib/aws/s3/tree/branch_node.rb +68 -0
- data/lib/aws/s3/tree/child_collection.rb +104 -0
- data/lib/aws/s3/tree/leaf_node.rb +94 -0
- data/lib/aws/s3/tree/node.rb +22 -0
- data/lib/aws/s3/tree/parent.rb +87 -0
- data/lib/aws/s3/uploaded_part.rb +80 -0
- data/lib/aws/s3/uploaded_part_collection.rb +84 -0
- data/lib/aws/s3/website_configuration.rb +102 -0
- data/lib/aws/simple_db.rb +219 -0
- data/lib/aws/simple_db/attribute.rb +154 -0
- data/lib/aws/simple_db/attribute_collection.rb +231 -0
- data/lib/aws/simple_db/client.rb +287 -0
- data/lib/aws/simple_db/config.rb +20 -0
- data/lib/aws/simple_db/consistent_read_option.rb +42 -0
- data/lib/aws/simple_db/delete_attributes.rb +62 -0
- data/lib/aws/simple_db/domain.rb +121 -0
- data/lib/aws/simple_db/domain_collection.rb +86 -0
- data/lib/aws/simple_db/domain_metadata.rb +110 -0
- data/lib/aws/simple_db/errors.rb +55 -0
- data/lib/aws/simple_db/expect_condition_option.rb +45 -0
- data/lib/aws/simple_db/item.rb +93 -0
- data/lib/aws/simple_db/item_collection.rb +649 -0
- data/lib/aws/simple_db/item_data.rb +73 -0
- data/lib/aws/simple_db/put_attributes.rb +60 -0
- data/lib/aws/simple_db/request.rb +23 -0
- data/lib/aws/simple_email_service.rb +428 -0
- data/lib/aws/simple_email_service/client.rb +276 -0
- data/lib/aws/simple_email_service/config.rb +19 -0
- data/lib/aws/simple_email_service/email_address_collection.rb +69 -0
- data/lib/aws/simple_email_service/errors.rb +22 -0
- data/lib/aws/simple_email_service/identity.rb +209 -0
- data/lib/aws/simple_email_service/identity_collection.rb +81 -0
- data/lib/aws/simple_email_service/quotas.rb +64 -0
- data/lib/aws/simple_email_service/request.rb +27 -0
- data/lib/aws/simple_workflow.rb +228 -0
- data/lib/aws/simple_workflow/activity_task.rb +173 -0
- data/lib/aws/simple_workflow/activity_task_collection.rb +123 -0
- data/lib/aws/simple_workflow/activity_type.rb +131 -0
- data/lib/aws/simple_workflow/activity_type_collection.rb +93 -0
- data/lib/aws/simple_workflow/client.rb +1204 -0
- data/lib/aws/simple_workflow/config.rb +18 -0
- data/lib/aws/simple_workflow/count.rb +49 -0
- data/lib/aws/simple_workflow/decision_task.rb +603 -0
- data/lib/aws/simple_workflow/decision_task_collection.rb +225 -0
- data/lib/aws/simple_workflow/domain.rb +122 -0
- data/lib/aws/simple_workflow/domain_collection.rb +169 -0
- data/lib/aws/simple_workflow/errors.rb +20 -0
- data/lib/aws/simple_workflow/history_event.rb +276 -0
- data/lib/aws/simple_workflow/history_event_collection.rb +76 -0
- data/lib/aws/simple_workflow/option_formatters.rb +82 -0
- data/lib/aws/simple_workflow/request.rb +33 -0
- data/lib/aws/simple_workflow/resource.rb +94 -0
- data/lib/aws/simple_workflow/type.rb +89 -0
- data/lib/aws/simple_workflow/type_collection.rb +140 -0
- data/lib/aws/simple_workflow/workflow_execution.rb +386 -0
- data/lib/aws/simple_workflow/workflow_execution_collection.rb +617 -0
- data/lib/aws/simple_workflow/workflow_type.rb +177 -0
- data/lib/aws/simple_workflow/workflow_type_collection.rb +91 -0
- data/lib/aws/sns.rb +76 -0
- data/lib/aws/sns/client.rb +266 -0
- data/lib/aws/sns/config.rb +18 -0
- data/lib/aws/sns/errors.rb +22 -0
- data/lib/aws/sns/has_delivery_policy.rb +68 -0
- data/lib/aws/sns/policy.rb +47 -0
- data/lib/aws/sns/request.rb +23 -0
- data/lib/aws/sns/subscription.rb +144 -0
- data/lib/aws/sns/subscription_collection.rb +78 -0
- data/lib/aws/sns/topic.rb +403 -0
- data/lib/aws/sns/topic_collection.rb +62 -0
- data/lib/aws/sns/topic_subscription_collection.rb +54 -0
- data/lib/aws/sqs.rb +81 -0
- data/lib/aws/sqs/client.rb +258 -0
- data/lib/aws/sqs/config.rb +18 -0
- data/lib/aws/sqs/errors.rb +101 -0
- data/lib/aws/sqs/policy.rb +48 -0
- data/lib/aws/sqs/queue.rb +764 -0
- data/lib/aws/sqs/queue_collection.rb +174 -0
- data/lib/aws/sqs/received_message.rb +181 -0
- data/lib/aws/sqs/received_sns_message.rb +116 -0
- data/lib/aws/sqs/request.rb +67 -0
- data/lib/aws/storage_gateway.rb +73 -0
- data/lib/aws/storage_gateway/client.rb +472 -0
- data/lib/aws/storage_gateway/config.rb +18 -0
- data/lib/aws/storage_gateway/errors.rb +22 -0
- data/lib/aws/storage_gateway/request.rb +28 -0
- data/lib/aws/sts.rb +163 -0
- data/lib/aws/sts/client.rb +157 -0
- data/lib/aws/sts/config.rb +18 -0
- data/lib/aws/sts/errors.rb +22 -0
- data/lib/aws/sts/federated_session.rb +56 -0
- data/lib/aws/sts/policy.rb +30 -0
- data/lib/aws/sts/request.rb +29 -0
- data/lib/aws/sts/session.rb +48 -0
- data/lib/aws/version.rb +18 -0
- data/lib/net/http/connection_pool.rb +226 -0
- data/lib/net/http/connection_pool/connection.rb +189 -0
- data/lib/net/http/connection_pool/session.rb +126 -0
- data/rails/init.rb +15 -0
- metadata +632 -0
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# Copyright 2011-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License"). You
|
|
4
|
+
# may not use this file except in compliance with the License. A copy of
|
|
5
|
+
# the License is located at
|
|
6
|
+
#
|
|
7
|
+
# http://aws.amazon.com/apache2.0/
|
|
8
|
+
#
|
|
9
|
+
# or in the "license" file accompanying this file. This file is
|
|
10
|
+
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
|
|
11
|
+
# ANY KIND, either express or implied. See the License for the specific
|
|
12
|
+
# language governing permissions and limitations under the License.
|
|
13
|
+
|
|
14
|
+
module AWS
|
|
15
|
+
class S3
|
|
16
|
+
|
|
17
|
+
# @private
|
|
18
|
+
module PrefixAndDelimiterCollection
|
|
19
|
+
|
|
20
|
+
include PrefixedCollection
|
|
21
|
+
|
|
22
|
+
# @see Bucket#as_tree
|
|
23
|
+
def as_tree options = {}
|
|
24
|
+
Tree.new(self, { :prefix => prefix }.merge(options))
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
# @private
|
|
28
|
+
protected
|
|
29
|
+
def each_member_in_page(page, &block)
|
|
30
|
+
super
|
|
31
|
+
page.common_prefixes.each do |p|
|
|
32
|
+
yield(with_prefix(p[:prefix]))
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
# @private
|
|
37
|
+
protected
|
|
38
|
+
def list_options(options)
|
|
39
|
+
opts = super
|
|
40
|
+
opts[:delimiter] = options[:delimiter] if options.key?(:delimiter)
|
|
41
|
+
opts
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
end
|
|
47
|
+
end
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
# Copyright 2011-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License"). You
|
|
4
|
+
# may not use this file except in compliance with the License. A copy of
|
|
5
|
+
# the License is located at
|
|
6
|
+
#
|
|
7
|
+
# http://aws.amazon.com/apache2.0/
|
|
8
|
+
#
|
|
9
|
+
# or in the "license" file accompanying this file. This file is
|
|
10
|
+
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
|
|
11
|
+
# ANY KIND, either express or implied. See the License for the specific
|
|
12
|
+
# language governing permissions and limitations under the License.
|
|
13
|
+
|
|
14
|
+
module AWS
|
|
15
|
+
class S3
|
|
16
|
+
|
|
17
|
+
module PrefixedCollection
|
|
18
|
+
|
|
19
|
+
include PaginatedCollection
|
|
20
|
+
|
|
21
|
+
# @private
|
|
22
|
+
def initialize *args
|
|
23
|
+
options = args.last.is_a?(Hash) ? args.pop : {}
|
|
24
|
+
@prefix = options[:prefix]
|
|
25
|
+
args.push(options)
|
|
26
|
+
super(*args)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# @return [String,nil] The prefix of this collection.
|
|
30
|
+
attr_reader :prefix
|
|
31
|
+
|
|
32
|
+
# Returns a new collection with a different prefix
|
|
33
|
+
#
|
|
34
|
+
# @example
|
|
35
|
+
# objects = collection.with_prefix('photos')
|
|
36
|
+
# objects.prefix #=> 'photos'
|
|
37
|
+
#
|
|
38
|
+
# @example Chaining with_prefix replaces previous prefix
|
|
39
|
+
# objects = collection.with_prefix('photos').with_prefix('videos')
|
|
40
|
+
# objects.prefix #=> 'videos'
|
|
41
|
+
#
|
|
42
|
+
# @example Chaining with_prefix with :append
|
|
43
|
+
# objects = collection.with_prefix('a/').with_prefix('b/', :append)
|
|
44
|
+
# objects.prefix #=> 'a/b/'
|
|
45
|
+
#
|
|
46
|
+
# @example Chaining with_prefix with :prepend
|
|
47
|
+
# objects = collection.with_prefix('a/').with_prefix('b/', :prepend)
|
|
48
|
+
# objects.prefix #=> 'b/a/'
|
|
49
|
+
#
|
|
50
|
+
# @param [String] prefix The prefix condition that limits what objects
|
|
51
|
+
# are returned by this collection.
|
|
52
|
+
# @param [Symbol] mode (:replace) If you chain calls to #with_prefix
|
|
53
|
+
# the +mode+ affects if the prefix prepends, appends, or replaces.
|
|
54
|
+
# Valid modes are:
|
|
55
|
+
# * +:replace+
|
|
56
|
+
# * +:append+
|
|
57
|
+
# * +:prepend+
|
|
58
|
+
# @return [Collection] Returns a new collection with a modified prefix.
|
|
59
|
+
def with_prefix prefix, mode = :replace
|
|
60
|
+
new_prefix = case mode
|
|
61
|
+
when :replace then prefix
|
|
62
|
+
when :append then "#{@prefix}#{prefix}"
|
|
63
|
+
when :prepend then "#{prefix}#{@prefix}"
|
|
64
|
+
else
|
|
65
|
+
raise ArgumentError, "invalid prefix mode `#{mode}`, it must be " +
|
|
66
|
+
":replace, :append or :prepend"
|
|
67
|
+
end
|
|
68
|
+
self.class.new(bucket, :prefix => new_prefix)
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
# @private
|
|
72
|
+
protected
|
|
73
|
+
def list_options(options)
|
|
74
|
+
opts = super
|
|
75
|
+
opts[:prefix] = prefix if prefix
|
|
76
|
+
opts
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
end
|
|
@@ -0,0 +1,555 @@
|
|
|
1
|
+
# Copyright 2011-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License"). You
|
|
4
|
+
# may not use this file except in compliance with the License. A copy of
|
|
5
|
+
# the License is located at
|
|
6
|
+
#
|
|
7
|
+
# http://aws.amazon.com/apache2.0/
|
|
8
|
+
#
|
|
9
|
+
# or in the "license" file accompanying this file. This file is
|
|
10
|
+
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
|
|
11
|
+
# ANY KIND, either express or implied. See the License for the specific
|
|
12
|
+
# language governing permissions and limitations under the License.
|
|
13
|
+
|
|
14
|
+
require 'uri'
|
|
15
|
+
require 'time'
|
|
16
|
+
|
|
17
|
+
module AWS
|
|
18
|
+
class S3
|
|
19
|
+
|
|
20
|
+
# Helper to generate form fields for presigned POST requests to
|
|
21
|
+
# a bucket. You can use this to create a form that can be used
|
|
22
|
+
# from a web browser to upload objects to S3 while specifying
|
|
23
|
+
# conditions on what can be uploaded and how it is processed and
|
|
24
|
+
# stored.
|
|
25
|
+
#
|
|
26
|
+
# @example Form fields for uploading by file name
|
|
27
|
+
#
|
|
28
|
+
# form = bucket.presigned_post(:key => "photos/${filename}")
|
|
29
|
+
# form.url.to_s # => "https://mybucket.s3.amazonaws.com/"
|
|
30
|
+
# form.fields # => { "AWSAccessKeyId" => "...", ... }
|
|
31
|
+
#
|
|
32
|
+
# @example Generating a minimal HTML form
|
|
33
|
+
#
|
|
34
|
+
# form = bucket.objects.myobj.presigned_post
|
|
35
|
+
# hidden_inputs = form.fields.map do |(name, value)|
|
|
36
|
+
# %(<input type="hidden" name="#{name}" value="#{value}" />)
|
|
37
|
+
# end
|
|
38
|
+
# <<-END
|
|
39
|
+
# <form action="#{form.url}" method="post" enctype="multipart/form-data">
|
|
40
|
+
# #{hidden_inputs}
|
|
41
|
+
# <input type="file" name="file" />
|
|
42
|
+
# </form>
|
|
43
|
+
# END
|
|
44
|
+
#
|
|
45
|
+
# @example Restricting the size of the uploaded object
|
|
46
|
+
# bucket.presigned_post(:content_length => 1..(10*1024))
|
|
47
|
+
#
|
|
48
|
+
# @example Restricting the key prefix
|
|
49
|
+
# bucket.presigned_post.where(:key).starts_with("photos/")
|
|
50
|
+
#
|
|
51
|
+
class PresignedPost
|
|
52
|
+
|
|
53
|
+
include Core::Model
|
|
54
|
+
|
|
55
|
+
# @return [Bucket] The bucket to which data can be uploaded
|
|
56
|
+
# using the form fields
|
|
57
|
+
attr_reader :bucket
|
|
58
|
+
|
|
59
|
+
# @return [String] The key of the object that will be
|
|
60
|
+
# uploaded. If this is nil, then the object can be uploaded
|
|
61
|
+
# with any key that satisfies the conditions specified for
|
|
62
|
+
# the upload (see {#where}).
|
|
63
|
+
attr_reader :key
|
|
64
|
+
|
|
65
|
+
# @return [Hash] A hash of the metadata fields included in the
|
|
66
|
+
# signed fields. Additional metadata fields may be provided
|
|
67
|
+
# with the upload as long as they satisfy the conditions
|
|
68
|
+
# specified for the upload (see {#where}).
|
|
69
|
+
attr_reader :metadata
|
|
70
|
+
|
|
71
|
+
# @return [Range] The range of acceptable object sizes for the
|
|
72
|
+
# upload. By default any size object may be uploaded.
|
|
73
|
+
attr_reader :content_length
|
|
74
|
+
|
|
75
|
+
# @private
|
|
76
|
+
SPECIAL_FIELDS = [:cache_control,
|
|
77
|
+
:content_type,
|
|
78
|
+
:content_disposition,
|
|
79
|
+
:content_encoding,
|
|
80
|
+
:expires_header,
|
|
81
|
+
:acl,
|
|
82
|
+
:server_side_encryption,
|
|
83
|
+
:success_action_redirect,
|
|
84
|
+
:success_action_status,
|
|
85
|
+
:filename]
|
|
86
|
+
|
|
87
|
+
# @private
|
|
88
|
+
attr_reader :conditions
|
|
89
|
+
|
|
90
|
+
# @return [Array<String>] Additional fields which may be sent
|
|
91
|
+
# with the upload. These will be included in the policy so
|
|
92
|
+
# that they can be sent with any value. S3 will ignore
|
|
93
|
+
# them.
|
|
94
|
+
attr_reader :ignored_fields
|
|
95
|
+
|
|
96
|
+
# @return The expiration time for the signature. By default
|
|
97
|
+
# the signature will expire an hour after it is generated.
|
|
98
|
+
attr_reader :expires
|
|
99
|
+
|
|
100
|
+
# Creates a new presigned post object.
|
|
101
|
+
#
|
|
102
|
+
# @param [Bucket] bucket The bucket to which data can be uploaded
|
|
103
|
+
# using the form fields.
|
|
104
|
+
#
|
|
105
|
+
# @param [Hash] opts Additional options for the upload. Aside
|
|
106
|
+
# from +:secure+, +:expires+, +:content_length+ and +:ignore+
|
|
107
|
+
# the values provided here will be stored in the hash returned
|
|
108
|
+
# from the {#fields} method, and the policy in that hash will
|
|
109
|
+
# restrict their values to the values provided. If you
|
|
110
|
+
# instead want to only restrict the values and not provide
|
|
111
|
+
# them -- for example, if your application generates separate
|
|
112
|
+
# form fields for those values -- you should use the {#where}
|
|
113
|
+
# method on the returned object instead of providing the
|
|
114
|
+
# values here.
|
|
115
|
+
#
|
|
116
|
+
# @option opts [String] :key The key of the object that will
|
|
117
|
+
# be uploaded. If this is nil, then the object can be
|
|
118
|
+
# uploaded with any key that satisfies the conditions
|
|
119
|
+
# specified for the upload (see {#where}).
|
|
120
|
+
#
|
|
121
|
+
# @option opts [Boolean] :secure By setting this to false, you
|
|
122
|
+
# can cause {#url} to return an HTTP URL. By default it
|
|
123
|
+
# returns an HTTPS URL.
|
|
124
|
+
#
|
|
125
|
+
# @option opts [Time, DateTime, Integer, String] :expires The
|
|
126
|
+
# time at which the signature will expire. By default the
|
|
127
|
+
# signature will expire one hour after it is generated
|
|
128
|
+
# (e.g. when {#fields} is called).
|
|
129
|
+
#
|
|
130
|
+
# When the value is a Time or DateTime, the signature
|
|
131
|
+
# expires at the specified time. When it is an integer, the
|
|
132
|
+
# signature expires the specified number of seconds after it
|
|
133
|
+
# is generated. When it is a string, the string is parsed
|
|
134
|
+
# as a time (using Time.parse) and the signature expires at
|
|
135
|
+
# that time.
|
|
136
|
+
#
|
|
137
|
+
# @option opts [String] :cache_control Sets the Cache-Control
|
|
138
|
+
# header stored with the object.
|
|
139
|
+
#
|
|
140
|
+
# @option opts [String] :content_type Sets the Content-Type
|
|
141
|
+
# header stored with the object.
|
|
142
|
+
#
|
|
143
|
+
# @option opts [String] :content_disposition Sets the
|
|
144
|
+
# Content-Disposition header stored with the object.
|
|
145
|
+
#
|
|
146
|
+
# @option opts [String] :expires_header Sets the Expires
|
|
147
|
+
# header stored with the object.
|
|
148
|
+
#
|
|
149
|
+
# @option options [Symbol] :acl A canned access control
|
|
150
|
+
# policy. Valid values are:
|
|
151
|
+
# * +:private+
|
|
152
|
+
# * +:public_read+
|
|
153
|
+
# * +:public_read_write+
|
|
154
|
+
# * +:authenticated_read+
|
|
155
|
+
# * +:bucket_owner_read+
|
|
156
|
+
# * +:bucket_owner_full_control+
|
|
157
|
+
#
|
|
158
|
+
# @option options [Symbol] :server_side_encryption (nil) If this
|
|
159
|
+
# option is set, the object will be stored using server side
|
|
160
|
+
# encryption. The only valid value is +:aes256+, which
|
|
161
|
+
# specifies that the object should be stored using the AES
|
|
162
|
+
# encryption algorithm with 256 bit keys. By default, this
|
|
163
|
+
# option uses the value of the +:s3_server_side_encryption+
|
|
164
|
+
# option in the current configuration; for more information,
|
|
165
|
+
# see {AWS.config}.
|
|
166
|
+
#
|
|
167
|
+
# @option opts [String] :success_action_redirect The URL to
|
|
168
|
+
# which the client is redirected upon successful upload.
|
|
169
|
+
#
|
|
170
|
+
# @option opts [Integer] :success_action_status The status
|
|
171
|
+
# code returned to the client upon successful upload if
|
|
172
|
+
# +:success_action_redirect+ is not specified. Accepts the
|
|
173
|
+
# values 200, 201, or 204 (default).
|
|
174
|
+
#
|
|
175
|
+
# If the value is set to 200 or 204, Amazon S3 returns an
|
|
176
|
+
# empty document with a 200 or 204 status code.
|
|
177
|
+
#
|
|
178
|
+
# If the value is set to 201, Amazon S3 returns an XML
|
|
179
|
+
# document with a 201 status code. For information on the
|
|
180
|
+
# content of the XML document, see
|
|
181
|
+
# {POST Object}[http://docs.amazonwebservices.com/AmazonS3/2006-03-01/API/index.html?RESTObjectPOST.html].
|
|
182
|
+
#
|
|
183
|
+
# @option opts [Hash] :metadata A hash of the metadata fields
|
|
184
|
+
# included in the signed fields. Additional metadata fields
|
|
185
|
+
# may be provided with the upload as long as they satisfy
|
|
186
|
+
# the conditions specified for the upload (see {#where}).
|
|
187
|
+
#
|
|
188
|
+
# @option opts [Integer, Range] :content_length The range of
|
|
189
|
+
# acceptable object sizes for the upload. By default any
|
|
190
|
+
# size object may be uploaded.
|
|
191
|
+
#
|
|
192
|
+
# @option opts [Array<String>] :ignore Additional fields which
|
|
193
|
+
# may be sent with the upload. These will be included in
|
|
194
|
+
# the policy so that they can be sent with any value. S3
|
|
195
|
+
# will ignore them.
|
|
196
|
+
def initialize(bucket, opts = {})
|
|
197
|
+
@bucket = bucket
|
|
198
|
+
@key = opts[:key]
|
|
199
|
+
@secure = (opts[:secure] != false)
|
|
200
|
+
@fields = {}
|
|
201
|
+
SPECIAL_FIELDS.each do |name|
|
|
202
|
+
@fields[name] = opts[name] if opts.key?(name)
|
|
203
|
+
end
|
|
204
|
+
@metadata = opts[:metadata] || {}
|
|
205
|
+
@content_length = range_value(opts[:content_length])
|
|
206
|
+
@conditions = opts[:conditions] || {}
|
|
207
|
+
@ignored_fields = [opts[:ignore]].flatten.compact
|
|
208
|
+
@expires = opts[:expires]
|
|
209
|
+
|
|
210
|
+
super
|
|
211
|
+
|
|
212
|
+
@fields[:server_side_encryption] =
|
|
213
|
+
config.s3_server_side_encryption unless
|
|
214
|
+
@fields.key?(:server_side_encryption)
|
|
215
|
+
@fields.delete(:server_side_encryption) if
|
|
216
|
+
@fields[:server_side_encryption].nil?
|
|
217
|
+
end
|
|
218
|
+
|
|
219
|
+
# @return [Boolean] True if {#url} generates an HTTPS url.
|
|
220
|
+
def secure?
|
|
221
|
+
@secure
|
|
222
|
+
end
|
|
223
|
+
|
|
224
|
+
# @return [URI::HTTP, URI::HTTPS] The URL to which the form
|
|
225
|
+
# fields should be POSTed. If you are using the fields in
|
|
226
|
+
# an HTML form, this is the URL to put in the +action+
|
|
227
|
+
# attribute of the form tag.
|
|
228
|
+
def url
|
|
229
|
+
req = Request.new
|
|
230
|
+
req.bucket = bucket.name
|
|
231
|
+
req.host = config.s3_endpoint
|
|
232
|
+
build_uri(req)
|
|
233
|
+
end
|
|
234
|
+
|
|
235
|
+
# Lets you specify conditions on a field. See
|
|
236
|
+
# {PresignedPost#where} for usage examples.
|
|
237
|
+
class ConditionBuilder
|
|
238
|
+
|
|
239
|
+
# @private
|
|
240
|
+
def initialize(post, field)
|
|
241
|
+
@post = post
|
|
242
|
+
@field = field
|
|
243
|
+
end
|
|
244
|
+
|
|
245
|
+
# Specifies that the value of the field must equal the
|
|
246
|
+
# provided value.
|
|
247
|
+
def is(value)
|
|
248
|
+
if @field == :content_length
|
|
249
|
+
self.in(value)
|
|
250
|
+
else
|
|
251
|
+
@post.with_equality_condition(@field, value)
|
|
252
|
+
end
|
|
253
|
+
end
|
|
254
|
+
|
|
255
|
+
# Specifies that the value of the field must begin with the
|
|
256
|
+
# provided value. If you are specifying a condition on the
|
|
257
|
+
# "key" field, note that this check takes place after the
|
|
258
|
+
# +${filename}+ variable is expanded. This is only valid
|
|
259
|
+
# for the following fields:
|
|
260
|
+
#
|
|
261
|
+
# * +:key+
|
|
262
|
+
# * +:cache_control+
|
|
263
|
+
# * +:content_type+
|
|
264
|
+
# * +:content_disposition+
|
|
265
|
+
# * +:content_encoding+
|
|
266
|
+
# * +:expires_header+
|
|
267
|
+
# * +:acl+
|
|
268
|
+
# * +:success_action_redirect+
|
|
269
|
+
# * metadata fields (see {#where_metadata})
|
|
270
|
+
def starts_with(prefix)
|
|
271
|
+
@post.with_prefix_condition(@field, prefix)
|
|
272
|
+
end
|
|
273
|
+
|
|
274
|
+
# Specifies that the value of the field must be in the given
|
|
275
|
+
# range. This may only be used to constrain the
|
|
276
|
+
# +:content_length+ field,
|
|
277
|
+
# e.g. <tt>presigned_post.with(:conent_length).in(1..4)</tt>.
|
|
278
|
+
def in(range)
|
|
279
|
+
@post.refine(:content_length => range)
|
|
280
|
+
end
|
|
281
|
+
|
|
282
|
+
end
|
|
283
|
+
|
|
284
|
+
# Adds a condition to the policy for the POST. Use
|
|
285
|
+
# {#where_metadata} to add metadata conditions.
|
|
286
|
+
#
|
|
287
|
+
# @example Restricting the ACL to "bucket-owner" ACLs
|
|
288
|
+
# presigned_post.where(:acl).starts_with("bucket-owner")
|
|
289
|
+
#
|
|
290
|
+
# @param [Symbol] field The field for which a condition should
|
|
291
|
+
# be added. Valid values:
|
|
292
|
+
#
|
|
293
|
+
# * +:key+
|
|
294
|
+
# * +:content_length+
|
|
295
|
+
# * +:cache_control+
|
|
296
|
+
# * +:content_type+
|
|
297
|
+
# * +:content_disposition+
|
|
298
|
+
# * +:content_encoding+
|
|
299
|
+
# * +:expires_header+
|
|
300
|
+
# * +:acl+
|
|
301
|
+
# * +:success_action_redirect+
|
|
302
|
+
# * +:success_action_status+
|
|
303
|
+
#
|
|
304
|
+
# @return [ConditionBuilder] An object that allows you to
|
|
305
|
+
# specify a condition on the field.
|
|
306
|
+
def where(field)
|
|
307
|
+
raise ArgumentError.new("unrecognized field name #{field}") unless
|
|
308
|
+
[:key, :content_length, *SPECIAL_FIELDS].include?(field) or
|
|
309
|
+
field =~ /^x-amz-meta-/
|
|
310
|
+
ConditionBuilder.new(self, field)
|
|
311
|
+
end
|
|
312
|
+
|
|
313
|
+
# Adds a condition to the policy for the POST to constrain the
|
|
314
|
+
# values of metadata fields uploaded with the object. If a
|
|
315
|
+
# metadata field does not have a condition associated with it
|
|
316
|
+
# and is not specified in the constructor (see {#metadata})
|
|
317
|
+
# then S3 will reject it.
|
|
318
|
+
#
|
|
319
|
+
# @param [Symbol, String] field The name of the metadata
|
|
320
|
+
# attribute. For example, +:color+ corresponds to the
|
|
321
|
+
# "x-amz-meta-color" field in the POST body.
|
|
322
|
+
#
|
|
323
|
+
# @return [ConditionBuilder] An object that allows you to
|
|
324
|
+
# specify a condition on the metadata attribute.
|
|
325
|
+
def where_metadata(field)
|
|
326
|
+
where("x-amz-meta-#{field}")
|
|
327
|
+
end
|
|
328
|
+
|
|
329
|
+
# @return [String] The Base64-encoded JSON policy document.
|
|
330
|
+
def policy
|
|
331
|
+
json = {
|
|
332
|
+
"expiration" => format_expiration,
|
|
333
|
+
"conditions" => generate_conditions
|
|
334
|
+
}.to_json
|
|
335
|
+
Base64.encode64(json).tr("\n","")
|
|
336
|
+
end
|
|
337
|
+
|
|
338
|
+
# @return [Hash] A collection of form fields (including a
|
|
339
|
+
# signature and a policy) that can be used to POST data to
|
|
340
|
+
# S3. Additional form fields may be added after the fact as
|
|
341
|
+
# long as they are described by a policy condition (see
|
|
342
|
+
# {#where}).
|
|
343
|
+
def fields
|
|
344
|
+
|
|
345
|
+
secret = config.credential_provider.secret_access_key
|
|
346
|
+
signature = Core::Signer.sign(secret, policy, 'sha1')
|
|
347
|
+
|
|
348
|
+
fields = {
|
|
349
|
+
"AWSAccessKeyId" => config.credential_provider.access_key_id,
|
|
350
|
+
"key" => key,
|
|
351
|
+
"policy" => policy,
|
|
352
|
+
"signature" => signature
|
|
353
|
+
}.merge(optional_fields)
|
|
354
|
+
|
|
355
|
+
if token = config.credential_provider.session_token
|
|
356
|
+
fields["x-amz-security-token"] = token
|
|
357
|
+
end
|
|
358
|
+
|
|
359
|
+
fields.merge(optional_fields)
|
|
360
|
+
|
|
361
|
+
end
|
|
362
|
+
|
|
363
|
+
# @private
|
|
364
|
+
def with_equality_condition(option_name, value)
|
|
365
|
+
field_name = field_name(option_name)
|
|
366
|
+
with_condition(option_name, Hash[[[field_name, value]]])
|
|
367
|
+
end
|
|
368
|
+
|
|
369
|
+
# @private
|
|
370
|
+
def with_prefix_condition(option_name, prefix)
|
|
371
|
+
field_name = field_name(option_name)
|
|
372
|
+
with_condition(option_name,
|
|
373
|
+
["starts-with", "$#{field_name}", prefix])
|
|
374
|
+
end
|
|
375
|
+
|
|
376
|
+
# @private
|
|
377
|
+
def refine(opts)
|
|
378
|
+
self.class.new(bucket, {
|
|
379
|
+
:conditions => conditions,
|
|
380
|
+
:key => key,
|
|
381
|
+
:metadata => metadata,
|
|
382
|
+
:secure => secure?,
|
|
383
|
+
:content_length => content_length,
|
|
384
|
+
:expires => expires,
|
|
385
|
+
:ignore => ignored_fields
|
|
386
|
+
}.merge(@fields).
|
|
387
|
+
merge(opts))
|
|
388
|
+
end
|
|
389
|
+
|
|
390
|
+
# @private
|
|
391
|
+
private
|
|
392
|
+
def with_condition(field, condition)
|
|
393
|
+
conditions = self.conditions.dup
|
|
394
|
+
(conditions[field] ||= []) << condition
|
|
395
|
+
refine(:conditions => conditions)
|
|
396
|
+
end
|
|
397
|
+
|
|
398
|
+
# @private
|
|
399
|
+
private
|
|
400
|
+
def format_expiration
|
|
401
|
+
time = expires || Time.now.utc + 60*60
|
|
402
|
+
time =
|
|
403
|
+
case time
|
|
404
|
+
when Time
|
|
405
|
+
time
|
|
406
|
+
when DateTime
|
|
407
|
+
Time.parse(time.to_s)
|
|
408
|
+
when Integer
|
|
409
|
+
(Time.now + time)
|
|
410
|
+
when String
|
|
411
|
+
Time.parse(time)
|
|
412
|
+
end
|
|
413
|
+
time.utc.iso8601
|
|
414
|
+
end
|
|
415
|
+
|
|
416
|
+
# @private
|
|
417
|
+
private
|
|
418
|
+
def range_value(range)
|
|
419
|
+
case range
|
|
420
|
+
when Integer
|
|
421
|
+
range..range
|
|
422
|
+
when Range
|
|
423
|
+
range
|
|
424
|
+
end
|
|
425
|
+
end
|
|
426
|
+
|
|
427
|
+
# @private
|
|
428
|
+
private
|
|
429
|
+
def split_range(range)
|
|
430
|
+
range = range_value(range)
|
|
431
|
+
[range.begin,
|
|
432
|
+
(range.exclude_end? ?
|
|
433
|
+
range.end-1 :
|
|
434
|
+
range.end)]
|
|
435
|
+
end
|
|
436
|
+
|
|
437
|
+
# @private
|
|
438
|
+
private
|
|
439
|
+
def optional_fields
|
|
440
|
+
fields = (SPECIAL_FIELDS &
|
|
441
|
+
@fields.keys).inject({}) do |fields, option_name|
|
|
442
|
+
fields[field_name(option_name)] =
|
|
443
|
+
field_value(option_name)
|
|
444
|
+
fields
|
|
445
|
+
end
|
|
446
|
+
|
|
447
|
+
@metadata.each do |key, value|
|
|
448
|
+
fields["x-amz-meta-#{key}"] = value.to_s
|
|
449
|
+
end
|
|
450
|
+
|
|
451
|
+
fields
|
|
452
|
+
end
|
|
453
|
+
|
|
454
|
+
# @private
|
|
455
|
+
private
|
|
456
|
+
def field_name(option_name)
|
|
457
|
+
case option_name
|
|
458
|
+
when :expires_header
|
|
459
|
+
"Expires"
|
|
460
|
+
when :server_side_encryption
|
|
461
|
+
"x-amz-server-side-encryption"
|
|
462
|
+
when :acl, :success_action_redirect, :success_action_status
|
|
463
|
+
option_name.to_s
|
|
464
|
+
else
|
|
465
|
+
# e.g. Cache-Control from cache_control
|
|
466
|
+
field_name = option_name.to_s.tr("_", "-").
|
|
467
|
+
gsub(/-(.)/) { |m| m.upcase }
|
|
468
|
+
field_name[0,1] = field_name[0,1].upcase
|
|
469
|
+
field_name
|
|
470
|
+
end
|
|
471
|
+
end
|
|
472
|
+
|
|
473
|
+
# @private
|
|
474
|
+
private
|
|
475
|
+
def field_value(option_name)
|
|
476
|
+
case option_name
|
|
477
|
+
when :acl
|
|
478
|
+
@fields[:acl].to_s.tr("_", "-")
|
|
479
|
+
when :server_side_encryption
|
|
480
|
+
value = @fields[:server_side_encryption]
|
|
481
|
+
if value.kind_of?(Symbol)
|
|
482
|
+
value.to_s.upcase
|
|
483
|
+
else
|
|
484
|
+
value.to_s
|
|
485
|
+
end
|
|
486
|
+
else
|
|
487
|
+
@fields[option_name].to_s
|
|
488
|
+
end
|
|
489
|
+
end
|
|
490
|
+
|
|
491
|
+
# @private
|
|
492
|
+
private
|
|
493
|
+
def generate_conditions
|
|
494
|
+
|
|
495
|
+
conditions = self.conditions.inject([]) do |list, (field, field_conds)|
|
|
496
|
+
list + field_conds
|
|
497
|
+
end
|
|
498
|
+
|
|
499
|
+
conditions << { "bucket" => bucket.name }
|
|
500
|
+
conditions += key_conditions
|
|
501
|
+
conditions += optional_fields.map { |(n, v)| Hash[[[n, v]]] }
|
|
502
|
+
conditions += range_conditions
|
|
503
|
+
conditions += ignored_conditions
|
|
504
|
+
|
|
505
|
+
if token = config.credential_provider.session_token
|
|
506
|
+
conditions << { "x-amz-security-token" => token }
|
|
507
|
+
end
|
|
508
|
+
|
|
509
|
+
conditions
|
|
510
|
+
|
|
511
|
+
end
|
|
512
|
+
|
|
513
|
+
# @private
|
|
514
|
+
private
|
|
515
|
+
def ignored_conditions
|
|
516
|
+
ignored_fields.map do |field|
|
|
517
|
+
["starts-with", "$#{field}", ""]
|
|
518
|
+
end
|
|
519
|
+
end
|
|
520
|
+
|
|
521
|
+
# @private
|
|
522
|
+
private
|
|
523
|
+
def range_conditions
|
|
524
|
+
if content_length
|
|
525
|
+
[["content-length-range", *split_range(content_length)]]
|
|
526
|
+
else
|
|
527
|
+
[]
|
|
528
|
+
end
|
|
529
|
+
end
|
|
530
|
+
|
|
531
|
+
# @private
|
|
532
|
+
private
|
|
533
|
+
def key_conditions
|
|
534
|
+
[if key && key.include?("${filename}")
|
|
535
|
+
["starts-with", "$key", key[/^(.*)\$\{filename\}/, 1]]
|
|
536
|
+
elsif key
|
|
537
|
+
{ "key" => key }
|
|
538
|
+
else
|
|
539
|
+
["starts-with", "$key", ""]
|
|
540
|
+
end]
|
|
541
|
+
end
|
|
542
|
+
|
|
543
|
+
# @private
|
|
544
|
+
private
|
|
545
|
+
def build_uri(request)
|
|
546
|
+
uri_class = secure? ? URI::HTTPS : URI::HTTP
|
|
547
|
+
uri_class.build(:host => request.host,
|
|
548
|
+
:path => request.path,
|
|
549
|
+
:query => request.querystring)
|
|
550
|
+
end
|
|
551
|
+
|
|
552
|
+
end
|
|
553
|
+
|
|
554
|
+
end
|
|
555
|
+
end
|