leml 0.2.1 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 46bbf2d07767519d46ba6703eafd96d53f62d2b1
4
- data.tar.gz: aae9577b0141efd89bae3941661651215cd36301
3
+ metadata.gz: 913c8d2ba0a5f32857a5bb0b466d6db9e7ef5f82
4
+ data.tar.gz: 7f51e64db3ed5f14319285c7e326cb897540b45e
5
5
  SHA512:
6
- metadata.gz: 051bedfc7a01849ba35887d8d072df544b5a3805911d4ecd520eb7d5d6ed28f44905cace01715ec0e24d92a32435986733d6f007d7adafe6068262211d998b61
7
- data.tar.gz: 0b615426e6ba6d7283148a761df4b00fdfdc9038ad041026814afd4c7918fd09d3d0bdb464e60345f7a5d2b9391b1b7bb83464102bb8cf5590978467e6ba0d9e
6
+ metadata.gz: f996e75582e56862e5fb12e866f3859fe40ce5b21d548bc158aaca3c79a5313032a84e8e11b1935e3113a716d35cdaf3e74c3155ade90f24677207969bedd095
7
+ data.tar.gz: 26a42abf97b4c94ae195a36dad613414e978b0e1830b7e3497321be0b829862e0bb0b4ad3a7e3680bbaca7d456d828de4257ac367af45593af2000dbf26588b1
data/lib/leml/core.rb CHANGED
@@ -67,10 +67,11 @@ module Leml
67
67
  raise NoLemlKeyError if @key.blank?
68
68
  @encryptor = ActiveSupport::MessageEncryptor.new(@key, cipher: 'aes-256-cbc')
69
69
  @secrets = YAML.load_file(SECRETS)
70
+ @previous_key_hash = {}
70
71
  end
71
72
 
72
73
  def merge_secrets
73
- return unless @key.present? && File.exists?(SECRETS)
74
+ return unless @key.present? && File.exist?(SECRETS)
74
75
  Rails.application.secrets.merge!(decrypt(@secrets)[Rails.env].deep_symbolize_keys) if @secrets
75
76
  end
76
77
 
@@ -91,32 +92,36 @@ module Leml
91
92
 
92
93
  private
93
94
 
94
- def encrypt(raw_secret_hash)
95
+ def encrypt(raw_secret_hash, key_prefix = '')
95
96
  raw_secret_hash.map do |key, value|
97
+ key_prefix = "#{key_prefix}_#{key}"
96
98
  [
97
99
  key,
98
- value.kind_of?(Hash) ? encrypt(value) : encrypt_value(value)
100
+ value.kind_of?(Hash) ? encrypt(value, key_prefix) : encrypt_value(value, key_prefix)
99
101
  ]
100
102
  end.to_h
101
103
  end
102
104
 
103
- def decrypt(secret_hash)
105
+ def decrypt(secret_hash, key_prefix = '')
104
106
  secret_hash.map do |key, value|
107
+ key_prefix = "#{key_prefix}_#{key}"
105
108
  [
106
109
  key,
107
- value.kind_of?(Hash) ? decrypt(value) : decrypt_value(value)
110
+ value.kind_of?(Hash) ? decrypt(value, key_prefix) : decrypt_value(value, key_prefix)
108
111
  ]
109
112
  end.to_h
110
113
  end
111
114
 
112
- def encrypt_value(value)
113
- @encryptor.encrypt_and_sign(value)
115
+ def encrypt_value(value, key_hash)
116
+ @previous_key_hash.dig(key_hash, :raw) == value ? @previous_key_hash.dig(key_hash, :encrypted) : @encryptor.encrypt_and_sign(value)
114
117
  rescue ActiveSupport::MessageVerifier::InvalidSignature
115
118
  raise InvalidLemlKey
116
119
  end
117
120
 
118
- def decrypt_value(value)
119
- @encryptor.decrypt_and_verify(value)
121
+ def decrypt_value(value, key_hash)
122
+ raw_value = @encryptor.decrypt_and_verify(value)
123
+ @previous_key_hash[key_hash] = {raw: raw_value, encrypted: value}
124
+ raw_value
120
125
  rescue ActiveSupport::MessageVerifier::InvalidSignature
121
126
  raise InvalidLemlKey
122
127
  end
@@ -129,8 +134,8 @@ module Leml
129
134
 
130
135
  def create_decrypted_tmp_file(dir)
131
136
  file = File.join(dir, 'tmp_leml.yml')
132
- File.open(file, 'w') do |file|
133
- file.puts(decrypt(@secrets).to_yaml) if @secrets
137
+ File.open(file, 'w') do |fd|
138
+ fd.puts(decrypt(@secrets).to_yaml) if @secrets
134
139
  end
135
140
  file
136
141
  end
data/lib/leml/railtie.rb CHANGED
@@ -2,10 +2,12 @@ require 'rails/railtie'
2
2
 
3
3
  module Leml
4
4
  class Railtie < Rails::Railtie
5
- initializer 'leml.merge_secrets' do
6
- config.before_initialize do
7
- require 'leml/core'
8
- Leml::Core.new.merge_secrets
5
+ unless ARGV.include? 'leml:init'
6
+ initializer 'leml.merge_secrets' do
7
+ config.before_initialize do
8
+ require 'leml/core'
9
+ Leml::Core.new.merge_secrets
10
+ end
9
11
  end
10
12
  end
11
13
 
data/lib/leml/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Leml
2
- VERSION = '0.2.1'
2
+ VERSION = '0.3.0'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: leml
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - onunu
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-10-12 00:00:00.000000000 Z
11
+ date: 2017-10-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails