71 lines
1.9 KiB
Python

# 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({})