Skip to content

Commit efb35cf

Browse files
authored
feat: add NuGetPackagesConfigDetector (#174)
1 parent a6205c0 commit efb35cf

4 files changed

Lines changed: 160 additions & 4 deletions

File tree

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
namespace Microsoft.ComponentDetection.Detectors.NuGet
2+
{
3+
using System;
4+
using System.Collections.Generic;
5+
using System.Composition;
6+
using System.Threading.Tasks;
7+
using global::NuGet.Packaging;
8+
using Microsoft.ComponentDetection.Contracts;
9+
using Microsoft.ComponentDetection.Contracts.Internal;
10+
using Microsoft.ComponentDetection.Contracts.TypedComponent;
11+
12+
[Export(typeof(IComponentDetector))]
13+
public class NuGetPackagesConfigDetector : FileComponentDetector, IExperimentalDetector
14+
{
15+
public override IList<string> SearchPatterns => new[] { "packages.config" };
16+
17+
public override string Id => "NuGetPackagesConfig";
18+
19+
public override IEnumerable<string> Categories =>
20+
new[] { Enum.GetName(typeof(DetectorClass), DetectorClass.NuGet) };
21+
22+
public override IEnumerable<ComponentType> SupportedComponentTypes => new[] { ComponentType.NuGet };
23+
24+
public override int Version => 1;
25+
26+
protected override Task OnFileFound(ProcessRequest processRequest, IDictionary<string, string> detectorArgs)
27+
{
28+
var packagesConfig = new PackagesConfigReader(processRequest.ComponentStream.Stream);
29+
foreach (var package in packagesConfig.GetPackages())
30+
{
31+
processRequest.SingleFileComponentRecorder.RegisterUsage(
32+
new DetectedComponent(
33+
new NuGetComponent(
34+
package.PackageIdentity.Id,
35+
package.PackageIdentity.Version.ToNormalizedString())),
36+
true,
37+
null,
38+
package.IsDevelopmentDependency);
39+
}
40+
41+
return Task.CompletedTask;
42+
}
43+
}
44+
}

test/Microsoft.ComponentDetection.Detectors.Tests/Microsoft.ComponentDetection.Detectors.Tests.csproj

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22

33
<ItemGroup Label="Project References">
4-
<ProjectReference Include="..\Microsoft.ComponentDetection.TestsUtilities\Microsoft.ComponentDetection.TestsUtilities.csproj"/>
4+
<ProjectReference Include="..\Microsoft.ComponentDetection.TestsUtilities\Microsoft.ComponentDetection.TestsUtilities.csproj" />
55
</ItemGroup>
66

77
<ItemGroup>
8-
<PackageReference Include="NuGet.Versioning"/>
9-
<PackageReference Include="System.Reactive"/>
10-
<PackageReference Include="packageurl-dotnet"/>
8+
<PackageReference Include="NuGet.Versioning" />
9+
<PackageReference Include="System.Reactive" />
10+
<PackageReference Include="packageurl-dotnet" />
1111
</ItemGroup>
1212

1313
<ItemGroup>
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
namespace Microsoft.ComponentDetection.Detectors.Tests.NuGet
2+
{
3+
using System.Threading.Tasks;
4+
using Contracts;
5+
using Contracts.TypedComponent;
6+
using Detectors.NuGet;
7+
using FluentAssertions;
8+
using TestsUtilities;
9+
using VisualStudio.TestTools.UnitTesting;
10+
11+
[TestClass]
12+
public class NuGetPackagesConfigDetectorTests
13+
{
14+
private DetectorTestUtility<NuGetPackagesConfigDetector> detectorTestUtility;
15+
16+
[TestInitialize]
17+
public void TestInitialize()
18+
{
19+
var detector = new NuGetPackagesConfigDetector();
20+
this.detectorTestUtility = new DetectorTestUtility<NuGetPackagesConfigDetector>().WithDetector(detector);
21+
}
22+
23+
[TestMethod]
24+
public async Task Should_Work()
25+
{
26+
var packagesConfig =
27+
@"<?xml version=""1.0"" encoding=""utf-8""?>
28+
<packages>
29+
<package id=""jQuery"" version=""3.1.1"" targetFramework=""net46"" />
30+
<package id=""NLog"" version=""4.3.10"" targetFramework=""net46"" />
31+
</packages>";
32+
33+
var (scanResult, componentRecorder) = await this.detectorTestUtility
34+
.WithFile("packages.config", packagesConfig)
35+
.ExecuteDetector()
36+
.ConfigureAwait(true);
37+
38+
var detectedComponents = componentRecorder.GetDetectedComponents();
39+
detectedComponents.Should().NotBeEmpty()
40+
.And.HaveCount(2)
41+
.And.ContainEquivalentOf(new DetectedComponent(new NuGetComponent("jQuery", "3.1.1")))
42+
.And.ContainEquivalentOf(new DetectedComponent(new NuGetComponent("NLog", "4.3.10")));
43+
}
44+
}
45+
}
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
<!-- https://github.com/dotnet/Kerberos.NET/blob/559bec87d6eb1fb8698418c3aacafbbc7c32bdec/Samples/KerberosWebSample/packages.config -->
2+
<?xml version="1.0" encoding="utf-8"?>
3+
<packages>
4+
<package id="Microsoft.AspNet.WebApi.Client" version="5.2.3" targetFramework="net452" />
5+
<package id="Microsoft.AspNet.WebApi.Core" version="5.2.3" targetFramework="net452" />
6+
<package id="Microsoft.AspNet.WebApi.Owin" version="5.2.3" targetFramework="net452" />
7+
<package id="Microsoft.AspNet.WebApi.WebHost" version="5.2.3" targetFramework="net452" />
8+
<package id="Microsoft.CodeDom.Providers.DotNetCompilerPlatform" version="1.0.7" targetFramework="net462" />
9+
<package id="Microsoft.Extensions.Caching.Abstractions" version="2.0.0" targetFramework="net462" />
10+
<package id="Microsoft.Extensions.Caching.Memory" version="2.0.0" targetFramework="net462" />
11+
<package id="Microsoft.Extensions.DependencyInjection.Abstractions" version="2.0.0" targetFramework="net462" />
12+
<package id="Microsoft.Extensions.Options" version="2.0.0" targetFramework="net462" />
13+
<package id="Microsoft.Extensions.Primitives" version="2.0.0" targetFramework="net462" />
14+
<package id="Microsoft.Net.Compilers" version="2.3.1" targetFramework="net462" developmentDependency="true" />
15+
<package id="Microsoft.NETCore.Platforms" version="2.0.0" targetFramework="net462" />
16+
<package id="Microsoft.Owin" version="3.1.0" targetFramework="net462" />
17+
<package id="Microsoft.Owin.Host.SystemWeb" version="3.1.0" targetFramework="net462" />
18+
<package id="Microsoft.Win32.Primitives" version="4.3.0" targetFramework="net462" />
19+
<package id="NETStandard.Library" version="2.0.0" targetFramework="net462" />
20+
<package id="Newtonsoft.Json" version="13.0.1" targetFramework="net462" />
21+
<package id="Owin" version="1.0" targetFramework="net452" />
22+
<package id="System.AppContext" version="4.3.0" targetFramework="net462" />
23+
<package id="System.Collections" version="4.3.0" targetFramework="net462" />
24+
<package id="System.Collections.Concurrent" version="4.3.0" targetFramework="net462" />
25+
<package id="System.ComponentModel" version="4.3.0" targetFramework="net462" />
26+
<package id="System.Console" version="4.3.0" targetFramework="net462" />
27+
<package id="System.Diagnostics.Debug" version="4.3.0" targetFramework="net462" />
28+
<package id="System.Diagnostics.DiagnosticSource" version="4.4.1" targetFramework="net462" />
29+
<package id="System.Diagnostics.Tools" version="4.3.0" targetFramework="net462" />
30+
<package id="System.Diagnostics.Tracing" version="4.3.0" targetFramework="net462" />
31+
<package id="System.Globalization" version="4.3.0" targetFramework="net462" />
32+
<package id="System.Globalization.Calendars" version="4.3.0" targetFramework="net462" />
33+
<package id="System.IO" version="4.3.0" targetFramework="net462" />
34+
<package id="System.IO.Compression" version="4.3.0" targetFramework="net462" />
35+
<package id="System.IO.Compression.ZipFile" version="4.3.0" targetFramework="net462" />
36+
<package id="System.IO.FileSystem" version="4.3.0" targetFramework="net462" />
37+
<package id="System.IO.FileSystem.Primitives" version="4.3.0" targetFramework="net462" />
38+
<package id="System.Linq" version="4.3.0" targetFramework="net462" />
39+
<package id="System.Linq.Expressions" version="4.3.0" targetFramework="net462" />
40+
<package id="System.Net.Http" version="4.3.4" targetFramework="net462" />
41+
<package id="System.Net.Primitives" version="4.3.0" targetFramework="net462" />
42+
<package id="System.Net.Sockets" version="4.3.0" targetFramework="net462" />
43+
<package id="System.ObjectModel" version="4.3.0" targetFramework="net462" />
44+
<package id="System.Reflection" version="4.3.0" targetFramework="net462" />
45+
<package id="System.Reflection.Extensions" version="4.3.0" targetFramework="net462" />
46+
<package id="System.Reflection.Primitives" version="4.3.0" targetFramework="net462" />
47+
<package id="System.Resources.ResourceManager" version="4.3.0" targetFramework="net462" />
48+
<package id="System.Runtime" version="4.3.0" targetFramework="net462" />
49+
<package id="System.Runtime.CompilerServices.Unsafe" version="4.4.0" targetFramework="net462" />
50+
<package id="System.Runtime.Extensions" version="4.3.0" targetFramework="net462" />
51+
<package id="System.Runtime.Handles" version="4.3.0" targetFramework="net462" />
52+
<package id="System.Runtime.InteropServices" version="4.3.0" targetFramework="net462" />
53+
<package id="System.Runtime.InteropServices.RuntimeInformation" version="4.3.0" targetFramework="net462" />
54+
<package id="System.Runtime.Numerics" version="4.3.0" targetFramework="net462" />
55+
<package id="System.Security.Cryptography.Algorithms" version="4.3.0" targetFramework="net462" />
56+
<package id="System.Security.Cryptography.Encoding" version="4.3.0" targetFramework="net462" />
57+
<package id="System.Security.Cryptography.Primitives" version="4.3.0" targetFramework="net462" />
58+
<package id="System.Security.Cryptography.X509Certificates" version="4.3.0" targetFramework="net462" />
59+
<package id="System.Text.Encoding" version="4.3.0" targetFramework="net462" />
60+
<package id="System.Text.Encoding.Extensions" version="4.3.0" targetFramework="net462" />
61+
<package id="System.Text.RegularExpressions" version="4.3.1" targetFramework="net462" />
62+
<package id="System.Threading" version="4.3.0" targetFramework="net462" />
63+
<package id="System.Threading.Tasks" version="4.3.0" targetFramework="net462" />
64+
<package id="System.Threading.Timer" version="4.3.0" targetFramework="net462" />
65+
<package id="System.Xml.ReaderWriter" version="4.3.0" targetFramework="net462" />
66+
<package id="System.Xml.XDocument" version="4.3.0" targetFramework="net462" />
67+
</packages>

0 commit comments

Comments
 (0)