mirror of
https://github.com/azaion/annotations.git
synced 2026-04-22 09:46:30 +00:00
82b3b526a7
file load works, suite can start up
63 lines
2.1 KiB
C#
63 lines
2.1 KiB
C#
using Azaion.CommonSecurity.DTO;
|
|
using Azaion.CommonSecurity.DTO.Commands;
|
|
using MessagePack;
|
|
using NetMQ;
|
|
using NetMQ.Sockets;
|
|
|
|
namespace Azaion.CommonSecurity.Services;
|
|
|
|
public interface IResourceLoader
|
|
{
|
|
Task<MemoryStream> Load(string fileName, CancellationToken cancellationToken = default);
|
|
}
|
|
|
|
public class PythonResourceLoader : IResourceLoader
|
|
{
|
|
private readonly PushSocket _pushSocket = new();
|
|
private readonly PullSocket _pullSocket = new();
|
|
|
|
public PythonResourceLoader(ApiCredentials credentials)
|
|
{
|
|
//Run python by credentials
|
|
_pushSocket.Connect($"tcp://{SecurityConstants.SOCKET_HOST}:{SecurityConstants.SOCKET_SEND_PORT}");
|
|
_pullSocket.Connect($"tcp://{SecurityConstants.SOCKET_HOST}:{SecurityConstants.SOCKET_RECEIVE_PORT}");
|
|
}
|
|
|
|
public async Task<MemoryStream> Load(string fileName, CancellationToken cancellationToken = default)
|
|
{
|
|
try
|
|
{
|
|
var b = MessagePackSerializer.Serialize(new FileCommand
|
|
{
|
|
CommandType = CommandType.Load,
|
|
Filename = fileName
|
|
});
|
|
_pushSocket.SendFrame(b);
|
|
|
|
var bytes = _pullSocket.ReceiveFrameBytes(out bool more);
|
|
return new MemoryStream(bytes);
|
|
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
throw new Exception($"Failed to load fil0e '{fileName}': {ex.Message}", ex);
|
|
}
|
|
}
|
|
}
|
|
|
|
public class ResourceLoader(AzaionApiClient api, ApiCredentials credentials) : IResourceLoader
|
|
{
|
|
public async Task<MemoryStream> 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;
|
|
}
|
|
} |