Package org.jboss.seam.security.management.picketlink

Source Code of org.jboss.seam.security.management.picketlink.IdentitySessionProducer

package org.jboss.seam.security.management.picketlink;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

import javax.enterprise.context.ApplicationScoped;
import javax.enterprise.context.RequestScoped;
import javax.enterprise.event.Event;
import javax.enterprise.inject.Instance;
import javax.enterprise.inject.Produces;
import javax.enterprise.inject.spi.Bean;
import javax.enterprise.inject.spi.BeanManager;
import javax.inject.Inject;
import javax.persistence.EntityManager;

import org.picketlink.idm.api.IdentitySession;
import org.picketlink.idm.api.IdentitySessionFactory;
import org.picketlink.idm.api.cfg.IdentityConfiguration;
import org.picketlink.idm.api.event.EventListener;
import org.picketlink.idm.common.exception.IdentityConfigurationException;
import org.picketlink.idm.common.exception.IdentityException;
import org.picketlink.idm.impl.configuration.IdentityConfigurationImpl;
import org.picketlink.idm.impl.configuration.metadata.IdentityConfigurationMetaDataImpl;
import org.picketlink.idm.impl.configuration.metadata.IdentityRepositoryConfigurationMetaDataImpl;
import org.picketlink.idm.impl.configuration.metadata.IdentityStoreConfigurationMetaDataImpl;
import org.picketlink.idm.impl.configuration.metadata.IdentityStoreMappingMetaDataImpl;
import org.picketlink.idm.impl.configuration.metadata.RealmConfigurationMetaDataImpl;
import org.picketlink.idm.impl.repository.WrapperIdentityStoreRepository;
import org.picketlink.idm.spi.configuration.metadata.IdentityConfigurationMetaData;
import org.picketlink.idm.spi.configuration.metadata.IdentityRepositoryConfigurationMetaData;
import org.picketlink.idm.spi.configuration.metadata.IdentityStoreConfigurationMetaData;
import org.picketlink.idm.spi.configuration.metadata.IdentityStoreMappingMetaData;
import org.picketlink.idm.spi.configuration.metadata.RealmConfigurationMetaData;

/**
* Produces IdentitySession instances for identity management-related operations
*
* @author Shane Bryzak
*/
@ApplicationScoped
public class IdentitySessionProducer implements EventListener {
  
    public static final String SESSION_OPTION_ENTITY_MANAGER = "ENTITY_MANAGER";
    public static final String SESSION_OPTION_IDENTITY_OBJECT_CREATED_EVENT = "IDENTITY_OBJECT_CREATED_EVENT";

    private String defaultRealm = "default";
    private String defaultAttributeStoreId;
    private String defaultIdentityStoreId;
   
    IdentityConfigurationMetaData metadata;
   
    // Flag that indicates whether any identity stores have been configured.
    private boolean configured;

    @Inject
    BeanManager manager;

