views.py 1.74 KB
Newer Older
1 2
from django.conf import settings
from django.contrib.auth.models import User
3
from rest_framework import authentication
4 5 6 7 8 9 10 11 12 13 14 15
from rest_framework import filters
from rest_framework import permissions
from rest_framework import viewsets
from user_api.models import UserPreference
from user_api.serializers import UserSerializer, UserPreferenceSerializer


class ApiKeyHeaderPermission(permissions.BasePermission):
    def has_permission(self, request, view):
        """
        Check for permissions by matching the configured API key and header

16 17 18 19
        If settings.DEBUG is True and settings.EDX_API_KEY is not set or None,
        then allow the request. Otherwise, allow the request if and only if
        settings.EDX_API_KEY is set and the X-Edx-Api-Key HTTP header is
        present in the request and matches the setting.
20 21
        """
        api_key = getattr(settings, "EDX_API_KEY", None)
22 23 24 25
        return (
            (settings.DEBUG and api_key is None) or
            (api_key is not None and request.META.get("HTTP_X_EDX_API_KEY") == api_key)
        )
26 27 28


class UserViewSet(viewsets.ReadOnlyModelViewSet):
29
    authentication_classes = (authentication.SessionAuthentication,)
30 31 32 33 34 35 36 37
    permission_classes = (ApiKeyHeaderPermission,)
    queryset = User.objects.all()
    serializer_class = UserSerializer
    paginate_by = 10
    paginate_by_param = "page_size"


class UserPreferenceViewSet(viewsets.ReadOnlyModelViewSet):
38
    authentication_classes = (authentication.SessionAuthentication,)
39 40 41
    permission_classes = (ApiKeyHeaderPermission,)
    queryset = UserPreference.objects.all()
    filter_backends = (filters.DjangoFilterBackend,)
42
    filter_fields = ("key", "user")
43 44 45
    serializer_class = UserPreferenceSerializer
    paginate_by = 10
    paginate_by_param = "page_size"