from patch.include import *
from tqdm import tqdm


@app_context(commit=True)
def patch():
    """
    Для тестирования патча: ( cd /opt/eva-app; python3 -m patch.20220XXXXXXX_PATCHNAME )
    Здесь можно работать с моделями через models.CmfTask и т.д.
    Для прогрессбара используйте:
    for task in tqdm(models.CmfTask.list()):
        ...
    """
    if getattr(config, 'SESSION_CRYPT_KEY', None):
        config.EVA_INSTANCE_KEY = config.SESSION_CRYPT_KEY

    field_names = ['ext_password', 'password', 'ext_token', 'ext_secret', 'ext_key']
    for plugin in tqdm(models.CmfPlugin.list(fields=field_names)):
        for field_name in field_names:
            field = getattr(plugin, field_name)
            if field:
                # пропусукаем уже зашифрованные
                if not field.value or field.value.startswith('AES256:'):
                    continue
                try:
                    # пароль зашифрован но старым алгоритмом
                    psw = cmfutil.decrypt(field.value)
                    setattr(plugin, field_name, psw)
                except:
                    # пароль не зашифрован
                    try:
                        setattr(plugin, field_name, field.value)
                    except:
                        print(f'Не удалось конвертировать пароль у плагина {plugin}: {field_name}')


if __name__ == "__main__":
    patch()
