public async Task <IActionResult> UpdatePackage(string package, [FromBody] UpdatePackageViewModel vm)
        {
            if (!ModelState.IsValid || PackageUtils.UnescapeName(package) != vm.Name)
            {
                return(BadRequestResponse);
            }

            try {
                await _packageService.CommitAsync(vm.Name, ToPatch(vm));

                return(Ok("updated package"));
            }
            catch (DuplicatePackageVersionException) {
                return(DuplicateVersionResponse);
            }
            catch (PackageVersionNotFoundException nfe) {
                return(Error($"package version not found ({nfe.Identifier.Version})", HttpStatusCode.BadRequest));
            }
        }
Esempio n. 2
0
        public async Task <IActionResult> Update(int id, UpdatePackageViewModel vm, IFormFile ImgPath)
        {
            var loggedUser = await _userManagerService.FindByNameAsync(User.Identity.Name);

            Package pack = _packRepo.GetSingle(p => p.PackageId == id);

            if (ModelState.IsValid && pack != null)
            {
                pack.Name        = vm.Name;
                pack.Location    = vm.Location;
                pack.Description = vm.Description;
                pack.Price       = vm.Price;
                pack.IsActive    = vm.IsActive;
                pack.UserId      = loggedUser.Id;

                if (ImgPath != null)
                {
                    string uploadPath = Path.Combine(_environment.WebRootPath, "Uploads");
                    uploadPath = Path.Combine(uploadPath, User.Identity.Name);
                    Directory.CreateDirectory(Path.Combine(uploadPath, pack.Name));

                    string fileName = Path.GetFileName(ImgPath.FileName);

                    using (FileStream fs = new FileStream(Path.Combine(uploadPath, pack.Name, fileName), FileMode.Create))
                    {
                        ImgPath.CopyTo(fs);
                    }

                    pack.ImgPath = Path.Combine(User.Identity.Name, pack.Name, fileName);
                }

                _packRepo.Update(pack);

                return(RedirectToAction("Display", "Package", new { id = pack.PackageId }));
            }

            ModelState.AddModelError("", "Information required!");

            return(View(vm));
        }
        private static PackagePatch ToPatch(UpdatePackageViewModel vm)
        {
            var patch = new PackagePatch()
            {
                UpdatedVersions   = new List <PackageVersion>(),
                PublishedVersions = new List <PublishedPackageVersion>(),
                UpdatedDistTags   = vm.DistTags
            };

            foreach (var kvp in vm.Versions)
            {
                var id = new PackageIdentifier(vm.Name, kvp.Key);

                var version = new PublishedPackageVersion()
                {
                    Id       = id,
                    Manifest = kvp.Value
                };

                if (vm.Attachments == null || !vm.Attachments.TryGetValue(PackageUtils.GetTarballName(id), out var attachment))
                {
                    patch.UpdatedVersions.Add(version);
                }
                else
                {
                    version.Tarball = new Tarball()
                    {
                        Package = id,
                        Data    = Convert.FromBase64String(attachment.Data)
                    };

                    patch.PublishedVersions.Add(version);
                }
            }

            return(patch);
        }
Esempio n. 4
0
        public async Task <IActionResult> Update(int id)
        {
            var loggedUser = await _userManagerService.FindByNameAsync(User.Identity.Name);

            Package pack = _packRepo.GetSingle(p => p.PackageId == id);

            if (pack != null)
            {
                UpdatePackageViewModel vm = new UpdatePackageViewModel
                {
                    PackId      = id,
                    Name        = pack.Name,
                    Location    = pack.Location,
                    Description = pack.Description,
                    Price       = pack.Price,
                    IsActive    = pack.IsActive,
                    UserId      = loggedUser.Id,
                    ImgPath     = pack.ImgPath
                };
                return(View(vm));
            }

            return(RedirectToAction("Index", "Category"));
        }
        public async Task <IActionResult> UpdatePackageAsync(string package, string revision, [FromBody] UpdatePackageViewModel vm)
        {
            if (!ModelState.IsValid || PackageUtils.UnescapeName(package) != vm.Name)
            {
                return(BadRequestResponse);
            }

            var overview = await _packageService.GetPackageAsync(vm.Name);

            if (overview == null)
            {
                return(PackageNotFoundResponse);
            }

            var patch = ToPatch(vm);

            // Allow for deletes when a revision is specified (this is basically a 'replace the model' update)
            patch.DeletedVersions = overview.Versions.Select(v => v.Id)
                                    .Where(id => !vm.Versions.ContainsKey(id.Version))
                                    .ToList();

            try {
                await _packageService.CommitAsync(overview.Name, patch);

                return(Ok(GetResults(patch)));
            }
            catch (DuplicatePackageVersionException) {
                return(DuplicateVersionResponse);
            }
            catch (PackageVersionNotFoundException nfe) {
                return(Error($"package version not found ({nfe.Identifier.Version})", HttpStatusCode.BadRequest));
            }
        }