Skip to content

Commit b42284a

Browse files
oguzkocerjkmassel
andauthored
Rework auto discovery experience (#514)
* Rework auto discovery Rust types (#513) * Adds auto discovery attempt type * Remove state machine from login auto discovery * Rework auto discovery results * Implement helpers for AutoDiscoveryAttemptResult & AutoDiscoveryAttemptFailure * Rename AutoDiscoveryAttemptType::Original as UserInput * Add attempt specific fields to AutoDiscoveryUniffiResult * Request execution failure reason and redirects (#516) * Introduces RequestExecutionErrorReason * Optionally track redirects in RequestExecutionError * Refactor auto discovery attempt to have a separate `find_api_root_url` helper (#518) * Refactor auto discovery attempt to have a separate `find_api_root_url` helper * Remove an incorrect use statement from login_client * Add Invalid SSL support and redirect tracking in Swift (#517) * Introduce request ID This is probably not the right way to do it, but it works for now * Add HTTPs error data and redirect tracking * Delete unneeded code * Add `WpRedirect` * Adopt intermediate API * Move x509 parsing into Rust * Better Rust error handling * Remove unused tests * Fix Linux and iOS support * Fix Linux Tests * Update wp_api/src/request.rs Co-authored-by: Oguz Kocer <[email protected]> * Refactor ssl module (#521) Co-authored-by: Oguz Kocer <[email protected]> * Clean up todo * fix linter issues --------- Co-authored-by: Oguz Kocer <[email protected]> Co-authored-by: Oguz Kocer <[email protected]> * Address Kotlin breaking changes in api discovery and RequestExecutionError (#522) * Change `SSLCertificateInfo` to be a `uniffi::object` (#524) * Change `SSLCertificateInfo` to be `uniffi::Object` * Fix cargo fmt warning in wordpress_org/client.rs * Fix Swift issues * Fix tvOS target * Fix watchOS tests * Fix watchOS errors --------- Co-authored-by: Jeremy Massel <[email protected]>
1 parent c325465 commit b42284a

34 files changed

+1148
-715
lines changed

Cargo.lock

+109
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

+1
Original file line numberDiff line numberDiff line change
@@ -47,3 +47,4 @@ trybuild = "1.0"
4747
uniffi = "0.28"
4848
url = "2.5"
4949
uuid = "1.12"
50+
x509-cert = "0.3.0-pre.0"

Package.resolved

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"originHash" : "4c30bcea863fdb29514c7daf20b8911f79465cc6626c1c7fdc311c43d9a8367a",
2+
"originHash" : "f97c4d6141e489daa1b3e5f1731aa4f6ea41d76057f9b254fb8e555c3e14de7b",
33
"pins" : [
44
{
55
"identity" : "collectionconcurrencykit",

Package.swift

+2-2
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,9 @@ let libwordpressFFI: Target = libwordpressFFIVersion.target
1717
var package = Package(
1818
name: "WordPressAPI",
1919
platforms: [
20-
.iOS(.v13),
20+
.iOS(.v15),
2121
.macOS(.v11),
22-
.tvOS(.v13),
22+
.tvOS(.v15),
2323
.watchOS(.v8)
2424
],
2525
products: [

native/kotlin/api/kotlin/src/integrationTest/kotlin/ApiUrlDiscoveryTest.kt

+9-3
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,17 @@ class ApiUrlDiscoveryTest {
99

1010
@Test
1111
fun testFindsCorrectApiUrls() = runTest {
12-
val urlDiscovery = loginClient.apiDiscovery("https://automatticwidgets.wpcomstaging.com/").getOrThrow()
13-
assertEquals("https://automatticwidgets.wpcomstaging.com/wp-json/", urlDiscovery.apiRootUrl.url())
12+
val apiDiscoveryResult =
13+
loginClient.apiDiscovery("https://automatticwidgets.wpcomstaging.com/")
14+
assert(apiDiscoveryResult.isSuccessful)
15+
assertEquals(
16+
"https://automatticwidgets.wpcomstaging.com/wp-json/",
17+
apiDiscoveryResult.successfulAttempt?.apiRootUrl()?.url()
18+
)
1419
assertEquals(
1520
"https://automatticwidgets.wpcomstaging.com/wp-admin/authorize-application.php",
16-
urlDiscovery.apiDetails.findApplicationPasswordsAuthenticationUrl()
21+
apiDiscoveryResult.successfulAttempt?.apiDetails()
22+
?.findApplicationPasswordsAuthenticationUrl()
1723
)
1824
}
1925
}

native/kotlin/api/kotlin/src/main/kotlin/rs/wordpress/api/kotlin/WpApiClient.kt

+1
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ constructor(
4040
)
4141
is WpApiException.RequestExecutionFailed -> WpRequestResult.RequestExecutionFailed(
4242
statusCode = exception.statusCode,
43+
redirects = exception.redirects,
4344
reason = exception.reason
4445
)
4546
is WpApiException.MediaFileNotFound -> WpRequestResult.MediaFileNotFound(

native/kotlin/api/kotlin/src/main/kotlin/rs/wordpress/api/kotlin/WpLoginClient.kt

+3-8
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,9 @@ package rs.wordpress.api.kotlin
33
import kotlinx.coroutines.CoroutineDispatcher
44
import kotlinx.coroutines.Dispatchers
55
import kotlinx.coroutines.withContext
6+
import uniffi.wp_api.AutoDiscoveryUniffiResult
67
import uniffi.wp_api.RequestExecutor
78
import uniffi.wp_api.UniffiWpLoginClient
8-
import uniffi.wp_api.UrlDiscoveryException
9-
import uniffi.wp_api.UrlDiscoverySuccess
109

1110
class WpLoginClient(
1211
private val requestExecutor: RequestExecutor = WpRequestExecutor(),
@@ -16,11 +15,7 @@ class WpLoginClient(
1615
UniffiWpLoginClient(requestExecutor)
1716
}
1817

19-
suspend fun apiDiscovery(siteUrl: String): Result<UrlDiscoverySuccess> = withContext(dispatcher) {
20-
try {
21-
Result.success(internalClient.apiDiscovery(siteUrl))
22-
} catch (e: UrlDiscoveryException) {
23-
Result.failure(e)
24-
}
18+
suspend fun apiDiscovery(siteUrl: String): AutoDiscoveryUniffiResult = withContext(dispatcher) {
19+
internalClient.apiDiscovery(siteUrl)
2520
}
2621
}

native/kotlin/api/kotlin/src/main/kotlin/rs/wordpress/api/kotlin/WpRequestResult.kt

+4-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package rs.wordpress.api.kotlin
22

3+
import uniffi.wp_api.RequestExecutionErrorReason
34
import uniffi.wp_api.WpErrorCode
5+
import uniffi.wp_api.WpRedirect
46

57
sealed class WpRequestResult<T> {
68
data class WpRequestSuccess<T>(val data: T) : WpRequestResult<T>()
@@ -17,7 +19,8 @@ sealed class WpRequestResult<T> {
1719

1820
data class RequestExecutionFailed<T>(
1921
val statusCode: UShort?,
20-
val reason: String,
22+
val redirects: List<WpRedirect>?,
23+
val reason: RequestExecutionErrorReason,
2124
) : WpRequestResult<T>()
2225

2326
data class MediaFileNotFound<T>(

native/swift/Sources/wordpress-api/Exports.swift

+1-3
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,7 @@ public typealias WpNetworkHeaderMap = WordPressAPIInternal.WpNetworkHeaderMap
1818

1919
public typealias WpApiApplicationPasswordDetails = WordPressAPIInternal.WpApiApplicationPasswordDetails
2020
public typealias WpAuthentication = WordPressAPIInternal.WpAuthentication
21-
public typealias UrlDiscoveryError = WordPressAPIInternal.UrlDiscoveryError
22-
public typealias UrlDiscoverySuccess = WordPressAPIInternal.UrlDiscoverySuccess
23-
public typealias UrlDiscoveryAttemptError = WordPressAPIInternal.UrlDiscoveryAttemptError
21+
public typealias SSLCertificateInfo = WordPressAPIInternal.SslCertificateInfo
2422

2523
// MARK: - Users
2624

0 commit comments

Comments
 (0)