From 33361f85804865a643ffeda777da9def21d0edf8 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Thu, 30 Jan 2020 09:47:16 -0800 Subject: [PATCH] Fix HTTP config serialization (#31319) --- homeassistant/components/http/__init__.py | 11 ++++++++++- tests/components/http/test_init.py | 15 ++++++++++----- 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/homeassistant/components/http/__init__.py b/homeassistant/components/http/__init__.py index 58cfb4b9cc1..565f84fdb8a 100644 --- a/homeassistant/components/http/__init__.py +++ b/homeassistant/components/http/__init__.py @@ -166,7 +166,16 @@ async def async_setup(hass, config): # If we are set up successful, we store the HTTP settings for safe mode. store = storage.Store(hass, STORAGE_VERSION, STORAGE_KEY) - await store.async_save(conf) + + if CONF_TRUSTED_PROXIES in conf: + conf_to_save = dict(conf) + conf_to_save[CONF_TRUSTED_PROXIES] = [ + str(ip.network_address) for ip in conf_to_save[CONF_TRUSTED_PROXIES] + ] + else: + conf_to_save = conf + + await store.async_save(conf_to_save) hass.bus.async_listen_once(EVENT_HOMEASSISTANT_START, start_server) diff --git a/tests/components/http/test_init.py b/tests/components/http/test_init.py index 43a39302f4f..58e6d8824dd 100644 --- a/tests/components/http/test_init.py +++ b/tests/components/http/test_init.py @@ -1,4 +1,5 @@ """The tests for the Home Assistant HTTP component.""" +from ipaddress import ip_network import logging import unittest from unittest.mock import patch @@ -244,12 +245,16 @@ async def test_cors_defaults(hass): async def test_storing_config(hass, aiohttp_client, aiohttp_unused_port): """Test that we store last working config.""" - config = {http.CONF_SERVER_PORT: aiohttp_unused_port()} + config = { + http.CONF_SERVER_PORT: aiohttp_unused_port(), + "use_x_forwarded_for": True, + "trusted_proxies": ["192.168.1.100"], + } - await async_setup_component(hass, http.DOMAIN, {http.DOMAIN: config}) + assert await async_setup_component(hass, http.DOMAIN, {http.DOMAIN: config}) await hass.async_start() + restored = await hass.components.http.async_get_last_config() + restored["trusted_proxies"][0] = ip_network(restored["trusted_proxies"][0]) - assert await hass.components.http.async_get_last_config() == http.HTTP_SCHEMA( - config - ) + assert restored == http.HTTP_SCHEMA(config)