authentik.providers.oauth2.migrations.0014_alter_refreshtoken_options_and_more

  1# Generated by Django 4.1.6 on 2023-02-09 13:01
  2
  3import django.db.models.deletion
  4from django.conf import settings
  5from django.db import migrations, models
  6
  7import authentik.core.models
  8import authentik.lib.generators
  9import authentik.lib.utils.time
 10
 11
 12class Migration(migrations.Migration):
 13    dependencies = [
 14        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
 15        ("authentik_providers_oauth2", "0013_devicetoken"),
 16    ]
 17
 18    operations = [
 19        migrations.AlterModelOptions(
 20            name="refreshtoken",
 21            options={
 22                "verbose_name": "OAuth2 Refresh Token",
 23                "verbose_name_plural": "OAuth2 Refresh Tokens",
 24            },
 25        ),
 26        migrations.RenameField(
 27            model_name="oauth2provider",
 28            old_name="token_validity",
 29            new_name="refresh_token_validity",
 30        ),
 31        migrations.RemoveField(
 32            model_name="authorizationcode",
 33            name="is_open_id",
 34        ),
 35        migrations.RemoveField(
 36            model_name="refreshtoken",
 37            name="access_token",
 38        ),
 39        migrations.RemoveField(
 40            model_name="refreshtoken",
 41            name="refresh_token",
 42        ),
 43        migrations.AddField(
 44            model_name="oauth2provider",
 45            name="access_token_validity",
 46            field=models.TextField(
 47                default="hours=1",
 48                help_text="Tokens not valid on or after current time + this value (Format: hours=1;minutes=2;seconds=3).",
 49                validators=[authentik.lib.utils.time.timedelta_string_validator],
 50            ),
 51        ),
 52        migrations.AddField(
 53            model_name="refreshtoken",
 54            name="token",
 55            field=models.TextField(default=authentik.lib.generators.generate_key),
 56        ),
 57        migrations.AlterField(
 58            model_name="oauth2provider",
 59            name="sub_mode",
 60            field=models.TextField(
 61                choices=[
 62                    ("hashed_user_id", "Based on the Hashed User ID"),
 63                    ("user_id", "Based on user ID"),
 64                    ("user_username", "Based on the username"),
 65                    (
 66                        "user_email",
 67                        "Based on the User's Email. This is recommended over the UPN method.",
 68                    ),
 69                    (
 70                        "user_upn",
 71                        "Based on the User's UPN, only works if user has a 'upn' attribute set. Use this method only if you have different UPN and Mail domains.",
 72                    ),
 73                ],
 74                default="hashed_user_id",
 75                help_text="Configure what data should be used as unique User Identifier. For most cases, the default should be fine.",
 76            ),
 77        ),
 78        migrations.CreateModel(
 79            name="AccessToken",
 80            fields=[
 81                (
 82                    "id",
 83                    models.AutoField(
 84                        auto_created=True, primary_key=True, serialize=False, verbose_name="ID"
 85                    ),
 86                ),
 87                (
 88                    "expires",
 89                    models.DateTimeField(default=authentik.core.models.default_token_duration),
 90                ),
 91                ("expiring", models.BooleanField(default=True)),
 92                ("revoked", models.BooleanField(default=False)),
 93                ("_scope", models.TextField(default="", verbose_name="Scopes")),
 94                ("token", models.TextField()),
 95                ("_id_token", models.TextField()),
 96                (
 97                    "provider",
 98                    models.ForeignKey(
 99                        on_delete=django.db.models.deletion.CASCADE,
100                        to="authentik_providers_oauth2.oauth2provider",
101                    ),
102                ),
103                (
104                    "user",
105                    models.ForeignKey(
106                        on_delete=django.db.models.deletion.CASCADE,
107                        to=settings.AUTH_USER_MODEL,
108                        verbose_name="User",
109                    ),
110                ),
111            ],
112            options={
113                "verbose_name": "OAuth2 Access Token",
114                "verbose_name_plural": "OAuth2 Access Tokens",
115            },
116        ),
117    ]
class Migration(django.db.migrations.migration.Migration):
 13class Migration(migrations.Migration):
 14    dependencies = [
 15        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
 16        ("authentik_providers_oauth2", "0013_devicetoken"),
 17    ]
 18
 19    operations = [
 20        migrations.AlterModelOptions(
 21            name="refreshtoken",
 22            options={
 23                "verbose_name": "OAuth2 Refresh Token",
 24                "verbose_name_plural": "OAuth2 Refresh Tokens",
 25            },
 26        ),
 27        migrations.RenameField(
 28            model_name="oauth2provider",
 29            old_name="token_validity",
 30            new_name="refresh_token_validity",
 31        ),
 32        migrations.RemoveField(
 33            model_name="authorizationcode",
 34            name="is_open_id",
 35        ),
 36        migrations.RemoveField(
 37            model_name="refreshtoken",
 38            name="access_token",
 39        ),
 40        migrations.RemoveField(
 41            model_name="refreshtoken",
 42            name="refresh_token",
 43        ),
 44        migrations.AddField(
 45            model_name="oauth2provider",
 46            name="access_token_validity",
 47            field=models.TextField(
 48                default="hours=1",
 49                help_text="Tokens not valid on or after current time + this value (Format: hours=1;minutes=2;seconds=3).",
 50                validators=[authentik.lib.utils.time.timedelta_string_validator],
 51            ),
 52        ),
 53        migrations.AddField(
 54            model_name="refreshtoken",
 55            name="token",
 56            field=models.TextField(default=authentik.lib.generators.generate_key),
 57        ),
 58        migrations.AlterField(
 59            model_name="oauth2provider",
 60            name="sub_mode",
 61            field=models.TextField(
 62                choices=[
 63                    ("hashed_user_id", "Based on the Hashed User ID"),
 64                    ("user_id", "Based on user ID"),
 65                    ("user_username", "Based on the username"),
 66                    (
 67                        "user_email",
 68                        "Based on the User's Email. This is recommended over the UPN method.",
 69                    ),
 70                    (
 71                        "user_upn",
 72                        "Based on the User's UPN, only works if user has a 'upn' attribute set. Use this method only if you have different UPN and Mail domains.",
 73                    ),
 74                ],
 75                default="hashed_user_id",
 76                help_text="Configure what data should be used as unique User Identifier. For most cases, the default should be fine.",
 77            ),
 78        ),
 79        migrations.CreateModel(
 80            name="AccessToken",
 81            fields=[
 82                (
 83                    "id",
 84                    models.AutoField(
 85                        auto_created=True, primary_key=True, serialize=False, verbose_name="ID"
 86                    ),
 87                ),
 88                (
 89                    "expires",
 90                    models.DateTimeField(default=authentik.core.models.default_token_duration),
 91                ),
 92                ("expiring", models.BooleanField(default=True)),
 93                ("revoked", models.BooleanField(default=False)),
 94                ("_scope", models.TextField(default="", verbose_name="Scopes")),
 95                ("token", models.TextField()),
 96                ("_id_token", models.TextField()),
 97                (
 98                    "provider",
 99                    models.ForeignKey(
100                        on_delete=django.db.models.deletion.CASCADE,
101                        to="authentik_providers_oauth2.oauth2provider",
102                    ),
103                ),
104                (
105                    "user",
106                    models.ForeignKey(
107                        on_delete=django.db.models.deletion.CASCADE,
108                        to=settings.AUTH_USER_MODEL,
109                        verbose_name="User",
110                    ),
111                ),
112            ],
113            options={
114                "verbose_name": "OAuth2 Access Token",
115                "verbose_name_plural": "OAuth2 Access Tokens",
116            },
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_core', '__first__'), ('authentik_providers_oauth2', '0013_devicetoken')]
operations = [<AlterModelOptions name='refreshtoken', options={'verbose_name': 'OAuth2 Refresh Token', 'verbose_name_plural': 'OAuth2 Refresh Tokens'}>, <RenameField model_name='oauth2provider', old_name='token_validity', new_name='refresh_token_validity'>, <RemoveField model_name='authorizationcode', name='is_open_id'>, <RemoveField model_name='refreshtoken', name='access_token'>, <RemoveField model_name='refreshtoken', name='refresh_token'>, <AddField model_name='oauth2provider', name='access_token_validity', field=<django.db.models.fields.TextField>>, <AddField model_name='refreshtoken', name='token', field=<django.db.models.fields.TextField>>, <AlterField model_name='oauth2provider', name='sub_mode', field=<django.db.models.fields.TextField>>, <CreateModel name='AccessToken', fields=[('id', <django.db.models.fields.AutoField>), ('expires', <django.db.models.fields.DateTimeField>), ('expiring', <django.db.models.fields.BooleanField>), ('revoked', <django.db.models.fields.BooleanField>), ('_scope', <django.db.models.fields.TextField>), ('token', <django.db.models.fields.TextField>), ('_id_token', <django.db.models.fields.TextField>), ('provider', <django.db.models.fields.related.ForeignKey>), ('user', <django.db.models.fields.related.ForeignKey>)], options={'verbose_name': 'OAuth2 Access Token', 'verbose_name_plural': 'OAuth2 Access Tokens'}>]