using Microsoft.AspNetCore.Mvc;
using RemoteExec.Server.Hubs;
namespace RemoteExec.Server.Controllers;
///
/// Controller for handling assembly upload requests from clients.
///
[ApiController]
[Route("/")]
public class AssemblyController(ILogger logger) : ControllerBase
{
///
/// Receives an assembly binary from a client in response to an assembly request.
///
/// The unique identifier for the assembly request.
/// An action result indicating success or failure.
[HttpPost("provide-assembly")]
public async Task ProvideAssembly([FromQuery] Guid requestId)
{
try
{
using MemoryStream ms = new MemoryStream();
await Request.Body.CopyToAsync(ms);
byte[] assemblyBytes = ms.ToArray();
logger.LogInformation("Received assembly for request {RequestId}, size: {Size} bytes", requestId, assemblyBytes.Length);
await RemoteExecutionHub.ProvideAssembly(requestId, assemblyBytes);
return Ok();
}
catch (Exception ex)
{
logger.LogError(ex, "Error providing assembly for request {RequestId}", requestId);
return StatusCode(500, ex.Message);
}
}
}