package Ġorg . tok end . template . features . signin . logic Ċ Ċ import Ġio . reactivex . Comp letable Ċ import Ġio . reactivex . Single Ċ import Ġio . reactivex . rx kotlin . to Maybe Ċ import Ġio . reactivex . rx kotlin . to Single Ċ import Ġio . reactivex . schedul ers . Schedulers Ċ import Ġorg . tok end . rx . extensions . to Comp letable Ċ import Ġorg . tok end . sdk . key server . Key Server Ċ import Ġorg . tok end . sdk . key server . models . K df Attributes Ċ import Ġorg . tok end . sdk . key server . models . Login Params Ċ import Ġorg . tok end . sdk . key server . models . Signer Data Ċ import Ġorg . tok end . sdk . key server . models . Wallet Info Ċ import Ġorg . tok end . sdk . utils . extent ions . is Conflict Ċ import Ġorg . tok end . template . features . key value . model . KeyValue Entry Record Ċ import Ġorg . tok end . template . di . providers . Api Provider Ċ import Ġorg . tok end . template . di . providers . Repository Provider Ċ import Ġorg . tok end . template . features . local account . logic . Local Account Retry Decrypt or Ċ import Ġorg . tok end . template . features . local account . model . Local Account Ċ import Ġorg . tok end . template . features . user key . logic . User Key Provider Ċ import Ġorg . tok end . template . logic . Session Ċ import Ġorg . tok end . template . logic . credentials . persistence . Credentials Persistence Ċ import Ġorg . tok end . template . util . cipher . Data Cipher Ċ import Ġorg . tok end . wallet . Account Ċ import Ġretrofit 2 . HttpException Ċ Ċ /** Ċ Ġ* ĠPerforms Ġsign Ġin Ġwith Ġgiven Ġ[ Account ]: Ċ Ġ* Ġrequests Ġauthorization Ġresult Ġfor Ġgiven Ġ[ Account ], Ċ Ġ* Ġsets Ġup ĠWallet Info Provider Ġand ĠAccount Provider , Ċ Ġ* Ġclears ĠCredentials Pers istor . Ċ Ġ* Ċ Ġ* Ġ@ see ĠPost SignIn Manager Ċ Ġ*/ Ċ class ĠSign In With Local Account UseCase ( ĊĠĠĠĠĠĠĠ Ġaccount Cipher : ĠData Cipher , ĊĠĠĠĠĠĠĠ Ġuser Key Provider : ĠUser Key Provider , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġsession : ĠSession , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġcredentials Persistence : ĠCredentials Persistence ?, ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġapi Provider : ĠApi Provider , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġrepository Provider : ĠRepository Provider , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġconnection State Provider : Ġ(() Ġ-> ĠBoolean )? , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġpost SignIn Actions : Ġ(() Ġ-> ĠComp letable )? Ċ ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġis Online : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġconnection State Provider ?. invoke () Ġ?: Ġtrue ĊĊĠĠĠ Ġprivate Ġval Ġaccount Decrypt or Ġ= ĠLocal Account Retry Decrypt or ( user Key Provider , Ġaccount Cipher ) ĊĠĠĠ Ġprivate Ġval Ġlocal Account Repository Ġ= Ġrepository Provider . local Account () ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġlocal Account : ĠLocal Account ĊĠĠĠ Ġprivate Ġvar Ġdefault Signer Role : ĠLong Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġaccount : ĠAccount ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġwallet Info : ĠWallet Info ĊĊĠĠĠ Ġfun Ġperform (): ĠComp letable Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġget Local Account () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. do On Success Ġ{ Ġlocal Account Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . local Account Ġ= Ġlocal Account ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdecrypt Local Account () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetDefault Signer Role If Online () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. do On Success Ġ{ Ġdefault Signer Role Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . default Signer Role Ġ= Ġdefault Signer Role ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġensure Remote Account Exists If Online () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Account () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. do On Success Ġ{ Ġaccount Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . account Ġ= Ġaccount ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Wallet Info () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. do On Success Ġ{ Ġwallet Info Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . wallet Info Ġ= Ġwallet Info ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Providers () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġperform Post SignIn () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. ignore Element () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Local Account (): ĠSingle < Local Account > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġlocal Account Repository ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. item ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Maybe () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. switch If Empty ( Single . error ( IllegalStateException (" There Ġis Ġno Ġlocal Ġaccount Ġin Ġthe Ġrepository "))) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdecrypt Local Account (): ĠSingle < Local Account > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġaccount Decrypt or . decrypt ( local Account ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠgetDefault Signer Role If Online (): ĠSingle < Long > Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! is Online ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠSingle . just ( 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġrepository Provider ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. key Value Entries () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. ensure Entries ( listOf ( Key Server . DEFAULT _ SIGN ER _ ROLE _ KEY _ VALUE _ KEY )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit [ Key Server . DEFAULT _ SIGN ER _ ROLE _ KEY _ VALUE _ KEY ] Ġas ĠKey Value Entry Record . Number ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map ( KeyValue Entry Record . Number :: value ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġensure Remote Account Exists If Online (): ĠSingle < Boolean > Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! is Online ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠSingle . just ( false ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠ Ġreturn Ġapi Provider . get Api () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. accounts ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. create Account ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠaccountId Ġ= Ġlocal Account . accountId , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsign ers Ġ= ĠlistOf ( Signer Data ( local Account . accountId , Ġdefault Signer Role )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Comp letable () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Single Default ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. onError Resume Next Ġ{ Ġerror Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( error Ġis ĠHttp Exception Ġ&& Ġerror . is Conflict ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSingle . just ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSingle . error ( error ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Account (): ĠSingle < Account > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocal Account . account ĊĠĠĠĠĠĠĠ Ġ}. to Single (). subscribe On ( Schedulers . computation ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Wallet Info (): ĠSingle < Wallet Info > Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠaccountId Ġ= Ġaccount . accountId ĊĊĠĠĠĠĠĠĠ Ġreturn ĠWallet Info ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠaccountId Ġ= ĠaccountId , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemail Ġ= ĠaccountId . substring ( 0 .. 3 ) Ġ+ Ġ" ..." Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠaccountId . substring ( accountId . length Ġ- Ġ 4 , ĠaccountId . length ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsecret Seed Ġ= Ġchar ArrayOf (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwallet Id Hex Ġ= Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogin Params Ġ= ĠLogin Params ("", Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠK df Attributes ("", Ġ 0 , Ġ 0 , Ġ 0 , Ġ 0 , Ġbyte ArrayOf ())) ĊĠĠĠĠĠĠĠ Ġ). to Single () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Providers (): ĠSingle < Boolean > Ġ{ ĊĠĠĠĠĠĠĠ Ġsession . set Wallet Info ( wallet Info ) ĊĠĠĠĠĠĠĠ Ġcredentials Persistence ?. clear ( false ) ĊĠĠĠĠĠĠĠ Ġsession . set Account ( account ) ĊĠĠĠĠĠĠĠ Ġsession . signIn Method Ġ= ĠSign In Method . LOCAL _ ACCOUNT ĊĊĠĠĠĠĠĠĠ Ġreturn ĠSingle . just ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġperform Post SignIn (): ĠSingle < Boolean > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġpost SignIn Actions ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . invoke () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . to Single Default ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: ĠSingle . just ( false ) ĊĠĠĠ Ġ} Ċ }