public void GetAllElements_Empty() { // Arrange var repository = new EphemeralXmlRepository(NullLoggerFactory.Instance); // Act & assert Assert.Empty(repository.GetAllElements()); }
public void Store_Then_Get() { // Arrange var element1 = XElement.Parse(@"<element1 />"); var element2 = XElement.Parse(@"<element1 />"); var element3 = XElement.Parse(@"<element1 />"); var repository = new EphemeralXmlRepository(NullLoggerFactory.Instance); // Act & assert repository.StoreElement(element1, "Invalid friendly name."); // nobody should care about the friendly name repository.StoreElement(element2, "abcdefg"); Assert.Equal(new[] { element1, element2 }, repository.GetAllElements(), XmlAssert.EqualityComparer); repository.StoreElement(element3, null); Assert.Equal(new[] { element1, element2, element3 }, repository.GetAllElements(), XmlAssert.EqualityComparer); }
internal KeyValuePair <IXmlRepository, IXmlEncryptor> GetFallbackKeyRepositoryEncryptorPair() { IXmlRepository repository = null; IXmlEncryptor encryptor = null; // If we're running in Azure Web Sites, the key repository goes in the %HOME% directory. var azureWebSitesKeysFolder = _keyStorageDirectories.GetKeyStorageDirectoryForAzureWebSites(); if (azureWebSitesKeysFolder != null) { _logger.UsingAzureAsKeyRepository(azureWebSitesKeysFolder.FullName); // Cloud DPAPI isn't yet available, so we don't encrypt keys at rest. // This isn't all that different than what Azure Web Sites does today, and we can always add this later. repository = new FileSystemXmlRepository(azureWebSitesKeysFolder, _loggerFactory); } else { // If the user profile is available, store keys in the user profile directory. var localAppDataKeysFolder = _keyStorageDirectories.GetKeyStorageDirectory(); if (localAppDataKeysFolder != null) { if (OSVersionUtil.IsWindows()) { Debug.Assert(RuntimeInformation.IsOSPlatform(OSPlatform.Windows)); // Hint for the platform compatibility analyzer. // If the user profile is available, we can protect using DPAPI. // Probe to see if protecting to local user is available, and use it as the default if so. encryptor = new DpapiXmlEncryptor( protectToLocalMachine: !DpapiSecretSerializerHelper.CanProtectToCurrentUserAccount(), loggerFactory: _loggerFactory); } repository = new FileSystemXmlRepository(localAppDataKeysFolder, _loggerFactory); if (encryptor != null) { _logger.UsingProfileAsKeyRepositoryWithDPAPI(localAppDataKeysFolder.FullName); } else { _logger.UsingProfileAsKeyRepository(localAppDataKeysFolder.FullName); } } else { // Use profile isn't available - can we use the HKLM registry? RegistryKey regKeyStorageKey = null; if (OSVersionUtil.IsWindows()) { Debug.Assert(RuntimeInformation.IsOSPlatform(OSPlatform.Windows)); // Hint for the platform compatibility analyzer. regKeyStorageKey = RegistryXmlRepository.DefaultRegistryKey; } if (regKeyStorageKey != null) { Debug.Assert(RuntimeInformation.IsOSPlatform(OSPlatform.Windows)); // Hint for the platform compatibility analyzer. regKeyStorageKey = RegistryXmlRepository.DefaultRegistryKey; // If the user profile isn't available, we can protect using DPAPI (to machine). encryptor = new DpapiXmlEncryptor(protectToLocalMachine: true, loggerFactory: _loggerFactory); repository = new RegistryXmlRepository(regKeyStorageKey, _loggerFactory); _logger.UsingRegistryAsKeyRepositoryWithDPAPI(regKeyStorageKey.Name); } else { // Final fallback - use an ephemeral repository since we don't know where else to go. // This can only be used for development scenarios. repository = new EphemeralXmlRepository(_loggerFactory); _logger.UsingEphemeralKeyRepository(); } } } return(new KeyValuePair <IXmlRepository, IXmlEncryptor>(repository, encryptor)); }