isn/src/isnd/Controllers/Packages/PackagesController.GetPacka...

70 lines
2.8 KiB
C#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

using System.ComponentModel.DataAnnotations;
using System.IO;
using Microsoft.AspNetCore.Mvc;
using isnd.Attributes;
using isnd.Entities;
using isn.abst;
using System.Linq;
using Microsoft.Extensions.Logging;
namespace isnd.Controllers
{
public partial class PackagesController
{
[HttpGet("~" + Constants.ApiVersionPrefix + ApiConfig.ContentBase + "/{id}/{version}/{idf}.{versionFromName}."
+ Constants.PacketFileExtension)]
public IActionResult GetPackage(
[FromRoute][SafeName][Required] string id,
[FromRoute][SafeName][Required] string version,
[FromRoute] string idf,
[FromRoute] string versionFromName)
{
DirectoryInfo pkgsDirInfo = new DirectoryInfo(isndSettings.PackagesRootDir);
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);
if (pkgVersionDirInfo==null)
return BadRequest("Package does´nt exist in the specified version.");
var pkgNameSpec=$"{id}-{version}.{Constants.PacketFileExtension}";
FileInfo pkgFileInfo = pkgVersionDirInfo.GetFiles()
.FirstOrDefault(p=>string.Compare(p.Name,pkgNameSpec,
System.StringComparison.InvariantCultureIgnoreCase)==0);
if (pkgFileInfo==null || !pkgFileInfo.Exists)
{
logger.LogError($"Not found in {pkgVersionDirInfo.FullName} : {pkgNameSpec}");
return BadRequest("Package version does´nt exist in the file system.");
}
return File(pkgFileInfo.OpenRead(), "application/zip; charset=binary");
}
// Web get spec
[HttpGet("~" + Constants.ApiVersionPrefix + ApiConfig.ContentBase + "/{id}/{lower}/{idf}-{lowerFromName}."
+ Constants.SpecFileExtension)]
public IActionResult GetNuspec(
[FromRoute][SafeName][Required] string id,
[FromRoute][SafeName][Required] string lower,
[FromRoute][SafeName][Required] string idf,
[FromRoute][SafeName][Required] string lowerFromName)
{
var pkgPath = Path.Combine(isndSettings.PackagesRootDir,
id, lower, $"{id}." + Constants.SpecFileExtension);
FileInfo pkgFileInfo = new FileInfo(pkgPath);
if (!pkgFileInfo.Exists)
{
return BadRequest("Package info does´nt exist in the file system.");
}
return File(pkgFileInfo.OpenRead(), "text/xml; charset=utf-8");
}
}
}