You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
73 lines
2.8 KiB
73 lines
2.8 KiB
import base64 |
|
import json |
|
import requests |
|
import struct |
|
import time |
|
|
|
from django.contrib.auth.models import User |
|
from django.http import HttpResponse |
|
from django.shortcuts import get_object_or_404, get_list_or_404 |
|
|
|
from rest_framework import mixins, permissions, status, viewsets |
|
from rest_framework.authtoken.models import Token |
|
from rest_framework.decorators import api_view, permission_classes |
|
from rest_framework.response import Response |
|
|
|
from . import models, serializers |
|
from authserver.settings import PROTOSPACE_LOGIN_PAGE, FIRMWARE_VERSION_MAGIC |
|
|
|
class IsLockoutAdmin(permissions.BasePermission): |
|
def has_permission(self, request, view): |
|
try: |
|
return request.user.profile.lockout_admin |
|
except AttributeError: |
|
return False |
|
|
|
class CategoryViewSet(viewsets.ModelViewSet): |
|
queryset = models.Category.objects.all().order_by('id') |
|
serializer_class = serializers.CategorySerializer |
|
permission_classes = (IsLockoutAdmin,) |
|
lookup_field='slug' |
|
|
|
class CourseViewSet(viewsets.ModelViewSet): |
|
queryset = models.Course.objects.all().order_by('id') |
|
serializer_class = serializers.CourseSerializer |
|
permission_classes = (IsLockoutAdmin,) |
|
lookup_field='slug' |
|
|
|
class ToolViewSet(viewsets.ModelViewSet): |
|
queryset = models.Tool.objects.all().order_by('id') |
|
serializer_class = serializers.ToolSerializer |
|
permission_classes = (IsLockoutAdmin,) |
|
lookup_field='slug' |
|
|
|
class ToolDataViewSet(viewsets.ViewSet): |
|
def list(self, request): |
|
category_objects = models.Category.objects.all().order_by('id') |
|
categories = serializers.CategoryToolSerializer(category_objects, many=True, context={'request': request}) |
|
course_objects = models.Course.objects.all().order_by('id') |
|
courses = serializers.CourseSerializer(course_objects, many=True, context={'request': request}) |
|
return Response({'categories': categories.data, 'courses': courses.data}) |
|
|
|
class ProfileViewSet( |
|
mixins.RetrieveModelMixin, |
|
mixins.UpdateModelMixin, |
|
mixins.ListModelMixin, |
|
viewsets.GenericViewSet): |
|
queryset = models.Profile.objects.all().order_by('-user__date_joined') |
|
serializer_class = serializers.ProfileSerializer |
|
permission_classes = (IsLockoutAdmin,) |
|
|
|
class UserViewSet(viewsets.ReadOnlyModelViewSet): |
|
serializer_class = serializers.UserSerializer |
|
permission_classes = (permissions.IsAuthenticated,) |
|
|
|
def get_queryset(self): |
|
return User.objects.filter(username=self.request.user) |
|
|
|
class FirmwareViewSet(viewsets.ModelViewSet): |
|
queryset = models.Firmware.objects.all().order_by('-version') |
|
serializer_class = serializers.FirmwareSerializer |
|
permission_classes = (IsLockoutAdmin,) |
|
lookup_field='version' |
|
http_method_names = ['get', 'post', 'head', 'delete', 'options']
|
|
|