Skip to content
This repository was archived by the owner on Jul 30, 2024. It is now read-only.

Commit 417240f

Browse files
authored
Allow signatures in Valid or InGracePeriod states (#358)
1 parent fd17349 commit 417240f

2 files changed

Lines changed: 12 additions & 24 deletions

File tree

src/NuGet.Services.Validation.Orchestrator/PackageCertificates/PackageCertificatesValidator.cs

Lines changed: 7 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -74,10 +74,10 @@ private async Task<ValidatorStatus> GetStatusAsync(IValidationRequest request)
7474
return status;
7575
}
7676

77-
// All of the requested certificate validations have finished. Fail the validation if the
78-
// signature has been invalidated. At this point, the signature MUST have a state of either
79-
// "Unknown" or "Invalid" as the PackageSigningValidator sets signatures to an "Unknown" status
80-
// and the ValidateCertificate job may set signatures to the "Invalid" state.
77+
// All of the requested certificate validations have finished. At this point, the signature
78+
// may have a status of "Unknown" if the package is at ingestion and its signature has passed
79+
// all validations, "Invalid" if one or more of the signature's certificates has failed validations,
80+
// or "InGracePeriod" or "Valid" if this is a revalidation request.
8181
var signature = await FindSignatureAsync(request);
8282

8383
if (signature.Status == PackageSignatureStatus.Invalid)
@@ -91,18 +91,6 @@ private async Task<ValidatorStatus> GetStatusAsync(IValidationRequest request)
9191

9292
return await _validatorStateService.TryUpdateValidationStatusAsync(request, status, ValidationStatus.Failed);
9393
}
94-
else if (signature.Status != PackageSignatureStatus.Unknown)
95-
{
96-
_logger.LogError(
97-
Error.PackageCertificateValidationInvalidSignatureState,
98-
"Failing validation {ValidationId} ({PackageId} {PackageVersion}) due to invalid signature status: {SignatureStatus}",
99-
request.ValidationId,
100-
request.PackageId,
101-
request.PackageVersion,
102-
signature.Status);
103-
104-
return await _validatorStateService.TryUpdateValidationStatusAsync(request, status, ValidationStatus.Failed);
105-
}
10694
else
10795
{
10896
_logger.LogInformation(
@@ -256,9 +244,10 @@ private void PromoteSignature(IValidationRequest request, PackageSignature signa
256244
: PackageSignatureStatus.InGracePeriod;
257245

258246
_logger.LogInformation(
259-
"Promoting package {PackageId} {PackageVersion} signature to status {SignatureStatus}",
247+
"Promoting package {PackageId} {PackageVersion} signature from status {OldSignatureStatus} to status {NewSignatureStatus}",
260248
request.PackageId,
261249
request.PackageVersion,
250+
signature.Status,
262251
newSignatureStatus);
263252

264253
signature.Status = newSignatureStatus;
@@ -288,7 +277,7 @@ bool IsCertificateStatusPastTime(EndCertificate certificate, DateTime time)
288277
if (timestamp.EndCertificate.Status == EndCertificateStatus.Revoked)
289278
{
290279
_logger.LogError(
291-
0,
280+
Error.PackageCertificateValidationInvalidSignatureState,
292281
"Valid signature cannot have a timestamp whose end certificate is revoked ({ValidationId}, {PackageId} {PackageVersion})",
293282
request.ValidationId,
294283
request.PackageId,

tests/NuGet.Services.Validation.Orchestrator.Tests/PackageCertificates/PackageCertificatesValidatorFacts.cs

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -203,22 +203,21 @@ public async Task ReturnsExpectedStatusForCertificateValidations(ValidationStatu
203203

204204
public static IEnumerable<object[]> InvalidSignatureFailsValidationData()
205205
{
206-
// Signatures SHOULD NOT have "Valid" and "InGracePeriod" Statuses before
207-
// the CertificateValidator finishes. If the signatures somehow do, the
208-
// validator should fail as this is an invalid state.
209206
yield return new object[]
210207
{
211-
ValidationStatus.Failed, PackageSignatureStatus.Valid
208+
ValidationStatus.Succeeded, PackageSignatureStatus.Unknown
212209
};
213210

211+
// Signatures may have "Valid" and "InGracePeriod" Statuses before
212+
// the CertificateValidator finishes due to revalidations.
214213
yield return new object[]
215214
{
216-
ValidationStatus.Failed, PackageSignatureStatus.InGracePeriod
215+
ValidationStatus.Succeeded, PackageSignatureStatus.Valid
217216
};
218217

219218
yield return new object[]
220219
{
221-
ValidationStatus.Succeeded, PackageSignatureStatus.Unknown
220+
ValidationStatus.Succeeded, PackageSignatureStatus.InGracePeriod
222221
};
223222

224223
yield return new object[]

0 commit comments

Comments
 (0)