]> git.ipfire.org Git - pbs.git/commitdiff
builders: Refactor creating new builders
authorMichael Tremer <michael.tremer@ipfire.org>
Mon, 29 May 2023 12:36:36 +0000 (12:36 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Mon, 29 May 2023 12:36:36 +0000 (12:36 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
Makefile.am
src/templates/builders/create.html [new file with mode: 0644]
src/templates/builders/index.html
src/templates/builders/new.html [deleted file]
src/web/__init__.py
src/web/builders.py

index 5a038e8971a9320181cf0f0a41893e2931a44578..5d7d067face09b79985393c218fba77531503952 100644 (file)
@@ -166,10 +166,10 @@ dist_templates_bugs_modules_DATA = \
 templates_bugs_modulesdir = $(templates_bugsdir)/modules
 
 dist_templates_builders_DATA = \
+       src/templates/builders/create.html \
        src/templates/builders/delete.html \
        src/templates/builders/edit.html \
        src/templates/builders/index.html \
-       src/templates/builders/new.html \
        src/templates/builders/show.html
 
 templates_buildersdir = $(templatesdir)/builders
diff --git a/src/templates/builders/create.html b/src/templates/builders/create.html
new file mode 100644 (file)
index 0000000..5cf1a67
--- /dev/null
@@ -0,0 +1,42 @@
+{% extends "../modal.html" %}
+
+{% block title %}{{ _("Create A New Builder") }}{% end block %}
+
+{% block breadcrumbs %}
+       <nav class="breadcrumb" aria-label="breadcrumbs">
+               <ul>
+                       <li>
+                               <a href="/builders">{{ _("Builders") }}</a>
+                       </li>
+                       <li class="is-active">
+                               <a href="#" aria-current="page">{{ _("Create") }}</a>
+                       </li>
+               </ul>
+       </nav>
+{% end block %}
+
+{% block modal_title %}
+       <h4 class="title is-4">{{ _("Create A New Builder") }}</h4>
+{% end block %}
+
+{% block modal %}
+       <form method="POST" action="">
+               {% raw xsrf_form_html() %}
+
+               {# Hostname #}
+               <div class="field">
+                       <label class="label">{{ _("Hostname") }}</label>
+                       <div class="control">
+                               <input class="input" type="fqdn" name="hostname"
+                                       placeholder="{{ _("Hostname") }}" required>
+                       </div>
+               </div>
+
+               {# Submit! #}
+               <div class="field">
+                       <button type="submit" class="button is-success is-fullwidth">
+                               {{ _("Create") }}
+                       </button>
+               </div>
+       </form>
+{% end block %}
index fa101b6c6723f7aab88d2d2b5b44fd332c9d1e52..c839b813b986e94ba0ea6e6f02f6a24e284d5b39 100644 (file)
@@ -45,7 +45,7 @@
                        {% end %}
 
                        {% if current_user and current_user.is_admin() %}
-                               <a class="button is-success" href="/builders/new">
+                               <a class="button is-success" href="/builders/create">
                                        {{ _("Create Builder") }}
                                </a>
                        {% end %}
diff --git a/src/templates/builders/new.html b/src/templates/builders/new.html
deleted file mode 100644 (file)
index b40b1e9..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-{% extends "../base.html" %}
-
-{% block title %}{{ _("Create new builder") }}{% end block %}
-
-{% block body %}
-       <div class="row">
-               <div class="col-12 col-sm-12 col-md-12 col-lg-12 col-xl-12">
-                       <nav aria-label="breadcrumb" role="navigation">
-                               <ol class="breadcrumb">
-                                       <li class="breadcrumb-item"><a href="/">{{ _("Home") }}</a></li>
-                                       <li class="breadcrumb-item"><a href="/builders">{{ _("Builders") }}</a></li>
-                                       <li class="breadcrumb-item active">
-                                               <a href="/builders/new">{{ _("Create new builder") }}</a>
-                                       </li>
-                               </ol>
-                       </nav>
-               </div>
-       </div>
-
-       <div class="row">
-               <div class="col-12 col-sm-12 col-md-12 col-lg-12 col-xl-12">
-                       <h2 style="word-wrap: break-word;">
-                               {{ _("Create a new builder") }}
-                       </h2>
-               </div>
-       </div>
-
-       <div class="row">
-               <div class="col-12 col-sm-12 col-md-12 col-lg-12 col-xl-12">
-                       <form method="POST" action="">
-                               {% raw xsrf_form_html() %}
-                               <fieldset>
-                                       <div class="form-group">
-                                               <label for="name">{{ _("Hostname") }}</label>
-                                               <input type="text" class="form-control" id="name" name="name"
-                                                       aria-describedby="nameHelp" placeholder="{{ _("Hostname") }}">
-                                               <small id="nameHelp" class="form-text text-muted">
-                                                       {{ _("Enter the canonical hostname of the machine.") }}
-                                               </small>
-                                       </div>
-
-                                       <button type="submit" class="btn btn-primary">{{ _("Create new builder") }}</button>
-                               </fieldset>
-                       </form>
-               </div>
-       </div>
-{% end block %}
index 4e9878d37e8242d920230507150af6eb62a44b1b..9208ac2ef53d26b40560fb3c42b6e3abfd7b4e4d 100644 (file)
@@ -180,7 +180,7 @@ class Application(tornado.web.Application):
 
                        # Builders
                        (r"/builders", builders.IndexHandler),
-                       (r"/builders/new", builders.BuilderNewHandler),
+                       (r"/builders/create", builders.CreateHandler),
                        (r"/builders/([A-Za-z0-9\-\.]+)", builders.ShowHandler),
                        (r"/builders/([A-Za-z0-9\-\.]+)/delete", builders.BuilderDeleteHandler),
                        (r"/builders/([A-Za-z0-9\-\.]+)/edit", builders.BuilderEditHandler),
index 2b5c783351bb3c8381fb529d362e73c2a91a44c4..0327d03ffc5573c5acaee63bb3be0591427c04a1 100644 (file)
@@ -88,23 +88,28 @@ class ShowHandler(base.BaseHandler):
                self.render("builders/show.html", builder=builder)
 
 
-class BuilderNewHandler(base.BaseHandler):
+class CreateHandler(base.BaseHandler):
+       @tornado.web.authenticated
        def get(self):
-               self.render("builders/new.html")
+               # Must be admin
+               if not self.current_user.is_admin():
+                       raise tornado.web.HTTPError(403)
+
+               self.render("builders/create.html")
 
        @tornado.web.authenticated
        def post(self):
-               # Check permissions
-               if not builder.has_perm(self.current_user):
+               # Must be admin
+               if not self.current_user.is_admin():
                        raise tornado.web.HTTPError(403)
 
-               name = self.get_argument("name")
+               hostname = self.get_argument("hostname")
 
                # Create a new builder
                with self.db.transaction():
-                       builder = self.backend.builders.create(name, user=self.current_user)
+                       builder = self.backend.builders.create(hostname, user=self.current_user)
 
-               self.redirect("/builders/%s" % builder.hostname)
+               self.redirect("/builders/%s/edit" % builder.hostname)
 
 
 class BuilderEditHandler(base.BaseHandler):
@@ -114,6 +119,10 @@ class BuilderEditHandler(base.BaseHandler):
                if not builder:
                        raise tornado.web.HTTPError(404, "Builder not found")
 
+               # Check permissions
+               if not builder.has_perm(self.current_user):
+                       raise tornado.web.HTTPError(403)
+
                self.render("builders/edit.html", builder=builder)
 
        @tornado.web.authenticated