Files
WebNationsGlory_ServeurBuil…/backend/src/routes/server.js
NationsGlory Deploy 8b905dc9b3 fix: corriger tous les chemins SERVER_DIR et RCON_HOST pour machine distante
- Remplacer fallback SERVER_DIR de '/home/innotex/Documents/...' à '/mc-server'
- Remplacer RCON_HOST de 'localhost' à '172.17.0.1' (Docker bridge gateway)
- 8 fichiers corrigés: server.js + 7 routes
- Localhost n'est pas accessible depuis Docker vers l'host
- 172.17.0.1 est la gateway Docker qui permet au container d'accéder l'host
2026-02-05 02:17:04 +01:00

119 lines
3.2 KiB
JavaScript

const express = require('express');
const fs = require('fs-extra');
const path = require('path');
const router = express.Router();
const SERVER_DIR = process.env.SERVER_DIR || '/mc-server';
function isAuthenticated(req, res, next) {
if (req.session.user) {
next();
} else {
res.status(401).json({ error: 'Non authentifié' });
}
}
router.get('/', isAuthenticated, async (req, res) => {
try {
const serverPropsFile = path.join(SERVER_DIR, 'server.properties');
if (!await fs.pathExists(serverPropsFile)) {
return res.status(404).json({ error: 'server.properties non trouvé' });
}
const content = await fs.readFile(serverPropsFile, 'utf-8');
const lines = content.split('\n');
const properties = {};
lines.forEach(line => {
if (line && !line.startsWith('#')) {
const [key, ...valueParts] = line.split('=');
properties[key.trim()] = valueParts.join('=').trim();
}
});
res.json({ properties });
} catch (error) {
console.error('Erreur serveur:', error);
res.status(500).json({ error: 'Erreur serveur' });
}
});
router.post('/update', isAuthenticated, async (req, res) => {
try {
const { property, value } = req.body;
if (!property || value === undefined) {
return res.status(400).json({ error: 'Données manquantes' });
}
const serverPropsFile = path.join(SERVER_DIR, 'server.properties');
let content = await fs.readFile(serverPropsFile, 'utf-8');
const lines = content.split('\n');
let found = false;
const newContent = lines.map(line => {
if (line.startsWith(property + '=')) {
found = true;
return `${property}=${value}`;
}
return line;
}).join('\n');
if (!found) {
content = newContent + '\n' + property + '=' + value;
} else {
content = newContent;
}
await fs.writeFile(serverPropsFile, content, 'utf-8');
res.json({ message: 'Propriété mise à jour' });
} catch (error) {
console.error('Erreur mise à jour:', error);
res.status(500).json({ error: 'Erreur serveur' });
}
});
router.post('/settings', isAuthenticated, async (req, res) => {
try {
const { key, value } = req.body;
if (!key || value === undefined) {
return res.status(400).json({ error: 'Données manquantes' });
}
const serverPropsFile = path.join(SERVER_DIR, 'server.properties');
let content = await fs.readFile(serverPropsFile, 'utf-8');
const lines = content.split('\n');
let found = false;
const newContent = lines.map(line => {
if (line.trim() && !line.startsWith('#')) {
const [lineKey] = line.split('=');
if (lineKey.trim() === key) {
found = true;
return `${key}=${value}`;
}
}
return line;
}).join('\n');
if (!found) {
content = newContent + '\n' + key + '=' + value;
} else {
content = newContent;
}
await fs.writeFile(serverPropsFile, content, 'utf-8');
res.json({ message: 'Paramètre mis à jour' });
} catch (error) {
console.error('Erreur modification paramètre:', error);
res.status(500).json({ error: 'Erreur serveur' });
}
});
module.exports = router;