private static bool HasInvalidParameters(SearchRequest request, string packageType)
 {
     // Requests with bad parameters yield no results. For the package type case, by specification a package type
     // valid characters are the same as a package ID.
     return(request.Skip > MaximumSkip ||
            (packageType != null && !PackageIdValidator.IsValidPackageIdWithTimeout(packageType)));
 }
Esempio n. 2
0
        private void CleanDownloadData(DownloadData data)
        {
            var invalidIdCount            = 0;
            var invalidVersionCount       = 0;
            var nonNormalizedVersionCount = 0;

            foreach (var id in data.Keys.ToList())
            {
                var isValidId = id.Length <= PackageIdValidator.MaxPackageIdLength &&
                                PackageIdValidator.IsValidPackageIdWithTimeout(id);
                if (!isValidId)
                {
                    invalidIdCount++;
                }

                foreach (var version in data[id].Keys.ToList())
                {
                    var isValidVersion = NuGetVersion.TryParse(version, out var parsedVersion);
                    if (!isValidVersion)
                    {
                        invalidVersionCount++;
                    }

                    if (!isValidId || !isValidVersion)
                    {
                        // Clear the download count if the ID or version is invalid.
                        data.SetDownloadCount(id, version, 0);
                        continue;
                    }

                    var normalizedVersion   = parsedVersion.ToNormalizedString();
                    var isNormalizedVersion = StringComparer.OrdinalIgnoreCase.Equals(version, normalizedVersion);

                    if (!isNormalizedVersion)
                    {
                        nonNormalizedVersionCount++;

                        // Use the normalized version string if the original was not normalized.
                        var downloads = data.GetDownloadCount(id, version);
                        data.SetDownloadCount(id, version, 0);
                        data.SetDownloadCount(id, normalizedVersion, downloads);
                    }
                }
            }

            _logger.LogInformation(
                "There were {InvalidIdCount} invalid IDs, {InvalidVersionCount} invalid versions, and " +
                "{NonNormalizedVersionCount} non-normalized IDs.",
                invalidIdCount,
                invalidVersionCount,
                nonNormalizedVersionCount);
        }
        private bool TryGetSinglePackageId(
            ParsedQuery parsed,
            out string packageId)
        {
            if (parsed.Grouping.TryGetValue(QueryField.PackageId, out var terms) &&
                terms.Count == 1)
            {
                packageId = terms.First();
                if (packageId.Length <= PackageIdValidator.MaxPackageIdLength &&
                    PackageIdValidator.IsValidPackageIdWithTimeout(packageId))
                {
                    return(true);
                }
            }

            packageId = null;
            return(false);
        }
Esempio n. 4
0
        private void ApplySearchIndexFilter(
            SearchParameters searchParameters,
            SearchRequest request,
            bool isDefaultSearch,
            string packageType)
        {
            var searchFilters = GetSearchFilters(request);

            var filterString = $"{IndexFields.Search.SearchFilters} eq '{DocumentUtilities.GetSearchFilterString(searchFilters)}'";

            if (isDefaultSearch)
            {
                filterString += $" and ({IndexFields.Search.IsExcludedByDefault} eq false or {IndexFields.Search.IsExcludedByDefault} eq null)";
            }

            // Verify that the package type only has valid package ID characters so we don't need to worry about
            // escaping quotes and such.
            if (packageType != null && PackageIdValidator.IsValidPackageIdWithTimeout(packageType))
            {
                filterString += $" and {IndexFields.Search.FilterablePackageTypes}/any(p: p eq '{packageType.ToLowerInvariant()}')";
            }

            searchParameters.Filter = filterString;
        }
Esempio n. 5
0
 private static bool IsId(string query)
 {
     return(query.Length <= PackageIdValidator.MaxPackageIdLength &&
            PackageIdValidator.IsValidPackageIdWithTimeout(query));
 }