Esempio n. 1
0
        public async Task <ProxyStatus> PingAsync()
        {
            var request = new HttpClient.HttpRequest();

            //request.SetUriFromString(this.config.Endpoint);
            request.Options.EnsureSuccess = false;
            request.Options.Timeout       = 5000;

            // The HTTP client uses cert. pinning, allowing self-signed certs
            request.Options.AllowInsecureSslServer = true;

            var response = await this.client.GetAsync(request);

            var body = response.Content == null
                ? string.Empty
                : Encoding.UTF8.GetString(response.Content);
            var content = body.Length > 120
                ? body.Substring(0, 120) + "..."
                : body;

            return(new ProxyStatus
            {
                StatusCode = (int)response.StatusCode,
                Message = content
            });
        }
Esempio n. 2
0
        // Prepare the request to send to the remote endpoint
        private IHttpRequest BuildRequest(HttpRequest requestIn)
        {
            var requestOut = new HttpClient.HttpRequest();

            // Forward HTTP request headers
            foreach (var header in requestIn.Headers)
            {
                if (ExcludedRequestHeaders.Contains(header.Key.ToLowerInvariant()))
                {
                    this.log.LogDebug("Ignoring request header", new { header.Key, header.Value });
                    continue;
                }

                this.log.LogDebug("Adding request header", new { header.Key, header.Value });
                foreach (var value in header.Value)
                {
                    requestOut.AddHeader(header.Key, value);
                }
            }

            FeatureAvailability featureAvailability;

            (feature, featureAvailability) = featuresManager.GetFeatureFromCookieOrHeader(requestIn);
            if (featureAvailability == FeatureAvailability.Cookie)
            {
                // feature available in cookie, but not as http header. Add to outgoing http headers:
                requestOut.AddHeader(FeaturesManager.HTTPHEADER_FEATURE, feature);
            }
            var urls = featuresManager.GetUrlFromFeatureConfiguration(feature, requestIn);

            fromSchemeHostname = urls?.fromSchemeHostname;
            fromUrl            = urls?.fromUrl;
            requestOut.SetUriFromString(urls?.toUrl ?? requestIn.GetEncodedUrl());

            // Forward request payload
            var method = requestIn.Method.ToUpperInvariant();

            if (Microsoft.Azure.IoTSolutions.ReverseProxy.HttpClient.HttpClient.MethodsWithPayload.Contains(method))
            {
                requestOut.SetContent(this.GetRequestPayload(requestIn), requestIn.ContentType);
            }

            // Allow error codes without throwing an exception
            requestOut.Options.EnsureSuccess = false;

            // The HTTP client uses cert. pinning, allowing self-signed certs
            requestOut.Options.AllowInsecureSslServer = true;

            return(requestOut);
        }
Esempio n. 3
0
        // Prepare the request to send to the remote endpoint
        private IHttpRequest BuildRequest(HttpRequest requestIn, string toHostname)
        {
            var requestOut = new HttpClient.HttpRequest();

            // Forward HTTP request headers
            foreach (var header in requestIn.Headers)
            {
                if (ExcludedRequestHeaders.Contains(header.Key.ToLowerInvariant()))
                {
                    this.log.Debug("Ignoring request header", () => new { header.Key, header.Value });
                    continue;
                }

                this.log.Debug("Adding request header", () => new { header.Key, header.Value });
                foreach (var value in header.Value)
                {
                    requestOut.AddHeader(header.Key, value);
                }
            }

            var url = toHostname + requestIn.Path.Value + requestIn.QueryString;

            this.log.Debug("URL", () => new { url });
            requestOut.SetUriFromString(url);

            // Forward request payload
            var method = requestIn.Method.ToUpperInvariant();

            if (HttpClient.HttpClient.MethodsWithPayload.Contains(method))
            {
                requestOut.SetContent(this.GetRequestPayload(requestIn), requestIn.ContentType);
            }

            // Allow error codes without throwing an exception
            requestOut.Options.EnsureSuccess = false;

            // The HTTP client uses cert. pinning, allowing self-signed certs
            requestOut.Options.AllowInsecureSslServer = true;

            return(requestOut);
        }