示例#1
0
        private async Task <ActionResult> CreatePackageInternal()
        {
            // Get the user
            var user = GetCurrentUser();

            using (var packageToPush = ReadPackageFromRequest())
            {
                if (packageToPush.Metadata.MinClientVersion > new Version("3.0.0.0"))
                {
                    return(new HttpStatusCodeWithBodyResult(HttpStatusCode.BadRequest, String.Format(
                                                                CultureInfo.CurrentCulture,
                                                                Strings.UploadPackage_MinClientVersionOutOfRange,
                                                                packageToPush.Metadata.MinClientVersion)));
                }

                // Ensure that the user can push packages for this partialId.
                var packageRegistration = PackageService.FindPackageRegistrationById(packageToPush.Metadata.Id);
                if (packageRegistration != null)
                {
                    if (!packageRegistration.IsOwner(user))
                    {
                        return(new HttpStatusCodeWithBodyResult(HttpStatusCode.Forbidden, Strings.ApiKeyNotAuthorized));
                    }

                    // Check if a particular Id-Version combination already exists. We eventually need to remove this check.
                    string normalizedVersion = packageToPush.Metadata.Version.ToNormalizedString();
                    bool   packageExists     =
                        packageRegistration.Packages.Any(
                            p => String.Equals(
                                p.NormalizedVersion,
                                normalizedVersion,
                                StringComparison.OrdinalIgnoreCase));

                    if (packageExists)
                    {
                        return(new HttpStatusCodeWithBodyResult(
                                   HttpStatusCode.Conflict,
                                   String.Format(CultureInfo.CurrentCulture, Strings.PackageExistsAndCannotBeModified,
                                                 packageToPush.Metadata.Id, packageToPush.Metadata.Version.ToNormalizedStringSafe())));
                    }
                }

                var package = PackageService.CreatePackage(packageToPush, user, commitChanges: false);
                AutoCuratePackage.Execute(package, packageToPush, commitChanges: false);
                EntitiesContext.SaveChanges();

                using (Stream uploadStream = packageToPush.GetStream())
                {
                    await PackageFileService.SavePackageFileAsync(package, uploadStream);

                    IndexingService.UpdatePackage(package);
                }
            }

            return(new HttpStatusCodeResult(HttpStatusCode.Created));
        }
示例#2
0
        private async Task <ActionResult> CreatePackageInternal()
        {
            // Get the user
            var user = GetCurrentUser();

            using (var packageToPush = ReadPackageFromRequest())
            {
                // Ensure that the user can push packages for this partialId.
                var packageRegistration = PackageService.FindPackageRegistrationById(packageToPush.Metadata.Id);
                if (packageRegistration != null)
                {
                    if (!packageRegistration.IsOwner(user))
                    {
                        return(new HttpStatusCodeWithBodyResult(HttpStatusCode.Forbidden, Strings.ApiKeyNotAuthorized));
                    }

                    // Check if a particular Id-Version combination already exists. We eventually need to remove this check.
                    string normalizedVersion = packageToPush.Metadata.Version.ToNormalizedString();
                    bool   packageExists     =
                        packageRegistration.Packages.Any(
                            p => String.Equals(
                                p.NormalizedVersion,
                                normalizedVersion,
                                StringComparison.OrdinalIgnoreCase));

                    if (packageExists)
                    {
                        return(new HttpStatusCodeWithBodyResult(
                                   HttpStatusCode.Conflict,
                                   String.Format(CultureInfo.CurrentCulture, Strings.PackageExistsAndCannotBeModified,
                                                 packageToPush.Metadata.Id, packageToPush.Metadata.Version.ToNormalizedStringSafe())));
                    }
                }

                var package = PackageService.CreatePackage(packageToPush, user, commitChanges: true);
                using (Stream uploadStream = packageToPush.GetStream())
                {
                    await PackageFileService.SavePackageFileAsync(package, uploadStream);
                }

                if (
                    packageToPush.Metadata.Id.Equals(Constants.NuGetCommandLinePackageId,
                                                     StringComparison.OrdinalIgnoreCase) && package.IsLatestStable)
                {
                    // If we're pushing a new stable version of NuGet.CommandLine, update the extracted executable.
                    await NugetExeDownloaderService.UpdateExecutableAsync(packageToPush);
                }
            }

            return(new HttpStatusCodeResult(HttpStatusCode.Created));
        }
示例#3
0
        private async Task <ActionResult> CreatePackageInternal()
        {
            // Get the user
            var user = GetCurrentUser();

            using (var packageStream = ReadPackageFromRequest())
                using (var packageToPush = new PackageReader(packageStream, leaveStreamOpen: false))
                {
                    NuspecReader nuspec = null;
                    try
                    {
                        nuspec = packageToPush.GetNuspecReader();
                    }
                    catch (Exception ex)
                    {
                        return(new HttpStatusCodeWithBodyResult(HttpStatusCode.BadRequest, string.Format(
                                                                    CultureInfo.CurrentCulture,
                                                                    Strings.UploadPackage_InvalidNuspec,
                                                                    ex.Message)));
                    }

                    if (nuspec.GetMinClientVersion() > Constants.MaxSupportedMinClientVersion)
                    {
                        return(new HttpStatusCodeWithBodyResult(HttpStatusCode.BadRequest, string.Format(
                                                                    CultureInfo.CurrentCulture,
                                                                    Strings.UploadPackage_MinClientVersionOutOfRange,
                                                                    nuspec.GetMinClientVersion())));
                    }

                    // Ensure that the user can push packages for this partialId.
                    var packageRegistration = PackageService.FindPackageRegistrationById(nuspec.GetId());
                    if (packageRegistration != null)
                    {
                        if (!packageRegistration.IsOwner(user))
                        {
                            return(new HttpStatusCodeWithBodyResult(HttpStatusCode.Forbidden, Strings.ApiKeyNotAuthorized));
                        }

                        // Check if a particular Id-Version combination already exists. We eventually need to remove this check.
                        string normalizedVersion = nuspec.GetVersion().ToNormalizedString();
                        bool   packageExists     =
                            packageRegistration.Packages.Any(
                                p => String.Equals(
                                    p.NormalizedVersion,
                                    normalizedVersion,
                                    StringComparison.OrdinalIgnoreCase));

                        if (packageExists)
                        {
                            return(new HttpStatusCodeWithBodyResult(
                                       HttpStatusCode.Conflict,
                                       String.Format(CultureInfo.CurrentCulture, Strings.PackageExistsAndCannotBeModified,
                                                     nuspec.GetId(), nuspec.GetVersion().ToNormalizedStringSafe())));
                        }
                    }

                    var packageStreamMetadata = new PackageStreamMetadata
                    {
                        HashAlgorithm = Constants.Sha512HashAlgorithmId,
                        Hash          = CryptographyService.GenerateHash(packageStream.AsSeekableStream()),
                        Size          = packageStream.Length,
                    };

                    var package = PackageService.CreatePackage(packageToPush, packageStreamMetadata, user, commitChanges: false);
                    AutoCuratePackage.Execute(package, packageToPush, commitChanges: false);
                    EntitiesContext.SaveChanges();

                    using (Stream uploadStream = packageStream)
                    {
                        uploadStream.Position = 0;
                        await PackageFileService.SavePackageFileAsync(package, uploadStream.AsSeekableStream());

                        IndexingService.UpdatePackage(package);
                    }
                }

            return(new HttpStatusCodeResult(HttpStatusCode.Created));
        }