From cde8732dfa66576b7aab8ca122313854e03be629 Mon Sep 17 00:00:00 2001 From: Eliot Berriot Date: Thu, 29 Mar 2018 23:29:47 +0200 Subject: [PATCH] Use proper renderers for activity pub / webfinger --- api/funkwhale_api/federation/renderers.py | 9 +++++++++ api/funkwhale_api/federation/views.py | 7 ++++--- api/tests/federation/test_views.py | 2 +- 3 files changed, 14 insertions(+), 4 deletions(-) create mode 100644 api/funkwhale_api/federation/renderers.py diff --git a/api/funkwhale_api/federation/renderers.py b/api/funkwhale_api/federation/renderers.py new file mode 100644 index 000000000..642b63462 --- /dev/null +++ b/api/funkwhale_api/federation/renderers.py @@ -0,0 +1,9 @@ +from rest_framework.renderers import JSONRenderer + + +class ActivityPubRenderer(JSONRenderer): + media_type = 'application/activity+json' + + +class WebfingerRenderer(JSONRenderer): + media_type = 'application/jrd+json' diff --git a/api/funkwhale_api/federation/views.py b/api/funkwhale_api/federation/views.py index 93ce39739..5f1ee36f7 100644 --- a/api/funkwhale_api/federation/views.py +++ b/api/funkwhale_api/federation/views.py @@ -7,6 +7,7 @@ from rest_framework import views from rest_framework import response from rest_framework.decorators import list_route +from . import renderers from . import serializers from . import webfinger @@ -21,6 +22,7 @@ class FederationMixin(object): class InstanceViewSet(FederationMixin, viewsets.GenericViewSet): authentication_classes = [] permission_classes = [] + renderer_classes = [renderers.ActivityPubRenderer] @list_route(methods=['get']) def actor(self, request, *args, **kwargs): @@ -38,6 +40,7 @@ class InstanceViewSet(FederationMixin, viewsets.GenericViewSet): class WellKnownViewSet(FederationMixin, viewsets.GenericViewSet): authentication_classes = [] permission_classes = [] + renderer_classes = [renderers.WebfingerRenderer] @list_route(methods=['get']) def webfinger(self, request, *args, **kwargs): @@ -62,9 +65,7 @@ class WellKnownViewSet(FederationMixin, viewsets.GenericViewSet): handler = getattr(self, 'handler_{}'.format(resource_type)) data = handler(result) - return response.Response( - data, - content_type='application/jrd+json; charset=utf-8') + return response.Response(data) def handler_acct(self, clean_result): username, hostname = clean_result diff --git a/api/tests/federation/test_views.py b/api/tests/federation/test_views.py index 2bb35f8e8..3d8218c23 100644 --- a/api/tests/federation/test_views.py +++ b/api/tests/federation/test_views.py @@ -65,5 +65,5 @@ def test_wellknown_webfinger_system( url, data={'resource': 'acct:service@test.federation'}) assert response.status_code == 200 - assert response['Content-Type'] == 'application/jrd+json; charset=utf-8' + assert response['Content-Type'] == 'application/jrd+json' assert response.data == webfinger.serialize_system_acct()