activity
Signed-off-by: Omar Sánchez Pizarro <omar.sanchez@pistacero.net>
This commit is contained in:
@@ -1101,6 +1101,30 @@ export async function getSession(token) {
|
||||
}
|
||||
}
|
||||
|
||||
// Actualizar actividad de una sesión
|
||||
export async function updateSessionActivity(token, isActive = true) {
|
||||
if (!db) {
|
||||
return false;
|
||||
}
|
||||
|
||||
try {
|
||||
const sessionsCollection = db.collection('sessions');
|
||||
await sessionsCollection.updateOne(
|
||||
{ token },
|
||||
{
|
||||
$set: {
|
||||
lastActivity: new Date(),
|
||||
isActive: isActive,
|
||||
},
|
||||
}
|
||||
);
|
||||
return true;
|
||||
} catch (error) {
|
||||
console.error('Error actualizando actividad de sesión:', error.message);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
export async function deleteSession(token) {
|
||||
if (!db) {
|
||||
return false;
|
||||
@@ -1139,21 +1163,63 @@ export async function getAllSessions() {
|
||||
try {
|
||||
const sessionsCollection = db.collection('sessions');
|
||||
const sessions = await sessionsCollection.find({}).toArray();
|
||||
return sessions.map(session => ({
|
||||
token: session.token,
|
||||
username: session.username,
|
||||
fingerprint: session.fingerprint || null,
|
||||
deviceInfo: session.deviceInfo || null,
|
||||
createdAt: session.createdAt,
|
||||
expiresAt: session.expiresAt,
|
||||
isExpired: session.expiresAt ? new Date(session.expiresAt) < new Date() : false,
|
||||
}));
|
||||
const now = new Date();
|
||||
const INACTIVE_TIMEOUT = 5 * 60 * 1000; // 5 minutos
|
||||
|
||||
return sessions.map(session => {
|
||||
const isExpired = session.expiresAt ? new Date(session.expiresAt) < now : false;
|
||||
const timeSinceActivity = session.lastActivity ? now - new Date(session.lastActivity) : null;
|
||||
const isActive = session.isActive && timeSinceActivity && timeSinceActivity < INACTIVE_TIMEOUT;
|
||||
|
||||
return {
|
||||
token: session.token,
|
||||
username: session.username,
|
||||
fingerprint: session.fingerprint || null,
|
||||
deviceInfo: session.deviceInfo || null,
|
||||
createdAt: session.createdAt,
|
||||
expiresAt: session.expiresAt,
|
||||
lastActivity: session.lastActivity || null,
|
||||
isActive: isActive || false,
|
||||
isExpired: isExpired,
|
||||
};
|
||||
});
|
||||
} catch (error) {
|
||||
console.error('Error obteniendo todas las sesiones:', error.message);
|
||||
return [];
|
||||
}
|
||||
}
|
||||
|
||||
// Obtener sesiones activas (usuarios conectados)
|
||||
export async function getActiveSessions() {
|
||||
if (!db) {
|
||||
return [];
|
||||
}
|
||||
|
||||
try {
|
||||
const sessionsCollection = db.collection('sessions');
|
||||
const now = new Date();
|
||||
const INACTIVE_TIMEOUT = 5 * 60 * 1000; // 5 minutos
|
||||
const recentTime = new Date(now - INACTIVE_TIMEOUT);
|
||||
|
||||
// Buscar sesiones activas (con actividad reciente)
|
||||
const sessions = await sessionsCollection.find({
|
||||
isActive: true,
|
||||
lastActivity: { $gte: recentTime },
|
||||
expiresAt: { $gt: now }
|
||||
}).toArray();
|
||||
|
||||
return sessions.map(session => ({
|
||||
username: session.username,
|
||||
lastActivity: session.lastActivity,
|
||||
deviceInfo: session.deviceInfo || null,
|
||||
fingerprint: session.fingerprint || null,
|
||||
}));
|
||||
} catch (error) {
|
||||
console.error('Error obteniendo sesiones activas:', error.message);
|
||||
return [];
|
||||
}
|
||||
}
|
||||
|
||||
// Funciones para artículos
|
||||
export async function getArticle(platform, id, currentUsername = null) {
|
||||
if (!db) {
|
||||
|
||||
Reference in New Issue
Block a user