public NuGetHttpSourceAuthenticationHandler(
            PackageSource packageSource,
            IHttpCredentialsHandler credentialsHandler,
            ICredentialService credentialService)
        {
            if (packageSource == null)
            {
                throw new ArgumentNullException(nameof(packageSource));
            }

            this.packageSource = packageSource;

            if (credentialsHandler == null)
            {
                throw new ArgumentNullException(nameof(credentialsHandler));
            }

            this.credentialsHandler = credentialsHandler;

            // credential service is optional as credentials may be attached to a package source
            this.credentialService = credentialService;

            // Create a new wrapper for ICredentials that can be modified

            if (credentialService == null || !credentialService.HandlesDefaultCredentials)
            {
                // This is used to match the value of HttpClientHandler.UseDefaultCredentials = true
                credentials = new HttpSourceCredentials(CredentialCache.DefaultNetworkCredentials);
            }
            else
            {
                credentials = new HttpSourceCredentials();
            }

            if (packageSource.Credentials != null &&
                packageSource.Credentials.IsValid())
            {
                var sourceCredentials = new NetworkCredential(packageSource.Credentials.Username, packageSource.Credentials.Password);
                credentials.Credentials = sourceCredentials;
            }

            this.credentialsHandler.Credentials = credentials;
            // Always take the credentials from the helper.
            this.credentialsHandler.UseDefaultCredentials = false;
        }
        HttpSourceAuthenticationHandler(
            Uri source,
            IHttpCredentialsHandler credentialsHandler,
            HttpMessageHandler innerHandler,
            ICredentialService credentialService)
            : base(innerHandler)
        {
            this.source        = source ?? throw new ArgumentNullException(nameof(source));
            credentialsHandler = credentialsHandler ?? throw new ArgumentNullException(nameof(credentialsHandler));

            this.credentialService = credentialService;

            // Create a new wrapper for ICredentials that can be modified
            // This is used to match the value of HttpClientHandler.UseDefaultCredentials = true
            credentials = new HttpSourceCredentials(CredentialCache.DefaultNetworkCredentials);

            credentialsHandler.Credentials = credentials;
            // Always take the credentials from the helper.
            credentialsHandler.UseDefaultCredentials = false;
        }
 public HttpSourceAuthenticationHandler(Uri source, IHttpCredentialsHandler credentialsHandler, HttpMessageHandler innerHandler)
     : this(source, credentialsHandler, innerHandler, HttpClientProvider.CredentialService)
 {
 }