const express = require('express'); const router = express.Router(); const path = require('path'); const { checkUpdates } = require('../Middlewares/checkUpdate'); const { applyUpdate, restartCDN } = require('../models/updateManager'); const { logger, ErrorLogger, logRequestInfo } = require('../config/logs'); const util = require('util'); const exec = util.promisify(require('child_process').exec); const authMiddleware = require('../Middlewares/authMiddleware'); const fs = require('fs'); router.use(express.json()); router.get('/', (req, res) => { res.render('acces-denied'); }); router.get('/attachments', (req, res) => { res.render('acces-denied'); }); router.get('/checkupdate',authMiddleware, checkUpdates); router.get('/applyupdate',authMiddleware, async (req, res) => { const updateUrl = 'https://apollon.dinawo.fr/api/download/all'; const updateFolder = path.join(__dirname, '..'); try { logger.info('------Before applying the update------'); await applyUpdate(updateUrl, updateFolder); logger.info('------After applying the update------'); res.json({ success: true, message: 'Mise à jour appliquée avec succès. Pensé à redémarrer le serveur pour que la MàJ soit prise en compte. (systemctl restart cdn).' }); } catch (error) { ErrorLogger.error('Error applying update:', error); return res.status(500).json({ success: false, message: 'Erreur lors de l\'application de la mise à jour.' }); } }); router.get('/translateAll', async (req, res) => { const targetLanguage = req.query.lang || 'en'; const viewsFolder = path.join(__dirname, '../views'); try { const translatedFiles = []; const files = fs.readdirSync(viewsFolder); for (const file of files) { if (file.endsWith('.ejs')) { const filePath = path.join(viewsFolder, file); const translatedContent = await translateEJSFile(filePath, targetLanguage); if (translatedContent !== null) { translatedFiles.push({ fileName: file, translatedContent, }); } } } res.json(translatedFiles); } catch (error) { console.error('Error translating all EJS files :', error.message); res.status(500).json({ error: 'Translation mistake' }); } }); router.get('/setup', (req, res) => { fs.readFile(path.join(__dirname, '../setup.json'), 'utf8', (err, data) => { if (err) { ErrorLogger.error('Error reading setup.json:', err); return res.status(500).json({ success: false, message: 'Error reading setup.json.' }); } const setup = JSON.parse(data); if (Object.keys(setup).length === 0 && setup.constructor === Object) { res.render('setup', { setup }); } else { res.status(200).json({message: 'The CDN configuration is already done.' }); } }); }); router.post('/setup/save', (req, res) => { const setupData = { domain: req.body.domain ?? '', uptime: req.body.uptime ?? '' }; if (!areAllFieldsEmpty(req.body.ldap)) { setupData.ldap = req.body.ldap; } if (!areAllFieldsEmpty(req.body.discord)) { setupData.discord = req.body.discord; } fs.writeFile(path.join(__dirname, '../setup.json'), JSON.stringify(setupData, null, 2), (err) => { if (err) { ErrorLogger.error('Error writing to setup.json:', err); return res.status(500).json({ success: false, message: 'Error writing to setup.json.' }); } res.json({ success: true, message: 'The configuration data has been saved successfully.' }); }); }); function areAllFieldsEmpty(obj) { return Object.values(obj).every(val => !val); } module.exports = router;