51 lines
1.9 KiB
JavaScript
51 lines
1.9 KiB
JavaScript
const axios = require('axios');
|
|
const fs = require('fs');
|
|
const path = require('path');
|
|
const setupFilePath = path.join(__dirname, '../data', 'setup.json');
|
|
|
|
function sendDiscordWebhook(url, req, statusCode) {
|
|
const fullUrl = `${req.protocol}://${req.get('host')}${req.originalUrl}`;
|
|
|
|
const ip = req.headers['x-forwarded-for'] || req.connection.remoteAddress;
|
|
|
|
const statusEmoji = statusCode === 200 ? '✅' : '❌';
|
|
const statusMessage = `**Statut:** ${statusEmoji} (${statusCode})`;
|
|
|
|
const timestamp = new Date().toLocaleString('fr-FR', { timeZone: 'UTC', hour12: false });
|
|
const userAgent = req.get('User-Agent');
|
|
|
|
const { v4: uuidv4 } = require('uuid');
|
|
|
|
const webhookId = uuidv4();
|
|
|
|
const userId = req.user ? req.user.id : 'Inconnu';
|
|
const userName = req.user ? req.user.name : 'Inconnu';
|
|
|
|
const data = {
|
|
embeds: [{
|
|
title: "📡 Requête API",
|
|
description: "Une requête API a été effectuée. Voici les détails :",
|
|
color: 16753920,
|
|
fields: [{
|
|
name: `🔎 Détails de la requête\n\n`,
|
|
value: `🔗 **URL:** ${fullUrl}\n\n🚦 ${statusMessage}\n\n🌐 **IP**: ${ip}\n\n🔧 **Méthode**: ${req.method}\n\n⏰ **Heure**: ${timestamp}\n\n🕵️ **Agent utilisateur**: ${userAgent}\n\n👤 **Utilisateur**: ${userName} (*ID: ${userId}*)`,
|
|
inline: false
|
|
}],
|
|
footer: {
|
|
text: `📚 Journal des requêtes API | ${webhookId}`
|
|
}
|
|
}]
|
|
};
|
|
}
|
|
|
|
function discordWebhookSuspisiousAlertMiddleware(req, res, next) {
|
|
const setupData = JSON.parse(fs.readFileSync(setupFilePath, 'utf-8'));
|
|
|
|
res.on('finish', () => {
|
|
const discordWebhookUrl = setupData[0].webhooks_discord;
|
|
sendDiscordWebhook(discordWebhookUrl, req, res.statusCode);
|
|
});
|
|
next();
|
|
}
|
|
|
|
module.exports = discordWebhookSuspisiousAlertMiddleware; |