Do not allow overriding users when uuid is duplicate

This commit is contained in:
Paulus Schoutsen 2025-07-24 21:55:56 +00:00
parent 4cc4bd3b9a
commit 65dfa0e659
2 changed files with 18 additions and 1 deletions

View File

@ -120,6 +120,9 @@ class AuthStore:
new_user = models.User(**kwargs) new_user = models.User(**kwargs)
while new_user.id in self._users:
new_user = models.User(**kwargs)
self._users[new_user.id] = new_user self._users[new_user.id] = new_user
if credentials is None: if credentials is None:

View File

@ -2,7 +2,7 @@
import asyncio import asyncio
from typing import Any from typing import Any
from unittest.mock import patch from unittest.mock import PropertyMock, patch
from freezegun.api import FrozenDateTimeFactory from freezegun.api import FrozenDateTimeFactory
import pytest import pytest
@ -300,6 +300,20 @@ async def test_loading_does_not_write_right_away(
assert hass_storage[auth_store.STORAGE_KEY] != {} assert hass_storage[auth_store.STORAGE_KEY] != {}
async def test_duplicate_uuid(
hass: HomeAssistant, hass_storage: dict[str, Any]
) -> None:
"""Test we don't override user if we have a duplicate user ID."""
hass_storage[auth_store.STORAGE_KEY] = MOCK_STORAGE_DATA
store = auth_store.AuthStore(hass)
await store.async_load()
with patch("uuid.UUID.hex", new_callable=PropertyMock) as hex_mock:
hex_mock.side_effect = ["user-id", "new-id"]
user = await store.async_create_user("Test User")
assert len(hex_mock.mock_calls) == 2
assert user.id == "new-id"
async def test_add_remove_user_affects_tokens( async def test_add_remove_user_affects_tokens(
hass: HomeAssistant, hass_storage: dict[str, Any] hass: HomeAssistant, hass_storage: dict[str, Any]
) -> None: ) -> None: