import { useEffect, useState } from "react";
import { Navigate } from "react-router-dom";
import { FullScreenLoader } from "../Preloader";
import validateSessionTokenForUser from "../../utils/session";
import paths from "../../utils/paths";
import { AUTH_TIMESTAMP, AUTH_TOKEN, AUTH_USER } from "../../utils/constants";
import { userFromStorage } from "../../utils/request";
import System from "../../models/system";
// Used only for Multi-user mode only as we permission specific pages based on auth role.
// When in single user mode we just bypass any authchecks.
function useIsAuthenticated() {
const [isAuthd, setIsAuthed] = useState(null);
useEffect(() => {
const validateSession = async () => {
const multiUserMode = (await System.keys()).MultiUserMode;
if (!multiUserMode) {
setIsAuthed(true);
return;
}
const localUser = localStorage.getItem(AUTH_USER);
const localAuthToken = localStorage.getItem(AUTH_TOKEN);
if (!localUser || !localAuthToken) {
setIsAuthed(false);
return;
}
const isValid = await validateSessionTokenForUser();
if (!isValid) {
localStorage.removeItem(AUTH_USER);
localStorage.removeItem(AUTH_TOKEN);
localStorage.removeItem(AUTH_TIMESTAMP);
setIsAuthed(false);
return;
}
setIsAuthed(true);
};
validateSession();
}, []);
return isAuthd;
}
export function AdminRoute({ Component }) {
const authed = useIsAuthenticated();
if (authed === null) return ;
const user = userFromStorage();
return authed && user?.role === "admin" ? (
) : (
);
}
export default function PrivateRoute({ Component }) {
const authed = useIsAuthenticated();
if (authed === null) return ;
return authed ? : ;
}