]> git.ipfire.org Git - ipfire.org.git/commitdiff
Drop admin.ipfire.org
authorMichael Tremer <michael.tremer@ipfire.org>
Mon, 15 Oct 2018 08:56:00 +0000 (09:56 +0100)
committerMichael Tremer <michael.tremer@ipfire.org>
Mon, 15 Oct 2018 08:56:00 +0000 (09:56 +0100)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
15 files changed:
Makefile.am
src/templates/admin-accounts-edit.html [deleted file]
src/templates/admin-accounts.html [deleted file]
src/templates/admin-downloads-mirrors.html [deleted file]
src/templates/admin-downloads.html [deleted file]
src/templates/admin-index.html [deleted file]
src/templates/admin-mirrors-create.html [deleted file]
src/templates/admin-mirrors-details.html [deleted file]
src/templates/admin-mirrors.html [deleted file]
src/templates/admin-planet-compose.html [deleted file]
src/templates/admin-planet.html [deleted file]
src/templates/modules/menu.html
src/web/__init__.py
src/web/handlers.py
src/web/handlers_admin.py [deleted file]

index 9586aea2aa4bfb50f1d9af733c11450a75a35ac8..52778bd14fae12226d157e153ec63341d13177af 100644 (file)
@@ -79,7 +79,6 @@ web_PYTHON = \
        src/web/blog.py \
        src/web/download.py \
        src/web/handlers.py \
-       src/web/handlers_admin.py \
        src/web/handlers_base.py \
        src/web/handlers_boot.py \
        src/web/handlers_fireinfo.py \
