encrypt_env 1.2.1 → 1.3.1
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 +4 -4
- data/bin/encrypt_env +20 -0
- data/lib/encrypt_env.rb +100 -11
- metadata +23 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 240ef0cad26ca9e4a003b59ed55a25ec1e40b749dfa489dde2dfbaf0079d6fc0
|
4
|
+
data.tar.gz: 3f2d327a4009e6ec03d99dd96a9149de9cf578d490b43c0897f2746fb7e7584f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d47f5c3671c2e6a5ebba7626e20ac5de43c3f86ab08101253ab1f41f6094b5610a3e7dce373f86571eec8a7792fa62905ce285590b2cba310fae9cb89d6f8db7
|
7
|
+
data.tar.gz: f2dd54d20b33f8116fbd9c4e2f58ed00d92f30a85bb45db3525dacfd2b226dd01ff91635ddac3e32a8ddc7a2eb33c424301c99240beacc609afe17cf2a0f4b97
|
data/bin/encrypt_env
CHANGED
@@ -27,6 +27,26 @@ elsif action == 'edit'
|
|
27
27
|
EncryptEnv.edit
|
28
28
|
end
|
29
29
|
exit 0
|
30
|
+
elsif action == 'get'
|
31
|
+
key = argv[0]
|
32
|
+
env = argv[1]
|
33
|
+
EncryptEnv.valueof(key, env)
|
34
|
+
exit 0
|
35
|
+
elsif action == 'new'
|
36
|
+
key = argv[0]
|
37
|
+
env = argv[1]
|
38
|
+
EncryptEnv.update_variable(key, env, true)
|
39
|
+
exit 0
|
40
|
+
elsif action == 'update'
|
41
|
+
key = argv[0]
|
42
|
+
env = argv[1]
|
43
|
+
EncryptEnv.update_variable(key, env, false)
|
44
|
+
exit 0
|
45
|
+
elsif action == 'delete'
|
46
|
+
key = argv[0]
|
47
|
+
env = argv[1]
|
48
|
+
EncryptEnv.delete_variable(key, env)
|
49
|
+
exit 0
|
30
50
|
elsif ['help', '--help', '-h'].include?(action)
|
31
51
|
puts <<~HELP
|
32
52
|
Usage:
|
data/lib/encrypt_env.rb
CHANGED
@@ -32,8 +32,7 @@ class EncryptEnv
|
|
32
32
|
elsif Dir["#{Dir.pwd}/config/secrets_*.yml.enc"].length.positive?
|
33
33
|
@opt = 2
|
34
34
|
else
|
35
|
-
|
36
|
-
exit
|
35
|
+
raise 'You must setup first to encrypt file!'
|
37
36
|
end
|
38
37
|
end
|
39
38
|
|
@@ -48,15 +47,19 @@ class EncryptEnv
|
|
48
47
|
private_class_method def self.check_key_existence(env = nil)
|
49
48
|
file_name = env.nil? ? 'master.key' : "master_#{env}.key"
|
50
49
|
return if File.file?("#{Dir.pwd}/config/#{file_name}")
|
51
|
-
# return if Dir["#{Dir.pwd}/config/master_*.key"].length.positive? && @opt == 2
|
52
50
|
return if ENV.key?('MASTER_KEY')
|
53
51
|
|
54
|
-
|
55
|
-
|
52
|
+
message = env ? "Missing key of #{env} environment!" : 'Missing master key!'
|
53
|
+
raise message
|
56
54
|
end
|
57
55
|
|
58
56
|
private_class_method def self.load_master_key(env = nil)
|
59
|
-
|
57
|
+
begin
|
58
|
+
check_key_existence(env)
|
59
|
+
rescue StandardError => e
|
60
|
+
raise e.message
|
61
|
+
end
|
62
|
+
|
60
63
|
file_path = env ? "#{Dir.pwd}/config/master_#{env}.key" : "#{Dir.pwd}/config/master.key"
|
61
64
|
key = File.file?(file_path) ? File.read(file_path).strip : ENV['MASTER_KEY']
|
62
65
|
@master_key = [key].pack('H*')
|
@@ -82,7 +85,7 @@ class EncryptEnv
|
|
82
85
|
end
|
83
86
|
|
84
87
|
private_class_method def self.to_hash_type(raw_data)
|
85
|
-
HashWithIndifferentAccess.new(YAML.load(raw_data, aliases: true))
|
88
|
+
HashWithIndifferentAccess.new(::YAML.load(raw_data, aliases: true))
|
86
89
|
end
|
87
90
|
|
88
91
|
private_class_method def self.load_encrypted_data(env = nil)
|
@@ -110,7 +113,11 @@ class EncryptEnv
|
|
110
113
|
end
|
111
114
|
|
112
115
|
private_class_method def self.decrypt(env = nil)
|
113
|
-
|
116
|
+
begin
|
117
|
+
load_master_key(env)
|
118
|
+
rescue StandardError => e
|
119
|
+
raise e.message
|
120
|
+
end
|
114
121
|
|
115
122
|
decipher = OpenSSL::Cipher.new('aes-128-gcm')
|
116
123
|
decipher.decrypt
|
@@ -125,8 +132,8 @@ class EncryptEnv
|
|
125
132
|
@decrypted = to_hash_type(@raw_decrypted)
|
126
133
|
# Catch error if master key is wrong
|
127
134
|
rescue OpenSSL::Cipher::CipherError
|
128
|
-
|
129
|
-
|
135
|
+
message = env ? "Master key of #{env} environment is wrong!" : 'Master key is wrong!'
|
136
|
+
raise message
|
130
137
|
end
|
131
138
|
|
132
139
|
private_class_method def self.all_decrypted_object
|
@@ -159,6 +166,10 @@ class EncryptEnv
|
|
159
166
|
decrypt(env || current_env)
|
160
167
|
@decrypted
|
161
168
|
end
|
169
|
+
rescue StandardError => e
|
170
|
+
puts e.message
|
171
|
+
@have_error = true
|
172
|
+
{}
|
162
173
|
end
|
163
174
|
|
164
175
|
def self.setup
|
@@ -197,10 +208,88 @@ class EncryptEnv
|
|
197
208
|
encrypt(File.read(f.path), env)
|
198
209
|
@decrypted = nil
|
199
210
|
end
|
211
|
+
rescue StandardError => e
|
212
|
+
puts e.message
|
200
213
|
end
|
201
214
|
|
202
215
|
def self.show(env = nil)
|
203
|
-
|
216
|
+
# require "awesome_print"
|
217
|
+
value = secrets(env)
|
218
|
+
# ap({})
|
219
|
+
# ap(value) unless @have_error
|
220
|
+
jj value unless @have_error
|
221
|
+
@have_error = false
|
222
|
+
end
|
223
|
+
|
224
|
+
def self.valueof(key, env = nil)
|
225
|
+
value = secrets(env)
|
226
|
+
unless value.key?(key)
|
227
|
+
puts "key '#{key}' does not exist!"
|
228
|
+
return
|
229
|
+
end
|
230
|
+
puts value[key]
|
231
|
+
end
|
232
|
+
|
233
|
+
def self.delete_variable(key, env = nil)
|
234
|
+
load_curr_opt unless @opt
|
235
|
+
if @opt == 1
|
236
|
+
puts 'Only for option 2!'
|
237
|
+
return
|
238
|
+
end
|
239
|
+
|
240
|
+
tail_confirm = env ? " in '#{env}' environent" : nil
|
241
|
+
confirm = "Really? You want to delete '#{key}'#{tail_confirm}? (y/n)"
|
242
|
+
puts confirm
|
243
|
+
a = $stdin.gets.chomp
|
244
|
+
return unless a == 'y'
|
245
|
+
|
246
|
+
value = secrets(env)
|
247
|
+
|
248
|
+
unless value.key?(key)
|
249
|
+
puts "#{key} does not exist!"
|
250
|
+
return
|
251
|
+
end
|
252
|
+
|
253
|
+
value.delete(key)
|
254
|
+
encrypt(value.to_hash.to_yaml, env || current_env)
|
255
|
+
puts "delete '#{key}' successfully!"
|
256
|
+
end
|
257
|
+
|
258
|
+
def self.update_variable(key, env = nil, add_variable = false)
|
259
|
+
load_curr_opt unless @opt
|
260
|
+
if @opt == 1
|
261
|
+
puts 'Only for option 2!'
|
262
|
+
return
|
263
|
+
end
|
264
|
+
|
265
|
+
value = secrets(env)
|
266
|
+
if add_variable && value.key?(key)
|
267
|
+
puts 'Key existed!'
|
268
|
+
return
|
269
|
+
end
|
270
|
+
|
271
|
+
if !value.key?(key) && !add_variable
|
272
|
+
tail_msg = env ? " in #{env} environment" : nil
|
273
|
+
puts "'#{key}' does not exist#{tail_msg}. You want to add '#{key}' as the new key? (y/n)"
|
274
|
+
a = $stdin.gets.chomp
|
275
|
+
return unless a == 'y'
|
276
|
+
|
277
|
+
add_variable = false
|
278
|
+
end
|
279
|
+
|
280
|
+
action = add_variable && 'add' || 'edit'
|
281
|
+
file_name = env ? "#{action}_#{key}_#{env}" : "#{action}_#{key}"
|
282
|
+
|
283
|
+
Tempfile.create(file_name) do |f|
|
284
|
+
f.write(value[key])
|
285
|
+
f.flush
|
286
|
+
f.rewind
|
287
|
+
system("vim #{f.path}")
|
288
|
+
new_value = File.read(f.path)
|
289
|
+
value[key] = new_value.strip
|
290
|
+
encrypt(value.to_hash.to_yaml, env || current_env)
|
291
|
+
@decrypted = nil
|
292
|
+
end
|
204
293
|
end
|
205
294
|
end
|
206
295
|
# rubocop:enable Metrics/ClassLength
|
metadata
CHANGED
@@ -1,15 +1,35 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: encrypt_env
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nhu Tan
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-08-
|
12
|
-
dependencies:
|
11
|
+
date: 2022-08-11 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: awesome_print
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.9'
|
20
|
+
- - ">="
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 1.9.2
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
requirements:
|
27
|
+
- - "~>"
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '1.9'
|
30
|
+
- - ">="
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 1.9.2
|
13
33
|
description: Encrypts and decrypts environment variables
|
14
34
|
email: nhutan2001@gmail.com
|
15
35
|
executables:
|