authentik.providers.oauth2.migrations.0028_migrate_session
1# Generated by Django 5.0.11 on 2025-01-27 13:00 2 3from django.db import migrations 4import django.db.models.deletion 5from django.db import migrations, models 6from functools import partial 7 8 9def migrate_sessions(apps, schema_editor, model): 10 Model = apps.get_model("authentik_providers_oauth2", model) 11 AuthenticatedSession = apps.get_model("authentik_core", "AuthenticatedSession") 12 db_alias = schema_editor.connection.alias 13 14 objs = list(Model.objects.using(db_alias).select_related("old_session").all()) 15 for obj in objs: 16 if not obj.old_session: 17 continue 18 obj.session = ( 19 AuthenticatedSession.objects.using(db_alias) 20 .filter(session__session_key=obj.old_session.session_key) 21 .first() 22 ) 23 if obj.session: 24 obj.save() 25 else: 26 obj.delete() 27 28 29class Migration(migrations.Migration): 30 31 dependencies = [ 32 ("authentik_providers_oauth2", "0027_accesstoken_authentik_p_expires_9f24a5_idx_and_more"), 33 ("authentik_core", "0046_session_and_more"), 34 ] 35 36 operations = [ 37 migrations.RenameField( 38 model_name="accesstoken", 39 old_name="session", 40 new_name="old_session", 41 ), 42 migrations.RenameField( 43 model_name="authorizationcode", 44 old_name="session", 45 new_name="old_session", 46 ), 47 migrations.RenameField( 48 model_name="devicetoken", 49 old_name="session", 50 new_name="old_session", 51 ), 52 migrations.RenameField( 53 model_name="refreshtoken", 54 old_name="session", 55 new_name="old_session", 56 ), 57 migrations.AddField( 58 model_name="accesstoken", 59 name="session", 60 field=models.ForeignKey( 61 default=None, 62 null=True, 63 on_delete=django.db.models.deletion.CASCADE, 64 to="authentik_core.authenticatedsession", 65 ), 66 ), 67 migrations.AddField( 68 model_name="authorizationcode", 69 name="session", 70 field=models.ForeignKey( 71 default=None, 72 null=True, 73 on_delete=django.db.models.deletion.CASCADE, 74 to="authentik_core.authenticatedsession", 75 ), 76 ), 77 migrations.AddField( 78 model_name="devicetoken", 79 name="session", 80 field=models.ForeignKey( 81 default=None, 82 null=True, 83 on_delete=django.db.models.deletion.SET_DEFAULT, 84 to="authentik_core.authenticatedsession", 85 ), 86 ), 87 migrations.AddField( 88 model_name="refreshtoken", 89 name="session", 90 field=models.ForeignKey( 91 default=None, 92 null=True, 93 on_delete=django.db.models.deletion.SET_DEFAULT, 94 to="authentik_core.authenticatedsession", 95 ), 96 ), 97 migrations.RunPython(code=partial(migrate_sessions, model="AccessToken")), 98 migrations.RunPython(code=partial(migrate_sessions, model="AuthorizationCode")), 99 migrations.RunPython(code=partial(migrate_sessions, model="DeviceToken")), 100 migrations.RunPython(code=partial(migrate_sessions, model="RefreshToken")), 101 migrations.RemoveField( 102 model_name="accesstoken", 103 name="old_session", 104 ), 105 migrations.RemoveField( 106 model_name="authorizationcode", 107 name="old_session", 108 ), 109 migrations.RemoveField( 110 model_name="devicetoken", 111 name="old_session", 112 ), 113 migrations.RemoveField( 114 model_name="refreshtoken", 115 name="old_session", 116 ), 117 ]
def
migrate_sessions(apps, schema_editor, model):
10def migrate_sessions(apps, schema_editor, model): 11 Model = apps.get_model("authentik_providers_oauth2", model) 12 AuthenticatedSession = apps.get_model("authentik_core", "AuthenticatedSession") 13 db_alias = schema_editor.connection.alias 14 15 objs = list(Model.objects.using(db_alias).select_related("old_session").all()) 16 for obj in objs: 17 if not obj.old_session: 18 continue 19 obj.session = ( 20 AuthenticatedSession.objects.using(db_alias) 21 .filter(session__session_key=obj.old_session.session_key) 22 .first() 23 ) 24 if obj.session: 25 obj.save() 26 else: 27 obj.delete()
class
Migration(django.db.migrations.migration.Migration):
30class Migration(migrations.Migration): 31 32 dependencies = [ 33 ("authentik_providers_oauth2", "0027_accesstoken_authentik_p_expires_9f24a5_idx_and_more"), 34 ("authentik_core", "0046_session_and_more"), 35 ] 36 37 operations = [ 38 migrations.RenameField( 39 model_name="accesstoken", 40 old_name="session", 41 new_name="old_session", 42 ), 43 migrations.RenameField( 44 model_name="authorizationcode", 45 old_name="session", 46 new_name="old_session", 47 ), 48 migrations.RenameField( 49 model_name="devicetoken", 50 old_name="session", 51 new_name="old_session", 52 ), 53 migrations.RenameField( 54 model_name="refreshtoken", 55 old_name="session", 56 new_name="old_session", 57 ), 58 migrations.AddField( 59 model_name="accesstoken", 60 name="session", 61 field=models.ForeignKey( 62 default=None, 63 null=True, 64 on_delete=django.db.models.deletion.CASCADE, 65 to="authentik_core.authenticatedsession", 66 ), 67 ), 68 migrations.AddField( 69 model_name="authorizationcode", 70 name="session", 71 field=models.ForeignKey( 72 default=None, 73 null=True, 74 on_delete=django.db.models.deletion.CASCADE, 75 to="authentik_core.authenticatedsession", 76 ), 77 ), 78 migrations.AddField( 79 model_name="devicetoken", 80 name="session", 81 field=models.ForeignKey( 82 default=None, 83 null=True, 84 on_delete=django.db.models.deletion.SET_DEFAULT, 85 to="authentik_core.authenticatedsession", 86 ), 87 ), 88 migrations.AddField( 89 model_name="refreshtoken", 90 name="session", 91 field=models.ForeignKey( 92 default=None, 93 null=True, 94 on_delete=django.db.models.deletion.SET_DEFAULT, 95 to="authentik_core.authenticatedsession", 96 ), 97 ), 98 migrations.RunPython(code=partial(migrate_sessions, model="AccessToken")), 99 migrations.RunPython(code=partial(migrate_sessions, model="AuthorizationCode")), 100 migrations.RunPython(code=partial(migrate_sessions, model="DeviceToken")), 101 migrations.RunPython(code=partial(migrate_sessions, model="RefreshToken")), 102 migrations.RemoveField( 103 model_name="accesstoken", 104 name="old_session", 105 ), 106 migrations.RemoveField( 107 model_name="authorizationcode", 108 name="old_session", 109 ), 110 migrations.RemoveField( 111 model_name="devicetoken", 112 name="old_session", 113 ), 114 migrations.RemoveField( 115 model_name="refreshtoken", 116 name="old_session", 117 ), 118 ]
The base class for all migrations.
Migration files will import this from django.db.migrations.Migration and subclass it as a class called Migration. It will have one or more of the following attributes:
- operations: A list of Operation instances, probably from django.db.migrations.operations
- dependencies: A list of tuples of (app_path, migration_name)
- run_before: A list of tuples of (app_path, migration_name)
- replaces: A list of migration_names
Note that all migrations come out of migrations and into the Loader or Graph as instances, having been initialized with their app label and name.
dependencies =
[('authentik_providers_oauth2', '0027_accesstoken_authentik_p_expires_9f24a5_idx_and_more'), ('authentik_core', '0046_session_and_more')]
operations =
[<RenameField model_name='accesstoken', old_name='session', new_name='old_session'>, <RenameField model_name='authorizationcode', old_name='session', new_name='old_session'>, <RenameField model_name='devicetoken', old_name='session', new_name='old_session'>, <RenameField model_name='refreshtoken', old_name='session', new_name='old_session'>, <AddField model_name='accesstoken', name='session', field=<django.db.models.fields.related.ForeignKey>>, <AddField model_name='authorizationcode', name='session', field=<django.db.models.fields.related.ForeignKey>>, <AddField model_name='devicetoken', name='session', field=<django.db.models.fields.related.ForeignKey>>, <AddField model_name='refreshtoken', name='session', field=<django.db.models.fields.related.ForeignKey>>, <RunPython code=functools.partial(<function migrate_sessions>, model='AccessToken')>, <RunPython code=functools.partial(<function migrate_sessions>, model='AuthorizationCode')>, <RunPython code=functools.partial(<function migrate_sessions>, model='DeviceToken')>, <RunPython code=functools.partial(<function migrate_sessions>, model='RefreshToken')>, <RemoveField model_name='accesstoken', name='old_session'>, <RemoveField model_name='authorizationcode', name='old_session'>, <RemoveField model_name='devicetoken', name='old_session'>, <RemoveField model_name='refreshtoken', name='old_session'>]