Files
NotII 2c48ecd2b4 Add product applicability controls to promotion forms
Introduces product selection and exclusion controls to both new and edit promotion forms, allowing promotions to target all, specific, or all-but-specific products. Adds a reusable ProductSelector component, updates promotion types to support new fields, and adjusts cookie max-age for authentication. Also adds two new business quotes.
2025-08-07 16:05:31 +01:00

59 lines
1.7 KiB
TypeScript

import { NextRequest, NextResponse } from 'next/server';
// Force dynamic execution to ensure cookies are set at runtime
export const dynamic = 'force-dynamic';
export async function POST(req: NextRequest) {
try {
// Parse the request body to get the auth token
const body = await req.json();
const { token } = body;
if (!token) {
console.error('Set-cookie API: No token provided');
return NextResponse.json(
{ error: 'No token provided' },
{ status: 400 }
);
}
// Create a response object
const response = NextResponse.json(
{ success: true },
{ status: 200 }
);
// Set the token in an HTTP-only cookie that will be sent with requests
// The secure flag is conditionally set based on the environment
const isLocalhost = req.headers.get('host')?.includes('localhost') ||
req.headers.get('host')?.includes('127.0.0.1');
const cookieOptions = {
// HttpOnly for security - prevents JavaScript access
httpOnly: true,
// Valid for 3 hours
maxAge: 3 * 60 * 60,
// Only send in requests to our domain
path: '/',
// Strict same-site policy to prevent CSRF
sameSite: 'strict' as const,
// Secure only in production environments
secure: !isLocalhost
};
// Set the cookie with the options
response.cookies.set('Authorization', token, cookieOptions);
console.log('Set-cookie API: Cookie set successfully');
return response;
} catch (error) {
console.error('Set-cookie API error:', error);
return NextResponse.json(
{
error: 'Failed to set cookie',
details: error instanceof Error ? error.message : String(error)
},
{ status: 500 }
);
}
}