Skip to content
Snippets Groups Projects
Commit 6c271c70 authored by srosse's avatar srosse
Browse files
parents bdfed933 dd9c3ec9
No related branches found
No related tags found
No related merge requests found
......@@ -164,6 +164,19 @@ public class DispatcherModule {
log.error("Send 404 failed: url=" + url, e);
}
}
/**
* Send a 404 without log.
*
* @param response The HTTP response
*/
public static final void sendNotFound(HttpServletResponse response) {
try {
response.sendError(HttpServletResponse.SC_NOT_FOUND);
} catch (IOException e) {
//
}
}
/**
* Sends a HTTP 403 response.
......@@ -178,6 +191,19 @@ public class DispatcherModule {
log.error("Send 403 failed: url=" + url, e);
}
}
/**
* Send a 403 error without log.
*
* @param response The HTTP response
*/
public static final void sendForbidden(HttpServletResponse response) {
try {
response.sendError(HttpServletResponse.SC_FORBIDDEN);
} catch (IOException e) {
//
}
}
/**
* Sends a HTTP 400 response.
......@@ -207,6 +233,14 @@ public class DispatcherModule {
}
}
public static final void sendServerError(HttpServletResponse response) {
try {
response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
} catch (IOException e) {
//
}
}
/**
* Sent to standard 503 if not available
* @param response
......
......@@ -128,8 +128,7 @@ public class OpenOLATServlet extends HttpServlet {
}
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
protected void service(HttpServletRequest req, HttpServletResponse resp) {
Tracing.setHttpRequest(req);
ThreadLocalUserActivityLoggerInstaller.initUserActivityLogger(req);
......@@ -139,7 +138,7 @@ public class OpenOLATServlet extends HttpServlet {
sessionStatsManager.incrementConcurrentCounter();
}
try{
try {
final String method = req.getMethod();
if (method.equals(METHOD_PROPFIND)) {
......@@ -160,6 +159,9 @@ public class OpenOLATServlet extends HttpServlet {
super.service(req, resp);
}
} catch (ServletException | IOException e) {
log.error("", e);
DispatcherModule.sendServerError(resp);
} finally {
if(sessionStatsManager != null) {
sessionStatsManager.decrementConcurrentCounter();
......@@ -176,13 +178,18 @@ public class OpenOLATServlet extends HttpServlet {
@Override
protected void doOptions(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
String subContext = DispatcherModule.getFirstPath(req);
if("/".equals(subContext)) {
webDAVDispatcher.doRootOptions(req, resp);
} else if("/webdav".equals(subContext) || "/webdav/".equals(subContext)) {
webDAVDispatcher.doWebdavOptions(req, resp);
} else {
super.doOptions(req, resp);
try {
String subContext = DispatcherModule.getFirstPath(req);
if("/".equals(subContext)) {
webDAVDispatcher.doRootOptions(req, resp);
} else if("/webdav".equals(subContext) || "/webdav/".equals(subContext)) {
webDAVDispatcher.doWebdavOptions(req, resp);
} else {
super.doOptions(req, resp);
}
} catch (ServletException | IOException e) {
log.error("", e);
DispatcherModule.sendServerError(resp);
}
}
......@@ -196,9 +203,13 @@ public class OpenOLATServlet extends HttpServlet {
* @throws IOException
*/
@Override
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
executeUserRequest(request, response);
public void doGet(HttpServletRequest request, HttpServletResponse response) {
try {
executeUserRequest(request, response);
} catch (ServletException | IOException e) {
log.error("", e);
DispatcherModule.sendServerError(response);
}
}
/**
......@@ -211,33 +222,50 @@ public class OpenOLATServlet extends HttpServlet {
* @throws IOException
*/
@Override
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
executeUserRequest(request, response);
public void doPost(HttpServletRequest request, HttpServletResponse response) {
try {
executeUserRequest(request, response);
} catch (ServletException | IOException e) {
log.error("", e);
DispatcherModule.sendServerError(response);
}
}
@Override
protected void doPut(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
webDAVDispatcher.execute(req, resp);
protected void doPut(HttpServletRequest req, HttpServletResponse resp) {
try {
webDAVDispatcher.execute(req, resp);
} catch (ServletException | IOException e) {
log.error("", e);
DispatcherModule.sendServerError(resp);
}
}
@Override
protected void doDelete(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
webDAVDispatcher.execute(req, resp);
try {
webDAVDispatcher.execute(req, resp);
} catch (ServletException | IOException e) {
log.error("", e);
DispatcherModule.sendServerError(resp);
}
}
@Override
protected void doHead(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
String subContext = DispatcherModule.getFirstPath(req);
if("/".equals(subContext)) {
webDAVDispatcher.execute(req, resp);
} else if("/webdav".equals(subContext) || "/webdav/".equals(subContext)) {
webDAVDispatcher.execute(req, resp);
} else {
executeUserRequest(req, resp);
protected void doHead(HttpServletRequest req, HttpServletResponse resp) {
try {
String subContext = DispatcherModule.getFirstPath(req);
if("/".equals(subContext)) {
webDAVDispatcher.execute(req, resp);
} else if("/webdav".equals(subContext) || "/webdav/".equals(subContext)) {
webDAVDispatcher.execute(req, resp);
} else {
executeUserRequest(req, resp);
}
} catch (ServletException | IOException e) {
log.error("", e);
DispatcherModule.sendServerError(resp);
}
}
......@@ -283,11 +311,11 @@ public class OpenOLATServlet extends HttpServlet {
response.sendRedirect(redirectUri);
ServletUtil.setCacheHeaders(response, ServletUtil.CACHE_ONE_DAY);
} else {
response.sendError(HttpServletResponse.SC_NOT_FOUND);
DispatcherModule.sendNotFound(response);
ServletUtil.setCacheHeaders(response, ServletUtil.CACHE_ONE_DAY);
}
} else {
response.sendError(HttpServletResponse.SC_NOT_FOUND);
DispatcherModule.sendNotFound(response);
ServletUtil.setCacheHeaders(response, ServletUtil.CACHE_ONE_DAY);
}
}
......
......@@ -32,6 +32,7 @@ import javax.servlet.http.HttpServletResponse;
import org.olat.admin.sysinfo.manager.CustomStaticFolderManager;
import org.olat.core.CoreSpringFactory;
import org.olat.core.dispatcher.DispatcherModule;
import org.olat.core.gui.media.FileMediaResource;
import org.olat.core.gui.media.MediaResource;
import org.olat.core.gui.media.ServletUtil;
......@@ -59,30 +60,32 @@ public class StaticServlet extends HttpServlet {
public static final String NOVERSION = "_noversion_";
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
protected void service(HttpServletRequest req, HttpServletResponse resp) {
String userAgent = req.getHeader("User-Agent");
if(userAgent != null && userAgent.indexOf("BitKinex") >= 0) {
//BitKinex isn't allow to see this context
resp.sendError(HttpServletResponse.SC_FORBIDDEN);
DispatcherModule.sendForbidden(resp);
} else {
super.service(req, resp);
try {
super.service(req, resp);
} catch (ServletException | IOException e) {
log.error("", e);
}
}
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
protected void doGet(HttpServletRequest request, HttpServletResponse response) {
final String pathInfo = request.getPathInfo();
if (pathInfo == null) {
// huh? What's this, send not found, don't know what to do here
response.sendError(HttpServletResponse.SC_NOT_FOUND);
DispatcherModule.sendNotFound(response);
} else if (pathInfo.indexOf(NOVERSION) != -1) {
// no version provided - only remove mapper
String staticRelPath = pathInfo.substring(NOVERSION.length() + 1, pathInfo.length());
String normalizedRelPath = ServletUtil.normalizePath(staticRelPath);
if (normalizedRelPath == null) {
response.sendError(HttpServletResponse.SC_NOT_FOUND);
DispatcherModule.sendNotFound(response);
} else if(normalizedRelPath.endsWith("transparent.gif")){
deliverStatic(request, response, pathInfo, normalizedRelPath, true);
} else {
......@@ -95,13 +98,13 @@ public class StaticServlet extends HttpServlet {
File file = new File(folderManager.getRootFile(), staticRelPath);
if(file.exists()) {
if(file.isDirectory()) {
response.sendError(HttpServletResponse.SC_FORBIDDEN);
DispatcherModule.sendForbidden(response);
} else {
MediaResource resource = new FileMediaResource(file);
ServletUtil.serveResource(request, response, resource);
}
} else {
response.sendError(HttpServletResponse.SC_NOT_FOUND);
DispatcherModule.sendNotFound(response);
}
} else {
// version provided - remove it
......@@ -111,20 +114,19 @@ public class StaticServlet extends HttpServlet {
String staticRelPath = pathInfo.substring(start, end);
String normalizedRelPath = ServletUtil.normalizePath(staticRelPath);
if (normalizedRelPath == null) {
response.sendError(HttpServletResponse.SC_NOT_FOUND);
DispatcherModule.sendNotFound(response);
} else {
boolean expiration = !Settings.isDebuging();
deliverStatic(request, response, pathInfo, normalizedRelPath, expiration);
}
} else {
response.sendError(HttpServletResponse.SC_NOT_FOUND);
DispatcherModule.sendNotFound(response);
}
}
}
private void deliverStatic(HttpServletRequest request, HttpServletResponse response,
String pathInfo, String normalizedRelPath, boolean expiration)
throws IOException {
String pathInfo, String normalizedRelPath, boolean expiration) {
boolean notFound = false;
// create the file from the path
......@@ -175,10 +177,10 @@ public class StaticServlet extends HttpServlet {
}
if(notFound) {
response.sendError(HttpServletResponse.SC_NOT_FOUND);
DispatcherModule.sendNotFound(response);
} else if(staticFile.isDirectory()) {
//directory listing is forbidden
response.sendError(HttpServletResponse.SC_FORBIDDEN);
DispatcherModule.sendForbidden(response);
} else {
deliverFile(request, response, staticFile, expiration);
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment