Example #1
0
    def failed_capture(self, flag, submission):
        user = self.get_current_user()
        if submission is not None and flag not in user.team.flags:
            if flag.is_file:
                submission = Flag.digest(submission)
            Penalty.create_attempt(team=user.team,
                                   flag=flag,
                                   submission=submission)
            if not self.config.penalize_flag_value:
                return False
            attempts = Penalty.by_count(flag, user.team)
            if attempts < self.config.flag_start_penalty:
                return False
            if attempts >= self.config.flag_stop_penalty:
                return False
            penalty = int(
                flag.dynamic_value(user.team) * self.config.flag_penalty_cost *
                0.01)
            logging.info("%s (%s) capture failed '%s' - lost %s" %
                         (user.handle, user.team.name, flag.name, penalty))
            user.team.money -= penalty
            user.money -= penalty
            self.dbsession.add(user.team)
            self.dbsession.flush()
            self.event_manager.flag_penalty(user, flag)
            self.dbsession.commit()

            # Fire capture failed webhook
            send_capture_failed_webhook(user, flag)

            return penalty
        return False
Example #2
0
 def failed_capture(self, flag, submission):
     user = self.get_current_user()
     if submission is not None and flag not in user.team.flags:
         if flag.is_file:
             submission = Flag.digest(submission)
         Penalty.create_attempt(
             team=user.team,
             flag=flag,
             submission=submission,
         )
         if not self.config.penalize_flag_value:
             return False
         attempts = Penalty.by_count(flag, user.team)
         if attempts < self.config.flag_start_penalty:
             return False
         if attempts >= self.config.flag_stop_penalty:
             return False
         penalty = int(flag.value * self.config.flag_penalty_cost * .01)
         logging.info("%s (%s) capture failed '%s' - lost %s" % (
             user.handle, user.team.name, flag.name, penalty
         ))
         user.team.money -= penalty
         user.money -= penalty
         self.dbsession.add(user.team)
         self.dbsession.flush()
         self.event_manager.flag_penalty(user, flag)
         self.dbsession.commit()
         return penalty
     return False