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))); }
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); }
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; }
private static bool IsId(string query) { return(query.Length <= PackageIdValidator.MaxPackageIdLength && PackageIdValidator.IsValidPackageIdWithTimeout(query)); }