feat(RSAExtensions): Methoden zum Speichern von IRSACryptographer.Pem erstellt.
This commit is contained in:
parent
683b95c205
commit
0e0513e640
@ -1,4 +1,5 @@
|
|||||||
using DigitalData.Core.Abstractions.Security;
|
using DigitalData.Core.Abstractions.Security;
|
||||||
|
using System.Collections.Concurrent;
|
||||||
using System.Security.Cryptography;
|
using System.Security.Cryptography;
|
||||||
|
|
||||||
namespace DigitalData.Core.Security.Extensions
|
namespace DigitalData.Core.Security.Extensions
|
||||||
@ -40,5 +41,55 @@ namespace DigitalData.Core.Security.Extensions
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static string CreatePath(string key, string? directory = null)
|
||||||
|
{
|
||||||
|
directory ??= Environment.CurrentDirectory;
|
||||||
|
|
||||||
|
if (!Directory.Exists(directory))
|
||||||
|
{
|
||||||
|
Directory.CreateDirectory(directory);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Path.Combine(directory, $"{key}.pem");
|
||||||
|
}
|
||||||
|
|
||||||
|
private static readonly ConcurrentDictionary<string, SemaphoreSlim> FileLocks = new();
|
||||||
|
|
||||||
|
public static void SavePem(this IRSACryptographer decryptor, string key, string? directory = null)
|
||||||
|
{
|
||||||
|
var filePath = CreatePath(key : key, directory : directory);
|
||||||
|
var fileLock = FileLocks.GetOrAdd(filePath, _ => new (1, 1));
|
||||||
|
fileLock.Wait();
|
||||||
|
try
|
||||||
|
{
|
||||||
|
File.WriteAllText(filePath, decryptor.Pem);
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
fileLock.Release();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static async Task SavePemAsync(this IRSACryptographer decryptor, string key, string? directory = null)
|
||||||
|
{
|
||||||
|
var filePath = CreatePath(key: key, directory: directory);
|
||||||
|
var fileLock = FileLocks.GetOrAdd(filePath, _ => new (1, 1));
|
||||||
|
await fileLock.WaitAsync();
|
||||||
|
try
|
||||||
|
{
|
||||||
|
await File.WriteAllTextAsync(filePath, decryptor.Pem);
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
fileLock.Release();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void SavePem(this IRSACryptographer decryptor, string issuer, string audience, string? directory = null)
|
||||||
|
=> decryptor.SavePem($"{issuer}:{audience}", directory);
|
||||||
|
|
||||||
|
public static async Task SavePemAsync(this IRSACryptographer decryptor, string issuer, string audience, string? directory = null)
|
||||||
|
=> await decryptor.SavePemAsync($"{issuer}:{audience}", directory);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user