diff --git a/fluxc/src/main/java/org/wordpress/android/fluxc/network/rest/wpapi/CookieNonceAuthenticator.kt b/fluxc/src/main/java/org/wordpress/android/fluxc/network/rest/wpapi/CookieNonceAuthenticator.kt index 75a60c15a4..6a7710b6a6 100644 --- a/fluxc/src/main/java/org/wordpress/android/fluxc/network/rest/wpapi/CookieNonceAuthenticator.kt +++ b/fluxc/src/main/java/org/wordpress/android/fluxc/network/rest/wpapi/CookieNonceAuthenticator.kt @@ -10,7 +10,6 @@ import org.wordpress.android.fluxc.network.rest.wpapi.Nonce.FailedRequest import org.wordpress.android.fluxc.network.rest.wpapi.Nonce.Unknown import org.wordpress.android.fluxc.persistence.SiteSqlUtils import org.wordpress.android.fluxc.tools.CoroutineEngine -import org.wordpress.android.fluxc.utils.extensions.slashJoin import org.wordpress.android.util.AppLog import org.wordpress.android.util.UrlUtils import javax.inject.Inject @@ -135,7 +134,7 @@ class CookieNonceAuthenticator @Inject constructor( url: String ): String { return discoveryWPAPIRestClient.discoverWPAPIBaseURL(url) // discover rest api endpoint - ?: url.slashJoin("wp-json/") // fallback to ".../wp-json/" if discovery fails + ?: WPAPIDiscoveryUtils.buildDefaultRESTBaseUrl(url) } sealed interface CookieNonceAuthenticationResult { diff --git a/fluxc/src/main/java/org/wordpress/android/fluxc/network/rest/wpapi/WPAPIDiscoveryUtils.kt b/fluxc/src/main/java/org/wordpress/android/fluxc/network/rest/wpapi/WPAPIDiscoveryUtils.kt new file mode 100644 index 0000000000..329cd64a57 --- /dev/null +++ b/fluxc/src/main/java/org/wordpress/android/fluxc/network/rest/wpapi/WPAPIDiscoveryUtils.kt @@ -0,0 +1,18 @@ +package org.wordpress.android.fluxc.network.rest.wpapi + +import org.wordpress.android.fluxc.utils.extensions.slashJoin +import org.wordpress.android.util.UrlUtils + +internal object WPAPIDiscoveryUtils { + fun buildDefaultRESTBaseUrl( + url: String + ): String { + val urlWithoutScheme = UrlUtils.removeScheme(url) + val httpsUrl = UrlUtils.addUrlSchemeIfNeeded(urlWithoutScheme, true) + + // TODO investigate the possibility to use `/?rest_route=` instead, + // `/wp-json` works only when permalinks are enabled, where `/?rest_route=` works without them + // fallback to ".../wp-json/" + return httpsUrl.slashJoin("wp-json") + } +} diff --git a/fluxc/src/main/java/org/wordpress/android/fluxc/network/rest/wpapi/site/SiteWPAPIRestClient.kt b/fluxc/src/main/java/org/wordpress/android/fluxc/network/rest/wpapi/site/SiteWPAPIRestClient.kt index 2443f527f5..6b90b19004 100644 --- a/fluxc/src/main/java/org/wordpress/android/fluxc/network/rest/wpapi/site/SiteWPAPIRestClient.kt +++ b/fluxc/src/main/java/org/wordpress/android/fluxc/network/rest/wpapi/site/SiteWPAPIRestClient.kt @@ -9,11 +9,11 @@ import org.wordpress.android.fluxc.network.discovery.DiscoveryUtils import org.wordpress.android.fluxc.network.discovery.DiscoveryWPAPIRestClient import org.wordpress.android.fluxc.network.discovery.RootWPAPIRestResponse import org.wordpress.android.fluxc.network.rest.wpapi.BaseWPAPIRestClient +import org.wordpress.android.fluxc.network.rest.wpapi.WPAPIDiscoveryUtils import org.wordpress.android.fluxc.network.rest.wpapi.WPAPIGsonRequestBuilder import org.wordpress.android.fluxc.network.rest.wpapi.WPAPIResponse.Error import org.wordpress.android.fluxc.network.rest.wpapi.WPAPIResponse.Success import org.wordpress.android.fluxc.store.SiteStore.FetchWPAPISitePayload -import org.wordpress.android.fluxc.utils.extensions.slashJoin import org.wordpress.android.util.UrlUtils import javax.inject.Inject import javax.inject.Named @@ -102,6 +102,6 @@ class SiteWPAPIRestClient @Inject constructor( url: String ): String { return discoveryWPAPIRestClient.discoverWPAPIBaseURL(url) // discover rest api endpoint - ?: url.slashJoin("wp-json/") // fallback to ".../wp-json/" if discovery fails + ?: WPAPIDiscoveryUtils.buildDefaultRESTBaseUrl(url) } }