Newer
Older
import json
import os
import uuid
from fastapi import Depends, FastAPI, Request, Response
from ..db.session_table import delete_session, get_session, save_session
from .encryption import get_fernet
from .login import current_user, router as login_router, User
from .metadata import router as metadata_router
from .SessionMiddleware import SessionMiddleware
app = FastAPI(
description="Web service for interaction with operational metadata records",
root_path="/ws/secure",
title="Geomagnetism Metadata Web Service",
# NOTE: database used for sessions is started by ..app.app,
# which mounts this application at /ws/secure
app.add_middleware(
middleware_class=SessionMiddleware,
delete_session_callback=delete_session,
get_session_callback=get_session,
save_session_callback=save_session,
encryption=get_fernet(
os.getenv("SECRET_KEY", uuid.uuid4().hex),
os.getenv("SECRET_SALT", "secret_salt"),
),
path="/ws/secure",
session_cookie="PHPSESSID",
)
# include login routes to manage user
app.include_router(login_router)
@app.get("/")
async def index(request: Request, user: User = Depends(current_user)):
"""Route to demo user login."""
if user:
link = f"""
Logged in as {user.email}<br/>
<a href="{request.url_for("logout")}">Logout</a>
"""
else:
link = f'<a href="{request.url_for("login")}">Login</a>'
return Response(
f"""<!doctype html>
<html>
<body>
{link}
<pre>{json.dumps(request.session, indent=2)}</pre>
</body>
</html>""",
media_type="text/html",
headers={"Cache-control": "no-cache"},