mirror of
https://github.com/bretzel-app/crumbs.git
synced 2026-10-12 20:06:57 +02:00
Track session metadata (createdAt, userAgent, ip, lastUsedAt). Add API for listing and revoking sessions. Settings page shows active sessions with "Revoke" per session and "Log out everywhere else" option. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
34 lines
990 B
TypeScript
34 lines
990 B
TypeScript
import { json, error } from '@sveltejs/kit';
|
|
import type { RequestHandler } from './$types.js';
|
|
import { getUserId } from '$lib/server/api-utils.js';
|
|
import { listUserSessions, revokeSession, revokeAllSessions } from '$lib/server/auth.js';
|
|
|
|
export const GET: RequestHandler = async (event) => {
|
|
const userId = getUserId(event);
|
|
const currentToken = event.cookies.get('session') || '';
|
|
const sessions = listUserSessions(userId, currentToken);
|
|
return json(sessions);
|
|
};
|
|
|
|
export const DELETE: RequestHandler = async (event) => {
|
|
const userId = getUserId(event);
|
|
const { sessionId, all } = await event.request.json();
|
|
|
|
if (all) {
|
|
const currentToken = event.cookies.get('session') || '';
|
|
revokeAllSessions(userId, currentToken);
|
|
return json({ success: true });
|
|
}
|
|
|
|
if (!sessionId) {
|
|
throw error(400, 'sessionId is required');
|
|
}
|
|
|
|
const revoked = revokeSession(userId, sessionId);
|
|
if (!revoked) {
|
|
throw error(404, 'Session not found');
|
|
}
|
|
|
|
return json({ success: true });
|
|
};
|