from dotenv import load_dotenv from fastapi import APIRouter, FastAPI from starlette.middleware.authentication import AuthenticationMiddleware load_dotenv() from app.routers import ( auth_v1, chargepoint_v1, id_token_v1, me_v1, meter_value_v1, ocpp_v1, transaction_v1, user_v1 ) from app.security.websocket_auth_backend import BasicAuthBackend def create_ocpp_app(): app_ocpp = FastAPI( responses={404: {"description": "Not found"}}, ) app_ocpp.include_router(ocpp_v1.router) app_ocpp.add_middleware(AuthenticationMiddleware, backend=BasicAuthBackend()) return app_ocpp def create_app(): app = FastAPI( title="simple-ocpp-cs", version="0.2.0", summary="Simple implementation of a basic OCPP 2.0.1 compliant central system (backend) for EV charging stations", responses={404: {"description": "Not found"}}, ) api_v1_router = APIRouter( prefix="/api/v1" ) api_v1_router.include_router(auth_v1.router) api_v1_router.include_router(chargepoint_v1.router) api_v1_router.include_router(id_token_v1.router) api_v1_router.include_router(me_v1.router) api_v1_router.include_router(user_v1.router) api_v1_router.include_router(meter_value_v1.router) api_v1_router.include_router(transaction_v1.router) app.include_router(api_v1_router) app.mount(path="/v1/ocpp", app=create_ocpp_app()) return app app = create_app()