From 452cc6345cc2142a3b7cf7d3b79c73f0b9fa3f6a Mon Sep 17 00:00:00 2001 From: Developer 02 Date: Sun, 3 Aug 2025 08:53:23 +0200 Subject: [PATCH] feat(DirectorySearchQuery): Implementierung von DirectorySearchQueryHandler mit Eigenschaftsfilterung und Ergebnissammlung MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Aktualisierung von DirectorySearchQuery, um Eigenschaften zu akzeptieren und IEnumerable zurückzugeben - Implementierung von DirectorySearchQueryHandler, um die Suche mit benutzerdefinierten Filtern, Bereichen und Eigenschaftsauswahl auszuführen - Hinzufügen einer Logik, um nur angeforderte Eigenschaften zu laden, wenn diese angegeben sind - Ersetzen von NotImplementedException durch die tatsächliche DirectorySearcher-Logik --- .../DirectorySearchQuery.cs | 27 ++++++++++++++++--- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/src/DigitalData.ActiveDirectory/DirectorySearchQuery.cs b/src/DigitalData.ActiveDirectory/DirectorySearchQuery.cs index 7c765a0..94ca49e 100644 --- a/src/DigitalData.ActiveDirectory/DirectorySearchQuery.cs +++ b/src/DigitalData.ActiveDirectory/DirectorySearchQuery.cs @@ -4,13 +4,14 @@ using System.DirectoryServices; namespace DigitalData.ActiveDirectory; -public record DirectorySearchQuery(string? Filter = null, SearchScope Scope = SearchScope.Subtree, int SizeLimit = 5000) : IRequest +public record DirectorySearchQuery(string? Filter = null, SearchScope Scope = SearchScope.Subtree, int SizeLimit = 5000, params string[] properties) + : IRequest> { public Action? Options { get; set; } } [System.Diagnostics.CodeAnalysis.SuppressMessage("Interoperability", "CA1416:Validate platform compatibility", Justification = "")] -public class DirectorySearchQueryHandler(IOptions options) : IRequestHandler +public class DirectorySearchQueryHandler(IOptions options) : IRequestHandler> { public DirectoryEntry DirectoryEntry => new () @@ -20,8 +21,26 @@ public class DirectorySearchQueryHandler(IOptions option Password = options.Value.Password }; - public Task Handle(DirectorySearchQuery request, CancellationToken cancellationToken) + public Task> Handle(DirectorySearchQuery request, CancellationToken cancellationToken = default) { - throw new NotImplementedException(); + return Task.Run(() => + { + using var _dirEntry = DirectoryEntry; + using var searcher = new DirectorySearcher() + { + Filter = request.Filter, + SearchScope = request.Scope, + SizeLimit = request.SizeLimit, + SearchRoot = _dirEntry + }; + + request.Options?.Invoke(searcher); + + if (request.properties.Length > 0) + searcher.PropertiesToLoad.Clear(); + + searcher.PropertiesToLoad.AddRange([.. request.properties.Where(p => p is not null)]); + return searcher.FindAll().Cast().Select(r => r.Properties); + }); } } \ No newline at end of file