55 lines
1.7 KiB
C#
Raw Normal View History

2020-10-20 16:20:38 +03:00
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");
}
2020-10-20 16:20:38 +03:00
[HttpPost]
[ProducesResponseType(StatusCodes.Status202Accepted)]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
[Route("/scan/file")]
public async Task<IActionResult> ScanFile([FromForm] FileRequest request)
{
var temporaryFile = Path.GetTempFileName();
await using (var temporaryFileSteam = System.IO.File.OpenWrite(temporaryFile))
{
2020-10-20 16:20:38 +03:00
await request.InputFile.CopyToAsync(temporaryFileSteam);
}
2020-10-20 16:20:38 +03:00
BackgroundJob.Enqueue<ScanJob>(
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)
2020-10-20 16:20:38 +03:00
{
BackgroundJob.Enqueue<ScanJob>(
x => x.ScanUrl(request.InputUrl, request.CallbackUrl));
return Accepted(request.CallbackUrl);
}
}
}