diff --git a/src/templates/admin-accounts-edit.html b/src/templates/admin-accounts-edit.html
deleted file mode 100644 (file)
index 6c693cb..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-{% extends "admin-base.html" %}
-
-{% block content %}
-       <div id="post">
-               <h3>{{ _("Account Administrator") }}</h3>
-               
-               {{ user.realname }}
-       </div>
-{% end %}
diff --git a/src/templates/admin-accounts.html b/src/templates/admin-accounts.html
deleted file mode 100644 (file)
index ab8fe3a..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-{% extends "admin-base.html" %}
-
-{% block content %}
-       <div id="post">
-               <h3>{{ _("Account Administrator") }}</h3>
-               
-               <p>
-                       <a href="/accounts/create">{{ _("Create new account") }}</a>
-               </p>
-
-               <table>
-                       <tr>
-                               <th>{{ _("Name (Nickname)") }}</th>
-                               <th>&nbsp;</th>
-                       </tr>
-                       {% for account in accounts %}
-                               <tr>
-                                       <td>{{ account.cn }} ({{ account.uid }})</td>
-                                       <td>
-                                               <a href="/accounts/edit/{{ account.uid }}">{{ _("Edit") }}</a>
-                                               <a href="/accounts/delete/{{ account.uid }}">{{ _("Delete") }}</a>
-                                       </td>
-                               </tr>
-                       {% end %}
-               </table>
-       </div>
-{% end %}
diff --git a/src/templates/admin-downloads-mirrors.html b/src/templates/admin-downloads-mirrors.html
deleted file mode 100644 (file)
index 2597579..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-{% extends "admin-downloads-base.html" %}
-
-{% block content %}
-       <div id="post">
-               <h3>{{ _("Download statistics") }}</h3>
-
-               <h4>{{ _("Mirror load from today") }}</h4>
-               {% module FireinfoTable(mirror_load_today, sortby="percentage") %}
-
-               <h4>{{ _("Mirror load") }}</h4>
-               {% module FireinfoTable(mirror_load_total, sortby="percentage") %}
-       </div>
-{% end %}
diff --git a/src/templates/admin-downloads.html b/src/templates/admin-downloads.html
deleted file mode 100644 (file)
index 1e606b9..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-{% extends "base.html" %}
-
-{% block body %}
-       <div id="post">
-               <h3>{{ _("Download statistics") }}</h3>
-
-               <h4>{{ _("Download counters") }}</h4>
-               <table>
-                       <tr>
-                               <td>{{ _("Today") }}</td>
-                               <td>{{ downloads_today }}</td>
-                       </tr>
-                       <tr>
-                               <td>{{ _("Yesterday") }}</td>
-                               <td>{{ downloads_yesterday }}</td>
-                       </tr>
-                       <tr>
-                               <td>{{ _("Total") }}</td>
-                               <td>{{ downloads_total }}</td>
-                       </tr>
-               </table>
-
-               <h4>{{ _("Downloads by country") }}</h4>
-               {% module FireinfoGeoTable(downloads_locations_today) %}
-               {% module FireinfoGeoTable(downloads_locations_total) %}
-       </div>
-{% end %}
diff --git a/src/templates/admin-index.html b/src/templates/admin-index.html
deleted file mode 100644 (file)
index 0b62dc1..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-{% extends "base.html" %}
-
-{% block body %}
-       <div id="post">
-               <h3>{{ _("Admin Area") }}</h3>
-       </div>
-{% end %}
diff --git a/src/templates/admin-mirrors-create.html b/src/templates/admin-mirrors-create.html
deleted file mode 100644 (file)
index 485026e..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-{% extends "admin-base.html" %}
-
-{% block content %}
-       <div class="post">
-               <h3>{{ _("Create new mirror") }}</h3>
-               <form name="mirror" method="post">
-                       {% raw xsrf_form_html() %}
-                       <input type="hidden" name="id" value="{{ mirror.id }}">
-
-                       <table>
-                               <tr>
-                                       <td>{{ _("Hostname") }}</td>
-                                       <td><input type="text" name="hostname" value="{{ mirror.hostname }}" /></td>
-                               </tr>
-                               <tr>
-                                       <td>{{ _("Path") }}</td>
-                                       <td><input type="text" name="path" value="{{ mirror.path }}" /></td>
-                               </tr>
-                               <tr>
-                                       <td>{{ _("Owner") }}</td>
-                                       <td><input type="text" name="owner" value="{{ mirror.owner }}" /></td>
-                               </tr>
-                               <tr>
-                                       <td>{{ _("Location") }}</td>
-                                       <td><input type="text" name="location" value="{{ mirror.location }}" /></td>
-                               </tr>
-                               <tr>
-                                       <td>{{ _("File mirror") }}</td>
-                                       <td>
-                                               <select name="releases">
-                                                       <option value="Y" {% if mirror.releases == "Y" %}selected{% end %}>{{ _("yes") }}</option>
-                                                       <option value="N" {% if mirror.releases == "N" %}selected{% end %}>{{ _("no") }}</option>
-                                               </select>
-                                       </td>
-                               </tr>
-                               <tr>
-                                       <td>{{ _("Pakfire 2 mirror") }}</td>
-                                       <td>
-                                               <select name="pakfire2">
-                                                       <option value="Y" {% if mirror.pakfire2 == "Y" %}selected{% end %}>{{ _("yes") }}</option>
-                                                       <option value="N" {% if mirror.pakfire2 == "N" %}selected{% end %}>{{ _("no") }}</option>
-                                               </select>
-                                       </td>
-                               </tr>
-                               <tr>
-                                       <td>{{ _("Pakfire 3 mirror") }}</td>
-                                       <td>
-                                               <select name="pakfire3">
-                                                       <option value="Y" {% if mirror.pakfire3 == "Y" %}selected{% end %}>{{ _("yes") }}</option>
-                                                       <option value="N" {% if mirror.pakfire3 == "N" %}selected{% end %}>{{ _("no") }}</option>
-                                               </select>
-                                       </td>
-                               </tr>
-                               <tr>
-                                       <td>{{ _("Disabled?") }}</td>
-                                       <td>
-                                               <select name="disabled">
-                                                       <option value="Y" {% if mirror.disabled == "Y" %}selected{% end %}>{{ _("yes") }}</option>
-                                                       <option value="N" {% if mirror.disabled == "N" %}selected{% end %}>{{ _("no") }}</option>
-                                               </select>
-                                       </td>
-                               </tr>
-                               <tr>
-                                       <td colspan="2">
-                                               <input type="submit" value="{{ _("Save") }}" />
-                                       </td>
-                               </tr>
-                       </table>
-               </form>
-       </div>
-{% end block %}
diff --git a/src/templates/admin-mirrors-details.html b/src/templates/admin-mirrors-details.html
deleted file mode 100644 (file)
index d7b544a..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-{% extends "admin-base.html" %}
-
-{% block content %}
-       <div class="post">
-               <h3>{{ mirror.hostname }} - {{ _("Details") }}</h3>
-               
-               <p>
-                       <a href="/mirrors">{{ _("All mirrors") }}</a>
-               </p>
-               
-               <table>
-                       <tr>
-                               <td>{{ _("Hostname") }}</td>
-                               <td><a href="{{ mirror.url }}" target="_blank">{{ mirror.url }}</a></td>
-                       </tr>
-                       <tr>
-                               <td>{{ _("Status") }}</td>
-                               <td>{{ mirror.state }}</td>
-                       </tr>
-                       <tr>
-                               <td>{{ _("Owner") }}</td>
-                               <td>{{ mirror.owner }}</td>
-                       </tr>
-                       <tr>
-                               <td>{{ _("Location") }}</td>
-                               <td>{{ mirror.location }}</td>
-                       </tr>
-                       <tr>
-                               <td>{{ _("GeoIP Location") }}</td>
-                               <td>{{ mirror.country_code }}</td>
-                       </tr>
-                       <tr>
-                               <td>{{ _("File mirror") }}</td>
-                               <td>{{ mirror.releases }}</td>
-                       </tr>
-                       <tr>
-                               <td>{{ _("Pakfire 2 mirror") }}</td>
-                               <td>{{ mirror.pakfire2 }}</td>
-                       </tr>
-                       <tr>
-                               <td>{{ _("Pakfire 3 mirror") }}</td>
-                               <td>{{ mirror.pakfire3 }}</td>
-                       </tr>
-                       <tr>
-                               <td>{{ _("Disabled?") }}</td>
-                               <td>{{ mirror.disabled }}</td>
-                       </tr>
-               </table>
-
-               {% if mirror.releases == "Y" %}
-                       <h4>{{ _("Filelist") }}</h4>
-                       <table class="filelist">
-                               {% for file in mirror.filelist %}
-                                       <tr>
-                                               <td>{{ file }}</td>
-                                       </tr>
-                               {% end %}
-                       </table>
-               {% end %}
-       </div>
-{% end block %}
diff --git a/src/templates/admin-mirrors.html b/src/templates/admin-mirrors.html
deleted file mode 100644 (file)
index 7220df0..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-{% extends "admin-base.html" %}
-
-{% block content %}
-       <div id="post">
-               <h3>{{ _("Mirror Administrator") }}</h3>
-               
-               <p>
-                       <a href="/mirrors/create">{{ _("Create new mirror") }}</a> |
-                       <a href="/mirrors/update">{{ _("Re-check now") }}</a>
-               </p>
-
-               <table>
-                       <tr>
-                               <th>{{ _("Hostname") }}</th>
-                               <th>{{ _("Last update") }}</th>
-                               <th>&nbsp;</th>
-                       </tr>
-                       {% for mirror in mirrors %}
-                               <tr class="mirror-{{ mirror.state.lower() }}">
-                                       <td>{{ mirror.hostname }}</td>
-                                       <td>{{ locale.format_date(mirror.last_update) }}</td>
-                                       <td>
-                                               <a href="/mirrors/details/{{ mirror.id }}">{{ _("Details") }}</a>
-                                               <a href="/mirrors/edit/{{ mirror.id }}">{{ _("Edit") }}</a>
-                                               <a href="/mirrors/delete/{{ mirror.id }}">{{ _("Delete") }}</a>
-                                       </td>
-                               </tr>
-                       {% end %}
-               </table>
-       </div>
-{% end %}
diff --git a/src/templates/admin-planet-compose.html b/src/templates/admin-planet-compose.html
deleted file mode 100644 (file)
index 08a3108..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-{% extends "base.html" %}
-
-{% block body %}
-       <div class="page-header">
-               <h2>{{ _("Compose new entry") }}</h2>
-       </div>
-
-       <form class="form-horizontal" action="" method="POST" name="entry">
-               {% raw xsrf_form_html() %}
-
-               {% if entry %}
-                       <input type="hidden" name="id" value="{{ entry.id }}">
-               {% end %}
-
-               <div class="form-group">
-                       <label class="control-label col-sm-2" for="inputTitle">{{ _("Title") }}</label>
-                       <div class="col-sm-10">
-                               <input class="form-control" type="text" name="title" id="inputTitle"
-                                       {% if entry %}value="{{ entry.title }}"{% end %} placeholder="{{ _("Title") }}">
-                       </div>
-               </div>
-
-               <div class="form-group">
-                       <div class="col-sm-10 col-sm-offset-2">
-                               <textarea class="form-control" name="markdown" rows="12" id="inputMarkdown"
-                                       placeholder="{{ _("Content") }}">{% if entry %}{{ entry.markdown }}{% end %}</textarea>
-                       </div>
-               </div>
-
-               <hr>
-
-               <div class="form-group">
-                       <label class="control-label col-sm-2">{{ _("Status") }}</label>
-                       <div class="col-sm-10">
-                               <label class="radio inline">
-                                       <input type="radio" name="status" value="draft" {% if not entry or not entry.is_published() %}checked{% end %}>
-                                       {{ _("Draft") }}
-                               </label>
-                               <label class="radio inline">
-                                       <input type="radio" name="status" value="published" {% if entry and entry.is_published() %}checked{% end %}>
-                                       {{ _("Published") }}
-                               </label>
-                       </div>
-               </div>
-
-               <hr>
-
-               <div class="col-sm-10 col-sm-offset-2">
-                       <button type="submit" class="btn btn-primary">{{ _("Save") }}</button>
-                       <a class="btn btn-default" href="javascript:preview();">{{ _("Preview") }}</a>
-                       <a class="btn btn-default" href="/planet">{{ _("Cancel") }}</a>
-               </div>
-       </form>
-
-       <br class="separator">
-
-       <div id="preview"></div>
-
-       <script type="text/javascript">
-               preview = function() {
-                       $.postJSON("/api/planet/render", { text : $("#inputMarkdown").val() },
-                               function(data) {
-                                       $("#preview").html(data.html);
-                               }
-                       );
-               }
-       </script>
-{% end block %}
diff --git a/src/templates/admin-planet.html b/src/templates/admin-planet.html
deleted file mode 100644 (file)
index 6c3ab5b..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-{% extends "base.html" %}
-
-{% block body %}
-       <div id="post">
-               <h3>{{ _("Planet Administrator") }}</h3>
-
-               <p>
-                       <a href="/planet/compose">{{ _("Compose new entry") }}</a>
-               </p>
-
-               <table>
-                       <tr>
-                               <th>{{ _("Author") }}</th>
-                               <th>{{ _("Title") }}</th>
-                               <th>&nbsp;</th>
-                       </tr>
-                       {% for entry in entries %}
-                               <tr>
-                                       <td>
-                                               {{ entry.author.name }}
-                                       </td>
-                                       <td>
-                                               <a href="https://planet.ipfire.org/post/{{ entry.slug }}" target="_blank">{{ entry.title }}</a>
-                                               {% if entry.is_draft() %}
-                                                       <span class="label label-warning">{{ _("Draft") }}</span>
-                                               {% end %}
-                                       </td>
-                                       <td>
-                                               <a href="/planet/edit/{{ entry.slug }}">{{ _("Edit") }}</a>
-                                               {% if entry.is_draft() %}
-                                                       &bull; <a href="/planet/publish/{{ entry.slug }}">{{ _("Publish") }}</a>
-                                               {% end %}
-                                       </td>
-                               </tr>
-                       {% end %}
-               </table>
-       </div>
-{% end %}
index 3bb5c805676ad1a095b6e3ddcddb50f703ecd6cc..8dbe67b4f1151efdf087f9f49ef5373c8cf3690b 100644 (file)
                <li class="nav-item">
                        <a class="nav-link {% if request.path == "/get-involved" %}active{% end %}" href="/get-involved">{{ _("Community") }}</a>
                </li>
