From 2f5da7be64a7d1f6b41ceb2dd0dfb3992b6f242d Mon Sep 17 00:00:00 2001 From: Paul Boon Date: Wed, 22 Mar 2023 15:10:36 +0100 Subject: [PATCH 1/3] Add Shib attribute characterset conversion to getValueFromAssertion --- src/main/java/edu/harvard/iq/dataverse/Shib.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/main/java/edu/harvard/iq/dataverse/Shib.java b/src/main/java/edu/harvard/iq/dataverse/Shib.java index 0f0e20aba94..ade97146acb 100644 --- a/src/main/java/edu/harvard/iq/dataverse/Shib.java +++ b/src/main/java/edu/harvard/iq/dataverse/Shib.java @@ -19,6 +19,7 @@ import org.apache.commons.lang3.StringUtils; import java.io.IOException; +import java.io.UnsupportedEncodingException; import java.sql.Timestamp; import java.util.ArrayList; import java.util.Arrays; @@ -416,6 +417,13 @@ private String getValueFromAssertion(String key) { Object attribute = request.getAttribute(key); if (attribute != null) { String attributeValue = attribute.toString(); + if(systemConfig.isShibAttributeCharacterSetConversionEnabled()) { + try { + attributeValue = new String(attributeValue.getBytes("ISO-8859-1"), "UTF-8"); + } catch (UnsupportedEncodingException e) { + logger.warning("Character conversion failed for Shib attribute (key, value) = (" + key + ", " + attributeValue + ") ; ignoring it"); + } + } String trimmedValue = attributeValue.trim(); if (!trimmedValue.isEmpty()) { logger.fine("The SAML assertion for \"" + key + "\" (optional) was \"" + attributeValue + "\" and was trimmed to \"" + trimmedValue + "\"."); From 576778205ef0225e5e032540f442126ba0a979f3 Mon Sep 17 00:00:00 2001 From: paulboon Date: Tue, 1 Oct 2024 10:20:22 +0200 Subject: [PATCH 2/3] Removed catching of UnsupportedEncodingException --- src/main/java/edu/harvard/iq/dataverse/Shib.java | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/main/java/edu/harvard/iq/dataverse/Shib.java b/src/main/java/edu/harvard/iq/dataverse/Shib.java index 81c918e5a12..38d732c6acd 100644 --- a/src/main/java/edu/harvard/iq/dataverse/Shib.java +++ b/src/main/java/edu/harvard/iq/dataverse/Shib.java @@ -20,7 +20,6 @@ import java.io.IOException; import java.nio.charset.StandardCharsets; -import java.io.UnsupportedEncodingException; import java.sql.Timestamp; import java.util.ArrayList; import java.util.Arrays; @@ -423,11 +422,7 @@ private String getValueFromAssertion(String key) { if (attribute != null) { String attributeValue = attribute.toString(); if(systemConfig.isShibAttributeCharacterSetConversionEnabled()) { - try { - attributeValue = new String(attributeValue.getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.ISO_8859_1); - } catch (UnsupportedEncodingException e) { - logger.warning("Character conversion failed for Shib attribute (key, value) = (" + key + ", " + attributeValue + ") ; ignoring it"); - } + attributeValue = new String(attributeValue.getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.ISO_8859_1); } String trimmedValue = attributeValue.trim(); if (!trimmedValue.isEmpty()) { From 0daa077413492bd00d2e9ce1b99db9ff69922426 Mon Sep 17 00:00:00 2001 From: paulboon Date: Wed, 30 Oct 2024 13:24:34 +0100 Subject: [PATCH 3/3] Fixed wrong character set conversion in Shib.getValueFromAssertion --- src/main/java/edu/harvard/iq/dataverse/Shib.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/edu/harvard/iq/dataverse/Shib.java b/src/main/java/edu/harvard/iq/dataverse/Shib.java index 38d732c6acd..121d03ef0c7 100644 --- a/src/main/java/edu/harvard/iq/dataverse/Shib.java +++ b/src/main/java/edu/harvard/iq/dataverse/Shib.java @@ -422,7 +422,7 @@ private String getValueFromAssertion(String key) { if (attribute != null) { String attributeValue = attribute.toString(); if(systemConfig.isShibAttributeCharacterSetConversionEnabled()) { - attributeValue = new String(attributeValue.getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.ISO_8859_1); + attributeValue = new String(attributeValue.getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8); } String trimmedValue = attributeValue.trim(); if (!trimmedValue.isEmpty()) {