105 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			105 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
# 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),
 | 
						|
    ]
 |