فهرست منبع

BREAKING chore(api): squash all migrations

Peter Thomassen 4 سال پیش
والد
کامیت
557b01ea6c

+ 0 - 109
api/desecapi/migrations/0001_initial_squashed.py

@@ -1,109 +0,0 @@
-# Generated by Django 2.2 on 2019-04-26 15:13
-
-import desecapi.models
-from django.conf import settings
-import django.core.validators
-from django.db import migrations, models
-import django.db.models.deletion
-import uuid
-
-
-class Migration(migrations.Migration):
-
-    replaces = [('desecapi', '0001_initial'), ('desecapi', '0002_donation'), ('desecapi', '0003_auto_20151008_1023'), ('desecapi', '0004_remove_donation_rip'), ('desecapi', '0005_auto_20151008_1042'), ('desecapi', '0006_auto_20151018_1234'), ('desecapi', '0007_domain_updated'), ('desecapi', '0008_django_update_1-10'), ('desecapi', '0009_auto_20161201_1548'), ('desecapi', '0010_auto_20161219_1242'), ('desecapi', '0011_user_limit_domains'), ('desecapi', '0012_move_dyn_flag'), ('desecapi', '0013_acme_challenge'), ('desecapi', '0014_ip_validation'), ('desecapi', '0015_rrset'), ('desecapi', '0016_dyn_flag_default'), ('desecapi', '0017_rr_model'), ('desecapi', '0018_prune_domain_fields'), ('desecapi', '0019_rrset_uuid'), ('desecapi', '0020_user_locked'), ('desecapi', '0021_tokens'), ('desecapi', '0022_domain_published')]
-
-    initial = True
-
-    dependencies = [
-    ]
-
-    operations = [
-        migrations.CreateModel(
-            name='User',
-            fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('password', models.CharField(max_length=128, verbose_name='password')),
-                ('last_login', models.DateTimeField(blank=True, null=True, verbose_name='last login')),
-                ('email', models.EmailField(max_length=191, unique=True, verbose_name='email address')),
-                ('is_active', models.BooleanField(default=True)),
-                ('is_admin', models.BooleanField(default=False)),
-                ('registration_remote_ip', models.CharField(blank=True, max_length=1024)),
-                ('created', models.DateTimeField(auto_now_add=True)),
-                ('limit_domains', models.IntegerField(blank=True, default=5, null=True)),
-                ('dyn', models.BooleanField(default=False)),
-                ('locked', models.DateTimeField(blank=True, null=True)),
-            ],
-            options={
-                'abstract': False,
-            },
-        ),
-        migrations.CreateModel(
-            name='Donation',
-            fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('created', models.DateTimeField(default=desecapi.models.get_default_value_created)),
-                ('name', models.CharField(max_length=255)),
-                ('iban', models.CharField(max_length=34)),
-                ('bic', models.CharField(max_length=11)),
-                ('amount', models.DecimalField(decimal_places=2, max_digits=8)),
-                ('message', models.CharField(blank=True, max_length=255)),
-                ('due', models.DateTimeField(default=desecapi.models.get_default_value_due)),
-                ('mref', models.CharField(default=desecapi.models.get_default_value_mref, max_length=32)),
-                ('email', models.EmailField(blank=True, max_length=255)),
-            ],
-            options={
-                'ordering': ('created',),
-            },
-        ),
-        migrations.CreateModel(
-            name='Domain',
-            fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('created', models.DateTimeField(auto_now_add=True)),
-                ('name', models.CharField(max_length=191, unique=True)),
-                ('owner', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='domains', to=settings.AUTH_USER_MODEL)),
-                ('published', models.DateTimeField(null=True)),
-            ],
-            options={
-                'ordering': ('created',),
-            },
-        ),
-        migrations.CreateModel(
-            name='RRset',
-            fields=[
-                ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)),
-                ('created', models.DateTimeField(auto_now_add=True)),
-                ('updated', models.DateTimeField(null=True)),
-                ('subname', models.CharField(blank=True, max_length=178)),
-                ('type', models.CharField(max_length=10, validators=[desecapi.models.validate_upper])),
-                ('ttl', models.PositiveIntegerField(validators=[django.core.validators.MinValueValidator(1)])),
-                ('domain', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='desecapi.Domain')),
-            ],
-            options={
-                'unique_together': {('domain', 'subname', 'type')},
-            },
-        ),
-        migrations.CreateModel(
-            name='RR',
-            fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('created', models.DateTimeField(auto_now_add=True)),
-                ('content', models.CharField(max_length=4092)),
-                ('rrset', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='records', to='desecapi.RRset')),
-            ],
-        ),
-        migrations.CreateModel(
-            name='Token',
-            fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('created', models.DateTimeField(auto_now_add=True, verbose_name='Created')),
-                ('key', models.CharField(db_index=True, max_length=40, unique=True, verbose_name='Key')),
-                ('name', models.CharField(default='', max_length=64, verbose_name='Name')),
-                ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='auth_tokens', to=settings.AUTH_USER_MODEL, verbose_name='User')),
-                ('user_specific_id', models.BigIntegerField(verbose_name='User-Specific ID')),
-            ],
-            options={
-                'unique_together': {('user', 'user_specific_id')},
-            },
-        ),
-    ]

