authentik.enterprise.providers.ssf.migrations.0001_initial

  1# Generated by Django 5.0.11 on 2025-02-05 16:20
  2
  3import authentik.lib.utils.time
  4import django.contrib.postgres.fields
  5import django.db.models.deletion
  6import uuid
  7from django.db import migrations, models
  8
  9
 10class Migration(migrations.Migration):
 11
 12    initial = True
 13
 14    dependencies = [
 15        ("authentik_core", "0042_authenticatedsession_authentik_c_expires_08251d_idx_and_more"),
 16        ("authentik_crypto", "0004_alter_certificatekeypair_name"),
 17        ("authentik_providers_oauth2", "0027_accesstoken_authentik_p_expires_9f24a5_idx_and_more"),
 18    ]
 19
 20    operations = [
 21        migrations.CreateModel(
 22            name="SSFProvider",
 23            fields=[
 24                (
 25                    "provider_ptr",
 26                    models.OneToOneField(
 27                        auto_created=True,
 28                        on_delete=django.db.models.deletion.CASCADE,
 29                        parent_link=True,
 30                        primary_key=True,
 31                        serialize=False,
 32                        to="authentik_core.provider",
 33                    ),
 34                ),
 35                (
 36                    "event_retention",
 37                    models.TextField(
 38                        default="days=30",
 39                        validators=[authentik.lib.utils.time.timedelta_string_validator],
 40                    ),
 41                ),
 42                (
 43                    "oidc_auth_providers",
 44                    models.ManyToManyField(
 45                        blank=True, default=None, to="authentik_providers_oauth2.oauth2provider"
 46                    ),
 47                ),
 48                (
 49                    "signing_key",
 50                    models.ForeignKey(
 51                        help_text="Key used to sign the SSF Events.",
 52                        on_delete=django.db.models.deletion.CASCADE,
 53                        to="authentik_crypto.certificatekeypair",
 54                        verbose_name="Signing Key",
 55                    ),
 56                ),
 57                (
 58                    "token",
 59                    models.ForeignKey(
 60                        default=None,
 61                        null=True,
 62                        on_delete=django.db.models.deletion.CASCADE,
 63                        to="authentik_core.token",
 64                    ),
 65                ),
 66            ],
 67            options={
 68                "verbose_name": "Shared Signals Framework Provider",
 69                "verbose_name_plural": "Shared Signals Framework Providers",
 70                "permissions": [("add_stream", "Add stream to SSF provider")],
 71            },
 72            bases=("authentik_core.provider",),
 73        ),
 74        migrations.CreateModel(
 75            name="Stream",
 76            fields=[
 77                (
 78                    "uuid",
 79                    models.UUIDField(
 80                        default=uuid.uuid4, editable=False, primary_key=True, serialize=False
 81                    ),
 82                ),
 83                (
 84                    "delivery_method",
 85                    models.TextField(
 86                        choices=[
 87                            (
 88                                "https://schemas.openid.net/secevent/risc/delivery-method/push",
 89                                "Risc Push",
 90                            ),
 91                            (
 92                                "https://schemas.openid.net/secevent/risc/delivery-method/poll",
 93                                "Risc Poll",
 94                            ),
 95                        ]
 96                    ),
 97                ),
 98                ("endpoint_url", models.TextField(null=True)),
 99                (
100                    "events_requested",
101                    django.contrib.postgres.fields.ArrayField(
102                        base_field=models.TextField(
103                            choices=[
104                                (
105                                    "https://schemas.openid.net/secevent/caep/event-type/session-revoked",
106                                    "Caep Session Revoked",
107                                ),
108                                (
109                                    "https://schemas.openid.net/secevent/caep/event-type/credential-change",
110                                    "Caep Credential Change",
111                                ),
112                                (
113                                    "https://schemas.openid.net/secevent/ssf/event-type/verification",
114                                    "Set Verification",
115                                ),
116                            ]
117                        ),
118                        default=list,
119                        size=None,
120                    ),
121                ),
122                ("format", models.TextField()),
123                (
124                    "aud",
125                    django.contrib.postgres.fields.ArrayField(
126                        base_field=models.TextField(), default=list, size=None
127                    ),
128                ),
129                ("iss", models.TextField()),
130                (
131                    "provider",
132                    models.ForeignKey(
133                        on_delete=django.db.models.deletion.CASCADE,
134                        to="authentik_providers_ssf.ssfprovider",
135                    ),
136                ),
137            ],
138            options={
139                "verbose_name": "SSF Stream",
140                "verbose_name_plural": "SSF Streams",
141                "default_permissions": ["change", "delete", "view"],
142            },
143        ),
144        migrations.CreateModel(
145            name="StreamEvent",
146            fields=[
147                ("created", models.DateTimeField(auto_now_add=True)),
148                ("last_updated", models.DateTimeField(auto_now=True)),
149                ("expires", models.DateTimeField(default=None, null=True)),
150                ("expiring", models.BooleanField(default=True)),
151                (
152                    "uuid",
153                    models.UUIDField(
154                        default=uuid.uuid4, editable=False, primary_key=True, serialize=False
155                    ),
156                ),
157                (
158                    "status",
159                    models.TextField(
160                        choices=[
161                            ("pending_new", "Pending New"),
162                            ("pending_failed", "Pending Failed"),
163                            ("sent", "Sent"),
164                        ]
165                    ),
166                ),
167                (
168                    "type",
169                    models.TextField(
170                        choices=[
171                            (
172                                "https://schemas.openid.net/secevent/caep/event-type/session-revoked",
173                                "Caep Session Revoked",
174                            ),
175                            (
176                                "https://schemas.openid.net/secevent/caep/event-type/credential-change",
177                                "Caep Credential Change",
178                            ),
179                            (
180                                "https://schemas.openid.net/secevent/ssf/event-type/verification",
181                                "Set Verification",
182                            ),
183                        ]
184                    ),
185                ),
186                ("payload", models.JSONField(default=dict)),
187                (
188                    "stream",
189                    models.ForeignKey(
190                        on_delete=django.db.models.deletion.CASCADE,
191                        to="authentik_providers_ssf.stream",
192                    ),
193                ),
194            ],
195            options={
196                "verbose_name": "SSF Stream Event",
197                "verbose_name_plural": "SSF Stream Events",
198                "ordering": ("-created",),
199            },
200        ),
201    ]
class Migration(django.db.migrations.migration.Migration):
 11class Migration(migrations.Migration):
 12
 13    initial = True
 14
 15    dependencies = [
 16        ("authentik_core", "0042_authenticatedsession_authentik_c_expires_08251d_idx_and_more"),
 17        ("authentik_crypto", "0004_alter_certificatekeypair_name"),
 18        ("authentik_providers_oauth2", "0027_accesstoken_authentik_p_expires_9f24a5_idx_and_more"),
 19    ]
 20
 21    operations = [
 22        migrations.CreateModel(
 23            name="SSFProvider",
 24            fields=[
 25                (
 26                    "provider_ptr",
 27                    models.OneToOneField(
 28                        auto_created=True,
 29                        on_delete=django.db.models.deletion.CASCADE,
 30                        parent_link=True,
 31                        primary_key=True,
 32                        serialize=False,
 33                        to="authentik_core.provider",
 34                    ),
 35                ),
 36                (
 37                    "event_retention",
 38                    models.TextField(
 39                        default="days=30",
 40                        validators=[authentik.lib.utils.time.timedelta_string_validator],
 41                    ),
 42                ),
 43                (
 44                    "oidc_auth_providers",
 45                    models.ManyToManyField(
 46                        blank=True, default=None, to="authentik_providers_oauth2.oauth2provider"
 47                    ),
 48                ),
 49                (
 50                    "signing_key",
 51                    models.ForeignKey(
 52                        help_text="Key used to sign the SSF Events.",
 53                        on_delete=django.db.models.deletion.CASCADE,
 54                        to="authentik_crypto.certificatekeypair",
 55                        verbose_name="Signing Key",
 56                    ),
 57                ),
 58                (
 59                    "token",
 60                    models.ForeignKey(
 61                        default=None,
 62                        null=True,
 63                        on_delete=django.db.models.deletion.CASCADE,
 64                        to="authentik_core.token",
 65                    ),
 66                ),
 67            ],
 68            options={
 69                "verbose_name": "Shared Signals Framework Provider",
 70                "verbose_name_plural": "Shared Signals Framework Providers",
 71                "permissions": [("add_stream", "Add stream to SSF provider")],
 72            },
 73            bases=("authentik_core.provider",),
 74        ),
 75        migrations.CreateModel(
 76            name="Stream",
 77            fields=[
 78                (
 79                    "uuid",
 80                    models.UUIDField(
 81                        default=uuid.uuid4, editable=False, primary_key=True, serialize=False
 82                    ),
 83                ),
 84                (
 85                    "delivery_method",
 86                    models.TextField(
 87                        choices=[
 88                            (
 89                                "https://schemas.openid.net/secevent/risc/delivery-method/push",
 90                                "Risc Push",
 91                            ),
 92                            (
 93                                "https://schemas.openid.net/secevent/risc/delivery-method/poll",
 94                                "Risc Poll",
 95                            ),
 96                        ]
 97                    ),
 98                ),
 99                ("endpoint_url", models.TextField(null=True)),
100                (
101                    "events_requested",
102                    django.contrib.postgres.fields.ArrayField(
103                        base_field=models.TextField(
104                            choices=[
105                                (
106                                    "https://schemas.openid.net/secevent/caep/event-type/session-revoked",
107                                    "Caep Session Revoked",
108                                ),
109                                (
110                                    "https://schemas.openid.net/secevent/caep/event-type/credential-change",
111                                    "Caep Credential Change",
112                                ),
113                                (
114                                    "https://schemas.openid.net/secevent/ssf/event-type/verification",
115                                    "Set Verification",
116                                ),
117                            ]
118                        ),
119                        default=list,
120                        size=None,
121                    ),
122                ),
123                ("format", models.TextField()),
124                (
125                    "aud",
126                    django.contrib.postgres.fields.ArrayField(
127                        base_field=models.TextField(), default=list, size=None
128                    ),
129                ),
130                ("iss", models.TextField()),
131                (
132                    "provider",
133                    models.ForeignKey(
134                        on_delete=django.db.models.deletion.CASCADE,
135                        to="authentik_providers_ssf.ssfprovider",
136                    ),
137                ),
138            ],
139            options={
140                "verbose_name": "SSF Stream",
141                "verbose_name_plural": "SSF Streams",
142                "default_permissions": ["change", "delete", "view"],
143            },
144        ),
145        migrations.CreateModel(
146            name="StreamEvent",
147            fields=[
148                ("created", models.DateTimeField(auto_now_add=True)),
149                ("last_updated", models.DateTimeField(auto_now=True)),
150                ("expires", models.DateTimeField(default=None, null=True)),
151                ("expiring", models.BooleanField(default=True)),
152                (
153                    "uuid",
154                    models.UUIDField(
155                        default=uuid.uuid4, editable=False, primary_key=True, serialize=False
156                    ),
157                ),
158                (
159                    "status",
160                    models.TextField(
161                        choices=[
162                            ("pending_new", "Pending New"),
163                            ("pending_failed", "Pending Failed"),
164                            ("sent", "Sent"),
165                        ]
166                    ),
167                ),
168                (
169                    "type",
170                    models.TextField(
171                        choices=[
172                            (
173                                "https://schemas.openid.net/secevent/caep/event-type/session-revoked",
174                                "Caep Session Revoked",
175                            ),
176                            (
177                                "https://schemas.openid.net/secevent/caep/event-type/credential-change",
178                                "Caep Credential Change",
179                            ),
180                            (
181                                "https://schemas.openid.net/secevent/ssf/event-type/verification",
182                                "Set Verification",
183                            ),
184                        ]
185                    ),
186                ),
187                ("payload", models.JSONField(default=dict)),
188                (
189                    "stream",
190                    models.ForeignKey(
191                        on_delete=django.db.models.deletion.CASCADE,
192                        to="authentik_providers_ssf.stream",
193                    ),
194                ),
195            ],
196            options={
197                "verbose_name": "SSF Stream Event",
198                "verbose_name_plural": "SSF Stream Events",
199                "ordering": ("-created",),
200            },
201        ),
202    ]

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.

