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:
@@ -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}
|
||||
|
||||
Reference in New Issue
Block a user