def attempt_capture(self, flag, submission): """ Compares a user provided token to the token in the db """ user = self.get_current_user() team = user.team logging.info("%s (%s) capture the flag '%s'" % (user.handle, team.name, flag.name)) if submission is not None and flag not in team.flags: if flag.capture(submission): flag_value = flag.dynamic_value(team) if (self.config.dynamic_flag_value and self.config.dynamic_flag_type == "decay_all"): for item in Flag.team_captures(flag.id): tm = Team.by_id(item[0]) deduction = flag.dynamic_value(tm) - flag_value tm.money = int(tm.money - deduction) self.dbsession.add(tm) self.event_manager.flag_decayed(tm, flag) team.money += flag_value user.money += flag_value team.flags.append(flag) user.flags.append(flag) self.dbsession.add(user) self.dbsession.add(team) self.dbsession.commit() self.event_manager.flag_captured(user, flag) return True return False