Edgewall Software

Ticket #1347: WebAdminSessions.3.patch

File WebAdminSessions.3.patch, 5.5 KB (added by markus, 3 years ago)
  • setup.py

     
    3838            'webadmin.logging = webadmin.logging', 
    3939            'webadmin.perm = webadmin.perm', 
    4040            'webadmin.plugin = webadmin.plugin', 
     41            'webadmin.sessions = webadmin.sessions', 
    4142            'webadmin.ticket = webadmin.ticket' 
    4243        ] 
    4344    } 
  • webadmin/sessions.py

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