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'>]