module Shared::HmacSignature
Public Instance Methods
headers_md5(headers, payload)
click to toggle source
# File lib/shared/hmac_signature.rb, line 7 def headers_md5 headers, payload headers['Content-MD5'] = Digest::MD5.hexdigest(payload.to_s) end
headers_sign(headers, config)
click to toggle source
# File lib/shared/hmac_signature.rb, line 11 def headers_sign headers, config # Extract and check return unless config.is_a? Hash hmac_method = config[:method] hmac_user = config[:user] hmac_secret = config[:secret] log_debug "headers_sign config", config # Check params unless hmac_method && hmac_user && hmac_secret log_error "headers_sign: missing method/user/secret" return end # Check headers, and translate names to strings unless config[:headers].is_a? Array log_error "headers_sign: [headers] should be an array of headers to be signed" return end hmac_headers = config[:headers].map(&:to_s) # Update date headers['Date'] = Time.now.utc.strftime('%a, %d %b %Y %H:%M:%S GMT') # Let's apply the requested method case hmac_method when 'hmac-kong' hmac_sign_kong headers, hmac_user, hmac_secret, hmac_headers else log_error "headers_sign: only [hmac-kong] method is supported" return end end
Private Instance Methods
hmac_build_header(client_id, selection, signature)
click to toggle source
# File lib/shared/hmac_signature.rb, line 63 def hmac_build_header client_id, selection, signature sprintf 'hmac username="%s", algorithm="hmac-sha1", headers="%s", signature="%s"', client_id, selection.map(&:downcase).join(' '), signature end
hmac_headers_hash(headers, selection, client_secret)
click to toggle source
# File lib/shared/hmac_signature.rb, line 70 def hmac_headers_hash headers, selection, client_secret # Init selected = [] # For each selected header selection.each do |sel| this = sel.downcase # For each header, stack it or not headers.each do |header_name, header_value| next unless this == header_name.downcase selected << sprintf("%s: %s", this, header_value) end end # Build headers string and hash it data = selected.join("\n") digest = OpenSSL::Digest.new('sha1') Base64.encode64(OpenSSL::HMAC.digest(digest, client_secret, data)).strip end
hmac_sign_kong(headers, client_id, client_secret, selection)
click to toggle source
# File lib/shared/hmac_signature.rb, line 47 def hmac_sign_kong headers, client_id, client_secret, selection # Ensure we have :date in headers and no dup selected = selection.push("date").uniq # Signe string of headers signature = hmac_headers_hash headers, selected, client_secret log_debug "hmac_sign_kong: signed [#{signature}] from #{selected.inspect}" # Add auth header headers['Authorization'] = hmac_build_header(client_id, selection, signature) #headers['test'] = "testing123" # That's OK return headers end