differentiate starttls failure and sasl failure

This commit is contained in:
Daniel Gultsch 2017-05-13 08:08:05 +02:00
parent 91db2023d3
commit 5056a28553
2 changed files with 19 additions and 14 deletions

View file

@ -11,4 +11,6 @@ public final class Namespace {
public static final String MAM_LEGACY = "urn:xmpp:mam:0"; public static final String MAM_LEGACY = "urn:xmpp:mam:0";
public static final String IDLE = "urn:xmpp:idle:1"; public static final String IDLE = "urn:xmpp:idle:1";
public static final String OOB = "jabber:x:oob"; public static final String OOB = "jabber:x:oob";
public static final String SASL = "urn:ietf:params:xml:ns:xmpp-sasl";
public static final String TLS = "urn:ietf:params:xml:ns:xmpp-tls";
} }

View file

@ -531,21 +531,25 @@ public class XmppConnection implements Runnable {
break; break;
} else if (nextTag.isStart("failure")) { } else if (nextTag.isStart("failure")) {
final Element failure = tagReader.readElement(nextTag); final Element failure = tagReader.readElement(nextTag);
final String text = failure.findChildContent("text"); if (Namespace.SASL.equals(failure.getNamespace())) {
if (failure.hasChild("account-disabled") final String text = failure.findChildContent("text");
&& text != null if (failure.hasChild("account-disabled")
&& text.contains("renew") && text != null
&& Config.MAGIC_CREATE_DOMAIN != null && text.contains("renew")
&& text.contains(Config.MAGIC_CREATE_DOMAIN)) { && Config.MAGIC_CREATE_DOMAIN != null
throw new StateChangingException(Account.State.PAYMENT_REQUIRED); && text.contains(Config.MAGIC_CREATE_DOMAIN)) {
throw new StateChangingException(Account.State.PAYMENT_REQUIRED);
} else {
throw new StateChangingException(Account.State.UNAUTHORIZED);
}
} else if (Namespace.TLS.equals(failure.getNamespace())) {
throw new StateChangingException(Account.State.TLS_ERROR);
} else { } else {
throw new StateChangingException(Account.State.UNAUTHORIZED); throw new StateChangingException(Account.State.INCOMPATIBLE_SERVER);
} }
} else if (nextTag.isStart("challenge")) { } else if (nextTag.isStart("challenge")) {
final String challenge = tagReader.readElement(nextTag).getContent(); final String challenge = tagReader.readElement(nextTag).getContent();
final Element response = new Element("response"); final Element response = new Element("response",Namespace.SASL);
response.setAttribute("xmlns",
"urn:ietf:params:xml:ns:xmpp-sasl");
try { try {
response.setContent(saslMechanism.getResponse(challenge)); response.setContent(saslMechanism.getResponse(challenge));
} catch (final SaslMechanism.AuthenticationException e) { } catch (final SaslMechanism.AuthenticationException e) {
@ -781,7 +785,7 @@ public class XmppConnection implements Runnable {
private void sendStartTLS() throws IOException { private void sendStartTLS() throws IOException {
final Tag startTLS = Tag.empty("starttls"); final Tag startTLS = Tag.empty("starttls");
startTLS.setAttribute("xmlns", "urn:ietf:params:xml:ns:xmpp-tls"); startTLS.setAttribute("xmlns", Namespace.TLS);
tagWriter.writeTag(startTLS); tagWriter.writeTag(startTLS);
} }
@ -864,8 +868,7 @@ public class XmppConnection implements Runnable {
private void authenticate() throws IOException { private void authenticate() throws IOException {
final List<String> mechanisms = extractMechanisms(streamFeatures final List<String> mechanisms = extractMechanisms(streamFeatures
.findChild("mechanisms")); .findChild("mechanisms"));
final Element auth = new Element("auth"); final Element auth = new Element("auth",Namespace.SASL);
auth.setAttribute("xmlns", "urn:ietf:params:xml:ns:xmpp-sasl");
if (mechanisms.contains("EXTERNAL") && account.getPrivateKeyAlias() != null) { if (mechanisms.contains("EXTERNAL") && account.getPrivateKeyAlias() != null) {
saslMechanism = new External(tagWriter, account, mXmppConnectionService.getRNG()); saslMechanism = new External(tagWriter, account, mXmppConnectionService.getRNG());
} else if (mechanisms.contains("SCRAM-SHA-256")) { } else if (mechanisms.contains("SCRAM-SHA-256")) {