From f71c62f167e82fde45ae8ba1520917cdad192f6c Mon Sep 17 00:00:00 2001 From: MichaelDvP Date: Thu, 8 Dec 2022 16:54:27 +0100 Subject: [PATCH] restart when changing CORS settings --- .../framework/network/NetworkSettingsForm.tsx | 31 +++++++++++++++++-- lib/framework/NetworkSettingsService.h | 5 +++ 2 files changed, 33 insertions(+), 3 deletions(-) diff --git a/interface/src/framework/network/NetworkSettingsForm.tsx b/interface/src/framework/network/NetworkSettingsForm.tsx index 41fa5895b..f1e528e94 100644 --- a/interface/src/framework/network/NetworkSettingsForm.tsx +++ b/interface/src/framework/network/NetworkSettingsForm.tsx @@ -1,4 +1,5 @@ import { FC, useContext, useEffect, useState } from 'react'; +import { useSnackbar } from 'notistack'; import { Avatar, @@ -18,6 +19,7 @@ import LockOpenIcon from '@mui/icons-material/LockOpen'; import DeleteIcon from '@mui/icons-material/Delete'; import SaveIcon from '@mui/icons-material/Save'; import LockIcon from '@mui/icons-material/Lock'; +import PowerSettingsNewIcon from '@mui/icons-material/PowerSettingsNew'; import { BlockFormControlLabel, @@ -25,11 +27,13 @@ import { FormLoader, SectionContent, ValidatedPasswordField, - ValidatedTextField + ValidatedTextField, + MessageBox } from '../../components'; import { NetworkSettings } from '../../types'; import * as NetworkApi from '../../api/network'; import { numberValue, updateValue, useRest } from '../../utils'; +import * as EMSESP from '../../project/api'; import { WiFiConnectionContext } from './WiFiConnectionContext'; import { isNetworkOpen, networkSecurityMode } from './WiFiNetworkSelector'; @@ -38,14 +42,17 @@ import { validate } from '../../validators'; import { createNetworkSettingsValidator } from '../../validators/network'; import { useI18nContext } from '../../i18n/i18n-react'; +import RestartMonitor from '../system/RestartMonitor'; const WiFiSettingsForm: FC = () => { const { LL } = useI18nContext(); + const { enqueueSnackbar } = useSnackbar(); const { selectedNetwork, deselectNetwork } = useContext(WiFiConnectionContext); const [initialized, setInitialized] = useState(false); - const { loadData, saving, data, setData, saveData, errorMessage } = useRest({ + const [restarting, setRestarting] = useState(false); + const { loadData, saving, data, setData, saveData, errorMessage, restartNeeded } = useRest({ read: NetworkApi.readNetworkSettings, update: NetworkApi.updateNetworkSettings }); @@ -92,6 +99,15 @@ const WiFiSettingsForm: FC = () => { } }; + const restart = async () => { + try { + await EMSESP.restart(); + setRestarting(true); + } catch (error) { + enqueueSnackbar(LL.PROBLEM_UPDATING(), { variant: 'error' }); + } + }; + return ( <> @@ -264,6 +280,14 @@ const WiFiSettingsForm: FC = () => { /> )} + {restartNeeded && ( + + + + )} + {!restartNeeded && ( + )} ); }; return ( - {content()} + {restarting ? : content()} ); }; diff --git a/lib/framework/NetworkSettingsService.h b/lib/framework/NetworkSettingsService.h index edaae7fa7..407282413 100644 --- a/lib/framework/NetworkSettingsService.h +++ b/lib/framework/NetworkSettingsService.h @@ -72,6 +72,8 @@ class NetworkSettings { } static StateUpdateResult update(JsonObject & root, NetworkSettings & settings) { + auto enableCORS = settings.enableCORS; + auto CORSOrigin = settings.CORSOrigin; settings.ssid = root["ssid"] | FACTORY_WIFI_SSID; settings.password = root["password"] | FACTORY_WIFI_PASSWORD; settings.hostname = root["hostname"] | FACTORY_WIFI_HOSTNAME; @@ -103,6 +105,9 @@ class NetworkSettings { if (settings.staticIPConfig && (IPUtils::isNotSet(settings.localIP) || IPUtils::isNotSet(settings.gatewayIP) || IPUtils::isNotSet(settings.subnetMask))) { settings.staticIPConfig = false; } + if (enableCORS != settings.enableCORS || CORSOrigin != settings.CORSOrigin) { + return StateUpdateResult::CHANGED_RESTART; // tell WebUI that a restart is needed + } return StateUpdateResult::CHANGED; }