127 lines
4.6 KiB
JavaScript
127 lines
4.6 KiB
JavaScript
const express = require('express');
|
|
const path = require('path');
|
|
const fs = require('fs');
|
|
const yaml = require('js-yaml');
|
|
|
|
const app = express();
|
|
|
|
// Activer le middleware JSON pour parser le corps des requêtes
|
|
app.use(express.json());
|
|
app.use(express.urlencoded({ extended: true })); // Si vous utilisez des requêtes POST de type formulaire
|
|
|
|
// Charger config.yaml
|
|
const config = yaml.load(fs.readFileSync('config.yaml', 'utf8'));
|
|
|
|
// Route pour récupérer les données utilisateur
|
|
app.get('/user/:username', (req, res) => {
|
|
const username = req.params.username;
|
|
const userFilePath = path.join(__dirname, `data/${username}.yaml`);
|
|
|
|
try {
|
|
const userData = yaml.load(fs.readFileSync(userFilePath, 'utf8'));
|
|
res.json(userData);
|
|
} catch (error) {
|
|
res.status(404).json({ error: "Utilisateur non trouvé" });
|
|
}
|
|
});
|
|
|
|
// Route pour mettre à jour la position d'un utilisateur
|
|
app.post('/update-position', (req, res) => {
|
|
const { username, longitude, latitude, last_update } = req.body; // Extraction des données de la requête
|
|
|
|
if (!username || !longitude || !latitude || !last_update) {
|
|
console.error("Requête invalide : données manquantes");
|
|
return res.status(400).json({ error: "Les champs username, longitude, latitude et last_update sont requis." });
|
|
}
|
|
|
|
const userFilePath = path.join(__dirname, `data/${username}.yaml`);
|
|
|
|
// Vérification que le fichier existe
|
|
if (!fs.existsSync(userFilePath)) {
|
|
console.error(`Fichier utilisateur non trouvé : ${userFilePath}`);
|
|
return res.status(404).json({ error: `Utilisateur ${username} non trouvé.` });
|
|
}
|
|
|
|
try {
|
|
console.log(`Tentative de mise à jour des coordonnées pour ${username} :`, longitude, latitude, last_update);
|
|
|
|
const userData = yaml.load(fs.readFileSync(userFilePath, 'utf8'));
|
|
|
|
// Mise à jour des données utilisateur
|
|
userData.position_actuelle.longitude = longitude;
|
|
userData.position_actuelle.latitude = latitude;
|
|
userData.position_actuelle.last_update = last_update;
|
|
|
|
// Sauvegarde des données dans le fichier YAML
|
|
fs.writeFileSync(userFilePath, yaml.dump(userData), 'utf8');
|
|
|
|
console.log(`Mise à jour réussie de ${userFilePath}`);
|
|
res.json({ success: true, message: "Position mise à jour", data: userData });
|
|
} catch (error) {
|
|
console.error(`Erreur lors de la mise à jour pour ${username} :`, error.message);
|
|
res.status(500).json({ error: "Impossible de mettre à jour la position." });
|
|
}
|
|
});
|
|
|
|
|
|
|
|
// Servir les fichiers statiques
|
|
app.use('/static', express.static(path.join(__dirname, 'static')));
|
|
|
|
// Page principale
|
|
app.get('/', (req, res) => res.sendFile(path.join(__dirname, 'index.html')));
|
|
|
|
app.listen(config.port, () => {
|
|
console.log(`Serveur démarré sur http://localhost:${config.port}`);
|
|
});
|
|
|
|
// Route pour servir la page de supervision
|
|
app.get('/supervise', (req, res) => {
|
|
res.sendFile(path.join(__dirname, 'supervise.html'));
|
|
});
|
|
// Route pour récupérer les données de Baptiste
|
|
app.get('/data/baptiste.yaml', (req, res) => {
|
|
const userFilePath = path.join(__dirname, 'data/baptiste.yaml');
|
|
const configFilePath = path.join(__dirname, 'config.yaml');
|
|
|
|
try {
|
|
const userData = yaml.load(fs.readFileSync(userFilePath, 'utf8'));
|
|
const config = yaml.load(fs.readFileSync(configFilePath, 'utf8'));
|
|
// Inclure le décalage des pins dans la réponse
|
|
userData.pin_offset = config.pin_offset;
|
|
|
|
res.json(userData);
|
|
} catch (error) {
|
|
console.error("Erreur lors de la récupération des données :", error.message);
|
|
res.status(500).json({ error: "Impossible de récupérer les données" });
|
|
}
|
|
});
|
|
|
|
// Route pour la page de Julien
|
|
app.get('/julien', (req, res) => {
|
|
res.sendFile(path.join(__dirname, 'index_julien.html'));
|
|
});
|
|
|
|
/// Route pour récupérer les données de Julien
|
|
app.get('/data/julien.yaml', (req, res) => {
|
|
const userFilePath = path.join(__dirname, 'data/julien.yaml');
|
|
const configFilePath = path.join(__dirname, 'config.yaml');
|
|
|
|
try {
|
|
const userData = yaml.load(fs.readFileSync(userFilePath, 'utf8'));
|
|
const config = yaml.load(fs.readFileSync(configFilePath, 'utf8'));
|
|
// Inclure le décalage des pins dans la réponse
|
|
userData.pin_offset = config.pin_offset;
|
|
|
|
res.json(userData);
|
|
} catch (error) {
|
|
console.error("Erreur lors de la récupération des données :", error.message);
|
|
res.status(500).json({ error: "Impossible de récupérer les données" });
|
|
}
|
|
});
|
|
|
|
// Servir les fichiers statiques des tuiles
|
|
app.use('/tiles', express.static(path.join(__dirname, 'tiles')));
|
|
|
|
|