Microsoft.Identity.Client.Internal.WsTrustResponse.CreateFromResponseDocument C# (CSharp) Method

CreateFromResponseDocument() static private method

static private CreateFromResponseDocument ( System.Xml.Linq.XDocument responseDocument, WsTrustVersion version ) : WsTrustResponse
responseDocument System.Xml.Linq.XDocument
version WsTrustVersion
return WsTrustResponse
        internal static WsTrustResponse CreateFromResponseDocument(XDocument responseDocument, WsTrustVersion version)
        {
            Dictionary<string, string> tokenResponseDictionary = new Dictionary<string, string>();

            try
            {
                XNamespace t = XmlNamespace.Trust;
                if (version == WsTrustVersion.WsTrust2005)
                {
                    t = XmlNamespace.Trust2005;
                }
                bool parseResponse = true;
                if (version == WsTrustVersion.WsTrust13)
                {
                    XElement requestSecurityTokenResponseCollection =
                        responseDocument.Descendants(t + "RequestSecurityTokenResponseCollection").FirstOrDefault();

                    if (requestSecurityTokenResponseCollection == null)
                    {
                        parseResponse = false;
                    }
                }

                if (parseResponse)
                {
                    IEnumerable<XElement> tokenResponses =
                        responseDocument.Descendants(t + "RequestSecurityTokenResponse");
                    foreach (var tokenResponse in tokenResponses)
                    {
                        XElement tokenTypeElement = tokenResponse.Elements(t + "TokenType").FirstOrDefault();
                        if (tokenTypeElement == null)
                        {
                            continue;
                        }

                        XElement requestedSecurityToken =
                            tokenResponse.Elements(t + "RequestedSecurityToken").FirstOrDefault();
                        if (requestedSecurityToken == null)
                        {
                            continue;
                        }

                        // TODO #123622: We need to disable formatting due to a potential service bug. Remove the ToString argument when problem is fixed.
                        tokenResponseDictionary.Add(tokenTypeElement.Value,
                            requestedSecurityToken.FirstNode.ToString(SaveOptions.DisableFormatting));
                    }
                }
            }
            catch (XmlException ex)
            {
                PlatformPlugin.Logger.Error(null, ex);
                throw new MsalException(MsalError.ParsingWsTrustResponseFailed, ex);
            }

            if (tokenResponseDictionary.Count == 0)
            {
                throw new MsalException(MsalError.ParsingWsTrustResponseFailed);
            }

            string tokenType = tokenResponseDictionary.ContainsKey(Saml1Assertion) ? Saml1Assertion : tokenResponseDictionary.Keys.First();

            WsTrustResponse wsTrustResponse = new WsTrustResponse
            {
                TokenType = tokenType,
                Token = tokenResponseDictionary[tokenType]
            };

            return wsTrustResponse;
        }
    }