validators.py 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  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. """
  9. Email validators
  10. """
  11. def validate_email_available(value):
  12. User = get_user_model()
  13. try:
  14. User.objects.get_by_email(value)
  15. except User.DoesNotExist:
  16. pass
  17. else:
  18. raise ValidationError(_("This e-mail address is not available."))
  19. def validate_email_banned(value):
  20. """TODO for when bans will be reimplemented from 0.5"""
  21. def validate_email(value):
  22. """shortcut function that does complete validation of email"""
  23. validate_email_content(value)
  24. validate_email_available(value)
  25. validate_email_banned(value)
  26. """
  27. Password validators
  28. """
  29. def validate_password(value):
  30. if len(value) < settings.password_length_min:
  31. message = ungettext(
  32. 'Valid password must be at least one character long.',
  33. 'Valid password must be at least %(length)d characters long.',
  34. settings.password_length_min)
  35. message = message % {'length': settings.password_length_min}
  36. raise ValidationError(message)
  37. """
  38. Username validators
  39. """
  40. def validate_username_available(value):
  41. User = get_user_model()
  42. try:
  43. User.objects.get_by_username(value)
  44. except User.DoesNotExist:
  45. pass
  46. else:
  47. raise ValidationError(_("This username is not available."))
  48. def validate_username_banned(value):
  49. """TODO for when bans will be reimplemented from 0.5"""
  50. def validate_username_content(value):
  51. if not USERNAME_RE.match(value):
  52. raise ValidationError(
  53. _("Username can only contain latin alphabet letters and digits."))
  54. def validate_username_length(value):
  55. if len(value) < settings.username_length_min:
  56. message = ungettext(
  57. 'Username must be at least one character long.',
  58. 'Username must be at least %(length)d characters long.',
  59. settings.username_length_min)
  60. message = message % {'length': settings.username_length_min}
  61. raise ValidationError(message)
  62. if len(value) > settings.username_length_max:
  63. message = ungettext(
  64. "Username cannot be longer than one characters.",
  65. "Username cannot be longer than %(length)d characters.",
  66. settings.username_length_max)
  67. message = message % {'length': settings.username_length_max}
  68. raise ValidationError(message)
  69. def validate_username(value):
  70. """shortcut function that does complete validation of username"""
  71. validate_username_content(value)
  72. validate_username_length(value)
  73. validate_username_available(value)
  74. validate_username_banned(value)