signature.py 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. from django.utils.translation import ugettext as _
  2. from rest_framework import status
  3. from rest_framework.response import Response
  4. from misago.conf import settings
  5. from misago.core.utils import format_plaintext_for_html
  6. from misago.users.forms.options import EditSignatureForm
  7. from misago.users.signatures import is_user_signature_valid, set_user_signature
  8. def signature_endpoint(request):
  9. user = request.user
  10. if user.is_signature_locked:
  11. if user.signature_lock_user_message:
  12. reason = format_plaintext_for_html(
  13. user.signature_lock_user_message)
  14. else:
  15. reason = None
  16. return Response({
  17. 'detail': _("Your signature is locked. You can't change it."),
  18. 'reason': reason
  19. },
  20. status=status.HTTP_403_FORBIDDEN)
  21. if request.method == 'POST':
  22. return edit_signature(request, user)
  23. return get_signature_options(user)
  24. def get_signature_options(user):
  25. options = {
  26. 'signature': None,
  27. 'limit': settings.signature_length_max,
  28. }
  29. if user.signature:
  30. options['signature'] = {
  31. 'plain': user.signature,
  32. 'html': user.signature_parsed,
  33. }
  34. if not is_user_signature_valid(user):
  35. options['signature']['html'] = None
  36. return Response(options)
  37. def edit_signature(request, user):
  38. form = EditSignatureForm(request.data, instance=user)
  39. if form.is_valid():
  40. set_user_signature(
  41. request, user, form.cleaned_data['signature'])
  42. user.save(update_fields=[
  43. 'signature', 'signature_parsed', 'signature_checksum'
  44. ])
  45. return get_signature_options(user)
  46. else:
  47. return Response({'detail': form.non_field_errors()[0]},
  48. status=status.HTTP_400_BAD_REQUEST)