diff --git a/Client/Modules/SZUAbsolventenverein.Module.AdminModules/Edit.razor b/Client/Modules/SZUAbsolventenverein.Module.AdminMassMailing/Edit.razor similarity index 98% rename from Client/Modules/SZUAbsolventenverein.Module.AdminModules/Edit.razor rename to Client/Modules/SZUAbsolventenverein.Module.AdminMassMailing/Edit.razor index b275a06..da24bf3 100644 --- a/Client/Modules/SZUAbsolventenverein.Module.AdminModules/Edit.razor +++ b/Client/Modules/SZUAbsolventenverein.Module.AdminMassMailing/Edit.razor @@ -2,7 +2,7 @@ @using SZUAbsolventenverein.Module.AdminModules.Services @using SZUAbsolventenverein.Module.AdminModules.Models -@namespace SZUAbsolventenverein.Module.AdminModules +@namespace SZUAbsolventenverein.Module.AdminMassMailing @inherits ModuleBase @inject IAdminModulesService AdminModulesService @inject NavigationManager NavigationManager diff --git a/Client/Modules/SZUAbsolventenverein.Module.AdminModules/Index.razor b/Client/Modules/SZUAbsolventenverein.Module.AdminMassMailing/Index.razor similarity index 98% rename from Client/Modules/SZUAbsolventenverein.Module.AdminModules/Index.razor rename to Client/Modules/SZUAbsolventenverein.Module.AdminMassMailing/Index.razor index 92f39d0..e20f25c 100644 --- a/Client/Modules/SZUAbsolventenverein.Module.AdminModules/Index.razor +++ b/Client/Modules/SZUAbsolventenverein.Module.AdminMassMailing/Index.razor @@ -1,7 +1,7 @@ @using SZUAbsolventenverein.Module.AdminModules.Services @using SZUAbsolventenverein.Module.AdminModules.Models -@namespace SZUAbsolventenverein.Module.AdminModules +@namespace SZUAbsolventenverein.Module.AdminMassMailing @inherits ModuleBase @inject IAdminModulesService AdminModulesService @inject NavigationManager NavigationManager diff --git a/Client/Modules/SZUAbsolventenverein.Module.AdminMassMailing/ModuleInfo.cs b/Client/Modules/SZUAbsolventenverein.Module.AdminMassMailing/ModuleInfo.cs new file mode 100644 index 0000000..ddc4fa5 --- /dev/null +++ b/Client/Modules/SZUAbsolventenverein.Module.AdminMassMailing/ModuleInfo.cs @@ -0,0 +1,19 @@ +using Oqtane.Models; +using Oqtane.Modules; + +namespace SZUAbsolventenverein.Module.AdminMassMailing +{ + public class ModuleInfo : IModule + { + public ModuleDefinition ModuleDefinition => new ModuleDefinition + { + Name = "AdminMassMailing", + Description = "Mass Mailing Tool", + Version = "1.0.7", + ServerManagerType = "SZUAbsolventenverein.Module.AdminModules.Manager.AdminModulesManager, SZUAbsolventenverein.Module.AdminModules.Server.Oqtane", + ReleaseVersions = "1.0.0,1.0.1,1.0.2,1.0.3,1.0.4,1.0.5,1.0.6,1.0.7", + Dependencies = "SZUAbsolventenverein.Module.AdminModules.Shared.Oqtane", + PackageName = "SZUAbsolventenverein.Module.AdminMassMailing" + }; + } +} diff --git a/Client/Modules/SZUAbsolventenverein.Module.AdminModules/Send.razor b/Client/Modules/SZUAbsolventenverein.Module.AdminMassMailing/Send.razor similarity index 76% rename from Client/Modules/SZUAbsolventenverein.Module.AdminModules/Send.razor rename to Client/Modules/SZUAbsolventenverein.Module.AdminMassMailing/Send.razor index f7f794b..42d2ffa 100644 --- a/Client/Modules/SZUAbsolventenverein.Module.AdminModules/Send.razor +++ b/Client/Modules/SZUAbsolventenverein.Module.AdminMassMailing/Send.razor @@ -3,7 +3,7 @@ @using SZUAbsolventenverein.Module.AdminModules.Models @using Microsoft.AspNetCore.Components.Forms; -@namespace SZUAbsolventenverein.Module.AdminModules +@namespace SZUAbsolventenverein.Module.AdminMassMailing @inherits ModuleBase @inject IAdminModulesService AdminModulesService @inject NavigationManager NavigationManager @@ -11,12 +11,6 @@
-
- -
- -
-
@@ -40,10 +34,17 @@ }

