From b886c8618b9aaed3e402e0cab038fd83e80f402f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Bi=C4=8Dan?= Date: Tue, 12 May 2020 10:43:19 +0200 Subject: [PATCH] #11 Introduce IClock dependency --- src/LetsEncrypt/Internal/AcmeCertificateLoader.cs | 6 +++++- src/LetsEncrypt/Internal/IO/IClock.cs | 9 +++++++++ src/LetsEncrypt/Internal/IO/SystemClock.cs | 9 +++++++++ 3 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 src/LetsEncrypt/Internal/IO/IClock.cs create mode 100644 src/LetsEncrypt/Internal/IO/SystemClock.cs diff --git a/src/LetsEncrypt/Internal/AcmeCertificateLoader.cs b/src/LetsEncrypt/Internal/AcmeCertificateLoader.cs index 1c0a506f..21934bbe 100644 --- a/src/LetsEncrypt/Internal/AcmeCertificateLoader.cs +++ b/src/LetsEncrypt/Internal/AcmeCertificateLoader.cs @@ -8,6 +8,7 @@ using System.Threading; using System.Threading.Tasks; using McMaster.AspNetCore.LetsEncrypt.Accounts; +using McMaster.AspNetCore.LetsEncrypt.Internal.IO; using Microsoft.AspNetCore.Hosting.Server; using Microsoft.AspNetCore.Server.Kestrel.Core; using Microsoft.Extensions.Configuration; @@ -37,6 +38,7 @@ internal class AcmeCertificateLoader : BackgroundService private readonly IConfiguration _config; private readonly TermsOfServiceChecker _tosChecker; private readonly IEnumerable _certificateRepositories; + private readonly IClock _clock; private const string ErrorMessage = "Failed to create certificate"; @@ -50,6 +52,7 @@ public AcmeCertificateLoader( IConfiguration config, TermsOfServiceChecker tosChecker, IEnumerable certificateRepositories, + IClock clock, IAccountStore? accountStore = default) { _selector = selector; @@ -62,6 +65,7 @@ public AcmeCertificateLoader( _config = config; _tosChecker = tosChecker; _certificateRepositories = certificateRepositories; + _clock = clock; } protected override async Task ExecuteAsync(CancellationToken stoppingToken) @@ -201,7 +205,7 @@ private async Task MonitorRenewal(CancellationToken cancellationToken) { if (!_selector.TryGet(domainName, out var cert) || cert == null - || cert.NotAfter <= DateTime.Now + daysInAdvance.Value) + || cert.NotAfter <= _clock.Now.LocalDateTime + daysInAdvance.Value) { await CreateCertificateAsync(domainNames, cancellationToken); break; diff --git a/src/LetsEncrypt/Internal/IO/IClock.cs b/src/LetsEncrypt/Internal/IO/IClock.cs new file mode 100644 index 00000000..bed31d7c --- /dev/null +++ b/src/LetsEncrypt/Internal/IO/IClock.cs @@ -0,0 +1,9 @@ +using System; + +namespace McMaster.AspNetCore.LetsEncrypt.Internal.IO +{ + internal interface IClock + { + DateTimeOffset Now { get; } + } +} diff --git a/src/LetsEncrypt/Internal/IO/SystemClock.cs b/src/LetsEncrypt/Internal/IO/SystemClock.cs new file mode 100644 index 00000000..77abeba9 --- /dev/null +++ b/src/LetsEncrypt/Internal/IO/SystemClock.cs @@ -0,0 +1,9 @@ +using System; + +namespace McMaster.AspNetCore.LetsEncrypt.Internal.IO +{ + internal class SystemClock: IClock + { + public DateTimeOffset Now => DateTimeOffset.Now; + } +}