Browse Source

Got rid of code.

pull/306/head
Sebastian 8 years ago
parent
commit
2a27d44011
  1. 43
      src/Squidex.Domain.Apps.Core.Operations/HandleRules/Actions/FastlyActionHandler.cs
  2. 54
      src/Squidex.Domain.Apps.Core.Operations/HandleRules/Actions/MediumActionHandler.cs
  3. 34
      src/Squidex.Domain.Apps.Core.Operations/HandleRules/Actions/SlackActionHandler.cs
  4. 45
      src/Squidex.Domain.Apps.Core.Operations/HandleRules/Actions/Utils/HttpHelper.cs
  5. 46
      src/Squidex.Domain.Apps.Core.Operations/HandleRules/Actions/WebhookActionHandler.cs
  6. 25
      src/Squidex.Domain.Apps.Core.Operations/HandleRules/HttpClientPool.cs
  7. 1
      tests/Squidex.Domain.Apps.Entities.Tests/Contents/ContentVersionLoaderTests.cs

43
src/Squidex.Domain.Apps.Core.Operations/HandleRules/Actions/FastlyActionHandler.cs

@ -8,10 +8,9 @@
using System;
using System.Net.Http;
using System.Threading.Tasks;
using Squidex.Domain.Apps.Core.HandleRules.Actions.Utils;
using Squidex.Domain.Apps.Core.HandleRules.EnrichedEvents;
using Squidex.Domain.Apps.Core.Rules.Actions;
using Squidex.Infrastructure;
using Squidex.Infrastructure.Http;
#pragma warning disable SA1649 // File name must match first type name
@ -29,6 +28,19 @@ namespace Squidex.Domain.Apps.Core.HandleRules.Actions
{
private const string Description = "Purge key in fastly";
private readonly ClientPool<string, HttpClient> clients;
public FastlyActionHandler()
{
clients = new ClientPool<string, HttpClient>(key =>
{
return new HttpClient
{
Timeout = TimeSpan.FromSeconds(2)
};
});
}
protected override (string Description, FastlyJob Data) CreateJob(EnrichedEvent @event, FastlyAction action)
{
var ruleJob = new FastlyJob
@ -43,32 +55,9 @@ namespace Squidex.Domain.Apps.Core.HandleRules.Actions
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 request = BuildRequest(job);
HttpResponseMessage response = null;
try
{
var valueWatch = ValueStopwatch.StartNew();
response = await HttpClientPool.GetHttpClient().SendAsync(request);
var responseString = await response.Content.ReadAsStringAsync();
var requestDump = DumpFormatter.BuildDump(request, response, null, responseString, TimeSpan.Zero, false);
return (requestDump, null);
}
catch (Exception ex)
{
var requestDump = DumpFormatter.BuildDump(request, response, null, ex.ToString(), TimeSpan.Zero, false);
var httpClient = clients.GetClient(string.Empty);
return (requestDump, ex);
}
return await httpClient.OneWayRequestAsync(BuildRequest(job), null);
}
private static HttpRequestMessage BuildRequest(FastlyJob job)

54
src/Squidex.Domain.Apps.Core.Operations/HandleRules/Actions/MediumActionHandler.cs

@ -13,6 +13,7 @@ using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using Squidex.Domain.Apps.Core.HandleRules.Actions.Utils;
using Squidex.Domain.Apps.Core.HandleRules.EnrichedEvents;
using Squidex.Domain.Apps.Core.Rules.Actions;
using Squidex.Infrastructure;
@ -32,12 +33,27 @@ namespace Squidex.Domain.Apps.Core.HandleRules.Actions
private const string Description = "Post to medium";
private readonly RuleEventFormatter formatter;
private readonly ClientPool<string, HttpClient> clients;
public MediumActionHandler(RuleEventFormatter formatter)
{
Guard.NotNull(formatter, nameof(formatter));
this.formatter = formatter;
clients = new ClientPool<string, HttpClient>(key =>
{
var client = new HttpClient
{
Timeout = TimeSpan.FromSeconds(4)
};
client.DefaultRequestHeaders.Add("Accept", "application/json");
client.DefaultRequestHeaders.Add("Accept-Charset", "utf-8");
client.DefaultRequestHeaders.Add("User-Agent", "Squidex Headless CMS");
return client;
});
}
protected override (string Description, MediumJob Data) CreateJob(EnrichedEvent @event, MediumAction action)
@ -79,6 +95,8 @@ namespace Squidex.Domain.Apps.Core.HandleRules.Actions
protected override async Task<(string Dump, Exception Exception)> ExecuteJobAsync(MediumJob job)
{
var httpClient = clients.GetClient(string.Empty);
string id;
HttpResponseMessage response = null;
@ -86,7 +104,7 @@ namespace Squidex.Domain.Apps.Core.HandleRules.Actions
var meRequest = BuildMeRequest(job);
try
{
response = await HttpClientPool.GetHttpClient().SendAsync(meRequest);
response = await httpClient.SendAsync(meRequest);
var responseString = await response.Content.ReadAsStringAsync();
var responseJson = JToken.Parse(responseString);
@ -100,42 +118,16 @@ namespace Squidex.Domain.Apps.Core.HandleRules.Actions
return (requestDump, ex);
}
var postRequestBody = job.RequestBody;
var postRequest = BuildPostRequest(job, postRequestBody, id);
try
{
response = await HttpClientPool.GetHttpClient().SendAsync(postRequest);
var responseString = await response.Content.ReadAsStringAsync();
var requestDump = DumpFormatter.BuildDump(postRequest, response, postRequestBody, 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(postRequest, response, postRequestBody, ex.ToString());
return (requestDump, ex);
}
return await httpClient.OneWayRequestAsync(BuildPostRequest(job, id), job.RequestBody);
}
private static HttpRequestMessage BuildPostRequest(MediumJob job, string requestBody, string id)
private static HttpRequestMessage BuildPostRequest(MediumJob job, string id)
{
var request = new HttpRequestMessage(HttpMethod.Post, $"https://api.medium.com/v1/users/{id}/posts")
{
Content = new StringContent(requestBody, Encoding.UTF8, "application/json")
Content = new StringContent(job.RequestBody, Encoding.UTF8, "application/json")
};
request.Headers.Add("Accept", "application/json");
request.Headers.Add("Accept-Charset", "utf-8");
request.Headers.Add("Authorization", $"Bearer {job.AccessToken}");
return request;
@ -145,8 +137,6 @@ namespace Squidex.Domain.Apps.Core.HandleRules.Actions
{
var request = new HttpRequestMessage(HttpMethod.Get, "https://api.medium.com/v1/me");
request.Headers.Add("Accept", "application/json");
request.Headers.Add("Accept-Charset", "utf-8");
request.Headers.Add("Authorization", $"Bearer {job.AccessToken}");
return request;

34
src/Squidex.Domain.Apps.Core.Operations/HandleRules/Actions/SlackActionHandler.cs

@ -11,10 +11,10 @@ using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using Squidex.Domain.Apps.Core.HandleRules.Actions.Utils;
using Squidex.Domain.Apps.Core.HandleRules.EnrichedEvents;
using Squidex.Domain.Apps.Core.Rules.Actions;
using Squidex.Infrastructure;
using Squidex.Infrastructure.Http;
#pragma warning disable SA1649 // File name must match first type name
@ -41,12 +41,21 @@ namespace Squidex.Domain.Apps.Core.HandleRules.Actions
private const string Description = "Send message to slack";
private readonly RuleEventFormatter formatter;
private readonly ClientPool<string, HttpClient> clients;
public SlackActionHandler(RuleEventFormatter formatter)
{
Guard.NotNull(formatter, nameof(formatter));
this.formatter = formatter;
clients = new ClientPool<string, HttpClient>(key =>
{
return new HttpClient
{
Timeout = TimeSpan.FromSeconds(2)
};
});
}
protected override (string Description, SlackJob Data) CreateJob(EnrichedEvent @event, SlackAction action)
@ -64,28 +73,11 @@ namespace Squidex.Domain.Apps.Core.HandleRules.Actions
return (Description, ruleJob);
}
protected override async Task<(string Dump, Exception Exception)> ExecuteJobAsync(SlackJob job)
protected override Task<(string Dump, Exception Exception)> ExecuteJobAsync(SlackJob job)
{
var requestBody = job.Body;
var request = BuildRequest(job, requestBody);
HttpResponseMessage response = null;
try
{
response = await HttpClientPool.GetHttpClient().SendAsync(request);
var httpClient = clients.GetClient(string.Empty);
var responseString = await response.Content.ReadAsStringAsync();
var requestDump = DumpFormatter.BuildDump(request, response, requestBody, responseString);
return (requestDump, null);
}
catch (Exception ex)
{
var requestDump = DumpFormatter.BuildDump(request, response, requestBody, ex.ToString());
return (requestDump, ex);
}
return httpClient.OneWayRequestAsync(BuildRequest(job, job.Body), job.Body);
}
private static HttpRequestMessage BuildRequest(SlackJob job, string requestBody)

45
src/Squidex.Domain.Apps.Core.Operations/HandleRules/Actions/Utils/HttpHelper.cs

@ -0,0 +1,45 @@
// ==========================================================================
// Squidex Headless CMS
// ==========================================================================
// Copyright (c) Squidex UG (haftungsbeschraenkt)
// All rights reserved. Licensed under the MIT license.
// ==========================================================================
using System;
using System.Net.Http;
using System.Threading.Tasks;
using Squidex.Infrastructure.Http;
namespace Squidex.Domain.Apps.Core.HandleRules.Actions.Utils
{
public static class HttpHelper
{
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);
}
}
}
}

