Ldap progress and user/person search

git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@2201 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Andrew Hind
2006-01-25 14:17:41 +00:00
parent 881da2dd03
commit 68ae6ef330
7 changed files with 190 additions and 57 deletions

View File

@@ -79,10 +79,10 @@ public abstract class AbstractAuthenticationComponent implements AuthenticationC
gas[0] = new GrantedAuthorityImpl("ROLE_SYSTEM");
ud = new User(SYSTEM_USER_NAME, "", true, true, true, true, gas);
}
else if (userName.equals(PermissionService.GUEST))
else if (userName.equalsIgnoreCase(PermissionService.GUEST))
{
GrantedAuthority[] gas = new GrantedAuthority[0];
ud = new User(PermissionService.GUEST, "", true, true, true, true, gas);
ud = new User(PermissionService.GUEST.toLowerCase(), "", true, true, true, true, gas);
}
else
{
@@ -215,7 +215,7 @@ public abstract class AbstractAuthenticationComponent implements AuthenticationC
*/
public String getGuestUserName()
{
return PermissionService.GUEST;
return PermissionService.GUEST.toLowerCase();
}
/**

View File

@@ -39,6 +39,9 @@ import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.service.cmr.repository.StoreRef;
import org.alfresco.service.cmr.repository.datatype.DefaultTypeConverter;
import org.alfresco.service.cmr.search.QueryParameterDefinition;
import org.alfresco.service.cmr.search.ResultSet;
import org.alfresco.service.cmr.search.ResultSetRow;
import org.alfresco.service.cmr.search.SearchParameters;
import org.alfresco.service.cmr.search.SearchService;
import org.alfresco.service.namespace.NamespacePrefixResolver;
import org.alfresco.service.namespace.QName;
@@ -50,7 +53,7 @@ public class RepositoryAuthenticationDao implements MutableAuthenticationDao
private static final String SYSTEM_FOLDER = "/sys:system";
private static final String PEOPLE_FOLDER = SYSTEM_FOLDER + "/sys:people";
private static final String PEOPLE_FOLDER = SYSTEM_FOLDER + "/sys:people";
private NodeService nodeService;
@@ -63,9 +66,9 @@ public class RepositoryAuthenticationDao implements MutableAuthenticationDao
private PasswordEncoder passwordEncoder;
private StoreRef userStoreRef;
private boolean userNamesAreCaseSensitive;
public boolean getUserNamesAreCaseSensitive()
{
return userNamesAreCaseSensitive;
@@ -81,8 +84,6 @@ public class RepositoryAuthenticationDao implements MutableAuthenticationDao
this.dictionaryService = dictionaryService;
}
public void setNamespaceService(NamespacePrefixResolver namespacePrefixResolver)
{
this.namespacePrefixResolver = namespacePrefixResolver;
@@ -103,10 +104,11 @@ public class RepositoryAuthenticationDao implements MutableAuthenticationDao
this.searchService = searchService;
}
public UserDetails loadUserByUsername(String caseSensitiveUserName) throws UsernameNotFoundException, DataAccessException
public UserDetails loadUserByUsername(String caseSensitiveUserName) throws UsernameNotFoundException,
DataAccessException
{
String userName = userNamesAreCaseSensitive ? caseSensitiveUserName: caseSensitiveUserName.toLowerCase();
NodeRef userRef = getUserOrNull(userNamesAreCaseSensitive ? userName: userName.toLowerCase());
String userName = userNamesAreCaseSensitive ? caseSensitiveUserName : caseSensitiveUserName.toLowerCase();
NodeRef userRef = getUserOrNull(userNamesAreCaseSensitive ? userName : userName.toLowerCase());
if (userRef == null)
{
throw new UsernameNotFoundException("Could not find user by userName: " + caseSensitiveUserName);
@@ -126,24 +128,36 @@ public class RepositoryAuthenticationDao implements MutableAuthenticationDao
public NodeRef getUserOrNull(String caseSensitiveUserName)
{
String userName = userNamesAreCaseSensitive ? caseSensitiveUserName: caseSensitiveUserName.toLowerCase();
NodeRef rootNode = nodeService.getRootNode(getUserStoreRef());
QueryParameterDefinition[] defs = new QueryParameterDefinition[1];
DataTypeDefinition text = dictionaryService.getDataType(DataTypeDefinition.TEXT);
defs[0] = new QueryParameterDefImpl(QName.createQName("usr", "var", namespacePrefixResolver), text, true,
userName);
List<NodeRef> results = searchService.selectNodes(rootNode, PEOPLE_FOLDER
+ "/usr:user[@usr:username = $usr:var ]", defs, namespacePrefixResolver, false);
if (results.size() != 1)
String userName = userNamesAreCaseSensitive ? caseSensitiveUserName : caseSensitiveUserName.toLowerCase();
SearchParameters sp = new SearchParameters();
sp.setLanguage(SearchService.LANGUAGE_LUCENE);
sp.setQuery("@usr\\:username:" + userName);
sp.addStore(getUserStoreRef());
sp.excludeDataInTheCurrentTransaction(false);
ResultSet rs = searchService.query(sp);
for (ResultSetRow row : rs)
{
return null;
NodeRef nodeRef = row.getNodeRef();
if (nodeService.exists(nodeRef))
{
String realUserName = DefaultTypeConverter.INSTANCE.convert(String.class, nodeService.getProperty(
nodeRef, ContentModel.PROP_USER_USERNAME));
if (realUserName.equals(userName))
{
return nodeRef;
}
}
}
return results.get(0);
return null;
}
public void createUser(String caseSensitiveUserName, char[] rawPassword) throws AuthenticationException
{
String userName = userNamesAreCaseSensitive ? caseSensitiveUserName: caseSensitiveUserName.toLowerCase();
String userName = userNamesAreCaseSensitive ? caseSensitiveUserName : caseSensitiveUserName.toLowerCase();
NodeRef userRef = getUserOrNull(userName);
if (userRef != null)
{
@@ -167,10 +181,8 @@ public class RepositoryAuthenticationDao implements MutableAuthenticationDao
private NodeRef getOrCreateTypeLocation()
{
NodeRef rootNode = nodeService.getRootNode(getUserStoreRef());
List<ChildAssociationRef> results = nodeService.getChildAssocs(
rootNode,
RegexQNamePattern.MATCH_ALL,
QName.createQName("sys", "system", namespacePrefixResolver));
List<ChildAssociationRef> results = nodeService.getChildAssocs(rootNode, RegexQNamePattern.MATCH_ALL, QName
.createQName("sys", "system", namespacePrefixResolver));
NodeRef sysNode = null;
if (results.size() == 0)
{
@@ -182,10 +194,8 @@ public class RepositoryAuthenticationDao implements MutableAuthenticationDao
{
sysNode = results.get(0).getChildRef();
}
results = nodeService.getChildAssocs(
sysNode,
RegexQNamePattern.MATCH_ALL,
QName.createQName("sys", "people", namespacePrefixResolver));
results = nodeService.getChildAssocs(sysNode, RegexQNamePattern.MATCH_ALL, QName.createQName("sys", "people",
namespacePrefixResolver));
NodeRef typesNode = null;
if (results.size() == 0)
{
@@ -306,7 +316,7 @@ public class RepositoryAuthenticationDao implements MutableAuthenticationDao
{
return getAccountHasExpired(getUserOrNull(userName));
}
private boolean getAccountHasExpired(NodeRef userNode)
{
if (userNode == null)
@@ -354,12 +364,12 @@ public class RepositoryAuthenticationDao implements MutableAuthenticationDao
return DefaultTypeConverter.INSTANCE.booleanValue(ser);
}
}
public boolean getCredentialsExpire(String userName)
{
return getCredentialsExpired(getUserOrNull(userName));
}
private boolean getCredentialsExpired(NodeRef userNode)
{
if (userNode == null)
@@ -400,7 +410,7 @@ public class RepositoryAuthenticationDao implements MutableAuthenticationDao
{
return getCredentialsHaveExpired(getUserOrNull(userName));
}
private boolean getCredentialsHaveExpired(NodeRef userNode)
{
if (userNode == null)
@@ -431,7 +441,7 @@ public class RepositoryAuthenticationDao implements MutableAuthenticationDao
{
return getEnabled(getUserOrNull(userName));
}
private boolean getEnabled(NodeRef userNode)
{
if (userNode == null)

View File

@@ -34,6 +34,9 @@ import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.service.cmr.repository.StoreRef;
import org.alfresco.service.cmr.repository.datatype.DefaultTypeConverter;
import org.alfresco.service.cmr.search.QueryParameterDefinition;
import org.alfresco.service.cmr.search.ResultSet;
import org.alfresco.service.cmr.search.ResultSetRow;
import org.alfresco.service.cmr.search.SearchParameters;
import org.alfresco.service.cmr.search.SearchService;
import org.alfresco.service.cmr.security.PersonService;
import org.alfresco.service.namespace.NamespacePrefixResolver;
@@ -125,18 +128,31 @@ public class PersonServiceImpl implements PersonService
public NodeRef getPersonOrNull(String caseSensitiveUserName)
{
String userName = userNamesAreCaseSensitive ? caseSensitiveUserName : caseSensitiveUserName.toLowerCase();
NodeRef rootNode = nodeService.getRootNode(storeRef);
QueryParameterDefinition[] defs = new QueryParameterDefinition[1];
DataTypeDefinition text = dictionaryService.getDataType(DataTypeDefinition.TEXT);
defs[0] = new QueryParameterDefImpl(QName.createQName("cm", "var", namespacePrefixResolver), text, true,
userName);
List<NodeRef> results = searchService.selectNodes(rootNode, PEOPLE_FOLDER
+ "/cm:person[@cm:userName = $cm:var ]", defs, namespacePrefixResolver, false);
if (results.size() != 1)
SearchParameters sp = new SearchParameters();
sp.setLanguage(SearchService.LANGUAGE_LUCENE);
sp.setQuery("@cm\\:userName:" + userName);
sp.addStore(storeRef);
sp.excludeDataInTheCurrentTransaction(false);
ResultSet rs = searchService.query(sp);
for (ResultSetRow row : rs)
{
return null;
NodeRef nodeRef = row.getNodeRef();
if (nodeService.exists(nodeRef))
{
String realUserName = DefaultTypeConverter.INSTANCE.convert(String.class, nodeService.getProperty(
nodeRef, ContentModel.PROP_USERNAME));
realUserName = userNamesAreCaseSensitive ? realUserName : realUserName.toLowerCase();
if (realUserName.equals(userName))
{
return nodeRef;
}
}
}
return results.get(0);
return null;
}
public boolean createMissingPeople()
@@ -265,12 +281,26 @@ public class PersonServiceImpl implements PersonService
public Set<NodeRef> getAllPeople()
{
NodeRef rootNode = nodeService.getRootNode(storeRef);
List<NodeRef> results = searchService.selectNodes(rootNode, PEOPLE_FOLDER + "/cm:person", null,
namespacePrefixResolver, false);
HashSet<NodeRef> all = new HashSet<NodeRef>();
all.addAll(results);
return all;
SearchParameters sp = new SearchParameters();
sp.setLanguage(SearchService.LANGUAGE_LUCENE);
sp.setQuery("TYPE:\"" + ContentModel.TYPE_PERSON+"\"");
sp.addStore(storeRef);
sp.excludeDataInTheCurrentTransaction(false);
ResultSet rs = searchService.query(sp);
HashSet<NodeRef> nodes = new HashSet<NodeRef>();
for (ResultSetRow row : rs)
{
NodeRef nodeRef = row.getNodeRef();
if (nodeService.exists(nodeRef))
{
nodes.add(nodeRef);
}
}
return nodes;
}
public void setCreateMissingPeople(boolean createMissingPeople)