From 75a382a0956520ab96eb18fe48a313e86bfcf88c Mon Sep 17 00:00:00 2001 From: Eduardo Villalpando Mello Date: Tue, 15 Apr 2025 20:58:30 -0700 Subject: [PATCH 1/3] Require Licence Acceptance when installing tools --- .../dotnet/ToolPackage/ToolPackageDownloader.cs | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/Cli/dotnet/ToolPackage/ToolPackageDownloader.cs b/src/Cli/dotnet/ToolPackage/ToolPackageDownloader.cs index 9b1b244486c8..093075671031 100644 --- a/src/Cli/dotnet/ToolPackage/ToolPackageDownloader.cs +++ b/src/Cli/dotnet/ToolPackage/ToolPackageDownloader.cs @@ -292,7 +292,19 @@ private static async Task DownloadAndExtractPackage( using (FileStream packageStream = File.OpenRead(packagePath)) { PackageArchiveReader reader = new(packageStream); - version = new NuspecReader(reader.GetNuspec()).GetVersion(); + Stream nuspecReader = new NuspecReader(reader.GetNuspec()); + version = nuspecReader.GetVersion(); + bool requireLicenseAcceptance = nuspecReader.GetRequireLicenseAcceptance(); + // If the package requires license acceptance, we need to ask the user to accept it + if (requireLicenseAcceptance) + { + Console.WriteLine($"The package {packageId} requires license acceptance. Please accept the license to continue. [y]"); + if (!Console.ReadKey().Key.Equals(ConsoleKey.Y)) + { + throw new OperationCanceledException($"User did not accept the license for package {packageId}."); + } + } + var packageHash = Convert.ToBase64String(new CryptoHashProvider("SHA512").CalculateHash(reader.GetNuspec())); var hashPath = new VersionFolderPathResolver(packagesRootPath).GetHashPath(packageId.ToString(), version); From 559bdd6562bfa2c22db41c516ea853c090a52e8f Mon Sep 17 00:00:00 2001 From: Eduardo Villalpando Mello Date: Tue, 15 Apr 2025 21:00:20 -0700 Subject: [PATCH 2/3] Update exception type --- src/Cli/dotnet/ToolPackage/ToolPackageDownloader.cs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/Cli/dotnet/ToolPackage/ToolPackageDownloader.cs b/src/Cli/dotnet/ToolPackage/ToolPackageDownloader.cs index 093075671031..234f3ddc6960 100644 --- a/src/Cli/dotnet/ToolPackage/ToolPackageDownloader.cs +++ b/src/Cli/dotnet/ToolPackage/ToolPackageDownloader.cs @@ -2,6 +2,7 @@ // Licensed under the MIT license. See LICENSE file in the project root for full license information. using System.Reflection; +using Microsoft.DotNet.Cli.CommandFactory.CommandResolution; using Microsoft.DotNet.Cli.Extensions; using Microsoft.DotNet.Cli.NuGetPackageDownloader; using Microsoft.DotNet.Cli.Utils; @@ -296,12 +297,13 @@ private static async Task DownloadAndExtractPackage( version = nuspecReader.GetVersion(); bool requireLicenseAcceptance = nuspecReader.GetRequireLicenseAcceptance(); // If the package requires license acceptance, we need to ask the user to accept it + // TODO: Find a better way to handle this if (requireLicenseAcceptance) { Console.WriteLine($"The package {packageId} requires license acceptance. Please accept the license to continue. [y]"); if (!Console.ReadKey().Key.Equals(ConsoleKey.Y)) { - throw new OperationCanceledException($"User did not accept the license for package {packageId}."); + throw new ToolPackageException($"User did not accept the license for package {packageId}."); } } From 0fb2ca3e3b933e0240cf2ec9dd4366ae9bbc1ebc Mon Sep 17 00:00:00 2001 From: Eduardo Villalpando Mello Date: Wed, 16 Apr 2025 09:07:20 -0700 Subject: [PATCH 3/3] Correct data type --- src/Cli/dotnet/ToolPackage/ToolPackageDownloader.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Cli/dotnet/ToolPackage/ToolPackageDownloader.cs b/src/Cli/dotnet/ToolPackage/ToolPackageDownloader.cs index 234f3ddc6960..d1fd028f7a1d 100644 --- a/src/Cli/dotnet/ToolPackage/ToolPackageDownloader.cs +++ b/src/Cli/dotnet/ToolPackage/ToolPackageDownloader.cs @@ -293,7 +293,7 @@ private static async Task DownloadAndExtractPackage( using (FileStream packageStream = File.OpenRead(packagePath)) { PackageArchiveReader reader = new(packageStream); - Stream nuspecReader = new NuspecReader(reader.GetNuspec()); + NuspecReader nuspecReader = new NuspecReader(reader.GetNuspec()); version = nuspecReader.GetVersion(); bool requireLicenseAcceptance = nuspecReader.GetRequireLicenseAcceptance(); // If the package requires license acceptance, we need to ask the user to accept it