Commit | Line | Data |
---|---|---|
7cb7653c RE |
1 | # GNU MediaGoblin -- federated, autonomous media hosting |
2 | # Copyright (C) 2011, 2012 MediaGoblin contributors. See AUTHORS. | |
3 | # | |
4 | # This program is free software: you can redistribute it and/or modify | |
5 | # it under the terms of the GNU Affero General Public License as published by | |
6 | # the Free Software Foundation, either version 3 of the License, or | |
7 | # (at your option) any later version. | |
8 | # | |
9 | # This program is distributed in the hope that it will be useful, | |
10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of | |
11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
12 | # GNU Affero General Public License for more details. | |
13 | # | |
14 | # You should have received a copy of the GNU Affero General Public License | |
15 | # along with this program. If not, see <http://www.gnu.org/licenses/>. | |
16 | ||
17 | import wtforms | |
18 | ||
19 | from mediagoblin.tools.mail import normalize_email | |
20 | from mediagoblin.tools.translate import lazy_pass_to_ugettext as _ | |
21 | ||
22 | ||
23 | def normalize_user_or_email_field(allow_email=True, allow_user=True): | |
24 | """ | |
25 | Check if we were passed a field that matches a username and/or email | |
26 | pattern. | |
27 | ||
28 | This is useful for fields that can take either a username or email | |
29 | address. Use the parameters if you want to only allow a username for | |
30 | instance""" | |
31 | message = _(u'Invalid User name or email address.') | |
32 | nomail_msg = _(u"This field does not take email addresses.") | |
33 | nouser_msg = _(u"This field requires an email address.") | |
34 | ||
35 | def _normalize_field(form, field): | |
36 | email = u'@' in field.data | |
37 | if email: # normalize email address casing | |
38 | if not allow_email: | |
39 | raise wtforms.ValidationError(nomail_msg) | |
40 | wtforms.validators.Email()(form, field) | |
41 | field.data = normalize_email(field.data) | |
42 | else: # lower case user names | |
43 | if not allow_user: | |
44 | raise wtforms.ValidationError(nouser_msg) | |
45 | wtforms.validators.Length(min=3, max=30)(form, field) | |
46 | wtforms.validators.Regexp(r'^\w+$')(form, field) | |
47 | field.data = field.data.lower() | |
48 | if field.data is None: # should not happen, but be cautious anyway | |
49 | raise wtforms.ValidationError(message) | |
50 | return _normalize_field |