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.
80 lines
2.8 KiB
Python
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)
|