From d80271dcbf0e0d45922e6ada7a6e22c5f32600fe Mon Sep 17 00:00:00 2001 From: Paul Schneider Date: Thu, 20 May 2021 20:24:03 +0100 Subject: [PATCH] permissions sur le paquet --- .../Controllers/PackagesController.cs | 76 ++++++++++--------- 1 file changed, 42 insertions(+), 34 deletions(-) diff --git a/src/nuget-host/Controllers/PackagesController.cs b/src/nuget-host/Controllers/PackagesController.cs index 5305122..dd1e23a 100644 --- a/src/nuget-host/Controllers/PackagesController.cs +++ b/src/nuget-host/Controllers/PackagesController.cs @@ -43,8 +43,6 @@ namespace nuget_host.Controllers { try { - - var clientVersionId = Request.Headers["X-NuGet-Client-Version"]; var apiKey = Request.Headers["X-NuGet-ApiKey"]; ViewData["versionId"] = typeof(PackagesController).Assembly.FullName; @@ -78,9 +76,8 @@ namespace nuget_host.Controllers { if (entry.FullName.EndsWith(".nuspec")) { - // var entry = archive.GetEntry(filename); var specstr = entry.Open(); - NuGet.Packaging.Core.NuspecCoreReader reader = new NuspecCoreReader(specstr); + NuspecCoreReader reader = new NuspecCoreReader(specstr); string pkgdesc = reader.GetDescription(); string pkgid = reader.GetId(); @@ -90,45 +87,56 @@ namespace nuget_host.Controllers string pkgpath = Path.Combine(pkgidpath, version.Version.ToString()); string name = $"{pkgid}-{version}.nupkg"; string fullpath = Path.Combine(pkgpath, name); - + Package package; + var destpkgiddir = new DirectoryInfo(pkgidpath); + if (destpkgiddir.Exists) + { + package = dbContext.Packages.SingleOrDefault(p => p.Id == pkgid); + if (package != null) if (package.OwnerId != apikey.UserId) + { + return new ForbidResult(); + } + } + else + { + destpkgiddir.Create(); + package = new Package + { + Id = pkgid, + Description = pkgdesc, + OwnerId = apikey.UserId + }; + dbContext.Packages.Add(package); + } var source = new FileInfo(initpath); var dest = new FileInfo(fullpath); var destdir = new DirectoryInfo(dest.DirectoryName); if (dest.Exists) { - ViewData["error"] = "existe déjà"; - logger.LogInformation("400 : existe déjà"); + ViewData["error"] = "existant"; + logger.LogWarning("400 : existant"); return BadRequest(ViewData); } - - - destdir.Create(); - source.MoveTo(fullpath); - files.Add(name); - var newpkg = new Package + else { - Id = pkgid, - Description = pkgdesc, - OwnerId = apikey.UserId - }; - dbContext.Packages.Add(newpkg); - - var newversion = new PackageVersion - { - Package = newpkg, - Major = version.Major, - Minor = version.Minor, - Patch = version.Patch, - IsPrerelease = version.IsPrerelease, - FullString = version.ToFullString() - }; - dbContext.PackageVersions.Add(newversion); - - await dbContext.SaveChangesAsync(); - logger.LogInformation($"new package : {entry.Name}"); - - + destdir.Create(); + + source.MoveTo(fullpath); + files.Add(name); + var newversion = new PackageVersion + { + Package = package, + Major = version.Major, + Minor = version.Minor, + Patch = version.Patch, + IsPrerelease = version.IsPrerelease, + FullString = version.ToFullString() + }; + dbContext.PackageVersions.Add(newversion); + await dbContext.SaveChangesAsync(); + logger.LogInformation($"new package : {entry.Name}"); + } } } }