Skip to content

Commit 2428067

Browse files
Handle user disabled exception as its own result code
Signed-off-by: tobiasKaminsky <[email protected]>
1 parent 638326e commit 2428067

File tree

4 files changed

+66
-2
lines changed

4 files changed

+66
-2
lines changed

library/src/androidTest/java/com/owncloud/android/lib/resources/files/UploadFileRemoteOperationIT.kt

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,13 @@ package com.owncloud.android.lib.resources.files
99

1010
import android.os.Build
1111
import com.owncloud.android.AbstractIT
12+
import com.owncloud.android.lib.common.OwnCloudBasicCredentials
13+
import com.owncloud.android.lib.common.OwnCloudClientFactory
14+
import com.owncloud.android.lib.common.operations.RemoteOperationResult
1215
import com.owncloud.android.lib.common.utils.Log_OC
1316
import com.owncloud.android.lib.resources.files.model.RemoteFile
1417
import junit.framework.TestCase.assertEquals
18+
import org.junit.Assert.assertFalse
1519
import org.junit.Assert.assertNotNull
1620
import org.junit.Assert.assertTrue
1721
import org.junit.Test
@@ -22,6 +26,7 @@ import java.nio.file.attribute.BasicFileAttributes
2226
import java.util.concurrent.TimeUnit
2327

