From 87a8c1a5c0d3c4a4b1134711531086eaf04eaf74 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?poljar=20=28Damir=20Jeli=C4=87=29?= Date: Thu, 17 May 2018 16:33:58 +0200 Subject: [PATCH] encryption: Add completion for device verification. --- main.py | 3 ++- matrix/completion.py | 59 ++++++++++++++++++++++++++++++++++++++++++++ matrix/encryption.py | 2 +- 3 files changed, 62 insertions(+), 2 deletions(-) diff --git a/main.py b/main.py index 5b9b02a..12007ad 100644 --- a/main.py +++ b/main.py @@ -64,7 +64,8 @@ from matrix.bar_items import (init_bar_items, matrix_bar_item_name, from matrix.completion import ( init_completion, matrix_command_completion_cb, matrix_server_command_completion_cb, matrix_debug_completion_cb, - matrix_message_completion_cb, matrix_server_completion_cb) + matrix_message_completion_cb, matrix_server_completion_cb, + matrix_olm_user_completion_cb, matrix_olm_device_completion_cb) from matrix.utils import (key_from_value, server_buffer_prnt, prnt_debug, server_buffer_set_title) diff --git a/matrix/completion.py b/matrix/completion.py index 8212f41..454664b 100644 --- a/matrix/completion.py +++ b/matrix/completion.py @@ -118,6 +118,59 @@ def matrix_message_completion_cb(data, completion_item, buffer, completion): return W.WEECHAT_RC_OK +def server_from_buffer(buffer): + for server in SERVERS.values(): + if buffer in server.buffers.values(): + return server + elif buffer == server.server_buffer: + return server + return None + + +@utf8_decode +def matrix_olm_user_completion_cb(data, completion_item, buffer, completion): + server = server_from_buffer(buffer) + + if not server: + return W.WEECHAT_RC_OK + + olm = server.olm + + for user in olm.device_keys: + W.hook_completion_list_add(completion, user, 0, + W.WEECHAT_LIST_POS_SORT) + + return W.WEECHAT_RC_OK + + +@utf8_decode +def matrix_olm_device_completion_cb(data, completion_item, buffer, completion): + server = server_from_buffer(buffer) + + if not server: + return W.WEECHAT_RC_OK + + olm = server.olm + + args = W.hook_completion_get_string(completion, "args") + + fields = args.split() + + if len(fields) < 2: + return W.WEECHAT_RC_OK + + user = fields[1] + + if user not in olm.device_keys: + return W.WEECHAT_RC_OK + + for device in olm.device_keys[user]: + W.hook_completion_list_add(completion, device.device_id, 0, + W.WEECHAT_LIST_POS_SORT) + + return W.WEECHAT_RC_OK + + def init_completion(): W.hook_completion("matrix_server_commands", "Matrix server completion", "matrix_server_command_completion_cb", "") @@ -133,3 +186,9 @@ def init_completion(): W.hook_completion("matrix_debug_types", "Matrix debugging type completion", "matrix_debug_completion_cb", "") + + W.hook_completion("olm_user_ids", "Matrix olm user id completion", + "matrix_olm_user_completion_cb", "") + + W.hook_completion("olm_devices", "Matrix olm device id completion", + "matrix_olm_device_completion_cb", "") diff --git a/matrix/encryption.py b/matrix/encryption.py index 292689d..9c867b0 100644 --- a/matrix/encryption.py +++ b/matrix/encryption.py @@ -126,7 +126,7 @@ def matrix_hook_olm_command(): ('info all|blacklisted|private|unverified|verified ||' 'blacklist %(device_ids) ||' 'unverify %(user_ids) %(device_ids) ||' - 'verify %(user_ids) %(device_ids)'), + 'verify %(olm_user_ids) %(olm_devices)'), # Function name 'matrix_olm_command_cb', '')