mirror of
https://github.com/bitwarden/android.git
synced 2024-11-21 17:05:44 +03:00
[PM-13396] Add support for legacy error response model in getToken (#4112)
This commit is contained in:
parent
4fc01c77d1
commit
be0ebb9b3f
4 changed files with 59 additions and 4 deletions
|
@ -96,9 +96,17 @@ sealed class GetTokenResponseJson {
|
|||
@Serializable
|
||||
data class Invalid(
|
||||
@SerialName("ErrorModel")
|
||||
val errorModel: ErrorModel,
|
||||
val errorModel: ErrorModel?,
|
||||
@SerialName("errorModel")
|
||||
val legacyErrorModel: LegacyErrorModel?,
|
||||
) : GetTokenResponseJson() {
|
||||
|
||||
/**
|
||||
* The error message returned from the server, or null.
|
||||
*/
|
||||
val errorMessage: String?
|
||||
get() = errorModel?.errorMessage ?: legacyErrorModel?.errorMessage
|
||||
|
||||
/**
|
||||
* The error body of an invalid request containing a message.
|
||||
*/
|
||||
|
@ -107,6 +115,18 @@ sealed class GetTokenResponseJson {
|
|||
@SerialName("Message")
|
||||
val errorMessage: String,
|
||||
)
|
||||
|
||||
/**
|
||||
* The legacy error body of an invalid request containing a message.
|
||||
*
|
||||
* This model is used to support older versions of the error response model that used
|
||||
* lower-case keys.
|
||||
*/
|
||||
@Serializable
|
||||
data class LegacyErrorModel(
|
||||
@SerialName("message")
|
||||
val errorMessage: String,
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -45,7 +45,6 @@ import com.x8bit.bitwarden.data.auth.repository.model.AuthState
|
|||
import com.x8bit.bitwarden.data.auth.repository.model.BreachCountResult
|
||||
import com.x8bit.bitwarden.data.auth.repository.model.DeleteAccountResult
|
||||
import com.x8bit.bitwarden.data.auth.repository.model.EmailTokenResult
|
||||
import com.x8bit.bitwarden.data.platform.manager.model.FirstTimeState
|
||||
import com.x8bit.bitwarden.data.auth.repository.model.KnownDeviceResult
|
||||
import com.x8bit.bitwarden.data.auth.repository.model.LoginResult
|
||||
import com.x8bit.bitwarden.data.auth.repository.model.NewSsoUserResult
|
||||
|
@ -99,6 +98,7 @@ import com.x8bit.bitwarden.data.platform.manager.FirstTimeActionManager
|
|||
import com.x8bit.bitwarden.data.platform.manager.PolicyManager
|
||||
import com.x8bit.bitwarden.data.platform.manager.PushManager
|
||||
import com.x8bit.bitwarden.data.platform.manager.dispatcher.DispatcherManager
|
||||
import com.x8bit.bitwarden.data.platform.manager.model.FirstTimeState
|
||||
import com.x8bit.bitwarden.data.platform.manager.model.FlagKey
|
||||
import com.x8bit.bitwarden.data.platform.manager.util.getActivePolicies
|
||||
import com.x8bit.bitwarden.data.platform.repository.EnvironmentRepository
|
||||
|
@ -1503,7 +1503,7 @@ class AuthRepositoryImpl(
|
|||
)
|
||||
|
||||
is GetTokenResponseJson.Invalid -> LoginResult.Error(
|
||||
errorMessage = loginResponse.errorModel.errorMessage,
|
||||
errorMessage = loginResponse.errorMessage,
|
||||
)
|
||||
}
|
||||
},
|
||||
|
|
|
@ -273,6 +273,22 @@ class IdentityServiceTest : BaseServiceTest() {
|
|||
assertEquals(INVALID_LOGIN.asSuccess(), result)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `getToken when response is a 400 with a legacy error body should return Invalid`() =
|
||||
runTest {
|
||||
server.enqueue(MockResponse().setResponseCode(400).setBody(LEGACY_INVALID_LOGIN_JSON))
|
||||
val result = identityService.getToken(
|
||||
email = EMAIL,
|
||||
authModel = IdentityTokenAuthModel.MasterPassword(
|
||||
username = EMAIL,
|
||||
password = PASSWORD_HASH,
|
||||
),
|
||||
captchaToken = null,
|
||||
uniqueAppId = UNIQUE_APP_ID,
|
||||
)
|
||||
assertEquals(LEGACY_INVALID_LOGIN.asSuccess(), result)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `prevalidateSso when response is success should return PrevalidateSsoResponseJson`() =
|
||||
runTest {
|
||||
|
@ -613,6 +629,14 @@ private const val INVALID_LOGIN_JSON = """
|
|||
}
|
||||
"""
|
||||
|
||||
private const val LEGACY_INVALID_LOGIN_JSON = """
|
||||
{
|
||||
"errorModel": {
|
||||
"message": "Legacy-123"
|
||||
}
|
||||
}
|
||||
"""
|
||||
|
||||
private const val TOO_MANY_REQUEST_ERROR_JSON = """
|
||||
{
|
||||
"Object": "error",
|
||||
|
@ -645,6 +669,14 @@ private val INVALID_LOGIN = GetTokenResponseJson.Invalid(
|
|||
errorModel = GetTokenResponseJson.Invalid.ErrorModel(
|
||||
errorMessage = "123",
|
||||
),
|
||||
legacyErrorModel = null,
|
||||
)
|
||||
|
||||
private val LEGACY_INVALID_LOGIN = GetTokenResponseJson.Invalid(
|
||||
errorModel = null,
|
||||
legacyErrorModel = GetTokenResponseJson.Invalid.LegacyErrorModel(
|
||||
errorMessage = "Legacy-123",
|
||||
),
|
||||
)
|
||||
|
||||
private val SEND_VERIFICATION_EMAIL_REQUEST = SendVerificationEmailRequestJson(
|
||||
|
|
|
@ -65,7 +65,6 @@ import com.x8bit.bitwarden.data.auth.repository.model.AuthState
|
|||
import com.x8bit.bitwarden.data.auth.repository.model.BreachCountResult
|
||||
import com.x8bit.bitwarden.data.auth.repository.model.DeleteAccountResult
|
||||
import com.x8bit.bitwarden.data.auth.repository.model.EmailTokenResult
|
||||
import com.x8bit.bitwarden.data.platform.manager.model.FirstTimeState
|
||||
import com.x8bit.bitwarden.data.auth.repository.model.KnownDeviceResult
|
||||
import com.x8bit.bitwarden.data.auth.repository.model.LoginResult
|
||||
import com.x8bit.bitwarden.data.auth.repository.model.NewSsoUserResult
|
||||
|
@ -106,6 +105,7 @@ import com.x8bit.bitwarden.data.platform.manager.FirstTimeActionManager
|
|||
import com.x8bit.bitwarden.data.platform.manager.PolicyManager
|
||||
import com.x8bit.bitwarden.data.platform.manager.PushManager
|
||||
import com.x8bit.bitwarden.data.platform.manager.dispatcher.DispatcherManager
|
||||
import com.x8bit.bitwarden.data.platform.manager.model.FirstTimeState
|
||||
import com.x8bit.bitwarden.data.platform.manager.model.FlagKey
|
||||
import com.x8bit.bitwarden.data.platform.manager.model.NotificationLogoutData
|
||||
import com.x8bit.bitwarden.data.platform.repository.SettingsRepository
|
||||
|
@ -1522,6 +1522,7 @@ class AuthRepositoryTest {
|
|||
errorModel = GetTokenResponseJson.Invalid.ErrorModel(
|
||||
errorMessage = "mock_error_message",
|
||||
),
|
||||
legacyErrorModel = null,
|
||||
)
|
||||
.asSuccess()
|
||||
|
||||
|
@ -2314,6 +2315,7 @@ class AuthRepositoryTest {
|
|||
errorModel = GetTokenResponseJson.Invalid.ErrorModel(
|
||||
errorMessage = "mock_error_message",
|
||||
),
|
||||
legacyErrorModel = null,
|
||||
)
|
||||
.asSuccess()
|
||||
|
||||
|
@ -2782,6 +2784,7 @@ class AuthRepositoryTest {
|
|||
errorModel = GetTokenResponseJson.Invalid.ErrorModel(
|
||||
errorMessage = "mock_error_message",
|
||||
),
|
||||
legacyErrorModel = null,
|
||||
)
|
||||
.asSuccess()
|
||||
|
||||
|
|
Loading…
Reference in a new issue