86 lines
3.8 KiB
Java
86 lines
3.8 KiB
Java
package de.vanitasvitae.sync_client;
|
|
|
|
import java.io.File;
|
|
import java.io.IOException;
|
|
import java.io.UnsupportedEncodingException;
|
|
import java.nio.file.Path;
|
|
import java.nio.file.Paths;
|
|
import java.security.InvalidAlgorithmParameterException;
|
|
import java.security.InvalidKeyException;
|
|
import java.security.NoSuchAlgorithmException;
|
|
import java.security.NoSuchProviderException;
|
|
import java.util.HashSet;
|
|
import java.util.Set;
|
|
import javax.crypto.BadPaddingException;
|
|
import javax.crypto.IllegalBlockSizeException;
|
|
import javax.crypto.NoSuchPaddingException;
|
|
|
|
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;
|
|
import org.jivesoftware.smackx.jet.JetManager;
|
|
import org.jivesoftware.smackx.jingle.transport.jingle_ibb.JingleIBBTransportManager;
|
|
import org.jivesoftware.smackx.jingle.transport.jingle_s5b.JingleS5BTransportManager;
|
|
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;
|
|
|
|
import org.jxmpp.jid.FullJid;
|
|
import org.jxmpp.stringprep.XmppStringprepException;
|
|
|
|
public class Client {
|
|
|
|
protected final XMPPConnection connection;
|
|
protected final Path root;
|
|
protected final Set<FullJid> remotes = new HashSet<>();
|
|
|
|
public Client(String username, String password, String directory)
|
|
throws XmppStringprepException, CorruptedOmemoKeyException, NoSuchAlgorithmException, UnsupportedEncodingException,
|
|
InvalidKeyException, InterruptedException, XMPPException.XMPPErrorException, NoSuchPaddingException, BadPaddingException,
|
|
InvalidAlgorithmParameterException, NoSuchProviderException, IllegalBlockSizeException, SmackException {
|
|
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);
|
|
|
|
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);
|
|
}
|
|
|
|
public void login() throws InterruptedException, IOException, SmackException, XMPPException, CorruptedOmemoKeyException {
|
|
((XMPPTCPConnection) connection).connect().login();
|
|
OmemoManager omemoManager = OmemoManager.getInstanceFor(connection);
|
|
omemoManager.initialize();
|
|
connection.setReplyTimeout(10000);
|
|
JetManager.getInstanceFor(connection).registerEncryptionMethod(OmemoManager.getInstanceFor(connection));
|
|
JetManager.registerEncryptionMethodProvider(OmemoConstants.OMEMO_NAMESPACE_V_AXOLOTL, new OmemoVAxolotlProvider());
|
|
}
|
|
|
|
public void addRemote(FullJid remote) {
|
|
remotes.add(remote);
|
|
}
|
|
}
|