public async Task <IActionResult> Index(string id, RegistrationsContentMode mode, CancellationToken cancellationToken) { var useGz = mode == RegistrationsContentMode.GZip || mode == RegistrationsContentMode.SemVer2; var useSemVer2 = mode == RegistrationsContentMode.SemVer2; if (useGz) { this.Response.Headers.Add(HeaderNames.ContentEncoding, "gzip"); this.Response.Body = new GZipStream(this.Response.Body, CompressionLevel.Optimal); } var dbpackage = await this.Database.Packages .Include(x => x.Versions) .ThenInclude(x => x.Dependencies) .Include(x => x.Authors) .Include(x => x.Tags) .FirstOrDefaultAsync(x => x.IdLowercase == id, cancellationToken) .ConfigureAwait(false); if (dbpackage == null) { return(this.NotFound()); } var dbversions = dbpackage.Versions .Where(x => !useSemVer2 ? !x.NuGetVersion.IsSemVer2 : true) .OrderBy(x => x.NuGetVersion) .ToList(); return(this.Json(this.PrepareIndex(mode, dbpackage, dbversions))); }
private RegistrationsLeafModel PrepareLeaf(RegistrationsContentMode mode, Package dbpackage, PackageVersion dbversion) => new RegistrationsLeafModel { LeafUrl = this.Url.AbsoluteUrl("Leaf", "RegistrationsBase", this.HttpContext, new { mode, id = dbpackage.IdLowercase, version = dbversion.VersionLowercase }), CatalogEntry = new CatalogEntryModel { CatalogUrl = this.Url.AbsoluteUrl("Leaf", "RegistrationsBase", this.HttpContext, new { mode, id = dbpackage.IdLowercase, version = dbversion.VersionLowercase }), Authors = dbpackage.AuthorNames, DependencyGroups = this.PrepareDependencyGroups(dbversion), Deprecation = null, Description = dbpackage.Description, IconUrl = dbpackage.IconUrl, Id = dbpackage.Id, LicenseUrl = dbpackage.LicenseUrl, LicenseExpression = null, IsListed = dbpackage.IsListed, MinimumClientVersion = dbpackage.MinimumClientVersion, ProjectUrl = dbpackage.ProjectUrl, PublishedAt = dbpackage.PublishedAt.Value, RequiresLicenseAcceptance = dbpackage.RequiresLicenseAcceptance, Summary = dbpackage.Summary, Tags = dbpackage.TagNames, Title = dbpackage.Title, Version = dbversion.Version }, IsListed = dbversion.IsListed, ContentUrl = this.Url.AbsoluteUrl("Contents", "PackageBase", this.HttpContext, new { id = dbpackage.IdLowercase, version = dbversion.VersionLowercase, filename = $"{dbpackage.IdLowercase}.{dbversion.VersionLowercase}" }), PublishedAt = dbversion.PublishedAt.Value, RegistrationIndexUrl = this.Url.AbsoluteUrl("Index", "RegistrationsBase", this.HttpContext, new { mode, id = dbpackage.IdLowercase }) };
public async Task <IActionResult> Page(string id, string minVersion, string maxVersion, RegistrationsContentMode mode, CancellationToken cancellationToken) { var useGz = mode == RegistrationsContentMode.GZip || mode == RegistrationsContentMode.SemVer2; var useSemVer2 = mode == RegistrationsContentMode.SemVer2; if (useGz) { this.Response.Headers.Add(HeaderNames.ContentEncoding, "gzip"); this.Response.Body = new GZipStream(this.Response.Body, CompressionLevel.Optimal); } var dbpackage = await this.Database.Packages .Include(x => x.Versions) .ThenInclude(x => x.Dependencies) .Include(x => x.Authors) .Include(x => x.Tags) .FirstOrDefaultAsync(x => x.IdLowercase == id, cancellationToken) .ConfigureAwait(false); if (dbpackage == null) { return(this.NotFound()); } var nvMin = NuGetVersion.Parse(minVersion); var nvMax = NuGetVersion.Parse(maxVersion); var dbversions = dbpackage.Versions .Where(x => x.NuGetVersionLowercase >= nvMin && x.NuGetVersionLowercase <= nvMax && (!useSemVer2 ? !x.NuGetVersion.IsSemVer2 : true)) .OrderBy(x => x.NuGetVersion) .ToList(); if (dbversions.Count > 64) { return(this.BadRequest(new { message = "Too wide version range." })); } return(this.Json(this.PreparePage(mode, dbpackage, dbversions, (minVersion, maxVersion), true))); }
private RegistrationsPageModel PreparePage(RegistrationsContentMode mode, Package dbpackage, IEnumerable <PackageVersion> dbversions, (string min, string max) versionRange, bool inlineVersions)