diff --git a/libs/common/src/abstractions/fido2/fido2.service.abstraction.ts b/libs/common/src/abstractions/fido2/fido2.service.abstraction.ts index 1e9d9d382e7..203a9465cc8 100644 --- a/libs/common/src/abstractions/fido2/fido2.service.abstraction.ts +++ b/libs/common/src/abstractions/fido2/fido2.service.abstraction.ts @@ -54,9 +54,30 @@ export interface CredentialAssertResult { userHandle: string; } -export class RequestAbortedError extends Error { - constructor(readonly fallbackRequested = false) { - super("Fido2 request was aborted"); +export class Fido2Error extends Error { + constructor(message: string, readonly fallbackRequested = false) { + super(message); + } +} + +export class RequestAbortedError extends Fido2Error { + constructor(fallbackRequested = false) { + super("Fido2 request was aborted", fallbackRequested); + } +} + +export class NoCredentialFoundError extends Fido2Error { + constructor() { + super("No valid credential found", true); + } +} + +export class OriginMismatchError extends Fido2Error { + constructor() { + super( + "Authentication requests must originate from the same source that created the credential.", + false + ); } } diff --git a/libs/common/src/services/fido2/fido2.service.ts b/libs/common/src/services/fido2/fido2.service.ts index 1818e77c74a..2c7e1a98310 100644 --- a/libs/common/src/services/fido2/fido2.service.ts +++ b/libs/common/src/services/fido2/fido2.service.ts @@ -8,6 +8,8 @@ import { CredentialRegistrationParams, CredentialRegistrationResult, Fido2Service as Fido2ServiceAbstraction, + NoCredentialFoundError, + OriginMismatchError, } from "../../abstractions/fido2/fido2.service.abstraction"; import { Utils } from "../../misc/utils"; @@ -118,11 +120,11 @@ export class Fido2Service implements Fido2ServiceAbstraction { } if (credential === undefined) { - throw new Error("No valid credentials found"); + throw new NoCredentialFoundError(); } if (credential.origin !== params.origin) { - throw new Error("Not allowed: Origin mismatch"); + throw new OriginMismatchError(); } const encoder = new TextEncoder();