Skip to content

Commit f8e94f5

Browse files
authored
feat: support direct_sign_in param for sign-in uri (#235)
1 parent 82fe914 commit f8e94f5

File tree

7 files changed

+45
-0
lines changed

7 files changed

+45
-0
lines changed

android-sdk/android/src/main/kotlin/io/logto/sdk/android/auth/logto/LogtoAuthSession.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ class LogtoAuthSession(
4545
loginHint = signInOptions.loginHint,
4646
firstScreen = signInOptions.firstScreen,
4747
identifiers = signInOptions.identifiers,
48+
directSignIn = signInOptions.directSignIn,
4849
extraParams = signInOptions.extraParams,
4950
includeReservedScopes = logtoConfig.includeReservedScopes,
5051
),
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
package io.logto.sdk.android.type
22

3+
import io.logto.sdk.core.type.DirectSignInOptions
4+
35
class SignInOptions(
46
val redirectUri: String,
57
val prompt: String? = null,
68
val firstScreen: String? = null,
79
val identifiers: List<String>? = null,
10+
val directSignIn: DirectSignInOptions? = null,
811
val loginHint: String? = null,
912
val extraParams: Map<String, String>? = null,
1013
)

kotlin-sdk/kotlin/src/main/kotlin/io/logto/sdk/core/Core.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,10 @@ object Core {
6464
addQueryParameter(QueryKey.FIRST_SCREEN, it)
6565
}
6666

67+
options.directSignIn?.let {
68+
addQueryParameter(QueryKey.DIRECT_SIGN_IN, "${it.method}:${it.target}")
69+
}
70+
6771
options.identifiers?.let {
6872
addQueryParameter(QueryKey.IDENTIFIER, it.joinToString(" "))
6973
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package io.logto.sdk.core.constant
2+
3+
object DirectSignInMethod {
4+
const val SOCIAL = "social"
5+
const val SSO = "sso"
6+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package io.logto.sdk.core.type
2+
3+
class DirectSignInOptions(
4+
val method: String,
5+
val target: String,
6+
)

kotlin-sdk/kotlin/src/main/kotlin/io/logto/sdk/core/type/GenerateSignInUriOptions.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ class GenerateSignInUriOptions(
1212
val loginHint: String? = null,
1313
val firstScreen: String? = null,
1414
val identifiers: List<String>? = null,
15+
val directSignIn: DirectSignInOptions? = null,
1516
val extraParams: Map<String, String>? = null,
1617
val includeReservedScopes: Boolean? = true,
1718
)

kotlin-sdk/kotlin/src/test/kotlin/io/logto/sdk/core/CoreTest.kt

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package io.logto.sdk.core
33
import com.google.common.truth.Truth.assertThat
44
import io.logto.sdk.core.constant.*
55
import io.logto.sdk.core.exception.UriConstructionException
6+
import io.logto.sdk.core.type.DirectSignInOptions
67
import io.logto.sdk.core.type.GenerateSignInUriOptions
78
import okhttp3.HttpUrl.Companion.toHttpUrl
89
import org.junit.Assert
@@ -317,6 +318,29 @@ class CoreTest {
317318
}
318319
}
319320

321+
@Test
322+
fun `generateSignInUri should contain direct_sign_in if provided`() {
323+
val directSignIn = DirectSignInOptions(
324+
method = DirectSignInMethod.SOCIAL,
325+
target = "google"
326+
)
327+
328+
val signInUri = Core.generateSignInUri(
329+
GenerateSignInUriOptions(
330+
authorizationEndpoint = testAuthorizationEndpoint,
331+
clientId = testClientId,
332+
redirectUri = testRedirectUri,
333+
codeChallenge = testCodeChallenge,
334+
state = testState,
335+
directSignIn = directSignIn,
336+
)
337+
)
338+
339+
signInUri.toHttpUrl().apply {
340+
assertThat(queryParameterValues(QueryKey.DIRECT_SIGN_IN)).contains("${directSignIn.method}:${directSignIn.target}")
341+
}
342+
}
343+
320344
@Test
321345
fun `generateSignInUri should contain extra params if provided`() {
322346
val extraParamKey = "tenant_id"

0 commit comments

Comments
 (0)