settings_reader-vault_resolver 0.4.4 → 0.4.5

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
  SHA256:
3
- metadata.gz: 5135f50633e103f09f6f30bf956295fc9290a6b75dfd7864e0296ecc9f467f35
4
- data.tar.gz: d80b42374412c4053538af7e2ba9a984f0f53219fed76aa440a1a35494167b33
3
+ metadata.gz: 06c1605f97de84c90b6ec0e9c82ba9bfbbe3bd66fa7e1b0e7ef84f576264e581
4
+ data.tar.gz: 546fc50b041e31d4cdd67850eda46b6047c17fb014bb782ffade8e321071e0a0
5
5
  SHA512:
6
- metadata.gz: 57f47f6d9d9cbea621fa523560129021ceb70c5c9b4175f34f367387bfc76992cae6f5761fb11d36a04bf3111ff156b2ea7c4d7c69703b0256be14e51c973849
7
- data.tar.gz: 9789a9fe5ac8bfebb040eae0998d977806daaed20b05a35655d77cf8615aeab6f1023e933ff59c71dd3ce79061f8675f09e8da97d079c02b1b1d95377905e536
6
+ metadata.gz: 670cebdbec3ebaf40595ccf60d8e9cd749559e0141a395fe87655d684b406d223fd7e9939faa42dd6e5ae1588b688d04a0d4c7d3960bc56b964f8e1a6faa4bdc
7
+ data.tar.gz: af74dd636a40ba907f8df0fd094b0a1537e4ce4fd9f959efce3b413a0b036c6e35ce892ae67af82e4a493a575086fea4d3c37ebc28df5f44d83e1ebcd3f39742
@@ -36,6 +36,10 @@ module SettingsReader
36
36
  @secrets.each_value(&block)
37
37
  end
38
38
 
39
+ def active_entries(&block)
40
+ @secrets.values.select(&:active?).each(&block)
41
+ end
42
+
39
43
  def clear_all
40
44
  @secrets = {}
41
45
  end
@@ -34,6 +34,10 @@ module SettingsReader
34
34
  # Default: empty proc
35
35
  attr_accessor :vault_initializer
36
36
 
37
+ # Block to be executed when "lease not found" error is raised
38
+ # Default: empty proc
39
+ attr_accessor :lease_not_found_handler
40
+
37
41
  def initialize
38
42
  @logger = Logger.new($stdout, level: Logger::ERROR)
39
43
  @retrieval_retries = 2
@@ -43,6 +47,7 @@ module SettingsReader
43
47
  @lease_renew_error_listener = -> {}
44
48
  @lease_renew_success_listener = -> {}
45
49
  @vault_initializer = -> {}
50
+ @lease_not_found_handler = ->(_entry) {}
46
51
  end
47
52
 
48
53
  def setup_lease_refresher(cache, previous_task = nil)
@@ -29,8 +29,6 @@ module SettingsReader
29
29
  new_secret = renew_and_retry_auth(entry)
30
30
  entry.update_renewed(new_secret)
31
31
  true
32
- rescue Vault::VaultError => e
33
- raise SettingsReader::VaultResolver::Error, e.message
34
32
  end
35
33
 
36
34
  protected
@@ -50,18 +48,18 @@ module SettingsReader
50
48
  end
51
49
  end
52
50
 
53
- def renew_and_retry_auth(address)
54
- renew_and_retry_connection(address)
51
+ def renew_and_retry_auth(entry)
52
+ renew_and_retry_connection(entry)
55
53
  rescue Vault::HTTPError => e # if not authenticated, let's reauthenticate and try once more
56
54
  raise unless auth_error?(e)
57
55
 
58
56
  config.vault_initializer.call
59
- renew_and_retry_connection(address)
57
+ renew_and_retry_connection(entry)
60
58
  end
61
59
 
62
- def renew_and_retry_connection(address)
60
+ def renew_and_retry_connection(entry)
63
61
  Vault.with_retries(Vault::HTTPConnectionError, attempts: config.lease_renew_retries) do
64
- renew_lease(address)
62
+ renew_lease(entry)
65
63
  end
66
64
  end
67
65
 
@@ -23,6 +23,10 @@ module SettingsReader
23
23
  Time.now > @lease_started + lease_duration
24
24
  end
25
25
 
26
+ def active?
27
+ !expired?
28
+ end
29
+
26
30
  def expires_in
27
31
  return MONTH unless leased?
28
32
 
@@ -18,7 +18,7 @@ module SettingsReader
18
18
 
19
19
  def refresh
20
20
  info { 'Performing Vault leases refresh' }
21
- promises = cache.entries.map do |entry|
21
+ promises = cache.active_entries.map do |entry|
22
22
  debug { "Checking lease for #{entry}. Leased?: #{entry.leased?}. Expires in: #{entry.expires_in}s" }
23
23
  refresh_entry(entry)
24
24
  end.compact
@@ -35,10 +35,27 @@ module SettingsReader
35
35
  info { "Lease renewed for #{entry}. Expires in: #{entry.expires_in}" }
36
36
  entry
37
37
  rescue StandardError => e
38
- error { "Error refreshing lease for #{entry}: #{e.message}" }
39
- raise SettingsReader::VaultResolver::Error, e.message
38
+ handle_refresh_error(e, entry)
40
39
  end
41
40
  end
41
+
42
+ private
43
+
44
+ def handle_refresh_error(error, entry)
45
+ handle_lease_not_found(entry) if lease_not_found_error?(error)
46
+
47
+ error { "Error refreshing lease for #{entry}: #{error.message}" }
48
+ raise SettingsReader::VaultResolver::Error, error.message
49
+ end
50
+
51
+ def lease_not_found_error?(error)
52
+ error.is_a?(Vault::HTTPClientError) && error.code == 400 && error.message =~ /lease not found/
53
+ end
54
+
55
+ def handle_lease_not_found(entry)
56
+ cache.clear(entry)
57
+ config.lease_not_found_handler.call(entry)
58
+ end
42
59
  end
43
60
  end
44
61
  end
@@ -1,5 +1,5 @@
1
1
  module SettingsReader
2
2
  module VaultResolver
3
- VERSION = '0.4.4'.freeze
3
+ VERSION = '0.4.5'.freeze
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: settings_reader-vault_resolver
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.4
4
+ version: 0.4.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Volodymyr Mykhailyk
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-09-19 00:00:00.000000000 Z
11
+ date: 2022-09-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: concurrent-ruby