Browse Source

Noop sender.

pull/354/head
Sebastian Stehle 7 years ago
parent
commit
e0391bb5bb
  1. 2
      src/Squidex.Domain.Apps.Entities/Apps/Invitation/IInvitationEmailSender.cs
  2. 5
      src/Squidex.Domain.Apps.Entities/Apps/Invitation/InvitationEmailEventConsumer.cs
  3. 5
      src/Squidex.Domain.Apps.Entities/Apps/Invitation/InvitationEmailSender.cs
  4. 31
      src/Squidex.Domain.Apps.Entities/Apps/Invitation/NoopInvitationEmailSender.cs
  5. 17
      src/Squidex/Config/Domain/EntitiesServices.cs
  6. 3
      src/Squidex/appsettings.json
  7. 23
      tests/Squidex.Domain.Apps.Entities.Tests/Apps/Invitation/InvitationEmailEventConsumerTests.cs

2
src/Squidex.Domain.Apps.Entities/Apps/Invitation/IInvitationEmailSender.cs

@ -12,6 +12,8 @@ namespace Squidex.Domain.Apps.Entities.Apps.Invitation
{ {
public interface IInvitationEmailSender public interface IInvitationEmailSender
{ {
bool IsActive { get; }
Task SendNewUserEmailAsync(IUser assigner, IUser assignee, string appName); Task SendNewUserEmailAsync(IUser assigner, IUser assignee, string appName);
Task SendExistingUserEmailAsync(IUser assigner, IUser assignee, string appName); Task SendExistingUserEmailAsync(IUser assigner, IUser assignee, string appName);

5
src/Squidex.Domain.Apps.Entities/Apps/Invitation/InvitationEmailEventConsumer.cs

@ -55,6 +55,11 @@ namespace Squidex.Domain.Apps.Entities.Apps.Invitation
public async Task On(Envelope<IEvent> @event) public async Task On(Envelope<IEvent> @event)
{ {
if (!emailSender.IsActive)
{
return;
}
if (@event.Payload is AppContributorAssigned appContributorAssigned && appContributorAssigned.Actor.IsSubject) if (@event.Payload is AppContributorAssigned appContributorAssigned && appContributorAssigned.Actor.IsSubject)
{ {
var assignerId = appContributorAssigned.Actor.Identifier; var assignerId = appContributorAssigned.Actor.Identifier;

5
src/Squidex.Domain.Apps.Entities/Apps/Invitation/InvitationEmailSender.cs

@ -21,6 +21,11 @@ namespace Squidex.Domain.Apps.Entities.Apps.Invitation
private readonly ISemanticLog log; private readonly ISemanticLog log;
private readonly InvitationEmailTextOptions texts; private readonly InvitationEmailTextOptions texts;
public bool IsActive
{
get { return true; }
}
public InvitationEmailSender( public InvitationEmailSender(
IOptions<InvitationEmailTextOptions> texts, IOptions<InvitationEmailTextOptions> texts,
IEmailSender emailSender, IEmailSender emailSender,

31
src/Squidex.Domain.Apps.Entities/Apps/Invitation/NoopInvitationEmailSender.cs

@ -0,0 +1,31 @@
// ==========================================================================
// Squidex Headless CMS
// ==========================================================================
// Copyright (c) Squidex UG (haftungsbeschraenkt)
// All rights reserved. Licensed under the MIT license.
// ==========================================================================
using System.Threading.Tasks;
using Squidex.Infrastructure.Tasks;
using Squidex.Shared.Users;
namespace Squidex.Domain.Apps.Entities.Apps.Invitation
{
public sealed class NoopInvitationEmailSender : IInvitationEmailSender
{
public bool IsActive
{
get { return false; }
}
public Task SendExistingUserEmailAsync(IUser assigner, IUser assignee, string appName)
{
return TaskHelper.Done;
}
public Task SendNewUserEmailAsync(IUser assigner, IUser assignee, string appName)
{
return TaskHelper.Done;
}
}
}

17
src/Squidex/Config/Domain/EntitiesServices.cs

@ -156,18 +156,23 @@ namespace Squidex.Config.Domain
{ {
services.AddSingleton(Options.Create(emailOptions)); services.AddSingleton(Options.Create(emailOptions));
services.Configure<InvitationEmailTextOptions>(
config.GetSection("email:invitations"));
services.AddSingletonAs<SmtpEmailSender>() services.AddSingletonAs<SmtpEmailSender>()
.As<IEmailSender>(); .As<IEmailSender>();
services.AddSingletonAs<InvitationEmailEventConsumer>()
.As<IEventConsumer>();
services.AddSingletonAs<InvitationEmailSender>() services.AddSingletonAs<InvitationEmailSender>()
.AsOptional<IInvitationEmailSender>(); .AsOptional<IInvitationEmailSender>();
services.Configure<InvitationEmailTextOptions>(
config.GetSection("email:invitations"));
} }
else
{
services.AddSingletonAs<NoopInvitationEmailSender>()
.AsOptional<IInvitationEmailSender>();
}
services.AddSingletonAs<InvitationEmailEventConsumer>()
.As<IEventConsumer>();
} }
private static void AddCommandPipeline(this IServiceCollection services) private static void AddCommandPipeline(this IServiceCollection services)

3
src/Squidex/appsettings.json

@ -89,11 +89,12 @@
/* /*
* Always use SSL if possible. * Always use SSL if possible.
*/ */
"enableSsl": true, "enableSsl": true,
/* /*
* The port to your email server. * The port to your email server.
*/ */
"port": 587 "port": 465
}, },
"invitiations": { "invitiations": {
/* /*

23
tests/Squidex.Domain.Apps.Entities.Tests/Apps/Invitation/InvitationEmailEventConsumerTests.cs

@ -31,6 +31,9 @@ namespace Squidex.Domain.Apps.Entities.Apps.Invitation
public InvitationEmailEventConsumerTests() public InvitationEmailEventConsumerTests()
{ {
A.CallTo(() => emailSender.IsActive)
.Returns(true);
sut = new InvitationEmailEventConsumer(emailSender, userResolver, log); sut = new InvitationEmailEventConsumer(emailSender, userResolver, log);
} }
@ -48,6 +51,26 @@ namespace Squidex.Domain.Apps.Entities.Apps.Invitation
.MustNotHaveHappened(); .MustNotHaveHappened();
} }
[Fact]
public async Task Should_not_send_email_if_sender_not_active()
{
var @event = Envelope.Create(CreateEvent(RefTokenType.Subject, true));
A.CallTo(() => emailSender.IsActive)
.Returns(false);
A.CallTo(() => userResolver.FindByIdOrEmailAsync(assignerId))
.Returns(Task.FromResult<IUser>(null));
await sut.On(@event);
A.CallTo(() => userResolver.FindByIdOrEmailAsync(A<string>.Ignored))
.MustNotHaveHappened();
A.CallTo(() => emailSender.SendNewUserEmailAsync(A<IUser>.Ignored, A<IUser>.Ignored, appName))
.MustNotHaveHappened();
}
[Fact] [Fact]
public async Task Should_not_send_email_if_assigner_not_found() public async Task Should_not_send_email_if_assigner_not_found()
{ {

Loading…
Cancel
Save