From 09d09f7e3d7f02228442cba21d515bb63f63f418 Mon Sep 17 00:00:00 2001 From: Andreas Coroiu Date: Wed, 10 May 2023 15:09:27 +0200 Subject: [PATCH] [PM-2014] feat: implement deletion without user verification --- .../core/services/webauthn/webauthn-api.service.ts | 4 ++++ .../auth/core/services/webauthn/webauthn.service.ts | 13 +++++++++++++ .../delete-credential-dialog.component.ts | 11 ++++++++++- apps/web/src/locales/en/messages.json | 3 +++ 4 files changed, 30 insertions(+), 1 deletion(-) diff --git a/apps/web/src/app/auth/core/services/webauthn/webauthn-api.service.ts b/apps/web/src/app/auth/core/services/webauthn/webauthn-api.service.ts index c525eda725f..7f4165f023c 100644 --- a/apps/web/src/app/auth/core/services/webauthn/webauthn-api.service.ts +++ b/apps/web/src/app/auth/core/services/webauthn/webauthn-api.service.ts @@ -34,4 +34,8 @@ export class WebauthnApiService { getCredentials(): Promise> { return this.apiService.send("GET", "/webauthn", null, true, true); } + + deleteCredential(id: string): Promise { + return this.apiService.send("DELETE", `/webauthn/${id}`, null, true, true); + } } diff --git a/apps/web/src/app/auth/core/services/webauthn/webauthn.service.ts b/apps/web/src/app/auth/core/services/webauthn/webauthn.service.ts index f2051429323..18da0da7452 100644 --- a/apps/web/src/app/auth/core/services/webauthn/webauthn.service.ts +++ b/apps/web/src/app/auth/core/services/webauthn/webauthn.service.ts @@ -114,6 +114,19 @@ export class WebauthnService { ); } + async deleteCredential(credentialId: string): Promise { + try { + await this.apiService.deleteCredential(credentialId); + this.platformUtilsService.showToast("success", null, this.i18nService.t("passkeyRemoved")); + this.refresh(); + return true; + } catch (error) { + this.logService?.error(error); + this.platformUtilsService.showToast("error", null, this.i18nService.t("unexpectedError")); + return false; + } + } + private getCredentials$(): Observable { return from(this.apiService.getCredentials()).pipe(map((response) => response.data)); } diff --git a/apps/web/src/app/auth/settings/fido2-login-settings/delete-credential-dialog/delete-credential-dialog.component.ts b/apps/web/src/app/auth/settings/fido2-login-settings/delete-credential-dialog/delete-credential-dialog.component.ts index 53536406083..d5d001813b3 100644 --- a/apps/web/src/app/auth/settings/fido2-login-settings/delete-credential-dialog/delete-credential-dialog.component.ts +++ b/apps/web/src/app/auth/settings/fido2-login-settings/delete-credential-dialog/delete-credential-dialog.component.ts @@ -38,7 +38,16 @@ export class DeleteCredentialDialogComponent implements OnInit, OnDestroy { } submit = async () => { - // empty + if (this.credential === undefined) { + return; + } + + this.dialogRef.disableClose = true; + if (!(await this.webauthnService.deleteCredential(this.credential.id))) { + this.dialogRef.disableClose = false; + return; + } + this.dialogRef.close(); }; ngOnDestroy(): void { diff --git a/apps/web/src/locales/en/messages.json b/apps/web/src/locales/en/messages.json index 02f51596138..355b1be6561 100644 --- a/apps/web/src/locales/en/messages.json +++ b/apps/web/src/locales/en/messages.json @@ -673,6 +673,9 @@ } } }, + "passkeyRemoved": { + "message": "Passkey removed" + }, "removePasskey": { "message": "Remove passkey" },