package Ġno . nav . sy fo . application Ċ Ċ import Ġcom . auth 0 . j wk . J wk Provider Ċ import Ġcom . fasterxml . jackson . annotation . JsonInclude Ċ import Ġcom . fasterxml . jackson . databind . Deserialization Feature Ċ import Ġcom . fasterxml . jackson . databind . Serialization Feature Ċ import Ġcom . fasterxml . jackson . datatype . js r 3 1 0 . Java Time Module Ċ import Ġcom . fasterxml . jackson . module . kotlin . register Kotlin Module Ċ import Ġio . ktor . application . Application Call Pipeline Ċ import Ġio . ktor . application . call Ċ import Ġio . ktor . application . install Ċ import Ġio . ktor . auth . authenticate Ċ import Ġio . ktor . client . HttpClient Ċ import Ġio . ktor . client . HttpClient Config Ċ import Ġio . ktor . client . engine . apache . Apache Ċ import Ġio . ktor . client . engine . apache . Apache Engine Config Ċ import Ġio . ktor . client . features . json . Jack son Serializer Ċ import Ġio . ktor . client . features . json . Json Feature Ċ import Ġio . ktor . features . Call Id Ċ import Ġio . ktor . features . Content Neg otiation Ċ import Ġio . ktor . features . Status Pages Ċ import Ġio . ktor . http . HttpHeaders Ċ import Ġio . ktor . http . HttpStatusCode Ċ import Ġio . ktor . jackson . jackson Ċ import Ġio . ktor . response . respond Ċ import Ġio . ktor . routing . routing Ċ import Ġio . ktor . server . engine . Application Engine Ċ import Ġio . ktor . server . engine . embedded Server Ċ import Ġio . ktor . server . netty . Net ty Ċ import Ġio . ktor . util . K tor Experimental API Ċ import Ġjava . util . UUID Ċ import Ġno . nav . sy fo . Environment Ċ import Ġno . nav . sy fo . Vault Secrets Ċ import Ġno . nav . sy fo . application . api . register N ais Api Ċ import Ġno . nav . sy fo . azure ad . v 2 . Azure Ad V 2 Client Ċ import Ġno . nav . sy fo . db . Database Interface Ċ import Ġno . nav . sy fo . log Ċ import Ġno . nav . sy fo . metrics . monitor Http Requests Ċ import Ġno . nav . sy fo . null st illing . register Null still Api Ċ import Ġno . nav . sy fo . sy k meld ing . internal . api . regist rer Internal Sy k meld ing Api V 2 Ċ import Ġno . nav . sy fo . sy k meld ing . internal . api . setup Swagger Doc Api Ċ import Ġno . nav . sy fo . sy k meld ing . internal . til gang . Til gang sk ont roll Service Ċ import Ġno . nav . sy fo . sy k meld ing . service . Sy k meld inger Service Ċ import Ġno . nav . sy fo . sy k meld ing . service user . api . regist rer Sy k meld ing Service user Api V 1 Ċ import Ġno . nav . sy fo . sy k meld ing . service user . api . regist rer Sy k meld ing Service user Api V 2 Ċ import Ġno . nav . sy fo . sy k meld ing . status . Sy k meld ing Status Service Ċ import Ġno . nav . sy fo . sy k meld ing . status . api . register Sy k meld ing Status GET Api Ċ import Ġno . nav . sy fo . sy k meld ing . user . api . regist rer Sy k meld ing Api V 2 Ċ Ċ @ K tor Experimental API Ċ fun Ġcreate Application Engine ( ĊĠĠĠ Ġenv : ĠEnvironment , ĊĠĠĠ Ġapplication State : ĠApplication State , ĊĠĠĠ Ġdatabase : ĠDatabase Interface , ĊĠĠĠ Ġvault Secrets : ĠVault Secrets , ĊĠĠĠ Ġj wk Provider : ĠJ wk Provider , ĊĠĠĠ Ġissuer : ĠString , ĊĠĠĠ Ġcluster : ĠString , ĊĠĠĠ Ġj wk Provider Internal : ĠJ wk Provider , ĊĠĠĠ Ġsy k meld ing Status Service : ĠS yk meld ing Status Service , ĊĠĠĠ Ġissuer Service user : ĠString , ĊĠĠĠ ĠclientId : ĠString , ĊĠĠĠ Ġapp Ids : ĠList < String >, ĊĠĠĠ Ġj wk Provider A ad V 2 : ĠJ wk Provider Ċ ): ĠApplication Engine Ġ= ĊĠĠĠ Ġembedded Server ( Net ty , Ġenv . application Port ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinstall ( Content Neg otiation ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġj ack son Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ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 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Serialization In clusion ( JsonInclude . Include . NON _ NULL ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsetup Auth ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogin service Id port en Audience Ġ= Ġenv . login service Id port en Audience , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvault Secrets Ġ= Ġvault Secrets , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġj wk Provider Ġ= Ġj wk Provider , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġissuer Ġ= Ġissuer , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġj wk Provider Internal Ġ= Ġj wk Provider Internal , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġissuer Service user Ġ= Ġissuer Service user , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠclientId Ġ= ĠclientId , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapp Ids Ġ= Ġapp Ids , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġj wk Provider A ad V 2 Ġ= Ġj wk Provider A ad V 2 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġenvironment Ġ= Ġenv ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġinstall ( Call Id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgenerate Ġ{ ĠUUID . randomUUID (). toString () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify Ġ{ Ġcall Id : ĠString Ġ-> Ġcall Id . isNotEmpty () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheader ( HttpHeaders . X Correlation Id ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġinstall ( Status Pages ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexception < Throwable > Ġ{ Ġcause Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall . respond ( HttpStatusCode . InternalServerError , Ġcause . message Ġ?: Ġ" Unknown Ġerror ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . error (" Ca ught Ġexception ", Ġcause ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġcause ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġconfig : ĠHttpClient Config < Apache Engine Config >. () Ġ-> ĠUnit Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ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 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect Success Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval ĠhttpClient Ġ= ĠHttpClient ( Apache , Ġconfig ) ĊĊĠĠĠĠĠĠĠ Ġval Ġsy k meld inger Service Ġ= ĠS yk meld inger Service ( database ) ĊĊĠĠĠĠĠĠĠ Ġval Ġhttp Proxy Client Ġ= ĠHttpClient ( Apache , Ġproxy Config ) ĊĠĠĠĠĠĠĠ Ġval Ġazure Ad V 2 Client Ġ= ĠAzure Ad V 2 Client ( env . clientId V 2 , Ġenv . client Secret V 2 , Ġenv . azure Token Endpoint , Ġhttp Proxy Client ) ĊĠĠĠĠĠĠĠ Ġval Ġtil gang sk ont roll Service Ġ= ĠT il gang sk ont roll Service ( azure Ad V 2 Client , ĠhttpClient , Ġenv . sy fo Til gang sk ont roll Url , Ġenv . sy f ot il gang sk ont roll ClientId ) ĊĊĠĠĠĠĠĠĠ Ġrouting Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( env . cluster Ġ== Ġ" dev - f ss ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsetup Swagger Doc Api () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġregister N ais Api ( application State ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġauthenticate (" jwt ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġregister Sy k meld ing Status GET Api ( sy k meld ing Status Service ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġregist rer Sy k meld ing Api V 2 ( sy k meld inger Service ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġauthenticate (" jwt service user ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġregist rer Sy k meld ing Service user Api V 1 ( sy k meld inger Service ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġauthenticate (" azure adv 2 ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġregist rer Sy k meld ing Service user Api V 2 ( sy k meld inger Service ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġregist rer Internal Sy k meld ing Api V 2 ( sy k meld inger Service , Ġtil gang sk ont roll Service ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġauthenticate (" basic ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġregister Null still Api ( database , Ġcluster ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġintercept ( Application Call Pipeline . Monitoring , Ġmonitor Http Requests ()) ĊĠĠĠ Ġ} Ċ