+ 210 - 0
api/desecapi/migrations/0001_initial_squashed_again.py

@@ -0,0 +1,210 @@
+# Generated by Django 3.1 on 2020-08-25 14:54
+
+import desecapi.models
+from django.conf import settings
+import django.core.validators
+from django.db import migrations, models
+import django.db.models.deletion
+import re
+import uuid
+
+
+class Migration(migrations.Migration):
+
+    initial = True
+
+    dependencies = [
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='User',
+            fields=[
+                ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)),
+                ('password', models.CharField(max_length=128, verbose_name='password')),
+                ('last_login', models.DateTimeField(blank=True, null=True, verbose_name='last login')),
+                ('email', models.EmailField(max_length=191, unique=True, verbose_name='email address')),
+                ('is_active', models.BooleanField(default=True)),
+                ('is_admin', models.BooleanField(default=False)),
+                ('created', models.DateTimeField(auto_now_add=True)),
+                ('limit_domains', models.IntegerField(blank=True, default=5, null=True)),
+            ],
+            options={
+                'abstract': False,
+            },
+        ),
+        migrations.CreateModel(
+            name='Domain',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('created', models.DateTimeField(auto_now_add=True)),
+                ('name', models.CharField(max_length=191, unique=True, validators=[desecapi.models.validate_lower, django.core.validators.RegexValidator(code='invalid_domain_name', flags=re.RegexFlag['IGNORECASE'], message='Domain names must be labels separated by dots. Labels may consist of up to 63 letters, digits, hyphens, and underscores. The last label may not contain an underscore.', regex='^(([a-z0-9_-]{1,63})\\.)*[a-z0-9-]{1,63}$')])),
+                ('owner', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='domains', to=settings.AUTH_USER_MODEL)),
+                ('published', models.DateTimeField(blank=True, null=True)),
+                ('minimum_ttl', models.PositiveIntegerField(default=desecapi.models.get_minimum_ttl_default)),
+                ('renewal_changed', models.DateTimeField(auto_now_add=True)),
+                ('renewal_state', models.IntegerField(choices=[(1, 'Fresh'), (2, 'Notified'), (3, 'Warned')], default=1)),
+            ],
+            options={
+                'ordering': ('created',),
+            },
+        ),
+        migrations.CreateModel(
+            name='RRset',
+            fields=[
+                ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)),
+                ('created', models.DateTimeField(auto_now_add=True)),
+                ('touched', models.DateTimeField(auto_now=True)),
+                ('subname', models.CharField(blank=True, max_length=178, validators=[desecapi.models.validate_lower, django.core.validators.RegexValidator(code='invalid_subname', message="Subname can only use (lowercase) a-z, 0-9, ., -, and _, may start with a '*.', or just be '*'.", regex='^([*]|(([*][.])?[a-z0-9_.-]*))$')])),
+                ('type', models.CharField(max_length=10, validators=[desecapi.models.validate_upper, django.core.validators.RegexValidator(code='invalid_type', message='Type must be uppercase alphanumeric and start with a letter.', regex='^[A-Z][A-Z0-9]*$')])),
+                ('ttl', models.PositiveIntegerField()),
+                ('domain', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='desecapi.domain')),
+            ],
+            options={
+                'unique_together': {('domain', 'subname', 'type')},
+            },
+        ),
+        migrations.CreateModel(
+            name='AuthenticatedAction',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+            ],
+            options={
+                'managed': False,
+            },
+        ),
+        migrations.CreateModel(
+            name='AuthenticatedUserAction',
+            fields=[
+                ('authenticatedaction_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='desecapi.authenticatedaction')),
+            ],
+            options={
+                'managed': False,
+            },
+            bases=('desecapi.authenticatedaction',),
+        ),
+        migrations.CreateModel(
+            name='AuthenticatedDeleteUserAction',
+            fields=[
+                ('authenticateduseraction_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='desecapi.authenticateduseraction')),
+            ],
+            options={
+                'managed': False,
+            },
+            bases=('desecapi.authenticateduseraction',),
+        ),
+        migrations.CreateModel(
+            name='AuthenticatedResetPasswordUserAction',
+            fields=[
+                ('authenticateduseraction_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='desecapi.authenticateduseraction')),
+                ('new_password', models.CharField(max_length=128)),
+            ],
+            options={
+                'managed': False,
+            },
+            bases=('desecapi.authenticateduseraction',),
+        ),
+        migrations.CreateModel(
+            name='Captcha',
+            fields=[
+                ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)),
+                ('created', models.DateTimeField(auto_now_add=True)),
+                ('content', models.CharField(default=desecapi.models.captcha_default_content, max_length=24)),
+            ],
+        ),
+        migrations.CreateModel(
+            name='Token',
+            fields=[
+                ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)),
+                ('created', models.DateTimeField(auto_now_add=True, verbose_name='Created')),
+                ('key', models.CharField(db_index=True, max_length=128, unique=True, verbose_name='Key')),
+                ('name', models.CharField(blank=True, max_length=64, verbose_name='Name')),
+                ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='auth_tokens', to=settings.AUTH_USER_MODEL, verbose_name='User')),
+                ('last_used', models.DateTimeField(blank=True, null=True)),
+            ],
+            options={
+                'verbose_name': 'Token',
+                'verbose_name_plural': 'Tokens',
+            },
+        ),
+        migrations.CreateModel(
+            name='RR',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('created', models.DateTimeField(auto_now_add=True)),
+                ('content', models.CharField(max_length=500)),
+                ('rrset', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='records', to='desecapi.rrset')),
+            ],
+        ),
+        migrations.CreateModel(
+            name='AuthenticatedActivateUserAction',
+            fields=[
+                ('authenticateduseraction_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='desecapi.authenticateduseraction')),
+                ('domain', models.CharField(max_length=191)),
+            ],
+            options={
+                'managed': False,
+            },
+            bases=('desecapi.authenticateduseraction',),
+        ),
+        migrations.CreateModel(
+            name='AuthenticatedChangeEmailUserAction',
+            fields=[
+                ('authenticateduseraction_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='desecapi.authenticateduseraction')),
+                ('new_email', models.EmailField(max_length=254)),
+            ],
+            options={
+                'managed': False,
+            },
+            bases=('desecapi.authenticateduseraction',),
+        ),
+        migrations.CreateModel(
+            name='AuthenticatedBasicUserAction',
+            fields=[
+                ('authenticatedaction_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='desecapi.authenticatedaction')),
+            ],
+            options={
+                'managed': False,
+            },
+            bases=('desecapi.authenticatedaction',),
+        ),
+        migrations.CreateModel(
+            name='AuthenticatedDomainBasicUserAction',
+            fields=[
+                ('authenticatedbasicuseraction_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='desecapi.authenticatedbasicuseraction')),
+            ],
+            options={
+                'managed': False,
+            },
+            bases=('desecapi.authenticatedbasicuseraction',),
+        ),
+        migrations.CreateModel(
+            name='AuthenticatedRenewDomainBasicUserAction',
+            fields=[
+                ('authenticateddomainbasicuseraction_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='desecapi.authenticateddomainbasicuseraction')),
+            ],
+            options={
+                'managed': False,
+            },
+            bases=('desecapi.authenticateddomainbasicuseraction',),
+        ),
+        migrations.CreateModel(
+            name='Donation',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('created', models.DateTimeField(default=desecapi.models.get_default_value_created)),
+                ('name', models.CharField(max_length=255)),
+                ('iban', models.CharField(max_length=34)),
+                ('bic', models.CharField(max_length=11)),
+                ('amount', models.DecimalField(decimal_places=2, max_digits=8)),
+                ('message', models.CharField(blank=True, max_length=255)),
+                ('due', models.DateTimeField(default=desecapi.models.get_default_value_due)),
+                ('mref', models.CharField(default=desecapi.models.get_default_value_mref, max_length=32)),
+                ('email', models.EmailField(blank=True, max_length=255)),
+            ],
+            options={
+                'ordering': ('created',),
+                'managed': False,
+            },
+        ),
+    ]

+ 0 - 50
api/desecapi/migrations/0002_lowercase_domains_and_subnames.py

@@ -1,50 +0,0 @@
-import desecapi.models
-import django.core.validators
-from django.db import migrations, models
-
-
-def lowercase_names(apps, schema_editor):
-    # Domains
-    Domain = apps.get_model('desecapi', 'Domain')
-    domains = list(Domain.objects.all())
-    for domain in domains:
-        domain.name = domain.name.lower()
-    Domain.objects.bulk_update(domains, ['name'], batch_size=500)
-
-    # RRsets
-    RRset = apps.get_model('desecapi', 'RRset')
-    rrsets = list(RRset.objects.all())
-    for rrset in rrsets:
-        rrset.subname = rrset.subname.lower()
-    RRset.objects.bulk_update(rrsets, ['subname'], batch_size=500)
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('desecapi', '0001_initial_squashed'),
-    ]
-
-    operations = [
-        migrations.AlterField(
-            model_name='domain',
-            name='name',
-            field=models.CharField(max_length=191, unique=True, validators=[desecapi.models.validate_lower, django.core.validators.RegexValidator(code='invalid_domain_name', message='Domain name malformed.', regex='^[a-z0-9_.-]+$')]),
-        ),
-        migrations.AlterField(
-            model_name='domain',
-            name='published',
-            field=models.DateTimeField(blank=True, null=True),
-        ),
-        migrations.AlterField(
-            model_name='rrset',
-            name='subname',
-            field=models.CharField(blank=True, max_length=178, validators=[desecapi.models.validate_lower, django.core.validators.RegexValidator(code='invalid_subname', message='Subname malformed.', regex='^[*]?[a-z0-9_.-]*$')]),
-        ),
-        migrations.AlterField(
-            model_name='rrset',
-            name='type',
-            field=models.CharField(max_length=10, validators=[desecapi.models.validate_upper, django.core.validators.RegexValidator(code='invalid_type', message='Type malformed.', regex='^[A-Z][A-Z0-9]*$')]),
-        ),
-        migrations.RunPython(lowercase_names, reverse_code=migrations.RunPython.noop),
-    ]

+ 0 - 30
api/desecapi/migrations/0003_validation.py

@@ -1,30 +0,0 @@
-# Generated by Django 2.2.2 on 2019-06-28 18:16
-
-import desecapi.models
-import django.core.validators
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('desecapi', '0002_lowercase_domains_and_subnames'),
-    ]
-
-    operations = [
-        migrations.AlterField(
-            model_name='domain',
-            name='name',
-            field=models.CharField(max_length=191, unique=True, validators=[desecapi.models.validate_lower, django.core.validators.RegexValidator(code='invalid_domain_name', message='Invalid value (not a DNS name).', regex='^[a-z0-9_.-]*[a-z]$')]),
-        ),
-        migrations.AlterField(
-            model_name='rrset',
-            name='subname',
-            field=models.CharField(blank=True, max_length=178, validators=[desecapi.models.validate_lower, django.core.validators.RegexValidator(code='invalid_subname', message="Subname can only use (lowercase) a-z, 0-9, ., -, and _, may start with a '*.', or just be '*'.", regex='^([*]|(([*][.])?[a-z0-9_.-]*))$')]),
-        ),
-        migrations.AlterField(
-            model_name='rrset',
-            name='type',
-            field=models.CharField(max_length=10, validators=[desecapi.models.validate_upper, django.core.validators.RegexValidator(code='invalid_type', message='Type must be uppercase alphanumeric and start with a letter.', regex='^[A-Z][A-Z0-9]*$')]),
-        ),
-    ]

+ 0 - 23
api/desecapi/migrations/0004_domain_minimum_ttl.py

@@ -1,23 +0,0 @@
-# Generated by Django 2.2.3 on 2019-07-19 12:14
-
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('desecapi', '0003_validation'),
-    ]
-
-    operations = [
-        migrations.AddField(
-            model_name='domain',
-            name='minimum_ttl',
-            field=models.PositiveIntegerField(default=60),
-        ),
-        migrations.AlterField(
-            model_name='rrset',
-            name='ttl',
-            field=models.PositiveIntegerField(),
-        ),
-    ]

