|
|
import React, { useState, useEffect } from "react"; |
|
|
import System from "../../../models/system"; |
|
|
import SingleUserAuth from "./SingleUserAuth"; |
|
|
import MultiUserAuth from "./MultiUserAuth"; |
|
|
import { |
|
|
AUTH_TOKEN, |
|
|
AUTH_USER, |
|
|
AUTH_TIMESTAMP, |
|
|
} from "../../../utils/constants"; |
|
|
import useLogo from "../../../hooks/useLogo"; |
|
|
import illustration from "@/media/illustrations/login-illustration.svg"; |
|
|
|
|
|
export default function PasswordModal({ mode = "single" }) { |
|
|
const { loginLogo } = useLogo(); |
|
|
return ( |
|
|
<div className="fixed top-0 left-0 right-0 z-50 w-full overflow-x-hidden overflow-y-auto md:inset-0 h-[calc(100%-1rem)] h-full bg-theme-bg-primary flex flex-col md:flex-row items-center justify-center"> |
|
|
<div |
|
|
style={{ |
|
|
background: ` |
|
|
radial-gradient(circle at center, transparent 40%, black 100%), |
|
|
linear-gradient(180deg, #85F8FF 0%, #65A6F2 100%) |
|
|
`, |
|
|
width: "575px", |
|
|
filter: "blur(150px)", |
|
|
opacity: "0.4", |
|
|
}} |
|
|
className="absolute left-0 top-0 z-0 h-full w-full" |
|
|
/> |
|
|
<div className="hidden md:flex md:w-1/2 md:h-full md:items-center md:justify-center"> |
|
|
<img |
|
|
className="w-full h-full object-contain z-50" |
|
|
src={illustration} |
|
|
alt="login illustration" |
|
|
/> |
|
|
</div> |
|
|
<div className="flex flex-col items-center justify-center h-full w-full md:w-1/2 z-50 relative md:-mt-20 mt-0 !border-none bg-theme-bg-secondary md:bg-transparent"> |
|
|
<img |
|
|
src={loginLogo} |
|
|
alt="Logo" |
|
|
className={`hidden relative md:flex rounded-2xl w-fit m-4 z-30 ${ |
|
|
mode === "single" ? "md:top-2" : "md:top-12" |
|
|
} absolute max-h-[65px]`} |
|
|
style={{ objectFit: "contain" }} |
|
|
/> |
|
|
{mode === "single" ? <SingleUserAuth /> : <MultiUserAuth />} |
|
|
</div> |
|
|
</div> |
|
|
); |
|
|
} |
|
|
|
|
|
export function usePasswordModal(notry = false) { |
|
|
const [auth, setAuth] = useState({ |
|
|
loading: true, |
|
|
requiresAuth: false, |
|
|
mode: "single", |
|
|
}); |
|
|
|
|
|
useEffect(() => { |
|
|
async function checkAuthReq() { |
|
|
if (!window) return; |
|
|
|
|
|
|
|
|
|
|
|
if (!System.needsAuthCheck() && notry === false) { |
|
|
setAuth({ |
|
|
loading: false, |
|
|
requiresAuth: false, |
|
|
mode: "multi", |
|
|
}); |
|
|
return; |
|
|
} |
|
|
|
|
|
const settings = await System.keys(); |
|
|
if (settings?.MultiUserMode) { |
|
|
const currentToken = window.localStorage.getItem(AUTH_TOKEN); |
|
|
if (!!currentToken) { |
|
|
const valid = notry ? false : await System.checkAuth(currentToken); |
|
|
if (!valid) { |
|
|
setAuth({ |
|
|
loading: false, |
|
|
requiresAuth: true, |
|
|
mode: "multi", |
|
|
}); |
|
|
window.localStorage.removeItem(AUTH_USER); |
|
|
window.localStorage.removeItem(AUTH_TOKEN); |
|
|
window.localStorage.removeItem(AUTH_TIMESTAMP); |
|
|
return; |
|
|
} else { |
|
|
setAuth({ |
|
|
loading: false, |
|
|
requiresAuth: false, |
|
|
mode: "multi", |
|
|
}); |
|
|
return; |
|
|
} |
|
|
} else { |
|
|
setAuth({ |
|
|
loading: false, |
|
|
requiresAuth: true, |
|
|
mode: "multi", |
|
|
}); |
|
|
return; |
|
|
} |
|
|
} else { |
|
|
|
|
|
|
|
|
const requiresAuth = settings?.RequiresAuth || false; |
|
|
if (!requiresAuth) { |
|
|
setAuth({ |
|
|
loading: false, |
|
|
requiresAuth: false, |
|
|
mode: "single", |
|
|
}); |
|
|
return; |
|
|
} |
|
|
|
|
|
const currentToken = window.localStorage.getItem(AUTH_TOKEN); |
|
|
if (!!currentToken) { |
|
|
const valid = notry ? false : await System.checkAuth(currentToken); |
|
|
if (!valid) { |
|
|
setAuth({ |
|
|
loading: false, |
|
|
requiresAuth: true, |
|
|
mode: "single", |
|
|
}); |
|
|
window.localStorage.removeItem(AUTH_TOKEN); |
|
|
window.localStorage.removeItem(AUTH_USER); |
|
|
window.localStorage.removeItem(AUTH_TIMESTAMP); |
|
|
return; |
|
|
} else { |
|
|
setAuth({ |
|
|
loading: false, |
|
|
requiresAuth: false, |
|
|
mode: "single", |
|
|
}); |
|
|
return; |
|
|
} |
|
|
} else { |
|
|
setAuth({ |
|
|
loading: false, |
|
|
requiresAuth: true, |
|
|
mode: "single", |
|
|
}); |
|
|
return; |
|
|
} |
|
|
} |
|
|
} |
|
|
checkAuthReq(); |
|
|
}, []); |
|
|
|
|
|
return auth; |
|
|
} |
|
|
|