re-read common name from certificates on startup
This commit is contained in:
parent
ba9ba8ffe2
commit
fab0a45955
|
@ -1,5 +1,6 @@
|
||||||
package eu.siacs.conversations.crypto.axolotl;
|
package eu.siacs.conversations.crypto.axolotl;
|
||||||
|
|
||||||
|
import android.os.Bundle;
|
||||||
import android.security.KeyChain;
|
import android.security.KeyChain;
|
||||||
import android.support.annotation.NonNull;
|
import android.support.annotation.NonNull;
|
||||||
import android.support.annotation.Nullable;
|
import android.support.annotation.Nullable;
|
||||||
|
@ -39,6 +40,7 @@ import eu.siacs.conversations.entities.Conversation;
|
||||||
import eu.siacs.conversations.entities.Message;
|
import eu.siacs.conversations.entities.Message;
|
||||||
import eu.siacs.conversations.parser.IqParser;
|
import eu.siacs.conversations.parser.IqParser;
|
||||||
import eu.siacs.conversations.services.XmppConnectionService;
|
import eu.siacs.conversations.services.XmppConnectionService;
|
||||||
|
import eu.siacs.conversations.utils.CryptoHelper;
|
||||||
import eu.siacs.conversations.utils.SerialSingleThreadExecutor;
|
import eu.siacs.conversations.utils.SerialSingleThreadExecutor;
|
||||||
import eu.siacs.conversations.xml.Element;
|
import eu.siacs.conversations.xml.Element;
|
||||||
import eu.siacs.conversations.xmpp.OnAdvancedStreamFeaturesLoaded;
|
import eu.siacs.conversations.xmpp.OnAdvancedStreamFeaturesLoaded;
|
||||||
|
@ -160,6 +162,20 @@ public class AxolotlService implements OnAdvancedStreamFeaturesLoaded {
|
||||||
AxolotlAddress axolotlAddress = new AxolotlAddress(bareJid, deviceId);
|
AxolotlAddress axolotlAddress = new AxolotlAddress(bareJid, deviceId);
|
||||||
Log.d(Config.LOGTAG, AxolotlService.getLogprefix(account) + "Building session for remote address: " + axolotlAddress.toString());
|
Log.d(Config.LOGTAG, AxolotlService.getLogprefix(account) + "Building session for remote address: " + axolotlAddress.toString());
|
||||||
IdentityKey identityKey = store.loadSession(axolotlAddress).getSessionState().getRemoteIdentityKey();
|
IdentityKey identityKey = store.loadSession(axolotlAddress).getSessionState().getRemoteIdentityKey();
|
||||||
|
if(Config.X509_VERIFICATION) {
|
||||||
|
X509Certificate certificate = store.getFingerprintCertificate(identityKey.getFingerprint().replaceAll("\\s", ""));
|
||||||
|
if (certificate != null) {
|
||||||
|
Bundle information = CryptoHelper.extractCertificateInformation(certificate);
|
||||||
|
try {
|
||||||
|
final String cn = information.getString("subject_cn");
|
||||||
|
final Jid jid = Jid.fromString(bareJid);
|
||||||
|
Log.d(Config.LOGTAG,"setting common name for "+jid+" to "+cn);
|
||||||
|
account.getRoster().getContact(jid).setCommonName(cn);
|
||||||
|
} catch (final InvalidJidException ignored) {
|
||||||
|
//ignored
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
this.put(axolotlAddress, new XmppAxolotlSession(account, store, axolotlAddress, identityKey));
|
this.put(axolotlAddress, new XmppAxolotlSession(account, store, axolotlAddress, identityKey));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -619,6 +635,15 @@ public class AxolotlService implements OnAdvancedStreamFeaturesLoaded {
|
||||||
setFingerprintTrust(fingerprint, XmppAxolotlSession.Trust.TRUSTED_X509);
|
setFingerprintTrust(fingerprint, XmppAxolotlSession.Trust.TRUSTED_X509);
|
||||||
axolotlStore.setFingerprintCertificate(fingerprint, verification.first[0]);
|
axolotlStore.setFingerprintCertificate(fingerprint, verification.first[0]);
|
||||||
fetchStatusMap.put(address, FetchStatus.SUCCESS_VERIFIED);
|
fetchStatusMap.put(address, FetchStatus.SUCCESS_VERIFIED);
|
||||||
|
Bundle information = CryptoHelper.extractCertificateInformation(verification.first[0]);
|
||||||
|
try {
|
||||||
|
final String cn = information.getString("subject_cn");
|
||||||
|
final Jid jid = Jid.fromString(address.getName());
|
||||||
|
Log.d(Config.LOGTAG,"setting common name for "+jid+" to "+cn);
|
||||||
|
account.getRoster().getContact(jid).setCommonName(cn);
|
||||||
|
} catch (final InvalidJidException ignored) {
|
||||||
|
//ignored
|
||||||
|
}
|
||||||
finishBuildingSessionsFromPEP(address);
|
finishBuildingSessionsFromPEP(address);
|
||||||
return;
|
return;
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
|
|
@ -38,6 +38,7 @@ public class Contact implements ListItem, Blockable {
|
||||||
protected String systemName;
|
protected String systemName;
|
||||||
protected String serverName;
|
protected String serverName;
|
||||||
protected String presenceName;
|
protected String presenceName;
|
||||||
|
protected String commonName;
|
||||||
protected Jid jid;
|
protected Jid jid;
|
||||||
protected int subscription = 0;
|
protected int subscription = 0;
|
||||||
protected String systemAccount;
|
protected String systemAccount;
|
||||||
|
@ -105,8 +106,8 @@ public class Contact implements ListItem, Blockable {
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getDisplayName() {
|
public String getDisplayName() {
|
||||||
if (this.presenceName != null && Config.X509_VERIFICATION) {
|
if (this.commonName != null && Config.X509_VERIFICATION) {
|
||||||
return this.presenceName;
|
return this.commonName;
|
||||||
} else if (this.systemName != null) {
|
} else if (this.systemName != null) {
|
||||||
return this.systemName;
|
return this.systemName;
|
||||||
} else if (this.serverName != null) {
|
} else if (this.serverName != null) {
|
||||||
|
@ -510,6 +511,10 @@ public class Contact implements ListItem, Blockable {
|
||||||
return account.getJid().toBareJid().equals(getJid().toBareJid());
|
return account.getJid().toBareJid().equals(getJid().toBareJid());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setCommonName(String cn) {
|
||||||
|
this.commonName = cn;
|
||||||
|
}
|
||||||
|
|
||||||
public static class Lastseen {
|
public static class Lastseen {
|
||||||
public long time;
|
public long time;
|
||||||
public String presence;
|
public String presence;
|
||||||
|
|
Loading…
Reference in New Issue