mirror of
https://code.eliotberriot.com/funkwhale/funkwhale.git
synced 2025-10-05 08:09:24 +02:00
Dedicated permission to access library data via activity pub
This commit is contained in:
parent
b75872866c
commit
4ce9f9bf08
2 changed files with 64 additions and 0 deletions
19
api/funkwhale_api/federation/permissions.py
Normal file
19
api/funkwhale_api/federation/permissions.py
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
from django.conf import settings
|
||||||
|
|
||||||
|
from rest_framework.permissions import BasePermission
|
||||||
|
|
||||||
|
from . import actors
|
||||||
|
|
||||||
|
|
||||||
|
class LibraryFollower(BasePermission):
|
||||||
|
|
||||||
|
def has_permission(self, request, view):
|
||||||
|
if not settings.FEDERATION_MUSIC_NEEDS_APPROVAL:
|
||||||
|
return True
|
||||||
|
|
||||||
|
actor = getattr(request, 'actor', None)
|
||||||
|
if actor is None:
|
||||||
|
return False
|
||||||
|
|
||||||
|
library = actors.SYSTEM_ACTORS['library'].get_actor_instance()
|
||||||
|
return library.followers.filter(url=actor.url).exists()
|
45
api/tests/federation/test_permissions.py
Normal file
45
api/tests/federation/test_permissions.py
Normal file
|
@ -0,0 +1,45 @@
|
||||||
|
from rest_framework.views import APIView
|
||||||
|
|
||||||
|
from funkwhale_api.federation import actors
|
||||||
|
from funkwhale_api.federation import permissions
|
||||||
|
|
||||||
|
|
||||||
|
def test_library_follower(
|
||||||
|
factories, api_request, anonymous_user, settings):
|
||||||
|
settings.FEDERATION_MUSIC_NEEDS_APPROVAL = True
|
||||||
|
view = APIView.as_view()
|
||||||
|
permission = permissions.LibraryFollower()
|
||||||
|
request = api_request.get('/')
|
||||||
|
setattr(request, 'user', anonymous_user)
|
||||||
|
check = permission.has_permission(request, view)
|
||||||
|
|
||||||
|
assert check is False
|
||||||
|
|
||||||
|
|
||||||
|
def test_library_follower_actor_non_follower(
|
||||||
|
factories, api_request, anonymous_user, settings):
|
||||||
|
settings.FEDERATION_MUSIC_NEEDS_APPROVAL = True
|
||||||
|
actor = factories['federation.Actor']()
|
||||||
|
view = APIView.as_view()
|
||||||
|
permission = permissions.LibraryFollower()
|
||||||
|
request = api_request.get('/')
|
||||||
|
setattr(request, 'user', anonymous_user)
|
||||||
|
setattr(request, 'actor', actor)
|
||||||
|
check = permission.has_permission(request, view)
|
||||||
|
|
||||||
|
assert check is False
|
||||||
|
|
||||||
|
|
||||||
|
def test_library_follower_actor_follower(
|
||||||
|
factories, api_request, anonymous_user, settings):
|
||||||
|
settings.FEDERATION_MUSIC_NEEDS_APPROVAL = True
|
||||||
|
library = actors.SYSTEM_ACTORS['library'].get_actor_instance()
|
||||||
|
follow = factories['federation.Follow'](target=library)
|
||||||
|
view = APIView.as_view()
|
||||||
|
permission = permissions.LibraryFollower()
|
||||||
|
request = api_request.get('/')
|
||||||
|
setattr(request, 'user', anonymous_user)
|
||||||
|
setattr(request, 'actor', follow.actor)
|
||||||
|
check = permission.has_permission(request, view)
|
||||||
|
|
||||||
|
assert check is True
|
Loading…
Add table
Add a link
Reference in a new issue