/// <summary> /// Process input /// </summary> protected override void ProcessRecord() { if (!ShouldProcess(Name, VerbsLifecycle.Unregister)) { return; } string vaultName; switch (ParameterSetName) { case NameParameterSet: vaultName = Name; break; case SecretsVaultParameterSet: vaultName = SecretsVault.Name; break; default: Dbg.Assert(false, "Invalid parameter set"); vaultName = string.Empty; break; } if (vaultName.Equals(RegisterSecretsVaultCommand.BuiltInLocalVault, StringComparison.OrdinalIgnoreCase)) { var msg = string.Format(CultureInfo.InvariantCulture, "The {0} vault cannot be removed.", RegisterSecretsVaultCommand.BuiltInLocalVault); WriteError( new ErrorRecord( new PSArgumentException(msg), "RegisterSecretsVaultInvalidVaultName", ErrorCategory.InvalidArgument, this)); return; } var removedVaultInfo = RegisteredVaultCache.Remove(vaultName); if (removedVaultInfo == null) { var msg = string.Format(CultureInfo.InvariantCulture, "Unable to find secrets vault {0} to unregister it.", vaultName); WriteError( new ErrorRecord( new ItemNotFoundException(msg), "UnregisterSecretsVaultObjectNotFound", ErrorCategory.ObjectNotFound, this)); return; } // Remove any parameter secrets from built-in local store. RemoveParamSecrets(removedVaultInfo, ExtensionVaultModule.VaultParametersStr); }
protected override void EndProcessing() { var vaultInfo = new Hashtable(); // Validate mandatory parameters. var vaultItems = RegisteredVaultCache.GetAll(); if (vaultItems.ContainsKey(Name)) { ThrowTerminatingError( new ErrorRecord( new InvalidOperationException("Provided Name for vault is already being used."), "RegisterSecretsVaultInvalidVaultName", ErrorCategory.InvalidArgument, this)); } if (!ShouldProcess(Name, VerbsLifecycle.Register)) { return; } var moduleInfo = GetModuleInfo(ModuleName); if (moduleInfo == null) { var msg = string.Format(CultureInfo.InvariantCulture, "Could not load and retrieve module information for module: {0}.", ModuleName); ThrowTerminatingError( new ErrorRecord( new PSInvalidOperationException(msg), "RegisterSecretsVaultCantGetModuleInfo", ErrorCategory.InvalidOperation, this)); } var modulePath = moduleInfo.Path; var dirPath = System.IO.File.Exists(modulePath) ? System.IO.Path.GetDirectoryName(modulePath) : modulePath; // Check module required modules for implementing type of SecretsManagementExtension class. Type implementingType = GetImplementingTypeFromRequiredAssemblies(moduleInfo); // Check if module supports implementing functions. var haveScriptFunctionImplementation = CheckForImplementingModule( dirPath: dirPath, error: out Exception error); if (implementingType == null && !haveScriptFunctionImplementation) { var invalidException = new PSInvalidOperationException( message: "Could not find a SecretsManagementExtension implementing type, or a valid implementing script module.", innerException: error); ThrowTerminatingError( new ErrorRecord( invalidException, "RegisterSecretsVaultCantFindImplementingTypeOrScriptModule", ErrorCategory.ObjectNotFound, this)); } vaultInfo.Add(ExtensionVaultModule.ModulePathStr, dirPath); vaultInfo.Add(ExtensionVaultModule.ModuleNameStr, moduleInfo.Name); vaultInfo.Add( key: ExtensionVaultModule.ImplementingTypeStr, value: new Hashtable() { { "AssemblyName", implementingType != null ? implementingType.Assembly.GetName().Name : string.Empty }, { "TypeName", implementingType != null ? implementingType.FullName: string.Empty } }); vaultInfo.Add( key: ExtensionVaultModule.ImplementingFunctionsStr, value: haveScriptFunctionImplementation); // Store the optional secret parameters StoreVaultParameters( vaultInfo: vaultInfo, vaultName: Name, parameters: VaultParameters); // Register new secret vault information. RegisteredVaultCache.Add( keyName: Name, vaultInfo: vaultInfo); }