Update API (hacky)

This commit is contained in:
vanitasvitae 2017-05-08 15:28:01 +02:00
parent 04eb0f1d78
commit bc4d5feb4d
Signed by: vanitasvitae
GPG key ID: 62BEE9264BF17311
3 changed files with 79 additions and 55 deletions

3
.gitignore vendored
View file

@ -31,3 +31,6 @@ extensions/bin
target/ target/
.metadata .metadata
clocc.ipr
clocc.iws

View file

@ -1,5 +1,6 @@
apply plugin: 'java' apply plugin: 'java'
apply plugin: 'eclipse' apply plugin: 'eclipse'
apply plugin: 'idea'
repositories { repositories {
mavenLocal() mavenLocal()

View file

@ -15,16 +15,27 @@ import org.jivesoftware.smackx.mam.MamManager;
import org.jivesoftware.smackx.muc.MultiUserChat; import org.jivesoftware.smackx.muc.MultiUserChat;
import org.jivesoftware.smackx.muc.MultiUserChatException; import org.jivesoftware.smackx.muc.MultiUserChatException;
import org.jivesoftware.smackx.muc.MultiUserChatManager; import org.jivesoftware.smackx.muc.MultiUserChatManager;
import org.jivesoftware.smackx.omemo.OmemoInitializer; import org.jivesoftware.smackx.omemo.OmemoConfiguration;
import org.jivesoftware.smackx.omemo.OmemoManager; import org.jivesoftware.smackx.omemo.OmemoManager;
import org.jivesoftware.smackx.omemo.exceptions.*; import org.jivesoftware.smackx.omemo.exceptions.CannotEstablishOmemoSessionException;
import org.jivesoftware.smackx.omemo.internal.*; import org.jivesoftware.smackx.omemo.exceptions.CorruptedOmemoKeyException;
import org.jivesoftware.smackx.omemo.exceptions.UndecidedOmemoIdentityException;
import org.jivesoftware.smackx.omemo.internal.CachedDeviceList;
import org.jivesoftware.smackx.omemo.internal.ClearTextMessage;
import org.jivesoftware.smackx.omemo.internal.OmemoDevice;
import org.jivesoftware.smackx.omemo.listener.OmemoMessageListener; import org.jivesoftware.smackx.omemo.listener.OmemoMessageListener;
import org.jivesoftware.smackx.omemo.listener.OmemoMucMessageListener; import org.jivesoftware.smackx.omemo.listener.OmemoMucMessageListener;
import org.jivesoftware.smackx.omemo.signal.SignalFileBasedOmemoStore; import org.jivesoftware.smackx.omemo.signal.SignalFileBasedOmemoStore;
import org.jivesoftware.smackx.omemo.signal.SignalOmemoService; import org.jivesoftware.smackx.omemo.signal.SignalOmemoService;
import org.jivesoftware.smackx.omemo.signal.SignalOmemoSession; import org.jivesoftware.smackx.omemo.signal.SignalOmemoSession;
import org.jivesoftware.smackx.omemo.util.KeyUtil; import org.jivesoftware.smackx.omemo.util.KeyUtil;
import org.jivesoftware.smackx.pubsub.PubSubManager;
import org.jline.reader.EndOfFileException;
import org.jline.reader.LineReader;
import org.jline.reader.LineReaderBuilder;
import org.jline.reader.UserInterruptException;
import org.jline.terminal.Terminal;
import org.jline.terminal.TerminalBuilder;
import org.jxmpp.jid.BareJid; import org.jxmpp.jid.BareJid;
import org.jxmpp.jid.EntityBareJid; import org.jxmpp.jid.EntityBareJid;
import org.jxmpp.jid.EntityFullJid; import org.jxmpp.jid.EntityFullJid;
@ -33,13 +44,6 @@ import org.jxmpp.jid.parts.Resourcepart;
import org.jxmpp.stringprep.XmppStringprepException; import org.jxmpp.stringprep.XmppStringprepException;
import org.whispersystems.libsignal.IdentityKey; import org.whispersystems.libsignal.IdentityKey;
import org.jline.terminal.Terminal;
import org.jline.terminal.TerminalBuilder;
import org.jline.reader.LineReader;
import org.jline.reader.LineReaderBuilder;
import org.jline.reader.UserInterruptException;
import org.jline.reader.EndOfFileException;
import java.io.File; import java.io.File;
import java.security.Security; import java.security.Security;
import java.util.ArrayList; import java.util.ArrayList;
@ -57,21 +61,22 @@ public class Main {
private AbstractXMPPConnection connection; private AbstractXMPPConnection connection;
private OmemoManager omemoManager; private OmemoManager omemoManager;
private int deviceId = 20305655;
private Main() throws XmppStringprepException { private Main() throws XmppStringprepException {
/* //*
SmackConfiguration.DEBUG = true; SmackConfiguration.DEBUG = true;
/*/ /*/
SmackConfiguration.DEBUG = false; SmackConfiguration.DEBUG = false;
//*/ //*/
OmemoManager.setAddOmemoHintBody(false); OmemoConfiguration.getInstance().setAddOmemoHintBody(false);
new OmemoInitializer().initialize();
} }
public void start() throws Exception { public void start() throws Exception {
Terminal terminal = TerminalBuilder.terminal(); Terminal terminal = TerminalBuilder.terminal();
LineReader reader = LineReaderBuilder.builder() LineReader reader = LineReaderBuilder.builder()
.terminal(terminal) .terminal(terminal)
.build(); .build();
String prompt = "> "; String prompt = "> ";
Scanner scanner = new Scanner(System.in); Scanner scanner = new Scanner(System.in);
@ -87,12 +92,17 @@ public class Main {
connection = new XMPPTCPConnection(jidname, password); connection = new XMPPTCPConnection(jidname, password);
Security.addProvider(new BouncyCastleProvider()); Security.addProvider(new BouncyCastleProvider());
connection.setPacketReplyTimeout(50000);
omemoManager = OmemoManager.getInstanceFor(connection, deviceId);
SignalFileBasedOmemoStore store = new SignalFileBasedOmemoStore(omemoManager, new File("store"));
SignalOmemoService signalOmemoService = SignalOmemoService.getInstance();
signalOmemoService.registerDevice(omemoManager, store);
connection.setPacketReplyTimeout(10000);
connection = connection.connect(); connection = connection.connect();
connection.login(); connection.login();
System.out.println("Logged in. Begin setting up OMEMO..."); System.out.println("Logged in. Begin setting up OMEMO...");
omemoManager = OmemoManager.getInstanceFor(connection);
SignalFileBasedOmemoStore store = new SignalFileBasedOmemoStore(omemoManager, new File("store"));
OmemoMessageListener messageListener = (decrypted, message, wrapping, omemoMessageInformation) -> { OmemoMessageListener messageListener = (decrypted, message, wrapping, omemoMessageInformation) -> {
BareJid sender = message.getFrom().asBareJid(); BareJid sender = message.getFrom().asBareJid();
@ -114,8 +124,6 @@ public class Main {
} }
}; };
SignalOmemoService omemoService = new SignalOmemoService(omemoManager, store);
omemoManager.initialize();
CarbonManager.getInstanceFor(connection).enableCarbons(); CarbonManager.getInstanceFor(connection).enableCarbons();
omemoManager.addOmemoMessageListener(messageListener); omemoManager.addOmemoMessageListener(messageListener);
@ -234,42 +242,46 @@ public class Main {
if(split.length == 2) { if(split.length == 2) {
System.out.println("Usage: \n0: Untrusted, 1: Trusted, otherwise: Undecided"); System.out.println("Usage: \n0: Untrusted, 1: Trusted, otherwise: Undecided");
BareJid jid = getJid(split[1]); BareJid jid = getJid(split[1]);
if(jid != null) {
CachedDeviceList l = store.loadCachedDeviceList(jid); if(jid == null) {
int ourId = store.loadOmemoDeviceId(); continue;
l.getActiveDevices().stream().filter(i -> i != ourId).forEach(i -> {
OmemoDevice d = new OmemoDevice(jid, i);
SignalOmemoSession s = (SignalOmemoSession) store.getOmemoSessionOf(d);
if(s.getIdentityKey() == null) {
try {
System.out.println("Build session...");
omemoService.buildSessionFromOmemoBundle(d);
s = (SignalOmemoSession) store.getOmemoSessionOf(d);
System.out.println("Session built.");
} catch (CannotEstablishOmemoSessionException | CorruptedOmemoKeyException e) {
e.printStackTrace();
}
}
if (store.isDecidedOmemoIdentity(d, s.getIdentityKey())) {
if (store.isTrustedOmemoIdentity(d, s.getIdentityKey())) {
System.out.println("Status: Trusted");
} else {
System.out.println("Status: Untrusted");
}
} else {
System.out.println("Status: Undecided");
}
System.out.println(KeyUtil.prettyFingerprint(s.getFingerprint()));
String decision = scanner.nextLine();
if (decision.equals("0")) {
store.distrustOmemoIdentity(d, s.getIdentityKey());
System.out.println("Identity has been untrusted.");
} else if (decision.equals("1")) {
store.trustOmemoIdentity(d, s.getIdentityKey());
System.out.println("Identity has been trusted.");
}
});
} }
omemoManager.requestDeviceListUpdateFor(jid);
CachedDeviceList l = store.loadCachedDeviceList(jid);
l.getActiveDevices().stream().filter(i -> i != omemoManager.getDeviceId()).forEach(i -> {
OmemoDevice d = new OmemoDevice(jid, i);
SignalOmemoSession s = (SignalOmemoSession) store.getOmemoSessionOf(d);
if(s.getIdentityKey() == null) {
try {
System.out.println("Build session...");
omemoManager.getFingerprint(d);
s = (SignalOmemoSession) store.getOmemoSessionOf(d);
System.out.println("Session built.");
} catch (CannotEstablishOmemoSessionException e) {
e.printStackTrace();
}
}
if (store.isDecidedOmemoIdentity(d, s.getIdentityKey())) {
if (store.isTrustedOmemoIdentity(d, s.getIdentityKey())) {
System.out.println("Status: Trusted");
} else {
System.out.println("Status: Untrusted");
}
} else {
System.out.println("Status: Undecided");
}
System.out.println(KeyUtil.prettyFingerprint(s.getFingerprint()));
String decision = scanner.nextLine();
if (decision.equals("0")) {
store.distrustOmemoIdentity(d, s.getIdentityKey());
System.out.println("Identity has been untrusted.");
} else if (decision.equals("1")) {
store.trustOmemoIdentity(d, s.getIdentityKey());
System.out.println("Identity has been trusted.");
}
});
} }
} else if(line.startsWith("/purge")) { } else if(line.startsWith("/purge")) {
@ -351,6 +363,14 @@ public class Main {
} }
System.out.println("Query finished"); System.out.println("Query finished");
} }
else if (line.startsWith("/test")) {
PubSubManager pm = PubSubManager.getInstance(connection, connection.getUser().asBareJid());
try {
pm.getLeafNode("blablasda");
} catch (Exception e) {
System.out.println(e.getClass().getName()+": "+e.getMessage());
}
}
else { else {
if(current != null) { if(current != null) {