test_stop_abuse.py 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  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(cls.my_domains[1], ['127.0.0.1', '127.0.1.1'], type='A', ttl=123)
  10. cls.create_rr_set(cls.other_domains[1], ['40.1.1.1', '40.2.2.2'], type='A', ttl=456)
  11. for d in cls.my_domains + cls.other_domains:
  12. cls.create_rr_set(d, ['ns1.example.', 'ns2.example.'], type='NS', ttl=456)
  13. cls.create_rr_set(d, ['ns1.example.', 'ns2.example.'], type='NS', ttl=456, subname='subname')
  14. cls.create_rr_set(d, ['"foo"'], type='TXT', ttl=456)
  15. def test_noop(self):
  16. # test implicit by absence assertPdnsRequests
  17. management.call_command('stop-abuse')
  18. def test_remove_rrsets_by_domain_name(self):
  19. with self.assertPdnsRequests(self.requests_desec_rr_sets_update(name=self.my_domain.name)):
  20. management.call_command('stop-abuse', self.my_domain)
  21. self.assertEqual(models.RRset.objects.filter(domain__name=self.my_domain.name).count(), 1) # only NS left
  22. self.assertEqual(
  23. set(models.RR.objects.filter(rrset__domain__name=self.my_domain.name).values_list('content', flat=True)),
  24. set(settings.DEFAULT_NS),
  25. )
  26. def test_remove_rrsets_by_email(self):
  27. with self.assertPdnsRequests(
  28. *[self.requests_desec_rr_sets_update(name=d.name) for d in self.my_domains],
  29. expect_order=False,
  30. ):
  31. management.call_command('stop-abuse', self.owner.email)
  32. self.assertEqual(models.RRset.objects.filter(domain__name=self.my_domain.name).count(), 1) # only NS left
  33. self.assertEqual(
  34. set(models.RR.objects.filter(rrset__domain__name=self.my_domain.name).values_list('content', flat=True)),
  35. set(settings.DEFAULT_NS),
  36. )
  37. def test_disable_user_by_domain_name(self):
  38. with self.assertPdnsRequests(self.requests_desec_rr_sets_update(name=self.my_domain.name)):
  39. management.call_command('stop-abuse', self.my_domain)
  40. self.owner.refresh_from_db()
  41. self.assertEqual(self.owner.is_active, False)
  42. def test_disable_user_by_email(self):
  43. with self.assertPdnsRequests(
  44. *[self.requests_desec_rr_sets_update(name=d.name) for d in self.my_domains],
  45. expect_order=False,
  46. ):
  47. management.call_command('stop-abuse', self.owner.email)
  48. self.owner.refresh_from_db()
  49. self.assertEqual(self.owner.is_active, False)
  50. def test_keep_other_owned_domains_name(self):
  51. with self.assertPdnsRequests(self.requests_desec_rr_sets_update(name=self.my_domain.name)):
  52. management.call_command('stop-abuse', self.my_domain)
  53. self.assertGreater(models.RRset.objects.filter(domain__name=self.my_domains[1].name).count(), 1)
  54. def test_dont_keep_other_owned_domains_email(self):
  55. with self.assertPdnsRequests(
  56. *[self.requests_desec_rr_sets_update(name=d.name) for d in self.my_domains],
  57. expect_order=False,
  58. ):
  59. management.call_command('stop-abuse', self.owner.email)
  60. self.assertEqual(models.RRset.objects.filter(domain__name=self.my_domains[1].name).count(), 1)
  61. def test_only_disable_owner(self):
  62. with self.assertPdnsRequests(
  63. self.requests_desec_rr_sets_update(name=self.my_domains[0].name),
  64. self.requests_desec_rr_sets_update(name=self.my_domains[1].name),
  65. expect_order=False,
  66. ):
  67. management.call_command('stop-abuse', self.my_domain, self.owner.email)
  68. self.my_domain.owner.refresh_from_db()
  69. self.other_domain.owner.refresh_from_db()
  70. self.assertEqual(self.my_domain.owner.is_active, False)
  71. self.assertEqual(self.other_domain.owner.is_active, True)
  72. def test_disable_owners_by_domain_name(self):
  73. with self.assertPdnsRequests(
  74. self.requests_desec_rr_sets_update(name=self.my_domain.name),
  75. self.requests_desec_rr_sets_update(name=self.other_domain.name),
  76. expect_order=False,
  77. ):
  78. management.call_command('stop-abuse', self.my_domain, self.other_domain)
  79. self.my_domain.owner.refresh_from_db()
  80. self.other_domain.owner.refresh_from_db()
  81. self.assertEqual(self.my_domain.owner.is_active, False)
  82. self.assertEqual(self.other_domain.owner.is_active, False)
  83. def test_disable_owners_by_email(self):
  84. with self.assertPdnsRequests(
  85. *[self.requests_desec_rr_sets_update(name=d.name) for d in self.my_domains + self.other_domains],
  86. expect_order=False,
  87. ):
  88. management.call_command('stop-abuse', self.owner.email, *[d.owner.email for d in self.other_domains])
  89. self.my_domain.owner.refresh_from_db()
  90. self.other_domain.owner.refresh_from_db()
  91. self.assertEqual(self.my_domain.owner.is_active, False)
  92. self.assertEqual(self.other_domain.owner.is_active, False)