Exemple #1
0
        protected virtual async Task <HttpClient> CreateClientAsync(Request request)
        {
            string name;

            if (UseProxy)
            {
                var proxy = await _proxyService.GetAsync(request.Timeout);

                if (proxy == null)
                {
                    throw new SpiderException("获取代理失败");
                }

                name = $"{Const.ProxyPrefix}{proxy}";
            }
            else
            {
                name = request.RequestUri.Host;
            }

            return(HttpClientFactory.CreateClient(name));
        }
        private async Task HandleSelected(ChangeEventArgs changeEventArgs)
        {
            foreach (var file in await FileReaderService.CreateReference(_input).EnumerateFilesAsync())
            {
                if (file == null)
                {
                    continue;
                }
                var fileInfo = await file.ReadFileInfoAsync();

                await using var ms = await file.CreateMemoryStreamAsync(4 * 1024);

                var content = new MultipartFormDataContent();
                content.Headers.ContentDisposition = new ContentDispositionHeaderValue("form-data");
                content.Add(new StreamContent(ms, Convert.ToInt32(ms.Length)), "image", fileInfo.Name);
                ImgUrl = await Repository.UploadAdImage(content, HttpClientFactory.CreateClient(Configuration["Service:Api:AnonymousApiName"]),
                                                        NavigationManager);

                Console.WriteLine($"Upload Ad Image {ImgUrl}");
                await OnChange.InvokeAsync(ImgUrl);
            }
        }
Exemple #3
0
        public List <string> GetForecast(
            int zipcode,
            DateTime date,
            TemperatureTypeEnum temperatureType,
            ForecastTypeEnum forecastType)
        {
            try
            {
                CheckParametersValid(zipcode, date, temperatureType, forecastType);
            }
            catch (ArgumentException ae)
            {
                //ToDo Fehlermeldung an UI
            }

            // = "Orchestrierung", ruft Methoden auf ohne zu wissen, woher bspw. Parameter herkommen
            // Funktionales Programmieren
            _temperatureStrategy = TemperatureStrategyFactory.GetTemperatureStrategy(temperatureType);
            // Exercise: New Provider (e.g. Random) and change next Line to see if it still work
            IWeatherForecastProvider weatherForecastProvider = new OpenWeatherAPI(HttpClientFactory.CreateClient(), "a1fcc507923163ff1bae113a80d8f82a");
            WeatherForecast          weatherForecast         = new WeatherForecast(weatherForecastProvider);

            _forecastStrategy = ForecastStrategyFactory.GetForecastStrategy(forecastType, weatherForecast);
            List <string> result = new List <string>();

            try
            {
                result = _forecastStrategy.GetForecast(zipcode, _temperatureStrategy, date);
            }
            catch (ZipNotFoundException ex)
            {
                result.Add(ex.Message);
            }
            catch (Exception ex)
            {
                result.Add($"Exception: {ex.Message}");
            }
            return(result);
        }
