Class: AWSRaw::S3::Signer

Inherits:
Object
  • Object
show all
Defined in:
lib/awsraw/s3/signer.rb

Overview

Generates the Authorization header for a REST request to S3.

See docs.amazonwebservices.com/AmazonS3/latest/dev/RESTAuthentication.html

Direct Known Subclasses

QueryStringSigner

Constant Summary collapse

SUBRESOURCES =
%w(acl lifecycle location logging notification partNumber policy requestPayment torrent uploadId uploads versionId versioning versions website)

Instance Method Summary collapse

Constructor Details

#initialize(access_key_id, secret_access_key) ⇒ Signer

Returns a new instance of Signer.



15
16
17
18
# File 'lib/awsraw/s3/signer.rb', line 15

def initialize(access_key_id, secret_access_key)
  @access_key_id     = access_key_id
  @secret_access_key = secret_access_key
end

Instance Method Details

#authorization_header_value(request) ⇒ Object Also known as: signature



20
21
22
23
24
25
# File 'lib/awsraw/s3/signer.rb', line 20

def authorization_header_value(request)
  string_to_sign = string_to_sign(request)
  signature = encoded_signature(string_to_sign)

  "AWS #{@access_key_id}:#{signature}"
end

#encoded_signature(string_to_sign) ⇒ Object



30
31
32
33
34
# File 'lib/awsraw/s3/signer.rb', line 30

def encoded_signature(string_to_sign)
  digest    = OpenSSL::Digest::Digest.new("sha1")
  sha       = OpenSSL::HMAC.digest(digest, @secret_access_key, string_to_sign)
  signature = Base64.encode64(sha).strip
end

#string_to_sign(request) ⇒ Object



36
37
38
39
40
41
42
43
44
45
# File 'lib/awsraw/s3/signer.rb', line 36

def string_to_sign(request)
  [
    request.method,
    request.headers["Content-MD5"]  || "",
    request.headers["Content-Type"] || "",
    request.headers["Date"],
    canonicalized_amz_headers(request.headers),
    canonicalized_resource(request)
  ].flatten.join("\n")
end