forked from kay/RouterOS
XcodeGen-basiertes SwiftUI-Projekt für den RouterOS-Interview-Assistenten. Erster Wizard-Schritt: Verbindung zu Mikrotik-Geräten per REST-API (RouterOS >=7.1) mit SSH-CLI-Fallback für ältere Firmware, Zertifikats- TOFU-Bestätigung, Zugangsdaten im Keychain. Unit-Tests für CLI-Parser und Fallback-Logik. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HReLXMbmPvtQ23p1iWiJNW
49 lines
1.3 KiB
Swift
49 lines
1.3 KiB
Swift
import Foundation
|
|
|
|
struct RouterOSCredentials: Equatable {
|
|
var host: String
|
|
var username: String
|
|
var password: String
|
|
var httpsPort: Int = 443
|
|
var sshPort: Int = 22
|
|
}
|
|
|
|
struct RouterDeviceInfo: Equatable {
|
|
var boardName: String
|
|
var routerOSVersion: String
|
|
var architecture: String
|
|
var uptime: String
|
|
}
|
|
|
|
struct NetworkInterface: Equatable, Identifiable {
|
|
var id: String { name }
|
|
var name: String
|
|
var type: String
|
|
var running: Bool
|
|
var disabled: Bool
|
|
var macAddress: String?
|
|
}
|
|
|
|
enum RouterOSError: LocalizedError, Equatable {
|
|
case notConnected
|
|
case invalidResponse(String)
|
|
case authenticationFailed
|
|
case untrustedCertificate(fingerprint: String)
|
|
case transportUnavailable(String)
|
|
|
|
var errorDescription: String? {
|
|
switch self {
|
|
case .notConnected:
|
|
return "Keine Verbindung zum Router."
|
|
case .invalidResponse(let detail):
|
|
return "Unerwartete Antwort vom Router: \(detail)"
|
|
case .authenticationFailed:
|
|
return "Anmeldung fehlgeschlagen. Bitte Zugangsdaten prüfen."
|
|
case .untrustedCertificate(let fingerprint):
|
|
return "Unbekanntes Zertifikat (Fingerabdruck \(fingerprint)). Bitte bestätigen."
|
|
case .transportUnavailable(let detail):
|
|
return detail
|
|
}
|
|
}
|
|
}
|