diff --git a/python/src/deltachat/message.py b/python/src/deltachat/message.py index 4b320da24..313881e3a 100644 --- a/python/src/deltachat/message.py +++ b/python/src/deltachat/message.py @@ -236,6 +236,20 @@ class Message(object): chat_id = lib.dc_msg_get_chat_id(self._dc_msg) return Chat(self.account, chat_id) + @props.with_doc + def override_sender_name(self): + """the name that should be shown over the message instead of the contact display name. + + Usually used to impersonate someone else. + """ + return from_dc_charpointer( + lib.dc_msg_get_override_sender_name(self._dc_msg)) + + def set_override_sender_name(self, name): + """set different sender name for a message. """ + lib.dc_msg_set_override_sender_name( + self._dc_msg, as_dc_charpointer(name)) + def get_sender_chat(self): """return the 1:1 chat with the sender of this message. diff --git a/python/tests/test_account.py b/python/tests/test_account.py index e0f91c6ac..a726d3dbb 100644 --- a/python/tests/test_account.py +++ b/python/tests/test_account.py @@ -991,6 +991,38 @@ class TestOnlineAccount: except queue.Empty: pass # mark_seen_messages() has generated events before it returns + def test_message_override_sender_name(self, acfactory, lp): + ac1, ac2 = acfactory.get_two_online_accounts() + chat = acfactory.get_accepted_chat(ac1, ac2) + overridden_name = "someone else" + + ac1.set_config("displayname", "ac1") + + lp.sec("sending text message with overridden name from ac1 to ac2") + msg1 = Message.new_empty(ac1, "text") + msg1.set_override_sender_name(overridden_name) + msg1.set_text("message1") + msg1 = chat.send_msg(msg1) + assert msg1.override_sender_name == overridden_name + + lp.sec("wait for ac2 to receive message") + msg2 = ac2._evtracker.wait_next_incoming_message() + assert msg2.text == "message1" + assert msg2.get_sender_contact().name == ac1.get_config("displayname") + assert msg2.override_sender_name == overridden_name + + lp.sec("sending normal text message from ac1 to ac2") + msg1 = Message.new_empty(ac1, "text") + msg1.set_text("message2") + msg1 = chat.send_msg(msg1) + assert not msg1.override_sender_name + + lp.sec("wait for ac2 to receive message") + msg2 = ac2._evtracker.wait_next_incoming_message() + assert msg2.text == "message2" + assert msg2.get_sender_contact().name == ac1.get_config("displayname") + assert not msg2.override_sender_name + @pytest.mark.parametrize("mvbox_move", [True, False]) def test_markseen_message_and_mdn(self, acfactory, mvbox_move): # Please only change this test if you are very sure that it will still catch the issues it catches now.