renuo-cli 4.3.0 → 4.5.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
  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