0001_initial_squashed_again.py 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481
  1. # Generated by Django 3.1 on 2020-08-25 14:54
  2. import desecapi.models
  3. from django.conf import settings
  4. import django.core.validators
  5. from django.db import migrations, models
  6. import django.db.models.deletion
  7. import re
  8. import uuid
  9. class Migration(migrations.Migration):
  10. initial = True
  11. dependencies = []
  12. operations = [
  13. migrations.CreateModel(
  14. name="User",
  15. fields=[
  16. (
  17. "id",
  18. models.UUIDField(
  19. default=uuid.uuid4,
  20. editable=False,
  21. primary_key=True,
  22. serialize=False,
  23. ),
  24. ),
  25. ("password", models.CharField(max_length=128, verbose_name="password")),
  26. (
  27. "last_login",
  28. models.DateTimeField(
  29. blank=True, null=True, verbose_name="last login"
  30. ),
  31. ),
  32. (
  33. "email",
  34. models.EmailField(
  35. max_length=191, unique=True, verbose_name="email address"
  36. ),
  37. ),
  38. ("is_active", models.BooleanField(default=True)),
  39. ("is_admin", models.BooleanField(default=False)),
  40. ("created", models.DateTimeField(auto_now_add=True)),
  41. (
  42. "limit_domains",
  43. models.IntegerField(
  44. blank=True,
  45. default=desecapi.models.User._limit_domains_default,
  46. null=True,
  47. ),
  48. ),
  49. ],
  50. options={
  51. "abstract": False,
  52. },
  53. ),
  54. migrations.CreateModel(
  55. name="Domain",
  56. fields=[
  57. (
  58. "id",
  59. models.AutoField(
  60. auto_created=True,
  61. primary_key=True,
  62. serialize=False,
  63. verbose_name="ID",
  64. ),
  65. ),
  66. ("created", models.DateTimeField(auto_now_add=True)),
  67. (
  68. "name",
  69. models.CharField(
  70. max_length=191,
  71. unique=True,
  72. validators=[
  73. desecapi.models.validate_lower,
  74. django.core.validators.RegexValidator(
  75. code="invalid_domain_name",
  76. flags=re.RegexFlag["IGNORECASE"],
  77. 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.",
  78. regex="^(([a-z0-9_-]{1,63})\\.)*[a-z0-9-]{1,63}$",
  79. ),
  80. ],
  81. ),
  82. ),
  83. (
  84. "owner",
  85. models.ForeignKey(
  86. on_delete=django.db.models.deletion.PROTECT,
  87. related_name="domains",
  88. to=settings.AUTH_USER_MODEL,
  89. ),
  90. ),
  91. ("published", models.DateTimeField(blank=True, null=True)),
  92. (
  93. "minimum_ttl",
  94. models.PositiveIntegerField(
  95. default=desecapi.models.Domain._minimum_ttl_default
  96. ),
  97. ),
  98. ("renewal_changed", models.DateTimeField(auto_now_add=True)),
  99. (
  100. "renewal_state",
  101. models.IntegerField(
  102. choices=[(1, "Fresh"), (2, "Notified"), (3, "Warned")],
  103. default=1,
  104. ),
  105. ),
  106. ],
  107. options={
  108. "ordering": ("created",),
  109. },
  110. ),
  111. migrations.CreateModel(
  112. name="RRset",
  113. fields=[
  114. (
  115. "id",
  116. models.UUIDField(
  117. default=uuid.uuid4,
  118. editable=False,
  119. primary_key=True,
  120. serialize=False,
  121. ),
  122. ),
  123. ("created", models.DateTimeField(auto_now_add=True)),
  124. ("touched", models.DateTimeField(auto_now=True)),
  125. (
  126. "subname",
  127. models.CharField(
  128. blank=True,
  129. max_length=178,
  130. validators=[
  131. desecapi.models.validate_lower,
  132. django.core.validators.RegexValidator(
  133. code="invalid_subname",
  134. message="Subname can only use (lowercase) a-z, 0-9, ., -, and _, may start with a '*.', or just be '*'.",
  135. regex="^([*]|(([*][.])?[a-z0-9_.-]*))$",
  136. ),
  137. ],
  138. ),
  139. ),
  140. (
  141. "type",
  142. models.CharField(
  143. max_length=10,
  144. validators=[
  145. desecapi.models.validate_upper,
  146. django.core.validators.RegexValidator(
  147. code="invalid_type",
  148. message="Type must be uppercase alphanumeric and start with a letter.",
  149. regex="^[A-Z][A-Z0-9]*$",
  150. ),
  151. ],
  152. ),
  153. ),
  154. ("ttl", models.PositiveIntegerField()),
  155. (
  156. "domain",
  157. models.ForeignKey(
  158. on_delete=django.db.models.deletion.CASCADE,
  159. to="desecapi.domain",
  160. ),
  161. ),
  162. ],
  163. options={
  164. "unique_together": {("domain", "subname", "type")},
  165. },
  166. ),
  167. migrations.CreateModel(
  168. name="AuthenticatedAction",
  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. ],
  180. options={
  181. "managed": False,
  182. },
  183. ),
  184. migrations.CreateModel(
  185. name="AuthenticatedUserAction",
  186. fields=[
  187. (
  188. "authenticatedaction_ptr",
  189. models.OneToOneField(
  190. auto_created=True,
  191. on_delete=django.db.models.deletion.CASCADE,
  192. parent_link=True,
  193. primary_key=True,
  194. serialize=False,
  195. to="desecapi.authenticatedaction",
  196. ),
  197. ),
  198. ],
  199. options={
  200. "managed": False,
  201. },
  202. bases=("desecapi.authenticatedaction",),
  203. ),
  204. migrations.CreateModel(
  205. name="AuthenticatedDeleteUserAction",
  206. fields=[
  207. (
  208. "authenticateduseraction_ptr",
  209. models.OneToOneField(
  210. auto_created=True,
  211. on_delete=django.db.models.deletion.CASCADE,
  212. parent_link=True,
  213. primary_key=True,
  214. serialize=False,
  215. to="desecapi.authenticateduseraction",
  216. ),
  217. ),
  218. ],
  219. options={
  220. "managed": False,
  221. },
  222. bases=("desecapi.authenticateduseraction",),
  223. ),
  224. migrations.CreateModel(
  225. name="AuthenticatedResetPasswordUserAction",
  226. fields=[
  227. (
  228. "authenticateduseraction_ptr",
  229. models.OneToOneField(
  230. auto_created=True,
  231. on_delete=django.db.models.deletion.CASCADE,
  232. parent_link=True,
  233. primary_key=True,
  234. serialize=False,
  235. to="desecapi.authenticateduseraction",
  236. ),
  237. ),
  238. ("new_password", models.CharField(max_length=128)),
  239. ],
  240. options={
  241. "managed": False,
  242. },
  243. bases=("desecapi.authenticateduseraction",),
  244. ),
  245. migrations.CreateModel(
  246. name="Captcha",
  247. fields=[
  248. (
  249. "id",
  250. models.UUIDField(
  251. default=uuid.uuid4,
  252. editable=False,
  253. primary_key=True,
  254. serialize=False,
  255. ),
  256. ),
  257. ("created", models.DateTimeField(auto_now_add=True)),
  258. (
  259. "content",
  260. models.CharField(
  261. default=desecapi.models.captcha.captcha_default_content,
  262. max_length=24,
  263. ),
  264. ),
  265. ],
  266. ),
  267. migrations.CreateModel(
  268. name="Token",
  269. fields=[
  270. (
  271. "id",
  272. models.UUIDField(
  273. default=uuid.uuid4,
  274. editable=False,
  275. primary_key=True,
  276. serialize=False,
  277. ),
  278. ),
  279. (
  280. "created",
  281. models.DateTimeField(auto_now_add=True, verbose_name="Created"),
  282. ),
  283. (
  284. "key",
  285. models.CharField(
  286. db_index=True, max_length=128, unique=True, verbose_name="Key"
  287. ),
  288. ),
  289. (
  290. "name",
  291. models.CharField(blank=True, max_length=64, verbose_name="Name"),
  292. ),
  293. (
  294. "user",
  295. models.ForeignKey(
  296. on_delete=django.db.models.deletion.CASCADE,
  297. related_name="auth_tokens",
  298. to=settings.AUTH_USER_MODEL,
  299. verbose_name="User",
  300. ),
  301. ),
  302. ("last_used", models.DateTimeField(blank=True, null=True)),
  303. ],
  304. options={
  305. "verbose_name": "Token",
  306. "verbose_name_plural": "Tokens",
  307. },
  308. ),
  309. migrations.CreateModel(
  310. name="RR",
  311. fields=[
  312. (
  313. "id",
  314. models.AutoField(
  315. auto_created=True,
  316. primary_key=True,
  317. serialize=False,
  318. verbose_name="ID",
  319. ),
  320. ),
  321. ("created", models.DateTimeField(auto_now_add=True)),
  322. ("content", models.CharField(max_length=500)),
  323. (
  324. "rrset",
  325. models.ForeignKey(
  326. on_delete=django.db.models.deletion.CASCADE,
  327. related_name="records",
  328. to="desecapi.rrset",
  329. ),
  330. ),
  331. ],
  332. ),
  333. migrations.CreateModel(
  334. name="AuthenticatedActivateUserAction",
  335. fields=[
  336. (
  337. "authenticateduseraction_ptr",
  338. models.OneToOneField(
  339. auto_created=True,
  340. on_delete=django.db.models.deletion.CASCADE,
  341. parent_link=True,
  342. primary_key=True,
  343. serialize=False,
  344. to="desecapi.authenticateduseraction",
  345. ),
  346. ),
  347. ("domain", models.CharField(max_length=191)),
  348. ],
  349. options={
  350. "managed": False,
  351. },
  352. bases=("desecapi.authenticateduseraction",),
  353. ),
  354. migrations.CreateModel(
  355. name="AuthenticatedChangeEmailUserAction",
  356. fields=[
  357. (
  358. "authenticateduseraction_ptr",
  359. models.OneToOneField(
  360. auto_created=True,
  361. on_delete=django.db.models.deletion.CASCADE,
  362. parent_link=True,
  363. primary_key=True,
  364. serialize=False,
  365. to="desecapi.authenticateduseraction",
  366. ),
  367. ),
  368. ("new_email", models.EmailField(max_length=254)),
  369. ],
  370. options={
  371. "managed": False,
  372. },
  373. bases=("desecapi.authenticateduseraction",),
  374. ),
  375. migrations.CreateModel(
  376. name="AuthenticatedBasicUserAction",
  377. fields=[
  378. (
  379. "authenticatedaction_ptr",
  380. models.OneToOneField(
  381. auto_created=True,
  382. on_delete=django.db.models.deletion.CASCADE,
  383. parent_link=True,
  384. primary_key=True,
  385. serialize=False,
  386. to="desecapi.authenticatedaction",
  387. ),
  388. ),
  389. ],
  390. options={
  391. "managed": False,
  392. },
  393. bases=("desecapi.authenticatedaction",),
  394. ),
  395. migrations.CreateModel(
  396. name="AuthenticatedDomainBasicUserAction",
  397. fields=[
  398. (
  399. "authenticatedbasicuseraction_ptr",
  400. models.OneToOneField(
  401. auto_created=True,
  402. on_delete=django.db.models.deletion.CASCADE,
  403. parent_link=True,
  404. primary_key=True,
  405. serialize=False,
  406. to="desecapi.authenticatedbasicuseraction",
  407. ),
  408. ),
  409. ],
  410. options={
  411. "managed": False,
  412. },
  413. bases=("desecapi.authenticatedbasicuseraction",),
  414. ),
  415. migrations.CreateModel(
  416. name="AuthenticatedRenewDomainBasicUserAction",
  417. fields=[
  418. (
  419. "authenticateddomainbasicuseraction_ptr",
  420. models.OneToOneField(
  421. auto_created=True,
  422. on_delete=django.db.models.deletion.CASCADE,
  423. parent_link=True,
  424. primary_key=True,
  425. serialize=False,
  426. to="desecapi.authenticateddomainbasicuseraction",
  427. ),
  428. ),
  429. ],
  430. options={
  431. "managed": False,
  432. },
  433. bases=("desecapi.authenticateddomainbasicuseraction",),
  434. ),
  435. migrations.CreateModel(
  436. name="Donation",
  437. fields=[
  438. (
  439. "id",
  440. models.AutoField(
  441. auto_created=True,
  442. primary_key=True,
  443. serialize=False,
  444. verbose_name="ID",
  445. ),
  446. ),
  447. (
  448. "created",
  449. models.DateTimeField(
  450. default=desecapi.models.Donation._created_default
  451. ),
  452. ),
  453. ("name", models.CharField(max_length=255)),
  454. ("iban", models.CharField(max_length=34)),
  455. ("bic", models.CharField(max_length=11)),
  456. ("amount", models.DecimalField(decimal_places=2, max_digits=8)),
  457. ("message", models.CharField(blank=True, max_length=255)),
  458. (
  459. "due",
  460. models.DateTimeField(default=desecapi.models.Donation._due_default),
  461. ),
  462. (
  463. "mref",
  464. models.CharField(
  465. default=desecapi.models.Donation._mref_default, max_length=32
  466. ),
  467. ),
  468. ("email", models.EmailField(blank=True, max_length=255)),
  469. ],
  470. options={
  471. "ordering": ("created",),
  472. "managed": False,
  473. },
  474. ),
  475. ]