42 lines
1.3 KiB
Python
42 lines
1.3 KiB
Python
from fastapi import APIRouter, HTTPException, Request
|
|
|
|
from app.services.auth_service import get_user_for_session
|
|
from app.services.system_service import arm_system, system_status
|
|
from app.services.zerodha_service import KiteApiError
|
|
|
|
router = APIRouter(prefix="/api/system")
|
|
|
|
|
|
def _require_user(request: Request):
|
|
session_id = request.cookies.get("session_id")
|
|
if not session_id:
|
|
raise HTTPException(status_code=401, detail="Not authenticated")
|
|
user = get_user_for_session(session_id)
|
|
if not user:
|
|
raise HTTPException(status_code=401, detail="Not authenticated")
|
|
return user
|
|
|
|
|
|
@router.post("/arm")
|
|
def arm(request: Request):
|
|
user = _require_user(request)
|
|
try:
|
|
result = arm_system(user["id"], client_ip=request.client.host if request.client else None)
|
|
except KiteApiError as exc:
|
|
raise HTTPException(status_code=502, detail=str(exc)) from exc
|
|
|
|
if not result.get("ok"):
|
|
if result.get("code") == "BROKER_AUTH_REQUIRED":
|
|
raise HTTPException(
|
|
status_code=401,
|
|
detail={"redirect_url": result.get("redirect_url")},
|
|
)
|
|
raise HTTPException(status_code=400, detail="Unable to arm system")
|
|
return result
|
|
|
|
|
|
@router.get("/status")
|
|
def status(request: Request):
|
|
user = _require_user(request)
|
|
return system_status(user["id"])
|