|
Listing 5. BindingAssertionHandler
public class BindingAssertionHandler extends VerificationHandlerBase { /** Names of marker elements allowed in <TransportBinding>. */ public static final Set<String> TRANSPORT_BINDING_MARKERS = VerificationHandlerUtils.buildNameSet("IncludeTimestamp"); /** Names of marker elements allowed in ... or <SymmetricBinding>. */ public static final Set<String> ENCRYPTION_BINDING_MARKERS = VerificationHandlerUtils. buildNameSet("IncludeTimestamp|...|OnlySignEntireHeadersAndBody"); /** Actual element name. */ private final String m_elementName; /** Roles allowed for tokens. */ private final Set<String> m_tokenRoles; /** Token properties for binding. */ private final Map<String,TokenProperty> m_roleTokens; /** Marker assertions allowed in policy. */ private final Set<String> m_knownMarkers; /** Marker token assertions. */ private final Map<String,ExtensibleMarker> m_nameMarkers; ... protected BindingAssertionHandler(String name, Set<String> roles, Set<String> markers) { m_elementName = name; m_tokenRoles = roles; m_roleTokens = new HashMap<String,TokenProperty>(); m_knownMarkers = markers; m_nameMarkers = new HashMap<String,ExtensibleMarker>(); } ... public void addMarker(ExtensibleMarker marker, ValidationContext vctx) { String name = marker.getName(); if (m_knownMarkers.contains(name)) { // generate warning for duplicate assertion VerificationHandlerUtils.checkRepeat(marker, m_nameMarkers, vctx); } else { vctx.reportError("Assertion not allowed as child of sp:" + m_elementName, marker); } } public void addGeneral(AssertionBase asser, ValidationContext vctx) { if (asser instanceof TokenProperty) { TokenProperty token = (TokenProperty)asser; String name = token.getName(); if (m_tokenRoles.contains(name)) { TokenProperty prior = m_roleTokens.get(name); if (prior == null) { m_roleTokens.put(name, token); } else { vctx.reportError("Duplicate token ", asser); } } else { vctx.reportError("Token not allowed as child of sp:" + m_elementName, asser); } } else if (asser instanceof AlgorithmSuite) { ... } else { vctx.reportError("Assertion not allowed as child of sp:" + m_elementName, asser); } } public boolean complete(ValidationContext vctx) { if (m_algorithmSuite == null) { vctx.reportError("Missing required sp:AlgorithmSuite property", this); return false; } else { return true; } }} |
|