secrets_cli 1.12.3 → 1.13.0.beta

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: ab3dc381cb5faef26b4d248db2cef823176c22bbc1751934861a9f14349996c4
4
- data.tar.gz: 90c0f76a289e64bbf5c37be71cf584b6ffd9f7413311bbcb263750f95ca8ec7f
3
+ metadata.gz: 773250ad4e70bcac74743dfdaa458994a5cb6c505ac0f52de4b756f0e167da2b
4
+ data.tar.gz: 41a43aa03afde98131ac62a903fd14bda5f91661fc840adbc81eefa033ca64dc
5
5
  SHA512:
6
- metadata.gz: 5e5b7920c0bf7a3e5d0b52759f9c33ae84dcd925d4c73d01662de67d5502eca33dcdca9c000deea1ead0dce0ee344596289828d5eaa78304acfd1b0d0d1a8494
7
- data.tar.gz: 0def29e0a5572c5c671e505170cf2db7bb0c024abad82d3ee5d372a774fb219617b5228cbec6f69aeab2d3a36611a8e6f780f2185ce174435dba255de5a58945
6
+ metadata.gz: df5a91b0c95f0592d44f03347d1b788a2857a7a2e2e2fc1d9aba437769f81c65b1de163dc88cad2790f661d28055caf9e1a3b8ff5228b05f8095ee29a7f344d5
7
+ data.tar.gz: 3a3a2815393070aa91121b3a84cdab022028b7c8e93cdc449bfbda5873ea470f4c9b775053bb3026232a6f3b53de7f868ec2fc7d4be1127a1bbb1ca024656ead
data/.gitignore CHANGED
@@ -8,4 +8,5 @@
8
8
  /spec/reports/
9
9
  /tmp/
10
10
  .secrets
11
+ .env
11
12
  /config/
data/exe/secrets CHANGED
@@ -18,6 +18,7 @@ command :init do |c|
18
18
  c.option '-f', '--secrets_file STRING', String, 'Define secrets file'
19
19
  c.option '-k', '--secrets_storage_key STRING', String, 'Define secrets storage_key'
20
20
  c.option '-a', '--vault_addr STRING', String, 'Vault url'
21
+ c.option '-b', '--vault_backend STRING', String, 'Vault backend'
21
22
  c.action do |_args, options|
22
23
  SecretsCli::Init.new(options).call
23
24
  end
@@ -27,8 +28,7 @@ command :policies do |c|
27
28
  c.syntax = 'secrets policies'
28
29
  c.summary = 'Check what policies your auth has'
29
30
  c.action do |_args, options|
30
- options.default verbose: true
31
- SecretsCli::Vault::Policies.new(options).call
31
+ SecretsCli::Vault::Policies.new(options).call(verbose: true)
32
32
  end
33
33
  end
34
34
 
@@ -41,7 +41,7 @@ command :pull do |c|
41
41
  c.option '-k', '--secrets_storage_key STRING', String, 'Override secrets_storage_key'
42
42
  c.option '-d', '--secrets_dir STRING', String, 'Override secrets_dir, default: "."'
43
43
  c.action do |_args, options|
44
- SecretsCli::Vault::Pull.new(options).call
44
+ SecretsCli::Vault::Pull.new(options).call(verbose: options.verbose)
45
45
  end
46
46
  end
47
47
 
@@ -53,7 +53,7 @@ command :push do |c|
53
53
  c.option '-f', '--secrets_file STRING', String, 'Override secrets_file'
54
54
  c.option '-k', '--secrets_storage_key STRING', String, 'Override secrets_storage_key'
55
55
  c.action do |_args, options|
56
- SecretsCli::Vault::Push.new(options).call
56
+ SecretsCli::Vault::Push.new(options).call(verbose: options.verbose)
57
57
  end
58
58
  end
59
59
 
@@ -62,8 +62,10 @@ command :read do |c|
62
62
  c.summary = 'Use to only read from vault server without writing to secrets file'
63
63
  c.option '-e', '--environment STRING', String, 'Set environment, default: development'
64
64
  c.option '-k', '--secrets_storage_key STRING', String, 'Override secrets_storage_key'
65
+ c.option '-m', '--mount STRING', String, 'Set mount point (used in kv backend)'
66
+ c.option '-n', '--kv_version STRING', Integer, 'Version of secret (used in kv backend)'
65
67
  c.action do |_args, options|
66
- SecretsCli::Vault::Read.new(options).call
68
+ SecretsCli::Vault::Read.new(options).call(verbose: !options.ci_mode)
67
69
  end
68
70
  end
69
71
 
