Update the initial value for lastExpiringCertNotificationSentDate to START_OF_TIME (#1321)

* Update the initial value for lastExpiringCertNotificationSentDate to START_OF_TIME
This commit is contained in:
Rachel Guan 2021-09-16 13:06:47 -04:00 committed by GitHub
parent d5a91e7218
commit 1d14e96c9b
2 changed files with 14 additions and 12 deletions

View file

@ -33,7 +33,6 @@ import java.security.interfaces.ECPublicKey;
import java.security.interfaces.RSAPublicKey; import java.security.interfaces.RSAPublicKey;
import java.util.Date; import java.util.Date;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import javax.annotation.Nullable;
import javax.inject.Inject; import javax.inject.Inject;
import org.bouncycastle.jcajce.provider.asymmetric.util.EC5Util; import org.bouncycastle.jcajce.provider.asymmetric.util.EC5Util;
import org.bouncycastle.jce.ECNamedCurveTable; import org.bouncycastle.jce.ECNamedCurveTable;
@ -228,7 +227,7 @@ public class CertificateChecker {
/** Returns whether the client should receive a notification email. */ /** Returns whether the client should receive a notification email. */
public boolean shouldReceiveExpiringNotification( public boolean shouldReceiveExpiringNotification(
@Nullable DateTime lastExpiringNotificationSentDate, String certificateStr) { DateTime lastExpiringNotificationSentDate, String certificateStr) {
X509Certificate certificate = getCertificate(certificateStr); X509Certificate certificate = getCertificate(certificateStr);
DateTime now = clock.nowUtc(); DateTime now = clock.nowUtc();
// expiration date is one day after lastValidDate // expiration date is one day after lastValidDate
@ -238,13 +237,13 @@ public class CertificateChecker {
} }
/* /*
* Client should receive a notification if : * Client should receive a notification if :
* 1) client has never received notification and the certificate has entered * 1) client has never received notification (lastExpiringNotificationSentDate is initially
* the expiring period, OR * set to START_OF_TIME) and the certificate has entered the expiring period, OR
* 2) client has received notification but the interval between now and * 2) client has received notification but the interval between now and
* lastExpiringNotificationSentDate is greater than expirationWarningIntervalDays. * lastExpiringNotificationSentDate is greater than expirationWarningIntervalDays.
*/ */
return !lastValidDate.after(now.plusDays(expirationWarningDays).toDate()) return !lastValidDate.after(now.plusDays(expirationWarningDays).toDate())
&& (lastExpiringNotificationSentDate == null && (lastExpiringNotificationSentDate == START_OF_TIME
|| !lastExpiringNotificationSentDate || !lastExpiringNotificationSentDate
.plusDays(expirationWarningIntervalDays) .plusDays(expirationWarningIntervalDays)
.toDate() .toDate()

View file

@ -262,7 +262,7 @@ class CertificateCheckerTest {
DateTime.parse("2021-10-01T00:00:00Z")) DateTime.parse("2021-10-01T00:00:00Z"))
.cert(); .cert();
String certificateStr = certificateChecker.serializeCertificate(certificate); String certificateStr = certificateChecker.serializeCertificate(certificate);
assertThat(certificateChecker.shouldReceiveExpiringNotification(null, certificateStr)) assertThat(certificateChecker.shouldReceiveExpiringNotification(START_OF_TIME, certificateStr))
.isFalse(); .isFalse();
} }
@ -276,7 +276,7 @@ class CertificateCheckerTest {
DateTime.parse("2021-10-01T00:00:00Z")) DateTime.parse("2021-10-01T00:00:00Z"))
.cert(); .cert();
String certificateStr = certificateChecker.serializeCertificate(certificate); String certificateStr = certificateChecker.serializeCertificate(certificate);
assertThat(certificateChecker.shouldReceiveExpiringNotification(null, certificateStr)) assertThat(certificateChecker.shouldReceiveExpiringNotification(START_OF_TIME, certificateStr))
.isFalse(); .isFalse();
} }
@ -307,12 +307,14 @@ class CertificateCheckerTest {
DateTime.parse("2021-01-30T00:00:00Z")) DateTime.parse("2021-01-30T00:00:00Z"))
.cert(); .cert();
String certificateStr = certificateChecker.serializeCertificate(certificate); String certificateStr = certificateChecker.serializeCertificate(certificate);
assertThat(certificateChecker.shouldReceiveExpiringNotification(null, certificateStr)).isTrue(); assertThat(certificateChecker.shouldReceiveExpiringNotification(START_OF_TIME, certificateStr))
.isTrue();
} }
@Test @Test
void test_shouldReceiveExpiringNotification_returnsFalse_between30and15_lastSentDateIsNotNull() void
throws Exception { test_shouldReceiveExpiringNotification_returnsFalse_between30and15_lastSentDateIsNotStartOfTime()
throws Exception {
fakeClock.setTo(DateTime.parse("2021-07-05T00:00:00Z")); fakeClock.setTo(DateTime.parse("2021-07-05T00:00:00Z"));
X509Certificate certificate = X509Certificate certificate =
SelfSignedCaCertificate.create( SelfSignedCaCertificate.create(
@ -329,7 +331,7 @@ class CertificateCheckerTest {
} }
@Test @Test
void test_shouldReceiveExpiringNotification_returnsTrue_between30and15_lastSentDateIsNull() void test_shouldReceiveExpiringNotification_returnsTrue_between30and15_lastSentDateIsStartOfTime()
throws Exception { throws Exception {
fakeClock.setTo(DateTime.parse("2021-07-05T00:00:00Z")); fakeClock.setTo(DateTime.parse("2021-07-05T00:00:00Z"));
X509Certificate certificate = X509Certificate certificate =
@ -339,7 +341,8 @@ class CertificateCheckerTest {
DateTime.parse("2021-07-25T00:00:00Z")) DateTime.parse("2021-07-25T00:00:00Z"))
.cert(); .cert();
String certificateStr = certificateChecker.serializeCertificate(certificate); String certificateStr = certificateChecker.serializeCertificate(certificate);
assertThat(certificateChecker.shouldReceiveExpiringNotification(null, certificateStr)).isTrue(); assertThat(certificateChecker.shouldReceiveExpiringNotification(START_OF_TIME, certificateStr))
.isTrue();
} }
@Test @Test