1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package edu.internet2.middleware.shibboleth.common.config.attribute.resolver.attributeDefinition;
18
19 import java.io.FileInputStream;
20 import java.io.IOException;
21 import java.util.List;
22 import java.util.Map;
23
24 import javax.xml.namespace.QName;
25
26 import org.opensaml.xml.util.DatatypeHelper;
27 import org.slf4j.Logger;
28 import org.slf4j.LoggerFactory;
29 import org.slf4j.helpers.MessageFormatter;
30 import org.springframework.beans.factory.BeanCreationException;
31 import org.springframework.beans.factory.support.BeanDefinitionBuilder;
32 import org.springframework.beans.factory.xml.ParserContext;
33 import org.w3c.dom.Element;
34
35
36
37
38 public class ScriptedAttributeDefinitionBeanDefinitionParser extends BaseAttributeDefinitionBeanDefinitionParser {
39
40
41 public static final QName TYPE_NAME = new QName(AttributeDefinitionNamespaceHandler.NAMESPACE, "Script");
42
43
44 private final Logger log = LoggerFactory.getLogger(ScriptedAttributeDefinitionBeanDefinitionParser.class);
45
46
47 protected Class getBeanClass(Element arg0) {
48 return ScriptedAttributeDefinitionFactoryBean.class;
49 }
50
51
52 protected void doParse(String pluginId, Element pluginConfig, Map<QName, List<Element>> pluginConfigChildren,
53 BeanDefinitionBuilder pluginBuilder, ParserContext parserContext) {
54 super.doParse(pluginId, pluginConfig, pluginConfigChildren, pluginBuilder, parserContext);
55
56 String scriptLanguage = "javascript";
57 if (pluginConfig.hasAttributeNS(null, "language")) {
58 scriptLanguage = pluginConfig.getAttributeNS(null, "language");
59 }
60 log.debug("Attribute definition {} scripting language: {}", pluginId, scriptLanguage);
61 pluginBuilder.addPropertyValue("language", scriptLanguage);
62
63 String script = null;
64 List<Element> scriptElem = pluginConfigChildren.get(new QName(AttributeDefinitionNamespaceHandler.NAMESPACE,
65 "Script"));
66 if (scriptElem != null && scriptElem.size() > 0) {
67 script = scriptElem.get(0).getTextContent();
68 } else {
69 List<Element> scriptFileElem = pluginConfigChildren.get(new QName(
70 AttributeDefinitionNamespaceHandler.NAMESPACE, "ScriptFile"));
71 if (scriptFileElem != null && scriptFileElem.size() > 0) {
72 String scriptFile = scriptFileElem.get(0).getTextContent();
73 try {
74 script = DatatypeHelper.inputstreamToString(new FileInputStream(scriptFile), null);
75 } catch (IOException e) {
76 throw new BeanCreationException(MessageFormatter.format("Unable to read script file '{}'",
77 scriptFile), e);
78 }
79 }
80 }
81
82 if (script == null) {
83 throw new BeanCreationException("No script specified for this attribute definition");
84 }
85 log.debug("Attribute definition {} script: {}", pluginId, script);
86 pluginBuilder.addPropertyValue("script", script);
87 }
88 }