예제 #1
0
        /// <summary>
        /// Creates the vault management instance based on provided Vaults Config dictionary
        /// </summary>
        /// <param name="vaultsConfig">Vaults Config dictionary</param>
        /// <param name="accessType">ReadOnly or ReadWrite</param>
        /// <param name="vaultNames">Single or Dual</param>
        public Vault(VaultsConfig vaultsConfig, VaultAccessTypeEnum accessType, params string[] vaultNames)
        {
            Guard.ArgumentNotNull(vaultsConfig, nameof(vaultsConfig));
            Guard.ArgumentCollectionNotEmpty(vaultNames, nameof(vaultNames));
            VaultsConfig = vaultsConfig;
            VaultNames   = (from v in vaultNames where !string.IsNullOrEmpty(v) select v).ToArray();
            switch (VaultNames.Length)
            {
            case 1:
                _keyVaultClients = new KeyVaultClientEx[1]
                {
                    CreateKeyVaultClientEx(accessType, VaultNames[0]),
                };
                break;

            case 2:
                string primaryVaultName   = VaultNames[0];
                string secondaryVaultName = VaultNames[1];
                if (0 == string.Compare(primaryVaultName, secondaryVaultName, true))
                {
                    throw new ArgumentException($"Primary vault name {primaryVaultName} is equal to secondary vault name {secondaryVaultName}");
                }
                _keyVaultClients = new KeyVaultClientEx[2]
                {
                    CreateKeyVaultClientEx(accessType, primaryVaultName),
                    CreateKeyVaultClientEx(accessType, secondaryVaultName),
                };
                break;

            default:
                throw new ArgumentException($"Vault names length must be 1 or 2 only", nameof(VaultNames));
            }
        }