Skip to content
Snippets Groups Projects
Commit b3eb73e4 authored by Brian Major's avatar Brian Major
Browse files

issue-10 - reverted API changes in GMSClient

parent 7bd03087
No related branches found
No related tags found
No related merge requests found
...@@ -13,7 +13,7 @@ repositories { ...@@ -13,7 +13,7 @@ repositories {
sourceCompatibility = 1.7 sourceCompatibility = 1.7
group = 'org.opencadc' group = 'org.opencadc'
version = '1.1.0' version = '1.1.1'
dependencies { dependencies {
compile 'log4j:log4j:1.2.+' compile 'log4j:log4j:1.2.+'
...@@ -22,7 +22,7 @@ dependencies { ...@@ -22,7 +22,7 @@ dependencies {
compile 'xerces:xercesImpl:2.+' compile 'xerces:xercesImpl:2.+'
compile 'com.unboundid:unboundid-ldapsdk:2.3.+' compile 'com.unboundid:unboundid-ldapsdk:2.3.+'
compile 'org.opencadc:cadc-access-control:1.1.+' compile 'org.opencadc:cadc-access-control:[1.1.1,)'
compile 'org.opencadc:cadc-util:1.+' compile 'org.opencadc:cadc-util:1.+'
compile 'org.opencadc:cadc-log:1.+' compile 'org.opencadc:cadc-log:1.+'
compile 'org.opencadc:cadc-registry:1.+' compile 'org.opencadc:cadc-registry:1.+'
......
...@@ -15,7 +15,7 @@ sourceCompatibility = 1.7 ...@@ -15,7 +15,7 @@ sourceCompatibility = 1.7
group = 'org.opencadc' group = 'org.opencadc'
version = '1.1.0' version = '1.1.1'
mainClassName = 'ca.nrc.cadc.ac.client.GMSClientMain' mainClassName = 'ca.nrc.cadc.ac.client.GMSClientMain'
......
...@@ -94,7 +94,6 @@ import org.apache.log4j.Logger; ...@@ -94,7 +94,6 @@ import org.apache.log4j.Logger;
import ca.nrc.cadc.ac.Group; import ca.nrc.cadc.ac.Group;
import ca.nrc.cadc.ac.GroupAlreadyExistsException; import ca.nrc.cadc.ac.GroupAlreadyExistsException;
import ca.nrc.cadc.ac.GroupNotFoundException; import ca.nrc.cadc.ac.GroupNotFoundException;
import ca.nrc.cadc.ac.GroupURI;
import ca.nrc.cadc.ac.Role; import ca.nrc.cadc.ac.Role;
import ca.nrc.cadc.ac.UserNotFoundException; import ca.nrc.cadc.ac.UserNotFoundException;
import ca.nrc.cadc.ac.WriterException; import ca.nrc.cadc.ac.WriterException;
...@@ -129,11 +128,20 @@ public class GMSClient implements TransferListener ...@@ -129,11 +128,20 @@ public class GMSClient implements TransferListener
private SSLSocketFactory sslSocketFactory; private SSLSocketFactory sslSocketFactory;
private SSLSocketFactory mySocketFactory; private SSLSocketFactory mySocketFactory;
private URI serviceID;
/** /**
* Constructor. * Constructor.
*
* @param serviceID The service ID.
*/ */
public GMSClient() public GMSClient(URI serviceID)
{ {
if (serviceID == null)
throw new IllegalArgumentException("invalid serviceID: " + serviceID);
if (serviceID.getFragment() != null)
throw new IllegalArgumentException("invalid serviceID (fragment not allowed): " + serviceID);
this.serviceID = serviceID;
} }
public void transferEvent(TransferEvent te) public void transferEvent(TransferEvent te)
...@@ -173,9 +181,8 @@ public class GMSClient implements TransferListener ...@@ -173,9 +181,8 @@ public class GMSClient implements TransferListener
throws GroupAlreadyExistsException, AccessControlException, throws GroupAlreadyExistsException, AccessControlException,
UserNotFoundException, WriterException, IOException UserNotFoundException, WriterException, IOException
{ {
URL createGroupURL = getRegistryClient() URL createGroupURL = getRegistryClient()
.getServiceURL(group.getID().getServiceID(), Standards.GMS_GROUPS_01, AuthMethod.CERT); .getServiceURL(this.serviceID, Standards.GMS_GROUPS_01, AuthMethod.CERT);
log.debug("createGroupURL request to " + createGroupURL.toString()); log.debug("createGroupURL request to " + createGroupURL.toString());
// reset the state of the cache // reset the state of the cache
...@@ -237,19 +244,18 @@ public class GMSClient implements TransferListener ...@@ -237,19 +244,18 @@ public class GMSClient implements TransferListener
/** /**
* Get the group object. * Get the group object.
* *
* @param groupID Identifies the group to get. * @param groupName Identifies the group to get.
* @return The group. * @return The group.
* @throws GroupNotFoundException If the group was not found. * @throws GroupNotFoundException If the group was not found.
* @throws AccessControlException If unauthorized to perform this operation. * @throws AccessControlException If unauthorized to perform this operation.
* @throws java.io.IOException * @throws java.io.IOException
*/ */
public Group getGroup(GroupURI groupID) public Group getGroup(String groupName)
throws GroupNotFoundException, AccessControlException, IOException throws GroupNotFoundException, AccessControlException, IOException
{ {
URL groupsURL = getRegistryClient() URL groupsURL = getRegistryClient()
.getServiceURL(groupID.getServiceID(), Standards.GMS_GROUPS_01, AuthMethod.CERT); .getServiceURL(this.serviceID, Standards.GMS_GROUPS_01, AuthMethod.CERT);
URL getGroupURL = new URL(groupsURL.toExternalForm() + "/" + groupID.getName()); URL getGroupURL = new URL(groupsURL.toExternalForm() + "/" + groupName);
log.debug("getGroup request to " + getGroupURL.toString()); log.debug("getGroup request to " + getGroupURL.toString());
ByteArrayOutputStream out = new ByteArrayOutputStream(); ByteArrayOutputStream out = new ByteArrayOutputStream();
...@@ -300,11 +306,11 @@ public class GMSClient implements TransferListener ...@@ -300,11 +306,11 @@ public class GMSClient implements TransferListener
* @throws AccessControlException If unauthorized to perform this operation. * @throws AccessControlException If unauthorized to perform this operation.
* @throws java.io.IOException * @throws java.io.IOException
*/ */
public List<String> getGroupNames(URI serviceID) public List<String> getGroupNames()
throws AccessControlException, IOException throws AccessControlException, IOException
{ {
URL getGroupNamesURL = getRegistryClient() URL getGroupNamesURL = getRegistryClient()
.getServiceURL(serviceID, Standards.GMS_GROUPS_01, AuthMethod.CERT); .getServiceURL(this.serviceID, Standards.GMS_GROUPS_01, AuthMethod.CERT);
log.debug("getGroupNames request to " + getGroupNamesURL.toString()); log.debug("getGroupNames request to " + getGroupNamesURL.toString());
...@@ -382,7 +388,7 @@ public class GMSClient implements TransferListener ...@@ -382,7 +388,7 @@ public class GMSClient implements TransferListener
AccessControlException, WriterException, IOException AccessControlException, WriterException, IOException
{ {
URL groupsURL = getRegistryClient() URL groupsURL = getRegistryClient()
.getServiceURL(group.getID().getServiceID(), Standards.GMS_GROUPS_01, AuthMethod.CERT); .getServiceURL(this.serviceID, Standards.GMS_GROUPS_01, AuthMethod.CERT);
URL updateGroupURL = new URL(groupsURL.toExternalForm() + "/" + group.getID().getName()); URL updateGroupURL = new URL(groupsURL.toExternalForm() + "/" + group.getID().getName());
log.debug("updateGroup request to " + updateGroupURL.toString()); log.debug("updateGroup request to " + updateGroupURL.toString());
...@@ -442,17 +448,17 @@ public class GMSClient implements TransferListener ...@@ -442,17 +448,17 @@ public class GMSClient implements TransferListener
/** /**
* Delete the group. * Delete the group.
* *
* @param groupID Identifies the group to delete. * @param groupName Identifies the group to delete.
* @throws GroupNotFoundException If the group was not found. * @throws GroupNotFoundException If the group was not found.
* @throws AccessControlException If unauthorized to perform this operation. * @throws AccessControlException If unauthorized to perform this operation.
* @throws java.io.IOException * @throws java.io.IOException
*/ */
public void deleteGroup(GroupURI groupID) public void deleteGroup(String groupName)
throws GroupNotFoundException, AccessControlException, IOException throws GroupNotFoundException, AccessControlException, IOException
{ {
URL groupsURL = getRegistryClient() URL groupsURL = getRegistryClient()
.getServiceURL(groupID.getServiceID(), Standards.GMS_GROUPS_01, AuthMethod.CERT); .getServiceURL(this.serviceID, Standards.GMS_GROUPS_01, AuthMethod.CERT);
URL deleteGroupURL = new URL(groupsURL.toExternalForm() + "/" + groupID.getName()); URL deleteGroupURL = new URL(groupsURL.toExternalForm() + "/" + groupName);
log.debug("deleteGroup request to " + deleteGroupURL.toString()); log.debug("deleteGroup request to " + deleteGroupURL.toString());
// reset the state of the cache // reset the state of the cache
...@@ -506,21 +512,21 @@ public class GMSClient implements TransferListener ...@@ -506,21 +512,21 @@ public class GMSClient implements TransferListener
/** /**
* Add a group as a member of another group. * Add a group as a member of another group.
* *
* @param targetGroup The group in which to add the group member. * @param targetGroupName The group in which to add the group member.
* @param groupMemberName The group member to add. * @param groupMemberName The group member to add.
* @throws IllegalArgumentException If cyclical membership is detected. * @throws IllegalArgumentException If cyclical membership is detected.
* @throws GroupNotFoundException If the group was not found. * @throws GroupNotFoundException If the group was not found.
* @throws AccessControlException If unauthorized to perform this operation. * @throws AccessControlException If unauthorized to perform this operation.
* @throws java.io.IOException * @throws java.io.IOException
*/ */
public void addGroupMember(GroupURI targetGroup, String groupMemberName) public void addGroupMember(String targetGroupName, String groupMemberName)
throws IllegalArgumentException, GroupNotFoundException, throws IllegalArgumentException, GroupNotFoundException,
AccessControlException, IOException AccessControlException, IOException
{ {
String path = "/" + targetGroup.getName() + "/groupMembers/" + groupMemberName; String path = "/" + targetGroupName + "/groupMembers/" + groupMemberName;
URL groupsURL = getRegistryClient() URL groupsURL = getRegistryClient()
.getServiceURL(targetGroup.getServiceID(), Standards.GMS_GROUPS_01, AuthMethod.CERT); .getServiceURL(this.serviceID, Standards.GMS_GROUPS_01, AuthMethod.CERT);
URL addGroupMemberURL = new URL(groupsURL.toExternalForm() + path); URL addGroupMemberURL = new URL(groupsURL.toExternalForm() + path);
log.debug("addGroupMember request to " + addGroupMemberURL.toString()); log.debug("addGroupMember request to " + addGroupMemberURL.toString());
...@@ -560,28 +566,28 @@ public class GMSClient implements TransferListener ...@@ -560,28 +566,28 @@ public class GMSClient implements TransferListener
/** /**
* Add a user as a member of a group. * Add a user as a member of a group.
* *
* @param targetGroup The group in which to add the group member. * @param targetGroupName The group in which to add the group member.
* @param userID The user to add. * @param userID The user to add.
* @throws GroupNotFoundException If the group was not found. * @throws GroupNotFoundException If the group was not found.
* @throws UserNotFoundException If the member was not found. * @throws UserNotFoundException If the member was not found.
* @throws java.io.IOException * @throws java.io.IOException
* @throws AccessControlException If unauthorized to perform this operation. * @throws AccessControlException If unauthorized to perform this operation.
*/ */
public void addUserMember(GroupURI targetGroup, Principal userID) public void addUserMember(String targetGroupName, Principal userID)
throws GroupNotFoundException, UserNotFoundException, AccessControlException, IOException throws GroupNotFoundException, UserNotFoundException, AccessControlException, IOException
{ {
if (targetGroup == null) if (targetGroupName == null)
throw new IllegalArgumentException("targetGroup required"); throw new IllegalArgumentException("targetGroupName required");
if (userID == null) if (userID == null)
throw new IllegalArgumentException("userID required"); throw new IllegalArgumentException("userID required");
log.debug("addUserMember: " + targetGroup + " + " + userID.getName()); log.debug("addUserMember: " + targetGroupName + " + " + userID.getName());
String userIDType = AuthenticationUtil.getPrincipalType(userID); String userIDType = AuthenticationUtil.getPrincipalType(userID);
String path = "/" + targetGroup.getName() + "/userMembers/" + NetUtil.encode(userID.getName()) + "?idType=" + userIDType; String path = "/" + targetGroupName + "/userMembers/" + NetUtil.encode(userID.getName()) + "?idType=" + userIDType;
URL groupsURL = getRegistryClient() URL groupsURL = getRegistryClient()
.getServiceURL(targetGroup.getServiceID(), Standards.GMS_GROUPS_01, AuthMethod.CERT); .getServiceURL(this.serviceID, Standards.GMS_GROUPS_01, AuthMethod.CERT);
URL addUserMemberURL = new URL(groupsURL.toExternalForm() + path); URL addUserMemberURL = new URL(groupsURL.toExternalForm() + path);
log.debug("addUserMember request to " + addUserMemberURL.toString()); log.debug("addUserMember request to " + addUserMemberURL.toString());
...@@ -625,20 +631,20 @@ public class GMSClient implements TransferListener ...@@ -625,20 +631,20 @@ public class GMSClient implements TransferListener
/** /**
* Remove a group as a member of another group. * Remove a group as a member of another group.
* *
* @param targetGroup The group from which to remove the group member. * @param targetGroupName The group from which to remove the group member.
* @param groupMemberName The group member to remove. * @param groupMemberName The group member to remove.
* @throws GroupNotFoundException If the group was not found. * @throws GroupNotFoundException If the group was not found.
* @throws java.io.IOException * @throws java.io.IOException
* @throws AccessControlException If unauthorized to perform this operation. * @throws AccessControlException If unauthorized to perform this operation.
*/ */
public void removeGroupMember(GroupURI targetGroup, public void removeGroupMember(String targetGroupName,
String groupMemberName) String groupMemberName)
throws GroupNotFoundException, AccessControlException, IOException throws GroupNotFoundException, AccessControlException, IOException
{ {
String path = "/" + targetGroup.getName() + "/groupMembers/" + groupMemberName; String path = "/" + targetGroupName + "/groupMembers/" + groupMemberName;
URL groupsURL = getRegistryClient() URL groupsURL = getRegistryClient()
.getServiceURL(targetGroup.getServiceID(), Standards.GMS_GROUPS_01, AuthMethod.CERT); .getServiceURL(this.serviceID, Standards.GMS_GROUPS_01, AuthMethod.CERT);
URL removeGroupMemberURL = new URL(groupsURL.toExternalForm() + path); URL removeGroupMemberURL = new URL(groupsURL.toExternalForm() + path);
log.debug("removeGroupMember request to " + log.debug("removeGroupMember request to " +
removeGroupMemberURL.toString()); removeGroupMemberURL.toString());
...@@ -692,22 +698,22 @@ public class GMSClient implements TransferListener ...@@ -692,22 +698,22 @@ public class GMSClient implements TransferListener
/** /**
* Remove a user as a member of a group. * Remove a user as a member of a group.
* *
* @param targetGroup The group from which to remove the group member. * @param targetGroupName The group from which to remove the group member.
* @param userID The user to remove. * @param userID The user to remove.
* @throws GroupNotFoundException If the group was not found. * @throws GroupNotFoundException If the group was not found.
* @throws UserNotFoundException If the member was not found. * @throws UserNotFoundException If the member was not found.
* @throws java.io.IOException * @throws java.io.IOException
* @throws AccessControlException If unauthorized to perform this operation. * @throws AccessControlException If unauthorized to perform this operation.
*/ */
public void removeUserMember(GroupURI targetGroup, Principal userID) public void removeUserMember(String targetGroupName, Principal userID)
throws GroupNotFoundException, UserNotFoundException, AccessControlException, IOException throws GroupNotFoundException, UserNotFoundException, AccessControlException, IOException
{ {
String userIDType = AuthenticationUtil.getPrincipalType(userID); String userIDType = AuthenticationUtil.getPrincipalType(userID);
log.debug("removeUserMember: " + targetGroup + " - " + userID.getName() + " type: " + userIDType); log.debug("removeUserMember: " + targetGroupName + " - " + userID.getName() + " type: " + userIDType);
String path = "/" + targetGroup.getName() + "/userMembers/" + NetUtil.encode(userID.getName()) + "?idType=" + userIDType; String path = "/" + targetGroupName + "/userMembers/" + NetUtil.encode(userID.getName()) + "?idType=" + userIDType;
URL groupsURL = getRegistryClient() URL groupsURL = getRegistryClient()
.getServiceURL(targetGroup.getServiceID(), Standards.GMS_GROUPS_01, AuthMethod.CERT); .getServiceURL(this.serviceID, Standards.GMS_GROUPS_01, AuthMethod.CERT);
URL removeUserMemberURL = new URL(groupsURL.toExternalForm() + path); URL removeUserMemberURL = new URL(groupsURL.toExternalForm() + path);
log.debug("removeUserMember: " + removeUserMemberURL.toString()); log.debug("removeUserMember: " + removeUserMemberURL.toString());
...@@ -783,14 +789,14 @@ public class GMSClient implements TransferListener ...@@ -783,14 +789,14 @@ public class GMSClient implements TransferListener
* @throws ca.nrc.cadc.ac.UserNotFoundException * @throws ca.nrc.cadc.ac.UserNotFoundException
* @throws java.io.IOException * @throws java.io.IOException
*/ */
public List<Group> getMemberships(URI serviceID, Role role) public List<Group> getMemberships(Role role)
throws UserNotFoundException, AccessControlException, IOException throws UserNotFoundException, AccessControlException, IOException
{ {
return getMemberships(serviceID, null, role); return getMemberships(null, role);
} }
private List<Group> getMemberships(URI serviceID, Principal ignore, Role role) private List<Group> getMemberships(Principal ignore, Role role)
throws UserNotFoundException, AccessControlException, IOException throws UserNotFoundException, AccessControlException, IOException
{ {
if (role == null) if (role == null)
...@@ -801,7 +807,7 @@ public class GMSClient implements TransferListener ...@@ -801,7 +807,7 @@ public class GMSClient implements TransferListener
Principal userID = getCurrentUserID(); Principal userID = getCurrentUserID();
if (userID != null) if (userID != null)
{ {
List<Group> cachedGroups = getCachedGroups(serviceID, userID, role, true); List<Group> cachedGroups = getCachedGroups(userID, role, true);
if (cachedGroups != null) if (cachedGroups != null)
{ {
return cachedGroups; return cachedGroups;
...@@ -819,7 +825,7 @@ public class GMSClient implements TransferListener ...@@ -819,7 +825,7 @@ public class GMSClient implements TransferListener
searchGroupPath.append("&ROLE=").append(NetUtil.encode(roleString)); searchGroupPath.append("&ROLE=").append(NetUtil.encode(roleString));
URL searchURL = getRegistryClient() URL searchURL = getRegistryClient()
.getServiceURL(serviceID, Standards.GMS_SEARCH_01, AuthMethod.CERT); .getServiceURL(this.serviceID, Standards.GMS_SEARCH_01, AuthMethod.CERT);
URL getMembershipsURL = new URL(searchURL.toExternalForm() + searchGroupPath.toString()); URL getMembershipsURL = new URL(searchURL.toExternalForm() + searchGroupPath.toString());
log.debug("getMemberships request to " + getMembershipsURL.toString()); log.debug("getMemberships request to " + getMembershipsURL.toString());
...@@ -857,7 +863,7 @@ public class GMSClient implements TransferListener ...@@ -857,7 +863,7 @@ public class GMSClient implements TransferListener
log.debug("getMemberships returned: " + groupsXML); log.debug("getMemberships returned: " + groupsXML);
GroupListReader groupListReader = new GroupListReader(); GroupListReader groupListReader = new GroupListReader();
List<Group> groups = groupListReader.read(groupsXML); List<Group> groups = groupListReader.read(groupsXML);
setCachedGroups(serviceID, userID, groups, role); setCachedGroups(userID, groups, role);
return groups; return groups;
} }
catch (Exception bug) catch (Exception bug)
...@@ -874,17 +880,17 @@ public class GMSClient implements TransferListener ...@@ -874,17 +880,17 @@ public class GMSClient implements TransferListener
* *
* This call is identical to getMemberShip(userID, groupName, Role.MEMBER) * This call is identical to getMemberShip(userID, groupName, Role.MEMBER)
* *
* @param groupID Identifies the group. * @param groupName Identifies the group.
* @return The group or null of the user is not a member. * @return The group or null of the user is not a member.
* @throws UserNotFoundException If the user does not exist. * @throws UserNotFoundException If the user does not exist.
* @throws AccessControlException If not allowed to peform the search. * @throws AccessControlException If not allowed to peform the search.
* @throws IllegalArgumentException If a parameter is null. * @throws IllegalArgumentException If a parameter is null.
* @throws IOException If an unknown error occured. * @throws IOException If an unknown error occured.
*/ */
public Group getMembership(GroupURI groupID) public Group getMembership(String groupName)
throws UserNotFoundException, AccessControlException, IOException throws UserNotFoundException, AccessControlException, IOException
{ {
return getMembership(groupID, Role.MEMBER); return getMembership(groupName, Role.MEMBER);
} }
/** /**
...@@ -892,7 +898,7 @@ public class GMSClient implements TransferListener ...@@ -892,7 +898,7 @@ public class GMSClient implements TransferListener
* identified by userID, is a member (of type role) of that group. * identified by userID, is a member (of type role) of that group.
* Return null otherwise. * Return null otherwise.
* *
* @param groupID Identifies the group. * @param groupName Identifies the group.
* @param role The membership role to search. * @param role The membership role to search.
* @return The group or null of the user is not a member. * @return The group or null of the user is not a member.
* @throws UserNotFoundException If the user does not exist. * @throws UserNotFoundException If the user does not exist.
...@@ -900,10 +906,10 @@ public class GMSClient implements TransferListener ...@@ -900,10 +906,10 @@ public class GMSClient implements TransferListener
* @throws IllegalArgumentException If a parameter is null. * @throws IllegalArgumentException If a parameter is null.
* @throws IOException If an unknown error occured. * @throws IOException If an unknown error occured.
*/ */
public Group getMembership(GroupURI groupID, Role role) public Group getMembership(String groupName, Role role)
throws UserNotFoundException, AccessControlException, IOException throws UserNotFoundException, AccessControlException, IOException
{ {
if (groupID == null || role == null) if (groupName == null || role == null)
{ {
throw new IllegalArgumentException("groupName and role are required."); throw new IllegalArgumentException("groupName and role are required.");
} }
...@@ -911,7 +917,7 @@ public class GMSClient implements TransferListener ...@@ -911,7 +917,7 @@ public class GMSClient implements TransferListener
Principal userID = getCurrentUserID(); Principal userID = getCurrentUserID();
if (userID != null) if (userID != null)
{ {
Group cachedGroup = getCachedGroup(userID, groupID, role); Group cachedGroup = getCachedGroup(userID, groupName, role);
if (cachedGroup != null) if (cachedGroup != null)
{ {
return cachedGroup; return cachedGroup;
...@@ -927,10 +933,10 @@ public class GMSClient implements TransferListener ...@@ -927,10 +933,10 @@ public class GMSClient implements TransferListener
//searchGroupURL.append("ID=").append(NetUtil.encode(id)); //searchGroupURL.append("ID=").append(NetUtil.encode(id));
//searchGroupURL.append("&IDTYPE=").append(NetUtil.encode(idType)); //searchGroupURL.append("&IDTYPE=").append(NetUtil.encode(idType));
searchGroupPath.append("&ROLE=").append(NetUtil.encode(roleString)); searchGroupPath.append("&ROLE=").append(NetUtil.encode(roleString));
searchGroupPath.append("&GROUPID=").append(NetUtil.encode(groupID.getName())); searchGroupPath.append("&GROUPID=").append(NetUtil.encode(groupName));
URL searchURL = getRegistryClient() URL searchURL = getRegistryClient()
.getServiceURL(groupID.getServiceID(), Standards.GMS_SEARCH_01, AuthMethod.CERT); .getServiceURL(this.serviceID, Standards.GMS_SEARCH_01, AuthMethod.CERT);
URL getMembershipURL = new URL(searchURL.toExternalForm() + searchGroupPath.toString()); URL getMembershipURL = new URL(searchURL.toExternalForm() + searchGroupPath.toString());
log.debug("getMembership request to " + getMembershipURL.toString()); log.debug("getMembership request to " + getMembershipURL.toString());
...@@ -979,7 +985,7 @@ public class GMSClient implements TransferListener ...@@ -979,7 +985,7 @@ public class GMSClient implements TransferListener
return ret; return ret;
} }
throw new IllegalStateException( throw new IllegalStateException(
"Duplicate membership for " + userID + " in group " + groupID); "Duplicate membership for " + userID + " in group " + groupName);
} }
catch (Exception bug) catch (Exception bug)
{ {
...@@ -991,37 +997,37 @@ public class GMSClient implements TransferListener ...@@ -991,37 +997,37 @@ public class GMSClient implements TransferListener
/** /**
* Check group membership of the current Subject. * Check group membership of the current Subject.
* *
* @param groupID * @param groupName
* @return true if the current Subject is a member of the group, false otherwise * @return true if the current Subject is a member of the group, false otherwise
* @throws UserNotFoundException * @throws UserNotFoundException
* @throws AccessControlException * @throws AccessControlException
* @throws IOException * @throws IOException
*/ */
public boolean isMember(GroupURI groupID) public boolean isMember(String groupName)
throws UserNotFoundException, AccessControlException, IOException throws UserNotFoundException, AccessControlException, IOException
{ {
return isMember(groupID, Role.MEMBER); return isMember(groupName, Role.MEMBER);
} }
/** /**
* *
* @param groupID * @param groupName
* @param role * @param role
* @return true if the current Subject is a member of the group with the specified role, false otherwise * @return true if the current Subject is a member of the group with the specified role, false otherwise
* @throws UserNotFoundException * @throws UserNotFoundException
* @throws AccessControlException * @throws AccessControlException
* @throws IOException * @throws IOException
*/ */
public boolean isMember(GroupURI groupID, Role role) public boolean isMember(String groupName, Role role)
throws UserNotFoundException, AccessControlException, IOException throws UserNotFoundException, AccessControlException, IOException
{ {
return isMember(getCurrentUserID(), groupID, role); return isMember(getCurrentUserID(), groupName, role);
} }
private boolean isMember(Principal userID, GroupURI groupID, Role role) private boolean isMember(Principal userID, String groupName, Role role)
throws UserNotFoundException, AccessControlException, IOException throws UserNotFoundException, AccessControlException, IOException
{ {
Group group = getMembership(groupID, role); Group group = getMembership(groupName, role);
return group != null; return group != null;
} }
...@@ -1077,7 +1083,7 @@ public class GMSClient implements TransferListener ...@@ -1077,7 +1083,7 @@ public class GMSClient implements TransferListener
} }
} }
protected GroupMemberships getGroupCache(URI serviceID, Principal userID) protected GroupMemberships getGroupCache(Principal userID)
{ {
AccessControlContext acContext = AccessController.getContext(); AccessControlContext acContext = AccessController.getContext();
Subject subject = Subject.getSubject(acContext); Subject subject = Subject.getSubject(acContext);
...@@ -1107,21 +1113,21 @@ public class GMSClient implements TransferListener ...@@ -1107,21 +1113,21 @@ public class GMSClient implements TransferListener
return null; // no cache return null; // no cache
} }
protected Group getCachedGroup(Principal userID, GroupURI groupID, Role role) protected Group getCachedGroup(Principal userID, String groupID, Role role)
{ {
List<Group> groups = getCachedGroups(groupID.getServiceID(), userID, role, false); List<Group> groups = getCachedGroups(userID, role, false);
if (groups == null) if (groups == null)
return null; // no cache return null; // no cache
for (Group g : groups) for (Group g : groups)
{ {
if (g.getID().equals(groupID)) if (g.getID().getName().equals(groupID))
return g; return g;
} }
return null; return null;
} }
protected List<Group> getCachedGroups(URI serviceID, Principal userID, Role role, boolean complete) protected List<Group> getCachedGroups(Principal userID, Role role, boolean complete)
{ {
GroupMemberships mems = getGroupCache(serviceID, userID); GroupMemberships mems = getGroupCache(userID);
if (mems == null) if (mems == null)
return null; // no cache return null; // no cache
...@@ -1135,16 +1141,16 @@ public class GMSClient implements TransferListener ...@@ -1135,16 +1141,16 @@ public class GMSClient implements TransferListener
protected void addCachedGroup(Principal userID, Group group, Role role) protected void addCachedGroup(Principal userID, Group group, Role role)
{ {
GroupMemberships mems = getGroupCache(group.getID().getServiceID(), userID); GroupMemberships mems = getGroupCache(userID);
if (mems == null) if (mems == null)
return; // no cache return; // no cache
mems.add(group, role); mems.add(group, role);
} }
protected void setCachedGroups(URI serviceID, Principal userID, List<Group> groups, Role role) protected void setCachedGroups(Principal userID, List<Group> groups, Role role)
{ {
GroupMemberships mems = getGroupCache(serviceID, userID); GroupMemberships mems = getGroupCache(userID);
if (mems == null) if (mems == null)
return; // no cache return; // no cache
......
...@@ -69,6 +69,7 @@ ...@@ -69,6 +69,7 @@
package ca.nrc.cadc.ac.client; package ca.nrc.cadc.ac.client;
import java.net.URI;
import java.security.AccessControlContext; import java.security.AccessControlContext;
import java.security.AccessController; import java.security.AccessController;
import java.security.Principal; import java.security.Principal;
...@@ -95,10 +96,10 @@ import ca.nrc.cadc.util.Log4jInit; ...@@ -95,10 +96,10 @@ import ca.nrc.cadc.util.Log4jInit;
* only used for testing. Should not be used for production * only used for testing. Should not be used for production
* work. * work.
*/ */
public class GMSClientMain implements PrivilegedAction<Object> public class Main implements PrivilegedAction<Object>
{ {
private static Logger log = Logger.getLogger(GMSClientMain.class); private static Logger log = Logger.getLogger(Main.class);
public static final String ARG_ADD_MEMBER = "add-member"; public static final String ARG_ADD_MEMBER = "add-member";
public static final String ARG_DEL_MEMBER = "remove-member"; public static final String ARG_DEL_MEMBER = "remove-member";
...@@ -118,12 +119,11 @@ public class GMSClientMain implements PrivilegedAction<Object> ...@@ -118,12 +119,11 @@ public class GMSClientMain implements PrivilegedAction<Object>
public static final String ARG_V = "v"; public static final String ARG_V = "v";
public static final String ARG_D = "d"; public static final String ARG_D = "d";
private GMSClient client;
private ArgumentMap argMap; private ArgumentMap argMap;
private GMSClientMain() private Main(ArgumentMap args)
{ {
client = new GMSClient(); this.argMap = args;
} }
public static void main(String[] args) public static void main(String[] args)
...@@ -149,8 +149,7 @@ public class GMSClientMain implements PrivilegedAction<Object> ...@@ -149,8 +149,7 @@ public class GMSClientMain implements PrivilegedAction<Object>
else else
Log4jInit.setLevel("ca", Level.WARN); Log4jInit.setLevel("ca", Level.WARN);
GMSClientMain main = new GMSClientMain(); Main main = new Main(argMap);
main.argMap = argMap;
Subject subject = CertCmdArgUtil.initSubject(argMap, true); Subject subject = CertCmdArgUtil.initSubject(argMap, true);
...@@ -192,15 +191,15 @@ public class GMSClientMain implements PrivilegedAction<Object> ...@@ -192,15 +191,15 @@ public class GMSClientMain implements PrivilegedAction<Object>
private static void usage() private static void usage()
{ {
System.out.println("--create --group=<g>"); System.out.println("--create --group=<uri>");
System.out.println("--get --group=<g>"); System.out.println("--get --group=<uri>");
System.out.println("--delete --group=<g>"); System.out.println("--delete --group=<uri>");
System.out.println(); System.out.println();
System.out.println("--add-member --group=<g> --userid=<u>"); System.out.println("--add-member --group=<uri> --userid=<u>");
System.out.println("--remove-member --group=<g> --userid=<u>"); System.out.println("--remove-member --group=<uri> --userid=<u>");
System.out.println(); System.out.println();
System.out.println("--add-admin --group=<g> --userid=<u>"); System.out.println("--add-admin --group=<uri> --userid=<u>");
System.out.println("--remove-admin --group=<g> --userid=<u>"); System.out.println("--remove-admin --group=<uri> --userid=<u>");
} }
@Override @Override
...@@ -209,12 +208,14 @@ public class GMSClientMain implements PrivilegedAction<Object> ...@@ -209,12 +208,14 @@ public class GMSClientMain implements PrivilegedAction<Object>
try try
{ {
String command = getCommand(); String command = getCommand();
String suri = argMap.getValue(ARG_GROUP);
GroupURI groupID = null; GroupURI guri = new GroupURI(new URI(suri));
GMSClient client = new GMSClient(guri.getServiceID());
String group = guri.getName();
if (command.equals(ARG_ADD_MEMBER)) if (command.equals(ARG_ADD_MEMBER))
{ {
String group = argMap.getValue(ARG_GROUP);
String userID = argMap.getValue(ARG_USERID); String userID = argMap.getValue(ARG_USERID);
if (group == null) if (group == null)
...@@ -223,11 +224,10 @@ public class GMSClientMain implements PrivilegedAction<Object> ...@@ -223,11 +224,10 @@ public class GMSClientMain implements PrivilegedAction<Object>
if (userID == null) if (userID == null)
throw new IllegalArgumentException("No userid specified"); throw new IllegalArgumentException("No userid specified");
client.addUserMember(new GroupURI(group), new HttpPrincipal(userID)); client.addUserMember(group, new HttpPrincipal(userID));
} }
else if (command.equals(ARG_DEL_MEMBER)) else if (command.equals(ARG_DEL_MEMBER))
{ {
String group = argMap.getValue(ARG_GROUP);
if (group == null) if (group == null)
throw new IllegalArgumentException("No group specified"); throw new IllegalArgumentException("No group specified");
...@@ -235,11 +235,10 @@ public class GMSClientMain implements PrivilegedAction<Object> ...@@ -235,11 +235,10 @@ public class GMSClientMain implements PrivilegedAction<Object>
if (member == null) if (member == null)
throw new IllegalArgumentException("No user specified"); throw new IllegalArgumentException("No user specified");
client.removeUserMember(new GroupURI(group), new HttpPrincipal(member)); client.removeUserMember(group, new HttpPrincipal(member));
} }
else if (command.equals(ARG_ADD_ADMIN)) else if (command.equals(ARG_ADD_ADMIN))
{ {
String group = argMap.getValue(ARG_GROUP);
String userID = argMap.getValue(ARG_USERID); String userID = argMap.getValue(ARG_USERID);
if (group == null) if (group == null)
...@@ -249,7 +248,7 @@ public class GMSClientMain implements PrivilegedAction<Object> ...@@ -249,7 +248,7 @@ public class GMSClientMain implements PrivilegedAction<Object>
throw new IllegalArgumentException("No userid specified"); throw new IllegalArgumentException("No userid specified");
HttpPrincipal hp = new HttpPrincipal(userID); HttpPrincipal hp = new HttpPrincipal(userID);
Group cur = client.getGroup(new GroupURI(group)); Group cur = client.getGroup(group);
boolean update = true; boolean update = true;
for (User admin : cur.getUserAdmins()) for (User admin : cur.getUserAdmins())
{ {
...@@ -280,7 +279,6 @@ public class GMSClientMain implements PrivilegedAction<Object> ...@@ -280,7 +279,6 @@ public class GMSClientMain implements PrivilegedAction<Object>
} }
else if (command.equals(ARG_DEL_ADMIN)) else if (command.equals(ARG_DEL_ADMIN))
{ {
String group = argMap.getValue(ARG_GROUP);
if (group == null) if (group == null)
throw new IllegalArgumentException("No group specified"); throw new IllegalArgumentException("No group specified");
...@@ -289,7 +287,7 @@ public class GMSClientMain implements PrivilegedAction<Object> ...@@ -289,7 +287,7 @@ public class GMSClientMain implements PrivilegedAction<Object>
throw new IllegalArgumentException("No user specified"); throw new IllegalArgumentException("No user specified");
HttpPrincipal hp = new HttpPrincipal(userID); HttpPrincipal hp = new HttpPrincipal(userID);
Group cur = client.getGroup(new GroupURI(group)); Group cur = client.getGroup(group);
boolean update = false; boolean update = false;
Iterator<User> iter = cur.getUserAdmins().iterator(); Iterator<User> iter = cur.getUserAdmins().iterator();
while (iter.hasNext()) while (iter.hasNext())
...@@ -319,29 +317,15 @@ public class GMSClientMain implements PrivilegedAction<Object> ...@@ -319,29 +317,15 @@ public class GMSClientMain implements PrivilegedAction<Object>
} }
else if (command.equals(ARG_CREATE_GROUP)) else if (command.equals(ARG_CREATE_GROUP))
{ {
String group = argMap.getValue(ARG_GROUP);
if (group == null) if (group == null)
throw new IllegalArgumentException("No group specified"); throw new IllegalArgumentException("No group specified");
GroupURI groupURI = null;
try
{
groupURI = new GroupURI(group);
}
catch (Exception e)
{
String message = "Invalid group URI format '" +
group + "': " + e.getMessage();
log.debug(message, e);
throw new IllegalArgumentException(message);
}
AccessControlContext accessControlContext = AccessController.getContext(); AccessControlContext accessControlContext = AccessController.getContext();
Subject subject = Subject.getSubject(accessControlContext); Subject subject = Subject.getSubject(accessControlContext);
Set<X500Principal> principals = subject.getPrincipals(X500Principal.class); Set<X500Principal> principals = subject.getPrincipals(X500Principal.class);
X500Principal p = principals.iterator().next(); X500Principal p = principals.iterator().next();
Group g = new Group(groupURI); Group g = new Group(guri);
User member = new User(); User member = new User();
member.getIdentities().add(p); member.getIdentities().add(p);
...@@ -350,11 +334,10 @@ public class GMSClientMain implements PrivilegedAction<Object> ...@@ -350,11 +334,10 @@ public class GMSClientMain implements PrivilegedAction<Object>
} }
else if (command.equals(ARG_GET_GROUP)) else if (command.equals(ARG_GET_GROUP))
{ {
String group = argMap.getValue(ARG_GROUP);
if (group == null) if (group == null)
throw new IllegalArgumentException("No group specified"); throw new IllegalArgumentException("No group specified");
Group g = client.getGroup(new GroupURI(group)); Group g = client.getGroup(group);
System.out.println("found: " + g.getID()); System.out.println("found: " + g.getID());
System.out.println("\t" + g.description); System.out.println("\t" + g.description);
System.out.println("owner: " + g.getOwner()); System.out.println("owner: " + g.getOwner());
...@@ -374,11 +357,10 @@ public class GMSClientMain implements PrivilegedAction<Object> ...@@ -374,11 +357,10 @@ public class GMSClientMain implements PrivilegedAction<Object>
} }
else if (command.equals(ARG_DELETE_GROUP)) else if (command.equals(ARG_DELETE_GROUP))
{ {
String group = argMap.getValue(ARG_GROUP);
if (group == null) if (group == null)
throw new IllegalArgumentException("No group specified"); throw new IllegalArgumentException("No group specified");
client.deleteGroup(new GroupURI(group)); client.deleteGroup(group);
} }
return null; return null;
......
...@@ -115,11 +115,13 @@ public class GMSClientTest ...@@ -115,11 +115,13 @@ public class GMSClientTest
final RegistryClient mockRegistryClient = final RegistryClient mockRegistryClient =
createMock(RegistryClient.class); createMock(RegistryClient.class);
// expect(mockRegistryClient.getServiceURL(serviceID, Standards.UMS_USERS_01, AuthMethod.CERT)) final URI serviceID = URI.create("ivo://mysite.com/users");
// .andReturn(new URL("http://mysite.com/users"));
expect(mockRegistryClient.getServiceURL(serviceID, Standards.UMS_USERS_01, AuthMethod.CERT))
.andReturn(new URL("http://mysite.com/users"));
replay(mockRegistryClient); replay(mockRegistryClient);
GMSClient client = new GMSClient() GMSClient client = new GMSClient(serviceID)
{ {
@Override @Override
protected RegistryClient getRegistryClient() protected RegistryClient getRegistryClient()
...@@ -149,15 +151,15 @@ public class GMSClientTest ...@@ -149,15 +151,15 @@ public class GMSClientTest
final HttpPrincipal test1UserID = new HttpPrincipal("test"); final HttpPrincipal test1UserID = new HttpPrincipal("test");
subject.getPrincipals().add(test1UserID); subject.getPrincipals().add(test1UserID);
final URI serviceID = URI.create("ivo://example.org/gms"); final URI serviceID = URI.create("ivo://mysite.com/users");
final RegistryClient mockRegistryClient = final RegistryClient mockRegistryClient =
createMock(RegistryClient.class); createMock(RegistryClient.class);
expect(mockRegistryClient.getServiceURL(serviceID, Standards.GMS_GROUPS_01, AuthMethod.CERT )) expect(mockRegistryClient.getServiceURL(serviceID, Standards.GMS_GROUPS_01, AuthMethod.CERT ))
.andReturn(new URL("http://example.org/gms")); .andReturn(new URL("http://mysite.com/users"));
replay(mockRegistryClient); replay(mockRegistryClient);
final GMSClient client = new GMSClient() final GMSClient client = new GMSClient(serviceID)
{ {
@Override @Override
protected RegistryClient getRegistryClient() protected RegistryClient getRegistryClient()
...@@ -173,42 +175,46 @@ public class GMSClientTest ...@@ -173,42 +175,46 @@ public class GMSClientTest
{ {
List<Group> initial = client List<Group> initial = client
.getCachedGroups(serviceID, test1UserID, Role.MEMBER, true); .getCachedGroups(test1UserID, Role.MEMBER, true);
Assert.assertNull("Cache should be null", initial); Assert.assertNull("Cache should be null", initial);
// add single group as isMember might do // add single group as isMember might do
GroupURI group0uri = new GroupURI("ivo://example.org/gms?0"); GroupURI group0uri = new GroupURI("ivo://example.org/gms?0");
Group group0 = new Group(group0uri); Group group0 = new Group(group0uri);
client.addCachedGroup(test1UserID, group0, Role.MEMBER); client.addCachedGroup(test1UserID, group0, Role.MEMBER);
List<Group> actual = client.getCachedGroups(serviceID, test1UserID, Role.MEMBER, true); List<Group> actual = client
.getCachedGroups(test1UserID, Role.MEMBER, true);
Assert.assertNull("Cache should be null", actual); Assert.assertNull("Cache should be null", actual);
Group g = client.getCachedGroup(test1UserID, group0uri, Role.MEMBER); Group g = client
.getCachedGroup(test1UserID, "0", Role.MEMBER);
Assert.assertNotNull("cached group from incomplete cache", g); Assert.assertNotNull("cached group from incomplete cache", g);
// add all groups like getMemberships might do // add all groups like getMemberships might do
List<Group> expected = new ArrayList<Group>(); List<Group> expected = new ArrayList<Group>();
Group group1 = new Group(new GroupURI("ivo://example.org/gms?1")); GroupURI group1uri = new GroupURI("ivo://example.org/gms?1");
Group group2 = new Group(new GroupURI("ivo://example.org/gms?2")); GroupURI group2uri = new GroupURI("ivo://example.org/gms?2");
Group group1 = new Group(group1uri);
Group group2 = new Group(group2uri);
expected.add(group0); expected.add(group0);
expected.add(group1); expected.add(group1);
expected.add(group2); expected.add(group2);
client.setCachedGroups(serviceID, test1UserID, expected, Role.MEMBER); client.setCachedGroups(test1UserID, expected, Role.MEMBER);
actual = client actual = client
.getCachedGroups(serviceID, test1UserID, Role.MEMBER, true); .getCachedGroups(test1UserID, Role.MEMBER, true);
Assert.assertEquals("Wrong cached groups", expected, actual); Assert.assertEquals("Wrong cached groups", expected, actual);
// check against another role // check against another role
actual = client actual = client
.getCachedGroups(serviceID, test1UserID, Role.OWNER, true); .getCachedGroups(test1UserID, Role.OWNER, true);
Assert.assertNull("Cache should be null", actual); Assert.assertNull("Cache should be null", actual);
// check against another userid // check against another userid
final HttpPrincipal anotherUserID = new HttpPrincipal("anotheruser"); final HttpPrincipal anotherUserID = new HttpPrincipal("anotheruser");
actual = client actual = client
.getCachedGroups(serviceID, anotherUserID, Role.MEMBER, true); .getCachedGroups(anotherUserID, Role.MEMBER, true);
Assert.assertNull("Cache should be null", actual); Assert.assertNull("Cache should be null", actual);
return null; return null;
...@@ -228,7 +234,7 @@ public class GMSClientTest ...@@ -228,7 +234,7 @@ public class GMSClientTest
{ {
List<Group> initial = client List<Group> initial = client
.getCachedGroups(serviceID, test2UserID, Role.MEMBER, true); .getCachedGroups(test2UserID, Role.MEMBER, true);
Assert.assertNull("Cache should be null", initial); Assert.assertNull("Cache should be null", initial);
List<Group> expected = new ArrayList<Group>(); List<Group> expected = new ArrayList<Group>();
...@@ -237,21 +243,21 @@ public class GMSClientTest ...@@ -237,21 +243,21 @@ public class GMSClientTest
expected.add(group1); expected.add(group1);
expected.add(group2); expected.add(group2);
client.setCachedGroups(serviceID, test2UserID, expected, Role.MEMBER); client.setCachedGroups(test2UserID, expected, Role.MEMBER);
List<Group> actual = client List<Group> actual = client
.getCachedGroups(serviceID, test2UserID, Role.MEMBER, true); .getCachedGroups(test2UserID, Role.MEMBER, true);
Assert.assertEquals("Wrong cached groups", expected, actual); Assert.assertEquals("Wrong cached groups", expected, actual);
// check against another role // check against another role
actual = client actual = client
.getCachedGroups(serviceID, test2UserID, Role.OWNER, true); .getCachedGroups(test2UserID, Role.OWNER, true);
Assert.assertNull("Cache should be null", actual); Assert.assertNull("Cache should be null", actual);
// check against another userid // check against another userid
final HttpPrincipal anotherUserID = new HttpPrincipal("anotheruser"); final HttpPrincipal anotherUserID = new HttpPrincipal("anotheruser");
actual = client actual = client
.getCachedGroups(serviceID, anotherUserID, Role.MEMBER, true); .getCachedGroups(anotherUserID, Role.MEMBER, true);
Assert.assertNull("Cache should be null", actual); Assert.assertNull("Cache should be null", actual);
return null; return null;
...@@ -261,7 +267,7 @@ public class GMSClientTest ...@@ -261,7 +267,7 @@ public class GMSClientTest
// do the same without a subject // do the same without a subject
List<Group> initial = client List<Group> initial = client
.getCachedGroups(serviceID, test1UserID, Role.MEMBER, true); .getCachedGroups(test1UserID, Role.MEMBER, true);
Assert.assertNull("Cache should be null", initial); Assert.assertNull("Cache should be null", initial);
List<Group> newgroups = new ArrayList<Group>(); List<Group> newgroups = new ArrayList<Group>();
...@@ -270,10 +276,10 @@ public class GMSClientTest ...@@ -270,10 +276,10 @@ public class GMSClientTest
newgroups.add(group1); newgroups.add(group1);
newgroups.add(group2); newgroups.add(group2);
client.setCachedGroups(serviceID, test1UserID, newgroups, Role.MEMBER); client.setCachedGroups(test1UserID, newgroups, Role.MEMBER);
List<Group> actual = client List<Group> actual = client
.getCachedGroups(serviceID, test1UserID, Role.MEMBER, true); .getCachedGroups(test1UserID, Role.MEMBER, true);
Assert.assertNull("Cache should still be null", actual); Assert.assertNull("Cache should still be null", actual);
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment