package Ġca . all an wang . mc g ill . server Ċ Ċ import Ġca . all an wang . kit . logger . With Logging Ċ import Ġca . all an wang . mc g ill . db . tables . Group Db Ċ import Ġca . all an wang . mc g ill . db . tables . Session Db Ċ import Ġca . all an wang . mc g ill . db . tables . Sessions Ċ import Ġca . all an wang . mc g ill . db . tables . User Db Ċ import Ġca . all an wang . mc g ill . ldap . Mc G ill Ldap Ċ import Ġca . all an wang . mc g ill . ldap . Sam Ċ import Ġca . all an wang . mc g ill . models . data . Group Ċ import Ġca . all an wang . mc g ill . models . data . Session Ċ import Ġca . all an wang . mc g ill . models . data . User Ċ import Ġorg . jetbrains . ex posed . sql . transactions . transaction Ċ Ċ object ĠAuth Ġ: ĠWith Logging () Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAuth enticate Ġa Ġuser Ġgiven Ġsome Ġ[ sam ] Ġand Ġa Ġ[ password ] ĊĠĠĠĠ Ġ* ĠIf Ġthe Ġsam Ġis Ġnot Ġa Ġshort User , Ġan Ġattempt Ġwill Ġbe Ġmade Ġto Ġfind Ġit Ġthrough Ġour Ġown Ġdb ĊĠĠĠĠ Ġ* ĠThis Ġcall Ġguarantees Ġone Ġpass Ġthrough Ġ[ Mc G ill Ldap ], Ġto Ġensure Ġthat Ġthe Ġuser Ġis Ġauthenticated ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠNote Ġthat Ġif Ġldap Ġis Ġdisabled , Ġwe Ġwill Ġallow Ġsam = unit , Ġpassword = test Ġas Ġa Ġvalid Ġuser ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġauthenticate ( sam : ĠString , Ġpassword : ĠString , Ġexpires In : ĠLong ? Ġ= Ġnull ): ĠSession ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! Mc G ill Server . ldap Enabled . get ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( sam Ġ!= Ġ" unit " Ġ|| Ġpassword Ġ!= Ġ" test ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . warn (" Ldap Ġdisabled ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġallow Ġfor Ġbasic Ġtest Ġuser ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcreate Test User () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( Mc G ill Ldap . sam Type ( sam ) Ġ== ĠSam . SHORT _ USER ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġauthenticate Impl ( sam , Ġpassword , Ġexpires In ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġtodo Ġverify Ġsam Ġcheck ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġshort User Ġ= ĠUser Db . findById ( sam )?. short User Ġ?: Ġreturn @ transaction Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġauthenticate Impl ( short User , Ġpassword , Ġexpires In ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAuth enticator Ġthat Ġguarantees Ġthe Ġusername Ġis Ġa Ġshort User ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġauthenticate Impl ( short User : ĠString , Ġpassword : ĠString , Ġexpires In : ĠLong ? Ġ= Ġnull ): ĠSession ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġuser Ġ= ĠMc G ill Ldap . query User ( short User , Ġshort User Ġto Ġpassword ) Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġreturn Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUser Db . new OrUpdate ( user ). new Session ( expires In ). toJson () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġconst Ġval Ġtest Short User Ġ= Ġ" unit 1 2 3 " ĊĊĠĠĠ Ġfun Ġcreate Test User (): ĠSession Ġ= Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtest User Ġ= ĠUser ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshort User Ġ= Ġtest Short User , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠuserId Ġ= Ġ" unittest ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlong User Ġ= Ġ" unit . test ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠdisplayName Ġ= Ġ" Unit ĠTest ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgiven Name Ġ= Ġ" Unit ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlastName Ġ= Ġ" Test ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemail Ġ= Ġ" unit . test @ mail . mc g ill . ca ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfac ulty Ġ= Ġ" Unit ĠTest ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgroups Ġ= ĠlistOf ( Group (" Unit ĠTest "))) ĊĊĠĠĠĠĠĠĠ ĠUser Db . new OrUpdate ( test User ). new Session (). toJson () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdelete Test User () Ġ{ ĊĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUser Db . findById ( test Short User )?. delete () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGroup Db . findById (" Unit ĠTest ") ?. delete () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġthe Ġ[ Session ] Ġmatching Ġthe Ġgiven Ġ[ id ] Ġand Ġ[ short User ] Ġif Ġit Ġexists ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġvalidate ( id : ĠString , Ġshort User : ĠString ): ĠSession ? Ġ= ĠS essions [ id , Ġshort User ] ĊĊĠĠĠ Ġfun Ġdelete ( id : ĠString , Ġshort User : ĠString ): ĠBoolean Ġ= Ġtransaction Ġ{ ĠSession Db [ id , Ġshort User ]?. delete () Ġ!= Ġnull Ġ} Ċ Ċ }