85 lines
1.7 KiB
Python
85 lines
1.7 KiB
Python
from typing import List, Optional
|
|
|
|
from pydantic import BaseModel, Field
|
|
|
|
|
|
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")
|
|
message: Optional[str] = Field(
|
|
default=None,
|
|
description="Optional message to show the user; falls back to default text.",
|
|
)
|
|
|
|
|
|
class ActionResponse(BaseModel):
|
|
user: str
|
|
action: str
|
|
dry_run: bool
|
|
steps: List[str]
|
|
logged_in: bool
|
|
|
|
|
|
class UserStatus(BaseModel):
|
|
user: str
|
|
logged_in: bool
|
|
account_locked: bool
|
|
|
|
|
|
class LoginRequest(BaseModel):
|
|
username: str
|
|
password: str
|
|
|
|
|
|
class LoginResponse(BaseModel):
|
|
token: str
|
|
expires_in: int
|
|
|
|
|
|
class UpdateStatus(BaseModel):
|
|
current_version: str
|
|
last_status: str
|
|
last_error: Optional[str] = None
|
|
last_timestamp: Optional[str] = None
|
|
enrolled: bool = False
|
|
|
|
|
|
class EnrollRequest(BaseModel):
|
|
enroll_token: Optional[str] = None
|
|
|
|
|
|
class EnrollResponse(BaseModel):
|
|
enrolled: bool
|
|
message: str
|
|
|
|
|
|
class UpdateCheckResponse(BaseModel):
|
|
available: bool
|
|
latest_version: str
|
|
artifact_url: str
|
|
sha256: str
|
|
message: Optional[str] = None
|
|
|
|
|
|
class UpdateActionResponse(BaseModel):
|
|
started: bool
|
|
message: str
|
|
|
|
|
|
class UpdateLogEntry(BaseModel):
|
|
timestamp: str
|
|
status: str
|
|
message: Optional[str] = None
|
|
version: Optional[str] = None
|
|
error: Optional[str] = None
|
|
device_id: Optional[str] = None
|
|
|
|
|
|
class UpdateServiceStatus(BaseModel):
|
|
url: str
|
|
reachable: bool
|
|
status_code: Optional[int] = None
|
|
error: Optional[str] = None
|
|
checked_url: str
|
|
environment: str
|