From d375dca1f190ad04bd7fc90a1bf4ac6cf01a2f0f Mon Sep 17 00:00:00 2001
From: epenet <6771947+epenet@users.noreply.github.com>
Date: Sat, 19 Oct 2024 17:12:48 +0200
Subject: [PATCH] Use new reauth helpers in smarttub (#128743)

---
 .../components/smarttub/config_flow.py        | 34 +++++--------------
 1 file changed, 8 insertions(+), 26 deletions(-)

diff --git a/homeassistant/components/smarttub/config_flow.py b/homeassistant/components/smarttub/config_flow.py
index 5caff953d6d..cf96d7082a1 100644
--- a/homeassistant/components/smarttub/config_flow.py
+++ b/homeassistant/components/smarttub/config_flow.py
@@ -3,12 +3,12 @@
 from __future__ import annotations
 
 from collections.abc import Mapping
-from typing import TYPE_CHECKING, Any
+from typing import Any
 
 from smarttub import LoginFailed
 import voluptuous as vol
 
-from homeassistant.config_entries import ConfigEntry, ConfigFlow, ConfigFlowResult
+from homeassistant.config_entries import SOURCE_REAUTH, ConfigFlow, ConfigFlowResult
 from homeassistant.const import CONF_EMAIL, CONF_PASSWORD
 
 from .const import DOMAIN
@@ -24,12 +24,6 @@ class SmartTubConfigFlow(ConfigFlow, domain=DOMAIN):
 
     VERSION = 1
 
-    def __init__(self) -> None:
-        """Instantiate config flow."""
-        super().__init__()
-        self._reauth_input: Mapping[str, Any] | None = None
-        self._reauth_entry: ConfigEntry | None = None
-
     async def async_step_user(
         self, user_input: dict[str, Any] | None = None
     ) -> ConfigFlowResult:
@@ -48,24 +42,17 @@ class SmartTubConfigFlow(ConfigFlow, domain=DOMAIN):
             else:
                 await self.async_set_unique_id(account.id)
 
-                if self._reauth_input is None:
+                if self.source != SOURCE_REAUTH:
                     self._abort_if_unique_id_configured()
                     return self.async_create_entry(
                         title=user_input[CONF_EMAIL], data=user_input
                     )
 
                 # this is a reauth attempt
-                if TYPE_CHECKING:
-                    assert self._reauth_entry
-                if self._reauth_entry.unique_id != self.unique_id:
-                    # there is a config entry matching this account,
-                    # but it is not the one we were trying to reauth
-                    return self.async_abort(reason="already_configured")
-                self.hass.config_entries.async_update_entry(
-                    self._reauth_entry, data=user_input
+                self._abort_if_unique_id_mismatch(reason="already_configured")
+                return self.async_update_reload_and_abort(
+                    self._get_reauth_entry(), data=user_input
                 )
-                await self.hass.config_entries.async_reload(self._reauth_entry.entry_id)
-                return self.async_abort(reason="reauth_successful")
 
         return self.async_show_form(
             step_id="user", data_schema=DATA_SCHEMA, errors=errors
@@ -75,10 +62,6 @@ class SmartTubConfigFlow(ConfigFlow, domain=DOMAIN):
         self, entry_data: Mapping[str, Any]
     ) -> ConfigFlowResult:
         """Get new credentials if the current ones don't work anymore."""
-        self._reauth_input = entry_data
-        self._reauth_entry = self.hass.config_entries.async_get_entry(
-            self.context["entry_id"]
-        )
         return await self.async_step_reauth_confirm()
 
     async def async_step_reauth_confirm(
@@ -86,13 +69,12 @@ class SmartTubConfigFlow(ConfigFlow, domain=DOMAIN):
     ) -> ConfigFlowResult:
         """Dialog that informs the user that reauth is required."""
         if user_input is None:
-            if TYPE_CHECKING:
-                assert self._reauth_input is not None
             # same as DATA_SCHEMA but with default email
             data_schema = vol.Schema(
                 {
                     vol.Required(
-                        CONF_EMAIL, default=self._reauth_input.get(CONF_EMAIL)
+                        CONF_EMAIL,
+                        default=self._get_reauth_entry().data.get(CONF_EMAIL),
                     ): str,
                     vol.Required(CONF_PASSWORD): str,
                 }
-- 
GitLab