private SearchPackageConfiguration CreateSearchConfiguraton() { var newConfiguration = new SearchPackageConfiguration(GetWorkDirectory()); if (!string.IsNullOrEmpty(ProjectDto.NugetServerUrl)) { newConfiguration.AddSources(PackageType.Nuget, new[] { ProjectDto.NugetServerUrl }); } return(newConfiguration); }
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, }); }