submessages: Just send content for submessage events.

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.
This commit is contained in:
Steve Howell
2018-05-30 19:12:16 +00:00
committed by Tim Abbott
parent d76450a117
commit bfc13ecea4
7 changed files with 16 additions and 13 deletions

View File

@@ -67,7 +67,7 @@ run_test('handle_event', () => {
msg_type: 'widget',
sender_id: 99,
message_id: message.id,
data: 'some_data',
content: '"some_data"',
};
var args;

View File

@@ -258,7 +258,7 @@ exports.dispatch_normal_event = function dispatch_normal_event(event) {
sender_id: event.sender_id,
msg_type: event.msg_type,
message_id: event.message_id,
data: event.data,
content: event.content,
});
break;

View File

@@ -91,10 +91,19 @@ exports.handle_event = function (event) {
return;
}
var data;
try {
data = JSON.parse(event.content);
} catch (err) {
blueslip.error('server sent us invalid json in handle_event: ' + event.content);
return;
}
widgetize.handle_event({
sender_id: event.sender_id,
message_id: event.message_id,
data: event.data,
data: data,
});
};

View File

@@ -1440,7 +1440,6 @@ def do_add_submessage(sender_id: int,
message_id: int,
msg_type: str,
content: str,
data: Any,
) -> None:
submessage = SubMessage(
sender_id=sender_id,
@@ -1455,7 +1454,7 @@ def do_add_submessage(sender_id: int,
msg_type=msg_type,
message_id=message_id,
sender_id=sender_id,
data=data,
content=content,
)
ums = UserMessage.objects.filter(message_id=message_id)
target_user_ids = [um.user_profile_id for um in ums]

View File

@@ -874,7 +874,7 @@ class EventsRegisterTest(ZulipTestCase):
('message_id', check_int),
('sender_id', check_int),
('msg_type', check_string),
('data', check_string),
('content', check_string),
])
cordelia = self.example_user('cordelia')
@@ -889,7 +889,6 @@ class EventsRegisterTest(ZulipTestCase):
message_id=message_id,
msg_type='whatever',
content='"stuff"',
data='stuff',
),
state_change_expected=False,
)

View File

@@ -127,10 +127,7 @@ class TestBasics(ZulipTestCase):
expected_data = dict(
message_id=message_id,
data=dict(
name='alice',
salary=20,
),
content=payload['content'],
msg_type='whatever',
sender_id=cordelia.id,
type='submessage',

View File

@@ -32,7 +32,7 @@ def process_submessage(request: HttpRequest,
return json_error(msg)
try:
data = ujson.loads(content)
ujson.loads(content)
except Exception:
return json_error(_("Invalid json for submessage"))
@@ -41,6 +41,5 @@ def process_submessage(request: HttpRequest,
message_id=message.id,
msg_type=msg_type,
content=content,
data=data,
)
return json_success()