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 +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
|