Commit 75e0dd64 authored by Tom Evans's avatar Tom Evans Committed by tevans

OF-657: Handle JID escaping; group cache optimization

git-svn-id: http://svn.igniterealtime.org/svn/repos/openfire/trunk@13623 b35dd754-fafc-0310-a699-88a17e54d16e
parent fd6696b5
......@@ -83,18 +83,14 @@ public class CrowdAuthProvider implements AuthProvider {
} else {
// Unknown domain. Return authentication failed.
throw new UnauthorizedException();
}
}
// Un-escape username.
username = JID.unescapeNode(username);
try {
manager.authenticate(username, password);
LOG.info("authenticated user:" + username);
} catch (RemoteException re) {
throw new UnauthorizedException();
}
}
}
try {
manager.authenticate(username, password);
} catch (RemoteException re) {
throw new UnauthorizedException();
}
}
public void authenticate(String username, String token, String digest) throws UnauthorizedException, ConnectionException, InternalUnauthenticatedException {
......
......@@ -78,14 +78,14 @@ public class CrowdGroupProvider extends AbstractGroupProvider {
Cache<JID, Collection<String>> userMembershipCache = CacheFactory.createLocalCache(USER_MEMBERSHIP_CACHE_NAME);
userMembershipCache.setMaxCacheSize(-1);
userMembershipCache.setMaxLifetime(ttl * 1000); // msecs instead of sec - see Cache API
Cache<String, org.jivesoftware.openfire.crowd.jaxb.Group> groupCache = CacheFactory.createLocalCache(GROUP_CACHE_NAME);
userMembershipCache.setMaxCacheSize(-1);
userMembershipCache.setMaxLifetime(ttl * 1000); // msecs instead of sec - see Cache API
}
public Group getGroup(String name) throws GroupNotFoundException {
userMembershipCache.setMaxLifetime(ttl * 1000); // msecs instead of sec - see Cache API
Cache<String, org.jivesoftware.openfire.crowd.jaxb.Group> groupCache = CacheFactory.createLocalCache(GROUP_CACHE_NAME);
groupCache.setMaxCacheSize(-1);
groupCache.setMaxLifetime(ttl * 1000); // msecs instead of sec - see Cache API
}
public Group getGroup(String name) throws GroupNotFoundException {
try {
Cache<String, org.jivesoftware.openfire.crowd.jaxb.Group> groupCache = CacheFactory.createLocalCache(GROUP_CACHE_NAME);
org.jivesoftware.openfire.crowd.jaxb.Group group = groupCache.get(name);
......@@ -113,13 +113,13 @@ public class CrowdGroupProvider extends AbstractGroupProvider {
try {
List<String> users = manager.getGroupMembers(groupName);
Collection<JID> results = new ArrayList<JID>();
for (String username : users) {
results.add(server.createJID(JID.escapeNode(username), null));
}
groupMembershipCache.put(groupName, results);
Collection<JID> results = new ArrayList<JID>();
for (String username : users) {
results.add(server.createJID(username, null));
}
groupMembershipCache.put(groupName, results);
return results;
} catch (RemoteException re) {
......
......@@ -25,12 +25,13 @@ import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.JAXB;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.apache.commons.httpclient.Credentials;
import org.apache.commons.httpclient.Header;
import org.apache.commons.httpclient.HttpClient;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.xmpp.packet.JID;
import org.apache.commons.httpclient.Credentials;
import org.apache.commons.httpclient.Header;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpMethod;
import org.apache.commons.httpclient.HttpState;
import org.apache.commons.httpclient.MultiThreadedHttpConnectionManager;
......@@ -133,12 +134,13 @@ public class CrowdManager {
* @param username
* @param password
* @throws RemoteException
* @throws UnsupportedEncodingException
*/
public void authenticate(String username, String password) throws RemoteException {
if (LOG.isDebugEnabled()) LOG.debug("authenticate '" + String.valueOf(username) + "'");
PostMethod post = new PostMethod(crowdServer.resolve("authentication?username=" + urlEncode(username)).toString());
* @throws UnsupportedEncodingException
*/
public void authenticate(String username, String password) throws RemoteException {
username = JID.unescapeNode(username);
if (LOG.isDebugEnabled()) LOG.debug("authenticate '" + String.valueOf(username) + "'");
PostMethod post = new PostMethod(crowdServer.resolve("authentication?username=" + urlEncode(username)).toString());
AuthenticatePost creds = new AuthenticatePost();
creds.value = password;
......@@ -154,12 +156,14 @@ public class CrowdManager {
} catch (IOException ioe) {
handleError(ioe);
} finally {
post.releaseConnection();
}
}
} finally {
post.releaseConnection();
}
LOG.info("authenticated user:" + username);
}
/**
* Get all the users from Crowd
* @return a List of User containing all the users stored in Crowd
......@@ -189,12 +193,13 @@ public class CrowdManager {
} finally {
get.releaseConnection();
}
if (users != null && users.user != null) {
for (User user : users.user) {
results.add(user);
}
if (users != null && users.user != null) {
for (User user : users.user) {
user.name = JID.escapeNode(user.name);
results.add(user);
}
if (users.user.size() != maxResults) {
break;
} else {
......@@ -270,12 +275,13 @@ public class CrowdManager {
* Get all the groups of a given username
* @param username
* @return a List of groups name
* @throws RemoteException
*/
public List<String> getUserGroups(String username) throws RemoteException {
if (LOG.isDebugEnabled()) LOG.debug("fetch all crowd groups for user:" + username);
int maxResults = 100;
* @throws RemoteException
*/
public List<String> getUserGroups(String username) throws RemoteException {
username = JID.unescapeNode(username);
if (LOG.isDebugEnabled()) LOG.debug("fetch all crowd groups for user:" + username);
int maxResults = 100;
int startIndex = 0;
List<String> results = new ArrayList<String>();
StringBuilder request = new StringBuilder("user/group/nested?username=").append(urlEncode(username))
......@@ -380,13 +386,13 @@ public class CrowdManager {
} finally {
get.releaseConnection();
}
if (users != null && users.user != null) {
for (org.jivesoftware.openfire.crowd.jaxb.User user : users.user) {
results.add(user.name);
}
if (users.user.size() != maxResults) {
if (users != null && users.user != null) {
for (org.jivesoftware.openfire.crowd.jaxb.User user : users.user) {
results.add(JID.escapeNode(user.name));
}
if (users.user.size() != maxResults) {
break;
} else {
startIndex += maxResults;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment