diff --git a/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/GetGroupNamesAction.java b/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/GetGroupNamesAction.java new file mode 100644 index 0000000000000000000000000000000000000000..40a0d780938c326ff18fb3df7478ea264e9e75ac --- /dev/null +++ b/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/GetGroupNamesAction.java @@ -0,0 +1,101 @@ +/* + ************************************************************************ + ******************* CANADIAN ASTRONOMY DATA CENTRE ******************* + ************** CENTRE CANADIEN DE DONNÉES ASTRONOMIQUES ************** + * + * (c) 2014. (c) 2014. + * Government of Canada Gouvernement du Canada + * National Research Council Conseil national de recherches + * Ottawa, Canada, K1A 0R6 Ottawa, Canada, K1A 0R6 + * All rights reserved Tous droits réservés + * + * NRC disclaims any warranties, Le CNRC dénie toute garantie + * expressed, implied, or énoncée, implicite ou légale, + * statutory, of any kind with de quelque nature que ce + * respect to the software, soit, concernant le logiciel, + * including without limitation y compris sans restriction + * any warranty of merchantability toute garantie de valeur + * or fitness for a particular marchande ou de pertinence + * purpose. NRC shall not be pour un usage particulier. + * liable in any event for any Le CNRC ne pourra en aucun cas + * damages, whether direct or être tenu responsable de tout + * indirect, special or general, dommage, direct ou indirect, + * consequential or incidental, particulier ou général, + * arising from the use of the accessoire ou fortuit, résultant + * software. Neither the name de l'utilisation du logiciel. Ni + * of the National Research le nom du Conseil National de + * Council of Canada nor the Recherches du Canada ni les noms + * names of its contributors may de ses participants ne peuvent + * be used to endorse or promote être utilisés pour approuver ou + * products derived from this promouvoir les produits dérivés + * software without specific prior de ce logiciel sans autorisation + * written permission. préalable et particulière + * par écrit. + * + * This file is part of the Ce fichier fait partie du projet + * OpenCADC project. OpenCADC. + * + * OpenCADC is free software: OpenCADC est un logiciel libre ; + * you can redistribute it and/or vous pouvez le redistribuer ou le + * modify it under the terms of modifier suivant les termes de + * the GNU Affero General Public la “GNU Affero General Public + * License as published by the License” telle que publiée + * Free Software Foundation, par la Free Software Foundation + * either version 3 of the : soit la version 3 de cette + * License, or (at your option) licence, soit (à votre gré) + * any later version. toute version ultérieure. + * + * OpenCADC is distributed in the OpenCADC est distribué + * hope that it will be useful, dans l’espoir qu’il vous + * but WITHOUT ANY WARRANTY; sera utile, mais SANS AUCUNE + * without even the implied GARANTIE : sans même la garantie + * warranty of MERCHANTABILITY implicite de COMMERCIALISABILITÉ + * or FITNESS FOR A PARTICULAR ni d’ADÉQUATION À UN OBJECTIF + * PURPOSE. See the GNU Affero PARTICULIER. Consultez la Licence + * General Public License for Générale Publique GNU Affero + * more details. pour plus de détails. + * + * You should have received Vous devriez avoir reçu une + * a copy of the GNU Affero copie de la Licence Générale + * General Public License along Publique GNU Affero avec + * with OpenCADC. If not, see OpenCADC ; si ce n’est + * <http://www.gnu.org/licenses/>. pas le cas, consultez : + * <http://www.gnu.org/licenses/>. + * + * $Revision: 4 $ + * + ************************************************************************ + */package ca.nrc.cadc.ac.server.web; + +import java.util.Collection; + +import ca.nrc.cadc.ac.server.GroupPersistence; + +import com.csvreader.CsvWriter; + +public class GetGroupNamesAction extends GroupsAction +{ + + GetGroupNamesAction(GroupLogInfo logInfo) + { + super(logInfo); + } + + public Object run() + throws Exception + { + GroupPersistence groupPersistence = getGroupPersistence(); + Collection<String> groups = groupPersistence.getGroupNames(); + response.setContentType("text/csv"); + + CsvWriter writer = new CsvWriter(response.getWriter(), ','); + + for (String group : groups) + { + writer.write(group); + } + writer.endRecord(); + return null; + } + +} diff --git a/projects/cadcAccessControl/test/src/ca/nrc/cadc/ac/client/GMSClientTest.java b/projects/cadcAccessControl/test/src/ca/nrc/cadc/ac/client/GMSClientTest.java index 9b7ff193ade683d269a2b912121b4af987d8d70a..3025fb37678ac4fc3d0f464e6b320f9ced4ebcaf 100644 --- a/projects/cadcAccessControl/test/src/ca/nrc/cadc/ac/client/GMSClientTest.java +++ b/projects/cadcAccessControl/test/src/ca/nrc/cadc/ac/client/GMSClientTest.java @@ -140,20 +140,21 @@ public class GMSClientTest try { Subject subject = new Subject(); - final HttpPrincipal userID = new HttpPrincipal("test"); - subject.getPrincipals().add(userID); + final HttpPrincipal test1UserID = new HttpPrincipal("test"); + subject.getPrincipals().add(test1UserID); + + RegistryClient regClient = new RegistryClient(); + URL baseURL = regClient.getServiceURL(new URI(AC.GMS_SERVICE_URI), + "https"); + final GMSClient client = new GMSClient(baseURL.toString()); Subject.doAs(subject, new PrivilegedExceptionAction<Object>() { @Override public Object run() throws Exception { - RegistryClient regClient = new RegistryClient(); - URL baseURL = regClient.getServiceURL(new URI(AC.GMS_SERVICE_URI), - "https"); - GMSClient client = new GMSClient(baseURL.toString()); - List<Group> initial = client.getCachedGroups(userID, Role.MEMBER); + List<Group> initial = client.getCachedGroups(test1UserID, Role.MEMBER); Assert.assertNull("Cache should be null", initial); List<Group> expected = new ArrayList<Group>(); @@ -162,31 +163,65 @@ public class GMSClientTest expected.add(group1); expected.add(group2); - client.setCachedGroups(userID, expected, Role.MEMBER); + client.setCachedGroups(test1UserID, expected, Role.MEMBER); - List<Group> actual = client.getCachedGroups(userID, Role.MEMBER); + List<Group> actual = client.getCachedGroups(test1UserID, Role.MEMBER); Assert.assertEquals("Wrong cached groups", expected, actual); // check against another role - actual = client.getCachedGroups(userID, Role.OWNER); + actual = client.getCachedGroups(test1UserID, Role.OWNER); Assert.assertNull("Cache should be null", actual); // check against another userid - final HttpPrincipal userID2 = new HttpPrincipal("test2"); - actual = client.getCachedGroups(userID2, Role.MEMBER); + final HttpPrincipal anotherUserID = new HttpPrincipal("anotheruser"); + actual = client.getCachedGroups(anotherUserID, Role.MEMBER); Assert.assertNull("Cache should be null", actual); return null; } }); + + subject = new Subject(); + final HttpPrincipal test2UserID = new HttpPrincipal("test2"); + subject.getPrincipals().add(test2UserID); + + // do the same but as a different user + Subject.doAs(subject, new PrivilegedExceptionAction<Object>() + { + @Override + public Object run() throws Exception + { + + List<Group> initial = client.getCachedGroups(test2UserID, Role.MEMBER); + Assert.assertNull("Cache should be null", initial); + + List<Group> expected = new ArrayList<Group>(); + Group group1 = new Group("1"); + Group group2 = new Group("2"); + expected.add(group1); + expected.add(group2); + + client.setCachedGroups(test2UserID, expected, Role.MEMBER); + + List<Group> actual = client.getCachedGroups(test2UserID, Role.MEMBER); + Assert.assertEquals("Wrong cached groups", expected, actual); + + // check against another role + actual = client.getCachedGroups(test2UserID, Role.OWNER); + Assert.assertNull("Cache should be null", actual); + + // check against another userid + final HttpPrincipal anotherUserID = new HttpPrincipal("anotheruser"); + actual = client.getCachedGroups(anotherUserID, Role.MEMBER); + Assert.assertNull("Cache should be null", actual); + + return null; + } + }); // do the same without a subject - RegistryClient regClient = new RegistryClient(); - URL baseURL = regClient.getServiceURL(new URI(AC.GMS_SERVICE_URI), - "https"); - GMSClient client = new GMSClient(baseURL.toString()); - List<Group> initial = client.getCachedGroups(userID, Role.MEMBER); + List<Group> initial = client.getCachedGroups(test1UserID, Role.MEMBER); Assert.assertNull("Cache should be null", initial); List<Group> newgroups = new ArrayList<Group>(); @@ -195,9 +230,9 @@ public class GMSClientTest newgroups.add(group1); newgroups.add(group2); - client.setCachedGroups(userID, newgroups, Role.MEMBER); + client.setCachedGroups(test1UserID, newgroups, Role.MEMBER); - List<Group> actual = client.getCachedGroups(userID, Role.MEMBER); + List<Group> actual = client.getCachedGroups(test1UserID, Role.MEMBER); Assert.assertNull("Cache should still be null", actual); } catch (Throwable t)