Browse Source

Finished validate_banned for usernames and emails

Rafał Pitoń 11 years ago
parent
commit
6d65a6f082
3 changed files with 31 additions and 16 deletions
  1. 2 2
      misago/users/models.py
  2. 28 14
      misago/users/validators.py
  3. 1 0
      misago/users/views/bansadmin.py

+ 2 - 2
misago/users/models.py

@@ -298,7 +298,7 @@ class BansManager(models.Manager):
     def is_email_banned(self, email):
     def is_email_banned(self, email):
         return self.check_ban(email=email)
         return self.check_ban(email=email)
 
 
-    def check_ban(self, username=None, email=None, ip=None):
+    def find_ban(self, username=None, email=None, ip=None):
         tests = []
         tests = []
 
 
         if username:
         if username:
@@ -308,7 +308,7 @@ class BansManager(models.Manager):
         if ip:
         if ip:
             tests.append(BAN_IP)
             tests.append(BAN_IP)
 
 
-        queryset = self.filter(is_valid=False)
+        queryset = self.filter(is_valid=True)
         if len(tests) == 1:
         if len(tests) == 1:
             queryset = queryset.filter(test=tests[0])
             queryset = queryset.filter(test=tests[0])
         elif tests:
         elif tests:

+ 28 - 14
misago/users/validators.py

@@ -12,25 +12,32 @@ USERNAME_RE = re.compile(r'^[0-9a-z]+$', re.IGNORECASE)
 """
 """
 Email validators
 Email validators
 """
 """
-def validate_email_available(value):
+def validate_email_available(value, exclude=None):
     User = get_user_model()
     User = get_user_model()
-
     try:
     try:
-        User.objects.get_by_email(value)
+        user = User.objects.get_by_email(value)
     except User.DoesNotExist:
     except User.DoesNotExist:
         pass
         pass
     else:
     else:
-        raise ValidationError(_("This e-mail address is not available."))
+        if not exclude or user.pk != exclude.pk:
+            raise ValidationError(_("This e-mail address is not available."))
 
 
 
 
 def validate_email_banned(value):
 def validate_email_banned(value):
-    """TODO for when bans will be reimplemented from 0.5"""
+    from misago.users.models import Ban
+    email_ban = Ban.objects.find_ban(email=value)
+
+    if email_ban:
+        if email_ban.user_message:
+            raise ValidationError(email_ban.user_message)
+        else:
+            raise ValidationError(_("This e-mail address is not allowed."))
 
 
 
 
-def validate_email(value):
+def validate_email(value, exclude=None):
     """shortcut function that does complete validation of email"""
     """shortcut function that does complete validation of email"""
     validate_email_content(value)
     validate_email_content(value)
-    validate_email_available(value)
+    validate_email_available(value, exclude)
     validate_email_banned(value)
     validate_email_banned(value)
 
 
 
 
@@ -50,19 +57,26 @@ def validate_password(value):
 """
 """
 Username validators
 Username validators
 """
 """
-def validate_username_available(value):
+def validate_username_available(value, exclude=None):
     User = get_user_model()
     User = get_user_model()
-
     try:
     try:
-        User.objects.get_by_username(value)
+        user = User.objects.get_by_username(value)
     except User.DoesNotExist:
     except User.DoesNotExist:
         pass
         pass
     else:
     else:
-        raise ValidationError(_("This username is not available."))
+        if not exclude or user.pk != exclude.pk:
+            raise ValidationError(_("This username is not available."))
 
 
 
 
 def validate_username_banned(value):
 def validate_username_banned(value):
-    """TODO for when bans will be reimplemented from 0.5"""
+    from misago.users.models import Ban
+    username_ban = Ban.objects.find_ban(username=value)
+
+    if username_ban:
+        if username_ban.user_message:
+            raise ValidationError(username_ban.user_message)
+        else:
+            raise ValidationError(_("This username is not allowed."))
 
 
 
 
 def validate_username_content(value):
 def validate_username_content(value):
@@ -89,9 +103,9 @@ def validate_username_length(value):
         raise ValidationError(message)
         raise ValidationError(message)
 
 
 
 
-def validate_username(value):
+def validate_username(value, exclude=None):
     """shortcut function that does complete validation of username"""
     """shortcut function that does complete validation of username"""
     validate_username_content(value)
     validate_username_content(value)
     validate_username_length(value)
     validate_username_length(value)
-    validate_username_available(value)
+    validate_username_available(value, exclude)
     validate_username_banned(value)
     validate_username_banned(value)

+ 1 - 0
misago/users/views/bansadmin.py

@@ -26,6 +26,7 @@ class BanAdmin(generic.AdminBaseMixin):
 class BansList(BanAdmin, generic.ListView):
 class BansList(BanAdmin, generic.ListView):
     items_per_page = 30
     items_per_page = 30
     ordering = (('-id', None),)
     ordering = (('-id', None),)
+    #search_form = SearchBansForm
     selection_label = _('With bans: 0')
     selection_label = _('With bans: 0')
     empty_selection_label = _('Select bans')
     empty_selection_label = _('Select bans')
     mass_actions = (
     mass_actions = (