Edgewall Software

Ticket #1347: WebAdminSessions.2.patch

File WebAdminSessions.2.patch, 5.4 KB (added by markus, 3 years ago)
  • webadmin/__init__.py

     
    44from webadmin.logging import * 
    55from webadmin.perm import * 
    66from webadmin.plugin import * 
     7from webadmin.sessions import * 
    78from webadmin.ticket import * 
  • webadmin/sessions.py

     
     1from trac.core import * 
     2from webadmin.web_ui import IAdminPageProvider 
     3 
     4__all__ = [] 
     5 
     6 
     7class SessionsAdminPage(Component): 
     8 
     9    implements(IAdminPageProvider) 
     10 
     11    # IAdminPageProvider methods 
     12 
     13    def get_admin_pages(self, req): 
     14        if req.perm.has_permission('TRAC_ADMIN'): 
     15            yield ('general', 'General', 'sessions', 'User Sessions') 
     16 
     17    def process_admin_request(self, req, cat, page, session): 
     18        req.perm.assert_permission('TRAC_ADMIN') 
     19 
     20        if session: 
     21            for username, name, email in self.env.get_known_users(): 
     22                if username == session: 
     23                    session = { 
     24                        'subject': username,  
     25                        'name': name, 
     26                        'email': email 
     27                    } 
     28 
     29            if req.method == "POST": 
     30                if req.args.get('save'): 
     31                    db = self.env.get_db_cnx() 
     32                    cursor = db.cursor() 
     33                    for k in [k for k in session.keys() if k != 'subject']: 
     34                        if session[k] and req.args.get(k): 
     35                            cursor.execute("UPDATE session SET var_value=%s " 
     36                                           "WHERE sid=%s AND authenticated=%s " 
     37                                           "AND var_name=%s", (req.args.get(k), 
     38                                           session['subject'], int(True), k)) 
     39                        elif req.args.get(k): 
     40                            cursor.execute("INSERT INTO session VALUES(%s,%s,%s,%s)", 
     41                                           (session['subject'], int(True), k, 
     42                                           req.args.get(k))) 
     43                    db.commit() 
     44                    req.redirect(self.env.href.admin(cat, page)) 
     45                elif req.args.get('cancel'): 
     46                    req.redirect(self.env.href.admin(cat, page)) 
     47 
     48            req.hdf['admin.session'] = { 
     49                'subject': session['subject'], 
     50                'name': session['name'], 
     51                'email': session['email'] 
     52            } 
     53        else: 
     54            if req.method == "POST": 
     55                sel = req.args.get('sel') 
     56                sel = isinstance(sel, list) and sel or [sel] 
     57                if not sel: 
     58                    raise TracError, 'No session selected' 
     59                db = self.env.get_db_cnx() 
     60                cursor = db.cursor() 
     61                for subject in sel: 
     62                    cursor.execute("DELETE FROM session WHERE sid=%s " 
     63                                   "AND authenticated=%s", (subject, int(True))) 
     64                db.commit() 
     65                req.redirect(self.env.href.admin(cat, page)) 
     66 
     67            sessions = list(self.env.get_known_users()) 
     68            sessions.sort(lambda a, b: cmp(a[0], b[0])) 
     69            req.hdf['admin.sessions'] = [{ 
     70                'subject': s[0], 
     71                'name': s[1] or '-', 
     72                'email': s[2] or '-', 
     73                'href': self.env.href.admin(cat, page, s[0]) 
     74            } for s in sessions] 
     75 
     76        return 'admin_sessions.cs', None 
     77 No newline at end of file 
  • webadmin/templates/admin_sessions.cs

     
     1<h2>Manage User Sessions</h2><?cs 
     2 
     3if admin.session.subject ?> <form class="mod" id="modsession" method="post"> 
     4  <fieldset> 
     5   <legend>Modify User Session:</legend> 
     6   <div class="field"> 
     7    <label>Subject:<br /><input type="text" name="subject" size="48" value="<?cs 
     8      var:admin.session.subject ?>" readonly="readonly"></label> 
     9   </div> 
     10   <div class="field"> 
     11    <label>Name:<br /><input type="text" name="name" size="48" value="<?cs 
     12      var:admin.session.name ?>"></label> 
     13   </div> 
     14   <div class="field"> 
     15    <label>Email:<br /><input type="text" name="email" size="48" value="<?cs 
     16      var:admin.session.email ?>"></label> 
     17   </div> 
     18   <div class="buttons"> 
     19    <input type="submit" name="cancel" value="Cancel" /> 
     20    <input type="submit" name="save" value="Save" /> 
     21   </div> 
     22  </fieldset> 
     23 </form><?cs 
     24else ?> 
     25<form method="post"> 
     26 <table class="listing" id="sessionlist"> 
     27  <thead> 
     28   <tr><th class="sel">&nbsp;</th><th>Subject</th><th>Name</th><th>Email</th></tr> 
     29  </thead><tbody><?cs 
     30  each:session = admin.sessions ?> 
     31   <tr> 
     32    <td><input type="checkbox" name="sel" value="<?cs var:session.subject ?>" /></td> 
     33    <td><a href="<?cs var:session.href?>"><?cs var:session.subject ?></a></td> 
     34    <td><?cs var:session.name ?></td> 
     35    <td><?cs var:session.email ?></td> 
     36   </tr><?cs 
     37  /each ?></tbody> 
     38 </table> 
     39 <div class="buttons"> 
     40  <input type="submit" name="remove" value="Remove selected items" /> 
     41 </div> 
     42</form><?cs 
     43 
     44/if ?>