diff --git a/Client/Modules/SZUAbsolventenverein.Module.AdminSettings/Index.razor b/Client/Modules/SZUAbsolventenverein.Module.AdminSettings/Index.razor
index 153a58c..2826751 100644
--- a/Client/Modules/SZUAbsolventenverein.Module.AdminSettings/Index.razor
+++ b/Client/Modules/SZUAbsolventenverein.Module.AdminSettings/Index.razor
@@ -13,13 +13,11 @@
}
else
{
-
-
+
+
}
@code {
- public override string RenderMode => RenderModes.Static;
-
public override List Resources => new List()
{
new Stylesheet("_content/SZUAbsolventenverein.Module.AdminModules/Module.css"),
@@ -41,11 +39,14 @@ else
}
}
- protected async Task Save()
+ private async Task Save()
{
+ Console.WriteLine("Saving!!!!");
try
{
+ AddModuleMessage("Saved", MessageType.Success);
await AdminSettingsService.SetAdminSettingsAsync(_AdminSetting);
+ AddModuleMessage("Saved", MessageType.Success);
}
catch (Exception ex)
{
diff --git a/Server/Migrations/01000000_InitializeModule.cs b/Server/Migrations/01000000_InitializeModule.cs
index c72c0e9..56b24d7 100644
--- a/Server/Migrations/01000000_InitializeModule.cs
+++ b/Server/Migrations/01000000_InitializeModule.cs
@@ -22,6 +22,9 @@ namespace SZUAbsolventenverein.Module.AdminModules.Migrations
massMailingTemplateEntityBuilder.Create();
var adminSettingsEntityBuilder = new AdminSettingsEntityBuilder(migrationBuilder, ActiveDatabase);
adminSettingsEntityBuilder.Create();
+
+ // Eine AdminSettings Zeile erstellen, damit die Werte nachher bearbeitet werden können.
+ migrationBuilder.Sql("INSERT INTO SZUAbsolventenvereinAdminSettings VALUES (1, 1, 'host', time('now'), 'host', time('now'))");
}
protected override void Down(MigrationBuilder migrationBuilder)
diff --git a/Server/Repository/AdminSettingsRepository.cs b/Server/Repository/AdminSettingsRepository.cs
index 4eeef01..d2b1189 100644
--- a/Server/Repository/AdminSettingsRepository.cs
+++ b/Server/Repository/AdminSettingsRepository.cs
@@ -6,22 +6,39 @@ using Oqtane.Modules;
namespace SZUAbsolventenverein.Module.AdminModules.Repository
{
+ ///
+ /// Repository to manage admin settings in the database.
+ ///
public interface IAdminSettingsRepository
{
- Models.AdminSetting GetAdminSetting(int AdminModuleId);
+ ///
+ /// 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);
}
- public class AdminSettingRepository : IAdminSettingsRepository, ITransientService
+ ///
+ /// Implementation of the interface for managing admin settings in the database.
+ ///
+ public class AdminSettingsRepository : IAdminSettingsRepository, ITransientService
{
private readonly IDbContextFactory _factory;
- public AdminSettingRepository(IDbContextFactory factory)
+ public AdminSettingsRepository(IDbContextFactory factory)
{
_factory = factory;
}
- public AdminSetting GetAdminSetting(int AdminModuleId)
+ public AdminSetting GetAdminSetting()
{
using var db = _factory.CreateDbContext();
return db.AdminSettings.First();
diff --git a/Server/Services/AdminSettingsService.cs b/Server/Services/AdminSettingsService.cs
index c873c29..e7bb81a 100644
--- a/Server/Services/AdminSettingsService.cs
+++ b/Server/Services/AdminSettingsService.cs
@@ -50,7 +50,7 @@ namespace SZUAbsolventenverein.Module.AdminModules.Services
{
if (_userPermissions.IsAuthorized(_accessor.HttpContext.User, _alias.SiteId, EntityNames.Module, ModuleId, PermissionNames.View))
{
- return Task.FromResult(_AdminSettingsRepository.GetAdminSetting(ModuleId));
+ return Task.FromResult(_AdminSettingsRepository.GetAdminSetting());
}
else
{
@@ -63,6 +63,7 @@ namespace SZUAbsolventenverein.Module.AdminModules.Services
{
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
diff --git a/Server/Startup/DataProtectionTokenProviderOptionsConfigurator.cs b/Server/Startup/DataProtectionTokenProviderOptionsConfigurator.cs
new file mode 100644
index 0000000..6fc651e
--- /dev/null
+++ b/Server/Startup/DataProtectionTokenProviderOptionsConfigurator.cs
@@ -0,0 +1,44 @@
+using Microsoft.AspNetCore.Identity;
+using Microsoft.Extensions.Options;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using SZUAbsolventenverein.Module.AdminModules.Models;
+using SZUAbsolventenverein.Module.AdminModules.Repository;
+
+namespace SZUAbsolventenverein.Module.AdminModules.Server.Startup
+{
+ public class DataProtectionTokenOptionsConfigurator : IConfigureOptions
+ {
+ private readonly IAdminSettingsRepository _repo;
+
+ public DataProtectionTokenOptionsConfigurator(IAdminSettingsRepository repo)
+ {
+ _repo = repo;
+ }
+
+ public void Configure(DataProtectionTokenProviderOptions options)
+ {
+ // default fallback
+ options.TokenLifespan = TimeSpan.FromHours(2);
+
+ try
+ {
+ Console.WriteLine("Setting DPTPO: ");
+ AdminSetting settings = _repo.GetAdminSetting();
+ Console.WriteLine("Setting DPTPO: " + settings);
+ if (settings != null && settings.TokenLifetime > 0)
+ {
+ Console.WriteLine("Setting DPTPO: " + settings.TokenLifetime);
+ options.TokenLifespan = TimeSpan.FromDays(settings.TokenLifetime);
+ }
+ }
+ catch
+ {
+ // DB not ready / read failed — keep default
+ }
+ }
+ }
+}
diff --git a/Server/Startup/ServerStartup.cs b/Server/Startup/ServerStartup.cs
index 42fa326..0e69864 100644
--- a/Server/Startup/ServerStartup.cs
+++ b/Server/Startup/ServerStartup.cs
@@ -1,10 +1,14 @@
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Identity;
+using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Options;
using Oqtane.Infrastructure;
using System;
+using SZUAbsolventenverein.Module.AdminModules.Models;
using SZUAbsolventenverein.Module.AdminModules.Repository;
+using SZUAbsolventenverein.Module.AdminModules.Server.Startup;
using SZUAbsolventenverein.Module.AdminModules.Services;
using SZUAbsolventenverein.Module.AdminSettings.Services;
@@ -24,14 +28,16 @@ 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);
+
+ services.Configure(options =>
+ {
+ options.TokenLifespan = TimeSpan.FromHours(2);
+ });
+
+ services.AddTransient, DataProtectionTokenOptionsConfigurator>();
}
}
}
diff --git a/Shared/Models/AdminSettings.cs b/Shared/Models/AdminSettings.cs
index 6c7f9c1..c93fd69 100644
--- a/Shared/Models/AdminSettings.cs
+++ b/Shared/Models/AdminSettings.cs
@@ -10,7 +10,8 @@ namespace SZUAbsolventenverein.Module.AdminModules.Models
{
[Key]
public int AdminSettingsId { get; set; }
+ [NotMapped]
public int ModuleId { get; set; }
- public int TokenLifeTimeInDays { get; set; }
+ public int TokenLifetime { get; set; }
}
}