createfakebans.py 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. import random
  2. import sys
  3. from datetime import timedelta
  4. from django.core.management.base import BaseCommand
  5. from django.utils import timezone
  6. from faker import Factory
  7. from misago.core.management.progressbar import show_progress
  8. from misago.users.models import Ban
  9. def fake_username_ban(fake):
  10. fake_value = fake.first_name()
  11. if random.randint(0, 100) < 31:
  12. fake_value = "%s*" % fake_value
  13. elif random.randint(0, 100) < 31:
  14. fake_value = "*%s" % fake_value
  15. elif random.randint(0, 100) < 31:
  16. fake_value = list(fake_value)
  17. fake_value.insert(random.randint(0, len(fake_value) - 1), "*")
  18. fake_value = "".join(fake_value)
  19. return fake_value
  20. def fake_email_ban(fake):
  21. if random.randint(0, 100) < 35:
  22. return "*@%s" % fake.domain_name()
  23. else:
  24. return fake.email()
  25. def fake_ip_ban(fake):
  26. if random.randint(0, 1):
  27. fake_value = fake.ipv4()
  28. if random.randint(0, 100) < 35:
  29. fake_value = fake_value.split(".")
  30. fake_value = ".".join(fake_value[: random.randint(1, 3)])
  31. fake_value = "%s.*" % fake_value
  32. elif random.randint(0, 100) < 35:
  33. fake_value = fake_value.split(".")
  34. fake_value = ".".join(fake_value[random.randint(1, 3) :])
  35. fake_value = "*.%s" % fake_value
  36. elif random.randint(0, 100) < 35:
  37. fake_value = fake_value.split(".")
  38. fake_value[random.randint(0, 3)] = "*"
  39. fake_value = ".".join(fake_value)
  40. else:
  41. fake_value = fake.ipv6()
  42. if random.randint(0, 100) < 35:
  43. fake_value = fake_value.split(":")
  44. fake_value = ":".join(fake_value[: random.randint(1, 7)])
  45. fake_value = "%s:*" % fake_value
  46. elif random.randint(0, 100) < 35:
  47. fake_value = fake_value.split(":")
  48. fake_value = ":".join(fake_value[: random.randint(1, 7)])
  49. fake_value = "*:%s" % fake_value
  50. elif random.randint(0, 100) < 35:
  51. fake_value = fake_value.split(":")
  52. fake_value[random.randint(0, 7)] = "*"
  53. fake_value = ":".join(fake_value)
  54. return fake_value
  55. def create_fake_test(fake, test_type):
  56. if test_type == Ban.USERNAME:
  57. return fake_username_ban(fake)
  58. elif test_type == Ban.EMAIL:
  59. return fake_email_ban(fake)
  60. elif test_type == Ban.IP:
  61. return fake_ip_ban(fake)
  62. class Command(BaseCommand):
  63. help = "Creates random fakey bans for testing purposes"
  64. def handle(self, *args, **options):
  65. try:
  66. fake_bans_to_create = int(args[0])
  67. except IndexError:
  68. fake_bans_to_create = 5
  69. except ValueError:
  70. self.stderr.write("\nOptional argument should be integer.")
  71. sys.exit(1)
  72. fake = Factory.create()
  73. message = "Creating %s fake bans...\n"
  74. self.stdout.write(message % fake_bans_to_create)
  75. created_count = 0
  76. show_progress(self, created_count, fake_bans_to_create)
  77. for _ in range(fake_bans_to_create):
  78. ban = Ban(check_type=random.randint(Ban.USERNAME, Ban.IP))
  79. ban.banned_value = create_fake_test(fake, ban.check_type)
  80. if random.randint(0, 10) == 0:
  81. ban.user_message = fake.sentence()
  82. if random.randint(0, 10) == 0:
  83. ban.staff_message = fake.sentence()
  84. if random.randint(0, 1):
  85. # Lets make ban temporary
  86. ban_length = timedelta(days=random.randint(0, 300))
  87. if random.randint(0, 1):
  88. ban.valid_until = timezone.now().date() - ban_length
  89. else:
  90. ban.valid_until = timezone.now().date() + ban_length
  91. ban.save()
  92. created_count += 1
  93. show_progress(self, created_count, fake_bans_to_create)
  94. message = "\n\nSuccessfully created %s fake bans"
  95. self.stdout.write(message % created_count)