You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
29 lines
790 B
TypeScript
29 lines
790 B
TypeScript
import type { RequestHandler } from './$types';
|
|
import { getDb } from '$lib/server/db';
|
|
import { sha256Hex } from '$lib/server/crypto';
|
|
|
|
export const POST: RequestHandler = async (event) => {
|
|
const sid = event.cookies.get('sid');
|
|
if (sid) {
|
|
try {
|
|
const db = await getDb();
|
|
const hash = await sha256Hex(sid);
|
|
// Intentar borrar; si falla, expirar
|
|
try {
|
|
db.prepare(`DELETE FROM web_sessions WHERE session_hash = ?`).run(hash);
|
|
} catch {
|
|
db.prepare(
|
|
`UPDATE web_sessions
|
|
SET expires_at = strftime('%Y-%m-%d %H:%M:%f','now')
|
|
WHERE session_hash = ?`
|
|
).run(hash);
|
|
}
|
|
} catch {
|
|
// Ignorar errores de DB en logout
|
|
}
|
|
}
|
|
// Limpiar cookie
|
|
event.cookies.delete('sid', { path: '/' });
|
|
return new Response(null, { status: 204 });
|
|
};
|