From a2c74cbdd9b61fcef246a653a5520bb2d69525fc Mon Sep 17 00:00:00 2001 From: Developer 02 Date: Thu, 6 Mar 2025 16:48:47 +0100 Subject: [PATCH] =?UTF-8?q?feat:=20Refaktorierung=20von=20ClientEvents=20z?= =?UTF-8?q?ur=20Verwendung=20eines=20Delegaten=20f=C3=BCr=20=C3=B6ffentlic?= =?UTF-8?q?he=20Schl=C3=BCsselaktualisierungen=20-=20Ersetzt=20`Action`=20durch=20den=20`Client?= =?UTF-8?q?Event`-Delegaten=20f=C3=BCr=20eine=20bessere=20Struktur.=20-=20?= =?UTF-8?q?`ClientEvent`-Delegaten=20mit=20`AuthClient`-Referenz=20eingef?= =?UTF-8?q?=C3=BChrt,=20um=20=C3=B6ffentliche=20Schl=C3=BCssel=20direkt=20?= =?UTF-8?q?zu=20aktualisieren.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DigitalData.Auth.Client/AuthClient.cs | 2 +- DigitalData.Auth.Client/ClientEvents.cs | 20 ++++++++++++++------ DigitalData.Auth.Client/ClientParams.cs | 6 +++++- 3 files changed, 20 insertions(+), 8 deletions(-) diff --git a/DigitalData.Auth.Client/AuthClient.cs b/DigitalData.Auth.Client/AuthClient.cs index 6234274..f9b2ac6 100644 --- a/DigitalData.Auth.Client/AuthClient.cs +++ b/DigitalData.Auth.Client/AuthClient.cs @@ -57,7 +57,7 @@ public class AuthClient : IAuthClient, IAsyncDisposable } } - public Task ReceivePublicKeyAsync(string issuer, string audience, string message) => Task.Run(() => _params.Events.OnMessageReceived(issuer, audience, message, _logger)); + public Task ReceivePublicKeyAsync(string issuer, string audience, string message) => Task.Run(() => _params.TriggerOnMessageReceived(this, issuer, audience, message, _logger)); public Task SendPublicKeyAsync(string issuer, string audience, string message) => _connection.InvokeAsync(nameof(SendPublicKeyAsync), issuer, audience, message); diff --git a/DigitalData.Auth.Client/ClientEvents.cs b/DigitalData.Auth.Client/ClientEvents.cs index 8b9bc8a..3b7c721 100644 --- a/DigitalData.Auth.Client/ClientEvents.cs +++ b/DigitalData.Auth.Client/ClientEvents.cs @@ -1,10 +1,18 @@ -using Microsoft.Extensions.Logging; +using DigitalData.Core.Abstractions.Security; +using Microsoft.Extensions.Logging; -namespace DigitalData.Auth.Client +namespace DigitalData.Auth.Client; + +public delegate void ClientEvent(AuthClient client, string issuer, string audience, string content, ILogger? logger = null); + +public static class ClientEvents { - public class ClientEvents + public static readonly ClientEvent UpdatePublicKeys = (client, issuer, audience, content, logger) => { - public Action OnMessageReceived { get; set; } = (issuer, audience, key, logger) - => logger?.LogInformation("Public key value has been updated. Issuer: {Issuer}, Audience: {Audience}, New Key: {Key}", issuer, audience, key); - } + if(client.PublicKeys.TryGet(issuer, audience, out var publicKey)) + publicKey.Content = 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); + }; } \ No newline at end of file diff --git a/DigitalData.Auth.Client/ClientParams.cs b/DigitalData.Auth.Client/ClientParams.cs index a58a64a..18aff1d 100644 --- a/DigitalData.Auth.Client/ClientParams.cs +++ b/DigitalData.Auth.Client/ClientParams.cs @@ -1,5 +1,6 @@ using DigitalData.Auth.Client; using Microsoft.AspNetCore.SignalR.Client; +using Microsoft.Extensions.Logging; namespace DigitalData.Auth.Client; @@ -24,7 +25,10 @@ public class ClientParams /// public TimeSpan? RetryDelay { get; set; } - public readonly ClientEvents Events = new(); + public ClientEvent OnMessageReceived = delegate { }; + + internal void TriggerOnMessageReceived(AuthClient client, string issuer, string audience, string key, ILogger? logger = null) + => OnMessageReceived(client, issuer, audience, key, logger); public ClientParams() {