package Ġno . nav . oms org sp enger . auth Ċ Ċ import Ġcom . auth 0 . jwt . JWT Ċ import Ġcom . auth 0 . jwt . interfaces . Decoded JWT Ċ import Ġio . ktor . application .* Ċ import Ġio . ktor . http .* Ċ import Ġorg . slf 4 j . LoggerFactory Ċ Ċ internal Ġclass ĠToken Resolver ( ĊĠĠĠ Ġprivate Ġval Ġazure Iss u ers : ĠSet < String >, ĊĠĠĠ Ġprivate Ġval Ġopen Am Iss u ers : ĠSet < String >) Ġ{ ĊĠĠĠ Ġinternal Ġfun Ġresolve ( call : ĠApplication Call ) Ġ: ĠPair < String , ĠToken >? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġheader Ġ= Ġcall . request . headers [ HttpHeaders . Authorization ] Ġ?: Ġreturn Ġlogger . warn (" In gen ĠAuthorization Ġheader "). let Ġ{ Ġnull Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġdecoded Jwt Ġ= ĠJWT . decode ( header . remove Prefix (" Bearer Ġ")) ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( decoded Jwt . issuer ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġin Ġazure Iss u ers Ġ-> Ġheader Ġto ĠAzure Token . parse ( decoded Jwt ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġin Ġopen Am Iss u ers Ġ-> Ġheader Ġto ĠOpen Am Token . parse ( decoded Jwt ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġlogger . warn (" St Ã¸ t ter Ġik ke Ġissuer Ġ${ decoded Jwt . issuer } "). let Ġ{ Ġnull Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġlogger Ġ= ĠLoggerFactory . getLogger ( Token Resolver :: class . java ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ internal Ġinterface ĠToken Ġ{ ĊĠĠĠ Ġval Ġjwt : ĠDe coded JWT ĊĠĠĠ Ġval Ġusername : ĠString ĊĠĠĠ Ġval ĠclientId : ĠString ĊĠĠĠ Ġval Ġer Person Token Ġ: ĠBoolean ĊĠĠĠ Ġfun Ġauthorization Header () Ġ= Ġ" Bearer Ġ${ jwt . token }" Ċ } Ċ Ċ internal Ġclass ĠAzure Token Ġprivate Ġconstructor ( ĊĠĠĠ Ġoverride Ġval Ġjwt : ĠDe coded JWT , ĊĠĠĠ Ġoverride Ġval ĠclientId : ĠString , ĊĠĠĠ Ġprivate Ġval Ġoid : ĠString ?, ĊĠĠĠ Ġprivate Ġval Ġpreferred Username : ĠString ?, ĊĠĠĠ Ġprivate Ġval Ġnav Ident : ĠString ? Ċ ) Ġ: ĠToken Ġ{ ĊĠĠĠ Ġinternal Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġinternal Ġfun Ġparse ( jwt : ĠDe coded JWT ) Ġ= ĠAzure Token ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjwt Ġ= Ġjwt , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠclientId Ġ= Ġjwt . claims . getValue (" az p "). asString (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoid Ġ= Ġjwt . claims [" oid "] ?. asString (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpreferred Username Ġ= Ġjwt . claims [" preferred _ username "] ?. asString (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnav Ident Ġ= Ġjwt . claims [" NAV ident "] ?. asString () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġoverride Ġval Ġer Person Token Ġ= Ġoid Ġ!= Ġnull Ġ&& Ġpreferred Username Ġ!= Ġnull ĊĠĠĠ Ġoverride Ġval Ġusername Ġ= Ġnav Ident Ġ?: Ġpreferred Username Ġ?: Ġ" n / a " Ċ } Ċ Ċ internal Ġclass ĠOpen Am Token Ġprivate Ġconstructor ( ĊĠĠĠ Ġoverride Ġval Ġjwt : ĠDe coded JWT , ĊĠĠĠ Ġoverride Ġval ĠclientId : ĠString , ĊĠĠĠ Ġprivate Ġval Ġsub : ĠString Ċ ): ĠToken Ġ{ ĊĠĠĠ Ġinternal Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġinternal Ġfun Ġparse ( jwt : ĠDe coded JWT ) Ġ= ĠOpen Am Token ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjwt Ġ= Ġjwt , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠclientId Ġ= Ġjwt . claims . getValue (" az p "). asString (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsub Ġ= Ġjwt . subject ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġoverride Ġval Ġer Person Token Ġ= Ġjwt . claims [" token Name "] ?. asString () Ġ== Ġ" id _ token " ĊĠĠĠ Ġoverride Ġval Ġusername Ġ= Ġsub Ċ }