using System; using System.IO; using System.Threading.Tasks; using MalwareMultiScan.Api.Services; using MalwareMultiScan.Shared.Attributes; using MalwareMultiScan.Shared.Data.Responses; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; namespace MalwareMultiScan.Api.Controllers { [ApiController] [Route("queue")] [Produces("application/json")] public class QueueController : Controller { private readonly ScanResultService _scanResultService; public QueueController( ScanResultService scanResultService) { _scanResultService = scanResultService; } [HttpPost("file")] [ProducesResponseType(typeof(ResultResponse), StatusCodes.Status201Created)] [ProducesResponseType(StatusCodes.Status400BadRequest)] public async Task ScanFile([FromForm] IFormFile file) { var result = await _scanResultService.CreateScanResult(); string storedFileId; await using (var uploadFileStream = file.OpenReadStream()) storedFileId = await _scanResultService.StoreFile(file.Name, uploadFileStream); await _scanResultService.QueueUrlScan(result, Url.Action("Index", "Download", new {id = storedFileId}, Request.Scheme, Request.Host.Value)); return Created(Url.Action("Index", "ScanResults", new {id = result.Id}, Request.Scheme, Request.Host.Value), result); } [HttpPost("url")] [ProducesResponseType(typeof(ResultResponse), StatusCodes.Status201Created)] [ProducesResponseType(StatusCodes.Status400BadRequest)] public async Task ScanUrl([FromForm] [UrlValidation] Uri url) { var result = await _scanResultService.CreateScanResult(); var resultUrl = Url.Action("Index", "ScanResults", new {id = result.Id}, Request.Scheme, Request.Host.Value); await _scanResultService.QueueUrlScan(result, url.ToString()); return Created(resultUrl, result); } } }