chamber 3.0.1 → 3.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9e37ed83e4c76419880c6abbfdc967f2e82a6fc8824b868904cae1fcb26878d0
4
- data.tar.gz: a61415b6fcce618cbd452a7373b22b3ea1093cb8150b12df6798021743ff02d3
3
+ metadata.gz: 1434b18f4453229446ae2ae6656c2bf1efe0d1aad2525266aeee1ed974a6d1d8
4
+ data.tar.gz: 461e8495983af2516b9968052acf26080570e319871ee9bab71b60e84f10865b
5
5
  SHA512:
6
- metadata.gz: c55d1d457aa0a4d908d4be0e790dc86f10895a2d6514613e1d2d27bfb6ebbde69a7d5e4bb4f0695e6f8da1d993f7d820644b3a975b88d2d91237936c15a6c5e3
7
- data.tar.gz: d0cecb00b849c518ac20f1fefd6c76029e6dbd6a54a9676b28a94529a7df5da9e8a0ef8ea2301cfc9460a627ae168bbab3f07954a48931e5c9a9dd1d60d8f087
6
+ metadata.gz: 53c5345034b1b4e686965450851ddf7706c4152af276cd52d908207e357c9853574d2e62b72eaca26ebf2e2e185548e9289833a536f22b492d2ba07c00ae2f62
7
+ data.tar.gz: a74af49b5470c0fb4ec3c21ff2797bf529d9e32e73e05f73915f9be8f09f05dd608a5a90e888640feba9cdbe2d457181c934d62885f89e0d1a830f4dc7e45e4c
checksums.yaml.gz.sig CHANGED
Binary file
@@ -5,6 +5,7 @@ require 'chamber/rubinius_fix'
5
5
  require 'chamber/commands/show'
6
6
  require 'chamber/commands/files'
7
7
  require 'chamber/commands/secure'
8
+ require 'chamber/commands/unsecure'
8
9
  require 'chamber/commands/sign'
9
10
  require 'chamber/commands/verify'
10
11
  require 'chamber/commands/compare'
@@ -137,6 +138,21 @@ class Runner < Thor
137
138
 
138
139
  ################################################################################
139
140
 
141
+ desc 'unsecure',
142
+ 'Decrypts all encrypted values using the current key(s)' \
143
+
144
+ method_option :dry_run,
145
+ type: :boolean,
146
+ aliases: '-d',
147
+ desc: 'Does not actually decrypt anything, but instead displays ' \
148
+ 'what values would be decrypted'
149
+
150
+ def unsecure
151
+ Commands::Unsecure.call(**options.transform_keys(&:to_sym).merge(shell: self))
152
+ end
153
+
154
+ ################################################################################
155
+
140
156
  desc 'sign',
141
157
  'Creates or verifies signatures for all current settings files using ' \
142
158
  'the signature private key.'
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'chamber/commands/base'
4
+ require 'chamber/commands/securable'
5
+
6
+ module Chamber
7
+ module Commands
8
+ class Unsecure < Chamber::Commands::Base
9
+ include Chamber::Commands::Securable
10
+
11
+ def initialize(**args)
12
+ super(**args.merge(namespaces: ['*']))
13
+ end
14
+
15
+ def call
16
+ disable_warnings do
17
+ current_settings.secure.to_environment.each_key do |key|
18
+ color = dry_run ? :blue : :green
19
+
20
+ shell.say_status 'decrypt', key, color
21
+ end
22
+ end
23
+
24
+ chamber.unsecure unless dry_run
25
+ end
26
+
27
+ private
28
+
29
+ def disable_warnings
30
+ $stderr = ::File.open('/dev/null', 'w')
31
+
32
+ yield
33
+
34
+ $stderr = STDERR
35
+ end
36
+ end
37
+ end
38
+ end
data/lib/chamber/file.rb CHANGED
@@ -107,6 +107,43 @@ class File < Pathname
107
107
  end
108
108
  # rubocop:enable Layout/LineLength, Metrics/AbcSize
109
109
 
110
+ # rubocop:disable Metrics/AbcSize
111
+ def decrypt
112
+ decrypted_settings = to_settings.decrypted.to_flattened_name_hash
113
+ secure_settings = to_settings.encrypted.to_flattened_name_hash
114
+ file_contents = read
115
+
116
+ decrypted_settings.each_pair do |name_pieces, decrypted_value|
117
+ encrypted_value = secure_settings[name_pieces]
118
+
119
+ next unless encrypted_value.is_a?(String)
120
+
121
+ escaped_name = Regexp.escape(name_pieces.last)
122
+ escaped_value = Regexp.escape(encrypted_value)
123
+ line_pattern = /^(\s*)#{escaped_name}(\s*):(\s*)#{escaped_value}$/
124
+ indentation_level = file_contents
125
+ .match(line_pattern)
126
+ &.[](1)
127
+ &.<<(' ')
128
+
129
+ if decrypted_value.include?("\n")
130
+ decrypted_value = decrypted_value
131
+ .chomp
132
+ .gsub(/\n/, "\n#{indentation_level}")
133
+ .prepend("|\n#{indentation_level}")
134
+ end
135
+
136
+ file_contents
137
+ .sub!(
138
+ line_pattern,
139
+ "\\1#{name_pieces.last}\\2:\\3#{decrypted_value}",
140
+ )
141
+ end
142
+
143
+ write(file_contents)
144
+ end
145
+ # rubocop:enable Metrics/AbcSize
146
+
110
147
  def sign
111
148
  signature_key_contents = decryption_keys[:signature]
112
149
 
@@ -192,6 +192,10 @@ class FileSet
192
192
  files.each(&:secure)
193
193
  end
194
194
 
195
+ def unsecure
196
+ files.each(&:decrypt)
197
+ end
198
+
195
199
  def sign
196
200
  files.each(&:sign)
197
201
  end
@@ -38,6 +38,10 @@ class Instance
38
38
  files.secure
39
39
  end
40
40
 
41
+ def unsecure
42
+ files.unsecure
43
+ end
44
+
41
45
  def sign
42
46
  files.sign
43
47
  end
@@ -286,6 +286,21 @@ class Settings
286
286
  ))
287
287
  end
288
288
 
289
+ def decrypted
290
+ Settings.new(**metadata.merge(
291
+ settings: raw_data,
292
+ post_filters: [Filters::DecryptionFilter],
293
+ ))
294
+ end
295
+
296
+ def encrypted
297
+ Settings.new(**metadata.merge(
298
+ settings: raw_data,
299
+ pre_filters: [Filters::EncryptionFilter],
300
+ post_filters: [],
301
+ ))
302
+ end
303
+
289
304
  def insecure
290
305
  Settings.new(**metadata.merge(
291
306
  settings: raw_data,
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Chamber
4
- VERSION = '3.0.1'
4
+ VERSION = '3.1.0'
5
5
  end
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: chamber
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.1
4
+ version: 3.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - thekompanee
@@ -155,6 +155,7 @@ files:
155
155
  - lib/chamber/commands/show.rb
156
156
  - lib/chamber/commands/sign.rb
157
157
  - lib/chamber/commands/travis.rb
158
+ - lib/chamber/commands/unsecure.rb
158
159
  - lib/chamber/commands/verify.rb
159
160
  - lib/chamber/configuration.rb
160
161
  - lib/chamber/context_resolver.rb
metadata.gz.sig CHANGED
Binary file