1 """Config flow for Webmin."""
3 from __future__
import annotations
5 from collections.abc
import Mapping
6 from http
import HTTPStatus
7 from typing
import Any, cast
8 from xmlrpc.client
import Fault
10 from aiohttp.client_exceptions
import ClientConnectionError, ClientResponseError
11 import voluptuous
as vol
23 SchemaCommonFlowHandler,
24 SchemaConfigFlowHandler,
29 from .const
import DEFAULT_PORT, DEFAULT_SSL, DEFAULT_VERIFY_SSL, DOMAIN, LOGGER
30 from .helpers
import get_instance_from_options, get_sorted_mac_addresses
34 handler: SchemaCommonFlowHandler, user_input: dict[str, Any]
36 """Validate user input."""
37 handler.parent_handler._async_abort_entries_match(
38 {CONF_HOST: user_input[CONF_HOST]}
42 data = await instance.update()
43 except ClientResponseError
as err:
44 if err.status == HTTPStatus.UNAUTHORIZED:
47 except Fault
as fault:
48 LOGGER.exception(f
"Fault {fault.faultCode}: {fault.faultString}")
50 except ClientConnectionError
as err:
52 except Exception
as err:
56 await cast(SchemaConfigFlowHandler, handler.parent_handler).async_set_unique_id(
62 CONFIG_SCHEMA = vol.Schema(
64 vol.Required(CONF_HOST): selector.TextSelector(),
65 vol.Required(CONF_PORT, default=DEFAULT_PORT): selector.NumberSelector(
66 selector.NumberSelectorConfig(
67 min=1, max=65535, mode=selector.NumberSelectorMode.BOX
70 vol.Required(CONF_USERNAME): selector.TextSelector(),
71 vol.Required(CONF_PASSWORD): selector.TextSelector(
72 selector.TextSelectorConfig(type=selector.TextSelectorType.PASSWORD)
74 vol.Required(CONF_SSL, default=DEFAULT_SSL): selector.BooleanSelector(),
76 CONF_VERIFY_SSL, default=DEFAULT_VERIFY_SSL
77 ): selector.BooleanSelector(),
83 schema=CONFIG_SCHEMA, validate_user_input=validate_user_input
89 """Handle a config flow for Webmin."""
91 config_flow = CONFIG_FLOW
94 """Return config entry title."""
95 return str(options[CONF_HOST])
str async_config_entry_title(self, Mapping[str, Any] options)
dict[str, Any] validate_user_input(SchemaCommonFlowHandler handler, dict[str, Any] user_input)
tuple[WebminInstance, URL] get_instance_from_options(HomeAssistant hass, Mapping[str, Any] options)
list[str] get_sorted_mac_addresses(dict[str, Any] data)