views.py 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. from django.shortcuts import render, redirect
  2. from . forms import LoginForm, CreateUserForm, TimeEntryForm
  3. from . models import User
  4. from hashlib import sha256
  5. def hash_pin(pin):
  6. return sha256(pin.encode('utf-8')).hexdigest()
  7. def logout_user(request):
  8. del request.session['authenticated']
  9. return redirect('home')
  10. def requires_auth(request):
  11. return request.session.get('authenticated')
  12. def get_user(uid):
  13. user = User.objects.get(id=uid)
  14. return user
  15. def create_user(request):
  16. form = CreateUserForm()
  17. if request.method == "POST":
  18. form = CreateUserForm(request.POST)
  19. if form.is_valid():
  20. data = form.cleaned_data
  21. users = User.objects.filter(pin=hash_pin(data['pin']))
  22. if len(users) == 0:
  23. user = User()
  24. user.first_name = data['first_name']
  25. user.last_name = data['last_name']
  26. user.pin = data['pin']
  27. user.save()
  28. return redirect('timesheet')
  29. else:
  30. form.add_error('pin', 'PIN already exists')
  31. context = {
  32. 'form': form
  33. }
  34. return render(request, 'create_user.html', context=context)
  35. def home(request):
  36. form = LoginForm
  37. login_error = False
  38. if request.method == "POST":
  39. form = LoginForm(request.POST or None)
  40. if form.is_valid():
  41. data = form.cleaned_data
  42. pin = sha256(data['pin'].encode('utf-8')).hexdigest()
  43. user = User.objects.filter(pin=pin).first()
  44. print(user)
  45. if user is None:
  46. form.add_error('pin', 'Invalid login')
  47. login_error = True
  48. else:
  49. request.session['authenticated'] = True
  50. request.session['uid'] = user.id
  51. return redirect('timesheet')
  52. context = {
  53. 'form': form,
  54. 'login_error': login_error
  55. }
  56. return render(request, 'home.html', context=context)
  57. def timesheet(request):
  58. if requires_auth(request):
  59. uid = request.session.get('uid')
  60. user = get_user(uid)
  61. form = TimeEntryForm()
  62. if request.method == "POST":
  63. form = TimeEntryForm(request.POST)
  64. if form.is_valid():
  65. data = form.cleaned_data
  66. print(data)
  67. context = {
  68. 'user': user,
  69. 'form': form,
  70. }
  71. return render(request, 'timesheet.html', context=context)
  72. else:
  73. request.session['authenticated'] = False
  74. return redirect('home')