xmpp_sync/src/main/java/de/vanitasvitae/sync_client/Client.java

86 lines
3.7 KiB
Java
Raw Normal View History

2017-08-11 13:47:54 +02:00
package de.vanitasvitae.sync_client;
import java.io.File;
import java.io.IOException;
2017-08-15 17:44:02 +02:00
import java.io.UnsupportedEncodingException;
2017-08-11 13:47:54 +02:00
import java.nio.file.Path;
import java.nio.file.Paths;
2017-08-15 17:44:02 +02:00
import java.security.InvalidAlgorithmParameterException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.NoSuchProviderException;
2017-08-11 13:47:54 +02:00
import java.util.HashSet;
import java.util.Set;
2017-08-15 17:44:02 +02:00
import javax.crypto.BadPaddingException;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
2017-08-11 13:47:54 +02:00
import org.jivesoftware.smack.SmackException;
import org.jivesoftware.smack.XMPPConnection;
import org.jivesoftware.smack.XMPPException;
import org.jivesoftware.smack.roster.Roster;
import org.jivesoftware.smack.roster.SubscribeListener;
import org.jivesoftware.smack.tcp.XMPPTCPConnection;
2017-08-15 17:44:02 +02:00
import org.jivesoftware.smackx.jet.JetManager;
2017-08-11 13:47:54 +02:00
import org.jivesoftware.smackx.jingle.transport.jingle_ibb.JingleIBBTransportManager;
import org.jivesoftware.smackx.jingle.transport.jingle_s5b.JingleS5BTransportManager;
2017-08-15 17:44:02 +02:00
import org.jivesoftware.smackx.omemo.OmemoConfiguration;
import org.jivesoftware.smackx.omemo.OmemoManager;
import org.jivesoftware.smackx.omemo.exceptions.CorruptedOmemoKeyException;
import org.jivesoftware.smackx.omemo.provider.OmemoVAxolotlProvider;
import org.jivesoftware.smackx.omemo.signal.SignalOmemoService;
import org.jivesoftware.smackx.omemo.util.OmemoConstants;
2017-08-11 13:47:54 +02:00
import org.jxmpp.jid.FullJid;
import org.jxmpp.stringprep.XmppStringprepException;
public class Client {
final XMPPConnection connection;
final Path root;
final Set<FullJid> remotes = new HashSet<>();
2017-08-11 13:47:54 +02:00
2017-08-15 17:44:02 +02:00
public Client(String username, String password, String directory)
throws XmppStringprepException, CorruptedOmemoKeyException, NoSuchAlgorithmException, UnsupportedEncodingException,
InvalidKeyException, InterruptedException, XMPPException.XMPPErrorException, NoSuchPaddingException, BadPaddingException,
InvalidAlgorithmParameterException, NoSuchProviderException, IllegalBlockSizeException, SmackException {
2017-08-11 13:47:54 +02:00
File dir = new File(directory);
if (!dir.exists()) {
throw new IllegalArgumentException("Directory " + directory + " does not exist!");
}
root = Paths.get(directory);
connection = new XMPPTCPConnection(username, password);
Roster.getInstanceFor(connection).addSubscribeListener((from, subscribeRequest) -> SubscribeListener.SubscribeAnswer.Approve);
JingleS5BTransportManager.getInstanceFor(connection);
JingleIBBTransportManager.getInstanceFor(connection);
2017-08-15 17:44:02 +02:00
JetManager jetm = JetManager.getInstanceFor(connection);
SignalOmemoService.acknowledgeLicense();
SignalOmemoService.setup();
String userHome = System.getProperty("user.home");
File storePath;
if (userHome != null) {
File f = new File(userHome);
storePath = new File(f, ".config/omemo_store");
} else {
storePath = new File("omemo_store");
}
OmemoConfiguration.setFileBasedOmemoStoreDefaultPath(storePath);
2017-08-11 13:47:54 +02:00
}
void login() throws InterruptedException, IOException, SmackException, XMPPException, CorruptedOmemoKeyException {
2017-08-11 13:47:54 +02:00
((XMPPTCPConnection) connection).connect().login();
2017-08-17 22:48:51 +02:00
connection.setReplyTimeout(30000);
2017-08-15 17:44:02 +02:00
OmemoManager omemoManager = OmemoManager.getInstanceFor(connection);
omemoManager.initialize();
JetManager.getInstanceFor(connection).registerEnvelopeManager(OmemoManager.getInstanceFor(connection));
JetManager.registerEnvelopeProvider(OmemoConstants.OMEMO_NAMESPACE_V_AXOLOTL, new OmemoVAxolotlProvider());
2017-08-11 13:47:54 +02:00
}
public void addRemote(FullJid remote) {
remotes.add(remote);
}
}