From 175d701247c6e6e1100c4ad560e257d17cf68ea1 Mon Sep 17 00:00:00 2001
From: Eliot Berriot <contact@eliotberriot.com>
Date: Wed, 11 Dec 2019 11:05:34 +0100
Subject: [PATCH] Fix #982: Removed "nodeinfo disabled" setting, as nodeinfo is
 required for the UI to work

---
 api/funkwhale_api/federation/views.py             |  2 --
 .../instance/dynamic_preferences_registry.py      | 15 ---------------
 api/funkwhale_api/instance/views.py               |  3 ---
 api/tests/federation/test_views.py                |  7 -------
 api/tests/instance/test_views.py                  |  8 --------
 changes/changelog.d/982.bugfix                    |  1 +
 front/src/views/admin/Settings.vue                |  1 -
 7 files changed, 1 insertion(+), 36 deletions(-)
 create mode 100644 changes/changelog.d/982.bugfix

diff --git a/api/funkwhale_api/federation/views.py b/api/funkwhale_api/federation/views.py
index 35043e8ed5..f0ac6687db 100644
--- a/api/funkwhale_api/federation/views.py
+++ b/api/funkwhale_api/federation/views.py
@@ -143,8 +143,6 @@ class WellKnownViewSet(viewsets.GenericViewSet):
 
     @action(methods=["get"], detail=False)
     def nodeinfo(self, request, *args, **kwargs):
-        if not preferences.get("instance__nodeinfo_enabled"):
-            return HttpResponse(status=404)
         data = {
             "links": [
                 {
diff --git a/api/funkwhale_api/instance/dynamic_preferences_registry.py b/api/funkwhale_api/instance/dynamic_preferences_registry.py
index be360701dd..66d8211c15 100644
--- a/api/funkwhale_api/instance/dynamic_preferences_registry.py
+++ b/api/funkwhale_api/instance/dynamic_preferences_registry.py
@@ -127,21 +127,6 @@ class RavenDSN(types.StringPreference):
     field_kwargs = {"required": False}
 
 
-@global_preferences_registry.register
-class InstanceNodeinfoEnabled(types.BooleanPreference):
-    show_in_api = False
-    section = instance
-    name = "nodeinfo_enabled"
-    default = True
-    verbose_name = "Enable nodeinfo endpoint"
-    help_text = (
-        "This endpoint is needed for your about page to work. "
-        "It's also helpful for the various monitoring "
-        "tools that map and analyzize the fediverse, "
-        "but you can disable it completely if needed."
-    )
-
-
 @global_preferences_registry.register
 class InstanceNodeinfoPrivate(types.BooleanPreference):
     show_in_api = False
diff --git a/api/funkwhale_api/instance/views.py b/api/funkwhale_api/instance/views.py
index 1800c3dbc7..29a947cb16 100644
--- a/api/funkwhale_api/instance/views.py
+++ b/api/funkwhale_api/instance/views.py
@@ -4,7 +4,6 @@ from dynamic_preferences.registries import global_preferences_registry
 from rest_framework import views
 from rest_framework.response import Response
 
-from funkwhale_api.common import preferences
 from funkwhale_api.users.oauth import permissions as oauth_permissions
 
 from . import nodeinfo
@@ -38,7 +37,5 @@ class NodeInfo(views.APIView):
     authentication_classes = []
 
     def get(self, request, *args, **kwargs):
-        if not preferences.get("instance__nodeinfo_enabled"):
-            return Response(status=404)
         data = nodeinfo.get()
         return Response(data, status=200, content_type=NODEINFO_2_CONTENT_TYPE)
diff --git a/api/tests/federation/test_views.py b/api/tests/federation/test_views.py
index a47fdd198d..4428ae925a 100644
--- a/api/tests/federation/test_views.py
+++ b/api/tests/federation/test_views.py
@@ -48,13 +48,6 @@ def test_wellknown_nodeinfo(db, preferences, api_client, settings):
     assert response.data == expected
 
 
-def test_wellknown_nodeinfo_disabled(db, preferences, api_client):
-    preferences["instance__nodeinfo_enabled"] = False
-    url = reverse("federation:well-known-nodeinfo")
-    response = api_client.get(url)
-    assert response.status_code == 404
-
-
 def test_local_actor_detail(factories, api_client):
     user = factories["users.User"](with_actor=True)
     url = reverse(
diff --git a/api/tests/instance/test_views.py b/api/tests/instance/test_views.py
index 0b3b7b79ad..08c4480530 100644
--- a/api/tests/instance/test_views.py
+++ b/api/tests/instance/test_views.py
@@ -12,14 +12,6 @@ def test_nodeinfo_endpoint(db, api_client, mocker):
     assert response.data == payload
 
 
-def test_nodeinfo_endpoint_disabled(db, api_client, preferences):
-    preferences["instance__nodeinfo_enabled"] = False
-    url = reverse("api:v1:instance:nodeinfo-2.0")
-    response = api_client.get(url)
-
-    assert response.status_code == 404
-
-
 def test_settings_only_list_public_settings(db, api_client, preferences):
     url = reverse("api:v1:instance:settings")
     response = api_client.get(url)
diff --git a/changes/changelog.d/982.bugfix b/changes/changelog.d/982.bugfix
new file mode 100644
index 0000000000..1e0252c3f1
--- /dev/null
+++ b/changes/changelog.d/982.bugfix
@@ -0,0 +1 @@
+Removed "nodeinfo disabled" setting, as nodeinfo is required for the UI to work (#982)
diff --git a/front/src/views/admin/Settings.vue b/front/src/views/admin/Settings.vue
index eeba965ad7..e9072d5119 100644
--- a/front/src/views/admin/Settings.vue
+++ b/front/src/views/admin/Settings.vue
@@ -159,7 +159,6 @@ export default {
           label: statisticsLabel,
           id: "statistics",
           settings: [
-            "instance__nodeinfo_enabled",
             "instance__nodeinfo_stats_enabled",
             "instance__nodeinfo_private"
           ]
-- 
GitLab