Пример #1
0
        private async Task <string> GetLatestSourceCodeVersionAsync(string name, string type)
        {
            using (var client = new CliHttpClient())
            {
                var response = await client.PostAsync(
                    $"{CliUrls.WwwAbpIo}api/download/{type}/get-version/",
                    new StringContent(
                        JsonSerializer.Serialize(
                            new GetLatestSourceCodeVersionDto {
                    Name = name
                }
                            ),
                        Encoding.UTF8,
                        MimeTypes.Application.Json
                        ),
                    CancellationTokenProvider.Token
                    );

                await RemoteServiceExceptionHandler.EnsureSuccessfulHttpResponseAsync(response);

                var result = await response.Content.ReadAsStringAsync();

                return(JsonSerializer.Deserialize <GetLatestSourceCodeVersionResultDto>(result).Version);
            }
        }
Пример #2
0
        private async Task <bool> CheckProLicenseAsync()
        {
            if (!AuthService.IsLoggedIn())
            {
                return(false);
            }

            try
            {
                var url = $"{CliUrls.WwwAbpIo}api/license/check-user";

                using (var client = new CliHttpClient())
                {
                    using (var response = await client.GetHttpResponseMessageWithRetryAsync(url, CancellationTokenProvider.Token, Logger))
                    {
                        if (!response.IsSuccessStatusCode)
                        {
                            throw new Exception($"ERROR: Remote server returns '{response.StatusCode}'");
                        }

                        await RemoteServiceExceptionHandler.EnsureSuccessfulHttpResponseAsync(response);

                        var responseContent = await response.Content.ReadAsStringAsync();

                        return(JsonSerializer.Deserialize <bool>(responseContent));
                    }
                }
            }
            catch (Exception)
            {
                return(false);
            }
        }
Пример #3
0
        public async Task <MyGetApiResponse> GetPackages()
        {
            if (_response != null)
            {
                return(_response);
            }

            try
            {
                using (var client = new CliHttpClient(TimeSpan.FromMinutes(10)))
                {
                    var responseMessage = await client.GetAsync(
                        $"{CliUrls.WwwAbpIo}api/myget/packages/"
                        );

                    _response = JsonConvert.DeserializeObject <MyGetApiResponse>(Encoding.Default.GetString(await responseMessage.Content.ReadAsByteArrayAsync()));
                }
            }
            catch (Exception)
            {
                Logger.LogError("Unable to get latest preview version.");
                throw;
            }

            return(_response);
        }
Пример #4
0
        private async Task <byte[]> DownloadSourceCodeContentAsync(SourceCodeDownloadInputDto input)
        {
            var postData = JsonSerializer.Serialize(input);

            using (var client = new CliHttpClient(TimeSpan.FromMinutes(10)))
            {
                HttpResponseMessage responseMessage;

                if (input.TemplateSource.IsNullOrWhiteSpace())
                {
                    responseMessage = await client.PostAsync(
                        $"{CliUrls.WwwAbpIo}api/download/{input.Type}/",
                        new StringContent(postData, Encoding.UTF8, MimeTypes.Application.Json),
                        CancellationTokenProvider.Token
                        );
                }
                else
                {
                    responseMessage = await client.GetAsync(input.TemplateSource, CancellationTokenProvider.Token);
                }

                await RemoteServiceExceptionHandler.EnsureSuccessfulHttpResponseAsync(responseMessage);

                return(await responseMessage.Content.ReadAsByteArrayAsync());
            }
        }
Пример #5
0
        public async Task <SemanticVersion> GetLatestVersionOrNullAsync(string packageId, bool includePreviews = false, bool includeNightly = false)
        {
            using (var client = new CliHttpClient())
            {
                var url = includeNightly ?
                          $"https://www.myget.org/F/abp-nightly/api/v3/flatcontainer/{packageId.ToLowerInvariant()}/index.json" :
                          $"https://api.nuget.org/v3-flatcontainer/{packageId.ToLowerInvariant()}/index.json";

                var responseMessage = await client.GetAsync(url, CancellationTokenProvider.Token);

                if (!responseMessage.IsSuccessStatusCode)
                {
                    throw new Exception("Remote server returns error! HTTP status code: " + responseMessage.StatusCode);
                }

                var result = await responseMessage.Content.ReadAsStringAsync();

                var versions = JsonSerializer.Deserialize <NuGetVersionResultDto>(result).Versions.Select(x => SemanticVersion.Parse(x));

                if (!includePreviews && !includeNightly)
                {
                    versions = versions.Where(x => !x.IsPrerelease);
                }

                return(versions.Any() ? versions.Max() : null);
            }
        }
