/**
* Copyright (c) 2006 by Know-Center, Graz, Austria
*
* This software is the confidential and proprietary information of Know-Center,
* Graz, Austria. You shall not disclose such Confidential Information and shall
* use it only in accordance with the terms of the license agreement you entered
* into with Know-Center.
*
* KNOW-CENTER MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF
* THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
* IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR
* NON-INFRINGEMENT. KNOW-CENTER SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY
* LICENSEE AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS
* DERIVATIVES.
*
* $Id: LocalRequestHelper.java,v 1.6 2006/10/31 08:22:04 wprinz Exp $
*/
package at.knowcenter.wag.egov.egiz.web;
import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import at.knowcenter.wag.egov.egiz.exceptions.ConnectorFactoryException;
import at.knowcenter.wag.egov.egiz.exceptions.NormalizeException;
import at.knowcenter.wag.egov.egiz.exceptions.PresentableException;
import at.knowcenter.wag.egov.egiz.exceptions.SignatureException;
import at.knowcenter.wag.egov.egiz.pdf.SignatureHolder;
import at.knowcenter.wag.egov.egiz.sig.ConnectorFactory;
import at.knowcenter.wag.egov.egiz.sig.LocalConnector;
/**
* Contains commonly used helper functions for the local request procedure.
*
* @author wprinz
*/
public abstract class LocalRequestHelper
{
/**
* The resource of the local connection page jsp.
*/
public static final String LOCAL_CONNECTION_PAGE_JSP = "/jsp/local_connection_page.jsp";
/**
* The resource of the redirect refresh page jsp.
*/
public static final String REDIRECT_REFRESH_PAGE_JSP = "/jsp/redirect_refresh_page.jsp";
/**
* Sets up the local sign procedure.
*
* @param response
* The HttpServletResponse the local request page is written to.
* @throws IOException
* Forwarded exception.
* @throws PresentableException
* Forwarded exception.
*/
public static void processLocalSign(SessionInformation si,
HttpServletRequest request, HttpServletResponse response) throws IOException, PresentableException
{
LocalConnector local_conn = (LocalConnector) ConnectorFactory.createConnector(si.connector);
String document_text = si.iui.document_text;
String request_string = local_conn.prepareSignRequest(si.user_name, document_text, si.type);
String request_url = local_conn.getSignURL(si.type);
LocalRequest local_request = new LocalRequest(request_url, request_string);
List local_requests = new ArrayList();
local_requests.add(local_request);
// ByteArrayOutputStream baos = new ByteArrayOutputStream();
// ObjectOutputStream oos = new ObjectOutputStream(baos);
// oos.writeObject(local_requests);
// oos.close();
// baos.close();
si.requests = new LocalRequest[1];
si.requests[0] = new LocalRequest(local_conn.getSignURL(si.type), request_string);
si.current_operation = 0;
si.response_properties = new Properties[1];
si.response_properties[0] = null;
// SessionTable.put(si);
request.getSession().setAttribute(SessionAttributes.ATTRIBUTE_SESSION_INFORMATION, si);
// byte [] requests_bytes = baos.toByteArray();
// String base64 = CodingHelper.encodeBase64(requests_bytes);
LocalRequestHelper.prepareDispatchToLocalConnectionPage(si.requests[0], request, response);
}
/**
* Sets up the local verify procedure.
*
* @param response
* The HttpServletResponse the local request page is written to.
* @throws SignatureException
* Forwarded exception.
* @throws NormalizeException
* Forwarded exception.
* @throws IOException
* Forwarded exception.
* @throws ConnectorFactoryException
* Forwarded exception.
*/
public static void processLocalVerify(SessionInformation si,
List holders_to_verify, HttpServletRequest request,
HttpServletResponse response) throws SignatureException, NormalizeException, IOException, ConnectorFactoryException
{
si.requests = new LocalRequest[holders_to_verify.size()];
si.response_properties = new Properties[si.requests.length];
si.current_operation = 0;
si.finished = false;
request.getSession().setAttribute(SessionAttributes.ATTRIBUTE_SESSION_INFORMATION, si);
// SessionTable.put(si);
LocalConnector local_conn = (LocalConnector) ConnectorFactory.createConnector(si.connector);
for (int i = 0; i < si.requests.length; i++)
{
SignatureHolder holder = (SignatureHolder) holders_to_verify.get(i);
String text_to_be_verified = holder.getSignedText();
// Normalizer normalizer = new Normalizer();
// String normalized = normalizer.normalize(holder.signed_text);
String request_string = local_conn.prepareVerifyRequest(text_to_be_verified, holder.getSignatureObject());
LocalRequest local_request = new LocalRequest(local_conn.getVerifyURL(holder.getSignatureObject().getSignationType()), request_string);
si.requests[i] = local_request;
si.response_properties[i] = null;
}
// ByteArrayOutputStream baos = new ByteArrayOutputStream();
// ObjectOutputStream oos = new ObjectOutputStream(baos);
// oos.writeObject(local_requests);
// oos.close();
// baos.close();
// byte [] requests_bytes = baos.toByteArray();
// String base64 = CodingHelper.encodeBase64(requests_bytes);
prepareDispatchToLocalConnectionPage(si.requests[0], request, response);
}
/**
* Formats the OK response from the web application back to the local BKU.
*
*
* As stated in the BKU tutorial, this response must be plain text "".
* Otherwise BKU will assume a failure.
*
*
* @param response
* The HttpServletResponse to answer to.
* @throws IOException
* Forwarded exception.
*/
protected static void formatBKUOkResponse(HttpServletResponse response) throws IOException
{
response.setContentType("text/plain");
response.setCharacterEncoding("ISO-8859-1");
response.getWriter().println("");
}
/**
* Prepares the dispatch to the local data connection page.
*
*
* The calling servlet just has to dispatch to the jsp after calling this
* method.
*
*
* @param local_request
* The local request. Basically this contains the local service's
* target URL and the XML request string.
* @param response
* The HttpServletResponse to write this page to.
* @throws IOException
* Forwarded exception.
* @throws SignatureException
* Forwarded exception.
* @throws NormalizeException
* Forwarded exception.
*/
public static void prepareDispatchToLocalConnectionPage(
LocalRequest local_request, HttpServletRequest request,
HttpServletResponse response) throws IOException, SignatureException, NormalizeException
{
response.setContentType("text/html");
response.setCharacterEncoding("UTF-8");
String local_request_url = local_request.getUrl();
String quoted_request = makeStringHTMLReady(local_request.getRequestString());
String host = request.getServerName(); // "129.27.153.77"
URL data_URL = new URL(request.getScheme(), host, request.getServerPort(), request.getContextPath() + "/AsynchronousDataResponder");
String data_url = response.encodeURL(data_URL.toString());
URL redirect_URL = new URL(request.getScheme(), host, request.getServerPort(), request.getContextPath() + "/AsynchronousRedirectResponder");
String redirect_url = response.encodeURL(redirect_URL.toString());
request.setAttribute("local_request_url", local_request_url);
request.setAttribute("quoted_request", quoted_request);
request.setAttribute("data_url", data_url);
request.setAttribute("redirect_url", redirect_url);
}
public static String makeStringHTMLReady(String input)
{
String output = input;
output = output.replaceAll("&", "&");
output = output.replaceAll("\"", """);
output = output.replaceAll("<", "<");
output = output.replaceAll(">", ">");
return output;
}
}