Files
ciomek 479a98c40f
Build and Push Docker Image / build-and-push (push) Successful in 14s
Fixes
2026-08-24 22:25:09 +02:00

63 lines
1.8 KiB
Python

from contextlib import asynccontextmanager
from fastapi import FastAPI
from slowapi import Limiter, _rate_limit_exceeded_handler
from slowapi.errors import RateLimitExceeded
from starlette.middleware.authentication import AuthenticationMiddleware
from starlette.middleware.cors import CORSMiddleware
from config import settings
from loon.mqtt.manager import MQTTManager
from loon.web.auth.middleware import JWTAuthBackend, on_auth_error
@asynccontextmanager
async def lifespan(app: FastAPI):
app.state.mqtt_manager = MQTTManager.setup_and_start()
yield
limiter = Limiter(key_func=lambda request: request.client.host)
docs_url = "/docs" if settings.web.show_docs else None
redoc_url = "/redoc" if settings.web.show_docs else None
openapi_url = "/openapi.json" if settings.web.show_docs else None
app = FastAPI(
lifespan=lifespan,
docs_url=docs_url,
redoc_url=redoc_url,
openapi_url=openapi_url,
)
app.state.limiter = limiter
app.add_exception_handler(RateLimitExceeded, _rate_limit_exceeded_handler)
app.add_middleware(
AuthenticationMiddleware,
backend=JWTAuthBackend(),
on_error=on_auth_error,
)
app.add_middleware(
CORSMiddleware,
allow_origins=settings.web.allowed_origins,
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
def get_mqtt_manager() -> MQTTManager:
return app.state.mqtt_manager
from loon.web.auth.router import router as auth_router
from loon.web.users.router import router as users_router
from loon.web.world.router import router as world_router
from loon.web.server.router import router as server_router
from loon.web.admin.router import router as admin_router
app.include_router(auth_router)
app.include_router(users_router)
app.include_router(world_router)
app.include_router(server_router)
app.include_router(admin_router)