1
0
mirror of https://github.com/owncloud/android-library.git synced 2025-06-07 16:06:08 +00:00

add fix for redirect, untested

This commit is contained in:
Christian Schabesberger 2020-09-14 17:47:55 +02:00
parent 8da24c5076
commit 9553de2786

View File

@ -53,7 +53,8 @@ class GetRemoteStatusOperation : RemoteOperation<OwnCloudVersion>() {
val baseUriStr = client.baseUri.toString() val baseUriStr = client.baseUri.toString()
if (baseUriStr.startsWith(HTTP_PREFIX) || baseUriStr.startsWith( if (baseUriStr.startsWith(HTTP_PREFIX) || baseUriStr.startsWith(
HTTPS_PREFIX HTTPS_PREFIX
)) { )
) {
tryConnection(client) tryConnection(client)
} else { } else {
client.baseUri = Uri.parse(HTTPS_PREFIX + baseUriStr) client.baseUri = Uri.parse(HTTPS_PREFIX + baseUriStr)
@ -67,11 +68,18 @@ class GetRemoteStatusOperation : RemoteOperation<OwnCloudVersion>() {
return latestResult 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 { private fun tryConnection(client: OwnCloudClient): Boolean {
var successfulConnection = false var successfulConnection = false
val baseUrlSt = client.baseUri.toString() val baseUrlStr = client.baseUri.toString()
try { 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) setReadTimeout(TRY_CONNECTION_TIMEOUT, TimeUnit.SECONDS)
setConnectionTimeout(TRY_CONNECTION_TIMEOUT, TimeUnit.SECONDS) setConnectionTimeout(TRY_CONNECTION_TIMEOUT, TimeUnit.SECONDS)
} }
@ -89,11 +97,11 @@ class GetRemoteStatusOperation : RemoteOperation<OwnCloudVersion>() {
return successfulConnection return successfulConnection
} }
var redirectedLocation = latestResult.redirectedLocation var redirectedLocation = updateLocationWithRelativePath(baseUrlStr, latestResult.redirectedLocation)
while (!redirectedLocation.isNullOrEmpty() && !latestResult.isSuccess) { while (!redirectedLocation.isNullOrEmpty() && !latestResult.isSuccess) {
isRedirectToNonSecureConnection = isRedirectToNonSecureConnection =
isRedirectToNonSecureConnection || isRedirectToNonSecureConnection ||
(baseUrlSt.startsWith(HTTPS_PREFIX) && redirectedLocation.startsWith( (baseUrlStr.startsWith(HTTPS_PREFIX) && redirectedLocation.startsWith(
HTTP_PREFIX HTTP_PREFIX
)) ))
@ -104,7 +112,7 @@ class GetRemoteStatusOperation : RemoteOperation<OwnCloudVersion>() {
status = client.executeHttpMethod(getMethod) status = client.executeHttpMethod(getMethod)
latestResult = RemoteOperationResult(getMethod) latestResult = RemoteOperationResult(getMethod)
redirectedLocation = latestResult.redirectedLocation redirectedLocation = updateLocationWithRelativePath(redirectedLocation, latestResult.redirectedLocation)
} }
if (isSuccess(status)) { if (isSuccess(status)) {
@ -119,7 +127,7 @@ class GetRemoteStatusOperation : RemoteOperation<OwnCloudVersion>() {
latestResult = if (isRedirectToNonSecureConnection) { latestResult = if (isRedirectToNonSecureConnection) {
RemoteOperationResult(ResultCode.OK_REDIRECT_TO_NON_SECURE_CONNECTION) RemoteOperationResult(ResultCode.OK_REDIRECT_TO_NON_SECURE_CONNECTION)
} else { } 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) else RemoteOperationResult(ResultCode.OK_NO_SSL)
} }
latestResult.data = ocVersion latestResult.data = ocVersion
@ -134,12 +142,12 @@ class GetRemoteStatusOperation : RemoteOperation<OwnCloudVersion>() {
latestResult = RemoteOperationResult(e) latestResult = RemoteOperationResult(e)
} }
when { 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 -> 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 return successfulConnection
} }