package Ġmy . company . app . web . interceptor Ċ Ċ import Ġio . ktor . application . Application Call Ċ import Ġio . ktor . application . call Ċ import Ġio . ktor . auth . authentication Ċ import Ġio . ktor . auth . basic Authentication Credentials Ċ import Ġio . ktor . http . HttpHeaders Ċ import Ġio . ktor . http . HttpStatusCode Ċ import Ġio . ktor . request . header Ċ import Ġio . ktor . request . http Method Ċ import Ġio . ktor . request . path Ċ import Ġio . ktor . response . header Ċ import Ġio . ktor . response . respond Ċ import Ġio . ktor . util . pipeline . Pipeline Context Ċ import Ġmy . company . app . conf . AppConfig Ċ import Ġmy . company . app . lib . Database Service Ċ import Ġmy . company . app . lib . k oin . lazy Ċ import Ġmy . company . app . lib . logger Ċ import Ġmy . company . app . lib . try OrNull Ċ import Ġmy . company . app . web . Authenticated User Ċ import Ġmy . company . app . web . Session Key Ċ import Ġmy . company . app . web . auth . Web Session Principal Ċ import Ġmy . company . app . web . is Swagger Request Ċ import Ġmy . company . app . web . is WebRequest Ċ import Ġjava . util . UUID Ċ Ċ @ Suppress (" EXPERIMENT AL _ API _ USAGE ") Ċ class ĠAuth Interceptor Ġ: ĠWeb Interceptor () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġlogger Ġ= Ġlogger < Auth Interceptor >() ĊĠĠĠ Ġprivate Ġval Ġapp Config : ĠApp Config Ġby Ġlazy () ĊĠĠĠ Ġprivate Ġval Ġdatabase Service : ĠDatabase Service Ġby Ġlazy () ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun ĠPipeline Context < *, ĠApplication Call >. intercept () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstart Ġ= ĠSystem . currentTimeMillis () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( is Swagger Request ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( call . request . basic Authentication Credentials ( Charsets . UTF _ 8 ) Ġ!= Ġapp Config . swagger Basic Auth Credential ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall . response . header ( HttpHeaders . WW W Authenticate , Ġ" Basic Ġrealm =\" swagger \" ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall . respond ( HttpStatusCode . Unauthorized ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( is WebRequest ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Session Call Attributes () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( logger . is Trace Enabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtime Ġ= ĠSystem . currentTimeMillis () Ġ- Ġstart ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . trace (" Auth Ġinterceptor Ġcompleted Ġin Ġ${ time } ms . Ġ(${ call . request . http Method . value } Ġ${ call . request . path () }) ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun ĠPipeline Context < *, ĠApplication Call >. set Session Call Attributes () Ġ{ ĊĠĠĠĠĠĠĠ Ġdatabase Service . transaction ( readOnly Ġ= Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtoken Ġ= Ġcall . request . header (" X - Auth - Token ") ?. try OrNull Ġ{ ĠUUID . fromString ( it ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( token Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsession User Ġ= Ġrepositories . session . getSession ById With User ( token ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( session User Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( session , Ġuser ) Ġ= Ġsession User ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall . attributes . put ( Session Key , Ġsession ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall . attributes . put ( Authenticated User , Ġuser ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall . authentication . principal Ġ= ĠWeb Session Principal ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsession Ġ= ĠWeb Session Principal . Session ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsession . id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser Ġ= ĠWeb Session Principal . User ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser . id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . debug (" CurrentUser : Ġ${ user . firstName }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( call . authentication . principal Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . debug (" Not Ġlogged Ġin .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