views.py 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. from django.contrib.auth.decorators import login_required
  2. from django.shortcuts import get_object_or_404, redirect, render
  3. from django.contrib import messages
  4. from django.core.exceptions import PermissionDenied
  5. from django.conf import settings
  6. from django.http import HttpResponse, HttpResponseBadRequest
  7. from django.views.decorators.http import require_POST
  8. from django.views.decorators.csrf import csrf_exempt
  9. from django.contrib.auth import authenticate, get_user_model
  10. from .forms import UserForm, ProfileForm
  11. @login_required
  12. def profile(request):
  13. user_form = UserForm(request.POST or None, instance=request.user)
  14. profile_form = ProfileForm(request.POST or None, instance=request.user.profile)
  15. forms = [user_form, profile_form]
  16. if request.method == 'POST' and all(form.is_valid() for form in forms):
  17. for form in forms:
  18. form.save()
  19. messages.success(request, 'Profil mis à jour avec succès !')
  20. return redirect('profile')
  21. return render(request, 'accounts/profile.html', {
  22. 'user_form': user_form,
  23. 'profile_form': profile_form,
  24. })
  25. @require_POST
  26. @csrf_exempt
  27. def auth_api(request, token):
  28. # token could not be None due to url regex
  29. if token != getattr(settings, 'AUTH_API_TOKEN', None):
  30. raise PermissionDenied
  31. username = request.POST.get('username')
  32. if not username:
  33. return HttpResponseBadRequest()
  34. password = request.POST.get('password')
  35. if password:
  36. user = authenticate(username=username, password=password)
  37. if user is None:
  38. return HttpResponse('<h1>401 Unauthorized</h1>', status=401)
  39. else:
  40. user = get_object_or_404(get_user_model(), username=username)
  41. required_groups = request.POST.get('groups')
  42. if required_groups and not user.is_superuser: # skip groups check for superusers
  43. required_groups = set(required_groups.split(' '))
  44. user_groups = set(map(lambda g: g.name, user.groups.all()))
  45. if required_groups - user_groups:
  46. return HttpResponse('<h1>401 Unauthorized</h1>', status=401)
  47. return HttpResponse()