Skip to content

Commit

Permalink
externalised identity store configuration
Browse files Browse the repository at this point in the history
  • Loading branch information
sbryzak committed Jul 17, 2010
1 parent bde70b9 commit b2b1d0e
Show file tree
Hide file tree
Showing 10 changed files with 202 additions and 72 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -11,5 +11,6 @@
@Stateless
public class EntityManagerProducer
{
@Produces @RequestScoped @PersistenceContext(unitName = "idmconsoleDatabase") EntityManager entityManager;
@Produces /*@ManagedPersistenceContext @ConversationScoped*/ @RequestScoped
@PersistenceContext(unitName = "idmconsoleDatabase") EntityManager entityManager;
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,12 @@
import javax.persistence.Id;

/**
* This is a simple lookup table containing relationship (i.e. role) names.
* This is a simple lookup table containing role names
*
* @author Shane Bryzak
*/
@Entity
public class RelationshipName implements Serializable
public class IdentityRoleName implements Serializable
{
private static final long serialVersionUID = 8775236263787825703L;

Expand Down
4 changes: 2 additions & 2 deletions examples/idmconsole/src/main/resources/import.sql
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
insert into RelationshipName(id, name) values (1, 'admin');
insert into RelationshipName(id, name) values (2, 'manager');
insert into IdentityRoleName(id, name) values (1, 'admin');
insert into IdentityRoleName(id, name) values (2, 'manager');

insert into IdentityObjectType(id, name) values (1, 'USER');
insert into IdentityObjectType(id, name) values (2, 'GROUP');
Expand Down
10 changes: 10 additions & 0 deletions examples/idmconsole/src/main/webapp/WEB-INF/classes/seam-beans.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
xmlns:s="urn:java:ee"
xmlns:drools="urn:java:org.jboss.seam.drools:org.jboss.seam.drools.config"
xmlns:security="urn:java:org.jboss.seam.security.permission"
xmlns:plidm="urn:java:org.jboss.seam.security.management.picketlink"
xsi:schemaLocation="
http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/beans_1_0.xsd">
Expand Down Expand Up @@ -39,4 +40,13 @@
</security:securityRules>
</security:RuleBasedPermissionResolver>

<plidm:JpaIdentityStoreConfiguration>
<s:overrides/>
<plidm:id>jpa</plidm:id>
<plidm:identityClass>org.jboss.seam.security.examples.idmconsole.model.IdentityObject</plidm:identityClass>
<plidm:credentialClass>org.jboss.seam.security.examples.idmconsole.model.IdentityObjectCredential</plidm:credentialClass>
<plidm:relationshipClass>org.jboss.seam.security.examples.idmconsole.model.IdentityObjectRelationship</plidm:relationshipClass>
<plidm:roleNameClass>org.jboss.seam.security.examples.idmconsole.model.IdentityRoleName</plidm:roleNameClass>
</plidm:JpaIdentityStoreConfiguration>

</beans>
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@
import javax.inject.Inject;

import org.jboss.seam.security.crypto.BinTools;
import org.jboss.seam.security.management.JpaIdentityStore;
import org.jboss.seam.security.management.PasswordHash;
import org.jboss.seam.security.management.picketlink.JpaIdentityStore;

@Model
public class HashGenerator
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,17 @@
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.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.jboss.seam.security.management.JpaIdentityStore;
import org.picketlink.idm.api.IdentitySession;
import org.picketlink.idm.api.IdentitySessionFactory;
import org.picketlink.idm.api.event.EventListener;
Expand All @@ -24,7 +26,6 @@
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.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;
Expand All @@ -40,42 +41,45 @@ public class IdentitySessionProducer implements EventListener
{
private IdentitySessionFactory factory;

private String defaultRealm = "default";

@Inject IdentityConfigurationMetaData config;
private String defaultRealm = "default";
private String defaultAttributeStoreId;
private String defaultIdentityStoreId;

@Inject BeanManager manager;

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

// Create the identity store configuration
List<IdentityStoreConfigurationMetaData> stores = new ArrayList<IdentityStoreConfigurationMetaData>();
IdentityStoreConfigurationMetaDataImpl store = new IdentityStoreConfigurationMetaDataImpl();
store.setId("jpa");
store.setClassName("org.jboss.seam.security.management.JpaIdentityStore");
List<IdentityStoreConfigurationMetaData> stores = new ArrayList<IdentityStoreConfigurationMetaData>();

// temporary hack to get the example working
Map<String,List<String>> options = new HashMap<String,List<String>>();
options.put(JpaIdentityStore.OPTION_IDENTITY_CLASS_NAME,
createOptionList("org.jboss.seam.security.examples.idmconsole.model.IdentityObject"));
String defaultStoreId = null;

options.put(JpaIdentityStore.OPTION_CREDENTIAL_CLASS_NAME,
createOptionList("org.jboss.seam.security.examples.idmconsole.model.IdentityObjectCredential"));
Set<Bean<?>> storeBeans = manager.getBeans(IdentityStoreConfiguration.class);
for (Bean<?> storeBean : storeBeans)
{
IdentityStoreConfiguration config = (IdentityStoreConfiguration) manager
.getReference(storeBean, IdentityStoreConfiguration.class,
manager.createCreationalContext(storeBean));

IdentityStoreConfigurationMetaDataImpl store = new IdentityStoreConfigurationMetaDataImpl();
config.configure(store);

options.put(JpaIdentityStore.OPTION_RELATIONSHIP_CLASS_NAME,
createOptionList("org.jboss.seam.security.examples.idmconsole.model.IdentityObjectRelationship"));
if (defaultStoreId == null && store.getId() != null)
{
defaultStoreId = store.getId();
}

stores.add(store);
}

options.put(JpaIdentityStore.OPTION_RELATIONSHIP_NAME_CLASS_NAME,
createOptionList("org.jboss.seam.security.examples.idmconsole.model.RelationshipName"));

store.setOptions(options);
stores.add(store);
metadata.setIdentityStores(stores);

// Create the default realm
RealmConfigurationMetaDataImpl realm = new RealmConfigurationMetaDataImpl();
realm.setId("default");
realm.setId(getDefaultRealm());
realm.setIdentityMapping("USER");
//realm.setGroupTypeMappings(groupTypeMappings)
realm.setOptions(new HashMap<String,List<String>>());
Expand All @@ -84,19 +88,22 @@ public void init() throws IdentityConfigurationException, IdentityException
metadata.setRealms(realms);

List<IdentityRepositoryConfigurationMetaData> repositories = new ArrayList<IdentityRepositoryConfigurationMetaData>();

IdentityRepositoryConfigurationMetaDataImpl repository = new IdentityRepositoryConfigurationMetaDataImpl();
repository.setClassName("org.picketlink.idm.impl.repository.WrapperIdentityStoreRepository");
repository.setDefaultAttributeStoreId("jpa");
repository.setDefaultIdentityStoreId("jpa");
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("jpa");
mapping.setIdentityStoreId(defaultIdentityStoreId != null ? defaultIdentityStoreId : defaultStoreId);
mappings.add(mapping);

repository.setIdentityStoreToIdentityObjectTypeMappings(mappings);

repositories.add(repository);
Expand All @@ -107,14 +114,7 @@ public void init() throws IdentityConfigurationException, IdentityException

factory = config.buildIdentitySessionFactory();
}

private List<String> createOptionList(String... values)
{
List<String> vals = new ArrayList<String>();
for (String v : values) vals.add(v);
return vals;
}


@Inject Instance<EntityManager> entityManagerInstance;

@Produces @RequestScoped IdentitySession createIdentitySession()
Expand All @@ -126,8 +126,8 @@ private List<String> createOptionList(String... values)
IdentitySession session = factory.createIdentitySession(getDefaultRealm(), sessionOptions);
session.registerListener(this);
return session;
}
}

