package Ġio . github . john fg 1 0 . vertx anno Ċ Ċ import Ġio . github . john fg 1 0 . vertx anno . annotations . Auth Type Ċ import Ġio . github . john fg 1 0 . vertx anno . annotations . Controller Ċ import Ġio . github . john fg 1 0 . vertx anno . annotations . Enable Cookies Ċ import Ġio . github . john fg 1 0 . vertx anno . annotations . Enable Sessions Ċ import Ġio . github . john fg 1 0 . vertx anno . annotations . field annotations . Blocking Ċ import Ġio . github . john fg 1 0 . vertx anno . annotations . field annotations . Produces MimeType Ċ import Ġio . github . john fg 1 0 . vertx anno . annotations . field annotations . Cons umes MimeType Ċ import Ġio . github . john fg 1 0 . vertx anno . annotations . field annotations . Disable Ċ import Ġio . github . john fg 1 0 . vertx anno . annotations . http .* Ċ import Ġio . github . john fg 1 0 . vertx anno . annotations . inject ors . routing . Routing Context Ċ import Ġio . github . john fg 1 0 . vertx anno . routing . AR oute Ċ import Ġio . github . john fg 1 0 . vertx anno . routing . Anno Route Ċ import Ġio . github . lu keh utch . fast classpath scanner . Fast Classpath Scanner Ċ import Ġio . github . lu keh utch . fast classpath scanner . scanner . Scan Result Ċ import Ġio . vertx . core . Abstract Vert icle Ċ import Ġio . vertx . core . Context Ċ import Ġio . vertx . core . Future Ċ import Ġio . vertx . core . Vert x Ċ import Ġio . vertx . core . http . HttpMethod Ċ import Ġio . vertx . core . http . HttpServer Ċ import Ġio . vertx . core . json . Json Ċ import Ġio . vertx . ext . auth . Auth Provider Ċ import Ġio . vertx . ext . auth . oauth 2 . OAuth 2 Auth Ċ import Ġio . vertx . ext . auth . oauth 2 . OAuth 2 Client Options Ċ import Ġio . vertx . ext . auth . oauth 2 . OAuth 2 Flow Type Ċ import Ġio . vertx . ext . web . Router Ċ import Ġio . vertx . ext . web . handler . Cookie Handler Ċ import Ġio . vertx . ext . web . handler . OAuth 2 Auth Handler Ċ import Ġio . vertx . ext . web . handler . Session Handler Ċ import Ġio . vertx . ext . web . s store . Local Session Store Ċ import Ġkotlin . reflect . full .* Ċ import Ġkotlin . reflect . jvm . jvm Er asure Ċ Ċ class ĠVert x Anno Ġ: ĠAbstract Vert icle () Ġ{ ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġserver : ĠHttp Server ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġrouter : ĠRouter ĊĠĠĠ Ġprivate Ġvar Ġscan Result : ĠScan Result ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġa Route List Ġ= Ġmutable ListOf < AR oute >() ĊĠĠĠ Ġprivate Ġvar Ġauth Provider : ĠAuth Provider ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun Ġinit ( vertx : ĠVert x , Ġcontext : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvert x . execute Blocking < Int >({ Ġfuture Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġserver Ġ= Ġvert x . create HttpServer () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrouter Ġ= ĠRouter . router ( vertx ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġserver . request Handler ( router :: accept ). listen ( 8 0 8 1 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfuture . complete ( server . actual Port ()) ĊĠĠĠĠĠĠĠ Ġ}, Ġ{ Ġres Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" The Ġresult Ġis : Ġ${ res . result () }") ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġsuper . init ( vertx , Ġcontext ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġstart ( start Future : ĠFuture < Void > ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġscan Result Ġ= ĠFast Classpath Scanner ( config (). getString (" src package ", Ġ" ")). scan () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( config (). containsKey (" auth _ provider _ class ")){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġauth Provider Ġ= Ġscan Result !!. className To Class Ref ( config (). getString (" auth _ provider _ class ")). as Subclass ( Authentication Provider :: class . java ). newInstance (). get Auth Provider () ĊĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" No Ġauth Ġprovider Ġconfigured !") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġcontroller Cl ases Ġ= Ġscan Result !!. class Names To Class Refs ( scan Result !!. get Names Of Classes With Annotation ( Controller :: class . java )) ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( clazz Ġin Ġcontroller Cl ases . filter Ġ{ Ġit . is Annotation Present ( Controller :: class . java ) Ġ} ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontroller Ġ= Ġclazz :: class . find Annotation < Controller >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( func Ġin Ġclazz . kotlin . functions . filter Ġ{ Ġit . find Annotation < HTTP >() Ġ!= Ġnull Ġ} ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhttp Ġ= Ġfunc . find Annotation < HTTP >() !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa Route List . add ( AR oute ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinst Ġ= Ġclazz . newInstance (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġk Function Ġ= Ġfunc , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhttp Method Ġ= Ġif Ġ( http . http Method Ġ== ĠHttpMethod . OTHER Ġ&& Ġhttp . http Other Ġ== Ġ" UN SET "){ Ġnull Ġ} Ġelse Ġ{ Ġhttp . http Method Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath Ġ= Ġif Ġ( controller Ġ== Ġnull ){ Ġhttp . path Ġ} Ġelse Ġ{ Ġcontroller . path Ġ+ Ġhttp . path Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath Uses Regex Ġ= Ġhttp . use Regex , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Enabled Ġ= Ġfunc . find Annotation < Disable >() Ġ!= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproduces MimeType Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( func . find Annotation < Produces MimeType >() Ġ!= Ġnull ){ Ġfunc . find Annotation < Produces MimeType >() !!. pro duces MimeType Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ Ġnull Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconsume s MimeType Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( func . find Annotation < Cons umes MimeType >() Ġ!= Ġnull ){ Ġfunc . find Annotation < Cons umes MimeType >() !!. consume s MimeType Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ Ġnull Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauth Provider Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfunc . find Annotation < Auth Type >() Ġ!= Ġnull Ġ-> Ġresolve Auth Type ( func . find Annotation < Auth Type >() !!. E Auth Type ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclazz . is Annotation Present ( Auth Type :: class . java ) Ġ-> Ġresolve Auth Type ( clazz . getAnnotation ( Auth Type :: class . java ). E Auth Type ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenable Cookies Ġ= Ġfunc . find Annotation < Enable Cookies >() Ġ!= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenable Sessions Ġ= Ġfunc . find Annotation < Enable Sessions >() Ġ!= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Blocking Ġ= Ġfunc . find Annotation < Blocking >() Ġ!= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġa Route List . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġroute Ġ= Ġrouter . route () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġroute . use Normal ised Path ( true ). path ( it . path ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . http Method Ġ!= Ġnull ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroute . method ( it . http Method ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . pro duces MimeType Ġ!= Ġnull ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroute . pro duces ( it . pro duces MimeType ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . consume s MimeType Ġ!= Ġnull ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroute . consume s ( it . consume s MimeType ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . enable Cookies ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroute . handler ( Cookie Handler . create ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . enable Sessions ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// todo Ġinter gr ate Ġthis Ġwith Ġthe Ġconfig Ġsystem ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroute . handler ( Session Handler . create ( Local Session Store . create ( vertx ))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . auth Provider Ġ!= Ġnull ){ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen ( it . auth Provider ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠE Auth Type . OAuth 2 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOAuth 2 Auth Handler . create ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOAuth 2 Auth . create ( vertx , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOAuth 2 Flow Type . valueOf ( config (). getString (" oauth 2 _ flow ")), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOAuth 2 Client Options ( config (). get JsonObject (" oauth 2 _ client opts ")) )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . route Ġ= Ġroute ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġexecute ( context : Ġio . vertx . ext . web . Routing Context ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġarg List Ġ= Ġmutable ListOf < Any >() ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . k Function . value Parameters . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" name : Ġ${ it . name }, Ġis Ġoptional : Ġ${ it . is Optional }, Ġ${ it . annotations }} ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . type . jvm Er asure Ġ== ĠRouting Context :: class ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarg List . add ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . k Function . call ( it . inst , Ġ* arg List . to Typed Array ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . is Blocking ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroute . blocking Handler Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexecute ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} else Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroute . handler Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexecute ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġsuper . start ( start Future ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġstop ( stop Future : ĠFuture < Void > ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . stop ( stop Future ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġresolve Auth Type ( E Auth Type : ĠE Auth Type ) Ġ: ĠAuth Provider ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠScan Result . get Names Of Classes With Method Annotation Any Of ( var arg Ġannotations : ĠClass < *> ): ĠMutable List < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġclass List Ġ= Ġmutable ListOf < String >() ĊĠĠĠĠĠĠĠ Ġannotations . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclass List . addAll ( this . get Names Of Classes With Field Annotation ( it )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġclass List ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ< T > ĠCollection < T >. contains Any ( var arg Ġcontains : ĠT ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġcontains . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( this . contains ( it )){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} Ċ }