class Barzahlen::Middleware::Signature

Public Class Methods

new(request, config) click to toggle source
# File lib/barzahlen/middleware.rb, line 8
def initialize(request, config)
  @request  = request
  @config   = config
end

Public Instance Methods

call(opts, request_uri, method, params, body) click to toggle source
# File lib/barzahlen/middleware.rb, line 13
def call (opts, request_uri, method, params, body)
  parsed_uri              = URI.parse(request_uri)
  request_host_header     = parsed_uri.host + ":" + parsed_uri.port.to_s
  request_method          = method
  request_host_path       = parsed_uri.path
  request_query_string    = URI.encode_www_form(params)
  request_idempotency_key = opts[:headers]["Idempotency-Key"]
  request_date_header     = Time.now.utc.strftime("%a, %d %b %Y %H:%M:%S GMT")

  signature               = Barzahlen::Middleware.generate_bz_signature(
                              @config.payment_key,
                              request_host_header,
                              request_method,
                              request_date_header,
                              request_host_path,
                              request_query_string,
                              body,
                              request_idempotency_key
                            )

  # Attach the Date, Authorization and Host to the request
  new_headers =  opts[:headers].merge(
    {
        Date: request_date_header,
        Authorization: "BZ1-HMAC-SHA256 DivisionId=#{@config.division_id}, Signature=#{signature}",
        Host: request_host_header,
    }
  )

  return @request.call({headers: new_headers}, request_uri, method, params, body)
end