[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