user_manager
Users, administrators and groups stored as flat files.
keys/admins/<username>: the administrator's public key PEM.keys/users/<username>: a--- Settings ---YAML block followed by a--- Public Key ---PEM block.groups/<name>: YAML settings applied on top of member users' settings.
Files are re-scanned after every change (and by the configuration watcher when they are edited by hand).
attributelogger= logging.getLogger(__name__)attributeUSER_DATAdict[str, dict[str, Any]]= {}attributeGROUP_DATAdict[str, dict[str, Any]]= {}attributeDEFAULT_USER_SETTINGSdict[str, Any]= {'active': True, 'group': 'none', 'persistent_storage': True, 'public_sharing': False, 'harden_container': False, 'harden_openbox': False, 'gpu': True, 'storage_limit': -1, 'session_limit': -1}attributeSERVER_PUBLIC_KEY_PEMstr | None= NoneattributeEXTERNAL_API_PORTint= getattr(settings, 'api_port', 8000)attributeEXTERNAL_SESSION_PORTint= getattr(settings, 'session_port', 8443)funcset_server_public_key(key) -> NoneRecord the server public key used in generated admin config files.
paramkeystrReturns
Nonefuncset_external_ports(api_port, session_port) -> NoneRecord the externally reachable ports used in generated config files.
paramapi_portintparamsession_portintReturns
Nonefunc_atomic_write(path, content, mode=384) -> NoneWrite content to path atomically with the given permissions.
parampathstrparamcontentstrparammodeint= 384Returns
Nonefunc_generate_key_pair(key_size=2048) -> tuple[str, str]Generate an RSA key pair.
paramkey_sizeint= 2048Modulus size in bits.
Returns
tuple(private_pem, public_pem).
funcparse_key_file(path) -> tuple[dict[str, Any] | None, str | None]Parse a user file into settings and public key.
parampathstrFile under keys/users.
Returns
tuple(settings, public_key_pem); both None when unreadable.
funcwrite_user_file(username, pub_key_pem, settings_dict) -> NoneWrite (or replace) a user's settings and public key file.
paramusernamestrThe user.
parampub_key_pemstrPublic key PEM.
paramsettings_dictdict[str, Any]Settings to store.
Returns
Nonefunc_generate_default_admin() -> NoneCreate the default admin account when no administrator exists.
The generated private key is written to admin.json three levels above
the keys directory (/config/admin.json by default) for the operator to
import into a client and then delete.
Returns
Nonefuncload_users_and_groups() -> NoneRe-scan the key and group directories into memory.
Returns
Nonefuncget_user(username) -> dict[str, Any] | NoneReturn a user record by name.
paramusernamestrReturns
dict[str, typing.Any] | Nonefuncget_effective_settings(username) -> dict[str, Any]Return a user's settings with their group's settings applied on top.
Administrators always get the defaults.
paramusernamestrReturns
dict[str, typing.Any]funcget_all_users() -> list[dict[str, Any]]Return every non-admin user.
Returns
list[dict[str, typing.Any]]funcget_all_admins() -> list[dict[str, Any]]Return every administrator.
Returns
list[dict[str, typing.Any]]funcget_all_groups() -> list[dict[str, Any]]Return every group.
Returns
list[dict[str, typing.Any]]func_validate_username(username) -> NoneRaise ValueError for names that are not filesystem safe.
paramusernamestrReturns
Nonefunccreate_admin(username, public_key) -> tuple[dict[str, Any], str | None]Create an administrator.
paramusernamestrNew admin name.
parampublic_keystr | NonePublic key PEM, or None to generate a key pair.
Returns
tuple(user_record, private_key_pem_or_None).
funcdelete_admin(username) -> NoneDelete an administrator and their storage.
paramusernamestrReturns
Nonefunccreate_user(username, public_key, settings_dict) -> tuple[dict[str, Any], str | None]Create a user.
paramusernamestrNew user name.
parampublic_keystr | NonePublic key PEM, or None to generate a key pair.
paramsettings_dictdict[str, Any]Initial settings.
Returns
tuple(user_record, private_key_pem_or_None).
funcdelete_user(username) -> NoneDelete a user and their storage.
paramusernamestrReturns
Nonefuncupdate_user_settings(username, new_settings) -> NoneReplace a user's settings.
paramusernamestrparamnew_settingsdict[str, Any]Returns
Nonefuncwrite_group_file(group_name, settings_dict) -> NoneCreate or replace a group file and reload.
paramgroup_namestrGroup name (validated by the API model).
paramsettings_dictdict[str, Any]Settings applied to members.
Returns
Nonefuncdelete_group(group_name) -> NoneDelete a group.
paramgroup_namestrReturns
Nonefuncget_home_dirs(username) -> list[str]List a user's home directories (sub-directories of their storage).
paramusernamestrReturns
list[str]funccreate_home_dir(username, home_name) -> NoneCreate a home directory for a user.
paramusernamestrparamhome_namestrReturns
Nonefuncdelete_home_dir(username, home_name) -> NoneDelete a user's home directory.
paramusernamestrparamhome_namestrReturns
None