Replace bare console.error() calls with logError() utility across all 47 API route handlers. logError() prints timestamp + context + message + stack trace + extra request data to stderr, and redacts sensitive fields (password, token, secret, key, etc.) from logged objects.
41 lines
1.3 KiB
TypeScript
41 lines
1.3 KiB
TypeScript
import { logError } from "@/lib/logger";
|
|
import { NextRequest, NextResponse } from "next/server";
|
|
import { logout, parseSessionCookie, loadAdminSession, buildClearCookieHeader } from "@/lib/auth";
|
|
import { createAuditLog } from "@/lib/log";
|
|
|
|
export const runtime = "nodejs";
|
|
|
|
export async function POST(req: NextRequest) {
|
|
try {
|
|
const cookieHeader = req.headers.get("cookie");
|
|
const sessionId = parseSessionCookie(cookieHeader);
|
|
|
|
if (sessionId) {
|
|
const session = await loadAdminSession(sessionId);
|
|
if (session) {
|
|
const ip = req.headers.get("x-forwarded-for") || req.headers.get("x-real-ip") || "unknown";
|
|
const ua = req.headers.get("user-agent") || "unknown";
|
|
await createAuditLog({
|
|
userId: session.userId,
|
|
username: session.username,
|
|
action: "logout",
|
|
resource: "auth",
|
|
result: "success",
|
|
ipAddress: ip,
|
|
userAgent: ua,
|
|
});
|
|
}
|
|
await logout(sessionId);
|
|
}
|
|
|
|
const response = NextResponse.json({ success: true });
|
|
response.headers.set("Set-Cookie", buildClearCookieHeader());
|
|
return response;
|
|
} catch (e) {
|
|
logError("Logout error:", e);
|
|
const response = NextResponse.json({ success: false });
|
|
response.headers.set("Set-Cookie", buildClearCookieHeader());
|
|
return response;
|
|
}
|
|
}
|