Saving AdminSettings to a Json File.
This commit is contained in:
@@ -4,7 +4,6 @@ using Oqtane.Databases.Interfaces;
|
|||||||
using Oqtane.Migrations;
|
using Oqtane.Migrations;
|
||||||
using SZUAbsolventenverein.Module.AdminModules.Migrations.EntityBuilders;
|
using SZUAbsolventenverein.Module.AdminModules.Migrations.EntityBuilders;
|
||||||
using SZUAbsolventenverein.Module.AdminModules.Repository;
|
using SZUAbsolventenverein.Module.AdminModules.Repository;
|
||||||
using SZUAbsolventenverein.Module.AdminModules.Server.Migrations.EntityBuilders;
|
|
||||||
|
|
||||||
namespace SZUAbsolventenverein.Module.AdminModules.Migrations
|
namespace SZUAbsolventenverein.Module.AdminModules.Migrations
|
||||||
{
|
{
|
||||||
@@ -20,19 +19,12 @@ namespace SZUAbsolventenverein.Module.AdminModules.Migrations
|
|||||||
{
|
{
|
||||||
var massMailingTemplateEntityBuilder = new MassMailingTemplateEntityBuilder(migrationBuilder, ActiveDatabase);
|
var massMailingTemplateEntityBuilder = new MassMailingTemplateEntityBuilder(migrationBuilder, ActiveDatabase);
|
||||||
massMailingTemplateEntityBuilder.Create();
|
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)
|
protected override void Down(MigrationBuilder migrationBuilder)
|
||||||
{
|
{
|
||||||
var entityBuilder = new MassMailingTemplateEntityBuilder(migrationBuilder, ActiveDatabase);
|
var entityBuilder = new MassMailingTemplateEntityBuilder(migrationBuilder, ActiveDatabase);
|
||||||
entityBuilder.Drop();
|
entityBuilder.Drop();
|
||||||
var adminSettingsEntityBuilder = new AdminSettingsEntityBuilder(migrationBuilder, ActiveDatabase);
|
|
||||||
adminSettingsEntityBuilder.Drop();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,34 +0,0 @@
|
|||||||
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<AdminSettingsEntityBuilder>
|
|
||||||
{
|
|
||||||
|
|
||||||
private const string _entityTableName = "SZUAbsolventenvereinAdminSettings";
|
|
||||||
private readonly PrimaryKey<AdminSettingsEntityBuilder> _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<AddColumnOperation> AdminSettingsId { get; set; }
|
|
||||||
public OperationBuilder<AddColumnOperation> TokenLifetime { get; set; }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -10,7 +10,6 @@ namespace SZUAbsolventenverein.Module.AdminModules.Repository
|
|||||||
public class AdminModulesContext : DBContextBase, ITransientService, IMultiDatabase
|
public class AdminModulesContext : DBContextBase, ITransientService, IMultiDatabase
|
||||||
{
|
{
|
||||||
public virtual DbSet<Models.AdminModules> AdminModules { get; set; }
|
public virtual DbSet<Models.AdminModules> AdminModules { get; set; }
|
||||||
public virtual DbSet<Models.AdminSetting> AdminSettings { get; set; }
|
|
||||||
|
|
||||||
public AdminModulesContext(IDBContextDependencies DBContextDependencies) : base(DBContextDependencies)
|
public AdminModulesContext(IDBContextDependencies DBContextDependencies) : base(DBContextDependencies)
|
||||||
{
|
{
|
||||||
@@ -22,7 +21,6 @@ namespace SZUAbsolventenverein.Module.AdminModules.Repository
|
|||||||
base.OnModelCreating(builder);
|
base.OnModelCreating(builder);
|
||||||
|
|
||||||
builder.Entity<Models.AdminModules>().ToTable(ActiveDatabase.RewriteName("SZUAbsolventenvereinAdminModules"));
|
builder.Entity<Models.AdminModules>().ToTable(ActiveDatabase.RewriteName("SZUAbsolventenvereinAdminModules"));
|
||||||
builder.Entity<Models.AdminSetting>().ToTable(ActiveDatabase.RewriteName("SZUAbsolventenvereinAdminSettings"));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,9 @@
|
|||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.IO;
|
||||||
|
using System.Runtime.CompilerServices;
|
||||||
|
using System.Text.Json;
|
||||||
using SZUAbsolventenverein.Module.AdminModules.Models;
|
using SZUAbsolventenverein.Module.AdminModules.Models;
|
||||||
using Oqtane.Modules;
|
using Oqtane.Modules;
|
||||||
|
|
||||||
@@ -31,25 +34,58 @@ namespace SZUAbsolventenverein.Module.AdminModules.Repository
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public class AdminSettingsRepository : IAdminSettingsRepository, ITransientService
|
public class AdminSettingsRepository : IAdminSettingsRepository, ITransientService
|
||||||
{
|
{
|
||||||
private readonly IDbContextFactory<AdminModulesContext> _factory;
|
public AdminSettingsRepository()
|
||||||
|
|
||||||
public AdminSettingsRepository(IDbContextFactory<AdminModulesContext> factory)
|
|
||||||
{
|
{
|
||||||
_factory = factory;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public AdminSetting GetAdminSetting()
|
public AdminSetting GetAdminSetting()
|
||||||
{
|
{
|
||||||
using var db = _factory.CreateDbContext();
|
return AdminSettingsExtensions.LoadSettings();
|
||||||
return db.AdminSettings.First();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public AdminSetting SetAdminSettings(AdminSetting adminSetting)
|
public AdminSetting SetAdminSettings(AdminSetting adminSetting)
|
||||||
{
|
{
|
||||||
using var db = _factory.CreateDbContext();
|
return adminSetting.SaveChanges();
|
||||||
db.Entry(adminSetting).State = EntityState.Modified;
|
}
|
||||||
db.SaveChanges();
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Extension methods for saving and loading admin settings to/from a JSON file.
|
||||||
|
/// </summary>
|
||||||
|
public static class AdminSettingsExtensions
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Path to the JSON file where admin settings are stored.
|
||||||
|
/// </summary>
|
||||||
|
private static string path = "AdminSettings.json";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Saves the adminSettingsObject to a JSON file.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="adminSetting">Settings to save</param>
|
||||||
|
/// <returns>The same AdminSettings object for chaining of Operations</returns>
|
||||||
|
public static AdminSetting SaveChanges(this AdminSetting adminSetting)
|
||||||
|
{
|
||||||
|
string res = JsonSerializer.Serialize(adminSetting);
|
||||||
|
|
||||||
|
File.WriteAllText(path, res);
|
||||||
|
|
||||||
return adminSetting;
|
return adminSetting;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Loads the admin settings from the JSON file. If the file does not exist, returns a new AdminSetting object with default (0) values.
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static AdminSetting LoadSettings()
|
||||||
|
{
|
||||||
|
if (File.Exists(path))
|
||||||
|
{
|
||||||
|
string json = File.ReadAllText(path);
|
||||||
|
return JsonSerializer.Deserialize<AdminSetting>(json);
|
||||||
|
}
|
||||||
|
|
||||||
|
return new AdminSetting();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,50 +0,0 @@
|
|||||||
using Microsoft.AspNetCore.Identity;
|
|
||||||
using Microsoft.Extensions.Options;
|
|
||||||
using System;
|
|
||||||
using System.Linq;
|
|
||||||
using Microsoft.EntityFrameworkCore;
|
|
||||||
using Microsoft.Extensions.DependencyInjection;
|
|
||||||
using SZUAbsolventenverein.Module.AdminModules.Models;
|
|
||||||
using SZUAbsolventenverein.Module.AdminModules.Repository;
|
|
||||||
|
|
||||||
namespace SZUAbsolventenverein.Module.AdminModules.Server.Startup
|
|
||||||
{
|
|
||||||
public class ConfigureDataProtectionTokenProviderOptions : IConfigureOptions<DataProtectionTokenProviderOptions>
|
|
||||||
{
|
|
||||||
private readonly IServiceProvider _serviceProvider;
|
|
||||||
|
|
||||||
public ConfigureDataProtectionTokenProviderOptions(IServiceProvider serviceProvider)
|
|
||||||
{
|
|
||||||
_serviceProvider = serviceProvider;
|
|
||||||
Console.WriteLine("Instatiating DPTPO Configurator");
|
|
||||||
}
|
|
||||||
|
|
||||||
public void Configure(DataProtectionTokenProviderOptions options)
|
|
||||||
{
|
|
||||||
Console.WriteLine("Configuring DPTPO");
|
|
||||||
// default fallback
|
|
||||||
options.TokenLifespan = TimeSpan.FromHours(2);
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
using var scope = _serviceProvider.CreateScope();
|
|
||||||
var _dbContextFactory = scope.ServiceProvider.GetRequiredService<IDbContextFactory<AdminModulesContext>>();
|
|
||||||
var _ctx = _dbContextFactory.CreateDbContext();
|
|
||||||
AdminSetting adminSetting = _ctx.AdminSettings.First();
|
|
||||||
|
|
||||||
Console.WriteLine("Setting DPTPO: " + adminSetting);
|
|
||||||
if (adminSetting != null)
|
|
||||||
{
|
|
||||||
Console.WriteLine("Setting DPTPO: " + adminSetting.TokenLifetime);
|
|
||||||
options.TokenLifespan = TimeSpan.FromDays(adminSetting.TokenLifetime);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
Console.WriteLine("DB Not ready, using default DPTPO: " + ex);
|
|
||||||
// DB not ready / read failed — keep default
|
|
||||||
// Unable to get Create DB Context because Oqtane's Database Setup is incomplete.
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,14 +1,11 @@
|
|||||||
using Microsoft.AspNetCore.Builder;
|
using Microsoft.AspNetCore.Builder;
|
||||||
using Microsoft.AspNetCore.Hosting;
|
using Microsoft.AspNetCore.Hosting;
|
||||||
using Microsoft.AspNetCore.Identity;
|
using Microsoft.AspNetCore.Identity;
|
||||||
using Microsoft.EntityFrameworkCore;
|
|
||||||
using Microsoft.Extensions.DependencyInjection;
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
using Microsoft.Extensions.Options;
|
|
||||||
using Oqtane.Infrastructure;
|
using Oqtane.Infrastructure;
|
||||||
using System;
|
using System;
|
||||||
using SZUAbsolventenverein.Module.AdminModules.Models;
|
using SZUAbsolventenverein.Module.AdminModules.Models;
|
||||||
using SZUAbsolventenverein.Module.AdminModules.Repository;
|
using SZUAbsolventenverein.Module.AdminModules.Repository;
|
||||||
using SZUAbsolventenverein.Module.AdminModules.Server.Startup;
|
|
||||||
using SZUAbsolventenverein.Module.AdminModules.Services;
|
using SZUAbsolventenverein.Module.AdminModules.Services;
|
||||||
using SZUAbsolventenverein.Module.AdminSettings.Services;
|
using SZUAbsolventenverein.Module.AdminSettings.Services;
|
||||||
|
|
||||||
@@ -30,10 +27,27 @@ namespace SZUAbsolventenverein.Module.AdminModules.Startup
|
|||||||
{
|
{
|
||||||
services.AddTransient<IAdminModulesService, ServerAdminModulesService>();
|
services.AddTransient<IAdminModulesService, ServerAdminModulesService>();
|
||||||
services.AddTransient<IAdminSettingsService, ServerAdminSettingsService>();
|
services.AddTransient<IAdminSettingsService, ServerAdminSettingsService>();
|
||||||
|
services.AddTransient<IAdminSettingsRepository, AdminSettingsRepository>();
|
||||||
services.AddDbContextFactory<AdminModulesContext>(opt => { }, ServiceLifetime.Transient);
|
services.AddDbContextFactory<AdminModulesContext>(opt => { }, ServiceLifetime.Transient);
|
||||||
|
|
||||||
services.AddTransient<IConfigureOptions<DataProtectionTokenProviderOptions>,
|
services.Configure<DataProtectionTokenProviderOptions>(options =>
|
||||||
ConfigureDataProtectionTokenProviderOptions>();
|
{
|
||||||
|
options.TokenLifespan = TimeSpan.FromDays(2);
|
||||||
|
});
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
AdminSetting settings = AdminSettingsExtensions.LoadSettings();
|
||||||
|
services.Configure<DataProtectionTokenProviderOptions>(options =>
|
||||||
|
{
|
||||||
|
options.TokenLifespan = TimeSpan.FromDays(settings.TokenLifetime);
|
||||||
|
});
|
||||||
|
Console.WriteLine("Saving token lifetime: " + settings.TokenLifetime + " days");
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Console.WriteLine(ex);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user