class SoarAuthenticationToken::RemoteTokenGenerator

Public Class Methods

new(configuration) click to toggle source
# File lib/soar_authentication_token/providers/remote_token_generator.rb, line 6
def initialize(configuration)
  @configuration = configuration
  set_configuration_defaults
  validate_configuration
end

Public Instance Methods

generate(authenticated_identifier:, flow_identifier: nil) click to toggle source
# File lib/soar_authentication_token/providers/remote_token_generator.rb, line 16
def generate(authenticated_identifier:, flow_identifier: nil)
  attempt = 0
  begin
    Timeout::timeout(@configuration['timeout']) do
      client = authenticated_client(authenticated_identifier,flow_identifier)
      validate_and_extract_token_from_response(client.request)
    end
  rescue Timeout::Error
    attempt += 1
    retry if attempt < @configuration['attempts']
    raise
  end
end
inject_store_provider(store_provider) click to toggle source
# File lib/soar_authentication_token/providers/remote_token_generator.rb, line 12
def inject_store_provider(store_provider)
  #ignore the store provider since this generator does not use a store
end

Private Instance Methods

authenticated_client(authenticated_identifier,flow_identifier) click to toggle source
# File lib/soar_authentication_token/providers/remote_token_generator.rb, line 37
def authenticated_client(authenticated_identifier,flow_identifier)
  client = AuthenticatedClient::Client.new
  client.url = @configuration['generator-url']
  client.token = @configuration['generator-client-auth-token']
  client.verb = :post
  client.parameters = {'flow_identifier' => flow_identifier}
  client.body = { 'authenticated_identifier' => authenticated_identifier }
  client
end
set_configuration_defaults() click to toggle source
# File lib/soar_authentication_token/providers/remote_token_generator.rb, line 32
def set_configuration_defaults
  @configuration['timeout'] ||= 3
  @configuration['attempts'] ||= 2
end
validate_and_extract_token_from_response(response) click to toggle source
# File lib/soar_authentication_token/providers/remote_token_generator.rb, line 47
def validate_and_extract_token_from_response(response)
  raise "Failure generating token with token generation service. Code #{response.code}" if '200' != response.code
  body = JSON.parse(response.body)
  raise 'Failure generating token by token service' if 'success' != body['status']
  raise 'Token service did not provide token' if body['data'].nil? or body['data']['token'].nil?
  [body['data']['token'], body['data']['token_meta']]
end
validate_configuration() click to toggle source
# File lib/soar_authentication_token/providers/remote_token_generator.rb, line 55
def validate_configuration
  raise "'generator-url' must be configured" unless @configuration['generator-url']
  raise "'timeout' must be configured" unless @configuration['timeout']
  raise "'timeout' must be an integer" unless Integer(@configuration['timeout'])
  raise "'attempts' must be configured" unless @configuration['attempts']
  raise "'attempts' must be an integer" unless Integer(@configuration['attempts'])
end