diff --git a/backend/enmedd/server/feature_flags/models.py b/backend/enmedd/server/feature_flags/models.py index aa650177e08..83b5e743bd3 100644 --- a/backend/enmedd/server/feature_flags/models.py +++ b/backend/enmedd/server/feature_flags/models.py @@ -11,6 +11,7 @@ class FeatureFlags(BaseModel): whitelabelling: bool = True share_chat: bool = False explore_assistants: bool = False + two_factor_auth: bool = True def check_validity(self) -> None: return diff --git a/web/src/app/admin/settings/interfaces.ts b/web/src/app/admin/settings/interfaces.ts index f45ac1b97c1..5d26537db3f 100644 --- a/web/src/app/admin/settings/interfaces.ts +++ b/web/src/app/admin/settings/interfaces.ts @@ -23,6 +23,7 @@ export interface FeatureFlags { whitelabelling: boolean; share_chat: boolean; explore_assistants: boolean; + two_factor_auth: boolean; } export interface CombinedSettings { diff --git a/web/src/app/auth/login/LoginForms.tsx b/web/src/app/auth/login/LoginForms.tsx index b47e1b92865..432d4b12579 100644 --- a/web/src/app/auth/login/LoginForms.tsx +++ b/web/src/app/auth/login/LoginForms.tsx @@ -5,7 +5,7 @@ import { basicLogin, basicSignup } from "@/lib/user"; import { Form, Formik } from "formik"; import { useRouter } from "next/navigation"; import * as Yup from "yup"; -import { useState } from "react"; +import { useContext, useState } from "react"; import { Spinner } from "@/components/Spinner"; import { Button } from "@/components/ui/button"; import { useToast } from "@/hooks/use-toast"; @@ -16,11 +16,13 @@ import GmailIcon from "../../../../public/Gmail.png"; import MicrosoftIcon from "../../../../public/microsoft.svg"; import Image from "next/image"; import Link from "next/link"; +import { SettingsContext } from "@/components/settings/SettingsProvider"; export function LogInForms({}: {}) { const router = useRouter(); const { toast } = useToast(); const [isLoading, setIsLoading] = useState(false); + const settings = useContext(SettingsContext); return ( <> @@ -39,14 +41,18 @@ export function LogInForms({}: {}) { const loginResponse = await basicLogin(values.email, values.password); if (loginResponse.ok) { - router.push(`/auth/2factorverification/?email=${values.email}`); - await fetch("/api/users/generate-otp", { - method: "PATCH", - headers: { - "Content-Type": "application/json", - }, - credentials: "include", - }); + if (settings?.featureFlags.two_factor_auth == true) { + router.push(`/auth/2factorverification/?email=${values.email}`); + await fetch("/api/users/generate-otp", { + method: "PATCH", + headers: { + "Content-Type": "application/json", + }, + credentials: "include", + }); + } else { + router.push("/"); + } } else { setIsLoading(false); const errorDetail = (await loginResponse.json()).detail;