Skip to content
Snippets Groups Projects
app.py 1.66 KiB
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.include_router(metadata_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"},