+ 0 - 21
api/desecapi/migrations/0005_user_model_cleanup.py

@@ -1,21 +0,0 @@
-# Generated by Django 2.2.2 on 2019-06-28 18:23
-
-from django.db import migrations
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('desecapi', '0004_domain_minimum_ttl'),
-    ]
-
-    operations = [
-        migrations.RemoveField(
-            model_name='user',
-            name='dyn',
-        ),
-        migrations.RemoveField(
-            model_name='user',
-            name='locked',
-        ),
-    ]

+ 0 - 79
api/desecapi/migrations/0006_authenticated_actions.py

@@ -1,79 +0,0 @@
-# Generated by Django 2.2.1 on 2019-09-21 11:39
-
-import datetime
-from django.db import migrations, models
-import django.db.models.deletion
-from django.utils import timezone
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('desecapi', '0005_user_model_cleanup'),
-    ]
-
-    operations = [
-        migrations.CreateModel(
-            name='AuthenticatedAction',
-            fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('created', models.PositiveIntegerField(default=lambda: int(datetime.timestamp(timezone.now())))),
-            ],
-            options={
-                'managed': False,
-            },
-        ),
-        migrations.CreateModel(
-            name='AuthenticatedUserAction',
-            fields=[
-                ('authenticatedaction_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='desecapi.AuthenticatedAction')),
-            ],
-            options={
-                'managed': False,
-            },
-            bases=('desecapi.authenticatedaction',),
-        ),
-        migrations.CreateModel(
-            name='AuthenticatedActivateUserAction',
-            fields=[
-                ('authenticateduseraction_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='desecapi.AuthenticatedUserAction')),
-                ('domain', models.CharField(max_length=191)),
-            ],
-            options={
-                'managed': False,
-            },
-            bases=('desecapi.authenticateduseraction',),
-        ),
-        migrations.CreateModel(
-            name='AuthenticatedChangeEmailUserAction',
-            fields=[
-                ('authenticateduseraction_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='desecapi.AuthenticatedUserAction')),
-                ('new_email', models.EmailField(max_length=254)),
-            ],
-            options={
-                'managed': False,
-            },
-            bases=('desecapi.authenticateduseraction',),
-        ),
-        migrations.CreateModel(
-            name='AuthenticatedDeleteUserAction',
-            fields=[
-                ('authenticateduseraction_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='desecapi.AuthenticatedUserAction')),
-            ],
-            options={
-                'managed': False,
-            },
-            bases=('desecapi.authenticateduseraction',),
-        ),
-        migrations.CreateModel(
-            name='AuthenticatedResetPasswordUserAction',
-            fields=[
-                ('authenticateduseraction_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='desecapi.AuthenticatedUserAction')),
-                ('new_password', models.CharField(max_length=128)),
-            ],
-            options={
-                'managed': False,
-            },
-            bases=('desecapi.authenticateduseraction',),
-        ),
-    ]

+ 0 - 17
api/desecapi/migrations/0007_remove_user_registration_remote_ip.py

@@ -1,17 +0,0 @@
-# Generated by Django 2.2.1 on 2019-09-22 10:19
-
-from django.db import migrations
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('desecapi', '0006_authenticated_actions'),
-    ]
-
-    operations = [
-        migrations.RemoveField(
-            model_name='user',
-            name='registration_remote_ip',
-        ),
-    ]

+ 0 - 24
api/desecapi/migrations/0008_captcha.py

@@ -1,24 +0,0 @@
-# Generated by Django 2.2.1 on 2019-09-22 10:26
-
-import desecapi.models
-from django.db import migrations, models
-import django.db.models.deletion
-import uuid
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('desecapi', '0007_remove_user_registration_remote_ip'),
-    ]
-
-    operations = [
-        migrations.CreateModel(
-            name='Captcha',
-            fields=[
-                ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)),
-                ('created', models.DateTimeField(auto_now_add=True)),
-                ('content', models.CharField(default=desecapi.models.captcha_default_content, max_length=24)),
-            ],
-        ),
-    ]

