public virtual async Task <Response> ValidateChallenge(Answer answer, Identifier identifier) { ValidateAnswer(answer); Team team = await _teamLogic.FindTeamByIdentification(_htfContext.Identification); Answer storedAnswer = await _challengeLogic.GetAnswerByChallengeId(answer.ChallengeId); Status status = Status.Unsuccessful; if (CheckAnswer(answer, storedAnswer)) { await _challengeLogic.SolveChallenge(answer.ChallengeId, team.Id); await _historyLogic.Push(Status.Successful); status = Status.Successful; } else { await _challengeLogic.FailChallenge(answer.ChallengeId, team.Id); await _historyLogic.Push(Status.Unsuccessful); } return(new Response { Identifier = identifier, Status = status, Identification = team.Identification, Overview = await BuildOverview(team.Id) }); }
public override async Task <Response> ValidateChallenge(Answer answer, Identifier identifier) { ValidateAnswer(answer); var teamName = answer.Values.Single(x => x.Name == "name").Data; var teamSecret = answer.Values.Single(x => x.Name == "secret").Data; var team = await _teamLogic.FindTeamByName(teamName); if (team == null) { team = await _teamLogic.CreateTeam(teamName, teamSecret); await _challengeLogic.SolveChallenge(answer.ChallengeId, team.Id); } else { if (team.HashedSecret != teamSecret.Md5Hash()) { throw new InvalidTeamException(); } await _challengeLogic.SolveChallenge(answer.ChallengeId, team.Id); await _historyLogic.Push(Status.Successful); } return(new Response { Identifier = identifier, Status = Status.Successful, Identification = team.Identification, Overview = await BuildOverview(team.Id) }); }