Skip to content

Commit 353b9f5

Browse files
tobiasKaminskyalperozturk96
authored andcommitted
Handle user disabled exception as its own result code
Signed-off-by: tobiasKaminsky <[email protected]>
1 parent 5a31f24 commit 353b9f5

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
@@ -29,9 +29,13 @@ package com.owncloud.android.lib.resources.files
2929

3030
import android.os.Build
3131
import com.owncloud.android.AbstractIT
32+
import com.owncloud.android.lib.common.OwnCloudBasicCredentials
33+
import com.owncloud.android.lib.common.OwnCloudClientFactory
34+
import com.owncloud.android.lib.common.operations.RemoteOperationResult
3235
import com.owncloud.android.lib.common.utils.Log_OC
3336
import com.owncloud.android.lib.resources.files.model.RemoteFile
3437
import junit.framework.TestCase.assertEquals
38+
import org.junit.Assert.assertFalse
3539
import org.junit.Assert.assertNotNull
3640
import org.junit.Assert.assertTrue
3741
import org.junit.Test
@@ -42,6 +46,7 @@ import java.nio.file.attribute.BasicFileAttributes
4246
import java.util.concurrent.TimeUnit
4347

4448
class UploadFileRemoteOperationIT : AbstractIT() {
49+
@Throws(IOException::class)
4550
@Test
4651
fun creationTime() {
4752
val imageFile = getFile("imageFile.png")
@@ -50,6 +55,7 @@ class UploadFileRemoteOperationIT : AbstractIT() {
5055
assertTrue(creationDate!! > (System.currentTimeMillis() / MILLI_TO_SECOND) - TIME_OFFSET)
5156
}
5257

58+
@Throws(IOException::class)
5359
@Test
5460
fun upload() {
5561
// create file
@@ -100,6 +106,34 @@ class UploadFileRemoteOperationIT : AbstractIT() {
100106
)
101107
}
102108

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

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

+17
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,16 @@
2828
package com.owncloud.android.lib.resources.files.webdav
2929

3030
import com.owncloud.android.AbstractIT
31+
import com.owncloud.android.lib.common.OwnCloudBasicCredentials
32+
import com.owncloud.android.lib.common.OwnCloudClientFactory
3133
import com.owncloud.android.lib.common.network.WebdavEntry
3234
import com.owncloud.android.lib.common.network.WebdavUtils
3335
import com.owncloud.android.lib.common.operations.RemoteOperationResult
3436
import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode
3537
import com.owncloud.android.lib.resources.files.ChunkedFileUploadRemoteOperation
3638
import junit.framework.TestCase
39+
import junit.framework.TestCase.assertEquals
40+
import junit.framework.TestCase.assertFalse
3741
import junit.framework.TestCase.assertNotNull
3842
import org.apache.jackrabbit.webdav.client.methods.PropFindMethod
3943
import org.junit.Test
@@ -79,6 +83,19 @@ class ChunkedFileUploadRemoteOperationIT : AbstractIT() {
7983
TestCase.assertSame(ResultCode.CANCELLED, uploadResult?.code)
8084
}
8185

86+
@Test
87+
fun uploadWithDisabledUser() {
88+
// use disabled user
89+
val client3 = OwnCloudClientFactory.createOwnCloudClient(url, context, true)
90+
client3.credentials = OwnCloudBasicCredentials("disabled", "disabled")
91+
92+
val sut = genLargeUpload(true)
93+
val uploadResult = sut.execute(client3)
94+
95+
assertFalse(uploadResult.isSuccess)
96+
assertEquals(ResultCode.USER_DISABLED, uploadResult.code)
97+
}
98+
8299
@Test
83100
fun resume() {
84101
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)