using dy.net.model.entity; using dy.net.service; using dy.net.Tests.TestInfrastructure; using Microsoft.AspNetCore.DataProtection; namespace dy.net.Tests; public class DataProtectionPersistenceTests { [Fact] public async Task WebDavPassword_DecryptsAfterProviderReconstructionFromPersistentKeys() { using var temporaryDirectory = new TemporaryDirectory(); var keyDirectory = new DirectoryInfo(Path.Combine(temporaryDirectory.Path, "keys")); const string password = "ζŒδΉ…εŒ–-password-123"; var firstProvider = CreateProvider(keyDirectory); var protectedPassword = firstProvider .CreateProtector("dysync.webdav.password.v1") .Protect(password); var reconstructedProvider = CreateProvider(keyDirectory); var service = new WebDavSettingsService(null, reconstructedProvider); var decrypted = await service.GetPasswordAsync(new WebDavSettings { ProtectedPassword = protectedPassword }); Assert.Equal(password, decrypted); } private static IDataProtectionProvider CreateProvider(DirectoryInfo directory) => DataProtectionProvider.Create(directory, builder => builder.SetApplicationName("dysync.net")); }