Files
bewcloud/lib/utils/multi-factor-auth.ts
Bruno Bernardino c7d6b8077b Enable Email as a MFA method/option (#68)
This adds Email as a multi-factor authentication method/option. It reuses the `VerificationCode` for the code generation and validation.

It also refactors the email templating for easier repurposing.

Finally, it has a small Deno version bump.

Closes #25
2025-06-11 15:53:39 +01:00

29 lines
1.1 KiB
TypeScript

// This file contains some multi-factor authentication utilities that are isomorphic.
import { MultiFactorAuthMethod, MultiFactorAuthMethodType, User } from '/lib/types.ts';
function getMultiFactorAuthMethodsFromUser(
user: { extra: Pick<User['extra'], 'multi_factor_auth_methods'> },
): MultiFactorAuthMethod[] {
return user.extra.multi_factor_auth_methods || [];
}
export function getEnabledMultiFactorAuthMethodsFromUser(
user: { extra: Pick<User['extra'], 'multi_factor_auth_methods'> },
): MultiFactorAuthMethod[] {
return getMultiFactorAuthMethodsFromUser(user).filter((method) => method.enabled);
}
export function getMultiFactorAuthMethodByIdFromUser(
user: { extra: Pick<User['extra'], 'multi_factor_auth_methods'> },
id: string,
): MultiFactorAuthMethod | undefined {
return getMultiFactorAuthMethodsFromUser(user).find((method) => method.id === id);
}
export function isMultiFactorAuthEnabledForUser(
user: { extra: Pick<User['extra'], 'multi_factor_auth_methods'> },
): boolean {
return getEnabledMultiFactorAuthMethodsFromUser(user).length > 0;
}