1 """Script to manage users for the Home Assistant auth provider."""
5 from collections.abc
import Sequence
8 from typing
import TYPE_CHECKING
10 from homeassistant
import runner
20 def run(args: Sequence[str] |
None) ->
None:
21 """Handle Home Assistant auth provider script."""
22 parser = argparse.ArgumentParser(description=
"Manage Home Assistant users")
23 parser.add_argument(
"--script", choices=[
"auth"])
28 help=
"Directory that contains the Home Assistant configuration",
31 subparsers = parser.add_subparsers(dest=
"func")
32 subparsers.required =
True
33 parser_list = subparsers.add_parser(
"list")
34 parser_list.set_defaults(func=list_users)
36 parser_add = subparsers.add_parser(
"add")
37 parser_add.add_argument(
"username", type=str)
38 parser_add.add_argument(
"password", type=str)
39 parser_add.set_defaults(func=add_user)
41 parser_validate_login = subparsers.add_parser(
"validate")
42 parser_validate_login.add_argument(
"username", type=str)
43 parser_validate_login.add_argument(
"password", type=str)
44 parser_validate_login.set_defaults(func=validate_login)
46 parser_change_pw = subparsers.add_parser(
"change_password")
47 parser_change_pw.add_argument(
"username", type=str)
48 parser_change_pw.add_argument(
"new_password", type=str)
49 parser_change_pw.set_defaults(func=change_password)
56 """Run the command."""
58 await asyncio.gather(dr.async_load(hass), er.async_load(hass))
60 provider = hass.auth.auth_providers[0]
61 await provider.async_initialize()
62 await args.func(hass, provider, args)
65 logging.getLogger(
"homeassistant.core").setLevel(logging.WARNING)
67 await hass.async_stop()
71 hass: HomeAssistant, provider: hass_auth.HassAuthProvider, args: argparse.Namespace
77 for user
in provider.data.users:
79 print(user[
"username"])
82 print(
"Total users:", count)
86 hass: HomeAssistant, provider: hass_auth.HassAuthProvider, args: argparse.Namespace
92 provider.data.add_auth(args.username, args.password)
93 except hass_auth.InvalidUser:
94 print(
"Username already exists!")
98 await provider.data.async_save()
103 hass: HomeAssistant, provider: hass_auth.HassAuthProvider, args: argparse.Namespace
105 """Validate a login."""
109 provider.data.validate_login(args.username, args.password)
111 except hass_auth.InvalidAuth:
112 print(
"Auth invalid")
116 hass: HomeAssistant, provider: hass_auth.HassAuthProvider, args: argparse.Namespace
118 """Change password."""
122 provider.data.change_password(args.username, args.new_password)
123 await provider.data.async_save()
124 print(
"Password changed")
125 except hass_auth.InvalidUser:
126 print(
"User not found")
AuthManager auth_manager_from_config(HomeAssistant hass, list[dict[str, Any]] provider_configs, list[dict[str, Any]] module_configs)
str get_default_config_dir()
None list_users(HomeAssistant hass, hass_auth.HassAuthProvider provider, argparse.Namespace args)
None run(Sequence[str]|None args)
None add_user(HomeAssistant hass, hass_auth.HassAuthProvider provider, argparse.Namespace args)
None run_command(argparse.Namespace args)
None validate_login(HomeAssistant hass, hass_auth.HassAuthProvider provider, argparse.Namespace args)
None change_password(HomeAssistant hass, hass_auth.HassAuthProvider provider, argparse.Namespace args)