package Ġno . nav . t ms . token . support . id port en . authentication . config Ċ Ċ import Ġcom . auth 0 . j wk . J wk Provider Ċ import Ġcom . auth 0 . j wk . J wk Provider Builder Ċ import Ġio . ktor . auth .* Ċ import Ġio . ktor . client .* Ċ import Ġio . ktor . http .* Ċ import Ġkotlinx . coroutines . run Blocking Ċ import Ġno . nav . t ms . token . support . id port en . authentication . Id port en Client Interceptor Ċ import Ġno . nav . t ms . token . support . id port en . authentication . Oauth Server Configuration Metadata Ċ import Ġno . nav . t ms . token . support . id port en . authentication . config . HttpClient Builder . build HttpClient Ċ import Ġjava . net . URL Ċ import Ġjava . util . concurrent . TimeUnit Ċ Ċ internal Ġclass ĠRuntime Context ( ĊĠĠĠĠĠĠĠ Ġval Ġtoken Cookie Name : ĠString , ĊĠĠĠĠĠĠĠ Ġval Ġcontext Path : ĠString , ĊĠĠĠĠĠĠĠ Ġval Ġpost Login Redirect Uri : ĠString , ĊĠĠĠĠĠĠĠ Ġval Ġsecure Cookie : ĠBoolean , ĊĠĠĠĠĠĠĠ Ġval Ġpost Logout Redirect Uri : ĠString Ċ ) Ġ{ ĊĠĠĠ Ġval Ġenvironment Ġ= ĠEnvironment () ĊĊĠĠĠ Ġprivate Ġval ĠhttpClient Ġ= Ġbuild HttpClient () ĊĠĠĠ Ġval Ġmetadata Ġ= Ġfetch Metadata ( httpClient , Ġenvironment . id port en Well Known Url ) ĊĊĠĠĠ Ġprivate Ġval Ġid port en Client Interceptor Ġ= Ġcreate Id Port en Client Interceptor ( environment , Ġmetadata ) ĊĠĠĠ Ġval Ġoauth 2 Server Settings Ġ= Ġcreate OAuth 2 Server Settings ( environment , Ġmetadata , Ġid port en Client Interceptor ) ĊĠĠĠ Ġval Ġj wk Provider Ġ= Ġcreate J wk Provider ( metadata ) Ċ } Ċ Ċ private Ġfun Ġcreate OAuth 2 Server Settings ( ĊĠĠĠĠĠĠĠ Ġenvironment : ĠEnvironment , ĊĠĠĠĠĠĠĠ Ġmetadata : ĠO auth Server Configuration Metadata , ĊĠĠĠĠĠĠĠ Ġid port en Client Interceptor : ĠId port en Client Interceptor Ċ ) Ġ= ĠOAuth Server Settings . OAuth 2 Server Settings ( ĊĠĠĠĠĠĠĠ Ġname Ġ= Ġ" Id Port en ", ĊĠĠĠĠĠĠĠ Ġauthorize Url Ġ= Ġmetadata . authorization Endpoint , ĊĠĠĠĠĠĠĠ ĠaccessToken Url Ġ= Ġmetadata . token Endpoint , ĊĠĠĠĠĠĠĠ ĠclientId Ġ= Ġenvironment . id port en ClientId , ĊĠĠĠĠĠĠĠ Ġclient Secret Ġ= Ġ"", ĊĠĠĠĠĠĠĠ ĠaccessToken Requires Basic Auth Ġ= Ġfalse , ĊĠĠĠĠĠĠĠ Ġrequest Method Ġ= ĠHttpMethod . Post , ĊĠĠĠĠĠĠĠ Ġdefault Scopes Ġ= ĠlistOf ( Id port en . scope ), ĊĠĠĠĠĠĠĠ Ġauthorize Url Interceptor Ġ= Ġ{ Ġthis . parameters . append (" response _ mode ", Ġ" query ") Ġ}, ĊĠĠĠĠĠĠĠ ĠaccessToken Interceptor Ġ= Ġid port en Client Interceptor . append Client Assertion Ċ ) Ċ Ċ private Ġfun Ġfetch Metadata ( httpClient : ĠHttpClient , Ġid Port en Url : ĠString ) Ġ= Ġrun Blocking Ġ{ ĊĠĠĠ ĠhttpClient . get OAuth Server Configuration Metadata ( id Port en Url ) Ċ } Ċ Ċ private Ġfun Ġcreate J wk Provider ( metadata : ĠO auth Server Configuration Metadata ): ĠJ wk Provider Ġ= ĠJ wk Provider Builder ( URL ( metadata . jw ks Uri )) ĊĠĠĠĠĠĠĠ Ġ. cached ( 1 0 , Ġ 2 4 , ĠTimeUnit . HOUR S ) ĊĠĠĠĠĠĠĠ Ġ. rate Limit ed ( 1 0 , Ġ 1 , ĠTimeUnit . MIN UTES ) ĊĠĠĠĠĠĠĠ Ġ. build () Ċ Ċ private Ġfun Ġcreate Id Port en Client Interceptor ( environment : ĠEnvironment , Ġmetadata : ĠO auth Server Configuration Metadata ) Ġ= ĠId port en Client Interceptor ( ĊĠĠĠĠĠĠĠ Ġprivate J wk Ġ= Ġenvironment . id port en Client J wk , ĊĠĠĠĠĠĠĠ ĠclientId Ġ= Ġenvironment . id port en ClientId , ĊĠĠĠĠĠĠĠ Ġaudience Ġ= Ġmetadata . issuer Ċ ) Ċ