Fix handling AOL's login rejection

Found while investigating b/18031180

b/18049329

Change-Id: I2c86449008fb5e89c84db1a0753b8a61f42305b9
This commit is contained in:
Tony Mantler 2014-10-17 13:54:37 -07:00
parent f61e098a41
commit a2f1da2bdc
3 changed files with 20 additions and 3 deletions

View File

@ -344,6 +344,7 @@ class ImapConnection {
if (!response.isOk()) {
final String toString = response.toString();
final String status = response.getStatusOrEmpty().getString();
final String alert = response.getAlertTextOrEmpty().getString();
final String responseCode = response.getResponseCodeOrEmpty().getString();
destroyResponses();
@ -353,7 +354,7 @@ class ImapConnection {
throw new MessagingException(MessagingException.SERVER_ERROR, alert);
}
throw new ImapException(toString, alert, responseCode);
throw new ImapException(toString, status, alert, responseCode);
}
return responses;
}
@ -505,12 +506,14 @@ class ImapConnection {
LogUtils.d(Logging.LOG_TAG, ie, "ImapException");
}
final String status = ie.getStatus();
final String code = ie.getResponseCode();
final String alertText = ie.getAlertText();
// if the response code indicates expired or bad credentials, throw a special exception
if (ImapConstants.AUTHENTICATIONFAILED.equals(code) ||
ImapConstants.EXPIRED.equals(code)) {
ImapConstants.EXPIRED.equals(code) ||
(ImapConstants.NO.equals(status) && TextUtils.isEmpty(code))) {
throw new AuthenticationFailedException(alertText, ie);
}

View File

@ -661,15 +661,22 @@ public class ImapStore extends Store {
static class ImapException extends MessagingException {
private static final long serialVersionUID = 1L;
private final String mStatus;
private final String mAlertText;
private final String mResponseCode;
public ImapException(String message, String alertText, String responseCode) {
public ImapException(String message, String status, String alertText,
String responseCode) {
super(message);
mStatus = status;
mAlertText = alertText;
mResponseCode = responseCode;
}
public String getStatus() {
return mStatus;
}
public String getAlertText() {
return mAlertText;
}

View File

@ -120,6 +120,13 @@ public class ImapResponse extends ImapList {
return getStringOrEmpty(getElementOrNone(1).isList() ? 2 : 1);
}
public ImapString getStatusOrEmpty() {
if (!isStatusResponse()) {
return ImapString.EMPTY;
}
return getStringOrEmpty(0);
}
@Override
public String toString() {
String tag = mTag;