2428
class UploadFileRemoteOperationIT : AbstractIT() {
29+
@Throws(IOException::class)
2530
@Test
2631
fun creationTime() {
2732
val imageFile = getFile("imageFile.png")
@@ -30,6 +35,7 @@ class UploadFileRemoteOperationIT : AbstractIT() {
3035
assertTrue(creationDate!! > (System.currentTimeMillis() / MILLI_TO_SECOND) - TIME_OFFSET)
3136
}
3237

38+
@Throws(IOException::class)
3339
@Test
3440
fun upload() {
3541
// create file
@@ -80,6 +86,34 @@ class UploadFileRemoteOperationIT : AbstractIT() {
8086
)
8187
}
8288

89+
@Throws(IOException::class)
90+
@Test
91+
fun uploadWithDisabledUser() {
92+
// use disabled user
93+
val client3 = OwnCloudClientFactory.createOwnCloudClient(url, context, true)
94+
client3.credentials = OwnCloudBasicCredentials("disabled", "disabled")
95+
96+
// create file
97+
val filePath = createFile("text")
98+
val remotePath = "/test.md"
99+
100+
val creationTimestamp = getCreationTimestamp(File(filePath))
101+
val sut =
102+
UploadFileRemoteOperation(
103+
filePath,
104+
remotePath,
105+
"text/markdown",
106+
"",
107+
RANDOM_MTIME,
108+
creationTimestamp,
109+
true
110+
)
111+
112+
val uploadResult = sut.execute(client3)
113+
assertFalse(uploadResult.isSuccess)
114+
assertEquals(RemoteOperationResult.ResultCode.USER_DISABLED, uploadResult.code)
115+
}
116+
83117
private fun getCreationTimestamp(file: File): Long? {
84118
return if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) {
85119
return null

library/src/androidTest/java/com/owncloud/android/lib/resources/files/webdav/ChunkedFileUploadRemoteOperationIT.kt

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,16 @@
88
package com.owncloud.android.lib.resources.files.webdav
99

1010
import com.owncloud.android.AbstractIT
11+
import com.owncloud.android.lib.common.OwnCloudBasicCredentials
12+
import com.owncloud.android.lib.common.OwnCloudClientFactory
1113
import com.owncloud.android.lib.common.network.WebdavEntry
1214
import com.owncloud.android.lib.common.network.WebdavUtils
1315
import com.owncloud.android.lib.common.operations.RemoteOperationResult
1416
import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode
1517
import com.owncloud.android.lib.resources.files.ChunkedFileUploadRemoteOperation
1618
import junit.framework.TestCase
19+
import junit.framework.TestCase.assertEquals
20+
import junit.framework.TestCase.assertFalse
1721
import junit.framework.TestCase.assertNotNull
1822
import org.apache.jackrabbit.webdav.client.methods.PropFindMethod
1923
import org.junit.Test
@@ -59,6 +63,19 @@ class ChunkedFileUploadRemoteOperationIT : AbstractIT() {
5963
TestCase.assertSame(ResultCode.CANCELLED, uploadResult?.code)
6064
}
6165

66+
@Test
67+
fun uploadWithDisabledUser() {
68+
// use disabled user
69+
val client3 = OwnCloudClientFactory.createOwnCloudClient(url, context, true)
70+
client3.credentials = OwnCloudBasicCredentials("disabled", "disabled")
71+
72+
val sut = genLargeUpload(true)
73+
val uploadResult = sut.execute(client3)
74+
75+
assertFalse(uploadResult.isSuccess)
76+
assertEquals(ResultCode.USER_DISABLED, uploadResult.code)
77+
}
78+
6279
@Test
6380
fun resume() {
6481
val filePath = createFile("chunkedFile.txt", BIG_FILE_ITERATION * 2)

library/src/main/java/com/owncloud/android/lib/common/operations/ExceptionParser.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ public class ExceptionParser {
3030
private static final String INVALID_PATH_EXCEPTION_STRING = "OC\\Connector\\Sabre\\Exception\\InvalidPath";
3131
private static final String INVALID_PATH_EXCEPTION_UPLOAD_STRING = "OCP\\Files\\InvalidPathException";
3232
private static final String VIRUS_EXCEPTION_STRING = "OCA\\DAV\\Connector\\Sabre\\Exception\\UnsupportedMediaType";
33+
private static final String USER_DISABLED_MESSAGE = "OC\\User\\LoginException: User disabled";
34+
private static final String SERVICE_UNAVAILABLE_STRING = "Sabre\\DAV\\Exception\\ServiceUnavailable";
3335

3436
// No namespaces
3537
private static final String ns = null;
@@ -76,6 +78,10 @@ public boolean isVirusException() {
7678
return VIRUS_EXCEPTION_STRING.equalsIgnoreCase(exception) && message.startsWith("Virus");
7779
}
7880

81+
public boolean isUserDisabledException() {
82+
return SERVICE_UNAVAILABLE_STRING.equals(exception) && message.equalsIgnoreCase(USER_DISABLED_MESSAGE);
83+
}
84+
7985
/**
8086
* Parse OCS node
8187
*

library/src/main/java/com/owncloud/android/lib/common/operations/RemoteOperationResult.java

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,8 @@ public enum ResultCode {
130130
VIRUS_DETECTED,
131131
FOLDER_ALREADY_EXISTS,
132132
CANNOT_CREATE_FILE,
133-
LOCKED
133+
LOCKED,
134+
USER_DISABLED
134135
}
135136

136137
private boolean mSuccess = false;
@@ -324,7 +325,9 @@ public RemoteOperationResult(boolean success, OkHttpMethodBase httpMethod) {
324325
public RemoteOperationResult(boolean success, HttpMethod httpMethod) {
325326
this(success, httpMethod.getStatusCode(), httpMethod.getStatusText(), httpMethod.getResponseHeaders());
326327

327-
if (mHttpCode == HttpStatus.SC_BAD_REQUEST || mHttpCode == HttpStatus.SC_UNSUPPORTED_MEDIA_TYPE) {
328+
if (mHttpCode == HttpStatus.SC_BAD_REQUEST ||
329+
mHttpCode == HttpStatus.SC_UNSUPPORTED_MEDIA_TYPE ||
330+
mHttpCode == HttpStatus.SC_SERVICE_UNAVAILABLE) {
328331
try {
329332
String bodyResponse = httpMethod.getResponseBodyAsString();
330333

@@ -339,6 +342,10 @@ public RemoteOperationResult(boolean success, HttpMethod httpMethod) {
339342
mCode = ResultCode.VIRUS_DETECTED;
340343
}
341344

345+
if (xmlParser.isUserDisabledException()) {
346+
mCode = ResultCode.USER_DISABLED;
347+
}
348+
342349
mHttpPhrase = xmlParser.getMessage();
343350
}
344351
} catch (Exception e) {

0 commit comments

Comments
 (0)