package Ġorg . sky f aced . tod i Ċ Ċ import Ġio . ktor . application . Application Ċ import Ġio . ktor . application . call Ċ import Ġio . ktor . application . install Ċ import Ġio . ktor . auth . Authentication Ċ import Ġio . ktor . auth . basic Ċ import Ġio . ktor . features . C ORS Ċ import Ġio . ktor . features . Call Logging Ċ import Ġio . ktor . features . Content Neg otiation Ċ import Ġio . ktor . features . Default Headers Ċ import Ġio . ktor . features . Status Pages Ċ import Ġio . ktor . gson . gson Ċ import Ġio . ktor . http . HttpHeaders Ċ import Ġio . ktor . http . HttpMethod Ċ import Ġio . ktor . http . HttpStatusCode Ċ import Ġio . ktor . request . path Ċ import Ġio . ktor . routing . Routing Ċ import Ġio . ktor . server . jetty . Engine Main Ċ import Ġorg . k oin . ktor . ext . K oin Ċ import Ġorg . k oin . ktor . ext . inject Ċ import Ġorg . k oin . logger . SL F 4 J Logger Ċ import Ġorg . sky f aced . tod i . di . modules . application Module Ċ import Ġorg . sky f aced . tod i . di . modules . service Module Ċ import Ġorg . sky f aced . tod i . exceptions . Response Exception Ċ import Ġorg . sky f aced . tod i . models . authentication . Basic Authentication Principal Ċ import Ġorg . sky f aced . tod i . route . api . v 1 . api V 1 Ċ import Ġorg . sky f aced . tod i . services . user . UserService Ċ import Ġorg . sky f aced . tod i . utils . BASIC _ AUTHENT ICATION Ċ import Ġorg . sky f aced . tod i . utils . error Ċ import Ġorg . slf 4 j . event . Level Ċ Ċ fun Ġmain ( args : ĠArray < String >) Ġ{ ĊĠĠĠ ĠEngine Main . main ( args ) Ċ } Ċ Ċ @ Suppress (" unused ") Ċ fun ĠApplication . module ( testing : ĠBoolean Ġ= Ġfalse ) Ġ{ ĊĠĠĠ Ġinstall ( Default Headers ) ĊĊĠĠĠ Ġinstall ( Call Logging ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlevel Ġ= ĠLevel . INFO ĊĠĠĠĠĠĠĠ Ġfilter Ġ{ Ġcall Ġ-> Ġcall . request . path (). startsWith ("/") Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinstall ( K oin ) Ġ{ ĊĠĠĠĠĠĠĠ ĠSL F 4 J Logger () ĊĠĠĠĠĠĠĠ Ġmodules ( application Module , Ġservice Module ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinstall ( Content Neg otiation ) Ġ{ ĊĠĠĠĠĠĠĠ Ġgson Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġserialize Null s () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinstall ( C ORS ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmethod ( HttpMethod . Put ) ĊĠĠĠĠĠĠĠ Ġmethod ( HttpMethod . Patch ) ĊĠĠĠĠĠĠĠ Ġmethod ( HttpMethod . Delete ) ĊĠĠĠĠĠĠĠ Ġheader ( HttpHeaders . Authorization ) ĊĠĠĠĠĠĠĠ Ġallow Credentials Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinstall ( Authentication ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġservice : ĠUserService Ġby Ġinject () ĊĠĠĠĠĠĠĠ Ġbasic ( BASIC _ AUTHENT ICATION ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrealm Ġ= Ġ" Access Ġto Ġwhole ĠAPI " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalidate Ġ{ Ġcredential Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuser Entity Ġ= Ġservice . getUser Entity By Username ( credential . name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! user Entity . isActive ) Ġthrow ĠResponse Exception (" Your Ġaccount Ġis Ġblocked ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! service . validate Password ( user Entity . id . value , Ġcredential . password )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠResponse Exception (" Password Ġnot Ġvalid ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ validate ĠBasic Authentication Principal ( user Entity . id . value , Ġuser Entity . username ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinstall ( Status Pages ) Ġ{ ĊĠĠĠĠĠĠĠ Ġexception < Response Exception > Ġ{ Ġe Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcall . error ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstatusCode Ġ= Ġe . statusCode Ġ?: ĠHttpStatusCode . BadRequest , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= Ġe . message , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstack Trace Ġ= Ġif Ġ( e . with StackTrace ) Ġe . stack Trace ToString () Ġelse Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġexception < Exception > Ġ{ Ġe Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcall . error ( message Ġ= Ġ" Something Ġwent Ġwrong ", Ġstack Trace Ġ= Ġe . stack Trace ToString ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinstall ( Routing ) Ġ{ ĊĠĠĠĠĠĠĠ Ġapi V 1 () ĊĠĠĠ Ġ} Ċ } Ċ