From 2f19c5b1d6eae1b0b7b4c23c37eb2d758076f0a8 Mon Sep 17 00:00:00 2001 From: Ron Klinkien Date: Sat, 8 Feb 2025 18:30:58 +0100 Subject: [PATCH] MFA WIP --- README.md | 2 +- custom_components/garmin_connect/config_flow.py | 14 +++++++++++--- custom_components/garmin_connect/const.py | 1 + 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index a95f5ee..044188c 100644 --- a/README.md +++ b/README.md @@ -178,7 +178,7 @@ action: mode: single ``` -### Examples on how to test services from HA GUI +### Examples on how to test actions from HA GUI #### Add Body Composition diff --git a/custom_components/garmin_connect/config_flow.py b/custom_components/garmin_connect/config_flow.py index dde0bb6..5f83ac5 100644 --- a/custom_components/garmin_connect/config_flow.py +++ b/custom_components/garmin_connect/config_flow.py @@ -12,7 +12,7 @@ from homeassistant import config_entries from homeassistant.const import CONF_ID, CONF_PASSWORD, CONF_USERNAME import voluptuous as vol -from .const import DOMAIN +from .const import DOMAIN, CONF_MFA _LOGGER = logging.getLogger(__name__) @@ -22,12 +22,20 @@ class GarminConnectConfigFlowHandler(config_entries.ConfigFlow, domain=DOMAIN): VERSION = 1 + def __init__(self) -> None: + """Initialize.""" + self.mfa_data_schema = { + vol.Required(CONF_MFA): str, + } + self._mfa_code: str | None = None + async def _show_setup_form(self, errors=None): """Show the setup form to the user.""" return self.async_show_form( step_id="user", data_schema=vol.Schema( - {vol.Required(CONF_USERNAME): str, vol.Required(CONF_PASSWORD): str} + {vol.Required(CONF_USERNAME): str, + vol.Required(CONF_PASSWORD): str} ), errors=errors or {}, ) @@ -40,7 +48,7 @@ class GarminConnectConfigFlowHandler(config_entries.ConfigFlow, domain=DOMAIN): username = user_input[CONF_USERNAME] password = user_input[CONF_PASSWORD] - api = Garmin(username, password) + api = Garmin(username, password, prompt_mfa=self.get_mfa) errors = {} try: diff --git a/custom_components/garmin_connect/const.py b/custom_components/garmin_connect/const.py index 36efc82..a1a2547 100644 --- a/custom_components/garmin_connect/const.py +++ b/custom_components/garmin_connect/const.py @@ -9,6 +9,7 @@ from homeassistant.const import PERCENTAGE, UnitOfLength, UnitOfMass, UnitOfTime DOMAIN = "garmin_connect" DATA_COORDINATOR = "coordinator" DEFAULT_UPDATE_INTERVAL = timedelta(minutes=5) +CONF_MFA = "mfa_code" DAY_TO_NUMBER = { "Mo": 1,