kopia lustrzana https://dev.funkwhale.audio/funkwhale/funkwhale
				
				
				
			Dedicated permission to access library data via activity pub
							rodzic
							
								
									b75872866c
								
							
						
					
					
						commit
						4ce9f9bf08
					
				| 
						 | 
					@ -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()
 | 
				
			||||||
| 
						 | 
					@ -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
 | 
				
			||||||
		Ładowanie…
	
		Reference in New Issue