# load config so everything else can work from pillar_tool.util import load_config, config load_config() from starlette.middleware.base import BaseHTTPMiddleware from pillar_tool.db.database import get_connection from pillar_tool.db.queries.auth_queries import create_user from fastapi import FastAPI from starlette.middleware.authentication import AuthenticationMiddleware from starlette.requests import Request from fastapi.responses import HTMLResponse, PlainTextResponse from starlette.responses import JSONResponse from pillar_tool.middleware.basicauth_backend import BasicAuthBackend from pillar_tool.middleware.db_connection import db_connection_middleware from pillar_tool.db.database import run_db_migrations # run any pending migrations run_db_migrations() # get a database connection db = get_connection() # create default user if it does not exist # noinspection PyBroadException try: create_user(db, "admin", "admin") except: pass # commit and close the db db.commit() db.close() def on_auth_error(request: Request, exc: Exception): response = PlainTextResponse(str(exc), status_code=401) response.headers["WWW-Authenticate"] = "Basic" return response def on_db_error(request: Request, exc: Exception): response = PlainTextResponse(str(exc), status_code=500) return response def on_general_error(request: Request, exc: Exception): print("wtf?") response = PlainTextResponse(str(exc), status_code=500) return response app = FastAPI() app.add_middleware(AuthenticationMiddleware, backend=BasicAuthBackend(), on_error=on_auth_error) app.add_middleware(BaseHTTPMiddleware, dispatch=db_connection_middleware) app.exception_handler(Exception)(on_general_error) @app.get("/") async def root(): return {"message": "Hello World"} @app.get("/pillar/{host}") async def pillar(req: Request, host: str): print(req.headers) #return JSONResponse(content=collect_pillar_data(host)) return JSONResponse({})