private static void AddWSFederationBindingConfiguration()

in src/dotnet-svcutil/lib/src/CodeDomFixup/MethodCreationHelper.cs [539:741]


        private static void AddWSFederationBindingConfiguration(CodeStatementCollection statements, WSFederationHttpBinding wsFedHttp, bool isIssuerBinding = false)
        {
            string ResultVarName = "result";
            string ResultRef = "result";
            string WSTrustTokenVarName = "wsTrustTokenParams";
            string IssuerBindingName = "issuerBinding";
            string IssuerAddressName = "issuerAddress";

            if (wsFedHttp.Security.Message.IssuerBinding is WSFederationHttpBinding)
            {
                ResultVarName = "federationIssuerBinding";
                WSTrustTokenVarName = "federationWsTrustTokenParams";
                IssuerBindingName = "federationIssuerBinding";
                IssuerAddressName = "federationissuerAddress";
            }

            WSFederationHttpBinding defaultBinding = new WSFederationHttpBinding();

            CodeVariableReferenceExpression wsTrustTokenVar = new CodeVariableReferenceExpression(WSTrustTokenVarName);
            CodeVariableReferenceExpression issuerBindingVar = new CodeVariableReferenceExpression(IssuerBindingName);
            CodeVariableReferenceExpression issuerBindingVar2 = new CodeVariableReferenceExpression(ResultRef);
            CodeVariableReferenceExpression issuerAddressVar = new CodeVariableReferenceExpression(IssuerAddressName);

            if (wsFedHttp.Security.Message.IssuerBinding != null)
            {
                if (wsFedHttp.Security.Message.IssuerBinding is WS2007FederationHttpBinding ws2007FedHttpIssuer)
                {
                    AddWS2007FederationBindingConfiguration(statements, ws2007FedHttpIssuer, true);
                }
                else if (wsFedHttp.Security.Message.IssuerBinding is WSFederationHttpBinding wsFedHttpIssuer)
                {
                    AddWSFederationBindingConfiguration(statements, wsFedHttpIssuer, true);
                }
                else
                {
                    AddIssuerBindingConfiguration(statements, wsFedHttp.Security.Message.IssuerBinding);
                }
            }
            else
            {
                statements.Add(
                    new CodeVariableDeclarationStatement(
                        typeof(WSHttpBinding),
                        IssuerBindingName,
                        new CodeObjectCreateExpression(typeof(WSHttpBinding),
                            new CodePropertyReferenceExpression(new CodeTypeReferenceExpression(typeof(SecurityMode)), "Transport"))));

                statements.Add(
                    new CodeAssignStatement(
                        new CodePropertyReferenceExpression(
                            new CodePropertyReferenceExpression(
                                new CodePropertyReferenceExpression(issuerBindingVar, "Security"),
                            "Transport"), "ClientCredentialType"),
                        new CodePropertyReferenceExpression(new CodeTypeReferenceExpression(typeof(System.ServiceModel.HttpClientCredentialType)), "Basic")));
            }

            statements.Add(
                new CodeVariableDeclarationStatement(
                    typeof(EndpointAddress),
                    IssuerAddressName,
                    new CodeObjectCreateExpression(typeof(EndpointAddress),
                        new CodeObjectCreateExpression(typeof(Uri),
                        new CodePrimitiveExpression(wsFedHttp.Security.Message.IssuerAddress.ToString())))));

            //if the WSFederationHttpBinding instance's issuer binding is still WSFederationHttpBinding,
            //then init the parent WSFederationHttpBinding's WSTrustTokenParameters with the already generated WSFederationHttpBinding result var
            if (!isIssuerBinding && wsFedHttp.Security.Message.IssuerBinding is WSFederationHttpBinding)
            {
                statements.Add(
                new CodeVariableDeclarationStatement(
                    typeof(System.ServiceModel.Federation.WSTrustTokenParameters),
                    WSTrustTokenVarName,
                    new CodeMethodInvokeExpression(new CodeTypeReferenceExpression(typeof(System.ServiceModel.Federation.WSTrustTokenParameters)), "CreateWSFederationTokenParameters",
                        issuerBindingVar2, issuerAddressVar)));
            }
            else
            {
                statements.Add(
                new CodeVariableDeclarationStatement(
                    typeof(System.ServiceModel.Federation.WSTrustTokenParameters),
                    WSTrustTokenVarName,
                    new CodeMethodInvokeExpression(new CodeTypeReferenceExpression(typeof(System.ServiceModel.Federation.WSTrustTokenParameters)), "CreateWSFederationTokenParameters",
                        issuerBindingVar, issuerAddressVar)));
            }

            statements.Add(
                new CodeVariableDeclarationStatement(
                    typeof(System.ServiceModel.Federation.WSFederationHttpBinding),
                    ResultVarName,
                    new CodeObjectCreateExpression(typeof(System.ServiceModel.Federation.WSFederationHttpBinding), wsTrustTokenVar)));

            CodeVariableReferenceExpression resultVar = new CodeVariableReferenceExpression(ResultVarName);

            // Set AllowCookies's default value to true.
            statements.Add(
                   new CodeAssignStatement(
                       new CodePropertyReferenceExpression(
                           resultVar,
                           "AllowCookies"),
                       new CodePrimitiveExpression(true)));

            if (defaultBinding.MessageEncoding != wsFedHttp.MessageEncoding)
            {
                statements.Add(
                    new CodeAssignStatement(
                        new CodePropertyReferenceExpression(
                            resultVar,
                            "MessageEncoding"),
                        new CodePropertyReferenceExpression(
                            new CodeTypeReferenceExpression(typeof(WSMessageEncoding)),
                            wsFedHttp.MessageEncoding.ToString())));
            }

            if (defaultBinding.TransactionFlow != wsFedHttp.TransactionFlow)
            {
                statements.Add(
                    new CodeAssignStatement(
                        new CodePropertyReferenceExpression(
                            resultVar,
                            "TransactionFlow"),
                        new CodePrimitiveExpression(wsFedHttp.TransactionFlow)));
            }

            if (defaultBinding.ReliableSession.Enabled != wsFedHttp.ReliableSession.Enabled)
            {
                if (wsFedHttp.ReliableSession.Enabled)
                {
                    statements.Add(
                        new CodeAssignStatement(
                            new CodePropertyReferenceExpression(
                                new CodePropertyReferenceExpression(resultVar, "ReliableSession"),
                                "Enabled"),
                            new CodePrimitiveExpression(wsFedHttp.ReliableSession.Enabled)));
                    statements.Add(
                        new CodeAssignStatement(
                            new CodePropertyReferenceExpression(
                                new CodePropertyReferenceExpression(resultVar, "ReliableSession"),
                                "Ordered"),
                            new CodePrimitiveExpression(wsFedHttp.ReliableSession.Ordered)));
                    statements.Add(
                        new CodeAssignStatement(
                            new CodePropertyReferenceExpression(
                                new CodePropertyReferenceExpression(resultVar, "ReliableSession"),
                                "InactivityTimeout"),
                            new CodePrimitiveExpression(wsFedHttp.ReliableSession.InactivityTimeout)));
                }
            }

            if (defaultBinding.Security.Mode != wsFedHttp.Security.Mode)
            {
                statements.Add(
                    new CodeAssignStatement(
                        new CodePropertyReferenceExpression(
                            new CodePropertyReferenceExpression(resultVar, "Security"),
                            "Mode"),
                        new CodeFieldReferenceExpression(
                            new CodeTypeReferenceExpression(typeof(SecurityMode)),
                            wsFedHttp.Security.Mode.ToString())));
            }

            if (defaultBinding.Security.Message.EstablishSecurityContext != wsFedHttp.Security.Message.EstablishSecurityContext)
            {
                statements.Add(
                    new CodeAssignStatement(
                        new CodePropertyReferenceExpression(
                            new CodePropertyReferenceExpression(
                                new CodePropertyReferenceExpression(resultVar, "Security"),
                                "Message"),
                            "EstablishSecurityContext"),
                        new CodePrimitiveExpression(wsFedHttp.Security.Message.EstablishSecurityContext)));
            }

            if (defaultBinding.Security.Message.NegotiateServiceCredential != wsFedHttp.Security.Message.NegotiateServiceCredential)
            {
                statements.Add(
                    new CodeAssignStatement(
                        new CodePropertyReferenceExpression(
                            new CodePropertyReferenceExpression(
                                new CodePropertyReferenceExpression(resultVar, "Security"),
                                "Message"),
                            "NegotiateServiceCredential"),
                        new CodePrimitiveExpression(wsFedHttp.Security.Message.EstablishSecurityContext)));
            }

            if (defaultBinding.Security.Message.AlgorithmSuite != wsFedHttp.Security.Message.AlgorithmSuite)
            {
                statements.Add(
                    new CodeAssignStatement(
                        new CodePropertyReferenceExpression(
                            new CodePropertyReferenceExpression(
                                new CodePropertyReferenceExpression(resultVar, "Security"),
                                "Message"),
                            "AlgorithmSuite"),
                        new CodeFieldReferenceExpression(
                            new CodeTypeReferenceExpression(typeof(System.ServiceModel.Security.SecurityAlgorithmSuite)),
                            wsFedHttp.Security.Message.AlgorithmSuite.ToString())));
            }

            if (!isIssuerBinding)
            {
                statements.Add(new CodeMethodReturnStatement(resultVar));
            }
        }