/**
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
*
* Copyright (c) 2006 Sun Microsystems Inc. All Rights Reserved
*
* The contents of this file are subject to the terms
* of the Common Development and Distribution License
* (the License). You may not use this file except in
* compliance with the License.
*
* You can obtain a copy of the License at
* https://opensso.dev.java.net/public/CDDLv1.0.html or
* opensso/legal/CDDLv1.0.txt
* See the License for the specific language governing
* permission and limitations under the License.
*
* When distributing Covered Code, include this CDDL
* Header Notice in each file and include the License file
* at opensso/legal/CDDLv1.0.txt.
* If applicable, add the following below the CDDL Header,
* with the fields enclosed by brackets [] replaced by
* your own identifying information:
* "Portions Copyrighted [year] [name of copyright owner]"
*
* $Id: AssertionManagerImpl.java,v 1.3 2008/08/07 21:41:35 hengming Exp $
*
*/
package com.sun.identity.saml;
import java.util.*;
import com.sun.identity.saml.common.SAMLUtils;
import com.sun.identity.saml.assertion.Assertion;
import com.sun.identity.saml.assertion.Attribute;
import com.sun.identity.saml.assertion.AssertionIDReference;
import com.sun.identity.saml.protocol.AssertionArtifact;
import com.sun.identity.shared.xml.XMLUtils;
import com.sun.identity.shared.encode.Base64;
import com.sun.identity.saml.common.SAMLException;
import com.sun.identity.plugin.session.SessionException;
import com.sun.identity.plugin.session.SessionManager;
import com.sun.identity.plugin.session.SessionProvider;
public class AssertionManagerImpl implements AssertionManagerIF {
private static AssertionManager assertionManager;
private static Object lock = new Object();
/**
* Checks for exceptions during initialization.
*/
private static void checkInitialization() throws SAMLException {
if (assertionManager == null) {
synchronized(lock) {
if (assertionManager == null) {
try {
assertionManager = AssertionManager.getInstance();
} catch (SAMLException samle) {
// This should not happen . Write to error.
SAMLUtils.debug.error(
"AssertionManagerImpl: Unable to get "
+ "AssertionManager", samle);
throw(samle);
}
}
}
}
}
public void checkForLocal() {
AssertionManagerClient.isLocal = true;
}
public String createAssertion(String ssoToken) throws SAMLException {
checkInitialization();
Object token = null;
try {
SessionProvider sessionProvider = SessionManager.getProvider();
token = sessionProvider.getSession(ssoToken);
} catch (SessionException ssoe) {
if (SAMLUtils.debug.messageEnabled()) {
SAMLUtils.debug.message(
"AssertionManagerImpl:createAssertion(SSO) " + ssoe);
}
throw (new SAMLException(ssoe.getMessage()));
}
Assertion a = assertionManager.createAssertion(token);
// a cannot be null since if a cannot be returned, SAMLException
// would be thrown
return (a.toString(true, true));
}
public String createAssertion2(String ssoToken, List attributes)
throws SAMLException
{
checkInitialization();
Object token = null;
try {
SessionProvider sessionProvider = SessionManager.getProvider();
token = sessionProvider.getSession(ssoToken);
} catch (SessionException ssoe) {
if (SAMLUtils.debug.messageEnabled()) {
SAMLUtils.debug.message(
"AssertionManagerImpl:createAssertion(SSO + attrs) " +
ssoe);
}
throw (new SAMLException(ssoe.getMessage()));
}
LinkedList ll = new LinkedList();
for (Iterator iter = attributes.iterator(); iter.hasNext();) {
ll.add(new Attribute(XMLUtils.toDOMDocument((String)
iter.next(), SAMLUtils.debug).getDocumentElement()));
}
Assertion a = assertionManager.createAssertion(token, ll);
return (a.toString(true, true));
}
public String createAssertionArtifact(String assertion, String target)
throws SAMLException
{
checkInitialization();
Assertion a = new Assertion(XMLUtils.toDOMDocument(assertion,
SAMLUtils.debug).getDocumentElement());
// no need to check null since SAMLException would be thrown if
// there is any error.
AssertionArtifact aa = assertionManager.createAssertionArtifact(
a, SAMLUtils.byteArrayToString(Base64.decode(target)));
return (aa.getAssertionArtifact());
}
public String getAssertion(String artifact, Set destID)
throws SAMLException
{
checkInitialization();
Set destSet = new HashSet();
Iterator it = destID.iterator();
while (it.hasNext()) {
destSet.add(SAMLUtils.byteArrayToString(Base64.decode((
(String) it.next()))));
}
Assertion a = assertionManager.getAssertion(new AssertionArtifact(
artifact), destSet);
return (a.toString(true, true));
}
public String getAssertion2(String artifact, String destID)
throws SAMLException
{
checkInitialization();
Assertion a = assertionManager.getAssertion(new AssertionArtifact(
artifact), SAMLUtils.byteArrayToString(Base64.decode(destID)));
return (a.toString(true, true));
}
public String getAssertionByIdRef(String idref, Set destID)
throws SAMLException
{
checkInitialization();
Set destSet = new HashSet();
Iterator it = destID.iterator();
while (it.hasNext()) {
destSet.add(SAMLUtils.byteArrayToString(Base64.decode((
(String) it.next()))));
}
Assertion a = assertionManager.getAssertion(new AssertionIDReference(
idref), destSet);
return (a.toString(true, true));
}
public String getAssertionByIdRef2(String idref, String destID)
throws SAMLException
{
checkInitialization();
Assertion a = assertionManager.getAssertion(new AssertionIDReference(
idref), SAMLUtils.byteArrayToString(Base64.decode(destID)));
return (a.toString(true, true));
}
public String getAssertionByIdRefToken(String idref, String ssoToken)
throws SAMLException
{
checkInitialization();
Object token = null;
try {
SessionProvider sessionProvider = SessionManager.getProvider();
token = sessionProvider.getSession(ssoToken);
} catch (SessionException ssoe) {
if (SAMLUtils.debug.messageEnabled()) {
SAMLUtils.debug.message(
"AssertionManagerImpl:getAssertionByIdRefToken: " + ssoe);
}
throw (new SAMLException(ssoe.getMessage()));
}
Assertion a = assertionManager.getAssertion(new AssertionIDReference(
idref), token);
return (a.toString(true, true));
}
public Set getAssertionArtifacts(String ssoToken) throws SAMLException {
checkInitialization();
try {
SessionProvider sessionProvider = SessionManager.getProvider();
Object token = sessionProvider.getSession(ssoToken);
return (assertionManager.getAssertionArtifacts(token));
} catch (SessionException ssoe) {
if (SAMLUtils.debug.messageEnabled()) {
SAMLUtils.debug.message(
"AssertionManagerImpl:getAssertionArtifacts: " + ssoe);
}
throw (new SAMLException(ssoe.getMessage()));
}
}
public Set getAssertions(String ssoToken) throws SAMLException {
checkInitialization();
try {
SessionProvider sessionProvider = SessionManager.getProvider();
Object token = sessionProvider.getSession(ssoToken);
return (assertionManager.getAssertions(token));
} catch (SessionException ssoe) {
if (SAMLUtils.debug.messageEnabled()) {
SAMLUtils.debug.message(
"AssertionManagerImpl:getAssertions: " + ssoe);
}
throw (new SAMLException(ssoe.getMessage()));
}
}
}