Example #1
0
def show_login(request):
    # TODO: clean this logic up
    default_url = url('accounts')
    next_url = request.build_absolute_uri(get_next_url(request, default_url))
    login_url = request.build_absolute_uri(url('accounts.login'))
    register_url = request.build_absolute_uri(url('accounts.register'))
    if next_url.startswith(login_url) or next_url.startswith(register_url):
        next_url = default_url
    if request.user.is_authenticated():
        return HttpResponseRedirect(next_url)
        
    if request.path.startswith(url('accounts.register')):
        active_form = 'register'
    else:
        active_form = 'login'
    
    context = handle_login(request)
    if context['logged_in']:
        return HttpResponseRedirect(next_url)
    
    context.update({
        'active_form': active_form,
        'next_url': next_url,
        'TITLE': 'Login or Register',
    })
    return render_to_response('accounts/login.html', context, request)
Example #2
0
def recover_password_confirm(request, user_id, hash):
    context = {
        'TITLE': 'Recover Password',
    }

    try:
        password_hash = LostPasswordHash.objects.get(user=user_id, hash=hash)
        if not password_hash.is_valid:
            password_hash.delete()
            raise LostPasswordHash.DoesNotExist
        user = password_hash.user
    except LostPasswordHash.DoesNotExist:
        tpl = 'accounts/recover/failure.html'
    else:
        tpl = 'accounts/recover/confirm.html'
        if request.POST:
            form = ChangePasswordRecoverForm(request.POST)
            if form.is_valid():
                user.set_password(form.cleaned_data['password'])
                user.save()
                # Ugly way of doing this, but Django requires the backend be set
                user = authenticate(
                    username=user.username,
                    password=form.cleaned_data['password'],
                )
                login(request, user)
                password_hash.delete()
                return HttpResponseRedirect(url('accounts'))
        else:
            form = ChangePasswordRecoverForm()
        context['form'] = form

    return render_to_response(tpl, context, request)
Example #3
0
def show_change_password(request):
    if request.POST:
        if request.POST.get('save'):
            form = ChangePasswordForm(request.user, request.POST)
            if form.is_valid():
                request.user.set_password(form.cleaned_data['password'])
                request.user.save()
                return HttpResponseRedirect(url('accounts.password') + '?success=1')
        elif request.POST.get('cancel'):
            return HttpResponseRedirect(url('accounts'))
    else:
        form = ChangePasswordForm(request.user)

    context = {
        'form': form,
        'TITLE': 'Change Password',
    }
    return render_to_response('accounts/change_password.html', context, request)
Example #4
0
def recover_password(request):
    if request.POST:
        form = RecoverPasswordForm(request.POST)
        if form.is_valid():
            password_hash, created = LostPasswordHash.objects.get_or_create(
                user=form.cleaned_data['email']
            )
            if not password_hash.is_valid:
                created = True
                password_hash.date_added = datetime.datetime.now()
                password_hash.set_hash()
            if not created:
                form.errors['__all__'] = 'A password reset was already attempted for this account within the last 24 hours.'
            
        if form.is_valid():
            context = context_processors.default(request)
            context.update({
                'user': password_hash.user,
                'url': request.build_absolute_uri(password_hash.get_absolute_url()),
            })
            data = render_to_string('accounts/recover/emails/recover.txt', context)
            send_mail('[PasteThat] Password Recovery', data, settings.EMAIL_FROM_ADDRESS, [password_hash.user.email], fail_silently=True)
            form = RecoverPasswordForm()
    else:
        form = RecoverPasswordForm()
    
    breadcrumbs = (
        ('Account', url('accounts')),
        ('Recover Password', url('accounts.password.recover')),
    )

    context = {
        'form': form,
        'TITLE': 'Recover Password',
        'BREADCRUMBS': breadcrumbs,
    }
    return render_to_response('accounts/recover/index.html', context, request)
Example #5
0
def show_settings(request):
    if request.POST:
        if request.POST.get('save'):
            form = SettingsForm(request.POST, instance=request.user)
            if form.is_valid():
                try:
                    User.objects.exclude(pk=request.user.id).get(email=form.cleaned_data['email'])
                except User.DoesNotExist:
                    pass
                else:
                    form.errors['email'] = 'That email address is already registered with another account.'
            if form.is_valid():
                form.commit()
                return HttpResponseRedirect(url('accounts.settings') + '?success=1')
    else:
        form = SettingsForm(instance=request.user)

    context = {
        'form': form,
        'TITLE': 'Settings',
    }
    return render_to_response('accounts/settings.html', context, request)
Example #6
0
def url(*args, **kwargs):
    from pastethat.utils.resolver import url
    return url(*args, **kwargs)