Mini Shell
#!/opt/imh-python/bin/python3
"""CLI tool to run as a cPanel user which creates a MySQL database"""
from argparse import ArgumentParser
import sys
import string
import random
from cpapis import uapi, CpAPIExecFail, CpAPIErrorMsg
def create_database(suffix: str):
prefix = api('Mysql::get_restrictions')['data']['prefix']
name = f"{prefix}{suffix}"
chars = string.ascii_letters + string.digits + '_'
passwd = ''.join([random.choice(chars) for _ in range(15)])
api('Mysql::create_database', name=name)
print("Created database:", name)
api('Mysql::create_user', name=name, password=passwd)
print("Created database user:", name)
print(f"Password: '{passwd}'")
api(
'Mysql::set_privileges_on_database',
user=name,
database=name,
privileges='ALL',
)
print("Assigned privileges.")
def api(mod: str, **kwargs):
try:
return uapi(mod, args=kwargs, check=True)['result']
except CpAPIExecFail as exc:
sys.exit(exc.stderr)
def main():
try:
parser = ArgumentParser(description=__doc__)
parser.add_argument(
'suffix', help='end of database name: USER_{suffix}'
)
suffix = parser.parse_args().suffix
create_database(suffix)
except KeyboardInterrupt:
sys.exit(1)
except CpAPIErrorMsg as exc:
sys.exit(exc)
if __name__ == '__main__':
main()
Zerion Mini Shell 1.0