Пример #6
0
        protected virtual async Task <ModuleWithMastersInfo> GetModuleInfoAsync(string moduleName, bool newTemplate,
                                                                                bool newProTemplate = false)
        {
            if (newTemplate || newProTemplate)
            {
                return(await GetEmptyModuleProjectInfoAsync(moduleName, newProTemplate));
            }

            using (var client = new CliHttpClient())
            {
                var url = $"{CliUrls.WwwAbpIo}api/app/module/byNameWithDetails/?name=" + moduleName;

                var response = await client.GetAsync(url);

                if (!response.IsSuccessStatusCode)
                {
                    if (response.StatusCode == HttpStatusCode.NotFound)
                    {
                        throw new CliUsageException($"ERROR: '{moduleName}' module could not be found!");
                    }

                    await RemoteServiceExceptionHandler.EnsureSuccessfulHttpResponseAsync(response);
                }

                var responseContent = await response.Content.ReadAsStringAsync();

                return(JsonSerializer.Deserialize <ModuleWithMastersInfo>(responseContent));
            }
        }
Пример #7
0
        private async Task <List <string> > GetProPackageListAsync()
        {
            using var client = new CliHttpClient();

            var url = $"{CliUrls.WwwRocketIo}api/app/nugetPackage/proPackageNames";

            var responseMessage = await client.GetHttpResponseMessageWithRetryAsync(
                url : url,
                cancellationToken : CancellationTokenProvider.Token,
                logger : Logger
                );

            if (responseMessage.IsSuccessStatusCode)
            {
                return(JsonSerializer.Deserialize <List <string> > (await responseMessage.Content.ReadAsStringAsync()));
            }

            var exceptionMessage          = "Remote server returns '" + (int)responseMessage.StatusCode + "-" + responseMessage.ReasonPhrase + "'. ";
            var remoteServiceErrorMessage = await RemoteServiceExceptionHandler.GetRocketRemoteServiceErrorAsync(responseMessage);

            if (remoteServiceErrorMessage != null)
            {
                exceptionMessage += remoteServiceErrorMessage;
            }

            Logger.LogError(exceptionMessage);
            return(null);
        }
Пример #8
0
        public async Task CollectAsync(CliAnalyticsCollectInputDto input)
        {
            var postData = _jsonSerializer.Serialize(input);

            using (var client = new CliHttpClient())
            {
                var responseMessage = await client.PostAsync(
                    $"{CliUrls.WwwAbpIo}api/clianalytics/collect",
                    new StringContent(postData, Encoding.UTF8, MimeTypes.Application.Json),
                    _cancellationTokenProvider.Token
                    ).ConfigureAwait(false);

                if (!responseMessage.IsSuccessStatusCode)
                {
                    var exceptionMessage          = "Remote server returns '" + (int)responseMessage.StatusCode + "-" + responseMessage.ReasonPhrase + "'. ";
                    var remoteServiceErrorMessage = await _remoteServiceExceptionHandler.GetAbpRemoteServiceErrorAsync(responseMessage).ConfigureAwait(false);

                    if (remoteServiceErrorMessage != null)
                    {
                        exceptionMessage += remoteServiceErrorMessage;
                    }

                    _logger.LogInformation(exceptionMessage);
                }
            }
        }
