71 lines
2.6 KiB
TypeScript
71 lines
2.6 KiB
TypeScript
import { NextResponse } from "next/server";
|
|
import { getDb } from "@/lib/db";
|
|
import { cookies } from "next/headers";
|
|
|
|
export async function GET() {
|
|
try {
|
|
const sql = getDb();
|
|
const cookieStore = await cookies();
|
|
const sessionToken = cookieStore.get("session_token")?.value;
|
|
|
|
if (!sessionToken) {
|
|
return NextResponse.json({ user: null });
|
|
}
|
|
|
|
// Find session and user
|
|
const sessions = await sql(
|
|
`SELECT s.*, u.id as user_id, u.email, u.name, u.role, u.is_active,
|
|
up.can_view_financial, up.can_edit, up.can_create, up.can_delete, up.can_download,
|
|
up.can_view_dashboard, up.can_view_components, up.can_view_products, up.can_view_customers,
|
|
up.can_view_suppliers, up.can_view_production, up.can_view_stock_history, up.can_view_logistics,
|
|
up.can_view_stock_take, up.can_view_settings
|
|
FROM sessions s
|
|
JOIN users u ON s.user_id = u.id
|
|
LEFT JOIN user_permissions up ON u.id = up.user_id
|
|
WHERE s.token = $1 AND s.expires_at > NOW()`,
|
|
[sessionToken]
|
|
);
|
|
|
|
if (sessions.length === 0 || !sessions[0].is_active) {
|
|
// Clear invalid session cookie
|
|
cookieStore.delete("session_token");
|
|
return NextResponse.json({ user: null });
|
|
}
|
|
|
|
const session = sessions[0];
|
|
|
|
// Build sections array from individual flags
|
|
const sections: string[] = [];
|
|
if (session.can_view_dashboard) sections.push("dashboard");
|
|
if (session.can_view_components) sections.push("components");
|
|
if (session.can_view_products) sections.push("products");
|
|
if (session.can_view_customers) sections.push("customers");
|
|
if (session.can_view_suppliers) sections.push("suppliers");
|
|
if (session.can_view_production) sections.push("production");
|
|
if (session.can_view_stock_history) sections.push("stock-history");
|
|
if (session.can_view_logistics) sections.push("logistics");
|
|
if (session.can_view_stock_take) sections.push("stock-take");
|
|
if (session.can_view_settings || session.role === "admin") sections.push("settings");
|
|
|
|
return NextResponse.json({
|
|
user: {
|
|
id: session.user_id,
|
|
email: session.email,
|
|
name: session.name,
|
|
role: session.role,
|
|
permissions: {
|
|
sections,
|
|
can_view_financial: session.can_view_financial ?? false,
|
|
can_edit: session.can_edit ?? false,
|
|
can_create: session.can_create ?? false,
|
|
can_delete: session.can_delete ?? false,
|
|
can_download: session.can_download ?? false,
|
|
},
|
|
},
|
|
});
|
|
} catch (error) {
|
|
console.error("Session error:", error);
|
|
return NextResponse.json({ user: null });
|
|
}
|
|
}
|