diff --git a/src/com/owncloud/android/lib/common/operations/RemoteOperationResult.java b/src/com/owncloud/android/lib/common/operations/RemoteOperationResult.java index eb53ce11f5..b9cf060546 100644 --- a/src/com/owncloud/android/lib/common/operations/RemoteOperationResult.java +++ b/src/com/owncloud/android/lib/common/operations/RemoteOperationResult.java @@ -122,7 +122,8 @@ public enum ResultCode { NOT_AVAILABLE, MAINTENANCE_MODE, LOCK_FAILED, - DELAYED_IN_POWER_SAVE_MODE + DELAYED_IN_POWER_SAVE_MODE, + ACCOUNT_USES_STANDARD_PASSWORD } private boolean mSuccess = false; diff --git a/src/com/owncloud/android/lib/resources/notifications/RegisterAccountDeviceForNotificationsOperation.java b/src/com/owncloud/android/lib/resources/notifications/RegisterAccountDeviceForNotificationsOperation.java index 9d1f7b1807..fea39af40e 100644 --- a/src/com/owncloud/android/lib/resources/notifications/RegisterAccountDeviceForNotificationsOperation.java +++ b/src/com/owncloud/android/lib/resources/notifications/RegisterAccountDeviceForNotificationsOperation.java @@ -55,10 +55,12 @@ public class RegisterAccountDeviceForNotificationsOperation extends RemoteOperat // JSON Node names private static final String NODE_OCS = "ocs"; private static final String NODE_DATA = "data"; + private static final String MESSAGE = "message"; private static final String PUSH_TOKEN_HASH = "pushTokenHash"; private static final String DEVICE_PUBLIC_KEY = "devicePublicKey"; private static final String PROXY_SERVER = "proxyServer"; + private static final String INVALID_SESSION_TOKEN = "INVALID_SESSION_TOKEN"; private String pushTokenHash; private String devicePublicKey; @@ -93,7 +95,7 @@ protected RemoteOperationResult run(OwnCloudClient client) { status = client.executeMethod(post); String response = post.getResponseBodyAsString(); - if(isSuccess(status)) { + if (isSuccess(status)) { result = new RemoteOperationResult(true, status, post.getResponseHeaders()); Log_OC.d(TAG, "Successful response: " + response); @@ -101,7 +103,11 @@ protected RemoteOperationResult run(OwnCloudClient client) { pushResponse = parseResult(response); result.setPushResponseData(pushResponse); } else { - result = new RemoteOperationResult(false, status, post.getResponseHeaders()); + if (isInvalidSessionToken(response)) { + result = new RemoteOperationResult(RemoteOperationResult.ResultCode.ACCOUNT_USES_STANDARD_PASSWORD); + } else { + result = new RemoteOperationResult(false, status, post.getResponseHeaders()); + } } } catch (Exception e) { @@ -127,6 +133,14 @@ private PushResponse parseResult(String response) throws JSONException { return gson.fromJson(jsonDataObject, pushResponseType); } + private boolean isInvalidSessionToken(String response) { + JsonParser jsonParser = new JsonParser(); + JsonObject jsonObject = (JsonObject)jsonParser.parse(response); + String message = jsonObject.getAsJsonObject(NODE_OCS).getAsJsonObject(NODE_DATA).get(MESSAGE).getAsString(); + + return INVALID_SESSION_TOKEN.equals(message); + } + private boolean isSuccess(int status) { return (status == HttpStatus.SC_OK || status == HttpStatus.SC_CREATED); }