4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster/**
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster *
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * Copyright (c) 2008 Sun Microsystems Inc. All Rights Reserved
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster *
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * The contents of this file are subject to the terms
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * of the Common Development and Distribution License
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * (the License). You may not use this file except in
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * compliance with the License.
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster *
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * You can obtain a copy of the License at
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * https://opensso.dev.java.net/public/CDDLv1.0.html or
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * opensso/legal/CDDLv1.0.txt
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * See the License for the specific language governing
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * permission and limitations under the License.
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster *
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * When distributing Covered Code, include this CDDL
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * Header Notice in each file and include the License file
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * at opensso/legal/CDDLv1.0.txt.
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * If applicable, add the following below the CDDL Header,
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * with the fields enclosed by brackets [] replaced by
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * your own identifying information:
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * "Portions Copyrighted [year] [name of copyright owner]"
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster *
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * $Id: FedletMetaData.java,v 1.10 2009/09/22 22:56:59 madan_ranganath Exp $
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster *
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster */
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Fosterpackage com.sun.identity.workflow;
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Fosterimport java.lang.StringBuffer;
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Fosterimport java.util.HashMap;
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Fosterimport java.util.Iterator;
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Fosterimport java.util.List;
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Fosterimport java.util.Map;
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Fosterpublic class FedletMetaData {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster private FedletMetaData() {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster public static String createStandardMetaData(
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster String entityId,
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster String fedletBaseURL
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster ) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster String xml = STANDARD_METADATA.replaceAll(TAG_ENTITY_ID, entityId);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster return xml.replaceAll(TAG_BASE_URL, fedletBaseURL);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster public static String createExtendedMetaData(
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster String realm,
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster String entityId,
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster List attrMapping,
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster String fedletBaseUrl
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster ) throws WorkflowException {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster Map map = new HashMap();
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster // For fedlet, we have root realm only
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster map.put(MetaTemplateParameters.P_SP,Task.generateMetaAliasForSP("/"));
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster String extendedData =
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster CreateSAML2HostedProviderTemplate.createExtendedDataTemplate(
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster entityId, map, null, false);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster int idx = extendedData.indexOf("<Attribute name=\"spAccountMapper\">");
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster if (idx != -1) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster extendedData = extendedData.substring(0, idx) +
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster "<Attribute name=\"fedletAdapter\">\n" +
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster " <Value>com.sun.identity.saml2.plugins.DefaultFedletAdapter</Value>\n" +
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster " </Attribute>\n" +
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster " <Attribute name=\"fedletAdapterEnv\">\n" +
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster " <Value></Value>\n" +
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster " </Attribute>\n" +
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster " " +
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster extendedData.substring(idx);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster idx = extendedData.indexOf("<Attribute name=\"appLogoutUrl\">");
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster if (idx != -1) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster idx = extendedData.indexOf("<Value>", idx);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster int idx1 = extendedData.indexOf("</Value>", idx);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster extendedData = extendedData.substring(0, idx+7) +
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster fedletBaseUrl + "/logout" +
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster extendedData.substring(idx1);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster idx = extendedData.indexOf("<Attribute name=\"spAccountMapper\">");
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster if (idx != -1) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster idx = extendedData.indexOf("<Value>", idx);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster int idx1 = extendedData.indexOf("</Value>", idx);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster extendedData = extendedData.substring(0, idx+7) +
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster "com.sun.identity.saml2.plugins.DefaultLibrarySPAccountMapper" +
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster extendedData.substring(idx1);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster idx = extendedData.indexOf("<Attribute name=\"transientUser\">");
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster if (idx != -1) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster idx = extendedData.indexOf("<Value>", idx);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster int idx1 = extendedData.indexOf("</Value>", idx);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster extendedData = extendedData.substring(0, idx+7) +
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster "anonymous" +
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster extendedData.substring(idx1);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster idx = extendedData.indexOf("<Attribute name=\"saeSPUrl\">");
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster if (idx != -1) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster idx = extendedData.indexOf("<Value>", idx);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster int idx1 = extendedData.indexOf("</Value>", idx);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster extendedData = extendedData.substring(0, idx+7) +
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster extendedData.substring(idx1);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster idx = extendedData.indexOf("<Attribute name=\"attributeMap\">");
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster if (idx != -1) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster if ((attrMapping != null) && !attrMapping.isEmpty()) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster StringBuffer buff = new StringBuffer();
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster for (Iterator i = attrMapping.iterator(); i.hasNext(); ) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster buff.append("\n <Value>")
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster .append((String)i.next())
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster .append("</Value>");
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster idx = extendedData.indexOf(">", idx);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster extendedData = extendedData.substring(0, idx+1) +
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster buff.toString() +
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster extendedData.substring(idx+1);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster } else {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster idx = extendedData.indexOf(">", idx);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster extendedData = extendedData.substring(0, idx+1) +
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster "\n <Value>*=*</Value>" +
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster extendedData.substring(idx+1);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster return extendedData;
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster private static final String TAG_ENTITY_ID = "@ENTITY_ID@";
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster private static final String TAG_BASE_URL = "@BASE_URL@";
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster private static final String STANDARD_METADATA =
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster "<EntityDescriptor entityID=\"@ENTITY_ID@\" xmlns=\"urn:oasis:names:tc:SAML:2.0:metadata\"><SPSSODescriptor AuthnRequestsSigned=\"false\" WantAssertionsSigned=\"false\" protocolSupportEnumeration=\"urn:oasis:names:tc:SAML:2.0:protocol\"><SingleLogoutService Binding=\"urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect\" Location=\"@BASE_URL@/fedletSloRedirect\" ResponseLocation=\"@BASE_URL@/fedletSloRedirect\"/><SingleLogoutService Binding=\"urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST\" Location=\"@BASE_URL@/fedletSloPOST\" ResponseLocation=\"@BASE_URL@/fedletSloPOST\"/><SingleLogoutService Binding=\"urn:oasis:names:tc:SAML:2.0:bindings:SOAP\" Location=\"@BASE_URL@/fedletSloSoap\"/><NameIDFormat>urn:oasis:names:tc:SAML:2.0:nameid-format:transient</NameIDFormat><AssertionConsumerService isDefault=\"true\" index=\"0\" Binding=\"urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST\" Location=\"@BASE_URL@/fedletapplication\"/><AssertionConsumerService index=\"1\" Binding=\"urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Artifact\" Location=\"@BASE_URL@/fedletapplication\"/></SPSSODescriptor><RoleDescriptor xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:query=\"urn:oasis:names:tc:SAML:metadata:ext:query\" xsi:type=\"query:AttributeQueryDescriptorType\" protocolSupportEnumeration=\"urn:oasis:names:tc:SAML:2.0:protocol\"></RoleDescriptor><XACMLAuthzDecisionQueryDescriptor WantAssertionsSigned=\"false\" protocolSupportEnumeration=\"urn:oasis:names:tc:SAML:2.0:protocol\"></XACMLAuthzDecisionQueryDescriptor></EntityDescriptor>";
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster}