示例#1
0
文件: views.py 项目: maeday/EventHub
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)
示例#2
0
文件: views.py 项目: maeday/EventHub
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)