mirror of
https://github.com/Eugeny/tabby-web.git
synced 2025-08-30 05:01:53 +00:00
init
This commit is contained in:
55
backend/tabby/app/api/user.py
Normal file
55
backend/tabby/app/api/user.py
Normal file
@@ -0,0 +1,55 @@
|
||||
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()
|
Reference in New Issue
Block a user