Exemple #4
0
        public async Task JumboAsync(
            [Summary("The emoji to jumbofy.")]
            string emoji)
        {
            string emojiUrl;

            if (Emote.TryParse(emoji, out var found))
            {
                emojiUrl = found.Url;
            }
            else
            {
                var codepoint    = char.ConvertToUtf32(emoji, 0);
                var codepointHex = codepoint.ToString("X").ToLower();

                emojiUrl = $"https://raw.githubusercontent.com/twitter/twemoji/gh-pages/2/72x72/{codepointHex}.png";
            }

            try
            {
                var client = HttpClientFactory.CreateClient();
                var req    = await client.GetStreamAsync(emojiUrl);

                await Context.Channel.SendFileAsync(req, Path.GetFileName(emojiUrl), Context.User.Mention);

                try
                {
                    await Context.Message.DeleteAsync();
                }
                catch (HttpRequestException)
                {
                    Log.Information("Couldn't delete message after jumbofying.");
                }
            }
            catch (HttpRequestException)
            {
                await ReplyAsync($"Sorry {Context.User.Mention}, I don't recognize that emoji.");
            }
        }
        public async Task <HttpResponseMessage> ExecuteStatementAsync(string ksql)
        {
            try
            {
                using (var httpClient = httpClientFactory.CreateClient())
                {
                    var statement = new KSqlStatement
                    {
                        ksql = ksql
                    };

                    var json = JsonSerializer.Serialize(statement);

                    var data = new StringContent(json, Encoding.UTF8, "application/json");

                    httpClient.DefaultRequestHeaders.Accept.Add(
                        new MediaTypeWithQualityHeaderValue("application/vnd.ksql.v1+json"));

                    var httpRequestMessage = new HttpRequestMessage(HttpMethod.Post, "/ksql")
                    {
                        Content = data
                    };

                    var cancellationToken = new CancellationToken();

                    var httpResponseMessage = await httpClient.SendAsync(httpRequestMessage,
                                                                         HttpCompletionOption.ResponseHeadersRead,
                                                                         cancellationToken);

                    return(httpResponseMessage);
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                throw;
            }
        }
Exemple #6
0
    protected virtual async Task <IdentityModelDiscoveryDocumentCacheItem> GetDiscoveryResponse(IdentityClientConfiguration configuration)
    {
        var tokenEndpointUrlCacheKey   = CalculateDiscoveryDocumentCacheKey(configuration);
        var discoveryDocumentCacheItem = await DiscoveryDocumentCache.GetAsync(tokenEndpointUrlCacheKey);

        if (discoveryDocumentCacheItem == null)
        {
            DiscoveryDocumentResponse discoveryResponse;
            using (var httpClient = HttpClientFactory.CreateClient(HttpClientName))
            {
                var request = new DiscoveryDocumentRequest
                {
                    Address = configuration.Authority,
                    Policy  =
                    {
                        RequireHttps = configuration.RequireHttps
                    }
                };
                IdentityModelHttpRequestMessageOptions.ConfigureHttpRequestMessage?.Invoke(request);
                discoveryResponse = await httpClient.GetDiscoveryDocumentAsync(request);
            }

            if (discoveryResponse.IsError)
            {
                throw new AbpException($"Could not retrieve the OpenId Connect discovery document! " +
                                       $"ErrorType: {discoveryResponse.ErrorType}. Error: {discoveryResponse.Error}");
            }

            discoveryDocumentCacheItem = new IdentityModelDiscoveryDocumentCacheItem(discoveryResponse.TokenEndpoint, discoveryResponse.DeviceAuthorizationEndpoint);
            await DiscoveryDocumentCache.SetAsync(tokenEndpointUrlCacheKey, discoveryDocumentCacheItem,
                                                  new DistributedCacheEntryOptions
            {
                AbsoluteExpirationRelativeToNow = TimeSpan.FromSeconds(configuration.CacheAbsoluteExpiration)
            });
        }

        return(discoveryDocumentCacheItem);
    }
        protected override async Task OnInitializedAsync()
        {
            CurrentCulture = CultureInfo.CurrentCulture.DisplayName;

            var authState = await authenticationStateTask;
            var user      = authState.User;

            var httpClient = HttpClientFactory.CreateClient(Configuration["Service:Api:ApiName"]);

            await httpClient.PostAsJsonAsync <EventTrackingItem>("api/EventTracker", new EventTrackingItem
            {
                Category    = "Subscription",
                Key         = "start",
                CreatedDate = DateTime.UtcNow,
                Id          = Guid.NewGuid(),
                UserId      = user.FindFirstValue(ClaimTypes.NameIdentifier)
            });

            var subscriptionPacks = await httpClient.GetAsync("api/SubPack/GetAll");

            if (subscriptionPacks.IsSuccessStatusCode)
            {
                var json = await subscriptionPacks.Content.ReadAsStringAsync();

                listSubscriptionPack = JsonConvert.DeserializeObject <List <SubscriptionPack> >(json);
            }

            await httpClient.PostAsJsonAsync <EventTrackingItem>("api/EventTracker", new EventTrackingItem
            {
                Category    = "Subscription",
                Key         = "Start",
                CreatedDate = DateTime.UtcNow,
                Id          = Guid.NewGuid(),
                UserId      = user.FindFirstValue(ClaimTypes.NameIdentifier)
            });

            await base.OnInitializedAsync();
        }
Exemple #8
0
        public override async Task <EntityOperationResult <CurrencyDto> > Handle(DateTime date)
        {
            Logger.LogInformation("building url to get html data.");
            var dateUrl = System.Web.HttpUtility.UrlEncode($"{date:dd/MM/yyyy}");

            var uri = new Uri(ServiceSettings.Url + "&fecha=" + dateUrl);

            Logger.LogInformation("Building http request with url {uri}", uri);
            var httpRequest = new HttpRequestMessage
            {
                RequestUri = uri,
                Method     = new HttpMethod("GET")
            };

            Logger.LogInformation("Sending request to Bna server.");
            var client       = HttpClientFactory.CreateClient();
            var httpResponse = await client.SendAsync(httpRequest).ConfigureAwait(false);

            Logger.LogInformation("Getting Html content of the Bna.");
            var htmlPage = await httpResponse.Content.ReadAsStringAsync();

            return(await GetDataFromHtmlAsync(htmlPage, date));
        }
Exemple #9
0
        public async Task <IEnumerable <ExternalEntityDto> > GetColors()
        {
            if (httpClient == null)
            {
                httpClient = HttpClientFactory.CreateClient("SoltaniHttpClient");
            }

            if (colors == null)
            {
                HttpResponseMessage result = await httpClient.GetAsync("GetParameter?type=20");

                if (result.IsSuccessStatusCode)
                {
                    colors = JsonConvert.DeserializeObject <IEnumerable <ExternalEntityDto> >(await result.Content.ReadAsStringAsync());
                }
                else
                {
                    throw new Exception(result.ReasonPhrase);
                }
            }

            return(colors);
        }
    public async Task <string> SendAsync(string url)
    {
        var client         = HttpClientFactory.CreateClient();
        var requestMessage = new HttpRequestMessage(HttpMethod.Get, url);

        var uri = new Uri(url, UriKind.RelativeOrAbsolute);

        if (!uri.IsAbsoluteUri)
        {
            var baseUrl = string.Empty;
            try
            {
                //Blazor tiered -- mode
                var remoteServiceConfig = await RemoteServiceConfigurationProvider.GetConfigurationOrDefaultAsync("Default");

                baseUrl            = remoteServiceConfig.BaseUrl;
                client.BaseAddress = new Uri(baseUrl);
                AddHeaders(requestMessage);
                await HttpClientAuthenticator.Authenticate(new RemoteServiceHttpClientAuthenticateContext(client,
                                                                                                          requestMessage, new RemoteServiceConfiguration(baseUrl), string.Empty));
            }
            catch (AbpException) // Blazor-Server mode.
            {
                baseUrl            = NavigationManager.BaseUri;
                client.BaseAddress = new Uri(baseUrl);
                foreach (var header in HttpContextAccessor.HttpContext.Request.Headers)
                {
                    requestMessage.Headers.TryAddWithoutValidation(header.Key, header.Value.ToArray());
                }
            }
        }

        var response = await client.SendAsync(requestMessage);

        return(await response.Content.ReadAsStringAsync());
    }
 private HttpClient GetDefaultClient(string endPointName)
 {
     return(HttpClientFactory.CreateClient(endPointName));
 }
Exemple #12
0
 private HttpClient GetClient(Uri uri)
 {
     return(HttpClientFactory.CreateClient(uri.IsOnion() ? OnionNamedClient : ClearnetNamedClient));
 }
Exemple #13
0
        public void CreateClient()
        {
            var testee = new HttpClientFactory();

            testee.CreateClient().Should().NotBeNull();
        }
        /// <summary>
        /// Execute the request (which is unguarded)
        /// </summary>
        /// <param name="request">The request to execute</param>
        /// <param name="ct">The cancellation token to use</param>
        /// <returns>The <see cref="IHttpResponseMessage"/> for the request</returns>
        protected async Task <IHttpResponseMessage> ExecuteRequest(IRestRequest request, CancellationToken ct)
        {
            AddDefaultParameters(request);
            while (true)
            {
                if (Authenticator != null && Authenticator.CanPreAuthenticate(this, request, Credentials))
                {
                    await Authenticator.PreAuthenticate(this, request, Credentials);
                }

                // Lazy initialization of the HTTP client
                if (_httpClient == null)
                {
                    _httpClient = HttpClientFactory.CreateClient(this, request);
                }

                bool failed  = true;
                var  message = HttpClientFactory.CreateRequestMessage(this, request);
                try
                {
                    var bodyData = GetContent(request);
                    if (bodyData != null)
                    {
                        message.Content = bodyData;
                    }

                    if (message.Content != null)
                    {
                        var content = message.Content;
                        foreach (var param in request.Parameters.Where(x => x.Type == ParameterType.HttpHeader && x.IsContentParameter()))
                        {
                            if (content.Headers.Contains(param.Name))
                            {
                                content.Headers.Remove(param.Name);
                            }
                            if (param.ValidateOnAdd)
                            {
                                content.Headers.Add(param.Name, param.ToRequestString());
                            }
                            else
                            {
                                content.Headers.TryAddWithoutValidation(param.Name, param.ToRequestString());
                            }
                        }
                    }

                    ModifyRequestBeforeAuthentication(_httpClient, message);

                    if (Authenticator != null && Authenticator.CanPreAuthenticate(_httpClient, message, Credentials))
                    {
                        await Authenticator.PreAuthenticate(_httpClient, message, Credentials);
                    }

                    var response = await _httpClient.SendAsync(message, ct);

                    try
                    {
                        if (!response.IsSuccessStatusCode)
                        {
                            if (Authenticator != null && Authenticator.CanHandleChallenge(_httpClient, message, Credentials, response))
                            {
                                await Authenticator.HandleChallenge(_httpClient, message, Credentials, response);

                                continue;
                            }

                            if (!IgnoreResponseStatusCode)
                            {
                                response.EnsureSuccessStatusCode();
                            }
                        }

                        failed = false;
                    }
                    finally
                    {
                        if (failed)
                        {
                            if (response != null)
                            {
                                response.Dispose();
                            }
                            else
                            {
                                message.Dispose();
                            }
                            message = null;
                        }
                    }

                    return(response);
                }
                finally
                {
                    if (failed && message != null)
                    {
                        message.Dispose();
                    }
                }
            }
        }
Exemple #15
0
        protected override async Task OnParametersSetAsync()
        {
            var authState = await authenticationStateTask;

            User = authState.User;

            var httpClient = HttpClientFactory.CreateClient(Configuration["Service:Api:AnonymousApiName"]);

            if (User.Identity.IsAuthenticated)
            {
                if (string.IsNullOrEmpty(ProfileId))
                {
                    ProfileId = User.FindFirstValue(ClaimTypes.NameIdentifier);
                }

                await httpClient.PostAsJsonAsync <EventTrackingItem>("api/EventTracker", new EventTrackingItem
                {
                    Category    = "Navigation",
                    Key         = $"ViewProfile#{ProfileId}",
                    CreatedDate = DateTime.UtcNow,
                    Id          = Guid.NewGuid(),
                    UserId      = User.FindFirstValue(ClaimTypes.NameIdentifier)
                });
            }
            else
            {
                await httpClient.PostAsJsonAsync <EventTrackingItem>("api/EventTracker", new EventTrackingItem
                {
                    Category    = "Navigation",
                    Key         = $"ViewProfile#{ProfileId}",
                    CreatedDate = DateTime.UtcNow,
                    Id          = Guid.NewGuid()
                });
            }

            var apiUrl = $"/api/viewProfile/{ProfileId}";
            var uri    = Navigation.ToAbsoluteUri(Navigation.Uri);

            if (QueryHelpers.ParseQuery(uri.Query).TryGetValue("social", out var _social))
            {
                apiUrl += $"?social={_social}";
                await httpClient.PostAsJsonAsync <EventTrackingItem>("api/EventTracker", new EventTrackingItem
                {
                    UserId      = UserProfile?.Id,
                    Category    = "Navigation",
                    Key         = $"ViewProfileFromSocial#{_social}",
                    CreatedDate = DateTime.UtcNow,
                    Id          = Guid.NewGuid()
                });
            }

            var getProfile = await httpClient.GetAsync(apiUrl);

            if (getProfile.StatusCode == System.Net.HttpStatusCode.NotFound)
            {
                Navigation.NavigateTo(Navigation.ToAbsoluteUri($"/Identity/Account/Register?PinCode={ProfileId}").ToString(), true);
            }

            getProfile.EnsureSuccessStatusCode();
            var json = await getProfile.Content.ReadAsStringAsync();

            UserProfile = Newtonsoft.Json.JsonConvert.DeserializeObject <ViewApplicationUser>(json);

            NavigationUrlService.SetUrls($"https://www.google.com/maps/search/?api=1&query={UserProfile.Address},{UserProfile.City}%20{UserProfile.Country}&query_place_id={UserProfile.DisplayName}",
                                         Navigation.ToAbsoluteUri($"/contact/import/{UserProfile.Id}").ToString());


            NavigationUrlService.ShowImport = true;

            if (User.Identity.IsAuthenticated)
            {
                NavigationUrlService.ShowContacts = true;
                NavigationUrlService.ShowMyAds    = true;

                if (User.FindFirstValue(ClaimTypes.NameIdentifier).Equals(UserProfile.Id))
                {
                    NavigationUrlService.ShowImport      = false;
                    NavigationUrlService.ShowEditProfile = true;
                }
            }

            await InvokeAsync(StateHasChanged);
        }
    public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
    {
        await base.ProcessAsync(context, output);

        // ignore, if already has integrity
        if (context.AllAttributes.ContainsName("integrity"))
        {
            return;
        }

        // get resource address
        var attribute = context.TagName switch
        {
            "script" => context.AllAttributes["src"],
            "link" => context.AllAttributes["href"],
            _ => throw new NotSupportedException($"Tag '{context.TagName}' is not supported for sub-resource integrity.")
        };

        var content = attribute.Value switch
        {
            string value => value,
            HtmlString htmlString => htmlString.Value,
            _ => null
        };

        if (content == null)
        {
            return;
        }

        if (content.StartsWith("//", StringComparison.OrdinalIgnoreCase))
        {
            content = ViewContext.HttpContext.Request.Scheme + ":" + content;
        }

        // ignore same site
        if (!content.Contains("://", StringComparison.OrdinalIgnoreCase))
        {
            return;
        }

        // ignore malformed URIs
        if (!Uri.TryCreate(content, UriKind.Absolute, out var uri))
        {
            return;
        }

        // calculate hash or get from cache
        var key       = $"SRI_{content}";
        var integrity = await MemoryCache.GetOrCreateAsync(key, async cacheEntry =>
        {
            cacheEntry.SetAbsoluteExpiration(DateTimeOffset.MaxValue);
            cacheEntry.SetPriority(CacheItemPriority.High);
            using var http = HttpClientFactory.CreateClient();
            try
            {
                using var stream        = await http.GetStreamAsync(uri);
                using var hashAlgorithm = SHA256.Create();
                var hash    = await hashAlgorithm.ComputeHashAsync(stream);
                var encoded = Convert.ToBase64String(hash);
                var value   = $"sha256-{encoded}";
                return(value);
            }
            catch (HttpRequestException ex)
            {
                Logger.LogWarning(ex, ex.Message);
                return(null);
            }
        });

        if (integrity == null)
        {
            return;
        }

        output.Attributes.Add("integrity", integrity);
        output.Attributes.Add("crossorigin", "anonymous");
    }
}
Exemple #17
0
 protected HttpClient GetClient()
 {
     return(HttpClientFactory.CreateClient(HttpClientName));
 }
