mirror of
https://gitlab.archlinux.org/archlinux/aurweb.git
synced 2025-02-03 10:43:03 +01:00
+ Mounted static files (at web/html) to /static. + Added AURWEB_VERSION to aurweb.config (this is used around HTML to refer back to aurweb's release on git.archlinux.org), so we need it easily accessible in the Python codebase. + Implemented basic Jinja2 partials to put together whole aurweb pages. This may be missing some things currently and is a WIP until this set is ready to be merged. + Added config [options] aurwebdir = YOUR_AUR_ROOT; this configuration option should specify the root directory of the aurweb project. It is used by various parts of the FastAPI codebase to target project directories. Added routes via aurweb.routers.html: * POST /language: Set your session language. * GET /favicon.ico: Redirect to /static/images/favicon.ico. * Some browsers always look for $ROOT/favicon.ico to get an icon for the page being loaded, regardless of a specified "shortcut icon" given in a <link> directive. * GET /: Home page; WIP. * Updated aurweb.routers.html.language passes query parameters to its next redirection. When calling aurweb.templates.render_template, the context passed should be formed via the aurweb.templates.make_context. See aurweb.routers.html.index for an example of this. Signed-off-by: Kevin Morris <kevr@0cost.org>
50 lines
1.7 KiB
Python
50 lines
1.7 KiB
Python
""" AURWeb's primary routing module. Define all routes via @app.app.{get,post}
|
|
decorators in some way; more complex routes should be defined in their
|
|
own modules and imported here. """
|
|
from http import HTTPStatus
|
|
from urllib.parse import unquote
|
|
|
|
from fastapi import APIRouter, Form, Request
|
|
from fastapi.responses import HTMLResponse, RedirectResponse
|
|
|
|
from aurweb.templates import make_context, render_template
|
|
|
|
router = APIRouter()
|
|
|
|
|
|
@router.get("/favicon.ico")
|
|
async def favicon(request: Request):
|
|
""" Some browsers attempt to find a website's favicon via root uri at
|
|
/favicon.ico, so provide a redirection here to our static icon. """
|
|
return RedirectResponse("/static/images/favicon.ico")
|
|
|
|
|
|
@router.post("/language", response_class=RedirectResponse)
|
|
async def language(request: Request,
|
|
set_lang: str = Form(...),
|
|
next: str = Form(...),
|
|
q: str = Form(default=None)):
|
|
""" A POST route used to set a session's language.
|
|
|
|
Return a 303 See Other redirect to {next}?next={next}. If we are
|
|
setting the language on any page, we want to preserve query
|
|
parameters across the redirect.
|
|
"""
|
|
from aurweb.asgi import routes
|
|
if unquote(next) not in routes:
|
|
return HTMLResponse(
|
|
b"Invalid 'next' parameter.",
|
|
status_code=400)
|
|
|
|
query_string = "?" + q if q else str()
|
|
response = RedirectResponse(url=f"{next}{query_string}",
|
|
status_code=int(HTTPStatus.SEE_OTHER))
|
|
response.set_cookie("AURLANG", set_lang)
|
|
return response
|
|
|
|
|
|
@router.get("/", response_class=HTMLResponse)
|
|
async def index(request: Request):
|
|
""" Homepage route. """
|
|
context = make_context(request, "Home")
|
|
return render_template("index.html", context)
|