ccf9d4a5c6453fa9f8b839baeee25147865fbb7dJames Phillpotts/*
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: FSAssertionManager.java,v 1.12 2009/08/03 18:18:36 bigfatrat Exp $
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster *
ccf9d4a5c6453fa9f8b839baeee25147865fbb7dJames Phillpotts * Portions Copyrighted 2016 ForgeRock AS.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterpackage com.sun.identity.federation.services;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
ccf9d4a5c6453fa9f8b839baeee25147865fbb7dJames Phillpottsimport static org.forgerock.openam.utils.Time.*;
ccf9d4a5c6453fa9f8b839baeee25147865fbb7dJames Phillpotts
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.common.PeriodicGroupRunnable;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.common.ScheduleableGroupAction;
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.FSException;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.federation.common.FSUtils;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.federation.common.IFSConstants;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.federation.common.LogUtil;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.federation.jaxb.entityconfig.BaseConfigType;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.federation.message.FSAssertion;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.federation.message.FSAssertionArtifact;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.federation.message.FSAuthenticationStatement;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.federation.message.FSSubject;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.federation.message.common.AuthnContext;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.federation.message.common.IDPProvidedNameIdentifier;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.federation.meta.IDFFMetaException;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.federation.meta.IDFFMetaManager;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.federation.meta.IDFFMetaUtils;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.federation.services.util.FSAttributeStatementHelper;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.federation.services.util.FSServiceUtils;
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.SessionException;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.plugin.session.SessionManager;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.plugin.session.SessionProvider;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.saml.assertion.Advice;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.saml.assertion.Assertion;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.saml.assertion.AssertionIDReference;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.saml.assertion.AttributeStatement;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.saml.assertion.AudienceRestrictionCondition;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.saml.assertion.Conditions;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.saml.assertion.NameIdentifier;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.saml.assertion.SubjectConfirmation;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.saml.assertion.SubjectLocality;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.saml.common.SAMLConstants;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.saml.common.SAMLException;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.saml.common.SAMLServiceManager;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.saml.common.SAMLUtils;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.saml.protocol.AssertionArtifact;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.saml.protocol.Status;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.shared.stats.Stats;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.shared.DateUtils;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport java.net.InetAddress;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport java.net.URL;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport java.net.UnknownHostException;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport java.text.ParseException;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport java.util.ArrayList;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport java.util.Date;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport java.util.HashMap;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport java.util.HashSet;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport java.util.Iterator;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport java.util.List;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport java.util.Map;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport java.util.Set;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport java.util.logging.Level;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster/**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * IDP side class which handles assertion and artifact operations.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterpublic final class FSAssertionManager {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Statistics instance for artifacts.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public static Stats artStats = Stats.getInstance("libIDFFArtifactMap");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Statistics instance for assertions.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public static Stats assrtStats = Stats.getInstance("libIDFFAssertionMap");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private static final Integer DEFAULT_CLEANUP_INTERVAL =
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster new Integer(IFSConstants.CLEANUP_INTERVAL_DEFAULT);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private static final Integer DEFAULT_ASSERTION_TIMEOUT =
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster new Integer(IFSConstants.ASSERTION_TIMEOUT_DEFAULT);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private static Map instanceMap = new HashMap();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private Map artIdMap = null;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private Map idEntryMap = null;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private PeriodicGroupRunnable assertionTimeoutRunnable;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private PeriodicGroupRunnable artifactTimeoutRunnable;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private static String SERVICE_NAMING = "fsassertionmanager";
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private int cleanupInterval;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private int assertionTimeout;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private int artifactTimeout;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private FSArtifactStats artIdStats;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private FSAssertionStats assrtIdStats;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private static FedMonAgent agent = MonitorManager.getAgent();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private static FedMonIDFFSvc idffSvc = MonitorManager.getIDFFSvc();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private class Entry {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private String destID = null;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private String artString = null;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private Object token = null;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private Assertion assertion = null;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public Entry(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Assertion assertion,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String destID,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String artString,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Object token)
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster this.assertion = assertion;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster this.destID = destID;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster this.artString = artString;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster this.token = token;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public Assertion getAssertion() {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return assertion;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public String getDestID() {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return destID;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public String getArtifactString() {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return artString;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public Object getSessionToken() {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return token;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private String hostEntityId = null;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private String realm = null;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private String metaAlias = null;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private FSAssertionManager(String metaAlias)
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throws FSException
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster idEntryMap = new HashMap();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster artIdMap = new HashMap();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster this.metaAlias = metaAlias;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster realm = IDFFMetaUtils.getRealmByMetaAlias(metaAlias);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster try {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster IDFFMetaManager metaManager = FSUtils.getIDFFMetaManager();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (metaManager != null) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster hostEntityId = metaManager.getEntityIDByMetaAlias(metaAlias);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } catch (IDFFMetaException ie) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throw new FSException(ie);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (hostEntityId == null) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throw new FSException("nullProviderID", null);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Map attributes;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster cleanupInterval = IFSConstants.CLEANUP_INTERVAL_DEFAULT * 1000;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster assertionTimeout = IFSConstants.ASSERTION_TIMEOUT_DEFAULT * 1000;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster artifactTimeout = IFSConstants.ARTIFACT_TIMEOUT_DEFAULT * 1000;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster try {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster BaseConfigType idpConfig = FSUtils.getIDFFMetaManager().
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster getIDPDescriptorConfig(realm, hostEntityId);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster attributes = IDFFMetaUtils.getAttributes(idpConfig);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster try {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster cleanupInterval = Integer.parseInt(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster IDFFMetaUtils.getFirstAttributeValue(attributes,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster IFSConstants.CLEANUP_INTERVAL)) * 1000;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } catch (Exception e) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster FSUtils.debug.error("FSAssertionManager: "
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + "Exception while parsing interval", e);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster try {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster assertionTimeout = Integer.parseInt(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster IDFFMetaUtils.getFirstAttributeValue(attributes,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster IFSConstants.ASSERTION_INTERVAL)) * 1000;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } catch (Exception e) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster FSUtils.debug.error("AssertionManager: "
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + "Exception while parsing timeout", e);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (assertionTimeout <
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster IFSConstants.ASSERTION_TIMEOUT_ALLOWED_DIFFERENCE) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster assertionTimeout =
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster IFSConstants.ASSERTION_TIMEOUT_ALLOWED_DIFFERENCE;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster try {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster artifactTimeout = Integer.parseInt(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster IDFFMetaUtils.getFirstAttributeValue(attributes,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster IFSConstants.ARTIFACT_TIMEOUT)) * 1000;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } catch(Exception ex){
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (FSUtils.debug.messageEnabled()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster FSUtils.debug.message(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "FSAssertionManager: "
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + "ArtifactTimeOut configuration not found in FSConfig."
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + " Using Default");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } catch(Exception e){
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster FSUtils.debug.error("FSAssertionManager: "
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + "Exception while parsing cleanup assertion :", e);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster ScheduleableGroupAction timeoutAction = new
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster ScheduleableGroupAction() {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public void doGroupAction(Object obj) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Entry entry = (Entry) idEntryMap.remove(obj);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if ((agent != null) && agent.isRunning() && (idffSvc != null)){
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster idffSvc.setAssertions((long)idEntryMap.size());
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (entry != null) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String artString = entry.getArtifactString();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (artString != null) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster artIdMap.remove(artString);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if ((agent != null) &&
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster agent.isRunning() &&
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster (idffSvc != null))
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster idffSvc.setArtifacts((long)artIdMap.size());
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster };
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster assertionTimeoutRunnable = new PeriodicGroupRunnable(timeoutAction,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster cleanupInterval, assertionTimeout, true);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster artifactTimeoutRunnable = new PeriodicGroupRunnable(timeoutAction,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster cleanupInterval, artifactTimeout, true);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster TimerPool pool = SystemTimerPool.getTimerPool();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster pool.schedule(assertionTimeoutRunnable, new Date(((
ccf9d4a5c6453fa9f8b839baeee25147865fbb7dJames Phillpotts currentTimeMillis() + cleanupInterval) / 1000) * 1000));
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster pool.schedule(artifactTimeoutRunnable, new Date(((
ccf9d4a5c6453fa9f8b839baeee25147865fbb7dJames Phillpotts currentTimeMillis() + cleanupInterval) / 1000) * 1000));
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (assrtStats.isEnabled()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster assrtIdStats = new FSAssertionStats(idEntryMap, realm,hostEntityId);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster assrtStats.addStatsListener(assrtIdStats);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster artIdStats = new FSArtifactStats(artIdMap, realm, hostEntityId);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster artStats.addStatsListener(artIdStats);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Returns hosted provider meta alias.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @return hosted provider meta alias.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @see #setMetaAlias(String)
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public String getMetaAlias() {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return metaAlias;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Sets hosted provider meta alias.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param metaAlias hosted provider meta alias
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @see #getMetaAlias()
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public void setMetaAlias(String metaAlias) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster this.metaAlias = metaAlias;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Returns the realm which hosted provider resides.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @return the realm which hosted provider resides.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @see #setRealm(String)
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public String getRealm() {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return realm;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Sets the realm which hosted provider resides.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param realm The realm which hosted provider resides
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @see #getRealm()
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public void setRealm(String realm) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster this.realm = realm;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Returns hosted provider Entity ID.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @return hosted provider Entity ID
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @see #setEntityId(String)
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public String getEntityId() {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return hostEntityId;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Sets hosted provider Entity ID.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param entityId hosted provider Entity ID
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @see #getEntityId()
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public void setEntityId(String entityId) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster this.hostEntityId = entityId;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Returns artifact to assertion ID map.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @return artifact to assertion ID map
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public Map getArtIdMap() {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return artIdMap;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Returns assertion ID to <code>Entry</code> object map.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @return assertion ID to <code>Entry</code> object map
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public Map getIdEntryMap() {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return idEntryMap;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Returns a <code>FSAssertionManager</code> instance.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param metaAlias hosted entity ID
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @return <code>FSAssertionManager</code> instance.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @exception FSException if error occurrs.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public static synchronized FSAssertionManager getInstance(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String metaAlias)
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throws FSException
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster FSUtils.debug.message("FSAssertionManager.getInstance: Called");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster FSAssertionManager instance =
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster (FSAssertionManager) instanceMap.get(metaAlias);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (instance == null) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (FSUtils.debug.messageEnabled() ) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster FSUtils.debug.message("FSAssertionManager.getInstance: " +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "Constructing a new instance of FSAssertionManager");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster instance = new FSAssertionManager(metaAlias);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster synchronized (instanceMap) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster instanceMap.put(metaAlias, instance);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return(instance);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Creates an assertion artifact.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param id session ID
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param realm the realm in which the provider resides
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param spEntityID service provider's entity ID
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param spHandle service provider issued <code>NameIdentifier</code>
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param idpHandle identity provider issued <code>NameIdentifier</code>
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param inResponseTo value to InResponseTo attribute. It's the request ID.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param minorVersion request minor version, used to determine assertion's
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * minor version
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @exception FSException,SAMLException if error occurrs
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public AssertionArtifact createFSAssertionArtifact(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String id,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String realm,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String spEntityID,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster NameIdentifier spHandle,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster NameIdentifier idpHandle,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String inResponseTo,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster int minorVersion)
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throws FSException, SAMLException
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster // check input
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if ((id == null) ||(spEntityID == null)) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (FSUtils.debug.messageEnabled()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster FSUtils.debug.message("FSAssertionManager: null input for"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + " method createFSAssertionArtifact.");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throw new FSException("nullInput",null);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster // create assertion id and artifact
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String handle = SAMLUtils.generateAssertionHandle();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (handle == null) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (FSUtils.debug.messageEnabled()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster FSUtils.debug.message("FSAssertionManager.createFSAssertionArt"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + "ifact: couldn't generate assertion handle.");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throw new FSException("errorCreateArtifact", null);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster // TODO: should obtain it through meta
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String sourceSuccinctID = FSUtils.generateSourceID(hostEntityId);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster byte bytesSourceId[] = SAMLUtils.stringToByteArray(sourceSuccinctID);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster byte bytesHandle[] = null;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster try{
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster bytesHandle = handle.getBytes(IFSConstants.SOURCEID_ENCODING);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } catch(Exception e){
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster FSUtils.debug.error(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "FSAssertionManager.createFSAssertionArt: ", e);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return null;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster AssertionArtifact art = new FSAssertionArtifact(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster bytesSourceId, bytesHandle);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster int assertionMinorVersion = IFSConstants.FF_11_ASSERTION_MINOR_VERSION;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (minorVersion == IFSConstants.FF_12_PROTOCOL_MINOR_VERSION) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster assertionMinorVersion =
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster IFSConstants.FF_12_ART_ASSERTION_MINOR_VERSION;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Assertion assertion =
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster createFSAssertion(id,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster art,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster realm,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster spEntityID,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster spHandle,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster idpHandle,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster inResponseTo,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster assertionMinorVersion);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return art;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Creates an assertion artifact.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param id session ID
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param artifact assertion artifact
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param realm the realm under which the entity resides.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param spEntityID service provider's entity ID
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param spHandle service provider issued <code>NameIdentifier</code>
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param idpHandle identity provider issued <code>NameIdentifier</code>
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param inResponseTo value to InResponseTo attribute. It's the request ID.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param assertionMinorVersion minor version the assertion should use
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @exception FSException,SAMLException if error occurrs
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public FSAssertion createFSAssertion(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String id,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster AssertionArtifact artifact,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String realm,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String spEntityID,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster NameIdentifier spHandle,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster NameIdentifier idpHandle,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String inResponseTo,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster int assertionMinorVersion)
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throws FSException, SAMLException
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster FSUtils.debug.message(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "FSAssertionManager.createFSAssertion(id): Called");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster // check input
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if ((id == null) ||(spEntityID == null)) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (FSUtils.debug.messageEnabled()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster FSUtils.debug.message("FSAssertionManager: null input for"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + " method createFSAssertion.");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throw new FSException("nullInput",null);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String destID = spEntityID;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String authMethod = null;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String authnContextStatementRef = null;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String authnContextClassRef = null;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Date authInstant = null;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String securityDomain = null;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Object token = null;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String univId = null;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster SubjectLocality authLocality = null;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster FSSessionManager sessionManager =
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster FSSessionManager.getInstance(metaAlias);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster IDFFMetaManager metaManager = FSUtils.getIDFFMetaManager();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Map attributes = new HashMap();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (metaManager != null) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster BaseConfigType idpConfig = null;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster try {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster idpConfig = metaManager.getIDPDescriptorConfig(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster realm, hostEntityId);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } catch (IDFFMetaException e) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (FSUtils.debug.messageEnabled()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster FSUtils.debug.message(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "FSAssertionManager.createFSAssertion: exception while"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + " obtaining idp extended meta:", e);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster idpConfig = null;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (idpConfig != null) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster attributes = IDFFMetaUtils.getAttributes(idpConfig);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster try {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster SessionProvider sessionProvider = SessionManager.getProvider();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster token = sessionProvider.getSession(id);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String[] strAuthInst = null;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster try {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster strAuthInst = sessionProvider.getProperty(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster token, SessionProvider.AUTH_INSTANT);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } catch (UnsupportedOperationException ue) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (FSUtils.debug.warningEnabled()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster FSUtils.debug.warning(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "FSAssertionManager.createFSAssertion(id):", ue);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } catch (SessionException se) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (FSUtils.debug.warningEnabled()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster FSUtils.debug.warning(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "FSAssertionManager.createFSAssertion(id):", se);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if ((strAuthInst != null) && (strAuthInst.length >= 1)){
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster try {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster authInstant = DateUtils.stringToDate(strAuthInst[0]);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } catch(ParseException ex){
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (FSUtils.debug.messageEnabled()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster FSUtils.debug.message("FSAssertionManager." +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "createFSAssertion(id): AuthInstant not found" +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "in the Token");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } else {
ccf9d4a5c6453fa9f8b839baeee25147865fbb7dJames Phillpotts authInstant = newDate();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (FSUtils.debug.messageEnabled()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster FSUtils.debug.message(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "FSAssertionManager.createFSAssertion(id):AuthInstant = "
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + authInstant);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster try {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String[] strAuthMethod = sessionProvider.getProperty(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster token, SessionProvider.AUTH_METHOD);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if ((strAuthMethod != null) && (strAuthMethod.length >= 1)) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster authMethod = strAuthMethod[0];
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } catch (UnsupportedOperationException ue) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (FSUtils.debug.warningEnabled()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster FSUtils.debug.warning(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "FSAssertionManager.createFSAssertion(id):", ue);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } catch (SessionException se) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (FSUtils.debug.warningEnabled()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster FSUtils.debug.warning(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "FSAssertionManager.createFSAssertion(id):", se);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String assertionIssuer = IDFFMetaUtils.getFirstAttributeValue(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster attributes, IFSConstants.ASSERTION_ISSUER);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (assertionIssuer == null) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster assertionIssuer = SystemConfigurationUtil.getProperty(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "com.iplanet.am.server.host");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster try {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String ipAddress =
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster InetAddress.getByName(assertionIssuer).getHostAddress();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster authLocality = new SubjectLocality(ipAddress, assertionIssuer);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } catch(UnknownHostException uhe) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster FSUtils.debug.error("FSAssertionManager.constructor: couldn't"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + " obtain the localhost's ipaddress:", uhe);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster try {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster FSSession session = sessionManager.getSession(token);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster authnContextClassRef = session.getAuthnContext();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster authnContextStatementRef = authnContextClassRef;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } catch(Exception ex){
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (FSUtils.debug.messageEnabled()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster FSUtils.debug.message("FSAssertionManager.createFSAssertion"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + "(id): AuthnContextStatement for the token is null"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + " Assertion will not contain any "
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + " AuthenticationStatement");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster authnContextStatementRef = null;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (authnContextStatementRef != null){
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (assertionMinorVersion ==
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster IFSConstants.FF_11_ASSERTION_MINOR_VERSION)
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster authMethod = IFSConstants.AC_XML_NS;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } else {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster authMethod = IFSConstants.AC_12_XML_NS;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (FSUtils.debug.messageEnabled()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster FSUtils.debug.message(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "FSAssertionManager.createFSAssertion(id):"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + "AuthnContextStatement used for authenticating the user: "
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + authnContextStatementRef);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster univId = sessionProvider.getPrincipalName(token);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster securityDomain = hostEntityId;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } catch(Exception e) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster FSUtils.debug.error("FSAssertionManager.createAssertion(id):"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + " exception retrieving info from the session: ", e);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throw new FSException(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "alliance_manager_no_local_descriptor", null, e);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (FSUtils.debug.messageEnabled()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster FSUtils.debug.message("FSAssertionManager.createAssertion(id):"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + " Creating Authentication Assertion for user with"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + "opaqueHandle= "
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + spHandle.getName()
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + " And SecurityDomain= "
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + securityDomain);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster SubjectConfirmation subConfirmation = null;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String artString = null;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (artifact != null) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster artString = artifact.getAssertionArtifact();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (assertionMinorVersion ==
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster IFSConstants.FF_11_ASSERTION_MINOR_VERSION)
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster subConfirmation = new SubjectConfirmation(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster SAMLConstants.DEPRECATED_CONFIRMATION_METHOD_ARTIFACT);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } else {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster subConfirmation = new SubjectConfirmation(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster SAMLConstants.CONFIRMATION_METHOD_ARTIFACT);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster subConfirmation.setSubjectConfirmationData(artString);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } else {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster // set to bearer for POST profile
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster subConfirmation = new SubjectConfirmation(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster SAMLConstants.CONFIRMATION_METHOD_BEARER);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster IDPProvidedNameIdentifier idpNi = null;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (assertionMinorVersion ==
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster IFSConstants.FF_12_POST_ASSERTION_MINOR_VERSION ||
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster assertionMinorVersion ==
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster IFSConstants.FF_12_ART_ASSERTION_MINOR_VERSION)
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster idpNi = new IDPProvidedNameIdentifier(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster idpHandle.getName(),
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster idpHandle.getNameQualifier(),
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster spHandle.getFormat());
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster idpNi.setMinorVersion(IFSConstants.FF_12_PROTOCOL_MINOR_VERSION);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } else {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster idpNi = new IDPProvidedNameIdentifier(idpHandle.getNameQualifier(),
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster idpHandle.getName());
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster FSSubject sub = new FSSubject(spHandle, subConfirmation, idpNi);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster AuthnContext authnContext = new AuthnContext(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster authnContextClassRef, authnContextStatementRef);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster authnContext.setMinorVersion(assertionMinorVersion);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster FSAuthenticationStatement statement = new FSAuthenticationStatement(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster authMethod, authInstant, sub, authLocality, null, authnContext);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster FSSession session = sessionManager.getSession(univId, id);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (session == null){
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (FSUtils.debug.messageEnabled()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster FSUtils.debug.message("FSAssertionManager.createAssertion(id): "
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + "AssertionManager could not find a valid Session for"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + "userId: "
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + univId + " SessionID: " + id);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return null;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String sessionIndex = session.getSessionIndex();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (sessionIndex == null) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster sessionIndex = SAMLUtils.generateID();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster session.setSessionIndex(sessionIndex);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (FSUtils.debug.messageEnabled()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster FSUtils.debug.message(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "FSAssertionManager.createAssertion(id): SessionIndex: " +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster sessionIndex);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster statement.setSessionIndex(sessionIndex);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster //setReauthenticateOnOrAfter date
ccf9d4a5c6453fa9f8b839baeee25147865fbb7dJames Phillpotts Date issueInstant = newDate();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster // get this period from the config
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster FSUtils.debug.message("here before date");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Date notAfter;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (artifact != null) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster notAfter = new Date(issueInstant.getTime() + artifactTimeout);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } else {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster notAfter = new Date(issueInstant.getTime() + assertionTimeout);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster FSUtils.debug.message("here after date");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster statement.setReauthenticateOnOrAfter(notAfter);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (FSUtils.debug.messageEnabled()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster FSUtils.debug.message("FSAssertionManager.createAssertion(id):"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + " Authentication Statement: " + statement.toXMLString());
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Conditions cond = new Conditions(null, notAfter);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if ((destID != null) &&(destID.length() != 0)) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster List targets = new ArrayList();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster targets.add(destID);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster cond.addAudienceRestrictionCondition(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster new AudienceRestrictionCondition(targets));
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (FSUtils.debug.messageEnabled()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster FSUtils.debug.message("FSAssertionManager.createAssertion(id):"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + " Authentication Statement: " + statement.toXMLString());
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * This is added to create an attribute statement for the bootstrap
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * information.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster AttributeStatement attribStatement = null;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Advice advice = null;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String generateBootstrapping = IDFFMetaUtils.getFirstAttributeValue(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster attributes, IFSConstants.GENERATE_BOOTSTRAPPING);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (assertionMinorVersion != IFSConstants.FF_11_ASSERTION_MINOR_VERSION
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster &&
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster (generateBootstrapping != null &&
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster generateBootstrapping.equals("true")))
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster AuthnContext authContext = new AuthnContext(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster null, authnContextStatementRef);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster authContext.setMinorVersion(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster IFSConstants.FF_12_PROTOCOL_MINOR_VERSION);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster try {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster FSDiscoveryBootStrap bootStrap = new FSDiscoveryBootStrap(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster token, authContext, sub, univId, destID, realm);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster attribStatement = bootStrap.getBootStrapStatement();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (bootStrap.hasCredentials()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster advice = bootStrap.getCredentials();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } catch (Exception e) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster FSUtils.debug.error("FSAssertionManager.createAssertion(id):"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + "exception when generating bootstrapping resource "
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + "offering:", e);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster AssertionIDReference aID = new AssertionIDReference();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Set statements = new HashSet();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster statements.add(statement);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (attribStatement != null) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster statements.add(attribStatement);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String attributePluginImpl = IDFFMetaUtils.getFirstAttributeValue(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster attributes, IFSConstants.ATTRIBUTE_PLUGIN);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if ((attributePluginImpl != null) &&
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster (attributePluginImpl.length() != 0))
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster try {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Object pluginClass =
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Thread.currentThread().getContextClassLoader().loadClass(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster attributePluginImpl).newInstance();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster List attribStatements = null;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (pluginClass instanceof FSRealmAttributePlugin) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster FSRealmAttributePlugin attributePlugin =
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster (FSRealmAttributePlugin)pluginClass;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster attribStatements =
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster attributePlugin.getAttributeStatements(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster realm, hostEntityId, destID, sub, token);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } else if (pluginClass instanceof FSAttributePlugin) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster FSAttributePlugin attributePlugin =
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster (FSAttributePlugin)pluginClass;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster attribStatements =
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster attributePlugin.getAttributeStatements(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster hostEntityId, destID, sub, token);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if ((attribStatements != null) &&
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster (attribStatements.size() != 0))
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Iterator iter = attribStatements.iterator();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster while (iter.hasNext()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster statements.add((AttributeStatement)iter.next());
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } catch (Exception ex) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster FSUtils.debug.error(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "FSAssertion.createAssertion(id):getAttributePlugin:", ex);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (IDFFMetaUtils.isAutoFedEnabled(attributes)) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster AttributeStatement autoFedStatement =
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster FSAttributeStatementHelper.getAutoFedAttributeStatement(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster realm, hostEntityId, sub, token);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster statements.add(autoFedStatement);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster FSAssertion assertion = new FSAssertion(aID.getAssertionIDReference(),
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster hostEntityId,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster issueInstant,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster cond,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster advice,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster statements,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster inResponseTo);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster assertion.setMinorVersion(assertionMinorVersion);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster assertion.setID(aID.getAssertionIDReference());
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (FSUtils.debug.messageEnabled()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster FSUtils.debug.message("FSAssertionManager.createAssertion(id):"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + " Assertion created successfully: "
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + assertion.toXMLString());
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String aIDString = assertion.getAssertionID();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Entry entry = new Entry(assertion, destID, artString, token);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Integer maxNumber = null;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster try {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster int temp = Integer.parseInt(IDFFMetaUtils.getFirstAttributeValue(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster attributes, IFSConstants.ASSERTION_LIMIT));
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster maxNumber = new Integer(temp);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } catch(Exception ex){
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (FSUtils.debug.messageEnabled()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster FSUtils.debug.message("FSAssertionManager.createAssertion(id):"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + " Assertion MAX number configuration not found in "
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + "FSConfig. Using Default");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster maxNumber = null;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (maxNumber == null) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster maxNumber = new Integer(IFSConstants.ASSERTION_MAX_NUMBER_DEFAULT);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster int maxValue = maxNumber.intValue();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if ((maxValue != 0) &&(idEntryMap.size() > maxValue)) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster FSUtils.debug.error("FSAssertionManager.createAssertion: "
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + "reached maxNumber of assertions.");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throw new FSException("errorCreateAssertion", null);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Object oldEntry = null;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster try {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster synchronized(idEntryMap) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster oldEntry = idEntryMap.put(aIDString, entry);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if ((agent != null) && agent.isRunning() && (idffSvc != null)) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster idffSvc.setAssertions((long)idEntryMap.size());
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } catch(Exception e) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (FSUtils.debug.messageEnabled()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster FSUtils.debug.message("FSAssertionManager: couldn't add "
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + "to idEntryMap.", e);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throw new FSException("errorCreateAssertion",null);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (LogUtil.isAccessLoggable(Level.FINER)) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String[] data = { assertion.toString() };
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster LogUtil.access(Level.FINER,LogUtil.CREATE_ASSERTION,data, token);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } else {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String[] data = { assertion.getAssertionID() } ;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster LogUtil.access(Level.INFO,LogUtil.CREATE_ASSERTION,data, token);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (artString != null) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster try {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster synchronized(artIdMap) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster oldEntry = artIdMap.put(artString, aIDString);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if ((agent != null) && agent.isRunning() && (idffSvc != null)){
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster idffSvc.setArtifacts((long)artIdMap.size());
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } catch(Exception e) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (FSUtils.debug.messageEnabled()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster FSUtils.debug.message("FSAssertionManager: couldn't add "
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + "artifact to the artIdMap.", e);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throw new FSException("errorCreateArtifact",null);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (oldEntry != null) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster artifactTimeoutRunnable.removeElement(aIDString);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster artifactTimeoutRunnable.addElement(aIDString);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } else {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (oldEntry != null) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster assertionTimeoutRunnable.removeElement(aIDString);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster assertionTimeoutRunnable.addElement(aIDString);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (FSUtils.debug.messageEnabled()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster FSUtils.debug.message("FSAssertionManager.createAssertion(id):"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + " Returning Assertion: " + assertion.toXMLString());
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return assertion;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Retrieves the assertion associated with an artifact.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param artifact assertion artifact
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param destID destination ID of the site who sent the request
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @return assertion associated with the artifact
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @exception FSException if the assertion could not be retrieved
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public Assertion getAssertion(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster AssertionArtifact artifact,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String destID
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster ) throws FSException
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if ((artifact == null) ||
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster (destID == null || destID.length() == 0))
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster FSUtils.debug.message("FSAssertionManager: input is null.");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throw new FSException("nullInput",null);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String artString = artifact.getAssertionArtifact();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster // get server id.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String remoteUrl = SAMLUtils.getServerURL(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster artifact.getAssertionHandle());
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (remoteUrl != null) { // not this server
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster // call AssertionManagerClient.getAssertion
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (FSUtils.debug.messageEnabled()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster FSUtils.debug.message("AssertionManager.getAssertion(art, " +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "destid: calling another server in lb site:" + remoteUrl);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster FSAssertionManagerClient amc = new FSAssertionManagerClient(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster metaAlias, getFullServiceURL(remoteUrl));
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return amc.getAssertion(artifact, destID);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } // else
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String aIDString = null;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster try {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster aIDString = (String) artIdMap.get(artString);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (aIDString == null) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throw new FSException("nullInput",null);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } catch(Exception e) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (FSUtils.debug.messageEnabled()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster FSUtils.debug.message("FSAssertionManager.getAssertion(art, de"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + "stid): no AssertionID found corresponding to artifact.");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throw new FSException("noMatchingAssertion",null);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Entry entry = null;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster try {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster entry =(Entry) idEntryMap.get(aIDString);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (entry == null) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throw new FSException("nullEntry",null);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } catch(Exception e) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (FSUtils.debug.messageEnabled()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster FSUtils.debug.message("FSAssertionManager.getAssertion(art, de"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + "stid): no Entry found corresponding to artifact.");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throw new FSException("noMatchingAssertion", null);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster // check the destination id
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String dest = entry.getDestID();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (dest == null) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (FSUtils.debug.messageEnabled()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster FSUtils.debug.message("FSAssertionManager.getAssertion(art, de"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + "stid): no destID found corresponding to artifact.");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throw new FSException("noDestIDMatchingArtifact",null);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (!dest.equals(destID)) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (FSUtils.debug.messageEnabled()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster FSUtils.debug.message("FSAssertionManager.getAssertion(art, de"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + "stid): destinationID doesn't match.");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throw new FSException("destIDNotMatch",null);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster synchronized(artIdMap) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster artIdMap.remove(artString);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if ((agent != null) && agent.isRunning() && (idffSvc != null)) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster idffSvc.setArtifacts((long)artIdMap.size());
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster artifactTimeoutRunnable.removeElement(aIDString);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster synchronized(idEntryMap) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster idEntryMap.remove(aIDString);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if ((agent != null) && agent.isRunning() && (idffSvc != null)) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster idffSvc.setAssertions((long)idEntryMap.size());
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster assertionTimeoutRunnable.removeElement(aIDString);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Assertion assertion = entry.getAssertion();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (assertion == null) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (FSUtils.debug.messageEnabled()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster FSUtils.debug.message("FSAssertionManager.getAssertion(art, de"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + "stid): no Assertion found corresponding to aID.");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throw new FSException("noMatchingAssertion",null);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (!assertion.isTimeValid()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (FSUtils.debug.messageEnabled()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster FSUtils.debug.message("FSAssertionManager: assertion "
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + aIDString + " is expired.");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throw new FSException("assertionTimeNotValid",null);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return assertion;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Finds the destination id for whom the artifact is issued for.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param artifact assertion artifact
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @return destination id
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @exception FSException if error occurrs
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public String getDestIdForArtifact(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster AssertionArtifact artifact
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster ) throws FSException
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster FSUtils.debug.message(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "FSAssertionManager.getDestIdForArtifact: Called");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String artString = artifact.getAssertionArtifact();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster // get server id.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String remoteUrl = SAMLUtils.getServerURL(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster artifact.getAssertionHandle());
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (remoteUrl != null) { // not this server
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster // call FSAssertionManagerClient.getAssertion
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (FSUtils.debug.messageEnabled()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster FSUtils.debug.message(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "AssertionManager.getDestIdForArtifact(art, " +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "destid: calling another server in lb site:" + remoteUrl);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster FSAssertionManagerClient amc = new FSAssertionManagerClient(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster metaAlias, getFullServiceURL(remoteUrl));
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return amc.getDestIdForArtifact(artifact);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } // else
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String aIDString = null;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster try {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster aIDString =(String) artIdMap.get(artString);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (aIDString == null) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throw new FSException("nullInput",null);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } catch(Exception e) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (FSUtils.debug.messageEnabled()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster FSUtils.debug.message(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "FSAssertionManager.getDestIdForArtifact :" +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "no AssertionID found corresponding to artifact.");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throw new FSException("noMatchingAssertion",null);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Entry entry = null;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster try {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster entry =(Entry) idEntryMap.get(aIDString);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (entry == null) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throw new FSException("nullEntry",null);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } catch(Exception e) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (FSUtils.debug.messageEnabled()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster FSUtils.debug.message(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "FSAssertionManager.getDestIdForArtifact: " +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "no Entry found corresponding to artifact.");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throw new FSException("noMatchingAssertion",null);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String dest = entry.getDestID();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (dest == null) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (FSUtils.debug.messageEnabled()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster FSUtils.debug.message(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "FSAssertionManager.getDestIdForArtifact: " +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "no destID found corresponding to artifact.");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throw new FSException("noDestIDMatchingArtifact",null);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (FSUtils.debug.messageEnabled()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster FSUtils.debug.message(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "FSAssertionManager.getDestIdForArtifact: " +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "Destination ProviderID found for Artifact: " + dest);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return dest;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private String getFullServiceURL(String shortUrl) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String result = null;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster try {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster URL u = new URL(shortUrl);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster URL weburl = SystemConfigurationUtil.getServiceURL(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster SERVICE_NAMING, u.getProtocol(), u.getHost(), u.getPort(),
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster u.getPath());
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster result = weburl.toString();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (FSUtils.debug.messageEnabled()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster FSUtils.debug.message(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "AssertionManager.getFullServiceURL:full remote URL is: " +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster result);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } catch (Exception e) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (FSUtils.debug.warningEnabled()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster FSUtils.debug.warning(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "AssertionManager.getFullServiceURL:Exception:", e);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return result;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Specific assertion class containing date and status.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * This is used to store information about a fault artifact.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster class ErrorAssertion extends Assertion {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private Status _status;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public ErrorAssertion( java.util.Date issue, Status status ) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster _issueInstant = issue;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster _status = status;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public Status getStatus() {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return _status;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Store the status of a given artifact (original error)
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param aa reference artifact
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param s stored status
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public void setErrStatus( AssertionArtifact aa, Status s ) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (FSUtils.debug.messageEnabled()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster FSUtils.debug.message("setErrStatus( " + aa + ", " + s + " )" );
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String artString = aa.getAssertionArtifact();
ccf9d4a5c6453fa9f8b839baeee25147865fbb7dJames Phillpotts Assertion assertion = new ErrorAssertion(newDate(), s);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Entry e = new Entry( assertion, null, artString, null );
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Object oldEntry = null;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster synchronized (idEntryMap) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster oldEntry = idEntryMap.put( artString, e );
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (oldEntry != null) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster assertionTimeoutRunnable.removeElement(artString);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if ((agent != null) && agent.isRunning() && (idffSvc != null)) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster idffSvc.setAssertions((long)idEntryMap.size());
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster assertionTimeoutRunnable.addElement(artString);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Retrieve the original status of a reference artifact.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param aa reference artifact
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @return The status as originally recorded.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public Status getErrorStatus( AssertionArtifact aa ) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (FSUtils.debug.messageEnabled()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster FSUtils.debug.message("getErrorStatus( " + aa + " )" );
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Entry e = null;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Status s = null;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String remoteUrl = SAMLUtils.getServerURL(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster aa.getAssertionHandle());
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (remoteUrl != null) { // not this server
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster // call AssertionManagerClient.getAssertion
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (FSUtils.debug.messageEnabled()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster FSUtils.debug.message("AssertionManager.getAssertion(art, "
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + "destid: calling another server in lb site:"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + remoteUrl);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster try {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster FSAssertionManagerClient amc = new FSAssertionManagerClient(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster metaAlias, getFullServiceURL(remoteUrl));
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster s = amc.getErrorStatus( aa );
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } catch ( FSException fse ) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster FSUtils.debug.error( fse.getMessage() );
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } else {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster e = (Entry) idEntryMap.get( aa.getAssertionArtifact() );
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if ( null != e ) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Assertion assertion = e.getAssertion();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if ( assertion instanceof ErrorAssertion ) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster ErrorAssertion eassert = (ErrorAssertion) assertion;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster s = eassert.getStatus();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return s;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster}