package Ġno . nav . hel se . ak to er Ċ Ċ import Ġcom . fasterxml . jackson . databind . Deserialization Feature Ċ import Ġcom . fasterxml . jackson . databind . ObjectMapper Ċ import Ġcom . fasterxml . jackson . module . kotlin . jackson ObjectMapper Ċ import Ġcom . fasterxml . jackson . module . kotlin . readValue Ċ import Ġcom . github . kit tin un f . fuel . coroutines . await String Response Result Ċ import Ġcom . github . kit tin un f . fuel . http Get Ċ import Ġio . ktor . http . HttpHeaders Ċ import Ġio . ktor . http . Url Ċ import Ġno . nav . hel se . Correlation Id Ċ import Ġno . nav . hel se . Http Error Ċ import Ġno . nav . hel se . d us se ld or f . ktor . client . build URL Ċ import Ġno . nav . hel se . d us se ld or f . ktor . core . Retry Ċ import Ġno . nav . hel se . d us se ld or f . ktor . core . er Gy ld ig F od se ls nummer Ċ import Ġno . nav . hel se . d us se ld or f . ktor . health . HealthCheck Ċ import Ġno . nav . hel se . d us se ld or f . ktor . health . Health y Ċ import Ġno . nav . hel se . d us se ld or f . ktor . health . Result Ċ import Ġno . nav . hel se . d us se ld or f . ktor . health . Un Health y Ċ import Ġno . nav . hel se . d us se ld or f . ktor . metrics . Operation Ċ import Ġno . nav . hel se . d us se ld or f . oauth 2 . client . AccessToken Client Ċ import Ġno . nav . hel se . d us se ld or f . oauth 2 . client . Cached AccessToken Client Ċ import Ġorg . slf 4 j . Logger Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġjava . net . URI Ċ import Ġjava . time . Duration Ċ Ċ /** Ċ Ġ* Ġhttps :// app - q 1 . ade o . no / ak to er register / swagger - ui . html Ċ Ġ*/ Ċ Ċ class ĠAk to er Gateway ( ĊĠĠĠ ĠbaseUrl : ĠURI , ĊĠĠĠ Ġprivate Ġval ĠaccessToken Client : ĠAccess Token Client , ĊĠĠĠ Ġprivate Ġval Ġh ente Ak to er Id Scopes : ĠSet < String > Ġ= Ġset Of (" openid ") Ċ ) Ġ: ĠHealth Check Ġ{ ĊĊĠĠĠ Ġprivate Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠH ENT E _ AK TO ER _ ID _ OPERATION Ġ= Ġ" h ente - ak to er - id " ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġlogger : ĠLogger Ġ= ĠLoggerFactory . getLogger ( Ak to er Gateway :: class . java ) ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠobjectMapper Ġ= Ġj ack son ObjectMapper (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfigure ( Deserialization Feature . FAIL _ ON _ UNKNOWN _ PROPERTIES , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġcomplete Url Ġ= ĠUrl . build URL ( ĊĠĠĠĠĠĠĠ ĠbaseUrl Ġ= ĠbaseUrl , ĊĠĠĠĠĠĠĠ Ġpath Parts Ġ= ĠlistOf (" api ", Ġ" v 1 ", Ġ" id enter "), ĊĠĠĠĠĠĠĠ Ġquery Parameters Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" gj el den de " Ġto ĠlistOf (" true "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ident grup pe " Ġto ĠlistOf (" Ak to er Id ") ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ). toString () ĊĊĠĠĠ Ġprivate Ġval Ġf od se ls nummer Url Ġ= ĠUrl . build URL ( ĊĠĠĠĠĠĠĠ ĠbaseUrl Ġ= ĠbaseUrl , ĊĠĠĠĠĠĠĠ Ġpath Parts Ġ= ĠlistOf (" api ", Ġ" v 1 ", Ġ" id enter "), ĊĠĠĠĠĠĠĠ Ġquery Parameters Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPair (" gj el den de ", ĠlistOf (" true ")), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPair (" ident grup pe ", ĠlistOf (" N ors k Ident ")) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ). toString () ĊĊĠĠĠ Ġprivate Ġval ĠobjectMapper Ġ= Ġconfigured ObjectMapper () ĊĠĠĠ Ġprivate Ġval Ġcached AccessToken Client Ġ= ĠCached AccessToken Client ( accessToken Client ) ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġcheck (): ĠResult Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠaccessToken Client . get AccessToken ( h ente Ak to er Id Scopes ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠHealth y (" Ak to er Gateway ", Ġ" H ent ing Ġav Ġaccess Ġtoken Ġfor Ġh ent ing Ġav ĠA kt Ã¸ r ID ĠOK .") ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( cause : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error (" Fe il Ġved Ġh ent ing Ġav Ġaccess Ġtoken Ġfor Ġh ent ing Ġav ĠA kt Ã¸ r ID ", Ġcause ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUn Health y (" Ak to er Gateway ", Ġ" H ent ing Ġav Ġaccess Ġtoken Ġfor Ġh ent ing Ġav ĠA kt Ã¸ r ID Ġfe ilet .") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġget Ak to er Id ( ĊĠĠĠĠĠĠĠ Ġident : ĠN ors k Ident , ĊĠĠĠĠĠĠĠ Ġcorrelation Id : ĠCorre lation Id ĊĠĠĠ Ġ): ĠA kt Ã¸ r Id Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġauthorization Header Ġ= Ġcached AccessToken Client . get AccessToken ( h ente Ak to er Id Scopes ). as Author iation Header () ĊĊĠĠĠĠĠĠĠ Ġval ĠhttpRequest Ġ= Ġcomplete Url ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. http Get () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. header ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHttp Headers . Authorization Ġto Ġauthorization Header , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHttp Headers . Accept Ġto Ġ" application / json ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Nav - Consumer - Id " Ġto Ġ" oms org sp en ge so kn ad - pro sess ering ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Nav - Person id enter " Ġto Ġident . getValue (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Nav - Call - Id " Ġto Ġcorrelation Id . value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval ĠhttpResponse Ġ= ĠRetry . retry ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoperation Ġ= ĠH ENT E _ AK TO ER _ ID _ OPERATION , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinitial Delay Ġ= ĠDuration . of Millis ( 2 0 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfactor Ġ= Ġ 2 . 0 ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( request , Ġresponse , Ġresult ) Ġ= ĠOperation . mon itored ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapp Ġ= Ġ" oms org sp en ge so kn ad - pro sess ering ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoperation Ġ= ĠH ENT E _ AK TO ER _ ID _ OPERATION , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Resolver Ġ= Ġ{ Ġ 2 0 0 Ġ== Ġit . second . statusCode Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĠhttpRequest . await String Response Result () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult . fold ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġsuccess Ġ-> ĠobjectMapper . readValue < Map < String , ĠIdent Response >>( success ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġerror Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error (" Error Ġresponse Ġ= Ġ'${ error . response . body (). asString (" text / plain ") }' Ġf ra Ġ'${ request . url }' ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error ( error . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠHttp Error ( response . statusCode , Ġ" Fe il Ġved Ġh ent ing Ġav ĠA kt Ã¸ r ĠID .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġif Ġ(! httpResponse . containsKey ( ident . getValue ())) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" S var Ġf ra Ġ'$ complete Url ' Ġin ne hold t Ġik ke Ġdata Ġom Ġdet Ġfor se sp ur te Ġf Ã¸ d se ls nummer et .") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġident Response Ġ= ĠhttpResponse . get ( key Ġ= Ġident . getValue ()) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( ident Response !!. fe il meld ing Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . warn (" Mot tok Ġfe il meld ing Ġf ra ĠA kt Ã¸ r Register Ġ: Ġ'${ ident Response . fe il meld ing }' ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( ident Response . id enter Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" F ikk Ġ 0 ĠA kt Ã¸ r ID ' er Ġfor Ġdet Ġfor se sp ur te Ġf Ã¸ d se ls nummer et Ġmot Ġ'$ complete Url '") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( ident Response . id enter . size Ġ!= Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" F ikk Ġ${ ident Response . id enter . size } ĠA kt Ã¸ r ID ' er Ġfor Ġdet Ġfor se sp ur te Ġf Ã¸ d se ls nummer et Ġmot Ġ'$ complete Url '") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġak to er Id Ġ= ĠA kt Ã¸ r Id ( ident Response . id enter [ 0 ]. ident ) ĊĠĠĠĠĠĠĠ Ġlogger . trace (" Resolved ĠA kt Ã¸ r ID Ġ$ ak to er Id ") ĊĠĠĠĠĠĠĠ Ġreturn Ġak to er Id ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġget ( ĊĠĠĠĠĠĠĠ Ġurl : ĠString , ĊĠĠĠĠĠĠĠ Ġperson Ident : ĠString , ĊĠĠĠĠĠĠĠ Ġcorrelation Id : ĠCorre lation Id ĊĠĠĠ Ġ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġauthorization Header Ġ= Ġcached AccessToken Client . get AccessToken ( h ente Ak to er Id Scopes ). as Author iation Header () ĊĊĠĠĠĠĠĠĠ Ġval ĠhttpRequest Ġ= Ġurl ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. http Get () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. header ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHttp Headers . Authorization Ġto Ġauthorization Header , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHttp Headers . Accept Ġto Ġ" application / json ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Nav - Consumer - Id " Ġto Ġ" oms org sp en ge so kn ad - pro sess ering ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Nav - Person id enter " Ġto Ġperson Ident , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Nav - Call - Id " Ġto Ġcorrelation Id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval ĠhttpResponse Ġ= ĠRetry . retry ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoperation Ġ= ĠH ENT E _ AK TO ER _ ID _ OPERATION , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinitial Delay Ġ= ĠDuration . of Millis ( 2 0 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfactor Ġ= Ġ 2 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger Ġ= Ġlogger ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( request , Ġ_, Ġresult ) Ġ= ĠOperation . mon itored ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapp Ġ= Ġ" oms org sp en ge so kn ad - pro sess ering ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoperation Ġ= ĠH ENT E _ AK TO ER _ ID _ OPERATION , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Resolver Ġ= Ġ{ Ġ 2 0 0 Ġ== Ġit . second . statusCode Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĠhttpRequest . await String Response Result () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult . fold ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġsuccess Ġ-> ĠComp anion . object Mapper . readValue < Map < String , ĠAk to er Register Ident Response >>( success ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġerror Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error (" Error Ġresponse Ġ= Ġ'${ error . response . body (). asString (" text / plain ") }' Ġf ra Ġ'${ request . url }' ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error ( error . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" Fe il Ġved Ġh ent ing Ġav ĠA kt Ã¸ r ĠID .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġif Ġ(! httpResponse . containsKey ( person Ident )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" S var Ġf ra Ġ'$ url ' Ġin ne hold t Ġik ke Ġdata Ġom Ġdet Ġfor se sp ur te Ġf Ã¸ d se ls nummer et .") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġident Response Ġ= ĠhttpResponse . get ( key Ġ= Ġperson Ident ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( ident Response !!. fe il meld ing Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . warn (" Mot tok Ġfe il meld ing Ġf ra ĠA kt Ã¸ r Register Ġ: Ġ'${ ident Response . fe il meld ing }' ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( ident Response . id enter Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" F ikk Ġ 0 ĠA kt Ã¸ r ID ' er Ġfor Ġdet Ġfor se sp ur te Ġf Ã¸ d se ls nummer et Ġmot Ġ'$ url '") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( ident Response . id enter . size Ġ!= Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" F ikk Ġ${ ident Response . id enter . size } ĠA kt Ã¸ r ID ' er Ġfor Ġdet Ġfor se sp ur te Ġf Ã¸ d se ls nummer et Ġmot Ġ'$ url '") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġak to er Id Ġ= ĠA kt Ã¸ r Id ( ident Response . id enter [ 0 ]. ident ) ĊĠĠĠĠĠĠĠ Ġlogger . trace (" Resolved ĠA kt Ã¸ r ID Ġ$ ak to er Id ") ĊĠĠĠĠĠĠĠ Ġreturn Ġak to er Id . id ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġh ent N ors k Ident ( ĊĠĠĠĠĠĠĠ Ġakt Ã¸ r Id : ĠA kt Ã¸ r Id , ĊĠĠĠĠĠĠĠ Ġcorrelation Id : ĠCorre lation Id ĊĠĠĠ Ġ): ĠN ors k Ident Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġget ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġurl Ġ= Ġf od se ls nummer Url , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġperson Ident Ġ= Ġakt Ã¸ r Id . id , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcorrelation Id Ġ= Ġcorrelation Id ĊĠĠĠĠĠĠĠ Ġ). til N ors k Ident () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġconfigured ObjectMapper (): ĠObjectMapper Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠobjectMapper Ġ= Ġj ack son ObjectMapper () ĊĠĠĠĠĠĠĠ ĠobjectMapper . configure ( Deserialization Feature . FAIL _ ON _ UNKNOWN _ PROPERTIES , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġreturn ĠobjectMapper ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠString . til N ors k Ident (): ĠN ors k Ident Ġ= Ġif Ġ( er Gy ld ig F od se ls nummer ()) ĠF od se ls nummer ( this ) Ġelse ĠAltern ativ Id ( this ) Ċ Ċ interface ĠN ors k Ident Ġ{ ĊĠĠĠ Ġfun ĠgetValue (): ĠString Ċ } Ċ Ċ data Ġclass ĠAltern ativ Id ( private Ġval Ġvalue : ĠString ) Ġ: ĠN ors k Ident Ġ{ ĊĠĠĠ Ġoverride Ġfun ĠgetValue () Ġ= Ġvalue Ċ } Ċ Ċ data Ġclass ĠIdent ( val Ġident : ĠString , Ġval Ġident grup pe : ĠString ) Ċ data Ġclass ĠIdent Response ( val Ġfe il meld ing : ĠString ?, Ġval Ġid enter : ĠList < Ident > ?) Ċ data Ġclass ĠAk to er Register Ident Response ( val Ġfe il meld ing : ĠString ?, Ġval Ġid enter : ĠList < Ident > ?)