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 System.Collections.Concurrent;
|
||||
using System.Security.Cryptography;
|
||||
|
||||
namespace DigitalData.Core.Security.Extensions
|
||||
@ -40,5 +41,55 @@ namespace DigitalData.Core.Security.Extensions
|
||||
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