This commit is contained in:
Athena Funderburg
2026-05-25 07:05:17 +00:00
commit 4b463a3432
682 changed files with 47796 additions and 0 deletions
+147
View File
@@ -0,0 +1,147 @@
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()