package Ġno . kom mune . os lo . mask in port en . client Ċ Ċ import Ġcom . fasterxml . jackson . databind . JsonNode Ċ import Ġcom . fasterxml . jackson . databind . ObjectMapper Ċ import Ġcom . nim bus ds . j ose . j wk . RSA Key Ċ import Ġno . kom mune . os lo . jwt . Jwt Auth Client Ċ import Ġokhttp 3 . Request Ċ import Ġokhttp 3 . RequestBody . Companion . to RequestBody Ċ import Ġorg . slf 4 j . Logger Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġjava . net . URL Ċ import Ġjava . util .* Ċ Ċ class ĠMask in port en Admin ApiClient ( ĊĠĠĠ Ġprivate Ġval Ġclients Api Endpoint : ĠURL , ĊĠĠĠ Ġprivate Ġval Ġauth Client : ĠJwt Auth Client , ĊĠĠĠ Ġprivate Ġval Ġhttp Util : ĠHttp Util Ġ= ĠHttp Util () Ċ ) Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġlog : ĠLogger Ġ= ĠLoggerFactory . getLogger ( Mask in port en Admin ApiClient :: class . java ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġom Ġ= ĠObjectMapper () ĊĊĠĠĠ Ġfun Ġget Clients (): ĠList < JsonNode > Ġ{ ĊĠĠĠĠĠĠĠ Ġlog . debug (" Fetching ĠMask in port en Ġclients ") ĊĠĠĠĠĠĠĠ Ġval Ġtoken Ġ= Ġauth Client . get AccessToken ( set Of (" id port en : d cr . read ")) ĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠRequest . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. header (" Content - Type ", Ġ" application / json ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. header (" Accept ", Ġ"* /* ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. header (" Authorization ", Ġ" Bearer Ġ${ token . access _ token }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. url ("$ clients Api Endpoint ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. get () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġhttp Util . post ( request ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġom . readValue ( response , ĠArray < JsonNode >:: class . java ). toList () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠgetClient ( clientId : ĠString ): ĠJsonNode Ġ{ ĊĠĠĠĠĠĠĠ Ġlog . debug (" Fetching Ġdetails Ġfor Ġclient Ġ$ clientId ") ĊĠĠĠĠĠĠĠ Ġval Ġtoken Ġ= Ġauth Client . get AccessToken ( set Of (" id port en : d cr . read ")) ĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠRequest . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. header (" Content - Type ", Ġ" application / json ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. header (" Accept ", Ġ"* /* ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. header (" Authorization ", Ġ" Bearer Ġ${ token . access _ token }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. url ("$ clients Api Endpoint $ clientId ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. get () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġhttp Util . post ( request ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġom . read Tree ( response ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcreate Client ( name : ĠString , Ġdescription : ĠString , Ġscopes : ĠCollection < String >): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġlog . debug (" Creating Ġnew Ġclient Ġ'$ name ' Ġwith Ġscopes Ġ$ scopes ") ĊĊĠĠĠĠĠĠĠ Ġval Ġtoken Ġ= Ġauth Client . get AccessToken ( set Of (" id port en : d cr . write ")) ĊĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠRequest . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. header (" Content - Type ", Ġ" application / json ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. header (" Accept ", Ġ"* /* ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. header (" Authorization ", Ġ" Bearer Ġ${ token . access _ token }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. url ( clients Api Endpoint ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. post ( client Payload ( name , Ġdescription , Ġscopes ). to RequestBody ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġhttp Util . post ( request ) ĊĊĠĠĠĠĠĠĠ Ġval Ġjson Ġ= Ġom . read Tree ( response ) ĊĠĠĠĠĠĠĠ Ġreturn Ġjson . get (" client _ id "). text Value () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate Client ( clientId : ĠString , Ġname : ĠString , Ġdescription : ĠString , Ġscopes : ĠCollection < String >): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġlog . debug (" Updating Ġclient Ġ'$ clientId ' Ġwith Ġname Ġ'$ name ', Ġdescription Ġ'$ description ' Ġand Ġscopes Ġ$ scopes ") ĊĊĠĠĠĠĠĠĠ Ġval Ġtoken Ġ= Ġauth Client . get AccessToken ( set Of (" id port en : d cr . write ")) ĊĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠRequest . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. header (" Content - Type ", Ġ" application / json ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. header (" Accept ", Ġ"* /* ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. header (" Authorization ", Ġ" Bearer Ġ${ token . access _ token }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. url ("$ clients Api Endpoint $ clientId ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. put ( client Payload ( name , Ġdescription , Ġscopes ). to RequestBody ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġhttp Util . post ( request ) ĊĊĠĠĠĠĠĠĠ Ġval Ġjson Ġ= Ġom . read Tree ( response ) ĊĠĠĠĠĠĠĠ Ġreturn Ġjson . get (" client _ id "). text Value () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġclient Payload ( ĊĠĠĠĠĠĠĠ Ġname : ĠString , ĊĠĠĠĠĠĠĠ Ġdescription : ĠString , ĊĠĠĠĠĠĠĠ Ġscopes : ĠCollection < String > ĊĠĠĠ Ġ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġvalues Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" integration _ type " Ġto Ġ" mask in port en ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" application _ type " Ġto Ġ" web ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" client _ name " Ġto Ġname , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" description " Ġto Ġdescription , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" token _ endpoint _ auth _ method " Ġto Ġ" private _ key _ jwt ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" grant _ types " Ġto ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" urn : ietf : params : oauth : grant - type : jwt - bearer " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" scopes " Ġto Ġscopes , ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġom . writeValue AsString ( values ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠgetClient Keys ( clientId : ĠString ): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġlog . debug (" Fetching Ġkeys Ġfor Ġclient Ġ$ clientId ") ĊĠĠĠĠĠĠĠ Ġval Ġtoken Ġ= Ġauth Client . get AccessToken ( set Of (" id port en : d cr . read ")) ĊĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠRequest . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. header (" Content - Type ", Ġ" application / json ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. header (" Accept ", Ġ"* /* ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. header (" Authorization ", Ġ" Bearer Ġ${ token . access _ token }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. url ("$ clients Api Endpoint $ clientId / jw ks ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. get () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġhttp Util . post ( request ) ĊĠĠĠĠĠĠĠ Ġreturn Ġresponse ĊĠĠĠ Ġ} ĊĊĠĠĠĠ Ġfun Ġregister Client Key ( clientId : ĠString , Ġpublic J wk : ĠRSA Key ): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġlog . debug (" Register ing Ġnew Ġkey Ġwith Ġid Ġ${ public J wk . key ID } Ġfor Ġclient Ġ$ clientId ") ĊĠĠĠĠĠĠĠ Ġval Ġkey Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" alg " Ġto Ġ" RS 2 5 6 ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" k ty " Ġto Ġpublic J wk . key Type . toString (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" use " Ġto Ġpublic J wk . key Use . toString (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" kid " Ġto Ġpublic J wk . key ID , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" e " Ġto Ġpublic J wk . public Exponent . toString (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" n " Ġto Ġpublic J wk . modulus . toString () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġkeys Ġ= Ġmap Of (" keys " Ġto ĠlistOf ( key )) ĊĠĠĠĠĠĠĠ Ġval Ġbody Ġ= ĠObjectMapper (). writeValue AsString ( keys ) ĊĊĠĠĠĠĠĠĠĠ Ġval Ġtoken Ġ= Ġauth Client . get AccessToken ( set Of (" id port en : d cr . write ")) ĊĊĠĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠRequest . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. header (" Content - Type ", Ġ" application / json ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. header (" Accept ", Ġ"* /* ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. header (" Authorization ", Ġ" Bearer Ġ${ token . access _ token }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. url ("$ clients Api Endpoint $ clientId / jw ks ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. post ( body . to RequestBody ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠ Ġreturn Ġhttp Util . post ( request ) ĊĠĠĠ Ġ} Ċ }