SealSkin
Server Reference

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
= None
attributeEXTERNAL_API_PORTint
= getattr(settings, 'api_port', 8000)
attributeEXTERNAL_SESSION_PORTint
= getattr(settings, 'session_port', 8443)
funcset_server_public_key(key) -> None

Record the server public key used in generated admin config files.

paramkeystr

Returns

None
funcset_external_ports(api_port, session_port) -> None

Record the externally reachable ports used in generated config files.

paramapi_portint
paramsession_portint

Returns

None
func_atomic_write(path, content, mode=384) -> None

Write content to path atomically with the given permissions.

parampathstr
paramcontentstr
parammodeint
= 384

Returns

None
func_generate_key_pair(key_size=2048) -> tuple[str, str]

Generate an RSA key pair.

paramkey_sizeint
= 2048

Modulus 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.

parampathstr

File under keys/users.

Returns

tuple

(settings, public_key_pem); both None when unreadable.

funcwrite_user_file(username, pub_key_pem, settings_dict) -> None

Write (or replace) a user's settings and public key file.

paramusernamestr

The user.

parampub_key_pemstr

Public key PEM.

paramsettings_dictdict[str, Any]

Settings to store.

Returns

None
func_generate_default_admin() -> None

Create 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

None
funcload_users_and_groups() -> None

Re-scan the key and group directories into memory.

Returns

None
funcget_user(username) -> dict[str, Any] | None

Return a user record by name.

paramusernamestr

Returns

dict[str, typing.Any] | None
funcget_effective_settings(username) -> dict[str, Any]

Return a user's settings with their group's settings applied on top.

Administrators always get the defaults.

paramusernamestr

Returns

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) -> None

Raise ValueError for names that are not filesystem safe.

paramusernamestr

Returns

None
funccreate_admin(username, public_key) -> tuple[dict[str, Any], str | None]

Create an administrator.

paramusernamestr

New admin name.

parampublic_keystr | None

Public key PEM, or None to generate a key pair.

Returns

tuple

(user_record, private_key_pem_or_None).

funcdelete_admin(username) -> None

Delete an administrator and their storage.

paramusernamestr

Returns

None
funccreate_user(username, public_key, settings_dict) -> tuple[dict[str, Any], str | None]

Create a user.

paramusernamestr

New user name.

parampublic_keystr | None

Public 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) -> None

Delete a user and their storage.

paramusernamestr

Returns

None
funcupdate_user_settings(username, new_settings) -> None

Replace a user's settings.

paramusernamestr
paramnew_settingsdict[str, Any]

Returns

None
funcwrite_group_file(group_name, settings_dict) -> None

Create or replace a group file and reload.

paramgroup_namestr

Group name (validated by the API model).

paramsettings_dictdict[str, Any]

Settings applied to members.

Returns

None
funcdelete_group(group_name) -> None

Delete a group.

paramgroup_namestr

Returns

None
funcget_home_dirs(username) -> list[str]

List a user's home directories (sub-directories of their storage).

paramusernamestr

Returns

list[str]
funccreate_home_dir(username, home_name) -> None

Create a home directory for a user.

paramusernamestr
paramhome_namestr

Returns

None
funcdelete_home_dir(username, home_name) -> None

Delete a user's home directory.

paramusernamestr
paramhome_namestr

Returns

None