using System.Linq; using System.Threading.Tasks; using isnd.Services; using isnd.Entities; using Microsoft.AspNetCore.Mvc; using System.Collections.Generic; using NuGet.Versioning; namespace isnd.Controllers { public partial class PackagesController { // https://docs.microsoft.com/en-us/nuget/api/catalog-resource#versioning [HttpGet(_pkgRootPrefix + ApiConfig.Catalog)] public IActionResult CatalogIndex() { return Ok(PackageManager.CurrentCatalogIndex); } [HttpGet(_pkgRootPrefix + ApiConfig.CatalogPage + "-{id}")] public IActionResult Index(string id) { // https://docs.microsoft.com/en-us/nuget/api/catalog-resource#versioning return Ok(PackageManager.CurrentCatalogPages[int.Parse(id)]); } [HttpGet(_pkgRootPrefix + "{apiVersion}/" + ApiConfig.Registration + "/{id}/index.json")] public async Task CatalogRegistrationAsync(string apiVersion, string id, string lower) { bool askForindex = lower == null; if (askForindex) { string sublower = lower.Substring(0, lower.Length - ApiConfig.IndexDotJson.Length); var pkgFromname = packageManager.SearchByName(id, 0, 1); if (pkgFromname == null) return NotFound(); foreach (var item in pkgFromname.Items) { item.Id = this.Url.Action(); } return Ok(pkgFromname); } else { if (!NuGetVersion.TryParse(lower, out NuGetVersion version)) return BadRequest(lower); var pkgFromname = packageManager.GetVersions(id, version, true); if (pkgFromname == null) return NotFound(); return Ok(pkgFromname); } } [HttpGet(_pkgRootPrefix + ApiConfig.CatalogLeaf + "/{id}/{version}/{lower}/index.json")] public async Task CatalogLeafAsync(string id, string version, string lower) { var pkgvs = this.packageManager.GetCatalogLeaf(id, version, lower).ToArray(); if (pkgvs.Count() == 0) return NotFound(); List types = pkgvs.Select( v => v.Type ?? "Dependency" ).Distinct().ToList(); if (!types.Contains("PackageDelete")) types.Add("PackageDetails"); var last = pkgvs.Last(); var pub = last.LatestCommit.CommitTimeStamp; return Ok(new Data.Packages.Catalog.CatalogLeaf { CommitId = last.CommitId, Id = id, CommitTimeStamp = pub, Version = last.FullString, Published = pub, RefType = types.ToArray() }); } } }