def test_account_parse_incoming_mails_replace_by_date(account_maker): ac1 = account_maker() ac2 = account_maker() ac3 = account_maker() adr = "*****@*****.**" msg2 = mime.gen_mail_msg(From="Alice <%s>" % adr, To=["*****@*****.**"], _dto=True, Autocrypt=ac3.make_header(adr, headername=""), Date='Thu, 16 Feb 2017 15:00:00 -0000') msg1 = mime.gen_mail_msg(From="Alice <%s>" % adr, To=["*****@*****.**"], _dto=True, Autocrypt=ac2.make_header(adr, headername=""), Date='Thu, 16 Feb 2017 13:00:00 -0000') peerinfo = ac1.process_incoming(msg2) id1 = peerinfo.identity assert id1.get_peerinfo( adr).keyhandle == ac3.get_identity().config.own_keyhandle ac1.process_incoming(msg1) assert id1.get_peerinfo( adr).keyhandle == ac3.get_identity().config.own_keyhandle msg3 = mime.gen_mail_msg(From="Alice <%s>" % adr, To=["*****@*****.**"], _dto=True, Date='Thu, 16 Feb 2017 17:00:00 -0000') peerinfo = ac1.process_incoming(msg3) assert peerinfo is None assert ac1.get_identity().get_peerinfo(adr) is None
def test_account_parse_incoming_mails_replace(account_maker): ac1 = account_maker() ac2 = account_maker() ac3 = account_maker() addr = "*****@*****.**" msg1 = mime.gen_mail_msg( From="Alice <%s>" % addr, To=["*****@*****.**"], _dto=True, Autocrypt=ac2.make_header(addr, headername="")) peerinfo = ac1.process_incoming(msg1) ident2 = ac2.get_identity_from_emailadr([addr]) assert peerinfo.keyhandle == ident2.config.own_keyhandle msg2 = mime.gen_mail_msg( From="Alice <%s>" % addr, To=["*****@*****.**"], _dto=True, Autocrypt=ac3.make_header(addr, headername="")) peerinfo2 = ac1.process_incoming(msg2) assert peerinfo2.keyhandle == ac3.get_identity().config.own_keyhandle
def test_send_reply(self, smtpserver, bcmd, ac_sender, with_ac, linematch): host, port = smtpserver.addr[:2] Autocrypt = None if not with_ac else ac_sender.ac_headerval msg = mime.gen_mail_msg( From=ac_sender.adr, To=[bcmd.bot_adr], MessageID=mime.make_msgid("5" * 50), # long MessageID Autocrypt=Autocrypt, Subject="hello", _dto=True) bcmd.run_ok(["bot-reply", "--smtp={},{}".format(host, port)], input=msg.as_string()) assert len(smtpserver.outbox) == 1 msg2 = smtpserver.outbox[0] assert msg2["To"] == msg["From"] assert msg2["From"] == msg["To"] assert msg2["In-Reply-To"] == msg["Message-ID"] assert msg["Subject"] in msg2["Subject"] body = decode_body(msg2) linematch( body, """ *Got your mail* *Message-ID*{}* """.format(msg["Message-ID"][:20])) if with_ac: linematch( body, """ *processed incoming*found:* *{senderadr}*{senderkeyhandle}* """.format( senderadr=ac_sender.adr, senderkeyhandle=ac_sender.config.own_keyhandle, ))
def test_process_incoming_no_autocrypt(self, mycmd, datadir): mycmd.run_ok(["init", "--no-identity"]) mycmd.run_ok(["add-identity", "ident1", "[email protected]"]) msg = mime.gen_mail_msg(From="Alice <*****@*****.**>", To=["*****@*****.**"], _dto=True) mycmd.run_ok(["process-incoming"], """ *processed*ident1*no*Autocrypt*header* """, input=msg.as_string())
def test_account_parse_incoming_mail_broken_ac_header(account_maker): addr = "*****@*****.**" ac2 = account_maker() msg = mime.gen_mail_msg( From="Alice <%s>" % addr, To=["*****@*****.**"], _dto=True, Autocrypt="Autocrypt: to=123; key=12312k3") peerinfo = ac2.process_incoming(msg) assert not peerinfo
def do_gen_mail(From="*****@*****.**", body=None): msg = mime.gen_mail_msg( From=From, To=["*****@*****.**"], Subject="test mail {} [{}]".format(next(counter), nid), ) if body is not None: msg.set_payload(body) return msg
def test_reply_no_autocrypt(self, bcmd): adr = "*****@*****.**" msg = mime.gen_mail_msg( From=adr, To=[bcmd.bot_adr], Autocrypt=None, Subject="hello", _dto=True) out = bcmd.run_ok(["bot-reply"], input=msg.as_string()) reply_msg = mime.parse_message_from_string(out) assert reply_msg["Subject"] == "Re: " + msg["Subject"] assert reply_msg["Autocrypt"] body = decode_body(reply_msg) print(body) assert "no autocrypt header" in body.lower()
def test_account_parse_incoming_mail_and_raw_encrypt(account_maker): addr = "*****@*****.**" ac1 = account_maker() ac2 = account_maker() msg = mime.gen_mail_msg( From="Alice <%s>" % addr, To=["*****@*****.**"], _dto=True, Autocrypt=ac1.make_header(addr, headername="")) peerinfo = ac2.process_incoming(msg) assert peerinfo["addr"] == addr ident2 = ac2.get_identity() ident1 = ac1.get_identity() enc = ident2.bingpg.encrypt(data=b"123", recipients=[peerinfo.keyhandle]) data, descr_info = ident1.bingpg.decrypt(enc) assert data == b"123"
def test_reply_no_delivto(self, bcmd, ac_sender, linematch): send_adr = ac_sender.adr msg = mime.gen_mail_msg(From=send_adr, To=[bcmd.bot_adr], Subject="hello") out = bcmd.run_ok(["bot-reply", "--fallback-delivto", bcmd.bot_adr], input=msg.as_string()) reply_msg = mime.parse_message_from_string(out) linematch(decode_body(reply_msg), """ *processed*identity*default* """) assert reply_msg["Subject"] == "Re: " + msg["Subject"] assert reply_msg["From"] == bcmd.bot_adr assert reply_msg["To"] == msg["From"] assert reply_msg["Autocrypt"]
def test_reply_with_autocrypt(self, bcmd, ac_sender, linematch): send_adr = ac_sender.adr msg = mime.gen_mail_msg( From=send_adr, To=[bcmd.bot_adr], Autocrypt=ac_sender.ac_headerval, Subject="hello", _dto=True) out = bcmd.run_ok(["bot-reply"], input=msg.as_string()) reply_msg = mime.parse_message_from_string(out) linematch(decode_body(reply_msg), """ *processed*identity*default* """) assert reply_msg["Subject"] == "Re: " + msg["Subject"] assert reply_msg["From"] == bcmd.bot_adr assert reply_msg["To"] == msg["From"] assert reply_msg["Autocrypt"] ac_dict = mime.parse_ac_headervalue(reply_msg["Autocrypt"]) assert ac_dict["to"] == bcmd.bot_adr assert ac_dict["key"] body = decode_body(reply_msg) assert "no Autocrypt header" not in body print(body)