options.py 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. from rest_framework import serializers
  2. from django.contrib.auth import get_user_model
  3. from django.contrib.auth.password_validation import validate_password
  4. from django.utils.translation import ugettext_lazy as _
  5. from misago.conf import settings
  6. from misago.core.forms import YesNoSwitch
  7. from misago.users.validators import validate_email
  8. UserModel = get_user_model()
  9. __all__ = [
  10. 'ForumOptionsSerializer',
  11. 'EditSignatureSerializer',
  12. 'ChangePasswordSerializer',
  13. 'ChangeEmailSerializer',
  14. ]
  15. class ForumOptionsSerializer(serializers.ModelSerializer):
  16. class Meta:
  17. model = UserModel
  18. fields = [
  19. 'is_hiding_presence',
  20. 'limits_private_thread_invites_to',
  21. 'subscribe_to_started_threads',
  22. 'subscribe_to_replied_threads'
  23. ]
  24. extra_kwargs = {
  25. 'limits_private_thread_invites_to': {
  26. 'required': True
  27. },
  28. 'subscribe_to_started_threads': {
  29. 'required': True
  30. },
  31. 'subscribe_to_replied_threads': {
  32. 'required': True
  33. },
  34. }
  35. class EditSignatureSerializer(serializers.ModelSerializer):
  36. class Meta:
  37. model = UserModel
  38. fields = ['signature']
  39. def validate(self, data):
  40. if len(data.get('signature', '')) > settings.signature_length_max:
  41. raise serializers.ValidationError(_("Signature is too long."))
  42. return data
  43. class ChangePasswordSerializer(serializers.Serializer):
  44. password = serializers.CharField(max_length=200)
  45. new_password = serializers.CharField(max_length=200)
  46. def __init__(self, *args, **kwargs):
  47. self.user = kwargs.pop('user', None)
  48. super(ChangePasswordSerializer, self).__init__(*args, **kwargs)
  49. def validate_password(self, value):
  50. if not self.user.check_password(value):
  51. raise serializers.ValidationError(_("Entered password is invalid."))
  52. return value
  53. def validate_new_password(self, value):
  54. validate_password(value, user=self.user)
  55. return value
  56. class ChangeEmailSerializer(serializers.Serializer):
  57. password = serializers.CharField(max_length=200)
  58. new_email = serializers.CharField(max_length=200)
  59. def __init__(self, *args, **kwargs):
  60. self.user = kwargs.pop('user', None)
  61. super(ChangeEmailSerializer, self).__init__(*args, **kwargs)
  62. def validate_password(self, value):
  63. if not self.user.check_password(value):
  64. raise serializers.ValidationError(_("Entered password is invalid."))
  65. return value
  66. def validate_new_email(self, value):
  67. if not value:
  68. raise serializers.ValidationError(_("You have to enter new e-mail address."))
  69. if value.lower() == self.user.email.lower():
  70. raise serializers.ValidationError(_("New e-mail is same as current one."))
  71. validate_email(value)
  72. return value