[java-metadata-aggregator] branch main updated: Refactor entity name prefixing; improve SAMLStringElementCheckingStage
Ian Young
ian at iay.org.uk
Wed Apr 5 15:12:28 UTC 2023
This is an automated email from the git hooks/post-receive script.
iay pushed a commit to branch main
in repository java-metadata-aggregator.
View the commit online:
http://git.shibboleth.net/view/?p=java-metadata-aggregator.git;a=commit;h=12b0b4ae7b23c2ecc463b52bc3510a98ed6fec8a
The following commit(s) were added to refs/heads/main by this push:
new 12b0b4a Refactor entity name prefixing; improve SAMLStringElementCheckingStage
12b0b4a is described below
commit 12b0b4ae7b23c2ecc463b52bc3510a98ed6fec8a
Author: Ian Young <ian at iay.org.uk>
AuthorDate: Wed Apr 5 16:11:41 2023 +0100
Refactor entity name prefixing; improve SAMLStringElementCheckingStage
---
.../metadata/dom/AbstractDOMTraversalStage.java | 2 +-
.../dom/saml/AbstractSAMLTraversalStage.java | 40 ++--------------------
.../dom/saml/SAMLStringElementCheckingStage.java | 30 +++++-----------
.../shibboleth/metadata/dom/saml/SAMLSupport.java | 39 +++++++++++++++++++++
4 files changed, 51 insertions(+), 60 deletions(-)
diff --git a/mda-framework/src/main/java/net/shibboleth/metadata/dom/AbstractDOMTraversalStage.java b/mda-framework/src/main/java/net/shibboleth/metadata/dom/AbstractDOMTraversalStage.java
index 9196d42..cdc3761 100644
--- a/mda-framework/src/main/java/net/shibboleth/metadata/dom/AbstractDOMTraversalStage.java
+++ b/mda-framework/src/main/java/net/shibboleth/metadata/dom/AbstractDOMTraversalStage.java
@@ -129,7 +129,7 @@ public abstract class AbstractDOMTraversalStage<C extends DOMTraversalContext>
* @param element {@link Element} forming the context for the prefix
* @return a prefix for the error message
*/
- protected String errorPrefix(@Nonnull final Element element) {
+ protected @Nonnull String errorPrefix(@Nonnull final Element element) {
return "";
}
diff --git a/mda-framework/src/main/java/net/shibboleth/metadata/dom/saml/AbstractSAMLTraversalStage.java b/mda-framework/src/main/java/net/shibboleth/metadata/dom/saml/AbstractSAMLTraversalStage.java
index 498cff2..6bd7893 100644
--- a/mda-framework/src/main/java/net/shibboleth/metadata/dom/saml/AbstractSAMLTraversalStage.java
+++ b/mda-framework/src/main/java/net/shibboleth/metadata/dom/saml/AbstractSAMLTraversalStage.java
@@ -18,12 +18,9 @@
package net.shibboleth.metadata.dom.saml;
import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
import javax.annotation.concurrent.ThreadSafe;
-import org.w3c.dom.Attr;
import org.w3c.dom.Element;
-import org.w3c.dom.Node;
import net.shibboleth.metadata.dom.AbstractDOMTraversalStage;
import net.shibboleth.metadata.dom.DOMTraversalContext;
@@ -49,42 +46,9 @@ import net.shibboleth.metadata.dom.SimpleDOMTraversalContext;
public abstract class AbstractSAMLTraversalStage <C extends DOMTraversalContext>
extends AbstractDOMTraversalStage<C> {
- /**
- * Returns the {@link Element} representing the EntityDescriptor which is the
- * closest-containing ancestor of the given element.
- *
- * @param element {@link Element} to locate the ancestor Entity of.
- * @return ancestor EntityDescriptor {@link Element}, or null.
- */
- private @Nullable Element ancestorEntity(@Nonnull final Element element) {
- for (Node e = element; e != null && e.getNodeType() == Node.ELEMENT_NODE; e = e.getParentNode()) {
- if (SAMLMetadataSupport.isEntityDescriptor((Element)e)) {
- return (Element)e;
- }
- }
- return null;
- }
-
- /**
- * Computes a prefix to be put in front of the message in {@link #addError}.
- *
- * @param element {@link Element} forming the context for the prefix
- * @return a prefix for the error message
- */
@Override
- protected String errorPrefix(@Nonnull final Element element) {
- final @Nullable Element entity = ancestorEntity(element);
- if (entity != null) {
- final Attr id = entity.getAttributeNode("ID");
- if (id != null) {
- return id.getTextContent() + ": ";
- }
- final Attr entityID = entity.getAttributeNode("entityID");
- if (entityID != null) {
- return entityID.getTextContent() + ": ";
- }
- }
- return "";
+ protected @Nonnull String errorPrefix(@Nonnull final Element element) {
+ return SAMLSupport.errorPrefix(element);
}
}
diff --git a/mda-framework/src/main/java/net/shibboleth/metadata/dom/saml/SAMLStringElementCheckingStage.java b/mda-framework/src/main/java/net/shibboleth/metadata/dom/saml/SAMLStringElementCheckingStage.java
index bbad88a..522eca1 100644
--- a/mda-framework/src/main/java/net/shibboleth/metadata/dom/saml/SAMLStringElementCheckingStage.java
+++ b/mda-framework/src/main/java/net/shibboleth/metadata/dom/saml/SAMLStringElementCheckingStage.java
@@ -23,13 +23,13 @@ import java.util.regex.Pattern;
import javax.annotation.Nonnull;
import javax.annotation.concurrent.ThreadSafe;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+
import net.shibboleth.metadata.dom.AbstractElementVisitingStage;
import net.shibboleth.metadata.dom.DOMTraversalContext;
import net.shibboleth.shared.xml.QNameSupport;
-import org.w3c.dom.Element;
-import org.w3c.dom.Node;
-
/**
* A Stage which checks the text content of the named elements to verify that
* they meet the constraints of SAML string values.
@@ -42,22 +42,6 @@ public class SAMLStringElementCheckingStage extends AbstractElementVisitingStage
/** Regular expression matching a string which contains no non-whitespace characters. */
private static final Pattern ALL_WHITE_SPACE_PATTERN = Pattern.compile("^[ \\t\\r\\n\\x85\\u2028]*$");
- /**
- * Returns the {@link Element} representing the EntityDescriptor which is the
- * closest-containing ancestor of the given element.
- *
- * @param element {@link Element} to locate the ancestor Entity of.
- * @return ancestor EntityDescriptor {@link Element}, or null.
- */
- private Element ancestorEntity(@Nonnull final Element element) {
- for (Element e = element; e != null; e = (Element) e.getParentNode()) {
- if (SAMLMetadataSupport.isEntityDescriptor(e)) {
- return e;
- }
- }
- return null;
- }
-
/**
* Check that the string value is appropriate.
*
@@ -73,16 +57,20 @@ public class SAMLStringElementCheckingStage extends AbstractElementVisitingStage
return matcher.matches();
}
+ @Override
+ protected @Nonnull String errorPrefix(@Nonnull final Element element) {
+ return SAMLSupport.errorPrefix(element);
+ }
+
@Override
protected void visit(@Nonnull final Element e, @Nonnull final DOMTraversalContext context) {
if (match(e)) {
final StringBuilder b = new StringBuilder("element ");
b.append(QNameSupport.getNodeQName(e));
b.append(" must contain at least one non-whitespace character");
- final Element entity = ancestorEntity(e);
final var message = b.toString();
assert message != null;
- addError(context.getItem(), entity, message);
+ addError(context.getItem(), e, message);
}
}
diff --git a/mda-framework/src/main/java/net/shibboleth/metadata/dom/saml/SAMLSupport.java b/mda-framework/src/main/java/net/shibboleth/metadata/dom/saml/SAMLSupport.java
index 7e3567e..697e7f4 100644
--- a/mda-framework/src/main/java/net/shibboleth/metadata/dom/saml/SAMLSupport.java
+++ b/mda-framework/src/main/java/net/shibboleth/metadata/dom/saml/SAMLSupport.java
@@ -18,11 +18,13 @@
package net.shibboleth.metadata.dom.saml;
import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
import javax.annotation.concurrent.ThreadSafe;
import javax.xml.namespace.QName;
import org.w3c.dom.Attr;
import org.w3c.dom.Element;
+import org.w3c.dom.Node;
import net.shibboleth.metadata.dom.Container;
import net.shibboleth.metadata.dom.ElementMaker;
@@ -74,6 +76,43 @@ public final class SAMLSupport {
private SAMLSupport() {
}
+ /**
+ * Returns the {@link Element} representing the EntityDescriptor which is the
+ * closest-containing ancestor of the given element.
+ *
+ * @param element {@link Element} to locate the ancestor Entity of.
+ * @return ancestor EntityDescriptor {@link Element}, or null.
+ */
+ private static @Nullable Element ancestorEntity(@Nonnull final Element element) {
+ for (Node e = element; e != null && e.getNodeType() == Node.ELEMENT_NODE; e = e.getParentNode()) {
+ if (SAMLMetadataSupport.isEntityDescriptor((Element)e)) {
+ return (Element)e;
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Computes an entity-specific prefix to be put in front of a message.
+ *
+ * @param element {@link Element} forming the context for the prefix
+ * @return a prefix for the error message
+ */
+ public static @Nonnull String errorPrefix(@Nonnull final Element element) {
+ final @Nullable Element entity = ancestorEntity(element);
+ if (entity != null) {
+ final Attr id = entity.getAttributeNode("ID");
+ if (id != null) {
+ return id.getTextContent() + ": ";
+ }
+ final Attr entityID = entity.getAttributeNode("entityID");
+ if (entityID != null) {
+ return entityID.getTextContent() + ": ";
+ }
+ }
+ return "";
+ }
+
/**
* Extract an <code>Attribute</code> element's <code>NameFormat</code>, applying the
* SAML standard's specified default if the XML attribute is not present.
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
More information about the commits
mailing list