Exemple #18
0
        public async Task <AuthenticationResult> Authentication(string code)
        {
            var hc = HttpClientFactory.CreateClient("DiscordApp");

            var clientSecret = Configuration.GetValue <string>("DiscordClientSeclet");

            if (string.IsNullOrEmpty(clientSecret))
            {
                return(await StubAuthentication());
            }

            var form = new Dictionary <string, string>();

            form.Add("client_id", StaticSettings.DiscordAppClientId);
            form.Add("client_secret", clientSecret);
            form.Add("grant_type", "authorization_code");
            form.Add("redirect_uri", GetRedirectUrl());
            form.Add("code", code);
            form.Add("scope ", "identify guilds webhook.incoming");

            var formContent = new FormUrlEncodedContent(form);

            var c = await hc.PostAsync("https://discordapp.com/api/oauth2/token", formContent);

            var json = await c.Content.ReadAsStringAsync();

            var tokenInfo = Newtonsoft.Json.JsonConvert.DeserializeObject <DiscordTokenTokenInfo>(json);

            //該当ユーザーがVETメンバーなのかのチェック
            var memberInfo = await GetVetMember(tokenInfo.access_token);

            if (!memberInfo.isVetMember)
            {
                return(new AuthenticationResult
                {
                    IsAuthenticated = false
                });
            }
            var user = memberInfo.user;

            var entity = DbContext.VetMembers.FirstOrDefault(c => c.DiscordId == user.Id);

            if (entity == null)
            {
                entity = await JoinUser(user);
            }
            else
            {
                entity.AvatarId  = user.AvatarId;
                entity.DiscordId = user.Id;
                entity.Name      = user.Username;
            }

            DbContext.SaveChanges();

#if DEBUG
            // entity = DbContext.VetMembers.Find(12);
#endif

            return(new AuthenticationResult
            {
                IsAuthenticated = true,
                User = entity
            });
        }
        protected override async Task OnParametersSetAsync()
        {
            var client = HttpClientFactory.CreateClient("ServerAPI.NonAuthorized");

            Contract = await client.GetFromJsonAsync <ContractDetailVm>($"api/contract/{Id}");
        }
