Loading projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/CreateGroupAction.java +6 −8 Original line number Diff line number Diff line Loading @@ -68,17 +68,15 @@ */ package ca.nrc.cadc.ac.server.web; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import ca.nrc.cadc.ac.Group; import ca.nrc.cadc.ac.GroupReader; import ca.nrc.cadc.ac.GroupWriter; import ca.nrc.cadc.ac.User; import ca.nrc.cadc.ac.server.GroupPersistence; import java.io.InputStream; import java.security.Principal; import java.util.ArrayList; import java.util.List; import java.util.Set; import javax.servlet.http.HttpServletResponse; public class CreateGroupAction extends GroupsAction { Loading @@ -96,8 +94,8 @@ public class CreateGroupAction extends GroupsAction GroupPersistence groupPersistence = getGroupPersistence(); Group group = GroupReader.read(this.inputStream); Group newGroup = groupPersistence.addGroup(group); setContentType("application/xml"); GroupWriter.write(newGroup, getOutputStream()); this.response.setContentType("application/xml"); GroupWriter.write(newGroup, this.response.getOutputStream()); List<String> addedMembers = null; if ((newGroup.getUserMembers().size() > 0) || (newGroup.getGroupMembers().size() > 0)) Loading projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/GetGroupAction.java +2 −3 Original line number Diff line number Diff line Loading @@ -70,7 +70,6 @@ import ca.nrc.cadc.ac.Group; import ca.nrc.cadc.ac.GroupWriter; import ca.nrc.cadc.ac.server.GroupPersistence; import javax.servlet.http.HttpServletResponse; public class GetGroupAction extends GroupsAction { Loading @@ -87,8 +86,8 @@ public class GetGroupAction extends GroupsAction { GroupPersistence groupPersistence = getGroupPersistence(); Group group = groupPersistence.getGroup(this.groupName); setContentType("application/xml"); GroupWriter.write(group, getOutputStream()); this.response.setContentType("application/xml"); GroupWriter.write(group, this.response.getOutputStream()); return null; } Loading projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/GetGroupNamesAction.java +19 −13 Original line number Diff line number Diff line Loading @@ -65,21 +65,22 @@ * $Revision: 4 $ * ************************************************************************ */package ca.nrc.cadc.ac.server.web; */ package ca.nrc.cadc.ac.server.web; import java.io.OutputStreamWriter; import java.io.Writer; import java.util.Collection; import ca.nrc.cadc.ac.server.GroupPersistence; import com.csvreader.CsvWriter; import org.apache.log4j.Logger; import javax.servlet.http.HttpServletResponse; import ca.nrc.cadc.ac.server.GroupPersistence; public class GetGroupNamesAction extends GroupsAction { private static final Logger log = Logger.getLogger(GetGroupNamesAction.class); GetGroupNamesAction(GroupLogInfo logInfo) { super(logInfo); Loading @@ -90,16 +91,21 @@ public class GetGroupNamesAction extends GroupsAction { GroupPersistence groupPersistence = getGroupPersistence(); Collection<String> groups = groupPersistence.getGroupNames(); setContentType("text/csv"); final Writer writer = new OutputStreamWriter(getOutputStream()); final CsvWriter csvWriter = new CsvWriter(writer, ','); log.debug("Found " + groups.size() + " group names"); response.setContentType("text/plain"); log.debug("Set content-type to text/plain"); Writer writer = response.getWriter(); boolean start = true; for (final String group : groups) { csvWriter.write(group); if (!start) { writer.write("\r\n"); } csvWriter.endRecord(); writer.write(group); start = false; } return null; } } projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/GroupsAction.java +40 −81 Original line number Diff line number Diff line Loading @@ -69,7 +69,6 @@ package ca.nrc.cadc.ac.server.web; import java.io.IOException; import java.io.OutputStream; import java.security.AccessControlException; import java.security.Principal; import java.security.PrivilegedActionException; Loading @@ -90,108 +89,99 @@ import ca.nrc.cadc.ac.server.GroupPersistence; import ca.nrc.cadc.ac.server.PluginFactory; import ca.nrc.cadc.ac.server.UserPersistence; import ca.nrc.cadc.net.TransientException; import ca.nrc.cadc.uws.server.SyncOutput; public abstract class GroupsAction implements PrivilegedExceptionAction<Object> { private static final Logger log = Logger.getLogger(GroupsAction.class); protected GroupLogInfo logInfo; private SyncOutput syncOutput; protected HttpServletResponse response; GroupsAction(GroupLogInfo logInfo) { this.logInfo = logInfo; } public void doAction(Subject subject, final HttpServletResponse response) public void doAction(Subject subject, HttpServletResponse response) throws IOException { syncOutput = new SyncOutput() try { @Override public void setResponseCode(int code) try { response.setStatus(code); } this.response = response; @Override public void setHeader(String key, String value) if (subject == null) { response.setHeader(key, value); run(); } @Override public OutputStream getOutputStream() throws IOException else { return response.getOutputStream(); Subject.doAs(subject, this); } }; try } catch (PrivilegedActionException e) { if (subject == null) Throwable cause = e.getCause(); if (cause != null) { run(); throw cause; } else { runPrivileged(subject); throw e; } } catch (AccessControlException e) { log.debug("Permission denied", e); log.debug(e); String message = "Permission Denied"; this.logInfo.setMessage(message); sendError(403, message); } catch (IllegalArgumentException e) { log.debug("Illegal argument", e); log.debug(e); String message = e.getMessage(); this.logInfo.setMessage(message); sendError(400, message); } catch (MemberNotFoundException e) { log.debug("Member Not Found", e); log.debug(e); String message = "Member not found: " + e.getMessage(); this.logInfo.setMessage(message); sendError(404, message); } catch (GroupNotFoundException e) { log.debug("Group not found", e); log.debug(e); String message = "Group not found: " + e.getMessage(); this.logInfo.setMessage(message); sendError(404, message); } catch (UserNotFoundException e) { log.debug("User Not Found", e); log.debug(e); String message = "User not found: " + e.getMessage(); this.logInfo.setMessage(message); sendError(404, message); } catch (MemberAlreadyExistsException e) { log.debug("Member Already Exists", e); log.debug(e); String message = "Member already exists: " + e.getMessage(); this.logInfo.setMessage(message); sendError(409, message); } catch (GroupAlreadyExistsException e) { log.debug("Group Already Exists", e); log.debug(e); String message = "Group already exists: " + e.getMessage(); this.logInfo.setMessage(message); sendError(409, message); } catch (UnsupportedOperationException e) { log.debug("Unsupported Operation", e); log.debug(e); this.logInfo.setMessage("Not yet implemented."); sendError(501); } Loading @@ -213,58 +203,27 @@ public abstract class GroupsAction } } private void runPrivileged(final Subject subject) throws Throwable { try { Subject.doAs(subject, this); } catch (PrivilegedActionException e) { final Throwable cause = e.getCause(); if (cause != null) { throw cause; } throw e; } } protected final void setStatusCode(final int statusCode) { syncOutput.setResponseCode(statusCode); } protected final OutputStream getOutputStream() throws IOException { return syncOutput.getOutputStream(); } protected final void setContentType(final String contentType) { syncOutput.setHeader("Content-Type", contentType); } protected final void setRedirectLocation(final String location) { syncOutput.setHeader("Location", location); } private void sendError(int responseCode) throws IOException { sendError(responseCode, null); } private void sendError(final int code, String message) private void sendError(int responseCode, String message) throws IOException { setContentType("text/plain"); setStatusCode(code); if (!this.response.isCommitted()) { this.response.setContentType("text/plain"); if (message != null) { getOutputStream().write(message.getBytes()); this.response.getWriter().write(message); } this.response.setStatus(responseCode); } else { log.warn("Could not send error " + responseCode + " (" + message + ") because the response is already committed."); } } Loading projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/GroupsActionFactory.java +1 −0 Original line number Diff line number Diff line Loading @@ -185,6 +185,7 @@ public class GroupsActionFactory if (action != null) { log.debug("Returning action: " + action.getClass()); return action; } throw new IllegalArgumentException("Bad groups request: " + method + " on " + path); Loading Loading
projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/CreateGroupAction.java +6 −8 Original line number Diff line number Diff line Loading @@ -68,17 +68,15 @@ */ package ca.nrc.cadc.ac.server.web; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import ca.nrc.cadc.ac.Group; import ca.nrc.cadc.ac.GroupReader; import ca.nrc.cadc.ac.GroupWriter; import ca.nrc.cadc.ac.User; import ca.nrc.cadc.ac.server.GroupPersistence; import java.io.InputStream; import java.security.Principal; import java.util.ArrayList; import java.util.List; import java.util.Set; import javax.servlet.http.HttpServletResponse; public class CreateGroupAction extends GroupsAction { Loading @@ -96,8 +94,8 @@ public class CreateGroupAction extends GroupsAction GroupPersistence groupPersistence = getGroupPersistence(); Group group = GroupReader.read(this.inputStream); Group newGroup = groupPersistence.addGroup(group); setContentType("application/xml"); GroupWriter.write(newGroup, getOutputStream()); this.response.setContentType("application/xml"); GroupWriter.write(newGroup, this.response.getOutputStream()); List<String> addedMembers = null; if ((newGroup.getUserMembers().size() > 0) || (newGroup.getGroupMembers().size() > 0)) Loading
projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/GetGroupAction.java +2 −3 Original line number Diff line number Diff line Loading @@ -70,7 +70,6 @@ import ca.nrc.cadc.ac.Group; import ca.nrc.cadc.ac.GroupWriter; import ca.nrc.cadc.ac.server.GroupPersistence; import javax.servlet.http.HttpServletResponse; public class GetGroupAction extends GroupsAction { Loading @@ -87,8 +86,8 @@ public class GetGroupAction extends GroupsAction { GroupPersistence groupPersistence = getGroupPersistence(); Group group = groupPersistence.getGroup(this.groupName); setContentType("application/xml"); GroupWriter.write(group, getOutputStream()); this.response.setContentType("application/xml"); GroupWriter.write(group, this.response.getOutputStream()); return null; } Loading
projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/GetGroupNamesAction.java +19 −13 Original line number Diff line number Diff line Loading @@ -65,21 +65,22 @@ * $Revision: 4 $ * ************************************************************************ */package ca.nrc.cadc.ac.server.web; */ package ca.nrc.cadc.ac.server.web; import java.io.OutputStreamWriter; import java.io.Writer; import java.util.Collection; import ca.nrc.cadc.ac.server.GroupPersistence; import com.csvreader.CsvWriter; import org.apache.log4j.Logger; import javax.servlet.http.HttpServletResponse; import ca.nrc.cadc.ac.server.GroupPersistence; public class GetGroupNamesAction extends GroupsAction { private static final Logger log = Logger.getLogger(GetGroupNamesAction.class); GetGroupNamesAction(GroupLogInfo logInfo) { super(logInfo); Loading @@ -90,16 +91,21 @@ public class GetGroupNamesAction extends GroupsAction { GroupPersistence groupPersistence = getGroupPersistence(); Collection<String> groups = groupPersistence.getGroupNames(); setContentType("text/csv"); final Writer writer = new OutputStreamWriter(getOutputStream()); final CsvWriter csvWriter = new CsvWriter(writer, ','); log.debug("Found " + groups.size() + " group names"); response.setContentType("text/plain"); log.debug("Set content-type to text/plain"); Writer writer = response.getWriter(); boolean start = true; for (final String group : groups) { csvWriter.write(group); if (!start) { writer.write("\r\n"); } csvWriter.endRecord(); writer.write(group); start = false; } return null; } }
projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/GroupsAction.java +40 −81 Original line number Diff line number Diff line Loading @@ -69,7 +69,6 @@ package ca.nrc.cadc.ac.server.web; import java.io.IOException; import java.io.OutputStream; import java.security.AccessControlException; import java.security.Principal; import java.security.PrivilegedActionException; Loading @@ -90,108 +89,99 @@ import ca.nrc.cadc.ac.server.GroupPersistence; import ca.nrc.cadc.ac.server.PluginFactory; import ca.nrc.cadc.ac.server.UserPersistence; import ca.nrc.cadc.net.TransientException; import ca.nrc.cadc.uws.server.SyncOutput; public abstract class GroupsAction implements PrivilegedExceptionAction<Object> { private static final Logger log = Logger.getLogger(GroupsAction.class); protected GroupLogInfo logInfo; private SyncOutput syncOutput; protected HttpServletResponse response; GroupsAction(GroupLogInfo logInfo) { this.logInfo = logInfo; } public void doAction(Subject subject, final HttpServletResponse response) public void doAction(Subject subject, HttpServletResponse response) throws IOException { syncOutput = new SyncOutput() try { @Override public void setResponseCode(int code) try { response.setStatus(code); } this.response = response; @Override public void setHeader(String key, String value) if (subject == null) { response.setHeader(key, value); run(); } @Override public OutputStream getOutputStream() throws IOException else { return response.getOutputStream(); Subject.doAs(subject, this); } }; try } catch (PrivilegedActionException e) { if (subject == null) Throwable cause = e.getCause(); if (cause != null) { run(); throw cause; } else { runPrivileged(subject); throw e; } } catch (AccessControlException e) { log.debug("Permission denied", e); log.debug(e); String message = "Permission Denied"; this.logInfo.setMessage(message); sendError(403, message); } catch (IllegalArgumentException e) { log.debug("Illegal argument", e); log.debug(e); String message = e.getMessage(); this.logInfo.setMessage(message); sendError(400, message); } catch (MemberNotFoundException e) { log.debug("Member Not Found", e); log.debug(e); String message = "Member not found: " + e.getMessage(); this.logInfo.setMessage(message); sendError(404, message); } catch (GroupNotFoundException e) { log.debug("Group not found", e); log.debug(e); String message = "Group not found: " + e.getMessage(); this.logInfo.setMessage(message); sendError(404, message); } catch (UserNotFoundException e) { log.debug("User Not Found", e); log.debug(e); String message = "User not found: " + e.getMessage(); this.logInfo.setMessage(message); sendError(404, message); } catch (MemberAlreadyExistsException e) { log.debug("Member Already Exists", e); log.debug(e); String message = "Member already exists: " + e.getMessage(); this.logInfo.setMessage(message); sendError(409, message); } catch (GroupAlreadyExistsException e) { log.debug("Group Already Exists", e); log.debug(e); String message = "Group already exists: " + e.getMessage(); this.logInfo.setMessage(message); sendError(409, message); } catch (UnsupportedOperationException e) { log.debug("Unsupported Operation", e); log.debug(e); this.logInfo.setMessage("Not yet implemented."); sendError(501); } Loading @@ -213,58 +203,27 @@ public abstract class GroupsAction } } private void runPrivileged(final Subject subject) throws Throwable { try { Subject.doAs(subject, this); } catch (PrivilegedActionException e) { final Throwable cause = e.getCause(); if (cause != null) { throw cause; } throw e; } } protected final void setStatusCode(final int statusCode) { syncOutput.setResponseCode(statusCode); } protected final OutputStream getOutputStream() throws IOException { return syncOutput.getOutputStream(); } protected final void setContentType(final String contentType) { syncOutput.setHeader("Content-Type", contentType); } protected final void setRedirectLocation(final String location) { syncOutput.setHeader("Location", location); } private void sendError(int responseCode) throws IOException { sendError(responseCode, null); } private void sendError(final int code, String message) private void sendError(int responseCode, String message) throws IOException { setContentType("text/plain"); setStatusCode(code); if (!this.response.isCommitted()) { this.response.setContentType("text/plain"); if (message != null) { getOutputStream().write(message.getBytes()); this.response.getWriter().write(message); } this.response.setStatus(responseCode); } else { log.warn("Could not send error " + responseCode + " (" + message + ") because the response is already committed."); } } Loading
projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/GroupsActionFactory.java +1 −0 Original line number Diff line number Diff line Loading @@ -185,6 +185,7 @@ public class GroupsActionFactory if (action != null) { log.debug("Returning action: " + action.getClass()); return action; } throw new IllegalArgumentException("Bad groups request: " + method + " on " + path); Loading