# Generated by Django 3.0.3 on 2020-05-08 14:30 from django.apps.registry import Apps from django.db import migrations from django.db.backends.base.schema import BaseDatabaseSchemaEditor from passbook.flows.models import FlowDesignation from passbook.stages.identification.models import Templates, UserFields def create_default_authentication_flow( apps: Apps, schema_editor: BaseDatabaseSchemaEditor ): Flow = apps.get_model("passbook_flows", "Flow") FlowStageBinding = apps.get_model("passbook_flows", "FlowStageBinding") PasswordStage = apps.get_model("passbook_stages_password", "PasswordStage") UserLoginStage = apps.get_model("passbook_stages_user_login", "UserLoginStage") IdentificationStage = apps.get_model( "passbook_stages_identification", "IdentificationStage" ) db_alias = schema_editor.connection.alias if ( Flow.objects.using(db_alias) .filter(designation=FlowDesignation.AUTHENTICATION) .exists() ): # Only create default flow when none exist return if not IdentificationStage.objects.using(db_alias).exists(): IdentificationStage.objects.using(db_alias).create( name="identification", user_fields=[UserFields.E_MAIL], template=Templates.DEFAULT_LOGIN, ) if not PasswordStage.objects.using(db_alias).exists(): PasswordStage.objects.using(db_alias).create( name="password", backends=["django.contrib.auth.backends.ModelBackend"], ) if not UserLoginStage.objects.using(db_alias).exists(): UserLoginStage.objects.using(db_alias).create(name="authentication") flow = Flow.objects.using(db_alias).create( name="default-authentication-flow", slug="default-authentication-flow", designation=FlowDesignation.AUTHENTICATION, ) FlowStageBinding.objects.using(db_alias).create( flow=flow, stage=IdentificationStage.objects.using(db_alias).first(), order=0, ) FlowStageBinding.objects.using(db_alias).create( flow=flow, stage=PasswordStage.objects.using(db_alias).first(), order=1, ) FlowStageBinding.objects.using(db_alias).create( flow=flow, stage=UserLoginStage.objects.using(db_alias).first(), order=2, ) def create_default_invalidation_flow( apps: Apps, schema_editor: BaseDatabaseSchemaEditor ): Flow = apps.get_model("passbook_flows", "Flow") FlowStageBinding = apps.get_model("passbook_flows", "FlowStageBinding") UserLogoutStage = apps.get_model("passbook_stages_user_logout", "UserLogoutStage") db_alias = schema_editor.connection.alias if ( Flow.objects.using(db_alias) .filter(designation=FlowDesignation.INVALIDATION) .exists() ): # Only create default flow when none exist return if not UserLogoutStage.objects.using(db_alias).exists(): UserLogoutStage.objects.using(db_alias).create(name="logout") flow = Flow.objects.using(db_alias).create( name="default-invalidation-flow", slug="default-invalidation-flow", designation=FlowDesignation.INVALIDATION, ) FlowStageBinding.objects.using(db_alias).create( flow=flow, stage=UserLogoutStage.objects.using(db_alias).first(), order=0, ) class Migration(migrations.Migration): dependencies = [ ("passbook_flows", "0001_initial"), ("passbook_stages_user_login", "0001_initial"), ("passbook_stages_user_logout", "0001_initial"), ("passbook_stages_password", "0001_initial"), ("passbook_stages_identification", "0001_initial"), ] operations = [ migrations.RunPython(create_default_authentication_flow), migrations.RunPython(create_default_invalidation_flow), ]