RemminaMac 0.1.0: SSH/RDP-Client für macOS (SwiftUI, Remmina-Layout, Profile, SSH-Keys, Docs, Release-Skripte)

This commit is contained in:
x3
2026-09-21 22:43:57 +02:00
commit cd834dce98
21 changed files with 1252 additions and 0 deletions
@@ -0,0 +1,87 @@
import Foundation
enum ProtocolType: String, Codable, CaseIterable, Identifiable {
case ssh = "SSH"
case sftp = "SFTP"
case rdp = "RDP"
case vnc = "VNC"
var id: String { rawValue }
var defaultPort: Int {
switch self {
case .ssh: return 22
case .sftp: return 22
case .rdp: return 3389
case .vnc: return 5900
}
}
var systemImage: String {
switch self {
case .ssh: return "terminal"
case .sftp: return "folder"
case .rdp: return "pccomputer"
case .vnc: return "display"
}
}
}
struct ConnectionProfile: Codable, Identifiable, Hashable {
var id: UUID = UUID()
var name: String
var proto: ProtocolType
var host: String
var port: Int
var username: String
var group: String
var colorTag: String
var resolution: String
var sshKeyID: UUID?
var passwordAccount: String?
var extraArgs: String
var lastConnected: Date?
init(
id: UUID = UUID(),
name: String = "Neues Profil",
proto: ProtocolType = .ssh,
host: String = "",
port: Int = 22,
username: String = "",
group: String = "Allgemein",
colorTag: String = "blue",
resolution: String = "Automatisch",
sshKeyID: UUID? = nil,
passwordAccount: String? = nil,
extraArgs: String = "",
lastConnected: Date? = nil
) {
self.id = id
self.name = name
self.proto = proto
self.host = host
self.port = port
self.username = username
self.group = group
self.colorTag = colorTag
self.resolution = resolution
self.sshKeyID = sshKeyID
self.passwordAccount = passwordAccount
self.extraArgs = extraArgs
self.lastConnected = lastConnected
}
enum CodingKeys: String, CodingKey {
case id, name, host, port, username, group, colorTag, resolution, sshKeyID, passwordAccount, extraArgs, lastConnected
case proto = "protocol"
}
}
struct StoredSSHKey: Codable, Identifiable, Hashable {
var id: UUID = UUID()
var name: String
var privateKeyPath: String
var publicKeyPath: String?
var passphraseAccount: String?
}