Пример #1
0
            public Facts()
            {
                Options = new Mock <IOptionsSnapshot <Catalog2RegistrationConfiguration> >();
                Config  = new Catalog2RegistrationConfiguration
                {
                    LegacyBaseUrl        = "https://example/reg/",
                    GzippedBaseUrl       = "https://example/reg-gz/",
                    SemVer2BaseUrl       = "https://example/reg-gz-semver2/",
                    GalleryBaseUrl       = "https://example-gallery/",
                    FlatContainerBaseUrl = "https://example/fc/",
                };
                Options.Setup(x => x.Value).Returns(() => Config);

                LeafItem       = new RegistrationLeafItem();
                Page           = new RegistrationPage();
                Index          = new RegistrationIndex();
                Hive           = HiveType.Legacy;
                Id             = V3Data.PackageId;
                PackageDetails = new PackageDetailsCatalogLeaf
                {
                    PackageVersion = V3Data.NormalizedVersion,
                };
                Commit = new CatalogCommit(V3Data.CommitId, V3Data.CommitTimestamp);

                SerializerSettings            = NuGetJsonSerialization.Settings;
                SerializerSettings.Formatting = Formatting.Indented;
            }
Пример #2
0
 public RegistrationLeaf NewLeaf(RegistrationLeafItem leafItem)
 {
     return(new RegistrationLeaf
     {
         Url = leafItem.Url,
         Types = JsonLdConstants.RegistrationLeafTypes,
         CatalogEntry = leafItem.CatalogEntry.Url,
         Listed = leafItem.CatalogEntry.Listed,
         PackageContent = leafItem.PackageContent,
         Published = leafItem.CatalogEntry.Published,
         Registration = leafItem.Registration,
         Context = JsonLdConstants.RegistrationLeafContext,
     });
 }
Пример #3
0
        public void UpdateLeafItem(RegistrationLeafItem leafItem, HiveType hive, string id, PackageDetailsCatalogLeaf packageDetails)
        {
            var parsedVersion = packageDetails.ParsePackageVersion();

            leafItem.Url            = _urlBuilder.GetLeafUrl(hive, id, parsedVersion);
            leafItem.Type           = JsonLdConstants.RegistrationLeafItemType;
            leafItem.PackageContent = GetPackageContentUrl(id, packageDetails);
            leafItem.Registration   = _urlBuilder.GetIndexUrl(hive, id);

            if (leafItem.CatalogEntry == null)
            {
                leafItem.CatalogEntry = new Protocol.Registration.RegistrationCatalogEntry();
            }

            UpdateCatalogEntry(hive, id, leafItem.CatalogEntry, packageDetails, parsedVersion);
        }
Пример #4
0
        private void UpdateLeafItemUrls(RegistrationLeafItem leafItem, HiveType fromHive, HiveType toHive)
        {
            leafItem.Url          = _urlBuilder.ConvertHive(fromHive, toHive, leafItem.Url);
            leafItem.Registration = _urlBuilder.ConvertHive(fromHive, toHive, leafItem.Registration);

            if (leafItem.CatalogEntry.DependencyGroups != null)
            {
                foreach (var dependencyGroup in leafItem.CatalogEntry.DependencyGroups)
                {
                    if (dependencyGroup.Dependencies == null)
                    {
                        continue;
                    }

                    foreach (var dependency in dependencyGroup.Dependencies)
                    {
                        dependency.Registration = _urlBuilder.ConvertHive(fromHive, toHive, dependency.Registration);
                    }
                }
            }
        }
Пример #5
0
 public static LeafInfo Existing(RegistrationLeafItem leafItem)
 {
     return(new LeafInfo(
                NuGetVersion.Parse(leafItem.CatalogEntry.Version),
                leafItem));
 }
Пример #6
0
 private LeafInfo(NuGetVersion version, RegistrationLeafItem leafItem)
 {
     Version  = version ?? throw new ArgumentNullException(nameof(version));
     LeafItem = leafItem ?? throw new ArgumentNullException(nameof(leafItem));
 }
        protected virtual Task <HttpResponseMessage> GetPackageRegistrationResponse(string uri)
        {
            const string uriPrefix = "https://nuget.test/registration/";
            const string uriSuffix = "/index.json";

            if (!uri.StartsWith(uriPrefix) || !uri.EndsWith(uriSuffix))
            {
                return(Task.FromResult(new HttpResponseMessage(System.Net.HttpStatusCode.NotFound)));
            }
            var packageId = uri.Substring(0, uri.Length - uriSuffix.Length).Substring(uriPrefix.Length);

            if (!_packages.TryGetValue(packageId, out Dictionary <string, string> versions))
            {
                return(Task.FromResult(new HttpResponseMessage(System.Net.HttpStatusCode.NotFound)));
            }
            // versions: key = version, value = full path to nupkg

            var registrationPage = new RegistrationPage()
            {
                Items = new List <RegistrationLeafItem>(),
                Lower = versions.Select(v => NuGetVersion.Parse(v.Key)).Min().ToNormalizedString(),
                Upper = versions.Select(v => NuGetVersion.Parse(v.Key)).Max().ToNormalizedString(),
            };

            foreach (var version in versions.OrderBy(v => NuGetVersion.Parse(v.Key)))
            {
                using var packageArchiveReader = new PackageArchiveReader(version.Value);
                var nuspecReader = packageArchiveReader.NuspecReader;

                var packageMetadata = new PackageSearchMetadataRegistration();
                SetPrivateProperty(packageMetadata, nameof(packageMetadata.PackageId), nuspecReader.GetId());
                SetPrivateProperty(packageMetadata, nameof(packageMetadata.Version), nuspecReader.GetVersion());

                var contentUrl = new Uri("https://nuget.test/flatcontainer/" + packageId + "/" + packageMetadata.Version.ToNormalizedString().ToLowerInvariant());

                var leafItem = new RegistrationLeafItem()
                {
                    CatalogEntry   = packageMetadata,
                    PackageContent = contentUrl
                };
                registrationPage.Items.Add(leafItem);
            }

            var registrationIndex = new RegistrationIndex()
            {
                Items = new List <RegistrationPage>()
                {
                    registrationPage
                }
            };

            string json;

            using (var stringWriter = new StringWriter())
            {
                JsonExtensions.JsonObjectSerializer.Serialize(stringWriter, registrationIndex);
                json = stringWriter.ToString();
            }

            return(Task.FromResult(new HttpResponseMessage()
            {
                Content = new StringContent(json)
            }));
        }