Mark CONF_TOKEN as secret in credential schemas (#183796)

This commit is contained in:
Franck Nijhof
2026-09-30 19:34:50 +02:00
committed by GitHub
parent 3d102c4df3
commit fbbf201317
37 changed files with 71 additions and 53 deletions
@@ -22,7 +22,7 @@ CONF_ROOM_ID = "room_id"
PLATFORM_SCHEMA = NOTIFY_PLATFORM_SCHEMA.extend(
{
probatio.Required(CONF_TOKEN): cv.string,
probatio.Required(probatio.Secret(CONF_TOKEN)): cv.string,
probatio.Required(CONF_ROOM_ID): cv.string,
}
)
@@ -14,7 +14,7 @@ from .const import DOMAIN, LOGGER
CONFIG_SCHEMA = probatio.Schema(
{
probatio.Required(CONF_TOKEN): str,
probatio.Required(probatio.Secret(CONF_TOKEN)): str,
}
)
+1 -1
View File
@@ -62,7 +62,7 @@ SENSOR_KEYS: list[str] = [desc.key for desc in SENSOR_TYPES]
PLATFORM_SCHEMA = SENSOR_PLATFORM_SCHEMA.extend(
{
probatio.Required(CONF_TOKEN): cv.string,
probatio.Required(probatio.Secret(CONF_TOKEN)): cv.string,
probatio.Optional("name"): cv.string,
probatio.Optional("monitored_conditions"): probatio.All(
probatio.EnsureList(), [cv.string]
@@ -152,7 +152,7 @@ class EnphaseConfigFlow(ConfigFlow, domain=DOMAIN):
if self.manual_token:
# in manual token entry mode show token input field
schema[probatio.Optional(CONF_TOKEN, default="")] = str
schema[probatio.Optional(probatio.Secret(CONF_TOKEN), default="")] = str
else:
# in automatic token mode show username and password inputs
schema[
+1 -1
View File
@@ -84,7 +84,7 @@ TIMEOUT = 10
PLATFORM_SCHEMA = SENSOR_PLATFORM_SCHEMA.extend(
{
probatio.Required(CONF_TOKEN): cv.string,
probatio.Required(probatio.Secret(CONF_TOKEN)): cv.string,
probatio.Required(CONF_USERNAME): cv.string,
}
)
@@ -27,7 +27,7 @@ DEFAULT_VERIFY_SSL = False
PLATFORM_SCHEMA = DEVICE_TRACKER_PLATFORM_SCHEMA.extend(
{
probatio.Required(CONF_HOST): cv.string,
probatio.Required(CONF_TOKEN): cv.string,
probatio.Required(probatio.Secret(CONF_TOKEN)): cv.string,
probatio.Optional(CONF_VERIFY_SSL, default=DEFAULT_VERIFY_SSL): cv.boolean,
}
)
@@ -43,7 +43,7 @@ STEP_USER_DATA_SCHEMA = probatio.Schema(
autocomplete="current-password",
),
),
probatio.Optional(CONF_TOKEN): TextSelector(
probatio.Optional(probatio.Secret(CONF_TOKEN)): TextSelector(
TextSelectorConfig(
type=TextSelectorType.PASSWORD,
),
@@ -209,7 +209,7 @@ class GatusConfigFlow(ConfigFlow, domain=DOMAIN):
autocomplete="current-password",
),
),
probatio.Optional(CONF_TOKEN): TextSelector(
probatio.Optional(probatio.Secret(CONF_TOKEN)): TextSelector(
TextSelectorConfig(
type=TextSelectorType.PASSWORD,
),
@@ -19,7 +19,7 @@ _LOGGER = logging.getLogger(__name__)
CLOUD_API_SCHEMA = probatio.Schema(
{
probatio.Required(CONF_TOKEN): str,
probatio.Required(probatio.Secret(CONF_TOKEN)): str,
}
)
+1 -1
View File
@@ -44,7 +44,7 @@ SCAN_INTERVAL = timedelta(seconds=300)
PLATFORM_SCHEMA = SENSOR_PLATFORM_SCHEMA.extend(
{
probatio.Required(CONF_GITLAB_ID): cv.string,
probatio.Required(CONF_TOKEN): cv.string,
probatio.Required(probatio.Secret(CONF_TOKEN)): cv.string,
probatio.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string,
probatio.Optional(CONF_URL, default=DEFAULT_URL): cv.string,
}
@@ -203,7 +203,7 @@ class GrowattServerConfigFlow(ConfigFlow, domain=DOMAIN):
elif auth_type == AUTH_API_TOKEN:
data_schema = probatio.Schema(
{
probatio.Required(CONF_TOKEN): str,
probatio.Required(probatio.Secret(CONF_TOKEN)): str,
probatio.Required(
CONF_REGION, default=current_region
): SelectSelector(
@@ -349,7 +349,7 @@ class GrowattServerConfigFlow(ConfigFlow, domain=DOMAIN):
"""Show the API token form to the user."""
data_schema = probatio.Schema(
{
probatio.Required(CONF_TOKEN): str,
probatio.Required(probatio.Secret(CONF_TOKEN)): str,
probatio.Required(CONF_REGION, default=DEFAULT_URL): SelectSelector(
SelectSelectorConfig(
options=list(SERVER_URLS_NAMES.keys()),
@@ -321,7 +321,7 @@ class HyperionConfigFlow(ConfigFlow, domain=DOMAIN):
data_schema=probatio.Schema(
{
probatio.Required(CONF_CREATE_TOKEN): bool,
probatio.Optional(CONF_TOKEN): str,
probatio.Optional(probatio.Secret(CONF_TOKEN)): str,
}
),
errors=errors,
@@ -102,7 +102,7 @@ INFLUXDB_V2_SCHEMA = probatio.Schema(
type=TextSelectorType.TEXT,
),
),
probatio.Required(CONF_TOKEN): TextSelector(
probatio.Required(probatio.Secret(CONF_TOKEN)): TextSelector(
TextSelectorConfig(
type=TextSelectorType.PASSWORD,
),
+1 -1
View File
@@ -150,7 +150,7 @@ COMPONENT_CONFIG_SCHEMA_CONNECTION = {
probatio.Inclusive(CONF_PASSWORD, "authentication"): cv.string,
probatio.Optional(CONF_DB_NAME, default=DEFAULT_DATABASE): cv.string,
# Connection config for V2 API only.
probatio.Inclusive(CONF_TOKEN, "v2_authentication"): cv.string,
probatio.Inclusive(probatio.Secret(CONF_TOKEN), "v2_authentication"): cv.string,
probatio.Inclusive(CONF_ORG, "v2_authentication"): cv.string,
probatio.Optional(CONF_BUCKET, default=DEFAULT_BUCKET): cv.string,
}
@@ -25,11 +25,13 @@ _LOGGER = logging.getLogger(__name__)
STEP_USER_DATA_SCHEMA = probatio.Schema(
{
probatio.Required(CONF_URL): str,
probatio.Required(CONF_TOKEN): str,
probatio.Required(probatio.Secret(CONF_TOKEN)): str,
probatio.Required(CONF_VERIFY_SSL, default=DEFAULT_VERIFY_SSL): bool,
}
)
STEP_REAUTH_DATA_SCHEMA = probatio.Schema({probatio.Required(CONF_TOKEN): str})
STEP_REAUTH_DATA_SCHEMA = probatio.Schema(
{probatio.Required(probatio.Secret(CONF_TOKEN)): str}
)
class KarakeepConfigFlow(ConfigFlow, domain=DOMAIN):
+1 -1
View File
@@ -27,7 +27,7 @@ DEFAULT_TIMEOUT = 10
PLATFORM_SCHEMA = probatio.Schema(
{
probatio.Required(CONF_PLATFORM): "lifx_cloud",
probatio.Required(CONF_TOKEN): cv.string,
probatio.Required(probatio.Secret(CONF_TOKEN)): cv.string,
probatio.Optional(CONF_TIMEOUT, default=DEFAULT_TIMEOUT): cv.positive_int,
}
)
@@ -38,7 +38,9 @@ DEFAULT_URL = "http://mass.local:8095"
STEP_USER_SCHEMA = probatio.Schema({probatio.Required(CONF_URL): str})
STEP_AUTH_TOKEN_SCHEMA = probatio.Schema({probatio.Required(CONF_TOKEN): str})
STEP_AUTH_TOKEN_SCHEMA = probatio.Schema(
{probatio.Required(probatio.Secret(CONF_TOKEN)): str}
)
def _parse_zeroconf_server_info(properties: dict[str, str]) -> ServerInfoMessage:
@@ -384,7 +386,9 @@ class MusicAssistantConfigFlow(ConfigFlow, domain=DOMAIN):
return self.async_show_form(
step_id="auth_manual",
data_schema=probatio.Schema({probatio.Required(CONF_TOKEN): str}),
data_schema=probatio.Schema(
{probatio.Required(probatio.Secret(CONF_TOKEN)): str}
),
description_placeholders={"url": self.url},
errors=errors,
)
@@ -10,7 +10,11 @@ from homeassistant.helpers.typing import ConfigType
from .const import DOMAIN
CONFIG_SCHEMA = probatio.Schema(
{DOMAIN: probatio.Schema({probatio.Required(CONF_TOKEN): cv.string})},
{
DOMAIN: probatio.Schema(
{probatio.Required(probatio.Secret(CONF_TOKEN)): cv.string}
)
},
extra=probatio.ALLOW_EXTRA,
)
+2 -2
View File
@@ -101,7 +101,7 @@ STEP_REAUTH_DATA_SCHEMA = probatio.Schema(
autocomplete="current-password",
),
),
probatio.Exclusive(CONF_TOKEN, ATTR_CREDENTIALS): str,
probatio.Exclusive(probatio.Secret(CONF_TOKEN), ATTR_CREDENTIALS): str,
}
)
@@ -119,7 +119,7 @@ STEP_RECONFIGURE_DATA_SCHEMA = probatio.Schema(
autocomplete="current-password",
),
),
probatio.Exclusive(CONF_TOKEN, ATTR_CREDENTIALS): str,
probatio.Exclusive(probatio.Secret(CONF_TOKEN), ATTR_CREDENTIALS): str,
}
)
+3 -3
View File
@@ -23,13 +23,13 @@ USER_SCHEMA = probatio.Schema(
{
probatio.Required(CONF_HOST): str,
probatio.Optional(CONF_PORT, default=DEFAULT_PORT): probatio.Coerce(int),
probatio.Required(CONF_TOKEN): str,
probatio.Required(probatio.Secret(CONF_TOKEN)): str,
}
)
REAUTH_SCHEMA = probatio.Schema(
{
probatio.Required(CONF_TOKEN): str,
probatio.Required(probatio.Secret(CONF_TOKEN)): str,
probatio.Optional(CONF_ENCRYPT_TOKEN, default=True): bool,
}
)
@@ -91,7 +91,7 @@ class NukiConfigFlow(ConfigFlow, domain=DOMAIN):
{
probatio.Required(CONF_HOST, default=discovery_info.ip): str,
probatio.Required(CONF_PORT, default=DEFAULT_PORT): int,
probatio.Required(CONF_TOKEN): str,
probatio.Required(probatio.Secret(CONF_TOKEN)): str,
}
)
@@ -42,6 +42,8 @@ class NYTGamesConfigFlow(ConfigFlow, domain=DOMAIN):
)
return self.async_show_form(
step_id="user",
data_schema=probatio.Schema({probatio.Required(CONF_TOKEN): str}),
data_schema=probatio.Schema(
{probatio.Required(probatio.Secret(CONF_TOKEN)): str}
),
errors=errors,
)
+1 -1
View File
@@ -24,7 +24,7 @@ _LOGGER = logging.getLogger(__name__)
STEP_USER_DATA_SCHEMA = probatio.Schema(
{
probatio.Optional(CONF_TOKEN): str,
probatio.Optional(probatio.Secret(CONF_TOKEN)): str,
probatio.Optional(CONF_NEW_TOKEN): BooleanSelector(BooleanSelectorConfig()),
# Name field is no longer allowed in config flow schemas
# pylint: disable-next=home-assistant-config-flow-name-field
@@ -350,7 +350,7 @@ class OverkizConfigFlow(
data_schema=probatio.Schema(
{
probatio.Required(CONF_HOST, default=self._host): str,
probatio.Required(CONF_TOKEN): str,
probatio.Required(probatio.Secret(CONF_TOKEN)): str,
probatio.Required(CONF_VERIFY_SSL, default=self._verify_ssl): bool,
}
),
@@ -148,7 +148,9 @@ class PlaatoConfigFlow(ConfigFlow, domain=DOMAIN):
async def _show_api_method_form(
self, device_type: PlaatoDeviceType, errors: dict[str, str] | None = None
) -> ConfigFlowResult:
data_schema = probatio.Schema({probatio.Optional(CONF_TOKEN, default=""): str})
data_schema = probatio.Schema(
{probatio.Optional(probatio.Secret(CONF_TOKEN), default=""): str}
)
if device_type == PlaatoDeviceType.Airlock:
data_schema = data_schema.extend(
@@ -7,7 +7,7 @@ from homeassistant.const import CONF_HOST, CONF_TOKEN
CONFIG_SCHEMA = probatio.Schema(
{
probatio.Required(CONF_HOST): str,
probatio.Required(CONF_TOKEN): str,
probatio.Required(probatio.Secret(CONF_TOKEN)): str,
}
)
@@ -18,7 +18,7 @@ _LOGGER = logging.getLogger(__name__)
STEP_USER_DATA_SCHEMA = probatio.Schema(
{
probatio.Required(CONF_SERIAL_NUMBER): str,
probatio.Required(CONF_TOKEN): str,
probatio.Required(probatio.Secret(CONF_TOKEN)): str,
}
)
@@ -53,7 +53,7 @@ class SplunkConfigFlow(ConfigFlow, domain=DOMAIN):
step_id="user",
data_schema=probatio.Schema(
{
probatio.Required(CONF_TOKEN): str,
probatio.Required(probatio.Secret(CONF_TOKEN)): str,
probatio.Required(CONF_HOST): str,
probatio.Optional(CONF_PORT, default=DEFAULT_PORT): int,
probatio.Optional(CONF_SSL, default=DEFAULT_SSL): bool,
@@ -85,7 +85,7 @@ class SplunkConfigFlow(ConfigFlow, domain=DOMAIN):
data_schema=self.add_suggested_values_to_schema(
probatio.Schema(
{
probatio.Required(CONF_TOKEN): str,
probatio.Required(probatio.Secret(CONF_TOKEN)): str,
probatio.Required(CONF_HOST): str,
probatio.Optional(CONF_PORT, default=DEFAULT_PORT): int,
probatio.Optional(CONF_SSL, default=DEFAULT_SSL): bool,
@@ -125,7 +125,9 @@ class SplunkConfigFlow(ConfigFlow, domain=DOMAIN):
return self.async_show_form(
step_id="reauth_confirm",
data_schema=probatio.Schema({probatio.Required(CONF_TOKEN): str}),
data_schema=probatio.Schema(
{probatio.Required(probatio.Secret(CONF_TOKEN)): str}
),
errors=errors,
)
@@ -20,7 +20,7 @@ _LOGGER = logging.getLogger(__name__)
CONFIG_SCHEMA: Final = probatio.Schema(
{
probatio.Required(CONF_USERNAME): str,
probatio.Required(CONF_TOKEN): str,
probatio.Required(probatio.Secret(CONF_TOKEN)): str,
}
)
@@ -15,7 +15,7 @@ from .const import DEFAULT_URL, DEFAULT_VERIFY_SSL, DOMAIN
DATA_SCHEMA = probatio.Schema(
{
probatio.Required(CONF_URL, default=DEFAULT_URL): str,
probatio.Required(CONF_TOKEN): str,
probatio.Required(probatio.Secret(CONF_TOKEN)): str,
probatio.Required(CONF_VERIFY_SSL, default=DEFAULT_VERIFY_SSL): bool,
}
)
@@ -27,13 +27,13 @@ from .const import DATA_WAIT_TIMEOUT, DOMAIN
_LOGGER = logging.getLogger(__name__)
STEP_AUTHENTICATE_DATA_SCHEMA = probatio.Schema(
{probatio.Required(CONF_TOKEN): cv.string}
{probatio.Required(probatio.Secret(CONF_TOKEN)): cv.string}
)
STEP_USER_DATA_SCHEMA = probatio.Schema(
{
probatio.Required(CONF_HOST): cv.string,
probatio.Required(CONF_PORT, default=9170): cv.string,
probatio.Required(CONF_TOKEN): cv.string,
probatio.Required(probatio.Secret(CONF_TOKEN)): cv.string,
}
)
@@ -77,7 +77,7 @@ class TailwindFlowHandler(ConfigFlow, domain=DOMAIN):
probatio.Required(
CONF_HOST, default=user_input.get(CONF_HOST)
): TextSelector(TextSelectorConfig(autocomplete="off")),
probatio.Required(CONF_TOKEN): TextSelector(
probatio.Required(probatio.Secret(CONF_TOKEN)): TextSelector(
TextSelectorConfig(type=TextSelectorType.PASSWORD)
),
}
@@ -139,7 +139,7 @@ class TailwindFlowHandler(ConfigFlow, domain=DOMAIN):
step_id="zeroconf_confirm",
data_schema=probatio.Schema(
{
probatio.Required(CONF_TOKEN): TextSelector(
probatio.Required(probatio.Secret(CONF_TOKEN)): TextSelector(
TextSelectorConfig(type=TextSelectorType.PASSWORD)
),
}
@@ -179,7 +179,7 @@ class TailwindFlowHandler(ConfigFlow, domain=DOMAIN):
CONF_HOST,
default=reconfigure_entry.data[CONF_HOST],
): TextSelector(TextSelectorConfig(autocomplete="off")),
probatio.Required(CONF_TOKEN): TextSelector(
probatio.Required(probatio.Secret(CONF_TOKEN)): TextSelector(
TextSelectorConfig(type=TextSelectorType.PASSWORD)
),
}
@@ -218,7 +218,7 @@ class TailwindFlowHandler(ConfigFlow, domain=DOMAIN):
step_id="reauth_confirm",
data_schema=probatio.Schema(
{
probatio.Required(CONF_TOKEN): TextSelector(
probatio.Required(probatio.Secret(CONF_TOKEN)): TextSelector(
TextSelectorConfig(type=TextSelectorType.PASSWORD)
),
}
+1 -1
View File
@@ -52,7 +52,7 @@ _LOGGER = logging.getLogger(__name__)
PLATFORM_SCHEMA = CALENDAR_PLATFORM_SCHEMA.extend(
{
probatio.Required(CONF_TOKEN): cv.string,
probatio.Required(probatio.Secret(CONF_TOKEN)): cv.string,
probatio.Optional(CONF_EXTRA_PROJECTS, default=[]): probatio.All(
probatio.EnsureList(),
probatio.Schema(
@@ -20,7 +20,7 @@ SETTINGS_URL = "https://app.todoist.com/app/settings/integrations/developer"
STEP_USER_DATA_SCHEMA = probatio.Schema(
{
probatio.Required(CONF_TOKEN): str,
probatio.Required(probatio.Secret(CONF_TOKEN)): str,
}
)
@@ -211,7 +211,7 @@ class WattwaechterConfigFlow(ConfigFlow, domain=DOMAIN):
step_id="auth",
data_schema=probatio.Schema(
{
probatio.Required(CONF_TOKEN): str,
probatio.Required(probatio.Secret(CONF_TOKEN)): str,
}
),
errors=errors,
@@ -246,7 +246,7 @@ class WattwaechterConfigFlow(ConfigFlow, domain=DOMAIN):
step_id="reauth_confirm",
data_schema=probatio.Schema(
{
probatio.Required(CONF_TOKEN): str,
probatio.Required(probatio.Secret(CONF_TOKEN)): str,
}
),
description_placeholders={"host": reauth_entry.data[CONF_HOST]},
@@ -279,7 +279,7 @@ class WattwaechterConfigFlow(ConfigFlow, domain=DOMAIN):
schema = probatio.Schema(
{
probatio.Required(CONF_HOST): str,
probatio.Optional(CONF_TOKEN): TextSelector(
probatio.Optional(probatio.Secret(CONF_TOKEN)): TextSelector(
TextSelectorConfig(type=TextSelectorType.PASSWORD)
),
}
@@ -42,7 +42,9 @@ from .typing import XiaomiMiioConfigEntry
_LOGGER = logging.getLogger(__name__)
DEVICE_SETTINGS = {
probatio.Required(CONF_TOKEN): probatio.All(str, probatio.Length(min=32, max=32)),
probatio.Required(probatio.Secret(CONF_TOKEN)): probatio.All(
str, probatio.Length(min=32, max=32)
),
}
DEVICE_CONFIG = probatio.Schema({probatio.Required(CONF_HOST): str}).extend(
DEVICE_SETTINGS
@@ -21,7 +21,7 @@ _LOGGER = logging.getLogger(__name__)
PLATFORM_SCHEMA = DEVICE_TRACKER_PLATFORM_SCHEMA.extend(
{
probatio.Required(CONF_HOST): cv.string,
probatio.Required(CONF_TOKEN): probatio.All(
probatio.Required(probatio.Secret(CONF_TOKEN)): probatio.All(
cv.string, probatio.Length(min=32, max=32)
),
}
@@ -55,7 +55,7 @@ PLATFORM_SCHEMA = REMOTE_PLATFORM_SCHEMA.extend(
probatio.Optional(CONF_SLOT, default=DEFAULT_SLOT): probatio.All(
int, probatio.Range(min=1, max=1000000)
),
probatio.Required(CONF_TOKEN): probatio.All(
probatio.Required(probatio.Secret(CONF_TOKEN)): probatio.All(
str, probatio.Length(min=32, max=32)
),
probatio.Optional(CONF_COMMANDS, default={}): cv.schema_with_slug_keys(
@@ -46,13 +46,13 @@ class ZWaveMeConfigFlow(ConfigFlow, domain=DOMAIN):
schema = probatio.Schema(
{
probatio.Required(CONF_URL): str,
probatio.Required(CONF_TOKEN): str,
probatio.Required(probatio.Secret(CONF_TOKEN)): str,
}
)
else:
schema = probatio.Schema(
{
probatio.Required(CONF_TOKEN): str,
probatio.Required(probatio.Secret(CONF_TOKEN)): str,
}
)