make x509 verification node world readable
This commit is contained in:
parent
0d00ff0c15
commit
0c0ff882a9
|
@ -533,8 +533,23 @@ public class AxolotlService implements OnAdvancedStreamFeaturesLoaded {
|
||||||
Log.d(Config.LOGTAG, AxolotlService.getLogprefix(account) + ": publish verification for device "+getOwnDeviceId());
|
Log.d(Config.LOGTAG, AxolotlService.getLogprefix(account) + ": publish verification for device "+getOwnDeviceId());
|
||||||
mXmppConnectionService.sendIqPacket(account, packet, new OnIqPacketReceived() {
|
mXmppConnectionService.sendIqPacket(account, packet, new OnIqPacketReceived() {
|
||||||
@Override
|
@Override
|
||||||
public void onIqPacketReceived(Account account, IqPacket packet) {
|
public void onIqPacketReceived(final Account account, IqPacket packet) {
|
||||||
publishDeviceBundle(signedPreKeyRecord, preKeyRecords, announceAfter, wipe);
|
String node = AxolotlService.PEP_VERIFICATION+":"+getOwnDeviceId();
|
||||||
|
Bundle pubsubOptions = new Bundle();
|
||||||
|
pubsubOptions.putString("pubsub#access_model","open");
|
||||||
|
mXmppConnectionService.pushNodeConfiguration(account, account.getJid().toBareJid(), node, pubsubOptions, new XmppConnectionService.OnConfigurationPushed() {
|
||||||
|
@Override
|
||||||
|
public void onPushSucceeded() {
|
||||||
|
Log.d(Config.LOGTAG,getLogprefix(account) + "configured verification node to be world readable");
|
||||||
|
publishDeviceBundle(signedPreKeyRecord, preKeyRecords, announceAfter, wipe);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onPushFailed() {
|
||||||
|
Log.d(Config.LOGTAG,getLogprefix(account) + "unable to set access model on verification node");
|
||||||
|
publishDeviceBundle(signedPreKeyRecord, preKeyRecords, announceAfter, wipe);
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
@ -661,7 +676,7 @@ public class AxolotlService implements OnAdvancedStreamFeaturesLoaded {
|
||||||
IqPacket publish = mXmppConnectionService.getIqGenerator().publishBundles(
|
IqPacket publish = mXmppConnectionService.getIqGenerator().publishBundles(
|
||||||
signedPreKeyRecord, axolotlStore.getIdentityKeyPair().getPublicKey(),
|
signedPreKeyRecord, axolotlStore.getIdentityKeyPair().getPublicKey(),
|
||||||
preKeyRecords, getOwnDeviceId());
|
preKeyRecords, getOwnDeviceId());
|
||||||
Log.d(Config.LOGTAG, AxolotlService.getLogprefix(account) + ": Bundle " + getOwnDeviceId() + " in PEP not current. Publishing: " + publish);
|
Log.d(Config.LOGTAG, AxolotlService.getLogprefix(account) + ": Bundle " + getOwnDeviceId() + " in PEP not current. Publishing...");
|
||||||
mXmppConnectionService.sendIqPacket(account, publish, new OnIqPacketReceived() {
|
mXmppConnectionService.sendIqPacket(account, publish, new OnIqPacketReceived() {
|
||||||
@Override
|
@Override
|
||||||
public void onIqPacketReceived(Account account, IqPacket packet) {
|
public void onIqPacketReceived(Account account, IqPacket packet) {
|
||||||
|
|
|
@ -396,4 +396,23 @@ public class IqGenerator extends AbstractGenerator {
|
||||||
options.putString("muc#roomconfig_whois", "anyone");
|
options.putString("muc#roomconfig_whois", "anyone");
|
||||||
return options;
|
return options;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public IqPacket requestPubsubConfiguration(Jid jid, String node) {
|
||||||
|
return pubsubConfiguration(jid, node, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public IqPacket publishPubsubConfiguration(Jid jid, String node, Data data) {
|
||||||
|
return pubsubConfiguration(jid,node,data);
|
||||||
|
}
|
||||||
|
|
||||||
|
private IqPacket pubsubConfiguration(Jid jid, String node, Data data) {
|
||||||
|
IqPacket packet = new IqPacket(data == null ? IqPacket.TYPE.GET : IqPacket.TYPE.SET);
|
||||||
|
packet.setTo(jid);
|
||||||
|
Element pubsub = packet.addChild("pubsub","http://jabber.org/protocol/pubsub#owner");
|
||||||
|
Element configure = pubsub.addChild("configure").setAttribute("node",node);
|
||||||
|
if (data != null) {
|
||||||
|
configure.addChild(data);
|
||||||
|
}
|
||||||
|
return packet;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1831,9 +1831,10 @@ public class XmppConnectionService extends Service {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void updateKeyInAccount(final Account account, final String alias) {
|
public void updateKeyInAccount(final Account account, final String alias) {
|
||||||
Log.d(Config.LOGTAG, "update key in account " + alias);
|
Log.d(Config.LOGTAG, account.getJid().toBareJid()+": update key in account " + alias);
|
||||||
try {
|
try {
|
||||||
X509Certificate[] chain = KeyChain.getCertificateChain(XmppConnectionService.this, alias);
|
X509Certificate[] chain = KeyChain.getCertificateChain(XmppConnectionService.this, alias);
|
||||||
|
Log.d(Config.LOGTAG,account.getJid().toBareJid()+" loaded certificate chain");
|
||||||
Pair<Jid, String> info = CryptoHelper.extractJidAndName(chain[0]);
|
Pair<Jid, String> info = CryptoHelper.extractJidAndName(chain[0]);
|
||||||
if (account.getJid().toBareJid().equals(info.first)) {
|
if (account.getJid().toBareJid().equals(info.first)) {
|
||||||
account.setPrivateKeyAlias(alias);
|
account.setPrivateKeyAlias(alias);
|
||||||
|
@ -1841,7 +1842,7 @@ public class XmppConnectionService extends Service {
|
||||||
databaseBackend.updateAccount(account);
|
databaseBackend.updateAccount(account);
|
||||||
if (Config.X509_VERIFICATION) {
|
if (Config.X509_VERIFICATION) {
|
||||||
try {
|
try {
|
||||||
getMemorizingTrustManager().getNonInteractive(account.getJid().getDomainpart()).checkClientTrusted(chain, "RSA");
|
getMemorizingTrustManager().getNonInteractive().checkClientTrusted(chain, "RSA");
|
||||||
} catch (CertificateException e) {
|
} catch (CertificateException e) {
|
||||||
showErrorToastInUi(R.string.certificate_chain_is_not_trusted);
|
showErrorToastInUi(R.string.certificate_chain_is_not_trusted);
|
||||||
}
|
}
|
||||||
|
@ -2454,7 +2455,7 @@ public class XmppConnectionService extends Service {
|
||||||
joinMuc(conversation, new OnConferenceJoined() {
|
joinMuc(conversation, new OnConferenceJoined() {
|
||||||
@Override
|
@Override
|
||||||
public void onConferenceJoined(final Conversation conversation) {
|
public void onConferenceJoined(final Conversation conversation) {
|
||||||
pushConferenceConfiguration(conversation, IqGenerator.defaultRoomConfiguration(), new OnConferenceOptionsPushed() {
|
pushConferenceConfiguration(conversation, IqGenerator.defaultRoomConfiguration(), new OnConfigurationPushed() {
|
||||||
@Override
|
@Override
|
||||||
public void onPushSucceeded() {
|
public void onPushSucceeded() {
|
||||||
if (subject != null && !subject.trim().isEmpty()) {
|
if (subject != null && !subject.trim().isEmpty()) {
|
||||||
|
@ -2538,7 +2539,38 @@ public class XmppConnectionService extends Service {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public void pushConferenceConfiguration(final Conversation conversation, final Bundle options, final OnConferenceOptionsPushed callback) {
|
public void pushNodeConfiguration(Account account, final Jid jid, final String node, final Bundle options, final OnConfigurationPushed callback) {
|
||||||
|
sendIqPacket(account, mIqGenerator.requestPubsubConfiguration(jid,node), new OnIqPacketReceived() {
|
||||||
|
@Override
|
||||||
|
public void onIqPacketReceived(Account account, IqPacket packet) {
|
||||||
|
if (packet.getType() == IqPacket.TYPE.RESULT) {
|
||||||
|
Element pubsub = packet.findChild("pubsub","http://jabber.org/protocol/pubsub#owner");
|
||||||
|
Element configuration = pubsub == null ? null : pubsub.findChild("configure");
|
||||||
|
Element x = configuration == null ? null : configuration.findChild("x","jabber:x:data");
|
||||||
|
if (x != null) {
|
||||||
|
Data data = Data.parse(x);
|
||||||
|
data.submit(options);
|
||||||
|
sendIqPacket(account, mIqGenerator.publishPubsubConfiguration(jid, node, data), new OnIqPacketReceived() {
|
||||||
|
@Override
|
||||||
|
public void onIqPacketReceived(Account account, IqPacket packet) {
|
||||||
|
if (packet.getType() == IqPacket.TYPE.RESULT) {
|
||||||
|
callback.onPushSucceeded();
|
||||||
|
} else {
|
||||||
|
Log.d(Config.LOGTAG,packet.toString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
callback.onPushFailed();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
callback.onPushFailed();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public void pushConferenceConfiguration(final Conversation conversation, final Bundle options, final OnConfigurationPushed callback) {
|
||||||
IqPacket request = new IqPacket(IqPacket.TYPE.GET);
|
IqPacket request = new IqPacket(IqPacket.TYPE.GET);
|
||||||
request.setTo(conversation.getJid().toBareJid());
|
request.setTo(conversation.getJid().toBareJid());
|
||||||
request.query("http://jabber.org/protocol/muc#owner");
|
request.query("http://jabber.org/protocol/muc#owner");
|
||||||
|
@ -2547,12 +2579,7 @@ public class XmppConnectionService extends Service {
|
||||||
public void onIqPacketReceived(Account account, IqPacket packet) {
|
public void onIqPacketReceived(Account account, IqPacket packet) {
|
||||||
if (packet.getType() == IqPacket.TYPE.RESULT) {
|
if (packet.getType() == IqPacket.TYPE.RESULT) {
|
||||||
Data data = Data.parse(packet.query().findChild("x", "jabber:x:data"));
|
Data data = Data.parse(packet.query().findChild("x", "jabber:x:data"));
|
||||||
for (Field field : data.getFields()) {
|
data.submit(options);
|
||||||
if (options.containsKey(field.getFieldName())) {
|
|
||||||
field.setValue(options.getString(field.getFieldName()));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
data.submit();
|
|
||||||
IqPacket set = new IqPacket(IqPacket.TYPE.SET);
|
IqPacket set = new IqPacket(IqPacket.TYPE.SET);
|
||||||
set.setTo(conversation.getJid().toBareJid());
|
set.setTo(conversation.getJid().toBareJid());
|
||||||
set.query("http://jabber.org/protocol/muc#owner").addChild(data);
|
set.query("http://jabber.org/protocol/muc#owner").addChild(data);
|
||||||
|
@ -3933,7 +3960,7 @@ public class XmppConnectionService extends Service {
|
||||||
void onConferenceJoined(Conversation conversation);
|
void onConferenceJoined(Conversation conversation);
|
||||||
}
|
}
|
||||||
|
|
||||||
public interface OnConferenceOptionsPushed {
|
public interface OnConfigurationPushed {
|
||||||
void onPushSucceeded();
|
void onPushSucceeded();
|
||||||
|
|
||||||
void onPushFailed();
|
void onPushFailed();
|
||||||
|
|
|
@ -40,7 +40,7 @@ import eu.siacs.conversations.services.XmppConnectionService.OnConversationUpdat
|
||||||
import eu.siacs.conversations.services.XmppConnectionService.OnMucRosterUpdate;
|
import eu.siacs.conversations.services.XmppConnectionService.OnMucRosterUpdate;
|
||||||
import eu.siacs.conversations.xmpp.jid.Jid;
|
import eu.siacs.conversations.xmpp.jid.Jid;
|
||||||
|
|
||||||
public class ConferenceDetailsActivity extends XmppActivity implements OnConversationUpdate, OnMucRosterUpdate, XmppConnectionService.OnAffiliationChanged, XmppConnectionService.OnRoleChanged, XmppConnectionService.OnConferenceOptionsPushed {
|
public class ConferenceDetailsActivity extends XmppActivity implements OnConversationUpdate, OnMucRosterUpdate, XmppConnectionService.OnAffiliationChanged, XmppConnectionService.OnRoleChanged, XmppConnectionService.OnConfigurationPushed {
|
||||||
public static final String ACTION_VIEW_MUC = "view_muc";
|
public static final String ACTION_VIEW_MUC = "view_muc";
|
||||||
|
|
||||||
private static final float INACTIVE_ALPHA = 0.4684f; //compromise between dark and light theme
|
private static final float INACTIVE_ALPHA = 0.4684f; //compromise between dark and light theme
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
package eu.siacs.conversations.xmpp.forms;
|
package eu.siacs.conversations.xmpp.forms;
|
||||||
|
|
||||||
|
import android.os.Bundle;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
|
@ -55,6 +57,15 @@ public class Data extends Element {
|
||||||
field.setValues(values);
|
field.setValues(values);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void submit(Bundle options) {
|
||||||
|
for (Field field : getFields()) {
|
||||||
|
if (options.containsKey(field.getFieldName())) {
|
||||||
|
field.setValue(options.getString(field.getFieldName()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
submit();
|
||||||
|
}
|
||||||
|
|
||||||
public void submit() {
|
public void submit() {
|
||||||
this.setAttribute("type","submit");
|
this.setAttribute("type","submit");
|
||||||
removeUnnecessaryChildren();
|
removeUnnecessaryChildren();
|
||||||
|
@ -96,4 +107,5 @@ public class Data extends Element {
|
||||||
public String getTitle() {
|
public String getTitle() {
|
||||||
return findChildContent("title");
|
return findChildContent("title");
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue