public static List <string> GetDelegatedEmailAddressesFromB2BUseLicense(string useLicense)
        {
            XmlDocument firstNodeXdoc = RmsClientManagerUtils.GetFirstNodeXdoc(useLicense);

            if (firstNodeXdoc == null)
            {
                return(null);
            }
            XmlNode       xmlNode = firstNodeXdoc.SelectSingleNode("XrML/BODY[@type=\"LICENSE\"]/ISSUEDPRINCIPALS/PRINCIPAL/OBJECT[@type=\"Group-Identity\"]/ADDRESS[@type=\"DelegatedEmailAddress\"]/text()");
            List <string> list    = new List <string>();

            if (RmsClientManagerUtils.ValidateDelegatedEmailAddressOrAliasNode(xmlNode))
            {
                list.Add(xmlNode.Value);
            }
            XmlNodeList xmlNodeList = firstNodeXdoc.SelectNodes("XrML/BODY[@type=\"LICENSE\"]/ISSUEDPRINCIPALS/PRINCIPAL/OBJECT[@type=\"Group-Identity\"]/ADDRESS[@type=\"email_alias\"]/text()");

            foreach (object obj in xmlNodeList)
            {
                XmlNode xmlNode2 = (XmlNode)obj;
                if (RmsClientManagerUtils.ValidateDelegatedEmailAddressOrAliasNode(xmlNode2))
                {
                    list.Add(xmlNode2.Value);
                }
            }
            return(list);
        }
        public static ExDateTime GetUseLicenseExpiryTime(string license, ContentRight usageRights)
        {
            ArgumentValidator.ThrowIfNullOrEmpty("license", license);
            XmlDocument firstNodeXdoc = RmsClientManagerUtils.GetFirstNodeXdoc(license);

            if (firstNodeXdoc == null)
            {
                Microsoft.Exchange.Diagnostics.Components.Data.Storage.ExTraceGlobals.RightsManagementTracer.TraceDebug(0L, "Failed to parse the use license. Returning DateTime.MaxValue");
                return(ExDateTime.MaxValue);
            }
            XmlNode xmlNode = firstNodeXdoc.SelectSingleNode("XrML/BODY[@type=\"LICENSE\"]/ISSUEDTIME/text()");

            if (xmlNode == null || string.IsNullOrEmpty(xmlNode.Value))
            {
                Microsoft.Exchange.Diagnostics.Components.Data.Storage.ExTraceGlobals.RightsManagementTracer.TraceError(0L, "Failed to parse the use license to get the issued Time. Returning DateTime.MaxValue");
                return(ExDateTime.MaxValue);
            }
            DateTime d;

            if (!DateTime.TryParseExact(xmlNode.Value, "yyyy-MM-ddTHH:mm", CultureInfo.InvariantCulture, DateTimeStyles.None, out d))
            {
                Microsoft.Exchange.Diagnostics.Components.Data.Storage.ExTraceGlobals.RightsManagementTracer.TraceError <string>(0L, "Invalid IssuedTime entry {0}. Returning DateTime.MaxValue", xmlNode.Value);
                return(ExDateTime.MaxValue);
            }
            if (usageRights.IsUsageRightGranted(ContentRight.Owner))
            {
                Microsoft.Exchange.Diagnostics.Components.Data.Storage.ExTraceGlobals.RightsManagementTracer.TraceDebug(0L, "User has OWNER rights - trying to get the expiry time from owner node");
                XmlNode xmlNode2 = firstNodeXdoc.SelectSingleNode("XrML/BODY[@type=\"LICENSE\"]/WORK/RIGHTSGROUP[@name=\"Main-Rights\"]/RIGHTSLIST/OWNER/CONDITIONLIST/TIME/INTERVALTIME/@days");
                if (xmlNode2 != null)
                {
                    Microsoft.Exchange.Diagnostics.Components.Data.Storage.ExTraceGlobals.RightsManagementTracer.TraceDebug <string>(0L, "Found the owner node {0}", xmlNode2.Value);
                    int num;
                    if (int.TryParse(xmlNode2.Value, out num))
                    {
                        return(new ExDateTime(ExTimeZone.TimeZoneFromKind(DateTimeKind.Utc), d + TimeSpan.FromDays((double)num)));
                    }
                }
                Microsoft.Exchange.Diagnostics.Components.Data.Storage.ExTraceGlobals.RightsManagementTracer.TraceDebug(0L, "Couldn't find the OWNER node - either OWNER has no expiry or the value is not parsable");
                return(ExDateTime.MaxValue);
            }
            if (usageRights.IsUsageRightGranted(ContentRight.View))
            {
                Microsoft.Exchange.Diagnostics.Components.Data.Storage.ExTraceGlobals.RightsManagementTracer.TraceDebug(0L, "User has VIEW rights - trying to get the expiry time from VIEW node");
                XmlNode xmlNode3 = firstNodeXdoc.SelectSingleNode("XrML/BODY[@type=\"LICENSE\"]/WORK/RIGHTSGROUP[@name=\"Main-Rights\"]/RIGHTSLIST/VIEW/CONDITIONLIST/TIME/INTERVALTIME/@days");
                if (xmlNode3 != null)
                {
                    Microsoft.Exchange.Diagnostics.Components.Data.Storage.ExTraceGlobals.RightsManagementTracer.TraceDebug <string>(0L, "Found the view node {0}", xmlNode3.Value);
                    int num2;
                    if (int.TryParse(xmlNode3.Value, NumberStyles.Integer, NumberFormatInfo.InvariantInfo, out num2))
                    {
                        return(new ExDateTime(ExTimeZone.TimeZoneFromKind(DateTimeKind.Utc), d + TimeSpan.FromDays((double)num2)));
                    }
                }
                Microsoft.Exchange.Diagnostics.Components.Data.Storage.ExTraceGlobals.RightsManagementTracer.TraceDebug(0L, "Couldn't find the VIEW node - either VIEW rights has no expiry or the value is not parsable");
            }
            return(ExDateTime.MaxValue);
        }
 internal static bool ExtractExternalOrgIdFromPublishingLicense(string publishingLicense, out Guid externalDirectoryOrgId)
 {
     ArgumentValidator.ThrowIfNullOrEmpty("publishingLicense", publishingLicense);
     externalDirectoryOrgId = Guid.Empty;
     try
     {
         XmlDocument firstNodeXdoc = RmsClientManagerUtils.GetFirstNodeXdoc(publishingLicense);
         if (firstNodeXdoc == null)
         {
             return(false);
         }
         XmlNodeList xmlNodeList = firstNodeXdoc.SelectNodes("/XrML/BODY/ISSUEDPRINCIPALS/PRINCIPAL");
         if (xmlNodeList == null || xmlNodeList.Count == 0)
         {
             return(false);
         }
         foreach (object obj in xmlNodeList[0])
         {
             XmlNode xmlNode = (XmlNode)obj;
             if (!(xmlNode.Name != "SECURITYLEVEL") && xmlNode.Attributes != null)
             {
                 bool   flag = false;
                 string text = null;
                 foreach (object obj2 in xmlNode.Attributes)
                 {
                     XmlAttribute xmlAttribute = (XmlAttribute)obj2;
                     if (xmlAttribute.Name == "name" && xmlAttribute.Value == "Tenant-ID")
                     {
                         flag = true;
                     }
                     else if (xmlAttribute.Name == "value")
                     {
                         text = xmlAttribute.Value;
                     }
                 }
                 if (flag && !string.IsNullOrEmpty(text))
                 {
                     return(Guid.TryParse(text, out externalDirectoryOrgId));
                 }
             }
         }
     }
     catch (XmlException arg)
     {
         Microsoft.Exchange.Diagnostics.Components.Transport.ExTraceGlobals.RightsManagementTracer.TraceError <XmlException>(0L, "Exception while extracting MSODS tenant ID from publishing license: {0}", arg);
     }
     return(false);
 }