public async Task <IActionResult> Customize([FromBody] RelayBuildRequest request, [FromServices] ICustomizer customizer, [FromServices] IDonutService donut) { if (request is null) { return(BadRequest("Failed to read RelayBuildRequest")); } RelayBuild newBuild = null; System.Action cleanupBuild = () => { if (newBuild != null) { try { context.RelayBuilds.Remove(newBuild); context.SaveChanges(); } catch (Exception) { } } }; try { newBuild = Convert(request); byte[] output; { context.RelayBuilds.Add(newBuild); context.SaveChanges(); } output = await customizer.CustomizeNodeRelay(newBuild); if (request.Type == Build.BinaryType.Shellcode) { request.Donut = request.Donut ?? new DonutRequest(); output = donut.GenerateShellcode(output, request.Donut, request.Architecture); } var buildName = String.IsNullOrEmpty(newBuild.Name) ? "" : $"_{newBuild.Name}"; return(File(output, "application/octet-stream", $"Relay_{newBuild.Arch.ToString().ToLower()}_{newBuild.BuildId:x}{buildName}.{GetBuildExtention(request)}")); } catch (TimeoutException e) { cleanupBuild(); return(StatusCode(StatusCodes.Status408RequestTimeout, e.Message)); } catch (CommandQueues.InvalidGateway e) { cleanupBuild(); return(StatusCode(StatusCodes.Status410Gone, $"Failed to add build, because {e.Message}. Try restarting gateway.")); } catch (Exception e) when(e is CustomizerError || e is GatewayResponseError) { cleanupBuild(); return(BadRequest(e.Message)); } catch (Exception e) { cleanupBuild(); return(StatusCode(StatusCodes.Status500InternalServerError, $"Unknown error. {e.Message}")); } }
public HomeController(IDonutService service, ILogger <HomeController> logger) { _service = service; _logger = logger; }
public DonutController(IDonutService donutService) { _donutService = donutService; }