+ 0 - 20
api/desecapi/migrations/0009_domain_minimum_ttl_default.py

@@ -1,20 +0,0 @@
-# Generated by Django 2.2.6 on 2019-10-10 15:07
-
-import desecapi.models
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('desecapi', '0008_captcha'),
-    ]
-
-    operations = [
-        migrations.AlterField(
-            model_name='domain',
-            name='minimum_ttl',
-            field=models.PositiveIntegerField(default=desecapi.models.get_minimum_ttl_default),
-        ),
-    ]
-

+ 0 - 52
api/desecapi/migrations/0010_hash_tokens_and_switch_to_uuid.py

@@ -1,52 +0,0 @@
-# Generated by Django 2.2.7 on 2019-11-11 20:14
-
-from django.contrib.auth.hashers import make_password
-from django.db import migrations, models, transaction
-import uuid
-
-
-def migrate_data(apps, schema_editor):
-    Token = apps.get_model('desecapi', 'Token')
-    tokens = Token.objects.exclude(key__contains='$').all()
-    with transaction.atomic():
-        for token in tokens:
-            hashed = make_password(token.key, salt='static', hasher='pbkdf2_sha256_iter1')
-            Token.objects.filter(key=token.key).update(id=uuid.uuid4().hex, key=hashed)
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('desecapi', '0009_domain_minimum_ttl_default'),
-    ]
-
-    operations = [
-        migrations.AlterModelOptions(
-            name='token',
-            options={'verbose_name': 'Token', 'verbose_name_plural': 'Tokens'},
-        ),
-        migrations.AlterUniqueTogether(
-            name='token',
-            unique_together=set(),
-        ),
-        migrations.RemoveField(
-            model_name='token',
-            name='user_specific_id',
-        ),
-        migrations.AlterField(
-            model_name='token',
-            name='key',
-            field=models.CharField(db_index=True, max_length=128, unique=True, verbose_name='Key'),
-        ),
-        migrations.AlterField(
-            model_name='token',
-            name='id',
-            field=models.CharField(default=uuid.uuid4, max_length=32, primary_key=True, serialize=False),
-        ),
-        migrations.RunPython(migrate_data, reverse_code=migrations.RunPython.noop),
-        migrations.AlterField(
-            model_name='token',
-            name='id',
-            field=models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False),
-        ),
-    ]

