Commit b4b24bcd authored by Derek DeMoro's avatar Derek DeMoro Committed by derek

"JM-432" Jive Messenger does not handle different web types (flash, applets, etc.)

git-svn-id: http://svn.igniterealtime.org/svn/repos/messenger/branches@2957 b35dd754-fafc-0310-a699-88a17e54d16e
parent 7e077b51
...@@ -91,20 +91,18 @@ public class PluginServlet extends HttpServlet { ...@@ -91,20 +91,18 @@ public class PluginServlet extends HttpServlet {
handleJSP(pathInfo, request, response); handleJSP(pathInfo, request, response);
return; return;
} }
// Handle image requests.
else if (pathInfo.endsWith(".gif") || pathInfo.endsWith(".png")) {
handleImage(pathInfo, response);
return;
}
// Handle servlet requests. // Handle servlet requests.
else if (getServlet(pathInfo) != null) { else if (getServlet(pathInfo) != null) {
handleServlet(pathInfo, request, response); handleServlet(pathInfo, request, response);
} }
// Anything else results in a 404. // Handle image requests.
else { else {
response.setStatus(HttpServletResponse.SC_NOT_FOUND); handleOtherRequest(pathInfo, response);
return; return;
} }
// Anything else results in a 404.
} }
catch (Exception e) { catch (Exception e) {
Log.error(e); Log.error(e);
...@@ -292,24 +290,39 @@ public class PluginServlet extends HttpServlet { ...@@ -292,24 +290,39 @@ public class PluginServlet extends HttpServlet {
return servlet; return servlet;
} }
/** /**
* Handles a request for an image. * Handles a request for other web items (images, flash, applets, etc.)
* *
* @param pathInfo the extra path info. * @param pathInfo the extra path info.
* @param response the response object. * @param response the response object.
* @throws IOException if an IOException occurs while handling the request. * @throws IOException if an IOException occurs while handling the request.
*/ */
private void handleImage(String pathInfo, HttpServletResponse response) throws IOException { private void handleOtherRequest(String pathInfo, HttpServletResponse response) throws IOException {
String[] parts = pathInfo.split("/"); String[] parts = pathInfo.split("/");
// Image request must be in correct format. // Image request must be in correct format.
if (parts.length != 4) { if (parts.length < 3) {
response.setStatus(HttpServletResponse.SC_NOT_FOUND); response.setStatus(HttpServletResponse.SC_NOT_FOUND);
return; return;
} }
String contextPath = "";
int index = pathInfo.indexOf(parts[1]);
if (index != -1) {
contextPath = pathInfo.substring(index + parts[1].length());
}
File pluginDirectory = new File(JiveGlobals.getHomeDirectory(), "plugins"); File pluginDirectory = new File(JiveGlobals.getHomeDirectory(), "plugins");
File image = new File(pluginDirectory, parts[1] + File.separator + "web" + File file = new File(pluginDirectory, parts[1] + File.separator + "web" + contextPath);
File.separator + "images" + File.separator + parts[3]);
if (!image.exists()) { // When using dev environment, the images dir may be under something other that web.
Plugin plugin = pluginManager.getPlugin(parts[1]);
PluginDevEnvironment environment = pluginManager.getDevEnvironment(plugin);
if (environment != null) {
file = new File(environment.getWebRoot(), contextPath);
}
if (!file.exists()) {
response.setStatus(HttpServletResponse.SC_NOT_FOUND); response.setStatus(HttpServletResponse.SC_NOT_FOUND);
return; return;
} }
...@@ -319,17 +332,20 @@ public class PluginServlet extends HttpServlet { ...@@ -319,17 +332,20 @@ public class PluginServlet extends HttpServlet {
if (pathInfo.endsWith(".png")) { if (pathInfo.endsWith(".png")) {
contentType = "image/png"; contentType = "image/png";
} }
response.setHeader("Content-disposition", "filename=\"" + image + "\";"); else if (pathInfo.endsWith(".swf")) {
contentType = "application/x-shockwave-flash";
}
response.setHeader("Content-disposition", "filename=\"" + file + "\";");
response.setContentType(contentType); response.setContentType(contentType);
// Write out the image to the user. // Write out the image to the user.
InputStream in = null; InputStream in = null;
ServletOutputStream out = null; ServletOutputStream out = null;
try { try {
in = new BufferedInputStream(new FileInputStream(image)); in = new BufferedInputStream(new FileInputStream(file));
out = response.getOutputStream(); out = response.getOutputStream();
// Set the size of the file. // Set the size of the file.
response.setContentLength((int)image.length()); response.setContentLength((int)file.length());
// Use a 1K buffer. // Use a 1K buffer.
byte[] buf = new byte[1024]; byte[] buf = new byte[1024];
...@@ -353,6 +369,7 @@ public class PluginServlet extends HttpServlet { ...@@ -353,6 +369,7 @@ public class PluginServlet extends HttpServlet {
} }
} }
/** /**
* Handles a request for a JSP page in development mode. If development mode is * Handles a request for a JSP page in development mode. If development mode is
* not enabled, this method returns false so that normal JSP handling can be performed. * not enabled, this method returns false so that normal JSP handling can be performed.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment