class Aws4Signer

Constants

VERSION

Public Class Methods

new(access_key_id, secret_access_key, region, service, security_token: nil) click to toggle source
# File lib/aws4_signer.rb, line 24
def initialize(access_key_id, secret_access_key, region, service, security_token: nil)
  @access_key_id = access_key_id
  @secret_access_key = secret_access_key
  @region = region
  @service = service
  @security_token = security_token
end
uri_encode(str) click to toggle source

to be exactly follow the AWS documentation, implement by ourselves

# File lib/aws4_signer.rb, line 14
def self.uri_encode(str)
  str.bytes.map do |c|
    if %w[- . _ ~].include?(c) || (?A .. ?Z).cover?(c) || (?a .. ?z).cover?(c) || (?0 .. ?9).cover?(c)
      c
    else
      "%#{c.ord.to_s(16)}"
    end
  end.join
end

Public Instance Methods

sign(verb, uri, headers: {}, body: '') click to toggle source
# File lib/aws4_signer.rb, line 32
def sign(verb, uri, headers: {}, body: '')
  raise ArgumentError, 'URI must provided' unless uri
  Signature.new(@access_key_id, @secret_access_key, @region, @service, verb, uri, headers, body, security_token: @security_token)
end
sign_http_request(req, uri = nil) click to toggle source
# File lib/aws4_signer.rb, line 37
def sign_http_request(req, uri = nil)
  sign(
    req.method,
    uri || req.uri,
    headers: req.to_hash,
    body: req.body || '',
  ).tap do |signature|
    signature.attach_to_http_request(req)
  end
end