class SoarAuthenticationToken::JwtTokenGenerator

Constants

DEFAULT_CONFIGURATION

Public Class Methods

new(configuration) click to toggle source
# File lib/soar_authentication_token/providers/jwt_token_generator.rb, line 12
def initialize(configuration)
  @configuration = merge_with_default_configuration(configuration)
  validate_configuration
  @private_key = OpenSSL::PKey::EC.new(@configuration['private_key'])
end

Public Instance Methods

generate(authenticated_identifier:, flow_identifier: nil) click to toggle source
# File lib/soar_authentication_token/providers/jwt_token_generator.rb, line 22
def generate(authenticated_identifier:, flow_identifier: nil)
  token_meta = generate_meta(authenticated_identifier)
  token = encode(token_meta)
  add_token_to_store(token_meta,flow_identifier)
  [token, token_meta]
end
inject_store_provider(store_provider) click to toggle source
# File lib/soar_authentication_token/providers/jwt_token_generator.rb, line 18
def inject_store_provider(store_provider)
  @store_provider = store_provider
end

Private Instance Methods

add_token_to_store(meta,flow_identifier) click to toggle source
# File lib/soar_authentication_token/providers/jwt_token_generator.rb, line 55
def add_token_to_store(meta,flow_identifier)
  @store_provider.add(
    token_identifier:         meta['token_identifier'],
    authenticated_identifier: meta['authenticated_identifier'],
    token_issue_time:         meta['token_issue_time'],
    token_expiry_time:        meta['token_expiry_time'],
    flow_identifier:          flow_identifier)
end
encode(meta) click to toggle source
# File lib/soar_authentication_token/providers/jwt_token_generator.rb, line 40
def encode(meta)
  JWT.encode(meta, @private_key, 'ES512')
end
generate_meta(authenticated_identifier) click to toggle source
# File lib/soar_authentication_token/providers/jwt_token_generator.rb, line 31
def generate_meta(authenticated_identifier)
  current_time = Time.now
  { 'authenticated_identifier' => authenticated_identifier,
    'token_issue_time'         => current_time.utc.iso8601(3),
    'token_expiry_time'        => (current_time + @configuration['expiry']).utc.iso8601(3),
    'token_identifier'         => SecureRandom.hex(32)
  }
end
merge_with_default_configuration(configuration) click to toggle source
# File lib/soar_authentication_token/providers/jwt_token_generator.rb, line 50
def merge_with_default_configuration(configuration)
  configuration = {} unless configuration
  Hash.deep_merge(DEFAULT_CONFIGURATION,configuration)
end
validate_configuration() click to toggle source
# File lib/soar_authentication_token/providers/jwt_token_generator.rb, line 44
def validate_configuration
  raise "'private_key' must be configured" unless @configuration['private_key']
  raise "'expiry' must be configured" unless @configuration['expiry']
  raise "'expiry' must be an integer" unless Integer(@configuration['expiry'])
end