diff --git a/.gitignore b/.gitignore index 89ec5c5..3917bf7 100644 --- a/.gitignore +++ b/.gitignore @@ -3,5 +3,4 @@ **/obj **/obj/** **/Debug - -.idea/ \ No newline at end of file +.idea 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 760750f..7f345a7 100644 --- a/Client/Modules/SZUAbsolventenverein.Module.AdminModules/Edit.razor +++ b/Client/Modules/SZUAbsolventenverein.Module.AdminMassMailing/Edit.razor @@ -3,7 +3,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 53b21ac..e8922dd 100644 --- a/Client/Modules/SZUAbsolventenverein.Module.AdminModules/Index.razor +++ b/Client/Modules/SZUAbsolventenverein.Module.AdminMassMailing/Index.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.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..e5394c1 --- /dev/null +++ b/Client/Modules/SZUAbsolventenverein.Module.AdminSettings/Index.razor @@ -0,0 +1,64 @@ +@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 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); + } + } + + private async Task Save() + { + Console.WriteLine("Saving!!!!"); + try + { + AddModuleMessage("Saved", MessageType.Success); + await AdminSettingsService.SetAdminSettingsAsync(_AdminSetting); + AddModuleMessage("Saved", MessageType.Success); + } + 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/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 fcc6d06..b5d223e 100644 --- a/Client/Startup/ClientStartup.cs +++ b/Client/Startup/ClientStartup.cs @@ -6,6 +6,7 @@ using Oqtane.Services; using SZUAbsolventenverein.Module.AdminModules.Client.Components; using SZUAbsolventenverein.Module.AdminModules.Services; using SZUAbsolventenverein.Module.ReportSystem.Services; +using SZUAbsolventenverein.Module.AdminSettings.Services; namespace SZUAbsolventenverein.Module.AdminModules.Startup { @@ -32,6 +33,11 @@ namespace SZUAbsolventenverein.Module.AdminModules.Startup { services.AddScoped(); } + + if (!services.Any(s => s.ServiceType == typeof(IAdminSettingsService))) + { + services.AddScoped(); + } } } } diff --git a/Package/SZUAbsolventenverein.Module.AdminModules.nuspec b/Package/SZUAbsolventenverein.Module.AdminModules.nuspec index cc32e7a..b9cb024 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/Package/debug.sh b/Package/debug.sh index 058d474..aaafa9d 100644 --- a/Package/debug.sh +++ b/Package/debug.sh @@ -10,3 +10,4 @@ cp -f "../Server/bin/Debug/$TargetFramework/$ProjectName.Server.Oqtane.pdb" "../ cp -f "../Shared/bin/Debug/$TargetFramework/$ProjectName.Shared.Oqtane.dll" "../../oqtane.framework/Oqtane.Server/bin/Debug/$TargetFramework/" cp -f "../Shared/bin/Debug/$TargetFramework/$ProjectName.Shared.Oqtane.pdb" "../../oqtane.framework/Oqtane.Server/bin/Debug/$TargetFramework/" cp -rf "../Server/wwwroot/"* "../../oqtane.framework/Oqtane.Server/wwwroot/_content/$ProjectName/" + 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..eee1cf6 100644 --- a/Server/Migrations/01000000_InitializeModule.cs +++ b/Server/Migrations/01000000_InitializeModule.cs @@ -17,13 +17,13 @@ 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(); } protected override void Down(MigrationBuilder migrationBuilder) { - var entityBuilder = new AdminModulesEntityBuilder(migrationBuilder, ActiveDatabase); + var entityBuilder = new MassMailingTemplateEntityBuilder(migrationBuilder, ActiveDatabase); entityBuilder.Drop(); } } 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/AdminSettingsRepository.cs b/Server/Repository/AdminSettingsRepository.cs new file mode 100644 index 0000000..9be321b --- /dev/null +++ b/Server/Repository/AdminSettingsRepository.cs @@ -0,0 +1,91 @@ +using Microsoft.EntityFrameworkCore; +using System.Linq; +using System.Collections.Generic; +using System.IO; +using System.Runtime.CompilerServices; +using System.Text.Json; +using SZUAbsolventenverein.Module.AdminModules.Models; +using Oqtane.Modules; + +namespace SZUAbsolventenverein.Module.AdminModules.Repository +{ + /// + /// Repository to manage admin settings in the database. + /// + public interface IAdminSettingsRepository + { + /// + /// Retrieves the administrative settings entry from the Database. + /// + /// An object containing the settings for the specified module. Returns if the module is not found. + Models.AdminSetting GetAdminSetting(); + + /// + /// Updates the administrative settings with the specified values. + /// + /// The new administrative settings to apply. Cannot be null. + /// The updated object reflecting the applied changes. + Models.AdminSetting SetAdminSettings(Models.AdminSetting adminSetting); + } + + /// + /// Implementation of the interface for managing admin settings in the database. + /// + public class AdminSettingsRepository : IAdminSettingsRepository, ITransientService + { + public AdminSettingsRepository() + { + } + + public AdminSetting GetAdminSetting() + { + return AdminSettingsExtensions.LoadSettings(); + } + + public AdminSetting SetAdminSettings(AdminSetting adminSetting) + { + return adminSetting.SaveChanges(); + } + } + + /// + /// Extension methods for saving and loading admin settings to/from a JSON file. + /// + public static class AdminSettingsExtensions + { + /// + /// Path to the JSON file where admin settings are stored. + /// + private static string path = "AdminSettings.json"; + + /// + /// Saves the adminSettingsObject to a JSON file. + /// + /// Settings to save + /// The same AdminSettings object for chaining of Operations + public static AdminSetting SaveChanges(this AdminSetting adminSetting) + { + string res = JsonSerializer.Serialize(adminSetting); + + File.WriteAllText(path, res); + + return adminSetting; + } + + /// + /// Loads the admin settings from the JSON file. If the file does not exist, returns a new AdminSetting object with default (0) values. + /// + /// + public static AdminSetting LoadSettings() + { + if (File.Exists(path)) + { + string json = File.ReadAllText(path); + return JsonSerializer.Deserialize(json); + } + + return new AdminSetting(); + } + } +} diff --git a/Server/Services/AdminModulesService.cs b/Server/Services/AdminModulesService.cs index b64e269..82820d8 100644 --- a/Server/Services/AdminModulesService.cs +++ b/Server/Services/AdminModulesService.cs @@ -168,8 +168,8 @@ namespace SZUAbsolventenverein.Module.AdminModules.Services User user = _userRepository.GetUser(userid); IdentityUser identityuser = await _identityUserManager.FindByNameAsync(user.Username); string body = template.Content; - - // Fields befüllen. + + // 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..427162f --- /dev/null +++ b/Server/Services/AdminSettingsService.cs @@ -0,0 +1,77 @@ +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 Microsoft.Extensions.DependencyInjection; +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()); + } + 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)) + { + _logger.Log(LogLevel.Critical, this, LogFunction.Update, "Set AdminSettings"); + 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 e1e93fb..8c35781 100644 --- a/Server/Startup/ServerStartup.cs +++ b/Server/Startup/ServerStartup.cs @@ -1,12 +1,17 @@ using Interfaces; 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.Models; using SZUAbsolventenverein.Module.AdminModules.Repository; using SZUAbsolventenverein.Module.AdminModules.Services; + using SZUAbsolventenverein.Module.ReportSystem.Repository; using SZUAbsolventenverein.Module.ReportSystem.Services; +using SZUAbsolventenverein.Module.AdminSettings.Services; namespace SZUAbsolventenverein.Module.AdminModules.Startup { @@ -27,8 +32,31 @@ namespace SZUAbsolventenverein.Module.AdminModules.Startup services.AddTransient(); services.AddTransient(); services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + services.AddDbContextFactory(opt => { }, ServiceLifetime.Transient); services.AddDbContextFactory(opt => { }, ServiceLifetime.Transient); + services.AddDbContextFactory(opt => { }, ServiceLifetime.Transient); + + services.Configure(options => + { + options.TokenLifespan = TimeSpan.FromDays(2); + }); + + try + { + AdminSetting settings = AdminSettingsExtensions.LoadSettings(); + services.Configure(options => + { + options.TokenLifespan = TimeSpan.FromDays(settings.TokenLifetime); + }); + Console.WriteLine("Saving token lifetime: " + settings.TokenLifetime + " days"); + } + catch (Exception ex) + { + Console.WriteLine(ex); + } } } } diff --git a/Shared/Models/AdminSettings.cs b/Shared/Models/AdminSettings.cs new file mode 100644 index 0000000..c93fd69 --- /dev/null +++ b/Shared/Models/AdminSettings.cs @@ -0,0 +1,17 @@ +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; } + [NotMapped] + public int ModuleId { get; set; } + public int TokenLifetime { get; set; } + } +}