Skip to content

Commit a7e4230

Browse files
authored
Merge pull request #1116 from kmala/registration
fix(registration): allow admin user registration when the mode is admin_only
2 parents bee0be4 + 1c0350a commit a7e4230

2 files changed

Lines changed: 19 additions & 1 deletion

File tree

rootfs/api/permissions.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
from rest_framework import exceptions
33
from rest_framework import permissions
44
from django.conf import settings
5-
from django.contrib.auth.models import AnonymousUser
5+
from django.contrib.auth.models import AnonymousUser, User
66

77
from api import models
88

@@ -109,6 +109,8 @@ def has_permission(self, request, view):
109109
if settings.REGISTRATION_MODE == 'enabled':
110110
return True
111111
elif settings.REGISTRATION_MODE == 'admin_only':
112+
if not User.objects.filter(is_superuser=True).exists():
113+
return True
112114
return request.user.is_superuser
113115
else:
114116
raise Exception("{} is not a valid registation mode"

rootfs/api/tests/test_perm.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from django.contrib.auth.models import User
22
from rest_framework.authtoken.models import Token
3+
from django.test.utils import override_settings
34
from api.tests import DeisTestCase
45

56

@@ -32,6 +33,21 @@ def test_first_signup(self):
3233
self.assertEqual(response.status_code, 201, response.data)
3334
self.assertFalse(response.data['is_superuser'])
3435

36+
@override_settings(REGISTRATION_MODE="admin_only")
37+
def test_first_signup_admin_only(self):
38+
# register a first user
39+
username, password = 'firstuser', 'password'
40+
email = 'autotest@deis.io'
41+
submit = {
42+
'username': username,
43+
'password': password,
44+
'email': email,
45+
}
46+
url = '/v2/auth/register'
47+
response = self.client.post(url, submit)
48+
self.assertEqual(response.status_code, 201, response.data)
49+
self.assertTrue(response.data['is_superuser'])
50+
3551
def test_list(self):
3652
submit = {
3753
'username': 'firstuser',

0 commit comments

Comments
 (0)