Coverage for src/django_otp_webauthn/migrations/0001_initial.py: 100%
7 statements
« prev ^ index » next coverage.py v7.5.4, created at 2024-06-23 20:15 +0000
« prev ^ index » next coverage.py v7.5.4, created at 2024-06-23 20:15 +0000
1# Generated by Django 5.0.4 on 2024-04-30 15:34
3import django.db.models.deletion
4from django.conf import settings
5from django.db import migrations, models
8class Migration(migrations.Migration):
9 initial = True
11 dependencies = [
12 migrations.swappable_dependency(settings.AUTH_USER_MODEL),
13 ]
15 operations = [
16 migrations.CreateModel(
17 name="WebAuthnCredential",
18 fields=[
19 (
20 "id",
21 models.BigAutoField(
22 auto_created=True,
23 primary_key=True,
24 serialize=False,
25 verbose_name="ID",
26 ),
27 ),
28 (
29 "name",
30 models.CharField(
31 help_text="The human-readable name of this device.",
32 max_length=64,
33 ),
34 ),
35 (
36 "confirmed",
37 models.BooleanField(default=True, help_text="Is this device ready for use?"),
38 ),
39 (
40 "credential_type",
41 models.CharField(
42 choices=[("public-key", "Public Key")],
43 default="public-key",
44 editable=False,
45 max_length=32,
46 verbose_name="credential type",
47 ),
48 ),
49 (
50 "credential_id",
51 models.BinaryField(max_length=1023, verbose_name="credential id data"),
52 ),
53 (
54 "public_key",
55 models.BinaryField(max_length=1023, verbose_name="COSE public key data"),
56 ),
57 (
58 "transports",
59 models.JSONField(default=list, editable=False, verbose_name="transports"),
60 ),
61 (
62 "sign_count",
63 models.PositiveIntegerField(default=0, editable=False, verbose_name="sign count"),
64 ),
65 (
66 "backup_eligible",
67 models.BooleanField(default=False, editable=False, verbose_name="backup eligible"),
68 ),
69 (
70 "backup_state",
71 models.BooleanField(default=False, editable=False, verbose_name="backup state"),
72 ),
73 (
74 "created_at",
75 models.DateTimeField(auto_now_add=True, verbose_name="created at"),
76 ),
77 (
78 "last_used_at",
79 models.DateTimeField(null=True, verbose_name="last used at"),
80 ),
81 (
82 "aaguid",
83 models.CharField(editable=False, max_length=36, verbose_name="AAGUID"),
84 ),
85 (
86 "credential_id_sha256",
87 models.BinaryField(max_length=32, unique=True, verbose_name="hashed credential id"),
88 ),
89 (
90 "discoverable",
91 models.BooleanField(
92 default=None,
93 editable=False,
94 null=True,
95 verbose_name="discoverable",
96 ),
97 ),
98 (
99 "user",
100 models.ForeignKey(
101 help_text="The user that this device belongs to.",
102 on_delete=django.db.models.deletion.CASCADE,
103 to=settings.AUTH_USER_MODEL,
104 ),
105 ),
106 ],
107 options={
108 "verbose_name": "WebAuthn credential",
109 "verbose_name_plural": "WebAuthn credentials",
110 "abstract": False,
111 },
112 ),
113 migrations.CreateModel(
114 name="WebAuthnAttestation",
115 fields=[
116 (
117 "id",
118 models.BigAutoField(
119 auto_created=True,
120 primary_key=True,
121 serialize=False,
122 verbose_name="ID",
123 ),
124 ),
125 (
126 "fmt",
127 models.CharField(
128 choices=[
129 ("packed", "packed"),
130 ("tpm", "tpm"),
131 ("android-key", "android-key"),
132 ("android-safetynet", "android-safetynet"),
133 ("fido-u2f", "fido-u2f"),
134 ("none", "none"),
135 ],
136 editable=False,
137 max_length=255,
138 verbose_name="format",
139 ),
140 ),
141 ("data", models.BinaryField(verbose_name="data")),
142 (
143 "client_data_json",
144 models.BinaryField(verbose_name="client data JSON"),
145 ),
146 (
147 "credential",
148 models.OneToOneField(
149 editable=False,
150 on_delete=django.db.models.deletion.CASCADE,
151 related_name="attestation",
152 to="django_otp_webauthn.webauthncredential",
153 verbose_name="credential",
154 ),
155 ),
156 ],
157 options={
158 "verbose_name": "WebAuthn attestation",
159 "verbose_name_plural": "WebAuthn attestations",
160 "abstract": False,
161 },
162 ),
163 migrations.AddIndex(
164 model_name="webauthncredential",
165 index=models.Index(fields=["credential_id_sha256"], name="webauthncredential_sha256_idx"),
166 ),
167 ]