src/templates/index.html \
src/templates/jobs-abort.html \
src/templates/jobs-buildroot.html \
- src/templates/keys-delete.html \
- src/templates/keys-import.html \
- src/templates/keys-list.html \
src/templates/log.html \
src/templates/login.html \
src/templates/package-properties.html \
def length(self):
return self.data.length
+ @property
+ def public_key(self):
+ return self.data.public_key
+
# Subkeys
@lazy_property
<li>
<a href="/mirrors">{{ _("Mirrors") }}</a>
</li>
- <li>
- <a href="/keys">{{ _("Key Management") }}</a>
- </li>
{% if current_user %}
<li>
<a href="/users">{{ _("Users") }}</a>
+++ /dev/null
-{% extends "base.html" %}
-
-{% block title %}{{ _("Delete key %s") % key.uids }}{% end block %}
-
-{% block body %}
- <ul class="breadcrumb">
- <li>
- <a href="/">{{ _("Home") }}</a>
- <span class="divider">/</span>
- </li>
- <li>
- <a href="/keys">{{ _("Key Management") }}</a>
- <span class="divider">/</span>
- </li>
- <li>
- <a href="/key/{{ key.fingerprint }}">{{ key.fingerprint }}</a>
- <span class="divider">/</span>
- </li>
- <li class="active">
- <a href="/key/{{ key.fingerprint }}/delete">{{ _("Delete") }}</a>
- </li>
- </ul>
-
- <div class="page-header">
- <h2>{{ _("Key") }}: {{ key.fingerprint }}</h2>
- </div>
-
- <p>
- {{ _("You are going to delete the key %s.") % key.fingerprint }}
- </p>
-
- <ul>
- {% for uid in key.uids %}
- <li>{{ uid }}</li>
- {% end %}
- </ul>
-
- <div class="btn-toolbar">
- <div class="btn-group pull-right">
- <a class="btn btn-danger" href="/key/{{ key.fingerprint }}/delete?confirmed=1">
- {{ _("Delete key") }}
- </a>
- <a class="btn" href="/keys">{{ _("Cancel") }}</a>
- </div>
- </div>
-
- <br class="clear">
-{% end block %}
+++ /dev/null
-{% extends "base.html" %}
-
-{% block title %}{{ _("Import new key") }}{% end block %}
-
-{% block body %}
- <ul class="breadcrumb">
- <li>
- <a href="/">{{ _("Home") }}</a>
- <span class="divider">/</span>
- </li>
- <li>
- <a href="/keys">{{ _("Key Management") }}</a>
- <span class="divider">/</span>
- </li>
- <li class="active">
- <a href="/key/import">{{ _("Import new key") }}</a>
- </li>
- </ul>
-
- <div class="page-header">
- <h2>{{ _("Import a new key") }}</h2>
- </div>
-
- <form class="form-horizontal" method="POST" action="">
- {% raw xsrf_form_html() %}
- <fieldset>
- <div class="control-group">
- <label class="control-label" for="data">{{ _("Key") }}</label>
- <div class="controls">
- <textarea name="data" id="data" rows="7"></textarea>
-
- <p class="help-block">
- {{ _("Paste the key to import.") }}
- </p>
- </div>
- </div>
-
- <div class="form-actions">
- <button type="submit" class="btn btn-primary">{{ _("Import new key") }}</button>
- </div>
- </fieldset>
- </form>
-{% end block %}
+++ /dev/null
-{% extends "base.html" %}
-
-{% block title %}{{ _("Key Management") }}{% end block %}
-
-{% block body %}
- <ul class="breadcrumb">
- <li>
- <a href="/">{{ _("Home") }}</a>
- <span class="divider">/</span>
- </li>
- <li class="active">
- <a href="/keys">{{ _("Key Management") }}</a>
- </li>
- </ul>
-
- <div class="page-header">
- <h2>{{ _("Key Management") }}</h2>
- </div>
-
- <p>
- {{ _("The keys are a very important component when it comes to security.") }}
- {{ _("Each package in the Pakfire Build Service is signed to prove its authenticity.") }}
- </p>
-
- <hr>
-
- <table class="table">
- <thead>
- <tr>
- <th colspan="2"> </th>
- <th>{{ _("Fingerprint") }}</th>
- <th>{{ _("Created") }}</th>
- <th>{{ _("Expires") }}</th>
- </tr>
- </thead>
-
- <tbody>
- {% for key in keys %}
- <tr>
- <td colspan="4">
- <strong>
- {% for uid in key.uids %}
- {{ uid }}<br />
- {% end %}
- </strong>
- </td>
- <td>
- <div class="btn-group">
- <a class="btn btn-mini" href="http://pgp.mit.edu:11371/pks/lookup?op=vindex&search=0x{{ key.fingerprint }}" target="_blank">
- <i class="icon-search"></i>
- {{ _("Lookup") }}
- </a>
- <a class="btn btn-mini" href="/key/{{ key.fingerprint }}">
- <i class="icon-download"></i>
- {{ _("Download") }}
- </a>
- </div>
-
- {% if key.has_perm(current_user) and key.can_be_deleted() %}
- <div class="btn-group">
- <a class="btn btn-mini btn-danger" href="/key/{{ key.fingerprint }}/delete">
- <i class="icon-trash icon-white"></i>
- {{ _("Remove") }}
- </a>
- </div>
- {% end %}
- </td>
- </tr>
-
- {% for subkey in key.subkeys %}
- <tr>
- <td> </td>
- <td>
- {% if subkey.algo %}
- {{ _("Subkey") }} ({{ subkey.algo }}):
- {% else %}
- {{ _("Subkey") }}:
- {% end %}
- </td>
- <td>{{ subkey.fingerprint }}</td>
- <td>{{ format_date(subkey.time_created) }}</td>
- <td>
- {% if subkey.time_expires %}
- {% if subkey.expired %}
- <i class="icon-warning-sign"></i>
- {% end %}
-
- {{ format_date(subkey.time_expires, full_format=True) }}
- {% else %}
- {{ _("This key does not expire.") }}
- {% end %}
- </td>
- </tr>
- {% end %}
-
- <tr>
- <td colspan="5"> </td>
- </tr>
- {% end %}
- </tbody>
- </table>
-
- {% if current_user and current_user.is_admin() %}
- <a class="btn btn-danger pull-right" href="/key/import">
- <i class="icon-star icon-white"></i>
- {{ _("Import new key") }}
- </a>
- {% end %}
-{% end block %}
(r"/mirror/([\w\-\.]+)/edit", mirrors.MirrorEditHandler),
(r"/mirror/([\w\-\.]+)", mirrors.MirrorDetailHandler),
- # Key management
- (r"/keys", keys.KeysListHandler),
- (r"/key/import", keys.KeysImportHandler),
- (r"/key/([A-Z0-9]+)", keys.KeysDownloadHandler),
- (r"/key/([A-Z0-9]+)/delete", keys.KeysDeleteHandler),
+ # Keys
+ (r"/keys/([A-Z0-9]+)", keys.DownloadHandler),
# Search
(r"/search", search.SearchHandler),
-#!/usr/bin/python
+#!/usr/bin/python3
import tornado.web
from . import base
-class KeysActionHandler(base.BaseHandler):
- pass
-
-class KeysImportHandler(KeysActionHandler):
- @tornado.web.authenticated
- def get(self):
- self.render("keys-import.html")
-
- @tornado.web.authenticated
- def post(self):
- data = self.get_argument("data")
-
- # Check permissions
- if not key.has_perm(self.current_user):
- raise tornado.web.HTTPError(403)
-
- key = self.backend.keys.create(data)
- assert key
-
- self.redirect("/keys")
-
-
-class KeysDeleteHandler(KeysActionHandler):
- @tornado.web.authenticated
- def get(self, fingerprint):
- key = self.backend.keys.get_by_fpr(fingerprint)
- if not key:
- raise tornado.web.HTTPError(404, "Could not find key: %s" % fingerprint)
-
- # Check permissions
- if not key.has_perm(self.current_user):
- raise tornado.web.HTTPError(403)
-
- confirmed = self.get_argument("confirmed", False)
- if confirmed:
- key.delete()
-
- return self.redirect("/keys")
-
- self.render("keys-delete.html", key=key)
-
-
-class KeysListHandler(base.BaseHandler):
- def get(self):
- self.render("keys-list.html", keys=self.backend.keys)
-
-
-class KeysDownloadHandler(base.BaseHandler):
+class DownloadHandler(base.BaseHandler):
def get(self, fingerprint):
- key = self.backend.keys.get_by_fpr(fingerprint)
+ key = self.backend.keys.get_by_fingerprint(fingerprint)
if not key:
- raise tornado.web.HTTPError(404, "Could not find key: %s" % fingerprint)
+ raise tornado.web.HTTPError(404, "Could not find key %s" % fingerprint)
- # Send the key data.
+ # Send the key data
self.set_header("Content-Type", "text/plain")
- self.write(key.key)
+ self.finish(key.public_key)