mirror of
				https://github.com/zulip/zulip.git
				synced 2025-11-04 05:53:43 +00:00 
			
		
		
		
	For some reason in my original version I was sending both content and data to the client for submessage events, where data === JSON.parse(content). There's no reason to not just let the client parse it, since the client already does it for data that comes on the original message, and since we might eventually have non-JSON payloads. The server still continues to validate that the payload is JSON, and the client will blueslip if the server regressses and sends bad JSON for some reason.
		
			
				
	
	
		
			46 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			46 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
import logging
 | 
						|
import ujson
 | 
						|
 | 
						|
from django.http import HttpRequest, HttpResponse
 | 
						|
from django.utils.translation import ugettext as _
 | 
						|
from django.conf import settings
 | 
						|
 | 
						|
from zerver.decorator import (
 | 
						|
    has_request_variables,
 | 
						|
    REQ,
 | 
						|
)
 | 
						|
from zerver.lib.actions import do_add_submessage
 | 
						|
from zerver.lib.message import access_message
 | 
						|
from zerver.lib.validator import check_int
 | 
						|
from zerver.lib.response import (
 | 
						|
    json_error,
 | 
						|
    json_success
 | 
						|
)
 | 
						|
from zerver.models import UserProfile
 | 
						|
 | 
						|
@has_request_variables
 | 
						|
def process_submessage(request: HttpRequest,
 | 
						|
                       user_profile: UserProfile,
 | 
						|
                       message_id: int=REQ(validator=check_int),
 | 
						|
                       msg_type: str=REQ(),
 | 
						|
                       content: str=REQ(),
 | 
						|
                       ) -> HttpResponse:
 | 
						|
    message, user_message = access_message(user_profile, message_id)
 | 
						|
 | 
						|
    if not settings.ALLOW_SUB_MESSAGES:  # nocoverage
 | 
						|
        msg = 'Feature not enabled'
 | 
						|
        return json_error(msg)
 | 
						|
 | 
						|
    try:
 | 
						|
        ujson.loads(content)
 | 
						|
    except Exception:
 | 
						|
        return json_error(_("Invalid json for submessage"))
 | 
						|
 | 
						|
    do_add_submessage(
 | 
						|
        sender_id=user_profile.id,
 | 
						|
        message_id=message.id,
 | 
						|
        msg_type=msg_type,
 | 
						|
        content=content,
 | 
						|
    )
 | 
						|
    return json_success()
 |