""" open/dulcinea/lib/ui/user/password.qpy """ from dulcinea.common import get_site_title from dulcinea.ui.util import get_site_url, item_list from qp.fill.form import Form from qp.fill.html import href, mailto from qp.fill.widget import CompositeWidget, PasswordWidget, StringWidget from qp.mail.send import sendmail from qp.pub.common import header, footer, redirect, get_request, get_user, page from qp.pub.common import complete_path, get_users, get_publisher class NewPasswordWidget(CompositeWidget): def __init__(self, name, value=None, validation_function=None, size=None, **kwargs): CompositeWidget.__init__(self, name, value=None, **kwargs) self.add(PasswordWidget, 'first', value, size=size) self.add(PasswordWidget, 'second', value, size=size) self.validation_function = validation_function def _parse(self, request): first = self.get('first') second = self.get('second') if first != second: self.set_error("The two password fields didn't match.") else: self.value = first if None not in (self.value, self.validation_function): error = self.validation_function(self.value) if error: self.set_error(error) class ValidPasswordWidget(PasswordWidget): def __init__(self, name, validation_function=None, **kwargs): PasswordWidget.__init__(self, name, **kwargs) self.validation_function = validation_function def _parse(self, request): PasswordWidget._parse(self, request) if None not in (self.value, self.validation_function): error = self.validation_function(self.value) if error: self.set_error(error) def change_user_password_form:xml(user): def validation(password): if get_user().has_password(password): return None else: return 'Wrong password.' form = Form() form.add(ValidPasswordWidget, 'your_password', title='Your password', size=15, validation_function=validation, required=1) form.add(NewPasswordWidget, 'password', title='New password', size=15, validation_function=user.check_new_password, hint='Make up a password or leave blank to disable user.') form.add_submit('change', 'Change password') form.add_submit('cancel', 'Cancel') if form.get('cancel'): redirect('.') if not form.is_submitted() or form.has_errors(): return page('Change Password: %s' % user.format_realname(), form.render()) password = form['password'] if password: user.set_password(password) else: user.set_password(None, check=False) remote_addr = get_request().get_environ("REMOTE_ADDR") user.record_change(get_user(), remote_addr, password=1) return page( 'Password Changed: %s' % user.format_realname(), '
Just enter your %s user ID below, and we\'ll email a new password to the address you supplied when you registered with the %s.
If you can\'t remember what your user ID is, please contact us directly at %s.
''' % (get_site_title(), get_site_title(), mailto(get_publisher().get_webmaster_address())) form.render() 'Your new password has been sent to you.
' item_list((complete_path('/my/'), 'Sign In')) footer(title) if not form.is_submitted(): return render() if not user: user = get_users().get(form.get('user_id')) if not user: form.set_error('user_id', 'Invalid user ID') return render() email = user.get_email() if not email: form.set_error('send', 'No email address supplied') if form.has_errors(): return render() if user.is_disabled(): header('Account Disabled') '' 'The account, %s, is disabled.' % user.get_id() '
' footer() else: sendmail('New %s Password' % get_site_title(), notification(), [email], cc_addrs=cc_addrs, charset='latin1') remote_addr = get_request().get_environ("REMOTE_ADDR") user.record_change(get_user(), remote_addr, password=1) return confirm()