legion-crypt 1.5.1 → 1.5.2
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/CHANGELOG.md +5 -0
- data/lib/legion/crypt/lease_manager.rb +33 -11
- data/lib/legion/crypt/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 01cec7ac57c7d5448b5fba4237fdccc9ac8099966a4a546e95dd4888d838604f
|
|
4
|
+
data.tar.gz: ac81d602c9fc34493aeabe3fdeadd12f01fb36f8c248ac44687166fd24d9a48d
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: dea3247dbaf00a49507ededcfdd72e9e3545485cbcec511657d2e2c602e03f2230c3c34e93108ae14ede71aa7a768a36573c3f852595444f2f6ed118a351bd8c
|
|
7
|
+
data.tar.gz: 011ac0f235a69f7655ab1237d2a87faf3d343de20ef1ffe1e9576b5a555e9c0e5d46dfc6d77dd137851835850e3877783c70f62a216c3dd1a4af9c3e080e9ed6
|
data/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
require 'legion/logging/helper'
|
|
4
4
|
require 'singleton'
|
|
5
|
+
require 'timeout'
|
|
5
6
|
|
|
6
7
|
module Legion
|
|
7
8
|
module Crypt
|
|
@@ -45,16 +46,8 @@ module Legion
|
|
|
45
46
|
next
|
|
46
47
|
end
|
|
47
48
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
@active_leases[name] = {
|
|
51
|
-
lease_id: response.lease_id,
|
|
52
|
-
lease_duration: response.lease_duration,
|
|
53
|
-
renewable: response.renewable?,
|
|
54
|
-
expires_at: Time.now + (response.lease_duration || 0),
|
|
55
|
-
fetched_at: Time.now
|
|
56
|
-
}
|
|
57
|
-
end
|
|
49
|
+
log_lease_response(name, response)
|
|
50
|
+
cache_lease(name, response)
|
|
58
51
|
log.info("LeaseManager: fetched lease for '#{name}' from #{path}")
|
|
59
52
|
rescue StandardError => e
|
|
60
53
|
handle_exception(e, level: :warn, operation: 'crypt.lease_manager.start', lease_name: name, path: path)
|
|
@@ -164,13 +157,42 @@ module Legion
|
|
|
164
157
|
at_exit do
|
|
165
158
|
next if @state_mutex.synchronize { @active_leases.empty? }
|
|
166
159
|
|
|
167
|
-
shutdown
|
|
160
|
+
Timeout.timeout(10) { shutdown }
|
|
161
|
+
rescue Timeout::Error
|
|
162
|
+
warn '[LeaseManager] at_exit shutdown timed out after 10s'
|
|
168
163
|
rescue StandardError # best effort on crash
|
|
169
164
|
nil
|
|
170
165
|
end
|
|
171
166
|
@at_exit_registered = true
|
|
172
167
|
end
|
|
173
168
|
|
|
169
|
+
def cache_lease(name, response)
|
|
170
|
+
@state_mutex.synchronize do
|
|
171
|
+
@lease_cache[name] = response.data || {}
|
|
172
|
+
@active_leases[name] = {
|
|
173
|
+
lease_id: response.lease_id,
|
|
174
|
+
lease_duration: response.lease_duration,
|
|
175
|
+
renewable: response.renewable?,
|
|
176
|
+
expires_at: Time.now + (response.lease_duration || 0),
|
|
177
|
+
fetched_at: Time.now
|
|
178
|
+
}
|
|
179
|
+
end
|
|
180
|
+
end
|
|
181
|
+
|
|
182
|
+
def log_lease_response(name, response)
|
|
183
|
+
data_keys = response.data&.keys&.map(&:to_s) || []
|
|
184
|
+
log.debug("LeaseManager[#{name}]: lease_id=#{response.lease_id}, " \
|
|
185
|
+
"lease_duration=#{response.lease_duration}s, " \
|
|
186
|
+
"renewable=#{response.renewable?}, " \
|
|
187
|
+
"data_keys=#{data_keys.inspect}")
|
|
188
|
+
return unless response.data&.key?(:username)
|
|
189
|
+
|
|
190
|
+
log.debug("LeaseManager[#{name}]: username=#{response.data[:username]}, " \
|
|
191
|
+
"password_length=#{response.data[:password]&.length || 0}, " \
|
|
192
|
+
"vhost=#{response.data[:vhost] || 'N/A'}, " \
|
|
193
|
+
"tags=#{response.data[:tags] || 'N/A'}")
|
|
194
|
+
end
|
|
195
|
+
|
|
174
196
|
def logical
|
|
175
197
|
client = @state_mutex.synchronize { @vault_client }
|
|
176
198
|
client ? client.logical : ::Vault.logical
|
data/lib/legion/crypt/version.rb
CHANGED