Start TrustKeysActivity if no keys are TRUSTED

If there are no UNDECIDED keys, but none of the contact's keys are
trusted, redirect the user to the TrustKeysActivity
This commit is contained in:
Andreas Straub 2015-07-20 22:35:07 +02:00
parent 4ee3f330f5
commit 8be0e8a27d
3 changed files with 21 additions and 10 deletions

View file

@ -278,8 +278,8 @@ public class AxolotlService {
mXmppConnectionService.databaseBackend.setIdentityKeyTrust(account, fingerprint, trust);
}
public Set<IdentityKey> getContactUndecidedKeys(String bareJid) {
return mXmppConnectionService.databaseBackend.loadIdentityKeys(account, bareJid, Trust.UNDECIDED);
public Set<IdentityKey> getContactUndecidedKeys(String bareJid, Trust trust) {
return mXmppConnectionService.databaseBackend.loadIdentityKeys(account, bareJid, trust);
}
public long getContactNumTrustedKeys(String bareJid) {
@ -692,12 +692,12 @@ public class AxolotlService {
return axolotlStore.getIdentityKeyPair().getPublicKey();
}
public Set<IdentityKey> getPendingKeys() {
return axolotlStore.getContactUndecidedKeys(account.getJid().toBareJid().toString());
public Set<IdentityKey> getKeysWithTrust(SQLiteAxolotlStore.Trust trust) {
return axolotlStore.getContactUndecidedKeys(account.getJid().toBareJid().toString(), trust);
}
public Set<IdentityKey> getPendingKeys(Contact contact) {
return axolotlStore.getContactUndecidedKeys(contact.getJid().toBareJid().toString());
public Set<IdentityKey> getKeysWithTrust(SQLiteAxolotlStore.Trust trust, Contact contact) {
return axolotlStore.getContactUndecidedKeys(contact.getJid().toBareJid().toString(), trust);
}
public long getNumTrustedKeys(Contact contact) {

View file

@ -38,6 +38,7 @@ import de.timroes.android.listview.EnhancedListView;
import eu.siacs.conversations.Config;
import eu.siacs.conversations.R;
import eu.siacs.conversations.crypto.axolotl.AxolotlService;
import eu.siacs.conversations.crypto.axolotl.AxolotlService.SQLiteAxolotlStore.Trust;
import eu.siacs.conversations.entities.Account;
import eu.siacs.conversations.entities.Blockable;
import eu.siacs.conversations.entities.Contact;
@ -1255,13 +1256,17 @@ public class ConversationActivity extends XmppActivity
protected boolean trustKeysIfNeeded(int requestCode, int attachmentChoice) {
AxolotlService axolotlService = mSelectedConversation.getAccount().getAxolotlService();
if(!axolotlService.getPendingKeys(mSelectedConversation.getContact()).isEmpty()
|| !axolotlService.findDevicesWithoutSession(mSelectedConversation).isEmpty()) {
boolean hasPendingKeys = !axolotlService.getKeysWithTrust(Trust.UNDECIDED,
mSelectedConversation.getContact()).isEmpty()
|| !axolotlService.findDevicesWithoutSession(mSelectedConversation).isEmpty();
boolean hasNoTrustedKeys = axolotlService.getNumTrustedKeys(mSelectedConversation.getContact()) == 0;
if( hasPendingKeys || hasNoTrustedKeys) {
axolotlService.createSessionsIfNeeded(mSelectedConversation, false);
Intent intent = new Intent(getApplicationContext(), TrustKeysActivity.class);
intent.putExtra("contact", mSelectedConversation.getContact().getJid().toBareJid().toString());
intent.putExtra("account", mSelectedConversation.getAccount().getJid().toBareJid().toString());
intent.putExtra("choice", attachmentChoice);
intent.putExtra("has_no_trusted", hasNoTrustedKeys);
startActivityForResult(intent, requestCode);
return true;
} else {

View file

@ -29,6 +29,7 @@ public class TrustKeysActivity extends XmppActivity implements OnNewKeysAvailabl
private Jid contactJid;
private boolean hasOtherTrustedKeys = false;
private boolean hasPendingFetches = false;
private boolean hasNoTrustedKeys = true;
private Contact contact;
private TextView ownKeysTitle;
@ -89,6 +90,7 @@ public class TrustKeysActivity extends XmppActivity implements OnNewKeysAvailabl
this.contactJid = Jid.fromString(getIntent().getExtras().getString("contact"));
} catch (final InvalidJidException ignored) {
}
hasNoTrustedKeys = getIntent().getBooleanExtra("has_no_trusted", false);
ownKeysTitle = (TextView) findViewById(R.id.own_keys_title);
ownKeys = (LinearLayout) findViewById(R.id.own_keys_details);
@ -169,13 +171,17 @@ public class TrustKeysActivity extends XmppActivity implements OnNewKeysAvailabl
}
private void getFingerprints(final Account account) {
Set<IdentityKey> ownKeysSet = account.getAxolotlService().getPendingKeys();
Set<IdentityKey> ownKeysSet = account.getAxolotlService().getKeysWithTrust(Trust.UNDECIDED);
Set<IdentityKey> foreignKeysSet = account.getAxolotlService().getKeysWithTrust(Trust.UNDECIDED, contact);
if (hasNoTrustedKeys) {
ownKeysSet.addAll(account.getAxolotlService().getKeysWithTrust(Trust.UNTRUSTED));
foreignKeysSet.addAll(account.getAxolotlService().getKeysWithTrust(Trust.UNTRUSTED, contact));
}
for(final IdentityKey identityKey : ownKeysSet) {
if(!ownKeysToTrust.containsKey(identityKey)) {
ownKeysToTrust.put(identityKey, false);
}
}
Set<IdentityKey> foreignKeysSet = account.getAxolotlService().getPendingKeys(contact);
for(final IdentityKey identityKey : foreignKeysSet) {
if(!foreignKeysToTrust.containsKey(identityKey)) {
foreignKeysToTrust.put(identityKey, false);