class SoarAuthenticationToken::RemoteTokenValidator
Public Class Methods
new(configuration)
click to toggle source
# File lib/soar_authentication_token/providers/remote_token_validator.rb, line 5 def initialize(configuration) @configuration = configuration set_configuration_defaults validate_configuration end
Public Instance Methods
inject_store_provider(store_provider)
click to toggle source
# File lib/soar_authentication_token/providers/remote_token_validator.rb, line 11 def inject_store_provider(store_provider) #ignore the store provider since this validator does not use a store end
validate(authentication_token:, request_information:, flow_identifier:)
click to toggle source
# File lib/soar_authentication_token/providers/remote_token_validator.rb, line 15 def validate(authentication_token:, request_information:, flow_identifier:) attempt = 0 begin Timeout::timeout(@configuration['timeout']) do response = send_request(authentication_token,request_information,flow_identifier) validate_and_extract_information_from_response(response) end rescue Timeout::Error attempt += 1 retry if attempt < @configuration['attempts'] raise end end
Private Instance Methods
rejection_result(reason:)
click to toggle source
# File lib/soar_authentication_token/providers/remote_token_validator.rb, line 71 def rejection_result(reason:) [false, nil, reason] end
send_request(authentication_token,request_information,flow_identifier)
click to toggle source
# File lib/soar_authentication_token/providers/remote_token_validator.rb, line 36 def send_request(authentication_token,request_information,flow_identifier) uri = URI.parse(@configuration['validator-url']) uri.query = URI.encode_www_form( {'flow_identifier' => flow_identifier} ) http = Net::HTTP.new(uri.host, uri.port) http.use_ssl = true if uri.is_a?(URI::HTTPS) request = Net::HTTP::Post.new(uri.request_uri) request.body = { 'authentication_token' => authentication_token, 'request_information' => request_information }.to_json http.request(request) end
set_configuration_defaults()
click to toggle source
# File lib/soar_authentication_token/providers/remote_token_validator.rb, line 31 def set_configuration_defaults @configuration['timeout'] ||= 3 @configuration['attempts'] ||= 2 end
validate_and_extract_information_from_response(response)
click to toggle source
# File lib/soar_authentication_token/providers/remote_token_validator.rb, line 47 def validate_and_extract_information_from_response(response) raise "Failure validating token with token validation service. Code #{response.code} received" if '200' != response.code body = JSON.parse(response.body) if ('success' == body['status']) and body['data'] token_validity = body['data']['token_validity'] token_meta = body['data']['token_meta'] message = body['data']['notifications'].first raise 'Token validation service did not provide token_validity' if token_validity.nil? raise 'Token validation service did not provide token_meta' if token_validity and token_meta.nil? raise 'Token validation service did not provide message' if message.nil? return [token_validity, token_meta, message] end if 'fail' == body['status'] return rejection_result(reason: 'remote validation failed') end raise "Failure validating token with token validation service. Status '#{body['status']}' received" end
validate_configuration()
click to toggle source
# File lib/soar_authentication_token/providers/remote_token_validator.rb, line 65 def validate_configuration raise "'validator-url' must be configured in remote mode" unless @configuration['validator-url'] raise "'timeout' must be configured" unless @configuration['timeout'] raise "'timeout' must be an integer" unless Integer(@configuration['timeout']) end