62 lines
1.6 KiB
JavaScript
62 lines
1.6 KiB
JavaScript
/**
|
|
* Copyright (c) 2024-2025 Тарабанов Александр Викторович
|
|
* All rights reserved.
|
|
*
|
|
* This software is proprietary and confidential.
|
|
* Unauthorized copying, modification, or distribution is prohibited.
|
|
*
|
|
* For licensing inquiries: info@hb3-accelerator.com
|
|
* Website: https://hb3-accelerator.com
|
|
* GitHub: https://github.com/VC-HB3-Accelerator
|
|
*/
|
|
|
|
const session = require('express-session');
|
|
const pgSession = require('connect-pg-simple')(session);
|
|
const db = require('../db');
|
|
const crypto = require('crypto');
|
|
|
|
let onPoolChangeCallback = null;
|
|
|
|
function setPoolChangeCallback(cb) {
|
|
onPoolChangeCallback = cb;
|
|
}
|
|
|
|
let sessionMiddleware = createSessionMiddleware();
|
|
|
|
function createSessionMiddleware() {
|
|
const isProduction = process.env.NODE_ENV === 'production';
|
|
|
|
return session({
|
|
store: new pgSession({
|
|
pool: db.getPool(),
|
|
tableName: 'session',
|
|
}),
|
|
secret: process.env.SESSION_SECRET || crypto.randomBytes(32).toString('hex'),
|
|
name: 'sessionId',
|
|
resave: true,
|
|
saveUninitialized: false,
|
|
cookie: {
|
|
maxAge: 30 * 24 * 60 * 60 * 1000,
|
|
httpOnly: true,
|
|
secure: false, // false для локального Docker (HTTP)
|
|
sameSite: 'lax', // lax для локального Docker
|
|
path: '/',
|
|
},
|
|
});
|
|
}
|
|
|
|
function reloadSessionMiddleware() {
|
|
sessionMiddleware = createSessionMiddleware();
|
|
if (onPoolChangeCallback) {
|
|
onPoolChangeCallback();
|
|
}
|
|
}
|
|
|
|
module.exports = {
|
|
get sessionMiddleware() {
|
|
return sessionMiddleware;
|
|
},
|
|
reloadSessionMiddleware,
|
|
setPoolChangeCallback,
|
|
};
|