package org.dspace.app.xmlui.cocoon; import java.io.IOException; import java.io.InputStream; import java.io.StringBufferInputStream; import java.util.Map; import org.apache.avalon.excalibur.pool.Recyclable; import org.apache.avalon.framework.parameters.ParameterException; import org.apache.avalon.framework.parameters.Parameters; import org.apache.cocoon.ProcessingException; import org.apache.cocoon.environment.ObjectModelHelper; import org.apache.cocoon.environment.Request; import org.apache.cocoon.environment.Response; import org.apache.cocoon.environment.SourceResolver; import org.apache.cocoon.reading.AbstractReader; import org.apache.log4j.Logger; import org.dspace.core.ConfigurationManager; import org.dspace.core.Utils; import org.xml.sax.SAXException; public class EdiauthRedirectReader extends AbstractReader implements Recyclable { private static Logger log = Logger.getLogger(EdiauthRedirectReader.class); /** The Cocoon response */ protected Response response; /** The Cocoon request */ protected Request request; /** The redirect's mime-type */ protected String redirectMimeType = "text/plain"; /** The user's session id */ protected String session_id = null; /** The url of the dspace install */ private String dspaceUrl; private String redirect_url; /** * Set up the bitstream reader. * * See the class description for information on configuration options. */ public void setup(SourceResolver resolver, Map objectModel, String src, Parameters par) throws ProcessingException, SAXException, IOException { super.setup(resolver, objectModel, src, par); this.request = ObjectModelHelper.getRequest(objectModel); this.response = ObjectModelHelper.getResponse(objectModel); this.dspaceUrl = ConfigurationManager.getProperty("proxy.url"); // Get our parameter that identifies type of sitemap (default to HTML sitemap) try { this.session_id = par.getParameter("sid"); log.info("Session id present: " + session_id); this.redirect_url = dspaceUrl + "/ediauth-login?sid=" + session_id; } catch (ParameterException e) { log.info("No session id set"); this.redirect_url = ""; } } /** * Generate the output. */ public void generate() throws IOException, SAXException, ProcessingException { log.info("Write out the redirect url for Ediauth server"); this.response.setContentType("text/plain"); this.response.setHeader("Content-Length", String.valueOf(redirect_url.length())); InputStream is = new StringBufferInputStream(redirect_url); Utils.bufferedCopy(is, this.out); is.close(); this.out.flush(); } /** * Recycle */ public void recycle() { this.response = null; this.request = null; this.session_id = null; this.dspaceUrl = null; } }