revert to default config if config is invalid

This commit is contained in:
Siyuan 2025-10-08 10:04:58 +00:00
parent f452e6b4c4
commit abb8c4f0b5
2 changed files with 38 additions and 7 deletions

View File

@ -246,17 +246,25 @@ func LoadConfig() {
}
func SaveConfig() error {
return saveConfig(configPath)
}
func SaveBackupConfig() error {
return saveConfig(configPath + ".bak")
}
func saveConfig(path string) error {
configLock.Lock()
defer configLock.Unlock()
logger.Trace().Str("path", configPath).Msg("Saving config")
logger.Trace().Str("path", path).Msg("Saving config")
// fixup old keyboard layout value
if config.KeyboardLayout == "en_US" {
config.KeyboardLayout = "en-US"
}
file, err := os.Create(configPath)
file, err := os.Create(path)
if err != nil {
return fmt.Errorf("failed to create config file: %w", err)
}
@ -272,7 +280,7 @@ func SaveConfig() error {
return fmt.Errorf("failed to wite config: %w", err)
}
logger.Info().Str("path", configPath).Msg("config saved")
logger.Info().Str("path", path).Msg("config saved")
return nil
}

View File

@ -4,6 +4,7 @@ import (
"context"
"fmt"
"github.com/jetkvm/kvm/internal/confparser"
"github.com/jetkvm/kvm/internal/mdns"
"github.com/jetkvm/kvm/internal/network/types"
"github.com/jetkvm/kvm/pkg/nmlite"
@ -73,9 +74,27 @@ func networkStateChanged(iface string, state *types.InterfaceState) {
}
}
func validateNetworkConfig() {
err := confparser.SetDefaultsAndValidate(config.NetworkConfig)
if err == nil {
return
}
networkLogger.Error().Err(err).Msg("failed to validate config, reverting to default config")
SaveBackupConfig()
// do not use a pointer to the default config
// it has been already changed during LoadConfig
config.NetworkConfig = &(types.NetworkConfig{})
SaveConfig()
}
func initNetwork() error {
ensureConfigLoaded()
// validate the config, if it's invalid, revert to the default config and save the backup
validateNetworkConfig()
networkManager = nmlite.NewNetworkManager(context.Background(), networkLogger)
networkManager.SetOnInterfaceStateChange(networkStateChanged)
if err := networkManager.AddInterface(NetIfName, config.NetworkConfig); err != nil {
@ -97,13 +116,18 @@ func rpcGetNetworkSettings() *RpcNetworkSettings {
func rpcSetNetworkSettings(settings RpcNetworkSettings) (*RpcNetworkSettings, error) {
netConfig := settings.ToNetworkConfig()
networkLogger.Debug().Interface("newConfig", netConfig).Interface("config", settings).Msg("setting new config")
l := networkLogger.With().
Str("interface", NetIfName).
Interface("newConfig", netConfig).
Logger()
l.Debug().Msg("setting new config")
s := networkManager.SetInterfaceConfig(NetIfName, netConfig)
if s != nil {
return nil, s
}
networkLogger.Debug().Interface("newConfig", netConfig).Interface("config", settings).Msg("new config")
l.Debug().Msg("new config applied")
newConfig, err := networkManager.GetInterfaceConfig(NetIfName)
if err != nil {
@ -111,8 +135,7 @@ func rpcSetNetworkSettings(settings RpcNetworkSettings) (*RpcNetworkSettings, er
}
config.NetworkConfig = newConfig
networkLogger.Debug().Interface("newConfig", newConfig).Interface("config", settings).Msg("saving config")
l.Debug().Msg("saving new config")
if err := SaveConfig(); err != nil {
return nil, err
}