diff --git a/ChangeLog b/ChangeLog index 675dbfe..7cb22ef 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +2020-02-22 Jan Dittberner + * Update translations + +2018-05-12 Jan Dittberner + * add patch by Paul Wise to provide Repology information links + * Update translations + +2018-02-09 Jan Dittberner + * add patch by Paul Wise to provide Salsa links + * Update translations + 2015-11-12 Jan Dittberner * port to Python 3 and Flask diff --git a/debianmemberportfolio/forms.py b/debianmemberportfolio/forms.py index 4c9612e..24872ee 100644 --- a/debianmemberportfolio/forms.py +++ b/debianmemberportfolio/forms.py @@ -1,11 +1,34 @@ +# -*- python -*- +# -*- coding: utf-8 -*- +# +# Debian Member Portfolio Service views +# +# Copyright © 2015-2020 Jan Dittberner +# +# This file is part of the Debian Member Portfolio Service. +# +# Debian Member Portfolio Service is free software: you can redistribute it +# and/or modify it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the License, +# or (at your option) any later version. +# +# Debian Member Portfolio Service is distributed in the hope that it will be +# useful, but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero +# General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# from __future__ import unicode_literals from flask_babel import gettext as _ -from flask_wtf import Form +from flask_wtf import FlaskForm from wtforms import IntegerField, StringField, RadioField from wtforms.validators import ( AnyOf, DataRequired, Email, Length, Optional, Regexp ) +from string import hexdigits class FingerPrint(Regexp): @@ -18,16 +41,24 @@ class PlainText(Regexp): super(PlainText, self).__init__(r'^[a-zA-Z\-0-9]*$') -class DeveloperData(Form): +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=[DataRequired()]) - gpgfp = StringField('gpgfp', validators=[ - FingerPrint(), - Length(min=32, max=40) + name = StringField('name', validators=[Optional(), DataRequired()]) + gpgfp = StringField('gpgfp', filters=[gpg_fingerprint], validators=[ + Optional(), FingerPrint(), Length(min=32, max=40) + ]) + username = StringField('username', validators=[Optional(), PlainText()]) + nonddemail = StringField('nonddemail', validators=[Optional(), Email()]) + salsausername = StringField('salsausername', validators=[ + Optional(), PlainText() ]) - username = StringField('username', validators=[PlainText()]) - nonddemail = StringField('nonddemail', validators=[Email()]) - aliothusername = StringField('aliothusername', validators=[PlainText()]) mode = RadioField( 'mode', default='html', choices=[ ('json', _('JSON')), ('html', _('HTML')) @@ -38,5 +69,5 @@ class DeveloperData(Form): Optional()]) -class DeveloperDataRequest(Form): +class DeveloperDataRequest(FlaskForm): email = StringField('email', validators=[DataRequired(), Email()]) diff --git a/debianmemberportfolio/model/portfolio.ini b/debianmemberportfolio/model/portfolio.ini index 3a45504..7cf278a 100644 --- a/debianmemberportfolio/model/portfolio.ini +++ b/debianmemberportfolio/model/portfolio.ini @@ -1,7 +1,7 @@ # # Configuration for Debian Member Portfolio Service # -# Copyright © 2009-2014 Jan Dittberner +# Copyright © 2009-2020 Jan Dittberner # # This file is part of the Debian Member Portfolio Service. # @@ -44,19 +44,19 @@ urls=buildd buildd.pattern=https://buildd.debian.org/status/package.php?p=%(email)s&compact=compact&comaint=yes [qa] -urls=lintian,lintianfull,piuparts,patchtracker,dmd,duck +urls=lintian,lintianfull,piuparts,patchtracker,dmd,duck,janitor dmd.pattern=https://udd.debian.org/dmd.cgi?email1=%(email)s lintian.pattern=https://lintian.debian.org/maintainer/%(email)s.html lintianfull.pattern=https://lintian.debian.org/full/%(email)s.html piuparts.pattern=https://piuparts.debian.org/sid/maintainer/%(firstchar)s/%(email)s.html patchtracker.pattern=http://patch-tracker.debian.org/email/%(email)s duck.pattern=http://duck.debian.net/persons/%(email)s.html +janitor.pattern=https://janitor.debian.net/m/%(email)s [lists] -urls=dolists,adolists,gmane +urls=dolists,adolists dolists.pattern=https://lists.debian.org/cgi-bin/search?P="%%22%(name)s%%22&SORT=0 adolists.pattern=https://www.google.com/search?q=site%%3Alists.alioth.debian.org+%%22%(name)s%%22 -gmane.pattern=http://search.gmane.org/?email=%(name)s&group=gmane.linux.debian.* # debconf list search has a tricky URL format # http://lists.debconf.org/lurker/search \ # /20100510.202949.00000000@au:%(firstname)s,au:%(lastname)s.en.html @@ -69,7 +69,7 @@ people.pattern=https://people.debian.org/~%(username)s/ people.optional=true [membership] -urls=nm,dbfinger,db,webid,alioth,wiki,forum +urls=nm,dbfinger,db,webid,salsa,wiki,forum nm.pattern=https://nm.debian.org/public/nmstatus/%(username)s dbfinger.pattern=finger %(username)s@db.debian.org dbfinger.type=finger @@ -78,14 +78,14 @@ db.pattern=https://db.debian.org/search.cgi?uid=%(username)s&dosearch=Search db.optional=true webid.pattern=http://webid.debian.net/maintainers/%(username)s webid.optional=true -alioth.pattern=https://alioth.debian.org/users/%(aliothusername)s/ -alioth.optional=true +salsa.pattern=https://salsa.debian.org/%(salsausername)s +salsa.optional=true wiki.pattern=https://wiki.debian.org/%(wikihomepage)s forum.pattern=http://forums.debian.net/memberlist.php?mode=viewprofile&u=%(forumsid)s forum.optional=true [miscellaneous] -urls=debtags,links,planetname,planetuser,website,search,gpgfinger,gpgweb,contrib +urls=debtags,links,planetname,planetuser,website,search,gpgfinger,gpgweb,contrib,repology debtags.pattern=https://debtags.debian.org/reports/maint/%(email)s planetname.pattern=https://planet-search.debian.org/cgi-bin/search.cgi?terms=%%22%(name)s%%22 planetuser.pattern=https://planet-search.debian.org/cgi-bin/search.cgi?terms=%%22%(username)s%%22 @@ -101,6 +101,8 @@ gpgweb.optional=true nm.pattern=https://nm.debian.org/public/person/%(username)s contrib.pattern=https://contributors.debian.org/contributor/%(email)s contrib.optional=true +repology.pattern=https://repology.org/maintainer/%(email)s +repology.optional=true [ssh] # SSH functions diff --git a/debianmemberportfolio/model/urlbuilder.py b/debianmemberportfolio/model/urlbuilder.py index f948ddc..cb2f33f 100644 --- a/debianmemberportfolio/model/urlbuilder.py +++ b/debianmemberportfolio/model/urlbuilder.py @@ -3,7 +3,7 @@ # # Debian Member Portfolio Service url builder # -# Copyright © 2009-2015 Jan Dittberner +# Copyright © 2009-2020 Jan Dittberner # # This file is part of the Debian Member Portfolio Service. # @@ -45,7 +45,7 @@ _FIELDNAMES_MAP = { 'gpgfp': N_('GPG fingerprint'), 'username': N_('Debian user name'), 'nonddemail': N_('Non Debian email address'), - 'aliothusername': N_('Alioth user name'), + 'salsausername': N_('Salsa user name'), } @@ -73,7 +73,7 @@ def _build_quoted_fields(fields): qfields[key] = quote_plus(value) else: qfields[key] = value - qfields[key] = qfields[key].replace('%', '%%') + qfields[key] = str(qfields[key]).replace('%', '%%') if 'gpgfp' not in qfields: fpr = keyfinder.getFingerprintByEmail(fields['email'].encode('utf8')) diff --git a/debianmemberportfolio/templates/base.html b/debianmemberportfolio/templates/base.html index b2a7903..82986b7 100644 --- a/debianmemberportfolio/templates/base.html +++ b/debianmemberportfolio/templates/base.html @@ -2,7 +2,7 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> {# vim: ft=jinja Base template for XHTML templates. -Copyright © 2009-2017 Jan Dittberner +Copyright © 2009-2020 Jan Dittberner This file is part of the Debian Member Portfolio service. @@ -37,8 +37,8 @@ with this program. If not, see .