class 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