validators.py 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. import re
  2. from django.core.exceptions import ValidationError
  3. from django.core.validators import validate_email as validate_email_content
  4. from django.utils.translation import ungettext, ugettext_lazy as _
  5. from django.contrib.auth import get_user_model
  6. from misago.conf import settings
  7. USERNAME_RE = re.compile(r'^[0-9a-z]+$', re.IGNORECASE)
  8. def validate_email_available(value):
  9. User = get_user_model()
  10. try:
  11. User.objects.get_by_email(value)
  12. except User.DoesNotExist:
  13. pass
  14. else:
  15. raise ValidationError(_("This e-mail address is not available."))
  16. def validate_email_banned(value):
  17. """TODO for when bans will be reimplemented from 0.5"""
  18. def validate_email(value):
  19. """shortcut function that does complete validation of email"""
  20. validate_email_content(value)
  21. validate_email_available(value)
  22. validate_email_banned(value)
  23. def validate_password(value):
  24. if len(value) < settings.password_length_min:
  25. message = ungettext(
  26. 'Valid password must be at least one character long.',
  27. 'valid password must be at least %(length)d characters long.',
  28. settings.password_length_min)
  29. message = message % {'length': settings.password_length_min}
  30. raise ValidationError(message)
  31. def validate_username_available(value):
  32. User = get_user_model()
  33. try:
  34. User.objects.get_by_username(value)
  35. except User.DoesNotExist:
  36. pass
  37. else:
  38. raise ValidationError(_("This username is not available."))
  39. def validate_username_banned(value):
  40. """TODO for when bans will be reimplemented from 0.5"""
  41. def validate_username_content(value):
  42. if not USERNAME_RE.match(value):
  43. raise ValidationError(
  44. _("Username can only contain latin alphabet letters and digits."))
  45. def validate_username_length(value):
  46. if len(value) < settings.username_length_min:
  47. message = ungettext(
  48. 'Username must be at least one character long.',
  49. 'Username must be at least %(length)d characters long.',
  50. settings.username_length_min)
  51. message = message % {'length': settings.username_length_min}
  52. raise ValidationError(message)
  53. if len(value) > settings.username_length_max:
  54. message = ungettext(
  55. "Username cannot be longer than one characters.",
  56. "Username cannot be longer than %(length)d characters.",
  57. settings.username_length_max)
  58. message = message % {'length': settings.username_length_max}
  59. raise ValidationError(message)
  60. def validate_username(value):
  61. """shortcut function that does complete validation of username"""
  62. validate_username_content(value)
  63. validate_username_length(value)
  64. validate_username_available(value)
  65. validate_username_banned(value)