authentik.core.migrations.0001_initial

  1# Generated by Django 3.0.6 on 2020-05-19 22:07
  2
  3import uuid
  4
  5import django.contrib.auth.models
  6import django.contrib.auth.validators
  7import django.db.models.deletion
  8import django.utils.timezone
  9from django.conf import settings
 10from django.db import migrations, models
 11
 12import authentik.core.models
 13
 14
 15class Migration(migrations.Migration):
 16    initial = True
 17
 18    dependencies = [
 19        ("authentik_policies", "0001_initial"),
 20        ("auth", "0011_update_proxy_permissions"),
 21    ]
 22
 23    operations = [
 24        migrations.CreateModel(
 25            name="User",
 26            fields=[
 27                (
 28                    "id",
 29                    models.AutoField(
 30                        auto_created=True,
 31                        primary_key=True,
 32                        serialize=False,
 33                        verbose_name="ID",
 34                    ),
 35                ),
 36                ("password", models.CharField(max_length=128, verbose_name="password")),
 37                (
 38                    "last_login",
 39                    models.DateTimeField(blank=True, null=True, verbose_name="last login"),
 40                ),
 41                (
 42                    "is_superuser",
 43                    models.BooleanField(
 44                        default=False,
 45                        help_text=(
 46                            "Designates that this user has all permissions without explicitly"
 47                            " assigning them."
 48                        ),
 49                        verbose_name="superuser status",
 50                    ),
 51                ),
 52                (
 53                    "username",
 54                    models.CharField(
 55                        error_messages={"unique": "A user with that username already exists."},
 56                        help_text=(
 57                            "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only."
 58                        ),
 59                        max_length=150,
 60                        unique=True,
 61                        validators=[django.contrib.auth.validators.UnicodeUsernameValidator()],
 62                        verbose_name="username",
 63                    ),
 64                ),
 65                (
 66                    "first_name",
 67                    models.CharField(blank=True, max_length=30, verbose_name="first name"),
 68                ),
 69                (
 70                    "last_name",
 71                    models.CharField(blank=True, max_length=150, verbose_name="last name"),
 72                ),
 73                (
 74                    "email",
 75                    models.EmailField(blank=True, max_length=254, verbose_name="email address"),
 76                ),
 77                (
 78                    "is_staff",
 79                    models.BooleanField(
 80                        default=False,
 81                        help_text="Designates whether the user can log into this admin site.",
 82                        verbose_name="staff status",
 83                    ),
 84                ),
 85                (
 86                    "is_active",
 87                    models.BooleanField(
 88                        default=True,
 89                        help_text=(
 90                            "Designates whether this user should be treated as active. Unselect"
 91                            " this instead of deleting accounts."
 92                        ),
 93                        verbose_name="active",
 94                    ),
 95                ),
 96                (
 97                    "date_joined",
 98                    models.DateTimeField(
 99                        default=django.utils.timezone.now, verbose_name="date joined"
100                    ),
101                ),
102                ("uuid", models.UUIDField(default=uuid.uuid4, editable=False)),
103                ("name", models.TextField(help_text="User's display name.")),
104                ("password_change_date", models.DateTimeField(auto_now_add=True)),
105                (
106                    "attributes",
107                    models.JSONField(blank=True, default=dict),
108                ),
109            ],
110            options={
111                "permissions": (("reset_user_password", "Reset Password"),),
112            },
113            bases=(models.Model,),
114            managers=[
115                ("objects", django.contrib.auth.models.UserManager()),
116            ],
117        ),
118        migrations.CreateModel(
119            name="PropertyMapping",
120            fields=[
121                (
122                    "pm_uuid",
123                    models.UUIDField(
124                        default=uuid.uuid4,
125                        editable=False,
126                        primary_key=True,
127                        serialize=False,
128                    ),
129                ),
130                ("name", models.TextField()),
131                ("expression", models.TextField()),
132            ],
133            options={
134                "verbose_name": "Property Mapping",
135                "verbose_name_plural": "Property Mappings",
136            },
137        ),
138        migrations.CreateModel(
139            name="Source",
140            fields=[
141                (
142                    "policybindingmodel_ptr",
143                    models.OneToOneField(
144                        auto_created=True,
145                        on_delete=django.db.models.deletion.CASCADE,
146                        parent_link=True,
147                        primary_key=True,
148                        serialize=False,
149                        to="authentik_policies.PolicyBindingModel",
150                    ),
151                ),
152                ("name", models.TextField(help_text="Source's display Name.")),
153                (
154                    "slug",
155                    models.SlugField(help_text="Internal source name, used in URLs."),
156                ),
157                ("enabled", models.BooleanField(default=True)),
158                (
159                    "property_mappings",
160                    models.ManyToManyField(
161                        blank=True, default=None, to="authentik_core.PropertyMapping"
162                    ),
163                ),
164            ],
165            bases=("authentik_policies.policybindingmodel",),
166        ),
167        migrations.CreateModel(
168            name="UserSourceConnection",
169            fields=[
170                (
171                    "id",
172                    models.AutoField(
173                        auto_created=True,
174                        primary_key=True,
175                        serialize=False,
176                        verbose_name="ID",
177                    ),
178                ),
179                ("created", models.DateTimeField(auto_now_add=True)),
180                ("last_updated", models.DateTimeField(auto_now=True)),
181                (
182                    "source",
183                    models.ForeignKey(
184                        on_delete=django.db.models.deletion.CASCADE,
185                        to="authentik_core.Source",
186                    ),
187                ),
188                (
189                    "user",
190                    models.ForeignKey(
191                        on_delete=django.db.models.deletion.CASCADE,
192                        to=settings.AUTH_USER_MODEL,
193                    ),
194                ),
195            ],
196            options={
197                "unique_together": {("user", "source")},
198            },
199        ),
200        migrations.CreateModel(
201            name="Token",
202            fields=[
203                (
204                    "token_uuid",
205                    models.UUIDField(
206                        default=uuid.uuid4,
207                        editable=False,
208                        primary_key=True,
209                        serialize=False,
210                    ),
211                ),
212                (
213                    "expires",
214                    models.DateTimeField(default=authentik.core.models.default_token_duration),
215                ),
216                ("expiring", models.BooleanField(default=True)),
217                ("description", models.TextField(blank=True, default="")),
218                (
219                    "user",
220                    models.ForeignKey(
221                        on_delete=django.db.models.deletion.CASCADE,
222                        related_name="+",
223                        to=settings.AUTH_USER_MODEL,
224                    ),
225                ),
226            ],
227            options={
228                "verbose_name": "Token",
229                "verbose_name_plural": "Tokens",
230            },
231        ),
232        migrations.CreateModel(
233            name="Provider",
234            fields=[
235                (
236                    "id",
237                    models.AutoField(
238                        auto_created=True,
239                        primary_key=True,
240                        serialize=False,
241                        verbose_name="ID",
242                    ),
243                ),
244                (
245                    "property_mappings",
246                    models.ManyToManyField(
247                        blank=True, default=None, to="authentik_core.PropertyMapping"
248                    ),
249                ),
250            ],
251        ),
252        migrations.CreateModel(
253            name="Group",
254            fields=[
255                (
256                    "group_uuid",
257                    models.UUIDField(
258                        default=uuid.uuid4,
259                        editable=False,
260                        primary_key=True,
261                        serialize=False,
262                    ),
263                ),
264                ("name", models.CharField(max_length=80, verbose_name="name")),
265                (
266                    "attributes",
267                    models.JSONField(blank=True, default=dict),
268                ),
269                (
270                    "parent",
271                    models.ForeignKey(
272                        blank=True,
273                        null=True,
274                        on_delete=django.db.models.deletion.SET_NULL,
275                        related_name="children",
276                        to="authentik_core.Group",
277                    ),
278                ),
279            ],
280            options={
281                "unique_together": {("name", "parent")},
282            },
283        ),
284        migrations.CreateModel(
285            name="Application",
286            fields=[
287                (
288                    "policybindingmodel_ptr",
289                    models.OneToOneField(
290                        auto_created=True,
291                        on_delete=django.db.models.deletion.CASCADE,
292                        parent_link=True,
293                        primary_key=True,
294                        serialize=False,
295                        to="authentik_policies.PolicyBindingModel",
296                    ),
297                ),
298                ("name", models.TextField(help_text="Application's display Name.")),
299                (
300                    "slug",
301                    models.SlugField(help_text="Internal application name, used in URLs."),
302                ),
303                ("skip_authorization", models.BooleanField(default=False)),
304                ("meta_launch_url", models.URLField(blank=True, default="")),
305                ("meta_icon_url", models.TextField(blank=True, default="")),
306                ("meta_description", models.TextField(blank=True, default="")),
307                ("meta_publisher", models.TextField(blank=True, default="")),
308                (
309                    "provider",
310                    models.OneToOneField(
311                        blank=True,
312                        default=None,
313                        null=True,
314                        on_delete=django.db.models.deletion.SET_DEFAULT,
315                        to="authentik_core.Provider",
316                    ),
317                ),
318            ],
319            bases=("authentik_policies.policybindingmodel",),
320        ),
321        migrations.AddField(
322            model_name="user",
323            name="groups",
324            field=models.ManyToManyField(to="authentik_core.Group"),
325        ),
326        migrations.AddField(
327            model_name="user",
328            name="sources",
329            field=models.ManyToManyField(
330                through="authentik_core.UserSourceConnection",
331                to="authentik_core.Source",
332            ),
333        ),
334        migrations.AddField(
335            model_name="user",
336            name="user_permissions",
337            field=models.ManyToManyField(
338                blank=True,
339                help_text="Specific permissions for this user.",
340                related_name="user_set",
341                related_query_name="user",
342                to="auth.Permission",
343                verbose_name="user permissions",
344            ),
345        ),
346    ]
class Migration(django.db.migrations.migration.Migration):
 16class Migration(migrations.Migration):
 17    initial = True
 18
 19    dependencies = [
 20        ("authentik_policies", "0001_initial"),
 21        ("auth", "0011_update_proxy_permissions"),
 22    ]
 23
 24    operations = [
 25        migrations.CreateModel(
 26            name="User",
 27            fields=[
 28                (
 29                    "id",
 30                    models.AutoField(
 31                        auto_created=True,
 32                        primary_key=True,
 33                        serialize=False,
 34                        verbose_name="ID",
 35                    ),
 36                ),
 37                ("password", models.CharField(max_length=128, verbose_name="password")),
 38                (
 39                    "last_login",
 40                    models.DateTimeField(blank=True, null=True, verbose_name="last login"),
 41                ),
 42                (
 43                    "is_superuser",
 44                    models.BooleanField(
 45                        default=False,
 46                        help_text=(
 47                            "Designates that this user has all permissions without explicitly"
 48                            " assigning them."
 49                        ),
 50                        verbose_name="superuser status",
 51                    ),
 52                ),
 53                (
 54                    "username",
 55                    models.CharField(
 56                        error_messages={"unique": "A user with that username already exists."},
 57                        help_text=(
 58                            "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only."
 59                        ),
 60                        max_length=150,
 61                        unique=True,
 62                        validators=[django.contrib.auth.validators.UnicodeUsernameValidator()],
 63                        verbose_name="username",
 64                    ),
 65                ),
 66                (
 67                    "first_name",
 68                    models.CharField(blank=True, max_length=30, verbose_name="first name"),
 69                ),
 70                (
 71                    "last_name",
 72                    models.CharField(blank=True, max_length=150, verbose_name="last name"),
 73                ),
 74                (
 75                    "email",
 76                    models.EmailField(blank=True, max_length=254, verbose_name="email address"),
 77                ),
 78                (
 79                    "is_staff",
 80                    models.BooleanField(
 81                        default=False,
 82                        help_text="Designates whether the user can log into this admin site.",
 83                        verbose_name="staff status",
 84                    ),
 85                ),
 86                (
 87                    "is_active",
 88                    models.BooleanField(
 89                        default=True,
 90                        help_text=(
 91                            "Designates whether this user should be treated as active. Unselect"
 92                            " this instead of deleting accounts."
 93                        ),
 94                        verbose_name="active",
 95                    ),
 96                ),
 97                (
 98                    "date_joined",
 99                    models.DateTimeField(
100                        default=django.utils.timezone.now, verbose_name="date joined"
101                    ),
102                ),
103                ("uuid", models.UUIDField(default=uuid.uuid4, editable=False)),
104                ("name", models.TextField(help_text="User's display name.")),
105                ("password_change_date", models.DateTimeField(auto_now_add=True)),
106                (
107                    "attributes",
108                    models.JSONField(blank=True, default=dict),
109                ),
110            ],
111            options={
112                "permissions": (("reset_user_password", "Reset Password"),),
113            },
114            bases=(models.Model,),
115            managers=[
116                ("objects", django.contrib.auth.models.UserManager()),
117            ],
118        ),
119        migrations.CreateModel(
120            name="PropertyMapping",
121            fields=[
122                (
123                    "pm_uuid",
124                    models.UUIDField(
125                        default=uuid.uuid4,
126                        editable=False,
127                        primary_key=True,
128                        serialize=False,
129                    ),
130                ),
131                ("name", models.TextField()),
132                ("expression", models.TextField()),
133            ],
134            options={
135                "verbose_name": "Property Mapping",
136                "verbose_name_plural": "Property Mappings",
137            },
138        ),
139        migrations.CreateModel(
140            name="Source",
141            fields=[
142                (
143                    "policybindingmodel_ptr",
144                    models.OneToOneField(
145                        auto_created=True,
146                        on_delete=django.db.models.deletion.CASCADE,
147                        parent_link=True,
148                        primary_key=True,
149                        serialize=False,
150                        to="authentik_policies.PolicyBindingModel",
151                    ),
152                ),
153                ("name", models.TextField(help_text="Source's display Name.")),
154                (
155                    "slug",
156                    models.SlugField(help_text="Internal source name, used in URLs."),
157                ),
158                ("enabled", models.BooleanField(default=True)),
159                (
160                    "property_mappings",
161                    models.ManyToManyField(
162                        blank=True, default=None, to="authentik_core.PropertyMapping"
163                    ),
164                ),
165            ],
166            bases=("authentik_policies.policybindingmodel",),
167        ),
168        migrations.CreateModel(
169            name="UserSourceConnection",
170            fields=[
171                (
172                    "id",
173                    models.AutoField(
174                        auto_created=True,
175                        primary_key=True,
176                        serialize=False,
177                        verbose_name="ID",
178                    ),
179                ),
180                ("created", models.DateTimeField(auto_now_add=True)),
181                ("last_updated", models.DateTimeField(auto_now=True)),
182                (
183                    "source",
184                    models.ForeignKey(
185                        on_delete=django.db.models.deletion.CASCADE,
186                        to="authentik_core.Source",
187                    ),
188                ),
189                (
190                    "user",
191                    models.ForeignKey(
192                        on_delete=django.db.models.deletion.CASCADE,
193                        to=settings.AUTH_USER_MODEL,
194                    ),
195                ),
196            ],
197            options={
198                "unique_together": {("user", "source")},
199            },
200        ),
201        migrations.CreateModel(
202            name="Token",
203            fields=[
204                (
205                    "token_uuid",
206                    models.UUIDField(
207                        default=uuid.uuid4,
208                        editable=False,
209                        primary_key=True,
210                        serialize=False,
211                    ),
212                ),
213                (
214                    "expires",
215                    models.DateTimeField(default=authentik.core.models.default_token_duration),
216                ),
217                ("expiring", models.BooleanField(default=True)),
218                ("description", models.TextField(blank=True, default="")),
219                (
220                    "user",
221                    models.ForeignKey(
222                        on_delete=django.db.models.deletion.CASCADE,
223                        related_name="+",
224                        to=settings.AUTH_USER_MODEL,
225                    ),
226                ),
227            ],
228            options={
229                "verbose_name": "Token",
230                "verbose_name_plural": "Tokens",
231            },
232        ),
233        migrations.CreateModel(
234            name="Provider",
235            fields=[
236                (
237                    "id",
238                    models.AutoField(
239                        auto_created=True,
240                        primary_key=True,
241                        serialize=False,
242                        verbose_name="ID",
243                    ),
244                ),
245                (
246                    "property_mappings",
247                    models.ManyToManyField(
248                        blank=True, default=None, to="authentik_core.PropertyMapping"
249                    ),
250                ),
251            ],
252        ),
253        migrations.CreateModel(
254            name="Group",
255            fields=[
256                (
257                    "group_uuid",
258                    models.UUIDField(
259                        default=uuid.uuid4,
260                        editable=False,
261                        primary_key=True,
262                        serialize=False,
263                    ),
264                ),
265                ("name", models.CharField(max_length=80, verbose_name="name")),
266                (
267                    "attributes",
268                    models.JSONField(blank=True, default=dict),
269                ),
270                (
271                    "parent",
272                    models.ForeignKey(
273                        blank=True,
274                        null=True,
275                        on_delete=django.db.models.deletion.SET_NULL,
276                        related_name="children",
277                        to="authentik_core.Group",
278                    ),
279                ),
280            ],
281            options={
282                "unique_together": {("name", "parent")},
283            },
284        ),
285        migrations.CreateModel(
286            name="Application",
287            fields=[
288                (
289                    "policybindingmodel_ptr",
290                    models.OneToOneField(
291                        auto_created=True,
292                        on_delete=django.db.models.deletion.CASCADE,
293                        parent_link=True,
294                        primary_key=True,
295                        serialize=False,
296                        to="authentik_policies.PolicyBindingModel",
297                    ),
298                ),
299                ("name", models.TextField(help_text="Application's display Name.")),
300                (
301                    "slug",
302                    models.SlugField(help_text="Internal application name, used in URLs."),
303                ),
304                ("skip_authorization", models.BooleanField(default=False)),
305                ("meta_launch_url", models.URLField(blank=True, default="")),
306                ("meta_icon_url", models.TextField(blank=True, default="")),
307                ("meta_description", models.TextField(blank=True, default="")),
308                ("meta_publisher", models.TextField(blank=True, default="")),
309                (
310                    "provider",
311                    models.OneToOneField(
312                        blank=True,
313                        default=None,
314                        null=True,
315                        on_delete=django.db.models.deletion.SET_DEFAULT,
316                        to="authentik_core.Provider",
317                    ),
318                ),
319            ],
320            bases=("authentik_policies.policybindingmodel",),
321        ),
322        migrations.AddField(
323            model_name="user",
324            name="groups",
325            field=models.ManyToManyField(to="authentik_core.Group"),
326        ),
327        migrations.AddField(
328            model_name="user",
329            name="sources",
330            field=models.ManyToManyField(
331                through="authentik_core.UserSourceConnection",
332                to="authentik_core.Source",
333            ),
334        ),
335        migrations.AddField(
336            model_name="user",
337            name="user_permissions",
338            field=models.ManyToManyField(
339                blank=True,
340                help_text="Specific permissions for this user.",
341                related_name="user_set",
342                related_query_name="user",
343                to="auth.Permission",
344                verbose_name="user permissions",
345            ),
346        ),
347    ]

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_policies', '0001_initial'), ('auth', '0011_update_proxy_permissions')]
operations = [<CreateModel name='User', fields=[('id', <django.db.models.fields.AutoField>), ('password', <django.db.models.fields.CharField>), ('last_login', <django.db.models.fields.DateTimeField>), ('is_superuser', <django.db.models.fields.BooleanField>), ('username', <django.db.models.fields.CharField>), ('first_name', <django.db.models.fields.CharField>), ('last_name', <django.db.models.fields.CharField>), ('email', <django.db.models.fields.EmailField>), ('is_staff', <django.db.models.fields.BooleanField>), ('is_active', <django.db.models.fields.BooleanField>), ('date_joined', <django.db.models.fields.DateTimeField>), ('uuid', <django.db.models.fields.UUIDField>), ('name', <django.db.models.fields.TextField>), ('password_change_date', <django.db.models.fields.DateTimeField>), ('attributes', <django.db.models.fields.json.JSONField>)], options={'permissions': (('reset_user_password', 'Reset Password'),)}, bases=(<class 'django.db.models.base.Model'>,), managers=[('objects', <django.contrib.auth.models.UserManager object>)]>, <CreateModel name='PropertyMapping', fields=[('pm_uuid', <django.db.models.fields.UUIDField>), ('name', <django.db.models.fields.TextField>), ('expression', <django.db.models.fields.TextField>)], options={'verbose_name': 'Property Mapping', 'verbose_name_plural': 'Property Mappings'}>, <CreateModel name='Source', fields=[('policybindingmodel_ptr', <django.db.models.fields.related.OneToOneField>), ('name', <django.db.models.fields.TextField>), ('slug', <django.db.models.fields.SlugField>), ('enabled', <django.db.models.fields.BooleanField>), ('property_mappings', <django.db.models.fields.related.ManyToManyField>)], bases=('authentik_policies.policybindingmodel',)>, <CreateModel name='UserSourceConnection', fields=[('id', <django.db.models.fields.AutoField>), ('created', <django.db.models.fields.DateTimeField>), ('last_updated', <django.db.models.fields.DateTimeField>), ('source', <django.db.models.fields.related.ForeignKey>), ('user', <django.db.models.fields.related.ForeignKey>)], options={'unique_together': {('user', 'source')}}>, <CreateModel name='Token', fields=[('token_uuid', <django.db.models.fields.UUIDField>), ('expires', <django.db.models.fields.DateTimeField>), ('expiring', <django.db.models.fields.BooleanField>), ('description', <django.db.models.fields.TextField>), ('user', <django.db.models.fields.related.ForeignKey>)], options={'verbose_name': 'Token', 'verbose_name_plural': 'Tokens'}>, <CreateModel name='Provider', fields=[('id', <django.db.models.fields.AutoField>), ('property_mappings', <django.db.models.fields.related.ManyToManyField>)]>, <CreateModel name='Group', fields=[('group_uuid', <django.db.models.fields.UUIDField>), ('name', <django.db.models.fields.CharField>), ('attributes', <django.db.models.fields.json.JSONField>), ('parent', <django.db.models.fields.related.ForeignKey>)], options={'unique_together': {('name', 'parent')}}>, <CreateModel name='Application', fields=[('policybindingmodel_ptr', <django.db.models.fields.related.OneToOneField>), ('name', <django.db.models.fields.TextField>), ('slug', <django.db.models.fields.SlugField>), ('skip_authorization', <django.db.models.fields.BooleanField>), ('meta_launch_url', <django.db.models.fields.URLField>), ('meta_icon_url', <django.db.models.fields.TextField>), ('meta_description', <django.db.models.fields.TextField>), ('meta_publisher', <django.db.models.fields.TextField>), ('provider', <django.db.models.fields.related.OneToOneField>)], bases=('authentik_policies.policybindingmodel',)>, <AddField model_name='user', name='groups', field=<django.db.models.fields.related.ManyToManyField>>, <AddField model_name='user', name='sources', field=<django.db.models.fields.related.ManyToManyField>>, <AddField model_name='user', name='user_permissions', field=<django.db.models.fields.related.ManyToManyField>>]