handling unverified email as a dialog error in the reset password flow with a friendly error message

This commit is contained in:
Adam Brown 2022-07-26 16:58:19 +01:00
parent e9bd271642
commit e6df2b39b4
4 changed files with 17 additions and 1 deletions

View File

@ -86,6 +86,10 @@ fun Throwable.isInvalidUIAAuth() = this is Failure.ServerError &&
fun Throwable.isHomeserverUnavailable() = this is Failure.NetworkConnection && fun Throwable.isHomeserverUnavailable() = this is Failure.NetworkConnection &&
this.ioException is UnknownHostException this.ioException is UnknownHostException
fun Throwable.isMissingEmailVerification() = this is Failure.ServerError &&
error.code == MatrixError.M_UNAUTHORIZED &&
error.message == "Unable to get validated threepid"
/** /**
* Try to convert to a RegistrationFlowResponse. Return null in the cases it's not possible * Try to convert to a RegistrationFlowResponse. Return null in the cases it's not possible
*/ */

View File

@ -25,6 +25,7 @@ import org.matrix.android.sdk.api.failure.MatrixError
import org.matrix.android.sdk.api.failure.MatrixIdFailure import org.matrix.android.sdk.api.failure.MatrixIdFailure
import org.matrix.android.sdk.api.failure.isInvalidPassword import org.matrix.android.sdk.api.failure.isInvalidPassword
import org.matrix.android.sdk.api.failure.isLimitExceededError import org.matrix.android.sdk.api.failure.isLimitExceededError
import org.matrix.android.sdk.api.failure.isMissingEmailVerification
import org.matrix.android.sdk.api.session.identity.IdentityServiceError import org.matrix.android.sdk.api.session.identity.IdentityServiceError
import java.net.HttpURLConnection import java.net.HttpURLConnection
import java.net.SocketTimeoutException import java.net.SocketTimeoutException
@ -105,6 +106,9 @@ class DefaultErrorFormatter @Inject constructor(
throwable.error.message == "Not allowed to join this room" -> { throwable.error.message == "Not allowed to join this room" -> {
stringProvider.getString(R.string.room_error_access_unauthorized) stringProvider.getString(R.string.room_error_access_unauthorized)
} }
throwable.isMissingEmailVerification() -> {
stringProvider.getString(R.string.auth_reset_password_error_unverified)
}
else -> { else -> {
throwable.error.message.takeIf { it.isNotEmpty() } throwable.error.message.takeIf { it.isNotEmpty() }
?: throwable.error.code.takeIf { it.isNotEmpty() } ?: throwable.error.code.takeIf { it.isNotEmpty() }

View File

@ -31,6 +31,8 @@ import im.vector.app.core.extensions.setOnImeDoneListener
import im.vector.app.databinding.FragmentFtueResetPasswordInputBinding import im.vector.app.databinding.FragmentFtueResetPasswordInputBinding
import im.vector.app.features.onboarding.OnboardingAction import im.vector.app.features.onboarding.OnboardingAction
import im.vector.app.features.onboarding.OnboardingViewState import im.vector.app.features.onboarding.OnboardingViewState
import org.matrix.android.sdk.api.failure.isInvalidPassword
import org.matrix.android.sdk.api.failure.isMissingEmailVerification
@AndroidEntryPoint @AndroidEntryPoint
class FtueAuthResetPasswordEntryFragment : AbstractFtueAuthFragment<FragmentFtueResetPasswordInputBinding>() { class FtueAuthResetPasswordEntryFragment : AbstractFtueAuthFragment<FragmentFtueResetPasswordInputBinding>() {
@ -61,8 +63,13 @@ class FtueAuthResetPasswordEntryFragment : AbstractFtueAuthFragment<FragmentFtue
} }
override fun onError(throwable: Throwable) { override fun onError(throwable: Throwable) {
when {
throwable.isMissingEmailVerification() -> super.onError(throwable)
else -> {
views.newPasswordInput.error = errorFormatter.toHumanReadable(throwable) views.newPasswordInput.error = errorFormatter.toHumanReadable(throwable)
} }
}
}
override fun updateWithState(state: OnboardingViewState) { override fun updateWithState(state: OnboardingViewState) {
views.signedOutAllGroup.isVisible = state.resetState.supportsLogoutAllDevices views.signedOutAllGroup.isVisible = state.resetState.supportsLogoutAllDevices

View File

@ -524,6 +524,7 @@
<string name="auth_recaptcha_message">This homeserver would like to make sure you are not a robot</string> <string name="auth_recaptcha_message">This homeserver would like to make sure you are not a robot</string>
<string name="auth_reset_password_missing_email">The email address linked to your account must be entered.</string> <string name="auth_reset_password_missing_email">The email address linked to your account must be entered.</string>
<string name="auth_reset_password_error_unauthorized">Failed to verify email address: make sure you clicked the link in the email</string> <string name="auth_reset_password_error_unauthorized">Failed to verify email address: make sure you clicked the link in the email</string>
<string name="auth_reset_password_error_unverified">Email not verified, check your inbox</string>
<string name="auth_accept_policies">"Please review and accept the policies of this homeserver:"</string> <string name="auth_accept_policies">"Please review and accept the policies of this homeserver:"</string>
<!-- Login Screen --> <!-- Login Screen -->