~ubuntu-branches/ubuntu/intrepid/moin/intrepid-updates

« back to all changes in this revision

Viewing changes to MoinMoin/userform.py

  • Committer: Bazaar Package Importer
  • Author(s): Sivan Greenberg
  • Date: 2006-07-09 19:28:02 UTC
  • Revision ID: james.westby@ubuntu.com-20060709192802-oaeuvt4v3e9300uj
Tags: 1.5.3-1ubuntu1
* Merge new debian version.
* Reapply Ubuntu changes:
    + debian/rules:
      - Comment out usage of control.ubuntu.in (doesn't fit!).
    + debian/control.in:
      - Dropped python2.3 binary package.
    + debian/control:
      - Dropped python2.3 binary, again.
      - Dropped python2.3-dev from Build-Depends-Indep.
    + debian/patches/001-attachment-xss-fix.patch:
      - Dropped this patch. It's now in upstream's distribution.

Show diffs side-by-side

added added

removed removed

Lines of Context:
8
8
 
9
9
import string, time, re
10
10
from MoinMoin import user, util, wikiutil
11
 
from MoinMoin.util import web, mail, datetime
 
11
from MoinMoin.util import web, mail, timefuncs
12
12
from MoinMoin.widget import html
13
13
 
14
14
_debug = 0
64
64
        _ = self._
65
65
        form = self.request.form
66
66
    
 
67
        if form.has_key('cancel'):
 
68
            return
 
69
 
67
70
        if form.has_key('account_sendmail'):
68
71
            if not self.cfg.mail_enabled:
69
72
                return _("""This wiki is not enabled for mail processing.
89
92
                return _("Use UserPreferences to change your settings or create an account.")
90
93
            # Create user profile
91
94
            if form.has_key('create'):
92
 
                theuser = self.request.get_user()
 
95
                theuser = self.request.get_user_from_form()
93
96
            else:
94
97
                theuser = user.User(self.request, auth_method="request:152")
95
98
                
138
141
                return _("Please provide your email address. If you lose your"
139
142
                         " login information, you can get it by email.")
140
143
 
141
 
            # Email should be unique - see also MoinMoin/scripts/moin_usercheck.py
 
144
            # Email should be unique - see also MoinMoin/script/accounts/moin_usercheck.py
142
145
            if theuser.email and self.request.cfg.user_email_unique:
143
146
                users = user.getUserList(self.request)
144
147
                for uid in users:
157
160
            if _debug:
158
161
                result = result + util.dumpFormData(form)
159
162
            return result
160
 
            
161
 
        if form.has_key('select_user'): # Select user profile (su user)
 
163
        
 
164
        
 
165
        # Select user profile (su user) - only works with cookie auth active.
 
166
        if form.has_key('select_user'):
162
167
            if (wikiutil.checkTicket(self.request.form['ticket'][0]) and
163
 
                self.request.user.name in self.request.cfg.superuser and
164
 
                self.request.request_method == 'POST'):
 
168
                self.request.request_method == 'POST' and
 
169
                self.request.user.isSuperUser()):
165
170
                su_user = form.get('selected_user', [''])[0]
166
171
                uid = user.getUserId(self.request, su_user)
167
172
                theuser = user.User(self.request, uid)
168
173
                theuser.disabled = None
169
174
                theuser.save()
 
175
                from MoinMoin import auth
 
176
                auth.setCookie(self.request, theuser)
170
177
                self.request.user = theuser
171
 
                self.request.setCookie()
172
178
                return  _("Use UserPreferences to change settings of the selected user account")
173
179
            else:
174
180
                return _("Use UserPreferences to change your settings or create an account.")
176
182
        if form.has_key('save'): # Save user profile
177
183
            if self.request.request_method != 'POST':
178
184
                return _("Use UserPreferences to change your settings or create an account.")
179
 
            theuser = self.request.get_user()
 
185
            theuser = self.request.get_user_from_form()
180
186
                
181
187
            if not 'name' in theuser.auth_attribs:
182
188
                # Require non-empty name
227
233
                return _("Please provide your email address. If you lose your"
228
234
                         " login information, you can get it by email.")
229
235
 
230
 
            # Email should be unique - see also MoinMoin/scripts/moin_usercheck.py
 
236
            # Email should be unique - see also MoinMoin/script/accounts/moin_usercheck.py
231
237
            if theuser.email and self.request.cfg.user_email_unique:
232
238
                users = user.getUserList(self.request)
233
239
                for uid in users:
361
367
            options.append((
362
368
                str(offset),
363
369
                '%s [%s%s:%s]' % (
364
 
                    time.strftime(self.cfg.datetime_fmt, util.datetime.tmtuple(t)),
 
370
                    time.strftime(self.cfg.datetime_fmt, timefuncs.tmtuple(t)),
365
371
                    "+-"[offset < 0],
366
372
                    string.zfill("%d" % (abs(offset) / 3600), 2),
367
373
                    string.zfill("%d" % (abs(offset) % 3600 / 60), 2),
471
477
        _ = self._
472
478
        self.make_form()
473
479
 
474
 
        if self.request.user.name in self.request.cfg.superuser:
 
480
        if self.request.user.isSuperUser():
475
481
            ticket = wikiutil.createTicket()
476
482
            self.make_row(_('Select User'), [self._user_select()])
477
483
            self._form.append(html.INPUT(type="hidden", name="ticket", value="%s" % ticket))
485
491
            self.make_row('', button_cell)
486
492
            
487
493
        if self.request.user.valid and not create_only:
488
 
            buttons = [('save', _('Save'))]
 
494
            buttons = [('save', _('Save')), ('cancel', _('Cancel')), ]
489
495
            uf_remove = self.cfg.user_form_remove
490
496
            uf_disable = self.cfg.user_form_disable
491
497
            for attr in self.request.user.auth_attribs:
520
526
                    self._tz_select(),
521
527
                    html.BR(),
522
528
                    _('Server time is'), ' ',
523
 
                    time.strftime(self.cfg.datetime_fmt, util.datetime.tmtuple()),
 
529
                    time.strftime(self.cfg.datetime_fmt, timefuncs.tmtuple()),
524
530
                    ' (UTC)',
525
531
                ])
526
532
 
578
584
            buttons = [
579
585
                # IMPORTANT: login should be first to be the default
580
586
                # button when a user hits ENTER.
581
 
                ('login', _('Login')),
582
 
                ("create", _('Create Profile')),
 
587
                #('login', _('Login')),  # we now have a Login macro
 
588
                ('create', _('Create Profile')),
 
589
                ('cancel', _('Cancel')),
583
590
            ]
584
591
            for key, label, type, length, textafter in self.cfg.user_form_fields:
585
592
                if key in ('name', 'password', 'password2', 'email'):
615
622
    return UserSettings(request).asHTML(create_only=create_only)
616
623
 
617
624
 
 
625
class Login:
 
626
    """ User login. """
 
627
 
 
628
    def __init__(self, request):
 
629
        """ Initialize user settings form.
 
630
        """
 
631
        self.request = request
 
632
        self._ = request.getText
 
633
        self.cfg = request.cfg
 
634
 
 
635
    def make_row(self, label, cell, **kw):
 
636
        """ Create a row in the form table.
 
637
        """
 
638
        self._table.append(html.TR().extend([
 
639
            html.TD(**kw).extend([html.B().append(label), '   ']),
 
640
            html.TD().extend(cell),
 
641
        ]))
 
642
 
 
643
 
 
644
    def asHTML(self):
 
645
        """ Create the complete HTML form code. """
 
646
        _ = self._
 
647
        request = self.request
 
648
        sn = request.getScriptname()
 
649
        pi = request.getPathinfo()
 
650
        action = u"%s%s" % (sn, pi)
 
651
        userprefslink = wikiutil.getSysPage(request, "UserPreferences").link_to(request)
 
652
        hint = _("To create an account or recover a lost password, see the %(userprefslink)s page.") % {
 
653
               'userprefslink': userprefslink}
 
654
        self._form = html.FORM(action=action)
 
655
        self._table = html.TABLE(border="0")
 
656
 
 
657
        # Use the user interface language and direction
 
658
        lang_attr = request.theme.ui_lang_attr()
 
659
        self._form.append(html.Raw('<div class="userprefs"%s>' % lang_attr))
 
660
 
 
661
        self._form.append(html.INPUT(type="hidden", name="action", value="login"))
 
662
        self._form.append(self._table)
 
663
        self._form.append(html.P().append(hint))
 
664
        self._form.append(html.Raw("</div>"))
 
665
 
 
666
        self.make_row(_('Name'), [
 
667
            html.INPUT(
 
668
                type="text", size="32", name="name",
 
669
            ),
 
670
        ])
 
671
 
 
672
        self.make_row(_('Password'), [
 
673
            html.INPUT(
 
674
                type="password", size="32", name="password",
 
675
            ),
 
676
        ])
 
677
 
 
678
        self.make_row('', [
 
679
            html.INPUT(
 
680
                type="submit", name='login', value=_('Login')
 
681
            ),
 
682
        ])
 
683
 
 
684
        return unicode(self._form)
 
685
 
 
686
def getLogin(request):
 
687
    """ Return HTML code for the login. """
 
688
    return Login(request).asHTML()
 
689
 
618
690
#############################################################################
619
691
### User account administration
620
692
#############################################################################