misonL's picture
Deploy 09324ad to Docker Space
b1cfe1b verified
Raw
History Blame Contribute Delete
1.44 kB
import { PAGE_PASSWORD_AUTH_ERROR_CODES } from '@/lib/page-password-auth';
import { buildAccessCookie, verifyPasswordHash } from '@/lib/server-runtime';
import { NextRequest, NextResponse } from 'next/server';
type AuthVerifyRequestBody = {
passwordHash?: string;
};
export async function POST(request: NextRequest) {
const appPassword = process.env.APP_PASSWORD?.trim();
if (!appPassword) {
return NextResponse.json({ authenticated: true, passwordRequired: false });
}
let requestBody: AuthVerifyRequestBody;
try {
requestBody = (await request.json()) as AuthVerifyRequestBody;
} catch {
return NextResponse.json({ authenticated: false, error: 'Invalid request body.' }, { status: 400 });
}
const clientPasswordHash = requestBody.passwordHash;
if (!clientPasswordHash || !verifyPasswordHash(clientPasswordHash, appPassword)) {
return NextResponse.json(
{
authenticated: false,
error: 'Unauthorized: Invalid access code.',
code: PAGE_PASSWORD_AUTH_ERROR_CODES.invalid
},
{ status: 401 }
);
}
const response = NextResponse.json({ authenticated: true, passwordRequired: true });
const accessCookie = buildAccessCookie(appPassword, request.headers);
response.cookies.set(accessCookie.name, accessCookie.value, accessCookie.options);
return response;
}