Exemple #20
0
        public async Task InspectAsync(ResponseAnalysisContext context, CancellationToken cancellationToken)
        {
            if (context.IsHtml())
            {
                var html = context.ReadAsString();

                // find all script tags
                foreach (var index in FastHtmlParser.FindAllTagIndexes(html, "script"))
                {
                    // get 'src' attribute
                    var src = FastHtmlParser.GetAttributeValueAtTag(html, "src", index);
                    if (src.IndexOf(':') != -1 || src.StartsWith("//", StringComparison.Ordinal))
                    {
                        // check whether there is an 'integrity' attribute alrady
                        var integrity = FastHtmlParser.GetAttributeValueAtTag(html, "integrity", index);
                        if (integrity.Length > 0)
                        {
                            continue;
                        }

                        // compute integrity
                        var sri = await MemoryCache.GetOrCreateAsync($"SRI_{src}", async ce =>
                        {
                            ce.SetAbsoluteExpiration(DateTimeOffset.MaxValue);
                            ce.SetPriority(CacheItemPriority.High);

                            var client = HttpClientFactory.CreateClient();
                            try
                            {
                                // download script
                                using var request = new HttpRequestMessage(HttpMethod.Get, RelativeTo(src).ToString());
                                request.Headers.TryAddWithoutValidation("Origin", $"{context.HttpContext.Request.Scheme}://{context.HttpContext.Request.Host}");
                                using var response = await client.SendAsync(request);
                                if (!response.IsSuccessStatusCode)
                                {
                                    return(null);
                                }

                                if (response.Content == null)
                                {
                                    return(null);
                                }

                                if (!response.Headers.Any(h => h.Key.StartsWith("Access-Control-Allow", StringComparison.OrdinalIgnoreCase)))
                                {
                                    return(null);
                                }

                                var stream = await response.Content.ReadAsStreamAsync();

                                // compute hash
                                var hash   = HashAlgorithmPool.Sha256.ComputeHash(stream);
                                var base64 = Convert.ToBase64String(hash);
                                return($"sha256-{base64}");
                            }
                            catch (HttpRequestException)
                            {
                                return(null);
                            }
                        });

                        // add attribute
                        if (sri != null)
                        {
                            context.AddChange(FastHtmlParser.CreateInsertAttributeChange(html, index, "script", "integrity", sri));
                            if (FastHtmlParser.GetAttributeValueAtTag(html, "crossorigin", index).Length == 0)
                            {
                                context.AddChange(FastHtmlParser.CreateInsertAttributeChange(html, index, "script", "crossorigin", "anonymous"));
                            }
                        }
                    }
                }
            }
        }
