Skip to content
Snippets Groups Projects
create_account.py 1.78 KiB
Newer Older
Bo-Chun Chen's avatar
Bo-Chun Chen committed
#!/usr/bin/env python3
import json
Bo-Chun Chen's avatar
Bo-Chun Chen committed
import sys
import rc_util
Bo-Chun Chen's avatar
Bo-Chun Chen committed
import argparse
Bo-Chun Chen's avatar
Bo-Chun Chen committed
import signal
Bo-Chun Chen's avatar
Bo-Chun Chen committed
parser = argparse.ArgumentParser()
parser.add_argument('username', help='username that will be created')
parser.add_argument('email', nargs='?', default='', help="User's email")
parser.add_argument('full_name', nargs='?', default='', help="User's full name")
parser.add_argument('reason', nargs='?', default='', help='Reason of requesting')
parser.add_argument('--domain', default='localhost', help='domain of email')
Bo-Chun Chen's avatar
Bo-Chun Chen committed
parser.add_argument('-v', '--verbose', action='store_true', help='verbose output')
parser.add_argument('-n', '--dry-run', action='store_true', help='enable dry run mode')
Bo-Chun Chen's avatar
Bo-Chun Chen committed
args = parser.parse_args()
Bo-Chun Chen's avatar
Bo-Chun Chen committed
timeout = 60
Bo-Chun Chen's avatar
Bo-Chun Chen committed
if args.email == '':
    args.email = args.username
    if '@' not in args.email:
        args.email = args.username + '@' + args.domain
Bo-Chun Chen's avatar
Bo-Chun Chen committed
def timeout_handler(signum, frame):
    print("Process timeout, there's might some issue with agents")
    rc_util.rc_rmq.stop_consume()


def callback(channel, method, properties, body):
    msg = json.loads(body)
    username = msg['username']

    if msg['success']:
        print(f'Account for {username} has been created.')
    else:
        print(f"There's some issue while creating account for {username}")
        errmsg = msg.get('errmsg', [])
        for err in errmsg:
            print(err)
    rc_util.rc_rmq.stop_consume()
    rc_util.rc_rmq.delete_queue()
Bo-Chun Chen's avatar
Bo-Chun Chen committed
rc_util.add_account(args.username, email=args.email, full=args.full_name, reason=args.reason)
Bo-Chun Chen's avatar
Bo-Chun Chen committed
print(f'Account for {args.username} requested.')
Bo-Chun Chen's avatar
Bo-Chun Chen committed
# Set initial timeout timer
signal.signal(signal.SIGALRM, timeout_handler)
signal.setitimer(signal.ITIMER_REAL, timeout)

Bo-Chun Chen's avatar
Bo-Chun Chen committed
print('Waiting for completion...')
rc_util.consume(args.username, routing_key=f'complete.{args.username}', callback=callback)