+ 0 - 88
api/desecapi/migrations/0011_user_id_to_uuid.py

@@ -1,88 +0,0 @@
-from django.conf import settings
-from django.db import migrations, models, transaction
-import django.db.models.deletion
-import uuid
-
-
-def migrate_data(apps, schema_editor):
-    # SQLite does not support altering constraints. However, we use it for tests only, and there's no data to migrate.
-    if schema_editor.connection.vendor == 'sqlite':
-        return
-
-    def _sql_add_cascading_user_constraint(model_name, field_name):
-        return f'ALTER TABLE desecapi_{model_name}' \
-               f' ADD CONSTRAINT desecapi_{model_name}_{field_name}_id_update_cascade' \
-               f' FOREIGN KEY (`{field_name}_id`) REFERENCES `desecapi_user` (`id`) ON UPDATE CASCADE'
-
-    def _sql_drop_cascading_user_constraint(model_name, field_name):
-        return f'ALTER TABLE desecapi_{model_name} DROP CONSTRAINT desecapi_{model_name}_{field_name}_id_update_cascade'
-
-    # Add cascading foreign key constraints.
-    # This has to be done after removing the regular constraints using migrations.AlterField. If done the other
-    # way around, AlterField will drop the cascading constraint.
-    schema_editor.execute(_sql_add_cascading_user_constraint('domain', 'owner')),
-    schema_editor.execute(_sql_add_cascading_user_constraint('token', 'user')),
-
-    # Repopulate user ID fields
-    User = apps.get_model('desecapi', 'User')
-    with transaction.atomic():
-        for user in User.objects.all():
-            User.objects.filter(email=user.email).update(id=uuid.uuid4().hex)
-
-    # Remove cascading foreign key constraints
-    schema_editor.execute(_sql_drop_cascading_user_constraint('domain', 'owner')),
-    schema_editor.execute(_sql_drop_cascading_user_constraint('token', 'user')),
-
-
-class Migration(migrations.Migration):
-    dependencies = [
-        ('desecapi', '0010_hash_tokens_and_switch_to_uuid'),
-    ]
-
-    operations = [
-        # Switch to intermediate field type
-        migrations.AlterField(
-            model_name='user',
-            name='id',
-            field=models.CharField(default=uuid.uuid4, max_length=32, primary_key=True, serialize=False),
-        ),
-
-        # Remove regular foreign key constraints.
-        # This is the migration Django generates when you set db_constraint=False on the model field.
-        migrations.AlterField(
-            model_name='domain',
-            name='owner',
-            field=models.ForeignKey(db_constraint=False, on_delete=django.db.models.deletion.PROTECT,
-                                    related_name='domains', to=settings.AUTH_USER_MODEL),
-        ),
-        migrations.AlterField(
-            model_name='token',
-            name='user',
-            field=models.ForeignKey(db_constraint=False, on_delete=django.db.models.deletion.CASCADE,
-                                    related_name='auth_tokens', to=settings.AUTH_USER_MODEL, verbose_name='User'),
-        ),
-
-        # Repopulate user IDs with random UUIDs
-        migrations.RunPython(migrate_data, migrations.RunPython.noop, atomic=False),
-
-        # Restore regular foreign key constraints
-        migrations.AlterField(
-            model_name='token',
-            name='user',
-            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='auth_tokens',
-                                    to=settings.AUTH_USER_MODEL, verbose_name='User'),
-        ),
-        migrations.AlterField(
-            model_name='domain',
-            name='owner',
-            field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='domains',
-                                    to=settings.AUTH_USER_MODEL),
-        ),
-
-        # Switch to final field type
-        migrations.AlterField(
-            model_name='user',
-            name='id',
-            field=models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False),
-        ),
-    ]

