public async Task <ActionResult <RegisteredResponse> > IsVoterRegistered([FromBody] VoterDto voterDto) { return(await _voterService.IsRegistered(voterDto)); }
/// <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 }); }