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
JavaScript
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;
;