edited middle ware and calender component
This commit is contained in:
@ -1,36 +1,36 @@
|
||||
import { NextResponse } from "next/server";
|
||||
|
||||
const publicRoutes = ["/", "/properties"];
|
||||
const publicRoutes = ["/", "/properties", "/terms", "/privacy", "/faq", "/support"];
|
||||
|
||||
const authRoutes = ["/login", "/auth/choose-role", "/forgot-password", "/register/owner", "/register/tenant", "/register/agent"];
|
||||
|
||||
const ownerRoutes = ["/owner/account-book", "/owner/bookings", "/owner/calendar", "/owner/profits", "/owner/properties/add", "/owner/reservations"];
|
||||
//ممكن كبو لانو زيادة
|
||||
const priveteRoute = ["/account-verification", "/booked-properties", "/change-password", "/favorites", "/my-rates", "/notifications", "/payments", "/profile", "/reservations"];
|
||||
const ownerRoutes = ["/owner", "/owner/account-book", "/owner/bookings", "/owner/calendar", "/owner/profits", "/owner/properties", "/owner/reservations"];
|
||||
|
||||
function getRolesFromToken(token) {
|
||||
if (!token) return [];
|
||||
try {
|
||||
const base64 = token.split(".")[1].replace(/-/g, "+").replace(/_/g, "/");
|
||||
const payload = JSON.parse(atob(base64));
|
||||
const roles = payload["http://schemas.microsoft.com/ws/2008/06/identity/claims/role"];
|
||||
if (Array.isArray(roles)) return roles;
|
||||
return roles ? [roles] : [];
|
||||
} catch {
|
||||
return [];
|
||||
}
|
||||
}
|
||||
|
||||
export function middleware(request) {
|
||||
const { pathname } = request.nextUrl;
|
||||
|
||||
const token = request.cookies.get("auth_token")?.value;
|
||||
const userCookie = request.cookies.get("cached_user")?.value;
|
||||
|
||||
let isOwner = null;
|
||||
|
||||
if (userCookie) {
|
||||
try {
|
||||
const user = JSON.parse(decodeURIComponent(userCookie));
|
||||
isOwner = user.roles?.includes("Owner");
|
||||
} catch (error) {
|
||||
console.error("Cookie parse error:", error);
|
||||
}
|
||||
}
|
||||
const isOwner = getRolesFromToken(token).includes("Owner");
|
||||
|
||||
const isPublicRoute = publicRoutes.some((route) => pathname === route || (route !== "/" && pathname.startsWith(route)));
|
||||
|
||||
const isAuthRoute = authRoutes.some((route) => pathname === route || pathname.startsWith(route));
|
||||
|
||||
const IsOwner = ownerRoutes.some((route) => route === pathname || pathname.startsWith(route));
|
||||
const isOwnerRoute = ownerRoutes.some((route) => pathname === route || pathname.startsWith(route));
|
||||
|
||||
const IsPrivateRoute = priveteRoute.some((route) => pathname === route || pathname.startsWith(route));
|
||||
if (!token && !isPublicRoute && !isAuthRoute) {
|
||||
return NextResponse.redirect(new URL("/login", request.url));
|
||||
}
|
||||
@ -39,13 +39,10 @@ export function middleware(request) {
|
||||
return NextResponse.redirect(new URL("/", request.url));
|
||||
}
|
||||
|
||||
if (IsOwner && !isOwner) {
|
||||
if (isOwnerRoute && !isOwner) {
|
||||
return NextResponse.redirect(new URL("/", request.url));
|
||||
}
|
||||
|
||||
if (IsPrivateRoute && !token) {
|
||||
return NextResponse.redirect(new URL("/login", request.url));
|
||||
}
|
||||
return NextResponse.next();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user