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