connect fix 3

This commit is contained in:
2026-08-20 23:35:42 +02:00
parent fc32b1e4ef
commit bf2a02679d
14 changed files with 956 additions and 49 deletions

View File

@ -120,6 +120,11 @@ class HostCreateRequest(BaseModel):
rdp_require_nla: bool = True
clipboard_enabled: bool = True
file_transfer_enabled: bool = True
# Standard: selbstsigniertes RDP-Zertifikat des Ziels akzeptieren. Windows
# praesentiert ohne interne PKI genau so eines; guacd/FreeRDP bricht sonst
# vor dem ersten Bild ab. Wer eine PKI betreibt, setzt den Wert pro Host
# auf False und erzwingt damit die Pruefung.
rdp_ignore_cert: bool = True
@field_validator("hostname")
@classmethod
@ -140,6 +145,7 @@ class HostUpdateRequest(BaseModel):
rdp_require_nla: bool | None = None
clipboard_enabled: bool | None = None
file_transfer_enabled: bool | None = None
rdp_ignore_cert: bool | None = None
is_active: bool | None = None
@field_validator("hostname")
@ -208,6 +214,11 @@ class SshKeyCreateRequest(BaseModel):
public_key: str = Field(min_length=1, max_length=8192)
key_type: Literal["ed25519", "rsa-3072", "rsa-4096", "ca-cert"]
tenant_id: int | None = None
# Passphrase eines verschluesselten Private Keys. Wird -- wie das
# Schluesselmaterial selbst -- mit dem KEK verschluesselt gespeichert
# (ssh_keys.passphrase_enc, Migration 0009) und beim Verbindungsaufbau an
# asyncssh uebergeben. None/"" = Schluessel ist unverschluesselt.
passphrase: str | None = Field(default=None, max_length=1024)
class SshKeyUpdateRequest(BaseModel):
@ -219,6 +230,12 @@ class SshKeyUpdateRequest(BaseModel):
private_key_pem: str | None = Field(default=None, min_length=1, max_length=32_768)
public_key: str | None = Field(default=None, min_length=1, max_length=8192)
key_type: Literal["ed25519", "rsa-3072", "rsa-4096", "ca-cert"] | None = None
# Wird nur beachtet, wenn das Feld im Request vorkommt (siehe
# update_ssh_key in app/admin/routes.py): explizites null/"" entfernt eine
# hinterlegte Passphrase, Weglassen laesst sie unveraendert. Ohne
# gleichzeitige Rotation wird die neue Passphrase gegen das bereits
# gespeicherte Schluesselmaterial geprueft.
passphrase: str | None = Field(default=None, max_length=1024)
class ConnectRequest(BaseModel):