BIT-765: Parse user information from JWT token (#127)

This commit is contained in:
Brian Yencho
2023-10-18 09:21:45 -05:00
committed by GitHub
parent 05ee70827e
commit c28d48d2eb
5 changed files with 165 additions and 0 deletions

View File

@@ -0,0 +1,43 @@
package com.x8bit.bitwarden.data.auth.repository.util
import com.x8bit.bitwarden.data.auth.repository.model.JwtTokenDataJson
import org.junit.jupiter.api.Assertions.assertEquals
import org.junit.jupiter.api.Assertions.assertNull
import org.junit.jupiter.api.Test
class JwtTokenUtilsTest {
@Test
fun `parseJwtTokenDataOrNull for a valid token input should return a JwtTokenData`() {
val testJwtToken =
"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYmYiOjE2OTc0OTIxMTQsImV4cCI6MTY5NzQ5NTcxN" +
"CwiaXNzIjoiaHR0cHM6Ly9pZGVudGl0eS5iaXR3YXJkZW4uY29tIiwiY2xpZW50X2lkIjoibW9iaWxl" +
"Iiwic3ViIjoiMmExMzViMjMtZTFmYi00MmM5LWJlYzMtNTczODU3YmM4MTgxIiwiYXV0aF90aW1lIjo" +
"xNjk3NDkyMTE0LCJpZHAiOiJiaXR3YXJkZW4iLCJwcmVtaXVtIjpmYWxzZSwiZW1haWwiOiJ0ZXN0QG" +
"JpdHdhcmRlbi5jb20iLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwic3N0YW1wIjoiSkRIUzRSTUxFNEtGV" +
"EI0TFRIMjVTNkVLRktGTlhOQ0IiLCJuYW1lIjoiQml0d2FyZGVuIFRlc3RlciIsImRldmljZSI6IjNk" +
"ODYxNTU3LWI0Y2MtNDQxZi05YjE4LWM0NTAyYTcxN2UwYiIsImp0aSI6IjA1M0U5NUEzNjFBNEI4QUY" +
"yREEyRDIyNzNDREUxRDVFIiwiaWF0IjoxNjk3NDkyMTE0LCJzY29wZSI6WyJhcGkiLCJvZmZsaW5lX2" +
"FjY2VzcyJdLCJhbXIiOlsiQXBwbGljYXRpb24iXX0.RP2-wABK63Osu-tJY6KJjqVRSJ3-JR_OOdc3N" +
"nm4C5U"
assertEquals(
JwtTokenDataJson(
userId = "2a135b23-e1fb-42c9-bec3-573857bc8181",
email = "test@bitwarden.com",
isEmailVerified = true,
name = "Bitwarden Tester",
expirationAsEpochTime = 1697495714,
hasPremium = false,
authenticationMethodsReference = listOf("Application"),
),
parseJwtTokenDataOrNull(jwtToken = testJwtToken),
)
}
@Test
fun `parseJwtTokenDataOrNull for an invalid token input should return null`() {
assertNull(
parseJwtTokenDataOrNull(jwtToken = "invalid JWT token"),
)
}
}

View File

@@ -0,0 +1,43 @@
package com.x8bit.bitwarden.data.platform.datasource.network.util
import org.junit.jupiter.api.Assertions.assertEquals
import org.junit.jupiter.api.Assertions.assertNull
import org.junit.jupiter.api.Test
class NetworkUtilsTest {
@Test
fun `base64UrlEncode should Base64 encode the string and make the relevant replacements`() {
// Checks replacement of + to - and removal of =
assertEquals(
"dis-ZA",
"v+>d".base64UrlEncode(),
)
// Checks replacement of \ to _
assertEquals(
"NmI_ImE4",
"6b?\"a8".base64UrlEncode(),
)
}
@Suppress("MaxLineLength")
@Test
fun `base64UrlDecodeOrNull should Base64 decode the string and make the relevant replacements`() {
// Checks replacement of - to +
assertEquals(
"v+>d",
"dis-ZA==".base64UrlDecodeOrNull(),
)
// Checks replacement of _ to \
assertEquals(
"6b?\"a8",
"NmI_ImE4".base64UrlDecodeOrNull(),
)
}
@Test
fun `base64UrlDecodeOrNull should return null value a non-encoded String`() {
assertNull(
"*.*".base64UrlDecodeOrNull(),
)
}
}