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_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
|
||||
|
|
Loading…
Reference in New Issue