From: Michael Tremer Date: Fri, 26 May 2023 16:52:25 +0000 (+0000) Subject: repos: Build controls to delete a repository X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=05db2aeb35bff7fd68ff306e2a74f34da32a315d;p=pbs.git repos: Build controls to delete a repository Signed-off-by: Michael Tremer --- diff --git a/Makefile.am b/Makefile.am index 7b14904a..5a038e89 100644 --- a/Makefile.am +++ b/Makefile.am @@ -305,6 +305,7 @@ templates_modulesdir = $(templatesdir)/modules dist_templates_repos_DATA = \ src/templates/repos/create-custom.html \ src/templates/repos/builds.html \ + src/templates/repos/delete.html \ src/templates/repos/edit.html \ src/templates/repos/show.html diff --git a/src/templates/repos/delete.html b/src/templates/repos/delete.html new file mode 100644 index 00000000..23bce20c --- /dev/null +++ b/src/templates/repos/delete.html @@ -0,0 +1,64 @@ +{% extends "../modal.html" %} + +{% block title %}{{ _("Delete Repository") }} - {{ repo }}{% end block %} + +{% block breadcrumbs %} + +{% end block %} + +{% block modal_title %} +

{{ _("Delete Repository") }}

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

+ {{ _("Are you sure you want to delete %s?") % repo }} +

+
+ + {# Submit! #} +
+ +
+
+{% end block %} diff --git a/src/templates/repos/show.html b/src/templates/repos/show.html index b587df0e..2830ea3a 100644 --- a/src/templates/repos/show.html +++ b/src/templates/repos/show.html @@ -92,6 +92,10 @@ {{ _("Edit") }} + + + {{ _("Delete") }} + {% end %} diff --git a/src/web/__init__.py b/src/web/__init__.py index a5332e9f..4e9878d3 100644 --- a/src/web/__init__.py +++ b/src/web/__init__.py @@ -131,6 +131,8 @@ class Application(tornado.web.Application): repos.ConfigHandler), (r"/users/(?P\w+)/repos/(?P[A-Za-z0-9\-\.]+)/(?P[A-Za-z0-9\-]+)/builds", repos.BuildsHandler), + (r"/users/(?P\w+)/repos/(?P[A-Za-z0-9\-\.]+)/(?P[A-Za-z0-9\-]+)/delete", + repos.DeleteHandler), (r"/users/(?P\w+)/repos/(?P[A-Za-z0-9\-\.]+)/(?P[A-Za-z0-9\-]+)/edit", repos.EditHandler), (r"/users/(?P\w+)/repos/(?P[A-Za-z0-9\-\.]+)/(?P[A-Za-z0-9\-]+)/mirrorlist", @@ -195,6 +197,8 @@ class Application(tornado.web.Application): repos.ConfigHandler), (r"/distros/(?P[A-Za-z0-9\-\.]+)/repos/(?P[A-Za-z0-9\-]+)/builds", repos.BuildsHandler), + (r"/distros/(?P[A-Za-z0-9\-\.]+)/repos/(?P[A-Za-z0-9\-]+)/delete", + repos.DeleteHandler), (r"/distros/(?P[A-Za-z0-9\-\.]+)/repos/(?P[A-Za-z0-9\-]+)/edit", repos.EditHandler), (r"/distros/(?P[A-Za-z0-9\-\.]+)/repos/(?P[A-Za-z0-9\-]+)/mirrorlist", diff --git a/src/web/repos.py b/src/web/repos.py index e00f9c16..2fe02c8f 100644 --- a/src/web/repos.py +++ b/src/web/repos.py @@ -158,6 +158,34 @@ class EditHandler(BaseHandler): self.redirect(repo.url) +class DeleteHandler(BaseHandler): + @tornado.web.authenticated + def get(self, **kwargs): + # Fetch the repository + repo = self._get_repo(**kwargs) + + # Check for permissions + if not repo.has_perm(self.current_user): + raise tornado.web.HTTPError(403) + + self.render("repos/delete.html", repo=repo) + + @tornado.web.authenticated + async def post(self, **kwargs): + # Fetch the repository + repo = self._get_repo(**kwargs) + + # Check for permissions + if not repo.has_perm(self.current_user): + raise tornado.web.HTTPError(403) + + with self.db.transaction(): + await repo.delete(user=self.current_user) + + # XXX redirect back to the user pager + self.redirect("/distros/%s" % repo.distro.slug) + + class MirrorlistHandler(BaseHandler): def get(self, **kwargs): # Fetch the repository