using Microsoft.AspNetCore.Mvc; using OI.Metrology.Server.Models; using OI.Metrology.Shared.Models; using OI.Metrology.Shared.Models.Stateless; using OI.Metrology.Shared.Services; using System.Net; using System.Text.Json; namespace OI.Metrology.Server.ApiControllers; [ApiController] [Route("api/[controller]")] public partial class InboundController : ControllerBase, IInboundController { private readonly ILogger _Logger; private readonly AppSettings _AppSettings; private readonly IInboundRepository _InboundRepository; private readonly IAttachmentsService _AttachmentsService; private readonly IInboundDataService _InboundDataService; private readonly IMetrologyRepository _MetrologyRepository; public InboundController(AppSettings appSettings, ILogger logger, IMetrologyRepository metrologyRepository, IInboundRepository inboundRepository, IInboundDataService inboundDataService, IAttachmentsService attachmentsService) { _Logger = logger; _AppSettings = appSettings; _InboundRepository = inboundRepository; _AttachmentsService = attachmentsService; _InboundDataService = inboundDataService; _MetrologyRepository = metrologyRepository; } [HttpPost] [Route("{tooltype}")] public IActionResult Post(string tooltype, JsonElement? jsonElement) { IPAddress? remoteIP = HttpContext.Connection.RemoteIpAddress; if (!_InboundRepository.IsIPAddressAllowed(_AppSettings.InboundApiAllowedIPList, remoteIP)) { _Logger.LogInformation($"Rejected remote IP: {remoteIP}"); return Unauthorized("Remote IP is not on allowed list"); } else { DataResponse dataResponse = _InboundRepository.Data(_MetrologyRepository, _InboundDataService, tooltype, jsonElement); if (dataResponse.Errors.Count == 0) return Ok(dataResponse); else return BadRequest(dataResponse); } } [HttpPost] [Route("{tooltype}/attachment")] public IActionResult AttachFile(string tooltype, Attachment? attachment) { IPAddress? remoteIP = HttpContext.Connection.RemoteIpAddress; if (!_InboundRepository.IsIPAddressAllowed(_AppSettings.InboundApiAllowedIPList, remoteIP)) { _Logger.LogInformation($"Rejected remote IP: {remoteIP}"); return Unauthorized("Remote IP is not on allowed list"); } else { _InboundRepository.AttachFile(_MetrologyRepository, _AttachmentsService, tooltype, attachment); return Ok(); } } }