123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 |
- from datetime import timedelta
- import random
- import sys
- from django.core.management.base import BaseCommand
- from django.utils import timezone
- from faker import Factory
- from misago.core.management.progressbar import show_progress
- from misago.users.models import Ban, BAN_USERNAME, BAN_EMAIL, BAN_IP
- def fake_username_ban(fake):
- fake_value = fake.first_name()
- if random.randint(0, 100) < 31:
- fake_value = '%s*' % fake_value
- elif random.randint(0, 100) < 31:
- fake_value = '*%s' % fake_value
- elif random.randint(0, 100) < 31:
- fake_value = list(fake_value)
- fake_value.insert(random.randint(0, len(fake_value) - 1), '*')
- fake_value = ''.join(fake_value)
- return fake_value
- def fake_email_ban(fake):
- if random.randint(0, 100) < 35:
- return '*@%s' % fake.domain_name()
- else:
- return fake.email()
- def fake_ip_ban(fake):
- if random.randint(0, 1):
- fake_value = fake.ipv4()
- if random.randint(0, 100) < 35:
- fake_value = fake_value.split('.')
- fake_value = '.'.join(fake_value[:random.randint(1, 3)])
- fake_value = '%s.*' % fake_value
- elif random.randint(0, 100) < 35:
- fake_value = fake_value.split('.')
- fake_value = '.'.join(fake_value[random.randint(1, 3):])
- fake_value = '*.%s' % fake_value
- elif random.randint(0, 100) < 35:
- fake_value = fake_value.split('.')
- fake_value[random.randint(0, 3)] = '*'
- fake_value = '.'.join(fake_value)
- else:
- fake_value = fake.ipv6()
- if random.randint(0, 100) < 35:
- fake_value = fake_value.split(':')
- fake_value = ':'.join(fake_value[:random.randint(1, 7)])
- fake_value = '%s:*' % fake_value
- elif random.randint(0, 100) < 35:
- fake_value = fake_value.split(':')
- fake_value = ':'.join(fake_value[:random.randint(1, 7)])
- fake_value = '*:%s' % fake_value
- elif random.randint(0, 100) < 35:
- fake_value = fake_value.split(':')
- fake_value[random.randint(0, 7)] = '*'
- fake_value = ':'.join(fake_value)
- return fake_value
- def create_fake_test(fake, test_type):
- if test_type == BAN_USERNAME:
- return fake_username_ban(fake)
- elif test_type == BAN_EMAIL:
- return fake_email_ban(fake)
- elif test_type == BAN_IP:
- return fake_ip_ban(fake)
- class Command(BaseCommand):
- help = 'Creates random fakey bans for testing purposes'
- def handle(self, *args, **options):
- try:
- fake_bans_to_create = int(args[0])
- except IndexError:
- fake_bans_to_create = 5
- except ValueError:
- self.stderr.write("\nOptional argument should be integer.")
- sys.exit(1)
- fake = Factory.create()
- message = 'Creating %s fake bans...\n'
- self.stdout.write(message % fake_bans_to_create)
- message = '\n\nSuccessfully created %s fake bans'
- created_count = 0
- show_progress(self, created_count, fake_bans_to_create)
- for i in xrange(fake_bans_to_create):
- ban = Ban(test=random.randint(BAN_USERNAME, BAN_IP))
- ban.banned_value = create_fake_test(fake, ban.test)
- if random.randint(0, 10) == 0:
- ban.user_message = fake.sentence()
- if random.randint(0, 10) == 0:
- ban.staff_message = fake.sentence()
- if random.randint(0, 1):
- # Lets make ban temporary
- ban_length = timedelta(days=random.randint(0, 300))
- if random.randint(0, 1):
- ban.valid_until = timezone.now().date() - ban_length
- else:
- ban.valid_until = timezone.now().date() + ban_length
- ban.save()
- created_count += 1
- show_progress(self, created_count, fake_bans_to_create)
- self.stdout.write(message % created_count)
|