@@ -53,7 +53,8 @@ class GetRemoteStatusOperation : RemoteOperation<OwnCloudVersion>() {
53
53
val baseUriStr = client.baseUri.toString()
54
54
if (baseUriStr.startsWith(HTTP_PREFIX ) || baseUriStr.startsWith(
55
55
HTTPS_PREFIX
56
- )) {
56
+ )
57
+ ) {
57
58
tryConnection(client)
58
59
} else {
59
60
client.baseUri = Uri .parse(HTTPS_PREFIX + baseUriStr)
@@ -67,11 +68,18 @@ class GetRemoteStatusOperation : RemoteOperation<OwnCloudVersion>() {
67
68
return latestResult
68
69
}
69
70
71
+ private fun updateLocationWithRelativePath (oldLocation : String , redirectedLocation : String ): String {
72
+ if (! redirectedLocation.startsWith(" /" ))
73
+ return redirectedLocation
74
+ val oldLocation = URL (oldLocation)
75
+ return URL (oldLocation.protocol, oldLocation.host, oldLocation.port, redirectedLocation).toString()
76
+ }
77
+
70
78
private fun tryConnection (client : OwnCloudClient ): Boolean {
71
79
var successfulConnection = false
72
- val baseUrlSt = client.baseUri.toString()
80
+ val baseUrlStr = client.baseUri.toString()
73
81
try {
74
- var getMethod = GetMethod (URL (baseUrlSt + OwnCloudClient .STATUS_PATH )).apply {
82
+ var getMethod = GetMethod (URL (baseUrlStr + OwnCloudClient .STATUS_PATH )).apply {
75
83
setReadTimeout(TRY_CONNECTION_TIMEOUT , TimeUnit .SECONDS )
76
84
setConnectionTimeout(TRY_CONNECTION_TIMEOUT , TimeUnit .SECONDS )
77
85
}
@@ -89,11 +97,11 @@ class GetRemoteStatusOperation : RemoteOperation<OwnCloudVersion>() {
89
97
return successfulConnection
90
98
}
91
99
92
- var redirectedLocation = latestResult.redirectedLocation
100
+ var redirectedLocation = updateLocationWithRelativePath(baseUrlStr, latestResult.redirectedLocation)
93
101
while (! redirectedLocation.isNullOrEmpty() && ! latestResult.isSuccess) {
94
102
isRedirectToNonSecureConnection =
95
103
isRedirectToNonSecureConnection ||
96
- (baseUrlSt .startsWith(HTTPS_PREFIX ) && redirectedLocation.startsWith(
104
+ (baseUrlStr .startsWith(HTTPS_PREFIX ) && redirectedLocation.startsWith(
97
105
HTTP_PREFIX
98
106
))
99
107
@@ -104,7 +112,7 @@ class GetRemoteStatusOperation : RemoteOperation<OwnCloudVersion>() {
104
112
105
113
status = client.executeHttpMethod(getMethod)
106
114
latestResult = RemoteOperationResult (getMethod)
107
- redirectedLocation = latestResult.redirectedLocation
115
+ redirectedLocation = updateLocationWithRelativePath(redirectedLocation, latestResult.redirectedLocation)
108
116
}
109
117
110
118
if (isSuccess(status)) {
@@ -119,7 +127,7 @@ class GetRemoteStatusOperation : RemoteOperation<OwnCloudVersion>() {
119
127
latestResult = if (isRedirectToNonSecureConnection) {
120
128
RemoteOperationResult (ResultCode .OK_REDIRECT_TO_NON_SECURE_CONNECTION )
121
129
} else {
122
- if (baseUrlSt .startsWith(HTTPS_PREFIX )) RemoteOperationResult (ResultCode .OK_SSL )
130
+ if (baseUrlStr .startsWith(HTTPS_PREFIX )) RemoteOperationResult (ResultCode .OK_SSL )
123
131
else RemoteOperationResult (ResultCode .OK_NO_SSL )
124
132
}
125
133
latestResult.data = ocVersion
@@ -134,12 +142,12 @@ class GetRemoteStatusOperation : RemoteOperation<OwnCloudVersion>() {
134
142
latestResult = RemoteOperationResult (e)
135
143
}
136
144
when {
137
- latestResult.isSuccess -> Timber .i(" Connection check at $baseUrlSt successful: ${latestResult.logMessage} " )
145
+ latestResult.isSuccess -> Timber .i(" Connection check at $baseUrlStr successful: ${latestResult.logMessage} " )
138
146
139
147
latestResult.isException ->
140
- Timber .e(latestResult.exception, " Connection check at $baseUrlSt : ${latestResult.logMessage} " )
148
+ Timber .e(latestResult.exception, " Connection check at $baseUrlStr : ${latestResult.logMessage} " )
141
149
142
- else -> Timber .e(" Connection check at $baseUrlSt failed: ${latestResult.logMessage} " )
150
+ else -> Timber .e(" Connection check at $baseUrlStr failed: ${latestResult.logMessage} " )
143
151
}
144
152
return successfulConnection
145
153
}
0 commit comments