Exemplo n.º 1
0
        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)
            });
        }
Exemplo n.º 2
0
        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)
            });
        }