diff --git a/api/funkwhale_api/common/serializers.py b/api/funkwhale_api/common/serializers.py index 7dcafa084..8504fc587 100644 --- a/api/funkwhale_api/common/serializers.py +++ b/api/funkwhale_api/common/serializers.py @@ -335,3 +335,27 @@ class NullToEmptDict(object): if not v: return v return super().to_representation(v) + + +class ScopesSerializer(serializers.Serializer): + id = serializers.CharField() + rate = serializers.CharField() + description = serializers.CharField() + limit = serializers.IntegerField() + duration = serializers.IntegerField() + remaining = serializers.IntegerField() + available = serializers.IntegerField() + available_seconds = serializers.IntegerField() + reset = serializers.IntegerField() + reset_seconds = serializers.IntegerField() + + +class IdentSerializer(serializers.Serializer): + type = serializers.CharField() + id = serializers.IntegerField() + + +class RateLimitSerializer(serializers.Serializer): + enabled = serializers.BooleanField() + ident = IdentSerializer() + scopes = serializers.ListField(child=ScopesSerializer()) diff --git a/api/funkwhale_api/common/views.py b/api/funkwhale_api/common/views.py index fe669ad21..d6cbf1953 100644 --- a/api/funkwhale_api/common/views.py +++ b/api/funkwhale_api/common/views.py @@ -139,6 +139,7 @@ class MutationViewSet( class RateLimitView(views.APIView): permission_classes = [] throttle_classes = [] + serializer_class = serializers.RateLimitSerializer def get(self, request, *args, **kwargs): ident = throttling.get_ident(getattr(request, "user", None), request) @@ -147,7 +148,7 @@ class RateLimitView(views.APIView): "ident": ident, "scopes": throttling.get_status(ident, time.time()), } - return response.Response(data, status=200) + return response.Response(serializers.RateLimitSerializer(data).data, status=200) class AttachmentViewSet(