Module: JSON::JWK::Set::Fetcher

Defined in:
lib/json/jwk/set/fetcher.rb,
lib/json/jwk/set/fetcher/debugger/request_filter.rb

Defined Under Namespace

Modules: Debugger Classes: Cache

Class Method Summary collapse

Class Method Details

.cacheObject



58
59
60
# File 'lib/json/jwk/set/fetcher.rb', line 58

def self.cache
  @@cache
end

.cache=(cache) ⇒ Object



55
56
57
# File 'lib/json/jwk/set/fetcher.rb', line 55

def self.cache=(cache)
  @@cache = cache
end

.debug(&block) ⇒ Object



29
30
31
32
33
34
35
# File 'lib/json/jwk/set/fetcher.rb', line 29

def self.debug(&block)
  original = self.debugging?
  debug!
  yield
ensure
  self.debugging = original
end

.debug!Object



26
27
28
# File 'lib/json/jwk/set/fetcher.rb', line 26

def self.debug!
  self.debugging = true
end

.debugging=(boolean) ⇒ Object



23
24
25
# File 'lib/json/jwk/set/fetcher.rb', line 23

def self.debugging=(boolean)
  @@debugging = boolean
end

.debugging?Boolean

Returns:

  • (Boolean)


20
21
22
# File 'lib/json/jwk/set/fetcher.rb', line 20

def self.debugging?
  @@debugging
end

.fetch(jwks_uri, kid:, auto_detect: true, **options) ⇒ Object



63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
# File 'lib/json/jwk/set/fetcher.rb', line 63

def self.fetch(jwks_uri, kid:, auto_detect: true, **options)
  cache_key = [
    'json:jwk:set',
    OpenSSL::Digest::MD5.hexdigest(jwks_uri),
    kid
  ].collect(&:to_s).join(':')

  jwks = Set.new(
    JSON.parse(
      cache.fetch(cache_key, options) do
        http_client.get_content(jwks_uri)
      end
    )
  )

  if auto_detect
    jwks[kid] or raise KidNotFound
  else
    jwks
  end
end

.http_clientObject



38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/json/jwk/set/fetcher.rb', line 38

def self.http_client
  _http_client_ = HTTPClient.new(
    agent_name: "JSON::JWK::Set::Fetcher (#{JSON::JWT::VERSION})"
  )

  # NOTE: httpclient gem seems stopped maintaining root certtificate set, use OS default.
  _http_client_.ssl_config.clear_cert_store
  _http_client_.ssl_config.cert_store.set_default_paths

  _http_client_.request_filter << Debugger::RequestFilter.new if debugging?
  http_config.try(:call, _http_client_)
  _http_client_
end

.http_config(&block) ⇒ Object



51
52
53
# File 'lib/json/jwk/set/fetcher.rb', line 51

def self.http_config(&block)
  @@http_config ||= block
end

.loggerObject



11
12
13
# File 'lib/json/jwk/set/fetcher.rb', line 11

def self.logger
  @@logger
end

.logger=(logger) ⇒ Object



14
15
16
# File 'lib/json/jwk/set/fetcher.rb', line 14

def self.logger=(logger)
  @@logger = logger
end