configuration_service-provider-vault 3.0.1 → 3.1.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: 18856db153801c9b127736fabb4362e5813a328c
4
- data.tar.gz: cb5925035eee98812114fc2445748e03c77fc9b6
3
+ metadata.gz: 1fff8618caf895c631917064234d9f45b0359573
4
+ data.tar.gz: 33d5e1e43f9eab2364058b2adf26f1c67d1ffd9b
5
5
  SHA512:
6
- metadata.gz: a2d54cd52fa551069bcc64b08788d86e0b95e56ef337215d9ddc584ef6565db68dc1fc7703dec6897ecc9e82539a5f6cb8c7e6af1b89c31e9d7fc7d01dac12eb
7
- data.tar.gz: 480160ed92242e1ff6191551ef99b7bc1a9ab43338a91ecfacbf2ad72d74b9617c8b15df8798df8836029c4cc8b39c731d31dc51026ee4276c5451431aa4825e
6
+ metadata.gz: 50bc248271ea74fcf0274a58198ebbb5096b6815d451108de6029df19ada3c5a7c63c4dad9b621e6f1b5dd40e8e223a1384d3faf7044409c0793ee2ab9781a29
7
+ data.tar.gz: 6237b17a9fb0c9d840cd72b5e5d8a006102bb0cdd9b43ffe79fd2a396fdbc97fc3c9ed0f3df3c4bc1e62f414246d52ab951ddb75a27fda0c6c31221edf995f73
data/Gemfile CHANGED
@@ -2,4 +2,3 @@ source 'https://rubygems.org'
2
2
 
3
3
  # Specify your gem's dependencies in configuration_service-vault.gemspec
4
4
  gemspec
5
-
data/contrib/publish.rb CHANGED
@@ -36,12 +36,12 @@ data = begin
36
36
  JSON.parse(raw_data)
37
37
  end
38
38
 
