From: Michael Tremer Date: Wed, 14 Jun 2023 14:18:17 +0000 (+0000) Subject: releases: Implement controls to publish X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=31ff4bff7caa1e97843dac586a253835b723fefc;p=pbs.git releases: Implement controls to publish Signed-off-by: Michael Tremer --- diff --git a/Makefile.am b/Makefile.am index 678b85f9..84b5f9e6 100644 --- a/Makefile.am +++ b/Makefile.am @@ -237,6 +237,7 @@ dist_templates_distros_releases_DATA = \ src/templates/distros/releases/delete.html \ src/templates/distros/releases/edit.html \ src/templates/distros/releases/index.html \ + src/templates/distros/releases/publish.html \ src/templates/distros/releases/show.html templates_distros_releasesdir = $(templates_distrosdir)/releases diff --git a/src/templates/distros/releases/publish.html b/src/templates/distros/releases/publish.html new file mode 100644 index 00000000..5cfda0e5 --- /dev/null +++ b/src/templates/distros/releases/publish.html @@ -0,0 +1,53 @@ +{% extends "../../modal.html" %} + +{% block title %}{{ release }} - {{ _("Publish") }}{% end block %} + +{% block breadcrumbs %} + +{% end block %} + +{% block modal_title %} +

{{ _("Publish Release") }}

+
{{ release }}
+{% end block %} + +{% block modal %} +
+ {% raw xsrf_form_html() %} + +
+

+ {{ _("Are you sure you want to publish %s?") % release }} +

+
+ + {# Submit! #} +
+ +
+
+{% end block %} diff --git a/src/templates/distros/releases/show.html b/src/templates/distros/releases/show.html index c2c9fae0..c5408f21 100644 --- a/src/templates/distros/releases/show.html +++ b/src/templates/distros/releases/show.html @@ -43,6 +43,12 @@
+ {% if not release.is_published() %} + + {{ _("Publish") }} + + {% end %} + {{ _("Edit") }} diff --git a/src/web/__init__.py b/src/web/__init__.py index a4c46f0a..669710bb 100644 --- a/src/web/__init__.py +++ b/src/web/__init__.py @@ -227,6 +227,7 @@ class Application(tornado.web.Application): (r"/distros/([A-Za-z0-9\-\.]+)/releases/([\w\-_]+)", distributions.ReleasesShowHandler), (r"/distros/([A-Za-z0-9\-\.]+)/releases/([\w\-_]+)/delete", distributions.ReleasesDeleteHandler), (r"/distros/([A-Za-z0-9\-\.]+)/releases/([\w\-_]+)/edit", distributions.ReleasesEditHandler), + (r"/distros/([A-Za-z0-9\-\.]+)/releases/([\w\-_]+)/publish", distributions.ReleasesPublishHandler), # Mirrors (r"/mirrors", mirrors.IndexHandler), diff --git a/src/web/distributions.py b/src/web/distributions.py index 1ea990e3..5391360d 100644 --- a/src/web/distributions.py +++ b/src/web/distributions.py @@ -214,6 +214,46 @@ class ReleasesDeleteHandler(base.BaseHandler): self.redirect("/distros/%s/releases" % distro.slug) +class ReleasesPublishHandler(base.BaseHandler): + @tornado.web.authenticated + def get(self, distro_slug, release_slug): + distro = self.backend.distros.get_by_slug(distro_slug) + if not distro: + raise tornado.web.HTTPError(404, "Could not find distro: %s" % distro_slug) + + # Fetch the release + release = distro.get_release(release_slug) + if not release: + raise tornado.web.HTTPError(404, "Could not find release %s" % release_slug) + + # Check permissions + if not release.has_perm(self.current_user): + raise tornado.web.HTTPError(403) + + self.render("distros/releases/publish.html", release=release, distro=distro) + + @tornado.web.authenticated + async def post(self, distro_slug, release_slug): + distro = self.backend.distros.get_by_slug(distro_slug) + if not distro: + raise tornado.web.HTTPError(404, "Could not find distro: %s" % distro_slug) + + # Fetch the release + release = distro.get_release(release_slug) + if not release: + raise tornado.web.HTTPError(404, "Could not find release %s" % release_slug) + + # Check permissions + if not release.has_perm(self.current_user): + raise tornado.web.HTTPError(403) + + with self.db.transaction(): + await release.publish() + + # Redirect back to the release + self.redirect(release.url) + + class ListModule(ui_modules.UIModule): def render(self, distros): return self.render_string("distros/modules/list.html", distros=distros)