# Generated by Django 3.0.7 on 2020-11-30 18:19

import bookwyrm.models.activitypub_mixin
import bookwyrm.models.fields
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion


def copy_rsa_keys(app_registry, schema_editor):
    db_alias = schema_editor.connection.alias
    users = app_registry.get_model("bookwyrm", "User")
    keypair = app_registry.get_model("bookwyrm", "KeyPair")
    for user in users.objects.using(db_alias):
        if user.public_key or user.private_key:
            user.key_pair = keypair.objects.create(
                remote_id="%s/#main-key" % user.remote_id,
                private_key=user.private_key,
                public_key=user.public_key,
            )
            user.save()


class Migration(migrations.Migration):

    dependencies = [
        ("bookwyrm", "0016_auto_20201129_0304"),
    ]
    operations = [
        migrations.CreateModel(
            name="KeyPair",
            fields=[
                (
                    "id",
                    models.AutoField(
                        auto_created=True,
                        primary_key=True,
                        serialize=False,
                        verbose_name="ID",
                    ),
                ),
                ("created_date", models.DateTimeField(auto_now_add=True)),
                ("updated_date", models.DateTimeField(auto_now=True)),
                (
                    "remote_id",
                    bookwyrm.models.fields.RemoteIdField(
                        max_length=255,
                        null=True,
                        validators=[bookwyrm.models.fields.validate_remote_id],
                    ),
                ),
                ("private_key", models.TextField(blank=True, null=True)),
                ("public_key", bookwyrm.models.fields.TextField(blank=True, null=True)),
            ],
            options={
                "abstract": False,
            },
            bases=(bookwyrm.models.activitypub_mixin.ActivitypubMixin, models.Model),
        ),
        migrations.AddField(
            model_name="user",
            name="followers",
            field=bookwyrm.models.fields.ManyToManyField(
                related_name="following",
                through="bookwyrm.UserFollows",
                to=settings.AUTH_USER_MODEL,
            ),
        ),
        migrations.AlterField(
            model_name="author",
            name="remote_id",
            field=bookwyrm.models.fields.RemoteIdField(
                max_length=255,
                null=True,
                validators=[bookwyrm.models.fields.validate_remote_id],
            ),
        ),
        migrations.AlterField(
            model_name="book",
            name="remote_id",
            field=bookwyrm.models.fields.RemoteIdField(
                max_length=255,
                null=True,
                validators=[bookwyrm.models.fields.validate_remote_id],
            ),
        ),
        migrations.AlterField(
            model_name="connector",
            name="remote_id",
            field=bookwyrm.models.fields.RemoteIdField(
                max_length=255,
                null=True,
                validators=[bookwyrm.models.fields.validate_remote_id],
            ),
        ),
        migrations.AlterField(
            model_name="favorite",
            name="remote_id",
            field=bookwyrm.models.fields.RemoteIdField(
                max_length=255,
                null=True,
                validators=[bookwyrm.models.fields.validate_remote_id],
            ),
        ),
        migrations.AlterField(
            model_name="federatedserver",
            name="remote_id",
            field=bookwyrm.models.fields.RemoteIdField(
                max_length=255,
                null=True,
                validators=[bookwyrm.models.fields.validate_remote_id],
            ),
        ),
        migrations.AlterField(
            model_name="image",
            name="remote_id",
            field=bookwyrm.models.fields.RemoteIdField(
                max_length=255,
                null=True,
                validators=[bookwyrm.models.fields.validate_remote_id],
            ),
        ),
        migrations.AlterField(
            model_name="notification",
            name="remote_id",
            field=bookwyrm.models.fields.RemoteIdField(
                max_length=255,
                null=True,
                validators=[bookwyrm.models.fields.validate_remote_id],
            ),
        ),
        migrations.AlterField(
            model_name="readthrough",
            name="remote_id",
            field=bookwyrm.models.fields.RemoteIdField(
                max_length=255,
                null=True,
                validators=[bookwyrm.models.fields.validate_remote_id],
            ),
        ),
        migrations.AlterField(
            model_name="shelf",
            name="remote_id",
            field=bookwyrm.models.fields.RemoteIdField(
                max_length=255,
                null=True,
                validators=[bookwyrm.models.fields.validate_remote_id],
            ),
        ),
        migrations.AlterField(
            model_name="shelfbook",
            name="remote_id",
            field=bookwyrm.models.fields.RemoteIdField(
                max_length=255,
                null=True,
                validators=[bookwyrm.models.fields.validate_remote_id],
            ),
        ),
        migrations.AlterField(
            model_name="status",
            name="remote_id",
            field=bookwyrm.models.fields.RemoteIdField(
                max_length=255,
                null=True,
                validators=[bookwyrm.models.fields.validate_remote_id],
            ),
        ),
        migrations.AlterField(
            model_name="tag",
            name="remote_id",
            field=bookwyrm.models.fields.RemoteIdField(
                max_length=255,
                null=True,
                validators=[bookwyrm.models.fields.validate_remote_id],
            ),
        ),
        migrations.AlterField(
            model_name="user",
            name="avatar",
            field=bookwyrm.models.fields.ImageField(
                blank=True, null=True, upload_to="avatars/"
            ),
        ),
        migrations.AlterField(
            model_name="user",
            name="bookwyrm_user",
            field=bookwyrm.models.fields.BooleanField(default=True),
        ),
        migrations.AlterField(
            model_name="user",
            name="inbox",
            field=bookwyrm.models.fields.RemoteIdField(
                max_length=255,
                unique=True,
                validators=[bookwyrm.models.fields.validate_remote_id],
            ),
        ),
        migrations.AlterField(
            model_name="user",
            name="local",
            field=models.BooleanField(default=False),
        ),
        migrations.AlterField(
            model_name="user",
            name="manually_approves_followers",
            field=bookwyrm.models.fields.BooleanField(default=False),
        ),
        migrations.AlterField(
            model_name="user",
            name="name",
            field=bookwyrm.models.fields.CharField(
                blank=True, max_length=100, null=True
            ),
        ),
        migrations.AlterField(
            model_name="user",
            name="outbox",
            field=bookwyrm.models.fields.RemoteIdField(
                max_length=255,
                unique=True,
                validators=[bookwyrm.models.fields.validate_remote_id],
            ),
        ),
        migrations.AlterField(
            model_name="user",
            name="remote_id",
            field=bookwyrm.models.fields.RemoteIdField(
                max_length=255,
                null=True,
                unique=True,
                validators=[bookwyrm.models.fields.validate_remote_id],
            ),
        ),
        migrations.AlterField(
            model_name="user",
            name="shared_inbox",
            field=bookwyrm.models.fields.RemoteIdField(
                max_length=255,
                null=True,
                validators=[bookwyrm.models.fields.validate_remote_id],
            ),
        ),
        migrations.AlterField(
            model_name="user",
            name="summary",
            field=bookwyrm.models.fields.TextField(blank=True, null=True),
        ),
        migrations.AlterField(
            model_name="user",
            name="username",
            field=bookwyrm.models.fields.UsernameField(),
        ),
        migrations.AlterField(
            model_name="userblocks",
            name="remote_id",
            field=bookwyrm.models.fields.RemoteIdField(
                max_length=255,
                null=True,
                validators=[bookwyrm.models.fields.validate_remote_id],
            ),
        ),
        migrations.AlterField(
            model_name="userfollowrequest",
            name="remote_id",
            field=bookwyrm.models.fields.RemoteIdField(
                max_length=255,
                null=True,
                validators=[bookwyrm.models.fields.validate_remote_id],
            ),
        ),
        migrations.AlterField(
            model_name="userfollows",
            name="remote_id",
            field=bookwyrm.models.fields.RemoteIdField(
                max_length=255,
                null=True,
                validators=[bookwyrm.models.fields.validate_remote_id],
            ),
        ),
        migrations.AlterField(
            model_name="usertag",
            name="remote_id",
            field=bookwyrm.models.fields.RemoteIdField(
                max_length=255,
                null=True,
                validators=[bookwyrm.models.fields.validate_remote_id],
            ),
        ),
        migrations.AddField(
            model_name="user",
            name="key_pair",
            field=bookwyrm.models.fields.OneToOneField(
                blank=True,
                null=True,
                on_delete=django.db.models.deletion.CASCADE,
                related_name="owner",
                to="bookwyrm.KeyPair",
            ),
        ),
        migrations.RunPython(copy_rsa_keys),
    ]
