public OperationResult Post(ClientAgreementVote vote)
        {
            OperationResult result;

            try
            {
                if (vote.AgreementID == 0)
                {
                    result = OperationResult.Fail(-2, "AgreementID was not provided.");
                    return(result);
                }

                // verify:
                IVerificationRepository verificationRepository;
                switch (vote.CertificateType)
                {
                case EntityDictionary.Certificate.Type.DPA:
                {
                    verificationRepository =
                        // BUG: DPA verification server doesn't work properly
                        //new DpaVerificationRepository();
                        new UaCryptoVerificationRepository();
                    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);
                }

                var agreementVote = new AgreementVote
                {
                    AgreementID = vote.AgreementID,
                    Certificate = new Certificate()
                    {
                        SerialNumber = verificationResult.Descendants("Serial").SingleOrDefault().Value
                    },
                    SignedData = vote.SignedData,
                    SignedHash = vote.Signature
                };
                result = this.agreementRepository.Vote(agreementVote);
            }
            catch (Exception exc)
            {
                result = OperationResult.ExceptionResult(exc);
            }

            return(result);
        }
        public OperationResult Post(ClientAgreementVote vote)
        {
            OperationResult result;

            try
            {
                if (vote.AgreementID == 0)
                {
                    result = OperationResult.Fail(-2, "AgreementID was not provided.");
                    return result;
                }

                // verify:
                IVerificationRepository verificationRepository;
                switch (vote.CertificateType)
                {
                    case EntityDictionary.Certificate.Type.DPA:
                        {
                            verificationRepository =
                                // BUG: DPA verification server doesn't work properly
                                //new DpaVerificationRepository();
                                new UaCryptoVerificationRepository();
                            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;
                }

                var agreementVote = new AgreementVote
                                    {
                                        AgreementID = vote.AgreementID,
                                        Certificate = new Certificate() { SerialNumber = verificationResult.Descendants("Serial").SingleOrDefault().Value },
                                        SignedData = vote.SignedData,
                                        SignedHash = vote.Signature
                                    };
                result = this.agreementRepository.Vote(agreementVote);
            }
            catch (Exception exc)
            {
                result = OperationResult.ExceptionResult(exc);
            }

            return result;
        }