Method: RightAws::S3Interface#generate_rest_request

Defined in:
lib/s3/right_s3_interface.rb

#generate_rest_request(method, headers) ⇒ Object

Generates request hash for REST API.



159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
# File 'lib/s3/right_s3_interface.rb', line 159

def generate_rest_request(method, headers)  # :nodoc:
  path = headers[:url]
  path = "/#{path}" unless path[/^\//]
  data = headers[:data]
    # remove unset(==optional) and symbolyc keys
  headers.each{ |key, value| headers.delete(key) if (value.nil? || key.is_a?(Symbol)) }
    #
  headers['content-type'] ||= ''
  headers['date']           = Time.now.httpdate
    # create request
  request      = "Net::HTTP::#{method.capitalize}".constantize.new(URI::escape(CGI::unescape(path)))
  request.body = data if data
    # set request headers and meta headers
  headers.each      { |key, value| request[key.to_s] = value }
    #generate auth strings
  auth_string = canonical_string(request.method, request.path, request.to_hash)
  signature   = Base64.encode64(OpenSSL::HMAC.digest(OpenSSL::Digest::Digest.new("sha1"), @aws_secret_access_key, auth_string)).strip
    # set other headers
  request['Authorization'] = "AWS #{@aws_access_key_id}:#{signature}"
    # prepare output hash
  { :request  => request, 
    :server   => @params[:server],
    :port     => @params[:port],
    :protocol => @params[:protocol] }
end