/** * ========================================================================= * PLATEFORME ECO-PANNEAU.FR - VERSION 1.0.0 * Interface Administrateur - Onglet Cyberdéfense et Modération * ========================================================================= */ window.pano_AdminCyberdefenseTab = ({ data, refreshData, openLocalDialog, closeCurrentLayer, activeDialog }) => { const { useState, useEffect } = React; const routerActiveDialog = activeDialog || new URLSearchParams(window.location.search).get('dialog'); const routerCloseLayer = closeCurrentLayer || (() => window.history.back()); const routerOpenDialog = openLocalDialog || ((type) => { const u = new URL(window.location); u.searchParams.set('dialog', type); window.history.pushState({ dialog: type }, '', u); window.dispatchEvent(new Event('popstate')); }); const [isSaving, setIsSaving] = useState(false); const [settings, setSettings] = useState(data.settings || {}); const [pwdRequestData, setPwdRequestData] = useState(null); const { ShieldAlertIcon, ShieldCheckIcon, SaveIcon, LoaderIcon, ActivityIcon, MailIcon, LockIcon } = window.pano_getIcons(); const FormInput = window.pano_FormInput || (() => null); const FormTextarea = window.pano_FormTextarea || (() => null); const Toggle = window.pano_Toggle || (() => null); const Button = window.pano_Button || (() => null); const PasswordPromptModal = window.pano_PasswordPromptModal || (() => null); const updateSetting = (key, val) => setSettings({ ...settings, [key]: val }); const handleSave = async () => { const payload = {}; let hasChanges = false; const protectedFields = [ 'maintenance', 'allow_new_purchases', 'blacklist', 'greylist', 'sec_ip_limit', 'mail_limit_count', 'mail_limit_window', 'sec_global_limit', 'sec_lock_min', 'sec_lock_max' ]; for (const key of protectedFields) { const oldVal = String(data.settings?.[key] ?? '').replace(/\r\n/g, '\n'); const newVal = String(settings[key] ?? '').replace(/\r\n/g, '\n'); if (oldVal !== newVal) { payload[key] = settings[key]; hasChanges = true; } } if (!hasChanges) { window.pano_showToast("Aucune modification à sauvegarder.", "info"); return; } setPwdRequestData({ title: "Confirmation de sécurité", desc: "La modification des paramètres de sécurité ou d'accès nécessite le mot de passe administrateur :", onConfirm: async (pwd) => { await executeSave({ ...payload, pwd }); } }); routerOpenDialog('pwd_request'); }; const executeSave = async (finalPayload) => { const d = await window.pano_apiFetch('settings/update', { body: finalPayload, setLoading: setIsSaving, successMessage: "Règles de cyberdéfense mises à jour !" }); if (d) { refreshData(); routerCloseLayer(); } }; return ( <>
Contrôle des boucliers réseau, filtres sémantiques et accès globaux.
Mode Maintenance
Verrouille l'accès public et client au portail.
Nouvelles commandes
Autoriser la validation et le paiement de nouveaux panneaux.