Sha256: bb6ad78efa5bfc2f47c703eac820e5d8fc6b8a7e978a09e172c302452c6356e6

Contents?: true

Size: 723 Bytes

Versions: 17

Compression:

Stored size: 723 Bytes

Contents

class JWKSCache
  def initialize(lifetime)
    @lifetime = lifetime
    @jwks = nil
    @last_update = nil
    @lock = Concurrent::ReadWriteLock.new
  end

  def fetch(sdk, force_refresh: false, kid_not_found: false)
    should_refresh = @lock.with_read_lock do
      @jwks.nil? || @last_update.nil? || force_refresh ||
        (Time.now.to_i-@last_update > @lifetime) ||
        (kid_not_found && Time.now.to_i-@last_update > 300)
    end

    if should_refresh
      @lock.with_write_lock do
        @last_update = Time.now.to_i

        @jwks = begin
          sdk.jwks.all["keys"]
        rescue Clerk::Errors::Base
          nil
        end
      end
    end

    @lock.with_read_lock do
      @jwks
    end
  end
end

Version data entries

17 entries across 17 versions & 1 rubygems

Version Path
clerk-sdk-ruby-3.3.0 lib/clerk/jwks_cache.rb
clerk-sdk-ruby-3.3.0.beta1 lib/clerk/jwks_cache.rb
clerk-sdk-ruby-3.2.0 lib/clerk/jwks_cache.rb
clerk-sdk-ruby-4.0.0.beta3 lib/clerk/jwks_cache.rb
clerk-sdk-ruby-3.1.0 lib/clerk/jwks_cache.rb
clerk-sdk-ruby-3.1.0.rc.1 lib/clerk/jwks_cache.rb
clerk-sdk-ruby-4.0.0.beta2 lib/clerk/jwks_cache.rb
clerk-sdk-ruby-3.0.0 lib/clerk/jwks_cache.rb
clerk-sdk-ruby-2.11.1 lib/clerk/jwks_cache.rb
clerk-sdk-ruby-2.11.0 lib/clerk/jwks_cache.rb
clerk-sdk-ruby-2.10.0 lib/clerk/jwks_cache.rb
clerk-sdk-ruby-2.10.0.beta2 lib/clerk/jwks_cache.rb
clerk-sdk-ruby-2.10.0.beta1 lib/clerk/jwks_cache.rb
clerk-sdk-ruby-2.9.0 lib/clerk/jwks_cache.rb
clerk-sdk-ruby-2.9.0.beta3 lib/clerk/jwks_cache.rb
clerk-sdk-ruby-2.9.0.beta2 lib/clerk/jwks_cache.rb
clerk-sdk-ruby-2.9.0.beta1 lib/clerk/jwks_cache.rb