You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@allura.apache.org by je...@apache.org on 2015/01/12 16:52:22 UTC

allura git commit: [#7816] ticket:709 Manage user's pending status

Repository: allura
Updated Branches:
  refs/heads/ib/7816 [created] 4c6700d52


[#7816] ticket:709 Manage user's pending status


Project: http://git-wip-us.apache.org/repos/asf/allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/allura/commit/4c6700d5
Tree: http://git-wip-us.apache.org/repos/asf/allura/tree/4c6700d5
Diff: http://git-wip-us.apache.org/repos/asf/allura/diff/4c6700d5

Branch: refs/heads/ib/7816
Commit: 4c6700d52a17c8343a3e0f66b199bac0ca1424ac
Parents: 184ffd6
Author: Igor Bondarenko <je...@gmail.com>
Authored: Mon Jan 12 15:32:00 2015 +0000
Committer: Igor Bondarenko <je...@gmail.com>
Committed: Mon Jan 12 15:36:29 2015 +0000

----------------------------------------------------------------------
 Allura/allura/controllers/site_admin.py         |  7 +-
 Allura/allura/lib/plugin.py                     | 12 +++
 .../templates/site_admin_user_details.html      |  5 +-
 .../allura/tests/functional/test_site_admin.py  | 91 ++++++++++++++++++++
 4 files changed, 112 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/allura/blob/4c6700d5/Allura/allura/controllers/site_admin.py
----------------------------------------------------------------------
diff --git a/Allura/allura/controllers/site_admin.py b/Allura/allura/controllers/site_admin.py
index 5b84267..043678a 100644
--- a/Allura/allura/controllers/site_admin.py
+++ b/Allura/allura/controllers/site_admin.py
@@ -521,12 +521,17 @@ class AdminUserDetailsController(object):
         user = M.User.by_username(username)
         if not user or user.is_anonymous():
             raise HTTPNotFound()
-        if status == 'enable' and user.disabled:
+        if status == 'enable' and (user.disabled or user.pending):
+            AuthenticationProvider.get(request).activate_user(user)
             AuthenticationProvider.get(request).enable_user(user)
             flash('User enabled')
         elif status == 'disable' and not user.disabled:
             AuthenticationProvider.get(request).disable_user(user)
             flash('User disabled')
+        elif status == 'pending':
+            AuthenticationProvider.get(request).deactivate_user(user)
+            AuthenticationProvider.get(request).enable_user(user)
+            flash('Set user status to pending')
         redirect(request.referer)
 
     @expose()

http://git-wip-us.apache.org/repos/asf/allura/blob/4c6700d5/Allura/allura/lib/plugin.py
----------------------------------------------------------------------
diff --git a/Allura/allura/lib/plugin.py b/Allura/allura/lib/plugin.py
index e761ef3..5cf1905 100644
--- a/Allura/allura/lib/plugin.py
+++ b/Allura/allura/lib/plugin.py
@@ -197,6 +197,10 @@ class AuthenticationProvider(object):
         '''Activate user after registration'''
         raise NotImplementedError, 'activate_user'
 
+    def deactivate_user(self, user):
+        '''Deactivate user (== registation not confirmed)'''
+        raise NotImplementedError, 'deactivate_user'
+
     def by_username(self, username):
         '''
         Find a user by username.
@@ -366,6 +370,11 @@ class LocalAuthenticationProvider(AuthenticationProvider):
         session(user).flush(user)
         h.auditlog_user('Account activated', user=user)
 
+    def deactivate_user(self, user):
+        user.pending = True
+        session(user).flush(user)
+        h.auditlog_user('Account deactivated', user=user)
+
     def validate_password(self, user, password):
         return self._validate_password(user, password)
 
@@ -624,6 +633,9 @@ class LdapAuthenticationProvider(AuthenticationProvider):
     def activate_user(self, user):
         return LocalAuthenticationProvider(None).activate_user(user)
 
+    def deactivate_user(self, user):
+        return LocalAuthenticationProvider(None).deactivate_user(user)
+
     def get_last_password_updated(self, user):
         return LocalAuthenticationProvider(None).get_last_password_updated(user)
 

http://git-wip-us.apache.org/repos/asf/allura/blob/4c6700d5/Allura/allura/templates/site_admin_user_details.html
----------------------------------------------------------------------
diff --git a/Allura/allura/templates/site_admin_user_details.html b/Allura/allura/templates/site_admin_user_details.html
index 8f18d7e..f5a8d2d 100644
--- a/Allura/allura/templates/site_admin_user_details.html
+++ b/Allura/allura/templates/site_admin_user_details.html
@@ -42,8 +42,9 @@
         <div class="grid-6">
         <form action='/nf/admin/user/set_status' method="POST">
           <div class='grid-6'>
-            <label><input type="radio" name="status" value="enable"{% if not user.disabled %} checked="checked"{% endif %}>Enabled</label><br>
-            <label><input type="radio" name="status" value="disable"{% if user.disabled %} checked="checked"{% endif %}>Disabled</label>
+            <label><input type="radio" name="status" value="enable"{% if not user.disabled and not user.pending %} checked="checked"{% endif %}>Enabled</label><br>
+            <label><input type="radio" name="status" value="disable"{% if user.disabled %} checked="checked"{% endif %}>Disabled</label><br>
+            <label><input type="radio" name="status" value="pending"{% if user.pending and not user.disabled %} checked="checked"{% endif %}>Pending</label>
           </div>
           <input type='hidden' name='username' value='{{ user.username }}'>
           {{lib.csrf_token()}}

http://git-wip-us.apache.org/repos/asf/allura/blob/4c6700d5/Allura/allura/tests/functional/test_site_admin.py
----------------------------------------------------------------------
diff --git a/Allura/allura/tests/functional/test_site_admin.py b/Allura/allura/tests/functional/test_site_admin.py
index 197d058..6c327c7 100644
--- a/Allura/allura/tests/functional/test_site_admin.py
+++ b/Allura/allura/tests/functional/test_site_admin.py
@@ -347,7 +347,9 @@ class TestUserDetails(TestController):
         assert_in(u'Comment by test-admin: I was hêre!', r)
 
     def test_disable_user(self):
+        # user was not pending
         assert_equal(M.User.by_username('test-user-3').disabled, False)
+        assert_equal(M.User.by_username('test-user-3').pending, False)
         r = self.app.get('/nf/admin/user/test-user-3')
         form = r.forms[0]
         assert_equal(form['username'].value, 'test-user-3')
@@ -356,12 +358,66 @@ class TestUserDetails(TestController):
         r = form.submit()
         assert_in(u'User disabled', self.webflash(r))
         assert_equal(M.User.by_username('test-user-3').disabled, True)
+        assert_equal(M.User.by_username('test-user-3').pending, False)
+
+        # user was pending
+        user = M.User.by_username('test-user-3')
+        user.disabled = False
+        user.pending = True
+        ThreadLocalORMSession.flush_all()
+        assert_equal(M.User.by_username('test-user-3').disabled, False)
+        assert_equal(M.User.by_username('test-user-3').pending, True)
+        r = self.app.get('/nf/admin/user/test-user-3')
+        form = r.forms[0]
+        assert_equal(form['username'].value, 'test-user-3')
+        assert_equal(form['status'].value, 'pending')
+        form['status'].value = 'disable'
+        r = form.submit()
+        assert_in(u'User disabled', self.webflash(r))
+        assert_equal(M.User.by_username('test-user-3').disabled, True)
+        assert_equal(M.User.by_username('test-user-3').pending, True)
 
     def test_enable_user(self):
+        # user was not pending
+        user = M.User.by_username('test-user-3')
+        user.disabled = True
+        ThreadLocalORMSession.flush_all()
+        assert_equal(M.User.by_username('test-user-3').disabled, True)
+        assert_equal(M.User.by_username('test-user-3').pending, False)
+        r = self.app.get('/nf/admin/user/test-user-3')
+        form = r.forms[0]
+        assert_equal(form['username'].value, 'test-user-3')
+        assert_equal(form['status'].value, 'disable')
+        form['status'].value = 'enable'
+        r = form.submit()
+        assert_in(u'User enabled', self.webflash(r))
+        assert_equal(M.User.by_username('test-user-3').disabled, False)
+        assert_equal(M.User.by_username('test-user-3').pending, False)
+
+        # user was pending
+        user = M.User.by_username('test-user-3')
+        user.disabled = False
+        user.pending = True
+        ThreadLocalORMSession.flush_all()
+        assert_equal(M.User.by_username('test-user-3').disabled, False)
+        assert_equal(M.User.by_username('test-user-3').pending, True)
+        r = self.app.get('/nf/admin/user/test-user-3')
+        form = r.forms[0]
+        assert_equal(form['username'].value, 'test-user-3')
+        assert_equal(form['status'].value, 'pending')
+        form['status'].value = 'enable'
+        r = form.submit()
+        assert_in(u'User enabled', self.webflash(r))
+        assert_equal(M.User.by_username('test-user-3').disabled, False)
+        assert_equal(M.User.by_username('test-user-3').pending, False)
+
+        # user was pending and disabled
         user = M.User.by_username('test-user-3')
         user.disabled = True
+        user.pending = True
         ThreadLocalORMSession.flush_all()
         assert_equal(M.User.by_username('test-user-3').disabled, True)
+        assert_equal(M.User.by_username('test-user-3').pending, True)
         r = self.app.get('/nf/admin/user/test-user-3')
         form = r.forms[0]
         assert_equal(form['username'].value, 'test-user-3')
@@ -370,6 +426,41 @@ class TestUserDetails(TestController):
         r = form.submit()
         assert_in(u'User enabled', self.webflash(r))
         assert_equal(M.User.by_username('test-user-3').disabled, False)
+        assert_equal(M.User.by_username('test-user-3').pending, False)
+
+    def test_set_pending(self):
+        # user was disabled
+        user = M.User.by_username('test-user-3')
+        user.disabled = True
+        ThreadLocalORMSession.flush_all()
+        assert_equal(M.User.by_username('test-user-3').disabled, True)
+        assert_equal(M.User.by_username('test-user-3').pending, False)
+        r = self.app.get('/nf/admin/user/test-user-3')
+        form = r.forms[0]
+        assert_equal(form['username'].value, 'test-user-3')
+        assert_equal(form['status'].value, 'disable')
+        form['status'].value = 'pending'
+        r = form.submit()
+        assert_in(u'Set user status to pending', self.webflash(r))
+        assert_equal(M.User.by_username('test-user-3').disabled, False)
+        assert_equal(M.User.by_username('test-user-3').pending, True)
+
+        # user was enabled
+        user = M.User.by_username('test-user-3')
+        user.pending = False
+        user.disabled = False
+        ThreadLocalORMSession.flush_all()
+        assert_equal(M.User.by_username('test-user-3').disabled, False)
+        assert_equal(M.User.by_username('test-user-3').pending, False)
+        r = self.app.get('/nf/admin/user/test-user-3')
+        form = r.forms[0]
+        assert_equal(form['username'].value, 'test-user-3')
+        assert_equal(form['status'].value, 'enable')
+        form['status'].value = 'pending'
+        r = form.submit()
+        assert_in(u'Set user status to pending', self.webflash(r))
+        assert_equal(M.User.by_username('test-user-3').disabled, False)
+        assert_equal(M.User.by_username('test-user-3').pending, True)
 
     def test_emails(self):
         # add test@example.com