- + @if(userCount != null) + { + + } @Localizer["Cancel"] -

- @code { @@ -77,13 +78,7 @@ private bool validated = false; private int _id; - private string _name; - private string _richText; - private string _createdby; - private DateTime _createdon; - private string _modifiedby; - private DateTime _modifiedon; - + private async void RefetchUserCount() { EmailFields ef = new EmailFields(); @@ -103,16 +98,6 @@ if (PageState.Action == "Send") { _id = Int32.Parse(PageState.QueryString["id"]); - AdminModules AdminModules = await AdminModulesService.GetAdminModulesAsync(_id, ModuleState.ModuleId); - if (AdminModules != null) - { - _name = AdminModules.Name; - _richText = AdminModules.Content; - _createdby = AdminModules.CreatedBy; - _createdon = AdminModules.CreatedOn; - _modifiedby = AdminModules.ModifiedBy; - _modifiedon = AdminModules.ModifiedOn; - } roles = await AdminModulesService.GetRoles(ModuleState.ModuleId); } } diff --git a/Client/Modules/SZUAbsolventenverein.Module.AdminModules/Settings.razor b/Client/Modules/SZUAbsolventenverein.Module.AdminMassMailing/Settings.razor similarity index 96% rename from Client/Modules/SZUAbsolventenverein.Module.AdminModules/Settings.razor rename to Client/Modules/SZUAbsolventenverein.Module.AdminMassMailing/Settings.razor index c604eb1..2fa6067 100644 --- a/Client/Modules/SZUAbsolventenverein.Module.AdminModules/Settings.razor +++ b/Client/Modules/SZUAbsolventenverein.Module.AdminMassMailing/Settings.razor @@ -1,4 +1,4 @@ -@namespace SZUAbsolventenverein.Module.AdminModules +@namespace SZUAbsolventenverein.Module.AdminMassMailing @inherits ModuleBase @inject ISettingService SettingService @inject IStringLocalizer Localizer diff --git a/Client/Modules/SZUAbsolventenverein.Module.AdminSettings/Index.razor b/Client/Modules/SZUAbsolventenverein.Module.AdminSettings/Index.razor new file mode 100644 index 0000000..153a58c --- /dev/null +++ b/Client/Modules/SZUAbsolventenverein.Module.AdminSettings/Index.razor @@ -0,0 +1,56 @@ +@using SZUAbsolventenverein.Module.AdminSettings.Services +@using SZUAbsolventenverein.Module.AdminModules.Models + +@namespace SZUAbsolventenverein.Module.AdminSettings +@inherits ModuleBase +@inject IAdminSettingsService AdminSettingsService +@inject NavigationManager NavigationManager +@inject IStringLocalizer Localizer + +@if (_AdminSetting == null) +{ +

Loading...

+} +else +{ + + +} + +@code { + public override string RenderMode => RenderModes.Static; + + public override List Resources => new List() + { + new Stylesheet("_content/SZUAbsolventenverein.Module.AdminModules/Module.css"), + new Script("_content/SZUAbsolventenverein.Module.AdminModules/Module.js") + }; + + private AdminSetting _AdminSetting; + + protected override async Task OnInitializedAsync() + { + try + { + _AdminSetting = await AdminSettingsService.GetAdminSettingsAsync(ModuleState.ModuleId); + } + catch (Exception ex) + { + await logger.LogError(ex, "Error Loading AdminSettings {Error}", ex.Message); + AddModuleMessage(Localizer["Message.LoadError"], MessageType.Error); + } + } + + protected async Task Save() + { + try + { + await AdminSettingsService.SetAdminSettingsAsync(_AdminSetting); + } + catch (Exception ex) + { + await logger.LogError(ex, "Error Saving AdminSettings {Error}", ex.Message); + AddModuleMessage(Localizer["Message.LoadError"], MessageType.Error); + } + } +} \ No newline at end of file diff --git a/Client/Modules/SZUAbsolventenverein.Module.AdminModules/ModuleInfo.cs b/Client/Modules/SZUAbsolventenverein.Module.AdminSettings/ModuleInfo.cs similarity index 60% rename from Client/Modules/SZUAbsolventenverein.Module.AdminModules/ModuleInfo.cs rename to Client/Modules/SZUAbsolventenverein.Module.AdminSettings/ModuleInfo.cs index 2316f20..34f58a7 100644 --- a/Client/Modules/SZUAbsolventenverein.Module.AdminModules/ModuleInfo.cs +++ b/Client/Modules/SZUAbsolventenverein.Module.AdminSettings/ModuleInfo.cs @@ -1,19 +1,19 @@ using Oqtane.Models; using Oqtane.Modules; -namespace SZUAbsolventenverein.Module.AdminModules +namespace SZUAbsolventenverein.Module.AdminSettings { public class ModuleInfo : IModule { public ModuleDefinition ModuleDefinition => new ModuleDefinition { - Name = "AdminModules", - Description = "Admin Tools", - Version = "1.0.2", + Name = "Admin - Settings", + Description = "Einstellungen in Oqtane", + Version = "1.0.0", ServerManagerType = "SZUAbsolventenverein.Module.AdminModules.Manager.AdminModulesManager, SZUAbsolventenverein.Module.AdminModules.Server.Oqtane", - ReleaseVersions = "1.0.0,1.0.1,1.0.2", + ReleaseVersions = "1.0.0", Dependencies = "SZUAbsolventenverein.Module.AdminModules.Shared.Oqtane", - PackageName = "SZUAbsolventenverein.Module.AdminModules" + PackageName = "SZUAbsolventenverein.Module.AdminSettings" }; } } diff --git a/Client/Modules/SZUAbsolventenverein.Module.AdminSettings/Settings.razor b/Client/Modules/SZUAbsolventenverein.Module.AdminSettings/Settings.razor new file mode 100644 index 0000000..52c6cb7 --- /dev/null +++ b/Client/Modules/SZUAbsolventenverein.Module.AdminSettings/Settings.razor @@ -0,0 +1,47 @@ +@namespace SZUAbsolventenverein.Module.AdminSettings +@inherits ModuleBase +@inject ISettingService SettingService +@inject IStringLocalizer Localizer + +
+
+ +
+ +
+
+
+ +@code { + private string resourceType = "SZUAbsolventenverein.Module.AdminSettings.Settings, SZUAbsolventenverein.Module.AdminSettings.Client.Oqtane"; // for localization + public override string Title => "Admin - Settings Settings"; + + string _value; + + protected override async Task OnInitializedAsync() + { + try + { + Dictionary settings = await SettingService.GetModuleSettingsAsync(ModuleState.ModuleId); + _value = SettingService.GetSetting(settings, "SettingName", ""); + } + catch (Exception ex) + { + AddModuleMessage(ex.Message, MessageType.Error); + } + } + + public async Task UpdateSettings() + { + try + { + Dictionary settings = await SettingService.GetModuleSettingsAsync(ModuleState.ModuleId); + SettingService.SetSetting(settings, "SettingName", _value); + await SettingService.UpdateModuleSettingsAsync(settings, ModuleState.ModuleId); + } + catch (Exception ex) + { + AddModuleMessage(ex.Message, MessageType.Error); + } + } +} diff --git a/Client/SZUAbsolventenverein.Module.AdminModules.Client.csproj b/Client/SZUAbsolventenverein.Module.AdminModules.Client.csproj index 2d4f077..4febe22 100644 --- a/Client/SZUAbsolventenverein.Module.AdminModules.Client.csproj +++ b/Client/SZUAbsolventenverein.Module.AdminModules.Client.csproj @@ -13,11 +13,11 @@ - - - - - + + + + + diff --git a/Client/Services/AdminSettingsService.cs b/Client/Services/AdminSettingsService.cs new file mode 100644 index 0000000..6d44967 --- /dev/null +++ b/Client/Services/AdminSettingsService.cs @@ -0,0 +1,37 @@ +using Oqtane.Models; +using Oqtane.Services; +using Oqtane.Shared; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net.Http; +using System.Reflection; +using System.Threading.Tasks; +using SZUAbsolventenverein.Module.AdminModules.Models; + +namespace SZUAbsolventenverein.Module.AdminSettings.Services +{ + public interface IAdminSettingsService + { + Task GetAdminSettingsAsync(int ModuleId); + + Task SetAdminSettingsAsync(AdminSetting AdminSettings); + } + + public class AdminSettingsService : ServiceBase, IAdminSettingsService + { + public AdminSettingsService(HttpClient http, SiteState siteState) : base(http, siteState) { } + + private string Apiurl => CreateApiUrl("AdminSettings"); + + public async Task GetAdminSettingsAsync(int ModuleId) + { + return await GetJsonAsync(CreateAuthorizationPolicyUrl($"{Apiurl}?moduleid={ModuleId}", EntityNames.Module, ModuleId), null); + } + + public async Task SetAdminSettingsAsync(AdminSetting AdminSettings) + { + return await PostJsonAsync(CreateAuthorizationPolicyUrl($"{Apiurl}", EntityNames.Module, AdminSettings.ModuleId), AdminSettings); + } + } +} diff --git a/Client/Startup/ClientStartup.cs b/Client/Startup/ClientStartup.cs index 08c22eb..7c42342 100644 --- a/Client/Startup/ClientStartup.cs +++ b/Client/Startup/ClientStartup.cs @@ -2,6 +2,7 @@ using Microsoft.Extensions.DependencyInjection; using System.Linq; using Oqtane.Services; using SZUAbsolventenverein.Module.AdminModules.Services; +using SZUAbsolventenverein.Module.AdminSettings.Services; namespace SZUAbsolventenverein.Module.AdminModules.Startup { @@ -13,6 +14,10 @@ namespace SZUAbsolventenverein.Module.AdminModules.Startup { services.AddScoped(); } + if (!services.Any(s => s.ServiceType == typeof(IAdminSettingsService))) + { + services.AddScoped(); + } } } } diff --git a/Package/SZUAbsolventenverein.Module.AdminModules.1.0.6.nupkg b/Package/SZUAbsolventenverein.Module.AdminModules.1.0.6.nupkg new file mode 100644 index 0000000..fabcd98 Binary files /dev/null and b/Package/SZUAbsolventenverein.Module.AdminModules.1.0.6.nupkg differ diff --git a/Package/SZUAbsolventenverein.Module.AdminModules.nuspec b/Package/SZUAbsolventenverein.Module.AdminModules.nuspec index 1105c62..39dee4d 100644 --- a/Package/SZUAbsolventenverein.Module.AdminModules.nuspec +++ b/Package/SZUAbsolventenverein.Module.AdminModules.nuspec @@ -2,7 +2,7 @@ $projectname$ - 1.0.2 + 1.0.6 SZUAbsolventenverein SZUAbsolventenverein AdminModules diff --git a/Server/Manager/AdminModulesManager.cs b/Server/Manager/AdminModulesManager.cs index 1f46bee..6c8eeb7 100644 --- a/Server/Manager/AdminModulesManager.cs +++ b/Server/Manager/AdminModulesManager.cs @@ -16,11 +16,13 @@ namespace SZUAbsolventenverein.Module.AdminModules.Manager public class AdminModulesManager : MigratableModuleBase, IInstallable, IPortable, ISearchable { private readonly IAdminModulesRepository _AdminModulesRepository; + private readonly IAdminSettingsRepository _AdminSettingsRepository; private readonly IDBContextDependencies _DBContextDependencies; - public AdminModulesManager(IAdminModulesRepository AdminModulesRepository, IDBContextDependencies DBContextDependencies) + public AdminModulesManager(IAdminModulesRepository AdminModulesRepository, IAdminSettingsRepository AdminSettingsRepository, IDBContextDependencies DBContextDependencies) { _AdminModulesRepository = AdminModulesRepository; + _AdminSettingsRepository = AdminSettingsRepository; _DBContextDependencies = DBContextDependencies; } diff --git a/Server/Migrations/01000000_InitializeModule.cs b/Server/Migrations/01000000_InitializeModule.cs index 8e340eb..c72c0e9 100644 --- a/Server/Migrations/01000000_InitializeModule.cs +++ b/Server/Migrations/01000000_InitializeModule.cs @@ -4,6 +4,7 @@ using Oqtane.Databases.Interfaces; using Oqtane.Migrations; using SZUAbsolventenverein.Module.AdminModules.Migrations.EntityBuilders; using SZUAbsolventenverein.Module.AdminModules.Repository; +using SZUAbsolventenverein.Module.AdminModules.Server.Migrations.EntityBuilders; namespace SZUAbsolventenverein.Module.AdminModules.Migrations { @@ -17,14 +18,18 @@ namespace SZUAbsolventenverein.Module.AdminModules.Migrations protected override void Up(MigrationBuilder migrationBuilder) { - var entityBuilder = new AdminModulesEntityBuilder(migrationBuilder, ActiveDatabase); - entityBuilder.Create(); + var massMailingTemplateEntityBuilder = new MassMailingTemplateEntityBuilder(migrationBuilder, ActiveDatabase); + massMailingTemplateEntityBuilder.Create(); + var adminSettingsEntityBuilder = new AdminSettingsEntityBuilder(migrationBuilder, ActiveDatabase); + adminSettingsEntityBuilder.Create(); } protected override void Down(MigrationBuilder migrationBuilder) { - var entityBuilder = new AdminModulesEntityBuilder(migrationBuilder, ActiveDatabase); + var entityBuilder = new MassMailingTemplateEntityBuilder(migrationBuilder, ActiveDatabase); entityBuilder.Drop(); + var adminSettingsEntityBuilder = new AdminSettingsEntityBuilder(migrationBuilder, ActiveDatabase); + adminSettingsEntityBuilder.Drop(); } } } diff --git a/Server/Migrations/EntityBuilders/AdminSettingsEntityBuilder.cs b/Server/Migrations/EntityBuilders/AdminSettingsEntityBuilder.cs new file mode 100644 index 0000000..6f26079 --- /dev/null +++ b/Server/Migrations/EntityBuilders/AdminSettingsEntityBuilder.cs @@ -0,0 +1,34 @@ +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Migrations.Operations; +using Microsoft.EntityFrameworkCore.Migrations.Operations.Builders; +using Oqtane.Databases.Interfaces; +using Oqtane.Migrations; +using Oqtane.Migrations.EntityBuilders; +using SZUAbsolventenverein.Module.AdminModules.Migrations.EntityBuilders; + +namespace SZUAbsolventenverein.Module.AdminModules.Server.Migrations.EntityBuilders +{ + public class AdminSettingsEntityBuilder : AuditableBaseEntityBuilder + { + + private const string _entityTableName = "SZUAbsolventenvereinAdminSettings"; + private readonly PrimaryKey _primaryKey = new("PK_SZUAbsolventenvereinAdminSettings", x => x.AdminSettingsId); + + public AdminSettingsEntityBuilder(MigrationBuilder migrationBuilder, IDatabase database) : base(migrationBuilder, database) + { + EntityTableName = _entityTableName; + PrimaryKey = _primaryKey; + } + + protected override AdminSettingsEntityBuilder BuildTable(ColumnsBuilder table) + { + AdminSettingsId = AddAutoIncrementColumn(table, "AdminSettingsId"); + TokenLifetime = AddIntegerColumn(table, "TokenLifetime"); + AddAuditableColumns(table); + return this; + } + + public OperationBuilder AdminSettingsId { get; set; } + public OperationBuilder TokenLifetime { get; set; } + } +} diff --git a/Server/Migrations/EntityBuilders/AdminModulesEntityBuilder.cs b/Server/Migrations/EntityBuilders/MassMailingTemplateEntityBuilder.cs similarity index 63% rename from Server/Migrations/EntityBuilders/AdminModulesEntityBuilder.cs rename to Server/Migrations/EntityBuilders/MassMailingTemplateEntityBuilder.cs index cbcae20..69f1e66 100644 --- a/Server/Migrations/EntityBuilders/AdminModulesEntityBuilder.cs +++ b/Server/Migrations/EntityBuilders/MassMailingTemplateEntityBuilder.cs @@ -7,20 +7,20 @@ using Oqtane.Migrations.EntityBuilders; namespace SZUAbsolventenverein.Module.AdminModules.Migrations.EntityBuilders { - public class AdminModulesEntityBuilder : AuditableBaseEntityBuilder + public class MassMailingTemplateEntityBuilder : AuditableBaseEntityBuilder { private const string _entityTableName = "SZUAbsolventenvereinAdminModules"; - private readonly PrimaryKey _primaryKey = new("PK_SZUAbsolventenvereinAdminModules", x => x.AdminModulesId); - private readonly ForeignKey _moduleForeignKey = new("FK_SZUAbsolventenvereinAdminModules_Module", x => x.ModuleId, "Module", "ModuleId", ReferentialAction.Cascade); + private readonly PrimaryKey _primaryKey = new("PK_SZUAbsolventenvereinAdminModules", x => x.AdminModulesId); + private readonly ForeignKey _moduleForeignKey = new("FK_SZUAbsolventenvereinAdminModules_Module", x => x.ModuleId, "Module", "ModuleId", ReferentialAction.Cascade); - public AdminModulesEntityBuilder(MigrationBuilder migrationBuilder, IDatabase database) : base(migrationBuilder, database) + public MassMailingTemplateEntityBuilder(MigrationBuilder migrationBuilder, IDatabase database) : base(migrationBuilder, database) { EntityTableName = _entityTableName; PrimaryKey = _primaryKey; ForeignKeys.Add(_moduleForeignKey); } - protected override AdminModulesEntityBuilder BuildTable(ColumnsBuilder table) + protected override MassMailingTemplateEntityBuilder BuildTable(ColumnsBuilder table) { AdminModulesId = AddAutoIncrementColumn(table,"AdminModulesId"); ModuleId = AddIntegerColumn(table,"ModuleId"); diff --git a/Server/Repository/AdminModulesContext.cs b/Server/Repository/AdminModulesContext.cs index 6eefc39..0460404 100644 --- a/Server/Repository/AdminModulesContext.cs +++ b/Server/Repository/AdminModulesContext.cs @@ -10,6 +10,7 @@ namespace SZUAbsolventenverein.Module.AdminModules.Repository public class AdminModulesContext : DBContextBase, ITransientService, IMultiDatabase { public virtual DbSet AdminModules { get; set; } + public virtual DbSet AdminSettings { get; set; } public AdminModulesContext(IDBContextDependencies DBContextDependencies) : base(DBContextDependencies) { @@ -21,6 +22,7 @@ namespace SZUAbsolventenverein.Module.AdminModules.Repository base.OnModelCreating(builder); builder.Entity().ToTable(ActiveDatabase.RewriteName("SZUAbsolventenvereinAdminModules")); + builder.Entity().ToTable(ActiveDatabase.RewriteName("SZUAbsolventenvereinAdminSettings")); } } } diff --git a/Server/Repository/AdminSettingsRepository.cs b/Server/Repository/AdminSettingsRepository.cs new file mode 100644 index 0000000..4eeef01 --- /dev/null +++ b/Server/Repository/AdminSettingsRepository.cs @@ -0,0 +1,38 @@ +using Microsoft.EntityFrameworkCore; +using System.Linq; +using System.Collections.Generic; +using SZUAbsolventenverein.Module.AdminModules.Models; +using Oqtane.Modules; + +namespace SZUAbsolventenverein.Module.AdminModules.Repository +{ + public interface IAdminSettingsRepository + { + Models.AdminSetting GetAdminSetting(int AdminModuleId); + Models.AdminSetting SetAdminSettings(Models.AdminSetting adminSetting); + } + + public class AdminSettingRepository : IAdminSettingsRepository, ITransientService + { + private readonly IDbContextFactory _factory; + + public AdminSettingRepository(IDbContextFactory factory) + { + _factory = factory; + } + + public AdminSetting GetAdminSetting(int AdminModuleId) + { + using var db = _factory.CreateDbContext(); + return db.AdminSettings.First(); + } + + public AdminSetting SetAdminSettings(AdminSetting adminSetting) + { + using var db = _factory.CreateDbContext(); + db.Entry(adminSetting).State = EntityState.Modified; + db.SaveChanges(); + return adminSetting; + } + } +} diff --git a/Server/SZUAbsolventenverein.Module.AdminModules.Server.csproj b/Server/SZUAbsolventenverein.Module.AdminModules.Server.csproj index e2b1ae3..093cdc1 100644 --- a/Server/SZUAbsolventenverein.Module.AdminModules.Server.csproj +++ b/Server/SZUAbsolventenverein.Module.AdminModules.Server.csproj @@ -19,10 +19,10 @@ - - - - + + + + diff --git a/Server/Services/AdminModulesService.cs b/Server/Services/AdminModulesService.cs index b64e269..9e4f7d5 100644 --- a/Server/Services/AdminModulesService.cs +++ b/Server/Services/AdminModulesService.cs @@ -168,7 +168,7 @@ namespace SZUAbsolventenverein.Module.AdminModules.Services User user = _userRepository.GetUser(userid); IdentityUser identityuser = await _identityUserManager.FindByNameAsync(user.Username); string body = template.Content; - + // Fields befüllen. string token = await _identityUserManager.GeneratePasswordResetTokenAsync(identityuser); string url = _alias.Protocol + _alias.Name + "/reset?name=" + user.Username + "&token=" + WebUtility.UrlEncode(token); diff --git a/Server/Services/AdminSettingsService.cs b/Server/Services/AdminSettingsService.cs new file mode 100644 index 0000000..c873c29 --- /dev/null +++ b/Server/Services/AdminSettingsService.cs @@ -0,0 +1,75 @@ +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Identity; +using Oqtane.Enums; +using Oqtane.Extensions; +using Oqtane.Infrastructure; +using Oqtane.Models; +using Oqtane.Repository; +using Oqtane.Security; +using Oqtane.Shared; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net; +using System.Reflection; +using System.Threading.Tasks; +using SZUAbsolventenverein.Module.AdminModules.Models; +using SZUAbsolventenverein.Module.AdminModules.Repository; +using SZUAbsolventenverein.Module.AdminSettings.Services; + +namespace SZUAbsolventenverein.Module.AdminModules.Services +{ + public class ServerAdminSettingsService : IAdminSettingsService + { + private readonly IAdminSettingsRepository _AdminSettingsRepository; + private readonly UserManager _identityUserManager; + private readonly IUserPermissions _userPermissions; + private readonly IRoleRepository _roleRepository; + private readonly IUserRepository _userRepository; + private readonly IUserRoleRepository _userRoleRepository; + private readonly INotificationRepository _notifications; + private readonly ILogManager _logger; + private readonly IHttpContextAccessor _accessor; + private readonly Alias _alias; + + public ServerAdminSettingsService(IAdminSettingsRepository AdminSettingsRepository, UserManager identityUserManager, INotificationRepository notifications, IUserPermissions userPermissions, IRoleRepository roleRepository, IUserRepository userRepository, IUserRoleRepository userRoleRepository, ITenantManager tenantManager, ILogManager logger, IHttpContextAccessor accessor) + { + _AdminSettingsRepository = AdminSettingsRepository; + _identityUserManager = identityUserManager; + _userPermissions = userPermissions; + _roleRepository = roleRepository; + _userRepository = userRepository; + _userRoleRepository = userRoleRepository; + _notifications = notifications; + _logger = logger; + _accessor = accessor; + _alias = tenantManager.GetAlias(); + } + + public Task GetAdminSettingsAsync(int ModuleId) + { + if (_userPermissions.IsAuthorized(_accessor.HttpContext.User, _alias.SiteId, EntityNames.Module, ModuleId, PermissionNames.View)) + { + return Task.FromResult(_AdminSettingsRepository.GetAdminSetting(ModuleId)); + } + else + { + _logger.Log(LogLevel.Error, this, LogFunction.Security, "Unauthorized AdminModules Get Attempt {ModuleId}", ModuleId); + return null; + } + } + + public Task SetAdminSettingsAsync(AdminSetting AdminSettings) + { + if (_userPermissions.IsAuthorized(_accessor.HttpContext.User, _alias.SiteId, EntityNames.Module, 1, PermissionNames.View)) + { + return Task.FromResult(_AdminSettingsRepository.SetAdminSettings(AdminSettings)); + } + else + { + _logger.Log(LogLevel.Error, this, LogFunction.Security, "Unauthorized AdminModules Get Attempt {ModuleId}", 1); + return null; + } + } + } +} diff --git a/Server/Startup/ServerStartup.cs b/Server/Startup/ServerStartup.cs index d4e2e61..42fa326 100644 --- a/Server/Startup/ServerStartup.cs +++ b/Server/Startup/ServerStartup.cs @@ -1,9 +1,12 @@ using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; +using Microsoft.AspNetCore.Identity; using Microsoft.Extensions.DependencyInjection; using Oqtane.Infrastructure; +using System; using SZUAbsolventenverein.Module.AdminModules.Repository; using SZUAbsolventenverein.Module.AdminModules.Services; +using SZUAbsolventenverein.Module.AdminSettings.Services; namespace SZUAbsolventenverein.Module.AdminModules.Startup { @@ -21,7 +24,13 @@ namespace SZUAbsolventenverein.Module.AdminModules.Startup public void ConfigureServices(IServiceCollection services) { + services.Configure(options => + { + options.TokenLifespan = TimeSpan.FromDays(14); + }); + services.AddTransient(); + services.AddTransient(); services.AddDbContextFactory(opt => { }, ServiceLifetime.Transient); } } diff --git a/Shared/Models/AdminSettings.cs b/Shared/Models/AdminSettings.cs new file mode 100644 index 0000000..6c7f9c1 --- /dev/null +++ b/Shared/Models/AdminSettings.cs @@ -0,0 +1,16 @@ +using System; +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; +using Oqtane.Models; + +namespace SZUAbsolventenverein.Module.AdminModules.Models +{ + [Table("SZUAbsolventenvereinAdminSettings")] + public class AdminSetting + { + [Key] + public int AdminSettingsId { get; set; } + public int ModuleId { get; set; } + public int TokenLifeTimeInDays { get; set; } + } +}