93 lines
2.5 KiB
Python
93 lines
2.5 KiB
Python
import click
|
|
import os
|
|
|
|
from zope import component
|
|
from ceo_common.interfaces import IConfig
|
|
|
|
from ..utils import http_post, http_get, http_delete
|
|
from .utils import handle_sync_response, check_file_path, check_if_in_development
|
|
|
|
|
|
def mysql_cli_response(file, username, password):
|
|
cfg_srv = component.getUtility(IConfig)
|
|
mysql_host = cfg_srv.get('mysql_host')
|
|
info = f"""MySQL Database Information for {username}
|
|
|
|
Your new MySQL database was created. To connect, use the following options:
|
|
|
|
Database: {username}
|
|
Username: {username}
|
|
Password: {password}
|
|
Host: {mysql_host}
|
|
|
|
On {mysql_host} to connect using the MySQL command-line client use
|
|
|
|
mysql {username} -u {username} -p
|
|
|
|
From other CSC machines you can connect using
|
|
|
|
mysql {username} -h {mysql_host} -u {username} -p
|
|
|
|
"""
|
|
with click.open_file(file, "w") as f:
|
|
f.write(info)
|
|
os.chown(file, username, username)
|
|
os.chmod(file, 0o640)
|
|
|
|
click.echo(f"""MySQL database created
|
|
|
|
Connection Information:
|
|
|
|
Database: {username}
|
|
Username: {username}
|
|
Password: {password}
|
|
Host: {mysql_host}
|
|
|
|
Settings and more info has been written to {file}""")
|
|
|
|
|
|
@click.group(short_help='Perform operations on MySQL')
|
|
def mysql():
|
|
pass
|
|
|
|
|
|
@mysql.command(short_help='Create a MySQL database for a user')
|
|
@click.argument('username')
|
|
def create(username):
|
|
resp = http_get(f'/api/members/{username}')
|
|
result = handle_sync_response(resp)
|
|
info_file_path = os.path.join(result['home_directory'], "ceo-mysql-info")
|
|
|
|
check_file_path(info_file_path)
|
|
|
|
resp = http_post(f'/api/db/mysql/{username}')
|
|
result = handle_sync_response(resp)
|
|
password = result['password']
|
|
|
|
mysql_cli_response(info_file_path, username, password)
|
|
|
|
|
|
@mysql.command(short_help='Reset the password of a MySQL user')
|
|
@click.argument('username')
|
|
def pwreset(username):
|
|
resp = http_get(f'/api/members/{username}')
|
|
result = handle_sync_response(resp)
|
|
info_file_path = os.path.join(result['home_directory'], "ceo-mysql-info")
|
|
|
|
check_file_path(info_file_path)
|
|
|
|
resp = http_post(f'/api/db/mysql/{username}/pwreset')
|
|
result = handle_sync_response(resp)
|
|
password = result['password']
|
|
|
|
mysql_cli_response(info_file_path, username, password)
|
|
|
|
|
|
@mysql.command(short_help="Delete the database of a MySQL user")
|
|
@click.argument('username')
|
|
def delete(username):
|
|
check_if_in_development()
|
|
click.confirm("Are you sure?", abort=True)
|
|
resp = http_delete(f'/api/db/mysql/{username}')
|
|
handle_sync_response(resp)
|