createfakebans.py 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. import random
  2. from datetime import timedelta
  3. from django.contrib.auth import get_user_model
  4. from django.core.exceptions import ValidationError
  5. from django.core.management.base import BaseCommand
  6. from django.db import IntegrityError
  7. from django.utils import timezone
  8. from faker import Factory
  9. from misago.users.models import Ban, BAN_USERNAME, 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_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 = 'Attempting to create %s fake bans!'
  75. self.stdout.write(message % fake_bans_to_create)
  76. message = 'Successfully created %s fake bans!'
  77. created_count = 0
  78. for i in xrange(fake_bans_to_create):
  79. ban = Ban(test=random.randint(BAN_USERNAME, BAN_IP))
  80. ban.banned_value = create_fake_test(fake, ban.test)
  81. if random.randint(0, 10) == 0:
  82. ban.user_message = fake.sentence()
  83. if random.randint(0, 10) == 0:
  84. ban.staff_message = fake.sentence()
  85. if random.randint(0, 1):
  86. # Lets make ban temporary
  87. ban_length = timedelta(days=random.randint(0, 300))
  88. if random.randint(0, 1):
  89. ban.valid_until = timezone.now().date() - ban_length
  90. else:
  91. ban.valid_until = timezone.now().date() + ban_length
  92. ban.save()
  93. created_count += 1
  94. if created_count % 100 == 0:
  95. self.stdout.write(message % created_count)
  96. self.stdout.write(message % Vans.objects.all().count())