    @Inject
    public void init() throws IdentityConfigurationException, IdentityException {
        metadata = new IdentityConfigurationMetaDataImpl();

        // Create the identity store configuration
        List<IdentityStoreConfigurationMetaData> stores = new ArrayList<IdentityStoreConfigurationMetaData>();

        String defaultStoreId = null;

        Set<Bean<?>> storeBeans = manager.getBeans(IdentityStoreConfiguration.class);
        for (Bean<?> storeBean : storeBeans) {
            IdentityStoreConfiguration config = (IdentityStoreConfiguration) manager
                    .getReference(storeBean, IdentityStoreConfiguration.class,
                            manager.createCreationalContext(storeBean));

            if (config.isConfigured()) {
                IdentityStoreConfigurationMetaDataImpl storeConfig = new IdentityStoreConfigurationMetaDataImpl();
                config.configure(storeConfig);
                stores.add(storeConfig);

                if (defaultStoreId == null && storeConfig.getId() != null) {
                    defaultStoreId = storeConfig.getId();
                }
            }
        }

        ((IdentityConfigurationMetaDataImpl) metadata).setIdentityStores(stores);

        // Create the default realm
        RealmConfigurationMetaDataImpl realm = new RealmConfigurationMetaDataImpl();
        realm.setId(getDefaultRealm());
        realm.setIdentityMapping("USER");
        //realm.setGroupTypeMappings(groupTypeMappings)
        realm.setOptions(new HashMap<String, List<String>>());
        List<RealmConfigurationMetaData> realms = new ArrayList<RealmConfigurationMetaData>();
        realms.add(realm);
        ((IdentityConfigurationMetaDataImpl) metadata).setRealms(realms);

        if (stores.size() > 0) {
            List<IdentityRepositoryConfigurationMetaData> repositories = new ArrayList<IdentityRepositoryConfigurationMetaData>();

            IdentityRepositoryConfigurationMetaDataImpl repository = new IdentityRepositoryConfigurationMetaDataImpl();
            repository.setClassName(WrapperIdentityStoreRepository.class.getName());
            repository.setDefaultAttributeStoreId(defaultAttributeStoreId != null ? defaultAttributeStoreId : defaultStoreId);
            repository.setDefaultIdentityStoreId(defaultIdentityStoreId != null ? defaultIdentityStoreId : defaultStoreId);

            List<IdentityStoreMappingMetaData> mappings = new ArrayList<IdentityStoreMappingMetaData>();

            IdentityStoreMappingMetaDataImpl mapping = new IdentityStoreMappingMetaDataImpl();
            List<String> identityObjectTypes = new ArrayList<String>();
            identityObjectTypes.add("USER");
            identityObjectTypes.add("GROUP");
            mapping.setIdentityObjectTypeMappings(identityObjectTypes);
            mapping.setIdentityStoreId(defaultIdentityStoreId != null ? defaultIdentityStoreId : defaultStoreId);
            mappings.add(mapping);

            repository.setIdentityStoreToIdentityObjectTypeMappings(mappings);

            repositories.add(repository);
            ((IdentityConfigurationMetaDataImpl) metadata).setRepositories(repositories);
           
            configured = true;
        }
       
    }
   
    /**
     * This method can be used to determine whether identity management has been configured for the application.
     *
     * @return
     */
    public boolean isConfigured() {
        return configured;
    }

    @Inject
    Instance<EntityManager> entityManagerInstance;
   
    @Inject
    Event<IdentityObjectCreatedEvent> identityObjectCreatedEvent;
   
    @Produces
    public IdentitySessionFactory produceFactory() throws IdentityConfigurationException {
        IdentityConfigurationImpl config = new IdentityConfigurationImpl();
        config.configure(metadata);
        return config.buildIdentitySessionFactory();
    }

    @Produces
    @RequestScoped
    IdentitySession createIdentitySession(IdentitySessionFactory factory)
            throws IdentityException {
       
        if (metadata.getRepositories() == null || metadata.getRepositories().size() == 0) {
            throw new IdentityException("Error creating IdentitySession - no PicketLink IdentityStore repositories have been configured.");
        }
       
        Map<String, Object> sessionOptions = new HashMap<String, Object>();

        if (!entityManagerInstance.isUnsatisfied() && !entityManagerInstance.isAmbiguous()) {
            sessionOptions.put(SESSION_OPTION_ENTITY_MANAGER, entityManagerInstance.get());
            sessionOptions.put(SESSION_OPTION_IDENTITY_OBJECT_CREATED_EVENT, identityObjectCreatedEvent);
        }
           
        IdentitySession session = factory.createIdentitySession(getDefaultRealm(), sessionOptions);
        session.registerListener(this);
        return session;
    }

    public String getDefaultRealm() {
        return defaultRealm;
    }

    public void setDefaultRealm(String defaultRealm) {
        this.defaultRealm = defaultRealm;
    }

    public String getDefaultAttributeStoreId() {
        return defaultAttributeStoreId;
    }

    public void setDefaultAttributeStoreId(String defaultAttributeStoreId) {
        this.defaultAttributeStoreId = defaultAttributeStoreId;
    }

    public String getDefaultIdentityStoreId() {
        return defaultIdentityStoreId;
    }

    public void setDefaultIdentityStoreId(String defaultIdentityStoreId) {
        this.defaultIdentityStoreId = defaultIdentityStoreId;
    }
}
TOP

Related Classes of org.jboss.seam.security.management.picketlink.IdentitySessionProducer

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.