| | 1 | from trac.core import * |
| | 2 | from webadmin.web_ui import IAdminPageProvider |
| | 3 | |
| | 4 | |
| | 5 | class 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 |