mirror of
https://github.com/azaion/annotations.git
synced 2026-04-23 06:56:31 +00:00
47 lines
1.6 KiB
C#
47 lines
1.6 KiB
C#
using System.IO;
|
|
using System.Reflection;
|
|
using Azaion.Common.DTO;
|
|
|
|
namespace Azaion.Common.Services;
|
|
|
|
public interface IResourceLoader
|
|
{
|
|
Task<MemoryStream> Load(string fileName, CancellationToken cancellationToken = default);
|
|
Assembly? LoadAssembly(string asmName);
|
|
}
|
|
|
|
public class ResourceLoader(AzaionApiClient api, ApiCredentials credentials) : IResourceLoader
|
|
{
|
|
private static readonly List<string> EncryptedResources =
|
|
[
|
|
"Azaion.Annotator",
|
|
"Azaion.Dataset"
|
|
];
|
|
|
|
public Assembly? LoadAssembly(string resourceName)
|
|
{
|
|
var assemblyName = resourceName.Split(',').First();
|
|
if (EncryptedResources.Contains(assemblyName))
|
|
{
|
|
var stream = Load($"{assemblyName}.dll").GetAwaiter().GetResult();
|
|
return Assembly.Load(stream.ToArray());
|
|
}
|
|
|
|
var loadedAssembly = AppDomain.CurrentDomain.GetAssemblies()
|
|
.FirstOrDefault(a => a.GetName().Name == assemblyName);
|
|
|
|
return loadedAssembly;
|
|
}
|
|
|
|
public async Task<MemoryStream> Load(string fileName, CancellationToken cancellationToken = default)
|
|
{
|
|
var hardwareService = new HardwareService();
|
|
var hardwareInfo = await hardwareService.GetHardware();
|
|
var encryptedStream = await api.GetResource(fileName, credentials.Password, hardwareInfo);
|
|
|
|
var key = Security.MakeEncryptionKey(credentials.Email, credentials.Password, hardwareInfo.Hash);
|
|
var stream = new MemoryStream();
|
|
await encryptedStream.DecryptTo(stream, key, cancellationToken);
|
|
return stream;
|
|
}
|
|
} |