diff --git a/api/funkwhale_api/instance/dynamic_preferences_registry.py b/api/funkwhale_api/instance/dynamic_preferences_registry.py index 03555b0be57bde18f4fe13ba1b62d852ffd93ae4..20679fd3dcff4cec208477487b6d245219abc273 100644 --- a/api/funkwhale_api/instance/dynamic_preferences_registry.py +++ b/api/funkwhale_api/instance/dynamic_preferences_registry.py @@ -85,6 +85,20 @@ class InstanceNodeinfoEnabled(types.BooleanPreference): ) +@global_preferences_registry.register +class InstanceNodeinfoPrivate(types.BooleanPreference): + show_in_api = False + section = instance + name = 'nodeinfo_private' + default = False + verbose_name = 'Enable nodeinfo endpoint' + help_text = ( + 'Indicate in the nodeinfo endpoint that you do not want your instance' + 'to be tracked by third-party services.' + 'There is no guarantee these tools will honor this setting though.' + ) + + @global_preferences_registry.register class InstanceNodeinfoStatsEnabled(types.BooleanPreference): show_in_api = False diff --git a/api/funkwhale_api/instance/nodeinfo.py b/api/funkwhale_api/instance/nodeinfo.py index e267f197d17ce7c317128c684f1db8f72a1a47ba..dbc005af7b965b55a62abf7f47eb099174a88eac 100644 --- a/api/funkwhale_api/instance/nodeinfo.py +++ b/api/funkwhale_api/instance/nodeinfo.py @@ -12,6 +12,7 @@ memo = memoize.Memoizer(store, namespace='instance:stats') def get(): share_stats = preferences.get('instance__nodeinfo_stats_enabled') + private = preferences.get('instance__nodeinfo_private') data = { 'version': '2.0', 'software': { @@ -30,6 +31,7 @@ def get(): } }, 'metadata': { + 'private': preferences.get('instance__nodeinfo_private'), 'shortDescription': preferences.get('instance__short_description'), 'longDescription': preferences.get('instance__long_description'), 'nodeName': preferences.get('instance__name'), diff --git a/api/tests/instance/test_nodeinfo.py b/api/tests/instance/test_nodeinfo.py index 4ca1c43a5835f94a6db20018a76e456c5e1b7e28..87b8882880752d14a5572ca7a324d399688974e7 100644 --- a/api/tests/instance/test_nodeinfo.py +++ b/api/tests/instance/test_nodeinfo.py @@ -36,6 +36,7 @@ def test_nodeinfo_dump(preferences, mocker): } }, 'metadata': { + 'private': preferences['instance__nodeinfo_private'], 'shortDescription': preferences['instance__short_description'], 'longDescription': preferences['instance__long_description'], 'nodeName': preferences['instance__name'], @@ -92,6 +93,7 @@ def test_nodeinfo_dump_stats_disabled(preferences, mocker): } }, 'metadata': { + 'private': preferences['instance__nodeinfo_private'], 'shortDescription': preferences['instance__short_description'], 'longDescription': preferences['instance__long_description'], 'nodeName': preferences['instance__name'], diff --git a/changes/changelog.d/200.enhancement b/changes/changelog.d/200.enhancement new file mode 100644 index 0000000000000000000000000000000000000000..1e78b92f7d92396c64a35943f27b2f3ce05de04a --- /dev/null +++ b/changes/changelog.d/200.enhancement @@ -0,0 +1 @@ +Instances can now indicate on the nodeinfo endpoint if they want to remain private (#200)