public async Task PutNetwork()

in src/ccf/ccf-provider-client/Controllers/NetworksController.cs [37:121]


    public async Task<IActionResult> PutNetwork(
        [FromRoute] string networkName,
        [FromBody] PutNetworkInput content)
    {
        var error = ValidateCreateInput();
        if (error != null)
        {
            return error;
        }

        CcfNetworkProvider ccfNetworkProvider = this.GetNetworkProvider(content.InfraType);
        var initialMembers = content.Members.ConvertAll(x => new InitialMember
        {
            EncryptionPublicKey = x.EncryptionPublicKey,
            Certificate = x.Certificate,
            MemberData = x.MemberData
        });

        CcfNetwork network = await
            ccfNetworkProvider.CreateNetwork(
                networkName,
                content.NodeCount,
                initialMembers,
                content.NodeLogLevel,
                SecurityPolicyConfigInput.Convert(content.SecurityPolicy),
                content.ProviderConfig);

        return this.Ok(network);

        IActionResult? ValidateCreateInput()
        {
            if (!string.IsNullOrEmpty(content.NodeLogLevel))
            {
                List<string> allowedValues =
                [
                    "Trace", "Debug", "Info", "Fail", "Fatal"
                ];

                if (!allowedValues.Contains(content.NodeLogLevel))
                {
                    return this.BadRequest(new ODataError(
                        code: "InvalidNodeLogLevel",
                        message: $"Value should be one of: {string.Join(",", allowedValues)}"));
                }
            }

            if (content.Members.Count == 0)
            {
                return this.BadRequest(new ODataError(
                    code: "MembersMissing",
                    message: "At least one member is required."));
            }

            foreach (var m in content.Members)
            {
                try
                {
                    using var c = X509Certificate2.CreateFromPem(m.Certificate);
                }
                catch (Exception e)
                {
                    return this.BadRequest(new ODataError(
                        code: "InvalidCertificate",
                        message: e.Message));
                }

                if (!string.IsNullOrEmpty(m.EncryptionPublicKey))
                {
                    try
                    {
                        using var rsa = RSA.Create();
                        rsa.ImportFromPem(m.EncryptionPublicKey);
                    }
                    catch (Exception e)
                    {
                        return this.BadRequest(new ODataError(
                            code: "InvalidEncryptionPublicKey",
                            message: e.Message));
                    }
                }
            }

            return null;
        }
    }