Exemple #21
0
        public virtual async Task <ReGeocodeLocation> InverseAsync(AmapInverseHttpRequestParamter requestParamter)
        {
            if (requestParamter.Locations.Length > 20)
            {
                var localizer      = ServiceProvider.GetRequiredService <IStringLocalizer <AmapLocationResource> >();
                var localizerError = localizer["SupportsResolveAddress", 20];
                localizerError = localizer["ResolveLocationFailed", localizerError];
                if (Options.VisableErrorToClient)
                {
                    throw new UserFriendlyException(localizerError);
                }
                throw new AbpException($"Resolution address failed:{localizerError}!");
            }
            var client            = HttpClientFactory.CreateClient(AmapHttpConsts.HttpClientName);
            var requestUrlBuilder = new StringBuilder(128);

            requestUrlBuilder.Append("http://restapi.amap.com/v3/geocode/regeo");
            requestUrlBuilder.AppendFormat("?key={0}", Options.ApiKey);
            requestUrlBuilder.AppendFormat("&batch={0}", requestParamter.Batch);
            requestUrlBuilder.AppendFormat("&output={0}", requestParamter.Output);
            requestUrlBuilder.AppendFormat("&radius={0}", requestParamter.Radius);
            requestUrlBuilder.AppendFormat("&extensions={0}", requestParamter.Extensions);
            requestUrlBuilder.AppendFormat("&homeorcorp={0}", requestParamter.HomeOrCorp);
            requestUrlBuilder.AppendFormat("&location=");
            for (int i = 0; i < requestParamter.Locations.Length; i++)
            {
                requestUrlBuilder.AppendFormat("{0},{1}", Math.Round(requestParamter.Locations[i].Longitude, 6),
                                               Math.Round(requestParamter.Locations[i].Latitude, 6));
                if (i < requestParamter.Locations.Length - 1)
                {
                    requestUrlBuilder.Append("|");
                }
            }
            if (!requestParamter.PoiType.IsNullOrWhiteSpace())
            {
                requestUrlBuilder.AppendFormat("&poitype={0}", requestParamter.PoiType);
            }
            if (!requestParamter.PoiType.IsNullOrWhiteSpace())
            {
                requestUrlBuilder.AppendFormat("&poitype={0}", requestParamter.PoiType);
            }
            if (!requestParamter.Sig.IsNullOrWhiteSpace())
            {
                requestUrlBuilder.AppendFormat("&sig={0}", requestParamter.Sig);
            }
            if (requestParamter.RoadLevel.HasValue)
            {
                requestUrlBuilder.AppendFormat("&roadlevel={0}", requestParamter.RoadLevel);
            }

            var requestMessage = new HttpRequestMessage(HttpMethod.Get, requestUrlBuilder.ToString());

            var response = await client.SendAsync(requestMessage, GetCancellationToken());

            if (!response.IsSuccessStatusCode)
            {
                throw new AbpException($"Amap request service returns error! HttpStatusCode: {response.StatusCode}, ReasonPhrase: {response.ReasonPhrase}");
            }

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

            var amapResponse = JsonSerializer.Deserialize <AmapInverseLocationResponse>(resultContent);

            if (!amapResponse.IsSuccess())
            {
                var localizerFactory = ServiceProvider.GetRequiredService <IStringLocalizerFactory>();
                var localizerError   = amapResponse.GetErrorMessage().Localize(localizerFactory);
                if (Options.VisableErrorToClient)
                {
                    var localizer = ServiceProvider.GetRequiredService <IStringLocalizer <AmapLocationResource> >();
                    localizerError = localizer["ResolveLocationFailed", localizerError];
                    throw new UserFriendlyException(localizerError);
                }
                throw new AbpException($"Resolution address failed:{localizerError}!");
            }
            var inverseLocation = new ReGeocodeLocation
            {
                Street   = amapResponse.Regeocode.AddressComponent.StreetNumber.Street,
                AdCode   = amapResponse.Regeocode.AddressComponent.AdCode,
                Address  = amapResponse.Regeocode.Address,
                City     = amapResponse.Regeocode.AddressComponent.City.JoinAsString(","),
                Country  = amapResponse.Regeocode.AddressComponent.Country,
                District = amapResponse.Regeocode.AddressComponent.District,
                Number   = amapResponse.Regeocode.AddressComponent.StreetNumber.Number,
                Province = amapResponse.Regeocode.AddressComponent.Province,
                Town     = amapResponse.Regeocode.AddressComponent.TownShip.JoinAsString(" ")
            };

            return(inverseLocation);
        }
