using Azaion.CommonSecurity.DTO; namespace Azaion.CommonSecurity.Services; public interface IResourceLoader { Task Load(string fileName, CancellationToken cancellationToken = default); } public class ResourceLoader(AzaionApiClient api, ApiCredentials credentials) : IResourceLoader { public async Task Load(string fileName, CancellationToken cancellationToken = default) { var hardwareService = new HardwareService(); var hardwareInfo = hardwareService.GetHardware(); var encryptedStream = Task.Run(() => api.GetResource(fileName, credentials.Password, hardwareInfo), cancellationToken).Result; var key = Security.MakeEncryptionKey(credentials.Email, credentials.Password, hardwareInfo.Hash); var stream = new MemoryStream(); await encryptedStream.DecryptTo(stream, key, cancellationToken); stream.Seek(0, SeekOrigin.Begin); return stream; } }