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:
@ -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")
|
||||
|
||||
Reference in New Issue
Block a user