From 564b14d664159ad36e3d5ed243820f6aaf2ff238 Mon Sep 17 00:00:00 2001 From: Engincan VESKE <43685404+EngincanV@users.noreply.github.com> Date: Mon, 8 May 2023 15:54:23 +0300 Subject: [PATCH 1/2] CLI: Find PRO packages more accurate. Closes #16130 --- .../Volo.Abp.Cli.Core/Volo/Abp/Cli/CliUrls.cs | 5 ++ .../Abp/Cli/Version/CommercialPackages.cs | 4 +- .../Version/PackageVersionCheckerService.cs | 69 ++++++++++++++----- 3 files changed, 59 insertions(+), 19 deletions(-) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/CliUrls.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/CliUrls.cs index 83ae5a9f73..35ae34b895 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/CliUrls.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/CliUrls.cs @@ -29,6 +29,11 @@ public static class CliUrls return $"{NuGetRootPath}{apiKey}/v3/package/{packageId}/index.json"; } + public static string GetNuGetPackageSearchUrl(string apiKey, string packageId) + { + return $"{NuGetRootPath}{apiKey}/v3/search?q={packageId}"; + } + public static string GetApiDefinitionUrl(string url, ApplicationApiDescriptionModelRequestDto model = null) { url = url.EnsureEndsWith('/'); diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Version/CommercialPackages.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Version/CommercialPackages.cs index e99eddb499..7bfb578a2d 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Version/CommercialPackages.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Version/CommercialPackages.cs @@ -4,9 +4,9 @@ using System.Text; namespace Volo.Abp.Cli.Version; -internal static class CommercialPackages +static internal class CommercialPackages { - private static readonly HashSet Packages = new() + private readonly static HashSet Packages = new() { "volo.abp.suite" //other PRO packages can be added to this list... diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Version/PackageVersionCheckerService.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Version/PackageVersionCheckerService.cs index 43ced1a1a1..f186f45dde 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Version/PackageVersionCheckerService.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Version/PackageVersionCheckerService.cs @@ -109,20 +109,53 @@ public class PackageVersionCheckerService : ITransientDependency return await GetPackageVersionsFromMyGet(packageId); } - if (CommercialPackages.IsCommercial(packageId)) + if (await IsCommercialPackageAsync(packageId)) { return await GetPackageVersionsFromAbpCommercialNuGetAsync(packageId); } - else + + return await GetPackageVersionsFromNuGetOrgAsync(packageId) ?? new List(); + } + + private async Task IsCommercialPackageAsync(string packageId) + { + if (CommercialPackages.IsCommercial(packageId)) + { + return true; + } + + if (_apiKeyResult?.ApiKey == null) { - var packagesFromNugetOrg = await GetPackageVersionsFromNuGetOrgAsync(packageId); - if (packagesFromNugetOrg != null) + return false; + } + + var searchUrl = CliUrls.GetNuGetPackageSearchUrl(_apiKeyResult.ApiKey, packageId); + return await HasAnyPackageAsync(searchUrl); + } + + private async Task HasAnyPackageAsync(string url) + { + try + { + var client = _cliHttpClientFactory.CreateClient(needsAuthentication: false); + + using (var responseMessage = await client.GetHttpResponseMessageWithRetryAsync( + url, + cancellationToken: CancellationTokenProvider.Token, + logger: Logger + )) { - return packagesFromNugetOrg; + await RemoteServiceExceptionHandler.EnsureSuccessfulHttpResponseAsync(responseMessage); + + var responseContent = await responseMessage.Content.ReadAsStringAsync(); + + return JsonSerializer.Deserialize(responseContent).TotalHits > 0; } } - - return await GetPackageVersionsFromAbpCommercialNuGetAsync(packageId); + catch (Exception) + { + return false; + } } private async Task> GetPackageVersionsFromAbpCommercialNuGetAsync(string packageId) @@ -175,19 +208,15 @@ public class PackageVersionCheckerService : ITransientDependency private async Task GetNuGetUrlForCommercialPackage(string packageId) { - if (_apiKeyResult == null) - { - _apiKeyResult = await _apiKeyService.GetApiKeyOrNullAsync(); - - if (_apiKeyResult == null) - { - return null; - } - } - + await SetApiKeyResultAsync(); return CliUrls.GetNuGetPackageInfoUrl(_apiKeyResult.ApiKey, packageId); } + private async Task SetApiKeyResultAsync() + { + _apiKeyResult ??= await _apiKeyService.GetApiKeyOrNullAsync(); + } + private async Task GetLatestStableVersionOrNullAsync() { try @@ -214,6 +243,12 @@ public class PackageVersionCheckerService : ITransientDependency } } + public class NuGetSearchResultDto + { + [JsonProperty("totalHits")] + public int TotalHits { get; set; } + } + public class NuGetVersionResultDto { [JsonProperty("versions")] From b00bd0d0ef5bc86cd6cd069e65cc631240d411eb Mon Sep 17 00:00:00 2001 From: Engincan VESKE <43685404+EngincanV@users.noreply.github.com> Date: Mon, 8 May 2023 16:04:39 +0300 Subject: [PATCH 2/2] Update PackageVersionCheckerService.cs --- .../Volo/Abp/Cli/Version/PackageVersionCheckerService.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Version/PackageVersionCheckerService.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Version/PackageVersionCheckerService.cs index f186f45dde..de8511cdca 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Version/PackageVersionCheckerService.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Version/PackageVersionCheckerService.cs @@ -123,7 +123,8 @@ public class PackageVersionCheckerService : ITransientDependency { return true; } - + + await SetApiKeyResultAsync(); if (_apiKeyResult?.ApiKey == null) { return false;