Additional setting to control wether music library federation needs approval
This commit is contained in:
parent
48df30dbd8
commit
a81c92dbf5
|
@ -30,7 +30,9 @@ FUNKWHALE_HOSTNAME = urlsplit(FUNKWHALE_URL).netloc
|
||||||
|
|
||||||
FEDERATION_ENABLED = env.bool('FEDERATION_ENABLED', default=True)
|
FEDERATION_ENABLED = env.bool('FEDERATION_ENABLED', default=True)
|
||||||
FEDERATION_HOSTNAME = env('FEDERATION_HOSTNAME', default=FUNKWHALE_HOSTNAME)
|
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')
|
ALLOWED_HOSTS = env.list('DJANGO_ALLOWED_HOSTS')
|
||||||
|
|
||||||
# APP CONFIGURATION
|
# APP CONFIGURATION
|
||||||
|
|
|
@ -47,6 +47,7 @@ def get_actor(actor_url):
|
||||||
|
|
||||||
class SystemActor(object):
|
class SystemActor(object):
|
||||||
additional_attributes = {}
|
additional_attributes = {}
|
||||||
|
manually_approves_followers = False
|
||||||
|
|
||||||
def get_actor_instance(self):
|
def get_actor_instance(self):
|
||||||
args = self.get_instance_argument(
|
args = self.get_instance_argument(
|
||||||
|
@ -113,6 +114,9 @@ class LibraryActor(SystemActor):
|
||||||
additional_attributes = {
|
additional_attributes = {
|
||||||
'manually_approves_followers': True
|
'manually_approves_followers': True
|
||||||
}
|
}
|
||||||
|
@property
|
||||||
|
def manually_approves_followers(self):
|
||||||
|
return settings.FEDERATION_MUSIC_NEEDS_APPROVAL
|
||||||
|
|
||||||
|
|
||||||
class TestActor(SystemActor):
|
class TestActor(SystemActor):
|
||||||
|
@ -125,6 +129,7 @@ class TestActor(SystemActor):
|
||||||
additional_attributes = {
|
additional_attributes = {
|
||||||
'manually_approves_followers': False
|
'manually_approves_followers': False
|
||||||
}
|
}
|
||||||
|
manually_approves_followers = False
|
||||||
|
|
||||||
def get_outbox(self, data, actor=None):
|
def get_outbox(self, data, actor=None):
|
||||||
return {
|
return {
|
||||||
|
|
|
@ -57,3 +57,11 @@ class Actor(models.Model):
|
||||||
setattr(self, field, v.lower())
|
setattr(self, field, v.lower())
|
||||||
|
|
||||||
super().save(**kwargs)
|
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:
|
for f in test._meta.fields:
|
||||||
assert getattr(from_db, f.name) == getattr(test, f.name)
|
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
|
# This will help us detect and correct bugs
|
||||||
RAVEN_ENABLED=false
|
RAVEN_ENABLED=false
|
||||||
RAVEN_DSN=https://44332e9fdd3d42879c7d35bf8562c6a4:0062dc16a22b41679cd5765e5342f716@sentry.eliotberriot.com/5
|
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
|
||||||
|
|
Loading…
Reference in New Issue