diff --git a/api/funkwhale_api/instance/dynamic_preferences_registry.py b/api/funkwhale_api/instance/dynamic_preferences_registry.py index ed2cef527f9b54087009d40be8b5321049071ff3..0d6260a83726fffa6118ba5f1ecfa30472f2c359 100644 --- a/api/funkwhale_api/instance/dynamic_preferences_registry.py +++ b/api/funkwhale_api/instance/dynamic_preferences_registry.py @@ -59,6 +59,29 @@ class InstanceTerms(types.StringPreference): field_kwargs = {"required": False} +@global_preferences_registry.register +class InstanceRules(types.StringPreference): + show_in_api = True + section = instance + name = "rules" + verbose_name = "Rules" + default = "" + help_text = "Rules/Code of Conduct (markdown allowed)." + widget = widgets.Textarea + field_kwargs = {"required": False} + + +@global_preferences_registry.register +class InstanceContactEmail(types.StringPreference): + show_in_api = True + section = instance + name = "contact_email" + verbose_name = "Contact email" + default = "" + help_text = "A contact email for visitors who need to contact an admin or moderator" + 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 dc495108e79ddfe25497f57a4c043d08cd4a5ce6..15f2b1b41e94550a618b4e741b7b1929919fe825 100644 --- a/api/funkwhale_api/instance/nodeinfo.py +++ b/api/funkwhale_api/instance/nodeinfo.py @@ -42,6 +42,8 @@ def get(): "private": all_preferences.get("instance__nodeinfo_private"), "shortDescription": all_preferences.get("instance__short_description"), "longDescription": all_preferences.get("instance__long_description"), + "rules": all_preferences.get("instance__rules"), + "contactEmail": all_preferences.get("instance__contact_email"), "terms": all_preferences.get("instance__terms"), "nodeName": all_preferences.get("instance__name"), "banner": federation_utils.full_url(banner.url) if banner else None, diff --git a/api/tests/instance/test_nodeinfo.py b/api/tests/instance/test_nodeinfo.py index d30873ec224ca1ed065064a8b986c951e7e75f9d..d1816ff3d21e4d42466899f063dde269a36d12b6 100644 --- a/api/tests/instance/test_nodeinfo.py +++ b/api/tests/instance/test_nodeinfo.py @@ -40,6 +40,8 @@ def test_nodeinfo_dump(preferences, mocker, avatar): "shortDescription": preferences["instance__short_description"], "longDescription": preferences["instance__long_description"], "nodeName": preferences["instance__name"], + "rules": preferences["instance__rules"], + "contactEmail": preferences["instance__contact_email"], "terms": preferences["instance__terms"], "banner": federation_utils.full_url(preferences["instance__banner"].url), "library": { @@ -109,6 +111,8 @@ def test_nodeinfo_dump_stats_disabled(preferences, mocker): "shortDescription": preferences["instance__short_description"], "longDescription": preferences["instance__long_description"], "nodeName": preferences["instance__name"], + "rules": preferences["instance__rules"], + "contactEmail": preferences["instance__contact_email"], "terms": preferences["instance__terms"], "banner": None, "library": { diff --git a/front/src/views/admin/Settings.vue b/front/src/views/admin/Settings.vue index 6ae7e73a116ea6199227ce865fa17cacef139cc3..8d080e0d4e55bb542ed9d0e92366b7c0aff48e6b 100644 --- a/front/src/views/admin/Settings.vue +++ b/front/src/views/admin/Settings.vue @@ -95,6 +95,8 @@ export default { "instance__name", "instance__short_description", "instance__long_description", + "instance__contact_email", + "instance__rules", "instance__terms", "instance__banner", ]