""" Home and root routes for L1 server. """ from pathlib import Path import markdown from fastapi import APIRouter, Request, Depends, HTTPException from fastapi.responses import HTMLResponse, RedirectResponse, FileResponse from artdag_common import render from artdag_common.middleware import wants_html from ..dependencies import get_templates, get_current_user router = APIRouter() @router.get("/") async def home(request: Request): """ Home page - show README and stats. """ import database user = await get_current_user(request) # Load README readme_html = "" try: readme_path = Path(__file__).parent.parent.parent / "README.md" if readme_path.exists(): readme_html = markdown.markdown(readme_path.read_text(), extensions=['tables', 'fenced_code']) except Exception: pass # Get stats for current user stats = {} if user: try: stats["media"] = await database.count_user_items(user.actor_id) except Exception: pass try: from ..services.recipe_service import RecipeService from ..dependencies import get_redis_client, get_cache_manager recipe_service = RecipeService(get_redis_client(), get_cache_manager()) recipes = await recipe_service.list_recipes(user.actor_id) stats["recipes"] = len(recipes) except Exception: pass templates = get_templates(request) return render(templates, "home.html", request, user=user, readme_html=readme_html, stats=stats, active_tab="home", ) @router.get("/login") async def login_redirect(request: Request): """ Redirect to L2 for login. """ from ..config import settings if settings.l2_server: # Redirect to L2 login with return URL return_url = str(request.url_for("auth_callback")) login_url = f"{settings.l2_server}/login?return_to={return_url}" return RedirectResponse(url=login_url, status_code=302) # No L2 configured - show error return HTMLResponse( "

Login not configured

" "

No L2 server configured for authentication.

", status_code=503 ) # Client tarball path CLIENT_TARBALL = Path(__file__).parent.parent.parent / "artdag-client.tar.gz" @router.get("/download/client") async def download_client(): """Download the Art DAG CLI client.""" if not CLIENT_TARBALL.exists(): raise HTTPException(404, "Client package not found. Run build-client.sh to create it.") return FileResponse( CLIENT_TARBALL, media_type="application/gzip", filename="artdag-client.tar.gz" )