/**
* 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: SAML2ConfigService.java,v 1.6 2009/06/12 22:21:40 mallas Exp $
*
*/
package com.sun.identity.saml2.common;
import com.sun.identity.plugin.configuration.ConfigurationActionEvent;
import com.sun.identity.plugin.configuration.ConfigurationException;
import com.sun.identity.plugin.configuration.ConfigurationInstance;
import com.sun.identity.plugin.configuration.ConfigurationListener;
import com.sun.identity.plugin.configuration.ConfigurationManager;
import com.sun.identity.shared.Constants;
import com.sun.identity.shared.configuration.SystemPropertiesManager;
import com.sun.identity.shared.debug.Debug;
import com.sun.identity.shared.locale.Locale;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.StringTokenizer;
/**
* This class provides methods to retrieve SAML2 configuration
* from the data store.
*/
public class SAML2ConfigService implements ConfigurationListener {
static final String CONFIG_NAME = "SAML2_CONFIG";
static final String SERVICE_NAME = "sunFAMSAML2Configuration";
static Debug debug = Debug.getInstance("libSAML2");
static ConfigurationInstance ci = null;
static final String SAML2_FAILOVER_ATTR = "failOverEnabled";
static final String SAML2_BUFFER_LENGTH = "bufferLength";
private static Map attributes = new HashMap();
static {
try {
ci = ConfigurationManager.getConfigurationInstance(CONFIG_NAME);
SAML2ConfigService saml2ConfigService = new SAML2ConfigService();
if ( (saml2ConfigService != null) && (ci != null) )
{ ci.addListener(saml2ConfigService); }
setValues();
} catch (ConfigurationException ce) {
debug.error("SAML2ConfigService.static:", ce);
}
}
/**
* Default Constructor.
*/
private SAML2ConfigService() {
}
/**
* This method will be invoked when a component's
* configuration data has been changed. The parameters componentName,
* realm and configName denotes the component name,
* organization and configuration instance name that are changed
* respectively.
*
* @param e Configuration action event, like ADDED, DELETED, MODIFIED etc.
*/
public void configChanged(ConfigurationActionEvent e) {
if (debug.messageEnabled()) {
debug.message("SAML2ConfigService: configChanged");
}
setValues();
}
/**
* This method reads values from service schema.
*/
static private synchronized void setValues() {
if (ci == null) {
attributes.put(SAML2_FAILOVER_ATTR, "false");
attributes.put(SAML2_BUFFER_LENGTH, "2048");
debug.warning("ConfigurationInstance is null, so default values for " +
"failover (false) and buffer length (2048) will be set.");
} else {
Map attrMap = null;
try {
attrMap = ci.getConfiguration(null, null);
} catch (ConfigurationException ce) {
debug.error("Exception caught obtaining updated configuration. " + SAML2_FAILOVER_ATTR + " and " +
SAML2_BUFFER_LENGTH + " will not be updated. Exception: " + ce, ce);
return;
}
Map newAttributes = new HashMap();
if (attrMap != null) {
if (debug.messageEnabled()) {
debug.message("The updated configuration: " + attrMap);
}
Set values = (Set)attrMap.get(SAML2_FAILOVER_ATTR);
String value = "false" ;
if ((values != null) && (values.size() == 1)) {
value = (String) values.iterator().next();
} else {
debug.warning("Value for " + SAML2_FAILOVER_ATTR + " null or size!=1. Defaulting to false.");
}
newAttributes.put(SAML2_FAILOVER_ATTR, value);
values = (Set)attrMap.get(SAML2_BUFFER_LENGTH);
value = "2048" ;
if ((values != null) && (values.size() == 1)) {
value = (String) values.iterator().next();
} else {
debug.warning("Value for " + SAML2_BUFFER_LENGTH + " null or size!=1. Defaulting to 2048.");
}
newAttributes.put(SAML2_BUFFER_LENGTH, value);
} else {
debug.warning("Attribute map returned from ConfigurationInstance for the SAML2 config is null! " +
"Default values for failover (false) and buffer length (2048) will be set.");
}
attributes = newAttributes;
}
if (debug.messageEnabled()) {
debug.message("Attributes in SAML2ConfigService updated to: "
+ attributes);
}
}
/**
* Retrieves current value of an AttributeSchema in the SAML2Config
* ServiceSchema.
* @param attributeName the name of the attributeSchema.
* @return the value of the attribute schema. It could return null if
* input attibuteName is null, or the attributeName can not be
* found in the service schema.
*/
public static Object getAttribute(String attributeName) {
return attributes.get(attributeName);
}
}