Skip to content

Commit 410b8ac

Browse files
committed
Add more fields to the DescopeUser to align with other mobile SDKs
1 parent 549375b commit 410b8ac

6 files changed

Lines changed: 46 additions & 0 deletions

File tree

descopesdk/src/main/java/com/descope/internal/http/Responses.kt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package com.descope.internal.http
33
import com.descope.internal.others.optionalMap
44
import com.descope.internal.others.secToMs
55
import com.descope.internal.others.stringOrEmptyAsNull
6+
import com.descope.internal.others.toBooleanMap
67
import com.descope.internal.others.toObjectList
78
import com.descope.internal.others.toStringList
89
import org.json.JSONObject
@@ -54,6 +55,11 @@ internal data class UserResponse(
5455
val givenName: String?,
5556
val middleName: String?,
5657
val familyName: String?,
58+
val password: Boolean,
59+
val status: String,
60+
val roleNames: List<String>,
61+
val ssoAppIds: List<String>,
62+
val oauthProviders: Map<String, Boolean>,
5763
) {
5864
companion object {
5965
@Suppress("UNUSED_PARAMETER")
@@ -74,6 +80,11 @@ internal data class UserResponse(
7480
givenName = stringOrEmptyAsNull("givenName"),
7581
middleName = stringOrEmptyAsNull("middleName"),
7682
familyName = stringOrEmptyAsNull("familyName"),
83+
password = optBoolean("password"),
84+
status = getString("status"),
85+
roleNames = getJSONArray("roleNames").toStringList(),
86+
ssoAppIds = getJSONArray("ssoAppIds").toStringList(),
87+
oauthProviders = getJSONObject("OAuth").toBooleanMap(),
7788
)
7889
}
7990
}

descopesdk/src/main/java/com/descope/internal/routes/Shared.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,11 @@ internal fun UserResponse.convert(): DescopeUser = DescopeUser(
3636
givenName = givenName,
3737
middleName = middleName,
3838
familyName = familyName,
39+
hasPassword = password,
40+
status = status,
41+
roleNames = roleNames,
42+
ssoAppIds = ssoAppIds,
43+
oauthProviders = oauthProviders.keys.toList(),
3944
)
4045

4146
internal fun JwtServerResponse.convert(): AuthenticationResponse {

descopesdk/src/main/java/com/descope/session/Storage.kt

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,11 @@ private fun deserializeDescopeUser(json: JSONObject): DescopeUser = json.run {
186186
givenName = stringOrEmptyAsNull("givenName"),
187187
middleName = stringOrEmptyAsNull("middleName"),
188188
familyName = stringOrEmptyAsNull("familyName"),
189+
hasPassword = optBoolean("hasPassword"),
190+
status = stringOrEmptyAsNull("status") ?: "unknown",
191+
roleNames = optJSONArray("roleNames")?.toStringList() ?: emptyList(),
192+
ssoAppIds = optJSONArray("ssoAppIds")?.toStringList() ?: emptyList(),
193+
oauthProviders = optJSONArray("oauthProviders")?.toStringList() ?: emptyList()
189194
)
190195
}
191196

@@ -203,6 +208,11 @@ private fun DescopeUser.toJson() = JSONObject().apply {
203208
put("givenName", givenName)
204209
put("middleName", middleName)
205210
put("familyName", familyName)
211+
put("hasPassword", hasPassword)
212+
put("status", status)
213+
put("roleNames", roleNames.toJsonArray())
214+
put("ssoAppIds", ssoAppIds.toJsonArray())
215+
put("oauthProviders", oauthProviders.toJsonArray())
206216
}
207217

208218
private fun createEncryptedStore(context: Context, projectId: String, logger: DescopeLogger?): SessionStorage.Store {

descopesdk/src/main/java/com/descope/types/User.kt

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,11 @@ import com.descope.session.DescopeSession
5656
* @property givenName optional user's given name.
5757
* @property middleName optional user's middle name.
5858
* @property familyName optional user's family name.
59+
* @property hasPassword whether the user has a password set or not.
60+
* @property status the user's status, one of 'enabled', 'disabled' or 'invited'.
61+
* @property roleNames a list of role names the user is associated with. Can be empty.
62+
* @property ssoAppIds a list of SSO App IDs the user is associated with. Can be empty.
63+
* @property oauthProviders a list of OAuth providers the user has used. Can be empty.
5964
*/
6065
data class DescopeUser(
6166
val userId: String,
@@ -71,4 +76,9 @@ data class DescopeUser(
7176
val givenName: String?,
7277
val middleName: String?,
7378
val familyName: String?,
79+
val hasPassword: Boolean,
80+
val status: String,
81+
val roleNames: List<String>,
82+
val ssoAppIds: List<String>,
83+
val oauthProviders: List<String>,
7484
)

descopesdk/src/test/java/com/descope/internal/routes/AuthTest.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,11 @@ class AuthTest {
3434
givenName = null,
3535
middleName = null,
3636
familyName = null,
37+
password = false,
38+
status = "enabled",
39+
roleNames = emptyList(),
40+
ssoAppIds = emptyList(),
41+
oauthProviders = emptyMap(),
3742
)
3843
val response = auth.me("refreshJwt")
3944
assertEquals("name", response.name)

descopesdk/src/test/java/com/descope/internal/routes/TestUtils.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,11 @@ internal val mockJwtResponse = JwtServerResponse(
9797
givenName = "givenName",
9898
middleName = "middleName",
9999
familyName = "familyName",
100+
password = true,
101+
status = "disabled",
102+
roleNames = listOf("role1", "role2"),
103+
ssoAppIds = listOf("sso1", "sso2"),
104+
oauthProviders = mapOf("google" to true, "github" to true)
100105
)
101106
)
102107

0 commit comments

Comments
 (0)