public async Task Configure()

in src/governance/ui/Controllers/WorkspacesController.cs [56:131]


    public async Task<IActionResult> Configure(WorkspaceConfigurationViewModel model)
    {
        if (model?.SigningCertPemFile == null || model.SigningCertPemFile.Length <= 0)
        {
            return this.BadRequest("No file was uploaded.");
        }

        if (model?.SigningKeyPemFile == null || model.SigningKeyPemFile.Length <= 0)
        {
            return this.BadRequest("No file was uploaded.");
        }

        if (string.IsNullOrWhiteSpace(model?.CcfEndpoint))
        {
            return this.BadRequest("No CCF endpoint specified.");
        }

        bool result = Uri.TryCreate(model.CcfEndpoint, UriKind.Absolute, out var uriResult)
        && (uriResult.Scheme == Uri.UriSchemeHttp || uriResult.Scheme == Uri.UriSchemeHttps);
        if (!result)
        {
            return this.BadRequest($"CCF endpoint value '{model.CcfEndpoint}' is not a valid URL.");
        }

        string configureUrl =
            $"{this.configuration.GetEndpoint()}/configure";
        using (HttpRequestMessage request = new(HttpMethod.Post, configureUrl))
        {
            using MultipartFormDataContent multipartContent = new()
            {
                {
                    new StringContent(
                    model.CcfEndpoint,
                    Encoding.UTF8,
                    MediaTypeNames.Text.Plain),
                    "CcfEndpoint"
                },
                {
                    new StreamContent(
                    model.SigningCertPemFile.OpenReadStream()),
                    "SigningCertPemFile",
                    "SigningCertPemFile"
                },
                {
                    new StreamContent(
                    model.SigningKeyPemFile.OpenReadStream()),
                    "SigningKeyPemFile",
                    "SigningKeyPemFile"
                }
            };

            if (model.ServiceCertPemFile != null)
            {
                multipartContent.Add(
                    new StreamContent(
                        model.ServiceCertPemFile.OpenReadStream()),
                    "ServiceCertPemFile",
                    "ServiceCertPemFile");
            }

            request.Content = multipartContent;
            using var client = new HttpClient();
            using var response = await client.SendAsync(request);
            if (response.StatusCode == HttpStatusCode.OK)
            {
                return this.RedirectToAction("Index", "Settings");
            }
            else
            {
                return this.View("Error", new ErrorViewModel
                {
                    Content = await response.Content.ReadAsStringAsync()
                });
            }
        }
    }