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

Commit 1ab6cbf

Browse files
authored
Merge pull request #298 from NuGet/dev
[ReleasePrep][2018.01.08] RI of dev into master
2 parents caae4e2 + 394fddc commit 1ab6cbf

88 files changed

Lines changed: 3506 additions & 224 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

NuGet.Jobs.sln

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,14 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Validation.PackageSigning.E
103103
EndProject
104104
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Validation.PackageSigning.ExtractAndValidateSignature.Tests", "tests\Validation.PackageSigning.ExtractAndValidateSignature.Tests\Validation.PackageSigning.ExtractAndValidateSignature.Tests.csproj", "{26435822-8938-48C9-96FD-0DCCF8F7CE00}"
105105
EndProject
106+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Validation.PackageSigning.ValidateCertificate", "src\Validation.PackageSigning.ValidateCertificate\Validation.PackageSigning.ValidateCertificate.csproj", "{A245E448-8AE0-452B-9338-8C0E0B637D72}"
107+
EndProject
108+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Validation.PackageSigning.ValidateCertificate.Tests", "tests\Validation.PackageSigning.ValidateCertificate.Tests\Validation.PackageSigning.ValidateCertificate.Tests.csproj", "{5ACE7756-F8D0-4D90-9957-872DE4A1381E}"
109+
EndProject
110+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Validation.PackageSigning.Helpers", "tests\Validation.PackageSigning.Helpers\Validation.PackageSigning.Helpers.csproj", "{2C5BE067-ADFD-49E3-BA9F-13A74436E5DB}"
111+
EndProject
112+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Validation.PackageSigning.Core.Tests", "tests\Validation.PackageSigning.Core.Tests\Validation.PackageSigning.Core.Tests.csproj", "{B4B7564A-965B-447B-927F-6749E2C08880}"
113+
EndProject
106114
Global
107115
GlobalSection(SolutionConfigurationPlatforms) = preSolution
108116
Debug|Any CPU = Debug|Any CPU
@@ -259,6 +267,22 @@ Global
259267
{26435822-8938-48C9-96FD-0DCCF8F7CE00}.Debug|Any CPU.Build.0 = Debug|Any CPU
260268
{26435822-8938-48C9-96FD-0DCCF8F7CE00}.Release|Any CPU.ActiveCfg = Release|Any CPU
261269
{26435822-8938-48C9-96FD-0DCCF8F7CE00}.Release|Any CPU.Build.0 = Release|Any CPU
270+
{A245E448-8AE0-452B-9338-8C0E0B637D72}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
271+
{A245E448-8AE0-452B-9338-8C0E0B637D72}.Debug|Any CPU.Build.0 = Debug|Any CPU
272+
{A245E448-8AE0-452B-9338-8C0E0B637D72}.Release|Any CPU.ActiveCfg = Release|Any CPU
273+
{A245E448-8AE0-452B-9338-8C0E0B637D72}.Release|Any CPU.Build.0 = Release|Any CPU
274+
{5ACE7756-F8D0-4D90-9957-872DE4A1381E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
275+
{5ACE7756-F8D0-4D90-9957-872DE4A1381E}.Debug|Any CPU.Build.0 = Debug|Any CPU
276+
{5ACE7756-F8D0-4D90-9957-872DE4A1381E}.Release|Any CPU.ActiveCfg = Release|Any CPU
277+
{5ACE7756-F8D0-4D90-9957-872DE4A1381E}.Release|Any CPU.Build.0 = Release|Any CPU
278+
{2C5BE067-ADFD-49E3-BA9F-13A74436E5DB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
279+
{2C5BE067-ADFD-49E3-BA9F-13A74436E5DB}.Debug|Any CPU.Build.0 = Debug|Any CPU
280+
{2C5BE067-ADFD-49E3-BA9F-13A74436E5DB}.Release|Any CPU.ActiveCfg = Release|Any CPU
281+
{2C5BE067-ADFD-49E3-BA9F-13A74436E5DB}.Release|Any CPU.Build.0 = Release|Any CPU
282+
{B4B7564A-965B-447B-927F-6749E2C08880}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
283+
{B4B7564A-965B-447B-927F-6749E2C08880}.Debug|Any CPU.Build.0 = Debug|Any CPU
284+
{B4B7564A-965B-447B-927F-6749E2C08880}.Release|Any CPU.ActiveCfg = Release|Any CPU
285+
{B4B7564A-965B-447B-927F-6749E2C08880}.Release|Any CPU.Build.0 = Release|Any CPU
262286
EndGlobalSection
263287
GlobalSection(SolutionProperties) = preSolution
264288
HideSolutionNode = FALSE
@@ -300,6 +324,10 @@ Global
300324
{91C060DA-736F-4DA9-A57F-CB3AC0E6CB10} = {678D7B14-F8BC-4193-99AF-2EE8AA390A02}
301325
{DD043977-6BCD-475A-BEE2-8C34309EC622} = {678D7B14-F8BC-4193-99AF-2EE8AA390A02}
302326
{26435822-8938-48C9-96FD-0DCCF8F7CE00} = {6A776396-02B1-475D-A104-26940ADB04AB}
327+
{A245E448-8AE0-452B-9338-8C0E0B637D72} = {678D7B14-F8BC-4193-99AF-2EE8AA390A02}
328+
{5ACE7756-F8D0-4D90-9957-872DE4A1381E} = {6A776396-02B1-475D-A104-26940ADB04AB}
329+
{2C5BE067-ADFD-49E3-BA9F-13A74436E5DB} = {6A776396-02B1-475D-A104-26940ADB04AB}
330+
{B4B7564A-965B-447B-927F-6749E2C08880} = {6A776396-02B1-475D-A104-26940ADB04AB}
303331
EndGlobalSection
304332
GlobalSection(ExtensibilityGlobals) = postSolution
305333
SolutionGuid = {284A7AC3-FB43-4F1F-9C9C-2AF0E1F46C2B}

build.ps1

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -103,8 +103,8 @@ Invoke-BuildStep 'Set version metadata in AssemblyInfo.cs' { `
103103
"$PSScriptRoot\src\NuGetCDNRedirect\Properties\AssemblyInfo.g.cs",
104104
"$PSScriptRoot\src\NuGet.Services.Validation.Orchestrator\Properties\AssemblyInfo.g.cs",
105105
"$PSScriptRoot\src\Stats.CollectAzureChinaCDNLogs\Properties\AssemblyInfo.g.cs",
106-
"$PSScriptRoot\src\Validation.PackageSigning.ExtractAndValidateSignature\Properties\AssemblyInfo.g.cs"
107-
106+
"$PSScriptRoot\src\Validation.PackageSigning.ExtractAndValidateSignature\Properties\AssemblyInfo.g.cs",
107+
"$PSScriptRoot\src\Validation.PackageSigning.ValidateCertificate\Properties\AssemblyInfo.g.cs"
108108

109109
$versionMetadata | ForEach-Object {
110110
Set-VersionInfo -Path $_ -Version $SimpleVersion -Branch $Branch -Commit $CommitSHA
@@ -152,7 +152,8 @@ Invoke-BuildStep 'Creating artifacts' {
152152
"src/NuGetCDNRedirect/NuGetCDNRedirect.csproj", `
153153
"src/NuGet.Services.Validation.Orchestrator/NuGet.Services.Validation.Orchestrator.csproj", `
154154
"src/Stats.CollectAzureChinaCDNLogs/Stats.CollectAzureChinaCDNLogs.csproj", `
155-
"src/Validation.PackageSigning.ExtractAndValidateSignature/Validation.PackageSigning.ExtractAndValidateSignature.csproj"
155+
"src/Validation.PackageSigning.ExtractAndValidateSignature/Validation.PackageSigning.ExtractAndValidateSignature.csproj", `
156+
"src/Validation.PackageSigning.ValidateCertificate/Validation.PackageSigning.ValidateCertificate.csproj"
156157

157158
Foreach ($Project in $Projects) {
158159
New-Package (Join-Path $PSScriptRoot "$Project") -Configuration $Configuration -BuildNumber $BuildNumber -Version $SemanticVersion -Branch $Branch -MSBuildVersion "$msBuildVersion"
@@ -174,4 +175,4 @@ if ($BuildErrors) {
174175
Error-Log "Builds completed with $($BuildErrors.Count) error(s):`r`n$($ErrorLines -join "`r`n")" -Fatal
175176
}
176177

177-
Write-Host ("`r`n" * 3)
178+
Write-Host ("`r`n" * 3)

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

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,5 +34,15 @@ public class EmailConfiguration
3434
/// Url for email settings, so user can opt out of receiving email notifications.
3535
/// </summary>
3636
public string EmailSettingsUrl { get; set; }
37+
38+
/// <summary>
39+
/// Url for the announcements github page
40+
/// </summary>
41+
public string AnnouncementsUrl { get; set; }
42+
43+
/// <summary>
44+
/// NuGet Twitter url
45+
/// </summary>
46+
public string TwitterUrl { get; set; }
3747
}
3848
}

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,5 +9,6 @@ public interface IMessageService
99
{
1010
void SendPackagePublishedMessage(Package package);
1111
void SendPackageValidationFailedMessage(Package package);
12+
void SendPackageSignedValidationFailedMessage(Package package);
1213
}
1314
}

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

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -26,28 +26,29 @@ public interface IValidationStorageService
2626
Task<PackageValidationSet> GetValidationSetAsync(Guid validationTrackingId);
2727

2828
/// <summary>
29-
/// Updates the passed <see cref="PackageValidation"/> with specified validation status,
30-
/// updates the <see cref="PackageValidation.ValidationStatusTimestamp"/>
31-
/// and <see cref="PackageValidation.Started"/> properties to current timestamp, persists changes in the storage.
29+
/// Updates the passed <see cref="PackageValidation"/> with the validation result's status,
30+
/// updates the <see cref="PackageValidation.ValidationStatusTimestamp"/> to current timestamp,
31+
/// and persists changes in the storage. The result's status cannot be <see cref="ValidationStatus.NotStarted"/>
3232
/// </summary>
3333
/// <param name="packageValidation">Validation object to update, must be an object from the <see cref="PackageValidationSet.PackageValidations"/> collection
3434
/// from an <see cref="PackageValidationSet"/> previously returned by either <see cref="CreateValidationSetAsync(PackageValidationSet)"/>
3535
/// or <see cref="GetValidationSetAsync(Guid)"/> calls.</param>
36-
/// <param name="startedStatus">Validation status to set. Cannot be <see cref="ValidationStatus.NotStarted"/></param>
36+
/// <param name="validationResult">Validation result. Its status cannot be <see cref="ValidationStatus.NotStarted"/></param>
3737
/// <returns>Task object tracking the async operation status.</returns>
38-
/// <exception cref="ArgumentOutOfRangeException">If <paramref name="startedStatus"/> is <see cref="ValidationStatus.NotStarted"/></exception>
39-
Task MarkValidationStartedAsync(PackageValidation packageValidation, ValidationStatus startedStatus);
38+
/// <exception cref="ArgumentOutOfRangeException">If <paramref name="validationResult"/> has status <see cref="ValidationStatus.NotStarted"/></exception>
39+
Task MarkValidationStartedAsync(PackageValidation packageValidation, IValidationResult validationResult);
4040

4141
/// <summary>
42-
/// Updates the passed <see cref="PackageValidation"/> object with specified validation status,
43-
/// updates the <see cref="PackageValidation.ValidationStatusTimestamp"/>
44-
/// property to current timestamp, persists changes in the storage.
42+
/// Updates the passed <see cref="PackageValidation"/> object with the result's validation status,
43+
/// updates the <see cref="PackageValidation.ValidationStatusTimestamp"/> property to the current
44+
/// timestamp, adds the result's <see cref="PackageValidationIssue"/>s to the validation, and then persists
45+
/// changes in the storage.
4546
/// </summary>
4647
/// <param name="packageValidation">Validation object to update, must be an object from the <see cref="PackageValidationSet.PackageValidations"/> collection
4748
/// from an <see cref="PackageValidationSet"/> previously returned by either <see cref="CreateValidationSetAsync(PackageValidationSet)"/>
4849
/// or <see cref="GetValidationSetAsync(Guid)"/> calls.</param>
49-
/// <param name="validationStatus">Validation status to set.</param>
50+
/// <param name="validationResult">The result of the validation.</param>
5051
/// <returns>Task object tracking the async operation status.</returns>
51-
Task UpdateValidationStatusAsync(PackageValidation packageValidation, ValidationStatus validationStatus);
52+
Task UpdateValidationStatusAsync(PackageValidation packageValidation, IValidationResult validationResult);
5253
}
5354
}

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

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,15 @@ public void SendPackageValidationFailedMessage(Package package)
6060

6161
var galleryPackageUrl = string.Format(_emailConfiguration.PackageUrlTemplate, package.PackageRegistration.Id, package.NormalizedVersion);
6262
var packageSupportUrl = string.Format(_emailConfiguration.PackageSupportTemplate, package.PackageRegistration.Id, package.NormalizedVersion);
63-
_coreMessageService.SendPackageValidationFailedNotice(package, galleryPackageUrl, packageSupportUrl, _emailConfiguration.EmailSettingsUrl);
63+
_coreMessageService.SendPackageValidationFailedNotice(package, galleryPackageUrl, packageSupportUrl);
64+
}
65+
66+
public void SendPackageSignedValidationFailedMessage(Package package)
67+
{
68+
package = package ?? throw new ArgumentNullException(nameof(package));
69+
70+
var galleryPackageUrl = string.Format(_emailConfiguration.PackageUrlTemplate, package.PackageRegistration.Id, package.NormalizedVersion);
71+
_coreMessageService.SendSignedPackageNotAllowedNotice(package, galleryPackageUrl, _emailConfiguration.AnnouncementsUrl, _emailConfiguration.TwitterUrl);
6472
}
6573
}
6674
}

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

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -134,28 +134,31 @@
134134
<Version>1.1.2</Version>
135135
</PackageReference>
136136
<PackageReference Include="NuGet.Services.Configuration">
137-
<Version>2.5.0</Version>
137+
<Version>2.7.1</Version>
138138
</PackageReference>
139139
<PackageReference Include="NuGet.Services.Contracts">
140-
<Version>2.5.0</Version>
140+
<Version>2.7.1</Version>
141141
</PackageReference>
142142
<PackageReference Include="NuGet.Services.KeyVault">
143-
<Version>2.5.0</Version>
143+
<Version>2.7.1</Version>
144144
</PackageReference>
145145
<PackageReference Include="NuGet.Services.Logging">
146-
<Version>2.5.0</Version>
146+
<Version>2.7.1</Version>
147147
</PackageReference>
148148
<PackageReference Include="NuGet.Services.ServiceBus">
149-
<Version>2.5.0</Version>
149+
<Version>2.7.1</Version>
150150
</PackageReference>
151151
<PackageReference Include="NuGet.Services.Validation">
152-
<Version>2.5.0</Version>
152+
<Version>2.7.1</Version>
153+
</PackageReference>
154+
<PackageReference Include="NuGet.Services.Validation.Issues">
155+
<Version>2.7.1</Version>
153156
</PackageReference>
154157
<PackageReference Include="NuGet.Versioning">
155158
<Version>4.3.0</Version>
156159
</PackageReference>
157160
<PackageReference Include="NuGetGallery.Core">
158-
<Version>4.4.4-dev-18852</Version>
161+
<Version>4.4.4-dev-19677</Version>
159162
</PackageReference>
160163
<PackageReference Include="Serilog">
161164
<Version>2.5.0</Version>

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

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,14 @@ public PackageCertificatesValidator(
5050
}
5151
}
5252

53-
public async Task<ValidationStatus> GetStatusAsync(IValidationRequest request)
53+
public async Task<IValidationResult> GetResultAsync(IValidationRequest request)
54+
{
55+
var status = await GetStatusAsync(request);
56+
57+
return new ValidationResult(status);
58+
}
59+
60+
private async Task<ValidationStatus> GetStatusAsync(IValidationRequest request)
5461
{
5562
// Look up this validator's state in the database.
5663
var status = await _validatorStateService.GetStatusAsync(request);
@@ -107,7 +114,12 @@ public async Task<ValidationStatus> GetStatusAsync(IValidationRequest request)
107114
return await _validatorStateService.TryUpdateValidationStatusAsync(request, status, ValidationStatus.Succeeded);
108115
}
109116

110-
public async Task<ValidationStatus> StartValidationAsync(IValidationRequest request)
117+
public async Task<IValidationResult> StartValidationAsync(IValidationRequest request)
118+
{
119+
return new ValidationResult(await StartValidationInternalAsync(request));
120+
}
121+
122+
private async Task<ValidationStatus> StartValidationInternalAsync(IValidationRequest request)
111123
{
112124
var status = await _validatorStateService.GetStatusAsync(request);
113125

src/NuGet.Services.Validation.Orchestrator/PackageSigning/PackageSigningValidator.cs

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
using System.Threading.Tasks;
66
using Microsoft.Extensions.Logging;
77
using NuGet.Jobs.Validation.PackageSigning.Storage;
8+
using NuGet.Services.Validation.Issues;
89

910
namespace NuGet.Services.Validation.PackageSigning
1011
{
@@ -24,14 +25,29 @@ public PackageSigningValidator(
2425
_logger = logger ?? throw new ArgumentNullException(nameof(logger));
2526
}
2627

27-
public async Task<ValidationStatus> GetStatusAsync(IValidationRequest request)
28+
public async Task<IValidationResult> GetResultAsync(IValidationRequest request)
2829
{
2930
var validatorStatus = await _validatorStateService.GetStatusAsync(request);
3031

31-
return validatorStatus.State;
32+
if (validatorStatus.State == ValidationStatus.Failed)
33+
{
34+
// If the validation has failed, assume it is because signed packages are blocked.
35+
return ValidationResult.FailedWithIssues(new PackageIsSigned());
36+
}
37+
else
38+
{
39+
return new ValidationResult(validatorStatus.State);
40+
}
41+
}
42+
43+
public async Task<IValidationResult> StartValidationAsync(IValidationRequest request)
44+
{
45+
var status = await StartValidationInternalAsync(request);
46+
47+
return new ValidationResult(status);
3248
}
3349

34-
public async Task<ValidationStatus> StartValidationAsync(IValidationRequest request)
50+
public async Task<ValidationStatus> StartValidationInternalAsync(IValidationRequest request)
3551
{
3652
// Check that this is the first validation for this specific request.
3753
var validatorStatus = await _validatorStateService.GetStatusAsync(request);

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

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,22 @@ public async Task ProcessValidationOutcomeAsync(PackageValidationSet validationS
5656
if (package.PackageStatusKey != PackageStatus.Available)
5757
{
5858
await _galleryPackageService.UpdatePackageStatusAsync(package, PackageStatus.FailedValidation);
59-
_messageService.SendPackageValidationFailedMessage(package);
59+
60+
var issuesExistAndAllPackageSigned = validationSet
61+
.PackageValidations
62+
.SelectMany(pv => pv.PackageValidationIssues)
63+
.Select(pvi => pvi.IssueCode == ValidationIssueCode.PackageIsSigned)
64+
.DefaultIfEmpty(false)
65+
.All(v => v);
66+
67+
if (issuesExistAndAllPackageSigned)
68+
{
69+
_messageService.SendPackageSignedValidationFailedMessage(package);
70+
}
71+
else
72+
{
73+
_messageService.SendPackageValidationFailedMessage(package);
74+
}
6075
}
6176
else
6277
{

0 commit comments

Comments
 (0)