package Ġorg . v accine impact . order ly web . security . authentication Ċ Ċ import Ġorg . pac 4 j . core . context . Web Context Ċ import Ġorg . pac 4 j . core . credentials . Token Credentials Ċ import Ġorg . pac 4 j . core . credentials . auth enticator . Authenticator Ċ import Ġorg . pac 4 j . core . exception . Credentials Exception Ċ import Ġorg . pac 4 j . core . profile . Common Profile Ċ import Ġorg . pac 4 j . core . util . Common Helper Ċ import Ġorg . v accine impact . order ly web . db . repositories . UserRepository Ċ import Ġorg . v accine impact . order ly web . models . User Source Ċ import Ġorg . v accine impact . order ly web . security . providers . Mont ag u APIClient Ċ import Ġorg . v accine impact . order ly web . security . providers . Mont ag u API Exception Ċ Ċ class ĠMont ag u Authenticator ( private Ġval Ġuser Repository : ĠUser Repository , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġmont ag u Client : ĠMont ag u APIClient Ċ ) Ġ: ĠAuth enticator < Token Credentials > Ċ { ĊĠĠĠ Ġoverride Ġfun Ġvalidate ( credentials : ĠToken Credentials ?, Ġcontext : ĠWeb Context ?) ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( credentials Ġ== Ġnull ) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠCredentials Exception (" No Ġcredentials Ġsupplied ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġtoken Ġ= Ġcredentials . token ĊĊĠĠĠĠĠĠĠ Ġif Ġ( Common Helper . isBlank ( token )) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠCredentials Exception (" Token Ġcannot Ġbe Ġblank ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġemail Ġ= Ġvalidate ( token ) ĊĊĠĠĠĠĠĠĠ Ġcredentials . user Profile Ġ= ĠCommon Profile (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . addAttribute (" url ", Ġ"* ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . id Ġ= Ġemail ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġvalidate ( token : ĠString ): ĠString ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġuser Ġ= Ġtry ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmont ag u Client . getUser Details ( token ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcatch Ġ( e : ĠMont ag u API Exception ) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠCredentials Exception (" Mont ag u Ġauthentication Ġfailed Ġwith Ġstatus Ġ${ e . status } Ġand Ġmessage Ġ${ e . message }") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġuser Repository . add User ( user . email , Ġuser . username , Ġuser . name Ġ?: Ġ"", ĠUser Source . Mont ag u ) ĊĠĠĠĠĠĠĠ Ġreturn Ġuser . email ĊĠĠĠ Ġ} Ċ Ċ }