Push SAML Attribute namespace configuration into the resolver. (Needed for proper...
authorwassa <wassa@ab3bd59b-922f-494d-bb5f-6f0a3c29deca>
Fri, 20 May 2005 04:40:55 +0000 (04:40 +0000)
committerwassa <wassa@ab3bd59b-922f-494d-bb5f-6f0a3c29deca>
Fri, 20 May 2005 04:40:55 +0000 (04:40 +0000)
git-svn-id: https://subversion.switch.ch/svn/shibboleth/java-idp/trunk@1557 ab3bd59b-922f-494d-bb5f-6f0a3c29deca

15 files changed:
src/edu/internet2/middleware/shibboleth/aa/AAAttribute.java
src/edu/internet2/middleware/shibboleth/aa/attrresolv/AttributeResolver.java
src/edu/internet2/middleware/shibboleth/aa/attrresolv/ResolverAttribute.java
src/edu/internet2/middleware/shibboleth/aa/attrresolv/provider/BaseAttributeDefinition.java
src/edu/internet2/middleware/shibboleth/aa/attrresolv/provider/CompositeAttributeDefinition.java
src/edu/internet2/middleware/shibboleth/aa/attrresolv/provider/CustomAttributeDefinition.java
src/edu/internet2/middleware/shibboleth/aa/attrresolv/provider/FormattedAttributeDefinition.java
src/edu/internet2/middleware/shibboleth/aa/attrresolv/provider/MappedAttributeDefinition.java
src/edu/internet2/middleware/shibboleth/aa/attrresolv/provider/PersistentIDAttributeDefinition.java
src/edu/internet2/middleware/shibboleth/aa/attrresolv/provider/RegExAttributeDefinition.java
src/edu/internet2/middleware/shibboleth/aa/attrresolv/provider/SAML2PersistentID.java
src/edu/internet2/middleware/shibboleth/aa/attrresolv/provider/SimpleAttributeDefinition.java
src/edu/internet2/middleware/shibboleth/aa/attrresolv/provider/SimpleBaseAttributeDefinition.java
src/edu/internet2/middleware/shibboleth/idp/provider/E_AuthSSOHandler.java
src/schemas/shibboleth-resolver-1.0.xsd

index 5ce016b..993da92 100644 (file)
@@ -54,8 +54,6 @@ public class AAAttribute extends SAMLAttribute implements ResolverAttribute, Arp
        private static Logger log = Logger.getLogger(AAAttribute.class.getName());
        private boolean resolved = false;
 
-       public final static String SHIB_ATTRIBUTE_NAMESPACE_URI = "urn:mace:shibboleth:1.0:attributeNamespace:uri";
-
        /** Default lifetime, in seconds * */
        private static long defaultLifetime = 1800; // 30 minutes
        private ValueHandler valueHandler = new StringValueHandler();
@@ -72,7 +70,7 @@ public class AAAttribute extends SAMLAttribute implements ResolverAttribute, Arp
         */
        public AAAttribute(String name, boolean legacyCompat) throws SAMLException {
 
-               super(name, SHIB_ATTRIBUTE_NAMESPACE_URI, legacyCompat ? new QName("urn:mace:shibboleth:1.0",
+               super(name, null, legacyCompat ? new QName("urn:mace:shibboleth:1.0",
                                "AttributeValueType") : null, defaultLifetime, null);
        }
 
@@ -86,7 +84,7 @@ public class AAAttribute extends SAMLAttribute implements ResolverAttribute, Arp
         */
        public AAAttribute(String name) throws SAMLException {
 
-               super(name, SHIB_ATTRIBUTE_NAMESPACE_URI, null, defaultLifetime, null);
+               super(name, null, null, defaultLifetime, null);
        }
 
        public AAAttribute(String name, Object[] values) throws SAMLException {
index 55afef0..9f769e7 100644 (file)
@@ -568,6 +568,10 @@ public class AttributeResolver {
                public void setLifetime(long lifetime) {
 
                }
+               
+               public void setNamespace(String namespace) {
+                       
+               }
 
                public long getLifetime() {
 
index 8c23cac..b8902d5 100644 (file)
@@ -1,52 +1,28 @@
-/* 
- * The Shibboleth License, Version 1. 
- * Copyright (c) 2002 
- * University Corporation for Advanced Internet Development, Inc. 
- * All rights reserved
- * 
- * 
- * Redistribution and use in source and binary forms, with or without 
- * modification, are permitted provided that the following conditions are met:
- * 
- * Redistributions of source code must retain the above copyright notice, this 
- * list of conditions and the following disclaimer.
- * 
- * Redistributions in binary form must reproduce the above copyright notice, 
- * this list of conditions and the following disclaimer in the documentation 
- * and/or other materials provided with the distribution, if any, must include 
- * the following acknowledgment: "This product includes software developed by 
- * the University Corporation for Advanced Internet Development 
- * <http://www.ucaid.edu>Internet2 Project. Alternately, this acknowledegement 
- * may appear in the software itself, if and wherever such third-party 
- * acknowledgments normally appear.
- * 
- * Neither the name of Shibboleth nor the names of its contributors, nor 
- * Internet2, nor the University Corporation for Advanced Internet Development, 
- * Inc., nor UCAID may be used to endorse or promote products derived from this 
- * software without specific prior written permission. For written permission, 
- * please contact shibboleth@shibboleth.org
- * 
- * Products derived from this software may not be called Shibboleth, Internet2, 
- * UCAID, or the University Corporation for Advanced Internet Development, nor 
- * may Shibboleth appear in their name, without prior written permission of the 
- * University Corporation for Advanced Internet Development.
- * 
- * 
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
- * AND WITH ALL FAULTS. ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A 
- * PARTICULAR PURPOSE, AND NON-INFRINGEMENT ARE DISCLAIMED AND THE ENTIRE RISK 
- * OF SATISFACTORY QUALITY, PERFORMANCE, ACCURACY, AND EFFORT IS WITH LICENSEE. 
- * IN NO EVENT SHALL THE COPYRIGHT OWNER, CONTRIBUTORS OR THE UNIVERSITY 
- * CORPORATION FOR ADVANCED INTERNET DEVELOPMENT, INC. BE LIABLE FOR ANY DIRECT, 
- * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+/*
+ * The Shibboleth License, Version 1. Copyright (c) 2002 University Corporation for Advanced Internet Development, Inc.
+ * All rights reserved Redistribution and use in source and binary forms, with or without modification, are permitted
+ * provided that the following conditions are met: Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer. Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials
+ * provided with the distribution, if any, must include the following acknowledgment: "This product includes software
+ * developed by the University Corporation for Advanced Internet Development <http://www.ucaid.edu>Internet2 Project.
+ * Alternately, this acknowledegement may appear in the software itself, if and wherever such third-party
+ * acknowledgments normally appear. Neither the name of Shibboleth nor the names of its contributors, nor Internet2, nor
+ * the University Corporation for Advanced Internet Development, Inc., nor UCAID may be used to endorse or promote
+ * products derived from this software without specific prior written permission. For written permission, please contact
+ * shibboleth@shibboleth.org Products derived from this software may not be called Shibboleth, Internet2, UCAID, or the
+ * University Corporation for Advanced Internet Development, nor may Shibboleth appear in their name, without prior
+ * written permission of the University Corporation for Advanced Internet Development. THIS SOFTWARE IS PROVIDED BY THE
+ * COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND WITH ALL FAULTS. ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT ARE
+ * DISCLAIMED AND THE ENTIRE RISK OF SATISFACTORY QUALITY, PERFORMANCE, ACCURACY, AND EFFORT IS WITH LICENSEE. IN NO
+ * EVENT SHALL THE COPYRIGHT OWNER, CONTRIBUTORS OR THE UNIVERSITY CORPORATION FOR ADVANCED INTERNET DEVELOPMENT, INC.
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
+
 package edu.internet2.middleware.shibboleth.aa.attrresolv;
 
 import java.util.Iterator;
@@ -70,22 +46,29 @@ public interface ResolverAttribute {
        /** This method signals that the attribute has been resolved by the Attribute Resolver. */
        public void setResolved();
 
-       /** 
+       /**
         * Resolves the attribute based on a previous resolution.
         * 
-        * @param attribute the previously resolved attribute
+        * @param attribute
+        *            the previously resolved attribute
         */
        public void resolveFromCached(ResolverAttribute attribute);
 
        /** Sets the time, in seconds, for which this attribute is valid. */
        public void setLifetime(long lifetime);
 
+       public void setNamespace(String namespace);
+
        /** Returns the time, in seconds, for which this attribute is valid. */
        public long getLifetime();
 
        public void addValue(Object value);
+
        public Iterator getValues();
+
        public boolean hasValues();
+
        public void registerValueHandler(ValueHandler handler);
+
        public ValueHandler getRegisteredValueHandler();
-}
+}
\ No newline at end of file
index 58341ff..317a4be 100644 (file)
@@ -1,52 +1,28 @@
-/* 
- * The Shibboleth License, Version 1. 
- * Copyright (c) 2002 
- * University Corporation for Advanced Internet Development, Inc. 
- * All rights reserved
- * 
- * 
- * Redistribution and use in source and binary forms, with or without 
- * modification, are permitted provided that the following conditions are met:
- * 
- * Redistributions of source code must retain the above copyright notice, this 
- * list of conditions and the following disclaimer.
- * 
- * Redistributions in binary form must reproduce the above copyright notice, 
- * this list of conditions and the following disclaimer in the documentation 
- * and/or other materials provided with the distribution, if any, must include 
- * the following acknowledgment: "This product includes software developed by 
- * the University Corporation for Advanced Internet Development 
- * <http://www.ucaid.edu>Internet2 Project. Alternately, this acknowledegement 
- * may appear in the software itself, if and wherever such third-party 
- * acknowledgments normally appear.
- * 
- * Neither the name of Shibboleth nor the names of its contributors, nor 
- * Internet2, nor the University Corporation for Advanced Internet Development, 
- * Inc., nor UCAID may be used to endorse or promote products derived from this 
- * software without specific prior written permission. For written permission, 
- * please contact shibboleth@shibboleth.org
- * 
- * Products derived from this software may not be called Shibboleth, Internet2, 
- * UCAID, or the University Corporation for Advanced Internet Development, nor 
- * may Shibboleth appear in their name, without prior written permission of the 
- * University Corporation for Advanced Internet Development.
- * 
- * 
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
- * AND WITH ALL FAULTS. ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A 
- * PARTICULAR PURPOSE, AND NON-INFRINGEMENT ARE DISCLAIMED AND THE ENTIRE RISK 
- * OF SATISFACTORY QUALITY, PERFORMANCE, ACCURACY, AND EFFORT IS WITH LICENSEE. 
- * IN NO EVENT SHALL THE COPYRIGHT OWNER, CONTRIBUTORS OR THE UNIVERSITY 
- * CORPORATION FOR ADVANCED INTERNET DEVELOPMENT, INC. BE LIABLE FOR ANY DIRECT, 
- * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+/*
+ * The Shibboleth License, Version 1. Copyright (c) 2002 University Corporation for Advanced Internet Development, Inc.
+ * All rights reserved Redistribution and use in source and binary forms, with or without modification, are permitted
+ * provided that the following conditions are met: Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer. Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials
+ * provided with the distribution, if any, must include the following acknowledgment: "This product includes software
+ * developed by the University Corporation for Advanced Internet Development <http://www.ucaid.edu>Internet2 Project.
+ * Alternately, this acknowledegement may appear in the software itself, if and wherever such third-party
+ * acknowledgments normally appear. Neither the name of Shibboleth nor the names of its contributors, nor Internet2, nor
+ * the University Corporation for Advanced Internet Development, Inc., nor UCAID may be used to endorse or promote
+ * products derived from this software without specific prior written permission. For written permission, please contact
+ * shibboleth@shibboleth.org Products derived from this software may not be called Shibboleth, Internet2, UCAID, or the
+ * University Corporation for Advanced Internet Development, nor may Shibboleth appear in their name, without prior
+ * written permission of the University Corporation for Advanced Internet Development. THIS SOFTWARE IS PROVIDED BY THE
+ * COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND WITH ALL FAULTS. ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT ARE
+ * DISCLAIMED AND THE ENTIRE RISK OF SATISFACTORY QUALITY, PERFORMANCE, ACCURACY, AND EFFORT IS WITH LICENSEE. IN NO
+ * EVENT SHALL THE COPYRIGHT OWNER, CONTRIBUTORS OR THE UNIVERSITY CORPORATION FOR ADVANCED INTERNET DEVELOPMENT, INC.
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
+
 package edu.internet2.middleware.shibboleth.aa.attrresolv.provider;
 
 import org.apache.log4j.Logger;
@@ -54,19 +30,22 @@ import org.w3c.dom.Element;
 
 import edu.internet2.middleware.shibboleth.aa.attrresolv.AttributeDefinitionPlugIn;
 import edu.internet2.middleware.shibboleth.aa.attrresolv.ResolutionPlugInException;
+import edu.internet2.middleware.shibboleth.aa.attrresolv.ResolverAttribute;
 
 /**
- * Base class for Attribute Definition PlugIns.  Provides basic functionality such as 
- * dependency mapping.  Subclasses must provide resolution logic.
+ * Base class for Attribute Definition PlugIns. Provides basic functionality such as dependency mapping. Subclasses must
+ * provide resolution logic.
  * 
  * @author Walter Hoehn (wassa@columbia.edu)
  */
 
 public abstract class BaseAttributeDefinition extends BaseResolutionPlugIn implements AttributeDefinitionPlugIn {
-       
+
        /** The time, in seconds, for which attribute created from this definition should be valid. */
        protected long lifeTime = -1;
-       
+       public final static String SHIB_ATTRIBUTE_NAMESPACE_URI = "urn:mace:shibboleth:1.0:attributeNamespace:uri";
+       protected String namespace = SHIB_ATTRIBUTE_NAMESPACE_URI;
+
        private static Logger log = Logger.getLogger(BaseAttributeDefinition.class.getName());
 
        protected BaseAttributeDefinition(Element e) throws ResolutionPlugInException {
@@ -82,5 +61,22 @@ public abstract class BaseAttributeDefinition extends BaseResolutionPlugIn imple
                                log.error("Bad value for attribute (lifeTime) for Attribute Definition (" + getId() + ").");
                        }
                }
+
+               String namespaceSpec = e.getAttribute("namespace");
+               if (namespaceSpec != null && !namespaceSpec.equals("")) {
+                       namespace = namespaceSpec;
+               }
+       }
+
+       /**
+        * Should be run by all sublcasses during resolution.
+        */
+       protected void standardProcessing(ResolverAttribute attr) {
+
+               if (lifeTime != -1) {
+                       attr.setLifetime(lifeTime);
+               }
+
+               attr.setNamespace(namespace);
        }
-}
+}
\ No newline at end of file
index a4df63e..3571110 100644 (file)
@@ -258,9 +258,8 @@ public class CompositeAttributeDefinition extends SimpleBaseAttributeDefinition
                                throw new ResolutionPlugInException(err.toString());
                        }
                }
