Class: ConfigurationService::Factory::Context

Inherits:
Object
  • Object
show all
Defined in:
lib/configuration_service/factory/context.rb,
lib/configuration_service/factory/context/symbolic_access_wrapper.rb

Overview

A factory context for static factory configuration

The typical use case for this class is in constructing a multi-identifier Client using a data structure acquired from a secure source that does not need to be scrubbed.

See Also:

Direct Known Subclasses

EnvironmentContext, YamlFileContext

Defined Under Namespace

Classes: SymbolicAccessWrapper

Instance Method Summary collapse

Constructor Details

#initialize(source) ⇒ Context

Returns a new factory context

The following keys are used by the ConfigurationService::Factory:

identifier

the unique identity of the configuration data (see Client#initialize)

token

authorization token for the identified configuration data (see Client#initialize)

provider_id

the unique identity of the service provider (see ProviderRegistry)

provider_config

configuration options for the service provider (see service provider documentation)

Parameters:

  • source (Hash)

    a string- or symbol-keyed dictionary source



34
35
36
# File 'lib/configuration_service/factory/context.rb', line 34

def initialize(source)
  @env = SymbolicAccessWrapper.new(source)
end

Instance Method Details

#identifierObject

The unique identity of the configuration data



41
42
43
# File 'lib/configuration_service/factory/context.rb', line 41

def identifier
  @env[:identifier]
end

#identifier?Boolean

Whether the context includes an identifier

Returns:

  • (Boolean)


49
50
51
# File 'lib/configuration_service/factory/context.rb', line 49

def identifier?
  @env.include?(:identifier)
end

#provider_configObject

Configuration options for the service provider

See service provider documentation.



74
75
76
# File 'lib/configuration_service/factory/context.rb', line 74

def provider_config
  @env[:provider_config]
end

#provider_idObject

The unique identity of the service provider

See Also:



65
66
67
# File 'lib/configuration_service/factory/context.rb', line 65

def provider_id
  @env[:provider_id]
end

#scrub!Object

Deletes the internal copy of the source

Called by the ConfigurationService::Factory after the client is created, to prevent in-process compromise of the context (e.g. by an exception handler that dumps the environment in a web application).

The original source remains untouched. It is assumed to be secure. However, subclasses such as EnvironmentContext should scrub sources as well.

Sources such as the process ENV and (on JRuby) system properties should not be used with this class; instead, they should be accessed through EnvironmentContext. Temporary YAML file sources should be accessed through YamlFileContext.

Attempts to read context properties after scrubbing will raise a SecurityError.



94
95
96
97
# File 'lib/configuration_service/factory/context.rb', line 94

def scrub!
  @env = Hash.new { raise SecurityError, "can't access scrubbed environment context" }
  nil
end

#tokenObject

Authorization token for the identified configuration data



56
57
58
# File 'lib/configuration_service/factory/context.rb', line 56

def token
  @env[:token]
end