using System.ComponentModel.DataAnnotations; 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( [Required, MaxFileSize] 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 CreatedAtAction("Index", "ScanResults", new {id = result.Id}, result); } [HttpPost("url")] [ProducesResponseType(typeof(ScanResult), StatusCodes.Status201Created)] [ProducesResponseType(StatusCodes.Status400BadRequest)] public async Task ScanUrl( [FromForm, Required, IsHttpUrl] string url) { var result = await _scanResultService.CreateScanResult(); await _scanResultService.QueueUrlScan(result, url); return CreatedAtAction("Index", "ScanResults", new {id = result.Id}, result); } } }