1
0
mirror of https://github.com/owncloud/android-library.git synced 2025-06-06 15:36:45 +00:00

Allow retrieval of several instances from webfinger

This commit is contained in:
Abel García de Prada 2023-03-01 13:36:29 +01:00 committed by Juan Carlos Garrote
parent 2458db1828
commit 0017079a69
3 changed files with 19 additions and 27 deletions

View File

@ -36,11 +36,11 @@ import com.squareup.moshi.Moshi
import timber.log.Timber
import java.net.URL
class GetOCInstanceViaWebfingerOperation(
class GetInstancesViaWebfingerOperation(
private val lockupServerDomain: String,
private val rel: String,
private val resource: String,
) : RemoteOperation<String>() {
) : RemoteOperation<List<String>>() {
private fun buildRequestUri() =
Uri.parse(lockupServerDomain).buildUpon()
@ -61,30 +61,25 @@ class GetOCInstanceViaWebfingerOperation(
method: HttpMethod,
response: String?,
status: Int
): RemoteOperationResult<String> {
): RemoteOperationResult<List<String>> {
Timber.e("Failed requesting webfinger info")
if (response != null) {
Timber.e("*** status code: $status; response message: $response")
} else {
Timber.e("*** status code: $status")
}
return RemoteOperationResult<String>(method)
return RemoteOperationResult<List<String>>(method)
}
private fun onRequestSuccessful(rawResponse: String): RemoteOperationResult<String> {
private fun onRequestSuccessful(rawResponse: String): RemoteOperationResult<List<String>> {
val response = parseResponse(rawResponse)
for (i in response.links) {
if (i.rel == rel) {
val operationResult = RemoteOperationResult<String>(RemoteOperationResult.ResultCode.OK)
operationResult.data = i.href
return operationResult
}
}
Timber.e("Could not find ownCloud relevant information in webfinger response: $rawResponse")
throw java.lang.Exception("Could not find ownCloud relevant information in webfinger response")
Timber.d("Successful Webfinger request: $response")
val operationResult = RemoteOperationResult<List<String>>(RemoteOperationResult.ResultCode.OK)
operationResult.data = response.links.map { it.href }
return operationResult
}
override fun run(client: OwnCloudClient): RemoteOperationResult<String> {
override fun run(client: OwnCloudClient): RemoteOperationResult<List<String>> {
val requestUri = buildRequestUri()
val getMethod = GetMethod(URL(requestUri.toString()))
return try {
@ -98,7 +93,7 @@ class GetOCInstanceViaWebfingerOperation(
}
} catch (e: Exception) {
Timber.e(e, "Requesting webfinger info failed")
RemoteOperationResult<String>(e)
RemoteOperationResult<List<String>>(e)
}
}

View File

@ -21,9 +21,10 @@ import com.owncloud.android.lib.common.OwnCloudClient
import com.owncloud.android.lib.common.operations.RemoteOperationResult
interface WebfingerService {
fun getInstanceFromWebfinger(
fun getInstancesFromWebfinger(
lookupServer: String,
username: String,
rel: String,
client: OwnCloudClient,
): RemoteOperationResult<String>
): RemoteOperationResult<List<String>>
}

View File

@ -19,20 +19,16 @@ package com.owncloud.android.lib.resources.webfinger.services.implementation
import com.owncloud.android.lib.common.OwnCloudClient
import com.owncloud.android.lib.common.operations.RemoteOperationResult
import com.owncloud.android.lib.resources.webfinger.GetOCInstanceViaWebfingerOperation
import com.owncloud.android.lib.resources.webfinger.GetInstancesViaWebfingerOperation
import com.owncloud.android.lib.resources.webfinger.services.WebfingerService
class OCWebfingerService : WebfingerService {
override fun getInstanceFromWebfinger(
override fun getInstancesFromWebfinger(
lookupServer: String,
username: String,
rel: String,
client: OwnCloudClient,
): RemoteOperationResult<String> =
GetOCInstanceViaWebfingerOperation(lookupServer, OWNCLOUD_REL, username).execute(client)
companion object {
private const val OWNCLOUD_REL = "http://webfinger.owncloud/rel/server-instance"
}
): RemoteOperationResult<List<String>> =
GetInstancesViaWebfingerOperation(lookupServer, rel, username).execute(client)
}