Free and open source ticket system written in python
1from django.shortcuts import render, redirect
2from django.contrib.auth import login
3from datetime import datetime
4from .forms import FblAuthForm, FblAuthCodeForm, RegistrationCompletionForm
5from .utils import fbl_auth_request_code, fbl_auth_validate_code, fbl_auth_get_account, get_or_create_account
6
7def fbl_authentication_start(request):
8 print('fbl auth started')
9 auth_form = FblAuthForm(request.POST or None)
10 if request.method == "POST":
11 if auth_form.is_valid():
12
13 valid_info = fbl_auth_request_code(
14 badge_number=auth_form.cleaned_data["badge_number"],
15 dob=auth_form.cleaned_data["dob"]
16 )
17 if valid_info:
18 code_form = FblAuthCodeForm(initial={
19 **auth_form.cleaned_data,
20 "dob": datetime.strptime(auth_form.cleaned_data["dob"], "%Y-%m-%d").strftime("%d/%m/%Y"),
21 })
22
23 return render(request, "fbl_auth_get_code.html", {"get_code_form": code_form})
24
25 auth_form.add_error(None, "Invalid badge number or date of birth")
26
27 return render(request, "fbl_auth_start.html", {"form": auth_form})
28
29
30def fbl_authentication_get_code(request):
31 code_form = FblAuthCodeForm(request.POST or None)
32 if request.method == "POST":
33 if code_form.is_valid():
34 access_token = fbl_auth_validate_code(
35 badge_number=code_form.cleaned_data["badge_number"],
36 dob=code_form.cleaned_data["dob"],
37 validation_code=code_form.cleaned_data["validation_code"]
38 )
39 if access_token:
40 account_info = fbl_auth_get_account(access_token)
41 fbl_account = get_or_create_account(account_info)
42
43 login(request=request, user=fbl_account.user)
44
45 if not fbl_account.user.email:
46 return redirect("fbl_complete_registration")
47 else:
48 return redirect("all_tickets")
49
50 code_form.add_error(None, "Invalid validation code")
51
52
53 return render(request, "fbl_auth_get_code.html", {"get_code_form": code_form})
54
55def complete_registration(request):
56 form = RegistrationCompletionForm(request.POST or None)
57 if request.method == "POST":
58 if form.is_valid():
59 request.user.email = form.cleaned_data["email"]
60 request.user.save()
61 return redirect("all_tickets")
62 return render(request, "complete_registration.html", {"form": form})