Skip to content

Commit

Permalink
PARS: preliminary IQ-based account token transmission
Browse files Browse the repository at this point in the history
  • Loading branch information
ge0rg committed Dec 18, 2019
1 parent 07a7f6d commit f129136
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 0 deletions.
3 changes: 3 additions & 0 deletions src/org/yaxim/androidclient/data/YaximConfiguration.java
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@ public class YaximConfiguration implements OnSharedPreferenceChangeListener {
public String jabberID;
public BareJid jid;
public String screenName;
public String initialPreAuth;
public boolean jid_configured;
public boolean require_ssl;

Expand Down Expand Up @@ -175,6 +176,8 @@ private void loadPrefs(SharedPreferences prefs) {
this.jabberID = prefs.getString(PreferenceConstants.JID, "");
this.customServer = prefs.getString(PreferenceConstants.CUSTOM_SERVER,
"");
this.initialPreAuth = prefs.getString(PreferenceConstants.INITIAL_PREAUTH,
null);
this.require_ssl = prefs.getBoolean(PreferenceConstants.REQUIRE_SSL,
false);
this.statusMode = prefs.getString(PreferenceConstants.STATUS_MODE, "available");
Expand Down
18 changes: 18 additions & 0 deletions src/org/yaxim/androidclient/packet/PreAuth.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package org.yaxim.androidclient.packet;

import org.jivesoftware.smack.packet.ExtensionElement;
import org.jivesoftware.smack.packet.IQ;
import org.jivesoftware.smack.provider.ExtensionElementProvider;

import org.jivesoftware.smack.util.StringUtils;
Expand Down Expand Up @@ -41,4 +42,21 @@ public PreAuth parse(XmlPullParser parser, int initialDepth) throws Exception {
return new PreAuth(parser.getAttributeValue(null, "token"));
}
}

public static class PreAuthIQ extends IQ {
private String token;

public PreAuthIQ(String token) {
super(ELEMENT, NAMESPACE);
this.token = token;
this.setType(Type.set);
}

@Override
protected IQChildElementXmlStringBuilder getIQChildElementBuilder(IQChildElementXmlStringBuilder xml) {
xml.optAttribute("token", token);
xml.setEmptyElement();
return xml;
}
}
}
9 changes: 9 additions & 0 deletions src/org/yaxim/androidclient/service/SmackableImp.java
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
import de.duenndns.ssl.MemorizingTrustManager;

import org.jivesoftware.smack.*;
import org.jivesoftware.smack.filter.StanzaIdFilter;
import org.jivesoftware.smack.filter.StanzaTypeFilter;
import org.jivesoftware.smack.packet.IQ;
import org.jivesoftware.smack.packet.IQ.Type;
Expand Down Expand Up @@ -106,6 +107,7 @@
import org.yaxim.androidclient.data.ChatProvider.ChatConstants;
import org.yaxim.androidclient.data.RosterProvider.RosterConstants;
import org.yaxim.androidclient.exceptions.YaximXMPPException;
import org.yaxim.androidclient.packet.InviteRegister;
import org.yaxim.androidclient.packet.MuclumbusIQ;
import org.yaxim.androidclient.packet.MuclumbusResult;
import org.yaxim.androidclient.packet.Oob;
Expand Down Expand Up @@ -159,6 +161,7 @@ public class SmackableImp implements Smackable {
ProviderManager.addIQProvider(MamFinIQ.ELEMENT, MamElements.NAMESPACE, new MamFinIQProvider());
ProviderManager.addIQProvider(MuclumbusIQ.ELEMENT, MuclumbusIQ.NAMESPACE, new MuclumbusIQ.Provider());
ProviderManager.addIQProvider(MuclumbusResult.ELEMENT, MuclumbusIQ.NAMESPACE, new MuclumbusResult.Provider());
ProviderManager.addStreamFeatureProvider(InviteRegister.ELEMENT, InviteRegister.NAMESPACE, new InviteRegister.StreamFeatureProvider());
PingManager.setDefaultPingInterval(14*60);
}

Expand Down Expand Up @@ -840,6 +843,12 @@ private void connectAndLogin(boolean create_account) throws YaximXMPPException {
debugLog("connectAndLogin: within synchronized mXMPPConnection");
mXMPPConnection.connect();
if (create_account) {
if (!TextUtils.isEmpty(mConfig.initialPreAuth) && mXMPPConnection.hasFeature("register", "urn:xmpp:invite")) {
Log.d(TAG, "sending pre-auth token to server: " + mConfig.initialPreAuth);
PreAuth.PreAuthIQ preauth = new PreAuth.PreAuthIQ(mConfig.initialPreAuth);
mXMPPConnection.createStanzaCollectorAndSend(new StanzaIdFilter(preauth.getStanzaId()), preauth)
.nextResultOrThrow();
}
Log.d(TAG, "creating new server account...");
AccountManager am = AccountManager.getInstance(mXMPPConnection);
am.createAccount(Localpart.from(mConfig.userName), mConfig.password);
Expand Down

0 comments on commit f129136

Please sign in to comment.