예제 #1
0
    def test_reply_to_encrypted(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)
        ac_sender.process_incoming(reply_msg)

        msg2 = mime.gen_mail_msg(
            From=send_adr, To=[bcmd.bot_adr],
            Autocrypt=ac_sender.ac_headerval,
            Subject="encrypted", _dto=True)

        r = ac_sender.encrypt_mime(msg2, [bcmd.bot_adr])
        out2 = bcmd.run_ok(["bot-reply"], input=r.enc_msg.as_string())
        enc_reply_msg = mime.parse_message_from_string(out2)
        ac_sender.process_incoming(enc_reply_msg)
        decrypted = ac_sender.decrypt_mime(enc_reply_msg)
        body = decode_body(decrypted.dec_msg)
        print(body)
        linematch(body, """
            *processed*account*default*
        """)
        assert "no Autocrypt header" not in body
        assert "prefer_encrypt=nopreference" in body
        assert "recommendation is encrypt" in body
예제 #2
0
    def test_encrypted_if_mutual(self, bcmd, ac_sender, linematch):
        bcmd.run_ok(["mod-account", "default", "--prefer-encrypt=mutual"])
        ac_sender.modify(prefer_encrypt='mutual')
        ac_sender.ac_headerval = ac_sender.make_ac_header(ac_sender.adr)
        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)
        assert reply_msg["Subject"] == "Re: " + msg["Subject"]
        assert reply_msg["From"] == bcmd.bot_adr
        assert reply_msg["To"] == msg["From"]
        assert reply_msg["Autocrypt"]
        r = mime.parse_ac_headervalue(reply_msg["Autocrypt"])
        assert r.addr == bcmd.bot_adr
        assert r.keydata

        ac_sender.process_incoming(reply_msg)
        decrypted = ac_sender.decrypt_mime(reply_msg)
        body = decode_body(decrypted.dec_msg)
        linematch(body, """
            *processed*account*default*
        """)
        assert "no Autocrypt header" not in body
        assert "prefer_encrypt=mutual" in body
        assert "recommendation is encrypt" in body
        print(body)
예제 #3
0
    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*account*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"]
        r = mime.parse_ac_headervalue(reply_msg["Autocrypt"])
        assert r.addr == bcmd.bot_adr
        assert r.keydata
        body = decode_body(reply_msg)
        assert "no Autocrypt header" not in body
        assert "recommendation is available" in body
        print(body)
예제 #4
0
    def test_process_incoming(self, mycmd, datadir):
        mycmd.run_ok([
            "add-account", "-a", "account1", "[email protected]"
        ])
        mail = datadir.read("rsa2048-simple.eml")
        mycmd.run_fail(["process-incoming"],
                       """
            *AccountNotFound*[email protected]*
        """,
                       input=mail)

        msg = mime.parse_message_from_string(mail)
        msg.replace_header("Delivered-To", "*****@*****.**")
        newmail = msg.as_string()
        out = mycmd.run_ok(["process-incoming"],
                           """
            *processed*account*account1*
        """,
                           input=newmail)

        # now export the public key
        m = re.search(r'key=(\w+)', out)
        keyhandle, = m.groups()
        mycmd.run_ok(["export-public-key", "--account=account1", keyhandle])
        mycmd.run_ok(["status"])
예제 #5
0
 def test_simple(self, mycmd, gen_mail):
     mycmd.run_ok(["add-account", "home"])
     mail = gen_mail()
     out1 = mycmd.run_ok(["process-outgoing"], input=mail.as_string())
     m = mime.parse_message_from_string(out1)
     assert len(m.get_all("Autocrypt")) == 1
     found_header = "Autocrypt: " + m["Autocrypt"]
     gen_header = mycmd.run_ok(["make-header", "*****@*****.**"])
     x1 = mime.parse_one_ac_header_from_string(gen_header)
     x2 = mime.parse_one_ac_header_from_string(found_header)
     assert x1 == x2
예제 #6
0
    def test_reply_puts_to_addresses_to_cc(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=bcmd.bot_adr)

        out = bcmd.run_ok(["bot-reply"], input=msg.as_string())
        reply_msg = mime.parse_message_from_string(out)
        assert reply_msg["To"] == send_adr
        assert reply_msg["Cc"] == "*****@*****.**"
예제 #7
0
    def test_simple_dont_replace(self, mycmd, gen_mail):
        mycmd.run_ok(["add-account", "account1"])
        mail = gen_mail()
        gen_header = mycmd.run_ok(["make-header", "*****@*****.**"])
        mail.add_header("Autocrypt", gen_header)

        out1 = mycmd.run_ok(["process-outgoing"], input=mail.as_string())
        m = mime.parse_message_from_string(out1)
        assert len(m.get_all("Autocrypt")) == 1
        x1 = mime.parse_ac_headervalue(m["Autocrypt"])
        x2 = mime.parse_ac_headervalue(gen_header)
        assert x1 == x2
예제 #8
0
    def test_reply_with_cc_and_to_bot(self, bcmd, ac_sender):
        send_adr = ac_sender.adr
        msg = mime.gen_mail_msg(
            From=send_adr, To=[bcmd.bot_adr],
            Cc=['*****@*****.**'],
            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)
        assert reply_msg["To"] == send_adr
        assert reply_msg["Cc"] == msg["Cc"]
예제 #9
0
 def test_sendmail(self, mycmd, gen_mail, popen_mock):
     mycmd.run_ok(["add-account", "account1"])
     mail = gen_mail().as_string()
     pargs = ["-oi", "*****@*****.**"]
     mycmd.run_ok(["sendmail", "-f", "--"] + pargs, input=mail)
     assert len(popen_mock.calls) == 1
     call = popen_mock.pop_next_call()
     for x in pargs:
         assert x in call.args
     # make sure unknown option is passed to pipe
     assert "-f" in call.args
     out_msg = mime.parse_message_from_string(call.input)
     assert "Autocrypt" in out_msg, out_msg.as_string()
예제 #10
0
    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 valid autocrypt" in body.lower()
예제 #11
0
    def test_matching_account(self, mycmd, gen_mail):
        mycmd.run_ok(["add-account", "[email protected]"])
        mail = gen_mail(From="*****@*****.**")
        # mycmd.run_fail(["process-outgoing"], input=mail.as_string(), fnl="""
        #     *AccountNotFound*[email protected]*
        # """)
        out0 = mycmd.run_fail(["process-outgoing"], input=mail.as_string())
        assert "Autocrypt" not in out0

        mail = gen_mail(From="*****@*****.**")
        out1 = mycmd.run_ok(["process-outgoing"], input=mail.as_string())
        msg2 = mime.parse_message_from_string(out1)
        assert "*****@*****.**" in msg2["Autocrypt"]
예제 #12
0
    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*account*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"]
예제 #13
0
def test_parse_message_from_string(datadir):
    msg = mime.parse_message_from_string(datadir.read("rsa2048-simple.eml"))
    assert msg.get_all("Autocrypt")
    assert msg.get_payload()
예제 #14
0
def test_parse_autocrypt_addr_case_insensitive(datadir):
    msg = mime.parse_message_from_string(
        datadir.read("rsa2048-simple-casing.eml"))
    r = mime.parse_one_ac_header_from_msg(msg)
    assert r.addr == "*****@*****.**"