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

Commit 9008706

Browse files
authored
Repository sign packages owned by users with "malformed" usernames (#686)
Repository sign packages that are owned by usernames with "malformed" usernames. Addresses https://github.com/NuGet/Engineering/issues/1582 and https://github.com/NuGet/Engineering/issues/1592.
1 parent 9537d56 commit 9008706

6 files changed

Lines changed: 2 additions & 151 deletions

File tree

src/NuGet.Services.Validation.Orchestrator/NuGet.Services.Validation.Orchestrator.csproj

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,6 @@
6969
<Compile Include="Symbols\SymbolsIngester.cs" />
7070
<Compile Include="Symbols\SymbolsValidator.cs" />
7171
<Compile Include="Symbols\SymbolsValidationConfiguration.cs" />
72-
<Compile Include="UsernameHelper.cs" />
7372
<Compile Include="ValidatingEntitites\IValidatingEntity.cs" />
7473
<Compile Include="IValidationOutcomeProcessor.cs" />
7574
<Compile Include="IValidationPackageFileService.cs" />

src/NuGet.Services.Validation.Orchestrator/PackageSigning/ProcessSignature/PackageSignatureValidator.cs

Lines changed: 0 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -93,20 +93,6 @@ private IValidationResult Validate(IValidationRequest request, IValidationResult
9393
return ValidationResult.Succeeded;
9494
}
9595

96-
// TODO: Remove this.
97-
// See: https://github.com/NuGet/Engineering/issues/1592
98-
if (HasOwnerWithInvalidUsername(request))
99-
{
100-
_logger.LogWarning(
101-
"Ignoring invalid validation result in package signature validator as the package has an owner with an invalid username. " +
102-
"Status = {ValidationStatus}, Nupkg URL = {NupkgUrl}, validation issues = {Issues}",
103-
result.Status,
104-
result.NupkgUrl,
105-
result.Issues.Select(i => i.IssueCode));
106-
107-
return ValidationResult.Succeeded;
108-
}
109-
11096
_logger.LogCritical(
11197
"Unexpected validation result in package signature validator. This may be caused by an invalid repository " +
11298
"signature. Throwing an exception to force this validation to dead-letter. " +
@@ -133,32 +119,5 @@ private IValidationResult Validate(IValidationRequest request, IValidationResult
133119

134120
return result;
135121
}
136-
137-
private bool HasOwnerWithInvalidUsername(IValidationRequest request)
138-
{
139-
var registration = _packages.FindPackageRegistrationById(request.PackageId);
140-
141-
if (registration == null)
142-
{
143-
_logger.LogError("Attempted to validate package that has no package registration");
144-
145-
throw new InvalidOperationException($"Registration for package id {request.PackageId} does not exist");
146-
}
147-
148-
var owners = registration.Owners.Select(o => o.Username).ToList();
149-
150-
if (owners.Any(UsernameHelper.IsInvalid))
151-
{
152-
_logger.LogWarning(
153-
"Package {PackageId} {PackageVersion} has an owner with an invalid username. {Owners}",
154-
request.PackageId,
155-
request.PackageVersion,
156-
owners);
157-
158-
return true;
159-
}
160-
161-
return false;
162-
}
163122
}
164123
}

src/NuGet.Services.Validation.Orchestrator/PackageSigning/ScanAndSign/ScanAndSignProcessor.cs

Lines changed: 2 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ public async Task<IValidationResult> StartAsync(IValidationRequest request)
134134

135135
var owners = FindPackageOwners(request);
136136

137-
if (await ShouldRepositorySignAsync(request, owners))
137+
if (await ShouldRepositorySignAsync(request))
138138
{
139139
_logger.LogInformation(
140140
"Repository signing {PackageId} {PackageVersion} with {ServiceIndex} and {Owners}",
@@ -198,7 +198,7 @@ private bool ShouldSkipScan(IValidationRequest request)
198198
return false;
199199
}
200200

201-
private async Task<bool> ShouldRepositorySignAsync(IValidationRequest request, List<string> owners)
201+
private async Task<bool> ShouldRepositorySignAsync(IValidationRequest request)
202202
{
203203
var hasRepositorySignature = await _validationContext
204204
.PackageSignatures
@@ -216,19 +216,6 @@ private async Task<bool> ShouldRepositorySignAsync(IValidationRequest request, L
216216
return false;
217217
}
218218

219-
// TODO: Remove this check.
220-
// See: https://github.com/NuGet/Engineering/issues/1582
221-
if (owners.Any(UsernameHelper.IsInvalid))
222-
{
223-
_logger.LogWarning(
224-
"Package {PackageId} {PackageVersion} has an owner with an invalid username. Scanning instead of signing. {Owners}",
225-
request.PackageId,
226-
request.PackageVersion,
227-
owners);
228-
229-
return false;
230-
}
231-
232219
return true;
233220
}
234221

src/NuGet.Services.Validation.Orchestrator/UsernameHelper.cs

Lines changed: 0 additions & 21 deletions
This file was deleted.

tests/NuGet.Services.Validation.Orchestrator.Tests/PackageSigning/ProcessSignature/PackageSignatureValidatorFacts.cs

Lines changed: 0 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -153,37 +153,6 @@ public async Task WhenRepositorySigningEnabled_ThrowsExceptionIfPackageIsModifie
153153
Assert.Equal("Package signature validator has an unexpected validation result", e.Message);
154154
}
155155

