class Smaak::Cavage04
Constants
- SPECIFICATION
Attributes
adaptor[R]
headers_to_be_signed[R]
Public Class Methods
headers_to_be_signed()
click to toggle source
# File lib/smaak/cavage_04.rb, line 15 def self.headers_to_be_signed [ "(request-target)", "host", "date", "digest", "content-length" ] end
new(adaptor)
click to toggle source
# File lib/smaak/cavage_04.rb, line 9 def initialize(adaptor) raise ArgumentError.new("Must provide a valid request adaptor") if adaptor.nil? @adaptor = adaptor @headers_to_be_signed = Smaak::Cavage04.headers_to_be_signed + Smaak.headers_to_be_signed end
Public Instance Methods
compile_auth_header(signature)
click to toggle source
# File lib/smaak/cavage_04.rb, line 23 def compile_auth_header(signature) raise ArgumentError.new("invalid signature") unless Smaak::Utils.non_blank_string?(signature) ordered_headers = "" @adaptor.each_header do |header, _value| ordered_headers = "#{ordered_headers} #{header}" if @headers_to_be_signed.include?(header) end ordered_headers = ordered_headers[1..ordered_headers.size] @adaptor.set_header("authorization", "Signature keyId=\"rsa-key-1\",algorithm=\"rsa-sha256\", headers=\"#{ordered_headers}\", signature=\"#{signature}\"") end
compile_signature_headers(auth_message)
click to toggle source
# File lib/smaak/cavage_04.rb, line 33 def compile_signature_headers(auth_message) set_adaptor_headers(auth_message) signature_headers = "" @adaptor.each_header do |header, value| signature_headers = append_header(signature_headers, "#{header}: #{value}") if @headers_to_be_signed.include? header end signature_headers = prepend_header("(request-target)", "#{@adaptor.method.downcase} #{@adaptor.path}", signature_headers) end
extract_signature()
click to toggle source
# File lib/smaak/cavage_04.rb, line 54 def extract_signature @adaptor.header("authorization") =~ /signature=\"([^"]*)\"/ $1 end
extract_signature_headers()
click to toggle source
# File lib/smaak/cavage_04.rb, line 43 def extract_signature_headers @adaptor.header("authorization") =~ /headers=\"([^"]*)\",/ headers_order = $1.split(' ') signature_headers = "" headers_order.each do |header| signature_headers = append_header(signature_headers, "#{header}: #{@adaptor.header(header)}") end signature_headers = prepend_header("(request-target)", "#{@adaptor.method.downcase} #{@adaptor.path}", signature_headers) end
Private Instance Methods
append_header(header_list, header)
click to toggle source
# File lib/smaak/cavage_04.rb, line 65 def append_header(header_list, header) "#{header_list}\n#{header}" end
gmt_now()
click to toggle source
# File lib/smaak/cavage_04.rb, line 61 def gmt_now Time.now.gmtime.to_s.gsub("UTC", "GMT") end
prepend_header(header, value, signature_headers)
click to toggle source
# File lib/smaak/cavage_04.rb, line 69 def prepend_header(header, value, signature_headers) "#{header}: #{value}#{signature_headers}" end
set_adaptor_headers(auth_message)
click to toggle source
# File lib/smaak/cavage_04.rb, line 73 def set_adaptor_headers(auth_message) body = @adaptor.body.nil? ? "" : @adaptor.body @adaptor.set_header("authorization", "") @adaptor.set_header("host", "#{@adaptor.host}") @adaptor.set_header("date", "#{gmt_now}") @adaptor.set_header("digest", "SHA-256=#{Digest::SHA256.hexdigest(body)}") @adaptor.set_header("x-smaak-recipient", "#{Smaak::Crypto.encode64(auth_message.recipient)}") @adaptor.set_header("x-smaak-identifier", "#{auth_message.identifier}") @adaptor.set_header("x-smaak-route-info", "#{auth_message.route_info}") @adaptor.set_header("x-smaak-psk", "#{auth_message.psk}") @adaptor.set_header("x-smaak-expires", "#{auth_message.expires}") @adaptor.set_header("x-smaak-nonce", "#{auth_message.nonce}") @adaptor.set_header("x-smaak-encrypt", "#{auth_message.encrypt}") @adaptor.set_header("content-type", "text/plain") @adaptor.set_header("content-length", "#{body.size}") end