verify contacts key only on initiating side of smp

This commit is contained in:
iNPUTmice 2014-11-21 13:42:25 +01:00
parent 92ad4cb736
commit de0b36fc78
4 changed files with 20 additions and 7 deletions

View file

@ -20,6 +20,7 @@ import eu.siacs.conversations.Config;
import eu.siacs.conversations.entities.Account;
import eu.siacs.conversations.entities.Conversation;
import eu.siacs.conversations.services.XmppConnectionService;
import eu.siacs.conversations.utils.CryptoHelper;
import eu.siacs.conversations.xmpp.jid.InvalidJidException;
import eu.siacs.conversations.xmpp.jid.Jid;
import eu.siacs.conversations.xmpp.stanzas.MessagePacket;
@ -249,14 +250,17 @@ public class OtrEngine implements OtrEngineHost {
}
@Override
public void verify(SessionID id, String arg1, boolean arg2) {
public void verify(SessionID id, String fingerprint, boolean approved) {
Log.d(Config.LOGTAG,"OtrEngine.verify("+id.toString()+","+fingerprint+","+String.valueOf(approved)+")");
try {
final Jid jid = Jid.fromSessionID(id);
Conversation conversation = this.mXmppConnectionService.find(this.account,jid);
if (conversation!=null) {
if (approved) {
conversation.getContact().addOtrFingerprint(CryptoHelper.prettifyFingerprint(fingerprint));
}
conversation.smp().hint = null;
conversation.smp().status = Conversation.Smp.STATUS_VERIFIED;
conversation.verifyOtrFingerprint();
conversation.smp().status = Conversation.Smp.STATUS_FINISHED;
mXmppConnectionService.updateConversationUi();
mXmppConnectionService.syncRosterToDisk(conversation.getAccount());
}

View file

@ -529,7 +529,7 @@ public class Conversation extends AbstractEntity {
public static final int STATUS_CONTACT_REQUESTED = 1;
public static final int STATUS_WE_REQUESTED = 2;
public static final int STATUS_FAILED = 3;
public static final int STATUS_VERIFIED = 4;
public static final int STATUS_FINISHED = 4;
public String secret = null;
public String hint = null;

View file

@ -285,14 +285,21 @@ public class VerifyOTRActivity extends XmppActivity implements XmppConnectionSer
this.mStatusMessage.setVisibility(View.VISIBLE);
this.mStatusMessage.setText(R.string.secrets_do_not_match);
this.mStatusMessage.setTextColor(getWarningTextColor());
} else if (smp.status == Conversation.Smp.STATUS_VERIFIED) {
} else if (smp.status == Conversation.Smp.STATUS_FINISHED) {
this.mSharedSecretHint.setText("");
this.mSharedSecretHint.setVisibility(View.GONE);
this.mSharedSecretSecret.setText("");
this.mSharedSecretSecret.setVisibility(View.GONE);
this.mStatusMessage.setVisibility(View.VISIBLE);
this.mStatusMessage.setText(R.string.verified);
this.mStatusMessage.setTextColor(getPrimaryColor());
deactivateButton(mButtonSharedSecretNegative, R.string.cancel);
activateButton(mButtonSharedSecretPositive, R.string.finish, mFinishListener);
if (mConversation.isOtrFingerprintVerified()) {
activateButton(mButtonSharedSecretPositive, R.string.finish, mFinishListener);
this.mStatusMessage.setText(R.string.verified);
} else {
activateButton(mButtonSharedSecretPositive,R.string.reset,mRetrySharedSecretListener);
this.mStatusMessage.setText(R.string.secret_accepted);
}
} else if (session != null && session.isSmpInProgress()) {
deactivateButton(mButtonSharedSecretPositive, R.string.in_progress);
activateButton(mButtonSharedSecretNegative, R.string.cancel, mCancelSharedSecretListener);

View file

@ -356,4 +356,6 @@
<string name="no_conference_server_found">No conference server found</string>
<string name="conference_creation_failed">Conference creation failed!</string>
<string name="conference_created">Conference created!</string>
<string name="secret_accepted">Secret accepted!</string>
<string name="reset">Reset</string>
</resources>