createfakebans.py 3.9 KB

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