-               
-       {% elif hostname == "admin.ipfire.org" %}
-               <li class="nav-item">
-                       <a class="nav-link" href="/fireinfo">{{ _("Fireinfo") }}</a>
-               </li>
-               <li class="nav-item">
-                       <a class="nav-link" href="/downloads">{{ _("Downloads") }}</a>
-               </li>
        {% elif hostname in ("downloads.ipfire.org", "download.ipfire.org") %}
                <li class="nav-item">
                        <a class="nav-link" href="https://mirrors.ipfire.org">{{ _("Mirrors") }}</a>
@@ -62,7 +54,7 @@
                        </a>
                </li>
        </ul>
-{% elif hostname in ("admin.ipfire.org", "nopaste.ipfire.org", "talk.ipfire.org") %}
+{% elif hostname in ("nopaste.ipfire.org", "talk.ipfire.org") %}
        <ul class="nav navbar-nav navbar-right">
                <li class="nav-item">
                        <a class="nav-link" href="/login">
index eca7a0206edcdb4c16d3327e8da4d6551c17acfd..fafccd28e33eab4af611e7a5dbcbc31983ee161d 100644 (file)
@@ -258,34 +258,6 @@ class Application(tornado.web.Application):
                        (r"/avatar/(\w+)\.jpg", accounts.AvatarHandler),
                ])
 
-               # admin.ipfire.org
-               self.add_handlers(r"admin(\.dev)?\.ipfire\.org", [
-                       (r"/", AdminIndexHandler),
-                       # Accounts
-                       (r"/accounts", AdminAccountsHandler),
-                       #(r"/accounts/delete/([0-9]+)", AdminAccountsDeleteHandler),
-                       #(r"/accounts/edit/([0-9]+)", AdminAccountsEditHandler),
-                       # Planet
-                       (r"/planet", AdminPlanetHandler),
-                       (r"/planet/compose", AdminPlanetComposeHandler),
-                       (r"/planet/edit/(.*)", AdminPlanetEditHandler),
-                       (r"/planet/publish/(.*)", AdminPlanetPublishHandler),
-                       # Mirrors
-                       (r"/mirrors", AdminMirrorsHandler),
-                       (r"/mirrors/create", AdminMirrorsCreateHandler),
-                       (r"/mirrors/delete/([0-9]+)", AdminMirrorsDeleteHandler),
-                       (r"/mirrors/edit/([0-9]+)", AdminMirrorsEditHandler),
-                       (r"/mirrors/details/([0-9]+)", AdminMirrorsDetailsHandler),
-                       (r"/mirrors/update", AdminMirrorsUpdateHandler),
-                       # Fireinfo
-                       (r"/fireinfo", AdminFireinfoHandler),
-                       # Downloads
-                       (r"/downloads", AdminDownloadsHandler),
-                       (r"/downloads/mirrors", AdminDownloadsMirrorsHandler),
-                       # API
-                       (r"/api/planet/render", AdminApiPlanetRenderMarkupHandler)
-               ] + authentication_handlers)
-
                # ipfire.org
                self.add_handlers(r"ipfire\.org", [
                        (r".*", tornado.web.RedirectHandler, { "url" : "https://www.ipfire.org" })
index ea8a3b6d99b65c83d554244e392d0d2fedc2f79d..34240838ad066a2a54c977b61520f5c8f41843f0 100644 (file)
@@ -16,7 +16,6 @@ import tornado.gen
 import tornado.web
 #import unicodedata
 
-from .handlers_admin import *
 from .handlers_base import *
 from .handlers_boot import *
 from .handlers_fireinfo import *
diff --git a/src/web/handlers_admin.py b/src/web/handlers_admin.py
deleted file mode 100644 (file)
index aa31b4c..0000000
+++ /dev/null
@@ -1,235 +0,0 @@
-#!/usr/bin/python
-
-import datetime
-import tornado.web
-
-from .handlers_base import *
-
-class AdminBaseHandler(BaseHandler):
-       pass
-
-
-class AdminIndexHandler(AdminBaseHandler):
-       @tornado.web.authenticated
-       def get(self):
-               self.render("admin-index.html")
-
-
-class AdminApiPlanetRenderMarkupHandler(AdminBaseHandler):
-       @tornado.web.authenticated
-       def post(self):
-               text = self.get_argument("text", "")
-
-               # Render markup
-               output = {
-                       "html" : self.planet.render(text),
-               }
-               self.finish(output)
-
-
-class AdminPlanetHandler(AdminBaseHandler):
-       @tornado.web.authenticated
-       def get(self):
-               entries = self.planet.get_entries(status=None, limit=50)
-
-               self.render("admin-planet.html", entries=entries)
-
-
-class AdminPlanetComposeHandler(AdminBaseHandler):
-       @tornado.web.authenticated
-       def get(self, slug=None):
-               entry = None
-
-               if slug:
-                       entry = self.planet.get_entry_by_slug(slug)
-                       if not entry:
-                               raise tornado.web.HTTPError(404)
-
-               self.render("admin-planet-compose.html", entry=entry)
-
-       @tornado.web.authenticated
-       def post(self):
-               title = self.get_argument("title")
-               markdown = self.get_argument("markdown")
-
-               status = self.get_argument("status", "draft")
-               assert status in ("draft", "published")
-
-               entry = self.planet.create(title=title, markdown=markdown,
-                       author=self.current_user, status=status)
-
-               self.redirect("/planet")
-
-
-class AdminPlanetEditHandler(AdminPlanetComposeHandler):
-       @tornado.web.authenticated
-       def post(self, slug):
-               entry = self.planet.get_entry_by_slug(slug)
-               if not entry:
-                       raise tornado.web.HTTPError(404)
-
-               entry.title = self.get_argument("title")
-               entry.markdown = self.get_argument("markdown")
-
-               entry.status = self.get_argument("status", "draft")
-
-               self.redirect("/planet")
-
-
-class AdminPlanetPublishHandler(AdminBaseHandler):
-       @tornado.web.authenticated
-       def get(self, slug):
-               entry = self.planet.get_entry_by_slug(slug)
-               if not entry:
-                       raise tornado.web.HTTPError(404)
-
-               entry.status = "published"
-               entry.published = datetime.datetime.utcnow()
-
-               self.redirect("/planet")
-
-
-class AdminAccountsBaseHandler(AdminBaseHandler):
-       pass
-
-
-class AdminAccountsHandler(AdminAccountsBaseHandler):
-       @tornado.web.authenticated
-       def get(self):
-               accounts = self.accounts.list()
-               self.render("admin-accounts.html", accounts=accounts)
-
-
-class AdminAccountsEditHandler(AdminAccountsBaseHandler):
-       @tornado.web.authenticated
-       def get(self, id):
-               account = self.accounts.search(id)
-               if not account:
-                       raise tornado.web.HTTPError(404)
-
-               self.render("admin-accounts-edit.html", account=account)
-
-
-class AdminAccountsDeleteHandler(AdminAccountsBaseHandler):
-       @tornado.web.authenticated
-       def get(self, id):
-               account = self.accounts.search(id)
-               if not account:
-                       raise tornado.web.HTTPError(404)
-
-               self.accounts.delete(id)
-               self.redirect("/accounts")
-
-
-class AdminMirrorsBaseHandler(AdminBaseHandler):
-       pass
-
-
-class AdminMirrorsHandler(AdminMirrorsBaseHandler):
-       @tornado.web.authenticated
-       def get(self):
-               mirrors = self.mirrors.get_all()
-
-               self.render("admin-mirrors.html", mirrors=mirrors)
-
-
-class AdminMirrorsUpdateHandler(AdminMirrorsBaseHandler):
-       @tornado.web.authenticated
-       def get(self):
-               self.mirrors.check_all()
-               self.redirect("/mirrors")
-
-
-class AdminMirrorsCreateHandler(AdminMirrorsBaseHandler):
-       @tornado.web.authenticated
-       def get(self, id=None):
-               if id:
-                       mirror = self.db.get("SELECT * FROM mirrors WHERE id = %s", id)
-               else:
-                       mirror = tornado.database.Row(
-                               id="",
-                               hostname="",
-                               owner="",
-                               location="",
-                               path="/",
-                               releases="Y",
-                               pakfire2="Y",
-                               pakfire3="Y",
-                               disabled="N"
-                       )
-
-               self.render("admin-mirrors-create.html", mirror=mirror)
-
-       @tornado.web.authenticated
-       def post(self, id=None):
-               args = tornado.database.Row()
-               for key in ("id", "hostname", "owner", "location", "path", "releases",
-                               "pakfire2", "pakfire3", "disabled"):
-                       args[key] = self.get_argument(key, "")
-
-               if args.id:
-                       if not self.mirrors.get(args.id):
-                               raise tornado.web.HTTPError(404)
-
-                       #self.db.execute("""UPDATE mirrors SET
-                       #       hostname = %s, owner = %s, location = %s, path = %s, mirror = %s,
-                       #       pakfire2 = %s, pakfire3 = %s, disabled = %s
-                       #       WHERE id = %s""", args.hostname, args.owner, args.location,
-                       #       args.path, args.mirror, args.pakfire2, args.pakfire3, args.disabled,
-                       #       args.id)
-                       self.db.update("mirrors", args.id, **args)
-
-               else:
-                       #self.db.execute("""INSERT INTO
-                       #       mirrors(hostname, owner, location, path, mirror, pakfire2, pakfire3, disabled)
-                       #       VALUES(%s, %s, %s, %s, %s, %s, %s, %s)""", args.hostname, args.owner,
-                       #       args.location, args.path, args.mirror, args.pakfire2, args.pakfire3, args.disabled)
-                       self.db.insert("mirrors", **args)
-
-               # Update database information
-               self.mirrors.check_all()
-
-               self.redirect("/mirrors")
-
-
-class AdminMirrorsEditHandler(AdminMirrorsCreateHandler):
-       pass
-
-
-class AdminMirrorsDeleteHandler(AdminMirrorsBaseHandler):
-       @tornado.web.authenticated
-       def get(self, id):
-               self.db.execute("DELETE FROM mirrors WHERE id=%s", id)
-               self.db.execute("DELETE FROM mirror_files WHERE mirror=%s", id)
-               self.redirect("/mirrors")
-
-
-class AdminMirrorsDetailsHandler(AdminMirrorsBaseHandler):
-       @tornado.web.authenticated
-       def get(self, id):
-               mirror = self.mirrors.get(id)
-               if not mirror:
-                       raise tornado.web.HTTPError(404)
-
-               self.render("admin-mirrors-details.html", mirror=mirror)
-
-
-class AdminDownloadsHandler(AdminBaseHandler):
-       @tornado.web.authenticated
-       def get(self):
-               self.render("admin-downloads.html",
-                       downloads_total = self.downloads.total,
-                       downloads_today = self.downloads.today,
-                       downloads_yesterday = self.downloads.yesterday,
-                       downloads_locations_today = self.downloads.get_countries("today"),
-                       downloads_locations_total = self.downloads.get_countries(),
-               )
-
-
-class AdminDownloadsMirrorsHandler(AdminBaseHandler):
-       @tornado.web.authenticated
-       def get(self):
-               self.render("admin-downloads-mirrors.html",
-                       mirror_load_total = self.downloads.get_mirror_load(),
-                       mirror_load_today = self.downloads.get_mirror_load("today"),
-               )