1
0
mirror of https://github.com/profanity-im/profanity.git synced 2024-11-03 19:37:16 -05:00

Add fingerprint autocompletion

This commit is contained in:
Paul Fariello 2019-03-25 19:07:36 +01:40
parent 3d8f47a724
commit 678bff9169
3 changed files with 49 additions and 1 deletions

View File

@ -57,6 +57,10 @@
#include "pgp/gpg.h"
#endif
#ifdef HAVE_OMEMO
#include "omemo/omemo.h"
#endif
static char* _sub_autocomplete(ProfWin *window, const char *const input, gboolean previous);
static char* _notify_autocomplete(ProfWin *window, const char *const input, gboolean previous);
static char* _theme_autocomplete(ProfWin *window, const char *const input, gboolean previous);
@ -999,6 +1003,9 @@ cmd_ac_reset(ProfWin *window)
presence_reset_sub_request_search();
#ifdef HAVE_LIBGPGME
p_gpg_autocomplete_key_reset();
#endif
#ifdef HAVE_OMEMO
omemo_fingerprint_autocomplete_reset();
#endif
autocomplete_reset(help_ac);
autocomplete_reset(help_commands_ac);
@ -2158,6 +2165,25 @@ _omemo_autocomplete(ProfWin *window, const char *const input, gboolean previous)
return found;
}
#ifdef HAVE_OMEMO
if (window->type == WIN_CHAT) {
found = autocomplete_param_with_func(input, "/omemo trust", omemo_fingerprint_autocomplete, previous);
if (found) {
return found;
}
} else {
found = autocomplete_param_with_func(input, "/omemo trust", roster_contact_autocomplete, previous);
if (found) {
return found;
}
found = autocomplete_param_no_with_func(input, "/omemo trust", 4, omemo_fingerprint_autocomplete, previous);
if (found) {
return found;
}
}
#endif
found = autocomplete_param_with_ac(input, "/omemo log", omemo_log_ac, TRUE, previous);
if (found) {
return found;

View File

@ -63,6 +63,7 @@ struct omemo_context_t {
GString *sessions_filename;
GKeyFile *sessions_keyfile;
GHashTable *known_devices;
Autocomplete fingerprint_ac;
};
static omemo_context omemo_ctx;
@ -163,6 +164,8 @@ omemo_init(void)
omemo_ctx.device_list = g_hash_table_new_full(g_str_hash, g_str_equal, free, (GDestroyNotify)g_list_free);
omemo_ctx.device_list_handler = g_hash_table_new_full(g_str_hash, g_str_equal, free, NULL);
omemo_ctx.known_devices = g_hash_table_new_full(g_str_hash, g_str_equal, free, (GDestroyNotify)g_hash_table_free);
omemo_ctx.fingerprint_ac = autocomplete_new();
}
void
@ -1114,6 +1117,18 @@ omemo_key_free(omemo_key_t *key)
free(key);
}
char*
omemo_fingerprint_autocomplete(const char *const search_str, gboolean previous)
{
return autocomplete_complete(omemo_ctx.fingerprint_ac, search_str, FALSE, previous);
}
void
omemo_fingerprint_autocomplete_reset(void)
{
autocomplete_reset(omemo_ctx.fingerprint_ac);
}
static void
load_identity(void)
{
@ -1203,7 +1218,12 @@ cache_device_identity(const char *const jid, uint32_t device_id, ec_public_key *
char *fingerprint = omemo_fingerprint(identity, FALSE);
log_info("OMEMO: cache identity for %s:%d: %s", jid, device_id, fingerprint);
g_hash_table_insert(known_identities, fingerprint, GINT_TO_POINTER(device_id));
g_hash_table_insert(known_identities, strdup(fingerprint), GINT_TO_POINTER(device_id));
char *formatted_fingerprint = omemo_format_fingerprint(fingerprint);
autocomplete_add(omemo_ctx.fingerprint_ac, formatted_fingerprint);
free(formatted_fingerprint);
free(fingerprint);
}
static void

View File

@ -38,6 +38,8 @@ void omemo_trust(const char *const jid, const char *const fingerprint);
void omemo_untrust(const char *const jid, const char *const fingerprint);
GList *omemo_known_device_identities(const char *const jid);
gboolean omemo_is_trusted_identity(const char *const jid, const char *const fingerprint);
char *omemo_fingerprint_autocomplete(const char *const search_str, gboolean previous);
void omemo_fingerprint_autocomplete_reset(void);
void omemo_start_session(const char *const barejid);
void omemo_start_muc_sessions(const char *const roomjid);