fix: normalize malformed pairing requests
This commit is contained in:
parent
4e4c90e675
commit
061c3baab3
@ -1,3 +1,4 @@
|
||||
using System.Text.Json;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using TermRemoteCtl.Agent.Security;
|
||||
|
||||
@ -26,12 +27,13 @@ public static class PairingEndpoints
|
||||
});
|
||||
|
||||
group.MapPost("/redeem", async (
|
||||
[FromBody] RedeemPairingRequest? request,
|
||||
HttpRequest httpRequest,
|
||||
PairingService pairingService,
|
||||
AuditLog auditLog,
|
||||
IClock clock,
|
||||
CancellationToken cancellationToken) =>
|
||||
{
|
||||
var request = await ReadRedeemRequestAsync(httpRequest, cancellationToken);
|
||||
var validationError = ValidateRedeemRequest(request);
|
||||
if (validationError is not null)
|
||||
{
|
||||
@ -56,6 +58,24 @@ public static class PairingEndpoints
|
||||
return endpoints;
|
||||
}
|
||||
|
||||
private static async Task<RedeemPairingRequest?> ReadRedeemRequestAsync(
|
||||
HttpRequest httpRequest,
|
||||
CancellationToken cancellationToken)
|
||||
{
|
||||
try
|
||||
{
|
||||
return await httpRequest.ReadFromJsonAsync<RedeemPairingRequest>(cancellationToken);
|
||||
}
|
||||
catch (JsonException)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
catch (BadHttpRequestException)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
private static RedeemPairingResponse? ValidateRedeemRequest(RedeemPairingRequest? request)
|
||||
{
|
||||
if (request is null)
|
||||
|
||||
@ -43,8 +43,13 @@ public sealed class PairingEndpointsTests
|
||||
using var content = new StringContent("{\"code\":", Encoding.UTF8, "application/json");
|
||||
|
||||
using var response = await client.PostAsync("/api/pairing/redeem", content);
|
||||
var payload = await response.Content.ReadFromJsonAsync<RedeemResponse>();
|
||||
|
||||
Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);
|
||||
Assert.NotNull(payload);
|
||||
Assert.False(payload.Success);
|
||||
Assert.Equal("invalid_request", payload.ErrorCode);
|
||||
Assert.Equal("rejected", payload.Status);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
||||
Loading…
Reference in New Issue
Block a user