Exemple #22
0
        public virtual async Task <GecodeLocation> PositiveAsync(AmapPositiveHttpRequestParamter requestParamter)
        {
            var client            = HttpClientFactory.CreateClient(AmapHttpConsts.HttpClientName);
            var requestUrlBuilder = new StringBuilder(128);

            requestUrlBuilder.Append("http://restapi.amap.com/v3/geocode/geo");
            requestUrlBuilder.AppendFormat("?key={0}", Options.ApiKey);
            requestUrlBuilder.AppendFormat("&address={0}", requestParamter.Address);
            if (!requestParamter.City.IsNullOrWhiteSpace())
            {
                requestUrlBuilder.AppendFormat("&city={0}", requestParamter.City);
            }
            if (!requestParamter.Output.IsNullOrWhiteSpace())
            {
                requestUrlBuilder.AppendFormat("&output={0}", requestParamter.Output);
            }
            if (!requestParamter.Sig.IsNullOrWhiteSpace())
            {
                requestUrlBuilder.AppendFormat("&sig={0}", requestParamter.Sig);
            }
            requestUrlBuilder.AppendFormat("&batch={0}", requestParamter.Batch);

            var requestMessage = new HttpRequestMessage(HttpMethod.Get, requestUrlBuilder.ToString());

            var response = await client.SendAsync(requestMessage, GetCancellationToken());

            if (!response.IsSuccessStatusCode)
            {
                throw new AbpException($"Amap request service returns error! HttpStatusCode: {response.StatusCode}, ReasonPhrase: {response.ReasonPhrase}");
            }

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

            var amapResponse = JsonSerializer.Deserialize <AmapPositiveHttpResponse>(resultContent);

            if (!amapResponse.IsSuccess())
            {
                var localizerFactory = ServiceProvider.GetRequiredService <IStringLocalizerFactory>();
                var localizerError   = amapResponse.GetErrorMessage().Localize(localizerFactory);
                if (Options.VisableErrorToClient)
                {
                    var localizer = ServiceProvider.GetRequiredService <IStringLocalizer <AmapLocationResource> >();
                    localizerError = localizer["ResolveLocationFailed", localizerError];
                    throw new UserFriendlyException(localizerError);
                }
                throw new AbpException($"Resolution address failed:{localizerError}!");
            }
            if (amapResponse.Count <= 0)
            {
                var localizer      = ServiceProvider.GetRequiredService <IStringLocalizer <AmapLocationResource> >();
                var localizerError = localizer["ResolveLocationZero"];
                if (Options.VisableErrorToClient)
                {
                    throw new UserFriendlyException(localizerError);
                }
                throw new AbpException(localizerError);
            }

            var locations       = amapResponse.Geocodes[0].Location.Split(",");
            var postiveLocation = new GecodeLocation
            {
                Longitude = double.Parse(locations[0]),
                Latitude  = double.Parse(locations[1]),
                Level     = amapResponse.Geocodes[0].Level
            };

            postiveLocation.AddAdditional("Geocodes", amapResponse.Geocodes);

            return(postiveLocation);
        }
