29 lines
868 B
JavaScript
29 lines
868 B
JavaScript
'use strict';
|
|
const { db } = require('../db');
|
|
|
|
const insert = db.prepare(
|
|
`INSERT INTO logs (actor, actor_id, action, page, detail, ip)
|
|
VALUES (@actor, @actor_id, @action, @page, @detail, @ip)`
|
|
);
|
|
|
|
/**
|
|
* Record an auditable action.
|
|
* @param {object} req Express request (for user + ip). Can be null for system events.
|
|
* @param {string} action Short machine code, e.g. FILE_UPLOAD
|
|
* @param {string} page Human page name
|
|
* @param {string} detail Free-text description
|
|
*/
|
|
function log(req, action, page, detail) {
|
|
const user = req && req.session && req.session.user;
|
|
insert.run({
|
|
actor: user ? user.username : 'system',
|
|
actor_id: user ? user.id : null,
|
|
action,
|
|
page: page || null,
|
|
detail: detail || null,
|
|
ip: req ? (req.headers['x-forwarded-for'] || req.socket.remoteAddress || null) : null,
|
|
});
|
|
}
|
|
|
|
module.exports = { log };
|