feat: login time window rules (EPIC_000014)

- Implemented RuleManager and JSON storage
- Added background enforcement scheduler
- Added Web UI for rule management at /ui/rules
- Bumped version to 0.3.0
This commit is contained in:
2026-01-16 11:25:56 +01:00
parent 9ad9501722
commit 63ee0b40b5
16 changed files with 851 additions and 16 deletions

View File

@ -1,8 +1,36 @@
from typing import List, Optional
from enum import Enum
from typing import List, Optional, Dict
from pydantic import BaseModel, Field
class DayOfWeek(str, Enum):
MONDAY = "mon"
TUESDAY = "tue"
WEDNESDAY = "wed"
THURSDAY = "thu"
FRIDAY = "fri"
SATURDAY = "sat"
SUNDAY = "sun"
class TimeWindow(BaseModel):
days: List[DayOfWeek]
start_time: str = Field(..., pattern=r"^\d{2}:\d{2}$", description="HH:MM format")
end_time: str = Field(..., pattern=r"^\d{2}:\d{2}$", description="HH:MM format")
class AccessRule(BaseModel):
user: str
enabled: bool = True
auto_reenable: bool = False
allowed_windows: List[TimeWindow] = []
class RuleSet(BaseModel):
rules: Dict[str, AccessRule] = {} # Keyed by username for O(1) lookup
class ActionRequest(BaseModel):
countdown: Optional[int] = Field(default=None, ge=0, description="Seconds for countdown")
sound: Optional[bool] = Field(default=None, description="Play sound alongside notification")