class AWS::S3::Request
@private
Attributes
bucket[RW]
@return [bucket] S3
bucket name
force_path_style[RW]
@private
key[RW]
@return [String] S3
object key
service_path[RW]
@private
Public Class Methods
query_parameters()
click to toggle source
# File lib/aws/s3/request.rb, line 191 def query_parameters %w(response-content-type response-content-language response-expires response-cache-control response-content-disposition response-content-encoding) end
sub_resources()
click to toggle source
# File lib/aws/s3/request.rb, line 183 def sub_resources %w(acl location logging notification partNumber policy requestPayment torrent uploadId uploads versionId versioning versions restore delete lifecycle tagging cors website ) end
Public Instance Methods
canonicalized_headers()
click to toggle source
CanonicalizedAmzHeaders
See the developer guide for more information on how this element is generated.
# File lib/aws/s3/request.rb, line 154 def canonicalized_headers x_amz = headers.select{|name, value| name.to_s =~ /^x-amz-/i } x_amz = x_amz.collect{|name, value| [name.downcase, value] } x_amz = x_amz.sort_by{|name, value| name } x_amz = x_amz.collect{|name, value| "#{name}:#{value.to_s.strip}" }.join("\n") x_amz == '' ? nil : x_amz end
canonicalized_resource()
click to toggle source
From the S3
developer guide
CanonicalizedResource = [ "/" + Bucket ] + <HTTP-Request-URI, from the protocol name up to the querystring> + [ sub-resource, if present. e.g. "?acl", "?location", "?logging", or "?torrent"];
# File lib/aws/s3/request.rb, line 124 def canonicalized_resource parts = [] # virtual hosted-style requests require the hostname to appear # in the canonicalized resource prefixed by a forward slash. if Client.dns_compatible_bucket_name?(bucket) and !path_style? parts << "/#{bucket}" end # all requests require the portion of the un-decoded uri up to # but not including the query string parts << path # lastly any sub resource querystring params need to be appened # in lexigraphical ordered joined by '&' and prefixed by '?' params = (sub_resource_params + query_parameters_for_signature) unless params.empty? parts << '?' parts << params.sort.collect{|p| p.to_s }.join('&') end parts.join end
host()
click to toggle source
# File lib/aws/s3/request.rb, line 59 def host path_style? ? @host : "#{bucket}.#{@host}" end
metadata=(metadata)
click to toggle source
# File lib/aws/s3/request.rb, line 37 def metadata= metadata Array(metadata).each do |name, value| headers["x-amz-meta-#{name}"] = value end end
path_style?()
click to toggle source
# File lib/aws/s3/request.rb, line 63 def path_style? if force_path_style true else Client.path_style_bucket_name?(bucket) end end
query_parameters_for_signature()
click to toggle source
# File lib/aws/s3/request.rb, line 166 def query_parameters_for_signature params.select { |p| self.class.query_parameters.include?(p.name) } end
server_side_encryption=(sse)
click to toggle source
# File lib/aws/s3/request.rb, line 51 def server_side_encryption= sse if sse.is_a?(Symbol) headers['x-amz-server-side-encryption'] = sse.to_s.upcase elsif sse headers['x-amz-server-side-encryption'] = sse end end
signing_string_date()
click to toggle source
# File lib/aws/s3/request.rb, line 106 def signing_string_date # if a date is provided via x-amz-date then we should omit the # Date header from the signing string (should appear as a blank line) if headers.detect{|k,v| k.to_s =~ /^x-amz-date$/i } '' else headers['date'] ||= Time.now.httpdate end end
storage_class=(storage_class)
click to toggle source
# File lib/aws/s3/request.rb, line 43 def storage_class= storage_class if storage_class.kind_of?(Symbol) headers["x-amz-storage-class"] = storage_class.to_s.upcase elsif storage_class headers["x-amz-storage-class"] = storage_class end end
string_to_sign()
click to toggle source
From the S3
developer guide:
StringToSign =
HTTP-Verb + "\n" + content-md5 + "\n" + content-type + "\n" + date + "\n" + CanonicalizedAmzHeaders + CanonicalizedResource;
# File lib/aws/s3/request.rb, line 96 def string_to_sign [ http_method, headers.values_at('content-md5', 'content-type').join("\n"), signing_string_date, canonicalized_headers, canonicalized_resource, ].flatten.compact.join("\n") end
sub_resource_params()
click to toggle source
# File lib/aws/s3/request.rb, line 162 def sub_resource_params params.select{|p| self.class.sub_resources.include?(p.name) } end
uri()
click to toggle source
# File lib/aws/s3/request.rb, line 71 def uri parts = [] parts << bucket if bucket and path_style? parts << escape_path(key) if key path = service_path + parts.join('/') querystring = url_encoded_params uri = '' uri << path uri << "?#{querystring}" if querystring uri end