示例#1
0
        void EnsureSecrets(IActivityMonitor m)
        {
            if (_secretEnsured)
            {
                return;
            }
            _secretEnsured = true;
            string secret;
            var    secretOrName = Feed.Credentials?.PasswordOrSecretKeyName;

            if (Feed.Credentials.IsSecretKeyName)
            {
                secret = Client.SecretKeyStore.GetSecretKey(m, secretOrName, false);
                if (secret == null)
                {
                    m.Error($"Missing secret key. No available secret available for {secretOrName}.");
                    throw new InvalidOperationException();
                }
            }
            else
            {
                secret = secretOrName;
            }
            NuGetClient.EnsureVSSFeedEndPointCredentials(m, PackageSource.Source, secret);
        }
示例#2
0
 internal NuGetRepositoryBase(
     NuGetClient c,
     PackageSource source,
     PackageQualityFilter qualityFilter)
     : base(c, source)
 {
     QualityFilter        = qualityFilter;
     UniqueRepositoryName = NuGetClient.NuGetType.Name + ':' + source.Name;
 }
 internal NuGetStandardRepository(
     NuGetClient c,
     string url,
     string name,
     PackageQualityFilter qualityFilter,
     string secretKeyName)
     : base(c, new PackageSource(url, name), qualityFilter)
 {
     SecretKeyName = secretKeyName;
 }
示例#4
0
            public bool CheckSecret(IActivityMonitor m, bool throwOnMissing)
            {
                if (_checkedSecret.HasValue)
                {
                    return(_checkedSecret.Value);
                }
                // If we are bound to a repository that has a secret, its configuration, if available, is the one to use!
                INuGetRepository repo = _baseFeed as INuGetRepository;
                bool             isBoundToProtectedRepository = repo != null && !String.IsNullOrEmpty(repo.SecretKeyName);

                if (isBoundToProtectedRepository)
                {
                    var fromRepo = !String.IsNullOrEmpty(repo.ResolveSecret(m, false));
                    if (fromRepo)
                    {
                        m.Trace($"Feed '{Name}' uses secret from repository '{repo.Name}'.");
                        _checkedSecret = true;
                        return(true);
                    }
                }
                if (Credentials != null)
                {
                    string secret;
                    if (Credentials.IsSecretKeyName == true)
                    {
                        secret         = _baseFeed.Client.SecretKeyStore.GetSecretKey(m, Credentials.PasswordOrSecretKeyName, throwOnMissing);
                        _checkedSecret = secret != null;
                        if (_checkedSecret == true)
                        {
                            m.Trace($"Feed '{Name}' uses its configured credential '{Credentials.PasswordOrSecretKeyName}'.");
                        }
                    }
                    else
                    {
                        secret         = Credentials.PasswordOrSecretKeyName;
                        _checkedSecret = true;
                        m.Trace($"Feed '{Name}' uses its configured password.");
                    }
                    if (_checkedSecret == true)
                    {
                        NuGetClient.EnsureVSSFeedEndPointCredentials(m, Url, secret);
                    }
                    else
                    {
                        m.Error($"Feed '{Name}': unable to resolve the credentials.");
                    }
                }
                else
                {
                    // There is no credential: let it be and hope it works.
                    m.Trace($"Feed '{Name}' has no available secret. It must be a public feed.");
                }
                return(_checkedSecret ?? false);
            }
示例#5
0
        internal NuGetAzureRepository(
            NuGetClient c,
            string name,
            PackageQualityFilter qualityFilter,
            string organization,
            string feedName,
            string label,
            string projectName)
            : base(c, new PackageSource(
                       projectName != null ?
                       $"https://pkgs.dev.azure.com/{organization}/{projectName}/_packaging/{feedName}{label}/nuget/v3/index.json"
                : $"https://pkgs.dev.azure.com/{organization}/_packaging/{feedName}{label}/nuget/v3/index.json"

                       , name), qualityFilter)
        {
            Organization = organization;
            FeedName     = feedName;
            Label        = label;
            ProjectName  = projectName;
        }
示例#6
0
        protected async Task <T> SafeCall <T>(IActivityMonitor m, Func <SourceRepository, MetadataResource, NuGetLoggerAdapter, Task <T> > f)
        {
            EnsureSecrets(m);
            bool retry  = false;
            var  logger = new NuGetLoggerAdapter(m);

            NuGetClient.Initalize(logger, out var mustRefresh);
            if (mustRefresh || _sourceRepository == null)
            {
                _sourceRepository = new SourceRepository(PackageSource, NuGetClient.StaticProviders);
            }
again:
            MetadataResource meta = null;

            try
            {
                meta = await _sourceRepository.GetResourceAsync <MetadataResource>();

                return(await f(_sourceRepository, meta, logger));
            }
            catch (MissingRequiredSecretException)
            {
                throw; //It's useless to retry in this case
            }
            catch (Exception ex)
            {
                if (meta != null && !retry)
                {
                    retry = true;
                    if (CanRetry(meta, logger, ex))
                    {
                        goto again;
                    }
                }
                throw;
            }
        }
示例#7
0
 private protected NuGetFeedBase(NuGetClient c, PackageSource packageSource)
 {
     Client        = c;
     PackageSource = packageSource;
 }
示例#8
0
 internal NuGetFeedBase(IActivityMonitor m, NuGetClient c, string url, string name, SimpleCredentials creds)
     : this(c, new PackageSource(url, name))
 {
     HandleFeed(c.SecretKeyStore, url, name, creds);
 }
示例#9
0
 protected override void OnSecretResolved(IActivityMonitor m, string secret)
 {
     NuGetClient.EnsureVSSFeedEndPointCredentials(m, Url, secret);
 }