Module: JSON::JWK::Set::Fetcher
- Defined in:
- lib/json/jwk/set/fetcher.rb
Defined Under Namespace
Classes: Cache, UnexpectedFormat
Class Method Summary
collapse
Class Method Details
.cache ⇒ Object
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
33
34
35
36
37
38
39
|
# File 'lib/json/jwk/set/fetcher.rb', line 33
def self.debug(&block)
original = self.debugging?
debug!
yield
ensure
self.debugging = original
end
|
.debug! ⇒ Object
30
31
32
|
# File 'lib/json/jwk/set/fetcher.rb', line 30
def self.debug!
self.debugging = true
end
|
.debugging=(boolean) ⇒ Object
27
28
29
|
# File 'lib/json/jwk/set/fetcher.rb', line 27
def self.debugging=(boolean)
@@debugging = boolean
end
|
.debugging? ⇒ Boolean
24
25
26
|
# File 'lib/json/jwk/set/fetcher.rb', line 24
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
84
85
86
87
88
89
|
# 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(':')
parsed_jwks = JSON.parse(
cache.fetch(cache_key, options) do
http_client.get(jwks_uri).body
end
)
unless parsed_jwks.is_a?(Hash) && parsed_jwks['keys'].is_a?(Array)
cache.delete(cache_key, options)
raise UnexpectedFormat
end
jwks = Set.new(parsed_jwks)
cache.delete(cache_key, options) if jwks[kid].blank?
if auto_detect
jwks[kid] or raise KidNotFound
else
jwks
end
end
|
.http_client ⇒ Object
42
43
44
45
46
47
48
49
50
|
# File 'lib/json/jwk/set/fetcher.rb', line 42
def self.http_client
Faraday.new(headers: {user_agent: "JSON::JWK::Set::Fetcher #{VERSION}"}) do |faraday|
faraday.response :raise_error
faraday.response :follow_redirects
faraday.response :logger, JSON::JWK::Set::Fetcher.logger if debugging?
faraday.adapter Faraday.default_adapter
http_config.try(:call, faraday)
end
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
|
.logger ⇒ Object
15
16
17
|
# File 'lib/json/jwk/set/fetcher.rb', line 15
def self.logger
@@logger
end
|
.logger=(logger) ⇒ Object
18
19
20
|
# File 'lib/json/jwk/set/fetcher.rb', line 18
def self.logger=(logger)
@@logger = logger
end
|