Add keypass schedule

This commit is contained in:
Ettore
2026-05-22 20:49:03 +02:00
parent 4389a20e90
commit eeea8dfad8
6 changed files with 185 additions and 4 deletions

View File

@@ -32,6 +32,13 @@ class AdminLoginResponse(BaseModel):
# ── Keypasses ─────────────────────────────────────────────────────────────────
class ScheduleRule(BaseModel):
"""Optional time/day-of-week restriction for a keypass."""
days: Optional[list[int]] = None # 0=Mon..6=Sun; None/absent = any day
time_start: Optional[str] = None # "HH:MM" 24-hour server local time
time_end: Optional[str] = None # "HH:MM" 24-hour server local time
class KeypassCreate(BaseModel):
description: str
expires_at: Optional[datetime] = None # None = never expires
@@ -40,12 +47,14 @@ class KeypassCreate(BaseModel):
# Auto-generation options (ignored when `code` is supplied manually)
length: int = 12 # 632
charset: str = "alphanumeric" # "alphanumeric" | "alpha" | "numeric" | "passphrase"
schedule: Optional[ScheduleRule] = None # None = always allowed
class KeypassPatch(BaseModel):
description: Optional[str] = None
expires_at: Optional[datetime] = None # None = never expires
gate_ids: Optional[list[int]] = None # None = keep unchanged; [] = all gates
schedule: Optional[ScheduleRule] = None # absent = keep unchanged; null = clear
class KeypassResponse(BaseModel):
@@ -58,9 +67,16 @@ class KeypassResponse(BaseModel):
revoked: bool
revoked_at: Optional[datetime] = None
allowed_gate_ids: list[int] # empty = all gates
schedule: Optional[ScheduleRule] = None
def keypass_to_response(kp: Keypass) -> KeypassResponse:
sched: Optional[ScheduleRule] = None
if kp.schedule:
try:
sched = ScheduleRule(**json.loads(kp.schedule))
except Exception:
pass
return KeypassResponse(
id=kp.id,
code=kp.code,
@@ -70,6 +86,7 @@ def keypass_to_response(kp: Keypass) -> KeypassResponse:
revoked=kp.revoked,
revoked_at=kp.revoked_at,
allowed_gate_ids=json.loads(kp.allowed_gates) if kp.allowed_gates else [],
schedule=sched,
)