-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsecurity-logs.js
More file actions
97 lines (81 loc) · 2.68 KB
/
Copy pathsecurity-logs.js
File metadata and controls
97 lines (81 loc) · 2.68 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
// Gestion des logs de sécurité avec stockage en base de données (2 jours de rétention)
import { pb } from '../lib/pocketbase.js';
const RETENTION_DAYS = 2;
const LOG_COLLECTION = 'security_logs';
export async function createSecurityLog(event) {
try {
// Vérifier que la collection existe, sinon la créer
const data = {
timestamp: new Date().toISOString(),
type: event.type || 'unknown',
severity: event.severity || 'info',
ip_address: event.ip || 'unknown',
agent: event.agent || 'system',
description: event.description || '',
details: JSON.stringify(event.details || {}),
user_id: pb.authStore.record?.id || 'anonymous',
};
await pb.collection(LOG_COLLECTION).create(data);
return true;
} catch (e) {
console.error('Error creating security log:', e);
return false;
}
}
export async function getSecurityLogs(filters = {}) {
try {
const query = [];
// Filtre par date (garder seulement 2 jours)
const twoAgo = new Date();
twoAgo.setDate(twoAgo.getDate() - RETENTION_DAYS);
query.push(`created >= "${twoAgo.toISOString()}"`);
if (filters.severity) query.push(`severity = "${filters.severity}"`);
if (filters.type) query.push(`type = "${filters.type}"`);
if (filters.ip) query.push(`ip_address = "${filters.ip}"`);
const logs = await pb.collection(LOG_COLLECTION).getList(1, 500, {
filter: query.join(' && '),
sort: '-created',
});
return logs.items || [];
} catch (e) {
console.error('Error fetching security logs:', e);
return [];
}
}
export async function getLogsByType(type) {
return getSecurityLogs({ type });
}
export async function getLogsBySeverity(severity) {
return getSecurityLogs({ severity });
}
export async function getBlockedIPLogs() {
return getSecurityLogs({ type: 'ip_blocked' });
}
export async function getThreatCount(severity = null) {
try {
const filter = severity ? `severity = "${severity}"` : '';
const logs = await pb.collection(LOG_COLLECTION).getList(1, 1, {
filter: filter,
});
return logs.totalItems || 0;
} catch (e) {
return 0;
}
}
export async function clearOldLogs() {
try {
const twoAgo = new Date();
twoAgo.setDate(twoAgo.getDate() - RETENTION_DAYS);
// Supprimer les logs plus anciens que 2 jours
const oldLogs = await pb.collection(LOG_COLLECTION).getList(1, 500, {
filter: `created < "${twoAgo.toISOString()}"`,
});
for (const log of oldLogs.items) {
await pb.collection(LOG_COLLECTION).delete(log.id);
}
return oldLogs.items.length;
} catch (e) {
console.error('Error clearing old logs:', e);
return 0;
}
}