1
# -*- coding: iso-8859-1 -*-
3
MoinMoin - create account action
5
@copyright: 2007 MoinMoin:JohannesBerg
6
@license: GNU GPL, see COPYING for details.
9
from MoinMoin import user, wikiutil
10
from MoinMoin.Page import Page
11
from MoinMoin.widget import html
12
from MoinMoin.auth import MoinAuth
14
def _do_email(request, u):
18
is_ok, msg = u.mailAccountData()
20
return wikiutil.escape(msg)
22
return _("If this account exists an email was sent.")
25
def _do_recover(request):
28
if not request.cfg.mail_enabled:
29
return _("""This wiki is not enabled for mail processing.
30
Contact the owner of the wiki, who can enable email.""")
33
email = wikiutil.clean_input(form['email'][0].lower())
35
# continue if email not given
38
u = user.get_by_email_address(request, email)
40
return _do_email(request, u)
45
username = wikiutil.clean_input(form['name'][0])
47
# continue if name not given
50
u = user.User(request, user.getUserId(request, username))
52
return _do_email(request, u)
56
# neither succeeded, give error message
57
return _("Please provide a valid email address or a username!")
60
def _create_form(request):
62
url = request.page.url(request)
63
ret = html.FORM(action=url)
64
ret.append(html.INPUT(type='hidden', name='action', value='recoverpass'))
65
lang_attr = request.theme.ui_lang_attr()
66
ret.append(html.Raw('<div class="userpref"%s>' % lang_attr))
67
tbl = html.TABLE(border="0")
69
ret.append(html.Raw('</div>'))
73
row.append(html.TD().append(html.STRONG().append(html.Text(_("Username")))))
74
row.append(html.TD().append(html.INPUT(type="text", size="36",
79
row.append(html.TD().append(html.STRONG().append(html.Text(_("Email")))))
80
row.append(html.TD().append(html.INPUT(type="text", size="36",
88
td.append(html.INPUT(type="submit", name="account_sendmail",
89
value=_('Mail me my account data')))
94
def _create_token_form(request, name=None, token=None):
96
url = request.page.url(request)
97
ret = html.FORM(action=url)
98
ret.append(html.INPUT(type='hidden', name='action', value='recoverpass'))
99
lang_attr = request.theme.ui_lang_attr()
100
ret.append(html.Raw('<div class="userpref"%s>' % lang_attr))
101
tbl = html.TABLE(border="0")
103
ret.append(html.Raw('</div>'))
107
row.append(html.TD().append(html.STRONG().append(html.Text(_("Username")))))
109
row.append(html.TD().append(html.INPUT(type='text', size="36",
110
name="name", value=value)))
114
row.append(html.TD().append(html.STRONG().append(html.Text(_("Recovery token")))))
116
row.append(html.TD().append(html.INPUT(type='text', size="36",
117
name="token", value=value)))
121
row.append(html.TD().append(html.STRONG().append(html.Text(_("New password")))))
122
row.append(html.TD().append(html.INPUT(type="password", size="36",
127
row.append(html.TD().append(html.STRONG().append(html.Text(_("New password (repeat)")))))
128
row.append(html.TD().append(html.INPUT(type="password", size="36",
129
name="password_repeat")))
133
row.append(html.TD())
136
td.append(html.INPUT(type="submit", name="recover", value=_('Reset my password')))
141
def execute(pagename, request):
143
for auth in request.cfg.auth:
144
if isinstance(auth, MoinAuth):
149
# we will not have linked, so forbid access
150
request.makeForbidden403()
153
page = Page(request, pagename)
157
if not request.cfg.mail_enabled:
158
request.theme.add_msg(_("""This wiki is not enabled for mail processing.
159
Contact the owner of the wiki, who can enable email."""), 'warning')
163
submitted = form.get('account_sendmail', [''])[0]
164
token = form.get('token', [''])[0]
165
newpass = form.get('password', [''])[0]
166
name = form.get('name', [''])[0]
168
if token and name and newpass:
169
newpass2 = form.get('password_repeat', [''])[0]
170
msg = _("Passwords don't match!")
172
if newpass == newpass2:
173
pw_checker = request.cfg.password_checker
176
pw_error = pw_checker(name, newpass)
178
msg = _("Password not acceptable: %s") % pw_error
180
u = user.User(request, user.getUserId(request, name))
181
if u and u.valid and u.apply_recovery_token(token, newpass):
182
msg = _("Your password has been changed, you can log in now.")
185
msg = _('Your token is invalid!')
187
request.theme.add_msg(msg, msg_type)
188
if msg_type != 'error':
193
request.emit_http_headers()
194
request.theme.send_title(_("Password reset"), pagename=pagename)
196
request.write(request.formatter.startContent("content"))
200
Enter a new password below.""", wiki=True))
201
request.write(_create_token_form(request, name=name, token=token))
203
request.write(request.formatter.endContent())
205
request.theme.send_footer(pagename)
206
request.theme.send_closing_html()
207
elif submitted: # user pressed create button
208
if request.request_method != 'POST':
210
msg = _do_recover(request)
211
request.theme.add_msg(msg, "dialog")
213
else: # show create form
214
request.emit_http_headers()
215
request.theme.send_title(_("Lost password"), pagename=pagename)
217
request.write(request.formatter.startContent("content"))
220
== Recovering a lost password ==
221
If you have forgotten your password, provide your email address or
222
username and click on '''Mail me my account data'''.
223
You will receive an email containing a recovery token that can be
224
used to change your password. The email will also contain further
225
instructions.""", wiki=True))
227
request.write(_create_form(request))
229
request.write(request.formatter.rule())
232
=== Password reset ===
233
If you already have received the email with the recovery token, enter your
234
username, the recovery token and a new password (twice) below.""", wiki=True))
236
request.write(_create_token_form(request))
238
request.write(request.formatter.endContent())
240
request.theme.send_footer(pagename)
241
request.theme.send_closing_html()