1
0
mirror of https://github.com/owncloud/android-library.git synced 2025-06-07 07:56:19 +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 timber.log.Timber
import java.net.URL import java.net.URL
class GetOCInstanceViaWebfingerOperation( class GetInstancesViaWebfingerOperation(
private val lockupServerDomain: String, private val lockupServerDomain: String,
private val rel: String, private val rel: String,
private val resource: String, private val resource: String,
) : RemoteOperation<String>() { ) : RemoteOperation<List<String>>() {
private fun buildRequestUri() = private fun buildRequestUri() =
Uri.parse(lockupServerDomain).buildUpon() Uri.parse(lockupServerDomain).buildUpon()
@ -61,30 +61,25 @@ class GetOCInstanceViaWebfingerOperation(
method: HttpMethod, method: HttpMethod,
response: String?, response: String?,
status: Int status: Int
): RemoteOperationResult<String> { ): RemoteOperationResult<List<String>> {
Timber.e("Failed requesting webfinger info") Timber.e("Failed requesting webfinger info")
if (response != null) { if (response != null) {
Timber.e("*** status code: $status; response message: $response") Timber.e("*** status code: $status; response message: $response")
} else { } else {
Timber.e("*** status code: $status") 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) val response = parseResponse(rawResponse)
for (i in response.links) { Timber.d("Successful Webfinger request: $response")
if (i.rel == rel) { val operationResult = RemoteOperationResult<List<String>>(RemoteOperationResult.ResultCode.OK)
val operationResult = RemoteOperationResult<String>(RemoteOperationResult.ResultCode.OK) operationResult.data = response.links.map { it.href }
operationResult.data = i.href return operationResult
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")
} }
override fun run(client: OwnCloudClient): RemoteOperationResult<String> { override fun run(client: OwnCloudClient): RemoteOperationResult<List<String>> {
val requestUri = buildRequestUri() val requestUri = buildRequestUri()
val getMethod = GetMethod(URL(requestUri.toString())) val getMethod = GetMethod(URL(requestUri.toString()))
return try { return try {
@ -98,7 +93,7 @@ class GetOCInstanceViaWebfingerOperation(
} }
} catch (e: Exception) { } catch (e: Exception) {
Timber.e(e, "Requesting webfinger info failed") 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 import com.owncloud.android.lib.common.operations.RemoteOperationResult
interface WebfingerService { interface WebfingerService {
fun getInstanceFromWebfinger( fun getInstancesFromWebfinger(
lookupServer: String, lookupServer: String,
username: String, username: String,
rel: String,
client: OwnCloudClient, 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.OwnCloudClient
import com.owncloud.android.lib.common.operations.RemoteOperationResult 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 import com.owncloud.android.lib.resources.webfinger.services.WebfingerService
class OCWebfingerService : WebfingerService { class OCWebfingerService : WebfingerService {
override fun getInstanceFromWebfinger( override fun getInstancesFromWebfinger(
lookupServer: String, lookupServer: String,
username: String, username: String,
rel: String,
client: OwnCloudClient, client: OwnCloudClient,
): RemoteOperationResult<String> = ): RemoteOperationResult<List<String>> =
GetOCInstanceViaWebfingerOperation(lookupServer, OWNCLOUD_REL, username).execute(client) GetInstancesViaWebfingerOperation(lookupServer, rel, username).execute(client)
companion object {
private const val OWNCLOUD_REL = "http://webfinger.owncloud/rel/server-instance"
}
} }