46
src/Squidex.Domain.Apps.Core.Operations/HandleRules/Actions/WebhookActionHandler.cs

@ -11,10 +11,10 @@ using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using Squidex.Domain.Apps.Core.HandleRules.Actions.Utils;
using Squidex.Domain.Apps.Core.HandleRules.EnrichedEvents;
using Squidex.Domain.Apps.Core.Rules.Actions;
using Squidex.Infrastructure;
using Squidex.Infrastructure.Http;
#pragma warning disable SA1649 // File name must match first type name
@ -42,12 +42,25 @@ namespace Squidex.Domain.Apps.Core.HandleRules.Actions
public sealed class WebhookActionHandler : RuleActionHandler<WebhookAction, WebhookJob>
{
private readonly RuleEventFormatter formatter;
private readonly ClientPool<string, HttpClient> clients;
public WebhookActionHandler(RuleEventFormatter formatter)
{
Guard.NotNull(formatter, nameof(formatter));
this.formatter = formatter;
clients = new ClientPool<string, HttpClient>(key =>
{
var client = new HttpClient
{
Timeout = TimeSpan.FromSeconds(4)
};
client.DefaultRequestHeaders.Add("User-Agent", "Squidex Webhook");
return client;
});
}
protected override (string Description, WebhookJob Data) CreateJob(EnrichedEvent @event, WebhookAction action)
@ -66,35 +79,11 @@ namespace Squidex.Domain.Apps.Core.HandleRules.Actions
return (ruleDescription, ruleJob);
}
protected override async Task<(string Dump, Exception Exception)> ExecuteJobAsync(WebhookJob job)
protected override Task<(string Dump, Exception Exception)> ExecuteJobAsync(WebhookJob job)
{
var requestBody = job.Body;
var request = BuildRequest(job, requestBody);
HttpResponseMessage response = null;
try
{
response = await HttpClientPool.GetHttpClient().SendAsync(request);
var httpClient = clients.GetClient(string.Empty);
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);
}
return httpClient.OneWayRequestAsync(BuildRequest(job, job.Body), job.Body);
}
private static HttpRequestMessage BuildRequest(WebhookJob job, string requestBody)
@ -105,7 +94,6 @@ namespace Squidex.Domain.Apps.Core.HandleRules.Actions
};
request.Headers.Add("X-Signature", job.RequestSignature);
request.Headers.Add("User-Agent", "Squidex Webhook");
return request;
}

25
src/Squidex.Domain.Apps.Core.Operations/HandleRules/HttpClientPool.cs

@ -1,25 +0,0 @@
// ==========================================================================
// Squidex Headless CMS
// ==========================================================================
// Copyright (c) Squidex UG (haftungsbeschraenkt)
// All rights reserved. Licensed under the MIT license.
// ==========================================================================
using System;
using System.Net.Http;
namespace Squidex.Domain.Apps.Core.HandleRules
{
public static class HttpClientPool
{
private static readonly ClientPool<string, HttpClient> Pool = new ClientPool<string, HttpClient>(key =>
{
return new HttpClient { Timeout = TimeSpan.FromSeconds(2) };
});
public static HttpClient GetHttpClient()
{
return Pool.GetClient(string.Empty);
}
}
}

1
tests/Squidex.Domain.Apps.Entities.Tests/Contents/ContentVersionLoaderTests.cs

@ -12,7 +12,6 @@ using Orleans;
using Squidex.Domain.Apps.Core.Schemas;
using Squidex.Infrastructure;
using Squidex.Infrastructure.Orleans;
using Squidex.Infrastructure.States;
using Xunit;
namespace Squidex.Domain.Apps.Entities.Contents

Loading…
Cancel
Save