UNPKG

alapa

Version:

A cutting-edge web development framework designed to revolutionize the way developers build modern web applications.

122 lines (121 loc) 3.65 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); /* eslint-disable @typescript-eslint/no-explicit-any */ const express_session_1 = __importDefault(require("express-session")); const session_1 = require("../../data/model/session"); const encryption_1 = require("../misc/encryption"); class AppSessionStore extends express_session_1.default.Store { options; constructor() { super(); } async get(sid, callback) { try { const session = await session_1.SessionDatabase.findOne({ where: { id: sid }, }); if (session) { if (this.isExpired(session.expiredAt)) { await session.remove(); callback(null, null); } else { callback(null, JSON.parse(encryption_1.Encryption.decrypt(session.data) ?? session.data)); } } else { callback(null, null); } } catch (err) { callback(err); } } isExpired(expiredAt) { return expiredAt < Date.now(); } async set(sid, sessionData, callback) { try { const session = new session_1.SessionDatabase(); const data = JSON.stringify(sessionData); session.id = sid; session.data = encryption_1.Encryption.encrypt(data) ?? data; session.expiredAt = sessionData.cookie.expires ? new Date(sessionData.cookie.expires).getTime() : Date.now() + (sessionData.cookie.maxAge != undefined ? sessionData.cookie.maxAge : 0); await session.save(); if (callback) callback(null); } catch (err) { if (callback) callback(err); } } async destroy(sid, callback) { try { const session = await session_1.SessionDatabase.findOneBy({ id: sid, }); session?.remove(); if (callback) callback(null); } catch (err) { if (callback) callback(err); } } // Optional methods async length(callback) { try { const count = await session_1.SessionDatabase.count(); callback(null, count); } catch (err) { callback(err, 0); } } async clear(callback) { try { // await AppSession.clear(); if (callback) callback(null); } catch (err) { if (callback) callback(err); } } async touch(sid, sessionData, callback) { try { await this.set(sid, sessionData, callback); } catch (err) { if (callback) callback(err); } } async all(callback) { try { const sessions = await session_1.SessionDatabase.find({ take: 100, }); const result = {}; sessions.forEach((session) => { result[session.id] = JSON.parse(encryption_1.Encryption.decrypt(session.data) ?? session.data); }); callback(null, result); } catch (err) { callback(err); } } } exports.default = AppSessionStore;