Saving AdminSettings to a Json File.
This commit is contained in:
@@ -4,7 +4,6 @@ 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
|
||||
{
|
||||
@@ -20,19 +19,12 @@ namespace SZUAbsolventenverein.Module.AdminModules.Migrations
|
||||
{
|
||||
var massMailingTemplateEntityBuilder = new MassMailingTemplateEntityBuilder(migrationBuilder, ActiveDatabase);
|
||||
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)
|
||||
{
|
||||
var entityBuilder = new MassMailingTemplateEntityBuilder(migrationBuilder, ActiveDatabase);
|
||||
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 virtual DbSet<Models.AdminModules> AdminModules { get; set; }
|
||||
public virtual DbSet<Models.AdminSetting> AdminSettings { get; set; }
|
||||
|
||||
public AdminModulesContext(IDBContextDependencies DBContextDependencies) : base(DBContextDependencies)
|
||||
{
|
||||
@@ -22,7 +21,6 @@ namespace SZUAbsolventenverein.Module.AdminModules.Repository
|
||||
base.OnModelCreating(builder);
|
||||
|
||||
builder.Entity<Models.AdminModules>().ToTable(ActiveDatabase.RewriteName("SZUAbsolventenvereinAdminModules"));
|
||||
builder.Entity<Models.AdminSetting>().ToTable(ActiveDatabase.RewriteName("SZUAbsolventenvereinAdminSettings"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
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;
|
||||
|
||||
@@ -31,25 +34,58 @@ namespace SZUAbsolventenverein.Module.AdminModules.Repository
|
||||
/// </summary>
|
||||
public class AdminSettingsRepository : IAdminSettingsRepository, ITransientService
|
||||
{
|
||||
private readonly IDbContextFactory<AdminModulesContext> _factory;
|
||||
|
||||
public AdminSettingsRepository(IDbContextFactory<AdminModulesContext> factory)
|
||||
public AdminSettingsRepository()
|
||||
{
|
||||
_factory = factory;
|
||||
}
|
||||
|
||||
public AdminSetting GetAdminSetting()
|
||||
{
|
||||
using var db = _factory.CreateDbContext();
|
||||
return db.AdminSettings.First();
|
||||
return AdminSettingsExtensions.LoadSettings();
|
||||
}
|
||||
|
||||
public AdminSetting SetAdminSettings(AdminSetting adminSetting)
|
||||
{
|
||||
using var db = _factory.CreateDbContext();
|
||||
db.Entry(adminSetting).State = EntityState.Modified;
|
||||
db.SaveChanges();
|
||||
return adminSetting.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;
|
||||
}
|
||||
|
||||
/// <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.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;
|
||||
|
||||
@@ -30,10 +27,27 @@ namespace SZUAbsolventenverein.Module.AdminModules.Startup
|
||||
{
|
||||
services.AddTransient<IAdminModulesService, ServerAdminModulesService>();
|
||||
services.AddTransient<IAdminSettingsService, ServerAdminSettingsService>();
|
||||
services.AddTransient<IAdminSettingsRepository, AdminSettingsRepository>();
|
||||
services.AddDbContextFactory<AdminModulesContext>(opt => { }, ServiceLifetime.Transient);
|
||||
|
||||
services.AddTransient<IConfigureOptions<DataProtectionTokenProviderOptions>,
|
||||
ConfigureDataProtectionTokenProviderOptions>();
|
||||
|
||||
services.Configure<DataProtectionTokenProviderOptions>(options =>
|
||||
{
|
||||
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