def create(self, request, *args, **kwargs):
     candidate = User.objects.get(id=request.data['candidate'])
     challenge = Challenge(creator=request.user, candidate=candidate)
     challenge.status = 'SENT'
     challenge.save()
     easy_questions = random.sample(
         list(Question.objects.filter(difficulty='1')), 3)
     intermediate_questions = random.sample(
         list(Question.objects.filter(difficulty='2')), 2)
     hard_questions = random.sample(
         list(Question.objects.filter(difficulty='3')), 1)
     challenge.questions.set(easy_questions + intermediate_questions +
                             hard_questions)
     email = EmailMultiAlternatives()
     email.subject = 'Propulsion Academy - You have a new Challenge!'
     email.to = [candidate.email]
     if candidate.is_active:
         email.attach_alternative(
             generate_challenge_created_content(candidate), "text/html")
     else:
         email.attach_alternative(
             generate_challenge_created_when_inactive_content(candidate),
             "text/html")
     email.send(fail_silently=False)
     return Response(status=200)
Beispiel #2
0
 def setUp(self):
     category = Category(name='test',
                         display_order=0,
                         contained_type='test',
                         description='')
     category.save()
     challenge1 = Challenge(name='test1',
                            category=category,
                            description='a',
                            challenge_type='basic',
                            challenge_metadata={},
                            flag_type='plaintext',
                            flag_metadata={'flag': 'ractf{a}'},
                            author='dave',
                            score=1000)
     challenge2 = Challenge(name='test2',
                            category=category,
                            description='a',
                            challenge_type='basic',
                            challenge_metadata={},
                            flag_type='plaintext',
                            flag_metadata={'flag': 'ractf{a}'},
                            author='dave',
                            score=1000,
                            auto_unlock=True)
     challenge3 = Challenge(name='test3',
                            category=category,
                            description='a',
                            challenge_type='basic',
                            challenge_metadata={},
                            flag_type='plaintext',
                            flag_metadata={'flag': 'ractf{a}'},
                            author='dave',
                            score=1000,
                            auto_unlock=False)
     challenge1.save()
     challenge2.save()
     challenge3.save()
     challenge2.unlocks.add(challenge1)
     challenge2.save()
     hint1 = Hint(name='hint1', challenge=challenge1, text='a', penalty=100)
     hint2 = Hint(name='hint2', challenge=challenge1, text='a', penalty=100)
     hint3 = Hint(name='hint3', challenge=challenge2, text='a', penalty=100)
     hint1.save()
     hint2.save()
     hint3.save()
     user = get_user_model()(username='******',
                             email='*****@*****.**')
     user.save()
     team = Team(name='team', password='******', owner=user)
     team.save()
     user.team = team
     user.save()
     user2 = get_user_model()(username='******',
                              email='*****@*****.**')
     user2.team = team
     user2.save()
     user3 = get_user_model()(username='******',
                              email='*****@*****.**')
     user3.save()
     team2 = Team(name='team2', password='******', owner=user3)
     team2.save()
     user3.team = team2
     user3.save()
     self.user = user
     self.user2 = user2
     self.user3 = user3
     self.team = team
     self.team2 = team2
     self.category = category
     self.challenge1 = challenge1
     self.challenge2 = challenge2
     self.challenge3 = challenge3
     self.hint1 = hint1
     self.hint2 = hint2
     self.hint3 = hint3
    def handle(self, *args, **options):
        print('Creating 10 categories...')
        for i in range(10):
            category = Category(name='category-' + str(i), display_order=i, contained_type='test',
                                description='Category ' + str(i))
            category.save()

        print('Creating 100 challenges for each category...')
        for i in range(10):
            category = Category.objects.get(name='category-' + str(i))
            for j in range(50):
                challenge = Challenge(name='cat-' + str(i) + '-chal-' + str(j), category=category,
                                      description='An example challenge ' + str(j),
                                      flag_metadata={'flag': f'ractf{{{j}}}'}, author='dave', auto_unlock=True, score=j,
                                      challenge_metadata={})
                challenge.save()
            for j in range(50, 100, 2):
                challenge = Challenge(name='cat-' + str(i) + '-chal-' + str(j), category=category,
                                      description='An example challenge ' + str(j),
                                      flag_metadata={'flag': f'ractf{{{j}}}'}, author='dave', auto_unlock=True,
                                      score=j, challenge_metadata={})
                challenge2 = Challenge(name='cat-' + str(i) + '-chal-' + str(j + 1), category=category,
                                       description='An example challenge ' + str(j + 1),
                                       flag_metadata={'flag': f'ractf{{{j + 1}}}'}, author='dave', auto_unlock=False,
                                       score=j, challenge_metadata={})
                challenge2.save()
                challenge.save()
                challenge.unlocks.add(challenge2)

        print('Creating 20000 users with 10000 teams with 100 solves per team...')
        for i in range(10000):
            user = get_user_model()(username='******' + str(i), email='user-' + str(i) + '@example.org')
            user.save()
            team = Team(name='team-' + str(i), password='******', owner=user)
            team.save()
            user2 = get_user_model()(username='******' + str(i) + '-second', email='user-' + str(i) + '*****@*****.**',
                                     team=team)
            user2.save()
            for j in range(50):
                challenge = Category.objects.get(name='category-' + str(j % 5))\
                    .category_challenges.get(name='cat-' + str(j % 5) + '-chal-' + str(j))
                points = random.randint(0, 1000)
                score = Score(team=team, reason='challenge', points=points, penalty=0, leaderboard=True)
                score.save()
                solve = Solve(team=team, solved_by=user, challenge=challenge, first_blood=challenge.first_blood is None,
                              flag='ractf{}', score=score, correct=True)
                solve.save()
                user.points += points
                team.points += points
                user.leaderboard_points += points
                team.leaderboard_points += points
            for j in range(50):
                challenge = Category.objects.get(name='category-' + str(j % 5 + 5))\
                    .category_challenges.get(name='cat-' + str(j % 5 + 5) + '-chal-' + str(j))
                points = random.randint(0, 1000)
                score = Score(team=team, reason='challenge', points=points, penalty=0, leaderboard=True)
                score.save()
                solve = Solve(team=team, solved_by=user2, challenge=challenge,
                              first_blood=challenge.first_blood is None, flag='ractf{}', score=score, correct=True)
                solve.save()
                user2.points += points
                team.points += points
                user.leaderboard_points += points
                team.leaderboard_points += points