1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package edu.internet2.middleware.shibboleth.common.config.metadata;
19
20 import java.util.List;
21
22 import org.opensaml.xml.util.DatatypeHelper;
23 import org.opensaml.xml.util.XMLHelper;
24 import org.slf4j.Logger;
25 import org.slf4j.LoggerFactory;
26 import org.springframework.beans.factory.support.BeanDefinitionBuilder;
27 import org.springframework.beans.factory.xml.AbstractSingleBeanDefinitionParser;
28 import org.springframework.beans.factory.xml.ParserContext;
29 import org.w3c.dom.Element;
30
31 import edu.internet2.middleware.shibboleth.common.config.SpringConfigurationUtils;
32
33
34 public abstract class BaseMetadataProviderBeanDefinitionParser extends AbstractSingleBeanDefinitionParser {
35
36
37 private final Logger log = LoggerFactory.getLogger(BaseMetadataProviderBeanDefinitionParser.class);
38
39
40 protected void doParse(Element config, ParserContext parserContext, BeanDefinitionBuilder builder) {
41 String id = getProviderId(config);
42 log.debug("Parsing configuration for '{}' metadata provider with ID: {}", XMLHelper.getXSIType(config)
43 .getLocalPart(), id);
44
45 boolean requireValidMetadata = getRequireValidMetadata(config);
46 log.debug("Metadata provider requires valid metadata: {}", requireValidMetadata);
47 builder.addPropertyValue("requireValidMetadata", requireValidMetadata);
48
49 List<Element> childElems = XMLHelper.getChildElementsByTagNameNS(config, MetadataNamespaceHandler.NAMESPACE,
50 "MetadataFilter");
51 if (childElems.size() > 0) {
52 builder.addPropertyValue("metadataFilter", SpringConfigurationUtils.parseInnerCustomElement(
53 (Element) childElems.get(0), parserContext));
54 }
55 }
56
57
58
59
60
61
62
63
64 protected boolean getRequireValidMetadata(Element config) {
65 boolean requireValidMetadata = true;
66
67 if (config.hasAttributeNS(null, "maintainExpiredMetadata")) {
68 boolean maintainedExpiredMetadata = XMLHelper.getAttributeValueAsBoolean(config.getAttributeNodeNS(null,
69 "maintainExpiredMetadata"));
70 requireValidMetadata = !maintainedExpiredMetadata;
71 log.warn("Use of metadata provider configuration attribute 'maintainExpiredMetadata' is deprecated. Use requireValidMetadata=\"{}\" instead.",
72 requireValidMetadata);
73 }
74
75 if (config.hasAttributeNS(null, "requireValidMetadata")) {
76 requireValidMetadata = XMLHelper.getAttributeValueAsBoolean(config.getAttributeNodeNS(null,
77 "requireValidMetadata"));
78 }
79
80 return requireValidMetadata;
81 }
82
83
84
85
86
87
88
89
90 protected String getProviderId(Element config) {
91 return DatatypeHelper.safeTrimOrNullString(config.getAttributeNS(null, "id"));
92 }
93 }