using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; using IdentityShroud.Core.Contracts; namespace IdentityShroud.Core.Model; [Table("realm")] public class Realm { private byte[] _privateKeyDecrypted = []; public Guid Id { get; set; } /// /// Note this is part of the url we should encourage users to keep it short but we do not want to limit them too much /// [MaxLength(40)] public string Slug { get; set; } = ""; [MaxLength(128)] public string Name { get; set; } = ""; public List Clients { get; init; } = []; public byte[] PrivateKeyEncrypted { get; set { field = value; _privateKeyDecrypted = []; } } = []; public byte[] GetPrivateKey(IEncryptionService encryptionService) { if (_privateKeyDecrypted.Length == 0 && PrivateKeyEncrypted.Length > 0) _privateKeyDecrypted = encryptionService.Decrypt(PrivateKeyEncrypted); return _privateKeyDecrypted; } public void SetPrivateKey(IEncryptionService encryptionService, byte[] privateKey) { PrivateKeyEncrypted = encryptionService.Encrypt(privateKey); _privateKeyDecrypted = privateKey; } }