delete sessions when admin is deleted

This commit is contained in:
2023-08-28 16:41:41 +02:00
parent 0958ff21b6
commit 5a1fa2cc95
3 changed files with 54 additions and 16 deletions

View File

@ -1,21 +1,23 @@
import type { Permissions } from '$lib/permissions';
import type { Cookies } from '@sveltejs/kit';
import * as crypto from 'crypto';
import type { Admin } from '$lib/server/database';
const sessions: Map<string, Permissions> = new Map();
const sessions: Map<string, { userId: number; permissions: Permissions }> = new Map();
export function addSession(permissions: Permissions): string {
const session = 'AAA';
sessions.set(session, permissions);
export function addSession(user: { id: number; permissions: Permissions } | Admin): string {
const session = crypto.randomBytes(16).toString('hex');
sessions.set(session, { userId: user.id, permissions: user.permissions });
return session;
}
export function getSession(session: string | Cookies, permissions?: number[]): Permissions | null {
let sess: Permissions | null;
if (typeof session == 'string') {
sess = sessions.get(session) || null;
sess = sessions.get(session)?.permissions || null;
} else {
const sessionId = session.get('session');
sess = sessionId ? sessions.get(sessionId) || null : null;
sess = sessionId ? sessions.get(sessionId)?.permissions || null : null;
}
if (!sess) {
@ -28,3 +30,19 @@ export function getSession(session: string | Cookies, permissions?: number[]): P
}
return sess;
}
export function deleteSession(session: string | Cookies) {
if (typeof session == 'string') {
sessions.delete(session);
} else {
sessions.delete(session.get('session') || '');
}
}
export function deleteAllUserSessions(userId: number) {
for (const [id, details] of sessions.entries()) {
if (details.userId == userId) {
sessions.delete(id);
}
}
}