1
0
mirror of https://github.com/home-assistant/core.git synced 2026-05-19 06:50:15 +01:00

Fix exlusive schema option in asuswrt (#170539)

This commit is contained in:
ollo69
2026-05-14 00:44:13 +02:00
committed by GitHub
parent e4c44f873a
commit ef33cd58fd
3 changed files with 18 additions and 5 deletions
@@ -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")
@@ -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",
@@ -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}