@@ -15,93 +15,11 @@ internal async void UpdateSessionData(LocalStorage.DataStorage data)
1515 await this . _localStorage . SaveDataAsync ( data ) . ConfigureAwait ( false ) ;
1616 }
1717
18- internal async Task < VerifyResult > PostAuthSetup ( Server . VerifyResult result , string twManagedRecoveryCodeOverride , string authProvider )
19- {
20- var mainRecoveryCode = ( twManagedRecoveryCodeOverride ?? result . RecoveryCode ) ?? throw new InvalidOperationException ( "Server failed to return recovery code." ) ;
21-
22- ( var account , var deviceShare ) = result . IsNewUser
23- ? await this . CreateAccountAsync ( result . AuthToken , mainRecoveryCode ) . ConfigureAwait ( false )
24- : await this . RecoverAccountAsync ( result . AuthToken , mainRecoveryCode ) . ConfigureAwait ( false ) ;
25- var user = this . MakeUserAsync ( result . Email , result . PhoneNumber , account , result . AuthToken , result . WalletUserId , deviceShare , authProvider , result . AuthIdentifier ) ;
26- return new VerifyResult ( user , mainRecoveryCode ) ;
27- }
28-
2918 public async Task SignOutAsync ( )
3019 {
31- this . _user = null ;
3220 await this . _localStorage . SaveDataAsync ( new LocalStorage . DataStorage ( null , null , null , null , null , null , null ) ) . ConfigureAwait ( false ) ;
3321 }
3422
35- public async Task < User > GetUserAsync ( string email , string phone , string authProvider )
36- {
37- email = email ? . ToLower ( ) ;
38-
39- if ( this . _user != null )
40- {
41- return this . _user ;
42- }
43- else if ( this . _localStorage . Data ? . AuthToken == null )
44- {
45- throw new InvalidOperationException ( "User is not signed in" ) ;
46- }
47-
48- var userWallet = await this . _server . FetchUserDetailsAsync ( null , this . _localStorage . Data . AuthToken ) . ConfigureAwait ( false ) ;
49- switch ( userWallet . Status )
50- {
51- case "Logged Out" :
52- throw new InvalidOperationException ( "User is logged out" ) ;
53- case "Logged In, Wallet Uninitialized" :
54- throw new InvalidOperationException ( "User is logged in but wallet is uninitialized" ) ;
55- case "Logged In, Wallet Initialized" :
56- if ( string . IsNullOrEmpty ( this . _localStorage . Data ? . DeviceShare ) )
57- {
58- throw new InvalidOperationException ( "User is logged in but wallet is uninitialized" ) ;
59- }
60-
61- var authShare = await this . _server . FetchAuthShareAsync ( this . _localStorage . Data . AuthToken ) . ConfigureAwait ( false ) ;
62- var emailAddress = userWallet . StoredToken ? . AuthDetails . Email ;
63- var phoneNumber = userWallet . StoredToken ? . AuthDetails . PhoneNumber ;
64-
65- if ( ( email != null && email != emailAddress ) || ( phone != null && phone != phoneNumber ) )
66- {
67- throw new InvalidOperationException ( "User email or phone number do not match" ) ;
68- }
69- else if ( email == null && this . _localStorage . Data . AuthProvider != authProvider )
70- {
71- throw new InvalidOperationException ( $ "User auth provider does not match. Expected { this . _localStorage . Data . AuthProvider } , got { authProvider } ") ;
72- }
73- else if ( authShare == null )
74- {
75- throw new InvalidOperationException ( "Server failed to return auth share" ) ;
76- }
77-
78- this . _user = new User ( MakeAccountFromShares ( new [ ] { authShare , this . _localStorage . Data . DeviceShare } ) , emailAddress , phoneNumber ) ;
79- return this . _user ;
80- default :
81- break ;
82- }
83- throw new InvalidOperationException ( $ "Unexpected user status '{ userWallet . Status } '") ;
84- }
85-
86- private User MakeUserAsync ( string emailAddress , string phoneNumber , Account account , string authToken , string walletUserId , string deviceShare , string authProvider , string authIdentifier )
87- {
88- var data = new LocalStorage . DataStorage ( authToken , deviceShare , emailAddress , phoneNumber , walletUserId , authProvider , authIdentifier ) ;
89- this . UpdateSessionData ( data ) ;
90- this . _user = new User ( account , emailAddress , phoneNumber ) ;
91- return this . _user ;
92- }
93-
94- private async Task < ( Account account , string deviceShare ) > CreateAccountAsync ( string authToken , string recoveryCode )
95- {
96- var secret = Secrets . Random ( KEY_SIZE ) ;
97-
98- ( var deviceShare , var recoveryShare , var authShare ) = CreateShares ( secret ) ;
99- var encryptedRecoveryShare = await this . EncryptShareAsync ( recoveryShare , recoveryCode ) . ConfigureAwait ( false ) ;
100- Account account = new ( secret ) ;
101- await this . _server . StoreAddressAndSharesAsync ( account . Address , authShare , encryptedRecoveryShare , authToken ) . ConfigureAwait ( false ) ;
102- return ( account , deviceShare ) ;
103- }
104-
10523 internal async Task < ( Account account , string deviceShare ) > RecoverAccountAsync ( string authToken , string recoveryCode )
10624 {
10725 ( var authShare , var encryptedRecoveryShare ) = await this . _server . FetchAuthAndRecoverySharesAsync ( authToken ) . ConfigureAwait ( false ) ;
0 commit comments