mobile/android/base/background/fxa/FxAccountClientException.java

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

     1 /* This Source Code Form is subject to the terms of the Mozilla Public
     2  * License, v. 2.0. If a copy of the MPL was not distributed with this
     3  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
     5 package org.mozilla.gecko.background.fxa;
     7 import org.mozilla.gecko.R;
     8 import org.mozilla.gecko.sync.ExtendedJSONObject;
     9 import org.mozilla.gecko.sync.HTTPFailureException;
    10 import org.mozilla.gecko.sync.net.SyncStorageResponse;
    12 import ch.boye.httpclientandroidlib.HttpResponse;
    13 import ch.boye.httpclientandroidlib.HttpStatus;
    15 /**
    16  * From <a href="https://github.com/mozilla/fxa-auth-server/blob/master/docs/api.md">https://github.com/mozilla/fxa-auth-server/blob/master/docs/api.md</a>.
    17  */
    18 public class FxAccountClientException extends Exception {
    19   private static final long serialVersionUID = 7953459541558266597L;
    21   public FxAccountClientException(String detailMessage) {
    22     super(detailMessage);
    23   }
    25   public FxAccountClientException(Exception e) {
    26     super(e);
    27   }
    29   public static class FxAccountClientRemoteException extends FxAccountClientException {
    30     private static final long serialVersionUID = 2209313149952001097L;
    32     public final HttpResponse response;
    33     public final long httpStatusCode;
    34     public final long apiErrorNumber;
    35     public final String error;
    36     public final String message;
    37     public final String info;
    38     public final ExtendedJSONObject body;
    40     public FxAccountClientRemoteException(HttpResponse response, long httpStatusCode, long apiErrorNumber, String error, String message, String info, ExtendedJSONObject body) {
    41       super(new HTTPFailureException(new SyncStorageResponse(response)));
    42       if (body == null) {
    43         throw new IllegalArgumentException("body must not be null");
    44       }
    45       this.response = response;
    46       this.httpStatusCode = httpStatusCode;
    47       this.apiErrorNumber = apiErrorNumber;
    48       this.error = error;
    49       this.message = message;
    50       this.info = info;
    51       this.body = body;
    52     }
    54     @Override
    55     public String toString() {
    56       return "<FxAccountClientRemoteException " + this.httpStatusCode + " [" + this.apiErrorNumber + "]: " + this.message + ">";
    57     }
    59     public boolean isInvalidAuthentication() {
    60       return httpStatusCode == HttpStatus.SC_UNAUTHORIZED;
    61     }
    63     public boolean isAccountAlreadyExists() {
    64       return apiErrorNumber == FxAccountRemoteError.ATTEMPT_TO_CREATE_AN_ACCOUNT_THAT_ALREADY_EXISTS;
    65     }
    67     public boolean isAccountDoesNotExist() {
    68       return apiErrorNumber == FxAccountRemoteError.ATTEMPT_TO_ACCESS_AN_ACCOUNT_THAT_DOES_NOT_EXIST;
    69     }
    71     public boolean isBadPassword() {
    72       return apiErrorNumber == FxAccountRemoteError.INCORRECT_PASSWORD;
    73     }
    75     public boolean isUnverified() {
    76       return apiErrorNumber == FxAccountRemoteError.ATTEMPT_TO_OPERATE_ON_AN_UNVERIFIED_ACCOUNT;
    77     }
    79     public boolean isUpgradeRequired() {
    80       return
    81           apiErrorNumber == FxAccountRemoteError.ENDPOINT_IS_NO_LONGER_SUPPORTED ||
    82           apiErrorNumber == FxAccountRemoteError.INCORRECT_LOGIN_METHOD_FOR_THIS_ACCOUNT ||
    83           apiErrorNumber == FxAccountRemoteError.INCORRECT_KEY_RETRIEVAL_METHOD_FOR_THIS_ACCOUNT ||
    84           apiErrorNumber == FxAccountRemoteError.INCORRECT_API_VERSION_FOR_THIS_ACCOUNT;
    85     }
    87     public boolean isTooManyRequests() {
    88       return apiErrorNumber == FxAccountRemoteError.CLIENT_HAS_SENT_TOO_MANY_REQUESTS;
    89     }
    91     public boolean isServerUnavailable() {
    92       return apiErrorNumber == FxAccountRemoteError.SERVICE_TEMPORARILY_UNAVAILABLE_DUE_TO_HIGH_LOAD;
    93     }
    95     public boolean isBadEmailCase() {
    96       return apiErrorNumber == FxAccountRemoteError.INCORRECT_EMAIL_CASE;
    97     }
    99     public int getErrorMessageStringResource() {
   100       if (isUpgradeRequired()) {
   101         return R.string.fxaccount_remote_error_UPGRADE_REQUIRED;
   102       } else if (isAccountAlreadyExists()) {
   103         return R.string.fxaccount_remote_error_ATTEMPT_TO_CREATE_AN_ACCOUNT_THAT_ALREADY_EXISTS;
   104       } else if (isAccountDoesNotExist()) {
   105         return R.string.fxaccount_remote_error_ATTEMPT_TO_ACCESS_AN_ACCOUNT_THAT_DOES_NOT_EXIST;
   106       } else if (isBadPassword()) {
   107         return R.string.fxaccount_remote_error_INCORRECT_PASSWORD;
   108       } else if (isUnverified()) {
   109         return R.string.fxaccount_remote_error_ATTEMPT_TO_OPERATE_ON_AN_UNVERIFIED_ACCOUNT;
   110       } else if (isTooManyRequests()) {
   111         return R.string.fxaccount_remote_error_CLIENT_HAS_SENT_TOO_MANY_REQUESTS;
   112       } else if (isServerUnavailable()) {
   113         return R.string.fxaccount_remote_error_SERVICE_TEMPORARILY_UNAVAILABLE_TO_DUE_HIGH_LOAD;
   114       } else {
   115         return R.string.fxaccount_remote_error_UNKNOWN_ERROR;
   116       }
   117     }
   118   }
   120   public static class FxAccountClientMalformedResponseException extends FxAccountClientRemoteException {
   121     private static final long serialVersionUID = 2209313149952001098L;
   123     public FxAccountClientMalformedResponseException(HttpResponse response) {
   124       super(response, 0, FxAccountRemoteError.UNKNOWN_ERROR, "Response malformed", "Response malformed", "Response malformed", new ExtendedJSONObject());
   125     }
   126   }
   127 }

mercurial