def reveal_hint(request): form = RevealHintForm(request.POST or None, player=request.user) hint = Hint.objects.filter(pk=form.data.get('hint_id')).first() if form.is_valid(): # Validating team here (rather than in forms.py) because we're redirecting, # rather than just displaying form errors on the same challenge page. team = request.user.team if not team: messages.error(request, NO_TEAM) return HttpResponseRedirect( reverse('player', args=[request.user.slug])) team.hints.add(hint) if team.points and hint.penalty: team.points -= hint.penalty team.save() else: issue_errors(request, form) if hint is not None: return HttpResponseRedirect( reverse('challenge', args=[hint.challenge.slug])) return HttpResponseRedirect(reverse('challenges'))
def submit_flag(request): form = SubmitFlagForm(request.POST or None, player=request.user) challenge = Challenge.objects.filter( pk=form.data.get('challenge_id')).first() if form.is_valid(): attempted_flag = form.cleaned_data['attempted_flag'] # Validating team here (rather than in forms.py) because we're redirecting, # rather than just displaying form errors on the same challenge page. team = request.user.team if not team: messages.error(request, NO_TEAM) return HttpResponseRedirect( reverse('player', args=[request.user.slug])) challenge_flags = [flag.value for flag in challenge.flag_set.all()] if attempted_flag in challenge_flags: team.points += challenge.points if challenge.bonus_limit: team.points += challenge.bonus_points challenge.bonus_limit -= 1 if challenge.points: challenge.points -= challenge.depreciation challenge.save() for flag in challenge.flag_set.all(): team.flags.add(flag) messages.success(request, GOOD_FLAG) # Wrong flag else: error_msg = BAD_FLAG if challenge.penalty and team.points: error_msg += PENALTY.format(challenge.penalty, team.name) team.points -= challenge.penalty messages.error(request, error_msg) team.save() # Form invalid else: issue_errors(request, form) if challenge is not None: return HttpResponseRedirect(reverse('challenge', args=[challenge.slug])) return HttpResponseRedirect(reverse('challenges'))
def change_team_name(request): form = team_forms.ChangeTeamName(request.POST or None, player=request.user) if form.is_valid(): new_team_name = form.cleaned_data['new_team_name'] team = request.user.team team.name = new_team_name team.slug = slugify(new_team_name) team.save() else: issue_errors(request, form) return HttpResponseRedirect(reverse('team', args=[request.user.team.slug]))
def change_team_password(request): form = team_forms.ChangeTeamPassword(request.POST or None, player=request.user) if form.is_valid(): new_team_password = form.cleaned_data['new_team_password'] team = request.user.team team.password = make_password(new_team_password) team.save() else: issue_errors(request, form) return HttpResponseRedirect(reverse('team', args=[request.user.team.slug]))
def appoint_captain(request): form = team_forms.AppointNewCaptain(request.POST or None, player=request.user) if form.is_valid(): target_player_username = form.cleaned_data['target_player_username'] target_player = Player.objects.get(username=target_player_username) old_captain = request.user target_player.standing = Player.CAPTAIN old_captain.standing = Player.MODERATOR target_player.save() old_captain.save() else: issue_errors(request, form) return HttpResponseRedirect(reverse('team', args=[request.user.team.slug]))
def promote_demote(request): form = team_forms.PromoteOrDemotePlayer(request.POST or None, player=request.user) if form.is_valid(): target_player_username = form.cleaned_data['target_player_username'] promote = form.cleaned_data['promote'] target_player = Player.objects.get(username=target_player_username) if promote: target_player.standing = Player.MODERATOR else: target_player.standing = Player.PLAYER target_player.save() else: issue_errors(request, form) return HttpResponseRedirect(reverse('team', args=[request.user.team.slug]))