Exemple #23
0
    public Task GW2Wiki(CommandContext commandContext, [RemainingText] string searchTerm)
    {
        return(InvokeAsync(commandContext,
                           async commandContextContainer =>
        {
            var embedBuilder = new DiscordEmbedBuilder
            {
                Color = DiscordColor.Green
            };

            embedBuilder.WithTitle(LocalizationGroup.GetText("SearchResults", "Search results"));

            var client = HttpClientFactory.CreateClient();

            using (var response = await client.GetAsync(QueryHelpers.AddQueryString("https://wiki.guildwars2.com/api.php",
                                                                                    new Dictionary <string, string>
            {
                ["action"] = "query",
                ["srwhat"] = "title",
                ["list"] = "search",
                ["format"] = "json",
                ["srsearch"] = searchTerm,
            }))
                                  .ConfigureAwait(false))
            {
                var jsonResult = await response.Content
                                 .ReadAsStringAsync()
                                 .ConfigureAwait(false);

                var stringBuilder = new StringBuilder(1024);

                var searchResult = JsonConvert.DeserializeObject <SearchQueryRoot>(jsonResult);

                if (searchResult?.Query?.Search?.Count > 0)
                {
                    foreach (var result in searchResult.Query.Search)
                    {
                        var current = "> " + Formatter.MaskedUrl(result.Title, new Uri("https://wiki.guildwars2.com/?curid=" + result.PageId)) + "\n";

                        if (current.Length + stringBuilder.Length > stringBuilder.Capacity)
                        {
                            break;
                        }

                        stringBuilder.Append(current);
                    }
                }

                stringBuilder.Append("\u200B");

                embedBuilder.AddField(LocalizationGroup.GetText("TitleSearch", "Title search"), stringBuilder.ToString());
            }

            using (var response = await client.GetAsync(QueryHelpers.AddQueryString("https://wiki.guildwars2.com/api.php",
                                                                                    new Dictionary <string, string>
            {
                ["action"] = "query",
                ["srwhat"] = "text",
                ["list"] = "search",
                ["format"] = "json",
                ["srsearch"] = searchTerm,
            }))
                                  .ConfigureAwait(false))
            {
                var jsonResult = await response.Content
                                 .ReadAsStringAsync()
                                 .ConfigureAwait(false);

                var stringBuilder = new StringBuilder(1024);

                var searchResult = JsonConvert.DeserializeObject <SearchQueryRoot>(jsonResult);

                if (searchResult?.Query?.Search?.Count > 0)
                {
                    foreach (var result in searchResult.Query.Search)
                    {
                        var current = "> " + Formatter.MaskedUrl(result.Title, new Uri("https://wiki.guildwars2.com/?curid=" + result.PageId)) + "\n";

                        if (current.Length + stringBuilder.Length > stringBuilder.Capacity)
                        {
                            break;
                        }

                        stringBuilder.Append(current);
                    }
                }

                stringBuilder.Append("\u200B");

                embedBuilder.AddField(LocalizationGroup.GetText("TextSearch", "Text search"), stringBuilder.ToString());
            }

            embedBuilder.WithThumbnail("https://media.discordapp.net/attachments/847555191842537552/861182143987712010/gw2.png");
            embedBuilder.WithFooter("Scruffy", "https://cdn.discordapp.com/app-icons/838381119585648650/823930922cbe1e5a9fa8552ed4b2a392.png?size=64");
            embedBuilder.WithTimestamp(DateTime.Now);

            await commandContextContainer.Message
            .RespondAsync(embedBuilder)
            .ConfigureAwait(false);
        }));
    }
Exemple #24
0
        public async Task Connect(string name = "")
        {
            if (string.IsNullOrEmpty(name))
            {
                name = Option.CurrentRemote;
            }

            Logger.LogInformation($"Connect to remote {name}.");

            if (Option.Remotes.TryGetValue(name, out var remote))
            {
                Logger.LogInformation($"Detect remote {remote.Name} ({Enum.GetName(typeof(RemoteType), remote.Type)}).");
                switch (remote.Type)
                {
                case RemoteType.LocalFS:
                    Remote = new FileSystemBlogService(
                        new PhysicalFileProvider(remote.Uri).AsFileProvider());
                    break;

                case RemoteType.RemoteFS:
                {
                    var client = HttpClientFactory.CreateClient();
                    client.BaseAddress = new Uri(remote.Uri);
                    Remote             = new FileSystemBlogService(
                        new HttpFileProvider(client));
                }
                break;

                case RemoteType.Api:
                {
                    var client = HttpClientFactory.CreateClient();
                    client.BaseAddress = new Uri(remote.Uri);
                    Remote             = new ApiBlogService(client);
                }
                break;

                case RemoteType.Git:
                {
                    FSBuilder builder = new FSBuilder(Environment.CurrentDirectory);

                    Logger.LogInformation("Pull git repository.");

                    try
                    {
                        using var repo = new Repository(GitTempFolder);
                        // Credential information to fetch
                        LibGit2Sharp.PullOptions options = new LibGit2Sharp.PullOptions();

                        // User information to create a merge commit
                        var signature = new LibGit2Sharp.Signature(
                            new Identity("AcBlog.Tools.Sdk", "tools.sdk@acblog"), DateTimeOffset.Now);

                        // Pull
                        LibGit2Sharp.Commands.Pull(repo, signature, options);
                    }
                    catch
                    {
                        builder.EnsureDirectoryEmpty(GitTempFolder);
                        Repository.Clone(remote.Uri, GitTempFolder);
                    }

                    Remote = new FileSystemBlogService(
                        new PhysicalFileProvider(Path.Join(Environment.CurrentDirectory, GitTempFolder)).AsFileProvider());
                }
                break;
                }
                Remote.PostService.Context.Token = remote.Token;

                Option.CurrentRemote = name;
                await SaveOption();
            }
            else
            {
                throw new Exception("No remote");
            }
        }
Exemple #25
0
 protected HttpClient CreateClient()
 => HttpClientFactory?.CreateClient() ?? new HttpClient();
