Class: Fog::Storage::InternetArchive::Real
- Inherits:
-
Object
- Object
- Fog::Storage::InternetArchive::Real
- Includes:
- GetObjectHttpUrl, GetObjectHttpsUrl, GetObjectUrl, PutObjectUrl, Utils
- Defined in:
- lib/fog/internet_archive/storage.rb,
lib/fog/internet_archive/requests/storage/get_bucket.rb,
lib/fog/internet_archive/requests/storage/get_object.rb,
lib/fog/internet_archive/requests/storage/list_parts.rb,
lib/fog/internet_archive/requests/storage/put_bucket.rb,
lib/fog/internet_archive/requests/storage/put_object.rb,
lib/fog/internet_archive/requests/storage/sync_clock.rb,
lib/fog/internet_archive/requests/storage/copy_object.rb,
lib/fog/internet_archive/requests/storage/get_service.rb,
lib/fog/internet_archive/requests/storage/head_object.rb,
lib/fog/internet_archive/requests/storage/upload_part.rb,
lib/fog/internet_archive/requests/storage/delete_bucket.rb,
lib/fog/internet_archive/requests/storage/delete_object.rb,
lib/fog/internet_archive/requests/storage/get_bucket_acl.rb,
lib/fog/internet_archive/requests/storage/get_object_acl.rb,
lib/fog/internet_archive/requests/storage/get_object_url.rb,
lib/fog/internet_archive/requests/storage/put_bucket_acl.rb,
lib/fog/internet_archive/requests/storage/put_object_acl.rb,
lib/fog/internet_archive/requests/storage/put_object_url.rb,
lib/fog/internet_archive/requests/storage/get_bucket_cors.rb,
lib/fog/internet_archive/requests/storage/put_bucket_cors.rb,
lib/fog/internet_archive/requests/storage/get_bucket_policy.rb,
lib/fog/internet_archive/requests/storage/put_bucket_policy.rb,
lib/fog/internet_archive/requests/storage/delete_bucket_cors.rb,
lib/fog/internet_archive/requests/storage/get_bucket_logging.rb,
lib/fog/internet_archive/requests/storage/get_bucket_website.rb,
lib/fog/internet_archive/requests/storage/get_object_torrent.rb,
lib/fog/internet_archive/requests/storage/put_bucket_logging.rb,
lib/fog/internet_archive/requests/storage/put_bucket_website.rb,
lib/fog/internet_archive/requests/storage/get_bucket_location.rb,
lib/fog/internet_archive/requests/storage/get_object_http_url.rb,
lib/fog/internet_archive/requests/storage/get_request_payment.rb,
lib/fog/internet_archive/requests/storage/put_request_payment.rb,
lib/fog/internet_archive/requests/storage/delete_bucket_policy.rb,
lib/fog/internet_archive/requests/storage/get_bucket_lifecycle.rb,
lib/fog/internet_archive/requests/storage/get_object_https_url.rb,
lib/fog/internet_archive/requests/storage/put_bucket_lifecycle.rb,
lib/fog/internet_archive/requests/storage/delete_bucket_website.rb,
lib/fog/internet_archive/requests/storage/get_bucket_versioning.rb,
lib/fog/internet_archive/requests/storage/put_bucket_versioning.rb,
lib/fog/internet_archive/requests/storage/abort_multipart_upload.rb,
lib/fog/internet_archive/requests/storage/list_multipart_uploads.rb,
lib/fog/internet_archive/requests/storage/delete_bucket_lifecycle.rb,
lib/fog/internet_archive/requests/storage/delete_multiple_objects.rb,
lib/fog/internet_archive/requests/storage/complete_multipart_upload.rb,
lib/fog/internet_archive/requests/storage/initiate_multipart_upload.rb,
lib/fog/internet_archive/requests/storage/post_object_hidden_fields.rb,
lib/fog/internet_archive/requests/storage/get_bucket_object_versions.rb
Instance Attribute Summary
Attributes included from Utils
Instance Method Summary collapse
-
#abort_multipart_upload(bucket_name, object_name, upload_id) ⇒ Object
Abort a multipart upload.
-
#complete_multipart_upload(bucket_name, object_name, upload_id, parts) ⇒ Excon::Response
Complete a multipart upload.
-
#copy_object(source_bucket_name, source_object_name, target_bucket_name, target_object_name, options = {}) ⇒ Excon::Response
Copy an object from one S3 bucket to another.
-
#delete_bucket(bucket_name) ⇒ Excon::Response
Delete an S3 bucket.
-
#delete_bucket_cors(bucket_name) ⇒ Excon::Response
Deletes the cors configuration information set for the bucket.
-
#delete_bucket_lifecycle(bucket_name) ⇒ Excon::Response
Delete lifecycle configuration for a bucket.
-
#delete_bucket_policy(bucket_name) ⇒ Excon::Response
Delete policy for a bucket.
-
#delete_bucket_website(bucket_name) ⇒ Excon::Response
Delete website configuration for a bucket.
-
#delete_multiple_objects(bucket_name, object_names, options = {}) ⇒ Excon::Response
Delete multiple objects from S3.
-
#delete_object(bucket_name, object_name, options = {}) ⇒ Excon::Response
Delete an object from S3.
-
#get_bucket(bucket_name, options = {}) ⇒ Excon::Response
List information about objects in an S3 bucket.
-
#get_bucket_acl(bucket_name) ⇒ Excon::Response
Get access control list for an S3 bucket.
-
#get_bucket_cors(bucket_name) ⇒ Excon::Response
Gets the CORS configuration for an S3 bucket.
-
#get_bucket_lifecycle(bucket_name) ⇒ Excon::Response
Get bucket lifecycle configuration.
-
#get_bucket_location(bucket_name) ⇒ Excon::Response
Get location constraint for an S3 bucket.
-
#get_bucket_logging(bucket_name) ⇒ Excon::Response
Get logging status for an S3 bucket.
-
#get_bucket_object_versions(bucket_name, options = {}) ⇒ Excon::Response
List information about object versions in an S3 bucket.
-
#get_bucket_policy(bucket_name) ⇒ Excon::Response
Get bucket policy for an S3 bucket.
-
#get_bucket_versioning(bucket_name) ⇒ Excon::Response
Get versioning status for an S3 bucket.
-
#get_bucket_website(bucket_name) ⇒ Excon::Response
Get website configuration for an S3 bucket.
-
#get_object(bucket_name, object_name, options = {}, &block) ⇒ Excon::Response
Get an object from S3.
-
#get_object_acl(bucket_name, object_name, options = {}) ⇒ Excon::Response
Get access control list for an S3 object.
-
#get_object_torrent(bucket_name, object_name) ⇒ Excon::Response
Get torrent for an S3 object.
-
#get_request_payment(bucket_name) ⇒ Excon::Response
Get configured payer for an S3 bucket.
-
#get_service ⇒ Excon::Response
List information about S3 buckets for authorized user.
-
#head_object(bucket_name, object_name, options = {}) ⇒ Excon::Response
Get headers for an object from S3.
-
#initialize(options = {}) ⇒ Real
constructor
include Fog::InternetArchive::CredentialFetcher::ConnectionMethods Initialize connection to S3.
-
#initiate_multipart_upload(bucket_name, object_name, options = {}) ⇒ Excon::Response
Initiate a multipart upload to an S3 bucket.
-
#list_multipart_uploads(bucket_name, options = {}) ⇒ Excon::Response
List multipart uploads for a bucket.
-
#list_parts(bucket_name, object_name, upload_id, options = {}) ⇒ Excon::Response
List parts for a multipart upload.
-
#post_object_hidden_fields(options = {}) ⇒ Object
Get a hash of hidden fields for form uploading to S3, in the form => :field_value Form should look like: <form action=“http://#bucket_name.s3.#InternetArchive::DOMAIN_NAME/” method=“post” enctype=“multipart/form-data”> These hidden fields should then appear, followed by a field named ‘file’ which is either a textarea or file input.
-
#put_bucket(bucket_name, options = {}) ⇒ Excon::Response
Create an S3 bucket.
-
#put_bucket_acl(bucket_name, acl) ⇒ Object
Change access control list for an S3 bucket.
-
#put_bucket_cors(bucket_name, cors) ⇒ Object
Sets the cors configuration for your bucket.
-
#put_bucket_lifecycle(bucket_name, lifecycle) ⇒ Object
Change lifecycle configuration for an S3 bucket.
-
#put_bucket_logging(bucket_name, logging_status) ⇒ Object
Change logging status for an S3 bucket.
-
#put_bucket_policy(bucket_name, policy) ⇒ Object
Change bucket policy for an S3 bucket.
-
#put_bucket_versioning(bucket_name, status) ⇒ Object
Change versioning status for an S3 bucket.
-
#put_bucket_website(bucket_name, suffix, options = {}) ⇒ Object
Change website configuration for an S3 bucket.
-
#put_object(bucket_name, object_name, data, options = {}) ⇒ Excon::Response
Create an object in an S3 bucket.
-
#put_object_acl(bucket_name, object_name, acl, options = {}) ⇒ Object
Change access control list for an S3 object.
-
#put_request_payment(bucket_name, payer) ⇒ Object
Change who pays for requests to an S3 bucket.
- #reload ⇒ Object
- #signature(params) ⇒ Object
-
#sync_clock ⇒ Object
Sync clock against S3 to avoid skew errors.
-
#upload_part(bucket_name, object_name, upload_id, part_number, data, options = {}) ⇒ Excon::Response
Upload a part for a multipart upload.
Methods included from GetObjectHttpsUrl
Methods included from GetObjectHttpUrl
Methods included from PutObjectUrl
Methods included from GetObjectUrl
Methods included from Utils
Constructor Details
#initialize(options = {}) ⇒ Real
include Fog::InternetArchive::CredentialFetcher::ConnectionMethods Initialize connection to S3
Notes
options parameter must include values for :ia_access_key_id and :ia_secret_access_key in order to create a connection
Examples
s3 = Fog::Storage.new(
:provider => "InternetArchive",
:ia_access_key_id => your_ia_access_key_id,
:ia_secret_access_key => your_ia_secret_access_key
)
Parameters
-
options<~Hash> - config arguments for connection. Defaults to {}.
Returns
-
S3 object with connection to aws.
256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 |
# File 'lib/fog/internet_archive/storage.rb', line 256 def initialize(={}) require 'fog/core/parser' require 'mime/types' setup_credentials() @connection_options = [:connection_options] || {} if @endpoint = [:endpoint] endpoint = URI.parse(@endpoint) @host = endpoint.host @path = if endpoint.path.empty? '/' else endpoint.path end @port = endpoint.port @scheme = endpoint.scheme else [:region] ||= 'us-east-1' @region = [:region] @host = [:host] || case [:region] when 'us-east-1' "s3.#{Fog::InternetArchive::DOMAIN_NAME}" else "s3-#{[:region]}.#{Fog::InternetArchive::DOMAIN_NAME}" end @path = [:path] || '/' @persistent = .fetch(:persistent, false) @port = [:port] || 80 @scheme = [:scheme] || 'http' end @connection = Fog::Connection.new("#{@scheme}://#{@host}:#{@port}#{@path}", @persistent, @connection_options) end |
Instance Method Details
#abort_multipart_upload(bucket_name, object_name, upload_id) ⇒ Object
Abort a multipart upload
14 15 16 17 18 19 20 21 22 23 |
# File 'lib/fog/internet_archive/requests/storage/abort_multipart_upload.rb', line 14 def abort_multipart_upload(bucket_name, object_name, upload_id) request({ :expects => 204, :headers => {}, :host => "#{bucket_name}.#{@host}", :method => 'DELETE', :path => CGI.escape(object_name), :query => {'uploadId' => upload_id} }) end |
#complete_multipart_upload(bucket_name, object_name, upload_id, parts) ⇒ Excon::Response
Complete a multipart upload
24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
# File 'lib/fog/internet_archive/requests/storage/complete_multipart_upload.rb', line 24 def complete_multipart_upload(bucket_name, object_name, upload_id, parts) data = "<CompleteMultipartUpload>" parts.each_with_index do |part, index| data << "<Part>" data << "<PartNumber>#{index + 1}</PartNumber>" data << "<ETag>#{part}</ETag>" data << "</Part>" end data << "</CompleteMultipartUpload>" request({ :body => data, :expects => 200, :headers => { 'Content-Length' => data.length }, :host => "#{bucket_name}.#{@host}", :method => 'POST', :parser => Fog::Parsers::Storage::InternetArchive::CompleteMultipartUpload.new, :path => CGI.escape(object_name), :query => {'uploadId' => upload_id} }) end |
#copy_object(source_bucket_name, source_object_name, target_bucket_name, target_object_name, options = {}) ⇒ Excon::Response
Copy an object from one S3 bucket to another
31 32 33 34 35 36 37 38 39 40 41 |
# File 'lib/fog/internet_archive/requests/storage/copy_object.rb', line 31 def copy_object(source_bucket_name, source_object_name, target_bucket_name, target_object_name, = {}) headers = { 'x-amz-copy-source' => "/#{source_bucket_name}/#{CGI.escape(source_object_name)}" }.merge!() request({ :expects => 200, :headers => headers, :host => "#{target_bucket_name}.#{@host}", :method => 'PUT', :parser => Fog::Parsers::Storage::InternetArchive::CopyObject.new, :path => CGI.escape(target_object_name) }) end |
#delete_bucket(bucket_name) ⇒ Excon::Response
Delete an S3 bucket
15 16 17 18 19 20 21 22 |
# File 'lib/fog/internet_archive/requests/storage/delete_bucket.rb', line 15 def delete_bucket(bucket_name) request({ :expects => 204, :headers => {}, :host => "#{bucket_name}.#{@host}", :method => 'DELETE' }) end |
#delete_bucket_cors(bucket_name) ⇒ Excon::Response
Deletes the cors configuration information set for the bucket.
15 16 17 18 19 20 21 22 23 |
# File 'lib/fog/internet_archive/requests/storage/delete_bucket_cors.rb', line 15 def delete_bucket_cors(bucket_name) request({ :expects => 204, :headers => {}, :host => "#{bucket_name}.#{@host}", :method => 'DELETE', :query => {'cors' => nil} }) end |
#delete_bucket_lifecycle(bucket_name) ⇒ Excon::Response
Delete lifecycle configuration for a bucket
15 16 17 18 19 20 21 22 23 |
# File 'lib/fog/internet_archive/requests/storage/delete_bucket_lifecycle.rb', line 15 def delete_bucket_lifecycle(bucket_name) request({ :expects => 204, :headers => {}, :host => "#{bucket_name}.#{@host}", :method => 'DELETE', :query => {'lifecycle' => nil} }) end |
#delete_bucket_policy(bucket_name) ⇒ Excon::Response
Delete policy for a bucket
15 16 17 18 19 20 21 22 23 |
# File 'lib/fog/internet_archive/requests/storage/delete_bucket_policy.rb', line 15 def delete_bucket_policy(bucket_name) request({ :expects => 204, :headers => {}, :host => "#{bucket_name}.#{@host}", :method => 'DELETE', :query => {'policy' => nil} }) end |
#delete_bucket_website(bucket_name) ⇒ Excon::Response
Delete website configuration for a bucket
15 16 17 18 19 20 21 22 23 |
# File 'lib/fog/internet_archive/requests/storage/delete_bucket_website.rb', line 15 def delete_bucket_website(bucket_name) request({ :expects => 204, :headers => {}, :host => "#{bucket_name}.#{@host}", :method => 'DELETE', :query => {'website' => nil} }) end |
#delete_multiple_objects(bucket_name, object_names, options = {}) ⇒ Excon::Response
For versioned deletes, options should include a version_ids hash, which maps from filename to an array of versions. The semantics are that for each (object_name, version) tuple, the caller must insert the object_name and an associated version (if desired), so for n versions, the object must be inserted n times.
Delete multiple objects from S3
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
# File 'lib/fog/internet_archive/requests/storage/delete_multiple_objects.rb', line 34 def delete_multiple_objects(bucket_name, object_names, = {}) data = "<Delete>" data << "<Quiet>true</Quiet>" if .delete(:quiet) version_ids = .delete('versionId') object_names.each do |object_name| data << "<Object>" data << "<Key>#{CGI.escapeHTML(object_name)}</Key>" object_version = version_ids.nil? ? nil : version_ids[object_name] if object_version data << "<VersionId>#{CGI.escapeHTML(object_version)}</VersionId>" end data << "</Object>" end data << "</Delete>" headers = headers['Content-Length'] = data.length headers['Content-MD5'] = Base64.encode64(Digest::MD5.digest(data)). gsub("\n", '') request({ :body => data, :expects => 200, :headers => headers, :host => "#{bucket_name}.#{@host}", :method => 'POST', :parser => Fog::Parsers::Storage::InternetArchive::DeleteMultipleObjects.new, :query => {'delete' => nil} }) end |
#delete_object(bucket_name, object_name, options = {}) ⇒ Excon::Response
Delete an object from S3
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
# File 'lib/fog/internet_archive/requests/storage/delete_object.rb', line 16 def delete_object(bucket_name, object_name, = {}) if version_id = .delete('versionId') path = "#{CGI.escape(object_name)}?versionId=#{CGI.escape(version_id)}" else path = CGI.escape(object_name) end headers = request({ :expects => 204, :headers => headers, :host => "#{bucket_name}.#{@host}", :idempotent => true, :method => 'DELETE', :path => path }) end |
#get_bucket(bucket_name, options = {}) ⇒ Excon::Response
List information about objects in an S3 bucket
40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/fog/internet_archive/requests/storage/get_bucket.rb', line 40 def get_bucket(bucket_name, = {}) unless bucket_name raise ArgumentError.new('bucket_name is required') end request({ :expects => 200, :headers => {}, :host => "#{bucket_name}.#{@host}", :idempotent => true, :method => 'GET', :parser => Fog::Parsers::Storage::InternetArchive::GetBucket.new, :query => }) end |
#get_bucket_acl(bucket_name) ⇒ Excon::Response
Get access control list for an S3 bucket
29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
# File 'lib/fog/internet_archive/requests/storage/get_bucket_acl.rb', line 29 def get_bucket_acl(bucket_name) unless bucket_name raise ArgumentError.new('bucket_name is required') end request({ :expects => 200, :headers => {}, :host => "#{bucket_name}.#{@host}", :idempotent => true, :method => 'GET', :parser => Fog::Parsers::Storage::InternetArchive::AccessControlList.new, :query => {'acl' => nil} }) end |
#get_bucket_cors(bucket_name) ⇒ Excon::Response
Gets the CORS configuration for an S3 bucket
25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
# File 'lib/fog/internet_archive/requests/storage/get_bucket_cors.rb', line 25 def get_bucket_cors(bucket_name) unless bucket_name raise ArgumentError.new('bucket_name is required') end request({ :expects => 200, :headers => {}, :host => "#{bucket_name}.#{@host}", :idempotent => true, :method => 'GET', :parser => Fog::Parsers::Storage::InternetArchive::CorsConfiguration.new, :query => {'cors' => nil} }) end |
#get_bucket_lifecycle(bucket_name) ⇒ Excon::Response
Get bucket lifecycle configuration
22 23 24 25 26 27 28 29 30 31 32 |
# File 'lib/fog/internet_archive/requests/storage/get_bucket_lifecycle.rb', line 22 def get_bucket_lifecycle(bucket_name) request({ :expects => 200, :headers => {}, :host => "#{bucket_name}.#{@host}", :idempotent => true, :method => 'GET', :parser => Fog::Parsers::Storage::InternetArchive::GetBucketLifecycle.new, :query => {'lifecycle' => nil} }) end |
#get_bucket_location(bucket_name) ⇒ Excon::Response
Get location constraint for an S3 bucket
18 19 20 21 22 23 24 25 26 27 28 |
# File 'lib/fog/internet_archive/requests/storage/get_bucket_location.rb', line 18 def get_bucket_location(bucket_name) request({ :expects => 200, :headers => {}, :host => "#{bucket_name}.#{@host}", :idempotent => true, :method => 'GET', :parser => Fog::Parsers::Storage::InternetArchive::GetBucketLocation.new, :query => {'location' => nil} }) end |
#get_bucket_logging(bucket_name) ⇒ Excon::Response
Get logging status for an S3 bucket
29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
# File 'lib/fog/internet_archive/requests/storage/get_bucket_logging.rb', line 29 def get_bucket_logging(bucket_name) unless bucket_name raise ArgumentError.new('bucket_name is required') end request({ :expects => 200, :headers => {}, :host => "#{bucket_name}.#{@host}", :idempotent => true, :method => 'GET', :parser => Fog::Parsers::Storage::InternetArchive::GetBucketLogging.new, :query => {'logging' => nil} }) end |
#get_bucket_object_versions(bucket_name, options = {}) ⇒ Excon::Response
List information about object versions in an S3 bucket
51 52 53 54 55 56 57 58 59 60 61 62 63 |
# File 'lib/fog/internet_archive/requests/storage/get_bucket_object_versions.rb', line 51 def get_bucket_object_versions(bucket_name, = {}) unless bucket_name raise ArgumentError.new('bucket_name is required') end request({ :expects => 200, :headers => {}, :host => "#{bucket_name}.#{@host}", :idempotent => true, :method => 'GET', :parser => Fog::Parsers::Storage::InternetArchive::GetBucketObjectVersions.new, :query => {'versions' => nil}.merge!() }) end |
#get_bucket_policy(bucket_name) ⇒ Excon::Response
Get bucket policy for an S3 bucket
15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
# File 'lib/fog/internet_archive/requests/storage/get_bucket_policy.rb', line 15 def get_bucket_policy(bucket_name) unless bucket_name raise ArgumentError.new('bucket_name is required') end response = request({ :expects => 200, :headers => {}, :host => "#{bucket_name}.#{@host}", :idempotent => true, :method => 'GET', :query => {'policy' => nil} }) response.body = Fog::JSON.decode(response.body) unless response.body.nil? end |
#get_bucket_versioning(bucket_name) ⇒ Excon::Response
Get versioning status for an S3 bucket
19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
# File 'lib/fog/internet_archive/requests/storage/get_bucket_versioning.rb', line 19 def get_bucket_versioning(bucket_name) unless bucket_name raise ArgumentError.new('bucket_name is required') end request({ :expects => 200, :headers => {}, :host => "#{bucket_name}.#{@host}", :idempotent => true, :method => 'GET', :parser => Fog::Parsers::Storage::InternetArchive::GetBucketVersioning.new, :query => {'versioning' => nil} }) end |
#get_bucket_website(bucket_name) ⇒ Excon::Response
Get website configuration for an S3 bucket
22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
# File 'lib/fog/internet_archive/requests/storage/get_bucket_website.rb', line 22 def get_bucket_website(bucket_name) unless bucket_name raise ArgumentError.new('bucket_name is required') end request({ :expects => 200, :headers => {}, :host => "#{bucket_name}.#{@host}", :idempotent => true, :method => 'GET', :parser => Fog::Parsers::Storage::InternetArchive::GetBucketWebsite.new, :query => {'website' => nil} }) end |
#get_object(bucket_name, object_name, options = {}, &block) ⇒ Excon::Response
Get an object from S3
28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
# File 'lib/fog/internet_archive/requests/storage/get_object.rb', line 28 def get_object(bucket_name, object_name, = {}, &block) unless bucket_name raise ArgumentError.new('bucket_name is required') end unless object_name raise ArgumentError.new('object_name is required') end params = { :headers => {} } if version_id = .delete('versionId') params[:query] = {'versionId' => version_id} end params[:headers].merge!() if ['If-Modified-Since'] params[:headers]['If-Modified-Since'] = Fog::Time.at(['If-Modified-Since'].to_i).to_date_header end if ['If-Unmodified-Since'] params[:headers]['If-Unmodified-Since'] = Fog::Time.at(['If-Unmodified-Since'].to_i).to_date_header end if block_given? params[:response_block] = Proc.new end request(params.merge!({ :expects => [ 200, 206 ], :host => "#{bucket_name}.#{@host}", :idempotent => true, :method => 'GET', :path => CGI.escape(object_name), })) end |
#get_object_acl(bucket_name, object_name, options = {}) ⇒ Excon::Response
Get access control list for an S3 object
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/fog/internet_archive/requests/storage/get_object_acl.rb', line 32 def get_object_acl(bucket_name, object_name, = {}) unless bucket_name raise ArgumentError.new('bucket_name is required') end unless object_name raise ArgumentError.new('object_name is required') end query = {'acl' => nil} if version_id = .delete('versionId') query['versionId'] = version_id end request({ :expects => 200, :headers => {}, :host => "#{bucket_name}.#{@host}", :idempotent => true, :method => 'GET', :parser => Fog::Parsers::Storage::InternetArchive::AccessControlList.new, :path => CGI.escape(object_name), :query => query }) end |
#get_object_torrent(bucket_name, object_name) ⇒ Excon::Response
Get torrent for an S3 object
26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
# File 'lib/fog/internet_archive/requests/storage/get_object_torrent.rb', line 26 def get_object_torrent(bucket_name, object_name) unless bucket_name raise ArgumentError.new('bucket_name is required') end unless object_name raise ArgumentError.new('object_name is required') end request({ :expects => 200, :headers => {}, :host => "#{bucket_name}.#{@host}", :idempotent => true, :method => 'GET', :path => CGI.escape(object_name), :query => {'torrent' => nil} }) end |
#get_request_payment(bucket_name) ⇒ Excon::Response
Get configured payer for an S3 bucket
18 19 20 21 22 23 24 25 26 27 28 |
# File 'lib/fog/internet_archive/requests/storage/get_request_payment.rb', line 18 def get_request_payment(bucket_name) request({ :expects => 200, :headers => {}, :host => "#{bucket_name}.#{@host}", :idempotent => true, :method => 'GET', :parser => Fog::Parsers::Storage::InternetArchive::GetRequestPayment.new, :query => {'requestPayment' => nil} }) end |
#get_service ⇒ Excon::Response
List information about S3 buckets for authorized user
21 22 23 24 25 26 27 28 29 30 31 |
# File 'lib/fog/internet_archive/requests/storage/get_service.rb', line 21 def get_service request({ :expects => 200, :headers => {}, :host => @host, :idempotent => true, :method => 'GET', :parser => Fog::Parsers::Storage::InternetArchive::GetService.new, :url => @host }) end |
#head_object(bucket_name, object_name, options = {}) ⇒ Excon::Response
Get headers for an object from S3
28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
# File 'lib/fog/internet_archive/requests/storage/head_object.rb', line 28 def head_object(bucket_name, object_name, ={}) unless bucket_name raise ArgumentError.new('bucket_name is required') end unless object_name raise ArgumentError.new('object_name is required') end if version_id = .delete('versionId') query = {'versionId' => version_id} end headers = {} headers['If-Modified-Since'] = Fog::Time.at(['If-Modified-Since'].to_i).to_date_header if ['If-Modified-Since'] headers['If-Unmodified-Since'] = Fog::Time.at(['If-Unmodified-Since'].to_i).to_date_header if ['If-Modified-Since'] headers.merge!() request({ :expects => 200, :headers => headers, :host => "#{bucket_name}.#{@host}", :idempotent => true, :method => 'HEAD', :path => CGI.escape(object_name), :query => query }) end |
#initiate_multipart_upload(bucket_name, object_name, options = {}) ⇒ Excon::Response
Initiate a multipart upload to an S3 bucket
29 30 31 32 33 34 35 36 37 38 39 |
# File 'lib/fog/internet_archive/requests/storage/initiate_multipart_upload.rb', line 29 def initiate_multipart_upload(bucket_name, object_name, = {}) request({ :expects => 200, :headers => , :host => "#{bucket_name}.#{@host}", :method => 'POST', :parser => Fog::Parsers::Storage::InternetArchive::InitiateMultipartUpload.new, :path => CGI.escape(object_name), :query => {'uploads' => nil} }) end |
#list_multipart_uploads(bucket_name, options = {}) ⇒ Excon::Response
List multipart uploads for a bucket
40 41 42 43 44 45 46 47 48 49 50 |
# File 'lib/fog/internet_archive/requests/storage/list_multipart_uploads.rb', line 40 def list_multipart_uploads(bucket_name, = {}) request({ :expects => 200, :headers => {}, :host => "#{bucket_name}.#{@host}", :idempotent => true, :method => 'GET', :parser => Fog::Parsers::Storage::InternetArchive::ListMultipartUploads.new, :query => .merge!({'uploads' => nil}) }) end |
#list_parts(bucket_name, object_name, upload_id, options = {}) ⇒ Excon::Response
List parts for a multipart upload
38 39 40 41 42 43 44 45 46 47 48 49 50 |
# File 'lib/fog/internet_archive/requests/storage/list_parts.rb', line 38 def list_parts(bucket_name, object_name, upload_id, = {}) ['uploadId'] = upload_id request({ :expects => 200, :headers => {}, :host => "#{bucket_name}.#{@host}", :idempotent => true, :method => 'GET', :parser => Fog::Parsers::Storage::InternetArchive::ListParts.new, :path => CGI.escape(object_name), :query => .merge!({'uploadId' => upload_id}) }) end |
#post_object_hidden_fields(options = {}) ⇒ Object
Get a hash of hidden fields for form uploading to S3, in the form => :field_value Form should look like: <form action=“http://#bucket_name.s3.#InternetArchive::DOMAIN_NAME/” method=“post” enctype=“multipart/form-data”> These hidden fields should then appear, followed by a field named ‘file’ which is either a textarea or file input.
26 27 28 29 30 31 32 33 |
# File 'lib/fog/internet_archive/requests/storage/post_object_hidden_fields.rb', line 26 def post_object_hidden_fields( = {}) if ['policy'] ['policy'] = Base64.encode64(Fog::JSON.encode(['policy'])).gsub("\n", "") ['AWSAccessKeyId'] = @ia_access_key_id ['Signature'] = Base64.encode64(@hmac.sign(['policy'])).gsub("\n", "") end end |
#put_bucket(bucket_name, options = {}) ⇒ Excon::Response
Create an S3 bucket
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
# File 'lib/fog/internet_archive/requests/storage/put_bucket.rb', line 18 def put_bucket(bucket_name, = {}) if location_constraint = .delete('LocationConstraint') data = <<-DATA <CreateBucketConfiguration> <LocationConstraint>#{location_constraint}</LocationConstraint> </CreateBucketConfiguration> DATA else data = nil end request({ :expects => 200, :body => data, :headers => , :idempotent => true, :host => "#{bucket_name}.#{@host}", :method => 'PUT' }) end |
#put_bucket_acl(bucket_name, acl) ⇒ Object
Change access control list for an S3 bucket
-
acl [String] Permissions, must be in [‘private’, ‘public-read’, ‘public-read-write’, ‘authenticated-read’]
28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/fog/internet_archive/requests/storage/put_bucket_acl.rb', line 28 def put_bucket_acl(bucket_name, acl) data = "" headers = {} if acl.is_a?(Hash) data = Fog::Storage::InternetArchive.hash_to_acl(acl) else if !['private', 'public-read', 'public-read-write', 'authenticated-read'].include?(acl) raise Excon::Errors::BadRequest.new('invalid x-amz-acl') end headers['x-amz-acl'] = acl end headers['Content-MD5'] = Base64.encode64(Digest::MD5.digest(data)).strip headers['Content-Type'] = 'application/json' headers['Date'] = Fog::Time.now.to_date_header request({ :body => data, :expects => 200, :headers => headers, :host => "#{bucket_name}.#{@host}", :method => 'PUT', :query => {'acl' => nil} }) end |
#put_bucket_cors(bucket_name, cors) ⇒ Object
Sets the cors configuration for your bucket. If the configuration exists, Amazon S3 replaces it.
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
# File 'lib/fog/internet_archive/requests/storage/put_bucket_cors.rb', line 22 def put_bucket_cors(bucket_name, cors) data = Fog::Storage::InternetArchive.hash_to_cors(cors) headers = {} headers['Content-MD5'] = Base64.encode64(Digest::MD5.digest(data)).strip headers['Content-Type'] = 'application/json' headers['Date'] = Fog::Time.now.to_date_header request({ :body => data, :expects => 200, :headers => headers, :host => "#{bucket_name}.#{@host}", :method => 'PUT', :query => {'cors' => nil} }) end |
#put_bucket_lifecycle(bucket_name, lifecycle) ⇒ Object
Change lifecycle configuration for an S3 bucket
-
lifecycle [Hash]:
-
Rules [Array] object expire rules
-
ID [String] Unique identifier for the rule
-
Prefix [String] Prefix identifying one or more objects to which the rule applies
-
Enabled [Boolean] if rule is currently being applied
-
Expiration [Hash] Container for the object expiration rule.
-
Days [Integer] lifetime, in days, of the objects that are subject to the rule
-
Date [Date] Indicates when the specific rule take effect. The date value must conform to the ISO 8601 format. The time is always midnight UTC.
-
-
Transition [Hash] Container for the transition rule that describes when objects transition to the Glacier storage class
-
Days [Integer] lifetime, in days, of the objects that are subject to the rule
-
Date [Date] Indicates when the specific rule take effect. The date value must conform to the ISO 8601 format. The time is always midnight UTC.
-
StorageClass [String] Indicates the Amazon S3 storage class to which you want the object to transition to.
-
-
-
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
# File 'lib/fog/internet_archive/requests/storage/put_bucket_lifecycle.rb', line 29 def put_bucket_lifecycle(bucket_name, lifecycle) builder = Nokogiri::XML::Builder.new do LifecycleConfiguration { lifecycle['Rules'].each do |rule| Rule { ID rule['ID'] Prefix rule['Prefix'] Status rule['Enabled'] ? 'Enabled' : 'Disabled' unless (rule['Expiration'] or rule['Transition']) Expiration { Days rule['Days'] } else if rule['Expiration'] if rule['Expiration']['Days'] Expiration { Days rule['Expiration']['Days'] } elsif rule['Expiration']['Date'] Expiration { Date rule['Expiration']['Date'].is_a?(Time) ? rule['Expiration']['Date'].utc.iso8601 : Time.parse(rule['Expiration']['Date']).utc.iso8601 } end end if rule['Transition'] Transition { if rule['Transition']['Days'] Days rule['Transition']['Days'] elsif rule['Transition']['Date'] Date rule['Transition']['Date'].is_a?(Time) ? time.utc.iso8601 : Time.parse(time).utc.iso8601 end StorageClass rule['Transition']['StorageClass'].nil? ? 'GLACIER' : rule['Transition']['StorageClass'] } end end } end } end body = builder.to_xml body.gsub! /<([^<>]+)\/>/, '<\1></\1>' request({ :body => body, :expects => 200, :headers => {'Content-MD5' => Base64.encode64(Digest::MD5.digest(body)).chomp!, 'Content-Type' => 'application/xml'}, :host => "#{bucket_name}.#{@host}", :method => 'PUT', :query => {'lifecycle' => nil} }) end |
#put_bucket_logging(bucket_name, logging_status) ⇒ Object
Change logging status for an S3 bucket
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
# File 'lib/fog/internet_archive/requests/storage/put_bucket_logging.rb', line 25 def put_bucket_logging(bucket_name, logging_status) if logging_status['LoggingEnabled'].empty? data = <<-DATA <BucketLoggingStatus xmlns="http://doc.s3.amazonaws.com/2006-03-01" /> DATA else data = <<-DATA <BucketLoggingStatus xmlns="http://doc.s3.amazonaws.com/2006-03-01"> <LoggingEnabled> <TargetBucket>#{logging_status['LoggingEnabled']['TargetBucket']}</TargetBucket> <TargetPrefix>#{logging_status['LoggingEnabled']['TargetBucket']}</TargetPrefix> <TargetGrants> DATA acl['AccessControlList'].each do |grant| data << " <Grant>" type = case grant['Grantee'].keys.sort when ['DisplayName', 'ID'] 'CanonicalUser' when ['EmailAddress'] 'AmazonCustomerByEmail' when ['URI'] 'Group' end data << " <Grantee xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:type=\"#{type}\">" for key, value in grant['Grantee'] data << " <#{key}>#{value}</#{key}>" end data << " </Grantee>" data << " <Permission>#{grant['Permission']}</Permission>" data << " </Grant>" end data << <<-DATA </TargetGrants> </LoggingEnabled> </BucketLoggingStatus> DATA end request({ :body => data, :expects => 200, :headers => {}, :host => "#{bucket_name}.#{@host}", :method => 'PUT', :query => {'logging' => nil} }) end |
#put_bucket_policy(bucket_name, policy) ⇒ Object
Change bucket policy for an S3 bucket
13 14 15 16 17 18 19 20 21 22 |
# File 'lib/fog/internet_archive/requests/storage/put_bucket_policy.rb', line 13 def put_bucket_policy(bucket_name, policy) request({ :body => Fog::JSON.encode(policy), :expects => 204, :headers => {}, :host => "#{bucket_name}.#{@host}", :method => 'PUT', :query => {'policy' => nil} }) end |
#put_bucket_versioning(bucket_name, status) ⇒ Object
Change versioning status for an S3 bucket
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
# File 'lib/fog/internet_archive/requests/storage/put_bucket_versioning.rb', line 13 def put_bucket_versioning(bucket_name, status) data = <<-DATA <VersioningConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> <Status>#{status}</Status> </VersioningConfiguration> DATA request({ :body => data, :expects => 200, :headers => {}, :host => "#{bucket_name}.#{@host}", :method => 'PUT', :query => {'versioning' => nil} }) end |
#put_bucket_website(bucket_name, suffix, options = {}) ⇒ Object
Change website configuration for an S3 bucket
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
# File 'lib/fog/internet_archive/requests/storage/put_bucket_website.rb', line 15 def put_bucket_website(bucket_name, suffix, = {}) data = <<-DATA <WebsiteConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> <IndexDocument> <Suffix>#{suffix}</Suffix> </IndexDocument> DATA if [:key] data << <<-DATA <ErrorDocument> <Key>#{[:key]}</Key> </ErrorDocument> DATA end data << '</WebsiteConfiguration>' request({ :body => data, :expects => 200, :headers => {}, :host => "#{bucket_name}.#{@host}", :method => 'PUT', :query => {'website' => nil} }) end |
#put_object(bucket_name, object_name, data, options = {}) ⇒ Excon::Response
Create an object in an S3 bucket
29 30 31 32 33 34 35 36 37 38 39 40 41 |
# File 'lib/fog/internet_archive/requests/storage/put_object.rb', line 29 def put_object(bucket_name, object_name, data, = {}) data = Fog::Storage.parse_data(data) headers = data[:headers].merge!() request({ :body => data[:body], :expects => 200, :headers => headers, :host => "#{bucket_name}.#{@host}", :idempotent => true, :method => 'PUT', :path => CGI.escape(object_name) }) end |
#put_object_acl(bucket_name, object_name, acl, options = {}) ⇒ Object
Change access control list for an S3 object
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
# File 'lib/fog/internet_archive/requests/storage/put_object_acl.rb', line 31 def put_object_acl(bucket_name, object_name, acl, = {}) query = {'acl' => nil} if version_id = .delete('versionId') query['versionId'] = version_id end data = "" headers = {} if acl.is_a?(Hash) data = Fog::Storage::InternetArchive.hash_to_acl(acl) else if !['private', 'public-read', 'public-read-write', 'authenticated-read'].include?(acl) raise Excon::Errors::BadRequest.new('invalid x-amz-acl') end headers['x-amz-acl'] = acl end headers['Content-MD5'] = Base64.encode64(Digest::MD5.digest(data)).strip headers['Content-Type'] = 'application/json' headers['Date'] = Fog::Time.now.to_date_header request({ :body => data, :expects => 200, :headers => headers, :host => "#{bucket_name}.#{@host}", :method => 'PUT', :path => CGI.escape(object_name), :query => query }) end |
#put_request_payment(bucket_name, payer) ⇒ Object
Change who pays for requests to an S3 bucket
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
# File 'lib/fog/internet_archive/requests/storage/put_request_payment.rb', line 13 def put_request_payment(bucket_name, payer) data = <<-DATA <RequestPaymentConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> <Payer>#{payer}</Payer> </RequestPaymentConfiguration> DATA request({ :body => data, :expects => 200, :headers => {}, :host => "#{bucket_name}.#{@host}", :method => 'PUT', :query => {'requestPayment' => nil} }) end |
#reload ⇒ Object
290 291 292 |
# File 'lib/fog/internet_archive/storage.rb', line 290 def reload @connection.reset end |
#signature(params) ⇒ Object
294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 |
# File 'lib/fog/internet_archive/storage.rb', line 294 def signature(params) string_to_sign = <<-DATA #{params[:method].to_s.upcase} #{params[:headers]['Content-MD5']} #{params[:headers]['Content-Type']} #{params[:headers]['Date']} DATA amz_headers, canonical_amz_headers = {}, '' for key, value in params[:headers] if key[0..5] == 'x-amz-' amz_headers[key] = value end end amz_headers = amz_headers.sort {|x, y| x[0] <=> y[0]} for key, value in amz_headers canonical_amz_headers << "#{key}:#{value}\n" end string_to_sign << canonical_amz_headers subdomain = params[:host].split(".#{@host}").first unless subdomain =~ /^(?:[a-z]|\d(?!\d{0,2}(?:\.\d{1,3}){3}$))(?:[a-z0-9]|\.(?![\.\-])|\-(?![\.])){1,61}[a-z0-9]$/ Fog::Logger.warning("fog: the specified s3 bucket name(#{subdomain}) is not a valid dns name, which will negatively impact performance. For details see: http://docs.amazonwebservices.com/AmazonS3/latest/dev/BucketRestrictions.html") params[:host] = params[:host].split("#{subdomain}.")[-1] if params[:path] params[:path] = "#{subdomain}/#{params[:path]}" else params[:path] = subdomain end subdomain = nil end canonical_resource = @path.dup unless subdomain.nil? || subdomain == @host canonical_resource << "#{Fog::InternetArchive.escape(subdomain).downcase}/" end canonical_resource << params[:path].to_s canonical_resource << '?' for key in (params[:query] || {}).keys.sort if %w{ acl cors delete lifecycle location logging notification partNumber policy requestPayment response-cache-control response-content-disposition response-content-encoding response-content-language response-content-type response-expires torrent uploadId uploads versionId versioning versions website }.include?(key) canonical_resource << "#{key}#{"=#{params[:query][key]}" unless params[:query][key].nil?}&" end end canonical_resource.chop! string_to_sign << canonical_resource signed_string = @hmac.sign(string_to_sign) Base64.encode64(signed_string).chomp! end |
#sync_clock ⇒ Object
Sync clock against S3 to avoid skew errors
8 9 10 11 12 13 14 15 |
# File 'lib/fog/internet_archive/requests/storage/sync_clock.rb', line 8 def sync_clock response = begin get_service rescue Excon::Errors::HTTPStatusError => error error.response end Fog::Time.now = Time.parse(response.headers['Date']) end |
#upload_part(bucket_name, object_name, upload_id, part_number, data, options = {}) ⇒ Excon::Response
Upload a part for a multipart upload
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
# File 'lib/fog/internet_archive/requests/storage/upload_part.rb', line 22 def upload_part(bucket_name, object_name, upload_id, part_number, data, = {}) data = Fog::Storage.parse_data(data) headers = headers['Content-Length'] = data[:headers]['Content-Length'] request({ :body => data[:body], :expects => 200, :idempotent => true, :headers => headers, :host => "#{bucket_name}.#{@host}", :method => 'PUT', :path => CGI.escape(object_name), :query => {'uploadId' => upload_id, 'partNumber' => part_number} }) end |