Login screens: login with unknown email

This commit is contained in:
Benoit Marty 2019-11-22 14:21:14 +01:00
parent 7e1a279fd9
commit 91fcf428dd
3 changed files with 19 additions and 7 deletions

View file

@ -75,16 +75,16 @@ internal class DefaultLoginWizard(
callback: MatrixCallback<Session>): Cancelable {
val job = GlobalScope.launch(coroutineDispatchers.main) {
val sessionOrFailure = runCatching {
authenticate(login, password, deviceName)
loginInternal(login, password, deviceName)
}
sessionOrFailure.foldToCallback(callback)
}
return CancelableCoroutine(job)
}
private suspend fun authenticate(login: String,
password: String,
deviceName: String) = withContext(coroutineDispatchers.io) {
private suspend fun loginInternal(login: String,
password: String,
deviceName: String) = withContext(coroutineDispatchers.io) {
val loginParams = if (Patterns.EMAIL_ADDRESS.matcher(login).matches()) {
PasswordLoginParams.thirdPartyIdentifier(ThreePidMedium.EMAIL, login, password, deviceName)
} else {

View file

@ -27,6 +27,8 @@ import com.airbnb.mvrx.Loading
import com.airbnb.mvrx.Success
import com.airbnb.mvrx.withState
import com.jakewharton.rxbinding3.widget.textChanges
import im.vector.matrix.android.api.failure.Failure
import im.vector.matrix.android.api.failure.MatrixError
import im.vector.riotx.R
import im.vector.riotx.core.error.ErrorFormatter
import im.vector.riotx.core.extensions.hideKeyboard
@ -199,9 +201,17 @@ class LoginFragment @Inject constructor(
renderPasswordField()
}
is Fail -> {
// Trick to display the error without text.
loginFieldTil.error = " "
passwordFieldTil.error = errorFormatter.toHumanReadable(state.asyncLoginAction.error)
val error = state.asyncLoginAction.error
if (error is Failure.ServerError
&& error.error.code == MatrixError.FORBIDDEN
&& error.error.message.isEmpty()) {
// Login with email, but email unknown
loginFieldTil.error = getString(R.string.login_login_with_email_error)
} else {
// Trick to display the error without text.
loginFieldTil.error = " "
passwordFieldTil.error = errorFormatter.toHumanReadable(state.asyncLoginAction.error)
}
}
// Success is handled by the LoginActivity
is Success -> Unit

View file

@ -59,6 +59,8 @@
<string name="login_registration_disabled">Sorry, this server isnt accepting new accounts.</string>
<string name="login_registration_not_supported">The application is not able to create an account on this homeserver.\n\nDo you want to signup using a web client?</string>
<string name="login_login_with_email_error">This email is not associated to any account.</string>
<!-- Replaced string is the homeserver url -->
<string name="login_reset_password_on">Reset password on %1$s</string>
<string name="login_reset_password_notice">A verification email will be sent to your inbox to confirm setting your new password.</string>