81 lines
2.2 KiB
Python
81 lines
2.2 KiB
Python
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()
|
|
|
|
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_app():
|
|
# 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="/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)
|
|
|
|
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)
|
|
|
|
return root_app
|
|
|
|
app = create_app()
|