* This method gets a list of users
*/
public List getUsers() throws Exception
{
Timer t = new Timer();
if(!logger.isInfoEnabled())
t.setActive(false);
logger.info("*******************");
logger.info("* getUsers start *");
logger.info("*******************");
String userCacheTimeout = this.extraProperties.getProperty("userCacheTimeout", "1800");
String authorizerIndex = this.extraProperties.getProperty("authorizerIndex");
if(authorizerIndex == null)
authorizerIndex = "";
String key = "allUsers" + authorizerIndex;
List users = (List)CacheController.getCachedObjectFromAdvancedCache("JNDIAuthorizationCache", key, new Integer(userCacheTimeout).intValue());
if(users != null)
return users;
users = new ArrayList();
String userBase = this.extraProperties.getProperty("userBase");
String[] userBases = null;
if(userBase != null)
userBases = userBase.split(";");
String userListSearch = this.extraProperties.getProperty("userListSearch");
String userAttributesFilter = this.extraProperties.getProperty("userAttributesFilter");
String userNameAttributeFilter = this.extraProperties.getProperty("userNameAttributeFilter", "distinguishedName");
String userDisplayNameAttributeFilter = this.extraProperties.getProperty("userDisplayNameAttributeFilter", "cn");
String userFirstNameAttributeFilter = this.extraProperties.getProperty("userFirstNameAttributeFilter", "givenName");
String userLastNameAttributeFilter = this.extraProperties.getProperty("userLastNameAttributeFilter", "sn");
String userMailAttributeFilter = this.extraProperties.getProperty("userMailAttributeFilter", "mail");
String memberOfAttributeFilter = this.extraProperties.getProperty("memberOfAttributeFilter", "memberOf");
String roleFilter = this.extraProperties.getProperty("roleFilter", "InfoGlue");
String roleNameAttribute = this.extraProperties.getProperty("roleNameAttribute");
String userSearchScope = this.extraProperties.getProperty("userSearchScope");
String userFirstNameDummy = this.extraProperties.getProperty("userFirstNameDummy");
String userLastNameDummy = this.extraProperties.getProperty("userLastNameDummy");
String userDisplayNameDummy = this.extraProperties.getProperty("userDisplayNameDummy");
String userMailDummy = this.extraProperties.getProperty("userMailDummy");
t.printElapsedTime("Got context took:");
int index = 0;
for(int userBaseIndex=0; userBaseIndex < userBases.length; userBaseIndex++)
{
String baseDN = userBases[userBaseIndex];
if(logger.isInfoEnabled())
logger.info("Searching for users in " + baseDN + " - users was " + users.size());
DirContext ctx = getContext();
try
{
//String baseDN = userBase;
String searchFilter = "(CN=*)";
if(userListSearch != null && userListSearch.length() > 0)
searchFilter = userListSearch;
String attributesFilter = "name, displayName, givenName, sn, mail, memberOf";
if(userAttributesFilter != null && userAttributesFilter.length() > 0)
attributesFilter = userAttributesFilter;
String[] attrID = attributesFilter.split(",");
String[] userMailAttributeFilterAttributeId = userMailAttributeFilter.split(",");
if(logger.isInfoEnabled())
{
logger.info("attributesFilter:" + attributesFilter);
logger.info("userMailAttributeFilterAttributeId:" + userMailAttributeFilterAttributeId);
logger.info("baseDN:" + baseDN);
logger.info("searchFilter:" + searchFilter);
//logger.info("attrID" + attrID);
}
SearchControls ctls = new SearchControls();
int userSearchScopeInt = SearchControls.SUBTREE_SCOPE;
if(userSearchScope != null && userSearchScope.equalsIgnoreCase("ONELEVEL_SCOPE"))
userSearchScopeInt = SearchControls.ONELEVEL_SCOPE;
else if(userSearchScope != null && userSearchScope.equalsIgnoreCase("OBJECT_SCOPE"))
userSearchScopeInt = SearchControls.OBJECT_SCOPE;
ctls.setSearchScope(userSearchScopeInt);
ctls.setReturningAttributes(attrID);
NamingEnumeration answer = ctx.search(baseDN, searchFilter, ctls);
t.printElapsedTime("Answer took:");
if(!answer.hasMore())
throw new Exception("The was no users found in the JNDI Data Source.");
while (answer.hasMore())
{
try
{
SearchResult sr = (SearchResult)answer.next();
if(logger.isInfoEnabled())
logger.info("Person:" + sr.toString() + "\n");
Attributes attributes = sr.getAttributes();
if(logger.isInfoEnabled())
logger.info("attributes:" + attributes.toString());
Attribute userNameAttribute = attributes.get(userNameAttributeFilter);
Attribute userDisplayNameAttribute = attributes.get(userDisplayNameAttributeFilter);
Attribute userFirstNameAttribute = attributes.get(userFirstNameAttributeFilter);
Attribute userLastNameAttribute = attributes.get(userLastNameAttributeFilter);
Attribute userMailAttribute = null;
for(int i=0; i<userMailAttributeFilterAttributeId.length; i++)
{
userMailAttribute = attributes.get(userMailAttributeFilterAttributeId[i]);
if(userMailAttribute != null)
break;
}
Attribute memberOfAttribute = attributes.get(memberOfAttributeFilter);
Attribute memberOfGroupsAttribute = attributes.get(memberOfAttributeFilter);
String userFirstName = null;
if(userFirstNameAttribute != null)
userFirstName = userFirstNameAttribute.get().toString();
else if(userFirstNameDummy != null && !userFirstNameDummy.equals(""))
userFirstName = userFirstNameDummy;
String userLastName = null;
if(userLastNameAttribute != null)
userLastName = userLastNameAttribute.get().toString();
else if(userLastNameDummy != null && !userLastNameDummy.equals(""))
userLastName = userLastNameDummy;
String userDisplayName = null;
if(userDisplayNameAttribute != null)
userDisplayName = userDisplayNameAttribute.get().toString();
else if(userDisplayNameDummy != null && !userDisplayNameDummy.equals(""))
userDisplayName = userDisplayNameDummy;
String userMail = null;
if(userMailAttribute != null)
userMail = userMailAttribute.get().toString();
else if(userMailDummy != null && !userMailDummy.equals(""))
userMail = userMailDummy;
if(userFirstName == null || userLastName == null || userDisplayName == null || userMail == null)
{
if(logger.isInfoEnabled())
logger.info("User not valid " + userNameAttribute);
throw new SystemException("The user " + userNameAttribute + " did not have firstName, lastName or email attribute which InfoGlue requires");
}
if(logger.isInfoEnabled())
{
logger.info("userNameAttribute:" + userNameAttribute);
logger.info("userDisplayName:" + userDisplayName);
logger.info("userFirstName:" + userFirstName);
logger.info("userLastName:" + userLastName);
logger.info("userMail:" + userMail);
}
List roles = new ArrayList();
List groups = new ArrayList();
if(memberOfAttribute != null)
{
if(logger.isInfoEnabled())
logger.info("memberOfAttribute:" + memberOfAttribute);
NamingEnumeration allEnum = memberOfAttribute.getAll();
while(allEnum.hasMore())
{
String roleName = (String)allEnum.next();
if(logger.isInfoEnabled())
logger.info("roleName:" + roleName);
if(roleFilter.equalsIgnoreCase("*") || roleName.indexOf(roleFilter) > -1)
{
if(logger.isInfoEnabled())
{
logger.info("roleNameAttribute:" + roleNameAttribute);
logger.info("groupName:" + roleName);
logger.info("indexOf:" + roleName.indexOf(roleNameAttribute));
}
InfoGlueRole infoGlueRole = this.getAuthorizedInfoGlueRole(roleName, ctx);
//InfoGlueRole infoGlueRole = new InfoGlueRole(roleName, "Not available from JNDI-source", this);
roles.add(infoGlueRole);
}
}
}
else
{
if(logger.isInfoEnabled())
logger.info("No memberOfAttribute named :" + memberOfAttributeFilter + " was found.");
}
if(memberOfGroupsAttribute != null)
{
NamingEnumeration allGroupsEnum = memberOfGroupsAttribute.getAll();
while(allGroupsEnum.hasMore())
{
String groupName = (String)allGroupsEnum.next();
if(logger.isInfoEnabled())
logger.info("groupName:" + groupName);
if(roleFilter.equalsIgnoreCase("*") || groupName.indexOf(roleFilter) > -1)
{
if(logger.isInfoEnabled())
{
logger.info("roleNameAttribute:" + roleNameAttribute);
logger.info("groupName:" + groupName);
logger.info("indexOf:" + groupName.indexOf(roleNameAttribute));
}
InfoGlueGroup infoGlueGroup = this.getAuthorizedInfoGlueGroup(groupName, ctx);
//InfoGlueGroup infoGlueGroup = new InfoGlueGroup(groupName, "Not available from JNDI-source", this);
groups.add(infoGlueGroup);
}
}
}
else
{
if(logger.isInfoEnabled())
logger.info("No memberOfGroupsAttribute named :" + memberOfAttributeFilter + " was found.");
}
InfoGluePrincipal infoGluePrincipal = new InfoGluePrincipal(userNameAttribute.get().toString(), userDisplayName, userFirstName, userLastName, userMail, roles, groups, false, this);
users.add(infoGluePrincipal);
}
catch(Exception e)
{
logger.warn("An error occurred when we tried to read user: " + e.getMessage(), e);
}
}
}
catch (Exception e)
{
logger.warn("Could not find Users: " + e.getMessage(), e);
}
finally
{
ctx.close();
}
if(logger.isInfoEnabled())
logger.info("After searching for users in " + baseDN + " - users was " + users.size());
}
t.printElapsedTime("all users took " + index + ":");
logger.info("getUsers end...");
if(users != null)
CacheController.cacheObjectInAdvancedCache("JNDIAuthorizationCache", key, users, null, false);