private void ValidateListArguments(TrustedSignersArgs args) { var isNameProvided = !string.IsNullOrEmpty(args.Name); var isPackagePathProvided = !string.IsNullOrEmpty(args.PackagePath); var isServiceIndexProvided = !string.IsNullOrEmpty(args.ServiceIndex); var isFingerprintProvided = !string.IsNullOrEmpty(args.CertificateFingerprint); var isAlgorithmProvided = !string.IsNullOrEmpty(args.FingerprintAlgorithm); var areOwnersProvided = args.Owners != null && args.Owners.Any(); var isUntrustedRootProvided = args.AllowUntrustedRoot; var isAuthorProvided = args.Author; var isRepositoryProvided = args.Repository; if (isNameProvided || isPackagePathProvided || isServiceIndexProvided || isFingerprintProvided || isAlgorithmProvided || areOwnersProvided || isUntrustedRootProvided || isAuthorProvided || isRepositoryProvided) { throw new CommandLineArgumentCombinationException(string.Format(CultureInfo.CurrentCulture, Strings.Error_CouldNotList, Strings.Error_InvalidCombinationOfArguments)); } }
public async Task <int> ExecuteCommandAsync(TrustedSignersArgs trustedSignersArgs) { var logger = trustedSignersArgs.Logger ?? NullLogger.Instance; var actionsProvider = new TrustedSignerActionsProvider(_trustedSignersProvider, logger); switch (trustedSignersArgs.Action) { case TrustedSignersAction.List: ValidateListArguments(trustedSignersArgs); await ListAllTrustedSignersAsync(logger); break; case TrustedSignersAction.Add: ValidateNameExists(trustedSignersArgs.Name); var isPackagePathProvided = !string.IsNullOrEmpty(trustedSignersArgs.PackagePath); var isServiceIndexProvided = !string.IsNullOrEmpty(trustedSignersArgs.ServiceIndex); var isFingerprintProvided = !string.IsNullOrEmpty(trustedSignersArgs.CertificateFingerprint); var isAlgorithmProvided = !string.IsNullOrEmpty(trustedSignersArgs.FingerprintAlgorithm); if (isPackagePathProvided) { #if IS_DESKTOP if (isServiceIndexProvided || isFingerprintProvided || isAlgorithmProvided) { throw new CommandLineArgumentCombinationException(string.Format(CultureInfo.CurrentCulture, Strings.Error_CouldNotAdd, Strings.Error_InvalidCombinationOfArguments)); } if (!(trustedSignersArgs.Repository ^ trustedSignersArgs.Author)) { throw new CommandLineArgumentCombinationException(string.Format(CultureInfo.CurrentCulture, Strings.Error_NoSignatureTrustedForPackage, trustedSignersArgs.PackagePath)); } var trustTarget = VerificationTarget.None; if (trustedSignersArgs.Author) { if (!trustedSignersArgs.Repository && trustedSignersArgs.Owners != null && trustedSignersArgs.Owners.Any()) { throw new CommandLineArgumentCombinationException(Strings.Error_CannotTrustOwnersForAuthor); } trustTarget |= VerificationTarget.Author; } if (trustedSignersArgs.Repository) { trustTarget |= VerificationTarget.Repository; } if (trustTarget == VerificationTarget.None) { trustTarget = VerificationTarget.Unknown; } var packagesToTrust = LocalFolderUtility.ResolvePackageFromPath(trustedSignersArgs.PackagePath); LocalFolderUtility.EnsurePackageFileExists(trustedSignersArgs.PackagePath, packagesToTrust); foreach (var package in packagesToTrust) { using (var packageReader = new PackageArchiveReader(package)) { await actionsProvider.AddTrustedSignerAsync( trustedSignersArgs.Name, packageReader, trustTarget, trustedSignersArgs.AllowUntrustedRoot, trustedSignersArgs.Owners, CancellationToken.None); } } break; #else throw new NotSupportedException(); #endif } if (isServiceIndexProvided) { if (isFingerprintProvided || isAlgorithmProvided || trustedSignersArgs.Author || trustedSignersArgs.Repository) { throw new ArgumentException(string.Format(CultureInfo.CurrentCulture, Strings.Error_CouldNotAdd, Strings.Error_InvalidCombinationOfArguments)); } var serviceIndex = ValidateAndParseV3ServiceIndexUrl(trustedSignersArgs.ServiceIndex); await actionsProvider.AddTrustedRepositoryAsync( trustedSignersArgs.Name, serviceIndex, trustedSignersArgs.Owners, CancellationToken.None); break; } if (isFingerprintProvided) { if (trustedSignersArgs.Owners != null && trustedSignersArgs.Owners.Any()) { throw new ArgumentException(Strings.Error_CannotTrustOwnersForAuthor); } var hashAlgorithm = ValidateAndParseFingerprintAlgorithm(trustedSignersArgs.FingerprintAlgorithm); actionsProvider.AddOrUpdateTrustedSigner( trustedSignersArgs.Name, trustedSignersArgs.CertificateFingerprint, hashAlgorithm, trustedSignersArgs.AllowUntrustedRoot); break; } if (isAlgorithmProvided || trustedSignersArgs.Author || trustedSignersArgs.Repository) { throw new CommandLineArgumentCombinationException(string.Format(CultureInfo.CurrentCulture, Strings.Error_CouldNotAdd, Strings.Error_InvalidCombinationOfArguments)); } if (_packageSourceProvider == null) { throw new ArgumentException(Strings.Error_NoSourcesInformation); } var packageSource = _packageSourceProvider.GetPackageSourceByName(trustedSignersArgs.Name); if (packageSource == null || string.IsNullOrEmpty(packageSource.Source)) { throw new ArgumentException(string.Format(CultureInfo.CurrentCulture, Strings.Error_UnavailableSource, trustedSignersArgs.Name)); } var sourceServiceIndex = ValidateAndParseV3ServiceIndexUrl(packageSource.Source); await actionsProvider.AddTrustedRepositoryAsync( trustedSignersArgs.Name, sourceServiceIndex, trustedSignersArgs.Owners, CancellationToken.None); break; case TrustedSignersAction.Remove: ValidateRemoveArguments(trustedSignersArgs); await RemoveTrustedSignerAsync(trustedSignersArgs.Name, logger); break; case TrustedSignersAction.Sync: ValidateSyncArguments(trustedSignersArgs); await actionsProvider.SyncTrustedRepositoryAsync(trustedSignersArgs.Name, CancellationToken.None); break; } return(SuccessCode); }