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 +4 -4
- data/.gitignore +3 -0
- data/config/1password-secrets.yml +11 -0
- data/lib/renuo/cli/app/secrets_fetcher.rb +48 -8
- data/lib/renuo/cli/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c7719cb71e8a8aab40c7459249bd4426a853941db2c8301d28c1d834b0476dec
|
4
|
+
data.tar.gz: 457354d9afee1f9ec6038e16d7ad7437706d713484ea95d8db051d437ddf402e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2e25d235c6048a4f10f9bd9f920cdc4ce29ebd8c4ae3004b7401518629d7dfeb4630e58958ebfc3d572b421524fc23fdc63323528c135d26a0632b7522fa5c3e
|
7
|
+
data.tar.gz: a27729d6491bdd2683c026f4efd742fdd3e952af44eedce1664b21212bbfd078c774d2e4db901f289c7e8f8e4ae25304d1d2fecc7b453e91783e8d3a3ae0ee35
|
data/.gitignore
CHANGED
@@ -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
|
-
|
26
|
-
|
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
|
-
|
29
|
-
return if
|
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
|
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
|
|
data/lib/renuo/cli/version.rb
CHANGED
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.
|
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-
|
11
|
+
date: 2024-09-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activeresource
|