diff --git a/pkgs/clan-cli/clan_cli/webui/app.py b/pkgs/clan-cli/clan_cli/webui/app.py index 09b1741e..57f4e105 100644 --- a/pkgs/clan-cli/clan_cli/webui/app.py +++ b/pkgs/clan-cli/clan_cli/webui/app.py @@ -1,4 +1,5 @@ from fastapi import FastAPI +from fastapi.middleware.cors import CORSMiddleware from fastapi.routing import APIRoute from .routers import health, machines, root @@ -9,6 +10,14 @@ def setup_app() -> FastAPI: app.include_router(health.router) app.include_router(machines.router) app.include_router(root.router) + # TODO make this configurable + app.add_middleware( + CORSMiddleware, + allow_origins="http://localhost:3000", + allow_credentials=True, + allow_methods=["*"], + allow_headers=["*"], + ) for route in app.routes: if isinstance(route, APIRoute): diff --git a/pkgs/clan-cli/clan_cli/webui/routers/machines.py b/pkgs/clan-cli/clan_cli/webui/routers/machines.py index 9daa6efa..6036b629 100644 --- a/pkgs/clan-cli/clan_cli/webui/routers/machines.py +++ b/pkgs/clan-cli/clan_cli/webui/routers/machines.py @@ -1,54 +1,24 @@ -from enum import Enum from typing import Annotated from fastapi import APIRouter, Body -from pydantic import BaseModel, Field from ...machines.create import create_machine as _create_machine from ...machines.list import list_machines as _list_machines +from ..schemas import ( + Config, + ConfigResponse, + Machine, + MachineCreate, + MachineResponse, + MachinesResponse, + Schema, + SchemaResponse, + Status, +) router = APIRouter() -class Status(Enum): - ONLINE = "online" - OFFLINE = "offline" - UNKNOWN = "unknown" - - -class Machine(BaseModel): - name: str - status: Status - - -class MachineCreate(BaseModel): - name: str - - -class MachinesResponse(BaseModel): - machines: list[Machine] - - -class MachineResponse(BaseModel): - machine: Machine - - -class Config(BaseModel): - pass - - -class ConfigResponse(BaseModel): - config: Config - - -class Schema(BaseModel): - pass - - -class SchemaResponse(BaseModel): - schema_: Schema = Field(alias="schema") - - @router.get("/api/machines") async def list_machines() -> MachinesResponse: machines = [] diff --git a/pkgs/clan-cli/clan_cli/webui/schemas.py b/pkgs/clan-cli/clan_cli/webui/schemas.py new file mode 100644 index 00000000..b260cbfc --- /dev/null +++ b/pkgs/clan-cli/clan_cli/webui/schemas.py @@ -0,0 +1,42 @@ +from enum import Enum + +from pydantic import BaseModel, Field + + +class Status(Enum): + ONLINE = "online" + OFFLINE = "offline" + UNKNOWN = "unknown" + + +class Machine(BaseModel): + name: str + status: Status + + +class MachineCreate(BaseModel): + name: str + + +class MachinesResponse(BaseModel): + machines: list[Machine] + + +class MachineResponse(BaseModel): + machine: Machine + + +class Config(BaseModel): + pass + + +class ConfigResponse(BaseModel): + config: Config + + +class Schema(BaseModel): + pass + + +class SchemaResponse(BaseModel): + schema_: Schema = Field(alias="schema")