def includeme(config): try: reset = load_and_register('reset_codes', config) except Exception, e: logger.error(traceback.format_exc()) logger.error("unable to load reset codes. Problem? %s" % e) reset = None
def forgot_step_2(request, **args): """Tries to send the email with a reset code, then lets the user know we've done that """ data = {} auth = request.registry["auth"] username = extract_username(request.params['username']) request.user['username'] = username user_id = auth.get_user_id(request.user) if not user_id: request.errors.append(_('Unable to locate your account. ' 'Please check your username.')) return render_to_response('console/password_reset1.mako', forgot_step_1(request), request) if not request.registry.settings['app.captcha'].check(request): log_cef('Captcha failed on forgot password', 3, request.environ, request.registry.settings.get('config').get_map(), username, signature=CAPTCHA_FAILURE) request.errors.append(_('The captcha did not match. ' 'Please try again')) return render_to_response('console/password_reset1.mako', forgot_step_1(request), request) try: reset = request.registry.settings.get('app.console.reset') reset_code = reset.generate_reset_code(request.user, True) if not reset_code: request.errors.append(_('Getting a reset code failed ' 'unexpectedly. Please try again later.')) logger.error("Could not generate a reset code") return render_to_response('console/password_reset1.mako', forgot_step_1(request), request) auth.get_user_info(request.user, ['mail']) if not valid_email(request.user['mail']): raise NoEmailError() maildata = {'forgot_url': '%s/forgot' % request.host_url, 'username': username, 'code': reset_code} template_path = get_template_lookup('console') template = \ template_path.get_template('password_reset_mail.mako') body = template.render(**maildata) subject = _('Resetting your Mozilla Services password') smtp = request.registry.settings.get('config').get_map('smtp') #sender has a required position, so we can't pass it in in the #dict sender = smtp['sender'] del smtp['sender'] send_email(sender, request.user['mail'], subject, body, **smtp) except AlreadySentError: #backend handled the reset code email. Keep going pass except NoEmailError: request.errors.append(_('We do not have an email on file for this ' 'account and cannot send you a reset code.')) return render_to_response('console/password_reset1.mako', forgot_step_1(request), request) return data