username.py 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  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. serializer.is_valid(raise_exception=True)
  32. try:
  33. serializer.change_username(changed_by=request.user)
  34. response_data = get_available_namechanges_data(request.user)
  35. response_data.update({
  36. 'username': request.user.username,
  37. 'slug': request.user.slug,
  38. })
  39. return Response(response_data)
  40. except IntegrityError:
  41. return Response(
  42. {
  43. 'username': [_("Please try again.")],
  44. },
  45. status=400,
  46. )
  47. def moderate_username_endpoint(request, profile):
  48. if request.method == 'POST':
  49. serializer = ChangeUsernameSerializer(data=request.data, context={'user': profile})
  50. serializer.is_valid(raise_exception=True)
  51. try:
  52. serializer.change_username(changed_by=request.user)
  53. return Response({
  54. 'username': profile.username,
  55. 'slug': profile.slug,
  56. })
  57. except IntegrityError:
  58. return Response(
  59. {
  60. 'username': [_("Please try again.")],
  61. },
  62. status=400,
  63. )
  64. else:
  65. # return form data
  66. return Response({
  67. 'length_min': settings.username_length_min,
  68. 'length_max': settings.username_length_max,
  69. })