a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster/**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Copyright (c) 2008 Sun Microsystems Inc. All Rights Reserved
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * The contents of this file are subject to the terms
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * of the Common Development and Distribution License
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * (the License). You may not use this file except in
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * compliance with the License.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * You can obtain a copy of the License at
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * https://opensso.dev.java.net/public/CDDLv1.0.html or
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * opensso/legal/CDDLv1.0.txt
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * See the License for the specific language governing
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * permission and limitations under the License.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * When distributing Covered Code, include this CDDL
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Header Notice in each file and include the License file
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * at opensso/legal/CDDLv1.0.txt.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * If applicable, add the following below the CDDL Header,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * with the fields enclosed by brackets [] replaced by
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * your own identifying information:
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * "Portions Copyrighted [year] [name of copyright owner]"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * $Id: FedletConfigurationImpl.java,v 1.5 2010/01/26 21:31:59 madan_ranganath Exp $
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterpackage com.sun.identity.plugin.configuration.impl;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.shared.debug.Debug;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.plugin.configuration.ConfigurationException;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.plugin.configuration.ConfigurationInstance;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.plugin.configuration.ConfigurationListener;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.saml2.common.SAML2Constants;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.saml2.jaxb.metadata.EntityDescriptorElement;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.saml2.meta.SAML2MetaConstants;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.saml2.meta.SAML2MetaSecurityUtils;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.saml2.meta.SAML2MetaUtils;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.shared.xml.XMLUtils;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport java.io.BufferedReader;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport java.io.File;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport java.io.FileInputStream;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport java.io.FileNotFoundException;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport java.io.FileReader;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport java.io.IOException;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport java.io.UnsupportedEncodingException;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport java.net.URLDecoder;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport java.net.URLEncoder;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport java.util.Enumeration;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport java.util.HashSet;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport java.util.Properties;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport java.util.Collections;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport java.util.HashMap;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport java.util.Map;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport java.util.Set;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport javax.xml.bind.JAXBException;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport org.w3c.dom.Document;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport org.w3c.dom.Element;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport org.w3c.dom.Node;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport org.w3c.dom.NodeList;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster/**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * The <code>FedletConfigurationImpl</code> class is the implementation for
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Fedlet to retrieve metadata/COT configuration from flat files.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterpublic class FedletConfigurationImpl implements ConfigurationInstance {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster // Name of attribute in COT file to contains the COT name
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private static final String COT_NAME = "cot-name";
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster // Suffix for extended metadata file name.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private static final String EXTENDED_XML_SUFFIX = "-extended.xml";
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster // Suffix for COT file name.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private static final String COT_FILE_SUFFIX = ".cot";
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster // fedlet home directory which contains metadata/COT/configuration files
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private static String fedletHomeDir;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster // property name to point to the fedlet home
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster // if not defined, default to "$user_home/fedlet"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private static final String FEDLET_HOME_DIR =
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "com.sun.identity.fedlet.home";
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private String componentName = null;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private static final String RESOURCE_BUNDLE = "fmConfigurationService";
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster static Debug debug = Debug.getInstance("libPlugins");;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster // Map to store COT information
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private static Map cotMap = new HashMap();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster // Map to store metadata information
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private static Map entityMap = new HashMap();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Initializer.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param componentName Name of the components, e.g. SAML1, SAML2, ID-FF
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param session FM Session object.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @exception ConfigurationException if could not initialize the instance.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public void init(String componentName, Object session)
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throws ConfigurationException {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (debug.messageEnabled()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster debug.message("FedletConfigurationImpl.init: component=" +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster componentName);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster this.componentName = componentName;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster fedletHomeDir = System.getProperty(FEDLET_HOME_DIR);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if ((fedletHomeDir == null) || (fedletHomeDir.trim().length() == 0)) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster fedletHomeDir = System.getProperty("user.home") +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster File.separator + "fedlet";
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (debug.messageEnabled()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster debug.message("FedletConfigurationImpl.init: fedlet home=" +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster fedletHomeDir);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster // initialize SAML2 metadata and COT from fedlet home directory
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster initializeMetadataAndCOT();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (debug.messageEnabled()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster debug.message("FedletConfImpl entityMap: =" + entityMap.keySet());
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster debug.message("FedletConfImpl cotMap: =" + cotMap.keySet());
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Returns Configurations.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param realm the name of organization at which the configuration resides.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param configName configuration instance name. e.g. "/sp".
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * The configName could be null or empty string, which means the default
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * configuration for this components.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @return Map of key/value pairs, key is the attribute name, value is
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * a Set of attribute values or null if service configuration doesn't
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * doesn't exist.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @exception ConfigurationException if an error occurred while getting
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * service configuration.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public Map getConfiguration(String realm, String configName)
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throws ConfigurationException {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (debug.messageEnabled()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster debug.message("FedletConfigurationImpl.getConfiguration: " +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "componentName = " + componentName + ", realm = " + realm +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster ", configName = " + configName);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster // only need to support SAML2/LIBCOT for now
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if ("SAML2".equals(componentName)) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return (Map) entityMap.get(configName);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } else if ("LIBCOT".equals(componentName)) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return (Map) cotMap.get(configName);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } else {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return null;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Initializes SAMLv2 metadata and COT from flat files under Fedlet
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * home directory.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * The metadata information will be stored in a Map, key is the entity ID,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * value is a Map whose key is the standard/extended attribute name,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * value is a String containing the standard/extended metadata XML.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Standard metadata is stored in a file named <fileName>.xml
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Extended metadata is stored in a file named <fileName>-extended.xml
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * The COT information will be stored in a Map, key is the COT name,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * value is a Map whose key is the attribute name, value is a Set of
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * values for the attribute.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * COT is stored in a file named <filename>.cot
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private void initializeMetadataAndCOT() {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster try {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster // read all SAML2 metadata/COT files from fedlet home directory
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster File homeDir = new File(fedletHomeDir);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String[] files = homeDir.list();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if ((files == null) || (files.length == 0)) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster for (int i = 0; i < files.length; i++) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String fileName = files[i];
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (debug.messageEnabled()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster debug.message("FedletConfigImpl.initMetaCOT: " + fileName);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (fileName.endsWith(EXTENDED_XML_SUFFIX)) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster // processing metadata entry
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster handleSAML2Metadata(fileName.substring(0,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster fileName.length() - EXTENDED_XML_SUFFIX.length()));
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } else if (fileName.endsWith(COT_FILE_SUFFIX)) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster handleCOT(fileName.substring(0,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster fileName.length() - COT_FILE_SUFFIX.length()));
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } else {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster continue;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } catch (NullPointerException npe) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster debug.error("FedletConfigurationImpl.processSAML2Metadata()", npe);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } catch (SecurityException se) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster debug.error("FedletConfigurationImpl.processSAML2Metadata()", se);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Gets SAML2 metadata from flat files and stores in entityMap.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private void handleSAML2Metadata(String fileName) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster // get standard metadata
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String metaFile = fedletHomeDir + File.separator + fileName + ".xml";
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (debug.messageEnabled()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster debug.message("FedletConfigurationImpl.handleSAML2Metadata: " +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "metaFile=" + metaFile);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String metaXML = openFile(metaFile);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (metaXML == null) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster metaXML = workaroundAbstractRoleDescriptor(metaXML);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String entityId = getEntityID(metaXML);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (entityId == null) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Map map = new HashMap();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Set set = new HashSet();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster set.add(metaXML);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster map.put("sun-fm-saml2-metadata", set);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster // get extended metadata files
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String extFile = fedletHomeDir + File.separator + fileName
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + EXTENDED_XML_SUFFIX;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String extXML = openFile(extFile);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (extXML == null) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster set = new HashSet();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster set.add(extXML);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster map.put("sun-fm-saml2-entityconfig", set);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster // add to entity Map
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster entityMap.put(entityId, map);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (debug.messageEnabled()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster debug.message("FedletConfigurationImpl.handleSAML2Metadata: " +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "done processing entity " + entityId);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private String workaroundAbstractRoleDescriptor(String metaXML) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Document doc = XMLUtils.toDOMDocument(metaXML, debug);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (doc != null) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster NodeList nl = doc.getDocumentElement().getElementsByTagNameNS(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster SAML2MetaConstants.NS_METADATA,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster SAML2MetaConstants.ROLE_DESCRIPTOR);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster int length = nl.getLength();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster for (int i = 0; i < length; i++) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Element child = (Element)nl.item(i);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String type = child.getAttributeNS(SAML2Constants.NS_XSI,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "type");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if ((type != null) && (type.equals(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster SAML2MetaConstants.ATTRIBUTE_QUERY_DESCRIPTOR_TYPE)) ||
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster (type.endsWith(":" +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster SAML2MetaConstants.ATTRIBUTE_QUERY_DESCRIPTOR_TYPE))) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster metaXML = metaXML.replaceAll(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster SAML2Constants.XSI_DECLARE_STR,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster metaXML = metaXML.replaceAll(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "xsi:type=\"query:AttributeQueryDescriptorType\"",
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster metaXML = metaXML.replaceAll("<" +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster SAML2MetaConstants.ROLE_DESCRIPTOR,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "<" + SAML2MetaSecurityUtils.PREFIX_MD_QUERY
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + ":" +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster SAML2MetaConstants.ATTRIBUTE_QUERY_DESCRIPTOR);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster metaXML = metaXML.replaceAll("</" +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster SAML2MetaConstants.ROLE_DESCRIPTOR,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "</" +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster SAML2MetaSecurityUtils.PREFIX_MD_QUERY
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + ":" +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster SAML2MetaConstants.ATTRIBUTE_QUERY_DESCRIPTOR);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return metaXML;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private String getEntityID(String metaXML) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster try {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Object obj = SAML2MetaUtils.convertStringToJAXB(metaXML);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (obj instanceof EntityDescriptorElement) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return ((EntityDescriptorElement) obj).getEntityID();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } catch (JAXBException jaxbe) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster debug.error("FedletConfigImpl.getEntityID: " + metaXML, jaxbe);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return null;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Gets COT information from flat file and stores in cotMap.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * The COT is stored in a flat file named "<fileName>.cot" which contains
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * list of properties, format like this :
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * <attribute_name>=<value1>,<value2>,<value3>,...
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * for example:
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * cot-name=sample
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * sun-fm-cot-status=Active
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * sun-fm-trusted-providers=idp,sp
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Note : Value which contains "%" and "," need to be escaped to
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * "%25" and "%2c" before saving to the file.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private void handleCOT(String fileName) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String cotFile = fedletHomeDir + File.separator + fileName
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + COT_FILE_SUFFIX;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (debug.messageEnabled()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster debug.message("FedletConfigurationImpl.handleCOT: " +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "cotFile=" + cotFile);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster FileInputStream fis = null;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster try {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster fis = new FileInputStream(cotFile);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Properties props = new Properties();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster props.load(fis);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster // convert each value string to a Set.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Map attrMap = new HashMap();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (props != null) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Enumeration keys = props.propertyNames();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster while (keys.hasMoreElements()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String key = (String)keys.nextElement();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String vals = props.getProperty(key);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if ((vals != null) && (vals.length() > 0)) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster attrMap.put(key, toValSet(key, vals));
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Set cotName = (Set) attrMap.get(COT_NAME);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (cotName == null) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster debug.error("FedletConfigImpl.handleCOT: null COT name in "
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + cotFile);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } else {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster cotMap.put((String) cotName.iterator().next(), attrMap);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (debug.messageEnabled()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster debug.message("FedletConfigurationImpl.handleCOT: " +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "done processing cot " + cotName);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } catch (FileNotFoundException fnf) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster debug.error("FedletConfigurationImpl.handleCOT: " + cotFile
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + " for component " + componentName, fnf);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } catch (IOException ioe) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster debug.error("FedletConfigurationImpl.getConfiguration:" + cotFile
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + " for component " + componentName, ioe);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } finally {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (fis != null) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster try {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster fis.close();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } catch (IOException ioe) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Converts a string of values from the attributes properties file
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * to a Set, decoding special characters in each value.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster protected Set toValSet(String attrName, String vals) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Set valset = new HashSet();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster char[] valchars = vals.toCharArray();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster int i, j;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster for (i = 0, j = 0; j < valchars.length; j++) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster char c = valchars[j];
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (c == ',') {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (i == j) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster i = j +1;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } else { // separator found
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String val = new String(valchars, i, j-i).trim();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (val.length() > 0) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster val = decodeVal(val);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster valset.add(val);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster i = j +1;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (j == valchars.length && i < j) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String val = new String(valchars, i, j-i).trim();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (val.length() > 0) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster val = decodeVal(val);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster valset.add(val);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return valset;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Decodes a value, %2C to comma and %25 to percent.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster protected String decodeVal(String v) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster char[] chars = v.toCharArray();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster StringBuffer sb = new StringBuffer(chars.length);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster int i = 0, lastIdx = 0;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster for (i = 0; i < chars.length; i++) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (chars[i] == '%' && i+2 < chars.length && chars[i+1] == '2') {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (lastIdx != i) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster sb.append(chars, lastIdx, i-lastIdx);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (chars[i+2] == 'C') {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster sb.append(',');
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster else if (chars[i+2] == '5') {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster sb.append('%');
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster else {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster sb.append(chars, i, 3);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster i += 2;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster lastIdx = i+1;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (lastIdx != i) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster sb.append(chars, lastIdx, i-lastIdx);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return sb.toString();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Returns the content of a file as String.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Returns null if error occurs.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private String openFile(String file) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster BufferedReader br = null;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster try {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster br = new BufferedReader(new FileReader(file));
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster StringBuffer sb = new StringBuffer(5000);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String temp;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster while ((temp = br.readLine()) != null) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster sb.append(temp);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return sb.toString();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } catch (FileNotFoundException fnf) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster debug.error("FedletConfigurationImpl.getConfiguration: " + file
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + " for component " + componentName, fnf);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return null;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } catch (IOException ioe) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster debug.error("FedletConfigurationImpl.getConfiguration:" + file
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + " for component " + componentName, ioe);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return null;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } finally {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (br != null) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster try {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster br.close();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } catch (IOException ioe) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Sets Configurations.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param realm the name of organization at which the configuration resides.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param configName configuration instance name. e.g. "/sp"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * The configName could be null or empty string, which means the default
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * configuration for this components.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param avPairs Map of key/value pairs to be set in the service
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * configuration, key is the attribute name, value is
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * a Set of attribute values.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @exception ConfigurationException if could not set service configuration
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * or service configuration doesn't exist.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public void setConfiguration(String realm,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String configName, Map avPairs)
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throws ConfigurationException {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (debug.messageEnabled()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster debug.message("FedletConfigurationImpl.setConfiguration: " +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "componentName = " + componentName + ", realm = " + realm +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster ", configName = " + configName + ", avPairs = " + avPairs);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String[] data = { componentName, realm };
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throw new ConfigurationException(RESOURCE_BUNDLE,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "failedSetConfig", data);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Creates Configurations.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param realm the name of organization at which the configuration resides.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param configName service configuration name. e.g. "/sp"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * The configName could be null or empty string, which means the
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * default configuration for this components.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param avPairs Map of key/value pairs to be set in the service
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * configuration, key is the attribute name, value is
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * a Set of attribute values.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @exception ConfigurationException if could not create service
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * configuration.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public void createConfiguration(String realm, String configName,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Map avPairs)
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throws ConfigurationException {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (debug.messageEnabled()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster debug.message("FedletConfigurationImpl.createConfiguration: " +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "componentName = " + componentName + ", realm = " + realm +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster ", configName = " + configName + ", avPairs = " + avPairs);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String[] data = { componentName, realm };
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throw new ConfigurationException(RESOURCE_BUNDLE,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "failedCreateConfig", data);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Deletes Configuration.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param realm the name of organization at which the configuration resides.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param configName service configuration name. e.g. "/sp"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * The configName could be null or empty string, which means the default
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * configuration for this components.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param attributes A set of attributes to be deleted from the Service
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * configuration. If the value is null or empty, deletes all service
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * configuration.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @exception ConfigurationException if could not delete service
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * configuration.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public void deleteConfiguration(String realm,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String configName, Set attributes)
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throws ConfigurationException {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (debug.messageEnabled()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster debug.message("FedletConfigurationImpl.deleteConfiguration: " +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "componentName = " + componentName + ", realm = " + realm +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster ", configName = " + configName + ", attributes = " +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster attributes);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String[] data = { componentName, realm };
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throw new ConfigurationException(RESOURCE_BUNDLE,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "failedDeleteConfig", data);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Returns all service config name for this components.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param realm the name of organization at which the configuration resides.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @return Set of service configuration names. Return null if there
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * is no service configuration for this component, return empty set
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * if there is only default configuration instance.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @exception ConfigurationException if could not get all service
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * configuration names.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public Set getAllConfigurationNames(String realm)
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throws ConfigurationException {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (debug.messageEnabled()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster debug.message("FedletConfigurationImpl.getAllConfigurationNames"+
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster ": realm = " + realm + ", componentName = " + componentName);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if ("SAML2".equals(componentName)) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return entityMap.keySet();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } else if ("LIBCOT".equals(componentName)) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return cotMap.keySet();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } else {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return Collections.EMPTY_SET;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Registers for changes to the component's configuration. The object will
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * be called when configuration for this component is changed.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @return the registered id for this listener instance.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @exception ConfigurationException if could not register the listener.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public String addListener(ConfigurationListener listener)
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throws ConfigurationException {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return "NO_OP";
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Unregisters the listener from the component for the given
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * listener ID. The ID was issued when the listener was registered.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param listenerID the returned id when the listener was registered.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @exception ConfigurationException if could not register the listener.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public void removeListener(String listenerID)
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throws ConfigurationException {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster}