/** * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright (c) 2008 Sun Microsystems Inc. All Rights Reserved * * The contents of this file are subject to the terms * of the Common Development and Distribution License * (the License). You may not use this file except in * compliance with the License. * * You can obtain a copy of the License at * https://opensso.dev.java.net/public/CDDLv1.0.html or * opensso/legal/CDDLv1.0.txt * See the License for the specific language governing * permission and limitations under the License. * * When distributing Covered Code, include this CDDL * Header Notice in each file and include the License file * at opensso/legal/CDDLv1.0.txt. * If applicable, add the following below the CDDL Header, * with the fields enclosed by brackets [] replaced by * your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" * * $Id: ImportSAML2MetaData.java,v 1.5 2008/07/08 01:12:01 exu Exp $ * * Portions Copyrighted 2011-2014 ForgeRock AS. */ package com.sun.identity.workflow; import com.sun.identity.saml2.meta.SAML2MetaException; import com.sun.identity.saml2.meta.SAML2MetaManager; import com.sun.identity.saml2.meta.SAML2MetaUtils; import com.sun.identity.saml2.jaxb.entityconfig.BaseConfigType; import com.sun.identity.saml2.jaxb.entityconfig.EntityConfigElement; import com.sun.identity.shared.debug.Debug; import com.sun.identity.shared.xml.XMLUtils; import java.util.List; import javax.xml.bind.JAXBException; import org.w3c.dom.Document; /** * Import SAML2 Metadata. */ public class ImportSAML2MetaData { private static final Debug DEBUG = Debug.getInstance("workflow"); private ImportSAML2MetaData() { } /** * Imports meta and extended metadata. * * @param realm Realm of the entity. * @param metadata Meta data. * @param extended extended data. * @return realm and entity ID. */ public static String[] importData( String realm, String metadata, String extended ) throws WorkflowException { String entityID = null; try { SAML2MetaManager metaManager = new SAML2MetaManager(); EntityConfigElement configElt = null; if (extended != null) { Object obj = SAML2MetaUtils.convertStringToJAXB(extended); configElt = (obj instanceof EntityConfigElement) ? (EntityConfigElement)obj : null; if (configElt != null && configElt.isHosted()) { List config = configElt.getIDPSSOConfigOrSPSSOConfigOrAuthnAuthorityConfig(); if (!config.isEmpty()) { BaseConfigType bConfig = (BaseConfigType) config.iterator().next(); realm = SAML2MetaUtils.getRealmByMetaAlias( bConfig.getMetaAlias()); } } } // Load the metadata if it has been provided if (metadata != null) { entityID = importSAML2MetaData(metaManager, realm, metadata); } // Load the extended metadata if it has been provided if (configElt != null) { metaManager.createEntityConfig(realm, configElt); } } catch (SAML2MetaException e) { DEBUG.error("An error occurred while importing the SAML metadata", e); throw new WorkflowException(e.getMessage()); } catch (JAXBException e) { DEBUG.error("An error occurred while importing the SAML metadata", e); throw new WorkflowException(e.getMessage()); } String[] results = {realm, entityID}; return results; } private static String importSAML2MetaData(SAML2MetaManager metaManager, String realm, String metadata) throws SAML2MetaException, JAXBException, WorkflowException { String result = null; Document doc = XMLUtils.toDOMDocument(metadata, DEBUG); if (doc == null) { throw new WorkflowException( "import-entity-exception-invalid-descriptor", null); } else { List entityIds = SAML2MetaUtils.importSAML2Document(metaManager, realm, doc); if (entityIds.isEmpty()) { throw new WorkflowException( "import-entity-exception-invalid-descriptor", null); } else { result = entityIds.iterator().next(); } } return result; } }