signature.py 2.0 KB

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