createfakebans.py 4.0 KB

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