diff --git a/src/keyserver_bot/hooks.py b/src/keyserver_bot/hooks.py index 93f2ed0..4af5974 100644 --- a/src/keyserver_bot/hooks.py +++ b/src/keyserver_bot/hooks.py @@ -1,4 +1,6 @@ #!/usr/bin/env python3 +import re + from deltachat_rpc_client import events, run_bot_cli, EventType, Message from keyserver_bot.wkd import request_from_wkd @@ -7,20 +9,22 @@ from keyserver_bot.vcard import construct_vcard, save_vcard hooks = events.HookCollection() - -@hooks.on(events.RawEvent) -def log_event(event): - print(event) - if event.kind == EventType.MSG_DELIVERED or event.kind == EventType.MSG_FAILED: - msg = Message(event.account, event.msg_id).get_snapshot() - delete_data(msg) +HELP_MSG = "If you send me an email address, "\ + "I will fetch it's public PGP key "\ + "(from WKD and keys.openpgp.org) "\ + "and send you a contact you can encrypt to." @hooks.on(events.NewMessage) -def echo(event): +def command(event): snapshot = event.message_snapshot + email = snapshot.text - # TODO: validate email RFC + regex = r'^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$' + if not re.match(regex, email): + snapshot.chat.send_text(HELP_MSG) + return + public_key = request_key_by_email(email) if not public_key: snapshot.chat.send_text("Sorry, I could not find a key for this user.") @@ -32,13 +36,6 @@ def echo(event): snapshot.chat.send_file(vcard_path) -def delete_data(msg): - contacts = msg.chat.get_contacts() - msg.chat.delete() - for member in contacts: - member.delete() - - def request_key_by_email(email) -> str: domain = email.split("@")[1] public_key = request_from_wkd(email, domain) @@ -49,6 +46,21 @@ def request_key_by_email(email) -> str: return public_key +@hooks.on(events.RawEvent) +def cleanup(event): + print(event) + if event.kind == EventType.MSG_DELIVERED or event.kind == EventType.MSG_FAILED: + msg = Message(event.account, event.msg_id).get_snapshot() + delete_data(msg) + + +def delete_data(msg): + contacts = msg.chat.get_contacts() + msg.chat.delete() + for member in contacts: + member.delete() + + def main(): # TODO: print invite link run_bot_cli(hooks)