feat(EE): MFA implementation (#1381)

* feat(EE): MFA implementation for enterprise edition
- Add TOTP-based two-factor authentication
- Add backup codes support
- Add MFA enforcement at workspace level
- Add MFA setup and challenge UI pages
- Support MFA for login and password reset flows
- Add MFA validation for secure pages
* fix types
* remove unused object
* sync
* remove unused type
* sync
* refactor: rename MFA enabled field to is_enabled
* sync
This commit is contained in:
Philip Okugbe
2025-07-25 00:18:53 +01:00
committed by GitHub
parent 8522844673
commit 662460252f
49 changed files with 2026 additions and 54 deletions
@@ -0,0 +1,15 @@
import React from "react";
import { isCloud } from "@/lib/config";
import { useLicense } from "@/ee/hooks/use-license";
import { MfaSettings } from "@/ee/mfa";
export function AccountMfaSection() {
const { hasLicenseKey } = useLicense();
const showMfa = isCloud() || hasLicenseKey;
if (!showMfa) {
return null;
}
return <MfaSettings />;
}
@@ -22,7 +22,7 @@ export default function ChangeEmail() {
return (
<Group justify="space-between" wrap="nowrap" gap="xl">
<div>
<div style={{ minWidth: 0, flex: 1 }}>
<Text size="md">{t("Email")}</Text>
<Text size="sm" c="dimmed">
{currentUser?.user.email}
@@ -30,7 +30,7 @@ export default function ChangeEmail() {
</div>
{/*
<Button onClick={open} variant="default">
<Button onClick={open} variant="default" style={{ whiteSpace: "nowrap" }}>
{t("Change email")}
</Button>
*/}
@@ -14,14 +14,14 @@ export default function ChangePassword() {
return (
<Group justify="space-between" wrap="nowrap" gap="xl">
<div>
<div style={{ minWidth: 0, flex: 1 }}>
<Text size="md">{t("Password")}</Text>
<Text size="sm" c="dimmed">
{t("You can change your password here.")}
</Text>
</div>
<Button onClick={open} variant="default">
<Button onClick={open} variant="default" style={{ whiteSpace: "nowrap" }}>
{t("Change password")}
</Button>