From 94ec3af9e32884e46a2d8cdb5b73b002b796d240 Mon Sep 17 00:00:00 2001 From: missytake Date: Fri, 11 Apr 2025 08:05:28 +0200 Subject: [PATCH] chore: refactor attachment importing out of hooks.py --- src/keyserver_bot/attachment.py | 27 ++++++++++++ src/keyserver_bot/hooks.py | 26 +----------- tests/test_attachment.py | 38 +++++++++++++++++ tests/test_hooks.py | 75 ++++----------------------------- 4 files changed, 75 insertions(+), 91 deletions(-) create mode 100644 src/keyserver_bot/attachment.py create mode 100644 tests/test_attachment.py diff --git a/src/keyserver_bot/attachment.py b/src/keyserver_bot/attachment.py new file mode 100644 index 0000000..f8edc6a --- /dev/null +++ b/src/keyserver_bot/attachment.py @@ -0,0 +1,27 @@ +import pgpy +from email_validator import validate_email + + +def import_key_from_attachment(file_path: str) -> (str, str, str): + """Import a PGP public key from an attachment. + + :param file_path: the path to the attachment + :return: a tuple with the public key, the email address, and a displayname + """ + try: + key = pgpy.PGPKey.from_file(file_path)[0] + except ValueError: + return "", "", "" + except AttributeError: + return "", "", "" + except pgpy.errors.PGPError: + return "", "", "" + ascii_key = str(key) + keyparts = [] + for line in ascii_key.splitlines(): + if line != "" and not ": " in line and not line.startswith("=") and not line.startswith("-----"): + keyparts.append(line) + 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 diff --git a/src/keyserver_bot/hooks.py b/src/keyserver_bot/hooks.py index f8d1d02..0ce04e0 100644 --- a/src/keyserver_bot/hooks.py +++ b/src/keyserver_bot/hooks.py @@ -1,10 +1,9 @@ -#!/usr/bin/env python3 -import pgpy 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.koo import request_from_koo +from keyserver_bot.attachment import import_key_from_attachment from keyserver_bot.vcard import construct_vcard, save_vcard hooks = events.HookCollection() @@ -52,29 +51,6 @@ def command(event): return snapshot.chat.send_file(vcard_path) -def import_key_from_attachment(file_path: str) -> (str, str, str): - """Import a PGP public key from an attachment. - - :param file_path: the path to the attachment - :return: a tuple with the public key, the email address, and a displayname - """ - try: - key = pgpy.PGPKey.from_file(file_path)[0] - except AttributeError: - return "", "" - except pgpy.errors.PGPError: - return "", "" - ascii_key = str(key) - keyparts = [] - for line in ascii_key.splitlines(): - if line != "" and not ": " in line and not line.startswith("=") and not line.startswith("-----"): - keyparts.append(line) - 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 - - def request_key_by_email(email) -> str: domain = email.split("@")[1] public_key = request_from_wkd(email, domain) diff --git a/tests/test_attachment.py b/tests/test_attachment.py new file mode 100644 index 0000000..deb430c --- /dev/null +++ b/tests/test_attachment.py @@ -0,0 +1,38 @@ +import pytest +from keyserver_bot.attachment import import_key_from_attachment + + +@pytest.mark.parametrize( + ("file_path", "result"), + [ + ( + "tests/assets/missytake-pub.asc", + ( + "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==", + "missytake@systemli.org", + "missytake", + ), + ), + ("tests/test_hooks.py", ("", "", "")), + ( + "tests/assets/iCloud Debug_iclouddbg@nine.testrun.org-0x29E2254EF6BE9F1A-pub.asc", + ( + "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", + "iclouddbg@nine.testrun.org", + "iCloud Debug", + ), + ), + ( + "tests/assets/n21bbif8b@nine.testrun.org-(0xE689A2471F853914)-public.asc", + ( + "xjMEZ/iePRYJKwYBBAHaRw8BAQdA5aVYHFoa20U6SWubzIUi24xgBeFEf+QqhGuxuShyFULNHDxuMjFiYmlmOGJAbmluZS50ZXN0cnVuLm9yZz7CjQQQFggANQIZAQUCZ/iePQIbAwQLCQgHBhUICQoLAgMWAgEBJxYhBDThD8TfA/wGMPw8AeaJokcfhTkUAAoJEOaJokcfhTkUWhUBANZqS1OH7PlwXON6cmvoUvY938IrWRcdOQNvoeAHQkksAP9oK/uUnG6nyzYYX7heaV8CnY8U7Z/LkgS6VpYvClD8Dc44BGf4nj0SCisGAQQBl1UBBQEBB0BgBB0O+YD0RgGvE0KqBtJtxPrYcwUUwwtbGWrMHc11VwMBCAfCeAQYFggAIAUCZ/iePQIbDBYhBDThD8TfA/wGMPw8AeaJokcfhTkUAAoJEOaJokcfhTkU9eIBAP9DXFU4b3bJ1ml8rt45s6FixaGUyIK22KIe+JmH1Mn/AP0fdYczGhtX017RWHM1DfI2Tjx6C3ANKhQqPqDHpbXmBw==", + "n21bbif8b@nine.testrun.org", + "", + ), + ), + ], +) +def test_import_key_from_attachment(file_path, result): + imported = import_key_from_attachment(file_path) + assert result[0] == imported[0] + assert result[1] == imported[1] diff --git a/tests/test_hooks.py b/tests/test_hooks.py index 815fc0c..b61de72 100644 --- a/tests/test_hooks.py +++ b/tests/test_hooks.py @@ -1,29 +1,9 @@ import os -from email_validator import validate_email, EmailNotValidError - import pytest -from keyserver_bot.hooks import request_key_by_email, delete_data, import_key_from_attachment +from keyserver_bot.hooks import request_key_by_email, delete_data from deltachat_rpc_client.pytestplugin import acfactory -@pytest.mark.parametrize( - ("email", "public_key"), - [ - ( - "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", - ), - ("adsokasd@ingrdsuf.org", ""), - ( - "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", - ), - ], -) -def test_request_by_email(email, public_key): - assert public_key == request_key_by_email(email) - - def test_delete_data(acfactory): if not os.getenv("CHATMAIL_DOMAIN"): os.environ["CHATMAIL_DOMAIN"] = "nine.testrun.org" @@ -44,55 +24,18 @@ def test_delete_data(acfactory): @pytest.mark.parametrize( - ("email", "valid"), - [ - ("test", False), - ("test@example", False), - ("@example", False), - ("@example.org", False), - ("test+asdf@example.org", True), - ("test@example.org", True), - ("ätsch@ツ.life", True), - ], -) -def test_validate_email(email, valid): - try: - validate_email(email, check_deliverability=False) - except EmailNotValidError: - assert not valid - - -@pytest.mark.parametrize( - ("file_path", "result"), + ("email", "public_key"), [ + ("adsokasd@ingrdsuf.org", ""), ( - "tests/assets/missytake-pub.asc", - ( - "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==", - "missytake@systemli.org", - "missytake", - ), - ), - ("tests/test_hooks.py", ("", "")), - ( - "tests/assets/iCloud Debug_iclouddbg@nine.testrun.org-0x29E2254EF6BE9F1A-pub.asc", - ( - "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", - "iclouddbg@nine.testrun.org", - "iCloud Debug", - ), + "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", ), ( - "tests/assets/n21bbif8b@nine.testrun.org-(0xE689A2471F853914)-public.asc", - ( - "xjMEZ/iePRYJKwYBBAHaRw8BAQdA5aVYHFoa20U6SWubzIUi24xgBeFEf+QqhGuxuShyFULNHDxuMjFiYmlmOGJAbmluZS50ZXN0cnVuLm9yZz7CjQQQFggANQIZAQUCZ/iePQIbAwQLCQgHBhUICQoLAgMWAgEBJxYhBDThD8TfA/wGMPw8AeaJokcfhTkUAAoJEOaJokcfhTkUWhUBANZqS1OH7PlwXON6cmvoUvY938IrWRcdOQNvoeAHQkksAP9oK/uUnG6nyzYYX7heaV8CnY8U7Z/LkgS6VpYvClD8Dc44BGf4nj0SCisGAQQBl1UBBQEBB0BgBB0O+YD0RgGvE0KqBtJtxPrYcwUUwwtbGWrMHc11VwMBCAfCeAQYFggAIAUCZ/iePQIbDBYhBDThD8TfA/wGMPw8AeaJokcfhTkUAAoJEOaJokcfhTkU9eIBAP9DXFU4b3bJ1ml8rt45s6FixaGUyIK22KIe+JmH1Mn/AP0fdYczGhtX017RWHM1DfI2Tjx6C3ANKhQqPqDHpbXmBw==", - "n21bbif8b@nine.testrun.org", - "", - ), + "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", ), ], ) -def test_import_key_from_attachment(file_path, result): - imported = import_key_from_attachment(file_path) - assert result[0] == imported[0] - assert result[1] == imported[1] +def test_request_by_email(email, public_key): + assert public_key == request_key_by_email(email)