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)
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)
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)
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)
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)
def url(*args, **kwargs): from pastethat.utils.resolver import url return url(*args, **kwargs)