secrets_cli 0.4.0 → 1.0.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
  SHA1:
3
- metadata.gz: df8b479ed5bcee7c806ee75767cfe27b302b2509
4
- data.tar.gz: f5b712d98a1cad4360e5c0ff4634c4f233333f8f
3
+ metadata.gz: 4118924f144c963dee59107590614d200c292885
4
+ data.tar.gz: 345e252e99f89ddc81576c37ac2921ae1860e157
5
5
  SHA512:
6
- metadata.gz: 26df7b2f3baf5ce79cbf48ae29a7e0a56e82e2f0b6cbbffc85d24fa7da171bd6c0c1c593bb1e37d4c84e062cdd53a7c019dc6d4755c92f35ab8ffea8b21e424f
7
- data.tar.gz: f6061b1517d2f88da2321ef5f39ecce2cd440e96a1aa9e1239d42ba0a27cf8f63b45823ffe88e9f3c086ebd4bc6cba5d6954852648cacdb2c84946ad83329b5f
6
+ metadata.gz: 43b93238ba31eb5e30d5a336b8d7d3905f252bc8b93b2360553071475d31d66d2f0e8195ef6023878d968d185f9f39f58cf721335c98cf0d01b6c924e0dfee4e
7
+ data.tar.gz: 945a6e09d1a74943b820749ae92a9933793bef3d61c76d31c1657a1fa98d88b4c4bb6fc1e02a204bd42edd14098a3e657dd4f5202cc0f370d6de80dad998332c
data/.gitignore CHANGED
@@ -8,3 +8,4 @@
8
8
  /spec/reports/
9
9
  /tmp/
10
10
  .secrets
11
+ /config/
data/README.md CHANGED
@@ -24,8 +24,6 @@ Or install it yourself as:
24
24
 
25
25
  ## Prerequisites
26
26
 
27
- `vault` must be installed on system. This gem adds a dependency to `vault-binaries` which will install `vault` for you.
28
-
29
27
  The following environment variables need to be set:
30
28
 
31
29
  For `vault` itself:
@@ -34,8 +32,10 @@ For `vault` itself:
34
32
 
35
33
  For `secrets_cli`:
36
34
 
37
- VAULT_AUTH_METHOD - this is auth method ('github' or 'token' supported for now)
35
+ VAULT_AUTH_METHOD - this is auth method ('github', 'token' or 'app_id' supported for now)
38
36
  VAULT_AUTH_TOKEN - this is vault auth token
37
+ VAULT_AUTH_APP_ID - machine app_id
38
+ VAULT_AUTH_USER_ID - machine user_id which matches app_id
39
39
 
40
40
  For github token you only need `read:org` permissions.
41
41
 
@@ -57,12 +57,11 @@ Example of the `.secrets`:
57
57
  :secrets_file: config/application.yml # file where your secrets are kept, depending on your environment gem (figaro, dotenv, etc)
58
58
  :secrets_storage_key: rails/my_project/ # vault 'storage_key' where your secrets will be kept.
59
59
 
60
- ### Auth
60
+ ### Policies
61
61
 
62
- $ secrets auth
62
+ $ secrets policies
63
63
 
64
- You need to first authenticate yourself on vault server to be able to read and write.
65
- Needs to be done only _once_ for specific token.
64
+ To get all the policies your auth grants please use this command.
66
65
 
67
66
  ### storage_keys and environments
68
67
 
