CLI: Find PRO packages more accurate. Closes #16130

pull/16506/head
Engincan VESKE 3 years ago
parent 19b9d9127c
commit 564b14d664

@ -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('/');

@ -4,9 +4,9 @@ using System.Text;
namespace Volo.Abp.Cli.Version;
internal static class CommercialPackages
static internal class CommercialPackages
{
private static readonly HashSet<string> Packages = new()
private readonly static HashSet<string> Packages = new()
{
"volo.abp.suite"
//other PRO packages can be added to this list...

@ -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<string>();
}
private async Task<bool> 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<bool> 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<NuGetSearchResultDto>(responseContent).TotalHits > 0;
}
}
return await GetPackageVersionsFromAbpCommercialNuGetAsync(packageId);
catch (Exception)
{
return false;
}
}
private async Task<List<string>> GetPackageVersionsFromAbpCommercialNuGetAsync(string packageId)
@ -175,19 +208,15 @@ public class PackageVersionCheckerService : ITransientDependency
private async Task<string> 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<LatestStableVersionResult> 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")]

Loading…
Cancel
Save