示例#1
0
        public static async Task <Result> OneWayRequestAsync(this HttpClient client, HttpRequestMessage request, string requestBody = null, CancellationToken ct = default)
        {
            HttpResponseMessage response = null;

            try
            {
                response = await client.SendAsync(request, ct);

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

                var requestDump = DumpFormatter.BuildDump(request, response, requestBody, responseString);

                if (!response.IsSuccessStatusCode)
                {
                    var ex = new HttpRequestException($"Response code does not indicate success: {(int)response.StatusCode} ({response.StatusCode}).");

                    return(Result.Failed(ex, requestDump));
                }
                else
                {
                    return(Result.Success(requestDump));
                }
            }
            catch (Exception ex)
            {
                var requestDump = DumpFormatter.BuildDump(request, response, requestBody, ex.ToString());

                return(Result.Failed(ex, requestDump));
            }
        }
示例#2
0
        public override async Task <(string Dump, Exception Exception)> ExecuteJobAsync(RuleJobData job)
        {
            var requestBody = job["RequestBody"].ToString(Formatting.Indented);
            var requestMsg  = BuildRequest(job, requestBody);

            HttpResponseMessage response = null;

            try
            {
                response = await HttpClientPool.GetHttpClient().SendAsync(requestMsg);

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

                var requestDump = DumpFormatter.BuildDump(requestMsg, response, requestBody, responseString, TimeSpan.Zero, false);

                return(requestDump, null);
            }
            catch (Exception ex)
            {
                if (requestMsg != null)
                {
                    var requestDump = DumpFormatter.BuildDump(requestMsg, response, requestBody, ex.ToString(), TimeSpan.Zero, false);

                    return(requestDump, ex);
                }
                else
                {
                    var requestDump = ex.ToString();

                    return(requestDump, ex);
                }
            }
        }
示例#3
0
        protected override async Task <(string Dump, Exception Exception)> ExecuteJobAsync(MediumJob job)
        {
            using (var httpClient = httpClientFactory.CreateClient())
            {
                httpClient.Timeout = TimeSpan.FromSeconds(4);
                httpClient.DefaultRequestHeaders.Add("Accept", "application/json");
                httpClient.DefaultRequestHeaders.Add("Accept-Charset", "utf-8");
                httpClient.DefaultRequestHeaders.Add("User-Agent", "Squidex Headless CMS");

                string id;

                HttpResponseMessage response = null;

                var meRequest = BuildMeRequest(job);
                try
                {
                    response = await httpClient.SendAsync(meRequest);

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

                    var responseJson = JToken.Parse(responseString);

                    id = responseJson["data"]["id"].ToString();
                }
                catch (Exception ex)
                {
                    var requestDump = DumpFormatter.BuildDump(meRequest, response, ex.ToString());

                    return(requestDump, ex);
                }

                return(await httpClient.OneWayRequestAsync(BuildPostRequest(job, id), job.RequestBody));
            }
        }
示例#4
0
        protected override async Task <(string Dump, Exception Exception)> ExecuteJobAsync(WebhookJob job)
        {
            var requestBody    = job.Body;
            var requestMessage = BuildRequest(job, requestBody);

            HttpResponseMessage response = null;

            try
            {
                response = await HttpClientPool.GetHttpClient().SendAsync(requestMessage);

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

                var requestDump = DumpFormatter.BuildDump(requestMessage, response, requestBody, responseString, TimeSpan.Zero, false);

                Exception ex = null;

                if (!response.IsSuccessStatusCode)
                {
                    ex = new HttpRequestException($"Response code does not indicate success: {(int)response.StatusCode} ({response.StatusCode}).");
                }

                return(requestDump, ex);
            }
            catch (Exception ex)
            {
                var requestDump = DumpFormatter.BuildDump(requestMessage, response, requestBody, ex.ToString(), TimeSpan.Zero, false);

                return(requestDump, ex);
            }
        }
示例#5
0
        protected override async Task <(string Dump, Exception Exception)> ExecuteJobAsync(FastlyJob job)
        {
            if (string.IsNullOrWhiteSpace(job.Key))
            {
                return(null, new InvalidOperationException("The action cannot handle this event."));
            }

            var requestMsg = BuildRequest(job);

            HttpResponseMessage response = null;

            try
            {
                response = await HttpClientPool.GetHttpClient().SendAsync(requestMsg);

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

                var requestDump = DumpFormatter.BuildDump(requestMsg, response, null, responseString, TimeSpan.Zero, false);

                return(requestDump, null);
            }
            catch (Exception ex)
            {
                var requestDump = DumpFormatter.BuildDump(requestMsg, response, null, ex.ToString(), TimeSpan.Zero, false);

                return(requestDump, ex);
            }
        }
