using Microsoft.Extensions.Logging; using System.Diagnostics; namespace File_Folder_Helper.Day; internal static partial class Helper20240728 { internal static void DownloadSslCertificates(ILogger logger, List args) { string file; Process? process; string[] segments; string standardError; string standardOutput; string argumentSegment; string store = args[9]; string domain = args[2]; List lines = []; string logSegment = args[8]; string endCertificate = args[7]; string beginCertificate = args[6]; int waitForExit = int.Parse(args[5]); string[] subdomains = args[3].Split(','); string sourceDirectory = Path.GetFullPath(args[0]); ProcessStartInfo processStartInfo = new() { CreateNoWindow = true, RedirectStandardError = true, RedirectStandardOutput = true, UseShellExecute = false, FileName = args[4], WorkingDirectory = sourceDirectory }; foreach (string subdomain in subdomains) { argumentSegment = $"{subdomain}.{domain}:443 -servername {subdomain}.{domain}"; processStartInfo.Arguments = $"s_client -connect {subdomain}.{domain}:443 -servername {subdomain}.{domain}"; process = Process.Start(processStartInfo); if (process is null) continue; _ = process.WaitForExit(waitForExit); process.Kill(entireProcessTree: true); standardOutput = process.StandardOutput.ReadToEnd(); if (!standardOutput.Contains(beginCertificate) || !standardOutput.Contains(endCertificate)) { standardError = process.StandardError.ReadToEnd(); logger.LogWarning($"Error: {subdomain}{Environment.NewLine}{standardOutput}{Environment.NewLine}{standardError}"); continue; } segments = standardOutput.Split(beginCertificate); if (segments.Length != 2) break; segments = segments[1].Split(endCertificate); if (segments.Length != 2) break; lines.Add($"{logSegment} \"{store}\" {subdomain}.{domain}.cert"); file = Path.Combine(sourceDirectory, $"{subdomain}.{domain}.cert"); File.WriteAllText(file, $"{beginCertificate}{segments[0]}{endCertificate}{Environment.NewLine}"); } File.WriteAllLines(Path.Combine(sourceDirectory, $"{DateTime.Now.Ticks}.txt"), lines); } }