diff --git a/moxie/web/routes.py b/moxie/web/routes.py index df006a8..5fa731a 100644 --- a/moxie/web/routes.py +++ b/moxie/web/routes.py @@ -7,7 +7,7 @@ import uuid from datetime import datetime from pathlib import Path from typing import Optional, List -from fastapi import APIRouter, Request, Response, Cookie, Form, UploadFile, File, HTTPException, Depends +from fastapi import APIRouter, Request, Response, Cookie, Form, UploadFile, File, HTTPException from fastapi.responses import HTMLResponse, JSONResponse, StreamingResponse from fastapi.templating import Jinja2Templates from pydantic import BaseModel @@ -20,8 +20,17 @@ from core.orchestrator import Orchestrator router = APIRouter() -# Templates -templates = Jinja2Templates(directory=Path(__file__).parent / "templates") +# Templates - use string path for better compatibility +templates = Jinja2Templates(directory=str(Path(__file__).parent / "templates")) + + +def get_template_settings(): + """Get settings as a simple dict for template compatibility.""" + return { + "admin_path": settings.admin_path, + "host": settings.host, + "port": settings.port, + } # ============================================================================ @@ -76,7 +85,7 @@ async def landing_page(request: Request): return templates.TemplateResponse( "landing.html", - {"request": request, "settings": settings} + {"request": request, "settings": get_template_settings()} ) @@ -85,7 +94,7 @@ async def login_page(request: Request, error: Optional[str] = None): """Login page.""" return templates.TemplateResponse( "login.html", - {"request": request, "settings": settings, "error": error} + {"request": request, "settings": get_template_settings(), "error": error} ) @@ -94,13 +103,13 @@ async def signup_page(request: Request, error: Optional[str] = None): """Signup page.""" return templates.TemplateResponse( "signup.html", - {"request": request, "settings": settings, "error": error} + {"request": request, "settings": get_template_settings(), "error": error} ) @router.post("/login") async def login_submit( - response: Response, + request: Request, username: str = Form(...), password: str = Form(...) ): @@ -111,7 +120,7 @@ async def login_submit( if not user: return templates.TemplateResponse( "login.html", - {"request": {}, "settings": settings, "error": "Invalid username or password"}, + {"request": request, "settings": get_template_settings(), "error": "Invalid username or password"}, status_code=401 ) @@ -143,14 +152,14 @@ async def signup_submit( if password != confirm_password: return templates.TemplateResponse( "signup.html", - {"request": request, "settings": settings, "error": "Passwords do not match"}, + {"request": request, "settings": get_template_settings(), "error": "Passwords do not match"}, status_code=400 ) if len(password) < 6: return templates.TemplateResponse( "signup.html", - {"request": request, "settings": settings, "error": "Password must be at least 6 characters"}, + {"request": request, "settings": get_template_settings(), "error": "Password must be at least 6 characters"}, status_code=400 ) @@ -160,7 +169,7 @@ async def signup_submit( if not user: return templates.TemplateResponse( "signup.html", - {"request": request, "settings": settings, "error": "Username or email already exists"}, + {"request": request, "settings": get_template_settings(), "error": "Username or email already exists"}, status_code=400 ) @@ -213,7 +222,7 @@ async def chat_page(request: Request, session_token: Optional[str] = Cookie(None "chat.html", { "request": request, - "settings": settings, + "settings": get_template_settings(), "user": user, "rate_info": rate_info } @@ -242,7 +251,7 @@ async def profile_page(request: Request, session_token: Optional[str] = Cookie(N "profile.html", { "request": request, - "settings": settings, + "settings": get_template_settings(), "user": user, "documents": documents, "rate_info": rate_info