@@ -82,6 +84,6 @@ command :list do |c|
82
84
  c.summary = 'Use to list all environemnts'
83
85
  c.option '-k', '--secrets_storage_key STRING', String, 'Override secrets_storage_key'
84
86
  c.action do |_args, options|
85
- SecretsCli::Vault::List.new(options).call
87
+ SecretsCli::Vault::List.new(options).call(verbose: true)
86
88
  end
87
89
  end
@@ -0,0 +1,24 @@
1
+ module SecretsCli
2
+ module Backend
3
+ class KV
4
+ attr_reader :version, :client
5
+
6
+ def initialize(vault, mount, version = nil)
7
+ @client = vault.kv(mount)
8
+ @version = version
9
+ end
10
+
11
+ def list(path)
12
+ client.list(path)
13
+ end
14
+
15
+ def read(path)
16
+ client.read(path, version)
17
+ end
18
+
19
+ def write(path, data)
20
+ client.write(path, data)
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,23 @@
1
+ module SecretsCli
2
+ module Backend
3
+ class Logical
4
+ attr_reader :client
5
+
6
+ def initialize(vault)
7
+ @client = vault.logical
8
+ end
9
+
10
+ def list(path)
11
+ client.list(path)
12
+ end
13
+
14
+ def read(path)
15
+ client.read(path)
16
+ end
17
+
18
+ def write(path, data)
19
+ client.write(path, data)
20
+ end
21
+ end
22
+ end
23
+ end
@@ -24,6 +24,14 @@ module SecretsCli
24
24
  fetch(:vault_addr) || ENV['VAULT_ADDR']
25
25
  end
26
26
 
27
+ def backend
28
+ fetch(:backend) || 'logical'
29
+ end
30
+
31
+ def mount
32
+ fetch(:mount)
33
+ end
34
+
27
35
  def self.write(config)
28
36
  File.open(SECRETS_CONFIG_FILE, 'w') { |file| file.write(config.to_yaml) }
29
37
  end
@@ -20,7 +20,8 @@ module SecretsCli
20
20
  {}.tap do |hash|
21
21
  hash[:secrets_file] = secrets_file
22
22
  hash[:secrets_storage_key] = secrets_storage_key
23
- hash[:vault_addr] = vault_addr if vault_addr
23
+ hash[:vault_addr] = vault_addr
24
+ hash[:backend] = backend
24
25
  end
25
26
  end
26
27
 
@@ -37,5 +38,9 @@ module SecretsCli
37
38
  def vault_addr
38
39
  @vault_addr ||= options.vault_addr || SecretsCli::Prompts::VaultAddr.new.call
39
40
  end
41
+
42
+ def backend
43
+ @backend ||= options.backend || SecretsCli::Prompts::Backend.new.call
44
+ end
40
45
  end
41
46
  end
@@ -0,0 +1,11 @@
1
+ module SecretsCli
2
+ module Prompts
3
+ class Backend
4
+ include SecretsCli::Helpers
5
+
6
+ def call
7
+ prompt.ask('What is the vault backend? (logical or kv)', default: 'logical')
8
+ end
9
+ end
10
+ end
11
+ end
@@ -4,7 +4,7 @@ module SecretsCli
4
4
  include SecretsCli::Helpers
5
5
 
6
6
  def call
7
- prompt.ask('What is the vault address? (if not supplied VAULT_ADDR env will be used)')
7
+ prompt.ask('What is the vault address? (https://vault.example.com:8200)')
8
8
  end
9
9
  end
10
10
  end
@@ -21,16 +21,16 @@ module SecretsCli
21
21
  def command
22
22
  case auth_method
23
23
  when 'github'
24
- vault.auth.github(auth_token)
24
+ vault.auth.github(auth_token).auth.client_token
25
25
  when 'token'
26
- vault.auth.token(auth_token)
26
+ auth_token
27
27
  when 'app_id'
28
- vault.auth.app_id(auth_app_id, auth_user_id)
28
+ vault.auth.app_id(auth_app_id, auth_user_id).auth.client_token
29
29
  when 'approle'
30
- vault.auth.approle(auth_role_id, auth_secret_id)
30
+ vault.auth.approle(auth_role_id, auth_secret_id).auth.client_token
31
31
  else
32
32
  error! "Unknown auth method #{auth_method}"
33
- end.auth
33
+ end
34
34
  end
35
35
 
36
36
  def vault
@@ -9,8 +9,8 @@ module SecretsCli
9
9
  @options = options
10
10
  end
11
11
 
