diff --git a/src/OrchardCore.Modules/OrchardCore.Users/Deployment/LoginSettingsDeploymentSource.cs b/src/OrchardCore.Modules/OrchardCore.Users/Deployment/LoginSettingsDeploymentSource.cs new file mode 100644 index 00000000000..a17e12dd2dd --- /dev/null +++ b/src/OrchardCore.Modules/OrchardCore.Users/Deployment/LoginSettingsDeploymentSource.cs @@ -0,0 +1,38 @@ +using System.Threading.Tasks; +using Newtonsoft.Json.Linq; +using OrchardCore.Deployment; +using OrchardCore.Settings; +using OrchardCore.Users.Services; + +namespace OrchardCore.Users.Deployment +{ + public class LoginSettingsDeploymentSource : IDeploymentSource + { + private readonly IMembershipService _membershipService; + private readonly ISiteService _siteService; + + public LoginSettingsDeploymentSource(IMembershipService membershipService, ISiteService siteService) + { + _membershipService = membershipService; + _siteService = siteService; + } + + public async Task ProcessDeploymentStepAsync(DeploymentStep step, DeploymentPlanResult result) + { + var loginSettingsStep = step as LoginSettingsDeploymentStep; + + if (loginSettingsStep == null) + { + return; + } + + var loginSettings = await _membershipService.GetLoginSettingsAsync(); + + // Adding Login settings + result.Steps.Add(new JObject( + new JProperty("name", "Settings"), + new JProperty("LoginSettings", JObject.FromObject(loginSettings)) + )); + } + } +} diff --git a/src/OrchardCore.Modules/OrchardCore.Users/Deployment/LoginSettingsDeploymentStep.cs b/src/OrchardCore.Modules/OrchardCore.Users/Deployment/LoginSettingsDeploymentStep.cs new file mode 100644 index 00000000000..88018c5ee7f --- /dev/null +++ b/src/OrchardCore.Modules/OrchardCore.Users/Deployment/LoginSettingsDeploymentStep.cs @@ -0,0 +1,15 @@ +using OrchardCore.Deployment; + +namespace OrchardCore.Users.Deployment +{ + /// + /// Adds layers to a . + /// + public class LoginSettingsDeploymentStep : DeploymentStep + { + public LoginSettingsDeploymentStep() + { + Name = "LoginSettings"; + } + } +} diff --git a/src/OrchardCore.Modules/OrchardCore.Users/Deployment/LoginSettingsDeploymentStepDriver.cs b/src/OrchardCore.Modules/OrchardCore.Users/Deployment/LoginSettingsDeploymentStepDriver.cs new file mode 100644 index 00000000000..95957c1eb8b --- /dev/null +++ b/src/OrchardCore.Modules/OrchardCore.Users/Deployment/LoginSettingsDeploymentStepDriver.cs @@ -0,0 +1,23 @@ +using OrchardCore.Deployment; +using OrchardCore.DisplayManagement.Handlers; +using OrchardCore.DisplayManagement.Views; + +namespace OrchardCore.Users.Deployment +{ + public class LoginSettingsDeploymentStepDriver : DisplayDriver + { + public override IDisplayResult Display(LoginSettingsDeploymentStep step) + { + return + Combine( + View("LoginSettingsDeploymentStep_Fields_Summary", step).Location("Summary", "Content"), + View("LoginSettingsDeploymentStep_Fields_Thumbnail", step).Location("Thumbnail", "Content") + ); + } + + public override IDisplayResult Edit(LoginSettingsDeploymentStep step) + { + return View("LoginSettingsDeploymentStep_Fields_Edit", step).Location("Content"); + } + } +} diff --git a/src/OrchardCore.Modules/OrchardCore.Users/OrchardCore.Users.csproj b/src/OrchardCore.Modules/OrchardCore.Users/OrchardCore.Users.csproj index a1d5d1b5509..1b332a908e9 100644 --- a/src/OrchardCore.Modules/OrchardCore.Users/OrchardCore.Users.csproj +++ b/src/OrchardCore.Modules/OrchardCore.Users/OrchardCore.Users.csproj @@ -22,6 +22,7 @@ + diff --git a/src/OrchardCore.Modules/OrchardCore.Users/Services/MembershipService.cs b/src/OrchardCore.Modules/OrchardCore.Users/Services/MembershipService.cs index 45400e671f0..e9830edf19a 100644 --- a/src/OrchardCore.Modules/OrchardCore.Users/Services/MembershipService.cs +++ b/src/OrchardCore.Modules/OrchardCore.Users/Services/MembershipService.cs @@ -1,6 +1,8 @@ using System.Security.Claims; using System.Threading.Tasks; using Microsoft.AspNetCore.Identity; +using OrchardCore.Entities; +using OrchardCore.Settings; using OrchardCore.Users.Models; namespace OrchardCore.Users.Services @@ -9,12 +11,15 @@ public class MembershipService : IMembershipService { private readonly UserManager _userManager; private readonly IUserClaimsPrincipalFactory _claimsPrincipalFactory; + private readonly ISiteService _siteService; public MembershipService( IUserClaimsPrincipalFactory claimsPrincipalFactory, + ISiteService siteService, UserManager userManager) { _claimsPrincipalFactory = claimsPrincipalFactory; + _siteService = siteService; _userManager = userManager; } @@ -41,5 +46,19 @@ public Task CreateClaimsPrincipal(IUser user) { return _claimsPrincipalFactory.CreateAsync(user as User); } + + public async Task GetLoginSettingsAsync() + { + var siteSettings = await _siteService.GetSiteSettingsAsync(); + + if (siteSettings.Has()) + { + return siteSettings.As(); + } + else + { + return new LoginSettings(); + } + } } } diff --git a/src/OrchardCore.Modules/OrchardCore.Users/Startup.cs b/src/OrchardCore.Modules/OrchardCore.Users/Startup.cs index dcbd8c753ef..1b0d6c64850 100644 --- a/src/OrchardCore.Modules/OrchardCore.Users/Startup.cs +++ b/src/OrchardCore.Modules/OrchardCore.Users/Startup.cs @@ -9,6 +9,7 @@ using Microsoft.Extensions.Options; using OrchardCore.Admin; using OrchardCore.Data.Migration; +using OrchardCore.Deployment; using OrchardCore.DisplayManagement; using OrchardCore.DisplayManagement.Handlers; using OrchardCore.DisplayManagement.Theming; @@ -24,6 +25,7 @@ using OrchardCore.Setup.Events; using OrchardCore.Users.Commands; using OrchardCore.Users.Controllers; +using OrchardCore.Users.Deployment; using OrchardCore.Users.Drivers; using OrchardCore.Users.Indexes; using OrchardCore.Users.Liquid; @@ -300,4 +302,15 @@ public override void ConfigureServices(IServiceCollection services) services.AddScoped, ResetPasswordSettingsDisplayDriver>(); } } + + [RequireFeatures("OrchardCore.Deployment")] + public class DeploymentStartup : StartupBase + { + public override void ConfigureServices(IServiceCollection services) + { + services.AddTransient(); + services.AddSingleton(new DeploymentStepFactory()); + services.AddScoped, LoginSettingsDeploymentStepDriver>(); + } + } } diff --git a/src/OrchardCore.Modules/OrchardCore.Users/Views/Items/LoginSettingsDeploymentStep.Fields.Edit.cshtml b/src/OrchardCore.Modules/OrchardCore.Users/Views/Items/LoginSettingsDeploymentStep.Fields.Edit.cshtml new file mode 100644 index 00000000000..7fe1086a1be --- /dev/null +++ b/src/OrchardCore.Modules/OrchardCore.Users/Views/Items/LoginSettingsDeploymentStep.Fields.Edit.cshtml @@ -0,0 +1,3 @@ +@model dynamic + +
@T["Login Settings"]
\ No newline at end of file diff --git a/src/OrchardCore.Modules/OrchardCore.Users/Views/Items/LoginSettingsDeploymentStep.Fields.Summary.cshtml b/src/OrchardCore.Modules/OrchardCore.Users/Views/Items/LoginSettingsDeploymentStep.Fields.Summary.cshtml new file mode 100644 index 00000000000..53a71071b2e --- /dev/null +++ b/src/OrchardCore.Modules/OrchardCore.Users/Views/Items/LoginSettingsDeploymentStep.Fields.Summary.cshtml @@ -0,0 +1,5 @@ +@model dynamic + +
@T["Login Settings"]
+ +@T["Adds login settings to the plan."] \ No newline at end of file diff --git a/src/OrchardCore.Modules/OrchardCore.Users/Views/Items/LoginSettingsDeploymentStep.Fields.Thumbnail.cshtml b/src/OrchardCore.Modules/OrchardCore.Users/Views/Items/LoginSettingsDeploymentStep.Fields.Thumbnail.cshtml new file mode 100644 index 00000000000..c03439a2f41 --- /dev/null +++ b/src/OrchardCore.Modules/OrchardCore.Users/Views/Items/LoginSettingsDeploymentStep.Fields.Thumbnail.cshtml @@ -0,0 +1,4 @@ +@model dynamic + +

@T["Login Settings"]

+

@T["Exports login settings."]

diff --git a/src/OrchardCore.Modules/OrchardCore.Users/Models/LoginSettings.cs b/src/OrchardCore/OrchardCore.Users.Abstractions/Models/LoginSettings.cs similarity index 100% rename from src/OrchardCore.Modules/OrchardCore.Users/Models/LoginSettings.cs rename to src/OrchardCore/OrchardCore.Users.Abstractions/Models/LoginSettings.cs diff --git a/src/OrchardCore/OrchardCore.Users.Abstractions/Services/IMembershipService.cs b/src/OrchardCore/OrchardCore.Users.Abstractions/Services/IMembershipService.cs index 99016040ff6..5405fac8345 100644 --- a/src/OrchardCore/OrchardCore.Users.Abstractions/Services/IMembershipService.cs +++ b/src/OrchardCore/OrchardCore.Users.Abstractions/Services/IMembershipService.cs @@ -1,5 +1,6 @@ using System.Security.Claims; using System.Threading.Tasks; +using OrchardCore.Users.Models; namespace OrchardCore.Users.Services { @@ -29,5 +30,7 @@ public interface IMembershipService /// The . /// A user s. Task CreateClaimsPrincipal(IUser user); + + Task GetLoginSettingsAsync(); } }