You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
kompass/jdav_web/logindata/views.py

80 lines
2.8 KiB
Python

from django.contrib.auth.forms import UserCreationForm
from django.http import HttpResponseRedirect
from django.shortcuts import render
from django.urls import reverse
from django.utils.translation import gettext_lazy as _
from members.models import Member
from .models import initial_user_setup
from .models import RegistrationPassword
def render_register_password(request, key, member, error_message=""):
return render(
request,
"logindata/register_password.html",
context={"key": key, "member": member, "error_message": error_message},
)
def render_register_failed(request):
return render(request, "logindata/register_failed.html")
def render_register_form(request, key, password, member, form):
return render(
request,
"logindata/register_form.html",
context={"key": key, "password": password, "member": member, "form": form},
)
def render_register_success(request):
return render(request, "logindata/register_success.html")
# Create your views here.
def register(request):
if request.method == "GET" and "key" not in request.GET:
return HttpResponseRedirect(reverse("startpage:index"))
if request.method == "POST" and "key" not in request.POST:
return HttpResponseRedirect(reverse("startpage:index"))
key = request.GET["key"] if request.method == "GET" else request.POST["key"]
if not key:
return render_register_failed(request)
try:
member = Member.objects.get(invite_as_user_key=key)
except (Member.DoesNotExist, Member.MultipleObjectsReturned):
return render_register_failed(request)
if request.method == "GET":
return render_register_password(request, request.GET["key"], member)
if "password" not in request.POST:
return render_register_failed(request)
password = request.POST["password"]
# check if the entered password is one of the active registration passwords
if RegistrationPassword.objects.filter(password=password).count() == 0:
return render_register_password(
request, key, member, error_message=_("You entered a wrong password.")
)
if "save" in request.POST:
form = UserCreationForm(request.POST)
if not form.is_valid():
# form is invalid, reprint form with (automatic) error messages
return render_register_form(request, key, password, member, form)
user = form.save(commit=False)
success = initial_user_setup(user, member)
if success:
return render_register_success(request)
else:
return render_register_failed(request)
else:
prefill = {"username": member.suggested_username()}
form = UserCreationForm(initial=prefill)
return render_register_form(request, key, password, member, form)