112 lines
3.5 KiB
JavaScript
112 lines
3.5 KiB
JavaScript
const Settings = require('../models/Settings');
|
|
const axios = require('axios');
|
|
|
|
// Récupérer les paramètres de l'utilisateur connecté
|
|
exports.getSettings = async (req, res) => {
|
|
try {
|
|
// Rechercher les paramètres pour l'utilisateur connecté
|
|
const settings = await Settings.findOne({ user: req.user.id });
|
|
|
|
if (!settings) {
|
|
return res.status(404).json({ message: "Aucun paramètre trouvé pour cet utilisateur" });
|
|
}
|
|
|
|
// Ne pas envoyer l'ID de l'utilisateur ni l'ID du document dans la réponse
|
|
const { sonarr, radarr } = settings;
|
|
|
|
res.json({ sonarr, radarr });
|
|
} catch (error) {
|
|
console.error('Erreur lors de la récupération des paramètres:', error);
|
|
res.status(500).json({ message: 'Erreur serveur' });
|
|
}
|
|
};
|
|
|
|
// Sauvegarder ou mettre à jour les paramètres
|
|
exports.saveSettings = async (req, res) => {
|
|
try {
|
|
const { sonarr, radarr } = req.body;
|
|
|
|
// Validation des entrées
|
|
if (!sonarr || !radarr) {
|
|
return res.status(400).json({ message: 'Les configurations Sonarr et Radarr sont requises' });
|
|
}
|
|
|
|
if (!sonarr.url || !sonarr.apiKey || !radarr.url || !radarr.apiKey) {
|
|
return res.status(400).json({ message: 'Tous les champs sont requis' });
|
|
}
|
|
|
|
// Vérifier si l'utilisateur a déjà des paramètres
|
|
let settings = await Settings.findOne({ user: req.user.id });
|
|
|
|
if (settings) {
|
|
// Mettre à jour les paramètres existants
|
|
settings.sonarr = sonarr;
|
|
settings.radarr = radarr;
|
|
settings.updatedAt = Date.now();
|
|
} else {
|
|
// Créer de nouveaux paramètres
|
|
settings = new Settings({
|
|
user: req.user.id,
|
|
sonarr,
|
|
radarr
|
|
});
|
|
}
|
|
|
|
await settings.save();
|
|
|
|
res.json({ message: 'Paramètres enregistrés avec succès' });
|
|
} catch (error) {
|
|
console.error('Erreur lors de l\'enregistrement des paramètres:', error);
|
|
res.status(500).json({ message: 'Erreur serveur' });
|
|
}
|
|
};
|
|
|
|
// Tester la connexion à une API (Sonarr ou Radarr)
|
|
exports.testConnection = async (req, res) => {
|
|
try {
|
|
const { type, url, apiKey } = req.body;
|
|
|
|
// Validation des entrées
|
|
if (!type || !url || !apiKey) {
|
|
return res.status(400).json({ message: 'Type, URL et clé API sont requis' });
|
|
}
|
|
|
|
if (type !== 'sonarr' && type !== 'radarr') {
|
|
return res.status(400).json({ message: 'Type invalide. Doit être "sonarr" ou "radarr"' });
|
|
}
|
|
|
|
// Tentative de connexion à l'API
|
|
try {
|
|
// Utiliser le endpoint /system/status qui est disponible à la fois sur Sonarr et Radarr
|
|
const response = await axios.get(`${url}/system/status`, {
|
|
headers: {
|
|
'X-Api-Key': apiKey
|
|
},
|
|
timeout: 5000 // Timeout de 5 secondes
|
|
});
|
|
|
|
if (response.status === 200) {
|
|
res.json({
|
|
success: true,
|
|
message: 'Connexion établie avec succès',
|
|
details: {
|
|
version: response.data.version,
|
|
appName: response.data.appName
|
|
}
|
|
});
|
|
} else {
|
|
res.status(400).json({ success: false, message: 'Échec de la connexion' });
|
|
}
|
|
} catch (apiError) {
|
|
console.error(`Erreur lors du test de l'API ${type}:`, apiError);
|
|
res.status(400).json({
|
|
success: false,
|
|
message: 'Échec de la connexion',
|
|
error: apiError.message
|
|
});
|
|
}
|
|
} catch (error) {
|
|
console.error('Erreur lors du test de connexion:', error);
|
|
res.status(500).json({ message: 'Erreur serveur' });
|
|
}
|
|
};
|