diff --git a/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/CreateGroupAction.java b/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/CreateGroupAction.java index 10f4012b1c3ab9a146af9793aa64d3c846a0e67f..32661345fc85f1042784a01421c27da98d4b9c48 100755 --- a/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/CreateGroupAction.java +++ b/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/CreateGroupAction.java @@ -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 { @@ -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)) diff --git a/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/GetGroupAction.java b/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/GetGroupAction.java index d3f758f257aa1d2ed3d85ca741c01cdaf3d8eebc..e72003567a83a2723ee6ce15376d5a5beee22027 100755 --- a/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/GetGroupAction.java +++ b/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/GetGroupAction.java @@ -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 { @@ -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; } 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 index 0ca3c2dde196b9daf914d5b18f77753e4db124d7..a29e5fcf29a37ebf66ded5fd96cff4edbe77f26c 100644 --- 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 @@ -65,20 +65,21 @@ * $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) { @@ -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"); + } + writer.write(group); + start = false; } - csvWriter.endRecord(); + return null; } } diff --git a/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/GroupsAction.java b/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/GroupsAction.java index 40b01cc12243c3d0909dfe7e933a1b1946b25d97..02f64926a9982e7ae88b89bed6c054087cb473a9 100755 --- a/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/GroupsAction.java +++ b/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/GroupsAction.java @@ -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; @@ -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() - { - @Override - public void setResponseCode(int code) - { - response.setStatus(code); - } - - @Override - public void setHeader(String key, String value) - { - response.setHeader(key, value); - } - - @Override - public OutputStream getOutputStream() throws IOException - { - return response.getOutputStream(); - } - }; - try { - if (subject == null) + try { - run(); + this.response = response; + + if (subject == null) + { + run(); + } + else + { + Subject.doAs(subject, this); + } } - else + catch (PrivilegedActionException e) { - runPrivileged(subject); + Throwable cause = e.getCause(); + if (cause != null) + { + throw cause; + } + 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); } @@ -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 (message != null) + if (!this.response.isCommitted()) + { + this.response.setContentType("text/plain"); + if (message != null) + { + this.response.getWriter().write(message); + } + this.response.setStatus(responseCode); + } + else { - getOutputStream().write(message.getBytes()); + log.warn("Could not send error " + responseCode + " (" + message + ") because the response is already committed."); } } diff --git a/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/GroupsActionFactory.java b/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/GroupsActionFactory.java index 0f978accbf65d3ce48a76c5e2f03553dca81f14e..83ecc9d1f7a0caae37d88e1b53d7c7183e1079e5 100755 --- a/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/GroupsActionFactory.java +++ b/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/GroupsActionFactory.java @@ -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); diff --git a/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/ModifyGroupAction.java b/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/ModifyGroupAction.java index 1375832db2b535f1a219e66083c1e3447051e91e..c7a03ca5688c0d2c697ff24296428310767edc29 100755 --- a/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/ModifyGroupAction.java +++ b/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/ModifyGroupAction.java @@ -68,17 +68,14 @@ */ 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 ModifyGroupAction extends GroupsAction { @@ -137,8 +134,7 @@ public class ModifyGroupAction extends GroupsAction } logGroupInfo(group.getID(), deletedMembers, addedMembers); - setStatusCode(303); - setRedirectLocation(request); + this.response.sendRedirect(request); return null; } diff --git a/projects/cadcAccessControl/src/ca/nrc/cadc/ac/client/GMSClient.java b/projects/cadcAccessControl/src/ca/nrc/cadc/ac/client/GMSClient.java index 425b25f4bd0227f7de0775315b07636ec847a75d..7609ee7326133d0d2975059fdd7666c0e3435f0c 100755 --- a/projects/cadcAccessControl/src/ca/nrc/cadc/ac/client/GMSClient.java +++ b/projects/cadcAccessControl/src/ca/nrc/cadc/ac/client/GMSClient.java @@ -68,15 +68,16 @@ */ package ca.nrc.cadc.ac.client; +import java.io.BufferedReader; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; +import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import java.net.URLEncoder; -import java.nio.charset.Charset; import java.security.AccessControlContext; import java.security.AccessControlException; import java.security.AccessController; @@ -110,8 +111,6 @@ import ca.nrc.cadc.net.HttpUpload; import ca.nrc.cadc.net.InputStreamWrapper; import ca.nrc.cadc.net.NetUtil; -import com.csvreader.CsvReader; - /** * Client class for performing group searching and group actions @@ -319,15 +318,11 @@ public class GMSClient { try { - final CsvReader reader = - new CsvReader(inputStream, ',', - Charset.forName("UTF-8")); - if (reader.readRecord()) - { - for (int i = 0; i < reader.getColumnCount(); i++) - { - groupNames.add(reader.get(i)); - } + InputStreamReader inReader = new InputStreamReader(inputStream); + BufferedReader reader = new BufferedReader(inReader); + String line; + while ((line = reader.readLine()) != null) { + groupNames.add(line); } } catch (Exception bug) @@ -363,8 +358,8 @@ public class GMSClient throw new IOException("HttpResponse (" + responseCode + ") - " + errMessage); } - log.error("Content-Length: " + httpDownload.getContentLength()); - log.error("Content-Type: " + httpDownload.getContentType()); + log.debug("Content-Length: " + httpDownload.getContentLength()); + log.debug("Content-Type: " + httpDownload.getContentType()); return groupNames; }