示例#1
0
        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;
 }
示例#3
0
 public DonutController(IDonutService donutService)
 {
     _donutService = donutService;
 }