Skip to content
This repository has been archived by the owner on Feb 4, 2025. It is now read-only.

Commit

Permalink
Merge pull request #3053 from wordpress-mobile/fix-wpapi-login-http
Browse files Browse the repository at this point in the history
[Woo] Fix Site Credentials login when site discovery fails and site has http to https redirection
  • Loading branch information
JorgeMucientes authored Jul 17, 2024
2 parents 025008c + 765928e commit 46e6111
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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 {
Expand Down
Original file line number Diff line number Diff line change
@@ -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")
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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)
}
}

0 comments on commit 46e6111

Please sign in to comment.