diff --git a/Yggdrasil Network Cross-Platform/ConfigurationProxy.swift b/Yggdrasil Network Cross-Platform/ConfigurationProxy.swift index 5e449b2..6e4757b 100644 --- a/Yggdrasil Network Cross-Platform/ConfigurationProxy.swift +++ b/Yggdrasil Network Cross-Platform/ConfigurationProxy.swift @@ -90,6 +90,15 @@ class ConfigurationProxy: PlatformItemSource { } } + public func reset() { + self.json = MobileGenerateConfigJSON() + try? self.convertToDict() + self.fix() + if var manager = self.manager { + try? self.save(to: &manager) + } + } + public var multicastBeacons: Bool { get { let multicastInterfaces = self.get("MulticastInterfaces") as? [[String: Any]] ?? [] diff --git a/YggdrasilSwiftUI/SettingsView.swift b/YggdrasilSwiftUI/SettingsView.swift index 624b764..ce618bd 100644 --- a/YggdrasilSwiftUI/SettingsView.swift +++ b/YggdrasilSwiftUI/SettingsView.swift @@ -11,6 +11,7 @@ struct SettingsView: View { @ObservedObject private var appDelegate = Application.appDelegate @State private var deviceName = "" + @State private var isResetting = false var body: some View { Form { @@ -33,50 +34,30 @@ struct SettingsView: View { Text("Automatically start when connected to") }) - /* + Section(content: { - VStack(alignment: .leading) { - Button("Import configuration") { - - } - #if os(macOS) - .buttonStyle(.link) - #endif - .foregroundColor(.accentColor) - Text("Import configuration from another device, including the public key and Yggdrasil IP address.") - .font(.system(size: 11)) - .foregroundColor(.gray) - } - - VStack(alignment: .leading) { - Button("Export configuration") { - - } - #if os(macOS) - .buttonStyle(.link) - #endif - .foregroundColor(.accentColor) - Text("Configuration will be exported as a file. Your configuration contains your private key which is extremely sensitive. Do not share it with anyone.") - .font(.system(size: 11)) - .foregroundColor(.gray) - } - - VStack(alignment: .leading) { - Button("Reset configuration") { - - } - #if os(macOS) - .buttonStyle(.link) - #endif - .foregroundColor(.red) - Text("Resetting will overwrite with newly generated configuration. Your public key and Yggdrasil IP address will change.") - .font(.system(size: 11)) - .foregroundColor(.gray) - } - }, header: { - Text("Configuration") - }) - */ + VStack(alignment: .leading) { + Button("Reset configuration") { + self.isResetting.toggle() + } + .alert("Reset configuration", isPresented: $isResetting) { + Button("Confirm", action: resetConfig) + Button("Cancel", role: .cancel) { } + } message: { + Text("Are you sure you want to reset your configuration? This operation cannot be undone.") + } + #if os(macOS) + .buttonStyle(.link) + #endif + .foregroundColor(.red) + Text("Resetting will overwrite with newly generated configuration. Your public key and Yggdrasil IP address will change.") + .font(.system(size: 11)) + .foregroundColor(.gray) + } + }, header: { + Text("Configuration") + } + ) } .formStyle(.grouped) .navigationTitle("Settings") @@ -84,6 +65,10 @@ struct SettingsView: View { .navigationBarTitleDisplayMode(.large) #endif } + + func resetConfig() { + self.appDelegate.yggdrasilConfig.reset() + } } struct SettingsView_Previews: PreviewProvider {