Esempio n. 1
0
        private SearchPackageConfiguration CreateSearchConfiguraton()
        {
            var newConfiguration = new SearchPackageConfiguration(GetWorkDirectory());

            if (!string.IsNullOrEmpty(ProjectDto.NugetServerUrl))
            {
                newConfiguration.AddSources(PackageType.Nuget, new[] { ProjectDto.NugetServerUrl });
            }
            return(newConfiguration);
        }
Esempio n. 2
0
        public Package SearchMetadata(string packageId, string version, SearchPackageConfiguration configuration, CancellationToken token = default)
        {
            // Try to retrieve package metadata, by reading nuspec file in nuget cache directory
            var nuspecMetadata   = GetPackageMetadataOnLocalCache(packageId, version);
            var packageDirectory = GetNugetCacheDirectory(packageId, version);

            if (nuspecMetadata != null)
            {
                var license = GetLicense(nuspecMetadata, packageDirectory);
                return(new Package()
                {
                    PackageId = packageId,
                    Version = version,
                    License = license.License,
                    LicenseType = license.LicenseType,
                    PackageType = PackageType.Nuget,
                    Description = nuspecMetadata.Element(XName.Get("description", nuspecMetadata.Name.NamespaceName))?.Value,
                    ProjectUrl = nuspecMetadata.Element(XName.Get("projectUrl", nuspecMetadata.Name.NamespaceName))?.Value,
                    RepositoryUrl = nuspecMetadata.Element(XName.Get("repository", nuspecMetadata.Name.NamespaceName))?.Attribute(XName.Get("url"))?.Value,
                    RepositoryType = nuspecMetadata.Element(XName.Get("repository", nuspecMetadata.Name.NamespaceName))?.Attribute(XName.Get("type"))?.Value,
                });
            }
            var sources = configuration.GetSources(PackageType);

            if (sources == null || sources.Length == 0)
            {
                return(new Package()
                {
                    PackageId = packageId,
                    Version = version,
                    License = ISearchPackage.NoneLicenseExpression,
                    PackageType = PackageType.Nuget
                });
            }
            // Retrieve package metadata by calling REST nuget api server
            string metadataAsXml = null;

            foreach (var source in sources.Where(e => !string.IsNullOrEmpty(e)))
            {
                try
                {
                    metadataAsXml = _webClient.Value.DownloadString($"{source}/Packages(Id='{packageId}',Version='{version}')");
                }
                catch (WebException)
                {
                    _logger.LogDebug($"Unable to find metadata for the package {packageId}@{version} in source {source}");
                }
                if (metadataAsXml != null)
                {
                    break;
                }
            }
            string licenseUrl  = null;
            string description = null;
            string projectUrl  = null;

            if (metadataAsXml != null)
            {
                var document   = XDocument.Parse(metadataAsXml);
                var properties = document.Root.Elements().FirstOrDefault(e => e.Name.LocalName == "properties");
                licenseUrl  = properties?.Elements().FirstOrDefault(e => e.Name.LocalName == "LicenseUrl")?.Value;
                description = properties?.Elements().FirstOrDefault(e => e.Name.LocalName == "Description").Value;
                projectUrl  = properties?.Elements().FirstOrDefault(e => e.Name.LocalName == "ProjectUrl")?.Value;
            }
            else
            {
                _logger.LogInformation($"Unable to find Meta-data on package {packageId} version {version} on sources {string.Join(";", sources)}");
            }
            return(new Package()
            {
                PackageId = packageId,
                Version = version,
                License = licenseUrl,
                LicenseType = LicenseType.Url,
                PackageType = PackageType.Nuget,
                Description = description,
                ProjectUrl = projectUrl,
            });
        }