Beispiel #1
0
        public async Task <IActionResult> UploadFiles(List <IFormFile> files)
        {
            var log = new List <ScanResult>();

            foreach (var formFile in files)
            {
                if (formFile.Length > 0)
                {
                    var clam = new ClamClient("clamav-server", 3310);
                    var ping = await clam.PingAsync();

                    var result = await clam.SendAndScanFileAsync(formFile.OpenReadStream());

                    log.Add(new ScanResult()
                    {
                        FileName  = formFile.FileName,
                        Result    = result.Result.ToString(),
                        Message   = result.InfectedFiles?.FirstOrDefault()?.VirusName,
                        RawResult = result.RawResult
                    });
                }
            }

            var model = new UploadFilesViewModel();

            model.Results = log;

            return(View(model));
        }
Beispiel #2
0
        public IActionResult UploadFiles()
        {
            var images = Directory.EnumerateFiles(Path.Combine(_environment.WebRootPath, "Uploads\\Images"))
                         .Select(path => Path.GetFileName(path));

            var viewModel = new UploadFilesViewModel
            {
                Images         = images,
                WrongTypeFiles = new List <string>()
            };

            return(View(viewModel));
        }
Beispiel #3
0
        public async Task <IActionResult> UploadImages(List <IFormFile> files)
        {
            List <string> wrongTypeFile = await _fileService.SaveFiles(files);

            if (wrongTypeFile.Count > 0)
            {
                var viewModel = new UploadFilesViewModel {
                    Images = _fileService.GetImagesList(), WrongTypeFiles = wrongTypeFile
                };
                return(View("UploadFiles", viewModel));
            }
            else
            {
                var viewModel = new UploadFilesViewModel {
                    Images = _fileService.GetImagesList(), WrongTypeFiles = new List <string>()
                };
                return(View("UploadFiles", viewModel));
            }
        }
        public async Task <List <string> > UploadFiles(UploadFilesViewModel filesModel)
        {
            var fileNames = new List <string>();

            var dirname         = filesModel.Folder;
            var contentRootPath = _hostingEnvironment.ContentRootPath;
            var dirPath         = Path.Combine(contentRootPath, "wwwroot", "uploads", dirname);

            if (!Directory.Exists(dirPath))
            {
                Directory.CreateDirectory(dirPath);
            }

            foreach (var file in filesModel.Files)
            {
                var fileName = Path.Combine(Path.GetRandomFileName() + Path.GetExtension(file.FileName));
                var path     = Path.Combine(dirPath, fileName);
                await file.CopyToAsync(new FileStream(path, FileMode.Create));

                fileNames.Add(fileName);
            }

            return(fileNames);
        }
Beispiel #5
0
        public IActionResult UploadFiles()
        {
            var model = new UploadFilesViewModel();

            return(View(model));
        }
Beispiel #6
0
        public async Task <IActionResult> UploadFiles(List <IFormFile> files)
        {
            var log = new List <ScanResult>();

            foreach (var formFile in files)
            {
                if (formFile.Length > 0)
                {
                    var extension = formFile.FileName.Contains('.')
                        ? formFile.FileName.Substring(formFile.FileName.LastIndexOf('.'), formFile.FileName.Length - formFile.FileName.LastIndexOf('.'))
                        : string.Empty;
                    var file = new File
                    {
                        Name        = $"{Guid.NewGuid()}{extension}",
                        Alias       = formFile.FileName,
                        Region      = "us-east-1",
                        Bucket      = BUCKET_NAME,
                        ContentType = formFile.ContentType,
                        Size        = formFile.Length,
                        Uploaded    = DateTime.UtcNow,
                    };
                    var ping = await _clam.PingAsync();

                    if (ping)
                    {
                        _logger.LogInformation("Successfully pinged the ClamAV server.");
                        var result = await _clam.SendAndScanFileAsync(formFile.OpenReadStream());

                        file.ScanResult = result.Result.ToString();
                        file.Infected   = result.Result == ClamScanResults.VirusDetected;
                        file.Scanned    = DateTime.UtcNow;
                        if (result.InfectedFiles != null)
                        {
                            foreach (var infectedFile in result.InfectedFiles)
                            {
                                file.Viruses.Add(new Virus
                                {
                                    Name = infectedFile.VirusName
                                });
                            }
                        }
                        var metaData = new Dictionary <string, string>
                        {
                            { "av-status", result.Result.ToString() },
                            { "av-timestamp", DateTime.UtcNow.ToString() },
                            { "alias", file.Alias }
                        };

                        try
                        {
                            var found = await _minio.BucketExistsAsync(BUCKET_NAME);

                            if (!found)
                            {
                                await _minio.MakeBucketAsync(BUCKET_NAME);
                            }
                            await _minio.PutObjectAsync(BUCKET_NAME,
                                                        file.Name,
                                                        formFile.OpenReadStream(),
                                                        formFile.Length,
                                                        formFile.ContentType,
                                                        metaData);

                            await _context.Files.AddAsync(file);

                            await _context.SaveChangesAsync();
                        }
                        catch (MinioException e)
                        {
                            _logger.LogError($"File Upload Error: {e.Message}");
                        }


                        var scanResult = new ScanResult()
                        {
                            FileName  = formFile.FileName,
                            Result    = result.Result.ToString(),
                            Message   = result.InfectedFiles?.FirstOrDefault()?.VirusName,
                            RawResult = result.RawResult
                        };
                        log.Add(scanResult);
                    }
                    else
                    {
                        _logger.LogWarning("Wasn't able to connect to the ClamAV server.");
                    }
                }
            }

            var model = new UploadFilesViewModel
            {
                Results = log
            };

            return(View("UploadResults", model));
        }
 public async Task<ActionResult> Upload(UploadFilesViewModel model, IEnumerable<IFormFile> files) {
     //...
 }