username.py 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. from rest_framework import status
  2. from rest_framework.response import Response
  3. from django.db import IntegrityError
  4. from django.utils.translation import ugettext as _
  5. from misago.conf import settings
  6. from misago.users.serializers import ChangeUsernameSerializer
  7. from misago.users.namechanges import UsernameChanges
  8. def username_endpoint(request):
  9. if request.method == 'POST':
  10. return change_username(request)
  11. else:
  12. return options_response(get_username_options(request.user))
  13. def get_username_options(user):
  14. options = UsernameChanges(user)
  15. return {
  16. 'changes_left': options.left,
  17. 'next_on': options.next_on,
  18. 'length_min': settings.username_length_min,
  19. 'length_max': settings.username_length_max,
  20. }
  21. def options_response(options):
  22. if options['next_on']:
  23. options['next_on'] = options['next_on'].isoformat()
  24. return Response(options)
  25. def change_username(request):
  26. options = get_username_options(request.user)
  27. if not options['changes_left']:
  28. return Response({
  29. 'detail': _("You can't change your username now."),
  30. 'options': options
  31. },
  32. status=status.HTTP_400_BAD_REQUEST)
  33. serializer = ChangeUsernameSerializer(
  34. data=request.data,
  35. context={
  36. 'user': request.user
  37. }
  38. )
  39. if serializer.is_valid():
  40. try:
  41. serializer.change_username(changed_by=request.user)
  42. return Response({
  43. 'username': request.user.username,
  44. 'slug': request.user.slug,
  45. 'options': get_username_options(request.user)
  46. })
  47. except IntegrityError:
  48. return Response({
  49. 'detail': _("Error changing username. Please try again."),
  50. },
  51. status=status.HTTP_400_BAD_REQUEST)
  52. else:
  53. return Response({
  54. 'detail': serializer.errors['non_field_errors'][0]
  55. }, status=status.HTTP_400_BAD_REQUEST)
  56. def moderate_username_endpoint(request, profile):
  57. if request.method == 'POST':
  58. serializer = ChangeUsernameSerializer(
  59. data=request.data,
  60. context={
  61. 'user': profile
  62. }
  63. )
  64. if serializer.is_valid():
  65. try:
  66. serializer.change_username(changed_by=request.user)
  67. return Response({
  68. 'username': profile.username,
  69. 'slug': profile.slug,
  70. })
  71. except IntegrityError:
  72. return Response({
  73. 'detail': _("Error changing username. Please try again."),
  74. }, status=status.HTTP_400_BAD_REQUEST)
  75. else:
  76. return Response({
  77. 'detail': serializer.errors['non_field_errors'][0]
  78. }, status=status.HTTP_400_BAD_REQUEST)
  79. else:
  80. return Response({
  81. 'length_min': settings.username_length_min,
  82. 'length_max': settings.username_length_max,
  83. })