Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Unverified Commit 3870fece authored by Tobias Kaminsky's avatar Tobias Kaminsky Committed by GitHub
Browse files

Merge pull request #1597 from nextcloud/add-optional-session-time-out-duration

Inject Session Time Out To The Remote Operation Constructors
parents 56cbe502 97b8c771
Loading
Loading
Loading
Loading
+14 −3
Original line number Diff line number Diff line
@@ -7,6 +7,9 @@
 */
package com.nextcloud.android.lib.resources.users;


import com.nextcloud.common.SessionTimeOut;
import com.nextcloud.common.SessionTimeOutKt;
import com.owncloud.android.lib.common.OwnCloudClient;
import com.owncloud.android.lib.common.operations.RemoteOperationResult;
import com.owncloud.android.lib.common.utils.Log_OC;
@@ -23,8 +26,6 @@ import org.json.JSONObject;

public class GenerateAppPasswordRemoteOperation extends OCSRemoteOperation {
    private static final String TAG = GenerateAppPasswordRemoteOperation.class.getSimpleName();
    private static final int SYNC_READ_TIMEOUT = 40000;
    private static final int SYNC_CONNECTION_TIMEOUT = 5000;
    private static final String DIRECT_ENDPOINT = "/ocs/v2.php/core/getapppassword";

