Strip non hexadecimal characters from GPG fingerprint input
authorJan Dittberner <jan@dittberner.info>
Tue, 12 Sep 2017 20:13:02 +0000 (22:13 +0200)
committerJan Dittberner <jan@dittberner.info>
Tue, 12 Sep 2017 20:13:02 +0000 (22:13 +0200)
This commit removes non hexadecimal characters from entered GPG
fingerprint values to allow copy and paste from gpg output.

debianmemberportfolio/forms.py

index 11f6b14..d4c87fc 100644 (file)
@@ -28,6 +28,7 @@ from wtforms import IntegerField, StringField, RadioField
 from wtforms.validators import (
     AnyOf, DataRequired, Email, Length, Optional, Regexp
 )
+from string import hexdigits
 
 
 class FingerPrint(Regexp):
@@ -40,10 +41,17 @@ class PlainText(Regexp):
         super(PlainText, self).__init__(r'^[a-zA-Z\-0-9]*$')
 
 
+def gpg_fingerprint(data):
+    if data is not None:
+        return "".join([
+            char for char in str(data) if char.lower() in hexdigits])
+    return data
+
+
 class DeveloperData(FlaskForm):
     email = StringField('email', validators=[DataRequired(), Email()])
     name = StringField('name', validators=[Optional(), DataRequired()])
-    gpgfp = StringField('gpgfp', validators=[
+    gpgfp = StringField('gpgfp', filters=[gpg_fingerprint], validators=[
         Optional(), FingerPrint(), Length(min=32, max=40)
     ])
     username = StringField('username', validators=[Optional(), PlainText()])