class ComplexConfig::KeySource
only one source is used at a time.
direct values. It supports multiple configuration options and ensures that
keys from different possible sources such as files, environment variables, or
The KeySource class is responsible for managing and retrieving encryption
A key source class that provides encryption keys from various sources
def initialize(pathname: nil, env_var: nil, var: nil, master_key_pathname: nil)
-
(ArgumentError)- if more than one setting is provided
Parameters:
-
master_key_pathname(String, nil) -- The path to a master key file -
var(String, nil) -- A string value representing the key -
env_var(String, nil) -- The name of an environment variable containing the key -
pathname(String, nil) -- The path to a key file
def initialize(pathname: nil, env_var: nil, var: nil, master_key_pathname: nil) settings = [ pathname, env_var, var, master_key_pathname ].compact.size if settings > 1 raise ArgumentError, 'only one setting at most possible' end pathname and pathname = pathname.to_s master_key_pathname and master_key_pathname = master_key_pathname.to_s @pathname, @env_var, @var, @master_key_pathname = pathname, env_var, var, master_key_pathname end
def key
-
(String, nil)- the encryption key as a string if found, or nil if no
def key if @var @var.ask_and_send(:chomp) elsif @env_var ENV[@env_var].ask_and_send(:chomp) elsif master_key? IO.binread(@master_key_pathname).chomp elsif @pathname IO.binread(@pathname + '.key').chomp end rescue Errno::ENOENT, Errno::ENOTDIR end
def key_bytes
-
(String)- the encryption key as a binary string of bytes
def key_bytes [ key ].pack('H*') end
def master_key?
-
(TrueClass, FalseClass)- true if a master key pathname is
def master_key? !!@master_key_pathname end