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", [