diff --git a/AdminPanel/client/src/components/ConfigViewer/ConfigViewer.js b/AdminPanel/client/src/components/ConfigViewer/ConfigViewer.js index 02614bdb..7b7bbc12 100644 --- a/AdminPanel/client/src/components/ConfigViewer/ConfigViewer.js +++ b/AdminPanel/client/src/components/ConfigViewer/ConfigViewer.js @@ -21,11 +21,14 @@ const ConfigViewer = () => { return config ? JSON.stringify(config, null, 2) : ''; }, [config]); - const copyToClipboard = () => { - if (jsonString) { - navigator.clipboard.writeText(jsonString); + const copyToClipboard = async () => { + if (!jsonString) return; + try { + await navigator.clipboard.writeText(jsonString); setCopySuccess(true); setTimeout(() => setCopySuccess(false), 2000); + } catch { + // Clipboard API may fail on HTTP or restricted contexts } }; diff --git a/AdminPanel/client/src/components/ShutdownTab/ShutdownTab.js b/AdminPanel/client/src/components/ShutdownTab/ShutdownTab.js index 1cddc571..bd0ba0c3 100644 --- a/AdminPanel/client/src/components/ShutdownTab/ShutdownTab.js +++ b/AdminPanel/client/src/components/ShutdownTab/ShutdownTab.js @@ -21,14 +21,14 @@ const ShutdownTab = () => { const shutdownMutation = useMutation({ mutationFn: enterMaintenanceMode, onSuccess: () => { - queryClient.setQueryData(['maintenanceStatus'], prev => ({...(prev || {}), shutdown: true})); + queryClient.invalidateQueries({queryKey: ['maintenanceStatus']}); } }); const resumeMutation = useMutation({ mutationFn: exitMaintenanceMode, onSuccess: () => { - queryClient.setQueryData(['maintenanceStatus'], prev => ({...(prev || {}), shutdown: false})); + queryClient.invalidateQueries({queryKey: ['maintenanceStatus']}); } }); diff --git a/AdminPanel/server/sources/routes/config/config.service.js b/AdminPanel/server/sources/routes/config/config.service.js index 4f784d7d..34b7601f 100644 --- a/AdminPanel/server/sources/routes/config/config.service.js +++ b/AdminPanel/server/sources/routes/config/config.service.js @@ -233,9 +233,7 @@ function redactSensitiveParams(config, sensitivePaths) { */ function getFullConfigRedacted(ctx) { const cfg = ctx.getFullCfg(); - const configCopy = JSON.parse(JSON.stringify(cfg)); - - return redactSensitiveParams(configCopy, SENSITIVE_PARAM_PATHS); + return redactSensitiveParams(cfg, SENSITIVE_PARAM_PATHS); } module.exports = {validateScoped, getScopedBaseConfig, filterAdmin, getDiffFromBase, getFullConfigRedacted, getScopedConfig};