All checks were successful
continuous-integration/drone/push Build is passing
Note: We appreciate your feedback and bug reports to continue improving our platform. Thank you for your continued support!
102 lines
3.7 KiB
JavaScript
102 lines
3.7 KiB
JavaScript
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; |