83 lines
2.5 KiB
JavaScript
83 lines
2.5 KiB
JavaScript
import dotenv from 'dotenv';
|
|
import { createClient } from 'redis';
|
|
import User from '../models/community/user.js';
|
|
|
|
dotenv.config();
|
|
|
|
const EXPIRATION_TIME = 30 * 60 * 1000;
|
|
|
|
const redisClient = createClient({
|
|
url: `redis://${process.env.REDIS_HOST}:${process.env.REDIS_PORT}`,
|
|
password: process.env.REDIS_PASSWORD,
|
|
legacyMode: false,
|
|
});
|
|
|
|
redisClient.connect().catch(console.error);
|
|
|
|
const setUserSession = async (userId, sessionData) => {
|
|
try {
|
|
await redisClient.hSet(`user:${userId}`, sessionData);
|
|
} catch (error) {
|
|
console.error('Fehler beim Setzen der Benutzersitzung:', error);
|
|
}
|
|
};
|
|
|
|
const deleteUserSession = async (userId) => {
|
|
try {
|
|
await redisClient.del(`user:${userId}`);
|
|
} catch (error) {
|
|
console.error('Fehler beim Löschen der Benutzersitzung:', error);
|
|
}
|
|
};
|
|
|
|
const getUserSession = async (userId) => {
|
|
try {
|
|
return await redisClient.hGetAll(`user:${userId}`);
|
|
} catch (error) {
|
|
console.error('Fehler beim Abrufen der Benutzersitzung:', error);
|
|
return null;
|
|
}
|
|
};
|
|
|
|
const updateUserTimestamp = async (hashedId) => {
|
|
try {
|
|
const userKey = `user:${hashedId}`;
|
|
const userExists = await redisClient.exists(userKey);
|
|
if (userExists) {
|
|
await redisClient.hSet(userKey, 'timestamp', Date.now());
|
|
console.log(`Zeitstempel für Benutzer ${hashedId} aktualisiert.`);
|
|
} else {
|
|
console.warn(`Benutzer mit der hashedId ${hashedId} wurde nicht gefunden.`);
|
|
}
|
|
} catch (error) {
|
|
console.error('Fehler beim Aktualisieren des Zeitstempels:', error);
|
|
}
|
|
};
|
|
|
|
const cleanupExpiredSessions = async () => {
|
|
try {
|
|
const keys = await redisClient.keys('user:*');
|
|
const now = Date.now();
|
|
for (const key of keys) {
|
|
const session = await redisClient.hGetAll(key);
|
|
if (session.timestamp && now - parseInt(session.timestamp) > EXPIRATION_TIME) {
|
|
const userId = key.split(':')[1];
|
|
await redisClient.del(key);
|
|
await User.update({ authCode: '' }, { where: { hashedId: userId } });
|
|
console.log(`Abgelaufene Sitzung für Benutzer ${userId} gelöscht.`);
|
|
}
|
|
}
|
|
} catch (error) {
|
|
console.error('Fehler beim Bereinigen abgelaufener Sitzungen:', error);
|
|
}
|
|
};
|
|
|
|
export {
|
|
setUserSession,
|
|
deleteUserSession,
|
|
getUserSession,
|
|
updateUserTimestamp,
|
|
cleanupExpiredSessions,
|
|
redisClient
|
|
};
|