5a50d77515
Adds sharing (residence share codes, join, user management, .casera file export/import), subscription status with feature comparison, notification preferences with bell icon, profile settings (edit info, change password, theme picker, delete account), onboarding wizard with create/join paths, enhanced dashboard with stats cards, Recharts completion chart, recent activity feed, and task report PDF download. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
51 lines
1.5 KiB
TypeScript
51 lines
1.5 KiB
TypeScript
import { cookies } from 'next/headers';
|
|
import { NextRequest, NextResponse } from 'next/server';
|
|
|
|
// ---------------------------------------------------------------------------
|
|
// POST /api/auth/logout
|
|
// ---------------------------------------------------------------------------
|
|
// Clears the httpOnly auth cookie and optionally invalidates the token on
|
|
// the Go API side.
|
|
// ---------------------------------------------------------------------------
|
|
|
|
const API_BASE_URL =
|
|
process.env.API_URL ||
|
|
process.env.NEXT_PUBLIC_API_URL ||
|
|
'https://mycrib.treytartt.com/api';
|
|
|
|
const COOKIE_NAME = 'casera-token';
|
|
|
|
export async function POST(request: NextRequest) {
|
|
try {
|
|
const cookieStore = await cookies();
|
|
const token = cookieStore.get(COOKIE_NAME)?.value;
|
|
|
|
// Best-effort: tell the Go API to invalidate the token
|
|
if (token) {
|
|
try {
|
|
await fetch(`${API_BASE_URL}/auth/logout/`, {
|
|
method: 'POST',
|
|
headers: {
|
|
'Content-Type': 'application/json',
|
|
Authorization: `Token ${token}`,
|
|
},
|
|
cache: 'no-store',
|
|
});
|
|
} catch {
|
|
// Don't block logout if the upstream call fails
|
|
}
|
|
}
|
|
|
|
// Delete the cookie
|
|
cookieStore.delete(COOKIE_NAME);
|
|
|
|
return NextResponse.json({ message: 'Logged out successfully' });
|
|
} catch (error) {
|
|
console.error('[auth/logout] Error:', error);
|
|
return NextResponse.json(
|
|
{ error: 'Internal server error' },
|
|
{ status: 500 },
|
|
);
|
|
}
|
|
}
|