lib.itmens/users/migrations/0013_init_identity.py
2023-10-22 17:46:34 -04:00

77 lines
2.6 KiB
Python

# Generated by Django 4.2.4 on 2023-08-09 16:54
from django.conf import settings
from django.db import migrations, models, transaction
from loguru import logger
from tqdm import tqdm
from takahe.models import Domain as TakaheDomain
from takahe.models import Identity as TakaheIdentity
from takahe.models import User as TakaheUser
domain = settings.SITE_INFO["site_domain"]
service_domain = settings.SITE_INFO.get("site_service_domain")
def init_domain(apps, schema_editor):
d = TakaheDomain.objects.filter(domain=domain).first()
if not d:
logger.info(f"Creating takahe domain {domain}")
TakaheDomain.objects.create(
domain=domain,
local=True,
service_domain=service_domain,
notes="NeoDB",
nodeinfo={},
)
else:
logger.info(f"Takahe domain {domain} already exists")
def init_identity(apps, schema_editor):
User = apps.get_model("users", "User")
APIdentity = apps.get_model("users", "APIdentity")
tdomain = TakaheDomain.objects.filter(domain=domain).first()
if User.objects.filter(username__isnull=True).exists():
raise ValueError("null username detected, aborting migration")
if TakaheUser.objects.exists():
raise ValueError("existing Takahe users detected, aborting migration")
if TakaheIdentity.objects.exists():
raise ValueError("existing Takahe identities detected, aborting migration")
if APIdentity.objects.exists():
raise ValueError("existing APIdentity data detected, aborting migration")
logger.info(f"Creating takahe users/identities")
for user in tqdm(User.objects.all()):
username = user.username
handler = "@" + username
identity = APIdentity.objects.create(
pk=user.pk,
user=user,
local=True,
username=username,
domain_name=domain,
deleted=None if user.is_active else user.updated,
)
takahe_user = TakaheUser.objects.create(pk=user.pk, email=handler)
takahe_identity = TakaheIdentity.objects.create(
pk=user.pk,
actor_uri=f"https://{service_domain or domain}/@{username}@{domain}/",
username=username,
domain=tdomain,
name=username,
local=True,
discoverable=not user.preference.no_anonymous_view,
)
takahe_user.identities.add(takahe_identity)
class Migration(migrations.Migration):
dependencies = [
("users", "0012_apidentity"),
]
operations = [
migrations.RunPython(init_domain),
migrations.RunPython(init_identity),
]