createfakebans.py 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. import random
  2. from datetime import timedelta
  3. from faker import Factory
  4. from django.contrib.auth import get_user_model
  5. from django.core.exceptions import ValidationError
  6. from django.core.management.base import BaseCommand
  7. from django.db import IntegrityError
  8. from django.utils import timezone
  9. from misago.users.models import Ban, BAN_NAME, BAN_EMAIL, BAN_IP
  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_NAME:
  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 plenty of random fakey bans for testing purposes'
  65. def handle(self, *args, **options):
  66. fake_bans_to_create = 100000
  67. fake = Factory.create()
  68. message = 'Attempting to create %s fake bans!'
  69. self.stdout.write(message % fake_bans_to_create)
  70. message = 'Successfully created %s fake bans!'
  71. created_count = 0
  72. for i in xrange(fake_bans_to_create):
  73. ban = Ban(test=random.randint(BAN_NAME, BAN_IP))
  74. ban.banned_value = create_fake_test(fake, ban.test)
  75. if random.randint(0, 10) == 0:
  76. ban.user_message = fake.sentence()
  77. if random.randint(0, 10) == 0:
  78. ban.staff_message = fake.sentence()
  79. if random.randint(0, 1):
  80. # Lets make ban temporary
  81. ban_length = timedelta(days=random.randint(0, 300))
  82. if random.randint(0, 1):
  83. ban.valid_until = timezone.now().date() - ban_length
  84. else:
  85. ban.valid_until = timezone.now().date() + ban_length
  86. ban.save()
  87. created_count += 1
  88. if created_count % 100 == 0:
  89. self.stdout.write(message % created_count)
  90. self.stdout.write(message % Vans.objects.all().count())