mirror of
https://git.ugnet.gay/CrossTalk/azul.git
synced 2026-05-27 14:49:50 +00:00
102 lines
3.7 KiB
Python
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()
|