diff --git a/src/pages/auth/signin.jsx b/src/pages/auth/signin.jsx index 57331c1d6..25dbf2e7f 100644 --- a/src/pages/auth/signin.jsx +++ b/src/pages/auth/signin.jsx @@ -1,43 +1,161 @@ +import classNames from "classnames"; import { getProviders, signIn } from "next-auth/react"; +import { useEffect } from "react"; +import { BiShieldQuarter } from "react-icons/bi"; +import { getSettings } from "utils/config/config"; + +export default function SignIn({ providers, callbackUrl, settings }) { + const theme = settings?.theme || "dark"; + const color = settings?.color || "slate"; + const title = settings?.title || "Homepage"; + + let backgroundImage = ""; + let opacity = settings?.backgroundOpacity ?? 0; + let backgroundBlur = false; + let backgroundSaturate = false; + let backgroundBrightness = false; + + if (settings?.background) { + const bg = settings.background; + if (typeof bg === "object") { + backgroundImage = bg.image || ""; + if (bg.opacity !== undefined) { + opacity = 1 - bg.opacity / 100; + } + backgroundBlur = bg.blur !== undefined; + backgroundSaturate = bg.saturate !== undefined; + backgroundBrightness = bg.brightness !== undefined; + } else { + backgroundImage = bg; + } + } + + useEffect(() => { + const html = document.documentElement; + const body = document.body; + + html.classList.remove("dark", "scheme-dark", "scheme-light"); + html.classList.toggle("dark", theme === "dark"); + html.classList.add(theme === "dark" ? "scheme-dark" : "scheme-light"); + + const desiredThemeClass = `theme-${color}`; + const themeClassesToRemove = Array.from(html.classList).filter( + (cls) => cls.startsWith("theme-") && cls !== desiredThemeClass, + ); + if (themeClassesToRemove.length) { + html.classList.remove(...themeClassesToRemove); + } + if (!html.classList.contains(desiredThemeClass)) { + html.classList.add(desiredThemeClass); + } + + body.style.backgroundImage = ""; + body.style.backgroundColor = ""; + body.style.backgroundAttachment = ""; + }, [color, theme]); -export default function SignIn({ providers, callbackUrl }) { if (!providers || Object.keys(providers).length === 0) { return ( -
-
-

Authentication not configured

-

OIDC is disabled or missing required environment variables.

-
-
+ <> + {backgroundImage && ( +