mirror of
https://github.com/home-assistant/core.git
synced 2025-07-21 12:17:07 +00:00
Redact location names in proximity diagnostics (#109600)
This commit is contained in:
parent
8ef2bece59
commit
ac8a4f4b05
@ -56,14 +56,11 @@ class ProximityData:
|
||||
entities: dict[str, dict[str, str | int | None]]
|
||||
|
||||
|
||||
DEFAULT_DATA = ProximityData(
|
||||
{
|
||||
ATTR_DIST_TO: DEFAULT_DIST_TO_ZONE,
|
||||
ATTR_DIR_OF_TRAVEL: DEFAULT_DIR_OF_TRAVEL,
|
||||
ATTR_NEAREST: DEFAULT_NEAREST,
|
||||
},
|
||||
{},
|
||||
)
|
||||
DEFAULT_PROXIMITY_DATA: dict[str, str | float] = {
|
||||
ATTR_DIST_TO: DEFAULT_DIST_TO_ZONE,
|
||||
ATTR_DIR_OF_TRAVEL: DEFAULT_DIR_OF_TRAVEL,
|
||||
ATTR_NEAREST: DEFAULT_NEAREST,
|
||||
}
|
||||
|
||||
|
||||
class ProximityDataUpdateCoordinator(DataUpdateCoordinator[ProximityData]):
|
||||
@ -92,7 +89,7 @@ class ProximityDataUpdateCoordinator(DataUpdateCoordinator[ProximityData]):
|
||||
update_interval=None,
|
||||
)
|
||||
|
||||
self.data = DEFAULT_DATA
|
||||
self.data = ProximityData(DEFAULT_PROXIMITY_DATA, {})
|
||||
|
||||
self.state_change_data: StateChangedData | None = None
|
||||
|
||||
@ -238,7 +235,7 @@ class ProximityDataUpdateCoordinator(DataUpdateCoordinator[ProximityData]):
|
||||
self.name,
|
||||
self.proximity_zone_id,
|
||||
)
|
||||
return DEFAULT_DATA
|
||||
return ProximityData(DEFAULT_PROXIMITY_DATA, {})
|
||||
|
||||
entities_data = self.data.entities
|
||||
|
||||
|
@ -4,10 +4,18 @@ from __future__ import annotations
|
||||
from typing import Any
|
||||
|
||||
from homeassistant.components.device_tracker import ATTR_GPS, ATTR_IP, ATTR_MAC
|
||||
from homeassistant.components.diagnostics import async_redact_data
|
||||
from homeassistant.components.diagnostics import REDACTED, async_redact_data
|
||||
from homeassistant.components.person import ATTR_USER_ID
|
||||
from homeassistant.components.zone import DOMAIN as ZONE_DOMAIN
|
||||
from homeassistant.config_entries import ConfigEntry
|
||||
from homeassistant.const import ATTR_LATITUDE, ATTR_LONGITUDE
|
||||
from homeassistant.const import (
|
||||
ATTR_LATITUDE,
|
||||
ATTR_LONGITUDE,
|
||||
STATE_HOME,
|
||||
STATE_NOT_HOME,
|
||||
STATE_UNAVAILABLE,
|
||||
STATE_UNKNOWN,
|
||||
)
|
||||
from homeassistant.core import HomeAssistant
|
||||
|
||||
from .const import DOMAIN
|
||||
@ -21,6 +29,7 @@ TO_REDACT = {
|
||||
ATTR_MAC,
|
||||
ATTR_USER_ID,
|
||||
"context",
|
||||
"location_name",
|
||||
}
|
||||
|
||||
|
||||
@ -34,16 +43,27 @@ async def async_get_config_entry_diagnostics(
|
||||
"entry": entry.as_dict(),
|
||||
}
|
||||
|
||||
non_sensitiv_states = [
|
||||
STATE_HOME,
|
||||
STATE_NOT_HOME,
|
||||
STATE_UNAVAILABLE,
|
||||
STATE_UNKNOWN,
|
||||
] + [z.name for z in hass.states.async_all(ZONE_DOMAIN)]
|
||||
|
||||
tracked_states: dict[str, dict] = {}
|
||||
for tracked_entity_id in coordinator.tracked_entities:
|
||||
if (state := hass.states.get(tracked_entity_id)) is None:
|
||||
continue
|
||||
tracked_states[tracked_entity_id] = state.as_dict()
|
||||
tracked_states[tracked_entity_id] = async_redact_data(
|
||||
state.as_dict(), TO_REDACT
|
||||
)
|
||||
if state.state not in non_sensitiv_states:
|
||||
tracked_states[tracked_entity_id]["state"] = REDACTED
|
||||
|
||||
diag_data["data"] = {
|
||||
"proximity": coordinator.data.proximity,
|
||||
"entities": coordinator.data.entities,
|
||||
"entity_mapping": coordinator.entity_mapping,
|
||||
"tracked_states": async_redact_data(tracked_states, TO_REDACT),
|
||||
"tracked_states": tracked_states,
|
||||
}
|
||||
return diag_data
|
||||
|
@ -15,6 +15,12 @@
|
||||
'is_in_ignored_zone': False,
|
||||
'name': 'test2',
|
||||
}),
|
||||
'device_tracker.test3': dict({
|
||||
'dir_of_travel': None,
|
||||
'dist_to_zone': 4077309,
|
||||
'is_in_ignored_zone': False,
|
||||
'name': 'test3',
|
||||
}),
|
||||
}),
|
||||
'entity_mapping': dict({
|
||||
'device_tracker.test1': list([
|
||||
@ -29,6 +35,10 @@
|
||||
'sensor.home_test3_distance',
|
||||
'sensor.home_test3_direction_of_travel',
|
||||
]),
|
||||
'device_tracker.test4': list([
|
||||
'sensor.home_test4_distance',
|
||||
'sensor.home_test4_direction_of_travel',
|
||||
]),
|
||||
}),
|
||||
'proximity': dict({
|
||||
'dir_of_travel': 'unknown',
|
||||
@ -56,6 +66,17 @@
|
||||
'entity_id': 'device_tracker.test2',
|
||||
'state': 'not_home',
|
||||
}),
|
||||
'device_tracker.test3': dict({
|
||||
'attributes': dict({
|
||||
'friendly_name': 'test3',
|
||||
'latitude': '**REDACTED**',
|
||||
'location_name': '**REDACTED**',
|
||||
'longitude': '**REDACTED**',
|
||||
}),
|
||||
'context': '**REDACTED**',
|
||||
'entity_id': 'device_tracker.test3',
|
||||
'state': '**REDACTED**',
|
||||
}),
|
||||
}),
|
||||
}),
|
||||
'entry': dict({
|
||||
@ -67,6 +88,7 @@
|
||||
'device_tracker.test1',
|
||||
'device_tracker.test2',
|
||||
'device_tracker.test3',
|
||||
'device_tracker.test4',
|
||||
]),
|
||||
'zone': 'zone.home',
|
||||
}),
|
||||
|
@ -35,6 +35,16 @@ async def test_entry_diagnostics(
|
||||
"not_home",
|
||||
{"friendly_name": "test2", "latitude": 150.1, "longitude": 20.1},
|
||||
)
|
||||
hass.states.async_set(
|
||||
"device_tracker.test3",
|
||||
"my secret address",
|
||||
{
|
||||
"friendly_name": "test3",
|
||||
"latitude": 150.1,
|
||||
"longitude": 20.1,
|
||||
"location_name": "my secret address",
|
||||
},
|
||||
)
|
||||
|
||||
mock_entry = MockConfigEntry(
|
||||
domain=DOMAIN,
|
||||
@ -45,6 +55,7 @@ async def test_entry_diagnostics(
|
||||
"device_tracker.test1",
|
||||
"device_tracker.test2",
|
||||
"device_tracker.test3",
|
||||
"device_tracker.test4",
|
||||
],
|
||||
CONF_IGNORED_ZONES: [],
|
||||
CONF_TOLERANCE: 1,
|
||||
|
Loading…
x
Reference in New Issue
Block a user