Skip to content
This repository was archived by the owner on Mar 19, 2024. It is now read-only.

Commit 91c7900

Browse files
theScrabiabelgardep
authored andcommitted
fix ip address without http prefix not recognized
1 parent b207fd1 commit 91c7900

File tree

4 files changed

+139
-7
lines changed

4 files changed

+139
-7
lines changed
Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,118 @@
1+
package com.owncloud.android.lib
2+
3+
import android.net.Uri
4+
import com.owncloud.android.lib.resources.status.GetRemoteStatusOperation
5+
import com.owncloud.android.lib.resources.status.HttpScheme.HTTPS_PREFIX
6+
import com.owncloud.android.lib.resources.status.HttpScheme.HTTP_PREFIX
7+
import org.junit.Assert.assertEquals
8+
import org.junit.Assert.assertFalse
9+
import org.junit.Assert.assertTrue
10+
import org.junit.Test
11+
12+
class GetRemoteStatusOperationTest {
13+
14+
@Test
15+
fun urlStartingWithHttpMustBeDetectedAsSuch() {
16+
assertTrue(GetRemoteStatusOperation.usesHttpOrHttps(Uri.parse(HTTP_SOME_OWNCLOUD)))
17+
}
18+
19+
@Test
20+
fun urlStartingWithHttpsMustBeDetectedAsSuch() {
21+
assertTrue(GetRemoteStatusOperation.usesHttpOrHttps(Uri.parse(HTTPS_SOME_OWNCLOUD)))
22+
}
23+
24+
@Test
25+
fun incompleteUrlWithoutHttpsOrHttpSchemeMustBeDetectedAsSuch() {
26+
assertFalse(GetRemoteStatusOperation.usesHttpOrHttps(Uri.parse(SOME_OWNCLOUD)))
27+
}
28+
29+
@Test
30+
fun completeUrlWithHttpMustBeReturnedAsSuch() {
31+
assertEquals(
32+
Uri.parse(HTTP_SOME_OWNCLOUD),
33+
GetRemoteStatusOperation.buildFullHttpsUrl(Uri.parse(HTTP_SOME_OWNCLOUD))
34+
)
35+
}
36+
37+
@Test
38+
fun completeUrlWithHttpsMustBeReturnedAsSuch() {
39+
assertEquals(
40+
Uri.parse(HTTPS_SOME_OWNCLOUD),
41+
GetRemoteStatusOperation.buildFullHttpsUrl(Uri.parse(HTTPS_SOME_OWNCLOUD))
42+
)
43+
}
44+
45+
@Test
46+
fun incompleteUrlWithoutHttpPrefixMustBeConvertedToProperUrlWithHttpsPrefix() {
47+
assertEquals(
48+
Uri.parse(HTTPS_SOME_OWNCLOUD),
49+
GetRemoteStatusOperation.buildFullHttpsUrl(Uri.parse(SOME_OWNCLOUD))
50+
)
51+
}
52+
53+
@Test
54+
fun completeUrlWithSubdirAndHttpsMustBeReturnedAsSuch() {
55+
assertEquals(
56+
Uri.parse(HTTPS_SOME_OWNCLOUD_WITH_SUBDIR), GetRemoteStatusOperation.buildFullHttpsUrl(
57+
Uri.parse(
58+
HTTPS_SOME_OWNCLOUD_WITH_SUBDIR
59+
)
60+
)
61+
)
62+
}
63+
64+
@Test
65+
fun incompleteUrlWithSubdirAndWithoutHttpPrefixMustBeConvertedToProperUrlWithHttpsPrefix() {
66+
assertEquals(
67+
Uri.parse(HTTPS_SOME_OWNCLOUD_WITH_SUBDIR), GetRemoteStatusOperation.buildFullHttpsUrl(
68+
Uri.parse(
69+
SOME_OWNCLOUD_WITH_SUBDIR
70+
)
71+
)
72+
)
73+
}
74+
75+
@Test
76+
fun ipMustBeConvertedToProperUrl() {
77+
assertEquals(Uri.parse(HTTPS_SOME_IP), GetRemoteStatusOperation.buildFullHttpsUrl(Uri.parse(SOME_IP)))
78+
}
79+
80+
@Test
81+
fun urlContainingIpAndHttpPrefixMustBeReturnedAsSuch() {
82+
assertEquals(Uri.parse(HTTP_SOME_IP), GetRemoteStatusOperation.buildFullHttpsUrl(Uri.parse(HTTP_SOME_IP)))
83+
}
84+
85+
@Test
86+
fun ipAndPortMustBeConvertedToProperUrl() {
87+
assertEquals(
88+
Uri.parse(HTTPS_SOME_IP_WITH_PORT),
89+
GetRemoteStatusOperation.buildFullHttpsUrl(Uri.parse(SOME_IP_WITH_PORT))
90+
)
91+
}
92+
93+
@Test
94+
fun urlContainingIpAndPortAndHttpPrefixMustBeReturnedAsSuch() {
95+
assertEquals(
96+
Uri.parse(HTTP_SOME_IP_WITH_PORT),
97+
GetRemoteStatusOperation.buildFullHttpsUrl(Uri.parse(HTTP_SOME_IP_WITH_PORT))
98+
)
99+
}
100+
101+
companion object {
102+
val SOME_OWNCLOUD = "some_owncloud.com"
103+
val HTTP_SOME_OWNCLOUD = "$HTTP_PREFIX$SOME_OWNCLOUD"
104+
val HTTPS_SOME_OWNCLOUD = "$HTTPS_PREFIX$SOME_OWNCLOUD"
105+
106+
val SOME_OWNCLOUD_WITH_SUBDIR = "some_owncloud.com/subdir"
107+
val HTTP_SOME_OWNCLOUD_WITH_SUBDIR = "$HTTP_PREFIX$SOME_OWNCLOUD_WITH_SUBDIR"
108+
val HTTPS_SOME_OWNCLOUD_WITH_SUBDIR = "$HTTPS_PREFIX$SOME_OWNCLOUD_WITH_SUBDIR"
109+
110+
val SOME_IP = "184.123.185.12"
111+
val HTTP_SOME_IP = "$HTTP_PREFIX$SOME_IP"
112+
val HTTPS_SOME_IP = "$HTTPS_PREFIX$SOME_IP"
113+
114+
val SOME_IP_WITH_PORT = "184.123.185.12:5678"
115+
val HTTP_SOME_IP_WITH_PORT = "$HTTP_PREFIX$SOME_IP_WITH_PORT"
116+
val HTTPS_SOME_IP_WITH_PORT = "$HTTPS_PREFIX$SOME_IP_WITH_PORT"
117+
}
118+
}

