All Downloads are FREE. Search and download functionalities are using the official Maven repository.

web.sso-saml.add_service_provider_finish-ajaxprocessor.jsp Maven / Gradle / Ivy

The newest version!

<%@page import="org.apache.axis2.context.ConfigurationContext" %>
<%@ page import="org.apache.commons.lang.StringUtils" %>
<%@ page import="org.wso2.carbon.CarbonConstants" %>
<%@ page import="org.wso2.carbon.identity.sso.saml.stub.types.SAMLSSOServiceProviderDTO" %>
<%@ page import="org.wso2.carbon.identity.sso.saml.ui.SAMLSSOUIConstants" %>
<%@page import="org.wso2.carbon.identity.sso.saml.ui.SAMLSSOUIUtil" %>
<%@page import="org.wso2.carbon.identity.sso.saml.ui.client.SAMLSSOConfigServiceClient" %>
<%@ page import="org.wso2.carbon.ui.CarbonUIMessage" %>
<%@ page import="org.wso2.carbon.ui.CarbonUIUtil" %>
<%@ page import="org.wso2.carbon.utils.ServerConstants" %>
<%@ page import="java.util.ResourceBundle" %>
<%@ page import="org.owasp.encoder.Encode" %>
<%@ page import="org.wso2.carbon.identity.core.util.IdentityUtil" %>
<%@ page import="org.wso2.carbon.identity.sso.saml.common.SAMLSSOProviderConstants" %>










