Loading projects/cadcAccessControl-Server/build.xml +1 −1 Original line number Diff line number Diff line Loading @@ -148,7 +148,7 @@ <pathelement path="${jars}:${testingJars}"/> </classpath> <sysproperty key="ca.nrc.cadc.util.PropertiesReader.dir" value="test"/> <test name="ca.nrc.cadc.ac.server.web.users.GetUserListActionTest" /> <test name="ca.nrc.cadc.ac.server.web.users.GetUserActionTest" /> <formatter type="plain" usefile="false" /> </junit> </target> Loading projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/users/GetUserAction.java +32 −2 Original line number Diff line number Diff line Loading @@ -67,6 +67,7 @@ ************************************************************************ */package ca.nrc.cadc.ac.server.web.users; import ca.nrc.cadc.ac.PersonalDetails; import ca.nrc.cadc.ac.User; import ca.nrc.cadc.ac.UserNotFoundException; import ca.nrc.cadc.ac.server.UserPersistence; Loading @@ -75,6 +76,7 @@ import java.security.AccessControlContext; import java.security.AccessController; import java.security.Principal; import java.security.PrivilegedExceptionAction; import java.util.Set; import javax.security.auth.Subject; Loading @@ -85,11 +87,13 @@ public class GetUserAction extends AbstractUserAction { private static final Logger log = Logger.getLogger(GetUserAction.class); private final Principal userID; private final String detail; GetUserAction(Principal userID) GetUserAction(Principal userID, String detail) { super(); this.userID = userID; this.detail = detail; } public void doAction() throws Exception Loading Loading @@ -126,6 +130,32 @@ public class GetUserAction extends AbstractUserAction try { user = userPersistence.getUser(principal); if (detail != null) { // Only return user principals if (detail.equals("identity")) { user.details.clear(); } // Only return user profile info, first and last name. else if (detail.equals("display")) { user.getIdentities().clear(); Set<PersonalDetails> details = user.getDetails(PersonalDetails.class); if (details.isEmpty()) { String error = principal.getName() + " missing required PersonalDetails"; throw new IllegalStateException(error); } PersonalDetails pd = details.iterator().next(); user.details.clear(); user.details.add(new PersonalDetails(pd.getFirstName(), pd.getFirstName())); } else { throw new IllegalArgumentException("Illegal detail parameter " + detail); } } } catch (UserNotFoundException e) { Loading @@ -137,7 +167,7 @@ public class GetUserAction extends AbstractUserAction protected boolean isServops() { log.debug("alinga-- isServops(): augmentUserDN = " + this.augmentUserDN); log.debug("isServops(): augmentUserDN = " + this.augmentUserDN); boolean isServops = false; AccessControlContext acc = AccessController.getContext(); Subject subject = Subject.getSubject(acc); Loading projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/users/UserActionFactory.java +1 −1 Original line number Diff line number Diff line Loading @@ -111,7 +111,7 @@ public abstract class UserActionFactory else if (segments.length == 1) { User user = getUser(segments[0], request.getParameter("idType"), path); action = new GetUserAction(user.getUserID()); action = new GetUserAction(user.getUserID(), request.getParameter("detail")); } if (action != null) Loading projects/cadcAccessControl-Server/test/src/ca/nrc/cadc/ac/server/web/users/GetUserActionTest.java +65 −3 Original line number Diff line number Diff line Loading @@ -67,25 +67,32 @@ */ package ca.nrc.cadc.ac.server.web.users; import ca.nrc.cadc.ac.PersonalDetails; import ca.nrc.cadc.ac.PosixDetails; import ca.nrc.cadc.ac.User; import ca.nrc.cadc.ac.json.JsonUserWriter; import ca.nrc.cadc.ac.server.UserPersistence; import ca.nrc.cadc.ac.server.web.SyncOutput; import ca.nrc.cadc.ac.xml.UserWriter; import ca.nrc.cadc.auth.HttpPrincipal; import ca.nrc.cadc.auth.NumericPrincipal; import org.junit.Test; import javax.security.auth.x500.X500Principal; import javax.servlet.http.HttpServletResponse; import java.io.PrintWriter; import java.io.StringWriter; import java.io.Writer; import java.security.Principal; import java.util.HashSet; import java.util.Set; import static org.easymock.EasyMock.*; import static org.junit.Assert.assertEquals; public class GetUserActionTest { @Test // @Test public void writeUserXML() throws Exception { final SyncOutput mockSyncOut = Loading @@ -94,7 +101,7 @@ public class GetUserActionTest createMock(UserPersistence.class); final HttpPrincipal userID = new HttpPrincipal("CADCtest"); final GetUserAction testSubject = new GetUserAction(userID) final GetUserAction testSubject = new GetUserAction(userID, null) { @Override UserPersistence<HttpPrincipal> getUserPersistence() Loading Loading @@ -126,6 +133,61 @@ public class GetUserActionTest } @Test public void writeUserWithDetailIdentity() throws Exception { final HttpServletResponse mockResponse = createMock(HttpServletResponse.class); final UserPersistence<HttpPrincipal> mockUserPersistence = createMock(UserPersistence.class); final HttpPrincipal userID = new HttpPrincipal("CADCtest"); final GetUserAction testSubject = new GetUserAction(userID, "identity") { @Override UserPersistence<HttpPrincipal> getUserPersistence() { return mockUserPersistence; } }; final User<HttpPrincipal> expected = new User<HttpPrincipal>(userID); expected.getIdentities().add(new NumericPrincipal(789)); expected.getIdentities().add(new X500Principal("cn=foo,o=bar")); StringBuilder sb = new StringBuilder(); UserWriter userWriter = new UserWriter(); userWriter.write(expected, sb); String expectedUser = sb.toString(); final PersonalDetails personalDetails = new PersonalDetails("cadc", "test"); personalDetails.city = "city"; expected.details.add(personalDetails); final PosixDetails posixDetails = new PosixDetails(123L, 456L, "/dev/null"); expected.details.add(posixDetails); final Writer writer = new StringWriter(); final PrintWriter printWriter = new PrintWriter(writer); expect(mockUserPersistence.getUser(userID)).andReturn(expected).once(); mockResponse.setHeader("Content-Type", "text/xml"); expectLastCall().once(); expect(mockResponse.getWriter()).andReturn(printWriter).once(); replay(mockUserPersistence, mockResponse); SyncOutput syncOutput = new SyncOutput(mockResponse); testSubject.setSyncOut(syncOutput); testSubject.doAction(); sb = new StringBuilder(); userWriter.write(expected, sb); String actualUser = sb.toString(); assertEquals(expectedUser, actualUser); verify(mockUserPersistence, mockResponse); } // @Test public void writeUserJSON() throws Exception { final SyncOutput mockSyncOut = Loading @@ -134,7 +196,7 @@ public class GetUserActionTest createMock(UserPersistence.class); final HttpPrincipal userID = new HttpPrincipal("CADCtest"); final GetUserAction testSubject = new GetUserAction(userID) final GetUserAction testSubject = new GetUserAction(userID, null) { @Override UserPersistence<HttpPrincipal> getUserPersistence() Loading Loading
projects/cadcAccessControl-Server/build.xml +1 −1 Original line number Diff line number Diff line Loading @@ -148,7 +148,7 @@ <pathelement path="${jars}:${testingJars}"/> </classpath> <sysproperty key="ca.nrc.cadc.util.PropertiesReader.dir" value="test"/> <test name="ca.nrc.cadc.ac.server.web.users.GetUserListActionTest" /> <test name="ca.nrc.cadc.ac.server.web.users.GetUserActionTest" /> <formatter type="plain" usefile="false" /> </junit> </target> Loading
projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/users/GetUserAction.java +32 −2 Original line number Diff line number Diff line Loading @@ -67,6 +67,7 @@ ************************************************************************ */package ca.nrc.cadc.ac.server.web.users; import ca.nrc.cadc.ac.PersonalDetails; import ca.nrc.cadc.ac.User; import ca.nrc.cadc.ac.UserNotFoundException; import ca.nrc.cadc.ac.server.UserPersistence; Loading @@ -75,6 +76,7 @@ import java.security.AccessControlContext; import java.security.AccessController; import java.security.Principal; import java.security.PrivilegedExceptionAction; import java.util.Set; import javax.security.auth.Subject; Loading @@ -85,11 +87,13 @@ public class GetUserAction extends AbstractUserAction { private static final Logger log = Logger.getLogger(GetUserAction.class); private final Principal userID; private final String detail; GetUserAction(Principal userID) GetUserAction(Principal userID, String detail) { super(); this.userID = userID; this.detail = detail; } public void doAction() throws Exception Loading Loading @@ -126,6 +130,32 @@ public class GetUserAction extends AbstractUserAction try { user = userPersistence.getUser(principal); if (detail != null) { // Only return user principals if (detail.equals("identity")) { user.details.clear(); } // Only return user profile info, first and last name. else if (detail.equals("display")) { user.getIdentities().clear(); Set<PersonalDetails> details = user.getDetails(PersonalDetails.class); if (details.isEmpty()) { String error = principal.getName() + " missing required PersonalDetails"; throw new IllegalStateException(error); } PersonalDetails pd = details.iterator().next(); user.details.clear(); user.details.add(new PersonalDetails(pd.getFirstName(), pd.getFirstName())); } else { throw new IllegalArgumentException("Illegal detail parameter " + detail); } } } catch (UserNotFoundException e) { Loading @@ -137,7 +167,7 @@ public class GetUserAction extends AbstractUserAction protected boolean isServops() { log.debug("alinga-- isServops(): augmentUserDN = " + this.augmentUserDN); log.debug("isServops(): augmentUserDN = " + this.augmentUserDN); boolean isServops = false; AccessControlContext acc = AccessController.getContext(); Subject subject = Subject.getSubject(acc); Loading
projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/users/UserActionFactory.java +1 −1 Original line number Diff line number Diff line Loading @@ -111,7 +111,7 @@ public abstract class UserActionFactory else if (segments.length == 1) { User user = getUser(segments[0], request.getParameter("idType"), path); action = new GetUserAction(user.getUserID()); action = new GetUserAction(user.getUserID(), request.getParameter("detail")); } if (action != null) Loading
projects/cadcAccessControl-Server/test/src/ca/nrc/cadc/ac/server/web/users/GetUserActionTest.java +65 −3 Original line number Diff line number Diff line Loading @@ -67,25 +67,32 @@ */ package ca.nrc.cadc.ac.server.web.users; import ca.nrc.cadc.ac.PersonalDetails; import ca.nrc.cadc.ac.PosixDetails; import ca.nrc.cadc.ac.User; import ca.nrc.cadc.ac.json.JsonUserWriter; import ca.nrc.cadc.ac.server.UserPersistence; import ca.nrc.cadc.ac.server.web.SyncOutput; import ca.nrc.cadc.ac.xml.UserWriter; import ca.nrc.cadc.auth.HttpPrincipal; import ca.nrc.cadc.auth.NumericPrincipal; import org.junit.Test; import javax.security.auth.x500.X500Principal; import javax.servlet.http.HttpServletResponse; import java.io.PrintWriter; import java.io.StringWriter; import java.io.Writer; import java.security.Principal; import java.util.HashSet; import java.util.Set; import static org.easymock.EasyMock.*; import static org.junit.Assert.assertEquals; public class GetUserActionTest { @Test // @Test public void writeUserXML() throws Exception { final SyncOutput mockSyncOut = Loading @@ -94,7 +101,7 @@ public class GetUserActionTest createMock(UserPersistence.class); final HttpPrincipal userID = new HttpPrincipal("CADCtest"); final GetUserAction testSubject = new GetUserAction(userID) final GetUserAction testSubject = new GetUserAction(userID, null) { @Override UserPersistence<HttpPrincipal> getUserPersistence() Loading Loading @@ -126,6 +133,61 @@ public class GetUserActionTest } @Test public void writeUserWithDetailIdentity() throws Exception { final HttpServletResponse mockResponse = createMock(HttpServletResponse.class); final UserPersistence<HttpPrincipal> mockUserPersistence = createMock(UserPersistence.class); final HttpPrincipal userID = new HttpPrincipal("CADCtest"); final GetUserAction testSubject = new GetUserAction(userID, "identity") { @Override UserPersistence<HttpPrincipal> getUserPersistence() { return mockUserPersistence; } }; final User<HttpPrincipal> expected = new User<HttpPrincipal>(userID); expected.getIdentities().add(new NumericPrincipal(789)); expected.getIdentities().add(new X500Principal("cn=foo,o=bar")); StringBuilder sb = new StringBuilder(); UserWriter userWriter = new UserWriter(); userWriter.write(expected, sb); String expectedUser = sb.toString(); final PersonalDetails personalDetails = new PersonalDetails("cadc", "test"); personalDetails.city = "city"; expected.details.add(personalDetails); final PosixDetails posixDetails = new PosixDetails(123L, 456L, "/dev/null"); expected.details.add(posixDetails); final Writer writer = new StringWriter(); final PrintWriter printWriter = new PrintWriter(writer); expect(mockUserPersistence.getUser(userID)).andReturn(expected).once(); mockResponse.setHeader("Content-Type", "text/xml"); expectLastCall().once(); expect(mockResponse.getWriter()).andReturn(printWriter).once(); replay(mockUserPersistence, mockResponse); SyncOutput syncOutput = new SyncOutput(mockResponse); testSubject.setSyncOut(syncOutput); testSubject.doAction(); sb = new StringBuilder(); userWriter.write(expected, sb); String actualUser = sb.toString(); assertEquals(expectedUser, actualUser); verify(mockUserPersistence, mockResponse); } // @Test public void writeUserJSON() throws Exception { final SyncOutput mockSyncOut = Loading @@ -134,7 +196,7 @@ public class GetUserActionTest createMock(UserPersistence.class); final HttpPrincipal userID = new HttpPrincipal("CADCtest"); final GetUserAction testSubject = new GetUserAction(userID) final GetUserAction testSubject = new GetUserAction(userID, null) { @Override UserPersistence<HttpPrincipal> getUserPersistence() Loading