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
|
|
|
|
{
|
2020-10-25 16:11:36 +02:00
|
|
|
|
|
|
|
[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 17:08:40 +03:00
|
|
|
{
|
2020-10-20 16:20:38 +03:00
|
|
|
await request.InputFile.CopyToAsync(temporaryFileSteam);
|
2020-10-20 17:08:40 +03:00
|
|
|
}
|
|
|
|
|
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")]
|
2020-10-20 17:08:40 +03:00
|
|
|
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);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|