From 0017079a6921c88bc8ea11d512b488bba8d0bda1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Abel=20Garc=C3=ADa=20de=20Prada?= Date: Wed, 1 Mar 2023 13:36:29 +0100 Subject: [PATCH] Allow retrieval of several instances from webfinger --- ...t => GetInstancesViaWebfingerOperation.kt} | 27 ++++++++----------- .../webfinger/services/WebfingerService.kt | 5 ++-- .../implementation/OCWebfingerService.kt | 14 ++++------ 3 files changed, 19 insertions(+), 27 deletions(-) rename owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/webfinger/{GetOCInstanceViaWebfingerOperation.kt => GetInstancesViaWebfingerOperation.kt} (83%) diff --git a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/webfinger/GetOCInstanceViaWebfingerOperation.kt b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/webfinger/GetInstancesViaWebfingerOperation.kt similarity index 83% rename from owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/webfinger/GetOCInstanceViaWebfingerOperation.kt rename to owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/webfinger/GetInstancesViaWebfingerOperation.kt index 42ee4b12..8439d0d0 100644 --- a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/webfinger/GetOCInstanceViaWebfingerOperation.kt +++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/webfinger/GetInstancesViaWebfingerOperation.kt @@ -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() { +) : RemoteOperation>() { private fun buildRequestUri() = Uri.parse(lockupServerDomain).buildUpon() @@ -61,30 +61,25 @@ class GetOCInstanceViaWebfingerOperation( method: HttpMethod, response: String?, status: Int - ): RemoteOperationResult { + ): RemoteOperationResult> { 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(method) + return RemoteOperationResult>(method) } - private fun onRequestSuccessful(rawResponse: String): RemoteOperationResult { + private fun onRequestSuccessful(rawResponse: String): RemoteOperationResult> { val response = parseResponse(rawResponse) - for (i in response.links) { - if (i.rel == rel) { - val operationResult = RemoteOperationResult(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>(RemoteOperationResult.ResultCode.OK) + operationResult.data = response.links.map { it.href } + return operationResult } - override fun run(client: OwnCloudClient): RemoteOperationResult { + override fun run(client: OwnCloudClient): RemoteOperationResult> { 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(e) + RemoteOperationResult>(e) } } diff --git a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/webfinger/services/WebfingerService.kt b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/webfinger/services/WebfingerService.kt index 4e057beb..ada5c6d0 100644 --- a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/webfinger/services/WebfingerService.kt +++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/webfinger/services/WebfingerService.kt @@ -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 + ): RemoteOperationResult> } diff --git a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/webfinger/services/implementation/OCWebfingerService.kt b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/webfinger/services/implementation/OCWebfingerService.kt index 3eab83d4..9ea1147b 100644 --- a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/webfinger/services/implementation/OCWebfingerService.kt +++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/webfinger/services/implementation/OCWebfingerService.kt @@ -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 = - GetOCInstanceViaWebfingerOperation(lookupServer, OWNCLOUD_REL, username).execute(client) - - companion object { - private const val OWNCLOUD_REL = "http://webfinger.owncloud/rel/server-instance" - } - + ): RemoteOperationResult> = + GetInstancesViaWebfingerOperation(lookupServer, rel, username).execute(client) }