-               if (lifeTime != -1) {
-                       attribute.setLifetime(lifeTime);
-               }
+
+               standardProcessing(attribute);
 
                if (valueHandler != null) {
                        attribute.registerValueHandler(valueHandler);
@@ -268,4 +267,4 @@ public class CompositeAttributeDefinition extends SimpleBaseAttributeDefinition
                attribute.setResolved();
        }
 
-}
+}
\ No newline at end of file
index 5c3a8db..ce77588 100644 (file)
@@ -45,6 +45,7 @@ public class CustomAttributeDefinition implements ResolutionPlugIn, AttributeDef
 
        private static Logger log = Logger.getLogger(CustomAttributeDefinition.class.getName());
        private AttributeDefinitionPlugIn custom;
+       private String namespace = BaseAttributeDefinition.SHIB_ATTRIBUTE_NAMESPACE_URI;
 
        /** The time, in seconds, for which attribute created from this definition should be valid. */
        protected long lifeTime = -1;
@@ -82,6 +83,11 @@ public class CustomAttributeDefinition implements ResolutionPlugIn, AttributeDef
                                log.error("Bad value for attribute (lifeTime) for Attribute Definition (" + getId() + ").");
                        }
                }
+
+               String namespaceSpec = e.getAttribute("namespace");
+               if (namespaceSpec != null && !namespaceSpec.equals("")) {
+                       namespace = namespaceSpec;
+               }
        }
 
        /**
@@ -96,6 +102,7 @@ public class CustomAttributeDefinition implements ResolutionPlugIn, AttributeDef
                if (lifeTime != -1) {
                        attribute.setLifetime(lifeTime);
                }
+               attribute.setNamespace(namespace);
        }
 
        /**
@@ -137,4 +144,4 @@ public class CustomAttributeDefinition implements ResolutionPlugIn, AttributeDef
 
                return custom.getPropagateErrors();
        }
-}
+}
\ No newline at end of file
index 883206f..fe264c6 100644 (file)
@@ -115,6 +115,8 @@ public class FormattedAttributeDefinition extends SimpleBaseAttributeDefinition
        public void resolve(ResolverAttribute attribute, Principal principal, String requester, String responder,
                        Dependencies depends) throws ResolutionPlugInException {
 
+               standardProcessing(attribute);
+
                // Resolve all dependencies to arrive at the source values (unformatted)
                Collection results = resolveDependencies(attribute, principal, requester, depends);
 
@@ -179,4 +181,4 @@ public class FormattedAttributeDefinition extends SimpleBaseAttributeDefinition
                }
        }
 
-}
+}
\ No newline at end of file
index 21d1dbf..1f1ce12 100644 (file)
@@ -65,13 +65,15 @@ import edu.internet2.middleware.shibboleth.aa.attrresolv.ResolverAttribute;
  *    
  *     
  *      
- *            &lt;ValueMap value=&quot;affiliate&quot;  keyset=&quot;guest, prospect[a-z ]*, friends&quot;                        /&gt;
- *            &lt;ValueMap value=&quot;alum&quot;       keyset=&quot;alum, alumni&quot;                                           /&gt;
- *            &lt;ValueMap value=&quot;employee&quot;   keyset=&quot;employee&quot;                                               /&gt;
- *            &lt;ValueMap value=&quot;faculty&quot;    keyset=&quot;faculty&quot;                                                /&gt;
- *            &lt;ValueMap value=&quot;member&quot;     keyset=&quot;student, faculty, admin[a-z ]*, [a-z ]*admin, employee&quot; /&gt;
- *            &lt;ValueMap value=&quot;staff&quot;      keyset=&quot;admin[a-z ]*, [a-z ]*admin&quot;                             /&gt;
- *            &lt;ValueMap value=&quot;student&quot;    keyset=&quot;student&quot;                                                /&gt;
+ *       
+ *             &lt;ValueMap value=&quot;affiliate&quot;  keyset=&quot;guest, prospect[a-z ]*, friends&quot;                        /&gt;
+ *             &lt;ValueMap value=&quot;alum&quot;       keyset=&quot;alum, alumni&quot;                                           /&gt;
+ *             &lt;ValueMap value=&quot;employee&quot;   keyset=&quot;employee&quot;                                               /&gt;
+ *             &lt;ValueMap value=&quot;faculty&quot;    keyset=&quot;faculty&quot;                                                /&gt;
+ *             &lt;ValueMap value=&quot;member&quot;     keyset=&quot;student, faculty, admin[a-z ]*, [a-z ]*admin, employee&quot; /&gt;
+ *             &lt;ValueMap value=&quot;staff&quot;      keyset=&quot;admin[a-z ]*, [a-z ]*admin&quot;                             /&gt;
+ *             &lt;ValueMap value=&quot;student&quot;    keyset=&quot;student&quot;                                                /&gt;
+ *        
  *       
  *      
  *     
@@ -157,6 +159,8 @@ public class MappedAttributeDefinition extends SimpleBaseAttributeDefinition imp
        public void resolve(ResolverAttribute attribute, Principal principal, String requester, String responder,
                        Dependencies depends) throws ResolutionPlugInException {
 
+               standardProcessing(attribute);
+
                // Resolve all dependencies to arrive at the source values (unformatted)
                Collection results = resolveDependencies(attribute, principal, requester, depends);
 
@@ -291,4 +295,4 @@ public class MappedAttributeDefinition extends SimpleBaseAttributeDefinition imp
                        valueSet.add(value);
                }
        }
-}
+}
\ No newline at end of file
index 791ed77..68c8c30 100644 (file)
@@ -240,9 +240,7 @@ public class PersistentIDAttributeDefinition extends BaseAttributeDefinition imp
                        return;
                }
 
-               if (lifeTime != -1) {
-                       attribute.setLifetime(lifeTime);
-               }
+               standardProcessing(attribute);
 
                // Hash the data together to produce the persistent ID.
                try {
@@ -269,4 +267,4 @@ public class PersistentIDAttributeDefinition extends BaseAttributeDefinition imp
                                (byte) 0x61, (byte) 0xEF};
                return Arrays.equals(defaultKey, salt);
        }
-}
+}
\ No newline at end of file
index ffc78cd..c5f2142 100644 (file)
@@ -119,6 +119,8 @@ public class RegExAttributeDefinition extends SimpleBaseAttributeDefinition impl
        public void resolve(ResolverAttribute attribute, Principal principal, String requester, String responder,
                        Dependencies depends) throws ResolutionPlugInException {
 
+               standardProcessing(attribute);
+
                // Resolve all dependencies to arrive at the source values (unformatted)
                Collection results = resolveDependencies(attribute, principal, requester, depends);
 
@@ -139,4 +141,4 @@ public class RegExAttributeDefinition extends SimpleBaseAttributeDefinition impl
                }
                attribute.setResolved();
        }
-}
+}
\ No newline at end of file
index 7db09d0..4682f09 100644 (file)
@@ -241,9 +241,7 @@ public class SAML2PersistentID extends BaseAttributeDefinition implements Attrib
                        return;
                }
 
-               if (lifeTime != -1) {
-                       attribute.setLifetime(lifeTime);
-               }
+               standardProcessing(attribute);
 
                // Hash the data together to produce the persistent ID.
                try {
@@ -334,4 +332,4 @@ public class SAML2PersistentID extends BaseAttributeDefinition implements Attrib
 
                }
        }
-}
+}
\ No newline at end of file
index a708802..8c94648 100644 (file)
@@ -159,9 +159,7 @@ public class SimpleAttributeDefinition extends SimpleBaseAttributeDefinition imp
                        results.addAll(Arrays.asList(getValuesFromAttributes(depends)));
                }
 
-               if (lifeTime != -1) {
-                       attribute.setLifetime(lifeTime);
-               }
+               standardProcessing(attribute);
 
                if (smartScope != null) {
                        attribute.registerValueHandler(new ScopedStringValueHandler(smartScope));
index 652c741..04f4de8 100644 (file)
@@ -110,6 +110,7 @@ abstract class SimpleBaseAttributeDefinition extends BaseAttributeDefinition imp
                        Dependencies depends) throws ResolutionPlugInException {
 
                log.debug("Resolving attribute: (" + getId() + ")");
+
                Set results = new LinkedHashSet();
                if (!connectorDependencyIds.isEmpty()) {
                        results.addAll(Arrays.asList(getValuesFromConnectors(depends)));
@@ -119,10 +120,6 @@ abstract class SimpleBaseAttributeDefinition extends BaseAttributeDefinition imp
                        results.addAll(Arrays.asList(getValuesFromAttributes(depends)));
                }
 
-               if (lifeTime != -1) {
-                       attribute.setLifetime(lifeTime);
-               }
-
                if (valueHandler != null) {
                        attribute.registerValueHandler(valueHandler);
                }
@@ -196,4 +193,4 @@ abstract class SimpleBaseAttributeDefinition extends BaseAttributeDefinition imp
                return value.toString();
        }
 
-}
+}
\ No newline at end of file
index cdf660d..e4bd29c 100644 (file)
@@ -75,6 +75,7 @@ public class E_AuthSSOHandler extends SSOHandler implements IdPProtocolHandler {
 
        private static Logger log = Logger.getLogger(E_AuthSSOHandler.class.getName());
        private final static String E_AUTH_NAMEID = "urn:oasis:names:tc:SAML:1.0:assertion#X509SubjectName";
+       private final static String E_AUTH_ATTR_NAMESPACE = "http://eauthentication.gsa.gov/federated/attribute";
        private String eAuthPortal = "http://eauth.firstgov.gov/service/select";
        private String eAuthError = "http://eauth.firstgov.gov/service/error";
        private String csid;
@@ -352,13 +353,11 @@ public class E_AuthSSOHandler extends SSOHandler implements IdPProtocolHandler {
                        log.error("The attribute resolver did not return a (commonName) attribute, "
                                        + " which is required for the E-Authentication profile.");
                        throw new SAMLException(SAMLException.RESPONDER, "General error processing request.");
-               } else {
-                       // This namespace is required by the eAuth profile
-                       commonName.setNamespace("http://eauthentication.gsa.gov/federated/attribute");
-                       // TODO Maybe the resolver should set this
+               } else if (!E_AUTH_ATTR_NAMESPACE.equals(commonName.getNamespace())) {
+                       log.warn("The (commonName) attribute seems to have an incorrect namespace set.  It should be ("
+                                       + E_AUTH_ATTR_NAMESPACE + "), but it is currently set to " + commonName.getNamespace() + ").");
                }
-               writeable.add(new SAMLAttribute("csid", "http://eauthentication.gsa.gov/federated/attribute", null, 0, Arrays
-                               .asList(new String[]{csid})));
+               writeable.add(new SAMLAttribute("csid", E_AUTH_ATTR_NAMESPACE, null, 0, Arrays.asList(new String[]{csid})));
 
                // Pull assurance level from the resolver, if it is available
                // If it isn't, use the handler default
index 5e40fd3..a39a5a0 100644 (file)
                <xs:complexContent>
                        <xs:extension base="resolver:BaseResolutionPlugIn">
                                <xs:attribute name="lifeTime" type="xs:long" use="optional"/>
+                               <xs:attribute name="namespace" type="xs:string" use="optional"/>
                        </xs:extension>
                </xs:complexContent>
        </xs:complexType>