From 5485e1268de707743bad0805d4bcf67ca2d055c9 Mon Sep 17 00:00:00 2001
From: srosse <none@none>
Date: Wed, 6 Dec 2017 12:05:35 +0100
Subject: [PATCH] OO-3191: implement a special dispatch /robots.txt to prevent
 DDos attack from search engines

---
 .../dispatcher/_spring/dispatcherContext.xml  |  5 ++
 .../org/olat/dispatcher/RobotsDispatcher.java | 52 +++++++++++++++++++
 2 files changed, 57 insertions(+)
 create mode 100644 src/main/java/org/olat/dispatcher/RobotsDispatcher.java

diff --git a/src/main/java/org/olat/core/dispatcher/_spring/dispatcherContext.xml b/src/main/java/org/olat/core/dispatcher/_spring/dispatcherContext.xml
index 3adabf3258d..7d853b9f01f 100644
--- a/src/main/java/org/olat/core/dispatcher/_spring/dispatcherContext.xml
+++ b/src/main/java/org/olat/core/dispatcher/_spring/dispatcherContext.xml
@@ -14,6 +14,9 @@
 				<entry key="/dmz/">
 					<ref bean="dmzbean" />
 				</entry>
+				<entry key="/robots.txt">
+					<ref bean="robotsdispatcher" />
+				</entry>
 				<entry key="/maintenance/">
 					<ref bean="maintenancebean" />
 				</entry>
@@ -70,6 +73,8 @@
 	
 	<bean id="oauthcallback" class="org.olat.login.oauth.OAuthDispatcher" />
 	
+	<bean id="robotsdispatcher" class="org.olat.dispatcher.RobotsDispatcher" />
+	
 	<!-- send bug report dispatcher -->
 	<bean id="errorMailBean" class="org.olat.core.dispatcher.ErrorFeedbackMailer">
 		<property name="mailManager" ref="mailManager"/>
diff --git a/src/main/java/org/olat/dispatcher/RobotsDispatcher.java b/src/main/java/org/olat/dispatcher/RobotsDispatcher.java
new file mode 100644
index 00000000000..2f70d6a2ba2
--- /dev/null
+++ b/src/main/java/org/olat/dispatcher/RobotsDispatcher.java
@@ -0,0 +1,52 @@
+/**
+ * <a href="http://www.openolat.org">
+ * OpenOLAT - Online Learning and Training</a><br>
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License"); <br>
+ * you may not use this file except in compliance with the License.<br>
+ * You may obtain a copy of the License at the
+ * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
+ * <p>
+ * Unless required by applicable law or agreed to in writing,<br>
+ * software distributed under the License is distributed on an "AS IS" BASIS, <br>
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
+ * See the License for the specific language governing permissions and <br>
+ * limitations under the License.
+ * <p>
+ * Initial code contributed and copyrighted by<br>
+ * frentix GmbH, http://www.frentix.com
+ * <p>
+ */
+package org.olat.dispatcher;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.olat.core.dispatcher.Dispatcher;
+
+/**
+ * 
+ * Initial date: 30.11.2015<br>
+ * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
+ *
+ */
+public class RobotsDispatcher implements Dispatcher {
+
+	@Override
+	public void execute(HttpServletRequest request, HttpServletResponse response)
+	throws ServletException, IOException {
+		try {
+			response.setCharacterEncoding("UTF-8");
+		} catch (Exception e) {
+			//we do our best
+		}
+		response.setContentType("text/plain");
+		PrintWriter writer = response.getWriter();
+		writer.write("User-agent: *\n");
+		writer.write("Disallow: /");
+	}
+}
-- 
GitLab