const express = require('express'); const fs = require('fs'); const path = require('path'); const router = express.Router(); const fileUpload = require('express-fileupload'); const authMiddleware = require('../../../Middlewares/authMiddleware'); const bodyParser = require('body-parser'); const crypto = require('crypto'); const os = require('os'); const osUtils = require('os-utils'); const Convert = require('ansi-to-html'); const convert = new Convert(); const { getUserData, getSetupData } = require('../../../Middlewares/watcherMiddleware'); router.use(bodyParser.json()); function clean(obj) { for (var propName in obj) { if (obj[propName] === null || obj[propName] === undefined || obj[propName] === '') { delete obj[propName]; } else if (typeof obj[propName] === 'object') { clean(obj[propName]); if (Object.keys(obj[propName]).length === 0) { delete obj[propName]; } } } } function validateIP(ip) { if (!ip) return false; if (ip.includes('/')) { const [addr, bits] = ip.split('/'); const bitsNum = parseInt(bits); if (isIPv4(addr)) { return bitsNum >= 0 && bitsNum <= 32; } else if (isIPv6(addr)) { return bitsNum >= 0 && bitsNum <= 128; } return false; } return isIPv4(ip) || isIPv6(ip); } function isIPv4(ip) { const ipv4Regex = /^(\d{1,3}\.){3}\d{1,3}$/; if (!ipv4Regex.test(ip)) return false; const parts = ip.split('.'); return parts.every(part => { const num = parseInt(part); return num >= 0 && num <= 255; }); } function isIPv6(ip) { const ipv6Regex = /^(?:(?:[0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|(?:[0-9a-fA-F]{1,4}:){1,7}:|(?:[0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|(?:[0-9a-fA-F]{1,4}:){1,5}(?::[0-9a-fA-F]{1,4}){1,2}|(?:[0-9a-fA-F]{1,4}:){1,4}(?::[0-9a-fA-F]{1,4}){1,3}|(?:[0-9a-fA-F]{1,4}:){1,3}(?::[0-9a-fA-F]{1,4}){1,4}|(?:[0-9a-fA-F]{1,4}:){1,2}(?::[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:(?:(?::[0-9a-fA-F]{1,4}){1,6})|:(?:(?::[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(?::[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(?:ffff(?::0{1,4}){0,1}:){0,1}(?:(?:25[0-5]|(?:2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(?:25[0-5]|(?:2[0-4]|1{0,1}[0-9]){0,1}[0-9])|(?:[0-9a-fA-F]{1,4}:){1,4}:(?:(?:25[0-5]|(?:2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(?:25[0-5]|(?:2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/; return ipv6Regex.test(ip); } router.get('/', (req, res) => { res.status(400).json({ error: 'Bad Request. The request cannot be fulfilled due to bad syntax or missing parameters.' }); }); router.post('/', authMiddleware, async (req, res) => { try { let setup = JSON.parse(fs.readFileSync(path.join(__dirname, '../../../data', 'setup.json'), 'utf-8')); if (req.body.allowedIps) { const ipsArray = Array.isArray(req.body.allowedIps) ? req.body.allowedIps : [req.body.allowedIps]; req.body.allowedIps = ipsArray .filter(ip => ip && ip.trim()) .filter(ip => validateIP(ip.trim())) .map(ip => ip.trim()); console.log('IPs validées:', req.body.allowedIps); } clean(req.body); setup[0] = { ...setup[0], ...req.body }; fs.writeFileSync( path.join(__dirname, '../../../data', 'setup.json'), JSON.stringify(setup, null, 2), 'utf-8' ); res.redirect('/dpanel/dashboard/admin/settingsetup'); } catch (err) { console.error('Erreur lors de la mise à jour de la configuration:', err); res.status(500).send('Server Error'); } }); module.exports = router;