示例#6
0
        protected override async Task <(string Dump, Exception Exception)> ExecuteJobAsync(MediumJob job)
        {
            var httpClient = clients.GetClient(string.Empty);

            string id;

            HttpResponseMessage response = null;

            var meRequest = BuildMeRequest(job);

            try
            {
                response = await httpClient.SendAsync(meRequest);

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

                var responseJson = JToken.Parse(responseString);

                id = responseJson["data"]["id"].ToString();
            }
            catch (Exception ex)
            {
                var requestDump = DumpFormatter.BuildDump(meRequest, response, ex.ToString());

                return(requestDump, ex);
            }

            return(await httpClient.OneWayRequestAsync(BuildPostRequest(job, id), job.RequestBody));
        }
示例#7
0
        public static async Task <(string Dump, Exception Exception)> OneWayRequestAsync(this HttpClient client, HttpRequestMessage request, string requestBody = null)
        {
            HttpResponseMessage response = null;

            try
            {
                response = await client.SendAsync(request);

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

                var requestDump = DumpFormatter.BuildDump(request, response, requestBody, responseString);

                Exception ex = null;

                if (!response.IsSuccessStatusCode)
                {
                    ex = new HttpRequestException($"Response code does not indicate success: {(int)response.StatusCode} ({response.StatusCode}).");
                }

                return(requestDump, ex);
            }
            catch (Exception ex)
            {
                var requestDump = DumpFormatter.BuildDump(request, response, requestBody, ex.ToString());

                return(requestDump, ex);
            }
        }
示例#8
0
        /// <summary>
        /// Dumps variables.
        /// </summary>
        /// <param name="ctx">Current runtime context.</param>
        /// <param name="variables">Variables to be dumped.</param>
        public static void var_dump(Context ctx, params PhpValue[] variables)
        {
            var formatter = new DumpFormatter(ctx, "\n"); // TODO: HtmlDumpFormatter

            for (int i = 0; i < variables.Length; i++)
            {
                ctx.Echo(formatter.Serialize(variables[i].GetValue()));
            }
        }
示例#9
0
        public virtual async Task <(string Dump, WebhookResult Result, TimeSpan Elapsed)> SendAsync(WebhookJob job)
        {
            HttpRequestMessage  request  = BuildRequest(job);
            HttpResponseMessage response = null;

            var isTimeout = false;

            var watch = Stopwatch.StartNew();

            try
            {
                using (var client = new HttpClient {
                    Timeout = Timeout
                })
                {
                    response = await client.SendAsync(request);
                }
            }
            catch (TimeoutException)
            {
                isTimeout = true;
            }
            catch (OperationCanceledException)
            {
                isTimeout = true;
            }
            finally
            {
                watch.Stop();
            }

            var responseString = string.Empty;

            if (response != null)
            {
                responseString = await response.Content.ReadAsStringAsync();
            }

            var dump = DumpFormatter.BuildDump(request, response, job.RequestBody, responseString, watch.Elapsed);

            var result = WebhookResult.Failed;

            if (isTimeout)
            {
                result = WebhookResult.Timeout;
            }
            else if (response?.IsSuccessStatusCode == true)
            {
                result = WebhookResult.Success;
            }

            return(dump, result, watch.Elapsed);
        }
        protected override async Task <Result> ExecuteJobAsync(MediumJob job,
                                                               CancellationToken ct = default)
        {
            using (var httpClient = httpClientFactory.CreateClient())
            {
                httpClient.Timeout = TimeSpan.FromSeconds(4);
                httpClient.DefaultRequestHeaders.Add("Accept", "application/json");
                httpClient.DefaultRequestHeaders.Add("Accept-Charset", "utf-8");
                httpClient.DefaultRequestHeaders.Add("User-Agent", "Squidex Headless CMS");

                string path;

                if (!string.IsNullOrWhiteSpace(job.PublicationId))
                {
                    path = $"v1/publications/{job.PublicationId}/posts";
                }
                else
                {
                    HttpResponseMessage response = null;

                    var meRequest = BuildMeRequest(job);
                    try
                    {
                        response = await httpClient.SendAsync(meRequest, ct);

                        var responseString = await response.Content.ReadAsStringAsync(ct);

                        var responseJson = serializer.Deserialize <UserResponse>(responseString);

                        var id = responseJson.Data?.Id;

                        path = $"v1/users/{id}/posts";
                    }
                    catch (Exception ex)
                    {
                        var requestDump = DumpFormatter.BuildDump(meRequest, response, ex.ToString());

                        return(Result.Failed(ex, requestDump));
                    }
                }

                return(await httpClient.OneWayRequestAsync(BuildPostRequest(job, path), job.RequestBody, ct));
            }
        }
