private static bool RequiresInfoCard(PolicyElement[] chain, out Uri relyingPartyIssuer) { relyingPartyIssuer = null; if (chain.Length == 0) { return(false); } int index = chain.Length - 1; int num2 = -1; bool flag = false; if (1 == chain.Length) { if (((null == chain[index].Issuer) || chain[index].Issuer.IsAnonymous) || (SelfIssuerUri.Equals(chain[index].Issuer.Uri) || ((null != chain[index].Issuer) && (chain[index].Binding == null)))) { num2 = index; flag = true; } else if (!chain[index].IsManagedIssuer) { flag = false; } } else { if (chain[index].IsManagedIssuer) { num2 = index - 1; flag = true; } else if (((null == chain[index].Issuer) || chain[index].Issuer.IsAnonymous) || (SelfIssuerUri.Equals(chain[index].Issuer.Uri) || ((null != chain[index].Issuer) && (chain[index].Binding == null)))) { num2 = index; flag = true; } else { flag = false; } for (int i = 0; i < index; i++) { if ((chain[i].IsManagedIssuer || SelfIssuerUri.Equals(chain[i].Issuer.Uri)) || ((null == chain[i].Issuer) || chain[i].Issuer.IsAnonymous)) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(System.ServiceModel.SR.GetString("InfoCardInvalidChain"))); } } } if (flag) { relyingPartyIssuer = (null == chain[num2].Issuer) ? null : chain[num2].Issuer.Uri; } return(flag); }
private static void FindInfoCardIssuerBinding(SecurityBindingElement secBindingElement, ThrowOnMultipleAssignment <IssuedSecurityTokenParameters> issuedSecurityTokenParameters) { if (secBindingElement != null) { SecurityTokenParametersEnumerable enumerable = new SecurityTokenParametersEnumerable(secBindingElement); foreach (SecurityTokenParameters parameters in enumerable) { IssuedSecurityTokenParameters parameters2 = parameters as IssuedSecurityTokenParameters; if ((parameters2 != null) && (((parameters2.IssuerBinding == null) || (parameters2.IssuerAddress == null)) || ((parameters2.IssuerAddress.IsAnonymous || SelfIssuerUri.Equals(parameters2.IssuerAddress)) || IsReferralToManagedIssuer(parameters2.IssuerBinding)))) { if (issuedSecurityTokenParameters != null) { issuedSecurityTokenParameters.Value = parameters2; } } else if (parameters is SecureConversationSecurityTokenParameters) { IssuedSecurityTokenParameters parameters3 = TryGetNextStsIssuedTokenParameters(((SecureConversationSecurityTokenParameters)parameters).BootstrapSecurityBindingElement); if ((parameters3 != null) && (issuedSecurityTokenParameters != null)) { issuedSecurityTokenParameters.Value = parameters3; } } else if (((parameters2 != null) && (parameters2.IssuerBinding != null)) && ((TryGetNextStsIssuedTokenParameters(parameters2.IssuerBinding.CreateBindingElements().Find <SecurityBindingElement>()) != null) && (issuedSecurityTokenParameters != null))) { issuedSecurityTokenParameters.Value = parameters2; } } } }