Class: OIDC::Service

Inherits:
Common::Client::Base show all
Includes:
Common::Client::Concerns::Monitoring
Defined in:
lib/oidc/service.rb

Constant Summary collapse

STATSD_KEY_PREFIX =
'oidc'

Instance Method Summary collapse

Methods included from Common::Client::Concerns::Monitoring

#with_monitoring

Methods inherited from Common::Client::Base

configuration, #raise_backend_exception

Methods included from SentryLogging

#log_exception_to_sentry, #log_message_to_sentry, #non_nil_hash?, #normalize_level, #rails_logger

Instance Method Details

#call_no_token(action, url) ⇒ Object



15
16
17
18
19
20
21
# File 'lib/oidc/service.rb', line 15

def call_no_token(action, url)
  connection.send(action) do |req|
    req.url url
    req.headers['Content-Type'] = 'application/json'
    req.headers['Accept'] = 'application/json'
  end
end

#get_metadata_endpoint(iss) ⇒ Object



46
47
48
49
50
51
52
53
54
# File 'lib/oidc/service.rb', line 46

def (iss)
   = Settings.oidc.issuers.find { |s| iss.downcase.start_with? s['prefix'].downcase }
  unless ()
    raise Common::Exceptions::OpenIdServiceError.new(detail: 'Unauthorized Issuer', code: 401, status: 401)
  end

  proxied_iss = iss.gsub(['prefix'], ['proxy'])
  proxied_iss + ['metadata']
end

#metadata(iss) ⇒ Object



23
24
25
26
27
28
29
30
31
# File 'lib/oidc/service.rb', line 23

def (iss)
   = (iss)

  with_monitoring do
    OIDC::Response.new call_no_token('get', )
  rescue
    raise Common::Exceptions::OpenIdServiceError.new(detail: 'Issuer not found', code: 404, status: 404)
  end
end

#oidc_jwks_keys(iss) ⇒ Object



33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/oidc/service.rb', line 33

def oidc_jwks_keys(iss)
  url = (iss).body['jwks_uri']
  if url.nil?
    raise Common::Exceptions::OpenIdServiceError.new(detail: 'Issuer keys not found', code: 404, status: 404)
  end

  with_monitoring do
    call_no_token('get', url)
  rescue
    raise Common::Exceptions::OpenIdServiceError.new(detail: 'JWKS not found', code: 404, status: 404)
  end
end