mirror of
https://github.com/profanity-im/profanity.git
synced 2024-10-27 20:30:13 -04:00
Automatically starts OMEMO if one identity is trusted
This commit is contained in:
parent
25eb138d0b
commit
0bc660400b
@ -2150,17 +2150,67 @@ cmd_msg(ProfWin *window, const char *const command, gchar **args)
|
|||||||
}
|
}
|
||||||
ui_focus_win((ProfWin*)chatwin);
|
ui_focus_win((ProfWin*)chatwin);
|
||||||
|
|
||||||
|
#ifdef HAVE_OMEMO
|
||||||
|
#ifndef HAVE_LIBOTR
|
||||||
|
if (omemo_is_trusted_jid(barejid)) {
|
||||||
|
omemo_start_session(barejid);
|
||||||
|
chatwin->is_omemo = TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
if (msg) {
|
if (msg) {
|
||||||
cl_ev_send_msg(chatwin, msg, NULL);
|
cl_ev_send_msg(chatwin, msg, NULL);
|
||||||
} else {
|
|
||||||
#ifdef HAVE_LIBOTR
|
|
||||||
if (otr_is_secure(barejid)) {
|
|
||||||
chatwin_otr_secured(chatwin, otr_is_trusted(barejid));
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_OMEMO
|
||||||
|
#ifdef HAVE_LIBOTR
|
||||||
|
if (omemo_is_trusted_jid(barejid) && otr_is_secure(barejid)) {
|
||||||
|
win_println(window, THEME_DEFAULT, '!', "Chat could be either OMEMO or OTR encrypted. Use '/omemo start %s' or '/otr start %s' to start a session.", usr, usr);
|
||||||
|
return TRUE;
|
||||||
|
} else if (omemo_is_trusted_jid(barejid)) {
|
||||||
|
omemo_start_session(barejid);
|
||||||
|
chatwin->is_omemo = TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (msg) {
|
||||||
|
cl_ev_send_msg(chatwin, msg, NULL);
|
||||||
|
} else {
|
||||||
|
if (otr_is_secure(barejid)) {
|
||||||
|
chatwin_otr_secured(chatwin, otr_is_trusted(barejid));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef HAVE_OMEMO
|
||||||
|
#ifdef HAVE_LIBOTR
|
||||||
|
if (msg) {
|
||||||
|
cl_ev_send_msg(chatwin, msg, NULL);
|
||||||
|
} else {
|
||||||
|
if (otr_is_secure(barejid)) {
|
||||||
|
chatwin_otr_secured(chatwin, otr_is_trusted(barejid));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef HAVE_OMEMO
|
||||||
|
#ifndef HAVE_LIBOTR
|
||||||
|
if (msg) {
|
||||||
|
cl_ev_send_msg(chatwin, msg, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -909,6 +909,21 @@ omemo_known_device_identities(const char *const jid)
|
|||||||
return g_hash_table_get_keys(known_identities);
|
return g_hash_table_get_keys(known_identities);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
gboolean
|
||||||
|
omemo_is_trusted_jid(const char *const jid)
|
||||||
|
{
|
||||||
|
GHashTable *trusted = g_hash_table_lookup(omemo_ctx.identity_key_store.trusted, jid);
|
||||||
|
if (!trusted) {
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (g_hash_table_size(trusted) > 0) {
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
gboolean
|
gboolean
|
||||||
omemo_is_trusted_identity(const char *const jid, const char *const fingerprint)
|
omemo_is_trusted_identity(const char *const jid, const char *const fingerprint)
|
||||||
{
|
{
|
||||||
@ -1262,6 +1277,13 @@ _load_trust(void)
|
|||||||
if (groups) {
|
if (groups) {
|
||||||
int i;
|
int i;
|
||||||
for (i = 0; groups[i] != NULL; i++) {
|
for (i = 0; groups[i] != NULL; i++) {
|
||||||
|
GHashTable *trusted;
|
||||||
|
|
||||||
|
trusted = g_hash_table_lookup(omemo_ctx.identity_key_store.trusted, groups[i]);
|
||||||
|
if (!trusted) {
|
||||||
|
trusted = g_hash_table_new_full(g_direct_hash, g_direct_equal, NULL, (GDestroyNotify)signal_buffer_free);
|
||||||
|
g_hash_table_insert(omemo_ctx.identity_key_store.trusted, strdup(groups[i]), trusted);
|
||||||
|
}
|
||||||
|
|
||||||
keys = g_key_file_get_keys(omemo_ctx.trust_keyfile, groups[i], NULL, NULL);
|
keys = g_key_file_get_keys(omemo_ctx.trust_keyfile, groups[i], NULL, NULL);
|
||||||
int j;
|
int j;
|
||||||
@ -1273,11 +1295,6 @@ _load_trust(void)
|
|||||||
signal_buffer *buffer = signal_buffer_create(key, key_len);
|
signal_buffer *buffer = signal_buffer_create(key, key_len);
|
||||||
g_free(key);
|
g_free(key);
|
||||||
uint32_t device_id = strtoul(keys[j], NULL, 10);
|
uint32_t device_id = strtoul(keys[j], NULL, 10);
|
||||||
GHashTable *trusted = g_hash_table_lookup(omemo_ctx.identity_key_store.trusted, groups[i]);
|
|
||||||
if (!trusted) {
|
|
||||||
trusted = g_hash_table_new_full(g_direct_hash, g_direct_equal, NULL, (GDestroyNotify)signal_buffer_free);
|
|
||||||
g_hash_table_insert(omemo_ctx.identity_key_store.trusted, strdup(groups[i]), trusted);
|
|
||||||
}
|
|
||||||
g_hash_table_insert(trusted, GINT_TO_POINTER(device_id), buffer);
|
g_hash_table_insert(trusted, GINT_TO_POINTER(device_id), buffer);
|
||||||
}
|
}
|
||||||
g_strfreev(keys);
|
g_strfreev(keys);
|
||||||
@ -1299,7 +1316,7 @@ _load_sessions(void)
|
|||||||
device_store = g_hash_table_lookup(omemo_ctx.session_store, groups[i]);
|
device_store = g_hash_table_lookup(omemo_ctx.session_store, groups[i]);
|
||||||
if (!device_store) {
|
if (!device_store) {
|
||||||
device_store = g_hash_table_new_full(g_direct_hash, g_direct_equal, NULL, (GDestroyNotify)signal_buffer_free);
|
device_store = g_hash_table_new_full(g_direct_hash, g_direct_equal, NULL, (GDestroyNotify)signal_buffer_free);
|
||||||
g_hash_table_insert(omemo_ctx.session_store, groups[i], device_store);
|
g_hash_table_insert(omemo_ctx.session_store, strdup(groups[i]), device_store);
|
||||||
}
|
}
|
||||||
|
|
||||||
char **keys = g_key_file_get_keys(omemo_ctx.sessions_keyfile, groups[i], NULL, NULL);
|
char **keys = g_key_file_get_keys(omemo_ctx.sessions_keyfile, groups[i], NULL, NULL);
|
||||||
|
@ -40,6 +40,7 @@ char *omemo_own_fingerprint(gboolean formatted);
|
|||||||
void omemo_trust(const char *const jid, const char *const fingerprint);
|
void omemo_trust(const char *const jid, const char *const fingerprint);
|
||||||
void omemo_untrust(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);
|
GList *omemo_known_device_identities(const char *const jid);
|
||||||
|
gboolean omemo_is_trusted_jid(const char *const jid);
|
||||||
gboolean omemo_is_trusted_identity(const char *const jid, const char *const fingerprint);
|
gboolean omemo_is_trusted_identity(const char *const jid, const char *const fingerprint);
|
||||||
char *omemo_fingerprint_autocomplete(const char *const search_str, gboolean previous);
|
char *omemo_fingerprint_autocomplete(const char *const search_str, gboolean previous);
|
||||||
void omemo_fingerprint_autocomplete_reset(void);
|
void omemo_fingerprint_autocomplete_reset(void);
|
||||||
|
@ -21,6 +21,12 @@ omemo_format_fingerprint(const char *const fingerprint)
|
|||||||
|
|
||||||
void omemo_generate_crypto_materials(ProfAccount *account) {}
|
void omemo_generate_crypto_materials(ProfAccount *account) {}
|
||||||
|
|
||||||
|
gboolean
|
||||||
|
omemo_is_trusted_jid(const char *const jid)
|
||||||
|
{
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
gboolean
|
gboolean
|
||||||
omemo_is_trusted_identity(const char *const jid, const char *const fingerprint)
|
omemo_is_trusted_identity(const char *const jid, const char *const fingerprint)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user