vault 0.6.0 → 0.7.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 +4 -4
- data/.travis.yml +1 -2
- data/CHANGELOG.md +17 -1
- data/lib/vault/api.rb +1 -0
- data/lib/vault/api/approle.rb +218 -0
- data/lib/vault/api/auth.rb +26 -2
- data/lib/vault/api/auth_tls.rb +3 -3
- data/lib/vault/api/auth_token.rb +2 -2
- data/lib/vault/api/help.rb +1 -1
- data/lib/vault/api/logical.rb +4 -4
- data/lib/vault/api/sys/audit.rb +2 -2
- data/lib/vault/api/sys/auth.rb +51 -2
- data/lib/vault/api/sys/leader.rb +5 -0
- data/lib/vault/api/sys/mount.rb +3 -3
- data/lib/vault/api/sys/policy.rb +3 -3
- data/lib/vault/client.rb +92 -74
- data/lib/vault/configurable.rb +1 -0
- data/lib/vault/defaults.rb +7 -1
- data/lib/vault/encode.rb +19 -0
- data/lib/vault/request.rb +2 -0
- data/lib/vault/vendor/connection_pool.rb +150 -0
- data/lib/vault/vendor/connection_pool/timed_stack.rb +178 -0
- data/lib/vault/vendor/connection_pool/version.rb +5 -0
- data/lib/vault/vendor/net/http/persistent.rb +1154 -0
- data/lib/vault/vendor/net/http/persistent/connection.rb +42 -0
- data/lib/vault/vendor/net/http/persistent/pool.rb +48 -0
- data/lib/vault/vendor/net/http/persistent/timed_stack_multi.rb +70 -0
- data/lib/vault/version.rb +1 -1
- metadata +12 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 59a8ecc9e18c8112104e721f65e10cd56377803c
|
4
|
+
data.tar.gz: 28937a7a2360736b70cbae0f53c7103659a6ade0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 91b7a092f7dc019da3b410c744351686f146bd8c72d57f1a096f20e107df19ec9ef34b36125131d993d8539899713cdd014cfc98ac6b7e69a1f64729f1f982fb
|
7
|
+
data.tar.gz: 292bfa0003747c1e02cbe6ab3332e6a05b449db6d4f812d440864927f7c4f3b3dcd6ace36adc7574e9ac9849a32091c43d0b236765ed03e70c178a266677d961
|
data/.travis.yml
CHANGED
@@ -3,11 +3,10 @@ cache: bundler
|
|
3
3
|
sudo: false
|
4
4
|
|
5
5
|
env:
|
6
|
+
- VAULT_VERSION=0.6.2
|
6
7
|
- VAULT_VERSION=0.6.1
|
7
8
|
- VAULT_VERSION=0.6.0
|
8
9
|
- VAULT_VERSION=0.5.3
|
9
|
-
- VAULT_VERSION=0.4.1
|
10
|
-
- VAULT_VERSION=0.3.1
|
11
10
|
|
12
11
|
before_install:
|
13
12
|
- wget -O vault.zip -q https://releases.hashicorp.com/vault/${VAULT_VERSION}/vault_${VAULT_VERSION}_linux_amd64.zip
|
data/CHANGELOG.md
CHANGED
@@ -1,6 +1,22 @@
|
|
1
1
|
# Vault Ruby Changelog
|
2
2
|
|
3
|
-
## v0.
|
3
|
+
## v0.7.0 (October 18, 2016)
|
4
|
+
|
5
|
+
DEPRECATIONS
|
6
|
+
|
7
|
+
- Vault versions older than 0.5.3 are no longer tested
|
8
|
+
|
9
|
+
NEW FEATURES
|
10
|
+
|
11
|
+
- Add support for AppRole
|
12
|
+
- Expose the auth/tune API
|
13
|
+
- Add support for leader step down
|
14
|
+
- Use persistent connections to Vault to speed up requests
|
15
|
+
- Add support for a custom ssl certificate store
|
16
|
+
|
17
|
+
BUG FIXES
|
18
|
+
|
19
|
+
- Allow for spaces in secret names properly
|
4
20
|
|
5
21
|
## v0.6.0 (August 30, 2016)
|
6
22
|
|
data/lib/vault/api.rb
CHANGED
@@ -0,0 +1,218 @@
|
|
1
|
+
require "json"
|
2
|
+
|
3
|
+
require_relative "secret"
|
4
|
+
require_relative "../client"
|
5
|
+
require_relative "../request"
|
6
|
+
require_relative "../response"
|
7
|
+
|
8
|
+
module Vault
|
9
|
+
class Client
|
10
|
+
# A proxy to the {AppRole} methods.
|
11
|
+
# @return [AppRole]
|
12
|
+
def approle
|
13
|
+
@approle ||= AppRole.new(self)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
class AppRole < Request
|
18
|
+
# Creates a new AppRole or update an existing AppRole with the given name
|
19
|
+
# and attributes.
|
20
|
+
#
|
21
|
+
# @example
|
22
|
+
# Vault.approle.set_role("testrole", {
|
23
|
+
# secret_id_ttl: "10m",
|
24
|
+
# token_ttl: "20m",
|
25
|
+
# policies: "default",
|
26
|
+
# period: 3600,
|
27
|
+
# }) #=> true
|
28
|
+
#
|
29
|
+
# @param [String] name
|
30
|
+
# The name of the AppRole
|
31
|
+
# @param [Hash] options
|
32
|
+
# @option options [Boolean] :bind_secret_id
|
33
|
+
# Require secret_id to be presented when logging in using this AppRole.
|
34
|
+
# @option options [String] :bound_cidr_list
|
35
|
+
# Comma-separated list of CIDR blocks. Specifies blocks of IP addresses
|
36
|
+
# which can perform the login operation.
|
37
|
+
# @option options [String] :policies
|
38
|
+
# Comma-separated list of policies set on tokens issued via this AppRole.
|
39
|
+
# @option options [String] :secret_id_num_uses
|
40
|
+
# Number of times any particular SecretID can be used to fetch a token
|
41
|
+
# from this AppRole, after which the SecretID will expire.
|
42
|
+
# @option options [Fixnum, String] :secret_id_ttl
|
43
|
+
# The number of seconds or a golang-formatted timestamp like "60m" after
|
44
|
+
# which any SecretID expires.
|
45
|
+
# @option options [Fixnum, String] :token_ttl
|
46
|
+
# The number of seconds or a golang-formatted timestamp like "60m" to set
|
47
|
+
# as the TTL for issued tokens and at renewal time.
|
48
|
+
# @option options [Fixnum, String] :token_max_ttl
|
49
|
+
# The number of seconds or a golang-formatted timestamp like "60m" after
|
50
|
+
# which the issued token can no longer be renewed.
|
51
|
+
# @option options [Fixnum, String] :period
|
52
|
+
# The number of seconds or a golang-formatted timestamp like "60m".
|
53
|
+
# If set, the token generated using this AppRole is a periodic token.
|
54
|
+
# So long as it is renewed it never expires, but the TTL set on the token
|
55
|
+
# at each renewal is fixed to the value specified here. If this value is
|
56
|
+
# modified, the token will pick up the new value at its next renewal.
|
57
|
+
#
|
58
|
+
# @return [true]
|
59
|
+
def set_role(name, options = {})
|
60
|
+
headers = extract_headers!(options)
|
61
|
+
client.post("/v1/auth/approle/role/#{encode_path(name)}", JSON.fast_generate(options), headers)
|
62
|
+
return true
|
63
|
+
end
|
64
|
+
|
65
|
+
# Gets the AppRole by the given name. If an AppRole does not exist by that
|
66
|
+
# name, +nil+ is returned.
|
67
|
+
#
|
68
|
+
# @example
|
69
|
+
# Vault.approle.role("testrole") #=> #<Vault::Secret lease_id="...">
|
70
|
+
#
|
71
|
+
# @return [Secret, nil]
|
72
|
+
def role(name)
|
73
|
+
json = client.get("/v1/auth/approle/role/#{encode_path(name)}")
|
74
|
+
return Secret.decode(json)
|
75
|
+
rescue HTTPError => e
|
76
|
+
return nil if e.code == 404
|
77
|
+
raise
|
78
|
+
end
|
79
|
+
|
80
|
+
# Gets the list of AppRoles in vault auth backend.
|
81
|
+
#
|
82
|
+
# @example
|
83
|
+
# Vault.approle.roles #=> ["testrole"]
|
84
|
+
#
|
85
|
+
# @return [Array<String>]
|
86
|
+
def roles(options = {})
|
87
|
+
headers = extract_headers!(options)
|
88
|
+
json = client.list("/v1/auth/approle/role", options, headers)
|
89
|
+
return Secret.decode(json).data[:keys] || []
|
90
|
+
rescue HTTPError => e
|
91
|
+
return [] if e.code == 404
|
92
|
+
raise
|
93
|
+
end
|
94
|
+
|
95
|
+
# Reads the RoleID of an existing AppRole. If an AppRole does not exist by
|
96
|
+
# that name, +nil+ is returned.
|
97
|
+
#
|
98
|
+
# @example
|
99
|
+
# Vault.approle.role_id("testrole") #=> #<Vault::Secret lease_id="...">
|
100
|
+
#
|
101
|
+
# @return [Secret, nil]
|
102
|
+
def role_id(name)
|
103
|
+
json = client.get("/v1/auth/approle/role/#{encode_path(name)}/role-id")
|
104
|
+
return Secret.decode(json).data[:role_id]
|
105
|
+
rescue HTTPError => e
|
106
|
+
return nil if e.code == 404
|
107
|
+
raise
|
108
|
+
end
|
109
|
+
|
110
|
+
# Updates the RoleID of an existing AppRole to a custom value.
|
111
|
+
#
|
112
|
+
# @example
|
113
|
+
# Vault.approle.set_role_id("testrole") #=> true
|
114
|
+
#
|
115
|
+
# @return [true]
|
116
|
+
def set_role_id(name, role_id)
|
117
|
+
options = { role_id: role_id }
|
118
|
+
client.post("/v1/auth/approle/role/#{encode_path(name)}/role-id", JSON.fast_generate(options))
|
119
|
+
return true
|
120
|
+
end
|
121
|
+
|
122
|
+
# Deletes the AppRole with the given name. If an AppRole does not exist,
|
123
|
+
# vault will not return an error.
|
124
|
+
#
|
125
|
+
# @example
|
126
|
+
# Vault.approle.delete_role("testrole") #=> true
|
127
|
+
#
|
128
|
+
# @param [String] name
|
129
|
+
# the name of the certificate
|
130
|
+
def delete_role(name)
|
131
|
+
client.delete("/v1/auth/approle/role/#{encode_path(name)}")
|
132
|
+
return true
|
133
|
+
end
|
134
|
+
|
135
|
+
# Generates and issues a new SecretID on an existing AppRole.
|
136
|
+
#
|
137
|
+
# @example Generate a new SecretID
|
138
|
+
# result = Vault.approle.create_secret_id("testrole") #=> #<Vault::Secret lease_id="...">
|
139
|
+
# result.data[:secret_id] #=> "841771dc-11c9-bbc7-bcac-6a3945a69cd9"
|
140
|
+
#
|
141
|
+
# @example Assign a custom SecretID
|
142
|
+
# result = Vault.approle.create_secret_id("testrole", {
|
143
|
+
# secret_id: "testsecretid"
|
144
|
+
# }) #=> #<Vault::Secret lease_id="...">
|
145
|
+
# result.data[:secret_id] #=> "testsecretid"
|
146
|
+
#
|
147
|
+
# @param [String] role_name
|
148
|
+
# The name of the AppRole
|
149
|
+
# @param [Hash] options
|
150
|
+
# @option options [String] :secret_id
|
151
|
+
# SecretID to be attached to the Role. If not set, then the new SecretID
|
152
|
+
# will be generated
|
153
|
+
# @option options [Hash<String, String>] :metadata
|
154
|
+
# Metadata to be tied to the SecretID. This should be a JSON-formatted
|
155
|
+
# string containing the metadata in key-value pairs. It will be set on
|
156
|
+
# tokens issued with this SecretID, and is logged in audit logs in
|
157
|
+
# plaintext.
|
158
|
+
#
|
159
|
+
# @return [true]
|
160
|
+
def create_secret_id(role_name, options = {})
|
161
|
+
headers = extract_headers!(options)
|
162
|
+
if options[:secret_id]
|
163
|
+
json = client.post("/v1/auth/approle/role/#{encode_path(role_name)}/custom-secret-id", JSON.fast_generate(options), headers)
|
164
|
+
else
|
165
|
+
json = client.post("/v1/auth/approle/role/#{encode_path(role_name)}/secret-id", JSON.fast_generate(options), headers)
|
166
|
+
end
|
167
|
+
return Secret.decode(json)
|
168
|
+
end
|
169
|
+
|
170
|
+
# Reads out the properties of a SecretID assigned to an AppRole.
|
171
|
+
# If the specified SecretID don't exist, +nil+ is returned.
|
172
|
+
#
|
173
|
+
# @example
|
174
|
+
# Vault.approle.role("testrole", "841771dc-11c9-...") #=> #<Vault::Secret lease_id="...">
|
175
|
+
#
|
176
|
+
# @param [String] role_name
|
177
|
+
# The name of the AppRole
|
178
|
+
# @param [String] secret_id
|
179
|
+
# SecretID belonging to AppRole
|
180
|
+
#
|
181
|
+
# @return [Secret, nil]
|
182
|
+
def secret_id(role_name, secret_id)
|
183
|
+
opts = { secret_id: secret_id }
|
184
|
+
json = client.post("/v1/auth/approle/role/#{encode_path(role_name)}/secret-id/lookup", JSON.fast_generate(opts), {})
|
185
|
+
return nil unless json
|
186
|
+
return Secret.decode(json)
|
187
|
+
rescue HTTPError => e
|
188
|
+
if e.code == 404 || e.code == 405
|
189
|
+
begin
|
190
|
+
json = client.get("/v1/auth/approle/role/#{encode_path(role_name)}/secret-id/#{encode_path(secret_id)}")
|
191
|
+
return Secret.decode(json)
|
192
|
+
rescue HTTPError => e
|
193
|
+
return nil if e.code == 404
|
194
|
+
raise e
|
195
|
+
end
|
196
|
+
end
|
197
|
+
|
198
|
+
raise
|
199
|
+
end
|
200
|
+
|
201
|
+
# Lists the accessors of all the SecretIDs issued against the AppRole.
|
202
|
+
# This includes the accessors for "custom" SecretIDs as well. If there are
|
203
|
+
# no SecretIDs against this role, an empty array will be returned.
|
204
|
+
#
|
205
|
+
# @example
|
206
|
+
# Vault.approle.secret_ids("testrole") #=> ["ce102d2a-...", "a1c8dee4-..."]
|
207
|
+
#
|
208
|
+
# @return [Array<String>]
|
209
|
+
def secret_id_accessors(role_name, options = {})
|
210
|
+
headers = extract_headers!(options)
|
211
|
+
json = client.list("/v1/auth/approle/role/#{encode_path(role_name)}/secret-id", options, headers)
|
212
|
+
return Secret.decode(json).data[:keys] || []
|
213
|
+
rescue HTTPError => e
|
214
|
+
return [] if e.code == 404
|
215
|
+
raise
|
216
|
+
end
|
217
|
+
end
|
218
|
+
end
|
data/lib/vault/api/auth.rb
CHANGED
@@ -74,6 +74,30 @@ module Vault
|
|
74
74
|
return secret
|
75
75
|
end
|
76
76
|
|
77
|
+
# Authenticate via the "approle" authentication method. If authentication is
|
78
|
+
# successful, the resulting token will be stored on the client and used for
|
79
|
+
# future requests.
|
80
|
+
#
|
81
|
+
# @example
|
82
|
+
# Vault.auth.approle(
|
83
|
+
# "db02de05-fa39-4855-059b-67221c5c2f63",
|
84
|
+
# "6a174c20-f6de-a53c-74d2-6018fcceff64",
|
85
|
+
# ) #=> #<Vault::Secret lease_id="">
|
86
|
+
#
|
87
|
+
# @param [String] role_id
|
88
|
+
# @param [String] secret_id (default: nil)
|
89
|
+
# It is required when `bind_secret_id` is enabled for the specified role_id
|
90
|
+
#
|
91
|
+
# @return [Secret]
|
92
|
+
def approle(role_id, secret_id=nil)
|
93
|
+
payload = { role_id: role_id }
|
94
|
+
payload[:secret_id] = secret_id if secret_id
|
95
|
+
json = client.post("/v1/auth/approle/login", JSON.fast_generate(payload))
|
96
|
+
secret = Secret.decode(json)
|
97
|
+
client.token = secret.auth.client_token
|
98
|
+
return secret
|
99
|
+
end
|
100
|
+
|
77
101
|
# Authenticate via the "userpass" authentication method. If authentication
|
78
102
|
# is successful, the resulting token will be stored on the client and used
|
79
103
|
# for future requests.
|
@@ -93,7 +117,7 @@ module Vault
|
|
93
117
|
# @return [Secret]
|
94
118
|
def userpass(username, password, options = {})
|
95
119
|
payload = { password: password }.merge(options)
|
96
|
-
json = client.post("/v1/auth/userpass/login/#{
|
120
|
+
json = client.post("/v1/auth/userpass/login/#{encode_path(username)}", JSON.fast_generate(payload))
|
97
121
|
secret = Secret.decode(json)
|
98
122
|
client.token = secret.auth.client_token
|
99
123
|
return secret
|
@@ -115,7 +139,7 @@ module Vault
|
|
115
139
|
# @return [Secret]
|
116
140
|
def ldap(username, password, options = {})
|
117
141
|
payload = { password: password }.merge(options)
|
118
|
-
json = client.post("/v1/auth/ldap/login/#{
|
142
|
+
json = client.post("/v1/auth/ldap/login/#{encode_path(username)}", JSON.fast_generate(payload))
|
119
143
|
secret = Secret.decode(json)
|
120
144
|
client.token = secret.auth.client_token
|
121
145
|
return secret
|
data/lib/vault/api/auth_tls.rb
CHANGED
@@ -42,7 +42,7 @@ module Vault
|
|
42
42
|
# @return [true]
|
43
43
|
def set_certificate(name, options = {})
|
44
44
|
headers = extract_headers!(options)
|
45
|
-
client.post("/v1/auth/cert/certs/#{
|
45
|
+
client.post("/v1/auth/cert/certs/#{encode_path(name)}", JSON.fast_generate(options), headers)
|
46
46
|
return true
|
47
47
|
end
|
48
48
|
|
@@ -54,7 +54,7 @@ module Vault
|
|
54
54
|
#
|
55
55
|
# @return [Secret, nil]
|
56
56
|
def certificate(name)
|
57
|
-
json = client.get("/v1/auth/cert/certs/#{
|
57
|
+
json = client.get("/v1/auth/cert/certs/#{encode_path(name)}")
|
58
58
|
return Secret.decode(json)
|
59
59
|
rescue HTTPError => e
|
60
60
|
return nil if e.code == 404
|
@@ -85,7 +85,7 @@ module Vault
|
|
85
85
|
# @param [String] name
|
86
86
|
# the name of the certificate
|
87
87
|
def delete_certificate(name)
|
88
|
-
client.delete("/v1/auth/cert/certs/#{
|
88
|
+
client.delete("/v1/auth/cert/certs/#{encode_path(name)}")
|
89
89
|
return true
|
90
90
|
end
|
91
91
|
end
|
data/lib/vault/api/auth_token.rb
CHANGED
@@ -95,7 +95,7 @@ module Vault
|
|
95
95
|
# @return [Secret]
|
96
96
|
def create_with_role(name, options = {})
|
97
97
|
headers = extract_headers!(options)
|
98
|
-
json = client.post("/v1/auth/token/create/#{
|
98
|
+
json = client.post("/v1/auth/token/create/#{encode_path(name)}", JSON.fast_generate(options), headers)
|
99
99
|
return Secret.decode(json)
|
100
100
|
end
|
101
101
|
|
@@ -108,7 +108,7 @@ module Vault
|
|
108
108
|
#
|
109
109
|
# @return [Secret]
|
110
110
|
def lookup(token)
|
111
|
-
json = client.get("/v1/auth/token/lookup/#{
|
111
|
+
json = client.get("/v1/auth/token/lookup/#{encode_path(token)}")
|
112
112
|
return Secret.decode(json)
|
113
113
|
end
|
114
114
|
|
data/lib/vault/api/help.rb
CHANGED
data/lib/vault/api/logical.rb
CHANGED
@@ -25,7 +25,7 @@ module Vault
|
|
25
25
|
# @return [Array<String>]
|
26
26
|
def list(path, options = {})
|
27
27
|
headers = extract_headers!(options)
|
28
|
-
json = client.list("/v1/#{
|
28
|
+
json = client.list("/v1/#{encode_path(path)}", {}, headers)
|
29
29
|
json[:data][:keys] || []
|
30
30
|
rescue HTTPError => e
|
31
31
|
return [] if e.code == 404
|
@@ -44,7 +44,7 @@ module Vault
|
|
44
44
|
# @return [Secret, nil]
|
45
45
|
def read(path, options = {})
|
46
46
|
headers = extract_headers!(options)
|
47
|
-
json = client.get("/v1/#{
|
47
|
+
json = client.get("/v1/#{encode_path(path)}", {}, headers)
|
48
48
|
return Secret.decode(json)
|
49
49
|
rescue HTTPError => e
|
50
50
|
return nil if e.code == 404
|
@@ -65,7 +65,7 @@ module Vault
|
|
65
65
|
# @return [Secret]
|
66
66
|
def write(path, data = {}, options = {})
|
67
67
|
headers = extract_headers!(options)
|
68
|
-
json = client.put("/v1/#{
|
68
|
+
json = client.put("/v1/#{encode_path(path)}", JSON.fast_generate(data), headers)
|
69
69
|
if json.nil?
|
70
70
|
return true
|
71
71
|
else
|
@@ -84,7 +84,7 @@ module Vault
|
|
84
84
|
#
|
85
85
|
# @return [true]
|
86
86
|
def delete(path)
|
87
|
-
client.delete("/v1/#{
|
87
|
+
client.delete("/v1/#{encode_path(path)}")
|
88
88
|
return true
|
89
89
|
end
|
90
90
|
|
data/lib/vault/api/sys/audit.rb
CHANGED
@@ -51,7 +51,7 @@ module Vault
|
|
51
51
|
#
|
52
52
|
# @return [true]
|
53
53
|
def enable_audit(path, type, description, options = {})
|
54
|
-
client.put("/v1/sys/audit/#{
|
54
|
+
client.put("/v1/sys/audit/#{encode_path(path)}", JSON.fast_generate(
|
55
55
|
type: type,
|
56
56
|
description: description,
|
57
57
|
options: options,
|
@@ -67,7 +67,7 @@ module Vault
|
|
67
67
|
#
|
68
68
|
# @return [true]
|
69
69
|
def disable_audit(path)
|
70
|
-
client.delete("/v1/sys/audit/#{
|
70
|
+
client.delete("/v1/sys/audit/#{encode_path(path)}")
|
71
71
|
return true
|
72
72
|
end
|
73
73
|
end
|
data/lib/vault/api/sys/auth.rb
CHANGED
@@ -13,6 +13,18 @@ module Vault
|
|
13
13
|
field :type
|
14
14
|
end
|
15
15
|
|
16
|
+
class AuthConfig < Response
|
17
|
+
# @!attribute [r] default_lease_ttl
|
18
|
+
# The default time-to-live.
|
19
|
+
# @return [String]
|
20
|
+
field :default_lease_ttl
|
21
|
+
|
22
|
+
# @!attribute [r] max_lease_ttl
|
23
|
+
# The maximum time-to-live.
|
24
|
+
# @return [String]
|
25
|
+
field :max_lease_ttl
|
26
|
+
end
|
27
|
+
|
16
28
|
class Sys
|
17
29
|
# List all auths in Vault.
|
18
30
|
#
|
@@ -45,7 +57,7 @@ module Vault
|
|
45
57
|
payload = { type: type }
|
46
58
|
payload[:description] = description if !description.nil?
|
47
59
|
|
48
|
-
client.post("/v1/sys/auth/#{
|
60
|
+
client.post("/v1/sys/auth/#{encode_path(path)}", JSON.fast_generate(payload))
|
49
61
|
return true
|
50
62
|
end
|
51
63
|
|
@@ -60,8 +72,45 @@ module Vault
|
|
60
72
|
#
|
61
73
|
# @return [true]
|
62
74
|
def disable_auth(path)
|
63
|
-
client.delete("/v1/sys/auth/#{
|
75
|
+
client.delete("/v1/sys/auth/#{encode_path(path)}")
|
64
76
|
return true
|
65
77
|
end
|
78
|
+
|
79
|
+
# Read the given auth path's configuration.
|
80
|
+
#
|
81
|
+
# @example
|
82
|
+
# Vault.sys.auth_tune("github") #=> #<Vault::AuthConfig "default_lease_ttl"=3600, "max_lease_ttl"=7200>
|
83
|
+
#
|
84
|
+
# @param [String] path
|
85
|
+
# the path to retrieve configuration for
|
86
|
+
#
|
87
|
+
# @return [AuthConfig]
|
88
|
+
# configuration of the given auth path
|
89
|
+
def auth_tune(path)
|
90
|
+
json = client.get("/v1/sys/auth/#{encode_path(path)}/tune")
|
91
|
+
return AuthConfig.decode(json)
|
92
|
+
rescue HTTPError => e
|
93
|
+
return nil if e.code == 404
|
94
|
+
raise
|
95
|
+
end
|
96
|
+
|
97
|
+
# Write the given auth path's configuration.
|
98
|
+
#
|
99
|
+
# @example
|
100
|
+
# Vault.sys.auth_tune("github", "default_lease_ttl" => 600, "max_lease_ttl" => 1200 ) #=> true
|
101
|
+
#
|
102
|
+
# @param [String] path
|
103
|
+
# the path to retrieve configuration for
|
104
|
+
#
|
105
|
+
# @return [AuthConfig]
|
106
|
+
# configuration of the given auth path
|
107
|
+
def put_auth_tune(path, config = {})
|
108
|
+
json = client.put("/v1/sys/auth/#{encode_path(path)}/tune", JSON.fast_generate(config))
|
109
|
+
if json.nil?
|
110
|
+
return true
|
111
|
+
else
|
112
|
+
return Secret.decode(json)
|
113
|
+
end
|
114
|
+
end
|
66
115
|
end
|
67
116
|
end
|