File: Settings\Items\SourceItem.cs
Web Access
Project: src\src\nuget-client\src\NuGet.Core\NuGet.Configuration\NuGet.Configuration.csproj (NuGet.Configuration)
// Copyright(c) .NET Foundation.All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.

using System.Xml.Linq;

namespace NuGet.Configuration
{
    public sealed class SourceItem : AddItem
    {
        public string? ProtocolVersion
        {
            get
            {
                if (Attributes.TryGetValue(ConfigurationConstants.ProtocolVersionAttribute, out var attribute))
                {
                    return Settings.ApplyEnvironmentTransform(attribute);
                }

                return null;
            }
            set => AddOrUpdateAttribute(ConfigurationConstants.ProtocolVersionAttribute, value);
        }

        public string? AllowInsecureConnections
        {
            get
            {
                if (Attributes.TryGetValue(ConfigurationConstants.AllowInsecureConnections, out var attribute))
                {
                    return Settings.ApplyEnvironmentTransform(attribute);
                }

                return null;
            }
            set => AddOrUpdateAttribute(ConfigurationConstants.AllowInsecureConnections, value);
        }

        public string? DisableTLSCertificateValidation
        {
            get
            {
                if (Attributes.TryGetValue(ConfigurationConstants.DisableTLSCertificateValidation, out var attribute))
                {
                    return Settings.ApplyEnvironmentTransform(attribute);
                }

                return null;
            }
            set => AddOrUpdateAttribute(ConfigurationConstants.DisableTLSCertificateValidation, value);
        }

        public SourceItem(string key, string value)
            : this(key, value, protocolVersion: "", allowInsecureConnections: "", disableTLSCertificateValidation: "")
        {
        }

        public SourceItem(string key, string value, string? protocolVersion)
            : this(key, value, protocolVersion, allowInsecureConnections: "", disableTLSCertificateValidation: "")
        {
        }

        public SourceItem(string key, string value, string? protocolVersion, string? allowInsecureConnections)
            : this(key, value, protocolVersion, allowInsecureConnections, disableTLSCertificateValidation: "")
        {
        }

        public SourceItem(string key, string value, string? protocolVersion, string? allowInsecureConnections, string? disableTLSCertificateValidation)
            : base(key, value)
        {
            if (!string.IsNullOrEmpty(protocolVersion))
            {
                ProtocolVersion = protocolVersion;
            }
            if (!string.IsNullOrEmpty(allowInsecureConnections))
            {
                AllowInsecureConnections = allowInsecureConnections;
            }
            if (!string.IsNullOrEmpty(disableTLSCertificateValidation))
            {
                DisableTLSCertificateValidation = disableTLSCertificateValidation;
            }
        }

        internal SourceItem(XElement element, SettingsFile origin)
            : base(element, origin)
        {
        }

        public override SettingBase Clone()
        {
            var newSetting = new SourceItem(Key, Value, ProtocolVersion, AllowInsecureConnections, DisableTLSCertificateValidation);

            if (Origin != null)
            {
                newSetting.SetOrigin(Origin);
            }

            return newSetting;
        }
    }
}