From f1c48e734ebdcba2ad72f2be2ca218571c8b90f9 Mon Sep 17 00:00:00 2001 From: Akinwale Ariwodola Date: Thu, 28 Nov 2019 05:09:55 +0100 Subject: [PATCH] auto-login when no password is set --- src/page/firstRun/internal/wallet-page.js | 15 ++++++++---- src/page/firstRun/view.js | 13 +++++++++- .../verification/internal/sync-verify-page.js | 24 ++++++++++++++++--- 3 files changed, 44 insertions(+), 8 deletions(-) diff --git a/src/page/firstRun/internal/wallet-page.js b/src/page/firstRun/internal/wallet-page.js index aee7348..13e1c15 100644 --- a/src/page/firstRun/internal/wallet-page.js +++ b/src/page/firstRun/internal/wallet-page.js @@ -29,6 +29,7 @@ class WalletPage extends React.PureComponent { hasCheckedSync: false, revealPassword: false, autoPassword: false, + autoLoginAttempted: false, }; componentDidMount() { @@ -36,7 +37,7 @@ class WalletPage extends React.PureComponent { } componentDidUpdate() { - const { hasSyncedWallet, getSyncIsPending, onPasswordChanged } = this.props; + const { hasSyncedWallet, getSyncIsPending, onPasswordChanged, autoLogin } = this.props; if (this.state.walletReady && this.state.hasCheckedSync && !getSyncIsPending) { if (!hasSyncedWallet && !this.state.autoPassword) { // new account, in which case, don't ask for a password, and act as the final first run step @@ -45,6 +46,11 @@ class WalletPage extends React.PureComponent { onPasswordChanged('', true); } } + + if (hasSyncedWallet && !this.state.autoLoginAttempted && autoLogin) { + autoLogin(); + this.setState({ autoLoginAttempted: true }); + } } } @@ -83,6 +89,7 @@ class WalletPage extends React.PureComponent { hasSyncedWallet, syncApplyIsPending, syncApplyStarted, + syncApplyCompleted, } = this.props; let content; @@ -93,15 +100,15 @@ class WalletPage extends React.PureComponent { Retrieving your account information... ); - } else if (syncApplyStarted || syncApplyIsPending) { + } else if (syncApplyStarted || syncApplyIsPending || syncApplyCompleted) { content = ( {syncApplyIsPending ? 'Validating password' : 'Synchronizing'}... ); - } else if (hasSyncedWallet) { - // only display this view if it's not a new user + } else if (hasSyncedWallet && this.state.autoLoginAttempted) { + // only display this view if it's not a new user (or auto-login has been attempted once) content = ( Password diff --git a/src/page/firstRun/view.js b/src/page/firstRun/view.js index 60d74f9..5079965 100644 --- a/src/page/firstRun/view.js +++ b/src/page/firstRun/view.js @@ -35,6 +35,7 @@ class FirstRunScreen extends React.PureComponent { showBottomContainer: false, walletPassword: '', syncApplyStarted: false, + syncApplyCompleted: false, }; componentDidMount() { @@ -78,8 +79,9 @@ class FirstRunScreen extends React.PureComponent { if (this.state.syncApplyStarted && !syncApplyIsPending) { if (syncApplyErrorMessage && syncApplyErrorMessage.trim().length > 0) { notify({ message: syncApplyErrorMessage, isError: true }); - this.setState({ showBottomContainer: true, syncApplyStarted: false }); + this.setState({ showBottomContainer: true, syncApplyStarted: false, syncApplyCompleted: false }); } else { + this.setState({ syncApplyCompleted: true }); // password successfully verified NativeModules.UtilityModule.setSecureValue( Constants.KEY_WALLET_PASSWORD, @@ -160,6 +162,13 @@ class FirstRunScreen extends React.PureComponent { }); }; + autoLogin = () => { + const { hasSyncedWallet } = this.props; + if (hasSyncedWallet && !this.state.syncApplyStarted) { + this.checkWalletPassword(); + } + }; + handleContinuePressed = () => { const { notify, user, hasSyncedWallet } = this.props; const pageIndex = FirstRunScreen.pages.indexOf(this.state.currentPage); @@ -376,8 +385,10 @@ class FirstRunScreen extends React.PureComponent { getSyncIsPending={getSyncIsPending} syncApplyIsPending={syncApplyIsPending} syncApplyStarted={this.state.syncApplyStarted} + syncApplyCompleted={this.state.syncApplyCompleted} onWalletViewLayout={this.onWalletViewLayout} onPasswordChanged={this.onWalletPasswordChanged} + autoLogin={this.autoLogin} /> ); break; diff --git a/src/page/verification/internal/sync-verify-page.js b/src/page/verification/internal/sync-verify-page.js index 3054c5d..41370c9 100644 --- a/src/page/verification/internal/sync-verify-page.js +++ b/src/page/verification/internal/sync-verify-page.js @@ -16,9 +16,12 @@ class SyncVerifyPage extends React.PureComponent { password: null, placeholder: 'password', syncApplyStarted: false, + syncApplyCompleted: false, syncChecked: false, revealPassword: false, autoPassword: false, + autoLoginAttempted: false, + autoLoginFlow: true, }; componentDidMount() { @@ -65,9 +68,11 @@ class SyncVerifyPage extends React.PureComponent { if (this.state.syncApplyStarted && !syncApplyIsPending) { if (syncApplyErrorMessage && syncApplyErrorMessage.trim().length > 0) { notify({ message: syncApplyErrorMessage, isError: true }); - this.setState({ syncApplyStarted: false }); + this.setState({ syncApplyStarted: false, autoLoginFlow: false }); } else { // password successfully verified + this.setState({ syncApplyCompleted: true }); + if (NativeModules.UtilityModule) { NativeModules.UtilityModule.setSecureValue( Constants.KEY_WALLET_PASSWORD, @@ -87,6 +92,10 @@ class SyncVerifyPage extends React.PureComponent { this.setState({ password: '', autoPassword: true }); this.onEnableSyncPressed(); } + + if (this.state.syncChecked && hasSyncedWallet && !this.state.autoLoginAttempted) { + this.setState({ autoLoginAttempted: true, password: '' }, () => this.onEnableSyncPressed()); + } } finishSync = (notifyUnlockFailed = false) => { @@ -143,7 +152,16 @@ class SyncVerifyPage extends React.PureComponent { Retrieving your account information... ); - } else if (hasSyncedWallet) { + } else if (this.state.autoLoginFlow && (syncApplyIsPending || this.state.syncApplyCompleted)) { + // first attempt at auto-login, only display activity indicator + content = ( + + + + + + ); + } else if (hasSyncedWallet && this.state.autoLoginAttempted) { content = ( Wallet Sync @@ -208,7 +226,7 @@ class SyncVerifyPage extends React.PureComponent { onPress={this.onEnableSyncPressed} /> )} - {syncApplyIsPending && ( + {(syncApplyIsPending || this.state.syncApplyCompleted) && (