diff --git a/python/tests/test_account.py b/python/tests/test_account.py index 7c642cbd5..244160007 100644 --- a/python/tests/test_account.py +++ b/python/tests/test_account.py @@ -629,6 +629,45 @@ class TestOnlineAccount: ev = ac1._evlogger.get_matching("DC_EVENT_SMTP_MESSAGE_SENT") assert not msg.is_encrypted() + def test_reply_encrypted(self, acfactory, lp): + ac1, ac2 = acfactory.get_two_online_accounts() + + lp.sec("ac1: create chat with ac2") + chat = self.get_chat(ac1, ac2) + + lp.sec("sending text message from ac1 to ac2") + msg_out = chat.send_text("message1") + assert not msg_out.is_encrypted() + + lp.sec("wait for ac2 to receive message") + ev = ac2._evlogger.get_matching("DC_EVENT_MSGS_CHANGED") + msg_in = ac2.get_message_by_id(msg_out.id) + assert msg_in.text == "message1" + assert not msg_in.is_encrypted() + + lp.sec("create new chat with contact and send back (encrypted) message") + chat2b = ac2.create_chat_by_message(msg_in) + chat2b.send_text("message-back") + + lp.sec("wait for ac1 to receive message") + ev = ac1._evlogger.get_matching("DC_EVENT_INCOMING_MSG") + assert ev[1] == chat.id + msg_back = ac1.get_message_by_id(ev[2]) + assert msg_back.text == "message-back" + assert msg_back.is_encrypted() + + lp.sec("ac1: e2ee_enabled=0 and see if reply is encrypted") + print("ac1: e2ee_enabled={}".format(ac1.get_config("e2ee_enabled"))) + print("ac2: e2ee_enabled={}".format(ac2.get_config("e2ee_enabled"))) + ac1.set_config("e2ee_enabled", "0") + chat.send_text("message2 -- should be encrypted") + + lp.sec("wait for ac2 to receive message") + ev = ac2._evlogger.get_matching("DC_EVENT_INCOMING_MSG") + msg_in = ac2.get_message_by_id(ev[2]) + assert msg_in.text == "message2 -- should be encrypted" + assert msg_in.is_encrypted() + def test_saved_mime_on_received_message(self, acfactory, lp): ac1, ac2 = acfactory.get_two_online_accounts() diff --git a/src/chat.rs b/src/chat.rs index 97acde20a..20601aae8 100644 --- a/src/chat.rs +++ b/src/chat.rs @@ -259,8 +259,6 @@ impl Chat { msg: &mut Message, timestamp: i64, ) -> Result { - let mut do_guarantee_e2ee: bool; - let e2ee_enabled: bool; let mut new_references = "".into(); let mut new_in_reply_to = "".into(); let mut msg_id = 0; @@ -319,15 +317,12 @@ impl Chat { self.update_param(context)?; } - /* check if we can guarantee E2EE for this message. - if we guarantee E2EE, and circumstances change + /* check if we want to encrypt this message. If yes and circumstances change so that E2EE is no longer available at a later point (reset, changed settings), - we do not send the message out at all */ - do_guarantee_e2ee = false; - e2ee_enabled = context.get_config_bool(Config::E2eeEnabled); - if e2ee_enabled && msg.param.get_int(Param::ForcePlaintext).unwrap_or_default() == 0 { + we might not send the message out at all */ + if msg.param.get_int(Param::ForcePlaintext).unwrap_or_default() == 0 { let mut can_encrypt = true; - let mut all_mutual = true; + let mut all_mutual = context.get_config_bool(Config::E2eeEnabled); // take care that this statement returns NULL rows // if there is no peerstates for a chat member! @@ -377,13 +372,10 @@ impl Chat { if can_encrypt && (all_mutual || last_msg_in_chat_encrypted(context, &context.sql, self.id)) { - do_guarantee_e2ee = true; + msg.param.set_int(Param::GuaranteeE2ee, 1); } } - if do_guarantee_e2ee { - msg.param.set_int(Param::GuaranteeE2ee, 1); - } - // reset eg. for forwarding + // reset encrypt error state eg. for forwarding msg.param.remove(Param::ErroneousE2ee); // set "In-Reply-To:" to identify the message to which the composed message is a reply;