예제 #1
0
        private void OnRaiseSignedFileEvent(SignedFileEventArgs e)
        {
            EventHandler <SignedFileEventArgs> handler = SignedFileEvent;

            if (handler != null)
            {
                handler(this, e);
            }
        }
        private void PdfSigner_SignedFileEvent(object sender, SignedFileEventArgs e)
        {
            var a = ArchivosParaFirmar.Where(ar => ar.File.FullName == e.File.FullName).First();

            if (e.HasError)
            {
                a.Estado             = EstadoFirmaArchivo.GetError();
                a.Estado.Descripcion = e.Message;
                logger.Error("Ha ocurrido un error firmando el archivo {archivo} del lote {lote} con el siguiente mensaje: {mensaje}", e.File.Name, a.Lote, e.Message);
            }
            else
            {
                try
                {
                    File.WriteAllBytes(System.IO.Path.Combine(carpetaDestino, e.File.Name), e.SignedContent);
                }
                catch (Exception es)
                {
                    logger.Error("No se pudo guardar el archivo {directorio} .", a.File.FullName);

                    a.Estado             = EstadoFirmaArchivo.GetError();
                    a.Estado.Descripcion = $"No se pudo guardar el archivo.\n{es.Message}";
                    return;
                }
                a.Estado = EstadoFirmaArchivo.GetFirmado();
                logger.Information("El archivo {archivo} del lote {lote} ha sido firmado.", a.File.Name, a.Lote);

                try
                {
                    a.File.Delete();
                    logger.Information("El archivo {archivo} del lote {lote} ha sido eliminado de la carpeta origen.", a.File.Name, a.Lote);
                    if (a.File.Directory.GetFiles().Count() == 0)
                    {
                        try
                        {
                            a.File.Directory.Delete();
                            logger.Information("Se borró el directorio {directorio} de la carpeta origen.", a.File.Directory.Name);
                        }
                        catch (Exception eD)
                        {
                            logger.Error(eD, "No se pudo borrar el directorio {directorio} de la carpeta origen.", a.File.Directory.Name);
                            a.Estado             = EstadoFirmaArchivo.GetAtencion();
                            a.Estado.Descripcion = $"El archivo se firmó y se eliminó.\nEra el último archivo del lote pero no se pudo borrar el directorio.\n{eD.Message}";
                        }
                    }
                }
                catch (Exception exx)
                {
                    logger.Error(exx, "No se pudo borrar archivo {archivo} del lote {lote} de la carpeta origen.", a.File.Name, a.Lote);
                    a.Estado             = EstadoFirmaArchivo.GetAtencion();
                    a.Estado.Descripcion = $"El archivo se firmó pero no se pudo eliminar.\n{exx.Message}";
                }
            }
        }
예제 #3
0
        public override async Task SignPdf(string fileId, byte[] fileData)
        {
            SignedFileEventArgs eventArgs = null;

            if (String.IsNullOrWhiteSpace(pin) || privatekeyHandle == null)
            {
                eventArgs = new SignedFileEventArgs(null, fileId, true, "El pin es requerido.\nO bien no fue ingresado, o era incorrecto.");
            }

            else
            {
                using (var memStream = new MemoryStream(fileData))
                    using (PdfReader reader = new PdfReader(memStream))
                    {
                        StampingProperties properties = new StampingProperties();
                        properties.UseAppendMode();

                        using (MemoryStream outputStream = new MemoryStream())
                        {
                            try
                            {
                                PdfSigner signer = new PdfSigner(reader, outputStream, properties);

                                /* signer.SetCertificationLevel(certificationLevel);
                                 * PdfSignatureAppearance appearance = signer.GetSignatureAppearance().SetReason(reason).SetLocation(location
                                 *   ).SetReuseAppearance(setReuseAppearance);
                                 *
                                 * signer.SetFieldName(name);*/
                                // Creating the signature

                                signer.SignDetached(externalSignature, certPath, null, null, null, 0, PdfSigner.CryptoStandard.CADES);
                                eventArgs = new SignedFileEventArgs(outputStream.ToArray(), fileId, false, "");
                            }
                            catch (Exception e)
                            {
                                logger.Error(e, "Error firmando archivo {fileId}\n{mensaje}", fileId, e.Message);
                                eventArgs = new SignedFileEventArgs(null, fileId, true, e.Message);
                            }
                        }
                    }
            }
            OnRaiseSignedFileEvent(eventArgs);
            await Task.CompletedTask;
        }