From 868dacdb620dd8c28c2e3384f5a7e50bcf186b70 Mon Sep 17 00:00:00 2001
From: Agate <me@agate.blue>
Date: Mon, 20 Apr 2020 17:10:59 +0200
Subject: [PATCH] Fixed broken local profile page when allow-list is enabled

---
 api/funkwhale_api/federation/api_views.py |  5 +++--
 api/tests/federation/test_api_views.py    | 15 +++++++++++++++
 2 files changed, 18 insertions(+), 2 deletions(-)

diff --git a/api/funkwhale_api/federation/api_views.py b/api/funkwhale_api/federation/api_views.py
index 39e6e584a..1cf7fb7f2 100644
--- a/api/funkwhale_api/federation/api_views.py
+++ b/api/funkwhale_api/federation/api_views.py
@@ -2,7 +2,7 @@ import requests.exceptions
 
 from django.conf import settings
 from django.db import transaction
-from django.db.models import Count
+from django.db.models import Count, Q
 
 from rest_framework import decorators
 from rest_framework import mixins
@@ -282,7 +282,8 @@ class ActorViewSet(mixins.RetrieveModelMixin, viewsets.GenericViewSet):
             domain__instance_policy__block_all=True,
         )
         if preferences.get("moderation__allow_list_enabled"):
-            qs = qs.filter(domain__allowed=True)
+            query = Q(domain_id=settings.FUNKWHALE_HOSTNAME) | Q(domain__allowed=True)
+            qs = qs.filter(query)
         return qs
 
     libraries = decorators.action(methods=["get"], detail=True)(
diff --git a/api/tests/federation/test_api_views.py b/api/tests/federation/test_api_views.py
index e3f76e849..b9459c3d3 100644
--- a/api/tests/federation/test_api_views.py
+++ b/api/tests/federation/test_api_views.py
@@ -215,6 +215,21 @@ def test_can_retrieve_actor(factories, api_client, preferences):
     assert response.data == expected
 
 
+def test_can_retrieve_local_actor_with_allow_list_enabled(
+    factories, api_client, preferences
+):
+    preferences["common__api_authentication_required"] = False
+    preferences["moderation__allow_list_enabled"] = True
+    actor = factories["federation.Actor"](local=True)
+    url = reverse(
+        "api:v1:federation:actors-detail", kwargs={"full_username": actor.full_username}
+    )
+    response = api_client.get(url)
+
+    expected = api_serializers.FullActorSerializer(actor).data
+    assert response.data == expected
+
+
 @pytest.mark.parametrize(
     "object_id, expected_url",
     [
-- 
GitLab