+ 0 - 17
api/desecapi/migrations/0012_volatile_donations.py

@@ -1,17 +0,0 @@
-# Generated by Django 2.2.7 on 2019-11-27 15:30
-
-from django.db import migrations
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('desecapi', '0011_user_id_to_uuid'),
-    ]
-
-    operations = [
-        migrations.AlterModelOptions(
-            name='donation',
-            options={'managed': False},
-        ),
-    ]

+ 0 - 45
api/desecapi/migrations/0013_token_last_used.py

@@ -1,45 +0,0 @@
-# Generated by Django 3.0.5 on 2020-04-29 17:41
-
-import desecapi.models
-import django.core.validators
-from django.db import migrations, models, transaction
-
-
-def migrate_data(apps, schema_editor):
-    Token = apps.get_model('desecapi', 'Token')
-    tokens = Token.objects.filter(last_used__isnull=True).all()
-    with transaction.atomic():
-        for token in tokens:
-            # Don't suggest that existing tokens have not been in use.
-            Token.objects.filter(pk=token.id).update(last_used=token.user.last_login)
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('desecapi', '0012_volatile_donations'),
-    ]
-
-    operations = [
-        migrations.AddField(
-            model_name='token',
-            name='last_used',
-            field=models.DateTimeField(blank=True, null=True),
-        ),
-        migrations.AlterField(
-            model_name='token',
-            name='name',
-            field=models.CharField(blank=True, max_length=64, verbose_name='Name'),
-        ),
-        migrations.AlterField(
-            model_name='domain',
-            name='name',
-            field=models.CharField(max_length=191, unique=True, validators=[desecapi.models.validate_lower, django.core.validators.RegexValidator(code='invalid_domain_name', message='Invalid value (not a DNS name).', regex='^([a-z0-9_-]{1,63}\\.)*[a-z]{1,63}$')]),
-        ),
-        migrations.AlterField(
-            model_name='rr',
-            name='content',
-            field=models.CharField(max_length=500),
-        ),
-        migrations.RunPython(migrate_data, migrations.RunPython.noop),
-    ]

