1
0
mirror of https://github.com/owncloud/android-library.git synced 2025-06-07 16:06:08 +00:00

Handle specific forbidden error

This commit is contained in:
davigonz 2017-01-26 10:24:47 +01:00
parent 21121e0189
commit 1aba54d0f9
2 changed files with 26 additions and 25 deletions

View File

@ -38,17 +38,14 @@ import java.io.InputStream;
* @author masensio * @author masensio
*/ */
public class ForbiddenExceptionParser { public class ForbiddenExceptionParser {
// No namespaces
private static final String EXCEPTION_STRING = "OCA\\DAV\\Connector\\Sabre\\Exception\\Forbidden";
// No namespaces
private static final String ns = null; private static final String ns = null;
// Nodes for XML Parser // Nodes for XML Parser
private static final String NODE_ERROR = "d:error"; private static final String NODE_ERROR = "d:error";
private static final String NODE_MESSAGE = "s:message"; private static final String NODE_MESSAGE = "s:message";
/** /**
* Parse is as an forbidden exception * Parse is as an forbidden exception
* @param is * @param is
* @return reason for forbidden exception * @return reason for forbidden exception
@ -56,8 +53,8 @@ public class ForbiddenExceptionParser {
* @throws IOException * @throws IOException
*/ */
public String parseXMLResponse(InputStream is) throws XmlPullParserException, public String parseXMLResponse(InputStream is) throws XmlPullParserException,
IOException { IOException {
String errorMessage = ""; String errorMessage = "";
try { try {
// XMLPullParser // XMLPullParser
@ -68,7 +65,7 @@ public class ForbiddenExceptionParser {
parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false); parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false);
parser.setInput(is, null); parser.setInput(is, null);
parser.nextTag(); parser.nextTag();
errorMessage = readError(parser); errorMessage = readError(parser);
} finally { } finally {
is.close(); is.close();
@ -84,7 +81,7 @@ public class ForbiddenExceptionParser {
* @throws IOException * @throws IOException
*/ */
private String readError (XmlPullParser parser) throws XmlPullParserException, IOException { private String readError (XmlPullParser parser) throws XmlPullParserException, IOException {
String message = ""; String errorMessage = "";
parser.require(XmlPullParser.START_TAG, ns , NODE_ERROR); parser.require(XmlPullParser.START_TAG, ns , NODE_ERROR);
while (parser.next() != XmlPullParser.END_TAG) { while (parser.next() != XmlPullParser.END_TAG) {
if (parser.getEventType() != XmlPullParser.START_TAG) { if (parser.getEventType() != XmlPullParser.START_TAG) {
@ -92,14 +89,13 @@ public class ForbiddenExceptionParser {
} }
String name = parser.getName(); String name = parser.getName();
// read NODE_MESSAGE // read NODE_MESSAGE
if (name.equalsIgnoreCase(NODE_MESSAGE)) { if (name.equalsIgnoreCase(NODE_MESSAGE)) {
message = readText(parser); errorMessage = readText(parser);
} else { } else {
skip(parser); skip(parser);
} }
} }
return message; return errorMessage;
} }
/** /**
@ -115,17 +111,17 @@ public class ForbiddenExceptionParser {
int depth = 1; int depth = 1;
while (depth != 0) { while (depth != 0) {
switch (parser.next()) { switch (parser.next()) {
case XmlPullParser.END_TAG: case XmlPullParser.END_TAG:
depth--; depth--;
break; break;
case XmlPullParser.START_TAG: case XmlPullParser.START_TAG:
depth++; depth++;
break; break;
} }
} }
} }
/** /**
* Read the text from a node * Read the text from a node
* @param parser * @param parser
* @return Text of the node * @return Text of the node
@ -140,4 +136,4 @@ public class ForbiddenExceptionParser {
} }
return result; return result;
} }
} }

View File

@ -107,6 +107,7 @@ public class RemoteOperationResult implements Serializable {
LOCAL_STORAGE_NOT_REMOVED, LOCAL_STORAGE_NOT_REMOVED,
FORBIDDEN, FORBIDDEN,
SHARE_FORBIDDEN, SHARE_FORBIDDEN,
SPECIFIC_FORBIDDEN,
OK_REDIRECT_TO_NON_SECURE_CONNECTION, OK_REDIRECT_TO_NON_SECURE_CONNECTION,
INVALID_MOVE_INTO_DESCENDANT, INVALID_MOVE_INTO_DESCENDANT,
INVALID_COPY_INTO_DESCENDANT, INVALID_COPY_INTO_DESCENDANT,
@ -252,7 +253,11 @@ public class RemoteOperationResult implements Serializable {
InputStream is = new ByteArrayInputStream(bodyResponse.getBytes()); InputStream is = new ByteArrayInputStream(bodyResponse.getBytes());
ForbiddenExceptionParser xmlParser = new ForbiddenExceptionParser(); ForbiddenExceptionParser xmlParser = new ForbiddenExceptionParser();
try { try {
mHttpPhrase = xmlParser.parseXMLResponse(is); String errorMessage = xmlParser.parseXMLResponse(is);
if (errorMessage != "" && errorMessage != null) {
mCode = ResultCode.SPECIFIC_FORBIDDEN;
mHttpPhrase = errorMessage;
}
} catch (Exception e) { } catch (Exception e) {
Log_OC.w(TAG, "Error reading exception from server: " + e.getMessage()); Log_OC.w(TAG, "Error reading exception from server: " + e.getMessage());
// mCode stays as set in this(success, httpCode, headers) // mCode stays as set in this(success, httpCode, headers)