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