owncloudComLibrary/src/test/java/com/owncloud/android/lib/StatusRequestorTest.kt renamed to owncloudComLibrary/src/androidTest/java/com/owncloud/android/lib/StatusRequestorTest.kt

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -32,26 +32,25 @@ class StatusRequestorTest {
3232
private val requestor = StatusRequester()
3333

3434
@Test
35-
fun `update location with an absolute path`() {
35+
fun testUpdateLocationWithAnAbsolutePath() {
3636
val newLocation = requestor.updateLocationWithRedirectPath(TEST_DOMAIN, "$TEST_DOMAIN$SUB_PATH")
3737
assertEquals("$TEST_DOMAIN$SUB_PATH", newLocation)
3838
}
3939

4040
@Test
41-
42-
fun `update location with a smaller absolute path`() {
41+
fun updateLocationWithASmallerAbsolutePath() {
4342
val newLocation = requestor.updateLocationWithRedirectPath("$TEST_DOMAIN$SUB_PATH", TEST_DOMAIN)
4443
assertEquals(TEST_DOMAIN, newLocation)
4544
}
4645

4746
@Test
48-
fun `update location with a relative path`() {
47+
fun updateLocationWithARelativePath() {
4948
val newLocation = requestor.updateLocationWithRedirectPath(TEST_DOMAIN, SUB_PATH)
5049
assertEquals("$TEST_DOMAIN$SUB_PATH", newLocation)
5150
}
5251

5352
@Test
54-
fun `update location by replacing the relative path`() {
53+
fun updateLocationByReplacingTheRelativePath() {
5554
val newLocation = requestor.updateLocationWithRedirectPath(
5655
"$TEST_DOMAIN/some/other/subdir", SUB_PATH
5756
)

owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/status/GetRemoteStatusOperation.kt

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,9 @@ import com.owncloud.android.lib.common.OwnCloudClient
2828
import com.owncloud.android.lib.common.operations.RemoteOperation
2929
import com.owncloud.android.lib.common.operations.RemoteOperationResult
3030
import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode
31+
import com.owncloud.android.lib.resources.status.HttpScheme.HTTPS_PREFIX
3132
import com.owncloud.android.lib.resources.status.HttpScheme.HTTPS_SCHEME
33+
import com.owncloud.android.lib.resources.status.HttpScheme.HTTP_PREFIX
3234
import com.owncloud.android.lib.resources.status.HttpScheme.HTTP_SCHEME
3335
import org.json.JSONException
3436
import timber.log.Timber
@@ -44,8 +46,7 @@ import timber.log.Timber
4446
class GetRemoteStatusOperation : RemoteOperation<OwnCloudVersion>() {
4547

4648
override fun run(client: OwnCloudClient): RemoteOperationResult<OwnCloudVersion> {
47-
if (client.baseUri.scheme.isNullOrEmpty())
48-
client.baseUri = Uri.parse("$HTTPS_SCHEME://${client.baseUri}")
49+
client.baseUri = buildFullHttpsUrl(client.baseUri)
4950

5051
var result = tryToConnect(client)
5152
if (result.code != ResultCode.OK_SSL && !result.isSslRecoverableException) {
@@ -70,4 +71,16 @@ class GetRemoteStatusOperation : RemoteOperation<OwnCloudVersion>() {
7071
RemoteOperationResult(e)
7172
}
7273
}
74+
75+
companion object {
76+
fun usesHttpOrHttps(uri: Uri) =
77+
uri.toString().startsWith(HTTPS_PREFIX) || uri.toString().startsWith(HTTP_PREFIX)
78+
79+
fun buildFullHttpsUrl(baseUri: Uri): Uri {
80+
if (usesHttpOrHttps(baseUri)) {
81+
return baseUri
82+
}
83+
return Uri.parse("$HTTPS_PREFIX$baseUri")
84+
}
85+
}
7386
}

owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/status/HttpScheme.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,4 +27,6 @@ package com.owncloud.android.lib.resources.status
2727
object HttpScheme {
2828
const val HTTP_SCHEME = "http"
2929
const val HTTPS_SCHEME = "https"
30+
const val HTTP_PREFIX = "$HTTP_SCHEME://"
31+
const val HTTPS_PREFIX = "$HTTPS_SCHEME://"
3032
}

0 commit comments

Comments
 (0)