a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster/**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Copyright (c) 2006 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: FSSessionManager.java,v 1.6 2009/08/03 18:18:36 bigfatrat Exp $
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterpackage com.sun.identity.federation.services;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.shared.stats.Stats;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.shared.Constants;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.common.SystemConfigurationUtil;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.common.SystemTimerPool;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.common.TimerPool;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.federation.common.FSUtils;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.federation.message.FSAuthnRequest;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.federation.meta.IDFFMetaManager;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.federation.meta.IDFFMetaUtils;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.liberty.ws.meta.jaxb.IDPDescriptorType;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.liberty.ws.meta.jaxb.SPDescriptorType;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.plugin.monitoring.FedMonAgent;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.plugin.monitoring.FedMonIDFFSvc;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.plugin.monitoring.MonitorManager;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.plugin.session.SessionManager;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.plugin.session.SessionProvider;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport java.util.ArrayList;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport java.util.Collections;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport java.util.Date;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport java.util.HashMap;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport java.util.Iterator;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport java.util.List;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport java.util.Map;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster/**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * The class <code>FSSessionManager</code> is a <code>final</code> class
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * that provides interfaces to manage <code>FSSession</code>s.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * <p>
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * It is a singleton class; an instance of this class can be obtained by
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * calling <code>FSSessionManager.getInstance()</code>.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterpublic final class FSSessionManager {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster // property name for request cleanup internal
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private static final String REQUEST_CLEANUP_INTERVAL =
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "com.sun.identity.federation.request.cleanup_interval";
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster // default value for request cleanup internal
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private static final long DEFAULT_REQUEST_CLEANUP_INTERVAL = 300000;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster // property name for request time out
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private static final String REQUEST_TIMEOUT =
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "com.sun.identity.federation.request.timeout";
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster // default value for request time out
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private static final long DEFAULT_REQUEST_TIMEOUT = 300000;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster // Singleton instance of FSSessionManager
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private static Map instanceMap = new HashMap ();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster // used to store list of FSSession for a user
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster // key : user DN, value List of FSSession object
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private Map userIDSessionListMap =
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Collections.synchronizedMap(new HashMap ());
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private Map idAuthnRequestMap =
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Collections.synchronizedMap(new HashMap ());
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private Map idLocalSessionTokenMap =
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Collections.synchronizedMap(new HashMap ());
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private Map idDestnMap =
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Collections.synchronizedMap(new HashMap ());
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private String hostEntityId = null;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private String realm = null;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private Map relayStateMap =
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Collections.synchronizedMap(new HashMap());
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private Map proxySPDescMap =
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Collections.synchronizedMap(new HashMap ());
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private Map proxySPAuthnReqMap =
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Collections.synchronizedMap(new HashMap ());
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private static long cleanupInterval = 0;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private static long requestTimeout = 0;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private FSRequestCleanUpRunnable cRunnable = null;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private FSSessionMapStats dnStats;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private FSSessionMapStats reqStats;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private FSSessionMapStats tokenStats;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private FSSessionMapStats idStats;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private FSSessionMapStats relayStats;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * For managing session statistics.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public static Stats sessStats = Stats.getInstance("libIDFFSessionMaps");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private static FedMonAgent agent;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private static FedMonIDFFSvc idffSvc;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster static {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster try {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String temp = SystemConfigurationUtil.getProperty(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster REQUEST_CLEANUP_INTERVAL);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (temp == null || temp.trim().length() == 0) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster cleanupInterval = DEFAULT_REQUEST_CLEANUP_INTERVAL;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } else {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster cleanupInterval = Integer.parseInt(temp) * 1000;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } catch (Exception e) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (FSUtils.debug.messageEnabled()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster FSUtils.debug.message(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "Unable to get fed request cleanup prop.", e);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster cleanupInterval = DEFAULT_REQUEST_CLEANUP_INTERVAL;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster try {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String temp = SystemConfigurationUtil.getProperty(REQUEST_TIMEOUT);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (temp == null || temp.trim().length() == 0) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster requestTimeout = DEFAULT_REQUEST_TIMEOUT;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } else {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster requestTimeout = Integer.parseInt(temp) * 1000;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } catch (Exception e) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (FSUtils.debug.messageEnabled()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster FSUtils.debug.message(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "Unable to get fed request timeout prop.", e);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster requestTimeout = DEFAULT_REQUEST_TIMEOUT;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster agent = MonitorManager.getAgent();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster idffSvc = MonitorManager.getIDFFSvc();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (FSUtils.debug.messageEnabled()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster FSUtils.debug.message("FSSessionManager, cleanup interval="
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + cleanupInterval + " ms, timeout=" + requestTimeout + " ms");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Gets the <code>RelayState</code> value which maps
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * to the request ID.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param requestID request ID
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @return the <code>RelayState</code> value
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public String getRelayState(String requestID) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return (String) relayStateMap.get(requestID);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Sets the <code>RelayState</code> value with the specified
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * request ID in the <code>relayStateMap</code>.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param requestID request ID
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param relayState the <code>RelayState</code> value
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public void setRelayState(String requestID, String relayState) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster relayStateMap.put(requestID, relayState);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Removes the mapping for this request ID from the
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * <code>relayStateMap</code>.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param requestID request ID
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public void removeRelayState(String requestID) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster relayStateMap.remove(requestID);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Returns authentication request associated with <code>requestID</code>.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param requestID authentication request ID
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @return authentication request associated with the request ID
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public FSAuthnRequest getAuthnRequest (String requestID){
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster FSUtils.debug.message ("FSSessionManager.getAuthnRequest: Called");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return (FSAuthnRequest)idAuthnRequestMap.get (requestID);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Sets authentication request.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param requestID authentication request ID
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param authnRequest authentication request
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public void setAuthnRequest (String requestID, FSAuthnRequest authnRequest){
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (FSUtils.debug.messageEnabled()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster FSUtils.debug.message(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "FSSessionManager.setAuthnRequest: Called, ID=" + requestID );
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster removeAuthnRequest (requestID);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster idAuthnRequestMap.put (requestID, authnRequest);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (cRunnable != null) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster cRunnable.addElement(requestID);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Removes an authentication request.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param requestID ID of the request to be removed
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public void removeAuthnRequest (String requestID){
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (FSUtils.debug.messageEnabled()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster FSUtils.debug.message (
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "FSSessionManager.removeAuthnRequest: Called, ID=" + requestID);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster idAuthnRequestMap.remove(requestID);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster idDestnMap.remove(requestID);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if ((agent != null) && agent.isRunning() && (idffSvc != null)) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster idffSvc.setIdDestn((long)idDestnMap.size());
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (cRunnable != null) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster cRunnable.removeElement(requestID);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Returns local token associated with the request ID.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param requestID request ID
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @return session object associated with the request ID
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public Object getLocalSessionToken(String requestID) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster FSUtils.debug.message ("FSSessionManager.getLocalSessionToken: Called");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return idLocalSessionTokenMap.get(requestID);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Sets local token.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param requestID request ID
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param localSession token to be set
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public void setLocalSessionToken (String requestID, Object localSession){
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster FSUtils.debug.message ("FSSessionManager.setLocalSessionToken: Called");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster idLocalSessionTokenMap.put (requestID, localSession);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if ((agent != null) && agent.isRunning() && (idffSvc != null)) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster idffSvc.setIdLocalSessToken((long)idLocalSessionTokenMap.size());
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Removes a local token associated with <code>requestID</code>.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param requestID request ID
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public void removeLocalSessionToken (String requestID){
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster FSUtils.debug.message(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "FSSessionManager.removeLocalSessionToken: Called");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster idLocalSessionTokenMap.remove(requestID);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if ((agent != null) && agent.isRunning() && (idffSvc != null)) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster idffSvc.setIdLocalSessToken((long)idLocalSessionTokenMap.size());
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Returns IDP's entity ID associated with <code>requestID</code>.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param requestID request ID
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @return identity provider's entity ID
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public String getIDPEntityID(String requestID){
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster FSUtils.debug.message("FSSessionManager.getIDPEntityID: Called");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return (String) idDestnMap.get (requestID);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Sets IDP's entity ID.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param requestID authentication request ID
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param idpEntityId identity provider's entity ID to be set
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public void setIDPEntityID(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String requestID,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String idpEntityId)
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster FSUtils.debug.message ("FSSessionManager.setIDPEntityID");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster idDestnMap.put (requestID, idpEntityId);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if ((agent != null) && agent.isRunning() && (idffSvc != null)) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster idffSvc.setIdDestn((long)idDestnMap.size());
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Sets proxy service provider descriptor.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param requestID authentication request ID
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param spDescriptor provider descriptor to be set
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public void setProxySPDescriptor(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String requestID,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster SPDescriptorType spDescriptor)
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster proxySPDescMap.put(requestID, spDescriptor);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Returns proxy service provider descriptor.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param requestID request ID
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @return provider descriptor
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public SPDescriptorType getProxySPDescriptor(String requestID) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return (SPDescriptorType)proxySPDescMap.get(requestID);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Returns proxy authentication request.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param requestID authentication request ID
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public FSAuthnRequest getProxySPAuthnRequest(String requestID) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return (FSAuthnRequest)proxySPAuthnReqMap.get(requestID);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Sets proxy authentication request.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param requestID request ID
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param authnRequest proxy authentication request to be set.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public void setProxySPAuthnRequest(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String requestID,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster FSAuthnRequest authnRequest)
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster proxySPAuthnReqMap.put(requestID, authnRequest);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Returns list of sessions associated with <code>userID</code>.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param userID user ID
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @return list of sessions
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public List getSessionList(String userID){
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster FSUtils.debug.message ("FSSessionManager.getSessionList: Called");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return (List)userIDSessionListMap.get(userID.toLowerCase());
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Sets session list.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param userID user ID
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param sessionList list of sessions to be set
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public void setSessionList (String userID, List sessionList){
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster FSUtils.debug.message ("FSSessionManager.setSessionList: Called");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster userIDSessionListMap.put(userID.toLowerCase(), sessionList);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if ((agent != null) && agent.isRunning() && (idffSvc != null)) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster idffSvc.setUserIDSessionList((long)userIDSessionListMap.size());
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Removes session list associated with <code>userID</code>.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param userID user ID
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public void removeSessionList (String userID){
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster FSUtils.debug.message ("FSSessionManager.removeSessionList: Called ");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster userIDSessionListMap.remove(userID.toLowerCase());
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if ((agent != null) && agent.isRunning() && (idffSvc != null)) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster idffSvc.setUserIDSessionList((long)userIDSessionListMap.size());
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Returns session with <code>sessionID</code> for <code>userID</code>.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param userID user ID
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param sessionID session ID
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @return <code>FSSession</code> object
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public FSSession getSession(String userID, String sessionID) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster FSUtils.debug.message ("FSSessionManager.getSession: Called ");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster List sessions = getSessionList (userID);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (sessions != null){
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster synchronized (sessions) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Iterator i = sessions.iterator ();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster while (i.hasNext ()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster FSSession session = (FSSession)i.next ();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (session.isEquals(sessionID)){
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return session;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return null;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Returns the session in <code>sessions</code> whose session index is
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * <code>sessionIndex</code>.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param sessions list of <code>FSSession</code>s.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param sessionIndex session index
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @return <code>FSSession</code> object whose session index is
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * <code>sessionIndex</code>
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public FSSession getSession(List sessions, String sessionIndex) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster FSUtils.debug.message("FSSessionManager.getSession(sessionIndex):");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (sessions == null || sessionIndex == null) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster FSUtils.debug.error("FSSessionManager.getSession(sessionIndex):" +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "sessions or sessionIndex is null");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return null;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster synchronized (sessions) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Iterator i = sessions.iterator ();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster while (i.hasNext ()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster FSSession session = (FSSession)i.next ();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String tmpIndex = session.getSessionIndex();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (tmpIndex != null && tmpIndex.equals(sessionIndex)) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return session;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (FSUtils.debug.messageEnabled()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster FSUtils.debug.message("FSSessionManager.getSession(sessionIndex):" +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "No session found for the given session index.");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return null;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Returns session associated with <code>token</code>.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param token session object
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @return <code>FSSession</code> associated with the token
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public FSSession getSession(Object token){
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster FSUtils.debug.message ("FSSessionManager.getSession: Called");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (token == null) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return null;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster try {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster SessionProvider sessionProvider = SessionManager.getProvider();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String univId = sessionProvider.getPrincipalName(token);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String sessionID = sessionProvider.getSessionID(token);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return getSession(univId, sessionID);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } catch (Exception e) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster FSUtils.debug.error("FSSessionManager.getSession(token) : ", e);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return null;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Removes <code>entityID</code> from <code>userID</code>'s
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * session partner list.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param userID user ID
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param entityID entity ID of the provider to be removed
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param localSession <code>FSSession</code> object
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public void removeProvider(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String userID, String entityID, FSSession localSession)
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster FSUtils.debug.message ("FSSessionManager.removeProvider: Called ");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (localSession != null) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (FSUtils.debug.messageEnabled()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster FSUtils.debug.message("FSSessionManager.removeProvider: " +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "localSession is not null");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster localSession.removeSessionPartner(entityID);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster List sessions = getSessionList(userID);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (sessions != null) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster synchronized (sessions) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Iterator i = sessions.iterator();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster while (i.hasNext ()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster FSSession session = (FSSession)i.next ();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (session != null){
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (FSUtils.debug.messageEnabled()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster FSUtils.debug.message("removeSessionPartner" +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster entityID);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster session.removeSessionPartner(entityID);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Removes a federation session of an user.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param userID user ID
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param session federation session to be removed
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public void removeSession (String userID, FSSession session){
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster FSUtils.debug.message ("FSSessionManager.removeSession: Called");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster List sessions = getSessionList(userID);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (sessions != null){
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster synchronized (sessions) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Iterator i = sessions.iterator ();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster while (i.hasNext ()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster FSSession oldsession = (FSSession)i.next ();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (oldsession.equals(session)) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster sessions.remove(oldsession);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster break;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (sessions.isEmpty()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster removeSessionList(userID);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Adds a federation session to a user.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param userID user ID
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param session federation session to be added
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public void addSession (String userID, FSSession session){
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster FSUtils.debug.message ("FSSessionManager.addSession: Called");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster List sessions = getSessionList(userID);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (sessions != null) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster synchronized (sessions) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Iterator i = sessions.iterator ();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster while (i.hasNext ()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster FSSession oldsession = (FSSession)i.next();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (oldsession.equals(session)){
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster sessions.remove(oldsession);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster break;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster sessions.add(session);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster List newSessionList = new ArrayList ();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster newSessionList.add(session);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster setSessionList(userID, newSessionList);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private FSSessionManager (String metaAlias){
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (FSUtils.debug.messageEnabled()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster FSUtils.debug.message ("FSSessionManager(): created " + metaAlias);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster realm = IDFFMetaUtils.getRealmByMetaAlias(metaAlias);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster try {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster IDFFMetaManager metaManager = FSUtils.getIDFFMetaManager();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster hostEntityId = metaManager.getEntityIDByMetaAlias(metaAlias);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } catch (Exception ie) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (FSUtils.debug.warningEnabled()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster FSUtils.debug.warning("FSSessionManager constructor: couldnot "
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + "obtain hosted entity ID:", ie);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (sessStats.isEnabled()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster dnStats = new FSSessionMapStats(userIDSessionListMap,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "userIDSessionListMap", realm, hostEntityId);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster sessStats.addStatsListener(dnStats);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster reqStats = new FSSessionMapStats(idAuthnRequestMap,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "idAuthnRequestMap", realm, hostEntityId);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster sessStats.addStatsListener(reqStats);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster tokenStats = new FSSessionMapStats(idLocalSessionTokenMap,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "idLocalSessionTokenMap", realm, hostEntityId);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster sessStats.addStatsListener(tokenStats);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster idStats = new FSSessionMapStats(idDestnMap,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "idDestnMap", realm, hostEntityId);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster sessStats.addStatsListener(idStats);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster relayStats = new FSSessionMapStats(relayStateMap,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "relayStateMap", realm, hostEntityId);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster sessStats.addStatsListener(relayStats);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (cleanupInterval != 0 &&
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster requestTimeout != 0 &&
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster SystemConfigurationUtil.isServerMode())
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (FSUtils.debug.messageEnabled()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster FSUtils.debug.message("FSSessionManager.getInstance: " +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "start cleanup thread for " + hostEntityId +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster " in realm " + realm);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster cRunnable = new FSRequestCleanUpRunnable(idAuthnRequestMap,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster idDestnMap, cleanupInterval, requestTimeout);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster SystemTimerPool.getTimerPool().schedule(cRunnable, new Date(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster ((System.currentTimeMillis() + cleanupInterval) / 1000) *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster 1000));
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Gets the singleton instance of <code>FSSessionManager</code>.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param metaAlias hosted provider's metaAlias
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @return The singleton <code>FSSessionManager</code> instance
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * for this provider
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public static synchronized FSSessionManager getInstance (String metaAlias){
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster // not throwing any exception
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (FSUtils.debug.messageEnabled () ) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster FSUtils.debug.message ("FSSessionManager.getInstance: Called "
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + metaAlias);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (metaAlias == null) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster FSUtils.debug.error(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "FSSessionManager.getInstance: null provider meta alias");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return null;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster FSSessionManager instance =
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster (FSSessionManager)instanceMap.get(metaAlias);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (instance == null) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (FSUtils.debug.messageEnabled () ) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster FSUtils.debug.message ("FSSessionManager.getInstance: " +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "new instance of FSSessionManager: " + metaAlias);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster instance = new FSSessionManager(metaAlias);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster synchronized (instanceMap) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster instanceMap.put(metaAlias, instance);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return (instance);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster}// end class