ElectroChecker.Vuln2Methods.NominateUsers C# (CSharp) Method

NominateUsers() public static method

public static NominateUsers ( string host, Election election, User candidates ) : Election
host string
election Electro.Model.Election
candidates Electro.Model.User
return Electro.Model.Election
        public static Election NominateUsers(string host, Election election, User[] candidates)
        {
            log.InfoFormat("Nominating rest {0} candidates for election...", candidates.Length);
            var nominateTasks = candidates.Select(candidate => new { candidate, task = ElectroClient.NominateAsync(host, Program.PORT, candidate.Cookies, election.Id) }).ToArray();
            Election[] elections;
            try
            {
                elections = nominateTasks.Select(arg => arg.task.Result).ToArray();
            }
            catch(Exception e)
            {
                throw new ServiceException(ExitCode.DOWN, string.Format("Failed to nominate {0} candidates in parallel: {1}", nominateTasks.Length, e));
            }

            var electionId = election.Id;
            election = elections.FirstOrDefault(election1 => election1 != null && election1.Candidates.Count >= candidates.Length + 1);
            if(election == null)
                throw new ServiceException(ExitCode.MUMBLE, string.Format("Nominated '{0}' candidates for election '{1}', but got less in result", candidates.Length + 1, electionId));

            log.Info("Candidates nomindated");
            return election;
        }

Usage Example

Example #1
0
        public static int ProcessPut(string host, string id, string flag)
        {
            log.Info("Processing Vuln1.Put");

            var r = new Random();
            var candidateUsers       = GenerateCandidates(candidatesMinCount, candidatesMaxCount);
            var candidateWithFlagNum = r.Next(candidateUsers.Length);
            var candidateWithFlag    = candidateUsers[candidateWithFlagNum];

            candidateWithFlag.PrivateMessage = flag;
            log.InfoFormat("Generated {0} candidates (#{1} has flag)", candidateUsers.Length, candidateWithFlagNum);

            candidateUsers = Vuln2Methods.RegisterCandidates(host, candidateUsers).OrderBy(user => user.Login).ToArray();
            var election        = Vuln2Methods.StartElection(host, candidateUsers[0], true, nominateTimeInSec, voteTimeInSec);
            var electionStartDt = DateTime.UtcNow;

            Vuln2Methods.NominateUsers(host, election, candidateUsers.Skip(1).ToArray());

            var state = new Vuln1State
            {
                ElectionStartDate = electionStartDt,
                NominateTimeInSec = nominateTimeInSec,
                VoteTimeInSec     = voteTimeInSec,
                ElectionId        = election.Id.ToString(),
                Candidates        = candidateUsers
            };

            log.Info("Flag put");
            Console.Out.WriteLine(Convert.ToBase64String(Encoding.UTF8.GetBytes(state.ToJsonString())));
            return((int)ExitCode.OK);
        }