IdentityShroud/IdentityShroud.Core/EFCore/Db.cs

59 lines
2.1 KiB
C#
Raw Normal View History

2026-02-06 19:58:01 +01:00
using IdentityShroud.Core.Model;
using IdentityShroud.Core.Security;
using IdentityShroud.Core.Security.Keys;
2026-02-06 19:58:01 +01:00
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
namespace IdentityShroud.Core.EFCore;
2026-02-06 19:58:01 +01:00
public class DbConfiguration
{
public string ConnectionString { get; set; } = "";
public bool LogSensitiveData { get; set; } = false;
}
public class Db(
IOptions<DbConfiguration> configuration,
ILoggerFactory? loggerFactory)
: DbContext
{
public virtual DbSet<Client> Clients { get; set; }
2026-02-06 19:58:01 +01:00
public virtual DbSet<Realm> Realms { get; set; }
public virtual DbSet<RealmSigningKey> Keys { get; set; }
public virtual DbSet<RealmDek> Deks { get; set; }
2026-02-06 19:58:01 +01:00
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseNpgsql("<connection string>");
optionsBuilder.UseNpgsql(
configuration.Value.ConnectionString,
o => o.MigrationsAssembly("IdentityShroud.Migrations")); // , o => o.UseNodaTime().UseVector().MigrationsAssembly("Migrations.KnowledgeBaseDB"));
optionsBuilder.UseSnakeCaseNamingConvention();
if (configuration.Value.LogSensitiveData)
optionsBuilder.EnableSensitiveDataLogging();
if (loggerFactory is { } )
{
optionsBuilder.UseLoggerFactory(loggerFactory);
}
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.ApplyConfigurationsFromAssembly(typeof(Db).Assembly);
}
protected override void ConfigureConventions(ModelConfigurationBuilder b)
{
base.ConfigureConventions(b);
2026-02-06 19:58:01 +01:00
b.Properties<DekId>().HaveConversion<DekIdConverter>();
b.Properties<Dictionary<string, string>>().HaveConversion<DictionaryToJsonConverter<string, string>>();
b.Properties<JwtSigAlgName>().HaveConversion<JwtSigAlgNameConverter>();
b.Properties<KekId>().HaveConversion<KekIdConverter>();
b.Properties<KeyType>().HaveConversion<KeyTypeConverter>();
b.Properties<RealmSigningKeyId>().HaveConversion<RealmSigningKeyIdConverter>();
2026-02-06 19:58:01 +01:00
}
}