diff --git a/api/funkwhale_api/federation/renderers.py b/api/funkwhale_api/federation/renderers.py new file mode 100644 index 0000000000000000000000000000000000000000..642b634628f2787044eae9b6a96b9e7004b05244 --- /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 93ce3973924eace60c7b89106c99d2306deaa05e..5f1ee36f76fada4bc3aa90e6941958fe1781f7a1 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 2bb35f8e87b4894db875ffd52a394261e150680a..3d8218c230293211f45b16594d32cdbdc131f2f4 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()