Exemple #1
0
 public async Task <ActionResult <RegisteredResponse> > IsVoterRegistered([FromBody] VoterDto voterDto)
 {
     return(await _voterService.IsRegistered(voterDto));
 }
Exemple #2
0
        /// <summary>
        /// Checks if the voter which is specified by the ID and date of birth, is registered
        /// </summary>
        /// <param name="id"></param>
        /// <param name="dob"></param>
        /// <returns>A RegisteredResponse object containing boolean values if the voter is registered and has 2FA enabled</returns>
        public async Task <RegisteredResponse> IsRegistered(VoterDto voterDto)
        {
            var builder = Builders <Voter> .Filter;
            var filter  = builder.And(builder.Eq("voterId", voterDto.VoterId), builder.Eq("dateofBirth", DateTime.Parse(voterDto.DateofBirth).Date.ToString("dd/MM/yyyy")));
            var result  = await _voters.Find(filter).FirstOrDefaultAsync();

            RegisteredResponse registeredResponse;

            if (result != null)
            {
                var voter_electionBuilder = Builders <Voter_Election> .Filter;

                var electionId = await GetByTime(voterDto.CurrentTime);

                var voter_electionFilter = voter_electionBuilder.And(voter_electionBuilder.Eq("voterId", result.VoterId), voter_electionBuilder.Eq("electionId", electionId));
                var hasVoted             = await _voter_elections.Find(voter_electionFilter).FirstOrDefaultAsync();

                if (hasVoted != null)
                {
                    registeredResponse = new RegisteredResponse
                    {
                        IsRegistered = true,
                        HasVoted     = true
                    };
                    return(registeredResponse);
                }

                string folderName = Path.Combine("wwwroot", "certs");
                string pathToSave = Path.Combine(Directory.GetCurrentDirectory(), folderName);

                using (StreamWriter sw = new StreamWriter(Path.Combine(pathToSave, string.Format("{0}_publickey.pem", voterDto.VoterId))))
                {
                    await sw.WriteAsync(voterDto.PublicKey);
                }

                if (!result.isTwoFactorEnabled)
                {
                    registeredResponse = new RegisteredResponse
                    {
                        IsRegistered       = true,
                        IsTwoFactorEnabled = false,
                        ElectionId         = electionId,
                        PublicKey          = _config.GetValue <string>("PublicKey:Key")
                    };
                    return(registeredResponse);
                }
                else
                {
                    registeredResponse = new RegisteredResponse
                    {
                        IsRegistered       = true,
                        IsTwoFactorEnabled = true,
                        ElectionId         = electionId,
                        PublicKey          = _config.GetValue <string>("PublicKey:Key")
                    };
                    return(registeredResponse);
                }
            }

            return(new RegisteredResponse {
                IsRegistered = false, IsTwoFactorEnabled = false
            });
        }