router.py 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. """
  2. FastAPI router for WiFi management endpoints.
  3. """
  4. from fastapi import APIRouter, HTTPException
  5. from pydantic import BaseModel
  6. from typing import Optional
  7. import logging
  8. from . import manager
  9. logger = logging.getLogger(__name__)
  10. router = APIRouter(prefix="/api/wifi", tags=["wifi"])
  11. class WiFiConnectRequest(BaseModel):
  12. ssid: str
  13. password: Optional[str] = ""
  14. class WiFiForgetRequest(BaseModel):
  15. ssid: str
  16. @router.get("/status")
  17. async def wifi_status():
  18. """Get current WiFi mode, connection, and IP."""
  19. return manager.get_wifi_status()
  20. @router.get("/networks")
  21. async def wifi_networks():
  22. """Scan for available WiFi networks."""
  23. return manager.scan_networks()
  24. @router.post("/connect")
  25. async def wifi_connect(req: WiFiConnectRequest):
  26. """Connect to a WiFi network and reboot."""
  27. if not req.ssid:
  28. raise HTTPException(status_code=400, detail="SSID is required")
  29. result = await manager.connect_to_network(req.ssid, req.password or "")
  30. if not result["success"]:
  31. raise HTTPException(status_code=400, detail=result["message"])
  32. return result
  33. @router.post("/forget")
  34. async def wifi_forget(req: WiFiForgetRequest):
  35. """Forget a saved WiFi network."""
  36. if not req.ssid:
  37. raise HTTPException(status_code=400, detail="SSID is required")
  38. result = manager.forget_network(req.ssid)
  39. if not result["success"]:
  40. raise HTTPException(status_code=400, detail=result["message"])
  41. return result
  42. @router.get("/saved")
  43. async def wifi_saved():
  44. """Get list of saved WiFi connections."""
  45. return manager.get_saved_connections()