/* Ċ Ġ* ĠLicensed Ġto Ġthe ĠApache ĠSoftware ĠFoundation Ġ( ASF ) Ġunder Ġone Ġor Ġmore Ċ Ġ* Ġcontributor Ġlicense Ġagreements . Ġ ĠSee Ġthe ĠNOTICE Ġfile Ġdistributed Ġwith Ċ Ġ* Ġthis Ġwork Ġfor Ġadditional Ġinformation Ġregarding Ġcopyright Ġownership . Ċ Ġ* ĠThe ĠASF Ġlicenses Ġthis Ġfile Ġto ĠYou Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ċ Ġ* Ġ( the Ġ" License "); Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ċ Ġ* Ġthe ĠLicense . Ġ ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ package Ġorg . apache . tu w eni . fa uc et Ċ Ċ import Ġio . vertx . core . Vert x Ċ import Ġorg . apache . tu w eni . wallet . Wallet Ċ import Ġorg . bouncycastle . j ce . provider . Bo unc y Castle Provider Ċ import Ġorg . springframework . beans . factory . annotation . Value Ċ import Ġorg . springframework . boot . autoconfigure . SpringBoot Application Ċ import Ġorg . springframework . boot . run Application Ċ import Ġorg . springframework . context . annotation . Bean Ċ import Ġorg . springframework . security . oauth 2 . client . OAuth 2 Authorized Client Ċ import Ġorg . springframework . security . oauth 2 . client . userinfo . Default OAuth 2 UserService Ċ import Ġorg . springframework . security . oauth 2 . client . userinfo . OAuth 2 UserRequest Ċ import Ġorg . springframework . security . oauth 2 . client . userinfo . OAuth 2 UserService Ċ import Ġorg . springframework . security . oauth 2 . client . web . reactive . function . client . Server OAuth 2 Authorized Client Exchange Filter Function . oauth 2 Authorized Client Ċ import Ġorg . springframework . security . oauth 2 . core . OAuth 2 Authentication Exception Ċ import Ġorg . springframework . security . oauth 2 . core . OAuth 2 Error Ċ import Ġorg . springframework . security . oauth 2 . core . user . OAuth 2 User Ċ import Ġorg . springframework . stereotype . Component Ċ import Ġorg . springframework . web . reactive . function . client . Web Client Ċ import Ġjava . nio . file . Files Ċ import Ġjava . nio . file . Paths Ċ import Ġjava . security . Security Ċ import Ġjavax . annotation . Post Construct Ċ import Ġjavax . annotation . Pre Destroy Ċ Ċ @ SpringBoot Application Ċ class ĠF auc et Application Ġ{ ĊĊĠ Ġ@ Value ("\ ${ banner }") ĊĠ Ġvar Ġbanner : ĠString ? Ġ= Ġnull ĊĊĠ Ġ@ Value ("\ ${ auth . org }") ĊĠ Ġvar Ġauthorized Org : ĠString ? Ġ= Ġnull ĊĊĠ Ġ@ Bean (" wallet ") ĊĠ Ġfun Ġcreate Wallet (@ Value ("\ ${ wallet . path }") Ġpath : ĠString , Ġ@ Value ("\ ${ wallet . password }") Ġpassword : ĠString ): ĠWallet Ġ{ ĊĠĠĠ Ġval Ġwallet Path Ġ= ĠPaths . get ( path ). to AbsolutePath () ĊĠĠĠ Ġif Ġ(! Files . exists ( wallet Path )) Ġ{ ĊĠĠĠĠĠ Ġreturn ĠWallet . create ( wallet Path , Ġpassword ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn ĠWallet . open ( wallet Path , Ġpassword ) ĊĠ Ġ} ĊĊĠ Ġval Ġvert x Ġ= ĠVert x . vertx () ĊĊĠ Ġ@ Bean ĊĠ Ġfun Ġcreate Vert x (): ĠVert x Ġ{ ĊĠĠĠ Ġreturn Ġvert x ĊĠ Ġ} ĊĊĠ Ġ@ Bean ĊĠ Ġfun Ġcreate Web Client (): ĠWeb Client Ġ{ ĊĠĠĠ Ġreturn ĠWeb Client . create () ĊĠ Ġ} ĊĊĠ Ġ@ Bean ĊĠ Ġfun Ġoauth 2 UserService ( rest : ĠWeb Client ): ĠOAuth 2 UserService < OAuth 2 UserRequest , ĠOAuth 2 User >? Ġ{ ĊĠĠĠ Ġval Ġdelegate Ġ= ĠDefault OAuth 2 UserService () ĊĠĠĠ Ġreturn ĠOAuth 2 UserService Ġ{ Ġrequest : ĠOAuth 2 UserRequest Ġ-> ĊĠĠĠĠĠ Ġval Ġuser Ġ= Ġdelegate . load User ( request ) ĊĠĠĠĠĠ Ġauthorized Org ?. let Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġclient Ġ= ĠOAuth 2 Authorized Client ( request . client Registration , Ġuser . name , Ġrequest . accessToken ) ĊĠĠĠĠĠĠĠ Ġval Ġurl Ġ= Ġuser . getAttribute < String >(" organizations _ url ") ĊĠĠĠĠĠĠĠ Ġval Ġorg s Ġ= Ġrest ĊĠĠĠĠĠĠĠĠĠ Ġ. get (). uri ( url Ġ?: Ġ"") ĊĠĠĠĠĠĠĠĠĠ Ġ. attributes ( oauth 2 Authorized Client ( client )) ĊĠĠĠĠĠĠĠĠĠ Ġ. retrieve () ĊĠĠĠĠĠĠĠĠĠ Ġ. body To Mono ( Mutable List :: class . java ) ĊĠĠĠĠĠĠĠĠĠ Ġ. block () ĊĠĠĠĠĠĠĠ Ġval Ġfound Ġ= Ġorg s ?. stream ()?. any Match Ġ{ Ġorg Ġ-> ĊĠĠĠĠĠĠĠĠĠ Ġauthorized Org Ġ== Ġ( org Ġas ĠMap < *, Ġ* >) [" login "] ĊĠĠĠĠĠĠĠ Ġ} Ġ?: Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ(! found ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġthrow ĠOAuth 2 Authentication Exception ( OAuth 2 Error (" invalid _ token ", Ġ" Not Ġin Ġauthorized Ġteam ", Ġ"")) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġuser ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ@ Post Construct ĊĠ Ġfun Ġbanner () Ġ{ ĊĠĠĠ Ġbanner ?. let Ġ{ ĊĠĠĠĠĠ Ġprintln ( it ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ@ Pre Destroy ĊĠ Ġfun Ġclose () Ġ{ ĊĠĠĠ Ġvert x . close () ĊĠ Ġ} Ċ } Ċ Ċ fun Ġmain ( args : ĠArray < String >) Ġ{ ĊĠ ĠSecurity . add Provider ( Bo unc y Castle Provider ()) ĊĠ Ġrun Application < Fa uc et Application >(* args ) Ċ } Ċ Ċ @ Component (" html Config ") Ċ class ĠHtml Config () Ġ{ ĊĠ Ġ@ Value ("\ ${ html . title }") ĊĠ Ġvar Ġtitle : ĠString ? Ġ= Ġnull ĊĊĠ Ġ@ Value ("\ ${ html . request _ message }") ĊĠ Ġvar Ġrequest Message : ĠString ? Ġ= Ġnull ĊĊĠ Ġ@ Value ("\ ${ html . address _ help }") ĊĠ Ġvar Ġaddress Help : ĠString ? Ġ= Ġnull ĊĊĠ Ġ@ Value ("\ ${ html . submit _ button }") ĊĠ Ġvar Ġsubmit Btn : ĠString ? Ġ= Ġnull ĊĊĠ Ġ@ Value ("\ ${ fa uc et . max ETH }") ĊĠ Ġvar Ġmax ETH : ĠLong ? Ġ= Ġnull Ċ } Ċ