Add keypass schedule
This commit is contained in:
@@ -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 # 6–32
|
||||
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,
|
||||
)
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user