add ruleset to disable omemo-by-default for certain providers

This commit is contained in:
Daniel Gultsch 2018-03-26 13:29:01 +02:00
parent 536149723e
commit 06f8d8c5d6
2 changed files with 24 additions and 2 deletions

View File

@ -2,6 +2,10 @@ package eu.siacs.conversations;
import android.graphics.Bitmap; import android.graphics.Bitmap;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import eu.siacs.conversations.xmpp.chatstate.ChatState; import eu.siacs.conversations.xmpp.chatstate.ChatState;
import rocks.xmpp.addr.Jid; import rocks.xmpp.addr.Jid;
@ -145,6 +149,15 @@ public final class Config {
"_MD5", "_MD5",
}; };
public static class OMEMO_EXCEPTIONS {
//if the own account matches one of the following domains OMEMO wont be turned on automatically
public static final List<String> ACCOUNT_DOMAINS = Collections.singletonList("s.ms");
//if the contacts domain matches one of the following domains OMEMO wont be turned on automatically
//can be used for well known, widely used gateways
public static final List<String> CONTACT_DOMAINS = Collections.singletonList("cheogram.com");
}
private Config() { private Config() {
} }
} }

View File

@ -596,10 +596,9 @@ public class Conversation extends AbstractEntity implements Blockable, Comparabl
if (!Config.supportOmemo() && !Config.supportOpenPgp()) { if (!Config.supportOmemo() && !Config.supportOpenPgp()) {
return Message.ENCRYPTION_NONE; return Message.ENCRYPTION_NONE;
} }
AxolotlService axolotlService = account.getAxolotlService();
if (contactJid.asBareJid().equals(Config.BUG_REPORTS)) { if (contactJid.asBareJid().equals(Config.BUG_REPORTS)) {
defaultEncryption = Message.ENCRYPTION_NONE; defaultEncryption = Message.ENCRYPTION_NONE;
} else if (axolotlService != null && axolotlService.isConversationAxolotlCapable(this)) { } else if (suitableForOmemoByDefault(this)) {
defaultEncryption = Message.ENCRYPTION_AXOLOTL; defaultEncryption = Message.ENCRYPTION_AXOLOTL;
} else { } else {
defaultEncryption = Message.ENCRYPTION_NONE; defaultEncryption = Message.ENCRYPTION_NONE;
@ -612,6 +611,16 @@ public class Conversation extends AbstractEntity implements Blockable, Comparabl
} }
} }
private static boolean suitableForOmemoByDefault(final Conversation conversation) {
final String contact = conversation.getJid().getDomain();
final String account = conversation.getAccount().getServer();
if (Config.OMEMO_EXCEPTIONS.CONTACT_DOMAINS.contains(contact) || Config.OMEMO_EXCEPTIONS.ACCOUNT_DOMAINS.contains(account)) {
return false;
}
final AxolotlService axolotlService = conversation.getAccount().getAxolotlService();
return axolotlService != null && axolotlService.isConversationAxolotlCapable(conversation);
}
public void setNextEncryption(int encryption) { public void setNextEncryption(int encryption) {
this.setAttribute(ATTRIBUTE_NEXT_ENCRYPTION, String.valueOf(encryption)); this.setAttribute(ATTRIBUTE_NEXT_ENCRYPTION, String.valueOf(encryption));
} }