diff --git a/homeassistant/components/asuswrt/config_flow.py b/homeassistant/components/asuswrt/config_flow.py index 08aa39108f5..26d0d3de2f5 100644 --- a/homeassistant/components/asuswrt/config_flow.py +++ b/homeassistant/components/asuswrt/config_flow.py @@ -59,9 +59,6 @@ ALLOWED_PROTOCOL = [ PROTOCOL_TELNET, ] -PASS_KEY = "pass_key" -PASS_KEY_MSG = "Only provide password or SSH key file" - RESULT_CONN_ERROR = "cannot_connect" RESULT_SUCCESS = "success" RESULT_UNKNOWN = "unknown" @@ -146,7 +143,7 @@ class AsusWrtFlowHandler(ConfigFlow, domain=DOMAIN): schema = { vol.Required(CONF_HOST, default=user_input.get(CONF_HOST, "")): str, vol.Required(CONF_USERNAME, default=user_input.get(CONF_USERNAME, "")): str, - vol.Exclusive(CONF_PASSWORD, PASS_KEY, PASS_KEY_MSG): str, + vol.Optional(CONF_PASSWORD): str, vol.Required( CONF_PROTOCOL, default=user_input.get(CONF_PROTOCOL, PROTOCOL_HTTPS), @@ -159,7 +156,7 @@ class AsusWrtFlowHandler(ConfigFlow, domain=DOMAIN): vol.Schema( { vol.Optional(CONF_PORT): cv.port, - vol.Exclusive(CONF_SSH_KEY, PASS_KEY, PASS_KEY_MSG): str, + vol.Optional(CONF_SSH_KEY): str, } ), SectionConfig(collapsed=True), @@ -251,6 +248,8 @@ class AsusWrtFlowHandler(ConfigFlow, domain=DOMAIN): return self._show_setup_form(error="pwd_required") if not (pwd or ssh): return self._show_setup_form(error="pwd_or_ssh") + if pwd and ssh: + return self._show_setup_form(error="pwd_and_ssh") if ssh and not await self.hass.async_add_executor_job(_is_file, ssh): return self._show_setup_form(error="ssh_not_file") diff --git a/homeassistant/components/asuswrt/strings.json b/homeassistant/components/asuswrt/strings.json index d54afa98303..d8c79c66516 100644 --- a/homeassistant/components/asuswrt/strings.json +++ b/homeassistant/components/asuswrt/strings.json @@ -7,6 +7,7 @@ "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", "invalid_host": "[%key:common::config_flow::error::invalid_host%]", + "pwd_and_ssh": "Please provide either password or SSH key file, not both", "pwd_or_ssh": "Please provide password or SSH key file", "pwd_required": "Password is required for selected protocol", "ssh_not_file": "SSH key file not found", diff --git a/tests/components/asuswrt/test_config_flow.py b/tests/components/asuswrt/test_config_flow.py index 31cdd4ab793..3660d879711 100644 --- a/tests/components/asuswrt/test_config_flow.py +++ b/tests/components/asuswrt/test_config_flow.py @@ -188,6 +188,19 @@ async def test_error_no_password_ssh(hass: HomeAssistant) -> None: assert result["errors"] == {CONF_BASE: "pwd_or_ssh"} +async def test_error_password_and_ssh(hass: HomeAssistant) -> None: + """Test we abort for both password and ssh file combination.""" + config_data = {**CONFIG_SCHEMA_SSH, CONF_MORE_OPTIONS: {CONF_SSH_KEY: SSH_KEY}} + result = await hass.config_entries.flow.async_init( + DOMAIN, + context={"source": SOURCE_USER}, + data=config_data, + ) + + assert result["type"] is FlowResultType.FORM + assert result["errors"] == {CONF_BASE: "pwd_and_ssh"} + + async def test_error_invalid_ssh(hass: HomeAssistant, patch_is_file) -> None: """Test we abort if invalid ssh file is provided.""" config_data = {k: v for k, v in CONFIG_SCHEMA_SSH.items() if k != CONF_PASSWORD}