mirror of
https://github.com/Eugeny/tabby-web.git
synced 2025-06-08 05:29:52 +00:00
60 lines
1.8 KiB
Python
60 lines
1.8 KiB
Python
from django.conf import settings
|
|
from rest_framework import fields
|
|
from rest_framework.exceptions import PermissionDenied
|
|
from rest_framework.mixins import RetrieveModelMixin, UpdateModelMixin
|
|
from rest_framework.viewsets import GenericViewSet
|
|
from rest_framework.serializers import ModelSerializer
|
|
from social_django.models import UserSocialAuth
|
|
|
|
from ..sponsors import check_is_sponsor_cached
|
|
from ..models import User
|
|
|
|
|
|
class UserSerializer(ModelSerializer):
|
|
id = fields.IntegerField()
|
|
is_pro = fields.SerializerMethodField()
|
|
is_sponsor = fields.SerializerMethodField()
|
|
github_username = fields.SerializerMethodField()
|
|
|
|
class Meta:
|
|
model = User
|
|
fields = (
|
|
"id",
|
|
"username",
|
|
"active_config",
|
|
"custom_connection_gateway",
|
|
"custom_connection_gateway_token",
|
|
"config_sync_token",
|
|
"is_pro",
|
|
"is_sponsor",
|
|
"github_username",
|
|
)
|
|
read_only_fields = ("id", "username")
|
|
|
|
def get_is_pro(self, obj):
|
|
return (
|
|
obj.force_pro
|
|
or not settings.GITHUB_ELIGIBLE_SPONSORSHIPS
|
|
or check_is_sponsor_cached(obj)
|
|
)
|
|
|
|
def get_is_sponsor(self, obj):
|
|
return check_is_sponsor_cached(obj)
|
|
|
|
def get_github_username(self, obj):
|
|
social_auth = UserSocialAuth.objects.filter(user=obj, provider="github").first()
|
|
if not social_auth:
|
|
return None
|
|
|
|
return social_auth.extra_data.get("login")
|
|
|
|
|
|
class UserViewSet(RetrieveModelMixin, UpdateModelMixin, GenericViewSet):
|
|
queryset = User.objects.all()
|
|
serializer_class = UserSerializer
|
|
|
|
def get_object(self):
|
|
if self.request.user.is_authenticated:
|
|
return self.request.user
|
|
raise PermissionDenied()
|