class ClinchTalent::HmacSigningMiddleware
Public Class Methods
new(app, options, &block)
click to toggle source
Calls superclass method
# File lib/clinch_talent/hmac_signing_middleware.rb, line 3 def initialize(app, options, &block) super(app) @options = options @block = block end
Public Instance Methods
call(env)
click to toggle source
# File lib/clinch_talent/hmac_signing_middleware.rb, line 9 def call(env) env.request_headers['Content-MD5'] = calculated_md5(env) env.request_headers['DATE'] = Time.now.utc.httpdate env.request_headers['Authorization'] = "APIAuth #{@options[:access_id]}:#{hmac_signature(env, @options[:secret])}" @app.call(env) end
Private Instance Methods
calculated_md5(env)
click to toggle source
# File lib/clinch_talent/hmac_signing_middleware.rb, line 18 def calculated_md5(env) Digest::MD5.base64digest(env.body || '') end
canonical_string(env)
click to toggle source
# File lib/clinch_talent/hmac_signing_middleware.rb, line 38 def canonical_string(env) [content_type(env), content_md5(env), parse_uri(env.url.to_s), timestamp(env) ].join(',') end
capitalize_keys(hsh)
click to toggle source
# File lib/clinch_talent/hmac_signing_middleware.rb, line 26 def capitalize_keys(hsh) capitalized_hash = {} hsh.each_pair {|k, v| capitalized_hash[k.to_s.upcase] = v} capitalized_hash end
content_md5(env)
click to toggle source
# File lib/clinch_talent/hmac_signing_middleware.rb, line 56 def content_md5(env) value = find_header(env, %w(CONTENT-MD5 CONTENT_MD5 HTTP-CONTENT-MD5 HTTP_CONTENT_MD5)) value.nil? ? '' : value end
content_type(env)
click to toggle source
# File lib/clinch_talent/hmac_signing_middleware.rb, line 51 def content_type(env) value = find_header(env, %w(CONTENT-TYPE CONTENT_TYPE HTTP_CONTENT_TYPE)) value.nil? ? '' : value end
fetch_headers(env)
click to toggle source
# File lib/clinch_talent/hmac_signing_middleware.rb, line 22 def fetch_headers(env) capitalize_keys env.request_headers end
find_header(env, keys)
click to toggle source
# File lib/clinch_talent/hmac_signing_middleware.rb, line 61 def find_header(env, keys) keys.map {|key| env.request_headers[key]}.compact.first end
hmac_signature(env, secret_key)
click to toggle source
# File lib/clinch_talent/hmac_signing_middleware.rb, line 32 def hmac_signature(env, secret_key) canonical_string = canonical_string(env) digest = OpenSSL::Digest.new('sha1') Base64.strict_encode64(OpenSSL::HMAC.digest(digest, secret_key, canonical_string)) end
parse_uri(uri)
click to toggle source
# File lib/clinch_talent/hmac_signing_middleware.rb, line 65 def parse_uri(uri) uri_without_host = uri.gsub(/https?:\/\/[^(,|\?|\/)]*/, '') return '/' if uri_without_host.empty? uri_without_host end
timestamp(env)
click to toggle source
# File lib/clinch_talent/hmac_signing_middleware.rb, line 46 def timestamp(env) value = find_header(env, %w(DATE HTTP_DATE)) value.nil? ? '' : value end