From d7dd01ab15995a360be91b28857a055eeb1e989d Mon Sep 17 00:00:00 2001 From: Jan Tennert Date: Sat, 11 Jan 2025 13:52:15 +0100 Subject: [PATCH 1/2] Fix linking identity on JS/Wasm JS --- .../kotlin/io/github/jan/supabase/auth/AuthImpl.kt | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Auth/src/commonMain/kotlin/io/github/jan/supabase/auth/AuthImpl.kt b/Auth/src/commonMain/kotlin/io/github/jan/supabase/auth/AuthImpl.kt index 08310337..5cc57925 100644 --- a/Auth/src/commonMain/kotlin/io/github/jan/supabase/auth/AuthImpl.kt +++ b/Auth/src/commonMain/kotlin/io/github/jan/supabase/auth/AuthImpl.kt @@ -36,7 +36,6 @@ import io.ktor.client.call.body import io.ktor.client.request.parameter import io.ktor.client.statement.HttpResponse import io.ktor.client.statement.bodyAsText -import io.ktor.client.statement.request import io.ktor.http.HttpMethod import io.ktor.http.HttpStatusCode import kotlinx.coroutines.CoroutineScope @@ -52,8 +51,10 @@ import kotlinx.datetime.Clock import kotlinx.serialization.json.JsonObject import kotlinx.serialization.json.JsonObjectBuilder import kotlinx.serialization.json.buildJsonObject +import kotlinx.serialization.json.contentOrNull import kotlinx.serialization.json.encodeToJsonElement import kotlinx.serialization.json.jsonObject +import kotlinx.serialization.json.jsonPrimitive import kotlinx.serialization.json.put import kotlin.time.Duration.Companion.seconds @@ -152,8 +153,9 @@ internal class AuthImpl( val url = getOAuthUrl(provider, redirectTo, "user/identities/authorize", config) val response = api.rawRequest(url) { method = HttpMethod.Get + parameter("skip_http_redirect", true) } - response.request.url.toString() + response.body()["url"]?.jsonPrimitive?.contentOrNull ?: error("No URL found in response") } if(!automaticallyOpen) { return fetchUrl(redirectUrl ?: "") From 056a80b7e0c0f6c1748d161f9df7657debe5a750 Mon Sep 17 00:00:00 2001 From: Jan Tennert Date: Sat, 11 Jan 2025 14:11:19 +0100 Subject: [PATCH 2/2] Fix tests --- Auth/src/commonTest/kotlin/AuthApiTest.kt | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/Auth/src/commonTest/kotlin/AuthApiTest.kt b/Auth/src/commonTest/kotlin/AuthApiTest.kt index e87b4238..f496fa71 100644 --- a/Auth/src/commonTest/kotlin/AuthApiTest.kt +++ b/Auth/src/commonTest/kotlin/AuthApiTest.kt @@ -319,6 +319,7 @@ class AuthRequestTest { val expectedRedirectUrl = "https://example.com" val expectedScopes = listOf("scope1", "scope2") val expectedUrlParams = mapOf("key" to "value") + val providerUrl = "https://example.com" val client = createMockedSupabaseClient(configuration = configuration) { val params = it.url.parameters assertEquals(expectedRedirectUrl, params["redirect_to"]) @@ -330,14 +331,19 @@ class AuthRequestTest { assertEquals(expectedScopes.joinToString(" "), params["scopes"]) assertEquals("value", params["key"]) respondJson( - sampleUserSession() + """ + { + "url": "$providerUrl" + } + """.trimIndent() ) } - client.auth.linkIdentity(expectedProvider, redirectUrl = expectedRedirectUrl) { + val url = client.auth.linkIdentity(expectedProvider, redirectUrl = expectedRedirectUrl) { scopes.addAll(expectedScopes) queryParams.putAll(expectedUrlParams) automaticallyOpenUrl = false } + assertEquals(providerUrl, url) } }