diff --git a/src/isnd/Controllers/Packages/PackagesController.GetPackage.cs b/src/isnd/Controllers/Packages/PackagesController.GetPackage.cs index 1d03246..5847662 100644 --- a/src/isnd/Controllers/Packages/PackagesController.GetPackage.cs +++ b/src/isnd/Controllers/Packages/PackagesController.GetPackage.cs @@ -4,6 +4,7 @@ using Microsoft.AspNetCore.Mvc; using isnd.Attributes; using isnd.Entities; using isn.abst; +using System.Linq; namespace isnd.Controllers { @@ -15,17 +16,26 @@ namespace isnd.Controllers public IActionResult GetPackage( [FromRoute][SafeName][Required] string id, [FromRoute][SafeName][Required] string version, - [FromRoute] string idf, [FromRoute] string versionFromName) + [FromRoute] string idf, + [FromRoute] string versionFromName) { - var pkgPath = Path.Combine(isndSettings.PackagesRootDir, - id, version, $"{id}-{version}." + Constants.PacketFileExtension - ); + DirectoryInfo pkgsDirInfo = new DirectoryInfo(isndSettings.PackagesRootDir); - FileInfo pkgFileInfo = new FileInfo(pkgPath); + var pkgDirInfo = pkgsDirInfo.GetDirectories().FirstOrDefault( + s=>string.Compare(s.Name,id, System.StringComparison.InvariantCultureIgnoreCase)==0); + if (pkgDirInfo==null) + return BadRequest("Package does´nt exist in the file system."); + var pkgVersionDirInfo = pkgDirInfo.GetDirectories().FirstOrDefault( + s=>s.Name==version); + var pkgNameSpec=$"{id}-{version}.{Constants.PacketFileExtension}"; + + FileInfo pkgFileInfo = pkgVersionDirInfo.GetFiles() + .FirstOrDefault(p=>string.Compare(p.Name,pkgNameSpec, + System.StringComparison.InvariantCultureIgnoreCase)==0); if (!pkgFileInfo.Exists) { - return BadRequest("Package does´nt exist in the file system."); + return BadRequest("Package version does´nt exist in the file system."); } return File(pkgFileInfo.OpenRead(), "application/zip; charset=binary"); } diff --git a/src/isnd/Data/Packages/Package.cs b/src/isnd/Data/Packages/Package.cs index 920a225..0f8342b 100644 --- a/src/isnd/Data/Packages/Package.cs +++ b/src/isnd/Data/Packages/Package.cs @@ -49,6 +49,11 @@ namespace isnd.Data.Packages public virtual Commit LatestCommit { get; set; } + internal static bool ValidateId(string pkgId) + { + return !string.IsNullOrWhiteSpace(pkgId); + } + public PackageVersion GetLatestVersion() { var latest = Versions.Max(v => v.NugetVersion);