lib/symmetric_encryption/config.rb in symmetric-encryption-4.0.0 vs lib/symmetric_encryption/config.rb in symmetric-encryption-4.0.1

- old
+ new

@@ -27,11 +27,11 @@ # Reads the entire configuration for all environments from the supplied file name. def self.read_file(file_name) config = YAML.load(ERB.new(File.new(file_name).read).result) config = deep_symbolize_keys(config) - config.each_pair { |env, cfg| SymmetricEncryption::Config.send(:migrate_old_formats!, cfg) } + config.each_pair { |_env, cfg| SymmetricEncryption::Config.send(:migrate_old_formats!, cfg) } config end # Write the entire configuration for all environments to the supplied file name. def self.write_file(file_name, config) @@ -48,18 +48,16 @@ # Load the Encryption Configuration from a YAML file. # # See: `.load!` for parameters. def initialize(file_name: nil, env: nil) - unless env - env = defined?(Rails) ? Rails.env : ENV['RACK_ENV'] || ENV['RAILS_ENV'] || 'development' - end + env ||= defined?(Rails) ? Rails.env : ENV['RACK_ENV'] || ENV['RAILS_ENV'] || 'development' unless file_name root = defined?(Rails) ? Rails.root : '.' file_name = - if env_var = ENV['SYMMETRIC_ENCRYPTION_CONFIG'] + if (env_var = ENV['SYMMETRIC_ENCRYPTION_CONFIG']) File.expand_path(env_var) else File.join(root, 'config', 'symmetric-encryption.yml') end raise(ConfigError, "Cannot find config file: #{file_name}") unless File.exist?(file_name) @@ -71,66 +69,67 @@ # Returns [Hash] the configuration for the supplied environment. def config @config ||= begin raise(ConfigError, "Cannot find config file: #{file_name}") unless File.exist?(file_name) - unless env_config = YAML.load(ERB.new(File.new(file_name).read).result)[env] - raise(ConfigError, "Cannot find environment: #{env} in config file: #{file_name}") - end - env_config = self.class.deep_symbolize_keys(env_config) - self.class.migrate_old_formats!(env_config) + + env_config = YAML.load(ERB.new(File.new(file_name).read).result)[env] + raise(ConfigError, "Cannot find environment: #{env} in config file: #{file_name}") unless env_config + + env_config = self.class.send(:deep_symbolize_keys, env_config) + self.class.send(:migrate_old_formats!, env_config) end end # Returns [Array(SymmetricEncrytion::Cipher)] ciphers specified in the configuration file. def ciphers @ciphers ||= config[:ciphers].collect { |cipher_config| Cipher.from_config(cipher_config) } end - private - # Iterate through the Hash symbolizing all keys. - def self.deep_symbolize_keys(x) - case x + def self.deep_symbolize_keys(object) + case object when Hash result = {} - x.each_pair do |key, value| + object.each_pair do |key, value| key = key.to_sym if key.is_a?(String) result[key] = deep_symbolize_keys(value) end result when Array - x.collect { |i| deep_symbolize_keys(i) } + object.collect { |i| deep_symbolize_keys(i) } else - x + object end end + private_class_method :deep_symbolize_keys # Iterate through the Hash symbolizing all keys. - def self.deep_stringify_keys(x) - case x + def self.deep_stringify_keys(object) + case object when Hash result = {} - x.each_pair do |key, value| + object.each_pair do |key, value| key = key.to_s if key.is_a?(Symbol) result[key] = deep_stringify_keys(value) end result when Array - x.collect { |i| deep_stringify_keys(i) } + object.collect { |i| deep_stringify_keys(i) } else - x + object end end + private_class_method :deep_stringify_keys # Migrate old configuration format for this environment def self.migrate_old_formats!(config) # Inline single cipher before :ciphers - unless config.has_key?(:ciphers) - cipher = {} - config.keys.each { |key| cipher[key] = config.delete(key) } - config[:ciphers] = [cipher] + unless config.key?(:ciphers) + inline_cipher = {} + config.keys.each { |key| inline_cipher[key] = config.delete(key) } + config[:ciphers] = [inline_cipher] end # Copy Old :private_rsa_key into each ciphers config # Cipher.from_config replaces it with the RSA Kek if config[:private_rsa_key] @@ -138,28 +137,25 @@ config[:ciphers].each { |cipher| cipher[:private_rsa_key] = private_rsa_key } end # Old :cipher_name config[:ciphers].each do |cipher| - if old_key_name_cipher = cipher.delete(:cipher) + if (old_key_name_cipher = cipher.delete(:cipher)) cipher[:cipher_name] = old_key_name_cipher end # Only temporarily used during v4 Beta process - if cipher[:key_encrypting_key].is_a?(String) - cipher[:private_rsa_key] = cipher.delete(:key_encrypting_key) - end + cipher[:private_rsa_key] = cipher.delete(:key_encrypting_key) if cipher[:key_encrypting_key].is_a?(String) # Check for a prior env var in encrypted key # Example: # encrypted_key: <%= ENV['VAR'] %> - if cipher.has_key?(:encrypted_key) && cipher[:encrypted_key].nil? + if cipher.key?(:encrypted_key) && cipher[:encrypted_key].nil? cipher[:key_env_var] = :placeholder - puts "WARNING: :encrypted_key resolved to nil. Please see the migrated config file for the new option :key_env_var." + puts 'WARNING: :encrypted_key resolved to nil. Please see the migrated config file for the new option :key_env_var.' end - end config end - + private_class_method :migrate_old_formats! end end