From 3f95ac7db39f5583dfaab893f0e65d45ded29b50 Mon Sep 17 00:00:00 2001 From: Kevin Morris Date: Tue, 8 Feb 2022 22:55:43 -0800 Subject: [PATCH] fix: correct redirects for package actions & requests For requests, we always pass a `next` of /requests, leading us back to the requests page. For a standard package, we get redirected to the involved pkgbase, or target pkgbase if a merge action was taken. Signed-off-by: Kevin Morris --- aurweb/routers/pkgbase.py | 29 ++++++++++++++++-------- templates/partials/packages/actions.html | 6 ++--- templates/pkgbase/delete.html | 1 + templates/pkgbase/disown.html | 2 ++ templates/pkgbase/request.html | 2 ++ 5 files changed, 28 insertions(+), 12 deletions(-) diff --git a/aurweb/routers/pkgbase.py b/aurweb/routers/pkgbase.py index 3ec009e5..045454ec 100644 --- a/aurweb/routers/pkgbase.py +++ b/aurweb/routers/pkgbase.py @@ -510,7 +510,8 @@ async def pkgbase_unflag(request: Request, name: str): @router.get("/pkgbase/{name}/disown") @requires_auth -async def pkgbase_disown_get(request: Request, name: str): +async def pkgbase_disown_get(request: Request, name: str, + next: str = Query(default=str())): pkgbase = get_pkg_or_base(name, PackageBase) has_cred = request.user.has_credential(creds.PKGBASE_DISOWN, @@ -521,6 +522,7 @@ async def pkgbase_disown_get(request: Request, name: str): context = templates.make_context(request, "Disown Package") context["pkgbase"] = pkgbase + context["next"] = next or "/pkgbase/{name}" return render_template(request, "pkgbase/disown.html", context) @@ -528,7 +530,8 @@ async def pkgbase_disown_get(request: Request, name: str): @requires_auth async def pkgbase_disown_post(request: Request, name: str, comments: str = Form(default=str()), - confirm: bool = Form(default=False)): + confirm: bool = Form(default=False), + next: str = Form(default=str())): pkgbase = get_pkg_or_base(name, PackageBase) has_cred = request.user.has_credential(creds.PKGBASE_DISOWN, @@ -555,8 +558,10 @@ async def pkgbase_disown_post(request: Request, name: str, return render_template(request, "pkgbase/disown.html", context, status_code=HTTPStatus.BAD_REQUEST) - return RedirectResponse(f"/pkgbase/{name}", - status_code=HTTPStatus.SEE_OTHER) + if not next: + next = f"/pkgbase/{name}" + + return RedirectResponse(next, status_code=HTTPStatus.SEE_OTHER) @router.post("/pkgbase/{name}/adopt") @@ -645,10 +650,12 @@ async def pkgbase_comaintainers_post(request: Request, name: str, @router.get("/pkgbase/{name}/request") @requires_auth -async def pkgbase_request(request: Request, name: str): +async def pkgbase_request(request: Request, name: str, + next: str = Query(default=str())): pkgbase = get_pkg_or_base(name, PackageBase) context = await make_variable_context(request, "Submit Request") context["pkgbase"] = pkgbase + context["next"] = next or f"/pkgbase/{name}" return render_template(request, "pkgbase/request.html", context) @@ -657,7 +664,8 @@ async def pkgbase_request(request: Request, name: str): async def pkgbase_request_post(request: Request, name: str, type: str = Form(...), merge_into: str = Form(default=None), - comments: str = Form(default=str())): + comments: str = Form(default=str()), + next: str = Form(default=str())): pkgbase = get_pkg_or_base(name, PackageBase) # Create our render context. @@ -734,13 +742,15 @@ async def pkgbase_request_post(request: Request, name: str, @router.get("/pkgbase/{name}/delete") @requires_auth -async def pkgbase_delete_get(request: Request, name: str): +async def pkgbase_delete_get(request: Request, name: str, + next: str = Query(default=str())): if not request.user.has_credential(creds.PKGBASE_DELETE): return RedirectResponse(f"/pkgbase/{name}", status_code=HTTPStatus.SEE_OTHER) context = templates.make_context(request, "Package Deletion") context["pkgbase"] = get_pkg_or_base(name, PackageBase) + context["next"] = next or "/packages" return render_template(request, "pkgbase/delete.html", context) @@ -748,7 +758,8 @@ async def pkgbase_delete_get(request: Request, name: str): @requires_auth async def pkgbase_delete_post(request: Request, name: str, confirm: bool = Form(default=False), - comments: str = Form(default=str())): + comments: str = Form(default=str()), + next: str = Form(default="/packages")): pkgbase = get_pkg_or_base(name, PackageBase) if not request.user.has_credential(creds.PKGBASE_DELETE): @@ -776,7 +787,7 @@ async def pkgbase_delete_post(request: Request, name: str, notifs = actions.pkgbase_delete_instance( request, pkgbase, comments=comments) util.apply_all(notifs, lambda n: n.send()) - return RedirectResponse("/packages", status_code=HTTPStatus.SEE_OTHER) + return RedirectResponse(next, status_code=HTTPStatus.SEE_OTHER) @router.get("/pkgbase/{name}/merge") diff --git a/templates/partials/packages/actions.html b/templates/partials/packages/actions.html index 427b3d0f..8d024506 100644 --- a/templates/partials/packages/actions.html +++ b/templates/partials/packages/actions.html @@ -102,13 +102,13 @@ {% endif %}
  • - + {{ "Submit Request" | tr }}
  • {% if request.user.has_credential(creds.PKGBASE_DELETE) %}
  • - + {{ "Delete Package" | tr }}
  • @@ -131,7 +131,7 @@ {% elif request.user.has_credential(creds.PKGBASE_DISOWN, approved=[pkgbase.Maintainer]) %}
  • - + {{ "Disown Package" | tr }}
  • diff --git a/templates/pkgbase/delete.html b/templates/pkgbase/delete.html index 55eaeba2..5bd74b72 100644 --- a/templates/pkgbase/delete.html +++ b/templates/pkgbase/delete.html @@ -45,6 +45,7 @@
    +

    diff --git a/templates/pkgbase/disown.html b/templates/pkgbase/disown.html index 0ceecfa1..3cc7988d 100644 --- a/templates/pkgbase/disown.html +++ b/templates/pkgbase/disown.html @@ -45,6 +45,8 @@

    + +