From 1d4a4268f555ce1cb787a7ac3405cdaf17519157 Mon Sep 17 00:00:00 2001 From: Simon Date: Wed, 27 Nov 2019 13:11:09 +0000 Subject: [PATCH] Challenge response null guard (#20) * Added null guard in response to issue #18 * Removed .gitattributes * Renamed variables to avoid confusion --- .../LetsEncryptRenewalService.cs | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/FluffySpoon.AspNet.LetsEncrypt/LetsEncryptRenewalService.cs b/src/FluffySpoon.AspNet.LetsEncrypt/LetsEncryptRenewalService.cs index 866fc3a..3d0460f 100644 --- a/src/FluffySpoon.AspNet.LetsEncrypt/LetsEncryptRenewalService.cs +++ b/src/FluffySpoon.AspNet.LetsEncrypt/LetsEncryptRenewalService.cs @@ -263,14 +263,19 @@ private async Task ValidateOrderAsync(string[] domains, IOrderContext order) try { - var challenges = await ValidateChallengesAsync(nonNullChallengeContexts); + var challengeValidationResponses = await ValidateChallengesAsync(nonNullChallengeContexts); + var nonNullChallengeValidationResponses = challengeValidationResponses.Where(x => x != null).ToArray(); + if (challengeValidationResponses.Length > nonNullChallengeValidationResponses.Length) + _logger.LogWarning("Some challenge responses were null."); + await _persistenceService.DeleteChallengesAsync(challengeDtos); - var challengeExceptions = challenges + var challengeExceptions = nonNullChallengeValidationResponses .Where(x => x.Status == ChallengeStatus.Invalid) .Select(x => new Exception($"{x.Error.Type}: {x.Error.Detail} (challenge type {x.Type})")) .ToArray(); + if (challengeExceptions.Length > 0) throw new OrderInvalidException( "One or more LetsEncrypt orders were invalid. Make sure that LetsEncrypt can contact the domain you are trying to request an SSL certificate for, in order to verify it.",