Initial content

This commit is contained in:
Adam Freeman
2024-05-29 18:54:49 +01:00
parent 2dbc1a8088
commit 5215a1d919
1944 changed files with 203378 additions and 0 deletions
@@ -0,0 +1,26 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.MemoryRepository = void 0;
const crypto_1 = require("crypto");
class MemoryRepository {
store = new Map();
async createSession() {
return { id: (0, crypto_1.randomUUID)(), data: {} };
}
async getSession(id) {
const wrapper = this.store.get(id);
if (wrapper && wrapper.expires > new Date(Date.now())) {
return structuredClone(wrapper.session);
}
}
async saveSession(session, expires) {
this.store.set(session.id, { session, expires });
}
async touchSession(session, expires) {
const wrapper = this.store.get(session.id);
if (wrapper) {
wrapper.expires = expires;
}
}
}
exports.MemoryRepository = MemoryRepository;
@@ -0,0 +1,34 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.customSessionMiddleware = void 0;
//import { MemoryRepository } from "./memory_repository";
const cookies_1 = require("../cookies");
const orm_repository_1 = require("./orm_repository");
const session_cookie_name = "custom_session";
const expiry_seconds = 300;
const getExpiryDate = () => new Date(Date.now() + (expiry_seconds * 1000));
const customSessionMiddleware = () => {
//const repo: SessionRepository = new MemoryRepository();
const repo = new orm_repository_1.OrmRepository();
return async (req, resp, next) => {
const id = (0, cookies_1.getCookie)(req, session_cookie_name);
const session = (id ? await repo.getSession(id) : undefined)
?? await repo.createSession();
req.session = session;
(0, cookies_1.setCookie)(resp, session_cookie_name, session.id, {
maxAge: expiry_seconds * 1000
});
resp.once("finish", async () => {
if (Object.keys(session.data).length > 0) {
if (req.method == "POST") {
await repo.saveSession(session, getExpiryDate());
}
else {
await repo.touchSession(session, getExpiryDate());
}
}
});
next();
};
};
exports.customSessionMiddleware = customSessionMiddleware;
@@ -0,0 +1,15 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.initializeModel = exports.SessionModel = void 0;
const sequelize_1 = require("sequelize");
class SessionModel extends sequelize_1.Model {
}
exports.SessionModel = SessionModel;
const initializeModel = (sequelize) => {
SessionModel.init({
id: { type: sequelize_1.DataTypes.STRING, primaryKey: true },
data: { type: sequelize_1.DataTypes.JSON },
expires: { type: sequelize_1.DataTypes.DATE }
}, { sequelize });
};
exports.initializeModel = initializeModel;
@@ -0,0 +1,45 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.OrmRepository = void 0;
const sequelize_1 = require("sequelize");
const orm_models_1 = require("./orm_models");
const crypto_1 = require("crypto");
class OrmRepository {
sequelize;
constructor() {
this.sequelize = new sequelize_1.Sequelize({
dialect: "sqlite",
storage: "orm_sessions.db",
logging: console.log,
logQueryParameters: true
});
this.initModelAndDatabase();
}
async initModelAndDatabase() {
(0, orm_models_1.initializeModel)(this.sequelize);
await this.sequelize.drop();
await this.sequelize.sync();
}
async createSession() {
return { id: (0, crypto_1.randomUUID)(), data: {} };
}
async getSession(id) {
const dbsession = await orm_models_1.SessionModel.findOne({
where: { id, expires: { [sequelize_1.Op.gt]: new Date(Date.now()) } }
});
if (dbsession) {
return { id, data: dbsession.data };
}
}
async saveSession(session, expires) {
await orm_models_1.SessionModel.upsert({
id: session.id,
data: session.data,
expires
});
}
async touchSession(session, expires) {
await orm_models_1.SessionModel.update({ expires }, { where: { id: session.id } });
}
}
exports.OrmRepository = OrmRepository;
@@ -0,0 +1,2 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,29 @@
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.sessionMiddleware = exports.getSession = void 0;
//import { Session } from "./repository";
const express_session_1 = __importDefault(require("express-session"));
const connect_session_sequelize_1 = __importDefault(require("connect-session-sequelize"));
const sequelize_1 = require("sequelize");
const getSession = (req) => req.session;
exports.getSession = getSession;
const sessionMiddleware = () => {
const sequelize = new sequelize_1.Sequelize({
dialect: "sqlite",
storage: "pkg_sessions.db"
});
const store = new ((0, connect_session_sequelize_1.default)(express_session_1.default.Store))({
db: sequelize
});
store.sync();
return (0, express_session_1.default)({
secret: "mysecret",
store: store,
cookie: { maxAge: 300 * 1000, sameSite: "strict" },
resave: false, saveUninitialized: false
});
};
exports.sessionMiddleware = sessionMiddleware;