From 4abc9b9f31709e20af9cba7a46f88eebbcb85017 Mon Sep 17 00:00:00 2001 From: DrGurin <48029138+DrGurin@users.noreply.github.com> Date: Fri, 26 Jul 2019 17:26:08 +0300 Subject: [PATCH] Some fixes with masterpassword and new `Reset` button (#48) * added new password-functional * small fixes: --- .../app/_helpers/services/backend.service.ts | 7 + .../_helpers/services/variables.service.ts | 1 + .../html_source/src/app/app.component.html | 1 - .../src/app/login/login.component.html | 7 +- .../src/app/login/login.component.ts | 194 ++++++++++-------- .../src/app/settings/settings.component.ts | 15 +- .../html_source/src/assets/i18n/en.json | 1 + .../src/assets/scss/base/_base.scss | 3 +- 8 files changed, 140 insertions(+), 89 deletions(-) diff --git a/src/gui/qt-daemon/html_source/src/app/_helpers/services/backend.service.ts b/src/gui/qt-daemon/html_source/src/app/_helpers/services/backend.service.ts index 84385588..29d551c8 100644 --- a/src/gui/qt-daemon/html_source/src/app/_helpers/services/backend.service.ts +++ b/src/gui/qt-daemon/html_source/src/app/_helpers/services/backend.service.ts @@ -305,6 +305,13 @@ export class BackendService { this.runCommand('get_secure_app_data', pass, callback); } + setMasterPassword(pass, callback) { + this.runCommand('set_master_password', pass, callback); + } + + checkMasterPassword(pass, callback) { + this.runCommand('check_master_password', pass, callback); + } storeSecureAppData(callback?) { const wallets = []; this.variablesService.wallets.forEach((wallet) => { diff --git a/src/gui/qt-daemon/html_source/src/app/_helpers/services/variables.service.ts b/src/gui/qt-daemon/html_source/src/app/_helpers/services/variables.service.ts index d43f6c83..1f304d36 100644 --- a/src/gui/qt-daemon/html_source/src/app/_helpers/services/variables.service.ts +++ b/src/gui/qt-daemon/html_source/src/app/_helpers/services/variables.service.ts @@ -50,6 +50,7 @@ export class VariablesService { public enableAliasSearch = false; public maxWalletNameLength = 25; public maxCommentLength = 255; + public dataIsLoaded = false; getExpMedTsEvent = new BehaviorSubject(null); getHeightAppEvent = new BehaviorSubject(null); diff --git a/src/gui/qt-daemon/html_source/src/app/app.component.html b/src/gui/qt-daemon/html_source/src/app/app.component.html index d2a69858..7502af56 100644 --- a/src/gui/qt-daemon/html_source/src/app/app.component.html +++ b/src/gui/qt-daemon/html_source/src/app/app.component.html @@ -9,7 +9,6 @@ - {{ 'CONTEXT_MENU.COPY' | translate }} {{ 'CONTEXT_MENU.PASTE' | translate }} diff --git a/src/gui/qt-daemon/html_source/src/app/login/login.component.html b/src/gui/qt-daemon/html_source/src/app/login/login.component.html index b33949fe..3a1e67ce 100644 --- a/src/gui/qt-daemon/html_source/src/app/login/login.component.html +++ b/src/gui/qt-daemon/html_source/src/app/login/login.component.html @@ -35,10 +35,13 @@ - +
+ + +
- + \ No newline at end of file diff --git a/src/gui/qt-daemon/html_source/src/app/login/login.component.ts b/src/gui/qt-daemon/html_source/src/app/login/login.component.ts index 4944fe13..2fc23710 100644 --- a/src/gui/qt-daemon/html_source/src/app/login/login.component.ts +++ b/src/gui/qt-daemon/html_source/src/app/login/login.component.ts @@ -26,7 +26,7 @@ export class LoginComponent implements OnInit, OnDestroy { password: new FormControl('') }); - type = 'reg'; + type = 'reg'; constructor( private route: ActivatedRoute, @@ -47,10 +47,13 @@ export class LoginComponent implements OnInit, OnDestroy { onSubmitCreatePass(): void { if (this.regForm.valid) { - this.variablesService.appPass = this.regForm.get('password').value; - this.backend.storeSecureAppData((status, data) => { + this.variablesService.appPass = this.regForm.get('password').value //the pass what was written in input of login form by user + + this.backend.setMasterPassword({pass: this.variablesService.appPass}, (status, data) => { if (status) { + this.backend.storeSecureAppData({pass: this.variablesService.appPass}); this.variablesService.appLogin = true; + this.variablesService.dataIsLoaded = true; this.variablesService.startCountdown(); this.ngZone.run(() => { this.router.navigate(['/']); @@ -58,7 +61,8 @@ export class LoginComponent implements OnInit, OnDestroy { } else { console.log(data['error_code']); } - }); + + }) } } @@ -70,91 +74,115 @@ export class LoginComponent implements OnInit, OnDestroy { }); } + dropSecureAppData(): void{ + this.backend.dropSecureAppData(() => { + this.onSkipCreatePass(); + }); + } + onSubmitAuthPass(): void { if (this.authForm.valid) { - const appPass = this.authForm.get('password').value; - this.backend.getSecureAppData({pass: appPass}, (status, data) => { - if (!data.error_code) { - this.variablesService.appLogin = true; - this.variablesService.startCountdown(); - this.variablesService.appPass = appPass; - if (this.variablesService.wallets.length) { - this.ngZone.run(() => { - this.router.navigate(['/wallet/' + this.variablesService.wallets[0].wallet_id]); - }); - return; - } - if (Object.keys(data).length !== 0) { - let openWallets = 0; - let runWallets = 0; - data.forEach((wallet, wallet_index) => { - this.backend.openWallet(wallet.path, wallet.pass, true, (open_status, open_data, open_error) => { - if (open_status || open_error === 'FILE_RESTORED') { - openWallets++; - this.ngZone.run(() => { - const new_wallet = new Wallet( - open_data.wallet_id, - wallet.name, - wallet.pass, - open_data['wi'].path, - open_data['wi'].address, - open_data['wi'].balance, - open_data['wi'].unlocked_balance, - open_data['wi'].mined_total, - open_data['wi'].tracking_hey - ); - new_wallet.alias = this.backend.getWalletAlias(new_wallet.address); - if (wallet.staking) { - new_wallet.staking = true; - this.backend.startPosMining(new_wallet.wallet_id); - } else { - new_wallet.staking = false; - } - if (open_data.recent_history && open_data.recent_history.history) { - new_wallet.prepareHistory(open_data.recent_history.history); - } - this.backend.getContracts(open_data.wallet_id, (contracts_status, contracts_data) => { - if (contracts_status && contracts_data.hasOwnProperty('contracts')) { - this.ngZone.run(() => { - new_wallet.prepareContractsAfterOpen(contracts_data.contracts, this.variablesService.exp_med_ts, this.variablesService.height_app, this.variablesService.settings.viewedContracts, this.variablesService.settings.notViewedContracts); - }); - } - }); - this.variablesService.wallets.push(new_wallet); - if (this.variablesService.wallets.length === 1) { - this.router.navigate(['/wallet/' + this.variablesService.wallets[0].wallet_id]); - } - }); - this.backend.runWallet(open_data.wallet_id, (run_status) => { - if (run_status) { - runWallets++; - } else { - if (wallet_index === data.length - 1 && runWallets === 0) { - this.ngZone.run(() => { - this.router.navigate(['/']); - }); - } - } - }); - } else { - if (wallet_index === data.length - 1 && openWallets === 0) { - this.ngZone.run(() => { - this.router.navigate(['/']); - }); - } - } + this.variablesService.appPass = this.authForm.get('password').value; + + if (this.variablesService.dataIsLoaded) { + this.backend.checkMasterPassword({pass: this.variablesService.appPass}, (status, data) => { + if (status) { + this.variablesService.appLogin = true; + this.variablesService.startCountdown(); + this.ngZone.run(() => { + this.router.navigate(['/']); }); - }); - } else { - this.ngZone.run(() => { - this.router.navigate(['/']); - }); - } - } - }); + } + }) + } else { + this.getWalletData(this.variablesService.appPass) + } } } + getWalletData(appPass) { + this.backend.getSecureAppData({pass: appPass}, (status, data) => { + if (!data.error_code) { + this.variablesService.appLogin = true; + this.variablesService.dataIsLoaded = true; + this.variablesService.startCountdown(); + this.variablesService.appPass = appPass; + if (this.variablesService.wallets.length) { + this.ngZone.run(() => { + this.router.navigate(['/wallet/' + this.variablesService.wallets[0].wallet_id]); + }); + return; + } + if (Object.keys(data).length !== 0) { + let openWallets = 0; + let runWallets = 0; + data.forEach((wallet, wallet_index) => { + this.backend.openWallet(wallet.path, wallet.pass, true, (open_status, open_data, open_error) => { + if (open_status || open_error === 'FILE_RESTORED') { + openWallets++; + this.ngZone.run(() => { + const new_wallet = new Wallet( + open_data.wallet_id, + wallet.name, + wallet.pass, + open_data['wi'].path, + open_data['wi'].address, + open_data['wi'].balance, + open_data['wi'].unlocked_balance, + open_data['wi'].mined_total, + open_data['wi'].tracking_hey + ); + new_wallet.alias = this.backend.getWalletAlias(new_wallet.address); + if (wallet.staking) { + new_wallet.staking = true; + this.backend.startPosMining(new_wallet.wallet_id); + } else { + new_wallet.staking = false; + } + if (open_data.recent_history && open_data.recent_history.history) { + new_wallet.prepareHistory(open_data.recent_history.history); + } + this.backend.getContracts(open_data.wallet_id, (contracts_status, contracts_data) => { + if (contracts_status && contracts_data.hasOwnProperty('contracts')) { + this.ngZone.run(() => { + new_wallet.prepareContractsAfterOpen(contracts_data.contracts, this.variablesService.exp_med_ts, this.variablesService.height_app, this.variablesService.settings.viewedContracts, this.variablesService.settings.notViewedContracts); + }); + } + }); + this.variablesService.wallets.push(new_wallet); + if (this.variablesService.wallets.length === 1) { + this.router.navigate(['/wallet/' + this.variablesService.wallets[0].wallet_id]); + } + }); + this.backend.runWallet(open_data.wallet_id, (run_status) => { + if (run_status) { + runWallets++; + } else { + if (wallet_index === data.length - 1 && runWallets === 0) { + this.ngZone.run(() => { + this.router.navigate(['/']); + }); + } + } + }); + } else { + if (wallet_index === data.length - 1 && openWallets === 0) { + this.ngZone.run(() => { + this.router.navigate(['/']); + }); + } + } + }); + }); + } else { + this.ngZone.run(() => { + this.router.navigate(['/']); + }); + } + } + }); + } + ngOnDestroy() { this.queryRouting.unsubscribe(); diff --git a/src/gui/qt-daemon/html_source/src/app/settings/settings.component.ts b/src/gui/qt-daemon/html_source/src/app/settings/settings.component.ts index d5a5d579..03220b54 100644 --- a/src/gui/qt-daemon/html_source/src/app/settings/settings.component.ts +++ b/src/gui/qt-daemon/html_source/src/app/settings/settings.component.ts @@ -72,6 +72,7 @@ export class SettingsComponent implements OnInit { ]; currentBuild = ''; + appPass: any; constructor( private renderer: Renderer2, @@ -123,14 +124,24 @@ export class SettingsComponent implements OnInit { if (this.changeForm.valid) { this.variablesService.appPass = this.changeForm.get('new_password').value; if (this.variablesService.appPass) { - this.backend.storeSecureAppData(); + this.backend.setMasterPassword({pass: this.variablesService.appPass}, (status, data) => { + if (status) { + this.backend.storeSecureAppData({pass: this.variablesService.appPass}); + this.variablesService.appLogin = true; + this.variablesService.dataIsLoaded = true; + this.variablesService.startCountdown(); + } else { + console.log(data['error_code']); + } + + }) } else { this.backend.dropSecureAppData(); } this.changeForm.reset(); } } - + onLockChange() { if (this.variablesService.appLogin) { this.variablesService.restartCountdown(); diff --git a/src/gui/qt-daemon/html_source/src/assets/i18n/en.json b/src/gui/qt-daemon/html_source/src/assets/i18n/en.json index 62fab79d..2bebce57 100644 --- a/src/gui/qt-daemon/html_source/src/assets/i18n/en.json +++ b/src/gui/qt-daemon/html_source/src/assets/i18n/en.json @@ -5,6 +5,7 @@ "MASTER_PASS": "Master password", "BUTTON_NEXT": "Next", "BUTTON_SKIP": "Skip", + "BUTTON_RESET": "Reset", "INCORRECT_PASSWORD": "Invalid password", "FORM_ERRORS": { "PASS_REQUIRED": "Password is required", diff --git a/src/gui/qt-daemon/html_source/src/assets/scss/base/_base.scss b/src/gui/qt-daemon/html_source/src/assets/scss/base/_base.scss index d7aebcc7..f0625dbf 100644 --- a/src/gui/qt-daemon/html_source/src/assets/scss/base/_base.scss +++ b/src/gui/qt-daemon/html_source/src/assets/scss/base/_base.scss @@ -20,7 +20,8 @@ button { padding: 0 1rem; height: 4.2rem; - &:disabled:not(.transparent-button) { + &:disabled:not(.transparent-button), + &.blue-button_reset{ @include themify($themes) { background-color: themed(disabledButtonBackgroundColor);