The new API uses Django REST Framework. For now, it is designed specifically to support the use cases required by the forum digest notifier (not yet built), with a goal of making it more generally useful over time.
38 lines
1.3 KiB
Python
38 lines
1.3 KiB
Python
from django.conf import settings
|
|
from django.contrib.auth.models import User
|
|
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
|
|
|
|
settings.EDX_API_KEY must be set, and the X-Edx-Api-Key HTTP header must
|
|
be present in the request and match the setting.
|
|
"""
|
|
api_key = getattr(settings, "EDX_API_KEY", None)
|
|
return api_key is not None and request.META.get("HTTP_X_EDX_API_KEY") == api_key
|
|
|
|
|
|
class UserViewSet(viewsets.ReadOnlyModelViewSet):
|
|
permission_classes = (ApiKeyHeaderPermission,)
|
|
queryset = User.objects.all()
|
|
serializer_class = UserSerializer
|
|
paginate_by = 10
|
|
paginate_by_param = "page_size"
|
|
|
|
|
|
class UserPreferenceViewSet(viewsets.ReadOnlyModelViewSet):
|
|
permission_classes = (ApiKeyHeaderPermission,)
|
|
queryset = UserPreference.objects.all()
|
|
filter_backends = (filters.DjangoFilterBackend,)
|
|
filter_fields = ("key",)
|
|
serializer_class = UserPreferenceSerializer
|
|
paginate_by = 10
|
|
paginate_by_param = "page_size"
|