From a28c1df23ac3b2ccde4a06c3fedeefea08c46264 Mon Sep 17 00:00:00 2001 From: Christian Schabesberger Date: Mon, 14 Sep 2020 17:47:55 +0200 Subject: [PATCH] add fix for redirect, untested --- .../status/GetRemoteStatusOperation.kt | 28 ++++++++++++------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/status/GetRemoteStatusOperation.kt b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/status/GetRemoteStatusOperation.kt index f47544b1..0a4e3654 100644 --- a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/status/GetRemoteStatusOperation.kt +++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/status/GetRemoteStatusOperation.kt @@ -53,7 +53,8 @@ class GetRemoteStatusOperation : RemoteOperation() { val baseUriStr = client.baseUri.toString() if (baseUriStr.startsWith(HTTP_PREFIX) || baseUriStr.startsWith( HTTPS_PREFIX - )) { + ) + ) { tryConnection(client) } else { client.baseUri = Uri.parse(HTTPS_PREFIX + baseUriStr) @@ -67,11 +68,18 @@ class GetRemoteStatusOperation : RemoteOperation() { return latestResult } + private fun updateLocationWithRelativePath(oldLocation: String, redirectedLocation: String): String { + if(!redirectedLocation.startsWith("/")) + return redirectedLocation + val oldLocation = URL(oldLocation) + return URL(oldLocation.protocol, oldLocation.host, oldLocation.port, redirectedLocation).toString() + } + private fun tryConnection(client: OwnCloudClient): Boolean { var successfulConnection = false - val baseUrlSt = client.baseUri.toString() + val baseUrlStr = client.baseUri.toString() try { - var getMethod = GetMethod(URL(baseUrlSt + OwnCloudClient.STATUS_PATH)).apply { + var getMethod = GetMethod(URL(baseUrlStr + OwnCloudClient.STATUS_PATH)).apply { setReadTimeout(TRY_CONNECTION_TIMEOUT, TimeUnit.SECONDS) setConnectionTimeout(TRY_CONNECTION_TIMEOUT, TimeUnit.SECONDS) } @@ -89,11 +97,11 @@ class GetRemoteStatusOperation : RemoteOperation() { return successfulConnection } - var redirectedLocation = latestResult.redirectedLocation + var redirectedLocation = updateLocationWithRelativePath(baseUrlStr, latestResult.redirectedLocation) while (!redirectedLocation.isNullOrEmpty() && !latestResult.isSuccess) { isRedirectToNonSecureConnection = isRedirectToNonSecureConnection || - (baseUrlSt.startsWith(HTTPS_PREFIX) && redirectedLocation.startsWith( + (baseUrlStr.startsWith(HTTPS_PREFIX) && redirectedLocation.startsWith( HTTP_PREFIX )) @@ -104,7 +112,7 @@ class GetRemoteStatusOperation : RemoteOperation() { status = client.executeHttpMethod(getMethod) latestResult = RemoteOperationResult(getMethod) - redirectedLocation = latestResult.redirectedLocation + redirectedLocation = updateLocationWithRelativePath(redirectedLocation, latestResult.redirectedLocation) } if (isSuccess(status)) { @@ -119,7 +127,7 @@ class GetRemoteStatusOperation : RemoteOperation() { latestResult = if (isRedirectToNonSecureConnection) { RemoteOperationResult(ResultCode.OK_REDIRECT_TO_NON_SECURE_CONNECTION) } else { - if (baseUrlSt.startsWith(HTTPS_PREFIX)) RemoteOperationResult(ResultCode.OK_SSL) + if (baseUrlStr.startsWith(HTTPS_PREFIX)) RemoteOperationResult(ResultCode.OK_SSL) else RemoteOperationResult(ResultCode.OK_NO_SSL) } latestResult.data = ocVersion @@ -134,12 +142,12 @@ class GetRemoteStatusOperation : RemoteOperation() { latestResult = RemoteOperationResult(e) } when { - latestResult.isSuccess -> Timber.i("Connection check at $baseUrlSt successful: ${latestResult.logMessage}") + latestResult.isSuccess -> Timber.i("Connection check at $baseUrlStr successful: ${latestResult.logMessage}") latestResult.isException -> - Timber.e(latestResult.exception, "Connection check at $baseUrlSt: ${latestResult.logMessage}") + Timber.e(latestResult.exception, "Connection check at $baseUrlStr: ${latestResult.logMessage}") - else -> Timber.e("Connection check at $baseUrlSt failed: ${latestResult.logMessage}") + else -> Timber.e("Connection check at $baseUrlStr failed: ${latestResult.logMessage}") } return successfulConnection }