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 2014/09/17 15:34:12 UTC

[25/35] git commit: [#7657] ticket:651 Add ability for admin to enable/disable account

[#7657] ticket:651 Add ability for admin to enable/disable account


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

Branch: refs/heads/je/42cc_7657
Commit: b82cd93b3424a20ef1870241ae86950c597a4946
Parents: 57fcd18
Author: Igor Bondarenko <je...@gmail.com>
Authored: Tue Sep 16 10:41:51 2014 +0300
Committer: Igor Bondarenko <je...@gmail.com>
Committed: Wed Sep 17 16:11:37 2014 +0300

----------------------------------------------------------------------
 Allura/allura/controllers/site_admin.py         | 16 ++++++++++++-
 Allura/allura/lib/plugin.py                     | 20 +++++++++++++++-
 .../templates/site_admin_user_details.html      | 25 ++++++++++++++++++++
 3 files changed, 59 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/allura/blob/b82cd93b/Allura/allura/controllers/site_admin.py
----------------------------------------------------------------------
diff --git a/Allura/allura/controllers/site_admin.py b/Allura/allura/controllers/site_admin.py
index 105de94..c0d9bc8 100644
--- a/Allura/allura/controllers/site_admin.py
+++ b/Allura/allura/controllers/site_admin.py
@@ -34,7 +34,7 @@ from allura.app import SitemapEntry
 from allura.lib import helpers as h
 from allura.lib import validators as v
 from allura.lib.decorators import require_post
-from allura.lib.plugin import SiteAdminExtension, ProjectRegistrationProvider
+from allura.lib.plugin import SiteAdminExtension, ProjectRegistrationProvider, AuthenticationProvider
 from allura.lib import search
 from allura.lib.security import require_access
 from allura.lib.widgets import form_fields as ffw
@@ -480,6 +480,20 @@ class AdminUserDetailsController(object):
             flash('Can not add comment "%s" for user %s' % (comment, user))
         redirect(request.referer)
 
+    @expose()
+    @require_post()
+    def set_status(self, username=None, status=None):
+        user = M.User.by_username(username)
+        if not user:
+            raise HTTPNotFound()
+        if status == 'enable' and user.disabled:
+            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')
+        redirect(request.referer)
+
 
 class StatsSiteAdminExtension(SiteAdminExtension):
     controllers = {'stats': StatsController}

http://git-wip-us.apache.org/repos/asf/allura/blob/b82cd93b/Allura/allura/lib/plugin.py
----------------------------------------------------------------------
diff --git a/Allura/allura/lib/plugin.py b/Allura/allura/lib/plugin.py
index 8537f63..1b618e2 100644
--- a/Allura/allura/lib/plugin.py
+++ b/Allura/allura/lib/plugin.py
@@ -179,6 +179,10 @@ class AuthenticationProvider(object):
         '''Disable user account'''
         raise NotImplementedError, 'disable_user'
 
+    def enable_user(self, user):
+        '''Enable user account'''
+        raise NotImplementedError, 'enable_user'
+
     def by_username(self, username):
         '''
         Find a user by username.
@@ -310,7 +314,18 @@ class LocalAuthenticationProvider(AuthenticationProvider):
     def disable_user(self, user):
         user.disabled = True
         session(user).flush(user)
-        h.auditlog_user('Account disabled', user=user)
+        suffix = u''
+        if user != c.user:
+            suffix = u' by %s' % c.user.username
+        h.auditlog_user(u'Account disabled' + suffix, user=user)
+
+    def enable_user(self, user):
+        user.disabled = False
+        session(user).flush(user)
+        suffix = u''
+        if user != c.user:
+            suffix = u' by %s' % c.user.username
+        h.auditlog_user(u'Account enabled' + suffix, user=user)
 
     def validate_password(self, user, password):
         return self._validate_password(user, password)
@@ -548,6 +563,9 @@ class LdapAuthenticationProvider(AuthenticationProvider):
     def disable_user(self, user):
         return LocalAuthenticationProvider(None).disable_user(user)
 
+    def enable_user(self, user):
+        return LocalAuthenticationProvider(None).enable_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/b82cd93b/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 c6936f6..8ffe9a5 100644
--- a/Allura/allura/templates/site_admin_user_details.html
+++ b/Allura/allura/templates/site_admin_user_details.html
@@ -27,11 +27,24 @@
     <div class="grid-23">
       <fieldset>
         <legend>General</legend>
+        <div class="grid-19">
         <ul>
           <li>Username: {{ user.username }} (<a href="{{ user.url() }}">Go to profile page</a>)</li>
           <li>Full name: {{ user.get_pref('display_name') }}</li>
           <li>Registered: {{ user.registration_date() }} ({{ h.ago(user.registration_date()) }})</li>
         </ul>
+        </div>
+
+        <div class="grid-3">
+        <form action='/nf/admin/user/set_status' method="POST">
+          <div class='grid-3'>
+            <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>
+          </div>
+          <input type='hidden' name='username' value='{{ user.username }}'>
+          {{lib.csrf_token()}}
+        </form>
+        </div>
       </fieldset>
     </div>
   {% endblock general_info %}
@@ -107,3 +120,15 @@
 }
 </style>
 {% endblock %}
+
+{% block extra_js %}
+{{ super() }}
+<script>
+$(document).ready(function() {
+  // enabled/disabled change
+  $('input[name="status"]').change(function(e) {
+    $(this).parents('form').submit();
+  });
+});
+</script>
+{% endblock %}