options.py 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  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 as _
  5. from misago.conf import settings
  6. from misago.users.validators import validate_email, validate_username
  7. UserModel = get_user_model()
  8. class ForumOptionsSerializer(serializers.ModelSerializer):
  9. class Meta:
  10. model = UserModel
  11. fields = [
  12. 'is_hiding_presence', 'limits_private_thread_invites_to',
  13. 'subscribe_to_started_threads', 'subscribe_to_replied_threads'
  14. ]
  15. extra_kwargs = {
  16. 'limits_private_thread_invites_to': {
  17. 'required': True
  18. },
  19. 'subscribe_to_started_threads': {
  20. 'required': True
  21. },
  22. 'subscribe_to_replied_threads': {
  23. 'required': True
  24. },
  25. }
  26. class EditSignatureSerializer(serializers.ModelSerializer):
  27. class Meta:
  28. model = UserModel
  29. fields = ['signature']
  30. def validate(self, data):
  31. if len(data.get('signature', '')) > settings.signature_length_max:
  32. raise serializers.ValidationError(_("Signature is too long."))
  33. return data
  34. class ChangeUsernameSerializer(serializers.Serializer):
  35. username = serializers.CharField(max_length=200, required=True, allow_blank=False)
  36. def validate_username(self, username):
  37. if username == self.context['user'].username:
  38. raise serializers.ValidationError(_("New username is same as current one."))
  39. validate_username(username)
  40. return username
  41. def change_username(self, changed_by):
  42. self.context['user'].set_username(self.validated_data['username'], changed_by=changed_by)
  43. self.context['user'].save(update_fields=['username', 'slug'])
  44. class ChangePasswordSerializer(serializers.Serializer):
  45. password = serializers.CharField(max_length=200, trim_whitespace=False)
  46. new_password = serializers.CharField(max_length=200, trim_whitespace=False)
  47. def validate_password(self, value):
  48. if not self.context['user'].check_password(value):
  49. raise serializers.ValidationError(_("Entered password is invalid."))
  50. return value
  51. def validate_new_password(self, value):
  52. validate_password(value, user=self.context['user'])
  53. return value
  54. class ChangeEmailSerializer(serializers.Serializer):
  55. password = serializers.CharField(max_length=200, trim_whitespace=False)
  56. new_email = serializers.CharField(max_length=200)
  57. def validate_password(self, value):
  58. if not self.context['user'].check_password(value):
  59. raise serializers.ValidationError(_("Entered password is invalid."))
  60. return value
  61. def validate_new_email(self, value):
  62. if not value:
  63. raise serializers.ValidationError(_("You have to enter new e-mail address."))
  64. if value.lower() == self.context['user'].email.lower():
  65. raise serializers.ValidationError(_("New e-mail is same as current one."))
  66. validate_email(value)
  67. return value