Avoid executor job to start http if server_host is unspecified (#114609)

* Avoid executor job to start http if server_host is unspecified

Same as #112522 for http

* adjust test

* CONF_SERVER_HOST is always set now
This commit is contained in:
J. Nick Koston 2024-04-03 19:51:18 -10:00 committed by GitHub
parent 56d0ad27f0
commit 7a2e529bb7
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 7 additions and 2 deletions

View file

@ -7,6 +7,7 @@ import datetime
from ipaddress import IPv4Network, IPv6Network, ip_network from ipaddress import IPv4Network, IPv6Network, ip_network
import logging import logging
import os import os
import socket
import ssl import ssl
from tempfile import NamedTemporaryFile from tempfile import NamedTemporaryFile
from typing import Any, Final, TypedDict, cast from typing import Any, Final, TypedDict, cast
@ -98,11 +99,14 @@ STORAGE_KEY: Final = DOMAIN
STORAGE_VERSION: Final = 1 STORAGE_VERSION: Final = 1
SAVE_DELAY: Final = 180 SAVE_DELAY: Final = 180
_HAS_IPV6 = hasattr(socket, "AF_INET6")
_DEFAULT_BIND = ["0.0.0.0", "::"] if _HAS_IPV6 else ["0.0.0.0"]
HTTP_SCHEMA: Final = vol.All( HTTP_SCHEMA: Final = vol.All(
cv.deprecated(CONF_BASE_URL), cv.deprecated(CONF_BASE_URL),
vol.Schema( vol.Schema(
{ {
vol.Optional(CONF_SERVER_HOST): vol.All( vol.Optional(CONF_SERVER_HOST, default=_DEFAULT_BIND): vol.All(
cv.ensure_list, vol.Length(min=1), [cv.string] cv.ensure_list, vol.Length(min=1), [cv.string]
), ),
vol.Optional(CONF_SERVER_PORT, default=SERVER_PORT): cv.port, vol.Optional(CONF_SERVER_PORT, default=SERVER_PORT): cv.port,
@ -183,7 +187,7 @@ async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool:
if conf is None: if conf is None:
conf = cast(ConfData, HTTP_SCHEMA({})) conf = cast(ConfData, HTTP_SCHEMA({}))
server_host = conf.get(CONF_SERVER_HOST) server_host = conf[CONF_SERVER_HOST]
server_port = conf[CONF_SERVER_PORT] server_port = conf[CONF_SERVER_PORT]
ssl_certificate = conf.get(CONF_SSL_CERTIFICATE) ssl_certificate = conf.get(CONF_SSL_CERTIFICATE)
ssl_peer_certificate = conf.get(CONF_SSL_PEER_CERTIFICATE) ssl_peer_certificate = conf.get(CONF_SSL_PEER_CERTIFICATE)

View file

@ -135,6 +135,7 @@ def test_secrets(mock_is_file, event_loop, mock_hass_config_yaml: None) -> None:
"server_port": 8123, "server_port": 8123,
"ssl_profile": "modern", "ssl_profile": "modern",
"use_x_frame_options": True, "use_x_frame_options": True,
"server_host": ["0.0.0.0", "::"],
} }
assert res["secret_cache"] == { assert res["secret_cache"] == {
get_test_config_dir("secrets.yaml"): {"http_pw": "http://google.com"} get_test_config_dir("secrets.yaml"): {"http_pw": "http://google.com"}