class S3restful::AWS
Constants
- AMAZON_HEADER_PREFIX
- AMAZON_METADATA_PREFIX
- DIGEST
Attributes
aws_access_key_id[RW]
aws_secret_access_key[RW]
Public Class Methods
new(aws_access_key_id, aws_secret_access_key)
click to toggle source
# File lib/s3restful/aws.rb, line 12 def initialize(aws_access_key_id, aws_secret_access_key) @aws_access_key_id = aws_access_key_id @aws_secret_access_key = aws_secret_access_key raise ArgumentError, "need AWS Access Key Id and AWS Secret Key" if blank?(aws_access_key_id) || blank?(aws_secret_access_key) end
Public Instance Methods
sign(method, path, headers={})
click to toggle source
# File lib/s3restful/aws.rb, line 18 def sign(method, path, headers={}) headers = { 'date' => utc_httpdate }.update(headers) request_description = canonical_request_description(method, path, headers) headers.update("Authorization" => "AWS #{aws_access_key_id}:#{generate_signature(request_description)}") end
Protected Instance Methods
canonical_request_description(method, path, headers = {}, expires = nil)
click to toggle source
# File lib/s3restful/aws.rb, line 37 def canonical_request_description(method, path, headers = {}, expires = nil) s3_attributes = {} headers.each do |key, value| key = key.downcase s3_attributes[key] = value.to_s.strip if key.match(/^#{AMAZON_HEADER_PREFIX}|^content-md5$|^content-type$|^date$/o) end s3_attributes['content-type'] ||= '' s3_attributes['content-md5'] ||= '' s3_attributes['date'] = '' if s3_attributes.has_key?('x-amz-date') s3_attributes['date'] = expires if expires description = "#{method}\n" s3_attributes.sort { |a, b| a[0] <=> b[0] }.each do |key, value| description << (key.match(/^#{AMAZON_HEADER_PREFIX}/o) ? "#{key}:#{value}\n" : "#{value}\n") end # ignore all parameters by default description << path.gsub(/\?.*$/, '') # handle amazon parameters description << '?acl' if path[/[&?]acl($|&|=)/] description << '?torrent' if path[/[&?]torrent($|&|=)/] description << '?location' if path[/[&?]location($|&|=)/] description << '?logging' if path[/[&?]logging($|&|=)/] description end
generate_signature(request_description)
click to toggle source
# File lib/s3restful/aws.rb, line 33 def generate_signature(request_description) Base64.encode64(OpenSSL::HMAC.digest(DIGEST, aws_secret_access_key, request_description)).strip end
utc_httpdate()
click to toggle source
# File lib/s3restful/aws.rb, line 29 def utc_httpdate Time.now.utc.httpdate end