Files
CDN-APP-INSIDER/Middlewares/discordWebhookSuspisiousAlertMiddleware.js
Dinawo d76a781680
Some checks failed
continuous-integration/drone/push Build was killed
continuous-integration/drone Build was killed
Update v1.0.0-beta.12, addition of external APIs and optimization
2024-05-28 20:20:52 +02:00

61 lines
2.1 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) {
if (!url) {
return;
}
const fullUrl = `${req.protocol}://${req.get('host')}${req.originalUrl}`;
const ip = req.headers['x-forwarded-for'] || req.connection.remoteAddress;
const statusEmoji = [200, 302].includes(statusCode) ? '✅' : '❌';
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}`
}
}]
};
axios.post(url, data)
.then(response => {
})
.catch(error => {
});
}
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;