Add option to serve a static frontend

This commit is contained in:
Oliver Traber 2025-07-27 18:42:31 +00:00
parent b3804f3d58
commit f6117d04ee
Signed by: Bluemedia
GPG key ID: C0674B105057136C
9 changed files with 64 additions and 33 deletions

View file

@ -1,6 +1,8 @@
import os
from dotenv import load_dotenv
from fastapi import APIRouter, FastAPI
from fastapi.middleware.cors import CORSMiddleware
from fastapi.staticfiles import StaticFiles
from starlette.middleware.authentication import AuthenticationMiddleware
load_dotenv()
@ -17,25 +19,46 @@ from app.routers import (
)
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"}},
# Common app config
title="LibreCharge"
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"}}
# Root FastAPI app
root_app = FastAPI(
title=title,
version=version,
summary=summary,
responses=responses,
docs_url=None,
redoc_url=None,
)
# FastAPI app for OCPP handler
ocpp_app = FastAPI(
title=title,
version=version,
summary=summary,
responses=responses,
docs_url=None,
redoc_url=None,
)
ocpp_app.include_router(ocpp_v1.router)
ocpp_app.add_middleware(AuthenticationMiddleware, backend=BasicAuthBackend())
root_app.mount(path="/v1/ocpp", app=ocpp_app)
# FastAPI app for REST API
api_app = FastAPI(
title=title,
version=version,
summary=summary,
responses=responses,
)
api_v1_router = APIRouter(
prefix="/api/v1"
prefix="/v1"
)
api_v1_router.include_router(auth_v1.router)
api_v1_router.include_router(chargepoint_v1.router)
@ -45,15 +68,20 @@ def create_app():
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())
api_app.include_router(api_v1_router)
root_app.mount(path="/api", app=api_app)
# Serve static files if existent
if os.path.isdir('static'):
static_files = StaticFiles(directory="static", html=True)
root_app.mount(path="/", app=static_files)
origins = [
"http://localhost",
"http://localhost:5173",
]
app.add_middleware(
root_app.add_middleware(
CORSMiddleware,
allow_origins=origins,
allow_credentials=True,
@ -61,6 +89,6 @@ def create_app():
allow_headers=["*"],
)
return app
return root_app
app = create_app()