Add audit logs; Fix Create/edit usernames

This commit is contained in:
Christopher Cookman 2024-12-21 11:05:34 -07:00
parent 9d9e8ad334
commit 1065e9b8c5
4 changed files with 27 additions and 6 deletions

View file

@ -59,7 +59,7 @@ function runMigrations(pool) {
resolve(); resolve();
}) })
.catch(err => { .catch(err => {
console.errorr('Error running migrations:', err); console.error('Error running migrations:', err);
reject(err); reject(err);
}) })
.finally(() => { .finally(() => {

View file

@ -0,0 +1,7 @@
CREATE TABLE audit_logs (
id INT AUTO_INCREMENT PRIMARY KEY,
timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
user VARCHAR(255) NOT NULL,
action VARCHAR(255) NOT NULL,
data JSON NOT NULL
);

3
migrations/007_fix_ids Normal file
View file

@ -0,0 +1,3 @@
ALTER TABLE bans
MODIFY COLUMN robloxId VARCHAR(255),
MODIFY COLUMN discordId VARCHAR(255);

View file

@ -46,6 +46,12 @@ const authenticate = (req, res, next) => {
next(); next();
} }
const auditLog = async (action, data, user) => {
const conn = await pool.getConnection();
await conn.query('INSERT INTO audit_logs (action, data, user) VALUES (?, ?, ?)', [action, data, user]);
conn.end();
}
// MAIN PAGES // MAIN PAGES
router.get('/', authenticate, (req, res) => { router.get('/', authenticate, (req, res) => {
@ -85,11 +91,13 @@ router.post('/create', authenticate, async (req, res) => {
const expiresTimestamp = data.expiresTimestamp || null; const expiresTimestamp = data.expiresTimestamp || null;
const robloxId = data.robloxId || null; const robloxId = data.robloxId || null;
const discordId = data.discordId || null; const discordId = data.discordId || null;
const disordUsername = data.discordUsername || null;
const robloxUsername = data.robloxUsername || null;
await conn.query('INSERT INTO bans (reasonShort, reasonLong, reasonsFlag, moderator, expiresTimestamp, robloxId, discordId) VALUES (?, ?, ?, ?, ?, ?, ?)', await conn.query('INSERT INTO bans (reasonShort, reasonLong, reasonsFlag, moderator, expiresTimestamp, robloxId, discordId) VALUES (?, ?, ?, ?, ?, ?, ?)',
[reasonShort, reasonLong, reasonsFlag, moderator, expiresTimestamp, robloxId, discordId]); [reasonShort, reasonLong, reasonsFlag, moderator, expiresTimestamp, robloxId, discordId]);
conn.end(); conn.end();
auditLog('ban_create', { robloxId, discordId, moderator, reasonShort, reasonLong, reasonsFlag, expiresTimestamp }, req.session.user.username);
res.json({ success: true, message: 'User banned successfully', redirect: '/admin' }); res.json({ success: true, message: 'User banned successfully', redirect: '/admin' });
}); });
@ -99,6 +107,8 @@ router.post('/edit/:id', authenticate, async (req, res) => {
const id = req.params.id; const id = req.params.id;
const data = req.body; const data = req.body;
const originalData = await conn.query('SELECT * FROM bans WHERE id = ?', [id]);
if (!data.robloxId && !data.discordId) { if (!data.robloxId && !data.discordId) {
res.json({ success: false, message: 'Please enter a Roblox ID or Discord ID.' }); res.json({ success: false, message: 'Please enter a Roblox ID or Discord ID.' });
return; return;
@ -106,15 +116,16 @@ router.post('/edit/:id', authenticate, async (req, res) => {
const reasonShort = data.reasonShort || 'No reason provided'; const reasonShort = data.reasonShort || 'No reason provided';
const reasonLong = data.reasonLong || 'No reason provided'; const reasonLong = data.reasonLong || 'No reason provided';
const reasonsFlag = data.reasonsFlag || 0; const reasonsFlag = data.reasonsFlag || 0;
const moderator = req.session.user.username || 'Unknown';
const expiresTimestamp = data.expiresTimestamp || null; const expiresTimestamp = data.expiresTimestamp || null;
const robloxId = data.robloxId || null; const robloxId = data.robloxId || null;
const discordId = data.discordId || null; const discordId = data.discordId || null;
const disordUsername = data.discordUsername || null;
const robloxUsername = data.robloxUsername || null;
await conn.query('UPDATE bans SET reasonShort = ?, reasonLong = ?, reasonsFlag = ?, moderator = ?, expiresTimestamp = ?, robloxId = ?, discordId = ? WHERE id = ?', await conn.query('UPDATE bans SET reasonShort = ?, reasonLong = ?, reasonsFlag = ?, expiresTimestamp = ?, robloxId = ?, discordId = ? WHERE id = ?',
[reasonShort, reasonLong, reasonsFlag, moderator, expiresTimestamp, robloxId, discordId, id]); [reasonShort, reasonLong, reasonsFlag, expiresTimestamp, robloxId, discordId, id]);
conn.end(); conn.end();
auditLog('ban_edit', {old: originalData, new: { robloxId, discordId, reasonShort, reasonLong, reasonsFlag, expiresTimestamp }}, req.session.user.username);
res.json({ success: true, message: 'User updated successfully', redirect: '/admin' }); res.json({ success: true, message: 'User updated successfully', redirect: '/admin' });
}); });