diff --git a/pyproject.toml b/pyproject.toml index 69a955f..ff60057 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -7,6 +7,7 @@ requires-python = "~=3.13.0" dependencies = [ "alembic>=1.17.0", "fastapi[standard]>=0.116.0", + "python-dotenv>=1.1.1", "sqlalchemy>=2.0.44", "uvicorn[standard]>=0.35.0", ] diff --git a/src/meal_manager/main.py b/src/meal_manager/main.py index 59c926b..8df3280 100644 --- a/src/meal_manager/main.py +++ b/src/meal_manager/main.py @@ -1,10 +1,11 @@ import locale +import os from contextlib import asynccontextmanager from datetime import datetime, timedelta from typing import Annotated import starlette.status as status -from fastapi import Depends, FastAPI, Request +from fastapi import Depends, FastAPI, HTTPException, Request from fastapi.responses import RedirectResponse from fastapi.staticfiles import StaticFiles from fastapi.templating import Jinja2Templates @@ -33,6 +34,15 @@ def get_session(): with Session(engine) as session: yield session +def get_user(request: Request) -> dict | None: + if os.environ.get("MEAL_MANAGER_FAKE_USER", False): + return {"username": "fake_user"} + if "ynh_user" in request.headers: + return { + "username": request.headers["ynh_user"], + } + else: + return None def create_db_and_tables(): Base.metadata.create_all(engine) @@ -51,9 +61,9 @@ templates = Jinja2Templates(directory="src/meal_manager/templates") SessionDep = Annotated[Session, Depends(get_session)] - +UserDep = Annotated[dict, Depends(get_user)] @app.get("/") -async def index(request: Request, session: SessionDep): +async def index(request: Request, session: SessionDep, user : UserDep): """Displays coming events and a button to register new ones""" now = datetime.now() # TODO: Once we refactored to use SQLAlchemy directly, we can probably do a nicer filtering on the date alone @@ -66,7 +76,7 @@ async def index(request: Request, session: SessionDep): return templates.TemplateResponse( request=request, name="index.html", - context={"events": events, "current_page": "home", "now": now}, + context={"events": events, "current_page": "home", "now": now, "user": user}, ) @@ -155,7 +165,9 @@ async def delete_subscription(request: Request, session: SessionDep, household_i @app.get("/event/add") -async def add_event_form(request: Request, session: SessionDep): +async def add_event_form(request: Request, user: UserDep): + if not user: + raise HTTPException(status_code=401, detail="Only allowed for logged in users") return templates.TemplateResponse(request=request, name="add_event.html") diff --git a/src/meal_manager/templates/index.html b/src/meal_manager/templates/index.html index 7f67619..0adf9fe 100644 --- a/src/meal_manager/templates/index.html +++ b/src/meal_manager/templates/index.html @@ -3,9 +3,15 @@

{% if current_page == "home" %}Kommende{% else %}Vergangene{% endif %} Kochabende

+ {% if user %} Neues Event erstellen + {% else %} + + {% endif %}
@@ -40,4 +46,24 @@
{% endfor %} -{% endblock %} \ No newline at end of file + + + +{% endblock %} + diff --git a/uv.lock b/uv.lock index 9015dca..5c7b0cf 100644 --- a/uv.lock +++ b/uv.lock @@ -339,6 +339,7 @@ source = { editable = "." } dependencies = [ { name = "alembic" }, { name = "fastapi", extra = ["standard"] }, + { name = "python-dotenv" }, { name = "sqlalchemy" }, { name = "uvicorn", extra = ["standard"] }, ] @@ -353,6 +354,7 @@ dev = [ requires-dist = [ { name = "alembic", specifier = ">=1.17.0" }, { name = "fastapi", extras = ["standard"], specifier = ">=0.116.0" }, + { name = "python-dotenv", specifier = ">=1.1.1" }, { name = "sqlalchemy", specifier = ">=2.0.44" }, { name = "uvicorn", extras = ["standard"], specifier = ">=0.35.0" }, ]