重构大量文件
This commit is contained in:
@@ -1,31 +1,38 @@
|
||||
import { NextResponse } from "next/server";
|
||||
import { prisma } from "@/lib/prisma";
|
||||
import { verifyPassword } from "@/lib/auth";
|
||||
import { createSessionToken, getSessionCookieName, getSessionTtlSeconds } from "@/lib/session";
|
||||
|
||||
export async function POST(req: Request) {
|
||||
try {
|
||||
const { password } = await req.json();
|
||||
|
||||
// Ensure settings exist, if not, maybe we should init or fail?
|
||||
// Ideally init should happen on app startup or manual trigger, but for simplicity:
|
||||
// If no settings exist, check against "admin" (fallback) but DO NOT create DB entry implicitely here for security,
|
||||
// unless we strictly define that "admin" is the default.
|
||||
// Let's assume DB must be populated.
|
||||
const { password, rememberMe, durationDays } = await req.json();
|
||||
|
||||
const settings = await prisma.globalSettings.findUnique({
|
||||
where: { id: "default" },
|
||||
});
|
||||
|
||||
const isValid = settings
|
||||
? await verifyPassword(password, settings.password)
|
||||
: password === "admin"; // Fallback only if DB empty
|
||||
if (!settings) {
|
||||
return NextResponse.json({ error: "Settings not initialized" }, { status: 503 });
|
||||
}
|
||||
|
||||
const isValid = await verifyPassword(password, settings.password);
|
||||
|
||||
if (isValid) {
|
||||
return NextResponse.json({ success: true });
|
||||
const days = rememberMe ? Number(durationDays) || 1 : 1;
|
||||
const token = await createSessionToken(days);
|
||||
const response = NextResponse.json({ success: true });
|
||||
response.cookies.set(getSessionCookieName(), token, {
|
||||
httpOnly: true,
|
||||
secure: process.env.NODE_ENV === "production",
|
||||
sameSite: "lax",
|
||||
path: "/",
|
||||
maxAge: getSessionTtlSeconds(days),
|
||||
});
|
||||
return response;
|
||||
} else {
|
||||
return NextResponse.json({ error: "Invalid password" }, { status: 401 });
|
||||
}
|
||||
} catch (error) {
|
||||
} catch {
|
||||
return NextResponse.json({ error: "Login failed" }, { status: 500 });
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
import { NextResponse } from "next/server";
|
||||
import { cookies } from "next/headers";
|
||||
import { getSessionCookieName } from "@/lib/session";
|
||||
|
||||
export async function POST() {
|
||||
const cookieStore = await cookies();
|
||||
cookieStore.delete("auth");
|
||||
cookieStore.delete(getSessionCookieName());
|
||||
|
||||
return NextResponse.json({ success: true });
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import { NextResponse } from 'next/server';
|
||||
import { prisma } from '@/lib/prisma';
|
||||
import type { Prisma } from '@prisma/client';
|
||||
|
||||
export async function GET(
|
||||
request: Request,
|
||||
@@ -12,7 +13,7 @@ export async function GET(
|
||||
});
|
||||
if (!page) return NextResponse.json({ error: 'Page not found' }, { status: 404 });
|
||||
return NextResponse.json({ ...page, tags: JSON.parse(page.tags || "[]") });
|
||||
} catch (error) {
|
||||
} catch {
|
||||
return NextResponse.json({ error: 'Error fetching page' }, { status: 500 });
|
||||
}
|
||||
}
|
||||
@@ -25,7 +26,7 @@ export async function PUT(
|
||||
try {
|
||||
const body = await request.json();
|
||||
// Separate update logic for flexibility (e.g. only updating title)
|
||||
const updateData: any = {};
|
||||
const updateData: Prisma.PageUncheckedUpdateInput = {};
|
||||
if (body.title !== undefined) updateData.title = body.title;
|
||||
if (body.content !== undefined) updateData.content = body.content;
|
||||
if (body.parentId !== undefined) updateData.parentId = body.parentId;
|
||||
@@ -38,7 +39,7 @@ export async function PUT(
|
||||
data: updateData,
|
||||
});
|
||||
return NextResponse.json({ ...page, tags: JSON.parse(page.tags || "[]") });
|
||||
} catch (error) {
|
||||
} catch {
|
||||
return NextResponse.json({ error: 'Error updating page' }, { status: 500 });
|
||||
}
|
||||
}
|
||||
@@ -53,7 +54,7 @@ export async function DELETE(
|
||||
where: { id },
|
||||
});
|
||||
return NextResponse.json({ success: true });
|
||||
} catch (error) {
|
||||
} catch {
|
||||
return NextResponse.json({ error: 'Error deleting page' }, { status: 500 });
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,7 +21,7 @@ export async function PUT(request: Request) {
|
||||
);
|
||||
|
||||
return NextResponse.json({ success: true });
|
||||
} catch (error) {
|
||||
} catch {
|
||||
return NextResponse.json({ error: 'Error reordering pages' }, { status: 500 });
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,7 +11,7 @@ export async function GET() {
|
||||
tags: JSON.parse(p.tags || "[]")
|
||||
}));
|
||||
return NextResponse.json(parsedPages);
|
||||
} catch (error) {
|
||||
} catch {
|
||||
return NextResponse.json({ error: 'Error fetching pages' }, { status: 500 });
|
||||
}
|
||||
}
|
||||
@@ -41,7 +41,7 @@ export async function POST(request: Request) {
|
||||
},
|
||||
});
|
||||
return NextResponse.json({ ...page, tags: JSON.parse(page.tags || "[]") });
|
||||
} catch (error) {
|
||||
} catch {
|
||||
return NextResponse.json({ error: 'Error creating page' }, { status: 500 });
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,8 +6,7 @@ export async function PUT(req: Request) {
|
||||
try {
|
||||
const { currentPassword, newPassword } = await req.json();
|
||||
|
||||
// Cast to any to bypass build error until server restart allows prisma generate to run
|
||||
const settings = await (prisma as any).globalSettings.findUnique({
|
||||
const settings = await prisma.globalSettings.findUnique({
|
||||
where: { id: "default" },
|
||||
});
|
||||
|
||||
@@ -22,13 +21,13 @@ export async function PUT(req: Request) {
|
||||
|
||||
const hashedPassword = await hashPassword(newPassword);
|
||||
|
||||
await (prisma as any).globalSettings.update({
|
||||
await prisma.globalSettings.update({
|
||||
where: { id: "default" },
|
||||
data: { password: hashedPassword },
|
||||
});
|
||||
|
||||
return NextResponse.json({ success: true });
|
||||
} catch (error) {
|
||||
} catch {
|
||||
return NextResponse.json({ error: "Failed to change password" }, { status: 500 });
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user