test_stop_abuse.py 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. from django.core import management
  2. from api import settings
  3. from desecapi import models
  4. from desecapi.tests.base import DomainOwnerTestCase
  5. class StopAbuseCommandTest(DomainOwnerTestCase):
  6. @classmethod
  7. def setUpTestDataWithPdns(cls):
  8. super().setUpTestDataWithPdns()
  9. cls.create_rr_set(
  10. cls.my_domains[1], ["127.0.0.1", "127.0.1.1"], type="A", ttl=123
  11. )
  12. cls.create_rr_set(
  13. cls.other_domains[1], ["40.1.1.1", "40.2.2.2"], type="A", ttl=456
  14. )
  15. for d in cls.my_domains + cls.other_domains:
  16. cls.create_rr_set(d, ["ns1.example.", "ns2.example."], type="NS", ttl=456)
  17. cls.create_rr_set(
  18. d,
  19. ["ns1.example.", "ns2.example."],
  20. type="NS",
  21. ttl=456,
  22. subname="subname",
  23. )
  24. cls.create_rr_set(d, ['"foo"'], type="TXT", ttl=456)
  25. def test_noop(self):
  26. # test implicit by absence assertPdnsRequests
  27. management.call_command("stop-abuse")
  28. def test_remove_rrsets_by_domain_name(self):
  29. with self.assertPdnsRequests(
  30. self.requests_desec_rr_sets_update(name=self.my_domain.name)
  31. ):
  32. management.call_command("stop-abuse", self.my_domain)
  33. self.assertEqual(
  34. models.RRset.objects.filter(domain__name=self.my_domain.name).count(), 1
  35. ) # only NS left
  36. self.assertEqual(
  37. set(
  38. models.RR.objects.filter(
  39. rrset__domain__name=self.my_domain.name
  40. ).values_list("content", flat=True)
  41. ),
  42. set(settings.DEFAULT_NS),
  43. )
  44. def test_remove_rrsets_by_email(self):
  45. with self.assertPdnsRequests(
  46. *[self.requests_desec_rr_sets_update(name=d.name) for d in self.my_domains],
  47. expect_order=False,
  48. ):
  49. management.call_command("stop-abuse", self.owner.email)
  50. self.assertEqual(
  51. models.RRset.objects.filter(domain__name=self.my_domain.name).count(), 1
  52. ) # only NS left
  53. self.assertEqual(
  54. set(
  55. models.RR.objects.filter(
  56. rrset__domain__name=self.my_domain.name
  57. ).values_list("content", flat=True)
  58. ),
  59. set(settings.DEFAULT_NS),
  60. )
  61. def test_disable_user_by_domain_name(self):
  62. with self.assertPdnsRequests(
  63. self.requests_desec_rr_sets_update(name=self.my_domain.name)
  64. ):
  65. management.call_command("stop-abuse", self.my_domain)
  66. self.owner.refresh_from_db()
  67. self.assertEqual(self.owner.is_active, False)
  68. def test_disable_user_by_email(self):
  69. with self.assertPdnsRequests(
  70. *[self.requests_desec_rr_sets_update(name=d.name) for d in self.my_domains],
  71. expect_order=False,
  72. ):
  73. management.call_command("stop-abuse", self.owner.email)
  74. self.owner.refresh_from_db()
  75. self.assertEqual(self.owner.is_active, False)
  76. def test_keep_other_owned_domains_name(self):
  77. with self.assertPdnsRequests(
  78. self.requests_desec_rr_sets_update(name=self.my_domain.name)
  79. ):
  80. management.call_command("stop-abuse", self.my_domain)
  81. self.assertGreater(
  82. models.RRset.objects.filter(domain__name=self.my_domains[1].name).count(), 1
  83. )
  84. def test_dont_keep_other_owned_domains_email(self):
  85. with self.assertPdnsRequests(
  86. *[self.requests_desec_rr_sets_update(name=d.name) for d in self.my_domains],
  87. expect_order=False,
  88. ):
  89. management.call_command("stop-abuse", self.owner.email)
  90. self.assertEqual(
  91. models.RRset.objects.filter(domain__name=self.my_domains[1].name).count(), 1
  92. )
  93. def test_only_disable_owner(self):
  94. with self.assertPdnsRequests(
  95. self.requests_desec_rr_sets_update(name=self.my_domains[0].name),
  96. self.requests_desec_rr_sets_update(name=self.my_domains[1].name),
  97. expect_order=False,
  98. ):
  99. management.call_command("stop-abuse", self.my_domain, self.owner.email)
  100. self.my_domain.owner.refresh_from_db()
  101. self.other_domain.owner.refresh_from_db()
  102. self.assertEqual(self.my_domain.owner.is_active, False)
  103. self.assertEqual(self.other_domain.owner.is_active, True)
  104. def test_disable_owners_by_domain_name(self):
  105. with self.assertPdnsRequests(
  106. self.requests_desec_rr_sets_update(name=self.my_domain.name),
  107. self.requests_desec_rr_sets_update(name=self.other_domain.name),
  108. expect_order=False,
  109. ):
  110. management.call_command("stop-abuse", self.my_domain, self.other_domain)
  111. self.my_domain.owner.refresh_from_db()
  112. self.other_domain.owner.refresh_from_db()
  113. self.assertEqual(self.my_domain.owner.is_active, False)
  114. self.assertEqual(self.other_domain.owner.is_active, False)
  115. def test_disable_owners_by_email(self):
  116. with self.assertPdnsRequests(
  117. *[
  118. self.requests_desec_rr_sets_update(name=d.name)
  119. for d in self.my_domains + self.other_domains
  120. ],
  121. expect_order=False,
  122. ):
  123. management.call_command(
  124. "stop-abuse",
  125. self.owner.email,
  126. *[d.owner.email for d in self.other_domains],
  127. )
  128. self.my_domain.owner.refresh_from_db()
  129. self.other_domain.owner.refresh_from_db()
  130. self.assertEqual(self.my_domain.owner.is_active, False)
  131. self.assertEqual(self.other_domain.owner.is_active, False)