Module: Soar::Authentication::Identity::Factory

Defined in:
lib/soar/authentication/identity/factory.rb

Class Method Summary collapse

Class Method Details

.create(directory_configurations: nil, authenticated_identifier: nil) ⇒ Soar::Authentication::Identity

Parameters:

  • directory_configurations (Hash) (defaults to: nil)
  • authenticated_identifier (String) (defaults to: nil)

Returns:

Raises:

  • (ArgumentError)


15
16
17
18
19
20
# File 'lib/soar/authentication/identity/factory.rb', line 15

def self.create(directory_configurations: nil, authenticated_identifier: nil)
  raise ArgumentError, 'Missing required directory configuration' if directory_configurations.nil?
  raise ArgumentError, 'Missing required authenticated identifier' if authenticated_identifier.nil?
  provider = get_provider(directory_configurations, authenticated_identifier)
  Soar::Authentication::Identity.new(provider)
end

.get_directory(config) ⇒ Soar::Registry::Directory

Parameters:

  • identity (String)

Returns:

  • (Soar::Registry::Directory)

Raises:

  • (KeyError)

    if config is missing provider and config keys



29
30
31
32
33
# File 'lib/soar/authentication/identity/factory.rb', line 29

def self.get_directory(config)
  provider_class = Object.const_get(config.fetch('provider'))
  provider = provider_class.new(config.fetch('config').symbolize_keys)
  Soar::Registry::Directory.new(provider)
end

.get_provider(directory_configurations, authenticated_identifier) ⇒ Soar::Authentication::Identity::Provider

Parameters:

  • authenticated_identifier (String)

Returns:

Raises:



40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/soar/authentication/identity/factory.rb', line 40

def self.get_provider(directory_configurations, authenticated_identifier)
  case authenticated_identifier
    when /@hetzner.co.za\z/
      Soar::Authentication::Identity::Provider::Staff.new({
        directory: get_directory(directory_configurations.fetch('staff')),
        authenticated_identifier: authenticated_identifier
      })
    when /D\d*$/
      raise NotImplementedError, 'Domain identities require an implementation'
    when /^[CF]{0,1}\d*$/
      raise NotImplementedError, 'Customer identities require an implementation'
    else
      raise Soar::Authentication::Identity::Error::UnknownIdentityError, 'Unknown identity'
  end
  
end