using System; using System.Collections.Generic; using System.Globalization; using System.Text; namespace ArchestrAServices.Common.Constants; public static class DiscoveryScope { public const string AsbCoreServiceScope = "archestra://coreservices"; public const string AsbUserServiceScope = "archestra://asb/"; public const string ServiceNameScope = "instancename/"; public const string ServiceVersionScope = "serviceversion/"; public const string DataTypeScope = "datatype/"; public const string SolutionNameScope = "asbsolution/"; public const string NodeNameScope = "asbnode/"; public const string BindingScope = "servicebinding/"; public const string CustomSerializerScope = "binding/customserializer/version2"; public const string DomainScope = "domainname/"; public const string NamespaceScope = "namespace/"; public const string SourceIdScope = "sourceid/"; public const string AssociationTypeScope = "associationType/"; public const string HierarchyIdScope = "hierarchyId/"; public const string HierarchyNameScope = "hierarchy/"; public const string TlsScope = "tls/"; public const string BaseRevisionScope = "baserevision/"; public const string RevisionScope = "revision/"; public static bool IsTransportSecurityScope(Uri scope) { bool result = false; if (scope != null) { StringBuilder stringBuilder = new StringBuilder(); stringBuilder.Append("archestra://asb/"); stringBuilder.Append("tls/"); string text = stringBuilder.ToString(); if (scope.ToString().ToUpperInvariant().StartsWith(text.ToUpperInvariant())) { result = true; } } return result; } public static bool DoesScopeIndicateThatTlsIsEnabled(Uri scope) { bool result = false; if (scope != null && IsTransportSecurityScope(scope)) { StringBuilder stringBuilder = new StringBuilder(); stringBuilder.Append("archestra://asb/"); stringBuilder.Append("tls/"); string text = stringBuilder.ToString(); if (bool.TryParse(scope.ToString().ToUpperInvariant().Replace(text.ToUpperInvariant(), string.Empty), out var result2)) { result = result2; } } return result; } public static Uri GetSolutionScope(string solutionName) { StringBuilder stringBuilder = new StringBuilder(); stringBuilder.Append("archestra://asb/"); stringBuilder.Append("asbsolution/"); stringBuilder.Append(solutionName); return new Uri(stringBuilder.ToString()); } public static Uri GetSourceIdScope(ushort sourceId) { StringBuilder stringBuilder = new StringBuilder(); stringBuilder.Append("archestra://asb/"); stringBuilder.Append("sourceid/"); stringBuilder.Append(sourceId.ToString(CultureInfo.InvariantCulture)); return new Uri(stringBuilder.ToString()); } public static Uri[] GetStandardServiceScope(string instanceName, string nodeName, string solutionName, BindingType bindingType, IEnumerable sourceIds, IEnumerable associationTypes, IEnumerable hierarchyIds, IEnumerable hierarchyNames, IEnumerable customScopes, bool tlsEnabled = false) { List list = new List(); StringBuilder stringBuilder = new StringBuilder(); if (!string.IsNullOrEmpty(solutionName)) { list.Add(GetSolutionScope(solutionName)); } Uri item; if (bindingType != BindingType.Custom) { stringBuilder.Append("archestra://asb/"); stringBuilder.Append("servicebinding/"); stringBuilder.Append(bindingType.ToString()); item = new Uri(stringBuilder.ToString()); stringBuilder.Clear(); list.Add(item); } if (!string.IsNullOrEmpty(nodeName)) { stringBuilder.Append("archestra://asb/"); stringBuilder.Append("asbnode/"); stringBuilder.Append(nodeName); item = new Uri(stringBuilder.ToString()); stringBuilder.Clear(); list.Add(item); } if (!string.IsNullOrEmpty(instanceName)) { stringBuilder.Append("archestra://asb/"); stringBuilder.Append("instancename/"); stringBuilder.Append(instanceName); item = new Uri(stringBuilder.ToString()); stringBuilder.Clear(); list.Add(item); } if (sourceIds != null) { foreach (ushort sourceId in sourceIds) { stringBuilder.Append("archestra://asb/"); stringBuilder.Append("sourceid/"); stringBuilder.Append(sourceId.ToString(CultureInfo.InvariantCulture)); item = new Uri(stringBuilder.ToString()); stringBuilder.Clear(); list.Add(item); } } if (associationTypes != null) { foreach (string associationType in associationTypes) { stringBuilder.Append("archestra://asb/"); stringBuilder.Append("associationType/"); stringBuilder.Append(associationType); item = new Uri(stringBuilder.ToString()); stringBuilder.Clear(); list.Add(item); } } if (hierarchyIds != null) { foreach (ushort hierarchyId in hierarchyIds) { stringBuilder.Append("archestra://asb/"); stringBuilder.Append("hierarchyId/"); stringBuilder.Append(hierarchyId.ToString(CultureInfo.InvariantCulture)); item = new Uri(stringBuilder.ToString()); stringBuilder.Clear(); list.Add(item); } } if (hierarchyNames != null) { foreach (string hierarchyName in hierarchyNames) { stringBuilder.Append("archestra://asb/"); stringBuilder.Append("hierarchy/"); stringBuilder.Append(hierarchyName); item = new Uri(stringBuilder.ToString()); stringBuilder.Clear(); list.Add(item); } } stringBuilder.Clear(); stringBuilder.Append("archestra://asb/"); stringBuilder.Append("tls/"); stringBuilder.Append(tlsEnabled ? "true" : "false"); item = new Uri(stringBuilder.ToString()); stringBuilder.Clear(); list.Add(item); if (customScopes != null) { foreach (Uri customScope in customScopes) { list.Add(customScope); } } return list.ToArray(); } }