private ScanResultModel MapScanResult(ClamScanResult scanResult) { var result = new ScanResultModel(); switch (scanResult.Result) { case ClamScanResults.Unknown: result.Message = "Could not scan file"; result.HasVirus = true; break; case ClamScanResults.Clean: result.Message = "No Virus found"; result.HasVirus = false; break; case ClamScanResults.VirusDetected: result.VirusName = scanResult.InfectedFiles.First().VirusName; result.Message = "Virus found: " + scanResult.InfectedFiles.First().VirusName; result.HasVirus = true; break; case ClamScanResults.Error: result.Message = string.Format("VIRUS SCAN ERROR! {0}", scanResult.RawResult); result.HasVirus = true; break; } return(result); }
public async Task <IActionResult> Post(IFormFile file) { //Validate file if (file == null) { _logger.LogError("No file contents"); return(StatusCode(500, "No file contents")); } //Genarate temp file name string tempFile = _fileHandler.GetTempFileFullPath(); //Create file if (!await _fileHandler.CreateFileAsync(file, tempFile)) { System.IO.File.Delete(tempFile); _logger.LogError(string.Format("Failed to create temp file {0}", tempFile)); return(StatusCode(500, string.Format("Failed to create temp file {0}", tempFile))); } //Scan file string output = string.Empty; bool isClean = false; var scanResponse = new ScanResultModel(); scanResponse.IsScanSuccessfull = _fileHandler.ScanFile(tempFile, out isClean, out output); scanResponse.IsClean = isClean; scanResponse.Output = output; if (!scanResponse.IsScanSuccessfull) { System.IO.File.Delete(tempFile); _logger.LogError(string.Format("Failed to scan file file: {0}", scanResponse.Output)); return(StatusCode(500, scanResponse)); } else { System.IO.File.Delete(tempFile); if (!scanResponse.IsClean) { _logger.LogError(string.Format("Virus detected: {0}", scanResponse.Output)); } return(Ok(scanResponse)); } }