]> git.ipfire.org Git - pbs.git/commitdiff
repos: Build controls to delete a repository
authorMichael Tremer <michael.tremer@ipfire.org>
Fri, 26 May 2023 16:52:25 +0000 (16:52 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Fri, 26 May 2023 16:52:25 +0000 (16:52 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
Makefile.am
src/templates/repos/delete.html [new file with mode: 0644]
src/templates/repos/show.html
src/web/__init__.py
src/web/repos.py

index 7b14904a2b8b18dba4a92cdc2a2ca0c809f5a018..5a038e8971a9320181cf0f0a41893e2931a44578 100644 (file)
@@ -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 (file)
index 0000000..23bce20
--- /dev/null
@@ -0,0 +1,64 @@
+{% extends "../modal.html" %}
+
+{% block title %}{{ _("Delete Repository") }} - {{ repo }}{% end block %}
+
+{% block breadcrumbs %}
+       <nav class="breadcrumb" aria-label="breadcrumbs">
+               <ul>
+                       {% if repo.owner %}
+                               <li>
+                                       <a href="/users">{{ _("Users") }}</a>
+                               </li>
+                               <li>
+                                       <a href="/users/{{ repo.owner.name }}">{{ repo.owner }}</a>
+                               </li>
+                               <li>
+                                       <a href="#" disabled>{{ _("Distributions") }}</a>
+                               </li>
+                               <li>
+                                       <a href="#" disabled>{{ distro }}</a>
+                               </li>
+                       {% else %}
+                               <li>
+                                       <a href="/distros">{{ _("Distributions") }}</a>
+                               </li>
+                               <li>
+                                       <a href="/distros/{{ repo.distro.slug }}">{{ repo.distro }}</a>
+                               </li>
+                       {% end %}
+                       <li>
+                               <a href="#" disabled>{{ _("Repositories") }}</a>
+                       </li>
+                       <li>
+                               <a href="{{ repo.url }}">{{ repo }}</a>
+                       </li>
+                       <li class="is-active">
+                               <a href="#" aria-current="page">{{ _("Delete") }}</a>
+                       </li>
+               </ul>
+       </nav>
+{% end block %}
+
+{% block modal_title %}
+       <h4 class="title is-4">{{ _("Delete Repository") }}</h4>
+       <h6 class="subtitle is-6">{{ repo }}</h6>
+{% end block %}
+
+{% block modal %}
+       <form method="POST" action="">
+               {% raw xsrf_form_html() %}
+
+               <div class="content">
+                       <p>
+                               {{ _("Are you sure you want to delete %s?") % repo }}
+                       </p>
+               </div>
+
+               {# Submit! #}
+               <div class="field">
+                       <button type="submit" class="button is-danger is-fullwidth">
+                               {{ _("Delete") }}
+                       </button>
+               </div>
+       </form>
+{% end block %}
index b587df0eeeb340e5447f52784b9d72bacaa3531d..2830ea3a79f1f72b66087c1ef0a6ab37f463a2ab 100644 (file)
                                        <a class="button is-warning" href="{{ repo.url }}/edit">
                                                {{ _("Edit") }}
                                        </a>
+
+                                       <a class="button is-danger" href="{{ repo.url }}/delete">
+                                               {{ _("Delete") }}
+                                       </a>
                                {% end %}
                        </div>
                </div>
index a5332e9ffe4c368ea31b7b8c0cfbe79b58b40f0e..4e9878d37e8242d920230507150af6eb62a44b1b 100644 (file)
@@ -131,6 +131,8 @@ class Application(tornado.web.Application):
                                repos.ConfigHandler),
                        (r"/users/(?P<user_slug>\w+)/repos/(?P<distro_slug>[A-Za-z0-9\-\.]+)/(?P<repo_slug>[A-Za-z0-9\-]+)/builds",
                                repos.BuildsHandler),
+                       (r"/users/(?P<user_slug>\w+)/repos/(?P<distro_slug>[A-Za-z0-9\-\.]+)/(?P<repo_slug>[A-Za-z0-9\-]+)/delete",
+                               repos.DeleteHandler),
                        (r"/users/(?P<user_slug>\w+)/repos/(?P<distro_slug>[A-Za-z0-9\-\.]+)/(?P<repo_slug>[A-Za-z0-9\-]+)/edit",
                                repos.EditHandler),
                        (r"/users/(?P<user_slug>\w+)/repos/(?P<distro_slug>[A-Za-z0-9\-\.]+)/(?P<repo_slug>[A-Za-z0-9\-]+)/mirrorlist",
@@ -195,6 +197,8 @@ class Application(tornado.web.Application):
                                repos.ConfigHandler),
                        (r"/distros/(?P<distro_slug>[A-Za-z0-9\-\.]+)/repos/(?P<repo_slug>[A-Za-z0-9\-]+)/builds",
                                repos.BuildsHandler),
+                       (r"/distros/(?P<distro_slug>[A-Za-z0-9\-\.]+)/repos/(?P<repo_slug>[A-Za-z0-9\-]+)/delete",
+                               repos.DeleteHandler),
                        (r"/distros/(?P<distro_slug>[A-Za-z0-9\-\.]+)/repos/(?P<repo_slug>[A-Za-z0-9\-]+)/edit",
                                repos.EditHandler),
                        (r"/distros/(?P<distro_slug>[A-Za-z0-9\-\.]+)/repos/(?P<repo_slug>[A-Za-z0-9\-]+)/mirrorlist",
index e00f9c16c594dc04eba72d93861d57b29cb6a115..2fe02c8f40bd22c56887a31e1d0d96bf6019cdc3 100644 (file)
@@ -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