35 lines
1.2 KiB
C#
35 lines
1.2 KiB
C#
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"));
|
|
}
|