feat: improve session logging

This commit is contained in:
Rim
2025-04-01 16:19:59 -04:00
parent 2ba7b108b0
commit e16a0a85ee
2 changed files with 142 additions and 5 deletions

48
app.js
View File

@ -6,6 +6,8 @@ const favicon = require('serve-favicon');
const app = express();
const port = process.env.PORT || 3512;
app.set('trust proxy', true);
// Middleware
app.use(bodyParser.json({ limit: "10mb" }));
app.use(bodyParser.urlencoded({ extended: true, limit: "10mb" }));
@ -13,6 +15,10 @@ app.use(express.static(__dirname));
app.use(express.static(path.join(__dirname, 'public')));
app.use('/images', express.static(path.join(__dirname, 'src/images')));
app.use(favicon(path.join(__dirname, 'src', 'images', 'favicon.ico')));
app.use(bodyParser.json({ limit: "10mb", verify: (req, res, buf) => {
req.rawBody = buf.toString();
}}));
// app.use(express.raw({ type: 'application/json', limit: '10mb' }));
const fs = require('fs');
@ -183,7 +189,7 @@ const handleApiError = (error, res) => {
// API endpoint to fetch stats
app.post("/api/stats", async (req, res) => {
console.log("Received request for /api/stats");
console.log(`Request IP: ${req.ip || req.connection.remoteAddress}`);
console.log(`Request IP: ${req.headers['x-forwarded-for'] || req.ip || req.connection.remoteAddress}`);
console.log(`Request JSON: ${JSON.stringify({
username: req.body.username,
platform: req.body.platform,
@ -421,7 +427,7 @@ app.post("/api/stats", async (req, res) => {
// API endpoint to fetch recent matches
app.post("/api/matches", async (req, res) => {
console.log("Received request for /api/matches");
console.log(`Request IP: ${req.ip || req.connection.remoteAddress}`);
console.log(`Request IP: ${req.headers['x-forwarded-for'] || req.ip || req.connection.remoteAddress}`);
console.log(`Request JSON: ${JSON.stringify({
username: req.body.username,
platform: req.body.platform,
@ -560,7 +566,7 @@ app.post("/api/matches", async (req, res) => {
// API endpoint to fetch match info
app.post("/api/matchInfo", async (req, res) => {
console.log("Received request for /api/matchInfo");
console.log(`Request IP: ${req.ip || req.connection.remoteAddress}`);
console.log(`Request IP: ${req.headers['x-forwarded-for'] || req.ip || req.connection.remoteAddress}`);
console.log(`Request JSON: ${JSON.stringify({
matchId: req.body.matchId,
platform: req.body.platform,
@ -686,7 +692,7 @@ app.post("/api/matchInfo", async (req, res) => {
// API endpoint for user-related API calls
app.post("/api/user", async (req, res) => {
console.log("Received request for /api/user");
console.log(`Request IP: ${req.ip || req.connection.remoteAddress}`);
console.log(`Request IP: ${req.headers['x-forwarded-for'] || req.ip || req.connection.remoteAddress}`);
console.log(`Request JSON: ${JSON.stringify({
username: req.body.username,
platform: req.body.platform,
@ -812,7 +818,7 @@ app.post("/api/user", async (req, res) => {
// API endpoint for fuzzy search
app.post("/api/search", async (req, res) => {
console.log("Received request for /api/search");
console.log(`Request IP: ${req.ip || req.connection.remoteAddress}`);
console.log(`Request IP: ${req.headers['x-forwarded-for'] || req.ip || req.connection.remoteAddress}`);
console.log(`Request JSON: ${JSON.stringify({
username: req.body.username,
platform: req.body.platform,
@ -889,6 +895,38 @@ app.post("/api/search", async (req, res) => {
}
});
// Improved logging endpoint
app.post('/api/log', (req, res) => {
const clientIP = req.headers['x-forwarded-for'] || req.ip || req.connection.remoteAddress;
const userAgent = req.headers['user-agent'];
let logData;
try {
// Handle data whether it comes as already parsed JSON or as a string
if (typeof req.body === 'string') {
logData = JSON.parse(req.body);
} else if (req.body && typeof req.body === 'object') {
logData = req.body;
} else {
// If no parsable data found, create a basic log entry
logData = { eventType: 'unknown', timestamp: new Date().toISOString() };
}
// Log the data
console.log(`[USER ACTIVITY] ${new Date().toISOString()} | IP: ${clientIP} | Type: ${logData.eventType} | ${JSON.stringify({
...logData,
userAgent
})}`);
} catch (error) {
console.error('Error processing log data:', error);
console.log('Raw request body:', req.body);
}
// Always return 200 to avoid client-side errors
res.status(200).send();
});
// Basic health check endpoint
app.get("/health", (req, res) => {
res.json({ status: "ok", timestamp: new Date().toISOString() });