renuo-cli 4.3.0 → 4.5.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: 63ddefa045f6a882dc8c2cdb625d809dd4867e6d726069c49348299000574aa3
4
- data.tar.gz: 91f7b57e66180c476c91cb39a143dfdb474a8177e6f8b194dbe0d321369d4601
3
+ metadata.gz: c7719cb71e8a8aab40c7459249bd4426a853941db2c8301d28c1d834b0476dec
4
+ data.tar.gz: 457354d9afee1f9ec6038e16d7ad7437706d713484ea95d8db051d437ddf402e
5
5
  SHA512:
6
- metadata.gz: dd150d6c2692edd4c90ea37385edb895beca3897ec88de3978145c0b7b2430133f35aba36681a2bca202ded28dc193964dd33fc70353d64145937eea52785a6f
7
- data.tar.gz: 905e009a98226b7c0e5d48fb808cce676aaab29c077f23d4ca1ed2d4b42b31259e4b55a05b87b53f92fcda697012db31d77d40c0f65cef75aca5ab2fbbce6d7e
6
+ metadata.gz: 2e25d235c6048a4f10f9bd9f920cdc4ce29ebd8c4ae3004b7401518629d7dfeb4630e58958ebfc3d572b421524fc23fdc63323528c135d26a0632b7522fa5c3e
7
+ data.tar.gz: a27729d6491bdd2683c026f4efd742fdd3e952af44eedce1664b21212bbfd078c774d2e4db901f289c7e8f8e4ae25304d1d2fecc7b453e91783e8d3a3ae0ee35
data/.gitignore CHANGED
@@ -101,3 +101,6 @@ build/
101
101
  /pkg/
102
102
  /spec/reports/
103
103
  /tmp/
104
+ /certificates/
105
+ /config/application.yml
106
+ .env
@@ -0,0 +1,11 @@
1
+ items:
2
+ - default_folder: "./certificates/"
3
+ private_link: "https://start.1password.com/open/i?a=QZNJJCCDWVCGBGI73Z2L55KSGE&v=c4grjzxqhcipunrlflodw7ml7i&i=2v6oqm72wdp7divjqsy6grcjzi&h=renuo.1password.com"
4
+ files:
5
+ - name: "file1.txt"
6
+ - name: "file2.csv"
7
+ - name: "file3.md"
8
+ env_variables:
9
+ - name: "ENV_VAR1"
10
+ - name: "ENV_VAR2"
11
+ - name: "ENV_VAR3"
@@ -20,19 +20,59 @@ class SecretsFetcher
20
20
 
21
21
  private
22
22
 
23
- def elaborate_item(item)
23
+ def elaborate_item(item) # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
24
24
  private_link = item[:private_link]
25
- files = item[:files]
26
- default_folder = item[:default_folder]
25
+ if private_link.nil?
26
+ warn 'Private link not found in your config file.'
27
+ return
28
+ elsif private_link.includes?('share.1password.com')
29
+ warn 'Please use a private link, not a share link.'
30
+ return
31
+ end
32
+
27
33
  item_id = extract_item_id(private_link)
28
- item = get_item(item_id)
29
- return if item.nil?
34
+ item_json = get_item(item_id)
35
+ return if item_json.nil?
36
+
37
+ item[:env_variables].each do |env_variable|
38
+ process_env_variable(env_variable[:name], item_id, item_json)
39
+ end
40
+
41
+ item[:files].each do |file|
42
+ process_file(file[:folder] || item[:default_folder], file[:name], item_json, item_id)
43
+ end
44
+ end
45
+
46
+ def process_env_variable(name, item_id, item_json)
47
+ env_json = item_json['fields'].find { |field| field['label'] == name }
48
+ if env_json.nil?
49
+ warn "Field `#{name}` not found in item #{item_id}. Check the field name in your #{CONFIG_FILE} file."
50
+ else
51
+ value = env_json['value']
52
+ update_or_add_variable('.env', name, /^#{name}=/, "#{name}=#{value}")
53
+ update_or_add_variable('config/application.yml', name, /^#{name}:.*$/, "#{name}: \"#{value}\"")
30
54
 
31
- files.each do |file|
32
- process_files(file[:folder] || default_folder, file[:name], item, item_id)
33
55
  end
34
56
  end
35
57
 
58
+ def update_or_add_variable(file_path, name, pattern, replacement) # rubocop:disable Metrics/MethodLength
59
+ return unless File.exist?(file_path)
60
+
61
+ file_contents = File.read(file_path)
62
+ updated_contents = file_contents
63
+
64
+ if file_contents.match(pattern)
65
+ if ask("Do you want to update the value of #{name} in #{file_path}? (y/n)", 'y') == 'y'
66
+ updated_contents = file_contents.gsub(pattern, replacement)
67
+ end
68
+ else
69
+ puts "Added environment variable #{name} to #{file_path}"
70
+ updated_contents = "#{file_contents}#{replacement}\n"
71
+ end
72
+
73
+ File.write(file_path, updated_contents)
74
+ end
75
+
36
76
  def get_item(item_id)
37
77
  output = execute_command(command: "op item get #{item_id} --format json",
38
78
  success_message: '',
@@ -55,7 +95,7 @@ class SecretsFetcher
55
95
  /&i=([^&]+)/.match(private_link)[1]
56
96
  end
57
97
 
58
- def process_files(output_folder, filename, item, item_id)
98
+ def process_file(output_folder, filename, item, item_id)
59
99
  FileUtils.mkdir_p(output_folder)
60
100
  output_path = File.join(output_folder, filename)
61
101
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Renuo
4
4
  module Cli
5
- VERSION = '4.3.0'
5
+ VERSION = '4.5.0'
6
6
  NAME = 'renuo-cli'
7
7
  end
8
8
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: renuo-cli
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.3.0
4
+ version: 4.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Renuo AG
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-09-10 00:00:00.000000000 Z
11
+ date: 2024-09-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activeresource