using System; using System.IO; using System.Linq; using System.IO.Compression; using System.Collections.Generic; using Renci.SshNet; using Renci.SshNet.Common; using tsUtilidades; using tsUtilidades.Extensiones; using bdAsegasa.db; using tsUtilidades.Enumeraciones; namespace Servicio_Gestion_Asegasa.Procesos { public class ProcesosCaser { public static async Task GuardarEnBDFicherosDisponiblesSFTPAsync() { try { using (var bd = bdAsegasa.db.gestionasegasaEntities.NuevoContextoCN()) using (var bdtmp = bdAsegasa.db.gestionasegasaEntities.NuevoContextoCN()) { var idCaser = bd.companias.First(x => x.Codigo == "0017").idCompania; var keybAuth = new KeyboardInteractiveAuthenticationMethod("ca071106"); keybAuth.AuthenticationPrompt += HandleKeyEvent; var conInfo = new ConnectionInfo("ftp.caser.es", 22, "ca071106", keybAuth); using (var sftp = new SftpClient(conInfo)) { sftp.Connect(); var lf = sftp.ListDirectory("ca071106").Where(x => x.IsDirectory == false); foreach (var F in lf) { try { if (F.Name.StartsWith("EIAC_REC_") || F.Name.StartsWith("EIAC_POL_") || F.Name.StartsWith("EIAC_SIN_")) { string nomfic; bool Eszip; if (F.Name.EndsWith(".txt")) { nomfic = F.Name.Substring(0, F.Name.Length - 4); Eszip = false; } else { nomfic = Path.ChangeExtension(F.Name, "xml"); Eszip = true; } using (var ms = new MemoryStream()) { sftp.DownloadFile(F.FullName, ms); ms.Position = 0; byte[] b; if (Eszip) { using (var zip = new ZipArchive(ms, ZipArchiveMode.Read)) { var firstEntry = zip.Entries.First(); using (var msxml = new MemoryStream()) { using (var entryStream = firstEntry.Open()) { entryStream.CopyTo(msxml); } msxml.Position = 0; b = msxml.ToArray(); } } } else { b = ms.ToArray(); } var sha1 = tsUtilidades.crypt.SHA1(b); if (bdtmp.ficheroscompanias.Any(x => x.SHA1 == sha1 && x.idCompania == idCaser) == false) { var nf = new bdAsegasa.db.ficheroscompanias(); nf.FechaCreacion = DateTime.Now; nf.idCompania = idCaser; nf.Fichero = b; nf.NombreFichero = nomfic; nf.SHA1 = sha1; switch (F.Name.Split('_')[1]) { case "REC": nf.Tipo = (int)bdAsegasa.db.ficheroscompanias.TipoFicheroCompania.RECIBOS_EIAC; break; case "POL": nf.Tipo = (int)bdAsegasa.db.ficheroscompanias.TipoFicheroCompania.POLIZAS_EIAC; break; case "SIN": nf.Tipo = (int)bdAsegasa.db.ficheroscompanias.TipoFicheroCompania.SINIESTROS_EIAC; break; } bd.ficheroscompanias.Add(nf); bd.SaveChanges(); } } } sftp.RenameFile(F.FullName, F.FullName.Replace(F.Name, "PROCESADOS/" + F.Name)); } catch (Exception EX) { throw new Exception(EX.Message + " Fichero: " + F.FullName, EX); } } sftp.Disconnect(); } } } catch (Exception EX) { await tsUtilidades.TsNotificacionesClient.RegistrarAsync("En GuardarEnBDFicherosDisponibles CASER", EX.Message, tsUtilidades.TsNotificacionesClient.TipoNotificacionEnum.ERROR); } } private static void HandleKeyEvent(object? sender, AuthenticationPromptEventArgs e) { foreach (var prompt in e.Prompts) { if (prompt.Request.IndexOf("Password:", StringComparison.InvariantCultureIgnoreCase) != -1) { prompt.Response = "As69gs73"; } } } } }