Class: Clerk::JWKSCache
- Inherits:
-
Object
- Object
- Clerk::JWKSCache
- Defined in:
- lib/clerk/jwks_cache.rb
Instance Method Summary collapse
- #fetch(sdk, force_refresh: false, kid_not_found: false) ⇒ Object
-
#initialize(lifetime) ⇒ JWKSCache
constructor
A new instance of JWKSCache.
Constructor Details
#initialize(lifetime) ⇒ JWKSCache
Returns a new instance of JWKSCache.
8 9 10 11 12 13 |
# File 'lib/clerk/jwks_cache.rb', line 8 def initialize(lifetime) @lifetime = lifetime @jwks = nil @last_update = nil @lock = Concurrent::ReadWriteLock.new end |
Instance Method Details
#fetch(sdk, force_refresh: false, kid_not_found: false) ⇒ Object
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
# File 'lib/clerk/jwks_cache.rb', line 15 def fetch(sdk, force_refresh: false, kid_not_found: false) should_refresh = @lock.with_read_lock do now = Time.now.to_i @jwks.nil? || @last_update.nil? || force_refresh || (now - @last_update > @lifetime) || (kid_not_found && now - @last_update > 300) end if should_refresh @lock.with_write_lock do @last_update = Time.now.to_i @jwks = begin sdk.jwks.get_jwks.jwks.keys.map(&:to_dict) rescue Clerk::Error, Clerk::Models::Errors::APIError => _e nil end end end @lock.with_read_lock do @jwks end end |