using System.IO; using System.Threading.Tasks; using Hangfire; using MalwareMultiScan.Shared.Data.Requests; using MalwareMultiScan.Worker.Jobs; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; namespace MalwareMultiScan.Worker.Controllers { [ApiController] [Produces("application/json")] public class ScanController : ControllerBase { [HttpPost] [ProducesResponseType(StatusCodes.Status202Accepted)] [ProducesResponseType(StatusCodes.Status400BadRequest)] [Route("/scan/file")] public async Task ScanFile([FromForm] FileRequest request) { var temporaryFile = Path.GetTempFileName(); await using (var temporaryFileSteam = System.IO.File.OpenWrite(temporaryFile)) await request.InputFile.CopyToAsync(temporaryFileSteam); BackgroundJob.Enqueue( x => x.ScanFile(temporaryFile, request.CallbackUrl)); return Accepted(request.CallbackUrl); } [HttpPost] [ProducesResponseType(StatusCodes.Status202Accepted)] [ProducesResponseType(StatusCodes.Status400BadRequest)] [Route("/scan/url")] public IActionResult ScanUrl(UrlRequest request) { BackgroundJob.Enqueue( x => x.ScanUrl(request.InputUrl, request.CallbackUrl)); return Accepted(request.CallbackUrl); } } }