Exemplo n.º 1
0
        public DtoApiResponseMessage EmitirVoto(DtoAES dtoAes)
        {
            //1.- Verificar voto firmado
            var votoAesVerificado = _rsaHelper.VerificarFirmaDigital(dtoAes.VotoCifradoAes + dtoAes.mascara, dtoAes.VotoFirmado);

            if (votoAesVerificado)
            {
                //2.- Desencriptar voto con llaves AES
                var listaOpciones = _aesService.DecryptStringAES(dtoAes.VotoCifradoAes, dtoAes.Key, dtoAes.vectorInicializacion);

                //3.- Guardar voto en base
                var voto = new Mv01_Voto
                {
                    Mascara            = dtoAes.mascara,
                    ProcesoElectoralId = dtoAes.procesoElectoralId,
                    FechaCreacion      = DateTime.Now,
                    FechaModificacion  = DateTime.Now,
                };

                using var transaccion = new TransactionScope();
                try
                {
                    if (listaOpciones == null)
                    {
                        voto.Estado = nameof(EstadosVoto.NULO);
                        CrearVoto(voto);
                    }
                    else if (listaOpciones.Count == 0)
                    {
                        voto.Estado = nameof(EstadosVoto.BLANCO);
                        CrearVoto(voto);
                    }
                    else
                    {
                        voto.Estado = nameof(EstadosVoto.VALIDO);
                        CrearVoto(voto);
                        //4.- guardar opciones del voto
                        foreach (DtoOpcion opcion in listaOpciones)
                        {
                            CrearOpcion(new Mv02_Opcion
                            {
                                VotoId            = voto.Id,
                                ListaId           = Convert.ToInt64(opcion.listaId),
                                CandidatoId       = Convert.ToInt64(opcion.candidatoId),
                                EscanioId         = Convert.ToInt64(opcion.escanioId),
                                Estado            = Auditoria.EstadoActivo,
                                FechaCreacion     = DateTime.Now,
                                FechaModificacion = DateTime.Now,
                            });
                        }
                    }

                    transaccion.Complete();
                }
                catch (Exception ex)
                {
                    _apiResponseMessage.CrearDtoApiResponseMessage(null, "VE_PEL_MV_002");
                }
                finally
                {
                    transaccion.Dispose();
                }

                return(_apiResponseMessage.CrearDtoApiResponseMessage(null, "VE_PEL_MV_003"));
            }
            else
            {
                // Si el voto no coincide con la firma se anula el voto en la mesa de identificacion y se retorna un error.
                return(_apiResponseMessage.CrearDtoApiResponseMessage(null, "VE_PEL_MV_001"));
            }



            #region Métodos Privados

            void CrearVoto(Mv01_Voto voto)
            {
                _votoRepository.Create <Mv01_Voto>(voto);
                _votoRepository.Save();
            }

            void ActualizarVoto(Mv01_Voto voto)
            {
                _votoRepository.Update <Mv01_Voto>(voto);
                _votoRepository.Save();
            }

            void CrearOpcion(Mv02_Opcion opcion)
            {
                _opcionRepository.Create <Mv02_Opcion>(opcion);
                _opcionRepository.Save();
            }

            void ActualizarOpcion(Mv02_Opcion opcion)
            {
                _opcionRepository.Update <Mv02_Opcion>(opcion);
                _opcionRepository.Save();
            }

            #endregion
        }