public String getDefaultRealm()
{
return defaultRealm;
Expand All @@ -137,4 +137,24 @@ 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;
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package org.jboss.seam.security.management;
package org.jboss.seam.security.management.picketlink;

import java.io.Serializable;
import java.lang.reflect.Field;
Expand All @@ -22,6 +22,10 @@

import org.jboss.seam.security.annotations.management.IdentityProperty;
import org.jboss.seam.security.annotations.management.PropertyType;
import org.jboss.seam.security.management.IdentityObjectImpl;
import org.jboss.seam.security.management.IdentityObjectRelationshipImpl;
import org.jboss.seam.security.management.IdentityObjectRelationshipTypeImpl;
import org.jboss.seam.security.management.IdentityObjectTypeImpl;
import org.jboss.weld.extensions.util.properties.Property;
import org.jboss.weld.extensions.util.properties.query.AnnotatedPropertyCriteria;
import org.jboss.weld.extensions.util.properties.query.NamedPropertyCriteria;
Expand Down Expand Up @@ -62,7 +66,7 @@ public class JpaIdentityStore implements org.picketlink.idm.spi.store.IdentitySt
public static final String OPTION_IDENTITY_CLASS_NAME = "identityEntityClassName";
public static final String OPTION_CREDENTIAL_CLASS_NAME = "credentialEntityClassName";
public static final String OPTION_RELATIONSHIP_CLASS_NAME = "relationshipEntityClassName";
public static final String OPTION_RELATIONSHIP_NAME_CLASS_NAME = "relationshipNameEntityClassName";
public static final String OPTION_ROLE_NAME_CLASS_NAME = "roleNameEntityClassName";

private static final String DEFAULT_USER_IDENTITY_TYPE = "USER";
private static final String DEFAULT_ROLE_IDENTITY_TYPE = "ROLE";
Expand Down Expand Up @@ -280,7 +284,7 @@ public void bootstrap(IdentityStoreConfigurationContext configurationContext)
boolean namedRelationshipsSupported = false;

clsName = configurationContext.getStoreConfigurationMetaData()
.getOptionSingleValue(OPTION_RELATIONSHIP_NAME_CLASS_NAME);
.getOptionSingleValue(OPTION_ROLE_NAME_CLASS_NAME);

if (clsName != null)
{
Expand Down
Loading

0 comments on commit b2b1d0e

Please sign in to comment.