From 3dd1a20b68f5fc89d2381ffee6e97df0836f5aa1 Mon Sep 17 00:00:00 2001
From: Eliot Berriot <contact@eliotberriot.com>
Date: Sat, 24 Feb 2018 12:20:42 +0100
Subject: [PATCH] Fix #58: enabling registrations is now done via a preference

---
 api/funkwhale_api/users/adapters.py               | 11 +++--------
 .../users/dynamic_preferences_registry.py         | 15 +++++++++++++++
 api/tests/users/test_views.py                     |  8 ++++----
 3 files changed, 22 insertions(+), 12 deletions(-)
 create mode 100644 api/funkwhale_api/users/dynamic_preferences_registry.py

diff --git a/api/funkwhale_api/users/adapters.py b/api/funkwhale_api/users/adapters.py
index 792b4860..96d1b8b1 100644
--- a/api/funkwhale_api/users/adapters.py
+++ b/api/funkwhale_api/users/adapters.py
@@ -1,15 +1,10 @@
 from allauth.account.adapter import DefaultAccountAdapter
 
-from django.conf import settings
+from dynamic_preferences.registries import global_preferences_registry
 
 
 class FunkwhaleAccountAdapter(DefaultAccountAdapter):
 
     def is_open_for_signup(self, request):
-
-        if settings.REGISTRATION_MODE == "disabled":
-            return False
-        if settings.REGISTRATION_MODE == "public":
-            return True
-
-        return False
+        manager = global_preferences_registry.manager()
+        return manager['users__registration_enabled']
diff --git a/api/funkwhale_api/users/dynamic_preferences_registry.py b/api/funkwhale_api/users/dynamic_preferences_registry.py
new file mode 100644
index 00000000..16d79da1
--- /dev/null
+++ b/api/funkwhale_api/users/dynamic_preferences_registry.py
@@ -0,0 +1,15 @@
+from dynamic_preferences import types
+from dynamic_preferences.registries import global_preferences_registry
+
+users = types.Section('users')
+
+
+@global_preferences_registry.register
+class RegistrationEnabled(types.BooleanPreference):
+    show_in_api = True
+    section = users
+    name = 'registration_enabled'
+    default = False
+    verbose_name = (
+        'Can visitors open a new account on this instance?'
+    )
diff --git a/api/tests/users/test_views.py b/api/tests/users/test_views.py
index 1eb8ef22..569acbd1 100644
--- a/api/tests/users/test_views.py
+++ b/api/tests/users/test_views.py
@@ -6,7 +6,7 @@ from django.urls import reverse
 from funkwhale_api.users.models import User
 
 
-def test_can_create_user_via_api(settings, client, db):
+def test_can_create_user_via_api(preferences, client, db):
     url = reverse('rest_register')
     data = {
         'username': 'test1',
@@ -14,7 +14,7 @@ def test_can_create_user_via_api(settings, client, db):
         'password1': 'testtest',
         'password2': 'testtest',
     }
-    settings.REGISTRATION_MODE = "public"
+    preferences['users__registration_enabled'] = True
     response = client.post(url, data)
     assert response.status_code == 201
 
@@ -22,7 +22,7 @@ def test_can_create_user_via_api(settings, client, db):
     assert u.username == 'test1'
 
 
-def test_can_disable_registration_view(settings, client, db):
+def test_can_disable_registration_view(preferences, client, db):
     url = reverse('rest_register')
     data = {
         'username': 'test1',
@@ -30,7 +30,7 @@ def test_can_disable_registration_view(settings, client, db):
         'password1': 'testtest',
         'password2': 'testtest',
     }
-    settings.REGISTRATION_MODE = "disabled"
+    preferences['users__registration_enabled'] = False
     response = client.post(url, data)
     assert response.status_code == 403
 
-- 
GitLab