<%
    String httpMethod = request.getMethod();
    if (!"post".equalsIgnoreCase(httpMethod)) {
        response.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED);
        return;
    }

    String backendServerURL;
    ConfigurationContext configContext;
    String cookie;
    String user = null;
    SAMLSSOConfigServiceClient client;
    session.setAttribute(SAMLSSOUIConstants.CONFIG_CLIENT, null);
    String spName = request.getParameter("application-sp-name");
    boolean status = false;
    String attributeConsumingServiceIndex = null;

    backendServerURL = CarbonUIUtil.getServerURL(config.getServletContext(), session);
    configContext = (ConfigurationContext) config.getServletContext().getAttribute(CarbonConstants.CONFIGURATION_CONTEXT);
    cookie = (String) session.getAttribute(ServerConstants.ADMIN_SERVICE_COOKIE);
    String BUNDLE = "org.wso2.carbon.identity.sso.saml.ui.i18n.Resources";
    ResourceBundle resourceBundle = ResourceBundle.getBundle(BUNDLE, request.getLocale());
    SAMLSSOServiceProviderDTO serviceProviderDTO = null;
    try {
        client = new SAMLSSOConfigServiceClient(cookie, backendServerURL, configContext);

        serviceProviderDTO = new SAMLSSOServiceProviderDTO();
        boolean isEditingSP = false;
        if ("editServiceProvider".equals(SAMLSSOUIUtil.getSafeInput(request, "SPAction"))) {
            isEditingSP = true;
            serviceProviderDTO.setIssuer(SAMLSSOUIUtil.getSafeInput(request, "hiddenIssuer"));
            serviceProviderDTO.setIssuerQualifier(SAMLSSOUIUtil.getSafeInput(request, "hiddenIssuerQualifier"));
        } else {
            serviceProviderDTO.setIssuer(SAMLSSOUIUtil.getSafeInput(request, "issuer"));
            serviceProviderDTO.setIssuerQualifier(SAMLSSOUIUtil.getSafeInput(request, "issuerQualifier"));
        }

        serviceProviderDTO.setAssertionConsumerUrls(SAMLSSOUIUtil.getSafeInput(request, "assertionConsumerURLs")
                .split(","));
        serviceProviderDTO.setDefaultAssertionConsumerUrl(SAMLSSOUIUtil.getSafeInput(request,
                "defaultAssertionConsumerURL"));
        serviceProviderDTO.setSigningAlgorithmURI(SAMLSSOUIUtil.getSafeInput(request, SAMLSSOUIConstants.
                SAML_SSO_SIGNING_ALGORITHM));
        serviceProviderDTO.setDigestAlgorithmURI(SAMLSSOUIUtil.getSafeInput(request, SAMLSSOUIConstants.
                SAML_SSO_DIGEST_ALGORITHM));
        serviceProviderDTO.setAssertionEncryptionAlgorithmURI(SAMLSSOUIUtil.getSafeInput(request, SAMLSSOUIConstants.
                SAML_SSO_ASSERTION_ENCRYPTION_ALGORITHM));
        serviceProviderDTO.setKeyEncryptionAlgorithmURI(SAMLSSOUIUtil.getSafeInput(request, SAMLSSOUIConstants.
                SAML_SSO_KEY_ENCRYPTION_ALGORITHM));

        if (Boolean.parseBoolean(request.getParameter(SAMLSSOUIConstants.ENABLE_SINGLE_LOGOUT))) {
            serviceProviderDTO.setDoSingleLogout(true);
            if (StringUtils.isNotBlank(request.getParameter(SAMLSSOUIConstants.SLO_RESPONSE_URL))) {
                serviceProviderDTO.setSloResponseURL(request.getParameter(SAMLSSOUIConstants.SLO_RESPONSE_URL));
            }
            if (StringUtils.isNotBlank(request.getParameter(SAMLSSOUIConstants.SLO_REQUEST_URL))) {
                serviceProviderDTO.setSloRequestURL(request.getParameter(SAMLSSOUIConstants.SLO_REQUEST_URL));
            }
            if (SAMLSSOProviderConstants.HTTP_REDIRECT_BINDING.equals(request.getParameter
                    (SAMLSSOUIConstants.SLO_TYPE))) {
                serviceProviderDTO.setDoFrontChannelLogout(true);
                serviceProviderDTO.setFrontChannelLogoutBinding(SAMLSSOProviderConstants.HTTP_REDIRECT_BINDING);
            }
            if (SAMLSSOProviderConstants.HTTP_POST_BINDING.equals(request.getParameter(SAMLSSOUIConstants.SLO_TYPE))) {
                serviceProviderDTO.setDoFrontChannelLogout(true);
                serviceProviderDTO.setFrontChannelLogoutBinding(SAMLSSOProviderConstants.HTTP_POST_BINDING);
            }
        }
        if (Boolean.parseBoolean(request.getParameter(SAMLSSOUIConstants.ENABLE_RESPONSE_SIGNATURE))) {
            serviceProviderDTO.setDoSignResponse(true);
        }

        if (Boolean.parseBoolean(request.getParameter(SAMLSSOUIConstants.ENABLE_ASSERTION_QUERY_REQUEST_PROFILE))) {
            serviceProviderDTO.setAssertionQueryRequestProfileEnabled(true);
        }

        if (request.getParameter(SAMLSSOUIConstants.SUPPORTED_ASSERTION_QUERY_REQUEST_TYPES) != null) {
            serviceProviderDTO.setSupportedAssertionQueryRequestTypes(request.getParameter(SAMLSSOUIConstants.SUPPORTED_ASSERTION_QUERY_REQUEST_TYPES));
        }

        if (request.getParameter(SAMLSSOUIConstants.ENABLE_SAML2_ARTIFACT_BINDING) != null) {

            serviceProviderDTO.setEnableSAML2ArtifactBinding(true);
        }


        if (request.getParameter(SAMLSSOUIConstants.ENABLE_SIGNATURE_VALIDATION_IN_ARTIFACT_RESOLVE) != null) {

            serviceProviderDTO.setDoValidateSignatureInArtifactResolve(true);
        }

        if (Boolean.parseBoolean(request.getParameter(SAMLSSOUIConstants.ENABLE_ASSERTION_SIGNATURE))) {
            serviceProviderDTO.setDoSignAssertions(true);
        }

        serviceProviderDTO.setNameIDFormat(request.getParameter(SAMLSSOUIConstants.NAME_ID_FORMAT));

        if (serviceProviderDTO.getNameIDFormat() != null) {
            serviceProviderDTO.setNameIDFormat(serviceProviderDTO.getNameIDFormat().replace(":", "/"));
        }

        if (request.getParameter(SAMLSSOUIConstants.ENABLE_ATTRIBUTE_PROFILE) != null) {
            serviceProviderDTO.setRequestedClaims(samlSsoServuceProviderConfigBean.getSelectedClaimsAttay());
            serviceProviderDTO.setEnableAttributeProfile(true);

            if (Boolean.parseBoolean(request.getParameter(SAMLSSOUIConstants.ENABLE_DEFAULT_ATTRIBUTE_PROFILE_HIDDEN))) {
                serviceProviderDTO.setEnableAttributesByDefault(true);
            }
        }

        if (Boolean.parseBoolean(request.getParameter(SAMLSSOUIConstants.ENABLE_NAME_ID_CLAIM_URI_HIDDEN))) {
            serviceProviderDTO.setNameIdClaimUri(request.getParameter(SAMLSSOUIConstants.NAME_ID_CLAIM));
        }


        if (Boolean.parseBoolean(request.getParameter(SAMLSSOUIConstants.ENABLE_AUDIENCE_RESTRICTION))) {
            serviceProviderDTO.setRequestedAudiences(samlSsoServuceProviderConfigBean.getSelectedAudiencesArray());
        }

        if (Boolean.parseBoolean(request.getParameter(SAMLSSOUIConstants.ENABLE_RECIPIENTS))) {
            serviceProviderDTO.setRequestedRecipients(samlSsoServuceProviderConfigBean.getSelectedRecipientsArray());
        }

        if (request.getParameter(SAMLSSOUIConstants.LOGIN_PAGE_URL) != null && !"null".equals(request.getParameter(SAMLSSOUIConstants.LOGIN_PAGE_URL))) {
            serviceProviderDTO.setLoginPageURL(request.getParameter(SAMLSSOUIConstants.LOGIN_PAGE_URL));
        }

        if (Boolean.parseBoolean(request.getParameter(SAMLSSOUIConstants.ENABLE_ATTRIBUTE_PROFILE))) {
            String claimsCountParameter = SAMLSSOUIUtil.getSafeInput(request, SAMLSSOUIConstants.CLAIM_PROPERTY_COUNTER);
            if (IdentityUtil.isNotBlank(claimsCountParameter)) {
                int claimsCount = Integer.parseInt(claimsCountParameter);
                for (int i = 0; i < claimsCount; i++) {
                    String claim = SAMLSSOUIUtil.getSafeInput(request, SAMLSSOUIConstants.CLAIM_PROPERTY_NAME + i);
                    if (IdentityUtil.isNotBlank(claim)) {
                        String[] currentClaims = serviceProviderDTO.getRequestedClaims();
                        boolean isClaimAlreadyAdded = false;
                        for (String currentClaim : currentClaims) {
                            if (claim.equals(currentClaim)) {
                                isClaimAlreadyAdded = true;
                                break;
                            }
                        }
                        if (!isClaimAlreadyAdded) {
                            serviceProviderDTO.addRequestedClaims(claim);
                        }
                    }
                }
            }
        }

        if (Boolean.parseBoolean(request.getParameter(SAMLSSOUIConstants.ENABLE_AUDIENCE_RESTRICTION))) {
            String audiencesCountParameter = SAMLSSOUIUtil.getSafeInput(request, SAMLSSOUIConstants.AUDIENCE_PROPERTY_COUNTER);
            if (IdentityUtil.isNotBlank(audiencesCountParameter)) {
                int audiencesCount = Integer.parseInt(audiencesCountParameter);
                for (int i = 0; i < audiencesCount; i++) {
                    String audience = SAMLSSOUIUtil.getSafeInput(request, SAMLSSOUIConstants.AUDIENCE_PROPERTY_NAME + i);
                    if (IdentityUtil.isNotBlank(audience)) {
                        String[] currentAudiences = serviceProviderDTO.getRequestedAudiences();
                        boolean isAudienceAlreadyAdded = false;
                        for (String currentAudience : currentAudiences) {
                            if (audience.equals(currentAudience)) {
                                isAudienceAlreadyAdded = true;
                                break;
                            }
                        }
                        if (!isAudienceAlreadyAdded) {
                            serviceProviderDTO.addRequestedAudiences(audience);
                        }
                    }
                }
            }
        }

        if (Boolean.parseBoolean(request.getParameter(SAMLSSOUIConstants.ENABLE_RECIPIENTS))) {
            String recipientCountParameter = SAMLSSOUIUtil.getSafeInput(request, SAMLSSOUIConstants.RECIPIENT_PROPERTY_COUNTER);
            if (IdentityUtil.isNotBlank(recipientCountParameter)) {
                int recipientCount = Integer.parseInt(recipientCountParameter);
                for (int i = 0; i < recipientCount; i++) {
                    String recipient = SAMLSSOUIUtil.getSafeInput(request, SAMLSSOUIConstants.RECIPIENT_PROPERTY_NAME + i);
                    if (IdentityUtil.isNotBlank(recipient)) {
                        String[] currentRecipients = serviceProviderDTO.getRequestedRecipients();
                        boolean isRecipientAlreadyAdded = false;
                        for (String currentRecipient : currentRecipients) {
                            if (recipient.equals(currentRecipient)) {
                                isRecipientAlreadyAdded = true;
                                break;
                            }
                        }
                        if (!isRecipientAlreadyAdded) {
                            serviceProviderDTO.addRequestedRecipients(recipient);
                        }
                    }
                }
            }
        }

        serviceProviderDTO.setAttributeConsumingServiceIndex(SAMLSSOUIUtil.getSafeInput(request, "attributeConsumingServiceIndex"));

        if (Boolean.parseBoolean(request.getParameter(SAMLSSOUIConstants.ENABLE_IDP_INIT_SSO))) {
            serviceProviderDTO.setIdPInitSSOEnabled(true);
        }

        if (Boolean.parseBoolean(request.getParameter(SAMLSSOUIConstants.ENABLE_IDP_INIT_SLO))) {
            serviceProviderDTO.setIdPInitSLOEnabled(true);
            String returnToUrls = SAMLSSOUIUtil.getSafeInput(request, "idpInitSLOReturnToURLs");
            if (StringUtils.isNotBlank(returnToUrls)) {
                serviceProviderDTO.setIdpInitSLOReturnToURLs(returnToUrls.split(","));
            }
        }

        if (Boolean.parseBoolean(request.getParameter(SAMLSSOUIConstants.ENABLE_ENC_ASSERTION))) {
            serviceProviderDTO.setDoEnableEncryptedAssertion(true);
            serviceProviderDTO.setCertAlias(SAMLSSOUIUtil.getSafeInput(request, "alias"));
        }

        if (Boolean.parseBoolean(request.getParameter(SAMLSSOUIConstants.ENABLE_SIG_VALIDATION))) {
            serviceProviderDTO.setDoValidateSignatureInRequests(true);
            serviceProviderDTO.setCertAlias(SAMLSSOUIUtil.getSafeInput(request, "alias"));
        }
    
        if (StringUtils.isNotBlank(request.getParameter(SAMLSSOUIConstants.IDP_ENTITY_ID_ALIAS))) {
            serviceProviderDTO.setIdpEntityIDAlias(SAMLSSOUIUtil.getSafeInput(request,
                    SAMLSSOUIConstants.IDP_ENTITY_ID_ALIAS));
        }

        if (isEditingSP) {
            String currentIssuer = serviceProviderDTO.getIssuer();
            if (StringUtils.isNotBlank(serviceProviderDTO.getIssuerQualifier())) {
                serviceProviderDTO.setIssuer(SAMLSSOUIUtil.getIssuerWithoutQualifier(currentIssuer));
            }
            status = client.updateServiceProvider(serviceProviderDTO, currentIssuer);
        } else {
            status = client.addServiceProvider(serviceProviderDTO);
        }
        if (status) {
            String issuer = serviceProviderDTO.getIssuer();
            if (StringUtils.isNotBlank(serviceProviderDTO.getIssuerQualifier())) {
                issuer = SAMLSSOUIUtil.getIssuerWithQualifier(serviceProviderDTO.getIssuer(),
                        serviceProviderDTO.getIssuerQualifier());
            }
            attributeConsumingServiceIndex = client.getServiceProvider(issuer).getAttributeConsumingServiceIndex();
        }
        samlSsoServuceProviderConfigBean.clearBean();
        
        String message;
        if (status) {
            if (isEditingSP) {
                message = resourceBundle.getString("sp.updated.successfully");
            } else {
                message = resourceBundle.getString("sp.added.successfully");
            }
        } else {
            message = resourceBundle.getString("error.adding.sp");
        }

        if (status) {
            CarbonUIMessage.sendCarbonUIMessage(message, CarbonUIMessage.INFO, request);
        } else {
            CarbonUIMessage.sendCarbonUIMessage(message, CarbonUIMessage.ERROR, request);
        }
%>

<%

} catch (Exception e) {
    CarbonUIMessage.sendCarbonUIMessage(e.getMessage(), CarbonUIMessage.ERROR, request, e);
%>

<%
        return;
    }
%>




© 2015 - 2025 Weber Informatics LLC | Privacy Policy