+ 0 - 20
api/desecapi/migrations/0014_rrset_touched.py

@@ -1,20 +0,0 @@
-# Generated by Django 3.0.6 on 2020-05-21 10:59
-
-import desecapi.models
-import django.core.validators
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('desecapi', '0013_token_last_used'),
-    ]
-
-    operations = [
-        migrations.RenameField(
-            model_name='rrset',
-            old_name='updated',
-            new_name='touched',
-        ),
-    ]

+ 0 - 24
api/desecapi/migrations/0015_rrset_touched_auto_now.py

@@ -1,24 +0,0 @@
-# Generated by Django 3.0.6 on 2020-05-22 12:10
-
-from django.db import migrations, models
-
-
-def migrate_data(apps, schema_editor):
-    RRset = apps.get_model('desecapi', 'RRset')
-    RRset.objects.filter(touched__isnull=True).update(touched=models.F('created'))
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('desecapi', '0014_rrset_touched'),
-    ]
-
-    operations = [
-        migrations.RunPython(migrate_data, migrations.RunPython.noop),
-        migrations.AlterField(
-            model_name='rrset',
-            name='touched',
-            field=models.DateTimeField(auto_now=True),
-        ),
-    ]

+ 0 - 62
api/desecapi/migrations/0016_domain_renewal.py

