39 lines
928 B
JavaScript
39 lines
928 B
JavaScript
'use strict';
|
|
|
|
const crypto = require('crypto');
|
|
const config = require('./config');
|
|
|
|
const sessions = new Map();
|
|
|
|
function createSession(userInfo) {
|
|
const token = crypto.randomBytes(32).toString('hex');
|
|
const expiresAt = Date.now() + config.sessionTTLMinutes * 60 * 1000;
|
|
sessions.set(token, { expiresAt, user: userInfo });
|
|
return token;
|
|
}
|
|
|
|
function getSession(token) {
|
|
if (!token) return null;
|
|
const session = sessions.get(token);
|
|
if (!session) return null;
|
|
if (Date.now() > session.expiresAt) {
|
|
sessions.delete(token);
|
|
return null;
|
|
}
|
|
return session;
|
|
}
|
|
|
|
function destroySession(token) {
|
|
if (token) sessions.delete(token);
|
|
}
|
|
|
|
function cleanup() {
|
|
const now = Date.now();
|
|
for (const [token, session] of sessions.entries()) {
|
|
if (now > session.expiresAt) sessions.delete(token);
|
|
}
|
|
}
|
|
|
|
setInterval(cleanup, 60 * 1000).unref();
|
|
|
|
module.exports = { createSession, getSession, destroySession }; |