Files
RouterOS/RouterOSAssistant/Features/Backup/BackupViewModel.swift
T
KayandClaude Sonnet 5 a93a61c84f Werkseinstellungen wiederherstellen (Gefahrenzone im Sicherungen-Tab)
RouterOS bringt eine eigene Standardkonfiguration mit, wiederherstellbar
über /system reset-configuration no-defaults=no -- restauriert die vom
Hersteller ausgelieferte Konfiguration (nicht eine leere), RouterOS legt
dabei selbst zusätzlich ein Backup an (skip-backup=no, Standard).

FactoryResetService läuft wie BackupService immer über eine eigene
SSH-Verbindung (kein verifiziertes REST-Äquivalent, passt nicht ins
add/set-Modell von RouterOSCommand). Vor dem Zurücksetzen erstellt die
App zusätzlich selbst ein Backup (best-effort). Verbindung zum Router
bricht durch den Reboot erwartungsgemäß ab -- wird nicht als Fehler
behandelt, ConnectionService trennt sich danach selbst.

UI: rot markierte "Gefahrenzone" im Sicherungen-Tab, destruktiver
Bestätigungsdialog vor dem Ausführen, klarer Hinweistext was verloren
geht.

Außerdem .gitignore um /Backups/ und *.rsc ergänzt -- beim Testen des
wählbaren Backup-Ordners landete ein echter Router-Export im
Projektordner, gehört nicht ins Repo.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HReLXMbmPvtQ23p1iWiJNW
2026-09-12 20:52:23 +02:00

67 lines
2.2 KiB
Swift

import Foundation
@MainActor
final class BackupViewModel: ObservableObject {
@Published private(set) var backups: [BackupRecord] = []
@Published private(set) var isCreatingBackup = false
@Published var errorMessage: String?
@Published private(set) var backupDirectoryPath: String = BackupService.customDirectoryURL?.path
?? BackupService.defaultDirectoryURL.path
@Published private(set) var isResettingToFactoryDefaults = false
@Published var resetError: String?
@Published private(set) var didSendFactoryReset = false
private let backupService = BackupService()
private let factoryResetService = FactoryResetService()
func load() {
backups = backupService.listBackups()
}
func setBackupDirectory(_ url: URL) {
BackupService.customDirectoryURL = url
backupDirectoryPath = url.path
load()
}
func resetBackupDirectoryToDefault() {
BackupService.customDirectoryURL = nil
backupDirectoryPath = BackupService.defaultDirectoryURL.path
load()
}
func createBackup(for credentials: RouterOSCredentials) {
isCreatingBackup = true
errorMessage = nil
Task {
do {
_ = try await backupService.createBackup(for: credentials)
load()
} catch {
errorMessage = error.localizedDescription
}
isCreatingBackup = false
}
}
/// Backs up first (best-effort — a failed backup shouldn't block the reset itself, since
/// RouterOS makes its own backup as part of the reset anyway), then restores the router's
/// vendor-default configuration and reboots it.
func resetToFactoryDefaults(for credentials: RouterOSCredentials) {
isResettingToFactoryDefaults = true
resetError = nil
didSendFactoryReset = false
Task {
do {
_ = try? await backupService.createBackup(for: credentials)
try await factoryResetService.resetToVendorDefaults(for: credentials)
didSendFactoryReset = true
} catch {
resetError = error.localizedDescription
}
isResettingToFactoryDefaults = false
}
}
}