@@ -1,62 +0,0 @@
-# Generated by Django 3.0.6 on 2020-06-29 19:15
-
-import desecapi.models
-import django.core.validators
-from django.db import migrations, models
-import django.db.models.deletion
-import re
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('desecapi', '0015_rrset_touched_auto_now'),
-    ]
-
-    operations = [
-        migrations.CreateModel(
-            name='AuthenticatedBasicUserAction',
-            fields=[
-                ('authenticatedaction_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='desecapi.AuthenticatedAction')),
-            ],
-            options={
-                'managed': False,
-            },
-            bases=('desecapi.authenticatedaction',),
-        ),
-        migrations.AddField(
-            model_name='domain',
-            name='renewal_changed',
-            field=models.DateTimeField(auto_now_add=True),
-        ),
-        migrations.AddField(
-            model_name='domain',
-            name='renewal_state',
-            field=models.IntegerField(choices=[(1, 'Fresh'), (2, 'Notified'), (3, 'Warned')], default=1),
-        ),
-        migrations.AlterField(
-            model_name='domain',
-            name='name',
-            field=models.CharField(max_length=191, unique=True, validators=[desecapi.models.validate_lower, django.core.validators.RegexValidator(code='invalid_domain_name', flags=re.RegexFlag['IGNORECASE'], message='Domain names must be labels separated by dots. Labels may consist of up to 63 letters, digits, hyphens, and underscores. The last label may only contain letters.', regex='^(([a-z0-9_-]{1,63})\\.)*[a-z]{1,63}$')]),
-        ),
-        migrations.CreateModel(
-            name='AuthenticatedDomainBasicUserAction',
-            fields=[
-                ('authenticatedbasicuseraction_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='desecapi.AuthenticatedBasicUserAction')),
-            ],
-            options={
-                'managed': False,
-            },
-            bases=('desecapi.authenticatedbasicuseraction',),
-        ),
-        migrations.CreateModel(
-            name='AuthenticatedRenewDomainBasicUserAction',
-            fields=[
-                ('authenticateddomainbasicuseraction_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='desecapi.AuthenticatedDomainBasicUserAction')),
-            ],
-            options={
-                'managed': False,
-            },
-            bases=('desecapi.authenticateddomainbasicuseraction',),
-        ),
-    ]