public OperationResult DigitalSignatureVote(ClientPetitionVote vote) { OperationResult result; try { if (vote.PetitionID == 0) { result = OperationResult.Fail(-2, "PetitionID was not provided."); return(result); } // verify: IVerificationRepository verificationRepository; switch (vote.CertificateType) { case EntityDictionary.Certificate.Type.DPA: { verificationRepository = new DpaVerificationRepository(); break; } case EntityDictionary.Certificate.Type.UACrypto: { verificationRepository = new UaCryptoVerificationRepository(); break; } default: { verificationRepository = new UaCryptoVerificationRepository(); break; } } var verificationResult = verificationRepository.Verify(vote.SignedData); var isVerficationSuccessfull = verificationResult.Descendants("Result").SingleOrDefault() != null && verificationResult.Descendants("Result").SingleOrDefault().Value == "Success" && verificationResult.Descendants("Serial").SingleOrDefault() != null && verificationResult.Descendants("Serial").SingleOrDefault().Value.Length > 0; if (!isVerficationSuccessfull) { result = OperationResult.Fail(-3, "Certificate verification failed."); return(result); } result = this.petitionVoteRepository.Vote(vote, verificationResult.Descendants("Serial").SingleOrDefault().Value); } catch (Exception exc) { result = OperationResult.ExceptionResult(exc); } return(result); }
public OperationResult Vote(ClientPetitionVote petitionVote, string certificateSerialNumber) { var vote = new PetitionVote() { PetitionID = petitionVote.PetitionID, Certificate = new Certificate() { SerialNumber = certificateSerialNumber }, SignedData = petitionVote.SignedData, SignedHash = petitionVote.Signature }; OperationResult result; using (var db = new EDEntities()) { var certificate = db.Certificates.SingleOrDefault(c => c.SerialNumber == vote.Certificate.SerialNumber); if (certificate == null) { result = OperationResult.Fail(-4, "Certificate is not registered."); return(result); } vote.CertificateID = certificate.ID; vote.PersonID = certificate.PersonID; vote.CreatedDate = DateTime.Now; vote.Petition = null; vote.Certificate = null; vote.Person = null; ////var votes = (from p in db.PetitionVotes //// where p.PetitionID == vote.PetitionID //// && (p.PersonID == vote.PersonID || p.CertificateID == vote.CertificateID || p.Certificate.SerialNumber == vote.Certificate.SerialNumber) //// select p); //var votes = db.PetitionVotes.Where(p => // p.PetitionID == vote.PetitionID && // (p.PersonID == vote.PersonID || p.CertificateID == vote.CertificateID || // p.Certificate.SerialNumber == vote.Certificate.SerialNumber)); //if (votes.Any()) //{ // result = OperationResult.Fail(-5, "You already voted for this petition."); // return result; //} db.PetitionVotes.Add(vote); db.SaveChanges(); result = OperationResult.Success(1, "Agreement vote has been registered."); } return(result); }