From dd459e23e277d44ba8ec8ac75fdb7f206e5a601c Mon Sep 17 00:00:00 2001 From: "Christian M. Adams" Date: Fri, 23 Oct 2020 15:41:00 -0400 Subject: [PATCH] Add migration to prefill rh username and password for subscriptions --- awx/conf/migrations/0008_subscriptions.py | 10 +++++++-- awx/conf/migrations/_subscriptions.py | 25 ++++++++++++++++++++++- 2 files changed, 32 insertions(+), 3 deletions(-) diff --git a/awx/conf/migrations/0008_subscriptions.py b/awx/conf/migrations/0008_subscriptions.py index 8b3dff6cf4..dacd066b4d 100644 --- a/awx/conf/migrations/0008_subscriptions.py +++ b/awx/conf/migrations/0008_subscriptions.py @@ -4,17 +4,23 @@ import logging from django.db import migrations -from awx.conf.migrations import _subscriptions as subscriptions +from awx.conf.migrations._subscriptions import clear_old_license, prefill_rh_credentials logger = logging.getLogger('awx.conf.migrations') +def _noop(apps, schema_editor): + pass + + class Migration(migrations.Migration): dependencies = [ ('conf', '0007_v380_rename_more_settings'), ] + operations = [ - migrations.RunPython(subscriptions.clear_old_license), + migrations.RunPython(clear_old_license, _noop), + migrations.RunPython(prefill_rh_credentials, _noop) ] diff --git a/awx/conf/migrations/_subscriptions.py b/awx/conf/migrations/_subscriptions.py index 282bf2fb48..2b979fb68e 100644 --- a/awx/conf/migrations/_subscriptions.py +++ b/awx/conf/migrations/_subscriptions.py @@ -1,11 +1,34 @@ # -*- coding: utf-8 -*- import logging +from django.utils.timezone import now +from awx.main.utils.encryption import decrypt_field, encrypt_field logger = logging.getLogger('awx.conf.settings') -__all__ = ['clear_old_license'] +__all__ = ['clear_old_license', 'prefill_rh_credentials'] def clear_old_license(apps, schema_editor): Setting = apps.get_model('conf', 'Setting') Setting.objects.filter(key='LICENSE').delete() + + +def _migrate_setting(apps, old_key, new_key, encrypted=False): + Setting = apps.get_model('conf', 'Setting') + if not Setting.objects.filter(key=old_key).exists(): + return + new_setting = Setting.objects.create(key=new_key, + created=now(), + modified=now() + ) + if encrypted: + new_setting.value = decrypt_field(Setting.objects.filter(key=old_key).first(), 'value') + new_setting.value = encrypt_field(new_setting, 'value') + else: + new_setting.value = getattr(Setting.objects.filter(key=old_key).first(), 'value') + new_setting.save() + + +def prefill_rh_credentials(apps, schema_editor): + _migrate_setting(apps, 'REDHAT_USERNAME', 'SUBSCRIPTIONS_USERNAME', encrypted=False) + _migrate_setting(apps, 'REDHAT_PASSWORD', 'SUBSCRIPTIONS_PASSWORD', encrypted=True)