summaryrefslogtreecommitdiff
path: root/main/models.py
diff options
context:
space:
mode:
authorDan McGee <dan@archlinux.org>2012-03-08 11:36:18 -0600
committerDan McGee <dan@archlinux.org>2012-03-08 11:36:18 -0600
commit7edc58c89c78d2e7c4f646e4b8562bc52ad7218d (patch)
tree3bdbb042e847c5ab0261d491573c39b02a5cff53 /main/models.py
parent314608aee372c890031cd89f556327a93a2538e6 (diff)
Show signature data on package details page
Now that we have a way to decode and process the signature data, we can match the key_id to a known developer if possible and show this data on the package page. Signed-off-by: Dan McGee <dan@archlinux.org>
Diffstat (limited to 'main/models.py')
-rw-r--r--main/models.py35
1 files changed, 29 insertions, 6 deletions
diff --git a/main/models.py b/main/models.py
index 15a92662..4f2d64ea 100644
--- a/main/models.py
+++ b/main/models.py
@@ -1,3 +1,9 @@
+from base64 import b64decode
+from datetime import datetime
+from itertools import groupby
+from pgpdump import BinaryData
+import pytz
+
from django.db import models
from django.contrib.auth.models import User
from django.contrib.sites.models import Site
@@ -5,10 +11,6 @@ from django.contrib.sites.models import Site
from .fields import PositiveBigIntegerField, PGPKeyField
from .utils import cache_function, make_choice, set_created_field
-from datetime import datetime
-from itertools import groupby
-import pytz
-
class UserProfile(models.Model):
notify = models.BooleanField(
@@ -183,8 +185,29 @@ class Package(models.Model):
domain = Site.objects.get_current().domain
return '%s://%s%s' % (proto, domain, self.get_absolute_url())
- def is_signed(self):
- return bool(self.pgp_signature)
+ @property
+ @cache_function(15)
+ def signature(self):
+ try:
+ data = b64decode(self.pgp_signature)
+ except TypeError:
+ return None
+ data = BinaryData(data)
+ packets = list(data.packets())
+ return packets[0]
+
+ @property
+ @cache_function(15)
+ def signer(self):
+ sig = self.signature
+ if sig and sig.key_id:
+ try:
+ user = User.objects.get(
+ userprofile__pgp_key__endswith=sig.key_id)
+ except User.DoesNotExist:
+ user = None
+ return user
+ return None
_maintainers = None