diff --git a/src/panels/config/cloud/forgot-password/cloud-forgot-password.ts b/src/panels/config/cloud/forgot-password/cloud-forgot-password.ts index b5933a0fdf..229059bcf8 100644 --- a/src/panels/config/cloud/forgot-password/cloud-forgot-password.ts +++ b/src/panels/config/cloud/forgot-password/cloud-forgot-password.ts @@ -99,24 +99,32 @@ export class CloudForgotPassword extends LitElement { this._requestInProgress = true; - try { - await cloudForgotPassword(this.hass, email); - // @ts-ignore - fireEvent(this, "email-changed", { value: email }); - this._requestInProgress = false; - // @ts-ignore - fireEvent(this, "cloud-done", { - flashMessage: this.hass.localize( - "ui.panel.config.cloud.forgot_password.check_your_email" - ), - }); - } catch (err: any) { - this._requestInProgress = false; - this._error = - err && err.body && err.body.message - ? err.body.message - : "Unknown error"; - } + const doResetPassword = async (username: string) => { + try { + await cloudForgotPassword(this.hass, username); + // @ts-ignore + fireEvent(this, "email-changed", { value: username }); + this._requestInProgress = false; + // @ts-ignore + fireEvent(this, "cloud-done", { + flashMessage: this.hass.localize( + "ui.panel.config.cloud.forgot_password.check_your_email" + ), + }); + } catch (err: any) { + this._requestInProgress = false; + const errCode = err && err.body && err.body.code; + if (errCode === "usernotfound" && username !== username.toLowerCase()) { + await doResetPassword(username.toLowerCase()); + } else { + this._error = + err && err.body && err.body.message + ? err.body.message + : "Unknown error"; + } + } + }; + await doResetPassword(email); } static get styles() { diff --git a/src/panels/config/cloud/login/cloud-login.ts b/src/panels/config/cloud/login/cloud-login.ts index 50571b07a1..d31f7c7250 100644 --- a/src/panels/config/cloud/login/cloud-login.ts +++ b/src/panels/config/cloud/login/cloud-login.ts @@ -227,53 +227,61 @@ export class CloudLogin extends LitElement { this._requestInProgress = true; - try { - const result = await cloudLogin(this.hass, email, password); - fireEvent(this, "ha-refresh-cloud-status"); - this.email = ""; - this._password = ""; - if (result.cloud_pipeline) { - if ( - await showConfirmationDialog(this, { - title: this.hass.localize( - "ui.panel.config.cloud.login.cloud_pipeline_title" - ), - text: this.hass.localize( - "ui.panel.config.cloud.login.cloud_pipeline_text" - ), - }) - ) { - setAssistPipelinePreferred(this.hass, result.cloud_pipeline); + const doLogin = async (username: string) => { + try { + const result = await cloudLogin(this.hass, username, password); + fireEvent(this, "ha-refresh-cloud-status"); + this.email = ""; + this._password = ""; + if (result.cloud_pipeline) { + if ( + await showConfirmationDialog(this, { + title: this.hass.localize( + "ui.panel.config.cloud.login.cloud_pipeline_title" + ), + text: this.hass.localize( + "ui.panel.config.cloud.login.cloud_pipeline_text" + ), + }) + ) { + setAssistPipelinePreferred(this.hass, result.cloud_pipeline); + } + } + } catch (err: any) { + const errCode = err && err.body && err.body.code; + if (errCode === "PasswordChangeRequired") { + showAlertDialog(this, { + title: this.hass.localize( + "ui.panel.config.cloud.login.alert_password_change_required" + ), + }); + navigate("/config/cloud/forgot-password"); + return; + } + if (errCode === "usernotfound" && username !== username.toLowerCase()) { + await doLogin(username.toLowerCase()); + return; } - } - } catch (err: any) { - const errCode = err && err.body && err.body.code; - if (errCode === "PasswordChangeRequired") { - showAlertDialog(this, { - title: this.hass.localize( - "ui.panel.config.cloud.login.alert_password_change_required" - ), - }); - navigate("/config/cloud/forgot-password"); - return; - } - this._password = ""; - this._requestInProgress = false; + this._password = ""; + this._requestInProgress = false; - if (errCode === "UserNotConfirmed") { - this._error = this.hass.localize( - "ui.panel.config.cloud.login.alert_email_confirm_necessary" - ); - } else { - this._error = - err && err.body && err.body.message - ? err.body.message - : "Unknown error"; + if (errCode === "UserNotConfirmed") { + this._error = this.hass.localize( + "ui.panel.config.cloud.login.alert_email_confirm_necessary" + ); + } else { + this._error = + err && err.body && err.body.message + ? err.body.message + : "Unknown error"; + } + + emailField.focus(); } + }; - emailField.focus(); - } + await doLogin(email); } private _handleRegister() { diff --git a/src/panels/config/cloud/register/cloud-register.ts b/src/panels/config/cloud/register/cloud-register.ts index dfab49cfbe..65aea4bf04 100644 --- a/src/panels/config/cloud/register/cloud-register.ts +++ b/src/panels/config/cloud/register/cloud-register.ts @@ -197,9 +197,6 @@ export class CloudRegister extends LitElement { const emailField = this._emailField; const passwordField = this._passwordField; - const email = emailField.value; - const password = passwordField.value; - if (!emailField.reportValidity()) { passwordField.reportValidity(); emailField.focus(); @@ -211,6 +208,9 @@ export class CloudRegister extends LitElement { return; } + const email = emailField.value.toLowerCase(); + const password = passwordField.value; + this._requestInProgress = true; try { @@ -229,22 +229,31 @@ export class CloudRegister extends LitElement { private async _handleResendVerifyEmail() { const emailField = this._emailField; - const email = emailField.value; - if (!emailField.reportValidity()) { emailField.focus(); return; } - try { - await cloudResendVerification(this.hass, email); - this._verificationEmailSent(email); - } catch (err: any) { - this._error = - err && err.body && err.body.message - ? err.body.message - : "Unknown error"; - } + const email = emailField.value; + + const doResend = async (username: string) => { + try { + await cloudResendVerification(this.hass, username); + this._verificationEmailSent(username); + } catch (err: any) { + const errCode = err && err.body && err.body.code; + if (errCode === "usernotfound" && username !== username.toLowerCase()) { + await doResend(username.toLowerCase()); + } else { + this._error = + err && err.body && err.body.message + ? err.body.message + : "Unknown error"; + } + } + }; + + await doResend(email); } private _verificationEmailSent(email: string) {