Method: RightAws::S3Interface#canonical_string

Defined in:
lib/s3/right_s3_interface.rb

#canonical_string(method, path, headers = {}, expires = nil) ⇒ Object

Produces canonical string for signing.



135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
# File 'lib/s3/right_s3_interface.rb', line 135

def canonical_string(method, path, headers={}, expires=nil) # :nodoc:
  s3_headers = {}
  headers.each do |key, value|
    key = key.downcase
    s3_headers[key] = value.to_s.strip if key[/^#{AMAZON_HEADER_PREFIX}|^content-md5$|^content-type$|^date$/o]
  end
  s3_headers['content-type'] ||= ''
  s3_headers['content-md5']  ||= ''
  s3_headers['date']           = ''      if s3_headers.has_key? 'x-amz-date'
  s3_headers['date']           = expires if expires
    # prepare output string
  out_string = "#{method}\n"
  s3_headers.sort { |a, b| a[0] <=> b[0] }.each do |key, value|
    out_string << (key[/^#{AMAZON_HEADER_PREFIX}/o] ? "#{key}:#{value}\n" : "#{value}\n")
  end
    # ignore everything after the question mark...
  out_string << path.gsub(/\?.*$/, '')
   # ...unless there is an acl or torrent parameter
  out_string << '?acl'    if path[/[&?]acl($|&|=)/]
  out_string << '?torrent'if path[/[&?]torrent($|&|=)/]
  out_string
end