mirror of https://github.com/jumpserver/jumpserver
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
106 lines
4.2 KiB
106 lines
4.2 KiB
# Generated by Django 3.1.6 on 2021-06-06 03:42
|
|
|
|
from django.utils import timezone
|
|
from django.db import migrations, models, transaction
|
|
import django.db.models.deletion
|
|
|
|
|
|
def migrate_system_assets_to_authbook(apps, schema_editor):
|
|
system_user_model = apps.get_model("assets", "SystemUser")
|
|
system_user_asset_model = system_user_model.assets.through
|
|
authbook_model = apps.get_model('assets', 'AuthBook')
|
|
history_model = apps.get_model("assets", "HistoricalAuthBook")
|
|
|
|
print()
|
|
system_users = system_user_model.objects.all()
|
|
for s in system_users:
|
|
while True:
|
|
systemuser_asset_relations = system_user_asset_model.objects.filter(systemuser=s)[:1000]
|
|
if not systemuser_asset_relations:
|
|
break
|
|
authbooks = []
|
|
relations_ids = []
|
|
historys = []
|
|
for i in systemuser_asset_relations:
|
|
authbook = authbook_model(asset=i.asset, systemuser=i.systemuser, org_id=s.org_id)
|
|
authbooks.append(authbook)
|
|
relations_ids.append(i.id)
|
|
|
|
history = history_model(
|
|
asset=i.asset, systemuser=i.systemuser,
|
|
date_created=timezone.now(), date_updated=timezone.now(),
|
|
)
|
|
history.history_type = '-'
|
|
history.history_date = timezone.now()
|
|
historys.append(history)
|
|
|
|
with transaction.atomic():
|
|
print(" Migrate system user assets relations: {} items".format(len(relations_ids)))
|
|
authbook_model.objects.bulk_create(authbooks, ignore_conflicts=True)
|
|
history_model.objects.bulk_create(historys)
|
|
system_user_asset_model.objects.filter(id__in=relations_ids).delete()
|
|
|
|
|
|
def migrate_authbook_secret_to_system_user(apps, schema_editor):
|
|
authbook_model = apps.get_model('assets', 'AuthBook')
|
|
history_model = apps.get_model('assets', 'HistoricalAuthBook')
|
|
|
|
print()
|
|
authbooks_without_systemuser = authbook_model.objects.filter(systemuser__isnull=True)
|
|
for authbook in authbooks_without_systemuser:
|
|
matched = authbook_model.objects.filter(
|
|
asset=authbook.asset, systemuser__username=authbook.username
|
|
)
|
|
if not matched:
|
|
continue
|
|
historys = []
|
|
for i in matched:
|
|
history = history_model(
|
|
asset=i.asset, systemuser=i.systemuser,
|
|
date_created=timezone.now(), date_updated=timezone.now(),
|
|
version=authbook.version
|
|
)
|
|
history.history_type = '-'
|
|
history.history_date = timezone.now()
|
|
historys.append(history)
|
|
|
|
with transaction.atomic():
|
|
print(" Migrate secret to system user assets account: {} items".format(len(historys)))
|
|
matched.update(password=authbook.password, private_key=authbook.private_key,
|
|
public_key=authbook.public_key, version=authbook.version)
|
|
history_model.objects.bulk_create(historys)
|
|
|
|
|
|
class Migration(migrations.Migration):
|
|
|
|
dependencies = [
|
|
('assets', '0072_historicalauthbook'),
|
|
]
|
|
|
|
operations = [
|
|
migrations.AddField(
|
|
model_name='authbook',
|
|
name='systemuser',
|
|
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='assets.systemuser', verbose_name='System user'),
|
|
),
|
|
migrations.AddField(
|
|
model_name='historicalauthbook',
|
|
name='systemuser',
|
|
field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='assets.systemuser', verbose_name='System user'),
|
|
),
|
|
migrations.AlterUniqueTogether(
|
|
name='authbook',
|
|
unique_together={('username', 'asset', 'systemuser')},
|
|
),
|
|
migrations.RunPython(migrate_system_assets_to_authbook),
|
|
migrations.RunPython(migrate_authbook_secret_to_system_user),
|
|
migrations.RemoveField(
|
|
model_name='authbook',
|
|
name='is_latest',
|
|
),
|
|
migrations.RemoveField(
|
|
model_name='historicalauthbook',
|
|
name='is_latest',
|
|
),
|
|
]
|