-{% extends "../modal.html" %}
+{% extends "modal.html" %}
{% block title %}
{% if mirror %}
{{ _("Edit Mirror") }} - {{ mirror }}
{% else %}
{{ _("Create Mirror") }}
- {% end %}
-{% end block %}
+ {% endif %}
+{% endblock %}
{% block breadcrumbs %}
<nav class="breadcrumb" aria-label="breadcrumbs">
<li class="is-active">
<a href="#" aria-current="page">{{ _("Create") }}</a>
</li>
- {% end %}
+ {% endif %}
</ul>
</nav>
-{% end block %}
+{% endblock %}
{% block modal_title %}
{% if mirror %}
<h6 class="subtitle is-6">{{ mirror }}</h6>
{% else %}
<h4 class="title is-4">{{ _("Create A New Mirror") }}</h4>
- {% end %}
-{% end block %}
+ {% endif %}
+{% endblock %}
{% block modal %}
<form method="POST" action="">
- {% raw xsrf_form_html() %}
+ {{ xsrf_form_html() | safe }}
{# Hostname & Path can only be set once #}
{% if not mirror %}
placeholder="{{ _("Path") }}" required>
</div>
</div>
- {% end %}
+ {% endif %}
{# Owner #}
<div class="field">
<label class="label">{{ _("Owner") }}</label>
<div class="control">
<input class="input" type="text" name="owner"
- {% if mirror %}value="{{ mirror.owner }}"{% end %}
+ {% if mirror %}value="{{ mirror.owner }}"{% endif %}
placeholder="{{ _("Owner") }}" required>
</div>
</div>
<label class="label">{{ _("Contact Email Address") }}</label>
<div class="control">
<input class="input" type="email" name="contact"
- {% if mirror %}value="{{ mirror.contact }}"{% end %}
+ {% if mirror %}value="{{ mirror.contact }}"{% endif %}
placeholder="{{ _("Contact Email Address") }}" required>
</div>
</div>
<label class="label">{{ _("Notes") }}</label>
<div class="control">
<textarea class="textarea" name="notes" rows="8"
- >{% if mirror %}{{ mirror.notes }}{% end %}</textarea>
+ >{% if mirror %}{{ mirror.notes }}{% endif %}</textarea>
</div>
</div>
<button type="submit" class="button is-success is-fullwidth">
{{ _("Create Mirror") }}
</button>
- {% end %}
+ {% endif %}
</div>
</form>
-{% end block %}
+{% endblock %}
await self.redirect("/mirrors/%s" % mirror.hostname)
-class CreateHandler(base.BaseHandler):
- def prepare(self):
- # Admin permissions are required
- if not self.current_user.is_admin():
- raise tornado.web.HTTPError(403)
-
+class CreateHandler(base.AdminHandler):
@base.authenticated
- def get(self):
- self.render("mirrors/edit.html", mirror=None)
+ async def get(self):
+ await self.render("mirrors/edit.html", mirror=None)
@base.authenticated
async def post(self):
- # Fetch all values
- hostname = self.get_argument("hostname")
- path = self.get_argument("path")
- owner = self.get_argument("owner")
- contact = self.get_argument("contact")
- notes = self.get_argument("notes", None)
-
# Create the mirror
- with self.db.transaction():
- mirror = await self.backend.mirrors.create(
- hostname,
- path,
- owner,
- contact,
- user=self.current_user,
- )
+ mirror = await self.backend.mirrors.create(
+ hostname = self.get_argument("hostname"),
+ path = self.get_argument("path"),
+ owner = self.get_argument("owner"),
+ contact = self.get_argument("contact"),
+ notes = self.get_argument("notes", ""),
+ user = self.current_user,
+ )
# Redirect the user back
self.redirect("/mirrors/%s" % mirror.hostname)
class EditHandler(base.BaseHandler):
@base.authenticated
- def get(self, hostname):
- mirror = self.backend.mirrors.get_by_hostname(hostname)
+ async def get(self, hostname):
+ mirror = await self.backend.mirrors.get_by_hostname(hostname)
if not mirror:
raise tornado.web.HTTPError(404, "Could not find mirror %s" % hostname)
if not mirror.has_perm(self.current_user):
raise tornado.web.HTTPError(403)
- self.render("mirrors/edit.html", mirror=mirror)
+ await self.render("mirrors/edit.html", mirror=mirror)
@base.authenticated
- def post(self, hostname):
- mirror = self.backend.mirrors.get_by_hostname(hostname)
+ async def post(self, hostname):
+ mirror = await self.backend.mirrors.get_by_hostname(hostname)
if not mirror:
raise tornado.web.HTTPError(404, "Could not find mirror %s" % hostname)
if not mirror.has_perm(self.current_user):
raise tornado.web.HTTPError(403)
- with self.db.transaction():
- mirror.owner = self.get_argument("owner")
- mirror.contact = self.get_argument("contact")
- mirror.notes = self.get_argument("notes", None)
+ # Store new values
+ mirror.owner = self.get_argument("owner")
+ mirror.contact = self.get_argument("contact")
+ mirror.notes = self.get_argument("notes", None)
self.redirect("/mirrors/%s" % mirror.hostname)
class DeleteHandler(base.BaseHandler):
@base.authenticated
- def get(self, hostname):
- mirror = self.backend.mirrors.get_by_hostname(hostname)
+ async def get(self, hostname):
+ mirror = await self.backend.mirrors.get_by_hostname(hostname)
if not mirror:
raise tornado.web.HTTPError(404, "Could not find mirror %s" % hostname)
if not mirror.has_perm(self.current_user):
raise tornado.web.HTTPError(403)
- self.render("mirrors/delete.html", mirror=mirror)
+ await self.render("mirrors/delete.html", mirror=mirror)
@base.authenticated
- def post(self, hostname):
- mirror = self.backend.mirrors.get_by_hostname(hostname)
+ async def post(self, hostname):
+ mirror = await self.backend.mirrors.get_by_hostname(hostname)
if not mirror:
raise tornado.web.HTTPError(404, "Could not find mirror %s" % hostname)
if not mirror.has_perm(self.current_user):
raise tornado.web.HTTPError(403)
- with self.db.transaction():
- mirror.delete(user=self.current_user)
+ # Delete the mirror
+ await mirror.delete(deleted_by=self.current_user)
# Redirect back to all mirrors
self.redirect("/mirrors")