From fc2a6167170b8d974164b0ab045fc772cd84a9af Mon Sep 17 00:00:00 2001 From: chsakell Date: Fri, 9 Aug 2019 08:21:04 +0300 Subject: [PATCH] add disable2FA, reset recover codes functionality --- .../components/account/account.component.html | 2 +- .../components/account/account.component.ts | 39 ++++++++++++++++++- .../Controllers/ManageAccountController.cs | 6 ++- 3 files changed, 43 insertions(+), 4 deletions(-) diff --git a/AspNetCoreIdentity/ClientApp/app/components/account/account.component.html b/AspNetCoreIdentity/ClientApp/app/components/account/account.component.html index e49d6f2..48dc9ab 100644 --- a/AspNetCoreIdentity/ClientApp/app/components/account/account.component.html +++ b/AspNetCoreIdentity/ClientApp/app/components/account/account.component.html @@ -69,7 +69,7 @@

Account management

- +
diff --git a/AspNetCoreIdentity/ClientApp/app/components/account/account.component.ts b/AspNetCoreIdentity/ClientApp/app/components/account/account.component.ts index 9867685..d85ca58 100644 --- a/AspNetCoreIdentity/ClientApp/app/components/account/account.component.ts +++ b/AspNetCoreIdentity/ClientApp/app/components/account/account.component.ts @@ -50,7 +50,7 @@ export class AccountComponent { self.generatingQrCode = false; (document.querySelector("#genQrCode > img") as HTMLInputElement).style.margin = "0 auto"; }, - 1000); + 200); }, error => console.error(error)); } @@ -74,6 +74,9 @@ export class AccountComponent { } this.displayAuthenticator = false; + this.generatingQrCode = false; + this.accountDetails.hasAuthenticator = true; + this.accountDetails.twoFactorEnabled = true; } else if (verifyAuthenticatorResult.status === StatusEnum.Error) { this.errors = verifyAuthenticatorResult.data.toString(); @@ -95,6 +98,40 @@ export class AccountComponent { }, error => console.error(error)); } + + disable2FA() { + this.http.post(this.baseUrl + 'api/manageaccount/disable2FA', {}).subscribe(result => { + + let disable2FAResult = result.json() as ResultVM; + + if (disable2FAResult.status === StatusEnum.Success) { + this.stateService.displayNotification({ message: disable2FAResult.message, type: "success" }); + this.accountDetails.twoFactorEnabled = false; + } else { + this.stateService.displayNotification({ message: disable2FAResult.message, type: "danger" }); + } + }, + error => console.error(error)); + } + + resetRecoverCodes() { + this.http.post(this.baseUrl + 'api/manageaccount/generateRecoveryCodes', {}).subscribe(result => { + + let generateRecoverCodesResult = result.json() as ResultVM; + + if (generateRecoverCodesResult.status === StatusEnum.Success) { + this.stateService.displayNotification({ message: generateRecoverCodesResult.message, type: "success" }); + + if (generateRecoverCodesResult.data && generateRecoverCodesResult.data.recoveryCodes) { + // display new recovery codes + this.recoveryCodes = generateRecoverCodesResult.data.recoveryCodes; + } + } else { + this.stateService.displayNotification({ message: generateRecoverCodesResult.message, type: "danger" }); + } + }, + error => console.error(error)); + } } interface AccountDetailsVM { diff --git a/AspNetCoreIdentity/Controllers/ManageAccountController.cs b/AspNetCoreIdentity/Controllers/ManageAccountController.cs index ed8807f..4f22c14 100644 --- a/AspNetCoreIdentity/Controllers/ManageAccountController.cs +++ b/AspNetCoreIdentity/Controllers/ManageAccountController.cs @@ -140,10 +140,12 @@ public async Task Disable2FA() }; } + var result = await _userManager.SetTwoFactorEnabledAsync(user, false); + return new ResultVM { - Status = Status.Success, - Message = "2FA has been successfully disabled" + Status = result.Succeeded ? Status.Success : Status.Error, + Message = result.Succeeded ? "2FA has been successfully disabled" : $"Failed to disable 2FA {result.Errors.FirstOrDefault()?.Description}" }; }