Files
azul/script/manageuser.py
T
Athena Funderburg 4b463a3432 init
2026-05-25 07:05:17 +00:00

102 lines
3.7 KiB
Python

# TODO: holy shit clean this up this is awful
import argparse, asyncio, getpass, settings
from insclient.cmds import usercreate, userupdate, userdelete
from core.conn import Conn
from core import db
def _parse_args():
p = argparse.ArgumentParser(prog='manageuser.py')
sub = p.add_subparsers(dest='cmd', required=True)
sc_create = sub.add_parser('create')
sc_create.add_argument('email')
sc_create.add_argument('username')
sc_create.add_argument('first_name')
sc_create.add_argument('last_name')
sc_create.add_argument('uin', type=int)
sc_create.add_argument('--password', '-p', help='user password (if omitted, prompted)')
sc_create.add_argument('--oldmsn', action='store_true')
sc_create.add_argument('--yahoo', action='store_true')
sc_create.add_argument('--oldaim', action='store_true')
sc_create.add_argument('--msim', action='store_true')
sc_mod = sub.add_parser('modify')
sc_mod.add_argument('email')
sc_mod.add_argument('field')
sc_mod.add_argument('value')
sc_mod.add_argument('--oldmsn', action='store_true', help='also (re)generate legacy MSN MD5 hash when changing password')
sc_mod.add_argument('--yahoo', action='store_true', help='also (re)generate legacy Yahoo hashes when changing password')
sc_mod.add_argument('--oldaim', action='store_true', help='also (re)generate legacy AIM MD5 hash when changing password')
sc_mod.add_argument('--msim', action='store_true', help='also (re)generate legacy MSIM SHA-1 hash when changing password')
sc_del = sub.add_parser('delete')
sc_del.add_argument('email', help='email of the user to delete')
return p.parse_args()
async def _do_create(email: str, username: str, first_name: str, last_name: str, uin: int, user_password: str, oldmsn: bool, yahoo: bool, oldaim: bool, msim: bool) -> None:
try:
await usercreate(
email, username, first_name, last_name, uin, user_password,
oldmsn, yahoo, oldaim, msim, b'AzuL-SERV', settings.INS_LINK_PASSWORD
)
print("Operation successful!")
except Exception as e:
print("Operation failed:", e)
async def _do_modify(email: str, field: str, value: str, oldmsn: bool, yahoo: bool, oldaim: bool, msim: bool) -> None:
conn = Conn(settings.DB)
with conn.session() as sess:
user = sess.query(db.User).filter(db.User.email == email).first()
if not user:
print('User does not exist.')
return
uuid = user.uuid
if field == 'password' and value == '-':
value = getpass.getpass('Password: ')
try:
if field == 'password':
await userupdate(uuid, field, value, b'AzuL-SERV', settings.INS_LINK_PASSWORD, support_old_msn=oldmsn, support_yahoo=yahoo, support_aim=oldaim, support_msim=msim)
else:
await userupdate(uuid, field, value, b'AzuL-SERV', settings.INS_LINK_PASSWORD)
print("Operation successful!")
except Exception as e:
print("Operation failed:", e)
async def _do_delete(email: str) -> None:
conn = Conn(settings.DB)
with conn.session() as sess:
user = sess.query(db.User).filter(db.User.email == email).first()
if not user:
print('User does not exist.')
return
uuid = user.uuid
try:
await userdelete(uuid, b'AzuL-SERV', settings.INS_LINK_PASSWORD)
print("Operation successful!")
except Exception as e:
print("Operation failed:", e)
def main():
args = _parse_args()
if args.cmd == 'create':
pw = args.password
if not pw:
pw = getpass.getpass('Password: ')
asyncio.run(_do_create(
args.email, args.username, args.first_name, args.last_name, args.uin,
pw, args.oldmsn, args.yahoo, args.oldaim, args.msim
))
elif args.cmd == 'modify':
asyncio.run(_do_modify(
args.email, args.field, args.value, args.oldmsn, args.yahoo, args.oldaim, args.msim
))
elif args.cmd == 'delete':
asyncio.run(_do_delete(args.email))
if __name__ == '__main__':
main()