summaryrefslogtreecommitdiffstats
path: root/askbot/utils
diff options
context:
space:
mode:
authorEvgeny Fadeev <evgeny.fadeev@gmail.com>2012-08-22 09:49:53 -0400
committerEvgeny Fadeev <evgeny.fadeev@gmail.com>2012-08-22 09:49:53 -0400
commit260305720861c09a37373bf00689c9ea4e51f1cc (patch)
tree06d2c690431217e490ad99bce281feb8c38d144f /askbot/utils
parent7e5c66a4bd37720d24ff86b87ac5d81b89340d39 (diff)
parenta485a301207f401dc9a8d838bcb3442fdbe8bccd (diff)
downloadaskbot-260305720861c09a37373bf00689c9ea4e51f1cc.tar.gz
askbot-260305720861c09a37373bf00689c9ea4e51f1cc.tar.bz2
askbot-260305720861c09a37373bf00689c9ea4e51f1cc.zip
completed merge of user-groups with tag-editor, not tested yet
Diffstat (limited to 'askbot/utils')
-rw-r--r--askbot/utils/forms.py55
1 files changed, 47 insertions, 8 deletions
diff --git a/askbot/utils/forms.py b/askbot/utils/forms.py
index a26fbcd5..f607e62b 100644
--- a/askbot/utils/forms.py
+++ b/askbot/utils/forms.py
@@ -7,6 +7,7 @@ from django.utils.translation import ugettext as _
from django.utils.safestring import mark_safe
from askbot.conf import settings as askbot_settings
from askbot.utils.slug import slugify
+from askbot.utils.functions import split_list
from askbot import const
import logging
import urllib
@@ -141,25 +142,63 @@ class UserNameField(StrippedNonEmptyCharField):
logging.debug('error - user with this name already exists')
raise forms.ValidationError(self.error_messages['multiple-taken'])
+
+def email_is_allowed(
+ email, allowed_emails='', allowed_email_domains=''
+):
+ """True, if email address is pre-approved or matches a allowed
+ domain"""
+ if allowed_emails:
+ email_list = split_list(allowed_emails)
+ allowed_emails = ' ' + ' '.join(email_list) + ' '
+ email_match_re = re.compile(r'\s%s\s' % email)
+ if email_match_re.search(allowed_emails):
+ return True
+
+ if allowed_email_domains:
+ email_domain = email.split('@')[1]
+ domain_list = split_list(allowed_email_domains)
+ domain_match_re = re.compile(r'\s%s\s' % email_domain)
+ allowed_email_domains = ' ' + ' '.join(domain_list) + ' '
+ return domain_match_re.search(allowed_email_domains)
+
+ return False
+
class UserEmailField(forms.EmailField):
def __init__(self,skip_clean=False,**kw):
self.skip_clean = skip_clean
- super(UserEmailField,self).__init__(widget=forms.TextInput(attrs=dict(login_form_widget_attrs,
- maxlength=200)), label=mark_safe(_('Your email <i>(never shared)</i>')),
- error_messages={'required':_('email address is required'),
- 'invalid':_('please enter a valid email address'),
- 'taken':_('this email is already used by someone else, please choose another'),
- },
+ super(UserEmailField,self).__init__(
+ widget=forms.TextInput(
+ attrs=dict(login_form_widget_attrs, maxlength=200)
+ ),
+ label=mark_safe(_('Your email <i>(never shared)</i>')),
+ error_messages={
+ 'required':_('email address is required'),
+ 'invalid':_('please enter a valid email address'),
+ 'taken':_('this email is already used by someone else, please choose another'),
+ 'unauthorized':_('this email address is not authorized')
+ },
**kw
- )
+ )
- def clean(self,email):
+ def clean(self, email):
""" validate if email exist in database
from legacy register
return: raise error if it exist """
email = super(UserEmailField,self).clean(email.strip())
if self.skip_clean:
return email
+
+ allowed_domains = askbot_settings.ALLOWED_EMAIL_DOMAINS.strip()
+ allowed_emails = askbot_settings.ALLOWED_EMAILS.strip()
+
+ if allowed_emails or allowed_domains:
+ if not email_is_allowed(
+ email,
+ allowed_emails=allowed_emails,
+ allowed_email_domains=allowed_domains
+ ):
+ raise forms.ValidationError(self.error_messages['unauthorized'])
if askbot_settings.EMAIL_UNIQUE == True:
try:
user = User.objects.get(email = email)