package Ġno . nav . s bl . dialog arena . min inn bo ks . consumer . tok end ings Ċ Ċ import Ġcom . fasterxml . jackson . annotation . JsonIgnore Properties Ċ import Ġcom . fasterxml . jackson . annotation . JsonProperty Ċ import Ġio . ktor . client .* Ċ import Ġio . ktor . client . request .* Ċ import Ġio . ktor . http .* Ċ import Ġio . ktor . http . content .* Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . run Blocking Ċ import Ġkotlinx . coroutines . slf 4 j . M DC Context Ċ import Ġkotlinx . coroutines . with Context Ċ Ċ @ JsonIgnore Properties ( ignore Unknown Ġ= Ġtrue ) Ċ data Ġclass ĠTok end ings Token Response ( ĊĠĠĠ Ġ@ JsonProperty (" access _ token ") Ġval ĠaccessToken : ĠString , ĊĠĠĠ Ġ@ JsonProperty (" iss ued _ token _ type ") Ġval Ġissued TokenType : ĠString , ĊĠĠĠ Ġ@ JsonProperty (" token _ type ") Ġval Ġtoken Type : ĠString , ĊĠĠĠ Ġ@ JsonProperty (" expires _ in ") Ġval Ġexpires In : ĠInt Ċ ) Ċ class ĠTok end ings Consumer ( ĊĠĠĠ Ġprivate Ġval ĠhttpClient : ĠHttpClient , ĊĠĠĠ Ġprivate Ġval Ġmetadata : ĠTok end ings Configuration Metadata Ċ ) Ġ{ ĊĠĠĠ Ġsuspend Ġfun Ġexchange Token ( subject Token : ĠString , Ġclient Assertion : ĠString , Ġaudience : ĠString ): ĠTok end ings Token Response Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwith Context ( Dispatch ers . IO Ġ+ ĠM DC Context ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġurl Parameters Ġ= ĠParameters Builder (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend (" grant _ type ", Ġ" urn : ietf : params : oauth : grant - type : token - exchange ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend (" client _ assertion _ type ", Ġ" urn : ietf : params : oauth : client - assertion - type : jwt - bearer ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend (" client _ assertion ", Ġclient Assertion ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend (" subject _ token _ type ", Ġ" urn : ietf : params : oauth : token - type : jwt ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend (" subject _ token ", Ġsubject Token ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend (" audience ", Ġaudience ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. build () ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠhttpClient . post < Tok end ings Token Response > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġurl ( metadata . token Endpoint ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbody Ġ= ĠText Content ( url Parameters . form Url Encode (), ĠContentType . Application . Form Url Encoded ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ JsonIgnore Properties ( ignore Unknown Ġ= Ġtrue ) ĊĠĠĠ Ġdata Ġclass ĠTok end ings Configuration Metadata ( ĊĠĠĠĠĠĠĠ Ġ@ JsonProperty (" issuer ") Ġval Ġissuer : ĠString , ĊĠĠĠĠĠĠĠ Ġ@ JsonProperty (" token _ endpoint ") Ġval Ġtoken Endpoint : ĠString , ĊĠĠĠĠĠĠĠ Ġ@ JsonProperty (" jw ks _ uri ") Ġval Ġj w ks Uri : ĠString ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġfetch Metadata ( httpClient : ĠHttpClient , Ġwell Known Url : ĠString ): ĠTok end ings Configuration Metadata Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . IO Ġ+ ĠM DC Context ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠhttpClient . request < Tok end ings Configuration Metadata > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmethod Ġ= ĠHttpMethod . Get ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġurl ( well Known Url ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaccept ( ContentType . Application . Json ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