From 102233e86b8bd49aed4f28eeb946335f82e7b4e7 Mon Sep 17 00:00:00 2001 From: Sebastian Date: Thu, 20 Aug 2020 11:58:39 +0200 Subject: [PATCH] Referer and disabled fix. --- .../Apps/AppDomainObject.cs | 4 ++-- .../Apps/Commands/ChangePlan.cs | 2 ++ .../Apps/Plans/IAppPlanBillingManager.cs | 2 +- .../Apps/Plans/NoopAppPlanBillingManager.cs | 2 +- .../Controllers/Plans/AppPlansController.cs | 2 +- .../Controllers/Plans/Models/ChangePlanDto.cs | 9 +++++++-- .../Apps/AppDomainObjectTests.cs | 20 +++++++++---------- .../Plans/NoopAppPlanBillingManagerTests.cs | 2 +- frontend/app/shared/state/contents.forms.ts | 2 +- 9 files changed, 26 insertions(+), 19 deletions(-) diff --git a/backend/src/Squidex.Domain.Apps.Entities/Apps/AppDomainObject.cs b/backend/src/Squidex.Domain.Apps.Entities/Apps/AppDomainObject.cs index 98e933472..b9d7da90d 100644 --- a/backend/src/Squidex.Domain.Apps.Entities/Apps/AppDomainObject.cs +++ b/backend/src/Squidex.Domain.Apps.Entities/Apps/AppDomainObject.cs @@ -282,7 +282,7 @@ namespace Squidex.Domain.Apps.Entities.Apps } else { - var result = await appPlansBillingManager.ChangePlanAsync(c.Actor.Identifier, Snapshot.NamedId(), c.PlanId); + var result = await appPlansBillingManager.ChangePlanAsync(c.Actor.Identifier, Snapshot.NamedId(), c.PlanId, c.Referer); switch (result) { @@ -298,7 +298,7 @@ namespace Squidex.Domain.Apps.Entities.Apps case ArchiveApp archiveApp: return UpdateAsync(archiveApp, async c => { - await appPlansBillingManager.ChangePlanAsync(c.Actor.Identifier, Snapshot.NamedId(), null); + await appPlansBillingManager.ChangePlanAsync(c.Actor.Identifier, Snapshot.NamedId(), null, null); ArchiveApp(c); }); diff --git a/backend/src/Squidex.Domain.Apps.Entities/Apps/Commands/ChangePlan.cs b/backend/src/Squidex.Domain.Apps.Entities/Apps/Commands/ChangePlan.cs index a323b8b10..de1d62f82 100644 --- a/backend/src/Squidex.Domain.Apps.Entities/Apps/Commands/ChangePlan.cs +++ b/backend/src/Squidex.Domain.Apps.Entities/Apps/Commands/ChangePlan.cs @@ -12,5 +12,7 @@ namespace Squidex.Domain.Apps.Entities.Apps.Commands public bool FromCallback { get; set; } public string PlanId { get; set; } + + public string Referer { get; set; } } } diff --git a/backend/src/Squidex.Domain.Apps.Entities/Apps/Plans/IAppPlanBillingManager.cs b/backend/src/Squidex.Domain.Apps.Entities/Apps/Plans/IAppPlanBillingManager.cs index e2ceb6832..fa6076835 100644 --- a/backend/src/Squidex.Domain.Apps.Entities/Apps/Plans/IAppPlanBillingManager.cs +++ b/backend/src/Squidex.Domain.Apps.Entities/Apps/Plans/IAppPlanBillingManager.cs @@ -15,7 +15,7 @@ namespace Squidex.Domain.Apps.Entities.Apps.Plans { bool HasPortal { get; } - Task ChangePlanAsync(string userId, NamedId appId, string? planId); + Task ChangePlanAsync(string userId, NamedId appId, string? planId, string? referer); Task GetPortalLinkAsync(string userId); } diff --git a/backend/src/Squidex.Domain.Apps.Entities/Apps/Plans/NoopAppPlanBillingManager.cs b/backend/src/Squidex.Domain.Apps.Entities/Apps/Plans/NoopAppPlanBillingManager.cs index 64697e998..47314f839 100644 --- a/backend/src/Squidex.Domain.Apps.Entities/Apps/Plans/NoopAppPlanBillingManager.cs +++ b/backend/src/Squidex.Domain.Apps.Entities/Apps/Plans/NoopAppPlanBillingManager.cs @@ -18,7 +18,7 @@ namespace Squidex.Domain.Apps.Entities.Apps.Plans get { return false; } } - public Task ChangePlanAsync(string userId, NamedId appId, string? planId) + public Task ChangePlanAsync(string userId, NamedId appId, string? planId, string? referer) { return Task.FromResult(new PlanChangedResult()); } diff --git a/backend/src/Squidex/Areas/Api/Controllers/Plans/AppPlansController.cs b/backend/src/Squidex/Areas/Api/Controllers/Plans/AppPlansController.cs index b58a0de1d..0b81d48e5 100644 --- a/backend/src/Squidex/Areas/Api/Controllers/Plans/AppPlansController.cs +++ b/backend/src/Squidex/Areas/Api/Controllers/Plans/AppPlansController.cs @@ -78,7 +78,7 @@ namespace Squidex.Areas.Api.Controllers.Plans [ApiCosts(0)] public async Task PutPlan(string app, [FromBody] ChangePlanDto request) { - var context = await CommandBus.PublishAsync(request.ToCommand()); + var context = await CommandBus.PublishAsync(request.ToCommand(HttpContext)); string? redirectUri = null; diff --git a/backend/src/Squidex/Areas/Api/Controllers/Plans/Models/ChangePlanDto.cs b/backend/src/Squidex/Areas/Api/Controllers/Plans/Models/ChangePlanDto.cs index b671477cf..ef3de233c 100644 --- a/backend/src/Squidex/Areas/Api/Controllers/Plans/Models/ChangePlanDto.cs +++ b/backend/src/Squidex/Areas/Api/Controllers/Plans/Models/ChangePlanDto.cs @@ -6,6 +6,7 @@ // ========================================================================== using System.ComponentModel.DataAnnotations; +using Microsoft.AspNetCore.Http; using Squidex.Domain.Apps.Entities.Apps.Commands; using Squidex.Infrastructure.Reflection; @@ -19,9 +20,13 @@ namespace Squidex.Areas.Api.Controllers.Plans.Models [Required] public string PlanId { get; set; } - public ChangePlan ToCommand() + public ChangePlan ToCommand(HttpContext httpContext) { - return SimpleMapper.Map(this, new ChangePlan()); + var result = SimpleMapper.Map(this, new ChangePlan()); + + result.Referer = httpContext.Request.Headers["Referer"]; + + return result; } } } diff --git a/backend/tests/Squidex.Domain.Apps.Entities.Tests/Apps/AppDomainObjectTests.cs b/backend/tests/Squidex.Domain.Apps.Entities.Tests/Apps/AppDomainObjectTests.cs index 62a55be89..161e8aaa5 100644 --- a/backend/tests/Squidex.Domain.Apps.Entities.Tests/Apps/AppDomainObjectTests.cs +++ b/backend/tests/Squidex.Domain.Apps.Entities.Tests/Apps/AppDomainObjectTests.cs @@ -187,7 +187,7 @@ namespace Squidex.Domain.Apps.Entities.Apps { var command = new ChangePlan { PlanId = planIdPaid }; - A.CallTo(() => appPlansBillingManager.ChangePlanAsync(Actor.Identifier, AppNamedId, planIdPaid)) + A.CallTo(() => appPlansBillingManager.ChangePlanAsync(Actor.Identifier, AppNamedId, planIdPaid, command.Referer)) .Returns(new PlanChangedResult()); await ExecuteCreateAsync(); @@ -222,7 +222,7 @@ namespace Squidex.Domain.Apps.Entities.Apps CreateEvent(new AppPlanChanged { PlanId = planIdPaid }) ); - A.CallTo(() => appPlansBillingManager.ChangePlanAsync(A._, A>._, A._)) + A.CallTo(() => appPlansBillingManager.ChangePlanAsync(A._, A>._, A._, A._)) .MustNotHaveHappened(); } @@ -231,7 +231,7 @@ namespace Squidex.Domain.Apps.Entities.Apps { var command = new ChangePlan { PlanId = planIdFree, FromCallback = true }; - A.CallTo(() => appPlansBillingManager.ChangePlanAsync(Actor.Identifier, AppNamedId, planIdPaid)) + A.CallTo(() => appPlansBillingManager.ChangePlanAsync(Actor.Identifier, AppNamedId, planIdPaid, command.Referer)) .Returns(new PlanChangedResult()); await ExecuteCreateAsync(); @@ -248,19 +248,19 @@ namespace Squidex.Domain.Apps.Entities.Apps CreateEvent(new AppPlanReset()) ); - A.CallTo(() => appPlansBillingManager.ChangePlanAsync(A._, A>._, planIdFree)) + A.CallTo(() => appPlansBillingManager.ChangePlanAsync(A._, A>._, planIdFree, A._)) .MustNotHaveHappened(); } [Fact] - public async Task ChangePlan_should_reset_plan_for_reset_plan() + public async Task ChangePlan_should_reset_plan_for_free_plan() { var command = new ChangePlan { PlanId = planIdFree }; - A.CallTo(() => appPlansBillingManager.ChangePlanAsync(Actor.Identifier, AppNamedId, planIdPaid)) + A.CallTo(() => appPlansBillingManager.ChangePlanAsync(Actor.Identifier, AppNamedId, planIdPaid, command.Referer)) .Returns(new PlanChangedResult()); - A.CallTo(() => appPlansBillingManager.ChangePlanAsync(Actor.Identifier, AppNamedId, planIdFree)) + A.CallTo(() => appPlansBillingManager.ChangePlanAsync(Actor.Identifier, AppNamedId, planIdFree, command.Referer)) .Returns(new PlanChangedResult()); await ExecuteCreateAsync(); @@ -283,7 +283,7 @@ namespace Squidex.Domain.Apps.Entities.Apps { var command = new ChangePlan { PlanId = planIdPaid }; - A.CallTo(() => appPlansBillingManager.ChangePlanAsync(Actor.Identifier, AppNamedId, planIdPaid)) + A.CallTo(() => appPlansBillingManager.ChangePlanAsync(Actor.Identifier, AppNamedId, planIdPaid, command.Referer)) .Returns(new RedirectToCheckoutResult(new Uri("http://squidex.io"))); await ExecuteCreateAsync(); @@ -306,7 +306,7 @@ namespace Squidex.Domain.Apps.Entities.Apps result.ShouldBeEquivalent(new EntitySavedResult(4)); - A.CallTo(() => appPlansBillingManager.ChangePlanAsync(Actor.Identifier, AppNamedId, planIdPaid)) + A.CallTo(() => appPlansBillingManager.ChangePlanAsync(Actor.Identifier, AppNamedId, planIdPaid, A._)) .MustNotHaveHappened(); } @@ -678,7 +678,7 @@ namespace Squidex.Domain.Apps.Entities.Apps CreateEvent(new AppArchived()) ); - A.CallTo(() => appPlansBillingManager.ChangePlanAsync(command.Actor.Identifier, AppNamedId, null)) + A.CallTo(() => appPlansBillingManager.ChangePlanAsync(command.Actor.Identifier, AppNamedId, null, A._)) .MustHaveHappened(); } diff --git a/backend/tests/Squidex.Domain.Apps.Entities.Tests/Apps/Plans/NoopAppPlanBillingManagerTests.cs b/backend/tests/Squidex.Domain.Apps.Entities.Tests/Apps/Plans/NoopAppPlanBillingManagerTests.cs index 3dca4c405..392a50b2d 100644 --- a/backend/tests/Squidex.Domain.Apps.Entities.Tests/Apps/Plans/NoopAppPlanBillingManagerTests.cs +++ b/backend/tests/Squidex.Domain.Apps.Entities.Tests/Apps/Plans/NoopAppPlanBillingManagerTests.cs @@ -23,7 +23,7 @@ namespace Squidex.Domain.Apps.Entities.Apps.Plans [Fact] public async Task Should_do_nothing_when_changing_plan() { - await sut.ChangePlanAsync(null!, null!, null); + await sut.ChangePlanAsync(null!, null!, null, null); } [Fact] diff --git a/frontend/app/shared/state/contents.forms.ts b/frontend/app/shared/state/contents.forms.ts index 3f04076b7..68d4102f3 100644 --- a/frontend/app/shared/state/contents.forms.ts +++ b/frontend/app/shared/state/contents.forms.ts @@ -208,7 +208,7 @@ export abstract class AbstractContentForm