/** * Copyright 2006 by Know-Center, Graz, Austria * PDF-AS has been contracted by the E-Government Innovation Center EGIZ, a * joint initiative of the Federal Chancellery Austria and Graz University of * Technology. * * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by * the European Commission - subsequent versions of the EUPL (the "Licence"); * You may not use this work except in compliance with the Licence. * You may obtain a copy of the Licence at: * http://www.osor.eu/eupl/ * * Unless required by applicable law or agreed to in writing, software * distributed under the Licence is distributed on an "AS IS" basis, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the Licence for the specific language governing permissions and * limitations under the Licence. * * This product combines work with different licenses. See the "NOTICE" text * file for details on the various modules and licenses. * The "NOTICE" text file is part of the distribution. Any derivative works * that you distribute must include a readable copy of the "NOTICE" text file. * * $Id: LocalRequestHelper.java,v 1.6 2006/10/31 08:22:04 wprinz Exp $ */ package at.gv.egiz.pdfas.web.helper; import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; import java.util.List; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import at.gv.egiz.pdfas.api.commons.Constants; import at.gv.egiz.pdfas.api.commons.SignatureInformation; import at.gv.egiz.pdfas.api.internal.PdfAsInternal; import at.gv.egiz.pdfas.web.CurrentLocalOperation; import at.gv.egiz.pdfas.web.LocalRequest; import at.gv.egiz.pdfas.web.session.SignSessionInformation; import at.gv.egiz.pdfas.web.session.VerifySessionInformation; import at.knowcenter.wag.egov.egiz.exceptions.ConnectorException; 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.SettingsException; import at.knowcenter.wag.egov.egiz.exceptions.SignatureException; /** * Contains commonly used helper functions for the local request procedure. * * @author wprinz */ public abstract class LocalRequestHelper { /** * The logger. */ protected static Log logger = LogFactory.getLog(LocalRequestHelper.class); /** * The resource of the null request page jsp. */ public static final String NULL_REQUEST_PAGE_JSP = "/jsp/null_request_page.jsp"; /** * 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 String processLocalSign(PdfAsInternal pdfAsInternal, SignSessionInformation si, HttpServletRequest request, HttpServletResponse response) throws IOException, PresentableException { String host = request.getServerName(); URL loc_ref_URL = new URL(WebUtils.buildRetrieveSignatureDataURL(request, response)); String loc_ref_url = response.encodeURL(loc_ref_URL.toString()); String sign_request = pdfAsInternal.prepareLocalSignRequest(si.signParameters, false, loc_ref_url, si.sdi); String local_request_url = pdfAsInternal.getLocalServiceAddress(si.type, si.connector); si.localRequest = new LocalRequest(local_request_url, sign_request); si.outputAvailable = false; URL data_URL = new URL(request.getScheme(), host, request.getServerPort(), WebUtils.addJSessionID(request.getContextPath() + "/DataURL", request)); String data_url = response.encodeURL(data_URL.toString()); logger.debug("data_url = " + data_url); request.setAttribute("local_request_url", local_request_url); request.setAttribute("data_url", data_url); return NULL_REQUEST_PAGE_JSP; } /** * Sets up the local verify procedure. * @param list * * @param response * The HttpServletResponse the local request page is written to. * @return Returns the JSP location where the calling servlet should dispatch * to. * @throws SignatureException * Forwarded exception. * @throws NormalizeException * Forwarded exception. * @throws IOException * Forwarded exception. * @throws ConnectorFactoryException * Forwarded exception. * @throws SettingsException * @throws ConnectorException */ public static String processLocalVerify(PdfAsInternal pdfAsInternal, VerifySessionInformation si, List signaturesToBeverified, HttpServletRequest request, HttpServletResponse response) throws SignatureException, NormalizeException, IOException, ConnectorFactoryException, SettingsException, ConnectorException { si.currentLocalOperation = new CurrentLocalOperation(); si.currentLocalOperation.signaturesToBeverified = signaturesToBeverified; // SignatureInformation si.currentLocalOperation.requests = new LocalRequest[signaturesToBeverified.size()]; si.currentLocalOperation.response_xmls = new String[si.currentLocalOperation.requests.length]; si.currentLocalOperation.current_operation = 0; String host = request.getServerName(); URL loc_ref_URL = new URL(WebUtils.buildRetrieveSignatureDataURL(request, response)); String loc_ref_url = response.encodeURL(loc_ref_URL.toString()); for (int i = 0; i < si.currentLocalOperation.requests.length; i++) { SignatureInformation sigInfo = (SignatureInformation) signaturesToBeverified.get(i); String request_string = pdfAsInternal.prepareLocalVerifyRequest(sigInfo, si.connector, si.type, loc_ref_url); LocalRequest local_request = new LocalRequest("not-needed", request_string); si.currentLocalOperation.requests[i] = local_request; si.currentLocalOperation.response_xmls[i] = null; } String local_request_url = pdfAsInternal.getLocalServiceAddress(si.type, si.connector); URL data_URL = new URL(request.getScheme(), host, request.getServerPort(), WebUtils.addJSessionID(request.getContextPath() + "/DataURL", request)); String data_url = response.encodeURL(data_URL.toString()); request.setAttribute("local_request_url", local_request_url); request.setAttribute("data_url", data_url); return NULL_REQUEST_PAGE_JSP; } /** * 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(""); } public static String makeStringHTMLReady(String input) { String output = input; output = output.replaceAll("&", "&"); output = output.replaceAll("\"", """); output = output.replaceAll("<", "<"); output = output.replaceAll(">", ">"); return output; } public static String getLocalServerAddress(HttpServletRequest request, HttpServletResponse response) { String host = request.getServerName(); URL local_server = null; try { String scheme = request.getScheme(); int port = request.getServerPort(); if ("http".equalsIgnoreCase(scheme) && port == 80) { local_server = new URL(scheme, host, "/"); } else if ("https".equalsIgnoreCase(scheme) && port == 443) { local_server = new URL(scheme, host, "/"); } else { local_server = new URL(scheme, host, port, "/"); } } catch (MalformedURLException e) { logger.error(e.getMessage(), e); } String loc_server = response.encodeURL(local_server.toString()); return loc_server; } public static String getLocalContextAddress(HttpServletRequest request, HttpServletResponse response) { String serverURL = getLocalServerAddress(request, response); String context = request.getContextPath(); if (serverURL.endsWith("/") && context.startsWith("/")) { context = context.substring(1); } return serverURL + context; } /** * Tells, if the given connector is local. * * @param connector_identifier * The connector. * @return Returns true, if the given connector is local, false otherwise. * @throws ConnectorFactoryException * F.e. */ public static boolean isConnectorLocal(String connector_identifier) throws ConnectorFactoryException { //rpiazzi added signature devices mobile and mobiletest return connector_identifier.equals(Constants.SIGNATURE_DEVICE_BKU) || connector_identifier.equals(Constants.SIGNATURE_DEVICE_A1) || connector_identifier.equals(Constants.SIGNATURE_DEVICE_MOC) || connector_identifier.equals(Constants.SIGNATURE_DEVICE_MOBILE) || connector_identifier.equals(Constants.SIGNATURE_DEVICE_MOBILETEST); } }