Share workflow runtime with diagnostics tool
This commit is contained in:
@@ -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) Write‑SID
|
||||
// - 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) Read‑SID
|
||||
// - 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();
|
||||
|
||||
Reference in New Issue
Block a user