58 lines
2.3 KiB
Diff
58 lines
2.3 KiB
Diff
--- a/homeassistant/auth/providers/command_line.py 2024-02-04 01:41:34.460181490 +0100
|
|
+++ b/homeassistant/auth/providers/command_line.py 2024-02-04 01:46:55.952650748 +0100
|
|
@@ -118,6 +118,13 @@
|
|
username = flow_result["username"].strip().casefold()
|
|
|
|
users = await self.store.async_get_users()
|
|
+ hass = async_get_hass()
|
|
+ meta = self._user_meta.get(flow_result["username"], {})
|
|
+
|
|
+ pretty_name = meta.get("fullname")
|
|
+ if not pretty_name:
|
|
+ pretty_name = flow_result["username"]
|
|
+
|
|
for user in users:
|
|
if user.name and user.name.strip().casefold() != username:
|
|
continue
|
|
@@ -127,28 +134,34 @@
|
|
|
|
for credential in await self.async_credentials():
|
|
if credential.data["username"] and credential.data["username"].strip().casefold() == username:
|
|
+ coll: person.PersonStorageCollection = hass.data[person.DOMAIN][1]
|
|
+ found = False
|
|
+ for pers in coll.async_items():
|
|
+ if pers.get(person.ATTR_USER_ID) == user.id:
|
|
+ found = True
|
|
+ break
|
|
+
|
|
+ if "person" in hass.config.components and not found:
|
|
+ await person.async_create_person(hass, pretty_name, user_id=user.id)
|
|
+
|
|
return credential
|
|
|
|
cred = self.async_create_credentials({"username": username})
|
|
await self.store.async_link_user(user, cred)
|
|
return cred
|
|
|
|
- hass = async_get_hass()
|
|
- meta = self._user_meta.get(flow_result["username"], {})
|
|
-
|
|
provider = _async_get_hass_provider(hass)
|
|
await provider.async_initialize()
|
|
|
|
user = await hass.auth.async_create_user(flow_result["username"], group_ids=[meta.get("group")])
|
|
cred = await provider.async_get_or_create_credentials({"username": flow_result["username"]})
|
|
|
|
- pretty_name = meta.get("fullname")
|
|
- if not pretty_name:
|
|
- pretty_name = flow_result["username"]
|
|
await provider.data.async_save()
|
|
await hass.auth.async_link_user(user, cred)
|
|
+
|
|
if "person" in hass.config.components:
|
|
await person.async_create_person(hass, pretty_name, user_id=user.id)
|
|
+
|
|
# Create new credentials.
|
|
return cred
|
|
|