class Trusona::Api::VerifiedResponse
a response from the Trusona
API that can be verified with HMAC
Constants
- LEGACY_SERVER_HEADER
Attributes
code[R]
Public Class Methods
new(unverified)
click to toggle source
# File lib/trusona/api/verified_response.rb, line 11 def initialize(unverified) @unverified = unverified @code = unverified.code @verified = verify end
Public Instance Methods
to_h()
click to toggle source
# File lib/trusona/api/verified_response.rb, line 17 def to_h JSON.parse(@unverified.body) rescue StandardError {} end
verified?()
click to toggle source
# File lib/trusona/api/verified_response.rb, line 23 def verified? @verified end
Private Instance Methods
determine_content_type()
click to toggle source
# File lib/trusona/api/verified_response.rb, line 63 def determine_content_type server = @unverified.headers['server'] response_type = @unverified.headers['Content-Type'] return response_type unless server == LEGACY_SERVER_HEADER determine_request_content_type end
determine_request_content_type()
click to toggle source
# File lib/trusona/api/verified_response.rb, line 71 def determine_request_content_type default_type = 'application/json;charset=utf-8' return default_type unless @unverified.request return default_type unless @unverified.request.options return default_type unless @unverified.request.options[:headers] @unverified.request.options[:headers]['Content-Type'] end
expected_signature()
click to toggle source
rubocop:disable Metrics/MethodLength
# File lib/trusona/api/verified_response.rb, line 36 def expected_signature begin message = Trusona::Api::HashedMessage.new( method: parse_method(@unverified.request.http_method), body: @unverified.body, content_type: determine_content_type, path: parse_path(@unverified.request.uri), date: parse_date(@unverified.headers) ) rescue ArgumentError raise Trusona::SigningError end message.signature end
parse_date(headers)
click to toggle source
# File lib/trusona/api/verified_response.rb, line 59 def parse_date(headers) headers['X-Date'] || headers['x-date'] || headers['Date'] end
parse_method(method)
click to toggle source
# File lib/trusona/api/verified_response.rb, line 80 def parse_method(method) method::METHOD end
parse_path(uri)
click to toggle source
rubocop:enable Metrics/MethodLength
# File lib/trusona/api/verified_response.rb, line 53 def parse_path(uri) return uri.path unless uri.query [uri.path, uri.query].join('?') end
verify()
click to toggle source
# File lib/trusona/api/verified_response.rb, line 29 def verify expected = expected_signature actual = @unverified.headers['X-Signature'] actual == expected || actual == Base64.strict_decode64(expected) end