auth.py 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. from django.conf import settings
  2. from django.contrib import auth
  3. from django.utils.translation import ugettext as _
  4. from django.views.decorators.cache import never_cache
  5. from django.views.decorators.csrf import csrf_protect
  6. from django.views.decorators.debug import sensitive_post_parameters
  7. from rest_framework import status
  8. from rest_framework.decorators import api_view
  9. from rest_framework.response import Response
  10. from misago.users.decorators import (deny_authenticated, deny_guests,
  11. deny_banned_ips)
  12. from misago.users.forms.auth import AuthenticationForm
  13. from misago.users.serializers import AuthenticatedUserSerializer
  14. @sensitive_post_parameters()
  15. @api_view(['POST'])
  16. @never_cache
  17. @deny_authenticated
  18. @csrf_protect
  19. @deny_banned_ips
  20. def login(request):
  21. form = AuthenticationForm(request, data=request.data)
  22. if form.is_valid():
  23. auth.login(request, form.user_cache)
  24. return Response(AuthenticatedUserSerializer(form.user_cache).data)
  25. else:
  26. error = form.errors.as_data()['__all__'][0]
  27. return Response({
  28. 'detail': error.messages[0],
  29. 'code': error.code
  30. }, status=status.HTTP_400_BAD_REQUEST)
  31. @api_view(['GET', 'POST'])
  32. def user(request):
  33. if request.user.is_authenticated():
  34. return Response(AuthenticatedUserSerializer(request.user).data)
  35. else:
  36. return Response({'id': None})