diff --git a/util/adduser.py b/util/adduser.py new file mode 100644 index 00000000..7e35d13d --- /dev/null +++ b/util/adduser.py @@ -0,0 +1,67 @@ +import argparse +import sys +import traceback + +from aurweb import db +from aurweb.models.account_type import AccountType +from aurweb.models.ssh_pub_key import SSHPubKey, get_fingerprint +from aurweb.models.user import User + + +def parse_args(): + parser = argparse.ArgumentParser(description="aurweb-adduser options") + + parser.add_argument("-u", "--username", help="Username", required=True) + parser.add_argument("-e", "--email", help="Email", required=True) + parser.add_argument("-p", "--password", help="Password", required=True) + parser.add_argument("-r", "--realname", help="Real Name") + parser.add_argument("-i", "--ircnick", help="IRC Nick") + parser.add_argument("--pgp-key", help="PGP Key Fingerprint") + parser.add_argument("--ssh-pubkey", help="SSH PubKey") + + parser.add_argument("-t", "--type", help="Account Type", + choices=[ + "User", + "Trusted User", + "Developer", + "Trusted User & Developer" + ], default="User") + + return parser.parse_args() + + +def main(): + args = parse_args() + + type = db.query(AccountType, + AccountType.AccountType == args.type).first() + with db.begin(): + user = db.create(User, Username=args.username, + Email=args.email, Passwd=args.password, + RealName=args.realname, IRCNick=args.ircnick, + PGPKey=args.pgp_key, AccountType=type) + + if args.ssh_pubkey: + pubkey = args.ssh_pubkey.strip() + + # Remove host from the pubkey if it's there. + pubkey = ' '.join(pubkey.split(' ')[:2]) + + with db.begin(): + db.create(SSHPubKey, + User=user, + PubKey=pubkey, + Fingerprint=get_fingerprint(pubkey)) + + print(user.json()) + return 0 + + +if __name__ == "__main__": + e = 1 + try: + e = main() + except Exception: + traceback.print_exc() + e = 1 + sys.exit(e)