Add security error status

Sam Whited created

Change summary

src/main/java/eu/siacs/conversations/entities/Account.java          | 27 
src/main/java/eu/siacs/conversations/ui/adapter/AccountAdapter.java |  4 
src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java       |  3 
src/main/res/values/strings.xml                                     |  1 
4 files changed, 22 insertions(+), 13 deletions(-)

Detailed changes

src/main/java/eu/siacs/conversations/entities/Account.java 🔗

@@ -42,17 +42,18 @@ public class Account extends AbstractEntity {
 	public static final int OPTION_USECOMPRESSION = 3;
 
 	public static enum State {
-        DISABLED,
-        OFFLINE,
-        CONNECTING,
-        ONLINE,
-        NO_INTERNET,
+		DISABLED,
+		OFFLINE,
+		CONNECTING,
+		ONLINE,
+		NO_INTERNET,
 		UNAUTHORIZED(true),
 		SERVER_NOT_FOUND(true),
 		REGISTRATION_FAILED(true),
 		REGISTRATION_CONFLICT(true),
-        REGISTRATION_SUCCESSFUL,
-		REGISTRATION_NOT_SUPPORTED(true);
+		REGISTRATION_SUCCESSFUL,
+		REGISTRATION_NOT_SUPPORTED(true),
+		SECURITY_ERROR(true);
 
 		private boolean isError;
 
@@ -92,6 +93,8 @@ public class Account extends AbstractEntity {
 					return R.string.account_status_regis_success;
 				case REGISTRATION_NOT_SUPPORTED:
 					return R.string.account_status_regis_not_sup;
+				case SECURITY_ERROR:
+					return R.string.account_status_security_error;
 				default:
 					return R.string.account_status_unknown;
 			}
@@ -126,8 +129,8 @@ public class Account extends AbstractEntity {
 	}
 
 	public Account(final String uuid, final Jid jid,
-				   final String password, final int options, final String rosterVersion, final String keys,
-				   final String avatar) {
+			final String password, final int options, final String rosterVersion, final String keys,
+			final String avatar) {
 		this.uuid = uuid;
 		this.jid = jid;
 		if (jid.isBareJid()) {
@@ -293,7 +296,7 @@ public class Account extends AbstractEntity {
 		if (this.otrFingerprint == null) {
 			try {
 				DSAPublicKey pubkey = (DSAPublicKey) this.otrEngine
-						.getPublicKey();
+					.getPublicKey();
 				if (pubkey == null) {
 					return null;
 				}
@@ -394,12 +397,12 @@ public class Account extends AbstractEntity {
 	}
 
 	public int getReadableStatusId() {
-        return this.getStatus().getReadableId();
+		return this.getStatus().getReadableId();
 	}
 
 	public void activateGracePeriod() {
 		this.mEndGracePeriod = SystemClock.elapsedRealtime()
-				+ (Config.CARBON_GRACE_PERIOD * 1000);
+			+ (Config.CARBON_GRACE_PERIOD * 1000);
 	}
 
 	public void deactivateGracePeriod() {

src/main/java/eu/siacs/conversations/ui/adapter/AccountAdapter.java 🔗

@@ -92,6 +92,10 @@ public class AccountAdapter extends ArrayAdapter<Account> {
 					R.string.account_status_regis_not_sup));
 			statusView.setTextColor(activity.getWarningTextColor());
 			break;
+		case SECURITY_ERROR:
+			statusView.setText(getContext().getString
+					(R.string.account_status_security_error));
+			statusView.setTextColor(activity.getWarningTextColor());
 		default:
 			statusView.setText("");
 			break;

src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java 🔗

@@ -649,7 +649,8 @@ public class XmppConnection implements Runnable {
 							") than pinned priority (" + keys.getInt(Account.PINNED_MECHANISM_KEY) +
 							"). Possible downgrade attack?");
 					disconnect(true);
-						}
+					account.setStatus(Account.State.SECURITY_ERROR);
+				}
 			} catch (final JSONException e) {
 				Log.d(Config.LOGTAG, "Parse error while checking pinned auth mechanism");
 			}

src/main/res/values/strings.xml 🔗

@@ -141,6 +141,7 @@
     <string name="account_status_regis_conflict">Username already in use</string>
     <string name="account_status_regis_success">Registration completed</string>
     <string name="account_status_regis_not_sup">Server does not support registration</string>
+    <string name="account_status_security_error">Security error</string>
     <string name="encryption_choice_none">Plain text</string>
     <string name="encryption_choice_otr">OTR</string>
     <string name="encryption_choice_pgp">OpenPGP</string>