From aaed40e42129f7047548ed7ee3b794b4b2cad2e7 Mon Sep 17 00:00:00 2001
From: srosse <stephane.rosse@frentix.com>
Date: Wed, 14 Oct 2020 15:07:28 +0200
Subject: [PATCH] OO-4976: persist and read empty user agent exclusion list for
 WebDAV

---
 .../commons/services/webdav/WebDAVModule.java | 39 ++++++++++++-------
 .../webdav/manager/WebDAVManagerImpl.java     |  6 +--
 .../webdav/servlets/WebDAVDispatcherImpl.java |  2 +-
 .../webdav/ui/WebDAVAdminController.java      |  6 +--
 4 files changed, 32 insertions(+), 21 deletions(-)

diff --git a/src/main/java/org/olat/core/commons/services/webdav/WebDAVModule.java b/src/main/java/org/olat/core/commons/services/webdav/WebDAVModule.java
index 8d206583153..d7da773a526 100644
--- a/src/main/java/org/olat/core/commons/services/webdav/WebDAVModule.java
+++ b/src/main/java/org/olat/core/commons/services/webdav/WebDAVModule.java
@@ -50,6 +50,7 @@ public class WebDAVModule extends AbstractSpringModule implements ConfigOnOff {
 	private static final String PREPEND_COURSE_REFERENCE_TO_TITLE = "webdav.prepend.course.reference.to.title";
 	private static final String CURRICULUM_ELEMENTS_FOLDERS_ENABLED = "webdav.curriculumelements.folders.enabled";
 	private static final String MANAGED_FOLDERS_ENABLED = "webdav.managed.folders.enabled";
+	private static final String USER_AGENT_EXCLUSION_LIST = "webdav.user.agent.exclusion.list";
 	
 	@Autowired
 	private List<WebDAVProvider> webdavProviders;
@@ -69,9 +70,9 @@ public class WebDAVModule extends AbstractSpringModule implements ConfigOnOff {
 	@Value("${webdav.prepend.course.reference.to.title:false}")
 	private boolean prependCourseReferenceToTitle;
 	@Value("${webdav.basic.authentication.black.list}")
-	private String basicAuthenticationBlackList;
+	private String basicAuthenticationExclusionList;
 	@Value("${webdav.user.agent.black.list}")
-	private String userAgentBlackList;
+	private String userAgentExclusionList;
 	
 	@Value("${webdav.learners.bookmarks.enabled:true}")
 	private boolean enableLearnersBookmarksCourse;
@@ -131,6 +132,11 @@ public class WebDAVModule extends AbstractSpringModule implements ConfigOnOff {
 		if(StringHelper.containsNonWhitespace(prependCourseReferenceToTitleObj)) {
 			prependCourseReferenceToTitle = "true".equals(prependCourseReferenceToTitleObj);
 		}
+		
+		userAgentExclusionList = getStringPropertyValue(USER_AGENT_EXCLUSION_LIST, userAgentExclusionList);
+		if("oo_empty_oo".equals(userAgentExclusionList)) {
+			userAgentExclusionList = null;
+		}
 	}
 	
 	@Override
@@ -224,30 +230,35 @@ public class WebDAVModule extends AbstractSpringModule implements ConfigOnOff {
 		setStringProperty(PREPEND_COURSE_REFERENCE_TO_TITLE, enabled ? "true" : "false", true);
 	}
 
-	public String[] getBasicAuthenticationBlackList() {
-		if(StringHelper.containsNonWhitespace(basicAuthenticationBlackList)) {
-			return basicAuthenticationBlackList.split("[,]");
+	public String[] getBasicAuthenticationExclusionList() {
+		if(StringHelper.containsNonWhitespace(basicAuthenticationExclusionList)) {
+			return basicAuthenticationExclusionList.split("[,]");
 		}
 		return new String[0];
 	}
 
-	public void setBasicAuthenticationBlackList(String basicAuthenticationBlackList) {
-		this.basicAuthenticationBlackList = basicAuthenticationBlackList;
+	public void setBasicAuthenticationExclusionList(String userAgents) {
+		this.basicAuthenticationExclusionList = userAgents;
 	}
 
-	public String[] getUserAgentBlackListArray() {
-		if(StringHelper.containsNonWhitespace(userAgentBlackList)) {
-			return userAgentBlackList.split("[,]");
+	public String[] getUserAgentExclusionListArray() {
+		if(StringHelper.containsNonWhitespace(userAgentExclusionList)) {
+			return userAgentExclusionList.split("[,]");
 		}
 		return new String[0];
 	}
 
-	public String getUserAgentBlackList() {
-		return userAgentBlackList;
+	public String getUserAgentExclusionList() {
+		return userAgentExclusionList;
 	}
 
-	public void setUserAgentBlackList(String userAgentBlackList) {
-		this.userAgentBlackList = userAgentBlackList;
+	public void setUserAgentExclusionList(String userAgents) {
+		this.userAgentExclusionList = userAgents;
+		if(StringHelper.containsNonWhitespace(userAgents)) {
+			setStringProperty(USER_AGENT_EXCLUSION_LIST, userAgents, true);
+		} else {
+			setStringProperty(USER_AGENT_EXCLUSION_LIST, "oo_empty_oo", true);
+		}
 	}
 
 	/**
diff --git a/src/main/java/org/olat/core/commons/services/webdav/manager/WebDAVManagerImpl.java b/src/main/java/org/olat/core/commons/services/webdav/manager/WebDAVManagerImpl.java
index 10dad274ea8..6aaeb58f4bb 100644
--- a/src/main/java/org/olat/core/commons/services/webdav/manager/WebDAVManagerImpl.java
+++ b/src/main/java/org/olat/core/commons/services/webdav/manager/WebDAVManagerImpl.java
@@ -278,9 +278,9 @@ public class WebDAVManagerImpl implements WebDAVManager, InitializingBean {
 	private boolean proposeBasicAuthentication(HttpServletRequest request) {
 		String userAgent = ServletUtil.getUserAgent(request);
 		if(StringHelper.containsNonWhitespace(userAgent)) {
-			String[] blackList = webdavModule.getBasicAuthenticationBlackList();
-			for(String blackListedAgent:blackList) {
-				if(userAgent.contains(blackListedAgent) && webdavModule.isDigestAuthenticationEnabled()) {
+			String[] exclusionList = webdavModule.getBasicAuthenticationExclusionList();
+			for(String exclusion:exclusionList) {
+				if(userAgent.contains(exclusion) && webdavModule.isDigestAuthenticationEnabled()) {
 					return false;
 				}
 			}
diff --git a/src/main/java/org/olat/core/commons/services/webdav/servlets/WebDAVDispatcherImpl.java b/src/main/java/org/olat/core/commons/services/webdav/servlets/WebDAVDispatcherImpl.java
index cad3154c7b2..39d65042fde 100644
--- a/src/main/java/org/olat/core/commons/services/webdav/servlets/WebDAVDispatcherImpl.java
+++ b/src/main/java/org/olat/core/commons/services/webdav/servlets/WebDAVDispatcherImpl.java
@@ -289,7 +289,7 @@ public class WebDAVDispatcherImpl
 		if(!StringHelper.containsNonWhitespace(userAgent)) {
 			userAgent = "";
 		}
-		String[] blackList = webDAVModule.getUserAgentBlackListArray();
+		String[] blackList = webDAVModule.getUserAgentExclusionListArray();
 		for(String blackListedAgent:blackList) {
 			if((blackListedAgent.length() < 2 && userAgent.equalsIgnoreCase(blackListedAgent))
 					|| (blackListedAgent.length() >= 2 && userAgent.contains(blackListedAgent))) {
diff --git a/src/main/java/org/olat/core/commons/services/webdav/ui/WebDAVAdminController.java b/src/main/java/org/olat/core/commons/services/webdav/ui/WebDAVAdminController.java
index 37ad1d594ce..b3cd8bf0c46 100644
--- a/src/main/java/org/olat/core/commons/services/webdav/ui/WebDAVAdminController.java
+++ b/src/main/java/org/olat/core/commons/services/webdav/ui/WebDAVAdminController.java
@@ -86,7 +86,7 @@ public class WebDAVAdminController extends FormBasicController {
 		enableDigestEl = uifactory.addCheckboxesHorizontal("webdavDigest", "webdav.digest", formLayout, onKeys, values);
 		enableDigestEl.select("xx", webDAVModule.isDigestAuthenticationEnabled());
 
-		String excludedUserAgents = webDAVModule.getUserAgentBlackList();
+		String excludedUserAgents = webDAVModule.getUserAgentExclusionList();
 		excludeClientsEl = uifactory.addCheckboxesHorizontal("webdavExclusion", "webdav.client.exclusion", formLayout, onKeys, values);
 		excludeClientsEl.select("xx", StringHelper.containsNonWhitespace(excludedUserAgents));
 		excludeClientsEl.addActionListener(FormEvent.ONCHANGE);
@@ -166,9 +166,9 @@ public class WebDAVAdminController extends FormBasicController {
 		webDAVModule.setPrependCourseReferenceToTitle(prependReferenceEl.isAtLeastSelected(1));
 		webDAVModule.setManagedFoldersEnabled(enableManagedFoldersEl.isAtLeastSelected(1));
 		if(excludeClientsEl.isAtLeastSelected(1)) {
-			webDAVModule.setUserAgentBlackList(excludeUserAgentsClientsEl.getValue());
+			webDAVModule.setUserAgentExclusionList(excludeUserAgentsClientsEl.getValue());
 		} else {
-			webDAVModule.setUserAgentBlackList(null);
+			webDAVModule.setUserAgentExclusionList(null);
 		}
 	}
 }
-- 
GitLab