bgneal@500: """ bgneal@500: Views for the accounts application. gremmie@1: bgneal@500: """ bgneal@74: import logging bgneal@74: bgneal@659: from django.shortcuts import render bgneal@692: from django.http import HttpResponseRedirect gremmie@1: from django.core.urlresolvers import reverse bgneal@6: from django.conf import settings gremmie@1: gremmie@1: from accounts.models import PendingUser bgneal@659: from accounts.forms import RegisterForm, ForgotUsernameForm bgneal@347: from accounts import create_new_user bgneal@690: from antispam.decorators import log_auth_failures gremmie@1: gremmie@1: bgneal@690: logger = logging.getLogger('auth') bgneal@690: gremmie@1: ####################################################################### gremmie@1: bgneal@690: @log_auth_failures('Register') gremmie@1: def register(request): bgneal@74: if request.user.is_authenticated(): bgneal@74: return HttpResponseRedirect(settings.LOGIN_REDIRECT_URL) gremmie@1: bgneal@74: if request.method == 'POST': bgneal@74: form = RegisterForm(request.POST, ip=request.META.get('REMOTE_ADDR', '?')) bgneal@74: if form.is_valid(): bgneal@74: form.save() bgneal@74: return HttpResponseRedirect(reverse('accounts.views.register_thanks')) bgneal@74: else: bgneal@74: form = RegisterForm() gremmie@1: bgneal@659: return render(request, 'accounts/register.html', {'form': form}) gremmie@1: gremmie@1: ####################################################################### gremmie@1: gremmie@1: def register_thanks(request): bgneal@74: if request.user.is_authenticated(): bgneal@74: return HttpResponseRedirect(settings.LOGIN_REDIRECT_URL) gremmie@1: bgneal@659: return render(request, 'accounts/register_thanks.html') gremmie@1: gremmie@1: ####################################################################### gremmie@1: gremmie@1: def register_confirm(request, username, key): bgneal@74: if request.user.is_authenticated(): bgneal@74: return HttpResponseRedirect(settings.LOGIN_REDIRECT_URL) bgneal@316: bgneal@74: # purge expired users gremmie@1: bgneal@74: PendingUser.objects.purge_expired() gremmie@1: bgneal@74: ip = request.META.get('REMOTE_ADDR', '?') bgneal@74: try: bgneal@74: pending_user = PendingUser.objects.get(username = username) bgneal@74: except PendingUser.DoesNotExist: bgneal@690: logger.error('Accounts register_confirm [%s]: user does not exist: %s', ip, username) bgneal@659: return render(request, bgneal@659: 'accounts/register_failure.html', bgneal@659: {'username': username}) gremmie@1: bgneal@74: if pending_user.key != key: bgneal@690: logger.error('Accounts register_confirm [%s]: key error: %s', ip, username) bgneal@659: return render(request, bgneal@659: 'accounts/register_failure.html', bgneal@659: {'username': username}) gremmie@1: bgneal@347: create_new_user(pending_user, ip) gremmie@1: bgneal@659: return render(request, bgneal@659: 'accounts/register_success.html', bgneal@659: {'username': username}) bgneal@500: bgneal@500: ####################################################################### bgneal@500: bgneal@659: def username_query(request): bgneal@659: """This view handles forgotten username queries.""" bgneal@659: if request.user.is_authenticated(): bgneal@659: return HttpResponseRedirect(settings.LOGIN_REDIRECT_URL) bgneal@659: bgneal@659: if request.method == 'POST': bgneal@659: form = ForgotUsernameForm(data=request.POST) bgneal@659: if form.is_valid(): bgneal@659: form.save() bgneal@659: return HttpResponseRedirect(reverse('accounts-username_sent')) bgneal@659: else: bgneal@659: form = ForgotUsernameForm() bgneal@659: bgneal@659: return render(request, 'accounts/username_query.html', {'form': form})