12
- def call
13
- options.verbose && !self.is_a?(SecretsCli::Vault::Auth) ? prompt.ok(command).first : command
12
+ def call(verbose: false)
13
+ verbose ? prompt.ok(command).first : command
14
14
  rescue => exception
15
15
  # require 'pry'; binding.pry
16
16
  error!(exception.message)
@@ -26,10 +26,18 @@ module SecretsCli
26
26
  @vault ||=
27
27
  ::Vault::Client.new(
28
28
  address: config.vault_addr,
29
- token: SecretsCli::Vault::Auth.new(options).call.client_token
29
+ token: SecretsCli::Vault::Auth.new(options).call
30
30
  )
31
31
  end
32
32
 
33
+ def backend
34
+ @backend ||=
35
+ case config.backend
36
+ when 'logical' then SecretsCli::Backend::Logical.new(vault)
37
+ when 'kv' then SecretsCli::Backend::KV.new(vault, config.mount, options.kv_version)
38
+ end
39
+ end
40
+
33
41
  def secrets_full_storage_key
34
42
  File.join(secrets_storage_key, config.environment.to_s)
35
43
  end
@@ -37,6 +45,7 @@ module SecretsCli
37
45
  def compare(first, second)
38
46
  diff = TTY::File.diff(first, second, verbose: false)
39
47
  return if diff == ''
48
+
40
49
  prompt.ok('There are some differences:')
41
50
  pretty_diff(diff)
42
51
  exit 0 unless prompt.yes?('Are you sure you want to override?')
@@ -12,10 +12,10 @@ module SecretsCli
12
12
  attr_reader :secrets_storage_key
13
13
 
14
14
  def command
15
- secrets = vault.logical.read(secrets_full_storage_key)
15
+ secrets = backend.read(secrets_full_storage_key)
16
16
  new_secrets = ask_editor(content(secrets))
17
17
  compare(content(secrets), new_secrets)
18
- vault.logical.write(secrets_full_storage_key, SECRETS_FIELD => new_secrets)
18
+ backend.write(secrets_full_storage_key, SECRETS_FIELD => new_secrets)
19
19
  new_secrets
20
20
  end
21
21
 
@@ -13,7 +13,7 @@ module SecretsCli
13
13
  attr_reader :secrets_storage_key
14
14
 
15
15
  def command
16
- vault.logical.list(secrets_storage_key).join("\n")
16
+ backend.list(secrets_storage_key).join("\n")
17
17
  end
18
18
  end
19
19
  end
@@ -11,8 +11,9 @@ module SecretsCli
11
11
  @secrets = File.read(secrets_file)
12
12
  end
13
13
 
14
- def call
14
+ def call(verbose: false)
15
15
  return if !options.ci_mode && !are_you_sure?
16
+
16
17
  compare unless options.ci_mode
17
18
  super
18
19
  end
@@ -20,12 +21,12 @@ module SecretsCli
20
21
  private
21
22
 
22
23
  def command
23
- vault.logical.write(secrets_full_storage_key, SECRETS_FIELD => secrets)
24
+ backend.write(secrets_full_storage_key, SECRETS_FIELD => secrets)
24
25
  secrets
25
26
  end
26
27
 
27
28
  def compare
28
- secrets = vault.logical.read(secrets_full_storage_key)
29
+ secrets = backend.read(secrets_full_storage_key)
29
30
  secrets = secrets.nil? ? ' ' : secrets.data[SECRETS_FIELD]
30
31
  diff = TTY::File.diff(secrets, secrets_file, verbose: false)
31
32
  return if diff == ''
@@ -3,7 +3,6 @@ module SecretsCli
3
3
  class Read < SecretsCli::Vault::Base
4
4
  def initialize(options)
5
5
  super
6
- options.default(verbose: !options.ci_mode)
7
6
  SecretsCli::Check::Secrets.new(:read, options).call
8
7
  @secrets_storage_key = options.secrets_storage_key || config.secrets_storage_key
9
8
  end
@@ -13,7 +12,7 @@ module SecretsCli
13
12
  attr_reader :secrets_storage_key
14
13
 
15
14
  def command
16
- secrets = vault.logical.read(secrets_full_storage_key)
15
+ secrets = backend.read(secrets_full_storage_key)
17
16
  error!("There are no secrets in #{config.vault_addr} #{secrets_full_storage_key}") if secrets.nil?
18
17
  secrets.data[SECRETS_FIELD]
19
18
  end
@@ -1,3 +1,3 @@
1
1
  module SecretsCli
2
- VERSION = '1.12.3'
2
+ VERSION = '1.13.0.beta'
3
3
  end