Exemple #26
0
        public async Task <Models.FileInfoResult> DownloadPackage(string packageFileName)
        {
            var httpClient = HttpClientFactory.CreateClient("PalaceServer");

            httpClient.BaseAddress = new Uri(PalaceSettings.UpdateServerUrl);

            var url = $"/api/microservices/download/{packageFileName}";
            HttpResponseMessage response = null;

            try
            {
                response = await httpClient.GetAsync(url);
            }
            catch (Exception ex)
            {
                Logger.LogError(ex, ex.Message);
                return(null);
            }

            if (response.StatusCode != System.Net.HttpStatusCode.OK)
            {
                Logger.LogWarning("response fail for download {0}", url);
                return(null);
            }

            if (!response.Content.Headers.Contains("content-disposition"))
            {
                Logger.LogWarning("response fail for {0} header content-disposition not found", url);
                return(null);
            }

            var contentDisposition = response.Content.Headers.GetValues("content-disposition").FirstOrDefault();

            if (string.IsNullOrWhiteSpace(contentDisposition))
            {
                Logger.LogWarning("response fail for {0} header content-disposition empty", url);
                return(null);
            }

            if (!System.IO.Directory.Exists(PalaceSettings.DownloadDirectory))
            {
                System.IO.Directory.CreateDirectory(PalaceSettings.DownloadDirectory);
            }

            var result = new Models.FileInfoResult();

            result.ZipFileName = System.IO.Path.Combine(PalaceSettings.DownloadDirectory, contentDisposition.Split(';')[1].Split('=')[1]);

            if (File.Exists(result.ZipFileName))
            {
                File.Delete(result.ZipFileName);
            }
            using (var fs = new System.IO.FileStream(result.ZipFileName, System.IO.FileMode.Create))
            {
                var    stream     = response.Content.ReadAsStreamAsync().Result;
                int    bufferSize = 1024;
                byte[] buffer     = new byte[bufferSize];
                int    pos        = 0;
                while ((pos = stream.Read(buffer, 0, bufferSize)) > 0)
                {
                    fs.Write(buffer, 0, pos);
                }
                fs.Close();
            }

            return(result);
        }
Exemple #27
0
        /// <summary>
        /// 发送请求数据
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="urlArguments">Url构造器</param>
        /// <param name="method">请求类型</param>
        /// <param name="contentCall">HttpContent请求内容</param>
        /// <param name="mediaType">mediaType数据格式,请求格式和返回格式一致(JSON、MessagePack)</param>
        /// <param name="cancellationToken">取消令牌</param>
        /// <returns></returns>
        public virtual async Task <T> HttpSendAsync <T>(UrlArguments urlArguments, HttpMethod method, Func <HttpContent> contentCall, HttpMediaType mediaType = HttpMediaType.Json, CancellationToken cancellationToken = default)
            where T : class, new()
        {
            HttpClient client = HttpClientFactory.CreateClient(string.IsNullOrEmpty(urlArguments.ClientName) ? "apiClient" : urlArguments.ClientName);

            string requestUrl = urlArguments.Complete().Url;

            string _mediaType = mediaType.Description();

            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(_mediaType));

            HttpResponseMessage responseMessage = null;

            if (client.BaseAddress == null)
            {
                HttpRequestMessage requestMessage = new HttpRequestMessage
                {
                    Method     = method,
                    RequestUri = new Uri(requestUrl)
                };

                foreach (var accept in client.DefaultRequestHeaders.Accept)
                {
                    requestMessage.Headers.Accept.Add(accept);
                }

                requestMessage.Headers.Authorization = client.DefaultRequestHeaders.Authorization;

                RequestHeaders(requestMessage.Headers);

                requestMessage.Content = contentCall?.Invoke();
                //if (requestMessage.Content != null)
                //    requestMessage.Content.Headers.ContentType = new MediaTypeHeaderValue(_mediaType);

                responseMessage = await client.SendAsync(requestMessage, cancellationToken);
            }
            else
            {
                RequestHeaders(client.DefaultRequestHeaders);

                HttpContent content = contentCall?.Invoke();
                //if (content != null)
                //    content.Headers.ContentType = new MediaTypeHeaderValue(_mediaType);

                responseMessage = await SendAsync(client, requestUrl, method, content, cancellationToken);
            }

            switch (mediaType)
            {
            case HttpMediaType.MessagePack:
            {
                var res = await responseMessage.Content.ReadAsByteArrayAsync();

                if (_logger.IsEnabled(LogLevel.Information))
                {
                    _logger.LogInformation($"{client.BaseAddress}{requestUrl} MediaType:{_mediaType},Method:{method.Method},HttpMessage Read Byte Data Length:{res.Length}");
                }

                return(res.ToMsgPackObject <T>());
            }

            case HttpMediaType.MessagePackJackson:
            {
                var res = await responseMessage.Content.ReadAsStringAsync();

                if (_logger.IsEnabled(LogLevel.Debug))
                {
                    _logger.LogDebug($"{client.BaseAddress}{requestUrl} MediaType:{_mediaType},Method:{method.Method},HttpMessage Read Jackson Data:{res}");
                }

                return(res.ToMsgPackBytesFromJson().ToMsgPackObject <T>());
            }

            default:
            {
                var res = await responseMessage.Content.ReadAsStringAsync();

                if (_logger.IsEnabled(LogLevel.Information))
                {
                    _logger.LogInformation($"{client.BaseAddress}{requestUrl} MediaType:{_mediaType},Method:{method.Method},HttpMessage Read Json Data:{res}");
                }

                return(res.ToObject <T>());
            }
            }
        }
 protected virtual HttpClient CreateClient(Request request)
 {
     return(HttpClientFactory.CreateClient(request.RequestUri.Host));
 }
 public async Task DeleteBirthday(Person person)
 {
     using (var httpClient = HttpClientFactory.CreateClient()) {
         await httpClient.DeleteAsync($"{BirthdayAPI}/{person.Id}");
     }
 }
Exemple #30
0
        protected override async Task OnInitializedAsync()
        {
            var client = HttpClientFactory.CreateClient("ServerAPI.NonAuthorized");

            ContractsList = await client.GetFromJsonAsync <ContractsListVm>("api/contract");
        }