secrets_cli 0.4.0 → 1.0.0

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
  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
  - - ">="