Skip to content
Snippets Groups Projects
Commit 1fbebeb5 authored by Jeff Burke's avatar Jeff Burke
Browse files

s1657: support for detail parameter getting a user.

parent 57295495
No related branches found
No related tags found
No related merge requests found
......@@ -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>
......
......@@ -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;
......@@ -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;
......@@ -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
......@@ -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)
{
......@@ -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);
......
......@@ -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)
......
......@@ -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 =
......@@ -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()
......@@ -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 =
......@@ -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()
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment