[java-identity-provider] 01/03: IDP-1472 Centralized methods for invalid and deprecated Method Names.

Rod Widdowson rdw at steadingsoftware.com
Thu Jun 27 06:44:11 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=a2b4b533bf8c3ce55f6501fe9c4d95bcd276a7e8

commit a2b4b533bf8c3ce55f6501fe9c4d95bcd276a7e8
Author: Rod Widdowson <rdw at steadingsoftware.com>
AuthorDate: Wed Jun 26 16:45:17 2019 +0100

    IDP-1472  Centralized methods for invalid and deprecated Method Names.
    
    https://issues.shibboleth.net/jira/browse/IDP-1472
---
 .../net/shibboleth/idp/attribute/IdPAttribute.java | 26 +++++++++++++++++++++-
 .../shibboleth/idp/attribute/AttributeTest.java    | 22 ++++++++++++++++++
 2 files changed, 47 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 87b5257..8906a0b 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
@@ -23,6 +23,8 @@ import java.util.List;
 import java.util.Locale;
 import java.util.Map;
 import java.util.Map.Entry;
+import java.util.function.Predicate;
+import java.util.regex.Pattern;
 import java.util.stream.Collectors;
 
 import javax.annotation.Nonnull;
@@ -53,6 +55,9 @@ import net.shibboleth.utilities.java.support.primitive.StringSupport;
 @NotThreadSafe
 public class IdPAttribute implements Comparable<IdPAttribute>, Cloneable {
     
+    /** Value for testing illegal name. */
+    private static final Predicate<String> SPACE_CONTAINING = Pattern.compile("\\S*").asMatchPredicate();
+    
     /** ID of this attribute. */
     @Nonnull private final String id;
 
@@ -64,7 +69,7 @@ public class IdPAttribute implements Comparable<IdPAttribute>, Cloneable {
 
     /** Values for this attribute. */
     @Nonnull private List<IdPAttributeValue> values;
-
+    
     /**
      * Constructor.
      * 
@@ -81,6 +86,25 @@ public class IdPAttribute implements Comparable<IdPAttribute>, Cloneable {
         values = Collections.emptyList();
     }
 
+    /** Centralized method to police deprecated Identifiers.
+     * @param id what to test
+     * @return whether the name is currently deprecated. 
+     */
+    public static boolean isDeprecatedId(@Nonnull @NotEmpty final String id) {
+        return id.indexOf('\'') >= 0 ||
+                id.indexOf('%') >= 0 ||
+                id.indexOf('{') >= 0 ||
+                id.indexOf('}') >= 0;
+    }
+    
+    /** Centralized method to police invalid Identifiers.
+     * @param id what to test
+     * @return whether the name is disallowed. 
+     */
+    public static boolean isInvalidId(@Nullable final String id) {
+       return null == StringSupport.trimOrNull(id) || !SPACE_CONTAINING.test(id);
+    }
+    
     /**
      * Gets the unique ID of the attribute. This ID need not be related to any protocol-specific attribute identifiers.
      * 
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 814e321..a199428 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
@@ -17,6 +17,9 @@
 
 package net.shibboleth.idp.attribute;
 
+import static org.testng.Assert.assertFalse;
+import static org.testng.Assert.assertTrue;
+
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashMap;
@@ -331,4 +334,23 @@ public class AttributeTest {
         attrib.setDisplayNames(Collections.singletonMap(new Locale("en"), "Name"));
         attrib.toString();
     }
+    
+    @Test public void names() {
+        assertTrue(IdPAttribute.isDeprecatedId("%"));
+        assertTrue(IdPAttribute.isDeprecatedId("elepha{nt"));
+        assertTrue(IdPAttribute.isDeprecatedId("IAmtheWalru}"));
+        assertTrue(IdPAttribute.isDeprecatedId("JohnHenryBonham%"));
+        assertTrue(IdPAttribute.isDeprecatedId("Now\'StheTImeForallgoodmen"));
+        assertFalse(IdPAttribute.isDeprecatedId("JamesClarkNaxwell"));
+        
+        assertTrue(IdPAttribute.isInvalidId("spaces in names"));
+        assertTrue(IdPAttribute.isInvalidId("\ttabs\tinnames"));
+        assertTrue(IdPAttribute.isInvalidId("Others\rInnames"));
+        assertTrue(IdPAttribute.isInvalidId("Others\nInnames"));
+        assertTrue(IdPAttribute.isInvalidId("  "));
+        assertTrue(IdPAttribute.isInvalidId(""));
+        assertTrue(IdPAttribute.isInvalidId(null));
+        assertFalse(IdPAttribute.isInvalidId("JohnNapier"));
+        
+    }
 }

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the commits mailing list