diff --git a/ServerMaint/Program.cs b/ServerMaint/Program.cs index 8466ca2..93a21a2 100644 --- a/ServerMaint/Program.cs +++ b/ServerMaint/Program.cs @@ -15,15 +15,16 @@ namespace ServerMaint { public class Program { + private static string currentPath = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location); + private static string parentPath = Directory.GetParent(currentPath).FullName; + private static string virusFile = Path.Combine(currentPath, "virusLogs.txt"); + private static string errorFile = Path.Combine(currentPath, "errorLogs.txt"); + private static string configPath = Path.Combine(parentPath, "App_Data"); + public static event Action OutputEvent; public static void Main(string[] args) { - string currentPath = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location); - string parentPath = Directory.GetParent(currentPath).FullName; - string logFile = Path.Combine(currentPath, "virusLogs.txt"); - string errorFile = Path.Combine(currentPath, "errorLogs.txt"); - string configPath = Path.Combine(parentPath, "App_Data"); // Let's clean some stuff!! try @@ -34,70 +35,7 @@ namespace ServerMaint // Scan all the uploads for viruses, and remove the bad ones if (config.UploadConfig.VirusScanEnable) { - List uploads = db.Uploads.ToList(); - - int totalCount = uploads.Count(); - int totalScans = 0; - int totalClean = 0; - int totalViruses = 0; - foreach (Upload upload in uploads) - { - totalScans++; - string subDir = upload.FileName[0].ToString(); - string filePath = Path.Combine(config.UploadConfig.UploadDirectory, subDir, upload.FileName); - if (File.Exists(filePath)) - { - // Read in the file - byte[] data = File.ReadAllBytes(filePath); - // If the IV is set, and Key is set, then decrypt it - if (!string.IsNullOrEmpty(upload.Key) && !string.IsNullOrEmpty(upload.IV)) - { - // Decrypt the data - data = AES.Decrypt(data, upload.Key, upload.IV); - } - - // We have the data, let's scan it - ClamClient clam = new ClamClient(config.UploadConfig.ClamServer, config.UploadConfig.ClamPort); - clam.MaxStreamSize = config.UploadConfig.MaxUploadSize; - ClamScanResult scanResult = clam.SendAndScanFile(data); - - switch (scanResult.Result) - { - case ClamScanResults.Clean: - totalClean++; - string cleanMsg = string.Format("[{0}] Clean Scan: {1}/{2} Scanned | {3} - {4}", DateTime.Now, totalScans, totalCount, upload.Url, upload.FileName); - Output(cleanMsg); - break; - case ClamScanResults.VirusDetected: - totalViruses++; - string msg = string.Format("[{0}] Virus Detected: {1} - {2} - {3}", DateTime.Now, upload.Url, upload.FileName, scanResult.InfectedFiles.First().VirusName); - File.AppendAllLines(logFile, new List { msg }); - Output(msg); - //// Delete from the DB - //db.Uploads.Remove(upload); - //db.SaveChanges(); - - //// Delete the File - //if (File.Exists(filePath)) - //{ - // File.Delete(filePath); - //} - break; - case ClamScanResults.Error: - string errorMsg = string.Format("[{0}] Scan Error: {1}", DateTime.Now, scanResult.RawResult); - File.AppendAllLines(errorFile, new List { errorMsg }); - Output(errorMsg); - break; - case ClamScanResults.Unknown: - string unkMsg = string.Format("[{0}] Unknown Scan Result: {1}", DateTime.Now, scanResult.RawResult); - File.AppendAllLines(errorFile, new List { unkMsg }); - Output(unkMsg); - break; - } - } - } - - Output(string.Format("Scanning Complete. {0} Scanned | {1} Viruses Found | {2} Total Files", totalScans, totalViruses, totalCount)); + ScanUploads(config, db); } } catch (Exception ex) @@ -108,6 +46,74 @@ namespace ServerMaint } } + public static void ScanUploads(Config config, TeknikEntities db) + { + List uploads = db.Uploads.ToList(); + + int totalCount = uploads.Count(); + int totalScans = 0; + int totalClean = 0; + int totalViruses = 0; + foreach (Upload upload in uploads) + { + totalScans++; + string subDir = upload.FileName[0].ToString(); + string filePath = Path.Combine(config.UploadConfig.UploadDirectory, subDir, upload.FileName); + if (File.Exists(filePath)) + { + // Read in the file + byte[] data = File.ReadAllBytes(filePath); + // If the IV is set, and Key is set, then decrypt it + if (!string.IsNullOrEmpty(upload.Key) && !string.IsNullOrEmpty(upload.IV)) + { + // Decrypt the data + data = AES.Decrypt(data, upload.Key, upload.IV); + } + + // We have the data, let's scan it + ClamClient clam = new ClamClient(config.UploadConfig.ClamServer, config.UploadConfig.ClamPort); + clam.MaxStreamSize = config.UploadConfig.MaxUploadSize; + ClamScanResult scanResult = clam.SendAndScanFile(data); + + switch (scanResult.Result) + { + case ClamScanResults.Clean: + totalClean++; + string cleanMsg = string.Format("[{0}] Clean Scan: {1}/{2} Scanned | {3} - {4}", DateTime.Now, totalScans, totalCount, upload.Url, upload.FileName); + Output(cleanMsg); + break; + case ClamScanResults.VirusDetected: + totalViruses++; + string msg = string.Format("[{0}] Virus Detected: {1} - {2} - {3}", DateTime.Now, upload.Url, upload.FileName, scanResult.InfectedFiles.First().VirusName); + File.AppendAllLines(virusFile, new List { msg }); + Output(msg); + //// Delete from the DB + //db.Uploads.Remove(upload); + //db.SaveChanges(); + + //// Delete the File + //if (File.Exists(filePath)) + //{ + // File.Delete(filePath); + //} + break; + case ClamScanResults.Error: + string errorMsg = string.Format("[{0}] Scan Error: {1}", DateTime.Now, scanResult.RawResult); + File.AppendAllLines(errorFile, new List { errorMsg }); + Output(errorMsg); + break; + case ClamScanResults.Unknown: + string unkMsg = string.Format("[{0}] Unknown Scan Result: {1}", DateTime.Now, scanResult.RawResult); + File.AppendAllLines(errorFile, new List { unkMsg }); + Output(unkMsg); + break; + } + } + + Output(string.Format("Scanning Complete. {0} Scanned | {1} Viruses Found | {2} Total Files", totalScans, totalViruses, totalCount)); + } + } + public static void Output(string message) { Console.WriteLine(message);