Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ internal data class JwtServerResponse(
val cookiePath: String,
val cookieName: String?,
val sessionCookieName: String?,
val externalToken: String?,
) {
companion object {
fun fromJson(json: String, cookies: List<HttpCookie>) = JSONObject(json).run {
Expand Down Expand Up @@ -49,6 +50,7 @@ internal data class JwtServerResponse(
cookiePath = stringOrEmptyAsNull("cookiePath") ?: "",
cookieName = cookieName,
sessionCookieName = sessionCookieName,
externalToken = stringOrEmptyAsNull("externalToken"),
)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@ internal fun JwtServerResponse.convert(): AuthenticationResponse {
sessionToken = Token(sessionJwt),
user = user.convert(),
isFirstAuthentication = firstSeen,
externalToken = externalToken,
)
}

Expand Down
2 changes: 2 additions & 0 deletions descopesdk/src/main/java/com/descope/types/Responses.kt
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,14 @@ import com.descope.session.DescopeToken
* @property refreshToken the refresh token is used to refresh expired session tokens.
* @property isFirstAuthentication whether this the user's first authentication.
* @property user information about the user.
* @property externalToken a token provided by an external token connector, when configured in the project.
*/
data class AuthenticationResponse(
val sessionToken: DescopeToken,
val refreshToken: DescopeToken,
val isFirstAuthentication: Boolean,
val user: DescopeUser,
val externalToken: String? = null,
)

/**
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package com.descope.internal.http

import org.junit.Assert.*
import org.junit.Test

class JwtServerResponseTest {

@Test
fun externalToken_populatedWhenPresent() {
val json = """
{
"sessionJwt": "session",
"refreshJwt": "refresh",
"firstSeen": true,
"externalToken": "ext-token-value"
}
""".trimIndent()
val response = JwtServerResponse.fromJson(json, emptyList())
assertEquals("ext-token-value", response.externalToken)
}

@Test
fun externalToken_nullWhenAbsent() {
val json = """
{
"sessionJwt": "session",
"refreshJwt": "refresh",
"firstSeen": true
}
""".trimIndent()
val response = JwtServerResponse.fromJson(json, emptyList())
assertNull(response.externalToken)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,7 @@ internal val mockJwtResponse = JwtServerResponse(
cookiePath = "/path",
cookieName = null,
sessionCookieName = null,
externalToken = null,
)

private object MockInfo: SystemInfo {
Expand Down
Loading