Пример #9
0
        private async Task <string> GetTemplateNugetVersionAsync(string name, string type, string version)
        {
            var url = $"{CliUrls.WwwAbpIo}api/download/{type}/get-nuget-version/";

            try
            {
                using (var client = new CliHttpClient(TimeSpan.FromMinutes(10)))
                {
                    var response = await client.PostAsync(
                        url,
                        new StringContent(
                            JsonSerializer.Serialize(
                                new GetTemplateNugetVersionDto {
                        Name = name, Version = version
                    }
                                ),
                            Encoding.UTF8,
                            MimeTypes.Application.Json
                            ),
                        CancellationTokenProvider.Token
                        );

                    await RemoteServiceExceptionHandler.EnsureSuccessfulHttpResponseAsync(response);

                    var result = await response.Content.ReadAsStringAsync();

                    return(JsonSerializer.Deserialize <GetVersionResultDto>(result).Version);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("Error occured while getting the NuGet version from {0} : {1}", url, ex.Message);
                return(null);
            }
        }
Пример #10
0
        private async Task <byte[]> DownloadSourceCodeContentAsync(SourceCodeDownloadInputDto input)
        {
            var url = $"{CliUrls.WwwAbpIo}api/download/{input.Type}/";

            try
            {
                using (var client = new CliHttpClient(TimeSpan.FromMinutes(10)))
                {
                    HttpResponseMessage responseMessage;

                    if (input.TemplateSource.IsNullOrWhiteSpace())
                    {
                        responseMessage = await client.PostAsync(
                            url,
                            new StringContent(JsonSerializer.Serialize(input), Encoding.UTF8, MimeTypes.Application.Json),
                            CancellationTokenProvider.Token
                            );
                    }
                    else
                    {
                        responseMessage = await client.GetAsync(input.TemplateSource, CancellationTokenProvider.Token);
                    }

                    await RemoteServiceExceptionHandler.EnsureSuccessfulHttpResponseAsync(responseMessage);

                    return(await responseMessage.Content.ReadAsByteArrayAsync());
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("Error occured while downloading source-code from {0} : {1}", url, ex.Message);
                throw;
            }
        }
Пример #11
0
        private async Task <bool> CheckMultipleOrganizationsAsync(string username)
        {
            var url = $"{CliUrls.WwwAbpIo}api/license/check-multiple-organizations?username={username}";

            using (var client = new CliHttpClient())
            {
                var response = await client.GetHttpResponseMessageWithRetryAsync(
                    url,
                    CancellationTokenProvider.Token,
                    Logger);

                if (!response.IsSuccessStatusCode)
                {
                    throw new Exception($"ERROR: Remote server returns '{response.StatusCode}'");
                }

                await RemoteServiceExceptionHandler.EnsureSuccessfulHttpResponseAsync(response);

                var responseContent = await response.Content.ReadAsStringAsync();

                var result = JsonSerializer.Deserialize <bool>(responseContent);

                return(result);
            }
        }
Пример #12
0
        public async Task <SemanticVersion> GetLatestVersionOrNullAsync(string packageId, bool includePreviews = false, bool includeNightly = false)
        {
            List <string> proPackageList = null;

            if (AuthService.IsLoggedIn())
            {
                proPackageList = await GetProPackageListAsync();
            }

            string url;

            if (includeNightly)
            {
                url =
                    $"https://www.myget.org/F/abp-nightly/api/v3/flatcontainer/{packageId.ToLowerInvariant()}/index.json";
            }
            else if (proPackageList?.Contains(packageId) ?? false)
            {
                url = await GetNuGetUrlForCommercialPackage(packageId);
            }
            else
            {
                url = $"https://api.nuget.org/v3-flatcontainer/{packageId.ToLowerInvariant()}/index.json";
            }


            using (var client = new CliHttpClient(setBearerToken: false))
            {
                var responseMessage = await GetHttpResponseMessageWithRetryAsync(client, url);

                if (!responseMessage.IsSuccessStatusCode)
                {
                    throw new Exception($"ERROR: Remote server returns '{responseMessage.StatusCode}'");
                }

                await RemoteServiceExceptionHandler.EnsureSuccessfulHttpResponseAsync(responseMessage);

                var responseContent = await responseMessage.Content.ReadAsStringAsync();

                var versions = JsonSerializer
                               .Deserialize <NuGetVersionResultDto>(responseContent)
                               .Versions
                               .Select(SemanticVersion.Parse);

                if (!includePreviews && !includeNightly)
                {
                    versions = versions.Where(x => !x.IsPrerelease);
                }

                var semanticVersions = versions.ToList();
                return(semanticVersions.Any() ? semanticVersions.Max() : null);
            }
        }
Пример #13
0
        public async Task <SemanticVersion> GetLatestVersionOrNullAsync(string packageId, bool includeNightly = false, bool includeReleaseCandidates = false)
        {
            if (AuthService.IsLoggedIn())
            {
                if (_proPackageList == null)
                {
                    _proPackageList = await GetProPackageListAsync();
                }
            }

            string url;

            if (includeNightly)
            {
                url = $"https://www.myget.org/F/abp-nightly/api/v3/flatcontainer/{packageId.ToLowerInvariant()}/index.json";
            }
            else if (_proPackageList?.Contains(packageId) ?? false)
            {
                url = await GetNuGetUrlForCommercialPackage(packageId);
            }
            else
            {
                url = $"https://api.nuget.org/v3-flatcontainer/{packageId.ToLowerInvariant()}/index.json";
            }

            using (var client = new CliHttpClient(setBearerToken: false))
            {
                var responseMessage = await client.GetHttpResponseMessageWithRetryAsync(
                    url,
                    cancellationToken : CancellationTokenProvider.Token,
                    logger : Logger
                    );

                await RemoteServiceExceptionHandler.EnsureSuccessfulHttpResponseAsync(responseMessage);

                var responseContent = await responseMessage.Content.ReadAsStringAsync();

                var versions = JsonSerializer
                               .Deserialize <NuGetVersionResultDto>(responseContent)
                               .Versions
                               .Select(SemanticVersion.Parse)
                               .OrderByDescending(v => v, new VersionComparer()).ToList();

                if (!includeNightly && !includeReleaseCandidates)
                {
                    versions = versions.Where(x => !x.IsPrerelease).ToList();
                }

                var semanticVersions = versions.ToList();
                return(semanticVersions.Any() ? semanticVersions.Max() : null);
            }
        }
Пример #14
0
        private async Task <List <ModuleInfo> > GetModuleListAsync()
        {
            using (var client = new CliHttpClient())
            {
                var responseMessage = await client.GetAsync(
                    $"{CliUrls.WwwAbpIo}api/download/modules/",
                    CancellationTokenProvider.Token
                    ).ConfigureAwait(false);

                await RemoteServiceExceptionHandler.EnsureSuccessfulHttpResponseAsync(responseMessage).ConfigureAwait(false);

                var result = await responseMessage.Content.ReadAsStringAsync().ConfigureAwait(false);

                return(JsonSerializer.Deserialize <List <ModuleInfo> >(result));
            }
        }
Пример #15
0
        public async Task <DeveloperApiKeyResult> GetApiKeyOrNullAsync()
        {
            using (var client = new CliHttpClient())
            {
                var url = $"{CliUrls.WwwAbpIo}api/license/api-key";

                var response = await client.GetAsync(url);

                if (!response.IsSuccessStatusCode)
                {
                    throw new Exception($"ERROR: Remote server returns '{response.StatusCode}'");
                }

                var responseContent = await response.Content.ReadAsStringAsync();

                return(JsonSerializer.Deserialize <DeveloperApiKeyResult>(responseContent));
            }
        }
Пример #16
0
        public async Task <string> GetApiKeyAsync()
        {
            try
            {
                using (var client = new CliHttpClient(TimeSpan.FromMinutes(1)))
                {
                    var responseMessage = await client.GetAsync(
                        $"{CliUrls.WwwAbpIo}api/myget/apikey/"
                        );

                    return(Encoding.Default.GetString(await responseMessage.Content.ReadAsByteArrayAsync()));
                }
            }
            catch (Exception)
            {
                return("");
            }
        }
Пример #17
0
        public async Task CollectAsync(CliAnalyticsCollectInputDto input)
        {
            var postData = _jsonSerializer.Serialize(input);

            using (var client = new CliHttpClient())
            {
                var responseMessage = await client.PostAsync(
                    $"{CliUrls.WwwAbpIo}api/clianalytics/collect",
                    new StringContent(postData, Encoding.UTF8, MimeTypes.Application.Json),
                    _cancellationTokenProvider.Token
                    );

                if (!responseMessage.IsSuccessStatusCode)
                {
                    _logger.LogInformation("Remote server returns error! HTTP status code: " +
                                           responseMessage.StatusCode);
                }
            }
        }
Пример #18
0
        public async Task <string> GetApiKeyAsync()
        {
            try
            {
                using (var client = new CliHttpClient(TimeSpan.FromMinutes(1)))
                {
                    var response = await client.GetHttpResponseMessageWithRetryAsync(
                        url : $"{CliUrls.WwwAbpIo}api/myget/apikey/",
                        cancellationToken : CancellationTokenProvider.Token,
                        logger : Logger
                        );

                    return(Encoding.Default.GetString(await response.Content.ReadAsByteArrayAsync()));
                }
            }
            catch (Exception)
            {
                return("");
            }
        }
Пример #19
0
        private async Task <byte[]> DownloadTemplateFileContentAsync(TemplateDownloadInputDto input)
        {
            var postData = JsonSerializer.Serialize(input);

            using (var client = new CliHttpClient())
            {
                var responseMessage = await client.PostAsync(
                    $"{CliUrls.WwwAbpIo}api/download/template/",
                    new StringContent(postData, Encoding.UTF8, MimeTypes.Application.Json),
                    CancellationTokenProvider.Token
                    );

                if (!responseMessage.IsSuccessStatusCode)
                {
                    throw new Exception("Remote server returns error! HTTP status code: " + responseMessage.StatusCode);
                }

                return(await responseMessage.Content.ReadAsByteArrayAsync());
            }
        }
Пример #20
0
        public async Task <DeveloperApiKeyResult> GetApiKeyOrNullAsync(bool invalidateCache = false)
        {
            if (!AuthService.IsLoggedIn())
            {
                return(null);
            }

            if (invalidateCache)
            {
                _apiKeyResult = null;
            }

            if (_apiKeyResult != null)
            {
                return(_apiKeyResult);
            }

            var url = $"{CliUrls.WwwAbpIo}api/license/api-key";

            using (var client = new CliHttpClient())
            {
                var response = await client.GetHttpResponseMessageWithRetryAsync(
                    url : url,
                    cancellationToken : CancellationTokenProvider.Token,
                    logger : _logger);

                if (!response.IsSuccessStatusCode)
                {
                    throw new Exception($"ERROR: Remote server returns '{response.StatusCode}'");
                }

                await RemoteServiceExceptionHandler.EnsureSuccessfulHttpResponseAsync(response);

                var responseContent = await response.Content.ReadAsStringAsync();

                var apiKeyResult = JsonSerializer.Deserialize <DeveloperApiKeyResult>(responseContent);

                return(apiKeyResult);
            }
        }
Пример #21
0
        public async Task <List <string> > GetPackageVersionListAsync(string packageId, bool includeNightly = false,
                                                                      bool includeReleaseCandidates         = false)
        {
            if (AuthService.IsLoggedIn())
            {
                _proPackageList ??= await GetProPackageListAsync();
            }

            string url;

            if (includeNightly)
            {
                url = $"https://www.myget.org/F/abp-nightly/api/v3/flatcontainer/{packageId.ToLowerInvariant()}/index.json";
            }
            else if (_proPackageList?.Contains(packageId) ?? false)
            {
                url = await GetNuGetUrlForCommercialPackage(packageId);
            }
            else
            {
                url = $"https://api.nuget.org/v3-flatcontainer/{packageId.ToLowerInvariant()}/index.json";
            }

            using (var client = new CliHttpClient(setBearerToken: false))
            {
                using (var responseMessage = await client.GetHttpResponseMessageWithRetryAsync(
                           url,
                           cancellationToken: CancellationTokenProvider.Token,
                           logger: Logger
                           ))
                {
                    await RemoteServiceExceptionHandler.EnsureSuccessfulHttpResponseAsync(responseMessage);

                    var responseContent = await responseMessage.Content.ReadAsStringAsync();

                    return(JsonSerializer.Deserialize <NuGetVersionResultDto>(responseContent).Versions);
                }
            }
        }
Пример #22
0
        protected virtual async Task <ModuleInfo> FindModuleInfoAsync(string moduleName)
        {
            using (var client = new CliHttpClient())
            {
                var url = $"{CliUrls.WwwAbpIo}api/app/module/byName/?name=" + moduleName;

                var response = await client.GetAsync(url).ConfigureAwait(false);

                if (!response.IsSuccessStatusCode)
                {
                    if (response.StatusCode == HttpStatusCode.NotFound)
                    {
                        throw new CliUsageException($"ERROR: '{moduleName}' module could not be found!");
                    }

                    await RemoteServiceExceptionHandler.EnsureSuccessfulHttpResponseAsync(response).ConfigureAwait(false);
                }

                var responseContent = await response.Content.ReadAsStringAsync().ConfigureAwait(false);

                return(JsonSerializer.Deserialize <ModuleInfo>(responseContent));
            }
        }
Пример #23
0
        protected virtual async Task <NugetPackageInfo> FindNugetPackageInfoAsync(string packageName)
        {
            using (var client = new CliHttpClient())
            {
                var url = $"{CliUrls.WwwAbpIo}api/app/nugetPackage/byName/?name=" + packageName;

                var response = await client.GetAsync(url);

                if (!response.IsSuccessStatusCode)
                {
                    if (response.StatusCode == HttpStatusCode.NotFound)
                    {
                        throw new CliUsageException($"'{packageName}' nuget package could not be found!");
                    }

                    await RemoteServiceExceptionHandler.EnsureSuccessfulHttpResponseAsync(response);
                }

                var responseContent = await response.Content.ReadAsStringAsync();

                return(JsonSerializer.Deserialize <NugetPackageInfo>(responseContent));
            }
        }
Пример #24
0
        private async Task <string> GetLatestTemplateVersionAsync(string name)
        {
            var postData = JsonSerializer.Serialize(new GetLatestTemplateVersionDto {
                Name = name
            });

            using (var client = new CliHttpClient())
            {
                var responseMessage = await client.PostAsync(
                    $"{CliUrls.WwwAbpIo}api/download/template/get-version/",
                    new StringContent(postData, Encoding.UTF8, MimeTypes.Application.Json),
                    CancellationTokenProvider.Token
                    );

                if (!responseMessage.IsSuccessStatusCode)
                {
                    throw new Exception("Remote server returns error! HTTP status code: " + responseMessage.StatusCode);
                }

                var result = await responseMessage.Content.ReadAsStringAsync();

                return(JsonSerializer.Deserialize <GetLatestTemplateVersionResultDto>(result).Version);
            }
        }
Пример #25
0
        private async Task <List <string> > GetProPackageListAsync()
        {
            using var client = new CliHttpClient();

            var responseMessage = await client.GetAsync(
                $"{CliUrls.WwwAbpIo}api/app/nugetPackage/proPackageNames",
                CancellationTokenProvider.Token
                );

            if (!responseMessage.IsSuccessStatusCode)
            {
                var exceptionMessage          = "Remote server returns '" + (int)responseMessage.StatusCode + "-" + responseMessage.ReasonPhrase + "'. ";
                var remoteServiceErrorMessage = await RemoteServiceExceptionHandler.GetAbpRemoteServiceErrorAsync(responseMessage);

                if (remoteServiceErrorMessage != null)
                {
                    exceptionMessage += remoteServiceErrorMessage;
                }
                Logger.LogInformation(exceptionMessage);
                return(null);
            }

            return(JsonSerializer.Deserialize <List <string> >(await responseMessage.Content.ReadAsStringAsync()));
        }
Пример #26
0
        public async Task <DeveloperApiKeyResult> GetApiKeyOrNullAsync(bool invalidateCache = false)
        {
            if (invalidateCache)
            {
                _apiKeyResult = null;
            }

            if (_apiKeyResult != null)
            {
                return(_apiKeyResult);
            }

            var url = $"{CliUrls.WwwAbpIo}api/license/api-key";

            using (var client = new CliHttpClient())
            {
                var response = await HttpPolicyExtensions
                               .HandleTransientHttpError()
                               .OrResult(msg => !msg.IsSuccessStatusCode)
                               .WaitAndRetryAsync(new[]
                {
                    TimeSpan.FromSeconds(1),
                    TimeSpan.FromSeconds(3),
                    TimeSpan.FromSeconds(7)
                },
                                                  (responseMessage, timeSpan, retryCount, context) =>
                {
                    if (responseMessage.Exception != null)
                    {
                        _logger.LogWarning(
                            $"{retryCount}. request attempt failed to {url} with an error: \"{responseMessage.Exception.Message}\". " +
                            $"Waiting {timeSpan.TotalSeconds} secs for the next try...");
                    }
                    else if (responseMessage.Result != null)
                    {
                        _logger.LogWarning(
                            $"{retryCount}. request attempt failed {url} with {(int)responseMessage.Result.StatusCode}-{responseMessage.Result.ReasonPhrase}. " +
                            $"Waiting {timeSpan.TotalSeconds} secs for the next try...");
                    }
                })
                               .ExecuteAsync(async() => await client.GetAsync(url).ConfigureAwait(false)).ConfigureAwait(false);

                if (!response.IsSuccessStatusCode)
                {
                    throw new Exception($"ERROR: Remote server returns '{response.StatusCode}'");
                }

                await RemoteServiceExceptionHandler.EnsureSuccessfulHttpResponseAsync(response).ConfigureAwait(false);

                var responseContent = await response.Content.ReadAsStringAsync().ConfigureAwait(false);

                var apiKeyResult = JsonSerializer.Deserialize <DeveloperApiKeyResult>(responseContent);

                if (apiKeyResult == null ||
                    string.IsNullOrEmpty(apiKeyResult.ApiKey))
                {
                    _logger.LogError("Couldn't retrieve your NuGet API key!");
                    _logger.LogWarning(File.Exists(CliPaths.AccessToken)
                        ? "Make sure you have an active session and license on commercial.abp.io. To re-sign in you can use the CLI command \"abp login <username>\"."
                        : "You are not signed in to commercial.abp.io. Use the CLI command \"abp login <username>\" to sign in.");

                    return(null);
                }

                return(apiKeyResult);
            }
        }
Пример #27
0
        public async Task <DeveloperApiKeyResult> GetApiKeyOrNullAsync(bool invalidateCache = false)
        {
            if (!AuthService.IsLoggedIn())
            {
                return(null);
            }

            if (invalidateCache)
            {
                _apiKeyResult = null;
            }

            if (_apiKeyResult != null)
            {
                return(_apiKeyResult);
            }

            var url = $"{CliUrls.WwwAbpIo}api/license/api-key";

            using (var client = new CliHttpClient())
            {
                var response = await HttpPolicyExtensions
                               .HandleTransientHttpError()
                               .OrResult(msg => !msg.IsSuccessStatusCode)
                               .WaitAndRetryAsync(new[]
                {
                    TimeSpan.FromSeconds(1),
                    TimeSpan.FromSeconds(3),
                    TimeSpan.FromSeconds(7)
                },
                                                  (responseMessage, timeSpan, retryCount, context) =>
                {
                    if (responseMessage.Exception != null)
                    {
                        _logger.LogWarning(
                            $"{retryCount}. request attempt failed to {url} with an error: \"{responseMessage.Exception.Message}\". " +
                            $"Waiting {timeSpan.TotalSeconds} secs for the next try...");
                    }
                    else if (responseMessage.Result != null)
                    {
                        _logger.LogWarning(
                            $"{retryCount}. request attempt failed {url} with {(int)responseMessage.Result.StatusCode}-{responseMessage.Result.ReasonPhrase}. " +
                            $"Waiting {timeSpan.TotalSeconds} secs for the next try...");
                    }
                })
                               .ExecuteAsync(async() => await client.GetAsync(url).ConfigureAwait(false)).ConfigureAwait(false);

                if (!response.IsSuccessStatusCode)
                {
                    throw new Exception($"ERROR: Remote server returns '{response.StatusCode}'");
                }

                await RemoteServiceExceptionHandler.EnsureSuccessfulHttpResponseAsync(response).ConfigureAwait(false);

                var responseContent = await response.Content.ReadAsStringAsync().ConfigureAwait(false);

                var apiKeyResult = JsonSerializer.Deserialize <DeveloperApiKeyResult>(responseContent);

                return(apiKeyResult);
            }
        }