Skip to content

Commit d021d74

Browse files
wip
Signed-off-by: tobiasKaminsky <[email protected]>
1 parent faa485d commit d021d74

16 files changed

+604
-85
lines changed

library/src/androidTest/java/com/nextcloud/android/lib/resources/dashboard/DashboardGetWidgetItemsRemoteOperationIT.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ class DashboardGetWidgetItemsRemoteOperationIT : AbstractIT() {
2323
testOnlyOnServer(NextcloudVersion.nextcloud_25)
2424

2525
// create folder to have some content
26-
assertTrue(CreateFolderRemoteOperation("/testFolder", false).execute(nextcloudClient2).isSuccess)
26+
assertTrue(CreateFolderRemoteOperation("/testFolder", false).execute(client2).isSuccess)
2727
assertTrue(
2828
CreateShareRemoteOperation(
2929
"/testFolder",
@@ -32,7 +32,7 @@ class DashboardGetWidgetItemsRemoteOperationIT : AbstractIT() {
3232
false,
3333
"",
3434
OCShare.MAXIMUM_PERMISSIONS_FOR_FOLDER
35-
).execute(nextcloudClient2)
35+
).execute(client2)
3636
.isSuccess
3737
)
3838

library/src/androidTest/java/com/owncloud/android/AbstractIT.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ private static void testConnection() throws KeyStoreException,
149149
InterruptedException {
150150
GetStatusRemoteOperation getStatus = new GetStatusRemoteOperation(context);
151151

152-
RemoteOperationResult result = getStatus.execute(nextcloudClient);
152+
RemoteOperationResult result = getStatus.execute(client);
153153

154154
if (result.isSuccess()) {
155155
Log_OC.d("AbstractIT", "Connection to server successful");

library/src/main/java/com/owncloud/android/lib/resources/e2ee/GetMetadataRemoteOperation.java

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,14 @@
77
*/
88
package com.owncloud.android.lib.resources.e2ee;
99

10-
import com.nextcloud.common.NextcloudClient;
11-
import com.nextcloud.operations.GetMethod;
10+
import com.owncloud.android.lib.common.OwnCloudClient;
1211
import com.owncloud.android.lib.common.operations.RemoteOperation;
1312
import com.owncloud.android.lib.common.operations.RemoteOperationResult;
1413
import com.owncloud.android.lib.common.utils.Log_OC;
1514

15+
import org.apache.commons.httpclient.Header;
1616
import org.apache.commons.httpclient.HttpStatus;
17+
import org.apache.commons.httpclient.methods.GetMethod;
1718
import org.json.JSONObject;
1819

1920

@@ -24,6 +25,8 @@
2425
public class GetMetadataRemoteOperation extends RemoteOperation<MetadataResponse> {
2526

2627
private static final String TAG = GetMetadataRemoteOperation.class.getSimpleName();
28+
private static final int SYNC_READ_TIMEOUT = 40000;
29+
private static final int SYNC_CONNECTION_TIMEOUT = 5000;
2730
private static final String METADATA_V1_URL = "/ocs/v2.php/apps/end_to_end_encryption/api/v1/meta-data/";
2831
private static final String METADATA_V2_URL = "/ocs/v2.php/apps/end_to_end_encryption/api/v2/meta-data/";
2932

@@ -46,29 +49,32 @@ public GetMetadataRemoteOperation(long fileId) {
4649
* @param client Client object
4750
*/
4851
@Override
49-
public RemoteOperationResult<MetadataResponse> run(NextcloudClient client) {
50-
com.nextcloud.operations.GetMethod getMethod = null;
52+
protected RemoteOperationResult<MetadataResponse> run(OwnCloudClient client) {
53+
GetMethod getMethod = null;
5154
RemoteOperationResult<MetadataResponse> result;
5255

5356
try {
5457
// remote request
55-
getMethod = new com.nextcloud.operations.GetMethod(client.getBaseUri() + METADATA_V2_URL + fileId + JSON_FORMAT, true);
58+
getMethod = new GetMethod(client.getBaseUri() + METADATA_V2_URL + fileId + JSON_FORMAT);
59+
getMethod.addRequestHeader(OCS_API_HEADER, OCS_API_HEADER_VALUE);
5660

57-
int status = client.execute(getMethod);
61+
int status = client.executeMethod(getMethod, SYNC_READ_TIMEOUT, SYNC_CONNECTION_TIMEOUT);
5862

5963
if (status == HttpStatus.SC_NOT_FOUND || status == HttpStatus.SC_INTERNAL_SERVER_ERROR) {
6064
// retry with v1
61-
getMethod = new GetMethod(client.getBaseUri() + METADATA_V1_URL + fileId + JSON_FORMAT, true);
65+
getMethod = new GetMethod(client.getBaseUri() + METADATA_V1_URL + fileId + JSON_FORMAT);
66+
getMethod.addRequestHeader(OCS_API_HEADER, OCS_API_HEADER_VALUE);
6267

63-
status = client.execute(getMethod);
68+
status = client.executeMethod(getMethod, SYNC_READ_TIMEOUT, SYNC_CONNECTION_TIMEOUT);
6469
}
6570

6671
if (status == HttpStatus.SC_OK) {
6772
String response = getMethod.getResponseBodyAsString();
68-
String signature = getMethod.getResponseHeader(HEADER_SIGNATURE);
73+
Header signatureHeader = getMethod.getResponseHeader(HEADER_SIGNATURE);
6974

70-
if (signature == null) {
71-
signature = "";
75+
String signature = "";
76+
if (signatureHeader != null) {
77+
signature = signatureHeader.getValue();
7278
}
7379

7480
// Parse the response
@@ -84,6 +90,7 @@ public RemoteOperationResult<MetadataResponse> run(NextcloudClient client) {
8490
result.setResultData(metadataResponse);
8591
} else {
8692
result = new RemoteOperationResult<>(false, getMethod);
93+
client.exhaustResponse(getMethod.getResponseBodyAsStream());
8794
}
8895
} catch (Exception e) {
8996
result = new RemoteOperationResult<>(e);

library/src/main/java/com/owncloud/android/lib/resources/e2ee/LockFileRemoteOperation.java

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,24 +7,24 @@
77
*/
88
package com.owncloud.android.lib.resources.e2ee;
99

10-
import com.nextcloud.common.NextcloudClient;
11-
import com.nextcloud.operations.PostMethod;
10+
import com.owncloud.android.lib.common.OwnCloudClient;
1211
import com.owncloud.android.lib.common.operations.RemoteOperation;
1312
import com.owncloud.android.lib.common.operations.RemoteOperationResult;
1413
import com.owncloud.android.lib.common.utils.Log_OC;
1514

1615
import org.apache.commons.httpclient.HttpStatus;
16+
import org.apache.commons.httpclient.methods.Utf8PostMethod;
1717
import org.json.JSONObject;
1818

19-
import okhttp3.RequestBody;
20-
2119

2220
/**
2321
* Lock a file
2422
*/
2523
public class LockFileRemoteOperation extends RemoteOperation<String> {
2624

2725
private static final String TAG = LockFileRemoteOperation.class.getSimpleName();
26+
private static final int SYNC_READ_TIMEOUT = 40000;
27+
private static final int SYNC_CONNECTION_TIMEOUT = 5000;
2828
private static final String LOCK_FILE_URL = "/ocs/v2.php/apps/end_to_end_encryption/api/v1/lock/";
2929

3030
private static final String COUNTER_HEADER = "X-NC-E2EE-COUNTER";
@@ -52,22 +52,22 @@ public LockFileRemoteOperation(long localId) {
5252
* @param client Client object
5353
*/
5454
@Override
55-
public RemoteOperationResult<String> run(NextcloudClient client) {
55+
protected RemoteOperationResult<String> run(OwnCloudClient client) {
5656
RemoteOperationResult<String> result;
57-
PostMethod postMethod = null;
57+
Utf8PostMethod postMethod = null;
5858

5959
try {
60-
RequestBody requestBody = RequestBody.create(new byte[] {});
61-
62-
postMethod = new PostMethod(client.getBaseUri() + LOCK_FILE_URL + localId + JSON_FORMAT, true, requestBody);
60+
postMethod = new Utf8PostMethod(client.getBaseUri() + LOCK_FILE_URL + localId + JSON_FORMAT);
6361

62+
// remote request
63+
postMethod.addRequestHeader(OCS_API_HEADER, OCS_API_HEADER_VALUE);
6464
postMethod.addRequestHeader(CONTENT_TYPE, FORM_URLENCODED);
6565

6666
if (counter > 0) {
6767
postMethod.addRequestHeader(COUNTER_HEADER, String.valueOf(counter));
6868
}
6969

70-
int status = client.execute(postMethod);
70+
int status = client.executeMethod(postMethod, SYNC_READ_TIMEOUT, SYNC_CONNECTION_TIMEOUT);
7171

7272
if (status == HttpStatus.SC_OK) {
7373
String response = postMethod.getResponseBodyAsString();
@@ -83,6 +83,7 @@ public RemoteOperationResult<String> run(NextcloudClient client) {
8383
result.setResultData(token);
8484
} else {
8585
result = new RemoteOperationResult<>(false, postMethod);
86+
client.exhaustResponse(postMethod.getResponseBodyAsStream());
8687
}
8788
} catch (Exception e) {
8889
result = new RemoteOperationResult<>(e);

library/src/main/java/com/owncloud/android/lib/resources/e2ee/UnlockFileRemoteOperation.java

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,13 @@
77
*/
88
package com.owncloud.android.lib.resources.e2ee;
99

10-
import com.nextcloud.common.NextcloudClient;
11-
import com.nextcloud.operations.DeleteMethod;
10+
import com.owncloud.android.lib.common.OwnCloudClient;
1211
import com.owncloud.android.lib.common.operations.RemoteOperation;
1312
import com.owncloud.android.lib.common.operations.RemoteOperationResult;
1413
import com.owncloud.android.lib.common.utils.Log_OC;
1514

1615
import org.apache.commons.httpclient.HttpStatus;
16+
import org.apache.commons.httpclient.methods.DeleteMethod;
1717

1818

1919
/**
@@ -22,6 +22,8 @@
2222
public class UnlockFileRemoteOperation extends RemoteOperation<Void> {
2323

2424
private static final String TAG = UnlockFileRemoteOperation.class.getSimpleName();
25+
private static final int SYNC_READ_TIMEOUT = 40000;
26+
private static final int SYNC_CONNECTION_TIMEOUT = 5000;
2527
private static final String LOCK_FILE_URL = "/ocs/v2.php/apps/end_to_end_encryption/api/v2/lock/";
2628

2729
private final long localId;
@@ -39,19 +41,22 @@ public UnlockFileRemoteOperation(long localId, String token) {
3941
* @param client Client object
4042
*/
4143
@Override
42-
public RemoteOperationResult<Void> run(NextcloudClient client) {
44+
protected RemoteOperationResult<Void> run(OwnCloudClient client) {
4345
RemoteOperationResult<Void> result;
44-
com.nextcloud.operations.DeleteMethod deleteMethod = null;
46+
DeleteMethod deleteMethod = null;
4547

4648
try {
4749
// remote request
48-
deleteMethod = new DeleteMethod(client.getBaseUri() + LOCK_FILE_URL + localId, true);
50+
deleteMethod = new DeleteMethod(client.getBaseUri() + LOCK_FILE_URL + localId);
51+
deleteMethod.addRequestHeader(OCS_API_HEADER, OCS_API_HEADER_VALUE);
4952
deleteMethod.addRequestHeader(CONTENT_TYPE, FORM_URLENCODED);
5053
deleteMethod.addRequestHeader(E2E_TOKEN, token);
5154

52-
int status = client.execute(deleteMethod);
55+
int status = client.executeMethod(deleteMethod, SYNC_READ_TIMEOUT, SYNC_CONNECTION_TIMEOUT);
5356

5457
result = new RemoteOperationResult<>(status == HttpStatus.SC_OK, deleteMethod);
58+
59+
client.exhaustResponse(deleteMethod.getResponseBodyAsStream());
5560
} catch (Exception e) {
5661
result = new RemoteOperationResult<>(e);
5762
Log_OC.e(TAG, "Unlock file with id " + localId + " failed: " + result.getLogMessage(),

library/src/main/java/com/owncloud/android/lib/resources/files/ExistenceCheckRemoteOperation.java

Lines changed: 26 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -8,25 +8,32 @@
88

99
import android.content.Context;
1010

11-
import com.nextcloud.common.NextcloudClient;
12-
import com.nextcloud.operations.HeadMethod;
11+
import com.owncloud.android.lib.common.OwnCloudAnonymousCredentials;
12+
import com.owncloud.android.lib.common.OwnCloudClient;
1313
import com.owncloud.android.lib.common.network.RedirectionPath;
1414
import com.owncloud.android.lib.common.operations.RemoteOperation;
1515
import com.owncloud.android.lib.common.operations.RemoteOperationResult;
1616
import com.owncloud.android.lib.common.utils.Log_OC;
1717

1818
import org.apache.commons.httpclient.HttpStatus;
19+
import org.apache.commons.httpclient.methods.HeadMethod;
1920

2021
/**
2122
* Operation to check the existence or absence of a path in a remote server.
2223
*
2324
* @author David A. Velasco
2425
*/
25-
public class ExistenceCheckRemoteOperation extends RemoteOperation<Void> {
26-
private static final String TAG = ExistenceCheckRemoteOperation.class.getSimpleName();
26+
public class ExistenceCheckRemoteOperation extends RemoteOperation {
27+
28+
/**
29+
* Maximum time to wait for a response from the server in MILLISECONDs.
30+
*/
31+
public static final int TIMEOUT = 50000;
2732

28-
private final String mPath;
29-
private final boolean mSuccessIfAbsent;
33+
private static final String TAG = ExistenceCheckRemoteOperation.class.getSimpleName();
34+
35+
private String mPath;
36+
private boolean mSuccessIfAbsent;
3037

3138
/** Sequence of redirections followed. Available only after executing the operation */
3239
private RedirectionPath mRedirectionPath = null;
@@ -58,21 +65,26 @@ public ExistenceCheckRemoteOperation(String remotePath, Context context, boolean
5865
}
5966

6067
@Override
61-
public RemoteOperationResult<Void> run(NextcloudClient client) {
62-
RemoteOperationResult<Void> result;
63-
com.nextcloud.operations.HeadMethod head = null;
64-
boolean previousFollowRedirects = client.getFollowRedirects();
68+
protected RemoteOperationResult run(OwnCloudClient client) {
69+
RemoteOperationResult result = null;
70+
HeadMethod head = null;
71+
boolean previousFollowRedirects = client.isFollowRedirects();
6572
try {
66-
head = new HeadMethod(client.getFilesDavUri(mPath), false);
73+
if (client.getCredentials() instanceof OwnCloudAnonymousCredentials) {
74+
head = new HeadMethod(client.getDavUri().toString());
75+
} else {
76+
head = new HeadMethod(client.getFilesDavUri(mPath));
77+
}
6778
client.setFollowRedirects(false);
68-
int status = client.execute(head);
79+
int status = client.executeMethod(head, TIMEOUT, TIMEOUT);
6980
if (previousFollowRedirects) {
7081
mRedirectionPath = client.followRedirection(head);
7182
status = mRedirectionPath.getLastStatus();
7283
}
84+
client.exhaustResponse(head.getResponseBodyAsStream());
7385
boolean success = (status == HttpStatus.SC_OK && !mSuccessIfAbsent) ||
7486
(status == HttpStatus.SC_NOT_FOUND && mSuccessIfAbsent);
75-
result = new RemoteOperationResult<>(
87+
result = new RemoteOperationResult(
7688
success,
7789
status,
7890
head.getStatusText(),
@@ -83,7 +95,7 @@ public RemoteOperationResult<Void> run(NextcloudClient client) {
8395
"finished with HTTP status " + status + (!success ? "(FAIL)" : ""));
8496

8597
} catch (Exception e) {
86-
result = new RemoteOperationResult<>(e);
98+
result = new RemoteOperationResult(e);
8799
Log_OC.e(TAG, "Existence check for " + client.getFilesDavUri(mPath) + " targeting for " +
88100
(mSuccessIfAbsent ? " absence " : " existence ") + ": " +
89101
result.getLogMessage(), result.getException());

library/src/main/java/com/owncloud/android/lib/resources/files/RenameFileRemoteOperation.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
*/
77
package com.owncloud.android.lib.resources.files;
88

9-
import com.nextcloud.common.NextcloudClient;
109
import com.owncloud.android.lib.common.OwnCloudClient;
1110
import com.owncloud.android.lib.common.operations.RemoteOperation;
1211
import com.owncloud.android.lib.common.operations.RemoteOperationResult;
@@ -76,10 +75,8 @@ protected RemoteOperationResult run(OwnCloudClient client) {
7675
}
7776

7877
// check if a file with the new name already exists
79-
NextcloudClient nextcloudClient = client.toNextcloudClient();
80-
8178
RemoteOperationResult existenceResult = new ExistenceCheckRemoteOperation(mNewRemotePath, false)
82-
.execute(nextcloudClient);
79+
.execute(client);
8380
if (existenceResult.isSuccess()) {
8481
return new RemoteOperationResult(ResultCode.INVALID_OVERWRITE);
8582
}

0 commit comments

Comments
 (0)