@ file : Suppress (" Throws Count ", Ġ" Unused Private Member ") Ċ Ċ package Ġcom . hy pto . iam . server . apis Ċ Ċ import Ġcom . google . gson . Gson Ċ import Ġcom . hy pto . iam . server . idp . Password Credentials Ċ import Ġcom . hy pto . iam . server . models . Create UserRequest Ċ import Ġcom . hy pto . iam . server . models . Policy Association Request Ċ import Ġcom . hy pto . iam . server . models . Reset Password Request Ċ import Ġcom . hy pto . iam . server . models . Update UserRequest Ċ import Ġcom . hy pto . iam . server . models . User Pag inated Response Ċ import Ġcom . hy pto . iam . server . security . User Principal Ċ import Ġcom . hy pto . iam . server . security . with Permission Ċ import Ġcom . hy pto . iam . server . service . User Policy Service Ċ import Ġcom . hy pto . iam . server . service . Users Service Ċ import Ġcom . hy pto . iam . server . utils . H rn Factory Ċ import Ġcom . hy pto . iam . server . utils . Iam Resources Ċ import Ġcom . hy pto . iam . server . utils . Resource H rn Ċ import Ġcom . hy pto . iam . server . validators . validate Ċ import Ġio . ktor . http . ContentType Ċ import Ġio . ktor . http . HttpStatusCode Ċ import Ġio . ktor . server . application . call Ċ import Ġio . ktor . server . auth . principal Ċ import Ġio . ktor . server . request . receive Ċ import Ġio . ktor . server . response . respond Text Ċ import Ġio . ktor . server . routing . Route Ċ import Ġio . ktor . server . routing . delete Ċ import Ġio . ktor . server . routing . get Ċ import Ġio . ktor . server . routing . patch Ċ import Ġio . ktor . server . routing . post Ċ import Ġorg . k oin . ktor . ext . inject Ċ Ċ fun ĠRoute . users Api () Ġ{ ĊĠĠĠ Ġval Ġuser Policy Service : ĠUser Policy Service Ġby Ġinject () ĊĠĠĠ Ġval Ġgson : ĠGson Ġby Ġinject () ĊĠĠĠ Ġval Ġhr n Factory : ĠH rn Factory Ġby Ġinject () ĊĠĠĠ Ġval Ġusers Service : ĠUsers Service Ġby Ġinject () ĊĊĠĠĠ Ġ// Ġ**** ĠUser Ġmanagement Ġap is Ġ**** // ĊĊĠĠĠ Ġ// ĠCreate Ġuser ĊĠĠĠ Ġwith Permission (" createUser ") Ġ{ ĊĠĠĠĠĠĠĠ Ġpost ("/ organizations /{ organization _ id }/ users ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġorganization Id Ġ= Ġcall . parameters [" organization _ id "] !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= Ġcall . receive < Create UserRequest >(). validate () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpassword Credentials Ġ= ĠPassword Credentials ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠuserName Ġ= Ġrequest . username , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemail Ġ= Ġrequest . email , ĠphoneNumber Ġ= Ġrequest . phone Ġ?: Ġ"", Ġpassword Ġ= Ġrequest . password Hash ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuser Ġ= Ġusers Service . createUser ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġorganization Id Ġ= Ġorganization Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcredentials Ġ= Ġpassword Credentials , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreated By Ġ= Ġcall . principal < User Principal >() ?. hr n Str , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverified Ġ= Ġrequest . verified Ġ?: Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcall . respond Text ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġgson . toJson ( user ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠcontentType Ġ= ĠContentType . Application . Json , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatus Ġ= ĠHttpStatusCode . Created ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠGet Ġuser ĊĠĠĠ Ġwith Permission (" getUser ") Ġ{ ĊĠĠĠĠĠĠĠ Ġget ("/ organizations /{ organization _ id }/ users /{ id }") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġorganization Id Ġ= Ġcall . parameters [" organization _ id "] !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠuserId Ġ= Ġcall . parameters [" id "] !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuser Ġ= Ġusers Service . getUser ( organization Id , ĠuserId ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcall . respond Text ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġgson . toJson ( user ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠcontentType Ġ= ĠContentType . Application . Json , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatus Ġ= ĠHttpStatusCode . OK ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠList Ġuser ĊĠĠĠ Ġwith Permission (" list User ") Ġ{ ĊĠĠĠĠĠĠĠ Ġget ("/ organizations /{ organization _ id }/ users ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġorganization Id Ġ= Ġcall . parameters [" organization _ id "] !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnext Token Ġ= Ġcall . request . query Parameters [" next _ token "] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠpageSize Ġ= Ġcall . request . query Parameters [" page _ size "] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( users , Ġtoken , Ġoptions ) Ġ= Ġusers Service . list Users ( organization Id , Ġnext Token , ĠpageSize ?. toInt ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= ĠUser Pag inated Response ( data Ġ= Ġusers , Ġnext Token Ġ= Ġtoken , Ġcontext Ġ= Ġoptions ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcall . respond Text ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġgson . toJson ( response ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠcontentType Ġ= ĠContentType . Application . Json , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatus Ġ= ĠHttpStatusCode . OK ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠDelete Ġuser ĊĠĠĠ Ġwith Permission (" delete User ") Ġ{ ĊĠĠĠĠĠĠĠ Ġdelete ("/ organizations /{ organization _ id }/ users /{ user _ id }") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġorganization Id Ġ= Ġcall . parameters [" organization _ id "] !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠuserId Ġ= Ġcall . parameters [" user _ id "] !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġusers Service . delete User ( organization Id , ĠuserId ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcall . respond Text ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġgson . toJson ( response ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠcontentType Ġ= ĠContentType . Application . Json , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatus Ġ= ĠHttpStatusCode . OK ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠUpdate Ġuser ĊĠĠĠ Ġwith Permission (" update User ") Ġ{ ĊĠĠĠĠĠĠĠ Ġpatch ("/ organizations /{ organization _ id }/ users /{ user _ id }") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġorganization Id Ġ= Ġcall . parameters [" organization _ id "] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠIllegalArgumentException (" Required Ġorganization _ id Ġto Ġupdate Ġuser ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠuserId Ġ= Ġcall . parameters [" user _ id "] !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= Ġcall . receive < Update UserRequest >(). validate () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuser Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġusers Service . update User ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġorganization Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠuserId , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest . phone Ġ?: Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest . status , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest . verified ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcall . respond Text ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġgson . toJson ( user ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠcontentType Ġ= ĠContentType . Application . Json , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatus Ġ= ĠHttpStatusCode . OK ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġ**** ĠUser Ġpolicy Ġmanagement Ġap is Ġ**** // ĊĊĠĠĠ Ġ// ĠDet ach Ġpolicy ĊĠĠĠ Ġwith Permission (" detach Policies ") Ġ{ ĊĠĠĠĠĠĠĠ Ġpatch ("/ organizations /{ organization _ id }/ users /{ user _ id }/ detach _ policies ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġorganization Id Ġ= Ġcall . parameters [" organization _ id "] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠIllegalArgumentException (" Required Ġorganization _ id Ġto Ġdetach Ġpolicies ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠuserId Ġ= Ġcall . parameters [" user _ id "] Ġ?: Ġthrow ĠIllegalArgumentException (" Required Ġid Ġto Ġdetach Ġpolicies ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= Ġcall . receive < Policy Association Request >(). validate () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġuser Policy Service . detach Policies To User ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResource H rn ( organization Id , Ġ"", ĠI am Resources . USER , ĠuserId ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest . policies . map Ġ{ Ġhr n Factory . get H rn ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcall . respond Text ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġgson . toJson ( response ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠcontentType Ġ= ĠContentType . Application . Json , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatus Ġ= ĠHttpStatusCode . OK ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠAttach Ġpolicy ĊĠĠĠ Ġwith Permission (" attach Policies ") Ġ{ ĊĠĠĠĠĠĠĠ Ġpatch ("/ organizations /{ organization _ id }/ users /{ user _ id }/ attach _ policies ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġorganization Id Ġ= Ġcall . parameters [" organization _ id "] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠIllegalArgumentException (" Required Ġorganization _ id Ġto Ġattach Ġpolicies ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠuserId Ġ= Ġcall . parameters [" user _ id "] Ġ?: Ġthrow ĠIllegalArgumentException (" Required Ġid Ġto Ġattach Ġpolicies ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= Ġcall . receive < Policy Association Request >(). validate () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġuser Policy Service . attach Policies To User ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResource H rn ( organization Id , Ġ"", ĠI am Resources . USER , ĠuserId ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest . policies . map Ġ{ Ġhr n Factory . get H rn ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcall . respond Text ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġgson . toJson ( response ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠcontentType Ġ= ĠContentType . Application . Json , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatus Ġ= ĠHttpStatusCode . OK ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠRoute . reset Password Api () Ġ{ ĊĠĠĠ Ġval Ġgson : ĠGson Ġby Ġinject () ĊĠĠĠ Ġval Ġusers Service : ĠUsers Service Ġby Ġinject () ĊĊĠĠĠ Ġpost ("/ organizations /{ organization _ id }/ users / reset Password ") Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġorganization Id Ġ= Ġcall . parameters [" organization _ id "] ĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= Ġcall . receive < Reset Password Request >(). validate () ĊĠĠĠĠĠĠĠ Ġval Ġuser Ġ= Ġusers Service . getUser By Email ( organization Id !! , Ġrequest . email ) ĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġusers Service . setUser Password ( organization Id , Ġuser . username , Ġrequest . password ) ĊĊĠĠĠĠĠĠĠ Ġcall . respond Text ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġgson . toJson ( response ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠcontentType Ġ= ĠContentType . Application . Json , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstatus Ġ= ĠHttpStatusCode . OK ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