From db769f4f968e4b393e3f02deb4b4b3e63625a0aa Mon Sep 17 00:00:00 2001 From: Christian Risi <75698846+CnF-Gris@users.noreply.github.com> Date: Sun, 29 Jun 2025 11:03:20 +0000 Subject: [PATCH] Added Support for Sessions --- src/lib/classes/sessions.ts | 23 ++++++++++ src/lib/db-utils/SQL/Sessions.sql | 19 +++++++++ src/lib/db-utils/Sessions.ts | 71 +++++++++++++++++++++++++++++++ 3 files changed, 113 insertions(+) create mode 100644 src/lib/classes/sessions.ts create mode 100644 src/lib/db-utils/SQL/Sessions.sql create mode 100644 src/lib/db-utils/Sessions.ts diff --git a/src/lib/classes/sessions.ts b/src/lib/classes/sessions.ts new file mode 100644 index 0000000..a774793 --- /dev/null +++ b/src/lib/classes/sessions.ts @@ -0,0 +1,23 @@ +export interface ISessionBroker { + + createTable(): void + createSessionFromUserID(userID: number): Session + getSessionFromUserID(userID: number) : Session + getSessionFromToken(token: string) : Session + +} + +export class Session { + + public sessionID: number + public sessionToken: string + + constructor( + sessionID: number, + sessionToken: string + ) { + this.sessionID = sessionID + this.sessionToken = sessionToken + } + +} \ No newline at end of file diff --git a/src/lib/db-utils/SQL/Sessions.sql b/src/lib/db-utils/SQL/Sessions.sql new file mode 100644 index 0000000..0696f90 --- /dev/null +++ b/src/lib/db-utils/SQL/Sessions.sql @@ -0,0 +1,19 @@ +CREATE TABLE IF NOT EXISTS sessions ( + session_id INTEGER PRIMARY KEY AUTOINCREMENT, + user_id INTEGER UNIQUE NOT NULL + session_token TEXT UNIQUE NOT NULL , + FOREIGN KEY (user_id) references users(user_id) ON DELETE CASCADE +); + +INSERT INTO sessions (user_id, session_token) +VALUES (@userID, @token); + +SELECT session_id, user_id, session_token, +FROM sessions +WHERE session_token = @token; + +SELECT session_id, user_id, session_token, +FROM sessions +WHERE session_id = @sessionID; + + diff --git a/src/lib/db-utils/Sessions.ts b/src/lib/db-utils/Sessions.ts new file mode 100644 index 0000000..57369d5 --- /dev/null +++ b/src/lib/db-utils/Sessions.ts @@ -0,0 +1,71 @@ +import type { ISessionBroker, Session } from "$lib/classes/sessions" +import { SSLSnifferApp } from "./sqlite" + +class SessionDB { + + public session_id: number + public user_id: number + public session_token: string + + // TODO: support fingerprinting to + // TODO: increase security + // TODO: while logging in + + constructor( + session_id: number, + user_id: number, + session_string: string + ) { + this.session_id = session_id + this.user_id = user_id + this.session_token = session_string + } + +} + +export class SessionDBBroker implements ISessionBroker{ + + private static initialized = false + + constructor() { + if (SessionDBBroker.initialized) { + // UGLY: make more specific + throw Error("SessionBroker has already been initialized") + } + } + + + createTable(): void { + + const stmt = SSLSnifferApp.prepare( + ` + CREATE TABLE IF NOT EXISTS sessions ( + session_id INTEGER PRIMARY KEY AUTOINCREMENT, + user_id INTEGER UNIQUE NOT NULL + session_token TEXT UNIQUE NOT NULL , + FOREIGN KEY (user_id) references users(user_id) ON DELETE CASCADE + ); + ` + ) + + stmt.run() + stmt.finalize() + } + + getSessionFromToken(token: string): Session { + throw new Error("Method not implemented.") + } + + createSessionFromUserID(userID: number): Session { + throw new Error("Method not implemented.") + } + + getSessionFromUserID(userID: number): Session { + throw new Error("Method not implemented.") + } + + + + +} +