using System; using System.Threading.Tasks; using MalwareMultiScan.Api.Attributes; using MalwareMultiScan.Api.Data.Models; using MalwareMultiScan.Api.Services; 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(ScanResult), 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(ScanResult), StatusCodes.Status201Created)] [ProducesResponseType(StatusCodes.Status400BadRequest)] public async Task ScanUrl([FromForm] [HttpUrlValidation] 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); } } }