class Canistor::Authorization

Attributes

access_key_id[R]
date[R]
protocol[R]
region[R]
signature[R]

Public Class Methods

new(authorization) click to toggle source
# File lib/canistor/authorization.rb, line 11
def initialize(authorization)
  @protocol, params = authorization.split(' ', 2)
  params.split(', ').inject({}) do |unpacked, part|
    name, values = part.split('=')
    case name
    when 'Credential'
      self.credential = values.split('/')
    when 'Signature'
      self.signature = values
    end
    unpacked
  end
end

Public Instance Methods

valid_signature?(request, credentials) click to toggle source
# File lib/canistor/authorization.rb, line 25
def valid_signature?(request, credentials)
  return false if signature.to_s.strip == ''
  signer = Aws::Sigv4::Signer.new(
    service: 's3',
    region: region,
    credentials_provider: credentials,
    uri_escape_path: false,
    unsigned_headers: ['content-length', 'x-amzn-trace-id']
  )
  signed_request = signer.sign_request(
    http_method: request.http_method,
    url: request.endpoint.to_s,
    headers: request.headers.to_hash,
    body: request.body
  )
  signature == signer.send(
    :signature,
    credentials.secret_access_key,
    date,
    signed_request.string_to_sign
  )
end

Private Instance Methods

credential=(credential) click to toggle source
# File lib/canistor/authorization.rb, line 54
def credential=(credential)
  @access_key_id, @date, @region = credential[0, 3]
end
signature=(signature) click to toggle source
# File lib/canistor/authorization.rb, line 50
def signature=(signature)
  @signature = signature
end