package at.gv.egiz.pdfas.utils; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.apache.commons.lang.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import at.knowcenter.wag.egov.egiz.cfg.SettingsReader; import at.knowcenter.wag.egov.egiz.exceptions.SettingNotFoundException; import at.knowcenter.wag.egov.egiz.exceptions.SettingsException; import at.knowcenter.wag.egov.egiz.web.LocalRequestHelper; /** * @author tknall */ public final class WebUtils { private WebUtils() { } /** * The log. */ private final static Log LOG = LogFactory.getLog(WebUtils.class); /** * The configuration key that replaces a dynamically generated retrieve signature data url. */ private final static String RETRIEVE_SIGNATURE_DATA_URL_OVERRIDE_KEY = "retrieve_signature_data_url_override"; /** * Unlike {@link HttpServletResponse#encodeURL(String)} that adds only a * {@code JSESSIONID} entry to the given url if needed, this method always * adds the session id (except if already present within the url. * * @param url * The given url. * @param session * The {@link HttpSession}. * @return The given url plus a session id. */ public static String addJSessionID(String url, HttpSession session) { if (url == null) { return null; } if (!StringUtils.containsIgnoreCase(url, ";jsessionid=")) { url = url + ";jsessionid=" + session.getId(); LOG.debug("Adding jsessionid " + session.getId()); } else { LOG.debug("No need to add a jsessionid."); } LOG.debug("Returning url " + url); return url; } /** * Unlike {@link HttpServletResponse#encodeURL(String)} that adds only a * {@code JSESSIONID} entry to the given url if needed, this method always * adds the session id (except if already present within the url. * * @param url * The given url. * @param request * The {@link HttpServletRequest}. * @return The given url plus a session id. */ public static String addJSessionID(String url, HttpServletRequest request) { return addJSessionID(url, request.getSession()); } /** * Either dynamically creates locref content url or uses a url provides by the pdf-as * configuration (key {@code retrieve_signature_data_url_override}). * @param request The {@link HttpServletRequest}. * @param response The {@link HttpServletResponse}. * @return The retrieve signature data url. */ public static String buildRetrieveSignatureDataURL(HttpServletRequest request, HttpServletResponse response) { String override = null; LOG.debug("Building retrieve signature data url."); try { override = SettingsReader.getInstance().getSetting(RETRIEVE_SIGNATURE_DATA_URL_OVERRIDE_KEY, null); } catch (SettingsException e) { LOG.error(e); } String result; if (override == null) { result = WebUtils.addJSessionID(LocalRequestHelper.getLocalContextAddress(request, response) + "/RetrieveSignatureData", request); } else { LOG.debug("Override url found: " + override); result = WebUtils.addJSessionID(override, request); } LOG.debug("RetrieveSignatureDataURL = " + result); return result; } }