allow super user to disable other users more easily
I see plenty of fake users from spammers, and it'd be nice to be able to disable them. To achieve that I wrote a plugin, attached to this page.
Just drop the plugin into MoinMoin/userprefs/.
1 # -*- coding: iso-8859-1 -*-
2 """
3 MoinMoin - disable users
4
5 @copyright: 2001-2004 Juergen Hermann <jh@web.de>,
6 2003-2007 MoinMoin:ThomasWaldmann
7 2007 MoinMoin:JohannesBerg
8 @license: GNU GPL, see COPYING for details.
9 """
10
11 from MoinMoin import user, util, wikiutil
12 from MoinMoin.widget import html
13 from MoinMoin.userprefs import UserPrefBase
14
15
16 class Settings(UserPrefBase):
17
18 def __init__(self, request):
19 """ Initialize disable users form. """
20 UserPrefBase.__init__(self, request)
21 self.request = request
22 self._ = request.getText
23 self.cfg = request.cfg
24 _ = self._
25 self.title = _("Disable users")
26 self.name = 'disableusers'
27
28 def allowed(self):
29 return (self.request.user.auth_method in self.request.cfg.auth_can_logout and
30 UserPrefBase.allowed(self) and self.request.user.isSuperUser())
31
32 def handle_form(self):
33 _ = self._
34 form = self.request.form
35
36 if 'cancel' in form:
37 return None
38
39 if (wikiutil.checkTicket(self.request, self.request.form['ticket'])
40 and self.request.method == 'POST'):
41 names = []
42 for uid in form.getlist('selected_users'):
43 if not uid:
44 return 'error', _("No user selected")
45 theuser = user.User(self.request, uid, auth_method='setuid')
46 if not theuser or not theuser.exists():
47 return 'error', _("No user selected")
48 theuser.disabled = 1
49 names.append(theuser.name)
50 theuser.save()
51 return _("Users %r disabled." % names)
52 else:
53 return None
54
55 def _user_select(self):
56 options = []
57 users = user.getUserList(self.request)
58 current_uid = self.request.user.id
59 for uid in users:
60 if uid != current_uid:
61 u = user.User(self.request, id=uid)
62 if u.disabled:
63 continue
64 name = u.name
65 options.append((uid, name))
66 options.sort(lambda x, y: cmp(x[1].lower(), y[1].lower()))
67
68 if not options:
69 _ = self._
70 self._only = True
71 return _("You are the only user.")
72
73 self._only = False
74 size = min(20, len(options))
75 return util.web.makeSelection('selected_users', options, current_uid, size=size,
76 multiple=True)
77
78 def create_form(self):
79 """ Create the complete HTML form code. """
80 _ = self._
81 form = self.make_form(html.Text(_('As a superuser, you can permanently disable other accounts.')))
82
83 ticket = wikiutil.createTicket(self.request)
84 self.make_row(_('Select Users'), [self._user_select()], valign="top")
85 form.append(html.INPUT(type="hidden", name="ticket", value="%s" % ticket))
86 if not self._only:
87 buttons = [html.INPUT(type="submit", name="select_user",
88 value=_('Select User')),
89 ' ', ]
90 else:
91 buttons = []
92 buttons.append(html.INPUT(type="submit", name="cancel",
93 value=_('Cancel')))
94 self.make_row('', buttons)
95 return unicode(form)
TODO: The message when users were disabled shouldn't be using "... %r ..." % [u"user A", u"user B"].