7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeper/*
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeper * The contents of this file are subject to the terms of the Common Development and
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeper * Distribution License (the License). You may not use this file except in compliance with the
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeper * License.
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeper *
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeper * You can obtain a copy of the License at legal/CDDLv1.0.txt. See the License for the
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeper * specific language governing permission and limitations under the License.
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeper *
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeper * When distributing Covered Software, include this CDDL Header Notice in each file and include
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeper * the License file at legal/CDDLv1.0.txt. If applicable, add the following below the CDDL
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeper * Header, with the fields enclosed by brackets [] replaced by your own identifying
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeper * information: "Portions copyright [year] [name of copyright owner]".
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeper *
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeper * Copyright 2014 ForgeRock AS.
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeper */
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeper
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeperpackage com.sun.identity.saml2.common;
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeper
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeperimport org.forgerock.guice.core.InjectorHolder;
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeperimport org.forgerock.openam.federation.saml2.SAML2TokenRepository;
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeperimport org.forgerock.openam.federation.saml2.SAML2TokenRepositoryException;
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeper
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeperimport java.util.List;
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeper
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeper/**
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeper * Provides helper methods specifically around using SAML2 Failover and the SAML2 Token Repository.
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeper * Users of these methods much ensure that SAML2 Failover is enabled by checking the result of the
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeper * {@link #isSAML2FailoverEnabled()} call before accessing the token repository.
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeper */
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeperpublic class SAML2FailoverUtils {
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeper
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeper private SAML2FailoverUtils() {
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeper }
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeper
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeper /**
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeper * Checks whether SAML2 failover is enabled.
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeper * @return true if SAML2 failover is enabled otherwise false.
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeper */
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeper public static boolean isSAML2FailoverEnabled() {
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeper
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeper String enableFailOver = (String)SAML2ConfigService.getAttribute(SAML2ConfigService.SAML2_FAILOVER_ATTR);
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeper
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeper return Boolean.parseBoolean(enableFailOver);
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeper }
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeper
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeper /**
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeper * Helper method for accessing the SAML2 Token Repository, should only be used when SAML2 failover is enabled.
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeper * @param primaryKey The primary key of SAML2 object to save
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeper * @param samlObj The SAML2 object to save
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeper * @param expirationTime Expiration time in seconds from epoch.
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeper * @throws SAML2TokenRepositoryException if there was a problem accessing the SAML2 Token Repository
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeper */
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeper public static void saveSAML2TokenWithoutSecondaryKey(String primaryKey, Object samlObj, long expirationTime)
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeper throws SAML2TokenRepositoryException {
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeper
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeper saveSAML2Token(primaryKey, null, samlObj, expirationTime);
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeper }
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeper
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeper /**
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeper * Helper method for accessing the SAML2 Token Repository, should only be used when SAML2 failover is enabled.
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeper * @param primaryKey The primary key of the SAML2 object to save
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeper * @param secondaryKey Secondary key, can be null
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeper * @param samlObj The SAML2 object to save
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeper * @param expirationTime Expiration time in seconds from epoch.
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeper * @throws SAML2TokenRepositoryException if there was a problem accessing the SAML2 Token Repository
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeper */
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeper public static void saveSAML2Token(String primaryKey, String secondaryKey, Object samlObj, long expirationTime)
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeper throws SAML2TokenRepositoryException {
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeper
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeper SAML2TokenRepositoryHolder.getRepo().saveSAML2Token(primaryKey, secondaryKey, samlObj, expirationTime);
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeper }
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeper
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeper /**
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeper * Helper method for accessing the SAML2 Token Repository, should only be used when SAML2 failover is enabled.
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeper * @param primaryKey The primary key of SAML2 object to retrieve
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeper * @return An object representing the SAML2 object put into the repository using the key or null if not found.
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeper * @throws SAML2TokenRepositoryException if there was a problem accessing the SAML2 Token Repository
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeper */
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeper public static Object retrieveSAML2Token(String primaryKey) throws SAML2TokenRepositoryException {
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeper return SAML2TokenRepositoryHolder.getRepo().retrieveSAML2Token(primaryKey);
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeper }
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeper
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeper /**
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeper * Helper method for accessing the SAML2 Token Repository, should only be used when SAML2 failover is enabled.
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeper * @param secondaryKey Secondary key to use when searching for matching tokens
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeper * @return A non null, but possibly empty collection of SAML2 objects.
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeper * @throws SAML2TokenRepositoryException if there was a problem accessing the SAML2 Token Repository
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeper */
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeper public static List retrieveSAML2TokensWithSecondaryKey(String secondaryKey) throws SAML2TokenRepositoryException {
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeper return SAML2TokenRepositoryHolder.getRepo().retrieveSAML2TokensWithSecondaryKey(secondaryKey);
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeper }
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeper
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeper /**
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeper * Helper method for accessing the SAML2 Token Repository, should only be used when SAML2 failover is enabled.
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeper * @param primaryKey The primary key of SAML2 object to delete
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeper * @throws SAML2TokenRepositoryException if there was a problem accessing the SAML2 Token Repository
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeper */
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeper public static void deleteSAML2Token(String primaryKey) throws SAML2TokenRepositoryException {
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeper SAML2TokenRepositoryHolder.getRepo().deleteSAML2Token(primaryKey);
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeper }
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeper
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeper /**
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeper * Enum to lazy init the SAML2TokenRepository variable in a thread safe manner.
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeper */
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeper private enum SAML2TokenRepositoryHolder {
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeper INSTANCE;
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeper
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeper private final SAML2TokenRepository repository;
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeper
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeper private SAML2TokenRepositoryHolder() {
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeper repository = InjectorHolder.getInstance(SAML2TokenRepository.class);
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeper }
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeper
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeper static SAML2TokenRepository getRepo() {
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeper return INSTANCE.repository;
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeper }
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeper }
7be5aa496ae10e8d30aa6675df55e074cbb5cfedMark de Reeper}