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

Commit 463c753

Browse files
authored
Merge pull request #2628 from wordpress-mobile/rest-api-fixes
Woo REST API: fix Woo detection for non-eligible users
2 parents a2bee76 + ed3c683 commit 463c753

File tree

2 files changed

+24
-11
lines changed
  • fluxc/src/main/java/org/wordpress/android/fluxc/store
  • plugins/woocommerce/src/main/kotlin/org/wordpress/android/fluxc/network/rest/wpcom/wc/system

2 files changed

+24
-11
lines changed

fluxc/src/main/java/org/wordpress/android/fluxc/store/SiteStore.kt

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1341,12 +1341,15 @@ open class SiteStore @Inject constructor(
13411341
}
13421342

13431343
suspend fun fetchSite(site: SiteModel): OnSiteChanged {
1344-
val updatedSite = if (site.isUsingWpComRestApi) {
1345-
siteRestClient.fetchSite(site)
1346-
} else {
1347-
siteXMLRPCClient.fetchSite(site)
1344+
return coroutineEngine.withDefaultContext(T.API, this, "Fetch site") {
1345+
val updatedSite = if (site.isUsingWpComRestApi) {
1346+
siteRestClient.fetchSite(site)
1347+
} else {
1348+
siteXMLRPCClient.fetchSite(site)
1349+
}
1350+
1351+
updateSite(updatedSite)
13481352
}
1349-
return updateSite(updatedSite)
13501353
}
13511354

13521355
suspend fun fetchSites(payload: FetchSitesPayload): OnSiteChanged {
@@ -1357,7 +1360,9 @@ open class SiteStore @Inject constructor(
13571360
}
13581361

13591362
suspend fun fetchSitesXmlRpc(payload: RefreshSitesXMLRPCPayload): OnSiteChanged {
1360-
return updateSites(siteXMLRPCClient.fetchSites(payload.url, payload.username, payload.password))
1363+
return coroutineEngine.withDefaultContext(T.API, this, "Fetch sites") {
1364+
updateSites(siteXMLRPCClient.fetchSites(payload.url, payload.username, payload.password))
1365+
}
13611366
}
13621367

13631368
@Suppress("ForbiddenComment", "SwallowedException")

plugins/woocommerce/src/main/kotlin/org/wordpress/android/fluxc/network/rest/wpcom/wc/system/WooSystemRestClient.kt

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import com.google.gson.annotations.SerializedName
55
import org.wordpress.android.fluxc.generated.endpoint.WOOCOMMERCE
66
import org.wordpress.android.fluxc.generated.endpoint.WPAPI
77
import org.wordpress.android.fluxc.model.SiteModel
8-
import org.wordpress.android.fluxc.network.BaseRequest.GenericErrorType.NOT_FOUND
98
import org.wordpress.android.fluxc.network.rest.wpapi.WPAPIResponse
109
import org.wordpress.android.fluxc.network.rest.wpcom.wc.WooNetwork
1110
import org.wordpress.android.fluxc.network.rest.wpcom.wc.WooPayload
@@ -14,6 +13,11 @@ import org.wordpress.android.fluxc.utils.toWooPayload
1413
import javax.inject.Inject
1514

1615
class WooSystemRestClient @Inject constructor(private val wooNetwork: WooNetwork) {
16+
companion object {
17+
private const val NOT_FOUND = 404
18+
private const val FORBIDDEN = 403
19+
}
20+
1721
suspend fun fetchInstalledPlugins(site: SiteModel): WooPayload<WCSystemPluginResponse> {
1822
val url = WOOCOMMERCE.system_status.pathV3
1923

@@ -59,10 +63,14 @@ class WooSystemRestClient @Inject constructor(private val wooNetwork: WooNetwork
5963
return when (response) {
6064
is WPAPIResponse.Success -> WooPayload(true)
6165
is WPAPIResponse.Error -> {
62-
if (response.error.type == NOT_FOUND) {
63-
WooPayload(false)
64-
} else {
65-
WooPayload(response.error.toWooError())
66+
when (response.error.volleyError?.networkResponse?.statusCode) {
67+
NOT_FOUND -> WooPayload(false)
68+
FORBIDDEN -> {
69+
// If we get a 403 status code, we can infer that Woo is installed,
70+
// the user just doesn't have permission to access the Woo API
71+
WooPayload(true)
72+
}
73+
else -> WooPayload(response.error.toWooError())
6674
}
6775
}
6876
}

0 commit comments

Comments
 (0)