156-
[Fact]
157-
public async Task WhenRepositorySigningEnabled_IgnoresFailedValidationIfOwnerHasMalformedUsername()
158-
{
159-
// Arrange
160-
_config.RepositorySigningEnabled = true;
161-
162-
_packages
163-
.Setup(p => p.FindPackageRegistrationById(_validationRequest.Object.PackageId))
164-
.Returns(_packageRegistrationWithBadUsername);
165-
166-
_validatorStateService
167-
.Setup(x => x.GetStatusAsync(It.IsAny<IValidationRequest>()))
168-
.ReturnsAsync(new ValidatorStatus
169-
{
170-
ValidationId = ValidationId,
171-
PackageKey = PackageKey,
172-
ValidatorName = ValidatorName.PackageSignatureProcessor,
173-
State = ValidationStatus.Failed,
174-
ValidatorIssues = new List<ValidatorIssue>(),
175-
});
176-
177-
// Act
178-
var result = await _target.GetResultAsync(_validationRequest.Object);
179-
180-
// Assert
181-
Assert.Null(result.NupkgUrl);
182-
Assert.Empty(result.Issues);
183-
Assert.Equal(ValidationStatus.Succeeded, result.Status);
184-
185-
}
186-
187156
public static IEnumerable<object[]> PossibleValidationStatuses => possibleValidationStatuses.Select(s => new object[] { s });
188157
}
189158

@@ -489,7 +458,6 @@ public abstract class FactsBase
489458

490459
protected readonly ScanAndSignConfiguration _config;
491460
protected readonly PackageRegistration _packageRegistration;
492-
protected readonly PackageRegistration _packageRegistrationWithBadUsername;
493461

494462
public FactsBase(ITestOutputHelper output)
495463
{
@@ -520,14 +488,6 @@ public FactsBase(ITestOutputHelper output)
520488
}
521489
};
522490

523-
_packageRegistrationWithBadUsername = new PackageRegistration
524-
{
525-
Owners = new[]
526-
{
527-
new User { Username = "Bad Username" }
528-
}
529-
};
530-
531491
_target = new PackageSignatureValidator(
532492
_validatorStateService.Object,
533493
_packageSignatureVerifier.Object,

tests/Validation.PackageSigning.ScanAndSign.Tests/ScanAndSignProcessorFacts.cs

Lines changed: 0 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -266,30 +266,6 @@ public async Task EnqueuesScanAndSignIfPackageHasNoRepositorySignature()
266266
.Verify(v => v.TryAddValidatorStatusAsync(It.IsAny<IValidationRequest>(), It.IsAny<ValidatorStatus>(), It.IsAny<ValidationStatus>()), Times.Once);
267267
}
268268

269-
[Fact]
270-
public async Task WhenUsernameInvalid_SkipsScanAndSign()
271-
{
272-
_config.RepositorySigningEnabled = true;
273-
274-
_validationContext.Mock();
275-
_packageServiceMock
276-
.Setup(p => p.FindPackageRegistrationById(_request.PackageId))
277-
.Returns(_packageRegistrationWithInvalidUser);
278-
279-
var result = await _target.StartAsync(_request);
280-
281-
_packageServiceMock
282-
.Verify(p => p.FindPackageRegistrationById(_request.PackageId), Times.Once);
283-
284-
_enqueuerMock
285-
.Verify(e => e.EnqueueScanAsync(_request.ValidationId, _request.NupkgUrl), Times.Once);
286-
287-
_validatorStateServiceMock
288-
.Verify(v => v.TryAddValidatorStatusAsync(_request, _status, ValidationStatus.Incomplete), Times.Once);
289-
_validatorStateServiceMock
290-
.Verify(v => v.TryAddValidatorStatusAsync(It.IsAny<IValidationRequest>(), It.IsAny<ValidatorStatus>(), It.IsAny<ValidationStatus>()), Times.Once);
291-
}
292-
293269
[Fact]
294270
public async Task EnqueuesScanAndSignEvenIfRepositorySigningIsDisabled()
295271
{
@@ -455,15 +431,6 @@ public async Task WhenPackageFitsCriteriaAndIsNotRepositorySigned_DoesNotSkipSca
455431
}
456432
};
457433

458-
private PackageRegistration _packageRegistrationWithInvalidUser = new PackageRegistration
459-
{
460-
Owners = new List<User>
461-
{
462-
new User("Billy"),
463-
new User("Satan Claus"),
464-
}
465-
};
466-
467434
public TheStartAsyncMethod()
468435
{
469436
_request = new ValidationRequest(Guid.NewGuid(), 42, "somepackage", "somversion", "https://example.com/package.nupkg");

0 commit comments

Comments
 (0)