package org.ovirt.engine.core.redirect; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.ovirt.engine.core.bll.interfaces.BackendInternal; import org.ovirt.engine.core.common.queries.GetConfigurationValueParameters; import org.ovirt.engine.core.common.queries.VdcQueryReturnValue; import org.ovirt.engine.core.common.queries.VdcQueryType; import org.ovirt.engine.core.common.queries.ConfigurationValues; import org.ovirt.engine.core.compat.LogCompat; import org.ovirt.engine.core.compat.LogFactoryCompat; import org.ovirt.engine.core.utils.ejb.BeanProxyType; import org.ovirt.engine.core.utils.ejb.BeanType; import org.ovirt.engine.core.utils.ejb.EjbUtils; public class RedirectServlet extends HttpServlet { private static LogCompat log = LogFactoryCompat.getLog(RedirectServlet.class); private static String pagePrefix = "RedirectServlet"; private static String pageSuffix = "Page"; private static String errorSuffix = "PageError"; // ***************************************************************************** // // // IMPORTANT!!! // // We must use page and error prefix and suffix, if not user can fetch any // configuration value from the vdc_option table! // // ***************************************************************************** // private String getConfigValue(ConfigurationValues conf) { String retVal = null; BackendInternal backend = null; GetConfigurationValueParameters params = null; VdcQueryReturnValue v = null; try { backend = (BackendInternal) EjbUtils.findBean(BeanType.BACKEND, BeanProxyType.LOCAL); params = new GetConfigurationValueParameters(conf); v = backend.runInternalQuery(VdcQueryType.GetConfigurationValue, params); if (v != null) { retVal = (v.getSucceeded() && v.getReturnValue() != null && !((String)v.getReturnValue()).trim().equals("")) ? v.getReturnValue().toString() : null; } else { log.error("Redirect Servlet: Got NULL from backend.RunQuery!"); } } catch (Throwable t) { log.error("Redirect Servlet: Caught exception while trying to run query: ", t); } return retVal; } protected void addAlert(PrintWriter out, String message) { out.print("<html><body><script>alert('" + message.replace('\'', '"') + "');window.history.back()</script></body></html>"); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); try { String page = pagePrefix + request.getParameter("Page") + pageSuffix; if (request.getParameter("Page") == null) { addAlert(out, "Page parameter is mandatory"); } else { String pageUrl = getConfigValue(ConfigurationValues.valueOf(page)); if (pageUrl == null || pageUrl.trim().equals("")) { String pageError = getConfigValue(ConfigurationValues.valueOf(pagePrefix + request.getParameter("Page") + errorSuffix)); if (pageError == null) { addAlert(out, "Cannot find page: " + request.getParameter("Page")); } else { addAlert(out, pageError); } } else { response.sendRedirect(pageUrl); } } } catch (IllegalArgumentException e) { response.setStatus(400); addAlert(out, "Page: " + request.getParameter("Page") + " is not a leagal."); } catch (Exception e1) { response.setStatus(500); log.error("Redirect Servlet: Error", e1); } finally { out.close(); } log.debug("Health Status servlet: close"); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }