web-proxy rewrite
This commit is contained in:
parent
26c741ad03
commit
283fa1abc2
10 changed files with 63 additions and 134 deletions
|
|
@ -10,24 +10,26 @@ public class ConsoleHandler : IMessageHandler<AgentSession>
|
||||||
{
|
{
|
||||||
public async ValueTask HandleAsync<TMessage>(AgentSession sender, TMessage message, CancellationToken cancellationToken) where TMessage : IMessage
|
public async ValueTask HandleAsync<TMessage>(AgentSession sender, TMessage message, CancellationToken cancellationToken) where TMessage : IMessage
|
||||||
{
|
{
|
||||||
if (message is ConsoleQueryRequest consoleQueryRequest)
|
if (message is Proxy<ConsoleQueryRequest> consoleQueryRequest)
|
||||||
{
|
{
|
||||||
await OnConsoleQueryRequestAsync(sender, consoleQueryRequest, cancellationToken);
|
await OnConsoleQueryRequestAsync(sender, consoleQueryRequest, cancellationToken);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private async ValueTask OnConsoleQueryRequestAsync(AgentSession sender, ConsoleQueryRequest consoleQueryRequest, CancellationToken cancellationToken)
|
private async ValueTask OnConsoleQueryRequestAsync(AgentSession sender, Proxy<ConsoleQueryRequest> consoleQueryRequest, CancellationToken cancellationToken)
|
||||||
{
|
{
|
||||||
var result = await QueryScriptAsync(consoleQueryRequest.Query);
|
var result = await QueryScriptAsync(consoleQueryRequest.Message.Query);
|
||||||
|
|
||||||
await sender.SendAsync(new ConsoleQuery
|
await sender.SendAsync(new Proxy<ConsoleQuery>
|
||||||
{
|
{
|
||||||
Id = consoleQueryRequest.Id,
|
RequestId = consoleQueryRequest.RequestId,
|
||||||
HostId = consoleQueryRequest.HostId,
|
HostId = consoleQueryRequest.HostId,
|
||||||
Query = consoleQueryRequest.Query,
|
Message = new ConsoleQuery
|
||||||
|
{
|
||||||
Data = result.Data,
|
Data = result.Data,
|
||||||
Errors = result.Errors,
|
Errors = result.Errors,
|
||||||
HadErrors = result.HadErrors
|
HadErrors = result.HadErrors
|
||||||
|
}
|
||||||
}, cancellationToken);
|
}, cancellationToken);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,27 +6,12 @@ namespace Insight.Domain.Messages.Agent;
|
||||||
public partial class ConsoleQuery : IMessage
|
public partial class ConsoleQuery : IMessage
|
||||||
{
|
{
|
||||||
[MemoryPackOrder(0)]
|
[MemoryPackOrder(0)]
|
||||||
public string? Id { get; set; }
|
|
||||||
|
|
||||||
[MemoryPackOrder(1)]
|
|
||||||
public string? HostId { get; set; }
|
|
||||||
|
|
||||||
[MemoryPackOrder(2)]
|
|
||||||
public string? Query { get; set; }
|
|
||||||
|
|
||||||
[MemoryPackOrder(3)]
|
|
||||||
public string? Data { get; set; }
|
public string? Data { get; set; }
|
||||||
|
|
||||||
[MemoryPackOrder(4)]
|
[MemoryPackOrder(1)]
|
||||||
public string? Errors { get; set; }
|
public string? Errors { get; set; }
|
||||||
|
|
||||||
[MemoryPackOrder(5)]
|
[MemoryPackOrder(2)]
|
||||||
public bool IsString { get; set; }
|
|
||||||
|
|
||||||
[MemoryPackOrder(6)]
|
|
||||||
public bool IsArray { get; set; }
|
|
||||||
|
|
||||||
[MemoryPackOrder(7)]
|
|
||||||
public bool HadErrors { get; set; }
|
public bool HadErrors { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -34,11 +19,5 @@ public partial class ConsoleQuery : IMessage
|
||||||
public partial class ConsoleQueryRequest : IMessage
|
public partial class ConsoleQueryRequest : IMessage
|
||||||
{
|
{
|
||||||
[MemoryPackOrder(0)]
|
[MemoryPackOrder(0)]
|
||||||
public string? Id { get; set; }
|
|
||||||
|
|
||||||
[MemoryPackOrder(1)]
|
|
||||||
public string? HostId { get; set; }
|
|
||||||
|
|
||||||
[MemoryPackOrder(2)]
|
|
||||||
public string? Query { get; set; }
|
public string? Query { get; set; }
|
||||||
}
|
}
|
||||||
|
|
@ -4,11 +4,9 @@ namespace Insight.Domain.Messages;
|
||||||
|
|
||||||
[MemoryPackable]
|
[MemoryPackable]
|
||||||
[MemoryPackUnion(0, typeof(Keepalive))]
|
[MemoryPackUnion(0, typeof(Keepalive))]
|
||||||
[MemoryPackUnion(1, typeof(Agent.Authentication))]
|
[MemoryPackUnion(1, typeof(Agent.AuthenticationRequest))]
|
||||||
[MemoryPackUnion(2, typeof(Agent.AuthenticationRequest))]
|
[MemoryPackUnion(2, typeof(Agent.Authentication))]
|
||||||
[MemoryPackUnion(10, typeof(Agent.InventoryRequest))]
|
[MemoryPackUnion(10, typeof(Agent.InventoryRequest))]
|
||||||
[MemoryPackUnion(20, typeof(Agent.ConsoleQuery))]
|
|
||||||
[MemoryPackUnion(21, typeof(Agent.ConsoleQueryRequest))]
|
|
||||||
[MemoryPackUnion(100, typeof(Agent.Application))]
|
[MemoryPackUnion(100, typeof(Agent.Application))]
|
||||||
[MemoryPackUnion(101, typeof(Agent.ApplicationList))]
|
[MemoryPackUnion(101, typeof(Agent.ApplicationList))]
|
||||||
[MemoryPackUnion(102, typeof(Agent.Drive))]
|
[MemoryPackUnion(102, typeof(Agent.Drive))]
|
||||||
|
|
@ -41,6 +39,8 @@ namespace Insight.Domain.Messages;
|
||||||
[MemoryPackUnion(129, typeof(Agent.VideocardList))]
|
[MemoryPackUnion(129, typeof(Agent.VideocardList))]
|
||||||
[MemoryPackUnion(130, typeof(Agent.VirtualMaschine))]
|
[MemoryPackUnion(130, typeof(Agent.VirtualMaschine))]
|
||||||
[MemoryPackUnion(131, typeof(Agent.VirtualMaschineList))]
|
[MemoryPackUnion(131, typeof(Agent.VirtualMaschineList))]
|
||||||
[MemoryPackUnion(400, typeof(Web.ConsoleQueryProxy))]
|
[MemoryPackUnion(132, typeof(Agent.ConsoleQuery))]
|
||||||
[MemoryPackUnion(401, typeof(Web.ConsoleQueryProxyRequest))]
|
[MemoryPackUnion(133, typeof(Agent.ConsoleQueryRequest))]
|
||||||
|
[MemoryPackUnion(1000, typeof(Proxy<Agent.ConsoleQuery>))]
|
||||||
|
[MemoryPackUnion(1001, typeof(Proxy<Agent.ConsoleQueryRequest>))]
|
||||||
public partial interface IMessage { }
|
public partial interface IMessage { }
|
||||||
17
src/Core/Insight.Domain/Messages/Proxy.cs
Normal file
17
src/Core/Insight.Domain/Messages/Proxy.cs
Normal file
|
|
@ -0,0 +1,17 @@
|
||||||
|
using MemoryPack;
|
||||||
|
|
||||||
|
namespace Insight.Domain.Messages;
|
||||||
|
|
||||||
|
[MemoryPackable]
|
||||||
|
public partial class Proxy<TMessage> : IMessage
|
||||||
|
where TMessage : IMessage
|
||||||
|
{
|
||||||
|
[MemoryPackOrder(0)]
|
||||||
|
public string? RequestId { get; set; }
|
||||||
|
|
||||||
|
[MemoryPackOrder(1)]
|
||||||
|
public string? HostId { get; set; }
|
||||||
|
|
||||||
|
[MemoryPackOrder(2)]
|
||||||
|
public TMessage? Message { get; set; }
|
||||||
|
}
|
||||||
|
|
@ -1,38 +0,0 @@
|
||||||
using MemoryPack;
|
|
||||||
|
|
||||||
namespace Insight.Domain.Messages.Web;
|
|
||||||
|
|
||||||
[MemoryPackable]
|
|
||||||
public partial class ConsoleQueryProxy : IMessage
|
|
||||||
{
|
|
||||||
[MemoryPackOrder(0)]
|
|
||||||
public string? Id { get; set; }
|
|
||||||
|
|
||||||
[MemoryPackOrder(1)]
|
|
||||||
public string? HostId { get; set; }
|
|
||||||
|
|
||||||
[MemoryPackOrder(2)]
|
|
||||||
public string? Query { get; set; }
|
|
||||||
|
|
||||||
[MemoryPackOrder(3)]
|
|
||||||
public string? Data { get; set; }
|
|
||||||
|
|
||||||
[MemoryPackOrder(4)]
|
|
||||||
public string? Errors { get; set; }
|
|
||||||
|
|
||||||
[MemoryPackOrder(7)]
|
|
||||||
public bool HadErrors { get; set; }
|
|
||||||
}
|
|
||||||
|
|
||||||
[MemoryPackable]
|
|
||||||
public partial class ConsoleQueryProxyRequest : IMessage
|
|
||||||
{
|
|
||||||
[MemoryPackOrder(0)]
|
|
||||||
public string? Id { get; set; }
|
|
||||||
|
|
||||||
[MemoryPackOrder(1)]
|
|
||||||
public string? HostId { get; set; }
|
|
||||||
|
|
||||||
[MemoryPackOrder(2)]
|
|
||||||
public string? Query { get; set; }
|
|
||||||
}
|
|
||||||
|
|
@ -1,7 +1,6 @@
|
||||||
using Insight.Domain.Interfaces;
|
using Insight.Domain.Interfaces;
|
||||||
using Insight.Domain.Messages;
|
using Insight.Domain.Messages;
|
||||||
using Insight.Domain.Messages.Agent;
|
using Insight.Domain.Messages.Agent;
|
||||||
using Insight.Domain.Messages.Web;
|
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
using MongoDB.Driver;
|
using MongoDB.Driver;
|
||||||
using Vaitr.Network;
|
using Vaitr.Network;
|
||||||
|
|
@ -26,25 +25,17 @@ public class ConsoleHandler : IMessageHandler<AgentSession>
|
||||||
|
|
||||||
public async ValueTask HandleAsync<TMessage>(AgentSession sender, TMessage message, CancellationToken cancellationToken) where TMessage : IMessage
|
public async ValueTask HandleAsync<TMessage>(AgentSession sender, TMessage message, CancellationToken cancellationToken) where TMessage : IMessage
|
||||||
{
|
{
|
||||||
if (message is ConsoleQuery consoleQuery)
|
if (message is Proxy<ConsoleQuery> consoleResponse)
|
||||||
{
|
{
|
||||||
await OnConsoleQueryAsync(sender, consoleQuery, cancellationToken);
|
await OnConsoleQueryAsync(sender, consoleResponse, cancellationToken);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private async ValueTask OnConsoleQueryAsync(AgentSession session, ConsoleQuery query, CancellationToken cancellationToken)
|
private async ValueTask OnConsoleQueryAsync(AgentSession session, Proxy<ConsoleQuery> consoleResponse, CancellationToken cancellationToken)
|
||||||
{
|
{
|
||||||
// check if web online
|
// check if web online
|
||||||
if (_webPool.FirstOrDefault().Value is not WebSession web) return;
|
if (_webPool.FirstOrDefault().Value is not WebSession web) return;
|
||||||
|
|
||||||
await web.SendAsync(new ConsoleQueryProxy
|
await web.SendAsync(consoleResponse, cancellationToken);
|
||||||
{
|
|
||||||
Id = query.Id,
|
|
||||||
HostId = query.HostId,
|
|
||||||
Query = query.Query,
|
|
||||||
Data = query.Data,
|
|
||||||
Errors = query.Errors,
|
|
||||||
HadErrors = query.HadErrors
|
|
||||||
}, cancellationToken);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1,7 +1,6 @@
|
||||||
using Insight.Domain.Interfaces;
|
using Insight.Domain.Interfaces;
|
||||||
using Insight.Domain.Messages;
|
using Insight.Domain.Messages;
|
||||||
using Insight.Domain.Messages.Agent;
|
using Insight.Domain.Messages.Agent;
|
||||||
using Insight.Domain.Messages.Web;
|
|
||||||
using Insight.Infrastructure;
|
using Insight.Infrastructure;
|
||||||
using Insight.Infrastructure.Entities;
|
using Insight.Infrastructure.Entities;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
|
|
@ -33,19 +32,18 @@ public class ConsoleProxyHandler : IMessageHandler<WebSession>
|
||||||
_database = database;
|
_database = database;
|
||||||
_bus = bus;
|
_bus = bus;
|
||||||
_logger = logger;
|
_logger = logger;
|
||||||
|
|
||||||
_subscriptions.Add(_bus.SubscribeAsync<ConsoleQuery>(OnConsoleQueryAsync, null));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public async ValueTask HandleAsync<TMessage>(WebSession sender, TMessage message, CancellationToken cancellationToken) where TMessage : IMessage
|
public async ValueTask HandleAsync<TMessage>(WebSession sender, TMessage message, CancellationToken cancellationToken) where TMessage : IMessage
|
||||||
{
|
{
|
||||||
if (message is ConsoleQueryProxyRequest consoleRequest)
|
if (message is Proxy<ConsoleQueryRequest> consoleRequest)
|
||||||
{
|
{
|
||||||
|
_logger.LogCritical("received: {0}" + consoleRequest.Message);
|
||||||
await OnConsoleQueryRequestAsync(sender, consoleRequest, cancellationToken);
|
await OnConsoleQueryRequestAsync(sender, consoleRequest, cancellationToken);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private async ValueTask OnConsoleQueryRequestAsync(WebSession session, ConsoleQueryProxyRequest request, CancellationToken cancellationToken)
|
private async ValueTask OnConsoleQueryRequestAsync(WebSession session, Proxy<ConsoleQueryRequest> request, CancellationToken cancellationToken)
|
||||||
{
|
{
|
||||||
// get host
|
// get host
|
||||||
var hostEntity = await _database.Host()
|
var hostEntity = await _database.Host()
|
||||||
|
|
@ -76,28 +74,7 @@ public class ConsoleProxyHandler : IMessageHandler<WebSession>
|
||||||
// check if agent online
|
// check if agent online
|
||||||
if (_agentPool.FirstOrDefault(p => p.Value.Id == agentEntity.Id).Value is not AgentSession agent) return;
|
if (_agentPool.FirstOrDefault(p => p.Value.Id == agentEntity.Id).Value is not AgentSession agent) return;
|
||||||
|
|
||||||
// send "real" packet to agent
|
// proxy-send request packet to agent
|
||||||
await agent.SendAsync(new ConsoleQueryRequest
|
await agent.SendAsync(request, cancellationToken);
|
||||||
{
|
|
||||||
Id = request.Id,
|
|
||||||
HostId = request.HostId,
|
|
||||||
Query = request.Query
|
|
||||||
}, cancellationToken);
|
|
||||||
}
|
|
||||||
|
|
||||||
private async ValueTask OnConsoleQueryAsync(ConsoleQuery query, CancellationToken cancellationToken)
|
|
||||||
{
|
|
||||||
// check if web online
|
|
||||||
if (_webPool.FirstOrDefault().Value is not WebSession web) return;
|
|
||||||
|
|
||||||
await web.SendAsync(new ConsoleQueryProxy
|
|
||||||
{
|
|
||||||
Id = query.Id,
|
|
||||||
HostId = query.HostId,
|
|
||||||
Query = query.Query,
|
|
||||||
Data = query.Data,
|
|
||||||
Errors = query.Errors,
|
|
||||||
HadErrors = query.HadErrors
|
|
||||||
}, cancellationToken);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
using Insight.Domain.Interfaces;
|
using Insight.Domain.Interfaces;
|
||||||
using Insight.Domain.Messages;
|
using Insight.Domain.Messages;
|
||||||
using Insight.Domain.Messages.Web;
|
using Insight.Domain.Messages.Agent;
|
||||||
using Vaitr.Bus;
|
using Vaitr.Bus;
|
||||||
|
|
||||||
namespace Insight.Web.Network.Handlers;
|
namespace Insight.Web.Network.Handlers;
|
||||||
|
|
@ -16,7 +16,7 @@ public class ConsoleHandler : IMessageHandler<WebSession>
|
||||||
|
|
||||||
public async ValueTask HandleAsync<TMessage>(WebSession sender, TMessage message, CancellationToken cancellationToken) where TMessage : IMessage
|
public async ValueTask HandleAsync<TMessage>(WebSession sender, TMessage message, CancellationToken cancellationToken) where TMessage : IMessage
|
||||||
{
|
{
|
||||||
if (message is ConsoleQueryProxy consoleQuery)
|
if (message is Proxy<ConsoleQuery> consoleQuery)
|
||||||
{
|
{
|
||||||
await _bus.PublishAsync(consoleQuery, cancellationToken);
|
await _bus.PublishAsync(consoleQuery, cancellationToken);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -6,17 +6,17 @@
|
||||||
{
|
{
|
||||||
<MudGrid>
|
<MudGrid>
|
||||||
<MudItem xs="12" sm="12" md="12" lg="12">
|
<MudItem xs="12" sm="12" md="12" lg="12">
|
||||||
<MudTextField T="string" Label="Query" Variant="Variant.Outlined" @bind-Text="_model.ConsoleQuery.Query" Lines="20" />
|
<MudTextField T="string" Label="Query" Variant="Variant.Outlined" @bind-Text="_model.Request.Query" Lines="20" />
|
||||||
</MudItem>
|
</MudItem>
|
||||||
|
|
||||||
<MudItem xs="12" sm="12" md="12" lg="12">
|
<MudItem xs="12" sm="12" md="12" lg="12">
|
||||||
@if (_model.ConsoleQuery.HadErrors is false)
|
@if (_model.Response.HadErrors is false)
|
||||||
{
|
{
|
||||||
<MudTextField T="string" Label="Data" Variant="Variant.Outlined" @bind-Text="_model.ConsoleQuery.Data" Lines="20" />
|
<MudTextField T="string" Label="Data" Variant="Variant.Outlined" @bind-Text="_model.Response.Data" Lines="20" />
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
<MudTextField T="string" Label="Errors" Variant="Variant.Outlined" @bind-Text="_model.ConsoleQuery.Errors" Lines="20" />
|
<MudTextField T="string" Label="Errors" Variant="Variant.Outlined" @bind-Text="_model.Response.Errors" Lines="20" />
|
||||||
}
|
}
|
||||||
</MudItem>
|
</MudItem>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
using Insight.Domain.Messages;
|
using Insight.Domain.Messages;
|
||||||
using Insight.Domain.Messages.Web;
|
using Insight.Domain.Messages.Agent;
|
||||||
using Insight.Infrastructure;
|
using Insight.Infrastructure;
|
||||||
using Insight.Infrastructure.Entities;
|
using Insight.Infrastructure.Entities;
|
||||||
using Insight.Web.Constants;
|
using Insight.Web.Constants;
|
||||||
|
|
@ -33,7 +33,7 @@ public partial class Index
|
||||||
|
|
||||||
protected override async Task OnInitializedAsync()
|
protected override async Task OnInitializedAsync()
|
||||||
{
|
{
|
||||||
_subscriptions.Add(Bus.SubscribeAsync<ConsoleQueryProxy>(OnQueryResultAsync, p => p.Id == _id));
|
_subscriptions.Add(Bus.SubscribeAsync<Proxy<ConsoleQuery>>(OnQueryResultAsync, p => p.RequestId == _id));
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task LoadDataAsync()
|
private async Task LoadDataAsync()
|
||||||
|
|
@ -75,15 +75,15 @@ public partial class Index
|
||||||
|
|
||||||
private async Task SubmitAsync()
|
private async Task SubmitAsync()
|
||||||
{
|
{
|
||||||
if (_model.ConsoleQuery.Query is null || WebPool.Any() is false) return;
|
if (_model.Request.Query is null || WebPool.Any() is false) return;
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
await WebPool.First().Value.SendAsync(new ConsoleQueryProxyRequest
|
await WebPool.First().Value.SendAsync(new Proxy<ConsoleQueryRequest>
|
||||||
{
|
{
|
||||||
Id = _id,
|
RequestId = _id,
|
||||||
HostId = HostId,
|
HostId = HostId,
|
||||||
Query = _model.ConsoleQuery.Query
|
Message = _model.Request
|
||||||
}, default);
|
}, default);
|
||||||
|
|
||||||
Notification.Information(Snackbar, "Sent Query Command");
|
Notification.Information(Snackbar, "Sent Query Command");
|
||||||
|
|
@ -94,17 +94,18 @@ public partial class Index
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private async ValueTask OnQueryResultAsync(ConsoleQueryProxy query, CancellationToken cancellationToken)
|
private async ValueTask OnQueryResultAsync(Proxy<ConsoleQuery> proxy, CancellationToken cancellationToken)
|
||||||
{
|
{
|
||||||
_model.ConsoleQuery.HadErrors = query.HadErrors;
|
_model.Response.HadErrors = proxy.Message.HadErrors;
|
||||||
_model.ConsoleQuery.Data = query.Data;
|
_model.Response.Data = proxy.Message?.Data;
|
||||||
_model.ConsoleQuery.Errors = query.Errors;
|
_model.Response.Errors = proxy.Message?.Errors;
|
||||||
|
|
||||||
await InvokeAsync(StateHasChanged);
|
await InvokeAsync(StateHasChanged);
|
||||||
}
|
}
|
||||||
|
|
||||||
private class IndexViewModel
|
private class IndexViewModel
|
||||||
{
|
{
|
||||||
public readonly ConsoleQueryProxy ConsoleQuery = new();
|
public readonly ConsoleQueryRequest Request = new();
|
||||||
|
public readonly ConsoleQuery Response = new();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue