You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@allura.apache.org by br...@apache.org on 2014/09/29 18:17:43 UTC

[12/27] git commit: [#7657] ticket:651 Use email addresses widget on admin page

[#7657] ticket:651 Use email addresses widget on admin page


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

Branch: refs/heads/db/7657
Commit: 239ad6b31433ee5a034cfb08e5376e0f2fc583ee
Parents: 2c49164
Author: Igor Bondarenko <je...@gmail.com>
Authored: Tue Sep 16 13:47:01 2014 +0300
Committer: Dave Brondsema <db...@slashdotmedia.com>
Committed: Fri Sep 26 16:39:45 2014 +0000

----------------------------------------------------------------------
 Allura/allura/controllers/auth.py               | 42 ++++-----
 Allura/allura/controllers/site_admin.py         | 12 ++-
 .../templates/site_admin_user_details.html      | 12 +++
 Allura/allura/templates/update_emails_form.html | 93 ++++++++++----------
 Allura/allura/templates/user_prefs.html         |  5 +-
 5 files changed, 94 insertions(+), 70 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/allura/blob/239ad6b3/Allura/allura/controllers/auth.py
----------------------------------------------------------------------
diff --git a/Allura/allura/controllers/auth.py b/Allura/allura/controllers/auth.py
index 8d254bb..0e4b4c4 100644
--- a/Allura/allura/controllers/auth.py
+++ b/Allura/allura/controllers/auth.py
@@ -430,69 +430,69 @@ class PreferencesController(BaseController):
         c.upload_key_form = F.upload_key_form
         provider = plugin.AuthenticationProvider.get(request)
         menu = provider.account_navigation()
-        return dict(menu=menu)
+        return dict(menu=menu, user=c.user)
 
-    def _update_emails(self, **kw):
+    def _update_emails(self, user, admin=False, **kw):
         addr = kw.pop('addr', None)
         new_addr= kw.pop('new_addr', None)
         primary_addr = kw.pop('primary_addr', None)
         oid = kw.pop('oid', None)
         new_oid = kw.pop('new_oid', None)
         provider = plugin.AuthenticationProvider.get(request)
-        for i, (old_a, data) in enumerate(zip(c.user.email_addresses, addr or [])):
-            obj = c.user.address_object(old_a)
+        for i, (old_a, data) in enumerate(zip(user.email_addresses, addr or [])):
+            obj = user.address_object(old_a)
             if data.get('delete') or not obj:
-                if not kw.get('password') or not provider.validate_password(c.user, kw.get('password')):
+                if not admin and (not kw.get('password') or not provider.validate_password(user, kw.get('password'))):
                     flash('You must provide your current password to delete an email', 'error')
                     return
-                if primary_addr == c.user.email_addresses[i]:
-                    if select_new_primary_addr(c.user, ignore_emails=primary_addr) is None \
+                if primary_addr == user.email_addresses[i]:
+                    if select_new_primary_addr(user, ignore_emails=primary_addr) is None \
                             and asbool(config.get('auth.require_email_addr', False)):
                         flash('You must have at least one verified email address.', 'error')
                         return
                     else:
                         # clear it now, a new one will get set below
-                        c.user.set_pref('email_address', None)
+                        user.set_pref('email_address', None)
                         primary_addr = None
-                h.auditlog_user('Email address deleted: %s', c.user.email_addresses[i])
-                del c.user.email_addresses[i]
+                h.auditlog_user('Email address deleted: %s', user.email_addresses[i])
+                del user.email_addresses[i]
                 if obj:
                     obj.delete()
         if new_addr.get('claim') or new_addr.get('addr'):
-            if not kw.get('password') or not provider.validate_password(c.user, kw.get('password')):
+            if not admin and (not kw.get('password') or not provider.validate_password(user, kw.get('password'))):
                 flash('You must provide your current password to claim new email', 'error')
                 return
             if M.EmailAddress.query.get(email=new_addr['addr'], confirmed=True) \
-                    or M.EmailAddress.query.get(email=new_addr['addr'], claimed_by_user_id=c.user._id):
+                    or M.EmailAddress.query.get(email=new_addr['addr'], claimed_by_user_id=user._id):
                 flash('Email address already claimed', 'error')
             elif mail_util.isvalid(new_addr['addr']):
-                c.user.email_addresses.append(new_addr['addr'])
+                user.email_addresses.append(new_addr['addr'])
                 em = M.EmailAddress.create(new_addr['addr'])
-                em.claimed_by_user_id = c.user._id
+                em.claimed_by_user_id = user._id
                 em.send_verification_link()
                 h.auditlog_user('New email address: %s', new_addr['addr'])
                 flash('A verification email has been sent.  Please check your email and click to confirm.')
             else:
                 flash('Email address %s is invalid' % new_addr['addr'], 'error')
-        if not primary_addr and not c.user.get_pref('email_address') and c.user.email_addresses:
-            primary_addr = select_new_primary_addr(c.user)
+        if not primary_addr and not user.get_pref('email_address') and user.email_addresses:
+            primary_addr = select_new_primary_addr(user)
         if primary_addr:
-            if c.user.get_pref('email_address') != primary_addr:
-                if not kw.get('password') or not provider.validate_password(c.user, kw.get('password')):
+            if user.get_pref('email_address') != primary_addr:
+                if not admin and (not kw.get('password') or not provider.validate_password(user, kw.get('password'))):
                     flash('You must provide your current password to change primary address', 'error')
                     return
                 h.auditlog_user(
                     'Primary email changed: %s => %s',
-                    c.user.get_pref('email_address'),
+                    user.get_pref('email_address'),
                     primary_addr)
-            c.user.set_pref('email_address', primary_addr)
+            user.set_pref('email_address', primary_addr)
 
     @h.vardec
     @expose()
     @require_post()
     def update_emails(self, **kw):
         if asbool(config.get('auth.allow_edit_prefs', True)):
-            self._update_emails(**kw)
+            self._update_emails(c.user, **kw)
         redirect('.')
 
     @h.vardec

http://git-wip-us.apache.org/repos/asf/allura/blob/239ad6b3/Allura/allura/controllers/site_admin.py
----------------------------------------------------------------------
diff --git a/Allura/allura/controllers/site_admin.py b/Allura/allura/controllers/site_admin.py
index bee6c8a..198207b 100644
--- a/Allura/allura/controllers/site_admin.py
+++ b/Allura/allura/controllers/site_admin.py
@@ -515,7 +515,7 @@ class AdminUserDetailsController(object):
     @require_post()
     def set_status(self, username=None, status=None):
         user = M.User.by_username(username)
-        if not user:
+        if not user or user.is_anonymous():
             raise HTTPNotFound()
         if status == 'enable' and user.disabled:
             AuthenticationProvider.get(request).enable_user(user)
@@ -525,6 +525,16 @@ class AdminUserDetailsController(object):
             flash('User disabled')
         redirect(request.referer)
 
+    @h.vardec
+    @expose()
+    @require_post()
+    def update_emails(self, username, **kw):
+        user = M.User.by_username(username)
+        if not user or user.is_anonymous():
+            raise HTTPNotFound()
+        allura.controllers.auth.PreferencesController()._update_emails(user, admin=True, **kw)
+        redirect(request.referer)
+
 
 class StatsSiteAdminExtension(SiteAdminExtension):
     controllers = {'stats': StatsController}

http://git-wip-us.apache.org/repos/asf/allura/blob/239ad6b3/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 e6eab2a..0769c87 100644
--- a/Allura/allura/templates/site_admin_user_details.html
+++ b/Allura/allura/templates/site_admin_user_details.html
@@ -50,6 +50,18 @@
     </div>
   {% endblock general_info %}
 
+  {% block emails %}
+    <div class="grid-23">
+      <fieldset>
+        <legend>Emails</legend>
+        <form action="update_emails" method="post">
+          {% include 'allura:templates/update_emails_form.html' %}
+          <input type='hidden' name='username' value='{{ user.username }}'>
+        </form>
+      </fieldset>
+    </div>
+  {% endblock emails %}
+
   {% block session_info %}
     <div class="grid-23">
       <fieldset>

http://git-wip-us.apache.org/repos/asf/allura/blob/239ad6b3/Allura/allura/templates/update_emails_form.html
----------------------------------------------------------------------
diff --git a/Allura/allura/templates/update_emails_form.html b/Allura/allura/templates/update_emails_form.html
index 20aecce..3ac5502 100644
--- a/Allura/allura/templates/update_emails_form.html
+++ b/Allura/allura/templates/update_emails_form.html
@@ -16,53 +16,52 @@
        specific language governing permissions and limitations
        under the License.
 -#}
-<form action="update_emails" method="post" name="update-email">
-  {% for a in c.user.email_addresses %}
-    <input name="addr-{{loop.index0}}.ord" value="{{loop.index0}}" type="hidden"/>
-  {% endfor %}
-  <table class="grid-22">
-    <tr>
-      <th>Primary?</th>
-      <th>Address</th>
-      <th>Confirmed</th>
-      <th></th>
-    </tr>
-    {% for a in c.user.email_addresses %}
-    <tr>
-      {% set obj = c.user.address_object(a) %}
+{% import 'allura:templates/jinja_master/lib.html' as lib with context %}
+
+{% for a in user.email_addresses %}
+  <input name="addr-{{loop.index0}}.ord" value="{{loop.index0}}" type="hidden"/>
+{% endfor %}
+<table class="grid-22">
+  <tr>
+    <th>Primary?</th>
+    <th>Address</th>
+    <th>Confirmed</th>
+    <th></th>
+  </tr>
+  {% for a in user.email_addresses %}
+  <tr>
+    {% set obj = user.address_object(a) %}
+    {% if obj.confirmed %}
+      <td>{{lib.radio_button('primary_addr', None, a, user.preferences.email_address)}}</td>
+    {% else %}
+      <td> <input type="radio" disabled="disabled"></td>
+    {% endif %}
+    <td>{{a}}</td>
+    {% if obj %}
+    <td>
       {% if obj.confirmed %}
-        <td>{{lib.radio_button('primary_addr', None, a, c.user.preferences.email_address)}}</td>
+        yes
       {% else %}
-        <td> <input type="radio" disabled="disabled"></td>
+        no (<a href="/auth/send_verification_link?a={{a}}">verify</a>)
       {% endif %}
-      <td>{{a}}</td>
-      {% if obj %}
-      <td>
-        {% if obj.confirmed %}
-          yes
-        {% else %}
-          no (<a href="/auth/send_verification_link?a={{a}}">verify</a>)
-        {% endif %}
-      </td>
-      {% else %}
-        <td>Unknown addr obj {{a}}</td>
-      {% endif %}
-      <td>
-        <div class="addr-delete">
-          {{lib.submit_button('Delete', 'addr-%s.delete' % loop.index0)}}
-          {{lib.hidden_field('addr-%s.delete' % loop.index0, '')}}
-        </div>
-      </td>
-    </tr>
-    {% endfor %}
-    <tr>
-      <td colspan="2">{{lib.text_field('new_addr.addr', '')}}</td>
-      <td colspan="2">{{lib.submit_button('Claim New Address', name='new_addr.claim')}}</td>
-    </tr>
-  </table>
-  <div class="grid-22">
-    {{lib.submit_button('Save', name='addr-save')}}
-  </div>
-  {{lib.hidden_field('password', '')}}
-  {{lib.csrf_token()}}
-</form>
+    </td>
+    {% else %}
+      <td>Unknown addr obj {{a}}</td>
+    {% endif %}
+    <td>
+      <div class="addr-delete">
+        {{lib.submit_button('Delete', 'addr-%s.delete' % loop.index0)}}
+        {{lib.hidden_field('addr-%s.delete' % loop.index0, '')}}
+      </div>
+    </td>
+  </tr>
+  {% endfor %}
+  <tr>
+    <td colspan="2">{{lib.text_field('new_addr.addr', '')}}</td>
+    <td colspan="2">{{lib.submit_button('Claim New Address', name='new_addr.claim')}}</td>
+  </tr>
+</table>
+<div class="grid-22">
+  {{lib.submit_button('Save', name='addr-save')}}
+</div>
+{{lib.csrf_token()}}

http://git-wip-us.apache.org/repos/asf/allura/blob/239ad6b3/Allura/allura/templates/user_prefs.html
----------------------------------------------------------------------
diff --git a/Allura/allura/templates/user_prefs.html b/Allura/allura/templates/user_prefs.html
index a19ae4e..bc8cf42 100644
--- a/Allura/allura/templates/user_prefs.html
+++ b/Allura/allura/templates/user_prefs.html
@@ -66,7 +66,10 @@
 
         <fieldset>
           <legend>Email addresses</legend>
-          {% include 'allura:templates/update_emails_form.html' %}
+          <form action="update_emails" method="post" name="update-email">
+            {% include 'allura:templates/update_emails_form.html' %}
+            {{lib.hidden_field('password', '')}}
+          </form>
         </fieldset>
 
       <!-- popup -->