    // JSON node names
@@ -32,6 +33,16 @@ public class GenerateAppPasswordRemoteOperation extends OCSRemoteOperation {
    private static final String NODE_DATA = "data";
    private static final String NODE_APPPASSWORD = "apppassword";

    private final SessionTimeOut sessionTimeOut;

    public GenerateAppPasswordRemoteOperation() {
        this(SessionTimeOutKt.getDefaultSessionTimeOut());
    }

    public GenerateAppPasswordRemoteOperation(SessionTimeOut sessionTimeOut) {
        this.sessionTimeOut = sessionTimeOut;
    }

    protected RemoteOperationResult run(OwnCloudClient client) {
        RemoteOperationResult result;
        GetMethod getMethod = null;
@@ -42,7 +53,7 @@ public class GenerateAppPasswordRemoteOperation extends OCSRemoteOperation {
            // remote request
            getMethod.addRequestHeader(OCS_API_HEADER, OCS_API_HEADER_VALUE);

            int status = client.executeMethod(getMethod, SYNC_READ_TIMEOUT, SYNC_CONNECTION_TIMEOUT);
            int status = client.executeMethod(getMethod, sessionTimeOut.getReadTimeOut(), sessionTimeOut.getConnectionTimeOut());

            if (status == HttpStatus.SC_OK) {
                String response = getMethod.getResponseBodyAsString();
+13 −7
Original line number Diff line number Diff line
@@ -8,6 +8,8 @@
package com.nextcloud.android.lib.richWorkspace;

import com.google.gson.GsonBuilder;
import com.nextcloud.common.SessionTimeOut;
import com.nextcloud.common.SessionTimeOutKt;
import com.owncloud.android.lib.common.OwnCloudClient;
import com.owncloud.android.lib.common.operations.RemoteOperation;
import com.owncloud.android.lib.common.operations.RemoteOperationResult;
@@ -27,15 +29,19 @@ import java.util.Map;

public class RichWorkspaceDirectEditingRemoteOperation extends RemoteOperation {
    private static final String TAG = RichWorkspaceDirectEditingRemoteOperation.class.getSimpleName();
    private static final int SYNC_READ_TIMEOUT = 40000;
    private static final int SYNC_CONNECTION_TIMEOUT = 5000;
    private static final String DIRECT_ENDPOINT = "/ocs/v2.php/apps/text/workspace/direct";
    private static final String PATH = "path";

    private String path;
    private final SessionTimeOut sessionTimeOut;
    private final String path;

    public RichWorkspaceDirectEditingRemoteOperation(String path) {
        this(path, SessionTimeOutKt.getDefaultSessionTimeOut());
    }

    public RichWorkspaceDirectEditingRemoteOperation(String path, SessionTimeOut sessionTimeOut) {
        this.path = path;
        this.sessionTimeOut = sessionTimeOut;
    }

    protected RemoteOperationResult run(OwnCloudClient client) {
@@ -54,7 +60,7 @@ public class RichWorkspaceDirectEditingRemoteOperation extends RemoteOperation {

            postMethod.setRequestEntity(new StringRequestEntity(json));

            int status = client.executeMethod(postMethod, SYNC_READ_TIMEOUT, SYNC_CONNECTION_TIMEOUT);
            int status = client.executeMethod(postMethod, sessionTimeOut.getReadTimeOut(), sessionTimeOut.getConnectionTimeOut());

            if (status == HttpStatus.SC_OK) {
                String response = postMethod.getResponseBodyAsString();
@@ -63,14 +69,14 @@ public class RichWorkspaceDirectEditingRemoteOperation extends RemoteOperation {
                JSONObject respJSON = new JSONObject(response);
                String url = (String) respJSON.getJSONObject("ocs").getJSONObject("data").get("url");

                result = new RemoteOperationResult(true, postMethod);
                result = new RemoteOperationResult<>(true, postMethod);
                result.setSingleData(url);
            } else {
                result = new RemoteOperationResult(false, postMethod);
                result = new RemoteOperationResult<>(false, postMethod);
                client.exhaustResponse(postMethod.getResponseBodyAsStream());
            }
        } catch (Exception e) {
            result = new RemoteOperationResult(e);
            result = new RemoteOperationResult<>(e);
            Log_OC.e(TAG, "Get edit url for rich workspace failed: " + result.getLogMessage(),
                    result.getException());
        } finally {
+13 −0
Original line number Diff line number Diff line
/*
 * Nextcloud Android Library
 *
 * SPDX-FileCopyrightText: 2024 Alper Ozturk <alper.ozturk@nextcloud.com>
 * SPDX-License-Identifier: MIT
 */

package com.nextcloud.common

data class SessionTimeOut(val readTimeOut: Int, val connectionTimeOut: Int)

@Suppress("Detekt.MagicNumber")
val defaultSessionTimeOut = SessionTimeOut(60000, 15000)
+11 −5
Original line number Diff line number Diff line
@@ -7,6 +7,8 @@
 */
package com.owncloud.android.lib.resources.e2ee;

import com.nextcloud.common.SessionTimeOut;
import com.nextcloud.common.SessionTimeOutKt;
import com.owncloud.android.lib.common.OwnCloudClient;
import com.owncloud.android.lib.common.operations.RemoteOperation;
import com.owncloud.android.lib.common.operations.RemoteOperationResult;
@@ -25,8 +27,6 @@ import org.json.JSONObject;
public class GetMetadataRemoteOperation extends RemoteOperation<MetadataResponse> {

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

@@ -38,11 +38,18 @@ public class GetMetadataRemoteOperation extends RemoteOperation<MetadataResponse

    private final long fileId;

    private final SessionTimeOut sessionTimeOut;

    /**
     * Constructor
     */
    public GetMetadataRemoteOperation(long fileId) {
        this(fileId, SessionTimeOutKt.getDefaultSessionTimeOut());
    }

    public GetMetadataRemoteOperation(long fileId, SessionTimeOut sessionTimeOut) {
        this.fileId = fileId;
        this.sessionTimeOut = sessionTimeOut;
    }

    /**
@@ -58,14 +65,14 @@ public class GetMetadataRemoteOperation extends RemoteOperation<MetadataResponse
            getMethod = new GetMethod(client.getBaseUri() + METADATA_V2_URL + fileId + JSON_FORMAT);
            getMethod.addRequestHeader(OCS_API_HEADER, OCS_API_HEADER_VALUE);

            int status = client.executeMethod(getMethod, SYNC_READ_TIMEOUT, SYNC_CONNECTION_TIMEOUT);
            int status = client.executeMethod(getMethod, sessionTimeOut.getReadTimeOut(), sessionTimeOut.getConnectionTimeOut());

            if (status == HttpStatus.SC_NOT_FOUND || status == HttpStatus.SC_INTERNAL_SERVER_ERROR) {
                // retry with v1
                getMethod = new GetMethod(client.getBaseUri() + METADATA_V1_URL + fileId + JSON_FORMAT);
                getMethod.addRequestHeader(OCS_API_HEADER, OCS_API_HEADER_VALUE);

                status = client.executeMethod(getMethod, SYNC_READ_TIMEOUT, SYNC_CONNECTION_TIMEOUT);
                status = client.executeMethod(getMethod,  sessionTimeOut.getReadTimeOut(), sessionTimeOut.getConnectionTimeOut());
            }

            if (status == HttpStatus.SC_OK) {
@@ -102,5 +109,4 @@ public class GetMetadataRemoteOperation extends RemoteOperation<MetadataResponse
        }
        return result;
    }

}
+19 −6
Original line number Diff line number Diff line
@@ -7,6 +7,8 @@
 */
package com.owncloud.android.lib.resources.e2ee;

import com.nextcloud.common.SessionTimeOut;
import com.nextcloud.common.SessionTimeOutKt;
import com.owncloud.android.lib.common.OwnCloudClient;
import com.owncloud.android.lib.common.operations.RemoteOperation;
import com.owncloud.android.lib.common.operations.RemoteOperationResult;
@@ -23,29 +25,40 @@ import org.json.JSONObject;
public class LockFileRemoteOperation extends RemoteOperation<String> {

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

    private static final String COUNTER_HEADER = "X-NC-E2EE-COUNTER";

    private final long localId;
    private long counter = -1;
    private final long counter;

    private static final long defaultCounter = -1;

    // JSON node names
    private static final String NODE_OCS = "ocs";
    private static final String NODE_DATA = "data";

    private final SessionTimeOut sessionTimeOut;

    /**
     * Constructor
     */
    public LockFileRemoteOperation(long localId, long counter) {
        this.localId = localId;
        this.counter = counter;
        this(localId, counter, SessionTimeOutKt.getDefaultSessionTimeOut());
    }

    public LockFileRemoteOperation(long localId) {
        this(localId, SessionTimeOutKt.getDefaultSessionTimeOut());
    }

    public LockFileRemoteOperation(long localId, SessionTimeOut sessionTimeOut) {
        this(localId, defaultCounter, sessionTimeOut);
    }

    public LockFileRemoteOperation(long localId, long counter, SessionTimeOut sessionTimeOut) {
        this.localId = localId;
        this.counter = counter;
        this.sessionTimeOut = sessionTimeOut;
    }

    /**
@@ -67,7 +80,7 @@ public class LockFileRemoteOperation extends RemoteOperation<String> {
                postMethod.addRequestHeader(COUNTER_HEADER, String.valueOf(counter));
            }

            int status = client.executeMethod(postMethod, SYNC_READ_TIMEOUT, SYNC_CONNECTION_TIMEOUT);
            int status = client.executeMethod(postMethod, sessionTimeOut.getReadTimeOut(), sessionTimeOut.getConnectionTimeOut());

            if (status == HttpStatus.SC_OK) {
                String response = postMethod.getResponseBodyAsString();
Loading