Share workflow runtime with diagnostics tool

This commit is contained in:
Meik
2026-03-13 15:14:03 +01:00
parent 55ff17c4b4
commit 4909c93bef
5 changed files with 705 additions and 528 deletions

View File

@@ -435,52 +435,20 @@ namespace LiamWorkflowActivities
return null;
}
var lstSecurityGroups = await ProviderEntry.Provider.getSecurityGroupsAsync(ProviderEntry.Provider.GroupFilter);
if (lstSecurityGroups == null)
var result = await LiamWorkflowRuntime.GetSecurityGroupsFromProviderAsync(ProviderEntry.Provider);
if (!result.Success)
{
SetOperationErrorFromProvider(
ProviderEntry.Provider,
"WF_GET_SECURITYGROUPS_PROVIDER_CALL_FAILED",
"Provider returned null while reading security groups.");
SetOperationError(result.ErrorCode, result.ErrorMessage);
return null;
}
if (lstSecurityGroups.Count == 0)
if (result.SecurityGroups.Count == 0)
{
LogEntry($"No security groups found for Provider config class with ID {ProviderConfigClassID}", LogLevels.Warning);
return new List<SecurityGroupEntry>();
}
var SGs = new List<SecurityGroupEntry>();
foreach (var sg in lstSecurityGroups)
{
var entry = new SecurityGroupEntry
{
DisplayName = sg.TechnicalName,
TechnicalName = sg.UID,
TargetType = ((int)sg.Provider.ProviderType).ToString()
};
switch (sg)
{
case cLiamAdGroup adGroup:
entry.UID = adGroup.dn;
entry.Scope = adGroup.scope;
break;
case cLiamAdGroup2 adGroup:
entry.UID = adGroup.dn;
entry.Scope = adGroup.scope;
break;
case cLiamExchangeSecurityGroup exGroup:
entry.UID = exGroup.dn; // SID der Exchange-Gruppe
//entry.Scope = exGroup.dn; // Distinguished Name der Exchange-Gruppe
break;
}
SGs.Add(entry);
}
return SGs;
return result.SecurityGroups;
}
catch (Exception E)
{
@@ -518,95 +486,22 @@ namespace LiamWorkflowActivities
return null;
}
var lstDataAreas = await ProviderEntry.Provider.getDataAreasAsync(ProviderEntry.Provider.MaxDepth);
if (lstDataAreas == null)
var result = await LiamWorkflowRuntime.GetDataAreasFromProviderAsync(
ProviderEntry.Provider,
ProviderEntry.ObjectID.ToString());
if (!result.Success)
{
SetOperationErrorFromProvider(
ProviderEntry.Provider,
"WF_GET_DATAAREAS_PROVIDER_CALL_FAILED",
"Provider returned null while reading data areas.");
SetOperationError(result.ErrorCode, result.ErrorMessage);
return null;
}
if (lstDataAreas.Count <= 0)
if (result.DataAreas.Count <= 0)
{
LogEntry($"No data areas found for Provider config class with ID {ProviderConfigClassID}", LogLevels.Warning);
return new List<DataAreaEntry>();
}
if (!await EnsureNtfsPermissionGroupsIfConfiguredAsync(ProviderEntry, lstDataAreas))
return null;
return lstDataAreas
.Select(DataArea =>
{
var ntfsPermissionArea = DataArea as cLiamNtfsPermissionDataAreaBase;
var adGrp = DataArea as cLiamAdGroupAsDataArea;
var exchMB = DataArea as cLiamExchangeSharedMailbox;
var exchDL = DataArea as cLiamExchangeDistributionGroup;
// 1) Owner
// - Shared Mailbox: OwnerGroupIdentifier
// - Distribution Group: OwnerGroupIdentifier
// - AD-Group: ManagedBySID
// - NTFS-Folder: OwnerGroupIdentifier
string owner = exchMB?.OwnerGroupIdentifier
?? exchDL?.OwnerGroupIdentifier
?? adGrp?.ManagedBySID
?? ntfsPermissionArea?.OwnerGroupIdentifier
?? string.Empty;
// 2) WriteSID
// - Shared Mailbox: FullAccessGroupSid
// - Distribution Group: MemberGroupSid
// - AD-Group: UID
// - NTFS-Folder: WriteGroupIdentifier
string write = exchMB != null
? exchMB.FullAccessGroupSid
: exchDL != null
? exchDL.MemberGroupSid
: adGrp?.UID
?? ntfsPermissionArea?.WriteGroupIdentifier
?? string.Empty;
// 3) ReadSID
// - Shared Mailbox: SendAsGroupSid
// - Distribution Group: (nicht verwendet)
// - NTFS-Folder: ReadGroupIdentifier
string read = exchMB != null
? exchMB.SendAsGroupSid
: ntfsPermissionArea?.ReadGroupIdentifier
?? string.Empty;
// 4) Traverse nur NTFS-Objekte
string traverse = ntfsPermissionArea?.TraverseGroupIdentifier ?? string.Empty;
// 5) CreatedDate nur NTFS-Objekte
string created = ntfsPermissionArea?.CreatedDate ?? DateTime.MinValue.ToString("o");
// 6) Description: nur AD-Group
string desc = adGrp?.Description ?? string.Empty;
return new DataAreaEntry
{
DisplayName = DataArea.DisplayName ?? string.Empty,
UID = DataArea.UID,
TechnicalName = DataArea.TechnicalName,
Description = desc,
TargetType = ((int)DataArea.Provider.ProviderType).ToString(),
ParentUID = DataArea.ParentUID ?? string.Empty,
Level = DataArea.Level.ToString(),
ConfigurationId = ProviderEntry.ObjectID.ToString(),
DataAreaType = DataArea.DataType.ToString(),
Owner = owner,
Write = write,
Read = read,
Traverse = traverse,
CreatedDate = created,
};
})
.ToList();
return result.DataAreas;
}
catch (Exception E)
{
@@ -620,57 +515,6 @@ namespace LiamWorkflowActivities
}
}
private async Task<bool> EnsureNtfsPermissionGroupsIfConfiguredAsync(ProviderCacheEntry providerEntry, List<cLiamDataAreaBase> dataAreas)
{
if (!(providerEntry?.Provider is cLiamProviderNtfs ntfsProvider))
return true;
if (!IsAdditionalConfigurationEnabled(providerEntry.Provider, "EnsureNtfsPermissionGroups"))
return true;
foreach (var ntfsArea in dataAreas.OfType<cLiamNtfsFolder>())
{
var folderPath = ntfsArea.TechnicalName;
if (string.IsNullOrWhiteSpace(folderPath))
continue;
if (!Directory.Exists(folderPath))
{
LogEntry($"Skipping automatic NTFS permission group ensure for '{folderPath}' because the directory does not exist.", LogLevels.Warning);
continue;
}
var result = await ntfsProvider.EnsureMissingPermissionGroupsAsync(
folderPath,
null,
null,
null,
null,
false);
if (result == null)
{
SetOperationError(
"WF_GET_DATAAREAS_ENSURE_NTFS_GROUPS_FAILED",
$"Automatic NTFS permission group ensure failed for '{folderPath}' because the provider returned no result.");
return false;
}
if (result.resultErrorId != 0)
{
SetOperationError(
"WF_GET_DATAAREAS_ENSURE_NTFS_GROUPS_FAILED",
$"Automatic NTFS permission group ensure failed for '{folderPath}': {result.resultMessage}");
return false;
}
await ntfsArea.ResolvePermissionGroupsAsync(folderPath);
}
return true;
}
private async Task<cLiamDataAreaBase> getDataAreaFromUID(string UID)
{
var CM = MethodBase.GetCurrentMethod();