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 { [HttpGet] [ProducesResponseType(StatusCodes.Status200OK)] [Route("/ping")] public IActionResult Ping() { return Ok("pong"); } [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([FromForm] UrlRequest request) { BackgroundJob.Enqueue( x => x.ScanUrl(request.InputUrl, request.CallbackUrl)); return Accepted(request.CallbackUrl); } } }