From cde8732dfa66576b7aab8ca122313854e03be629 Mon Sep 17 00:00:00 2001
From: Eliot Berriot <contact@eliotberriot.com>
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()
-- 
GitLab