Commit e3cd6903 authored by Dustin Jenkins's avatar Dustin Jenkins
Browse files

Story 1711: Fixes.

parent cdbeff2d
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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" />

+2 −2
Original line number Diff line number Diff line
@@ -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))
+2 −2
Original line number Diff line number Diff line
@@ -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;
    }

+10 −13
Original line number Diff line number Diff line
@@ -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;
@@ -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;
    }

}
+74 −32
Original line number Diff line number Diff line
@@ -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;
@@ -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;
@@ -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)
@@ -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