Duffer Derek
"use client";
import { useEffect, useState, Suspense } from "react";
import { useRouter, useSearchParams } from "next/navigation";
import Cookies from "js-cookie";
import axios from "axios";
import Loader from "@/components/modules/loader/Loader";
function HomeContent() {
const router = useRouter();
const searchParams = useSearchParams();
const [loading, setLoading] = useState(true);
useEffect(() => {
const checkPermissions = async () => {
// First check for code parameter
const code = searchParams.get("code");
// console.log("Root page - Checking code:", code);
if (code) {
try {
// console.log("Root page - Processing code...");
// Exchange code for token
const response = await axios.get(`${process.env.NEXT_PUBLIC_API_BASE_URL}/land`, {
params: { code },
});
// console.log(response.data);
if (response.data.access_token) {
// Store the token
Cookies.set("authToken", response.data.access_token);
sessionStorage.setItem("authToken", response.data.access_token);
// console.log("Root page - Token stored successfully");
// Remove code from URL
window.history.replaceState({}, "", "/");
} else {
// No token received, redirect to sign-in
setLoading(false);
router.replace("/sign-in");
return;
}
} catch (error) {
console.error("Root page - Failed to exchange code for token:", error);
setLoading(false);
router.replace("/sign-in");
return;
}
}
// Check both cookie and sessionStorage for token (Firefox compatibility);
const cookieToken = Cookies.get("authToken");
const sessionToken = typeof window !== "undefined" ? sessionStorage.getItem("authToken") : null;
const storedToken = cookieToken || sessionToken;
if (!storedToken) {
setLoading(false);
router.replace("/sign-in");
return;
}
// If we have sessionStorage token but no cookie, restore the cookie for consistency
if (sessionToken && !cookieToken) {
Cookies.set("authToken", sessionToken, {
secure: true,
sameSite: "strict",
});
}
try {
const baseUrl = process.env.NEXT_PUBLIC_API_BASE_URL;
const response = await axios.get(`${baseUrl}/me`, {
headers: {
Authorization: `Bearer ${storedToken}`,
},
});
// console.log(response.data);
const access = response.data.role.access || [];
setLoading(false);
// Check for intendedPath first before doing permission-based redirect
const intendedPath = sessionStorage.getItem("intendedPath");
if (intendedPath && intendedPath !== "/") {
sessionStorage.removeItem("intendedPath");
router.replace(intendedPath);
return;
}
// If no intendedPath, do permission-based redirect
const hasStream = access.includes("unit:stream");
const hasList = access.includes("unit:list");
if (hasStream && !hasList) {
router.replace("/live-view");
} else {
router.replace("/dashboard");
}
} catch (error) {
setLoading(false);
router.replace("/sign-in");
}
};
checkPermissions();
}, [router, searchParams]);
if (loading) {
return (
<div className="flex h-screen w-full items-center justify-center bg-[#F5F6F9]">
<Loader />
</div>
);
}
return null;
}
export default function Home() {
return (
<Suspense
fallback={
<div className="flex h-screen w-full items-center justify-center bg-[#F5F6F9]">
<Loader />
</div>
}
>
<HomeContent />
</Suspense>
);
}
Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists