[java-identity-provider] 03/03: IDP-1472 Warn on deprecated characters in attribute names
Rod Widdowson
rdw at steadingsoftware.com
Thu Jun 27 06:44:13 EDT 2019
This is an automated email from the git hooks/post-receive script.
rdw pushed a commit to branch master
in repository java-identity-provider.
View the commit online:
http://git.shibboleth.net/view/?p=java-identity-provider.git;a=commit;h=c0f2f7cc3e751cee364b98ba5f96fb543f4d393f
commit c0f2f7cc3e751cee364b98ba5f96fb543f4d393f
Author: Rod Widdowson <rdw at steadingsoftware.com>
AuthorDate: Thu Jun 27 11:23:51 2019 +0100
IDP-1472 Warn on deprecated characters in attribute names
https://issues.shibboleth.net/jira/browse/IDP-1472
---
.../java/net/shibboleth/idp/attribute/IdPAttribute.java | 16 ++++++++++++++++
.../java/net/shibboleth/idp/attribute/AttributeTest.java | 9 +++++++++
idp-attribute-api/src/test/resources/logback-test.xml | 2 +-
.../attribute/resolver/AbstractAttributeDefinition.java | 10 ++++++++++
.../resolver/AbstractAttributeDefinitionTest.java | 4 ++++
5 files changed, 40 insertions(+), 1 deletion(-)
diff --git a/idp-attribute-api/src/main/java/net/shibboleth/idp/attribute/IdPAttribute.java b/idp-attribute-api/src/main/java/net/shibboleth/idp/attribute/IdPAttribute.java
index 16cc212..bb79f85 100644
--- a/idp-attribute-api/src/main/java/net/shibboleth/idp/attribute/IdPAttribute.java
+++ b/idp-attribute-api/src/main/java/net/shibboleth/idp/attribute/IdPAttribute.java
@@ -31,6 +31,9 @@ import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import javax.annotation.concurrent.NotThreadSafe;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
import com.google.common.base.MoreObjects;
import com.google.common.base.Objects;
import com.google.common.collect.ImmutableMap;
@@ -43,6 +46,8 @@ import net.shibboleth.utilities.java.support.annotation.constraint.NotLive;
import net.shibboleth.utilities.java.support.annotation.constraint.NullableElements;
import net.shibboleth.utilities.java.support.annotation.constraint.Unmodifiable;
import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.utilities.java.support.primitive.DeprecationSupport;
+import net.shibboleth.utilities.java.support.primitive.DeprecationSupport.ObjectType;
import net.shibboleth.utilities.java.support.primitive.StringSupport;
/**
@@ -57,6 +62,9 @@ public class IdPAttribute implements Comparable<IdPAttribute>, Cloneable {
/** Value for testing illegal name. */
private static final Predicate<String> SPACE_CONTAINING = Pattern.compile("\\S*").asMatchPredicate();
+
+ /** Logger - static. */
+ @Nonnull private static final Logger LOG = LoggerFactory.getLogger(IdPAttribute.class);
/** ID of this attribute. */
@Nonnull private final String id;
@@ -80,6 +88,14 @@ public class IdPAttribute implements Comparable<IdPAttribute>, Cloneable {
id = Constraint.isNotNull(StringSupport.trimOrNull(attributeId), "Attribute ID may not be null");
Constraint.isFalse(isInvalidId(id), "Attribute ID must not have spaces");
+ if (isDeprecatedId(id)) {
+ // Issue a deprecation warning once but log more in debug and trace to help fixing
+ DeprecationSupport.warnOnce(ObjectType.BEAN,
+ "IdPAttribute",
+ "Attributes with special characters (\'\"%{})", null);
+ LOG.debug("{} - deprecate character in attribute name", id);
+ LOG.trace("Stack", new Exception("Stack Trace, not a thrown exception:"));
+ }
displayNames = Collections.emptyMap();
displayDescriptions = Collections.emptyMap();
diff --git a/idp-attribute-api/src/test/java/net/shibboleth/idp/attribute/AttributeTest.java b/idp-attribute-api/src/test/java/net/shibboleth/idp/attribute/AttributeTest.java
index a199428..a6e58e7 100644
--- a/idp-attribute-api/src/test/java/net/shibboleth/idp/attribute/AttributeTest.java
+++ b/idp-attribute-api/src/test/java/net/shibboleth/idp/attribute/AttributeTest.java
@@ -19,6 +19,7 @@ package net.shibboleth.idp.attribute;
import static org.testng.Assert.assertFalse;
import static org.testng.Assert.assertTrue;
+import static org.testng.Assert.fail;
import java.util.ArrayList;
import java.util.Collections;
@@ -30,6 +31,7 @@ import java.util.Map;
import org.testng.Assert;
import org.testng.annotations.Test;
+import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
import net.shibboleth.utilities.java.support.logic.ConstraintViolationException;
/** Unit test for {@link IdPAttribute} class. */
@@ -352,5 +354,12 @@ public class AttributeTest {
assertTrue(IdPAttribute.isInvalidId(null));
assertFalse(IdPAttribute.isInvalidId("JohnNapier"));
+ try {
+ new IdPAttribute("names with S");
+ fail("Expected Constraint Violation Exception");
+ } catch (final ConstraintViolationException e) {
+ //expected
+ }
+ new IdPAttribute("Check%for{deprecation");
}
}
diff --git a/idp-attribute-api/src/test/resources/logback-test.xml b/idp-attribute-api/src/test/resources/logback-test.xml
index c58a6d7..7f8b237 100644
--- a/idp-attribute-api/src/test/resources/logback-test.xml
+++ b/idp-attribute-api/src/test/resources/logback-test.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
- <logger name="net.shibboleth.idp.attribute" level="DEBUG"/>
+ <logger name="net.shibboleth.idp.attribute" level="TRACE"/>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
diff --git a/idp-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/AbstractAttributeDefinition.java b/idp-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/AbstractAttributeDefinition.java
index e96a120..38d707c 100644
--- a/idp-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/AbstractAttributeDefinition.java
+++ b/idp-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/AbstractAttributeDefinition.java
@@ -31,6 +31,8 @@ import net.shibboleth.idp.attribute.transcoding.AttributeTranscoderRegistry;
import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
import net.shibboleth.utilities.java.support.component.ComponentSupport;
+import net.shibboleth.utilities.java.support.primitive.DeprecationSupport;
+import net.shibboleth.utilities.java.support.primitive.DeprecationSupport.ObjectType;
import net.shibboleth.utilities.java.support.service.ServiceableComponent;
/** Base class for attribute definition resolver plugins. */
@@ -85,6 +87,14 @@ public abstract class AbstractAttributeDefinition extends AbstractResolverPlugin
throw new ComponentInitializationException(
"Invalid Attribute Definitions name (" + getId() + ")");
}
+ if (IdPAttribute.isDeprecatedId(getId())) {
+ DeprecationSupport.warnOnce(
+ ObjectType.CONFIGURATION,
+ "Use of Attributes definition with invalid characters",
+ getLogPrefix(),
+ null);
+ log.debug("{} : Deprecated characters in Attribute Defintion id.", getLogPrefix());
+ }
}
/**
diff --git a/idp-attribute-resolver-api/src/test/java/net/shibboleth/idp/attribute/resolver/AbstractAttributeDefinitionTest.java b/idp-attribute-resolver-api/src/test/java/net/shibboleth/idp/attribute/resolver/AbstractAttributeDefinitionTest.java
index 3d17ff8..ecf5796 100644
--- a/idp-attribute-resolver-api/src/test/java/net/shibboleth/idp/attribute/resolver/AbstractAttributeDefinitionTest.java
+++ b/idp-attribute-resolver-api/src/test/java/net/shibboleth/idp/attribute/resolver/AbstractAttributeDefinitionTest.java
@@ -120,6 +120,10 @@ public class AbstractAttributeDefinitionTest {
testInvalidName(new MockAttributeDefinition("Name With Space", (IdPAttribute) null));
testInvalidName(new MockAttributeDefinition("Name\rWith\tnonprinters", (IdPAttribute) null));
}
+
+ @Test public void deprecatedName() throws ComponentInitializationException {
+ new MockAttributeDefinition("NameWith\'Oddness", (IdPAttribute) null).initialize();
+ }
/**
* This class implements the minimal level of functionality and is meant only as a means of testing the abstract
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
More information about the commits
mailing list