class SignRequest

SignRequest

Public Instance Methods

call(env) click to toggle source
# File lib/bunq_rb/client/sign_request.rb, line 6
def call(env)
  @env = env
  if sign?
    set_client_authentication_header
    set_image_header if image?
    set_signature_header
  end
  @app.call(@env)
end

Private Instance Methods

body() click to toggle source
# File lib/bunq_rb/client/sign_request.rb, line 43
def body
  if image?
    @env.body.to_s
  else
    [:post, :put].include?(@env[:method]) ? @env.body.to_json : ""
  end
end
image?() click to toggle source
# File lib/bunq_rb/client/sign_request.rb, line 51
def image?
  @env[:url].to_s.match(%r{v1\/user\/.*\/monetary-account\/.*\/attachment}) ||
  @env[:url].to_s.match(%r{v1\/attachment-public})
end
request_string() click to toggle source
# File lib/bunq_rb/client/sign_request.rb, line 56
def request_string
  uri = Addressable::URI.parse(@env[:url])
  path = uri.query ? "#{uri.path}?#{uri.query}" : uri.path
  "#{@env[:method].upcase} #{path}\n"
end
set_client_authentication_header() click to toggle source
# File lib/bunq_rb/client/sign_request.rb, line 27
def set_client_authentication_header
  @env[:request_headers]["X-Bunq-Client-Authentication"] = BunqRb.configuration.session_token
end
set_image_header() click to toggle source
# File lib/bunq_rb/client/sign_request.rb, line 22
def set_image_header
  @env[:request_headers]["X-Bunq-Attachment-Description"] = "BAZ"
  @env[:request_headers]["Content-Type"] = "image/jpeg"
end
set_signature_header() click to toggle source
# File lib/bunq_rb/client/sign_request.rb, line 18
def set_signature_header
  @env[:request_headers]["X-Bunq-Client-Signature"] = Base64.strict_encode64(signature)
end
sign?() click to toggle source
# File lib/bunq_rb/client/sign_request.rb, line 62
def sign?
  @env[:method] == :post && @env[:url].to_s.match(%r{v1\/installation}) ? false : true
end
signature() click to toggle source
# File lib/bunq_rb/client/sign_request.rb, line 31
def signature
  digest = OpenSSL::Digest::SHA256.new
  BunqRb.configuration.key.sign(digest, string)
end
string() click to toggle source
# File lib/bunq_rb/client/sign_request.rb, line 36
def string
  sorted_headers = @env[:request_headers].sort.to_h.map { |k, v| "#{k}: #{v}" }
  str = request_string
  str << sorted_headers.join("\n") << "\n\n"
  str << body
end