Spaces:
Sleeping
Sleeping
| """Pydantic request models, one block per concern. | |
| Kept in a single file because they're all small BaseModel definitions | |
| and importing them from one place makes the routers easy to scan. | |
| """ | |
| from typing import Optional | |
| from pydantic import BaseModel | |
| # ---------- Auth ---------- # | |
| class AuthRequest(BaseModel): | |
| action: str | |
| email: str | |
| password: str | |
| name: Optional[str] = None | |
| user_id: Optional[str] = None | |
| # ---------- XP ---------- # | |
| class XpRequest(BaseModel): | |
| action: str | |
| user_id: Optional[str] = None | |
| xp_amount: Optional[int] = None | |
| # ---------- Training (generic / red-team web) ---------- # | |
| class TrainingRequest(BaseModel): | |
| module: str | |
| path: str | |
| category: str | |
| moduleId: Optional[str] = None | |
| teamRole: Optional[str] = "red" | |
| challengeId: Optional[str] = None | |
| class EvaluateRequest(BaseModel): | |
| action: str = "evaluate" | |
| originalChallenge: dict | |
| userCode: str | |
| teamRole: Optional[str] = "red" | |
| # Web exploitation challenges have been removed from the platform. | |
| # The WebEvaluateRequest model that used to back /api/training/evaluate-web | |
| # is gone; the /api/training/evaluate endpoint + the per-type blue | |
| # evaluators now cover all remaining challenge types. | |
| # ---------- Terminal ---------- # | |
| class TerminalRequest(BaseModel): | |
| teamRole: Optional[str] = "red" | |
| challengeId: str | |
| command: str | |
| class TerminalWriteRequest(BaseModel): | |
| teamRole: Optional[str] = "red" | |
| challengeId: str | |
| filename: str | |
| content: str | |
| class TerminalListRequest(BaseModel): | |
| teamRole: Optional[str] = "red" | |
| challengeId: str | |
| # ---------- Certificates ---------- # | |
| class CertificateRequest(BaseModel): | |
| action: str = "list" | |
| user_id: str | |
| category: Optional[str] = None | |
| verify_code: Optional[str] = None | |
| details: Optional[dict] = None | |
| # ---------- Solved (consume one from the pool) ---------- # | |
| class SolvedRequest(BaseModel): | |
| scenarioId: str | |
| module: Optional[str] = None | |
| teamRole: Optional[str] = "red" | |
| difficulty: Optional[str] = "متوسط" | |
| path: Optional[str] = "cryptography" | |
| category: Optional[str] = "encryption" | |
| # ---------- Blue-team evaluators ---------- # | |
| class CodeFixEvaluateRequest(BaseModel): | |
| """Request model for code-fixing challenge evaluation.""" | |
| challengeId: str | |
| fixedCode: str | |
| teamRole: Optional[str] = "blue" | |
| userId: Optional[str] = None | |
| class LogAnalysisEvaluateRequest(BaseModel): | |
| """Request model for log-analysis challenge evaluation.""" | |
| challengeId: str | |
| attackType: str | |
| attackerIp: str | |
| timestamp: str | |
| ioc: str | |
| explanation: str = "" | |
| teamRole: Optional[str] = "blue" | |
| userId: Optional[str] = None | |
| class VulnHunterEvaluateRequest(BaseModel): | |
| """Request model for vulnerability-hunter challenge evaluation.""" | |
| challengeId: str | |
| vulnerabilityType: str | |
| teamRole: Optional[str] = "blue" | |
| userId: Optional[str] = None | |