kopia lustrzana https://dev.funkwhale.audio/funkwhale/funkwhale
				
				
				
			Additional setting to control wether music library federation needs approval
							rodzic
							
								
									48df30dbd8
								
							
						
					
					
						commit
						a81c92dbf5
					
				| 
						 | 
				
			
			@ -30,7 +30,9 @@ FUNKWHALE_HOSTNAME = urlsplit(FUNKWHALE_URL).netloc
 | 
			
		|||
 | 
			
		||||
FEDERATION_ENABLED = env.bool('FEDERATION_ENABLED', default=True)
 | 
			
		||||
FEDERATION_HOSTNAME = env('FEDERATION_HOSTNAME', default=FUNKWHALE_HOSTNAME)
 | 
			
		||||
 | 
			
		||||
FEDERATION_MUSIC_NEEDS_APPROVAL = env.bool(
 | 
			
		||||
    'FEDERATION_MUSIC_NEEDS_APPROVAL', default=True
 | 
			
		||||
)
 | 
			
		||||
ALLOWED_HOSTS = env.list('DJANGO_ALLOWED_HOSTS')
 | 
			
		||||
 | 
			
		||||
# APP CONFIGURATION
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -47,6 +47,7 @@ def get_actor(actor_url):
 | 
			
		|||
 | 
			
		||||
class SystemActor(object):
 | 
			
		||||
    additional_attributes = {}
 | 
			
		||||
    manually_approves_followers = False
 | 
			
		||||
 | 
			
		||||
    def get_actor_instance(self):
 | 
			
		||||
        args = self.get_instance_argument(
 | 
			
		||||
| 
						 | 
				
			
			@ -113,6 +114,9 @@ class LibraryActor(SystemActor):
 | 
			
		|||
    additional_attributes = {
 | 
			
		||||
        'manually_approves_followers': True
 | 
			
		||||
    }
 | 
			
		||||
    @property
 | 
			
		||||
    def manually_approves_followers(self):
 | 
			
		||||
        return settings.FEDERATION_MUSIC_NEEDS_APPROVAL
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class TestActor(SystemActor):
 | 
			
		||||
| 
						 | 
				
			
			@ -125,6 +129,7 @@ class TestActor(SystemActor):
 | 
			
		|||
    additional_attributes = {
 | 
			
		||||
        'manually_approves_followers': False
 | 
			
		||||
    }
 | 
			
		||||
    manually_approves_followers = False
 | 
			
		||||
 | 
			
		||||
    def get_outbox(self, data, actor=None):
 | 
			
		||||
        return {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -57,3 +57,11 @@ class Actor(models.Model):
 | 
			
		|||
                setattr(self, field, v.lower())
 | 
			
		||||
 | 
			
		||||
        super().save(**kwargs)
 | 
			
		||||
 | 
			
		||||
    @property
 | 
			
		||||
    def is_system(self):
 | 
			
		||||
        from . import actors
 | 
			
		||||
        return all([
 | 
			
		||||
            settings.FEDERATION_HOSTNAME == self.domain,
 | 
			
		||||
            self.preferred_username in actors.SYSTEM_ACTORS
 | 
			
		||||
        ])
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -197,3 +197,28 @@ def test_getting_actor_instance_persists_in_db(db):
 | 
			
		|||
 | 
			
		||||
    for f in test._meta.fields:
 | 
			
		||||
        assert getattr(from_db, f.name) == getattr(test, f.name)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@pytest.mark.parametrize('username,domain,expected', [
 | 
			
		||||
    ('test', 'wrongdomain.com', False),
 | 
			
		||||
    ('notsystem', '', False),
 | 
			
		||||
    ('test', '', True),
 | 
			
		||||
])
 | 
			
		||||
def test_actor_is_system(
 | 
			
		||||
        username, domain, expected, nodb_factories, settings):
 | 
			
		||||
    if not domain:
 | 
			
		||||
        domain = settings.FEDERATION_HOSTNAME
 | 
			
		||||
 | 
			
		||||
    actor = nodb_factories['federation.Actor'](
 | 
			
		||||
        preferred_username=username,
 | 
			
		||||
        domain=domain,
 | 
			
		||||
    )
 | 
			
		||||
    assert actor.is_system is expected
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@pytest.mark.parametrize('value', [False, True])
 | 
			
		||||
def test_library_actor_manually_approves_based_on_setting(
 | 
			
		||||
        value, settings):
 | 
			
		||||
    settings.FEDERATION_MUSIC_NEEDS_APPROVAL = value
 | 
			
		||||
    library_conf = actors.SYSTEM_ACTORS['library']
 | 
			
		||||
    assert library_conf.manually_approves_followers is value
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -85,3 +85,12 @@ API_AUTHENTICATION_REQUIRED=True
 | 
			
		|||
# This will help us detect and correct bugs
 | 
			
		||||
RAVEN_ENABLED=false
 | 
			
		||||
RAVEN_DSN=https://44332e9fdd3d42879c7d35bf8562c6a4:0062dc16a22b41679cd5765e5342f716@sentry.eliotberriot.com/5
 | 
			
		||||
 | 
			
		||||
# This settings enable/disable federation on the instance level
 | 
			
		||||
FEDERATION_ENABLED=True
 | 
			
		||||
# This setting decide wether music library is shared automatically
 | 
			
		||||
# to followers or if it requires manual approval before.
 | 
			
		||||
# FEDERATION_MUSIC_NEEDS_APPROVAL=False
 | 
			
		||||
# means anyone can subscribe to your library and import your file,
 | 
			
		||||
# use with caution.
 | 
			
		||||
FEDERATION_MUSIC_NEEDS_APPROVAL=True
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Ładowanie…
	
		Reference in New Issue