Beispiel #1
0
        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);
        }
Beispiel #2
0
        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));
            }
        }