Skip to content
Snippets Groups Projects
Verified Commit b23c2c48 authored by Frank Sauerburger's avatar Frank Sauerburger
Browse files

Display open pgp key data

parent 8578f31c
Branches 29-hkp-download-link-broken
No related tags found
1 merge request!2Resolve "Decode OpenPGP and display details"
This commit is part of merge request !2. Comments created here will be created in the context of that merge request.
......@@ -15,7 +15,6 @@ from pathlib import Path
# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent
# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/3.1/howto/deployment/checklist/
......
......@@ -20,5 +20,6 @@ urlpatterns = [
path('pki/', include('owlca.urls')),
path('pgp/', include('pgp.urls')),
path('ssh/', include('ssh.urls')),
path('pks/', include('hkp.urls')),
path('admin/', admin.site.urls),
]
......@@ -31,6 +31,47 @@ class PublicKey(models.Model):
def details(self):
self._decode()
return self.decoded
def get_exp(created, expires_at):
if not expires_at:
return None
return created + expires_at
data = {
"userids": [{
"email": userid.email,
"name": userid.name,
"comment": userid.comment,
"signatures": [{
"created": sig.created,
"expires_at": get_exp(sig.created, sig.expires_at),
"signer": sig.signer,
} for sig in userid._signatures],
} for userid in self.decoded.userids],
"fingerprint": self.decoded.fingerprint,
"id": re.sub("\s+", "", self.decoded.fingerprint[-8:]),
"created": self.decoded.created,
"expires_at": self.decoded.expires_at,
"signatures": [{
"created": sig.created,
"expires_at": get_exp(sig.created, sig.expires_at),
"signer": sig.signer,
} for sig in self.decoded._signatures],
"subkeys": [{
"fingerprint": subkey.fingerprint,
"created": subkey.created,
"expires_at": subkey.expires_at,
"signatures": [{
"created": sig.created,
"expires_at": get_exp(subkey.created, sig.key_expiration),
"signer": sig.signer,
}
for sig in subkey._signatures
if sig.type == pgpy.constants.SignatureType.Subkey_Binding],
} for id, subkey in self.decoded.subkeys.items()],
}
return data
def __str__(self):
keyid = f" (0x{self.keyid[-8:]})" if self.keyid else ""
return f"{self.email}{keyid}"
......@@ -2,5 +2,42 @@
{% block content %}
<h2>Public key for: {{ publickey.email }}</h2>
<pre>{{ publickey.armor }}</pre>
<pre>
gpg2 --keyserver hkp://{{ request.get_host }} --recv-key 0x{{ publickey.details.id }}
</pre>
<p>
<span style="font-family: monospace; font-weight: bold">{{ publickey.details.fingerprint }}
{% for sig in publickey.details.signatures %}
<span style="font-family: monospace">{{ sig.signer }}</span>
({{ sig.created|date:"Y-m-d" }} &ndash; {{ sig.expires_at|date:"Y-m-d"|default:"never" }})<br />
{% endfor %}
</p>
<h3>User Ids</h3>
<ul>
{% for uid in publickey.details.userids %}
<li>
{{ uid.name }}
{% if uid.comment %}({{ uid.comment }}) {% endif %}
&lt;<a href="mailto:{{ uid.email }}">{{ uid.email }}</a>&gt;<br>
{% for sig in uid.signatures %}
<span style="font-family: monospace">{{ sig.signer }}</span>
({{ sig.created|date:"Y-m-d" }} &ndash; {{ sig.expires_at|date:"Y-m-d"|default:"never" }})<br />
{% endfor %}
</li>
{% endfor %}
</ul>
<h3>Subkeys</h3>
<ul>
{% for key in publickey.details.subkeys %}
<li>
<span style="font-family: monospace; font-weight: bold">{{ key.fingerprint }}</span><br />
{% for sig in key.signatures %}
<span style="font-family: monospace">{{ sig.signer }}</span>
({{ sig.created|date:"Y-m-d" }} &ndash; {{ sig.expires_at|date:"Y-m-d"|default:"never" }})<br />
{% endfor %}
</li>
{% endfor %}
</ul>
<h3>Key data</h3>
<textarea cols="80" rows="20" readonly>{{ publickey.armor }}</textarea>
{% endblock %}
......@@ -8,6 +8,13 @@ from guardian.utils import get_anonymous_user
from . import models
from . import forms
from django import template
register = template.Library()
@register.simple_tag
def get_private_attribute(model_instance, attrib_name):
return getattr(model_instance, attrib_name, '')
class PublicKeyListView(PermissionListMixin, ListView):
model = models.PublicKey
permission_required = ['view_publickey']
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment