mirror of
https://git.ugnet.gay/CrossTalk/azul.git
synced 2026-05-27 14:49:50 +00:00
148 lines
5.7 KiB
Python
148 lines
5.7 KiB
Python
from typing import Dict, List
|
|
from uuid import uuid4
|
|
|
|
from core.models import ContactList
|
|
from core.db import Base, User, UserProfile, UserContact, Circle, CircleMembership, Sound
|
|
from core.conn import Conn
|
|
from util import misc, hash
|
|
import settings, random
|
|
|
|
usercontacts_by_id_by_uuid = {} # type: Dict[int, Dict[str, UserContact]]
|
|
|
|
def main() -> None:
|
|
U = [] # type: List[User]
|
|
|
|
for domain in ['example.com', 'yahoo.com', 'hotmail.com', 'live.com', 'aol.com', 'msn.com']:
|
|
d = domain[0]
|
|
for i in range(1, 5 + 1):
|
|
name = "T{}{}".format(i, d)
|
|
user = create_user('{}@{}'.format(name.lower(), domain), name.lower(), random.randint(100000,999999), 'Test', 'User', '123456', name, "{} msg".format(name), False, True)
|
|
user.id = len(U)
|
|
usercontacts_by_id_by_uuid[user.id] = {}
|
|
U.append(user)
|
|
for i in range(1, 5 + 1):
|
|
name = "D{}{}".format(i, d)
|
|
user = create_user('{}@{}'.format(name.lower(), domain), name.lower(), random.randint(100000,999999), 'Test', 'User', '123456', name, "{} msg".format(name), False, False)
|
|
user.id = len(U)
|
|
usercontacts_by_id_by_uuid[user.id] = {}
|
|
U.append(user)
|
|
|
|
for i in range(5):
|
|
name = "bot{}".format(i)
|
|
user = create_user('{}@crosstalk.net'.format(name.lower()), name.lower(), random.randint(100000,999999), 'Dummy', 'Bot', '123456', name, "{} msg".format(name), False, False)
|
|
user.id = len(U)
|
|
usercontacts_by_id_by_uuid[user.id] = {}
|
|
U.append(user)
|
|
|
|
for i in range(2):
|
|
name = "BannedUser{}".format(i)
|
|
user = create_user('{}@banned.net'.format(name.lower()), name.lower(), random.randint(100000,999999), 'Banned', 'Guy', '123456', name, "{} msg".format(name), True, False)
|
|
user.id = len(U)
|
|
usercontacts_by_id_by_uuid[user.id] = {}
|
|
U.append(user)
|
|
|
|
for i, u in enumerate(U):
|
|
contacts_by_group: Dict[str, ContactList[User]] = {}
|
|
|
|
x = randomish(u)
|
|
for j in range(x % 4):
|
|
contacts_by_group["" if j == 0 else "U{}G{}".format(i, j)] = []
|
|
group_names = list(contacts_by_group.keys())
|
|
for uc in U:
|
|
y = x ^ randomish(uc)
|
|
for k, group_name in enumerate(group_names):
|
|
z = y ^ k
|
|
if z % 2 < 1:
|
|
contacts_by_group[group_name].append(uc)
|
|
|
|
set_contacts(u, contacts_by_group)
|
|
add_profile(u)
|
|
|
|
tables = []
|
|
|
|
for u in U:
|
|
tables.append(u)
|
|
tables.extend(usercontacts_by_id_by_uuid[u.id].values())
|
|
|
|
conn = Conn(settings.DB)
|
|
Base.metadata.create_all(conn.engine)
|
|
with conn.session() as sess:
|
|
sess.query(User).delete()
|
|
sess.query(UserContact).delete()
|
|
sess.query(UserProfile).delete()
|
|
sess.query(Circle).delete()
|
|
sess.query(CircleMembership).delete()
|
|
sess.query(Sound).delete()
|
|
sess.add_all(tables)
|
|
|
|
def create_user(email: str, username: str, uin: int, first_name: str, last_name: str, pw: str, name: str, message: str, suspended: bool = False, is_tester: bool = False, is_mvp: bool = False) -> User:
|
|
user = User(
|
|
uuid = str(uuid4()), email = email, username = username, first_name = first_name, last_name = last_name, uin = uin, verified_to_login = True,
|
|
name = name, is_tester = is_tester, is_mvp = is_mvp, show_in_dir = True, friendly_name = name, message = message,
|
|
groups = [], settings = {}, suspended = suspended
|
|
)
|
|
set_passwords(user, pw, support_old_msn = True, support_yahoo = True, support_old_aim = True)
|
|
return user
|
|
|
|
def set_contacts(user: User, contacts_by_group: Dict[str, List[User]]) -> None:
|
|
#user.contacts = {}
|
|
user.groups = []
|
|
|
|
for i, (group_name, group_users) in enumerate(contacts_by_group.items()):
|
|
group_id = str(i + 1)
|
|
group_uuid = str(uuid4())
|
|
if group_name:
|
|
user.groups.append({ 'id': group_id, 'uuid': group_uuid, 'name': group_name, 'is_favorite': False })
|
|
for u in group_users:
|
|
contact = add_contact_twosided(user, u)
|
|
if group_name:
|
|
contact.groups.append({ 'id': group_id, 'uuid': group_uuid })
|
|
|
|
def randomish(u: User) -> int:
|
|
return int(u.uuid[:8], 16)
|
|
|
|
def add_contact_twosided(user: User, user_contact: User) -> UserContact:
|
|
contact = add_contact_onesided(user, user_contact, ContactList.AL | ContactList.FL)
|
|
add_contact_onesided(user_contact, user, ContactList.RL)
|
|
return contact
|
|
|
|
def add_contact_onesided(user: User, user_contact: User, lst: ContactList) -> UserContact:
|
|
if user_contact.id not in usercontacts_by_id_by_uuid[user.id]:
|
|
usercontacts_by_id_by_uuid[user.id][user_contact.uuid] = create_usercontact(user, user_contact)
|
|
contact = usercontacts_by_id_by_uuid[user.id][user_contact.uuid]
|
|
contact.lists |= lst
|
|
return contact
|
|
|
|
def create_usercontact(user: User, user_contact: User) -> UserContact:
|
|
return UserContact(
|
|
user_id = user.id, user_uuid = user.uuid, contact_id = user_contact.id, uuid = user_contact.uuid,
|
|
index_id = str(len(usercontacts_by_id_by_uuid[user.id]) + 2),
|
|
name = user_contact.friendly_name,
|
|
lists = ContactList.Empty, groups = [], is_messenger_user = True,
|
|
)
|
|
|
|
def add_profile(user: User) -> UserProfile:
|
|
return UserProfile(user_id = user.id, bio = 'I am a dummy!', pronouns = 'it/its', website = 'http://example.com', socials = {}, streetaddr = '', city = '', state = '', zip = '', country = '', interests = {})
|
|
|
|
def set_passwords(user: User, pw: str, *, support_old_msn: bool = False, support_yahoo: bool = False,
|
|
support_old_aim: bool = False) -> None:
|
|
user.password = hash.hasher.encode(pw)
|
|
|
|
if support_old_msn:
|
|
pw_md5 = hash.hasher_md5.encode(pw)
|
|
user.set_front_data('msn', 'pw_md5', pw_md5)
|
|
|
|
if support_yahoo:
|
|
pw_md5_unsalted = hash.hasher_md5.encode(pw, salt='')
|
|
user.set_front_data('ymsg', 'pw_md5_unsalted', pw_md5_unsalted)
|
|
|
|
pw_md5crypt = hash.hasher_md5crypt.encode(pw, salt='$1$_2S43d5f')
|
|
user.set_front_data('ymsg', 'pw_md5crypt', pw_md5crypt)
|
|
|
|
if support_old_aim:
|
|
pw_md5 = hash.hasher_md5.encode(pw, identifier='AOL Instant Messenger (SM)')
|
|
user.set_front_data('aim', 'pw_md5', pw_md5)
|
|
|
|
if __name__ == '__main__':
|
|
main()
|