Sha256: 68308d65eb112452c380b0780c2c3289334e2d939ef2355265285e10966299b7

Contents?: true

Size: 1.13 KB

Versions: 4

Compression:

Stored size: 1.13 KB

Contents

require 'openssl'
require 'cgi'
require 'nokogiri'
require 'time'

module AceClient
  class Base3 < Base
    attr_accessor :signature_method # TODO: HMAC-SHA256 or HMAC-SHA1
    attr_accessor :sampler

    format :xml

    def initialize(options={})
      super(options)
      @signature_method = options[:signature_method] || 'HmacSHA256'
      @authorization_key = options[:authorization_key] || 'authorization'
      @date_key = options[:date_key] || 'x-date'
      @nonce_key = options[:nonce_key] || 'x-amz-nonce'
      @authorization_prefix = options[:authorization_prefix] || 'AWS3-HTTPS'
      @nonce = options[:nonce]

      @sampler = options[:sampler]
      @before_signature = options[:before_signature]
      @before_request = options[:before_request]
    end

    def create_signature
      digest = OpenSSL::Digest::Digest.new(@signature_method.downcase.gsub(/hmac/, ''))
      Base64.encode64(OpenSSL::HMAC.digest(digest, secret_access_key, string_to_sign)).strip
    end

    def string_to_sign
      @nonce ? date + @nonce : date
    end
    
    def date
      @date ||= Time.now.utc.rfc822.gsub(/[\-\+]\d{4}$/, 'GMT')
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
ace-client-0.0.21 lib/ace-client/base3.rb
ace-client-0.0.20 lib/ace-client/base3.rb
ace-client-0.0.19 lib/ace-client/base3.rb
ace-client-0.0.18 lib/ace-client/base3.rb