From df8d3c4662d1be110ee7c4dae61f78cb3e75a3b9 Mon Sep 17 00:00:00 2001 From: missytake Date: Fri, 11 Apr 2025 09:27:44 +0200 Subject: [PATCH] tests: introduce handle command for better command testing --- setup.cfg | 2 +- src/keyserver_bot/attachment.py | 2 +- src/keyserver_bot/errors.py | 2 + src/keyserver_bot/hooks.py | 62 +++++++++++++++++----------- src/keyserver_bot/wkd.py | 7 +++- tests/assets/vcardlogo.png | Bin 0 -> 16234 bytes tests/test_hooks.py | 70 ++++++++++++++++++++++++++++---- tests/test_wkd.py | 5 ++- 8 files changed, 112 insertions(+), 38 deletions(-) create mode 100644 src/keyserver_bot/errors.py create mode 100644 tests/assets/vcardlogo.png diff --git a/setup.cfg b/setup.cfg index 3004d88..9863cbd 100644 --- a/setup.cfg +++ b/setup.cfg @@ -53,7 +53,7 @@ deps = pytest pytest-xdist commands = - pytest -n2 tests + pytest -n4 tests [flake8] max_line_length = 120 diff --git a/src/keyserver_bot/attachment.py b/src/keyserver_bot/attachment.py index f8edc6a..0756e45 100644 --- a/src/keyserver_bot/attachment.py +++ b/src/keyserver_bot/attachment.py @@ -24,4 +24,4 @@ def import_key_from_attachment(file_path: str) -> (str, str, str): uid = key.get_uid("").userid email = validate_email(uid, allow_display_name=True).ascii_email display_name = validate_email(uid, allow_display_name=True).display_name - return "".join(keyparts), email, display_name + return "".join(keyparts), email, (display_name if display_name else "") diff --git a/src/keyserver_bot/errors.py b/src/keyserver_bot/errors.py new file mode 100644 index 0000000..8a25802 --- /dev/null +++ b/src/keyserver_bot/errors.py @@ -0,0 +1,2 @@ +class KeyNotFound(BaseException): + pass diff --git a/src/keyserver_bot/hooks.py b/src/keyserver_bot/hooks.py index fff00fa..0fef05b 100644 --- a/src/keyserver_bot/hooks.py +++ b/src/keyserver_bot/hooks.py @@ -1,10 +1,11 @@ from deltachat_rpc_client import events, run_bot_cli, EventType, Message from email_validator import validate_email, EmailNotValidError -from keyserver_bot.wkd import request_from_wkd +from keyserver_bot.wkd import request_from_wkd, WKD_TIMEOUT from keyserver_bot.koo import request_from_koo from keyserver_bot.attachment import import_key_from_attachment from keyserver_bot.vcard import construct_vcard, save_vcard +from keyserver_bot.errors import KeyNotFound hooks = events.HookCollection() @@ -28,25 +29,12 @@ def command(event): if snapshot.text == "Messages are guaranteed to be end-to-end encrypted from now on.": return - email = snapshot.text - public_key = None - display_name = None - - if snapshot.get("file"): - public_key, email_from_uid, display_name = import_key_from_attachment(snapshot.file) - email = email if email else email_from_uid - try: - email = validate_email(email, allow_display_name=True).ascii_email - if not display_name: - display_name = validate_email(email, allow_display_name=True).display_name + public_key, email, display_name = handle_command(snapshot.text, snapshot.get("file")) + except KeyNotFound: + return snapshot.chat.send_text(f"Sorry, I could not find a key for {snapshot.text}.") except EmailNotValidError: - return snapshot.chat.send_text(HELP_MSG + f"\n\n{email} is not an email address :/") - - if not public_key: - public_key = request_key_by_email(email) - if not public_key: - return snapshot.chat.send_text(f"Sorry, I could not find a key for {email}.") + return snapshot.chat.send_text(HELP_MSG + f"\n\n{snapshot.text} is not an email address :/") vcard = construct_vcard(email, public_key, display_name) vcard_path = f"/tmp/{email}.vcf" @@ -54,14 +42,40 @@ def command(event): return snapshot.chat.send_file(vcard_path) -def request_key_by_email(email: str) -> str: - domain = email.split("@")[1] - public_key = request_from_wkd(email, domain) +def handle_command(text: str, file_path: str = None, wkd_timeout: int = WKD_TIMEOUT) -> (str, str, str): + """Handle the user's command; this is a separate function so it can be tested more easily. + + :param text: the text of the user's message + :param file_path: the path to the message's attachment, if there is one + :param wkd_timeout: the timeout for WKD tests, can be set here for test purposes + :return: a tuple with public key, email, and display_name + """ + public_key = None + try: + email = validate_email(text, allow_display_name=True).ascii_email + display_name = validate_email(text, allow_display_name=True).display_name + except EmailNotValidError: + display_name = text + email = None + + if file_path: + public_key, email_from_uid, display_name_from_uid = import_key_from_attachment(file_path) + email = email if email else email_from_uid + display_name = display_name if display_name else display_name_from_uid + if not public_key: - public_key = request_from_wkd(email, f"openpgpkey.{domain}") + if not email: + raise EmailNotValidError + domain = email.split("@")[1] + public_key = request_from_wkd(email, domain, timeout=wkd_timeout) if not public_key: - public_key = request_from_koo(email) - return public_key + public_key = request_from_wkd(email, f"openpgpkey.{domain}", timeout=wkd_timeout) + if not public_key: + public_key = request_from_koo(email) + if not public_key: + raise KeyNotFound + + return public_key, email, (display_name if display_name else "") @hooks.on(events.RawEvent) diff --git a/src/keyserver_bot/wkd.py b/src/keyserver_bot/wkd.py index 6b707c9..5593c72 100644 --- a/src/keyserver_bot/wkd.py +++ b/src/keyserver_bot/wkd.py @@ -3,7 +3,10 @@ import requests import base64 -def request_from_wkd(email: str, server: str) -> str: +WKD_TIMEOUT = 10 + + +def request_from_wkd(email: str, server: str, timeout=WKD_TIMEOUT) -> str: """Request the public key from WKD by email :param email: an RFC 5322 email address @@ -14,7 +17,7 @@ def request_from_wkd(email: str, server: str) -> str: wkd_hash = wkdhash.userid_to_wkd_hash(email) wkd_url = f"https://{server}/.well-known/openpgpkey/{domain}/hu/{wkd_hash}?l={localpart}" try: - r = requests.get(wkd_url, timeout=10) + r = requests.get(wkd_url, timeout=timeout) except requests.exceptions.SSLError: print(f"SSL Error when querying {wkd_url}") return "" diff --git a/tests/assets/vcardlogo.png b/tests/assets/vcardlogo.png new file mode 100644 index 0000000000000000000000000000000000000000..17e3fb015443213706c94a62b9e0f1df39468298 GIT binary patch literal 16234 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 literal 0 HcmV?d00001 diff --git a/tests/test_hooks.py b/tests/test_hooks.py index b61de72..5859585 100644 --- a/tests/test_hooks.py +++ b/tests/test_hooks.py @@ -1,9 +1,14 @@ import os import pytest -from keyserver_bot.hooks import request_key_by_email, delete_data +from email_validator import EmailNotValidError +from keyserver_bot.hooks import delete_data, handle_command +from keyserver_bot.errors import KeyNotFound from deltachat_rpc_client.pytestplugin import acfactory +WKD_TIMEOUT = 1 + + def test_delete_data(acfactory): if not os.getenv("CHATMAIL_DOMAIN"): os.environ["CHATMAIL_DOMAIN"] = "nine.testrun.org" @@ -14,8 +19,6 @@ def test_delete_data(acfactory): chat.send_text("hi :)") msg = bot.wait_for_incoming_msg() - msg = msg.get_snapshot().chat.send_text("command not found :P") - user.wait_for_incoming_msg() assert len(bot.get_chatlist()) == 3 delete_data(msg.get_snapshot()) @@ -24,18 +27,67 @@ def test_delete_data(acfactory): @pytest.mark.parametrize( - ("email", "public_key"), + ("text", "file_path", "email", "display_name", "public_key"), [ - ("adsokasd@ingrdsuf.org", ""), - ( + ( # from keys.openpgp.org "missytake@systemli.org", + None, + "missytake@systemli.org", + "", "xjMEXcLIEBYJKwYBBAHaRw8BAQdAmlYU7TEgGL3eq2WXC95tQtZYHjpJOCjb7qq3vJd1lG7NIm1pc3N5dGFrZSA8bWlzc3l0YWtlQHN5c3RlbWxpLm9yZz7CkAQTFggAOAIbAwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgBYhBEX/6kI9pCw7MYVUWQTMZlgyBRjfBQJnDuTLAAoJEATMZlgyBRjfeUUA/0P0E/quL71dn5Zjc4ewsnykT1GODazGmk+xprSwAvEyAPwJy+uJgJz5pSFdmi2lGRrOERmKUu8AdQ/M7dSm6kt3AMKQBBMWCAA4AhsDBQsJCAcCBhUKCQgLAgQWAgMBAh4BAheAFiEERf/qQj2kLDsxhVRZBMxmWDIFGN8FAmcO5FkACgkQBMxmWDIFGN+0EAD+PVALMtR4PDB4aaxpJ5L1p6mGmq1lb8wqZtdAyHK9+7EA/jPU12/e368B6OHknY1YzGxQxyPETcL8hUS26CU6wnUEzRZtaXNzeXRha2VAc3lzdGVtbGkub3JnwpAEExYIADgCGwMFCwkIBwIGFQoJCAsCBBYCAwECHgECF4AWIQRF/+pCPaQsOzGFVFkEzGZYMgUY3wUCZw7kywAKCRAEzGZYMgUY37s7AP4uOSeC9cwDKnPnov7L6Sp0axUNncX+n5sjepkPpwgVIQD/Zt85kzYrodvsx4QdolweWDFrH9DFxTsTSw2GWIIE6Q3CkAQTFggAOAIbAwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgBYhBEX/6kI9pCw7MYVUWQTMZlgyBRjfBQJnDuRZAAoJEATMZlgyBRjf3lkBAPdeXSQY9oPO4wHv+pYE5d6+4ij8plA6tSReaqhneOKtAQCJguCnqcH8A9KKZ97n1gIBFnJ7xhdNTPLPoAbYE1BAB8KWBBMWCAA+FiEERf/qQj2kLDsxhVRZBMxmWDIFGN8FAl3CyBACGwMFCQlmAYAFCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQBMxmWDIFGN9eHAD/SR+CRWWJ5km4pfeU48Y88+6nKA/T6egmav9NIZTjw9cBAIEk6yInsxZj/2Ot9AW8vr+cyuiG9FtZOuWvbNh4oYUJzjMEXcLKyhYJKwYBBAHaRw8BAQdAtUIjrOUmkTbVVkwIXeAkC/s3Z1wrW2/+KIgkQbbi38XCeAQYFggAIAIbIBYhBEX/6kI9pCw7MYVUWQTMZlgyBRjfBQJnDuULAAoJEATMZlgyBRjf19ABALR4jIhWK/5e87V3+xuX9R0MAyBDztZjb8nfXJ3HWK65AQC6S7JybxebS+jHSavTIF0nuaaqBXZx3me1edqwVVBAD8J+BBgWCAAmFiEERf/qQj2kLDsxhVRZBMxmWDIFGN8FAl3CysoCGyAFCQlmAYAACgkQBMxmWDIFGN/IQgEA8WwKDEEtbyIiCr5pLD/eqJ2m1xIsKKP/0sH0ADPMwjEA/jvMjOjbrh5WZuUnf+ddcVB7GStu3SZtenkB/rK1+s0EzjgEXcLIEBIKKwYBBAGXVQEFAQEHQGTy3kLa+rSeHhK35fDN/k46zZFh+LDZQ0a2552FuPJ6AwEIB8J4BBgWCAAgAhsMFiEERf/qQj2kLDsxhVRZBMxmWDIFGN8FAmcO5P8ACgkQBMxmWDIFGN/jJgEA5+ESV8PtiUcwxml7GpTGwbIv8GoDA1YlPcUeku/S20QA/iVvzlf8Oj5Wvhet8VMzU37wWsFJ2n6aAyM2WmOrPVoPwn4EGBYIACYWIQRF/+pCPaQsOzGFVFkEzGZYMgUY3wUCXcLIEAIbDAUJCWYBgAAKCRAEzGZYMgUY3zZnAP9JMp+PI+1H4x3D62Qg4udjL6zypFKTrcrUnyWNcoWzoQD/W3uJ7M2sbOdAdHcj246koYP32BrR/7Wtc0/7yJPfqQk==oePr", ), - ( + ( # from protonmail's WKD "sdjif2mlij@protonmail.com", + None, + "sdjif2mlij@protonmail.com", + "", "xjMEZ+/HahYJKwYBBAHaRw8BAQdAzRZOcQEkaPGwUYBVHsKTVX+4nP05ZwLQ3wYUod1IQyjNNXNkamlmMm1saWpAcHJvdG9ubWFpbC5jb20gPHNkamlmMm1saWpAcHJvdG9ubWFpbC5jb20+wsARBBMWCgCDBYJn78dqAwsJBwmQ9od3MCAJzKNFFAAAAAAAHAAgc2FsdEBub3RhdGlvbnMub3BlbnBncGpzLm9yZ3e7fGtn2OkXwNFoBOAEgwoRygRlwr41fcO4LsJ/1HcyAxUKCAQWAAIBAhkBApsDAh4BFiEERU5l1enHSVCTOUnc9od3MCAJzKMAAAuPAQCQ0PFlbngJRtJ36yloWfHwTY168TDlMGeL+nAxJ1GUQAEA31H+NukIwEzCwQWh7aoFeY9eJHXVoaeh0swfvJA5yQ/CwB4EEBYIAJAFgmfvx6cFgwDtTgAJENgGwa9ZeOjHNRQAAAAAABwAEHNhbHRAbm90YXRpb25zLm9wZW5wZ3Bqcy5vcmfU5CAfgrGEZMQfk/lTyXT2LBxvcGVucGdwLWNhQHByb3Rvbi5tZSA8b3BlbnBncC1jYUBwcm90b24ubWU+FiEECoZS/l1TOGBXiZ/p2AbBr1l46McAAJCrAP4tMWMSLKAykI/JnR+94aE2+E4dCTslkW/svb1o7zGLbwEAg/fo6sOxa3wHr9xnCbUUrxZ0Dnh/21zJ3atL6zMpYQHOOARn78dqEgorBgEEAZdVAQUBAQdATm5zMhEn2/S+UB3qKfeV424+iyvIr2p3FEzxuzUQKQEDAQgHwr4EGBYKAHAFgmfvx2oJkPaHdzAgCcyjRRQAAAAAABwAIHNhbHRAbm90YXRpb25zLm9wZW5wZ3Bqcy5vcmf94HNvbCT5aX/ifcaDK2bIjzmS69JdQo1AcOt3X8AwFQKbDBYhBEVOZdXpx0lQkzlJ3PaHdzAgCcyjAACVUgEA8Agw7R9+a72WsKOq691JIYPGDfNYCKNHFllsQAfHHHYA/3x+rG9YQTbdAuuFi1ciGvgo9DAWVv8Bt7ibBqEVAuQN", ), + ( # RSA3072, exported from Thunderbird + "", + "tests/assets/iCloud Debug_iclouddbg@nine.testrun.org-0x29E2254EF6BE9F1A-pub.asc", + "iclouddbg@nine.testrun.org", + "iCloud Debug", + "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", + ), + ( # ed25519, exported from Thunderbird + "", + "tests/assets/missytake-pub.asc", + "missytake@systemli.org", + "", + "mDMEXcLIEBYJKwYBBAHaRw8BAQdAmlYU7TEgGL3eq2WXC95tQtZYHjpJOCjb7qq3vJd1lG60Fm1pc3N5dGFrZUBzeXN0ZW1saS5vcmeIlgQTFggAPhYhBEX/6kI9pCw7MYVUWQTMZlgyBRjfBQJdwsgQAhsDBQkJZgGABQsJCAcCBhUKCQgLAgQWAgMBAh4BAheAAAoJEATMZlgyBRjfXhwA/0kfgkVlieZJuKX3lOPGPPPupygP0+noJmr/TSGU48PXAQCBJOsiJ7MWY/9jrfQFvL6/nMrohvRbWTrlr2zYeKGFCYiQBBMWCAA4AhsDBQsJCAcCBhUKCQgLAgQWAgMBAh4BAheAFiEERf/qQj2kLDsxhVRZBMxmWDIFGN8FAmcO5FkACgkQBMxmWDIFGN/eWQEA915dJBj2g87jAe/6lgTl3r7iKPymUDq1JF5qqGd44q0BAImC4KepwfwD0opn3ufWAgEWcnvGF01M8s+gBtgTUEAHiJAEExYIADgCGwMFCwkIBwIGFQoJCAsCBBYCAwECHgECF4AWIQRF/+pCPaQsOzGFVFkEzGZYMgUY3wUCZw7kywAKCRAEzGZYMgUY37s7AP4uOSeC9cwDKnPnov7L6Sp0axUNncX+n5sjepkPpwgVIQD/Zt85kzYrodvsx4QdolweWDFrH9DFxTsTSw2GWIIE6Q20Im1pc3N5dGFrZSA8bWlzc3l0YWtlQHN5c3RlbWxpLm9yZz6IkAQTFggAOAIbAwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgBYhBEX/6kI9pCw7MYVUWQTMZlgyBRjfBQJnDuRZAAoJEATMZlgyBRjftBAA/j1QCzLUeDwweGmsaSeS9aephpqtZW/MKmbXQMhyvfuxAP4z1Ndv3t+vAejh5J2NWMxsUMcjxE3C/IVEtuglOsJ1BIiQBBMWCAA4AhsDBQsJCAcCBhUKCQgLAgQWAgMBAh4BAheAFiEERf/qQj2kLDsxhVRZBMxmWDIFGN8FAmcO5MsACgkQBMxmWDIFGN95RQD/Q/QT+q4vvV2flmNzh7CyfKRPUY4NrMaaT7GmtLAC8TIA/AnL64mAnPmlIV2aLaUZGs4RGYpS7wB1D8zt1KbqS3cAuDgEXcLIEBIKKwYBBAGXVQEFAQEHQGTy3kLa+rSeHhK35fDN/k46zZFh+LDZQ0a2552FuPJ6AwEIB4h4BBgWCAAgAhsMFiEERf/qQj2kLDsxhVRZBMxmWDIFGN8FAmcO5P8ACgkQBMxmWDIFGN/jJgEA5+ESV8PtiUcwxml7GpTGwbIv8GoDA1YlPcUeku/S20QA/iVvzlf8Oj5Wvhet8VMzU37wWsFJ2n6aAyM2WmOrPVoPuDMEXcLKyhYJKwYBBAHaRw8BAQdAtUIjrOUmkTbVVkwIXeAkC/s3Z1wrW2/+KIgkQbbi38WIeAQYFggAIAIbIBYhBEX/6kI9pCw7MYVUWQTMZlgyBRjfBQJnDuULAAoJEATMZlgyBRjf19ABALR4jIhWK/5e87V3+xuX9R0MAyBDztZjb8nfXJ3HWK65AQC6S7JybxebS+jHSavTIF0nuaaqBXZx3me1edqwVVBADw==", + ), + ( # ed25519, generated in Delta Chat + "asdf", + "tests/assets/n21bbif8b@nine.testrun.org-(0xE689A2471F853914)-public.asc", + "n21bbif8b@nine.testrun.org", + "asdf", + "xjMEZ/iePRYJKwYBBAHaRw8BAQdA5aVYHFoa20U6SWubzIUi24xgBeFEf+QqhGuxuShyFULNHDxuMjFiYmlmOGJAbmluZS50ZXN0cnVuLm9yZz7CjQQQFggANQIZAQUCZ/iePQIbAwQLCQgHBhUICQoLAgMWAgEBJxYhBDThD8TfA/wGMPw8AeaJokcfhTkUAAoJEOaJokcfhTkUWhUBANZqS1OH7PlwXON6cmvoUvY938IrWRcdOQNvoeAHQkksAP9oK/uUnG6nyzYYX7heaV8CnY8U7Z/LkgS6VpYvClD8Dc44BGf4nj0SCisGAQQBl1UBBQEBB0BgBB0O+YD0RgGvE0KqBtJtxPrYcwUUwwtbGWrMHc11VwMBCAfCeAQYFggAIAUCZ/iePQIbDBYhBDThD8TfA/wGMPw8AeaJokcfhTkUAAoJEOaJokcfhTkU9eIBAP9DXFU4b3bJ1ml8rt45s6FixaGUyIK22KIe+JmH1Mn/AP0fdYczGhtX017RWHM1DfI2Tjx6C3ANKhQqPqDHpbXmBw==", + ), + ( # ed25519, generated in Delta Chat + "asdf ", + "tests/assets/n21bbif8b@nine.testrun.org-(0xE689A2471F853914)-public.asc", + "n21bbif8b@nine.testrun.org", + "asdf", + "xjMEZ/iePRYJKwYBBAHaRw8BAQdA5aVYHFoa20U6SWubzIUi24xgBeFEf+QqhGuxuShyFULNHDxuMjFiYmlmOGJAbmluZS50ZXN0cnVuLm9yZz7CjQQQFggANQIZAQUCZ/iePQIbAwQLCQgHBhUICQoLAgMWAgEBJxYhBDThD8TfA/wGMPw8AeaJokcfhTkUAAoJEOaJokcfhTkUWhUBANZqS1OH7PlwXON6cmvoUvY938IrWRcdOQNvoeAHQkksAP9oK/uUnG6nyzYYX7heaV8CnY8U7Z/LkgS6VpYvClD8Dc44BGf4nj0SCisGAQQBl1UBBQEBB0BgBB0O+YD0RgGvE0KqBtJtxPrYcwUUwwtbGWrMHc11VwMBCAfCeAQYFggAIAUCZ/iePQIbDBYhBDThD8TfA/wGMPw8AeaJokcfhTkUAAoJEOaJokcfhTkU9eIBAP9DXFU4b3bJ1ml8rt45s6FixaGUyIK22KIe+JmH1Mn/AP0fdYczGhtX017RWHM1DfI2Tjx6C3ANKhQqPqDHpbXmBw==", + ), ], ) -def test_request_by_email(email, public_key): - assert public_key == request_key_by_email(email) +def test_handle_command(text, file_path, email, display_name, public_key): + assert (public_key, email, display_name) == handle_command(text, file_path) + + +@pytest.mark.parametrize( + ("text", "file_path", "error"), + [ + ("adsokasd@systemli.org", None, KeyNotFound), + ("", "tests/test_hooks.py", EmailNotValidError), + ("", "tests/assets/vcardlogo.png", EmailNotValidError), + ("asdf@.org", None, EmailNotValidError), + ("asdf", None, EmailNotValidError), + ("adsokasd@ingrdsuf.org", None, EmailNotValidError), + ], +) +def test_handle_command_errors(text, file_path, error): + with pytest.raises(error): + handle_command(text, file_path, wkd_timeout=WKD_TIMEOUT) diff --git a/tests/test_wkd.py b/tests/test_wkd.py index 73f90a2..980a8a5 100644 --- a/tests/test_wkd.py +++ b/tests/test_wkd.py @@ -2,6 +2,9 @@ import pytest import keyserver_bot.wkd +WKD_TIMEOUT = 2 + + @pytest.mark.parametrize( ("email", "server", "public_key"), [ @@ -16,4 +19,4 @@ import keyserver_bot.wkd ], ) def test_request_by_email(email, server, public_key): - assert public_key == keyserver_bot.wkd.request_from_wkd(email, server) + assert public_key == keyserver_bot.wkd.request_from_wkd(email, server, timeout=WKD_TIMEOUT)