feat(ui): replace configuration editors with graphical forms
CI / javascript-check (push) Successful in 14s
CI / container-policy (push) Successful in 4s
CI / python-tests (push) Successful in 1m48s
CI / container-verify (push) Skipped
CI / container-publish (push) Successful in 49s

This commit is contained in:
BartelLuis
2026-09-14 21:52:39 +02:00
parent 9a6dea34c4
commit 7b979e6243
22 changed files with 1603 additions and 81 deletions
+15 -3
View File
@@ -1,9 +1,9 @@
from typing import Any, Literal
from typing import Annotated, Any, Literal
from ipaddress import ip_interface
import re
import uuid
from pydantic import BaseModel, ConfigDict, Field, field_validator
from pydantic import BaseModel, ConfigDict, Field, StringConstraints, ValidationInfo, field_validator
class Model(BaseModel):
@@ -156,7 +156,19 @@ class UserCreate(Model):
class SecretCreate(Model):
name: str = Field(min_length=1, max_length=120)
value: str = Field(min_length=1, max_length=16384)
kind: Literal["value", "root_password"] = "value"
value: Annotated[str, StringConstraints(strip_whitespace=False)] = Field(min_length=1, max_length=16384)
@field_validator("value", mode="before")
@classmethod
def secret_value(cls, value, info: ValidationInfo):
if not isinstance(value, str):
return value
if info.data.get("kind") == "root_password":
if not 12 <= len(value) <= 1024 or "\x00" in value:
raise ValueError("Root-Passwörter benötigen 12 bis 1024 Zeichen ohne Nullzeichen.")
return value
return value.strip()
class Enroll(Model):