[PATCH] Parse, display and store gpg key ids.

Serafeim Zanikolas serzan at hellug.gr
Tue Feb 3 00:56:26 CET 2009


---
 debexpo/controllers/my.py |    6 ++++--
 debexpo/lib/validators.py |   12 ++++++++++++
 debexpo/model/users.py    |    1 +
 3 files changed, 17 insertions(+), 2 deletions(-)

diff --git a/debexpo/controllers/my.py b/debexpo/controllers/my.py
index 32953b5..eea715f 100644
--- a/debexpo/controllers/my.py
+++ b/debexpo/controllers/my.py
@@ -41,6 +41,7 @@ import md5
 from debexpo.lib.base import *
 from debexpo.lib import constants, form
 from debexpo.lib.schemas import DetailsForm, GpgForm, PasswordForm, OtherDetailsForm
+from debexpo.lib.utils import parse_key_id
 
 from debexpo.model import meta
 from debexpo.model.users import User
@@ -92,11 +93,13 @@ class MyController(BaseController):
         if self.form_result['delete_gpg'] and self.user.gpg is not None:
             log.debug('Deleting current GPG key')
             self.user.gpg = None
+            self.user.gpg_id = None
 
         # Should the key be updated.
         if 'gpg' in self.form_result and self.form_result['gpg'] is not None:
             log.debug('Setting a new GPG key')
             self.user.gpg = self.form_result['gpg'].value
+            self.user.gpg_id = parse_key_id(self.user.gpg)
 
         meta.session.commit()
 
@@ -207,8 +210,7 @@ class MyController(BaseController):
 
         # Enable the form to show information on the user's GPG key.
         if self.user.gpg is not None:
-            # TODO: Make this display the right key ID.
-            c.currentgpg = '0xXXXXXX'
+            c.currentgpg = c.user.gpg_id
 
         log.debug('Rendering page')
         return render('/my/index.mako')
diff --git a/debexpo/lib/validators.py b/debexpo/lib/validators.py
index e13bbfc..7c191ad 100644
--- a/debexpo/lib/validators.py
+++ b/debexpo/lib/validators.py
@@ -40,6 +40,7 @@ import logging
 import md5
 
 from debexpo.lib.base import *
+from debexpo.lib.utils import parse_key_id
 
 from debexpo.model import meta
 from debexpo.model.users import User
@@ -52,6 +53,9 @@ class GpgKey(formencode.validators.FieldStorageUploadConverter):
     text.
     """
 
+    def __init__(self):
+        self.gpg_id = None
+
     def _to_python(self, value, c):
         """
         Validate the GPG key.
@@ -65,8 +69,16 @@ class GpgKey(formencode.validators.FieldStorageUploadConverter):
             log.error('GPG key does not start with BEGIN PGP PUBLIC KEY BLOCK')
             raise formencode.Invalid(_('Invalid GPG key'), value, c)
 
+        self.gpg_id = parse_key_id(value.value)
+        if self.gpg_id is None:
+            log.error("Failed to parse GPG key")
+            raise formencode.Invalid(_('Invalid GPG key'), value, c)
+
         return formencode.validators.FieldStorageUploadConverter._to_python(self, value, c)
 
+    def key_id(self):
+        return self.gpg_id
+
 class CurrentPassword(formencode.validators.String):
     """
     Validator for a current password depending on the session's user_id.
diff --git a/debexpo/model/users.py b/debexpo/model/users.py
index a141300..c87df58 100644
--- a/debexpo/model/users.py
+++ b/debexpo/model/users.py
@@ -47,6 +47,7 @@ t_users = sa.Table('users', meta.metadata,
     sa.Column('name', sa.types.String(200), nullable=False),
     sa.Column('email', sa.types.String(200), nullable=False),
     sa.Column('gpg', sa.types.Text, nullable=True),
+    sa.Column('gpg_id', sa.types.String(30), nullable=True),
     sa.Column('password', sa.types.String(200), nullable=False),
     sa.Column('lastlogin', sa.types.DateTime, nullable=False),
     sa.Column('type', sa.types.Integer, nullable=False, default=USER_TYPE_NORMAL),
-- 
1.5.6.5


--LwW0XdcUbUexiWVK--


More information about the debexpo-devel mailing list