data/lib/secrets_cli.rb CHANGED
@@ -12,6 +12,8 @@ require 'secrets_cli/check/vault'
12
12
  require 'secrets_cli/prompts/secrets_file'
13
13
  require 'secrets_cli/prompts/secrets_storage_key'
14
14
  require 'secrets_cli/prompts/vault_addr'
15
+ require 'secrets_cli/backend/logical'
16
+ require 'secrets_cli/backend/kv'
15
17
  require 'secrets_cli/vault/base'
16
18
  require 'secrets_cli/vault/auth'
17
19
  require 'secrets_cli/vault/list'
data/secrets_cli.gemspec CHANGED
@@ -10,7 +10,7 @@ Gem::Specification.new do |spec|
10
10
  spec.email = ['d4be4st@gmail.com']
11
11
 
12
12
  spec.summary = 'This is a CLI for easier use of https://www.vaultproject.io/'
13
- spec.homepage = 'http://github.com/infinum/secrets_cli'
13
+ spec.homepage = 'http://github.com/infinum.secrets_cli'
14
14
  spec.license = 'MIT'
15
15
 
16
16
  # Prevent pushing this gem to RubyGems.org by setting 'allowed_push_host', or
@@ -26,8 +26,8 @@ Gem::Specification.new do |spec|
26
26
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
27
27
  spec.require_paths = ['lib']
28
28
 
29
- spec.add_development_dependency 'bundler'
30
- spec.add_development_dependency 'rake'
29
+ spec.add_development_dependency 'bundler', '~> 1.10'
30
+ spec.add_development_dependency 'rake', '~> 10.0'
31
31
  spec.add_development_dependency 'rspec'
32
32
  spec.add_development_dependency 'pry'
33
33
 
metadata CHANGED
@@ -1,43 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: secrets_cli
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.12.3
4
+ version: 1.13.0.beta
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stjepan Hadjic
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-09-29 00:00:00.000000000 Z
11
+ date: 2020-02-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '0'
19
+ version: '1.10'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ">="
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '0'
26
+ version: '1.10'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ">="
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '0'
33
+ version: '10.0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ">="
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '0'
40
+ version: '10.0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rspec
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -122,7 +122,7 @@ dependencies:
122
122
  - - "~>"
123
123
  - !ruby/object:Gem::Version
124
124
  version: '0.7'
125
- description:
125
+ description:
126
126
  email:
127
127
  - d4be4st@gmail.com
128
128
  executables:
@@ -142,11 +142,14 @@ files:
142
142
  - bin/console
143
143
  - exe/secrets
144
144
  - lib/secrets_cli.rb
145
+ - lib/secrets_cli/backend/kv.rb
146
+ - lib/secrets_cli/backend/logical.rb
145
147
  - lib/secrets_cli/check/secrets.rb
146
148
  - lib/secrets_cli/check/vault.rb
147
149
  - lib/secrets_cli/configuration.rb
148
150
  - lib/secrets_cli/helpers.rb
149
151
  - lib/secrets_cli/init.rb
152
+ - lib/secrets_cli/prompts/backend.rb
150
153
  - lib/secrets_cli/prompts/secrets_file.rb
151
154
  - lib/secrets_cli/prompts/secrets_storage_key.rb
152
155
  - lib/secrets_cli/prompts/vault_addr.rb
@@ -160,12 +163,12 @@ files:
160
163
  - lib/secrets_cli/vault/read.rb
161
164
  - lib/secrets_cli/version.rb
162
165
  - secrets_cli.gemspec
163
- homepage: http://github.com/infinum/secrets_cli
166
+ homepage: http://github.com/infinum.secrets_cli
164
167
  licenses:
165
168
  - MIT
166
169
  metadata:
167
170
  allowed_push_host: https://rubygems.org
168
- post_install_message:
171
+ post_install_message:
169
172
  rdoc_options: []
170
173
  require_paths:
171
174
  - lib
@@ -176,12 +179,13 @@ required_ruby_version: !ruby/object:Gem::Requirement
176
179
  version: '0'
177
180
  required_rubygems_version: !ruby/object:Gem::Requirement
178
181
  requirements:
179
- - - ">="
182
+ - - ">"
180
183
  - !ruby/object:Gem::Version
181
- version: '0'
184
+ version: 1.3.1
182
185
  requirements: []
183
- rubygems_version: 3.0.3
184
- signing_key:
186
+ rubyforge_project:
187
+ rubygems_version: 2.7.6
188
+ signing_key:
185
189
  specification_version: 4
186
190
  summary: This is a CLI for easier use of https://www.vaultproject.io/
187
191
  test_files: []