public override async Task CanProvideCredentialsAsync()

in CredentialProvider.Microsoft/CredentialProviders/Vsts/VstsCredentialProvider.cs [38:83]


        public override async Task<bool> CanProvideCredentialsAsync(Uri uri)
        {
            // If for any reason we reach this point and any of the three build task env vars are set, 
            // we should not try get credentials with this cred provider.
            string feedEndPointsJsonEnvVar = Environment.GetEnvironmentVariable(EnvUtil.BuildTaskExternalEndpoints);
            string uriPrefixesStringEnvVar = Environment.GetEnvironmentVariable(EnvUtil.BuildTaskUriPrefixes);
            string accessTokenEnvVar = Environment.GetEnvironmentVariable(EnvUtil.BuildTaskAccessToken);

            if (string.IsNullOrWhiteSpace(feedEndPointsJsonEnvVar) == false || string.IsNullOrWhiteSpace(uriPrefixesStringEnvVar) == false || string.IsNullOrWhiteSpace(accessTokenEnvVar) == false)
            {
                Verbose(Resources.BuildTaskCredProviderIsUsedError);
                return false;
            }

             var validHosts = EnvUtil.GetHostsFromEnvironment(Logger, EnvUtil.SupportedHostsEnvVar, new[]
             {
                 ".pkgs.vsts.me", // DevFabric
                 ".pkgs.codedev.ms", // DevFabric
                 ".pkgs.codeapp.ms", // AppFabric
                 ".pkgs.visualstudio.com", // Prod
                 ".pkgs.dev.azure.com" // Prod
             });

            bool isValidHost = validHosts.Any(host => uri.Host.EndsWith(host, StringComparison.OrdinalIgnoreCase));
            if (isValidHost)
            {
                Verbose(string.Format(Resources.HostAccepted, uri.Host));
                return true;
            }

            var azDevOpsType = await authUtil.GetAzDevDeploymentType(uri);
            if (azDevOpsType == AzDevDeploymentType.Hosted)
            {
                Verbose(Resources.ValidHeaders);
                return true;
            }

            if (azDevOpsType == AzDevDeploymentType.OnPrem)
            {
                Verbose(Resources.OnPremDetected);
                return false;
            }

            Verbose(string.Format(Resources.ExternalUri, uri));
            return false;
        }