39
- service = ConfigurationService::Base.new(
40
- identifier,
41
- ENV["VAULT_TOKEN"],
42
- ConfigurationService::Provider::Vault.new(
39
+ service = ConfigurationService::Client.new(
40
+ identifier: identifier,
41
+ credentials: ENV["VAULT_TOKEN"],
42
+ provider: ConfigurationService::Provider::Vault.new(
43
43
  address: ENV["VAULT_ADDR"]
44
44
  )
45
45
  )
46
46
 
47
- puts service.publish_configuration(data).metadata
47
+ puts service.publish_configuration(data: data).metadata
data/contrib/request.rb CHANGED
@@ -41,13 +41,13 @@ end
41
41
  end
42
42
 
43
43
  identifier = ARGV[0]
44
- service = ConfigurationService::Base.new(
45
- identifier,
46
- ENV["VAULT_TOKEN"],
47
- ConfigurationService::Provider::Vault.new(
44
+ service = ConfigurationService::Client.new(
45
+ identifier: identifier,
46
+ credentials: ENV["VAULT_TOKEN"],
47
+ provider: ConfigurationService::Provider::Vault.new(
48
48
  address: ENV["VAULT_ADDR"]
49
49
  )
50
50
  )
51
51
 
52
- configuration = service.request_configuration
52
+ configuration = service.request_configuration(identifier: identifier)
53
53
  puts formatter[configuration.data]
@@ -46,7 +46,7 @@ module ConfigurationService
46
46
  # Vault token with +read+ permission on the composed secret path
47
47
  #
48
48
  # @return [ConfigurationService::Configuration] the configuration if found
49
- # @return [nil] if the configuration for +identifier was not found
49
+ # @return [nil] if the configuration for +identifier+ was not found
50
50
  #
51
51
  # @raise [ConfigurationService::AuthorizationError] if the request was not allowed
52
52
  # @raise [ConfigurationService::Error] if the request was allowed but failed
@@ -72,8 +72,8 @@ module ConfigurationService
72
72
  ##
73
73
  # Authorize consumption
74
74
  #
75
- # @param [String] identifier
76
- # the unique identity of the configuration
75
+ # @param [String|Array] identifier
76
+ # the unique identity/identities of the configuration/s
77
77
  # @param [String] token
78
78
  # Vault token with +authorize+ permission on the composed secret path
79
79
  #
@@ -83,20 +83,15 @@ module ConfigurationService
83
83
  # @raise [ConfigurationService::Error] if the request was allowed but failed
84
84
  ##
85
85
  def authorize_consumption(identifier, token)
86
+ identifiers = [identifier].flatten
87
+
86
88
  @mutex.synchronize do
87
89
  authenticate(token)
88
90
 
89
91
  adapt_exceptions do
90
- path = build_path(identifier, "*")
91
- policy = <<-EOF
92
- path "#{path}" {
93
- policy = "read"
94
- }
95
- EOF
96
- if @vault.sys.put_policy(identifier, policy)
97
- secret = @vault.auth_token.create(policies: [identifier], no_default_policy: true)
98
- secret.auth.client_token
99
- end
92
+ create_policies(identifiers)
93
+ secret = @vault.auth_token.create(policies: identifiers, no_default_policy: true)
94
+ secret.auth.client_token
100
95
  end
101
96
  end
102
97
  end
@@ -106,7 +101,7 @@ module ConfigurationService
106
101
  #
107
102
  # The configuration data and metadata is written to a Vault path composed from the configuration's
108
103
  # +identifier+ and metadata +revision+ by {ConfigurationService::Provider::PathHelper}.
109
- # That path is then written to another path, composed from +identifier and the string "latest".
104
+ # That path is then written to another path, composed from +identifier+ and the string "latest".
110
105
  #
111
106
  # This allows the current configuration to always be retrieved from a predictable path in Vault,
112
107
  # but preserves revision history of configuration.
@@ -132,7 +127,7 @@ module ConfigurationService
132
127
 
133
128
  adapt_exceptions do
134
129
  path = build_path(identifier, revision)
135
- @vault.logical.write(path, data: JSON.generate(data), metadata: JSON.generate(metadata), format: "json")
130
+ result = @vault.logical.write(path, data: JSON.generate(data), metadata: JSON.generate(metadata), format: "json")
136
131
  set_latest_revision(identifier, metadata["revision"])
137
132
  ConfigurationService::Configuration.new(identifier, data, metadata)
138
133
  end
@@ -141,6 +136,20 @@ module ConfigurationService
141
136
 
142
137
  private
143
138
 
139
+ def create_policies(identifiers = [])
140
+ adapt_exceptions do
141
+ identifiers.each { |identifier|
142
+ path = build_path(identifier, "*")
143
+ policy = <<-EOF
144
+ path "#{path}" {
145
+ policy = "read"
146
+ }
147
+ EOF
148
+ @vault.sys.put_policy(identifier, policy)
149
+ }
150
+ end
151
+ end
152
+
144
153
  # We explicitly disallow a nil token to defeat ::Vault::Client's default behaviour
145
154
  # of reading ENV['VAULT_TOKEN'] and ~/.vault-token, which makes testing harder.
146
155
  #
@@ -4,7 +4,7 @@ module ConfigurationService
4
4
 
5
5
  class Vault
6
6
 
7
- VERSION = "3.0.1"
7
+ VERSION = "3.1.0"
8
8
 
9
9
  end
10
10
 
@@ -1,5 +1,6 @@
1
1
  require "configuration_service/provider/vault"
2
2
  require "vault"
3
+ require "configuration_service/provider/vault/path_helper"
3
4
 
4
5
  module ConfigurationService
5
6
 
@@ -58,7 +59,29 @@ module ConfigurationService
58
59
  # @return [String] the token
59
60
  #
60
61
  def consumer_token(identifier)
61
- create_token_for(consumer_policy(identifier))
62
+ client = ConfigurationService::Factory.create_client({
63
+ "token" => @vault.token,
64
+ "provider_id" => "vault",
65
+ "provider_config" => {
66
+ "address" => @vault.address,
67
+ },
68
+ "decorators" => ["reference_resolver"],
69
+ })
70
+ client.authorize_consumption(identifier: identifier)
71
+ end
72
+
73
+ def latest_path(identifier)
74
+ ConfigurationService::Provider::Vault::PathHelper.path(identifier)
75
+ end
76
+
77
+ def get_latest_revision(identifier)
78
+ if response = @vault.logical.read(latest_path(identifier))
79
+ response.data[:revision]
80
+ end
81
+ end
82
+
83
+ def build_path(identifier, revision)
84
+ ConfigurationService::Provider::Vault::PathHelper.path(identifier, revision)
62
85
  end
63
86
 
64
87
  ##
@@ -66,16 +66,16 @@ module ConfigurationService
66
66
  #
67
67
  # @see http://localhost:8808/docs/ConfigurationService/Test/VaultOrchestrationProvider#token_for-instance_method ConfigurationService::Test::OrchestrationProvider#token_for
68
68
  #
69
- def credentials_for(role)
69
+ def credentials_for(role, identifier = @identifier)
70
70
  case role
71
71
  when :admin
72
- VaultAdminClient.new.admin_token()
72
+ VaultAdminClient.new.admin_token
73
73
  when :consumer
74
- VaultAdminClient.new.consumer_token(@identifier)
74
+ VaultAdminClient.new.consumer_token(identifier)
75
75
  when :publisher
76
- VaultAdminClient.new.publisher_token(@identifier)
76
+ VaultAdminClient.new.publisher_token(identifier)
77
77
  when :none
78
- VaultAdminClient.new.none_token(@identifier)
78
+ VaultAdminClient.new.none_token(identifier)
79
79
  else
80
80
  raise "unsupported role #{role}"
81
81
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: configuration_service-provider-vault
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.1
4
+ version: 3.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sheldon Hearn
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-08-24 00:00:00.000000000 Z
11
+ date: 2016-09-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: vault