From 884820e6c62a7bd3d67a9e8a51817f0326e62505 Mon Sep 17 00:00:00 2001 From: Christian Schabesberger Date: Wed, 16 Sep 2020 15:08:28 +0200 Subject: [PATCH] refactor run function --- .../status/GetRemoteStatusOperation.kt | 59 ++++++++----------- 1 file changed, 23 insertions(+), 36 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 d58cfd86..ab344524 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 @@ -35,7 +35,6 @@ import org.json.JSONObject import timber.log.Timber import java.net.URL import java.util.concurrent.TimeUnit -import javax.net.ssl.SSLException /** * Checks if the server is valid @@ -46,26 +45,18 @@ import javax.net.ssl.SSLException * @author Abel GarcĂ­a de Prada */ class GetRemoteStatusOperation : RemoteOperation() { - private lateinit var latestResult: RemoteOperationResult - override fun run(client: OwnCloudClient): RemoteOperationResult { + if (client.baseUri.scheme.isNullOrEmpty()) + client.baseUri = Uri.parse(HTTPS_SCHEME + "://" + client.baseUri.toString()) - val baseUriStr = client.baseUri.toString() - if (baseUriStr.startsWith(HTTP_PREFIX) || baseUriStr.startsWith( - HTTPS_PREFIX - ) - ) { - tryConnection(client) - } else { - client.baseUri = Uri.parse(HTTPS_PREFIX + baseUriStr) - val httpsSuccess = tryConnection(client) - if (!httpsSuccess && !latestResult.isSslRecoverableException) { - Timber.d("Establishing secure connection failed, trying non secure connection") - client.baseUri = Uri.parse(HTTP_PREFIX + baseUriStr) - tryConnection(client) - } + var result = tryToConnect(client) + if (result.code != ResultCode.OK_SSL && !result.isSslRecoverableException) { + Timber.d("Establishing secure connection failed, trying non secure connection") + client.baseUri = client.baseUri.buildUpon().scheme(HTTP_SCHEME).build() + result = tryToConnect(client) } - return latestResult + + return result } fun updateLocationWithRedirectPath(oldLocation: String, redirectedLocation: String): String { @@ -81,7 +72,7 @@ class GetRemoteStatusOperation : RemoteOperation() { redirectedUrl: String ): Boolean { return isConnectionSecure || - (baseUrl.startsWith(HTTPS_PREFIX) && redirectedUrl.startsWith(HTTP_PREFIX)) + (baseUrl.startsWith(HTTPS_SCHEME) && redirectedUrl.startsWith(HTTP_SCHEME)) } private fun getGetMethod(url: String): GetMethod { @@ -126,7 +117,10 @@ class GetRemoteStatusOperation : RemoteOperation() { } } - private fun handleRequestResult(requestResult: RequestResult, baseUrl: String): RemoteOperationResult { + private fun handleRequestResult( + requestResult: RequestResult, + baseUrl: String + ): RemoteOperationResult { if (!isSuccess(requestResult.status)) return RemoteOperationResult(requestResult.getMethod) @@ -142,30 +136,23 @@ class GetRemoteStatusOperation : RemoteOperation() { if (requestResult.redirectedToUnsecureLocation) { RemoteOperationResult(ResultCode.OK_REDIRECT_TO_NON_SECURE_CONNECTION) } else { - if (baseUrl.startsWith(HTTPS_PREFIX)) RemoteOperationResult(ResultCode.OK_SSL) + if (baseUrl.startsWith(HTTPS_SCHEME)) RemoteOperationResult(ResultCode.OK_SSL) else RemoteOperationResult(ResultCode.OK_NO_SSL) } result.data = ocVersion return result } - private fun tryConnection(client: OwnCloudClient): Boolean { + private fun tryToConnect(client: OwnCloudClient): RemoteOperationResult { val baseUrl = client.baseUri.toString() - try { - client.setFollowRedirects(false) - + client.setFollowRedirects(false) + return try { val requestResult = requestAndFollowRedirects(baseUrl) - val operationResult = handleRequestResult(requestResult, baseUrl) - return operationResult.code == ResultCode.OK_SSL || operationResult.code == ResultCode.OK_NO_SSL + handleRequestResult(requestResult, baseUrl) } catch (e: JSONException) { - latestResult = RemoteOperationResult(ResultCode.INSTANCE_NOT_CONFIGURED) - return false + RemoteOperationResult(ResultCode.INSTANCE_NOT_CONFIGURED) } catch (e: Exception) { - latestResult = RemoteOperationResult(e) - return false - } catch (sslE: SSLException) { - latestResult = RemoteOperationResult(sslE) - return false + RemoteOperationResult(e) } } @@ -179,7 +166,7 @@ class GetRemoteStatusOperation : RemoteOperation() { private const val TRY_CONNECTION_TIMEOUT: Long = 5000 private const val NODE_INSTALLED = "installed" private const val NODE_VERSION = "version" - private const val HTTPS_PREFIX = "https://" - private const val HTTP_PREFIX = "http://" + private const val HTTPS_SCHEME = "https" + private const val HTTP_SCHEME = "http" } }