internal Test( ITrustedSignersProvider provider, IPackageSourceProvider sources, TrustedSignersArgs args, TestDirectory directory, TestLogger logger) { Args = args; Directory = directory; Runner = new TrustedSignersCommandRunner(provider, sources); Logger = logger; }
public override async Task ExecuteCommandAsync() { var actionString = Arguments.FirstOrDefault(); TrustedSignersAction action; if (string.IsNullOrEmpty(actionString)) { action = TrustedSignersAction.List; } else if (!Enum.TryParse(actionString, ignoreCase: true, result: out action)) { throw new CommandLineArgumentCombinationException(string.Format(CultureInfo.CurrentCulture, NuGetResources.Error_UnknownAction, actionString)); } string packagePath = null; if (Arguments.Count() > 1) { packagePath = Arguments[1]; } var trustedSignersProvider = new TrustedSignersProvider(Settings); var trustedSignersArgs = new TrustedSignersArgs() { Action = action, PackagePath = packagePath, Name = Name, ServiceIndex = ServiceIndex, CertificateFingerprint = CertificateFingerprint, FingerprintAlgorithm = FingerprintAlgorithm, AllowUntrustedRoot = AllowUntrustedRoot, Author = Author, Repository = Repository, Owners = Owners, Logger = Console }; if (TrustedSignersCommandRunner == null) { TrustedSignersCommandRunner = new TrustedSignersCommandRunner(trustedSignersProvider, SourceProvider); } var result = await TrustedSignersCommandRunner.ExecuteCommandAsync(trustedSignersArgs); if (result > 0) { throw new ExitCodeException(1); } }
internal static Test Create( TrustedSignersAction action, ITrustedSignersProvider trustedSignersProvider, IPackageSourceProvider sourcesProvider = null) { var directory = TestDirectory.Create(); var logger = new TestLogger(); var args = new TrustedSignersArgs() { Action = action, Logger = logger, }; return(new Test(trustedSignersProvider, sourcesProvider, args, directory, logger)); }
private static async Task <int> ExecuteCommand(TrustCommand action, CommandOption algorithm, bool allowUntrustedRootOption, CommandOption owners, CommandOption verbosity, CommandOption configFile, Func <ILogger> getLogger, Action <LogLevel> setLogLevel, string name = null, string sourceUrl = null, string packagePath = null, string fingerprint = null) { ILogger logger = getLogger(); try { ISettings settings = XPlatUtility.ProcessConfigFile(configFile.Value()); var trustedSignersArgs = new TrustedSignersArgs() { Action = MapTrustEnumAction(action), PackagePath = packagePath, Name = name, ServiceIndex = sourceUrl, CertificateFingerprint = fingerprint, FingerprintAlgorithm = algorithm?.Value(), AllowUntrustedRoot = allowUntrustedRootOption, Author = action == TrustCommand.Author, Repository = action == TrustCommand.Repository, Owners = CommandLineUtility.SplitAndJoinAcrossMultipleValues(owners?.Values), Logger = logger }; setLogLevel(XPlatUtility.MSBuildVerbosityToNuGetLogLevel(verbosity.Value())); // Add is the only action which does certificate chain building. if (trustedSignersArgs.Action == TrustedSignersAction.Add) { X509TrustStore.InitializeForDotNetSdk(logger); } #pragma warning disable CS0618 // Type or member is obsolete var sourceProvider = new PackageSourceProvider(settings, enablePackageSourcesChangedEvent: false); #pragma warning restore CS0618 // Type or member is obsolete var trustedSignersProvider = new TrustedSignersProvider(settings); var runner = new TrustedSignersCommandRunner(trustedSignersProvider, sourceProvider); Task <int> trustedSignTask = runner.ExecuteCommandAsync(trustedSignersArgs); return(await trustedSignTask); } catch (InvalidOperationException e) { // nuget trust command handled exceptions. if (!string.IsNullOrWhiteSpace(name)) { var error_TrustedSignerAlreadyExistsMessage = string.Format(CultureInfo.CurrentCulture, Strings.Error_TrustedSignerAlreadyExists, name); if (e.Message == error_TrustedSignerAlreadyExistsMessage) { logger.LogError(error_TrustedSignerAlreadyExistsMessage); return(1); } } if (!string.IsNullOrWhiteSpace(sourceUrl)) { var error_TrustedRepoAlreadyExists = string.Format(CultureInfo.CurrentCulture, Strings.Error_TrustedRepoAlreadyExists, sourceUrl); if (e.Message == error_TrustedRepoAlreadyExists) { logger.LogError(error_TrustedRepoAlreadyExists); return(1); } } throw; } catch (ArgumentException e) { if (e.Data is System.Collections.IDictionary) { logger.LogError(string.Format(CultureInfo.CurrentCulture, Strings.Error_TrustFingerPrintAlreadyExist)); return(1); } throw; } }
internal static void Register(CommandLineApplication app, Func <ILogger> getLogger, Action <LogLevel> setLogLevel) { app.Command("trust", trustedSignersCmd => { CommandArgument command = trustedSignersCmd.Argument( "<command>", Strings.TrustCommandActionDescription, multipleValues: true); CommandOption algorithm = trustedSignersCmd.Option( "--algorithm", Strings.TrustCommandAlgorithm, CommandOptionType.SingleValue); CommandOption allowUntrustedRootOption = trustedSignersCmd.Option( "--allow-untrusted-root", Strings.TrustCommandAllowUntrustedRoot, CommandOptionType.NoValue); CommandOption owners = trustedSignersCmd.Option( "--owners", Strings.TrustCommandOwners, CommandOptionType.MultipleValue); CommandOption verbosity = trustedSignersCmd.Option( "-v|--verbosity", Strings.Verbosity_Description, CommandOptionType.SingleValue); CommandOption configFile = trustedSignersCmd.Option( "--configfile", Strings.Option_ConfigFile, CommandOptionType.SingleValue); trustedSignersCmd.HelpOption(XPlatUtility.HelpOption); trustedSignersCmd.Description = Strings.TrustCommandDescription; trustedSignersCmd.OnExecute(async() => { TrustCommand action; if (!command.Values.Any() || string.IsNullOrEmpty(command.Values[0])) { action = TrustCommand.List; } else if (!Enum.TryParse(command.Values[0], ignoreCase: true, result: out action)) { throw new CommandLineArgumentCombinationException(string.Format(CultureInfo.CurrentCulture, Strings.Error_UnknownAction, command.Values[0])); } string name = null; if (command.Values.Count > 1) { name = command.Values[1]; } string packagePath = null; string sourceUrl = null; string fingerprint = null; if (command.Values.Count() > 2) { if (action == TrustCommand.Author || action == TrustCommand.Repository) { packagePath = command.Values[2]; } else if (action == TrustCommand.Source) { sourceUrl = command.Values[2]; } else if (action == TrustCommand.Certificate) { fingerprint = command.Values[2]; } } ISettings settings = ProcessConfigFile(configFile.Value()); var trustedSignersArgs = new TrustedSignersArgs() { Action = MapTrustEnumAction(action), PackagePath = packagePath, Name = name, ServiceIndex = sourceUrl, CertificateFingerprint = fingerprint, FingerprintAlgorithm = algorithm.Value(), AllowUntrustedRoot = allowUntrustedRootOption.HasValue(), Author = action == TrustCommand.Author, Repository = action == TrustCommand.Repository, Owners = CommandLineUtility.SplitAndJoinAcrossMultipleValues(owners.Values), Logger = getLogger() }; setLogLevel(XPlatUtility.MSBuildVerbosityToNuGetLogLevel(verbosity.Value())); #pragma warning disable CS0618 // Type or member is obsolete var sourceProvider = new PackageSourceProvider(settings, enablePackageSourcesChangedEvent: false); #pragma warning restore CS0618 // Type or member is obsolete var trustedSignersProvider = new TrustedSignersProvider(settings); var runner = new TrustedSignersCommandRunner(trustedSignersProvider, sourceProvider); Task <int> trustedSignTask = runner.ExecuteCommandAsync(trustedSignersArgs); return(await trustedSignTask); }); }); }