Ensure follower is approved for listening
This commit is contained in:
parent
74f5907156
commit
ca02aca327
|
@ -3,6 +3,7 @@ from django.conf import settings
|
||||||
from rest_framework.permissions import BasePermission
|
from rest_framework.permissions import BasePermission
|
||||||
|
|
||||||
from funkwhale_api.federation import actors
|
from funkwhale_api.federation import actors
|
||||||
|
from funkwhale_api.federation import models
|
||||||
|
|
||||||
|
|
||||||
class Listen(BasePermission):
|
class Listen(BasePermission):
|
||||||
|
@ -20,4 +21,8 @@ class Listen(BasePermission):
|
||||||
return False
|
return False
|
||||||
|
|
||||||
library = actors.SYSTEM_ACTORS['library'].get_actor_instance()
|
library = actors.SYSTEM_ACTORS['library'].get_actor_instance()
|
||||||
return library.followers.filter(url=actor.url).exists()
|
return models.Follow.objects.filter(
|
||||||
|
target=library,
|
||||||
|
actor=actor,
|
||||||
|
approved=True
|
||||||
|
).exists()
|
||||||
|
|
|
@ -47,10 +47,25 @@ def test_list_permission_protect_following_actor(
|
||||||
factories, api_request, settings):
|
factories, api_request, settings):
|
||||||
settings.PROTECT_AUDIO_FILES = True
|
settings.PROTECT_AUDIO_FILES = True
|
||||||
library_actor = actors.SYSTEM_ACTORS['library'].get_actor_instance()
|
library_actor = actors.SYSTEM_ACTORS['library'].get_actor_instance()
|
||||||
follow = factories['federation.Follow'](target=library_actor)
|
follow = factories['federation.Follow'](
|
||||||
|
approved=True, target=library_actor)
|
||||||
view = APIView.as_view()
|
view = APIView.as_view()
|
||||||
permission = permissions.Listen()
|
permission = permissions.Listen()
|
||||||
request = api_request.get('/')
|
request = api_request.get('/')
|
||||||
setattr(request, 'actor', follow.actor)
|
setattr(request, 'actor', follow.actor)
|
||||||
|
|
||||||
assert permission.has_permission(request, view) is True
|
assert permission.has_permission(request, view) is True
|
||||||
|
|
||||||
|
|
||||||
|
def test_list_permission_protect_following_actor_not_approved(
|
||||||
|
factories, api_request, settings):
|
||||||
|
settings.PROTECT_AUDIO_FILES = True
|
||||||
|
library_actor = actors.SYSTEM_ACTORS['library'].get_actor_instance()
|
||||||
|
follow = factories['federation.Follow'](
|
||||||
|
approved=False, target=library_actor)
|
||||||
|
view = APIView.as_view()
|
||||||
|
permission = permissions.Listen()
|
||||||
|
request = api_request.get('/')
|
||||||
|
setattr(request, 'actor', follow.actor)
|
||||||
|
|
||||||
|
assert permission.has_permission(request, view) is False
|
||||||
|
|
Loading…
Reference in New Issue