72 lines
2.5 KiB
C#
Raw Normal View History

using System;
using System.IO;
using System.Threading.Tasks;
using EasyNetQ;
using MalwareMultiScan.Api.Data.Configuration;
using MalwareMultiScan.Api.Data.Models;
2020-10-26 17:06:29 +02:00
using MalwareMultiScan.Backends.Messages;
using Microsoft.Extensions.Configuration;
2020-10-26 17:06:29 +02:00
using Microsoft.Extensions.Logging;
using YamlDotNet.Serialization;
using YamlDotNet.Serialization.NamingConventions;
namespace MalwareMultiScan.Api.Services
{
/// <summary>
/// Scan backends service.
/// </summary>
public class ScanBackendService
{
private readonly IBus _bus;
2020-10-26 17:06:29 +02:00
private readonly ILogger<ScanBackendService> _logger;
/// <summary>
/// Create scan backend service.
/// </summary>
/// <param name="configuration">Configuration.</param>
/// <param name="bus">Service bus.</param>
/// <param name="logger">Logger.</param>
/// <exception cref="FileNotFoundException">Missing BackendsConfiguration YAML file.</exception>
2020-10-26 17:06:29 +02:00
public ScanBackendService(IConfiguration configuration, IBus bus, ILogger<ScanBackendService> logger)
{
_bus = bus;
2020-10-26 17:06:29 +02:00
_logger = logger;
var configurationPath = configuration.GetValue<string>("BackendsConfiguration");
if (!File.Exists(configurationPath))
throw new FileNotFoundException("Missing BackendsConfiguration YAML file", configurationPath);
var configurationContent = File.ReadAllText(configurationPath);
var deserializer = new DeserializerBuilder()
.WithNamingConvention(CamelCaseNamingConvention.Instance)
.Build();
List = deserializer.Deserialize<ScanBackend[]>(configurationContent);
}
/// <summary>
/// List of available scan backends.
/// </summary>
public ScanBackend[] List { get; }
2020-10-26 17:06:29 +02:00
/// <summary>
/// Queue URL scan.
/// </summary>
/// <param name="result">Scan result instance.</param>
/// <param name="backend">Scan backend.</param>
/// <param name="fileUrl">File download URL.</param>
public async Task QueueUrlScan(ScanResult result, ScanBackend backend, string fileUrl)
{
2020-10-26 17:06:29 +02:00
_logger.LogInformation(
$"Queueing scan for {result.Id} on {backend.Id} at {fileUrl}");
await _bus.SendAsync(backend.Id, new ScanRequestMessage
{
Id = result.Id,
Uri = new Uri(fileUrl)
});
}
}
}