package Ġno . nav . sy fo . client Ċ Ċ import Ġcom . fasterxml . jackson . databind . Deserialization Feature Ċ import Ġcom . fasterxml . jackson . databind . Serialization Feature Ċ import Ġcom . fasterxml . jackson . module . kotlin . register Kotlin Module Ċ import Ġcom . fasterxml . jackson . datatype . js r 3 1 0 . Java Time Module Ċ import Ġio . ktor . client . HttpClient Ċ import Ġio . ktor . client . engine . apache . Apache Ċ import Ġio . ktor . client . features . auth . Auth Ċ import Ġio . ktor . client . features . auth . providers . basic Ċ import Ġio . ktor . client . features . json . Jack son Serializer Ċ import Ġio . ktor . client . features . json . Json Feature Ċ import Ġio . ktor . client . request . get Ċ import Ġio . ktor . client . request . parameter Ċ import Ġio . ktor . util . K tor Experimental API Ċ import Ġkotlinx . coroutines . run Blocking Ċ Ċ @ K tor Experimental API Ċ class ĠSt s Oid c Client ( ĊĠĠĠ Ġusername : ĠString , ĊĠĠĠ Ġpassword : ĠString , ĊĠĠĠ Ġprivate Ġval Ġst s Url : ĠString Ġ= Ġ" http :// security - token - service / rest / v 1 / sts / token " Ċ ) Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġtoken Expires : ĠLong Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġval Ġoid c Client Ġ= ĠHttpClient ( Apache ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinstall ( Json Feature ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġserializer Ġ= ĠJack son Serializer Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġregister Kotlin Module () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġregister Module ( Java Time Module ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfigure ( Serialization Feature . WRITE _ DAT ES _ AS _ TIMESTAMP S , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfigure ( Deserialization Feature . FAIL _ ON _ UNKNOWN _ PROPERTIES , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġinstall ( Auth ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbasic Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . username Ġ= Ġusername ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . password Ġ= Ġpassword ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . send Without Request Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġoid c Token : ĠO id c Token Ġ= Ġrun Blocking Ġ{ Ġoid c Token () Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġoid c Token (): ĠO id c Token Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( token Expires Ġ< ĠSystem . currentTimeMillis ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoid c Token Ġ= Ġnew Oid c Token () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtoken Expires Ġ= ĠSystem . currentTimeMillis () Ġ+ Ġ( oidc Token . expires _ in Ġ- Ġ 6 0 0 ) Ġ* Ġ 1 0 0 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġoid c Token ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġnew Oid c Token (): ĠO id c Token Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoid c Client . get ( sts Url ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparameter (" grant _ type ", Ġ" client _ credentials ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparameter (" scope ", Ġ" openid ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ } Ċ