auth.py 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. from rest_framework import serializers
  2. from django.contrib.auth import get_user_model
  3. from django.urls import reverse
  4. from misago.acl import serialize_acl
  5. from .user import UserSerializer
  6. UserModel = get_user_model()
  7. __all__ = [
  8. 'AuthenticatedUserSerializer',
  9. 'AnonymousUserSerializer',
  10. ]
  11. class AuthFlags(object):
  12. def get_is_authenticated(self, obj):
  13. return bool(obj.is_authenticated)
  14. def get_is_anonymous(self, obj):
  15. return bool(obj.is_anonymous)
  16. class AuthenticatedUserSerializer(UserSerializer, AuthFlags):
  17. email = serializers.SerializerMethodField()
  18. is_authenticated = serializers.SerializerMethodField()
  19. is_anonymous = serializers.SerializerMethodField()
  20. class Meta:
  21. model = UserModel
  22. fields = UserSerializer.Meta.fields + (
  23. 'is_authenticated',
  24. 'is_anonymous',
  25. )
  26. def get_acl(self, obj):
  27. return serialize_acl(obj)
  28. def get_email(self, obj):
  29. return obj.email
  30. def get_api_url(self, obj):
  31. return {
  32. 'avatar': reverse(
  33. 'misago:api:user-avatar', kwargs={'pk': obj.pk}),
  34. 'options': reverse(
  35. 'misago:api:user-forum-options', kwargs={'pk': obj.pk}),
  36. 'username': reverse(
  37. 'misago:api:user-username', kwargs={'pk': obj.pk}),
  38. 'change_email': reverse(
  39. 'misago:api:user-change-email', kwargs={'pk': obj.pk}),
  40. 'change_password': reverse(
  41. 'misago:api:user-change-password', kwargs={'pk': obj.pk}),
  42. }
  43. AuthenticatedUserSerializer = AuthenticatedUserSerializer.exclude_fields(
  44. 'is_avatar_locked', 'is_blocked', 'is_followed', 'is_signature_locked',
  45. 'meta', 'signature', 'status',
  46. )
  47. class AnonymousUserSerializer(serializers.Serializer, AuthFlags):
  48. id = serializers.ReadOnlyField()
  49. acl = serializers.SerializerMethodField()
  50. is_authenticated = serializers.SerializerMethodField()
  51. is_anonymous = serializers.SerializerMethodField()
  52. def get_acl(self, obj):
  53. if hasattr(obj, 'acl'):
  54. return serialize_acl(obj)
  55. else:
  56. return {}