/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 0 ĠTw ilio ĠInc . Ċ Ġ* Ċ Ġ* ĠLicensed Ġ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 Ġcom . tw ilio . verify . domain . factor Ċ Ċ import Ġcom . tw ilio . security . logger . Level Ċ import Ġcom . tw ilio . security . logger . Logger Ċ import Ġcom . tw ilio . verify . Tw ilio Verify Exception Ċ import Ġcom . tw ilio . verify . Tw ilio Verify Exception . ErrorCode . Storage Error Ċ import Ġcom . tw ilio . verify . api . Factor APIClient Ċ import Ġcom . tw ilio . verify . data . Storage Exception Ċ import Ġcom . tw ilio . verify . data . Storage Provider Ċ import Ġcom . tw ilio . verify . domain . factor . models . Create Factor Payload Ċ import Ġcom . tw ilio . verify . domain . factor . models . Update Factor Payload Ċ import Ġcom . tw ilio . verify . models . Factor Ċ import Ġorg . json . JSONObject Ċ Ċ internal Ġclass ĠFactor Repository ( ĊĠ Ġprivate Ġval ĠapiClient : ĠFactor APIClient , ĊĠ Ġprivate Ġval Ġstorage : ĠStorage Provider , ĊĠ Ġprivate Ġval Ġfactor Mapper : ĠFactor Mapper Ġ= ĠFactor Mapper () Ċ ) Ġ: ĠFactor Provider Ġ{ ĊĠ Ġoverride Ġfun Ġcreate ( ĊĠĠĠ Ġcreate Factor Payload : ĠCreate Factor Payload , ĊĠĠĠ Ġsuccess : Ġ( Factor ) Ġ-> ĠUnit , ĊĠĠĠ Ġerror : Ġ( Tw ilio Verify Exception ) Ġ-> ĠUnit ĊĠ Ġ) Ġ{ ĊĠĠĠ Ġfun Ġupdate Factor ( response : ĠJSONObject ) Ġ{ ĊĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfactor Ġ= Ġsave ( factor Mapper . from Api ( response , Ġcreate Factor Payload )) ĊĠĠĠĠĠĠĠ Ġsuccess ( factor ) ĊĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠTw ilio Verify Exception ) Ġ{ ĊĠĠĠĠĠĠĠ Ġerror ( e ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ ĠapiClient . create ( create Factor Payload , Ġ:: update Factor , Ġerror ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġverify ( ĊĠĠĠ Ġfactor : ĠFactor , ĊĠĠĠ Ġpayload : ĠString , ĊĠĠĠ Ġsuccess : Ġ( Factor ) Ġ-> ĠUnit , ĊĠĠĠ Ġerror : Ġ( Tw ilio Verify Exception ) Ġ-> ĠUnit ĊĠ Ġ) Ġ{ ĊĠĠĠ Ġfun Ġupdate Factor ( response : ĠJSONObject ) Ġ{ ĊĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġfactor . status Ġ= Ġfactor Mapper . status ( response ) ĊĠĠĠĠĠĠĠ Ġval Ġupdated Factor Ġ= Ġsave ( factor ) ĊĠĠĠĠĠĠĠ Ġsuccess ( updated Factor ) ĊĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠTw ilio Verify Exception ) Ġ{ ĊĠĠĠĠĠĠĠ Ġerror ( e ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ ĠapiClient . verify ( factor , Ġpayload , Ġ:: update Factor , Ġerror ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġupdate ( ĊĠĠĠ Ġupdate Factor Payload : ĠUpdate Factor Payload , ĊĠĠĠ Ġsuccess : Ġ( Factor ) Ġ-> ĠUnit , ĊĠĠĠ Ġerror : Ġ( Tw ilio Verify Exception ) Ġ-> ĠUnit ĊĠ Ġ) Ġ{ ĊĠĠĠ Ġfun Ġupdate Factor ( response : ĠJSONObject ) Ġ{ ĊĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġsuccess ( factor Mapper . from Api ( response , Ġupdate Factor Payload )) ĊĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠTw ilio Verify Exception ) Ġ{ ĊĠĠĠĠĠĠĠ Ġerror ( e ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġfactor Ġ= Ġget ( update Factor Payload . factor Sid ) Ġ?: Ġthrow ĠTw ilio Verify Exception ( ĊĠĠĠĠĠ ĠStorage Exception (" Factor Ġnot Ġfound "), ĠStorage Error ĊĠĠĠ Ġ) ĊĠĠĠ ĠapiClient . update ( factor , Ġupdate Factor Payload , Ġ:: update Factor , Ġerror ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġdelete ( ĊĠĠĠ Ġfactor : ĠFactor , ĊĠĠĠ Ġsuccess : Ġ() Ġ-> ĠUnit , ĊĠĠĠ Ġerror : Ġ( Tw ilio Verify Exception ) Ġ-> ĠUnit ĊĠ Ġ) Ġ{ ĊĠĠĠ Ġfun Ġdelete Factor () Ġ{ ĊĠĠĠĠĠ Ġdelete ( factor ) ĊĠĠĠĠĠ Ġsuccess () ĊĠĠĠ Ġ} ĊĠĠĠ ĠapiClient . delete ( factor , Ġ:: delete Factor , Ġerror ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġdelete ( factor : ĠFactor ) Ġ{ ĊĠĠĠ Ġstorage . remove ( factor . sid ) ĊĠ Ġ} ĊĊĠ Ġ@ Throws ( Tw ilio Verify Exception :: class ) ĊĠ Ġoverride Ġfun Ġget ( sid : ĠString ): ĠFactor ? Ġ= ĊĠĠĠ Ġstorage . get ( sid ) ĊĠĠĠĠĠ Ġ? . let Ġ{ ĊĠĠĠĠĠĠĠ Ġfactor Mapper . from Storage ( it ) ĊĠĠĠĠĠ Ġ} ĊĊĠ Ġ@ Throws ( Tw ilio Verify Exception :: class ) ĊĠ Ġoverride Ġfun Ġsave ( factor : ĠFactor ): ĠFactor Ġ{ ĊĠĠĠ Ġstorage . save ( factor . sid , Ġfactor Mapper . toJSON ( factor )) ĊĠĠĠ Ġreturn Ġget ( factor . sid ) Ġ?: Ġthrow ĠTw ilio Verify Exception ( ĊĠĠĠĠĠ ĠStorage Exception (" Factor Ġnot Ġfound "). also Ġ{ ĠLogger . log ( Level . Error , Ġit . toString (), Ġit ) Ġ}, ĠStorage Error ĊĠĠĠ Ġ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġclear LocalStorage () Ġ{ ĊĠĠĠ Ġstorage . clear () ĊĠ Ġ} ĊĊĠ Ġ@ Throws ( Tw ilio Verify Exception :: class ) ĊĠ Ġoverride Ġfun ĠgetAll (): ĠList < Factor > Ġ= ĊĠĠĠ Ġstorage . getAll () ĊĠĠĠĠĠ Ġ. map NotNull Ġ{ Ġfactor Mapper . from Storage ( it ) Ġ} Ċ } Ċ