84 lines
2.7 KiB
Java
84 lines
2.7 KiB
Java
package org.gcube.data.access.storagehub.handlers;
|
|
|
|
import javax.inject.Inject;
|
|
import javax.inject.Singleton;
|
|
import javax.jcr.ItemNotFoundException;
|
|
import javax.jcr.Node;
|
|
import javax.jcr.NodeIterator;
|
|
import javax.jcr.PathNotFoundException;
|
|
import javax.jcr.RepositoryException;
|
|
|
|
import org.apache.jackrabbit.api.JackrabbitSession;
|
|
import org.apache.jackrabbit.api.security.user.Group;
|
|
import org.apache.jackrabbit.api.security.user.User;
|
|
import org.gcube.common.storagehub.model.exceptions.InvalidCallParameters;
|
|
import org.gcube.common.storagehub.model.exceptions.InvalidItemException;
|
|
import org.gcube.common.storagehub.model.exceptions.StorageHubException;
|
|
import org.gcube.common.storagehub.model.types.NodeProperty;
|
|
import org.gcube.data.access.storagehub.Constants;
|
|
import org.gcube.data.access.storagehub.PathUtil;
|
|
import org.gcube.data.access.storagehub.services.GroupManager;
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.LoggerFactory;
|
|
|
|
@Singleton
|
|
public class GroupHandler {
|
|
|
|
private static final Logger log = LoggerFactory.getLogger(GroupManager.class);
|
|
|
|
@Inject
|
|
PathUtil pathUtil;
|
|
|
|
public boolean removeUserFromGroup(String groupId, String userId, JackrabbitSession session) throws StorageHubException, RepositoryException {
|
|
org.apache.jackrabbit.api.security.user.UserManager usrManager = session.getUserManager();
|
|
|
|
Group group = (Group)usrManager.getAuthorizable(groupId);
|
|
User user = (User)usrManager.getAuthorizable(userId);
|
|
|
|
if (!group.isMember(user))
|
|
throw new InvalidCallParameters("user "+userId+" is not member of group "+groupId);
|
|
|
|
//delete folder on user
|
|
String folderName = group.getPrincipal().getName();
|
|
Node folder = getFolderNodeRelatedToGroup(session, folderName);
|
|
|
|
NodeIterator ni = folder.getSharedSet();
|
|
while (ni.hasNext()) {
|
|
Node node = ni.nextNode();
|
|
if (node.getPath().startsWith(pathUtil.getWorkspacePath(user.getPrincipal().getName()).toPath())) {
|
|
node.removeShare();
|
|
break;
|
|
}
|
|
}
|
|
|
|
return group.removeMember(user);
|
|
|
|
}
|
|
|
|
public Node getFolderNodeRelatedToGroup(JackrabbitSession session, String name) throws ItemNotFoundException, RepositoryException {
|
|
Node sharedRootNode = session.getNode(Constants.SHARED_FOLDER_PATH);
|
|
|
|
Node vreFolder = null;
|
|
try {
|
|
vreFolder = sharedRootNode.getNode(name);
|
|
}catch (PathNotFoundException e) {
|
|
log.debug("is an old HL VRE");
|
|
}
|
|
|
|
if (vreFolder==null) {
|
|
NodeIterator nodes = sharedRootNode.getNodes();
|
|
while (nodes.hasNext()) {
|
|
Node node = nodes.nextNode();
|
|
if (node.hasProperty(NodeProperty.TITLE.toString()) && node.getProperty(NodeProperty.TITLE.toString()).getString().equals(name)) {
|
|
vreFolder= node;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (vreFolder==null) throw new ItemNotFoundException("vre folder not found for group "+name);
|
|
return vreFolder;
|
|
}
|
|
|
|
}
|