From 6e18779ee443aa5c257ff2e596ce431142b665f1 Mon Sep 17 00:00:00 2001
From: uhensler <none@none>
Date: Wed, 8 Nov 2017 16:14:08 +0100
Subject: [PATCH] OO-3127: Avoid the creation of users with no email by the
 Shibboleth module

---
 .../shibboleth/handler/FirstValueHandler.java | 15 ++++++--
 .../handler/FirstValueHandlerTest.java        | 37 ++++++++++++++++++-
 2 files changed, 47 insertions(+), 5 deletions(-)

diff --git a/src/main/java/org/olat/shibboleth/handler/FirstValueHandler.java b/src/main/java/org/olat/shibboleth/handler/FirstValueHandler.java
index ae317a0842d..d7f018595fc 100644
--- a/src/main/java/org/olat/shibboleth/handler/FirstValueHandler.java
+++ b/src/main/java/org/olat/shibboleth/handler/FirstValueHandler.java
@@ -19,6 +19,7 @@
  */
 package org.olat.shibboleth.handler;
 
+import org.olat.core.util.StringHelper;
 import org.olat.shibboleth.ShibbolethModule;
 import org.springframework.stereotype.Component;
 
@@ -37,10 +38,16 @@ class FirstValueHandler implements ShibbolethAttributeHandler {
 
 	@Override
 	public String parse(String shibbolethAttributeValue) {
-		if (shibbolethAttributeValue == null) return null;
-
-		String[] values = shibbolethAttributeValue.split(ShibbolethModule.MULTIVALUE_SEPARATOR);
-		return values[0];
+		if (shibbolethAttributeValue != null) {
+			String[] values = shibbolethAttributeValue.split(ShibbolethModule.MULTIVALUE_SEPARATOR);
+			// Return the first not empty value
+			for (String value: values) {
+				if (StringHelper.containsNonWhitespace(value)) {
+					return value;
+				}
+			}
+		}
+		return null;
 	}
 
 }
diff --git a/src/test/java/org/olat/shibboleth/handler/FirstValueHandlerTest.java b/src/test/java/org/olat/shibboleth/handler/FirstValueHandlerTest.java
index c4e36edba17..c4823dbe841 100644
--- a/src/test/java/org/olat/shibboleth/handler/FirstValueHandlerTest.java
+++ b/src/test/java/org/olat/shibboleth/handler/FirstValueHandlerTest.java
@@ -53,9 +53,44 @@ public class FirstValueHandlerTest {
 	}
 
 	@Test
-	public void parseShoudReturnFirstValueIfNull() {
+	public void parseShoudReturnNoValueIfNull() {
 		String parsed = sut.parse(null);
 
 		assertThat(parsed).isNull();
 	}
+	
+
+	@Test
+	public void parseShoudReturnNoValueIfEmpty() {
+		String parsed = sut.parse("");
+
+		assertThat(parsed).isNull();
+	}
+
+	@Test
+	public void parseShoudReturnNoValueIfOnlySemicolon() {
+		String parsed = sut.parse(";");
+
+		assertThat(parsed).isNull();
+	}
+	
+	@Test
+	public void parseShoudReturnSecondValueIfFirstIsEmpty() {
+		String expected = "abc";
+		String input = ";" + expected + ";abc;222;a;erer;sdfsfd";
+
+		String parsed = sut.parse(input);
+
+		assertThat(parsed).isEqualTo(expected);
+	}
+	
+	@Test
+	public void parseShoudReturnFourthValueIfFirstThreeAreEmpty() {
+		String expected = "abc";
+		String input = ";  ;;" + expected + ";abc;222;a;erer;sdfsfd";
+
+		String parsed = sut.parse(input);
+
+		assertThat(parsed).isEqualTo(expected);
+	}
 }
-- 
GitLab