示例#11
0
        public override async Task <(string Dump, Exception Exception)> ExecuteJobAsync(RuleJobData job)
        {
            var requestBody = job["RequestBody"].ToString(Formatting.Indented);
            var requestMsg  = BuildRequest(job, requestBody);

            HttpResponseMessage response = null;

            try
            {
                response = await HttpClientPool.GetHttpClient().SendAsync(requestMsg);

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

                var requestDump = DumpFormatter.BuildDump(requestMsg, response, requestBody, responseString, TimeSpan.Zero, false);

                Exception ex = null;

                if (!response.IsSuccessStatusCode)
                {
                    ex = new HttpRequestException($"Response code does not indicate success: {(int)response.StatusCode} ({response.StatusCode}).");
                }

                return(requestDump, ex);
            }
            catch (Exception ex)
            {
                if (requestMsg != null)
                {
                    var requestDump = DumpFormatter.BuildDump(requestMsg, response, requestBody, ex.ToString(), TimeSpan.Zero, false);

                    return(requestDump, ex);
                }
                else
                {
                    throw;
                }
            }
        }
示例#12
0
        public override async Task <(string Dump, Exception Exception)> ExecuteJobAsync(RuleJobData job)
        {
            if (!job.TryGetValue("Key", out var keyToken))
            {
                return(null, new InvalidOperationException("The action cannot handle this event."));
            }

            var requestMsg = BuildRequest(job, keyToken.Value <string>());

            HttpResponseMessage response = null;

            try
            {
                response = await HttpClientPool.GetHttpClient().SendAsync(requestMsg);

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

                var requestDump = DumpFormatter.BuildDump(requestMsg, response, null, responseString, TimeSpan.Zero, false);

                return(requestDump, null);
            }
            catch (Exception ex)
            {
                if (requestMsg != null)
                {
                    var requestDump = DumpFormatter.BuildDump(requestMsg, response, null, ex.ToString(), TimeSpan.Zero, false);

                    return(requestDump, ex);
                }
                else
                {
                    var requestDump = ex.ToString();

                    return(requestDump, ex);
                }
            }
        }
示例#13
0
        protected override async Task <(string Dump, Exception Exception)> ExecuteJobAsync(SlackJob job)
        {
            var requestBody    = job.Body;
            var requestMessage = BuildRequest(job, requestBody);

            HttpResponseMessage response = null;

            try
            {
                response = await HttpClientPool.GetHttpClient().SendAsync(requestMessage);

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

                var requestDump = DumpFormatter.BuildDump(requestMessage, response, requestBody, responseString, TimeSpan.Zero, false);

                return(requestDump, null);
            }
            catch (Exception ex)
            {
                var requestDump = DumpFormatter.BuildDump(requestMessage, response, requestBody, ex.ToString(), TimeSpan.Zero, false);

                return(requestDump, ex);
            }
        }
示例#14
0
 /// <summary>
 /// Dumps variables.
 /// </summary>
 /// <param name="ctx">Current runtime context.</param>
 /// <param name="variables">Variables to be dumped.</param>
 public static void var_dump(Context ctx, params PhpValue[] variables)
 {
     var formatter = new DumpFormatter(ctx, "\n"); // TODO: HtmlDumpFormatter
     for (int i = 0; i < variables.Length; i++)
     {
         ctx.Echo(formatter.Serialize(variables[i]));
     }
 }
示例#15
0
        private async Task <InvocationResponse> DispatchEventAsync(InvocationRequest input)
        {
            try
            {
                var payload = SignPayload(input.Payload, input.Webhook);

                var requestString  = payload.ToString(Formatting.Indented);
                var responseString = string.Empty;

                var request  = BuildRequest(requestString, input.Webhook);
                var response = (HttpResponseMessage)null;

                var isTimeout = false;

                var watch = Stopwatch.StartNew();
                try
                {
                    using (log.MeasureInformation(w => w
                                                  .WriteProperty("action", "SendToHook")
                                                  .WriteProperty("status", "Invoked")
                                                  .WriteProperty("requestUrl", request.RequestUri.ToString())))
                    {
                        using (var client = new HttpClient {
                            Timeout = Timeout
                        })
                        {
                            response = await client.SendAsync(request);
                        }
                    }
                }
                catch (TimeoutException)
                {
                    isTimeout = true;
                }
                catch (OperationCanceledException)
                {
                    isTimeout = true;
                }
                finally
                {
                    watch.Stop();
                }

                if (response != null)
                {
                    responseString = await response.Content.ReadAsStringAsync();
                }

                var dump = DumpFormatter.BuildDump(request, response, requestString, responseString, watch.Elapsed);

                var result = WebhookResult.Fail;

                if (isTimeout)
                {
                    result = WebhookResult.Timeout;
                }
                else if (response?.IsSuccessStatusCode == true)
                {
                    result = WebhookResult.Success;
                }

                return(new InvocationResponse {
                    Dump = dump, Result = result, Elapsed = watch.Elapsed, Webhook = input.Webhook
                });
            }
            catch (Exception ex)
            {
                log.LogError(ex, w => w
                             .WriteProperty("action", "SendToHook")
                             .WriteProperty("status", "Failed"));

                return(null);
            }
        }