feat(RSAExtensions): Methoden zum Speichern von IRSACryptographer.Pem erstellt.

This commit is contained in:
Developer 02 2024-11-20 10:32:25 +01:00
parent 683b95c205
commit 0e0513e640

View File

@ -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);
}
}