File: cleansessions.py

package info (click to toggle)
moin 1.9.9-1%2Bdeb9u1
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 76,024 kB
  • sloc: python: 143,896; java: 10,704; php: 2,385; perl: 1,574; xml: 371; makefile: 214; sh: 81; sed: 5
file content (85 lines) | stat: -rw-r--r-- 2,755 bytes parent folder | download | duplicates (7)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
# -*- coding: iso-8859-1 -*-
"""
MoinMoin - cleansessions script

@copyright: 2009 MoinMoin:ReimarBauer,
            2010 MoinMoin:ThomasWaldmann
@license: GNU GPL, see COPYING for details.
"""

import os, time

from MoinMoin import user
from MoinMoin.script import MoinScript

class PluginScript(MoinScript):
    """\
Purpose:
========
This script allows you to clean up session files (usually used to maintain
a "logged-in session" for http(s) or xmlrpc).

Detailed Instructions:
======================
General syntax: moin [options] maint cleansessions [cleansessions-options]

[options] usually should be:
    --config-dir=/path/to/my/cfg/ --wiki-url=http://wiki.example.org/

[cleansessions-options] see below:
    --name     remove sessions only for user NAME (default: all users)
    --all      remove all sessions (default: remove outdated sessions)
"""

    def __init__(self, argv, def_values):
        MoinScript.__init__(self, argv, def_values)

        self.parser.add_option(
            "--name", metavar="NAME", dest="username",
            help="remove sessions only for user NAME (default: all users)"
        )
        self.parser.add_option(
            "--all", action="store_true", dest="all_sessions",
            help="remove all sessions (default: remove outdated sessions)"
        )

    def mainloop(self):
        self.init_request()
        request = self.request
        checks = []

        if not self.options.all_sessions:
            now = time.time()
            def session_expired(session):
                try:
                    return session['expires'] < now
                except KeyError:
                    # this is likely a pre-1.9.1 session file without expiry
                    return True # consider it expired
            checks.append(session_expired)

        if self.options.username:
            u = user.User(request, None, self.options.username)
            if not u.exists():
                print 'User "%s" does not exist!' % self.options.username
                return
            else:
                def user_matches(session):
                    try:
                        return session['user.id'] == u.id
                    except KeyError:
                        return False
                checks.append(user_matches)

        session_service = request.cfg.session_service
        for sid in session_service.get_all_session_ids(request):
            session = session_service.get_session(request, sid)

            # if ALL conditions are met, the session will be destroyed
            killit = True
            for check in checks:
                killit = killit and check(session)

            if killit:
                session_service.destroy_session(request, session)