username.py 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. from rest_framework.response import Response
  2. from django.db import IntegrityError
  3. from django.utils.translation import ugettext as _
  4. from misago.conf import settings
  5. from misago.users.namechanges import get_available_namechanges_data
  6. from misago.users.serializers import ChangeUsernameSerializer
  7. def username_endpoint(request):
  8. if request.method == 'POST':
  9. return change_username(request)
  10. else:
  11. form_options = get_available_namechanges_data(request.user)
  12. form_options.update({
  13. 'length_min': settings.username_length_min,
  14. 'length_max': settings.username_length_max,
  15. })
  16. return Response(form_options)
  17. def change_username(request):
  18. available_namechanges = get_available_namechanges_data(request.user)
  19. if not available_namechanges['changes_left']:
  20. return Response(
  21. {
  22. 'username': [_("You can't change your username at this time.")],
  23. 'next_change_on': available_namechanges['next_change_on'],
  24. },
  25. status=400,
  26. )
  27. serializer = ChangeUsernameSerializer(
  28. data=request.data,
  29. context={'user': request.user},
  30. )
  31. if not serializer.is_valid():
  32. return Response(serializer.errors, status=400)
  33. try:
  34. serializer.change_username(changed_by=request.user)
  35. response_data = get_available_namechanges_data(request.user)
  36. response_data.update({
  37. 'username': request.user.username,
  38. 'slug': request.user.slug,
  39. })
  40. return Response(response_data)
  41. except IntegrityError:
  42. return Response(
  43. {
  44. 'username': [_("Please try again.")],
  45. },
  46. status=400,
  47. )
  48. def moderate_username_endpoint(request, profile):
  49. if request.method == 'POST':
  50. serializer = ChangeUsernameSerializer(data=request.data, context={'user': profile})
  51. if not serializer.is_valid():
  52. return Response(serializer.errors, status=400)
  53. try:
  54. serializer.change_username(changed_by=request.user)
  55. return Response({
  56. 'username': profile.username,
  57. 'slug': profile.slug,
  58. })
  59. except IntegrityError:
  60. return Response(
  61. {
  62. 'username': [_("Please try again.")],
  63. },
  64. status=400,
  65. )
  66. else:
  67. # return form data
  68. return Response({
  69. 'length_min': settings.username_length_min,
  70. 'length_max': settings.username_length_max,
  71. })