class Keratin::AuthN::FetchingKeychain

Public Class Methods

new(issuer:, ttl:) click to toggle source
# File lib/keratin/authn/fetching_keychain.rb, line 3
def initialize(issuer:, ttl:)
  @cache = LruRedux::TTL::ThreadSafeCache.new(25, ttl)
  @issuer = issuer.chomp('/')
end

Public Instance Methods

[](kid) click to toggle source
# File lib/keratin/authn/fetching_keychain.rb, line 8
def [](kid)
  @cache.getset(kid){ fetch(kid) }
end
clear() click to toggle source
# File lib/keratin/authn/fetching_keychain.rb, line 12
def clear
  @cache.clear
end

Private Instance Methods

fetch(kid) click to toggle source
# File lib/keratin/authn/fetching_keychain.rb, line 16
        def fetch(kid)
  keys = JSON::JWK::Set.new(
    JSON.parse(
      Net::HTTP.get(URI.parse("#{@issuer}/jwks"))
    )
  )
  keys.find{|k| k['use'] == 'sig' && (kid.blank? || kid == k['kid']) }
end