~ubuntu-branches/ubuntu/natty/moin/natty-updates

« back to all changes in this revision

Viewing changes to MoinMoin/userprefs/suid.py

  • Committer: Bazaar Package Importer
  • Author(s): Jonas Smedegaard
  • Date: 2008-06-22 21:17:13 UTC
  • mto: This revision was merged to the branch mainline in revision 18.
  • Revision ID: james.westby@ubuntu.com-20080622211713-inlv5k4eifxckelr
ImportĀ upstreamĀ versionĀ 1.7.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
26
26
        self.name = 'suid'
27
27
 
28
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())
 
29
        return (UserPrefBase.allowed(self) and
 
30
                self.request.user.isSuperUser() or
 
31
                (not self.request._setuid_real_user is None and
 
32
                 (self.request._setuid_real_user.isSuperUser())))
31
33
 
32
34
    def handle_form(self):
33
35
        _ = self._
34
 
        request = self.request
35
 
        form = request.form
36
 
 
37
 
        if form.has_key('cancel'):
38
 
            return
39
 
 
40
 
        if request.method != 'POST':
41
 
            return
42
 
 
43
 
        if not wikiutil.checkTicket(request, form['ticket']):
44
 
            return
45
 
 
46
 
        uid = form.get('selected_user', '')
47
 
        if not uid:
48
 
            return 'error', _("No user selected")
49
 
        theuser = user.User(request, uid, auth_method='setuid')
50
 
        if not theuser or not theuser.exists():
51
 
            return 'error', _("No user selected")
52
 
        # set valid to True so superusers can even switch
53
 
        # to disable accounts
54
 
        theuser.valid = True
55
 
        request._setuid_real_user = request.user
56
 
        # now continue as the other user
57
 
        request.user = theuser
58
 
        return  _("You can now change the settings of the selected user account; log out to get back to your account.")
 
36
        form = self.request.form
 
37
 
 
38
        if 'cancel' in form:
 
39
            return
 
40
 
 
41
        if (wikiutil.checkTicket(self.request, self.request.form['ticket'][0])
 
42
            and self.request.request_method == 'POST'):
 
43
            uid = form.get('selected_user', [''])[0]
 
44
            if not uid:
 
45
                return 'error', _("No user selected")
 
46
            theuser = user.User(self.request, uid, auth_method='setuid')
 
47
            if not theuser or not theuser.exists():
 
48
                return 'error', _("No user selected")
 
49
            # set valid to True so superusers can even switch
 
50
            # to disable accounts
 
51
            theuser.valid = True
 
52
            self.request.session['setuid'] = uid
 
53
            self.request._setuid_real_user = self.request.user
 
54
            # now continue as the other user
 
55
            self.request.user = theuser
 
56
            return  _("You can now change the settings of the selected user account; log out to get back to your account.")
 
57
        else:
 
58
            return None
59
59
 
60
60
    def _user_select(self):
61
61
        options = []
62
62
        users = user.getUserList(self.request)
63
 
        current_uid = self.request.user.id
 
63
        realuid = None
 
64
        if hasattr(self.request, '_setuid_real_user') and self.request._setuid_real_user:
 
65
            realuid = self.request._setuid_real_user.id
 
66
        else:
 
67
            realuid = self.request.user.id
64
68
        for uid in users:
65
 
            if uid != current_uid:
 
69
            if uid != realuid:
66
70
                name = user.User(self.request, id=uid).name
67
71
                options.append((uid, name))
68
72
        options.sort(lambda x, y: cmp(x[1].lower(), y[1].lower()))
69
73
 
 
74
        size = min(5, len(options))
 
75
        current_user = self.request.user.id
 
76
 
70
77
        if not options:
71
78
            _ = self._
72
79
            self._only = True
73
80
            return _("You are the only user.")
74
81
 
75
82
        self._only = False
76
 
        size = min(10, len(options))
77
 
        return util.web.makeSelection('selected_user', options, current_uid, size=size)
 
83
        return util.web.makeSelection('selected_user', options, current_user, size=size)
78
84
 
79
85
    def create_form(self):
80
86
        """ Create the complete HTML form code. """
83
89
                                          'assume the identity of another user.')))
84
90
 
85
91
        ticket = wikiutil.createTicket(self.request)
86
 
        self.make_row(_('Select User'), [self._user_select()], valign="top")
 
92
        self.make_row('Select User', [self._user_select()], valign="top")
87
93
        form.append(html.INPUT(type="hidden", name="ticket", value="%s" % ticket))
88
94
        if not self._only:
89
95
            buttons = [html.INPUT(type="submit", name="select_user",