def forgot_password(request): """ Allows user to send an email with a link to reset their password. """ template = 'accounts/forgot.html' template_context = {} success = False if request.user.is_authenticated(): # User is already logged in. Should we let them reset it? return redirect('/index') if request.POST: form = ForgotPasswordForm(request.POST) if form.is_valid(): # Email exists, send email to user success = True # Build activation key user = form.get_user() username = user.username salt = hashlib.sha224(str(random.random())).hexdigest()[:5] activation_key = hashlib.sha1(salt+username).hexdigest() key_expires = datetime.datetime.today() + datetime.timedelta(2) # Create and save user and profile new_profile = user.get_profile() new_profile.activation_key = activation_key new_profile.key_expires = key_expires new_profile.save() # Send an email with the confirmation link email = user.email email_subject = 'Resetting your EventHub account password' email_template = get_template('accounts/email/reset.txt') context = Context({ 'email' : email, 'web_root' : settings.WEB_ROOT, 'key' : activation_key }) email_body = email_template.render(context) send_mail(email_subject, email_body, '*****@*****.**', [email]) template_context = { 'form' : form, 'success' : success } request_context = RequestContext(request, template_context) return render_to_response(template, request_context)
def resend_key(request): """ Allows user to generate and send a new activation key. """ template = 'accounts/resend.html' template_context = {} success = False if request.user.is_authenticated(): # User is already logged in. Shouldn't be here return redirect('/index') if request.POST: form = ForgotPasswordForm(request.POST) if form.is_valid(): # Email exists, send email to user success = True user = form.get_user() # Check if user is already active if user.is_active: error_msg = "That user is already active! You should be able to \ sign in to this site." messages.add_message(request, messages.ERROR, error_msg) else: # Build activation key username = user.username salt = hashlib.sha224(str(random.random())).hexdigest()[:5] activation_key = hashlib.sha1(salt+username).hexdigest() key_expires = datetime.datetime.today() + datetime.timedelta(2) # Modify and save user profile profile = user.get_profile() profile.activation_key = activation_key profile.key_expires = key_expires profile.save() email = user.email email_subject = 'Your EventHub activation link' email_template = get_template('accounts/email/register.txt') context = Context({ 'email' : email, 'web_root' : settings.WEB_ROOT, 'activation_key' : activation_key }) email_body = email_template.render(context) send_mail(email_subject, email_body, '*****@*****.**', [email]) success_msg = "A new activation link has been sent to your email." messages.add_message(request, messages.SUCCESS, success_msg) template_context = { 'form' : form, 'success' : success } request_context = RequestContext(request, template_context) return render_to_response(template, request_context)