From 85a047467e5575498360a00c66410034991b877a Mon Sep 17 00:00:00 2001 From: Developer 02 Date: Fri, 7 Mar 2025 15:21:31 +0100 Subject: [PATCH] =?UTF-8?q?refactor:=20AsymmetricPublicKey=20durch=20Clien?= =?UTF-8?q?tPublicKey=20ersetzt=20und=20RSA-Schl=C3=BCsselverwaltung=20ver?= =?UTF-8?q?bessert=20-=20`AsymmetricPublicKey`=20in=20`ClientPublicKey`=20?= =?UTF-8?q?umbenannt=20-=20`ClientPublicKey`=20von=20`RSAKeyBase`=20abgele?= =?UTF-8?q?itet=20f=C3=BCr=20RSA-Funktionalit=C3=A4t=20-=20Dynamischen=20P?= =?UTF-8?q?EM-Import=20in=20`UpdateContent`=20hinzugef=C3=BCgt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AsymmetricPublicKey.cs | 14 -------- DigitalData.Auth.Client/AuthClient.cs | 2 +- DigitalData.Auth.Client/ClientEvents.cs | 2 +- DigitalData.Auth.Client/ClientParams.cs | 2 +- DigitalData.Auth.Client/ClientPublicKey.cs | 34 +++++++++++++++++++ .../DigitalData.Auth.Client.csproj | 1 + .../Client/AuthClientTests.cs | 4 +-- 7 files changed, 40 insertions(+), 19 deletions(-) delete mode 100644 DigitalData.Auth.Client/AsymmetricPublicKey.cs create mode 100644 DigitalData.Auth.Client/ClientPublicKey.cs diff --git a/DigitalData.Auth.Client/AsymmetricPublicKey.cs b/DigitalData.Auth.Client/AsymmetricPublicKey.cs deleted file mode 100644 index 477a459..0000000 --- a/DigitalData.Auth.Client/AsymmetricPublicKey.cs +++ /dev/null @@ -1,14 +0,0 @@ -using DigitalData.Core.Abstractions.Security; - -namespace DigitalData.Auth.Client; - -public class AsymmetricPublicKey : IUniqueSecurityContext, IAsymmetricPublicKey -{ - public required string Issuer { get; init; } - - public required string Audience { get; init; } - - public string? Id { get; init; } - - public string Content { get; internal set; } = string.Empty; -} diff --git a/DigitalData.Auth.Client/AuthClient.cs b/DigitalData.Auth.Client/AuthClient.cs index f6303f2..49e4501 100644 --- a/DigitalData.Auth.Client/AuthClient.cs +++ b/DigitalData.Auth.Client/AuthClient.cs @@ -34,7 +34,7 @@ public class AuthClient : IAuthClient, IAsyncDisposable public bool IsConnected { get; private set; } = false; - public IEnumerable PublicKeys => _params.PublicKeys; + public IEnumerable PublicKeys => _params.PublicKeys; public async Task StartAsync() { diff --git a/DigitalData.Auth.Client/ClientEvents.cs b/DigitalData.Auth.Client/ClientEvents.cs index 3b7c721..0529f3d 100644 --- a/DigitalData.Auth.Client/ClientEvents.cs +++ b/DigitalData.Auth.Client/ClientEvents.cs @@ -10,7 +10,7 @@ public static class ClientEvents public static readonly ClientEvent UpdatePublicKeys = (client, issuer, audience, content, logger) => { if(client.PublicKeys.TryGet(issuer, audience, out var publicKey)) - publicKey.Content = content; + publicKey.UpdateContent(content); else logger?.LogWarning( "Failed to update public key: No matching key found. Issuer: {Issuer}, Audience: {Audience}. Ensure the key exists before attempting an update.", issuer, audience); diff --git a/DigitalData.Auth.Client/ClientParams.cs b/DigitalData.Auth.Client/ClientParams.cs index 82c11e6..6027f3c 100644 --- a/DigitalData.Auth.Client/ClientParams.cs +++ b/DigitalData.Auth.Client/ClientParams.cs @@ -41,5 +41,5 @@ public class ClientParams }); } - public List PublicKeys { get; set; } = new(); + public List PublicKeys { get; set; } = new(); } \ No newline at end of file diff --git a/DigitalData.Auth.Client/ClientPublicKey.cs b/DigitalData.Auth.Client/ClientPublicKey.cs new file mode 100644 index 0000000..6b3c3a1 --- /dev/null +++ b/DigitalData.Auth.Client/ClientPublicKey.cs @@ -0,0 +1,34 @@ +using DigitalData.Core.Abstractions.Security; +using DigitalData.Core.Security.RSAKey; + +namespace DigitalData.Auth.Client; + +/// +/// Represents a public RSA key, allowing dynamic updates and PEM import functionality. +/// +public class ClientPublicKey : RSAKeyBase, IAsymmetricPublicKey, IAsymmetricKey, IUniqueSecurityContext +{ + public required string Issuer { get; init; } + + public required string Audience { get; init; } + + private string _content = string.Empty; + + public override string Content + { + get + { + return _content; + } + init + { + UpdateContent(value); + } + } + + public void UpdateContent(string content) + { + _content = content; + RSA.ImportFromPem(content); + } +} diff --git a/DigitalData.Auth.Client/DigitalData.Auth.Client.csproj b/DigitalData.Auth.Client/DigitalData.Auth.Client.csproj index dc9824f..d15750e 100644 --- a/DigitalData.Auth.Client/DigitalData.Auth.Client.csproj +++ b/DigitalData.Auth.Client/DigitalData.Auth.Client.csproj @@ -27,6 +27,7 @@ + diff --git a/DigitalData.Auth.Tests/Client/AuthClientTests.cs b/DigitalData.Auth.Tests/Client/AuthClientTests.cs index 54f1d03..c2b784d 100644 --- a/DigitalData.Auth.Tests/Client/AuthClientTests.cs +++ b/DigitalData.Auth.Tests/Client/AuthClientTests.cs @@ -206,7 +206,7 @@ public class AuthClientTests public async Task StartAsync_ShouldUpdateAllPublicKey() { // Arrange - var publicKey = new AsymmetricPublicKey() { Issuer = "Foo", Audience = "Bar" }; + var publicKey = new ClientPublicKey() { Issuer = "Foo", Audience = "Bar" }; var provider = Build(opt => { opt.Url = _hubUrl; @@ -229,7 +229,7 @@ public class AuthClientTests public async Task Reconnected_ShouldUpdateAllPublicKey() { // Arrange - var publicKey = new AsymmetricPublicKey() { Issuer = "Foo", Audience = "Bar" }; + var publicKey = new ClientPublicKey() { Issuer = "Foo", Audience = "Bar" }; var provider = Build(opt => { opt.Url = _hubUrl;