/* Ġk tl int - disable Ġno - wildcard - imports Ġ*/ Ċ Ċ import Ġio . ktor . application . Application Ċ import Ġio . ktor . application . call Ċ import Ġio . ktor . application . install Ċ import Ġio . ktor . auth . Authentication Ċ import Ġio . ktor . auth . UserId Principal Ċ import Ġio . ktor . auth . authenticate Ċ 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 . http . ContentType Ċ import Ġio . ktor . http . HttpStatusCode Ċ import Ġio . ktor . response . respond Ċ import Ġio . ktor . response . respond Text Ċ import Ġio . ktor . routing . Routing Ċ import Ġio . ktor . routing . get Ċ import Ġio . ktor . serialization . json Ċ import Ġio . ktor . server . engine . embedded Server Ċ import Ġio . ktor . server . netty . Net ty Ċ import Ġkotlinx . serialization . Serializable Ċ import Ġorg . jetbrains . ex posed . exceptions . Ex posed SQLException Ċ import Ġorg . jetbrains . ex posed . sql . selectAll Ċ import Ġorg . jetbrains . ex posed . sql . transactions . experimental . sus pended Transaction Async Ċ Ċ /* ĠConfiguration Ġ*/ Ċ /** ĠUsername Ġ& Ġpassword Ġ( concat en ated ) Ġto Ġuse Ġfor Ġthe Ġbasic Ġauth Ġfor Ġpriv ileged Ġrequests Ġ*/ Ċ val ĠADMIN _ CRED ENTIAL S Ġ= ĠSystem . getenv (" ADMIN _ CRED ENTIAL S ") ĊĠĠĠ Ġ?: Ġ" testing : change it ". also Ġ{ ĠSystem . err . println (" WARNING : Ġusing Ġin secure Ġdefault Ġcredentials ") Ġ} Ċ Ċ /** ĠThe Ġonly Ġhost Ġto Ġallow Ġwith ĠCORS . ĠIf Ġnull , Ġwill Ġallow Ġall Ġhosts Ġ*/ Ċ val ĠONLY _ HOST : ĠString ? Ġ= ĠSystem . getenv (" ONLY _ HOST ") Ċ Ċ /** ĠA ĠJDBC Ġconnection Ġstring Ġto Ġuse Ġfor Ġthe Ġapp 's Ġdatabase Ġ*/ Ċ val ĠDATABASE _ URL : ĠString Ġ= ĠSystem . getenv (" DATABASE _ URL ") Ġ?: Ġ" jdbc : sqlite : db . sqlite " Ċ Ċ /** ĠUsername Ġand Ġpassword Ġfor Ġthe Ġdatabase Ġconnection , Ġseparated Ġby Ġa Ġ: Ġ*/ Ċ val ĠDATABASE _ CRED ENTIAL S : ĠString Ġ= ĠSystem . getenv (" DATABASE _ CRED ENTIAL S ") Ġ?: Ġ":" Ċ Ċ @ Serializable Ċ data Ġclass ĠError Response ( val Ġerror : ĠString , Ġval Ġmessage : ĠString ?) Ċ Ċ fun ĠApplication . module () Ġ{ ĊĠĠĠ Ġinstall ( Default Headers ) ĊĠĠĠ Ġinstall ( Call Logging ) ĊĠĠĠ Ġinstall ( Content Neg otiation ) Ġ{ ĊĠĠĠĠĠĠĠ Ġjson () ĊĠĠĠ Ġ} ĊĠĠĠ Ġinstall ( Status Pages ) Ġ{ ĊĠĠĠĠĠĠĠ Ġexception < Throwable > Ġ{ Ġe Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcall . respond ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHttpStatusCode . InternalServerError , Ġmessage Ġ= ĠError Response ( error Ġ= Ġ" error ", Ġmessage Ġ= Ġe . message ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinstall ( C ORS ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( ONLY _ HOST Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġany Host () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhost ( ONLY _ HOST , Ġschemes Ġ= ĠlistOf (" http ", Ġ" https ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġallow Non Simple Content Types Ġ= Ġtrue Ġ// Ġapplication / json Ġis Ġa Ġnon - simple Ġcontent - type ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinstall ( Authentication ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbasic (" priv ileged Get ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrealm Ġ= Ġ" reading Ġall Ġobjects " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalidate Ġ{ Ġcredentials Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcombined Credentials Ġ= Ġ"${ credentials . name }:${ credentials . password }" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( combined Credentials Ġ== ĠADMIN _ CRED ENTIAL S ) ĠUserId Principal ( credentials . name ) Ġelse Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinstall ( Routing ) Ġ{ ĊĠĠĠĠĠĠĠ Ġget ("/") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcall . respond Text ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ ĠĠĠĠĠĠ Ġ_ ĠĠĠĠĠĠĠ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ__ | Ġ| Ġ___ Ġ(_) Ġ___ ĠĠ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/ Ġ_` Ġ| / Ġ_ Ġ\| Ġ| / Ġ_ Ġ\ ĠĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| Ġ(_ | Ġ| Ġ(_) Ġ| Ġ| Ġ(_) Ġ| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ\ __, _ |\ ___ // Ġ|\ ___ / Ġ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| __/ ĠĠĠĠĠĠĠ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent (), ĠContentType . Text . Plain ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġget ("/ v 1 / version ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcall . respond Text ( VERSION , ĠContentType . Text . Plain ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġget ("/ v 1 / status ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġquery Ġ= Ġsus pended Transaction Async Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠObjects . selectAll (). count () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquery . await () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall . respond Text (" OK ", ĠContentType . Text . Plain ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠEx posed SQLException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall . respond ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatus Ġ= ĠHttpStatusCode . InternalServerError , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= ĠError Response ( error Ġ= Ġ" database Ġerror ", Ġmessage Ġ= Ġe . stack Trace ToString ()), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġauthenticate (" priv ileged Get ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġretrieve All () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġnew Object () ĊĠĠĠĠĠĠĠ Ġupdate Object () ĊĠĠĠ Ġ} Ċ } Ċ Ċ const Ġval ĠPORT Ġ= Ġ 8 0 8 0 Ċ Ċ fun Ġmain () Ġ{ ĊĠĠĠ Ġinit Database () ĊĊĠĠĠ Ġembedded Server ( Net ty , ĠPORT , Ġwatch Paths Ġ= ĠlistOf (" Main Kt "), Ġmodule Ġ= ĠApplication :: module ). start () ĊĠĠĠ Ġprintln (" Server Ġis Ġnow Ġrunning Ġon Ġport Ġ$ PORT ") Ċ } Ċ