Skip to content

Commit dbf5d16

Browse files
committed
Add an additional check for commands that have no input/parameters.
1 parent e888d6f commit dbf5d16

File tree

18 files changed

+92
-26
lines changed

18 files changed

+92
-26
lines changed

ControlR.Agent/Services/AgentHubConnection.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,9 @@ public Task<Result<AgentAppSettings>> GetAgentAppSettings(SignedPayloadDto signe
121121
return Result.Fail<AgentAppSettings>("Signature verification failed.").AsTaskResult();
122122
}
123123

124+
var payload = signedDto.GetPayload<GetAgentAppSettingsDto>();
125+
payload.VerifyType(DtoType.GetAgentAppSettings);
126+
124127
var agentOptions = _appOptions.CurrentValue;
125128
var settings = new AgentAppSettings()
126129
{
@@ -142,6 +145,9 @@ public Task<WindowsSession[]> GetWindowsSessions(SignedPayloadDto signedDto)
142145
return Array.Empty<WindowsSession>().AsTaskResult();
143146
}
144147

148+
var payload = signedDto.GetPayload<GetWindowsSessionsDto>();
149+
payload.VerifyType(DtoType.GetWindowsSessions);
150+
145151
if (_environmentHelper.Platform != SystemPlatform.Windows)
146152
{
147153
return Array.Empty<WindowsSession>().AsTaskResult();

ControlR.Agent/Services/DtoHandler.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,14 +89,20 @@ private async Task HandleSignedDtoReceivedMessage(object subscriber, SignedDtoRe
8989

9090
case DtoType.InvokeCtrlAltDel:
9191
{
92+
var payload = wrapper.GetPayload<InvokeCtrlAltDelRequestDto>();
93+
payload.VerifyType(DtoType.InvokeCtrlAltDel);
94+
9295
if (OperatingSystem.IsWindowsVersionAtLeast(6, 1))
9396
{
9497
_win32Interop.InvokeCtrlAltDel();
9598
}
9699
break;
97100
}
98-
case DtoType.AgentUpdateTrigger:
101+
case DtoType.TriggerAgentUpdate:
99102
{
103+
var payload = wrapper.GetPayload<TriggerAgentUpdateDto>();
104+
payload.VerifyType(DtoType.TriggerAgentUpdate);
105+
100106
await _agentUpdater.CheckForUpdate();
101107
break;
102108
}

ControlR.Server/Hubs/ViewerHub.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ public Task<bool> CheckIfServerAdministrator()
2828
return IsServerAdmin().AsTaskResult();
2929
}
3030

31-
public async Task<Result> ClearAlert(SignedPayloadDto signedDto)
31+
public async Task<Result> ClearAlert()
3232
{
3333
using var scope = _logger.BeginMemberScope();
3434

ControlR.Streamer/Services/DtoHandler.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,8 @@ private async Task HandleSignedDtoReceivedMessage(object subscriber, SignedDtoRe
5454
{
5555
case DtoType.CloseStreamingSession:
5656
{
57+
var payload = wrapper.GetPayload<CloseStreamingSessionRequestDto>();
58+
payload.VerifyType(DtoType.CloseStreamingSession);
5759
_logger.LogInformation("Received request to close streaming session.");
5860
_appLifetime.StopApplication();
5961
break;
@@ -79,6 +81,8 @@ private async Task HandleSignedDtoReceivedMessage(object subscriber, SignedDtoRe
7981
}
8082
case DtoType.ResetKeyboardState:
8183
{
84+
var payload = wrapper.GetPayload<ResetKeyboardStateDto>();
85+
payload.VerifyType(DtoType.ResetKeyboardState);
8286
_inputSimulator.ResetKeyboardState();
8387
break;
8488
}

ControlR.Viewer/Components/RemoteDisplays/RemoteDisplay.razor.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
using ControlR.Libraries.Shared.Dtos.StreamerDtos;
22
using ControlR.Libraries.Shared.Services.Buffers;
3-
using ControlR.Viewer.Enums;
43
using ControlR.Viewer.Services;
54
using Microsoft.AspNetCore.Components;
65
using Microsoft.AspNetCore.Components.Web;
@@ -505,7 +504,7 @@ private async Task RequestStreamingSessionFromAgent()
505504

506505
var websocketUri = bridgeOrigin is not null ?
507506
new Uri(bridgeOrigin, $"/bridge/{Session.SessionId}") :
508-
new Uri($"{Settings.ServerUri}/bridge/{Session.SessionId}").ToWebsocketUri();
507+
new Uri(Settings.ServerUri, $"/bridge/{Session.SessionId}").ToWebsocketUri();
509508

510509
Logger.LogInformation("Resolved WS bridge origin: {BridgeOrigin}", websocketUri.Authority);
511510

ControlR.Viewer/Services/ViewerHubConnection.cs

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -76,8 +76,7 @@ await TryInvoke(
7676
async () =>
7777
{
7878
await WaitForConnection();
79-
var signedDto = _keyProvider.CreateRandomSignedDto(DtoType.ClearAlerts, _appState.PrivateKey);
80-
await Connection.InvokeAsync<Result>(nameof(IViewerHub.ClearAlert), signedDto);
79+
await Connection.InvokeAsync<Result>(nameof(IViewerHub.ClearAlert));
8180
});
8281
}
8382

@@ -86,7 +85,10 @@ public async Task CloseStreamingSession(string streamerConnectionId)
8685
await TryInvoke(
8786
async () =>
8887
{
89-
var signedDto = _keyProvider.CreateRandomSignedDto(DtoType.CloseStreamingSession, _appState.PrivateKey);
88+
await WaitForConnection();
89+
var dto = new CloseStreamingSessionRequestDto();
90+
var signedDto = _keyProvider.CreateSignedDto(dto, DtoType.CloseStreamingSession, _appState.PrivateKey);
91+
9092
await Connection.InvokeAsync(nameof(IViewerHub.SendSignedDtoToStreamer), streamerConnectionId, signedDto);
9193
});
9294
}
@@ -120,8 +122,8 @@ public async Task<Result<AgentAppSettings>> GetAgentAppSettings(string agentConn
120122
return await TryInvoke(
121123
async () =>
122124
{
123-
var request = _keyProvider.CreateRandomSignedDto(DtoType.GetAgentAppSettings, _appState.PrivateKey);
124-
var signedDto = _keyProvider.CreateSignedDto(request, DtoType.TerminalSessionRequest, _appState.PrivateKey);
125+
var dto = new GetAgentAppSettingsDto();
126+
var signedDto = _keyProvider.CreateSignedDto(dto, DtoType.GetAgentAppSettings, _appState.PrivateKey);
125127
return await Connection.InvokeAsync<Result<AgentAppSettings>>(nameof(IViewerHub.GetAgentAppSettings), agentConnectionId, signedDto);
126128
},
127129
() => Result.Fail<AgentAppSettings>("Failed to get agent settings"));
@@ -177,7 +179,8 @@ public async Task<Result<WindowsSession[]>> GetWindowsSessions(DeviceDto device)
177179
{
178180
try
179181
{
180-
var signedDto = _keyProvider.CreateRandomSignedDto(DtoType.WindowsSessions, _appState.PrivateKey);
182+
var dto = new GetWindowsSessionsDto();
183+
var signedDto = _keyProvider.CreateSignedDto(dto, DtoType.GetWindowsSessions, _appState.PrivateKey);
181184
var sessions = await Connection.InvokeAsync<WindowsSession[]>(nameof(IViewerHub.GetWindowsSessions), device.ConnectionId, signedDto);
182185
return Result.Ok(sessions);
183186
}
@@ -192,7 +195,8 @@ public async Task InvokeCtrlAltDel(string deviceId)
192195
{
193196
await TryInvoke(async () =>
194197
{
195-
var signedDto = _keyProvider.CreateRandomSignedDto(DtoType.InvokeCtrlAltDel, _appState.PrivateKey);
198+
var dto = new InvokeCtrlAltDelRequestDto();
199+
var signedDto = _keyProvider.CreateSignedDto(dto, DtoType.InvokeCtrlAltDel, _appState.PrivateKey);
196200
await Connection.InvokeAsync(nameof(IViewerHub.SendSignedDtoToAgent), deviceId, signedDto);
197201
});
198202
}
@@ -328,7 +332,8 @@ public async Task SendAgentUpdateTrigger(DeviceDto device)
328332
{
329333
await TryInvoke(async () =>
330334
{
331-
var signedDto = _keyProvider.CreateRandomSignedDto(DtoType.AgentUpdateTrigger, _appState.PrivateKey);
335+
var dto = new TriggerAgentUpdateDto();
336+
var signedDto = _keyProvider.CreateSignedDto(dto, DtoType.TriggerAgentUpdate, _appState.PrivateKey);
332337
await Connection.InvokeAsync(nameof(IViewerHub.SendSignedDtoToAgent), device.Id, signedDto);
333338
});
334339
}
@@ -375,7 +380,8 @@ await TryInvoke(
375380
async () =>
376381
{
377382
await WaitForConnection();
378-
var signedDto = _keyProvider.CreateRandomSignedDto(DtoType.ResetKeyboardState, _appState.PrivateKey);
383+
var dto = new ResetKeyboardStateDto();
384+
var signedDto = _keyProvider.CreateSignedDto(dto, DtoType.ResetKeyboardState, _appState.PrivateKey);
379385
await Connection.InvokeAsync(nameof(IViewerHub.SendSignedDtoToStreamer), streamerConnectionId, signedDto);
380386
});
381387
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
namespace ControlR.Libraries.Shared.Dtos;
2+
3+
[MessagePackObject]
4+
public record CloseStreamingSessionRequestDto() : ParameterlessDtoBase(DtoType.CloseStreamingSession);
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
namespace ControlR.Libraries.Shared.Dtos;
22

33
[MessagePackObject]
4-
public record CloseTerminalRequestDto([property: MsgPackKey] Guid TerminalId);
4+
public record CloseTerminalRequestDto([property: MsgPackKey] Guid TerminalId) : ParameterlessDtoBase(DtoType.CloseTerminalRequest);

Libraries/ControlR.Libraries.Shared/Dtos/DtoType.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ public enum DtoType
55
None = 0,
66
IdentityAttestation = 1,
77
StreamingSessionRequest = 2,
8-
WindowsSessions = 3,
8+
GetWindowsSessions = 3,
99
DeviceUpdateRequest = 4,
1010
TerminalSessionRequest = 5,
1111
CloseTerminalRequest = 7,
@@ -22,7 +22,7 @@ public enum DtoType
2222
CloseStreamingSession = 19,
2323
InvokeCtrlAltDel = 20,
2424
ClipboardChanged = 21,
25-
AgentUpdateTrigger = 22,
25+
TriggerAgentUpdate = 22,
2626
StreamerInitData = 23,
2727
DesktopChanged = 24,
2828
DesktopRequest = 25,
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
namespace ControlR.Libraries.Shared.Dtos;
2+
3+
[MessagePackObject]
4+
public record GetAgentAppSettingsDto() : ParameterlessDtoBase(DtoType.GetAgentAppSettings);

0 commit comments

Comments
 (0)