# -*- coding: iso-8859-1 -*-
"""
MoinMoin - destroysession script

@copyright: 2009 MoinMoin:ReimarBauer
@license: GNU GPL, see COPYING for details.
"""
import os
from MoinMoin import caching, user
from MoinMoin.script import MoinScript


class PluginScript(MoinScript):
    """\
Purpose:
========
This script allows you to delete all session cookies from a user in
data/cache/__common__/session

You will usually do this after a user request.

Detailed Instructions:
======================
General syntax: moin [options] account destroysession

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

[destroysession-options] see below:
    1. To remove JohnSmith's session cookies. (He has to login at next request):
       moin ... account destroysession --name JohnSmith
"""

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

        self.parser.add_option(
            "--name", metavar="NAME", dest="uname",
            help="Destroy Sessions for the user with user name NAME."
        )

    def mainloop(self):
        if not self.options.uname:
            self.parser.error("no name given")
            self.parser.print_help()
            import sys
            sys.exit(1)

        self.init_request()
        request = self.request
        if self.options.uname:
            u = user.User(request, None, self.options.uname)
            if not u.exists():
                print 'This user "%s" does not exists!' % u.name
                return

            cachelist = caching.get_cache_list(request, 'session', 'farm')
            for sid in cachelist:
                session = caching.CacheEntry(request, 'session', sid, 'farm',
                                           use_pickle=True).content()
                if session["user.id"] == u.id:
                    caching.CacheEntry(request, 'session', sid, 'farm').remove()
                    print 'Session file "%s" deleted!' % sid