@@ -79,10 +78,6 @@ Environment is `development` by default, but it can be overwriten by passing `--
79
78
 
80
79
  This will only read from vault.
81
80
 
82
- Example of executed command:
83
-
84
- vault read rails/my_project/development
85
-
86
81
  ### Pull
87
82
 
88
83
  $ secrets pull
@@ -109,4 +104,3 @@ Bug storage_keyrts and pull requests are welcome on GitHub at https://github.com
109
104
  ## License
110
105
 
111
106
  The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
112
-
data/exe/secrets CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- # $LOAD_PATH << 'lib'
3
+ $LOAD_PATH << 'lib'
4
4
  require 'rubygems'
5
5
  require 'commander/import'
6
6
  require 'secrets_cli'
@@ -20,13 +20,11 @@ command :init do |c|
20
20
  end
21
21
  end
22
22
 
23
- command :auth do |c|
24
- c.syntax = 'secrets auth [options]'
25
- c.summary = 'Use to authenticate with vault server'
26
- c.option '-T', '--auth_token STRING', String, 'Auth token or $SECRETS_VAULT_AUTH_TOKEN'
27
- c.option '-m', '--auth_method STRING', String, 'github or token'
23
+ command :policies do |c|
24
+ c.syntax = 'secrets policies'
25
+ c.summary = 'Check what policies your auth has'
28
26
  c.action do |_args, options|
29
- SecretsCli::Check::Vault.new(options).call
27
+ options.default verbose: true
30
28
  SecretsCli::Vault::Auth.new(options).call
31
29
  end
32
30
  end
@@ -39,7 +37,7 @@ command :pull do |c|
39
37
  c.option '-k', '--secrets_storage_key STRING', String, 'Override secrets_storage_key'
40
38
  c.option '-d', '--secrets_dir STRING', String, 'Override secrets_dir, default: "."'
41
39
  c.action do |_args, options|
42
- SecretsCli::Check::Secrets.new(options).call
40
+ SecretsCli::Vault::Auth.new(options).call
43
41
  SecretsCli::Vault::Pull.new(options).call
44
42
  end
45
43
  end
@@ -52,7 +50,7 @@ command :push do |c|
52
50
  c.option '-f', '--secrets_file STRING', String, 'Override secrets_file'
53
51
  c.option '-k', '--secrets_storage_key STRING', String, 'Override secrets_storage_key'
54
52
  c.action do |_args, options|
55
- SecretsCli::Check::Secrets.new(options).call
53
+ SecretsCli::Vault::Auth.new(options).call
56
54
  SecretsCli::Vault::Push.new(options).call
57
55
  end
58
56
  end
@@ -63,7 +61,7 @@ command :read do |c|
63
61
  c.option '-e', '--environment STRING', String, 'Set environment, default: development'
64
62
  c.option '-k', '--secrets_storage_key STRING', String, 'Override secrets_storage_key'
65
63
  c.action do |_args, options|
66
- SecretsCli::Check::Secrets.new(options).call
64
+ SecretsCli::Vault::Auth.new(options).call
67
65
  SecretsCli::Vault::Read.new(options).call
68
66
  end
69
67
  end
@@ -12,8 +12,12 @@ module SecretsCli
12
12
  def call
13
13
  error! 'Missing vault' if TTY::Which.which('vault').nil?
14
14
  error! 'Missing VAULT_ADDR env' if ENV['VAULT_ADDR'].nil?
15
- error! 'Missing VAULT_AUTH_TOKEN env' if missing_auth_token?
16
15
  error! 'Missing VAULT_AUTH_METHOD env' if missing_auth_method?
16
+ if auth_method == 'app_id'
17
+ error! 'Missing VAULT_AUTH_APP_ID' if missing_auth_app_id?
18
+ error! 'Missing VAULT_AUTH_USER_ID' if missing_auth_user_id?
19
+ end
20
+ error! 'Missing VAULT_AUTH_TOKEN env' if missing_auth_token?
17
21
  end
18
22
 
19
23
  private
@@ -25,6 +29,18 @@ module SecretsCli
25
29
  def missing_auth_method?
26
30
  options.auth_method.nil? && ENV['VAULT_AUTH_METHOD'].nil?
27
31
  end
32
+
33
+ def missing_auth_app_id?
34
+ options.auth_app_id.nil? && ENV['VAULT_AUTH_APP_ID'].nil?
35
+ end
36
+
37
+ def missing_auth_user_id?
38
+ options.auth_user_id.nil? && ENV['VAULT_AUTH_USER_ID'].nil?
39
+ end
40
+
41
+ def auth_method
42
+ ENV['VAULT_AUTH_METHOD']
43
+ end
28
44
  end
29
45
  end
30
46
  end
@@ -20,7 +20,7 @@ module SecretsCli
20
20
  end
21
21
 
22
22
  def self.write(config)
23
- File.open(SECRETS_CONFIG_FILE, 'w') { |f| f.write(config.to_yaml) }
23
+ File.open(SECRETS_CONFIG_FILE, 'w') { |file| file.write(config.to_yaml) }
24
24
  end
25
25
  end
26
26
  end
@@ -5,20 +5,25 @@ module SecretsCli
5
5
 
6
6
  def initialize(options)
7
7
  super
8
- @auth_token = options.auth_token || ENV['VAULT_AUTH_TOKEN']
9
- @auth_method = options.auth_method || ENV['VAULT_AUTH_METHOD']
8
+ SecretsCli::Check::Vault.new(options).call
9
+ @auth_method = ENV['VAULT_AUTH_METHOD']
10
+ @auth_token = ENV['VAULT_AUTH_TOKEN']
11
+ @auth_app_id = ENV['VAULT_AUTH_APP_ID']
12
+ @auth_user_id = ENV['VAULT_AUTH_USER_ID']
10
13
  end
11
14
 
12
15
  private
13
16
 
14
- attr_reader :auth_token, :auth_method
17
+ attr_reader :auth_token, :auth_method, :auth_app_id, :auth_user_id
15
18
 
16
19
  def command
17
20
  case auth_method
18
21
  when 'github'
19
- "vault auth -method=github token=#{auth_token}"
22
+ ::Vault.auth.github(auth_token).auth[:policies]
20
23
  when 'token'
21
- "vault auth #{auth_token}"
24
+ ::Vault.auth.token(auth_token).auth[:policies]
25
+ when 'app_id'
26
+ ::Vault.auth.app_id(auth_app_id, auth_user_id).auth[:policies]
22
27
  else
23
28
  error! "Unknown auth method #{auth_method}"
24
29
  end
@@ -10,14 +10,9 @@ module SecretsCli
10
10
  end
11
11
 
12
12
  def call
13
- print_verbose(command) if config.verbose
14
- Open3.popen2e(command) do |_stdin, stdout_and_stderr, wait_thr|
15
- if wait_thr.value.success?
16
- prompt.ok(stdout_and_stderr.read)
17
- else
18
- error(stdout_and_stderr.read)
19
- end
20
- end
13
+ options.verbose ? prompt.ok(command) : command
14
+ rescue => exception
15
+ error!(exception.message)
21
16
  end
22
17
 
23
18
  private
@@ -5,14 +5,18 @@ module SecretsCli
5
5
 
6
6
  def initialize(options)
7
7
  super
8
+ SecretsCli::Check::Secrets.new(options).call
8
9
  @secrets_file = options.secrets_file || config.secrets_file
9
10
  @secrets_dir = options.secrets_dir || '.'
10
11
  end
11
12
 
12
- def call
13
- secrets = super.first
13
+ private
14
+
15
+ def command
16
+ secrets = super
14
17
  print_verbose("Writing to #{secrets_file}")
15
- File.open(File.join(secrets_dir, secrets_file), 'w') { |f| f.write(secrets) }
18
+ File.open(File.join(secrets_dir, secrets_file), 'w') { |file| file.write(secrets) }
19
+ secrets
16
20
  end
17
21
  end
18
22
  end
@@ -5,6 +5,7 @@ module SecretsCli
5
5
 
6
6
  def initialize(options)
7
7
  super
8
+ SecretsCli::Check::Secrets.new(options).call
8
9
  @secrets_storage_key = options.secrets_storage_key || config.secrets_storage_key
9
10
  @secrets_file = options.secrets_file || config.secrets_file
10
11
  @secrets = File.read(secrets_file)
@@ -18,7 +19,8 @@ module SecretsCli
18
19
  private
19
20
 
20
21
  def command
21
- "vault write #{secrets_full_storage_key} #{SECRETS_FIELD}=\"#{secrets}\""
22
+ ::Vault.logical.write(secrets_full_storage_key, SECRETS_FIELD => secrets)
23
+ secrets
22
24
  end
23
25
 
24
26
  def are_you_sure?
@@ -3,6 +3,8 @@ module SecretsCli
3
3
  class Read < SecretsCli::Vault::Base
4
4
  def initialize(options)
5
5
  super
6
+ options.default verbose: true
7
+ SecretsCli::Check::Secrets.new(options).call
6
8
  @secrets_storage_key = options.secrets_storage_key || config.secrets_storage_key
7
9
  end
8
10
 
@@ -11,7 +13,8 @@ module SecretsCli
11
13
  attr_reader :secrets_storage_key
12
14
 
13
15
  def command
14
- "vault read --field=#{SECRETS_FIELD} #{secrets_full_storage_key}"
16
+ secret = ::Vault.logical.read(secrets_full_storage_key)
17
+ secret.data[SECRETS_FIELD]
15
18
  end
16
19
  end
17
20
  end
@@ -1,3 +1,3 @@
1
1
  module SecretsCli
2
- VERSION = '0.4.0'
2
+ VERSION = '1.0.0'
3
3
  end
data/lib/secrets_cli.rb CHANGED
@@ -3,6 +3,7 @@ require 'tty-prompt'
3
3
  require 'tty-which'
4
4
  require 'open3'
5
5
  require 'singleton'
6
+ require 'vault'
6
7
  require 'secrets_cli/helpers'
7
8
  require 'secrets_cli/configuration'
8
9
  require 'secrets_cli/init'
@@ -17,9 +18,9 @@ require 'secrets_cli/vault/pull'
17
18
  require 'secrets_cli/vault/push'
18
19
  require 'secrets_cli/version'
19
20
 
20
- # require 'pry'
21
+ require 'pry'
21
22
 
22
23
  module SecretsCli
23
24
  SECRETS_CONFIG_FILE = '.secrets'
24
- SECRETS_FIELD = 'secrets'
25
+ SECRETS_FIELD = :secrets
25
26
  end
data/secrets_cli.gemspec CHANGED
@@ -33,5 +33,5 @@ Gem::Specification.new do |spec|
33
33
 
34
34
  spec.add_runtime_dependency 'commander'
35
35
  spec.add_runtime_dependency 'tty', '~> 0.4.0'
36
- spec.add_runtime_dependency 'vault-binaries'
36
+ spec.add_runtime_dependency 'vault'
37
37
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: secrets_cli
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stjepan Hadjic
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-03-15 00:00:00.000000000 Z
11
+ date: 2016-04-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -95,7 +95,7 @@ dependencies:
95
95
  - !ruby/object:Gem::Version
96
96
  version: 0.4.0
97
97
  - !ruby/object:Gem::Dependency
98
- name: vault-binaries
98
+ name: vault
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
101
  - - ">="