1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- from rest_framework import serializers
- from django.contrib.auth import get_user_model
- from django.urls import reverse
- from misago.acl import serialize_acl
- from .user import UserSerializer
- UserModel = get_user_model()
- __all__ = [
- 'AuthenticatedUserSerializer',
- 'AnonymousUserSerializer',
- ]
- class AuthFlags(object):
- def get_is_authenticated(self, obj):
- return bool(obj.is_authenticated)
- def get_is_anonymous(self, obj):
- return bool(obj.is_anonymous)
- class AuthenticatedUserSerializer(UserSerializer, AuthFlags):
- email = serializers.SerializerMethodField()
- is_authenticated = serializers.SerializerMethodField()
- is_anonymous = serializers.SerializerMethodField()
- class Meta:
- model = UserModel
- fields = UserSerializer.Meta.fields + [
- 'is_hiding_presence',
- 'limits_private_thread_invites_to',
- 'subscribe_to_started_threads',
- 'subscribe_to_replied_threads',
- 'is_authenticated',
- 'is_anonymous',
- ]
- def get_acl(self, obj):
- return serialize_acl(obj)
- def get_email(self, obj):
- return obj.email
- def get_api_url(self, obj):
- return {
- 'avatar': reverse('misago:api:user-avatar', kwargs={'pk': obj.pk}),
- 'options': reverse('misago:api:user-forum-options', kwargs={'pk': obj.pk}),
- 'username': reverse('misago:api:user-username', kwargs={'pk': obj.pk}),
- 'change_email': reverse('misago:api:user-change-email', kwargs={'pk': obj.pk}),
- 'change_password': reverse('misago:api:user-change-password', kwargs={'pk': obj.pk}),
- }
- AuthenticatedUserSerializer = AuthenticatedUserSerializer.exclude_fields(
- 'is_avatar_locked',
- 'is_blocked',
- 'is_followed',
- 'is_signature_locked',
- 'meta',
- 'signature',
- 'status',
- )
- class AnonymousUserSerializer(serializers.Serializer, AuthFlags):
- id = serializers.ReadOnlyField()
- acl = serializers.SerializerMethodField()
- is_authenticated = serializers.SerializerMethodField()
- is_anonymous = serializers.SerializerMethodField()
- def get_acl(self, obj):
- if hasattr(obj, 'acl_cache'):
- return serialize_acl(obj)
- else:
- return {}
|