Files
tabby-web/terminus/app/api.py

93 lines
2.6 KiB
Python
Raw Normal View History

2021-06-15 23:43:23 +02:00
import os
from dataclasses import dataclass
from django.conf import settings
from django.contrib.auth import logout
2021-06-16 23:49:44 +02:00
from rest_framework import fields
2021-06-25 21:55:40 +02:00
from rest_framework.exceptions import PermissionDenied
2021-06-15 23:43:23 +02:00
from rest_framework.permissions import IsAuthenticated
from rest_framework.response import Response
2021-06-25 21:55:40 +02:00
from rest_framework.mixins import ListModelMixin, RetrieveModelMixin, UpdateModelMixin
2021-06-15 23:43:23 +02:00
from rest_framework.views import APIView
from rest_framework.viewsets import GenericViewSet, ModelViewSet
2021-06-25 21:55:40 +02:00
from rest_framework.serializers import ModelSerializer
2021-06-15 23:43:23 +02:00
from rest_framework_dataclasses.serializers import DataclassSerializer
2021-06-14 23:00:05 +02:00
2021-06-16 23:49:44 +02:00
from .models import Config, User
2021-06-14 23:00:05 +02:00
2021-06-15 23:43:23 +02:00
@dataclass
class AppVersion:
version: str
class AppVersionSerializer(DataclassSerializer):
class Meta:
dataclass = AppVersion
2021-06-14 23:00:05 +02:00
class ConfigSerializer(ModelSerializer):
class Meta:
model = Config
2021-06-15 23:43:23 +02:00
read_only_fields = ('user', 'created_at', 'modified_at')
2021-06-14 23:00:05 +02:00
fields = '__all__'
class ConfigViewSet(ModelViewSet):
queryset = Config.objects.all()
serializer_class = ConfigSerializer
2021-06-15 23:43:23 +02:00
permission_classes = [IsAuthenticated]
2021-06-14 23:00:05 +02:00
def get_queryset(self):
2021-06-15 23:43:23 +02:00
if self.request.user.is_authenticated:
return Config.objects.filter(user=self.request.user)
return Config.objects.none()
def perform_create(self, serializer):
serializer.save(user=self.request.user)
class AppVersionViewSet(ListModelMixin, GenericViewSet):
serializer_class = AppVersionSerializer
lookup_field = 'id'
lookup_value_regex = r'[\w\d.-]+'
queryset = ''
permission_classes = [IsAuthenticated]
def _get_versions(self):
return [AppVersion(version=x) for x in os.listdir(settings.APP_DIST_PATH)]
def list(self, request, *args, **kwargs):
return Response(self.serializer_class(
self._get_versions(),
many=True,
).data)
2021-06-16 23:49:44 +02:00
class UserSerializer(ModelSerializer):
id = fields.IntegerField()
2021-06-25 21:55:40 +02:00
is_pro = fields.SerializerMethodField()
2021-06-16 23:49:44 +02:00
class Meta:
model = User
2021-06-25 21:55:40 +02:00
fields = ('id', 'username', 'active_config', 'custom_connection_gateway', 'custom_connection_gateway_token', 'is_pro')
2021-06-16 23:49:44 +02:00
read_only_fields = ('id', 'username')
2021-06-25 21:55:40 +02:00
def get_is_pro(self, obj):
return False
2021-06-16 23:49:44 +02:00
2021-06-25 21:55:40 +02:00
class UserViewSet(RetrieveModelMixin, UpdateModelMixin, GenericViewSet):
2021-06-16 23:49:44 +02:00
queryset = User.objects.all()
serializer_class = UserSerializer
def get_object(self):
if self.request.user.is_authenticated:
return self.request.user
2021-06-25 21:55:40 +02:00
raise PermissionDenied()
2021-06-16 23:49:44 +02:00
2021-06-15 23:43:23 +02:00
class LogoutView(APIView):
def post(self, request, format=None):
logout(request)
2021-06-16 23:49:44 +02:00
return Response(None)