Files
LIAM/LiamTestTeams/NodesLiam.cs
Meik 3d4f60d83e chore: sync LIAM solution snapshot incl. diagnostics tooling
- update multiple LIAM projects and solution/config files

- add LiamWorkflowDiagnostics app sources and generated outputs

- include current workspace state (dependencies and build outputs)
2026-02-27 09:12:34 +01:00

485 lines
13 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using C4IT.LIAM;
using C4IT.Logging;
using static C4IT.Logging.cLogManager;
namespace LiamTestTeams
{
public class TreeNodeLiamRoot : TreeNodeRoot
{
public cLiamProviderBase ProviderBase;
public TreeNodeLiamRoot(cLiamProviderData Provider) : base(Provider)
{
}
public bool Load()
{
var CM = MethodBase.GetCurrentMethod();
LogMethodBegin(CM);
try
{
var LiamCfg = new cLiamConfiguration();
ProviderBase = cLiamProviderBase.CreateInstance(LiamCfg, Provider);
return ProviderBase != null;
}
catch (Exception E)
{
LogException(E);
return false;
}
finally
{
LogMethodEnd(CM);
}
}
public override async Task<bool> LogonAsync()
{
var CM = MethodBase.GetCurrentMethod();
LogMethodBegin(CM);
try
{
if (ProviderBase == null)
if (!Load())
return false;
var RetVal = await ProviderBase.LogonAsync();
return RetVal;
}
catch (Exception E)
{
LogException(E);
return false;
}
finally
{
LogMethodEnd(CM);
}
}
public override async Task<List<TreeNodeBase>> ResolveAsync(bool ResolveAlways = false)
{
var CM = MethodBase.GetCurrentMethod();
LogMethodBegin(CM);
try
{
var lstLiamNodes = await ProviderBase.getDataAreasAsync(0);
if (lstLiamNodes == null)
return null;
var RetVal = new List<TreeNodeBase>();
foreach (var Entry in lstLiamNodes)
{
var Node = new TreeNodeLiamNode(Entry);
RetVal.Add(Node);
}
return RetVal;
}
catch (Exception E)
{
LogException(E);
return null;
}
finally
{
LogMethodEnd(CM);
}
}
}
public class TreeNodeLiamNode : TreeNodeBase
{
public cLiamDataAreaBase DataArea;
private bool privIsResolved = false;
private List<cLiamUserInfo> Owners = null;
public TreeNodeLiamNode(cLiamDataAreaBase DataArea)
{
this.DataArea = DataArea;
}
public override string ToString()
{
return DataArea?.TechnicalName ?? "";
}
public override int ImageIndex()
{
if (DataArea == null)
return iconIndexUnknown;
switch (DataArea.DataType)
{
case eLiamDataAreaTypes.MsTeamsTeam:
return 0;
case eLiamDataAreaTypes.MsTeamsChannel:
return 1;
case eLiamDataAreaTypes.MsTeamsFolder:
return 3;
default:
return iconIndexUnknown;
}
}
public override bool IsResolved()
{
return privIsResolved;
}
public override async Task<List<TreeNodeBase>> ResolveAsync(bool ResolveAlways = false)
{
if (DataArea == null)
return null;
Owners = await DataArea.GetOwnersAsync();
var Children = await DataArea.getChildrenAsync(0);
if (Children == null)
return null;
var RetVal = new List<TreeNodeBase>();
if (DataArea.SupportsPermissions)
RetVal.Add(new TreeNodeLiamPermissionList(DataArea));
foreach (var Entry in Children)
{
var Node = new TreeNodeLiamNode(Entry);
RetVal.Add(Node);
}
privIsResolved = true;
return RetVal;
}
public override string GetInfoText()
{
var RetVal = $"Technical name: {DataArea?.TechnicalName}";
RetVal += $"\r\n\r\nData type: {DataArea?.DataType}";
RetVal += $"\r\nUID: {DataArea?.UID}";
RetVal += $"\r\nParent UID: {DataArea?.ParentUID}";
RetVal += $"\r\n\r\nLevel: {DataArea?.Level}";
RetVal += $"\r\nSupport permissions: {DataArea?.SupportsPermissions}";
if (Owners != null)
{
if (Owners.Count == 0)
{
RetVal += $"\r\n\r\nOwner list is empty (no members)";
}
else
{
RetVal += $"\r\n\r\nOwners:";
foreach (var Owner in Owners)
{
RetVal += $"\r\n {Owner.DisplayName}: UPN='{Owner.UserPrincipalName}', SID='{Owner.SID}'";
}
}
}
return RetVal;
}
public override string GetUID()
{
return DataArea.UID;
}
public override async Task<TreeNodeBase> LoadFromUID()
{
var CM = MethodBase.GetCurrentMethod();
LogMethodBegin(CM);
try
{
var UID = GetUID();
if (string.IsNullOrEmpty(UID))
return null;
var R = await DataArea.Provider.LoadDataArea(UID);
if (R == null)
return null;
var RetVal = new TreeNodeLiamNode(R);
return RetVal;
}
catch (Exception E)
{
LogException(E);
return null;
}
finally
{
LogMethodEnd(CM);
}
}
}
public class TreeNodeLiamPermissionList : TreeNodeBase
{
public cLiamDataAreaBase DataArea;
private bool privIsResolved = false;
public TreeNodeLiamPermissionList(cLiamDataAreaBase DataArea)
{
this.DataArea = DataArea;
}
public override string GetInfoText()
{
return "";
}
public override string ToString()
{
return "Permissions";
}
public override bool IsResolved()
{
return privIsResolved;
}
override public async Task<List<TreeNodeBase>> ResolveAsync(bool ResolveAlways = false)
{
try
{
var RetVal = new List<TreeNodeBase>();
var Perms = await DataArea.GetPermissionsAsync(ResolveAlways);
if (Perms == null)
return null;
foreach (var Entry in Perms)
{
RetVal.Add(new TreeNodeLiamPermission(Entry, DataArea));
}
privIsResolved = true;
return RetVal;
}
catch (Exception E)
{
LogException(E);
}
finally
{
}
return null;
}
public override int ImageIndex()
{
return 4;
}
public override dynamic GetJsonObject()
{
return null;
}
public override bool SupportPermissionAdd()
{
return true;
}
public override bool SupportPermissionRemoveByValue()
{
return false;
}
public override async Task<bool> AddPermission(eLiamAccessRoles Role, string Identity)
{
try
{
var UserInfo = new cLiamUserInfo()
{
UserPrincipalName = Identity,
EMail = Identity
};
var PermResult = await DataArea.GrantPermissionAsync(UserInfo, Role);
if (PermResult.Valid)
return true;
}
catch (Exception E)
{
cLogManager.LogException(E);
}
return false;
}
public override async Task<bool> RemovePermissionByValue(eLiamAccessRoles Role, string Identity)
{
try
{
await Task.Delay(0);
}
catch (Exception E)
{
cLogManager.LogException(E);
}
return false;
}
public override List<eLiamAccessRoles> ValidPermissionRoles()
{
var RetVal = new List<eLiamAccessRoles>() {
eLiamAccessRoles.Read,
eLiamAccessRoles.Write,
eLiamAccessRoles.Owner
};
return RetVal;
}
public override string getLastError()
{
return "";
}
}
public class TreeNodeLiamPermission : TreeNodeBase
{
public cLiamPermissionInfo Permission = null;
public cLiamDataAreaBase DataArea = null;
public TreeNodeLiamPermission(cLiamPermissionInfo Permission, cLiamDataAreaBase DataArea) : base()
{
this.Permission = Permission;
this.DataArea = DataArea;
}
public override bool AutoResolved()
{
return true;
}
public override string GetInfoText()
{
if (Permission == null)
return "";
var strInfo = $"Type: Role memership";
var strUser = "-unknown-";
if (Permission.User != null)
{
if (Permission.User != null)
{
strUser = Permission.User.DisplayName;
if (string.IsNullOrEmpty(strUser))
strUser = Permission.User.UserPrincipalName;
if (string.IsNullOrEmpty(strUser))
strUser = Permission.User.EMail;
}
}
strInfo += $"\r\n\r\nUser or group: {strUser}";
strInfo += $"\r\n\r\nRole: {Permission.AccessRole}";
return strInfo;
}
public override string ToString()
{
try
{
if (Permission == null)
return "";
var strName = "Unknown";
if (Permission.User != null)
{
strName = Permission.User.DisplayName;
if (string.IsNullOrEmpty(strName))
strName = Permission.User.UserPrincipalName;
if (string.IsNullOrEmpty(strName))
strName = Permission.User.EMail;
}
strName += ": [" ;
var strRoles = Permission.AccessRole.ToString();
return strName + strRoles + "]";
}
catch (Exception E)
{
cLogManager.LogException(E);
}
return "";
}
public override bool IsResolved()
{
return true;
}
override public async Task<List<TreeNodeBase>> ResolveAsync(bool ResolveAlways = false)
{
await Task.Delay(0);
return new List<TreeNodeBase>();
}
public override int ImageIndex()
{
return 6;
}
public override dynamic GetJsonObject()
{
return null;
}
public override bool SupportPermissionRemoveDirect()
{
return true;
}
public override async Task<bool> RemovePermissionDirect()
{
try
{
if (Permission == null)
return false;
if (Permission.User == null)
return false;
var RetVal = await DataArea.RevokePermissionAsync(Permission.User, Permission.AccessRole);
return RetVal;
}
catch (Exception E)
{
cLogManager.LogException(E);
}
return false;
}
}
}