using IdentityShroud.Core.Security; using IdentityShroud.Core.Security.Keys; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Metadata.Builders; namespace IdentityShroud.Core.Model; public record RealmSigningKey { public required RealmSigningKeyId Id { get; init; } public required KeyType KeyType { get; init; } public required EncryptedDek Key { get; init; } public required DateTime CreatedAt { get; init; } public DateTime? RevokedAt { get; set; } /// /// Key with highest priority will be used. While there is not really a use case for this I know some users /// are more comfortable replacing keys by using priority then directly deactivating the old key. /// public int Priority { get; set; } = 10; public Dictionary? PublicKeyParameters { get; set; } } public class RealmKeyConfiguration : IEntityTypeConfiguration { public void Configure(EntityTypeBuilder b) { b.ToTable("realm_key"); b.HasKey(e => e.Id); b.ComplexProperty(e => e.Key, e => e.IsRequired()); b.Property(e => e.PublicKeyParameters).HasColumnType("jsonb"); } }