Skip to content

Commit 6e70857

Browse files
tobiasKaminskyAndyScherzinger
authored andcommitted
Handle user disabled exception as its own result code
Signed-off-by: tobiasKaminsky <[email protected]>
1 parent 2b1da4c commit 6e70857

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

+34
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,13 @@ package com.owncloud.android.lib.resources.files
2323

2424
import android.os.Build
2525
import com.owncloud.android.AbstractIT
26+
import com.owncloud.android.lib.common.OwnCloudBasicCredentials
27+
import com.owncloud.android.lib.common.OwnCloudClientFactory
28+
import com.owncloud.android.lib.common.operations.RemoteOperationResult
2629
import com.owncloud.android.lib.common.utils.Log_OC
2730
import com.owncloud.android.lib.resources.files.model.RemoteFile
2831
import junit.framework.TestCase.assertEquals
32+
import org.junit.Assert.assertFalse
2933
import org.junit.Assert.assertNotNull
3034
import org.junit.Assert.assertTrue
3135
import org.junit.Test
@@ -36,6 +40,7 @@ import java.nio.file.attribute.BasicFileAttributes
3640
import java.util.concurrent.TimeUnit
3741

3842
class UploadFileRemoteOperationIT : AbstractIT() {
43+
@Throws(IOException::class)
3944
@Test
4045
fun creationTime() {
4146
val imageFile = getFile("imageFile.png")
@@ -44,6 +49,7 @@ class UploadFileRemoteOperationIT : AbstractIT() {
4449
assertTrue(creationDate!! > (System.currentTimeMillis() / MILLI_TO_SECOND) - TIME_OFFSET)
4550
}
4651

52+
@Throws(IOException::class)
4753
@Test
4854
fun upload() {
4955
// create file
@@ -94,6 +100,34 @@ class UploadFileRemoteOperationIT : AbstractIT() {
94100
)
95101
}
96102

103+
@Throws(IOException::class)
104+
@Test
105+
fun uploadWithDisabledUser() {
106+
// use disabled user
107+
val client3 = OwnCloudClientFactory.createOwnCloudClient(url, context, true)
108+
client3.credentials = OwnCloudBasicCredentials("disabled", "disabled")
109+
110+
// create file
111+
val filePath = createFile("text")
112+
val remotePath = "/test.md"
113+
114+
val creationTimestamp = getCreationTimestamp(File(filePath))
115+
val sut =
116+
UploadFileRemoteOperation(
117+
filePath,
118+
remotePath,
119+
"text/markdown",
120+
"",
121+
RANDOM_MTIME,
122+
creationTimestamp,
123+
true
124+
)
125+
126+
val uploadResult = sut.execute(client3)
127+
assertFalse(uploadResult.isSuccess)
128+
assertEquals(RemoteOperationResult.ResultCode.USER_DISABLED, uploadResult.code)
129+
}
130+
97131
private fun getCreationTimestamp(file: File): Long? {
98132
return if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) {
99133
return null

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

+17
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,16 @@
2222
package com.owncloud.android.lib.resources.files.webdav
2323

2424
import com.owncloud.android.AbstractIT
25+
import com.owncloud.android.lib.common.OwnCloudBasicCredentials
26+
import com.owncloud.android.lib.common.OwnCloudClientFactory
2527
import com.owncloud.android.lib.common.network.WebdavEntry
2628
import com.owncloud.android.lib.common.network.WebdavUtils
2729
import com.owncloud.android.lib.common.operations.RemoteOperationResult
2830
import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode
2931
import com.owncloud.android.lib.resources.files.ChunkedFileUploadRemoteOperation
3032
import junit.framework.TestCase
33+
import junit.framework.TestCase.assertEquals
34+
import junit.framework.TestCase.assertFalse
3135
import junit.framework.TestCase.assertNotNull
3236
import org.apache.jackrabbit.webdav.client.methods.PropFindMethod
3337
import org.junit.Test
@@ -73,6 +77,19 @@ class ChunkedFileUploadRemoteOperationIT : AbstractIT() {
7377
TestCase.assertSame(ResultCode.CANCELLED, uploadResult?.code)
7478
}
7579

80+
@Test
81+
fun uploadWithDisabledUser() {
82+
// use disabled user
83+
val client3 = OwnCloudClientFactory.createOwnCloudClient(url, context, true)
84+
client3.credentials = OwnCloudBasicCredentials("disabled", "disabled")
85+
86+
val sut = genLargeUpload(true)
87+
val uploadResult = sut.execute(client3)
88+
89+
assertFalse(uploadResult.isSuccess)
90+
assertEquals(ResultCode.USER_DISABLED, uploadResult.code)
91+
}
92+
7693
@Test
7794
fun resume() {
7895
val filePath = createFile("chunkedFile.txt", BIG_FILE_ITERATION * 2)

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

+6
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,8 @@ public class ExceptionParser {
4646
private static final String INVALID_PATH_EXCEPTION_STRING = "OC\\Connector\\Sabre\\Exception\\InvalidPath";
4747
private static final String INVALID_PATH_EXCEPTION_UPLOAD_STRING = "OCP\\Files\\InvalidPathException";
4848
private static final String VIRUS_EXCEPTION_STRING = "OCA\\DAV\\Connector\\Sabre\\Exception\\UnsupportedMediaType";
49+
private static final String USER_DISABLED_MESSAGE = "OC\\User\\LoginException: User disabled";
50+
private static final String SERVICE_UNAIVALABLE_STRING = "Sabre\\DAV\\Exception\\ServiceUnavailable";
4951

5052
// No namespaces
5153
private static final String ns = null;
@@ -92,6 +94,10 @@ public boolean isVirusException() {
9294
return VIRUS_EXCEPTION_STRING.equalsIgnoreCase(exception) && message.startsWith("Virus");
9395
}
9496

97+
public boolean isUserDisabledException() {
98+
return SERVICE_UNAIVALABLE_STRING.equals(exception) && message.equalsIgnoreCase(USER_DISABLED_MESSAGE);
99+
}
100+
95101
/**
96102
* Parse OCS node
97103
*

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

+9-2
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,8 @@ public enum ResultCode {
138138
ETAG_UNCHANGED,
139139
VIRUS_DETECTED,
140140
FOLDER_ALREADY_EXISTS,
141-
CANNOT_CREATE_FILE
141+
CANNOT_CREATE_FILE,
142+
USER_DISABLED
142143
}
143144

144145
private boolean mSuccess = false;
@@ -329,7 +330,9 @@ public RemoteOperationResult(boolean success, OkHttpMethodBase httpMethod) {
329330
public RemoteOperationResult(boolean success, HttpMethod httpMethod) {
330331
this(success, httpMethod.getStatusCode(), httpMethod.getStatusText(), httpMethod.getResponseHeaders());
331332

332-
if (mHttpCode == HttpStatus.SC_BAD_REQUEST || mHttpCode == HttpStatus.SC_UNSUPPORTED_MEDIA_TYPE) {
333+
if (mHttpCode == HttpStatus.SC_BAD_REQUEST ||
334+
mHttpCode == HttpStatus.SC_UNSUPPORTED_MEDIA_TYPE ||
335+
mHttpCode == HttpStatus.SC_SERVICE_UNAVAILABLE) {
333336
try {
334337
String bodyResponse = httpMethod.getResponseBodyAsString();
335338

@@ -344,6 +347,10 @@ public RemoteOperationResult(boolean success, HttpMethod httpMethod) {
344347
mCode = ResultCode.VIRUS_DETECTED;
345348
}
346349

350+
if (xmlParser.isUserDisabledException()) {
351+
mCode = ResultCode.USER_DISABLED;
352+
}
353+
347354
mHttpPhrase = xmlParser.getMessage();
348355
}
349356
} catch (Exception e) {

0 commit comments

Comments
 (0)