Loading projects/cadcAccessControl-Server/build.xml +1 −1 Original line number Diff line number Diff line Loading @@ -69,7 +69,7 @@ <!DOCTYPE project> <project default="build" basedir="."> <project name="cadcAccessControl-Server" default="build" basedir="."> <property environment="env"/> <property file="local.build.properties" /> Loading projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/CreateGroupAction.java +2 −2 Original line number Diff line number Diff line Loading @@ -96,8 +96,8 @@ public class CreateGroupAction extends GroupsAction GroupPersistence groupPersistence = getGroupPersistence(); Group group = GroupReader.read(this.inputStream); Group newGroup = groupPersistence.addGroup(group); this.response.setContentType("application/xml"); GroupWriter.write(newGroup, this.response.getOutputStream()); setContentType("application/xml"); GroupWriter.write(newGroup, 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 −2 Original line number Diff line number Diff line Loading @@ -87,8 +87,8 @@ public class GetGroupAction extends GroupsAction { GroupPersistence groupPersistence = getGroupPersistence(); Group group = groupPersistence.getGroup(this.groupName); this.response.setContentType("application/xml"); GroupWriter.write(group, this.response.getOutputStream()); setContentType("application/xml"); GroupWriter.write(group, getOutputStream()); return null; } Loading projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/GetGroupNamesAction.java +10 −13 Original line number Diff line number Diff line Loading @@ -67,6 +67,8 @@ ************************************************************************ */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; Loading @@ -88,21 +90,16 @@ public class GetGroupNamesAction extends GroupsAction { GroupPersistence groupPersistence = getGroupPersistence(); Collection<String> groups = groupPersistence.getGroupNames(); getHttpServletResponse().setContentType("text/csv"); setContentType("text/csv"); CsvWriter writer = new CsvWriter(getHttpServletResponse().getWriter(), ','); final Writer writer = new OutputStreamWriter(getOutputStream()); final CsvWriter csvWriter = new CsvWriter(writer, ','); for (String group : groups) for (final String group : groups) { writer.write(group); csvWriter.write(group); } writer.endRecord(); csvWriter.endRecord(); return null; } protected HttpServletResponse getHttpServletResponse() { return this.response; } } projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/GroupsAction.java +74 −32 Original line number Diff line number Diff line Loading @@ -69,6 +69,7 @@ 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 @@ -76,6 +77,7 @@ import java.security.PrivilegedExceptionAction; import java.util.List; import javax.security.auth.Subject; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletResponse; import org.apache.log4j.Logger; Loading @@ -89,45 +91,54 @@ 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; protected HttpServletResponse response; private SyncOutput syncOutput; GroupsAction(GroupLogInfo logInfo) { this.logInfo = logInfo; } public void doAction(Subject subject, HttpServletResponse response) public void doAction(Subject subject, final HttpServletResponse response) throws IOException { try syncOutput = new SyncOutput() { try @Override public void setResponseCode(int code) { this.response = response; response.setStatus(code); } if (subject == null) @Override public void setHeader(String key, String value) { run(); response.setHeader(key, value); } else @Override public OutputStream getOutputStream() throws IOException { Subject.doAs(subject, this); return response.getOutputStream(); } } catch (PrivilegedActionException e) }; try { Throwable cause = e.getCause(); if (cause != null) if (subject == null) { throw cause; run(); } throw e; else { runPrivileged(subject); } } catch (AccessControlException e) Loading Loading @@ -203,27 +214,58 @@ 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(int responseCode, String message) private void sendError(final int code, String message) throws IOException { if (!this.response.isCommitted()) { this.response.setContentType("text/plain"); setContentType("text/plain"); setStatusCode(code); if (message != null) { this.response.getWriter().write(message); } this.response.setStatus(responseCode); } else { log.warn("Could not send error " + responseCode + " (" + message + ") because the response is already committed."); getOutputStream().write(message.getBytes()); } } Loading Loading
projects/cadcAccessControl-Server/build.xml +1 −1 Original line number Diff line number Diff line Loading @@ -69,7 +69,7 @@ <!DOCTYPE project> <project default="build" basedir="."> <project name="cadcAccessControl-Server" default="build" basedir="."> <property environment="env"/> <property file="local.build.properties" /> Loading
projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/CreateGroupAction.java +2 −2 Original line number Diff line number Diff line Loading @@ -96,8 +96,8 @@ public class CreateGroupAction extends GroupsAction GroupPersistence groupPersistence = getGroupPersistence(); Group group = GroupReader.read(this.inputStream); Group newGroup = groupPersistence.addGroup(group); this.response.setContentType("application/xml"); GroupWriter.write(newGroup, this.response.getOutputStream()); setContentType("application/xml"); GroupWriter.write(newGroup, 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 −2 Original line number Diff line number Diff line Loading @@ -87,8 +87,8 @@ public class GetGroupAction extends GroupsAction { GroupPersistence groupPersistence = getGroupPersistence(); Group group = groupPersistence.getGroup(this.groupName); this.response.setContentType("application/xml"); GroupWriter.write(group, this.response.getOutputStream()); setContentType("application/xml"); GroupWriter.write(group, getOutputStream()); return null; } Loading
projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/GetGroupNamesAction.java +10 −13 Original line number Diff line number Diff line Loading @@ -67,6 +67,8 @@ ************************************************************************ */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; Loading @@ -88,21 +90,16 @@ public class GetGroupNamesAction extends GroupsAction { GroupPersistence groupPersistence = getGroupPersistence(); Collection<String> groups = groupPersistence.getGroupNames(); getHttpServletResponse().setContentType("text/csv"); setContentType("text/csv"); CsvWriter writer = new CsvWriter(getHttpServletResponse().getWriter(), ','); final Writer writer = new OutputStreamWriter(getOutputStream()); final CsvWriter csvWriter = new CsvWriter(writer, ','); for (String group : groups) for (final String group : groups) { writer.write(group); csvWriter.write(group); } writer.endRecord(); csvWriter.endRecord(); return null; } protected HttpServletResponse getHttpServletResponse() { return this.response; } }
projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/GroupsAction.java +74 −32 Original line number Diff line number Diff line Loading @@ -69,6 +69,7 @@ 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 @@ -76,6 +77,7 @@ import java.security.PrivilegedExceptionAction; import java.util.List; import javax.security.auth.Subject; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletResponse; import org.apache.log4j.Logger; Loading @@ -89,45 +91,54 @@ 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; protected HttpServletResponse response; private SyncOutput syncOutput; GroupsAction(GroupLogInfo logInfo) { this.logInfo = logInfo; } public void doAction(Subject subject, HttpServletResponse response) public void doAction(Subject subject, final HttpServletResponse response) throws IOException { try syncOutput = new SyncOutput() { try @Override public void setResponseCode(int code) { this.response = response; response.setStatus(code); } if (subject == null) @Override public void setHeader(String key, String value) { run(); response.setHeader(key, value); } else @Override public OutputStream getOutputStream() throws IOException { Subject.doAs(subject, this); return response.getOutputStream(); } } catch (PrivilegedActionException e) }; try { Throwable cause = e.getCause(); if (cause != null) if (subject == null) { throw cause; run(); } throw e; else { runPrivileged(subject); } } catch (AccessControlException e) Loading Loading @@ -203,27 +214,58 @@ 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(int responseCode, String message) private void sendError(final int code, String message) throws IOException { if (!this.response.isCommitted()) { this.response.setContentType("text/plain"); setContentType("text/plain"); setStatusCode(code); if (message != null) { this.response.getWriter().write(message); } this.response.setStatus(responseCode); } else { log.warn("Could not send error " + responseCode + " (" + message + ") because the response is already committed."); getOutputStream().write(message.getBytes()); } } Loading