aboutsummaryrefslogtreecommitdiff
path: root/plugins/omemo/src
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/omemo/src')
-rw-r--r--plugins/omemo/src/manager.vala11
-rw-r--r--plugins/omemo/src/stream_module.vala4
-rw-r--r--plugins/omemo/src/trust_manager.vala5
3 files changed, 13 insertions, 7 deletions
diff --git a/plugins/omemo/src/manager.vala b/plugins/omemo/src/manager.vala
index 5bd1e00e..8654a4f5 100644
--- a/plugins/omemo/src/manager.vala
+++ b/plugins/omemo/src/manager.vala
@@ -340,15 +340,20 @@ public class Manager : StreamInteractionModule, Object {
if (flag == null) return false;
if (flag.has_room_feature(conversation.counterpart, Xep.Muc.Feature.NON_ANONYMOUS) && flag.has_room_feature(conversation.counterpart, Xep.Muc.Feature.MEMBERS_ONLY)) {
foreach(Jid jid in stream_interactor.get_module(MucManager.IDENTITY).get_offline_members(conversation.counterpart, conversation.account)) {
- if (!trust_manager.is_known_address(conversation.account, jid.bare_jid)) return false;
+ if (!trust_manager.is_known_address(conversation.account, jid.bare_jid)) {
+ module.request_user_devicelist(stream, jid.bare_jid);
+ return false;
+ }
}
return true;
} else {
return false;
}
- } else {
- return trust_manager.is_known_address(conversation.account, conversation.counterpart.bare_jid);
+ } else if (!trust_manager.is_known_address(conversation.account, conversation.counterpart.bare_jid)) {
+ module.request_user_devicelist(stream, conversation.counterpart.bare_jid);
+ return false;
}
+ return true;
}
public static void start(StreamInteractor stream_interactor, Database db) {
diff --git a/plugins/omemo/src/stream_module.vala b/plugins/omemo/src/stream_module.vala
index d298db2b..25e3685f 100644
--- a/plugins/omemo/src/stream_module.vala
+++ b/plugins/omemo/src/stream_module.vala
@@ -33,6 +33,7 @@ public class StreamModule : XmppStreamModule {
store_created(store);
received_pipeline_listener = new ReceivedPipelineListener(store);
stream.get_module(MessageModule.IDENTITY).received_pipeline.connect(received_pipeline_listener);
+ print("Adding filtered notification\n");
stream.get_module(Pubsub.Module.IDENTITY).add_filtered_notification(stream, NODE_DEVICELIST, (stream, jid, id, node) => on_devicelist(stream, jid, id, node));
}
@@ -63,9 +64,8 @@ public class StreamModule : XmppStreamModule {
if (Plugin.DEBUG) print(@"OMEMO: Not on device list, adding id\n");
node.put_node(new StanzaNode.build("device", NS_URI).put_attribute("id", store.local_registration_id.to_string()));
stream.get_module(Pubsub.Module.IDENTITY).publish(stream, jid, NODE_DEVICELIST, NODE_DEVICELIST, id, node);
- } else {
- publish_bundles_if_needed(stream, jid);
}
+ publish_bundles_if_needed(stream, jid);
}
ArrayList<int32> device_list = new ArrayList<int32>();
diff --git a/plugins/omemo/src/trust_manager.vala b/plugins/omemo/src/trust_manager.vala
index 408faed8..7e17e5ea 100644
--- a/plugins/omemo/src/trust_manager.vala
+++ b/plugins/omemo/src/trust_manager.vala
@@ -118,8 +118,9 @@ public class TrustManager {
public Gee.List<int32> get_trusted_devices(Account account, Jid jid) {
Gee.List<int32> devices = new ArrayList<int32>();
- foreach (Row device in db.identity_meta.with_address(account.id, jid.to_string()).with(db.identity_meta.trust_level, "!=", Database.IdentityMetaTable.TrustLevel.UNKNOWN).with(db.identity_meta.trust_level, "!=", Database.IdentityMetaTable.TrustLevel.UNTRUSTED).without_null(db.identity_meta.identity_key_public_base64)) {
- devices.add(device[db.identity_meta.device_id]);
+ foreach (Row device in db.identity_meta.with_address(account.id, jid.to_string()).with(db.identity_meta.trust_level, "!=", Database.IdentityMetaTable.TrustLevel.UNTRUSTED)) {
+ if(device[db.identity_meta.trust_level] != Database.IdentityMetaTable.TrustLevel.UNKNOWN || device[db.identity_meta.identity_key_public_base64] == null)
+ devices.add(device[db.identity_meta.device_id]);
}
return devices;
}