initial = True
dependencies = [('authentik_core', '0042_authenticatedsession_authentik_c_expires_08251d_idx_and_more'), ('authentik_crypto', '0004_alter_certificatekeypair_name'), ('authentik_providers_oauth2', '0027_accesstoken_authentik_p_expires_9f24a5_idx_and_more')]
operations = [<CreateModel name='SSFProvider', fields=[('provider_ptr', <django.db.models.fields.related.OneToOneField>), ('event_retention', <django.db.models.fields.TextField>), ('oidc_auth_providers', <django.db.models.fields.related.ManyToManyField>), ('signing_key', <django.db.models.fields.related.ForeignKey>), ('token', <django.db.models.fields.related.ForeignKey>)], options={'verbose_name': 'Shared Signals Framework Provider', 'verbose_name_plural': 'Shared Signals Framework Providers', 'permissions': [('add_stream', 'Add stream to SSF provider')]}, bases=('authentik_core.provider',)>, <CreateModel name='Stream', fields=[('uuid', <django.db.models.fields.UUIDField>), ('delivery_method', <django.db.models.fields.TextField>), ('endpoint_url', <django.db.models.fields.TextField>), ('events_requested', <django.contrib.postgres.fields.array.ArrayField>), ('format', <django.db.models.fields.TextField>), ('aud', <django.contrib.postgres.fields.array.ArrayField>), ('iss', <django.db.models.fields.TextField>), ('provider', <django.db.models.fields.related.ForeignKey>)], options={'verbose_name': 'SSF Stream', 'verbose_name_plural': 'SSF Streams', 'default_permissions': ['change', 'delete', 'view']}>, <CreateModel name='StreamEvent', fields=[('created', <django.db.models.fields.DateTimeField>), ('last_updated', <django.db.models.fields.DateTimeField>), ('expires', <django.db.models.fields.DateTimeField>), ('expiring', <django.db.models.fields.BooleanField>), ('uuid', <django.db.models.fields.UUIDField>), ('status', <django.db.models.fields.TextField>), ('type', <django.db.models.fields.TextField>), ('payload', <django.db.models.fields.json.JSONField>), ('stream', <django.db.models.fields.related.ForeignKey>)], options={'verbose_name': 'SSF Stream Event', 'verbose_name_plural': 'SSF Stream Events', 'ordering': ('-created',)}>]