using System.Security.Cryptography; using IdentityShroud.Core.Contracts; using IdentityShroud.Core.Helpers; using IdentityShroud.Core.Messages.Realm; using IdentityShroud.Core.Model; namespace IdentityShroud.Core.Services; public record RealmCreateResponse(Guid Id, string Slug, string Name); public class RealmService( Db db, IEncryptionService encryptionService) : IRealmService { public async Task> Create(RealmCreateRequest request, CancellationToken ct = default) { Realm realm = new() { Id = request.Id ?? Guid.CreateVersion7(), Slug = request.Slug ?? SlugHelper.GenerateSlug(request.Name), Name = request.Name, }; using RSA rsa = RSA.Create(2048); realm.SetPrivateKey(encryptionService, rsa.ExportPkcs8PrivateKey()); db.Add(realm); await db.SaveChangesAsync(ct); return new RealmCreateResponse( realm.Id, realm.Slug, realm.Name); } }