add payment required error

This commit is contained in:
Daniel Gultsch 2016-08-16 10:39:59 +02:00
parent 343bb7ff28
commit b5d3859b22
3 changed files with 21 additions and 2 deletions

View file

@ -111,7 +111,8 @@ public class Account extends AbstractEntity {
REGISTRATION_PLEASE_WAIT(true), REGISTRATION_PLEASE_WAIT(true),
STREAM_ERROR(true), STREAM_ERROR(true),
POLICY_VIOLATION(true), POLICY_VIOLATION(true),
REGISTRATION_PASSWORD_TOO_WEAK(true); REGISTRATION_PASSWORD_TOO_WEAK(true),
PAYMENT_REQUIRED(true);
private final boolean isError; private final boolean isError;
@ -169,6 +170,8 @@ public class Account extends AbstractEntity {
return R.string.registration_password_too_weak; return R.string.registration_password_too_weak;
case STREAM_ERROR: case STREAM_ERROR:
return R.string.account_status_stream_error; return R.string.account_status_stream_error;
case PAYMENT_REQUIRED:
return R.string.payment_required;
default: default:
return R.string.account_status_unknown; return R.string.account_status_unknown;
} }

View file

@ -384,6 +384,8 @@ public class XmppConnection implements Runnable {
this.changeStatus(Account.State.SECURITY_ERROR); this.changeStatus(Account.State.SECURITY_ERROR);
} catch (final UnauthorizedException e) { } catch (final UnauthorizedException e) {
this.changeStatus(Account.State.UNAUTHORIZED); this.changeStatus(Account.State.UNAUTHORIZED);
} catch (final PaymentRequiredException e) {
this.changeStatus(Account.State.PAYMENT_REQUIRED);
} catch (final UnknownHostException | ConnectException e) { } catch (final UnknownHostException | ConnectException e) {
this.changeStatus(Account.State.SERVER_NOT_FOUND); this.changeStatus(Account.State.SERVER_NOT_FOUND);
} catch (final SocksSocketFactory.SocksProxyNotFoundException e) { } catch (final SocksSocketFactory.SocksProxyNotFoundException e) {
@ -505,7 +507,16 @@ public class XmppConnection implements Runnable {
} }
break; break;
} else if (nextTag.isStart("failure")) { } else if (nextTag.isStart("failure")) {
throw new UnauthorizedException(); final Element failure = tagReader.readElement(nextTag);
final String accountDisabled = failure.findChildContent("account-disabled");
if (accountDisabled != null
&& accountDisabled.contains("renew")
&& Config.MAGIC_CREATE_DOMAIN != null
&& accountDisabled.contains(Config.MAGIC_CREATE_DOMAIN)) {
throw new PaymentRequiredException();
} else {
throw new UnauthorizedException();
}
} 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");
@ -1535,6 +1546,10 @@ public class XmppConnection implements Runnable {
} }
private class PaymentRequiredException extends IOException {
}
public enum Identity { public enum Identity {
FACEBOOK, FACEBOOK,
SLACK, SLACK,

View file

@ -674,4 +674,5 @@
<string name="type_tablet">Tablet</string> <string name="type_tablet">Tablet</string>
<string name="type_web">Web browser</string> <string name="type_web">Web browser</string>
<string name="type_console">Console</string> <string name="type_console">Console</string>
<string name="payment_required">Payment required</string>
</resources> </resources>