From f3478270fbb98cc0e60f99868a95a80be8930170 Mon Sep 17 00:00:00 2001 From: Khwezi Mngoma Date: Sat, 13 Jun 2026 13:13:01 +0200 Subject: [PATCH 1/2] Added logging to endpoint --- .../Payments/Payfast/PayfastConfirmationEndpoint.cs | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/MidrandBooksApi/Payments/Payfast/PayfastConfirmationEndpoint.cs b/MidrandBooksApi/Payments/Payfast/PayfastConfirmationEndpoint.cs index 65ed3c2..18cbf5c 100644 --- a/MidrandBooksApi/Payments/Payfast/PayfastConfirmationEndpoint.cs +++ b/MidrandBooksApi/Payments/Payfast/PayfastConfirmationEndpoint.cs @@ -16,7 +16,8 @@ public sealed class PayfastConfirmationEndpoint : IEndpoint public void Map(IEndpointRouteBuilder builder) { builder.MapPost("payments/payfast/confirm", async (HttpRequest request, PayfastService payfastService, - IJobOrchestrator jobOrchestrator, IConfiguration configuration, IHostEnvironment hostEnvironment, CancellationToken cancellationToken) => + IJobOrchestrator jobOrchestrator, IConfiguration configuration, IHostEnvironment hostEnvironment, + ILogger logger, CancellationToken cancellationToken) => { using Activity? activity = PaymentActivitySource.StartActivity("ReceivePayfastWebhook", ActivityKind.Server); @@ -39,7 +40,11 @@ public sealed class PayfastConfirmationEndpoint : IEndpoint var signatureCheck = PayfastService.GenerateSignature(paramDictionary, passphrase); if (signatureCheck.IsFailed || !string.Equals(signatureCheck.Value, incomingSignature, StringComparison.OrdinalIgnoreCase)) + { + logger.LogCritical("Incoming sugnature failed validation: {signature}, {errors}", incomingSignature, signatureCheck.Errors.Select(e => e.Message).ToList()); + return Results.Unauthorized(); + } var formPairs = formCollection.Select(kvp => $"{kvp.Key}={HttpUtility.UrlEncode(kvp.Value.ToString())}"); @@ -50,7 +55,11 @@ public sealed class PayfastConfirmationEndpoint : IEndpoint var serverConfirmation = await payfastService.ValidateServerConfirmationAsync(rawQueryParamString, isSandbox, cancellationToken); if (serverConfirmation.IsFailed || !serverConfirmation.Value) + { + logger.LogCritical("Server confirmation failed: {rawstring}, {errors}", rawQueryParamString, serverConfirmation.Errors.Select(e => e.Message).ToList()); + return Results.Unauthorized(); + } var notification = PayfastPaymentConfirmationReceivedEvent.Create(payload, payload.MerchantPaymentId!, allowLoopback: !hostEnvironment.IsProduction(), performBackgroundChecks: false); From 60579c62300f77887dd99bdd1fccc08bb3e477c7 Mon Sep 17 00:00:00 2001 From: Khwezi Mngoma Date: Sat, 13 Jun 2026 13:14:27 +0200 Subject: [PATCH 2/2] Slowed down health check stream --- midrandbooksapi-uat.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/midrandbooksapi-uat.yml b/midrandbooksapi-uat.yml index f56f389..dfdb1be 100644 --- a/midrandbooksapi-uat.yml +++ b/midrandbooksapi-uat.yml @@ -161,8 +161,8 @@ spec: httpGet: path: /health port: 8080 - initialDelaySeconds: 5 - periodSeconds: 10 + initialDelaySeconds: 10 + periodSeconds: 15 readinessProbe: httpGet: path: /health