Source code for draugr.os_utilities.linux_utilities.user_utilities

__author__ = "Christian Heider Nielsen"
__doc__ = r"""description"""
__all__ = ["make_user", "remove_user", "change_passwd", "change_home_dir"]

from pathlib import Path

from warg import ContextWrapper


[docs]def make_user( username: str = "demo_user", password: str = None, *, add_home: bool = True, home_dir: Path = None, allow_existing_user: bool = True, get_sudo: bool = True, ) -> None: """description""" import crypt import sh import getpass query = [] if add_home: query += [f"-m", f"-d"] if home_dir: query += [str(home_dir)] else: query += [f"/home/{username}"] try: user_id = sh.id(["-u", username]) if int(user_id): if not allow_existing_user: raise FileExistsError group_id = sh.id(["-g", username]) print(f"user {username} exists with id {user_id} and {group_id}") except (ValueError, sh.ErrorReturnCode_1): pass with ContextWrapper( sh.contrib.sudo, construction_kwargs=dict( password=getpass.getpass( prompt=f"[sudo] password for {getpass.getuser()}: " ) if get_sudo else None, _with=True, ), enabled=get_sudo, ): try: sh.useradd( query + [ f"-p", f"{crypt.crypt(password if password else input(f'new password for user {username}: '), '22')}", f"{username}", ] ) except sh.ErrorReturnCode_9: pass
[docs]def remove_user( username: str = "demo_user", *, remove_home: bool = True, get_sudo: bool = True ) -> None: """description""" import sh import getpass try: user_id = sh.id(["-u", username]) if int(user_id): print(f"User {username} exists with id {user_id}") with ContextWrapper( sh.contrib.sudo, construction_kwargs=dict( password=getpass.getpass( prompt=f"[sudo] password for {getpass.getuser()}: " ) if get_sudo else None, _with=True, ), enabled=get_sudo, ): sh.userdel((["-r"] if remove_home else []) + [f"{username}"]) print(f"Removed user {username}") except (ValueError, sh.ErrorReturnCode_1): pass
[docs]def change_passwd( username: str = "demo_user", password: str = None, ) -> None: """ :param username: :param password: """ raise NotImplementedError pass # ./passwd
[docs]def change_home_dir(username: str = "demo_user", new_home: str = None) -> None: """ :param username: :param new_home: """ raise NotImplementedError pass # ./mkhomedir_helper username
if __name__ == "__main__": make_user() remove_user()