From 01d220600188b18e5418487727115e28266eeebe Mon Sep 17 00:00:00 2001 From: Eliot Berriot Date: Mon, 16 Sep 2019 11:32:38 +0200 Subject: [PATCH 1/2] Reduce number of cache calls by retrieving multiple preferences at once in nodeinfo --- api/funkwhale_api/common/preferences.py | 5 +++++ api/funkwhale_api/instance/nodeinfo.py | 25 +++++++++++++------------ 2 files changed, 18 insertions(+), 12 deletions(-) diff --git a/api/funkwhale_api/common/preferences.py b/api/funkwhale_api/common/preferences.py index 527d00c04..668a7c897 100644 --- a/api/funkwhale_api/common/preferences.py +++ b/api/funkwhale_api/common/preferences.py @@ -14,6 +14,11 @@ def get(pref): return manager[pref] +def all(): + manager = global_preferences_registry.manager() + return manager.all() + + def set(pref, value): manager = global_preferences_registry.manager() manager[pref] = value diff --git a/api/funkwhale_api/instance/nodeinfo.py b/api/funkwhale_api/instance/nodeinfo.py index ecdca9e40..1c15cfac5 100644 --- a/api/funkwhale_api/instance/nodeinfo.py +++ b/api/funkwhale_api/instance/nodeinfo.py @@ -13,10 +13,11 @@ memo = memoize.Memoizer(store, namespace="instance:stats") def get(): - share_stats = preferences.get("instance__nodeinfo_stats_enabled") - allow_list_enabled = preferences.get("moderation__allow_list_enabled") - allow_list_public = preferences.get("moderation__allow_list_public") - unauthenticated_report_types = preferences.get( + all_preferences = preferences.all() + share_stats = all_preferences.get("instance__nodeinfo_stats_enabled") + allow_list_enabled = all_preferences.get("moderation__allow_list_enabled") + allow_list_public = all_preferences.get("moderation__allow_list_public") + unauthenticated_report_types = all_preferences.get( "moderation__unauthenticated_report_types" ) if allow_list_enabled and allow_list_public: @@ -32,20 +33,20 @@ def get(): "software": {"name": "funkwhale", "version": funkwhale_api.__version__}, "protocols": ["activitypub"], "services": {"inbound": [], "outbound": []}, - "openRegistrations": preferences.get("users__registration_enabled"), + "openRegistrations": all_preferences.get("users__registration_enabled"), "usage": {"users": {"total": 0, "activeHalfyear": 0, "activeMonth": 0}}, "metadata": { "actorId": actors.get_service_actor().fid, - "private": preferences.get("instance__nodeinfo_private"), - "shortDescription": preferences.get("instance__short_description"), - "longDescription": preferences.get("instance__long_description"), - "nodeName": preferences.get("instance__name"), + "private": all_preferences.get("instance__nodeinfo_private"), + "shortDescription": all_preferences.get("instance__short_description"), + "longDescription": all_preferences.get("instance__long_description"), + "nodeName": all_preferences.get("instance__name"), "library": { - "federationEnabled": preferences.get("federation__enabled"), - "federationNeedsApproval": preferences.get( + "federationEnabled": all_preferences.get("federation__enabled"), + "federationNeedsApproval": all_preferences.get( "federation__music_needs_approval" ), - "anonymousCanListen": not preferences.get( + "anonymousCanListen": not all_preferences.get( "common__api_authentication_required" ), }, From 5ca3055713699d257b4e7a180669f6d8090924ab Mon Sep 17 00:00:00 2001 From: Eliot Berriot Date: Mon, 16 Sep 2019 11:33:33 +0200 Subject: [PATCH 2/2] See #872: added a new terms of service setting --- .../instance/dynamic_preferences_registry.py | 14 ++++++++++++++ api/funkwhale_api/instance/nodeinfo.py | 1 + api/tests/instance/test_nodeinfo.py | 2 ++ front/src/views/admin/Settings.vue | 3 ++- 4 files changed, 19 insertions(+), 1 deletion(-) diff --git a/api/funkwhale_api/instance/dynamic_preferences_registry.py b/api/funkwhale_api/instance/dynamic_preferences_registry.py index 9d1f1c8f7..1e6f3147c 100644 --- a/api/funkwhale_api/instance/dynamic_preferences_registry.py +++ b/api/funkwhale_api/instance/dynamic_preferences_registry.py @@ -43,6 +43,20 @@ class InstanceLongDescription(types.StringPreference): field_kwargs = {"required": False} +@global_preferences_registry.register +class InstanceTerms(types.StringPreference): + show_in_api = True + section = instance + name = "terms" + verbose_name = "Terms of service" + default = "" + help_text = ( + "Terms of service and privacy policy for your instance (markdown allowed)." + ) + widget = widgets.Textarea + field_kwargs = {"required": False} + + @global_preferences_registry.register class RavenDSN(types.StringPreference): show_in_api = True diff --git a/api/funkwhale_api/instance/nodeinfo.py b/api/funkwhale_api/instance/nodeinfo.py index 1c15cfac5..1d401fbca 100644 --- a/api/funkwhale_api/instance/nodeinfo.py +++ b/api/funkwhale_api/instance/nodeinfo.py @@ -40,6 +40,7 @@ def get(): "private": all_preferences.get("instance__nodeinfo_private"), "shortDescription": all_preferences.get("instance__short_description"), "longDescription": all_preferences.get("instance__long_description"), + "terms": all_preferences.get("instance__terms"), "nodeName": all_preferences.get("instance__name"), "library": { "federationEnabled": all_preferences.get("federation__enabled"), diff --git a/api/tests/instance/test_nodeinfo.py b/api/tests/instance/test_nodeinfo.py index cdb9ad93a..f85f34b25 100644 --- a/api/tests/instance/test_nodeinfo.py +++ b/api/tests/instance/test_nodeinfo.py @@ -38,6 +38,7 @@ def test_nodeinfo_dump(preferences, mocker): "shortDescription": preferences["instance__short_description"], "longDescription": preferences["instance__long_description"], "nodeName": preferences["instance__name"], + "terms": preferences["instance__terms"], "library": { "federationEnabled": preferences["federation__enabled"], "federationNeedsApproval": preferences[ @@ -105,6 +106,7 @@ def test_nodeinfo_dump_stats_disabled(preferences, mocker): "shortDescription": preferences["instance__short_description"], "longDescription": preferences["instance__long_description"], "nodeName": preferences["instance__name"], + "terms": preferences["instance__terms"], "library": { "federationEnabled": preferences["federation__enabled"], "federationNeedsApproval": preferences[ diff --git a/front/src/views/admin/Settings.vue b/front/src/views/admin/Settings.vue index 85a2afb42..a538329e3 100644 --- a/front/src/views/admin/Settings.vue +++ b/front/src/views/admin/Settings.vue @@ -94,7 +94,8 @@ export default { settings: [ "instance__name", "instance__short_description", - "instance__long_description" + "instance__long_description", + "instance__terms", ] }, {