package Ġjet ty . ep . login Ċ Ċ import Ġcom . google . gson . Gson Ċ import Ġcom . google . gson . JsonObject Ċ import Ġcommon . Google Ċ import Ġcommon . functions . s Ċ import Ġjet ty . EndPoint Ċ import Ġjet ty . contact . emails Ċ import Ġobjects . EndPoint Reply Ċ import Ġorg . apache . shiro . Security Utils Ċ import Ġvert xl . Vert X Ċ import Ġjava . time . LocalDateTime Ċ Ċ class ĠTwo Factor Auth Recover Ġ: ĠEnd Point () Ġ{ ĊĠĠĠ Ġ// ĠThis Ġfollows Ġthe Ġsame Ġsetup Ġas ĠLogin Step 1 ĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġdo Action ( gson : ĠGson , Ġobj : ĠJsonObject , Ġend Point Reply : ĠEnd Point Reply , Ġut c Time : ĠLocalDateTime ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsubject ĠĠĠĠĠĠĠĠĠĠĠĠ Ġ= ĠSecurity Utils . get Subject () ĊĠĠĠĠĠĠĠ Ġval Ġexpected Token ĠĠĠĠĠĠ Ġ= Ġobj . s (" expected _ token ") Ġ Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġcode ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ= Ġobj . s (" code ") Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġreference ĠĠĠĠĠĠĠĠĠĠ Ġ= Ġsubject . session . getAttribute (" pre login ") ?. toString () Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġcapt cha ĠĠĠĠĠĠĠĠĠĠĠĠ Ġ= Ġobj . s (" captcha ") Ġ?: Ġ"" ĊĊĠĠĠĠĠĠĠ Ġif Ġ( subject . session . getAttribute (" expected _ token ") Ġ Ġ!= Ġexpected Token ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġ! Google . check Captcha ( captcha ) ĊĠĠĠĠĠĠĠ Ġ) Ġ{ Ġreturn Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġverify Ġthe Ġcode ĊĠĠĠĠĠĠĠ Ġval Ġo Ġ= ĠJsonObject (); ĊĠĠĠĠĠĠĠ Ġo . addProperty (" reference ", Ġreference ) ĊĠĠĠĠĠĠĠ Ġval Ġep My Info Ġ= ĠVert X . await For (" members . get - two - factor - key ", Ġo ) ĊĠĠĠĠĠĠĠ Ġif Ġ(! ep My Info . success ) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġval Ġb Ġ= Ġcode Ġ== Ġep My Info . data [" two Factor Recovery Code "]. asString ĊĠĠĠĠĠĠĠ Ġif (! b ) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġend Point Reply . success Ġ= Ġb ĊĊĠĠĠĠĠĠĠ Ġ// Allow Ġlogin ĊĠĠĠĠĠĠĠ Ġobj . addProperty (" remember Me ", Ġfalse ) ĊĠĠĠĠĠĠĠ ĠLogin Step 2 (). do Action ( gson , Ġobj , Ġend Point Reply , Ġut c Time ) ĊĊĠĠĠĠĠĠĠ Ġprintln ( ep My Info . data ) ĊĊĠĠĠĠĠĠĠ Ġemails (). ` two - factor - password Ġused `( ep My Info . data ) ĊĠĠĠ Ġ} Ċ }