1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.wss4j.policy.builders;
20
21 import org.apache.neethi.Assertion;
22 import org.apache.neethi.AssertionBuilderFactory;
23 import org.apache.neethi.Policy;
24 import org.apache.neethi.builders.AssertionBuilder;
25 import org.apache.wss4j.policy.SP11Constants;
26 import org.apache.wss4j.policy.SP13Constants;
27 import org.apache.wss4j.policy.SPConstants;
28 import org.apache.wss4j.policy.SPUtils;
29 import org.apache.wss4j.policy.model.HttpsToken;
30 import org.w3c.dom.Element;
31
32 import javax.xml.namespace.QName;
33
34 public class HttpsTokenBuilder implements AssertionBuilder<Element> {
35
36 @Override
37 public Assertion build(Element element, AssertionBuilderFactory factory) throws IllegalArgumentException {
38
39 final SPConstants.SPVersion spVersion = SPConstants.SPVersion.getSPVersion(element.getNamespaceURI());
40 final String includeTokenValue = SPUtils.getAttribute(element, spVersion.getSPConstants().getIncludeToken());
41 final Element issuer = SPUtils.getFirstChildElement(element, spVersion.getSPConstants().getIssuer());
42 if (spVersion == SPConstants.SPVersion.SP11 && issuer != null) {
43 throw new IllegalArgumentException(SPConstants.ERR_INVALID_POLICY);
44 }
45 final String issuerName = SPUtils.getFirstChildElementText(element, spVersion.getSPConstants().getIssuerName());
46 if (spVersion == SPConstants.SPVersion.SP11 && issuerName != null) {
47 throw new IllegalArgumentException(SPConstants.ERR_INVALID_POLICY);
48 }
49 final Element claims = SPUtils.getFirstChildElement(element, spVersion.getSPConstants().getClaims());
50 final Element nestedPolicyElement = SPUtils.getFirstPolicyChildElement(element);
51
52 Policy nestedPolicy = null;
53 if (nestedPolicyElement == null) {
54 nestedPolicy = new Policy();
55 } else {
56 nestedPolicy = factory.getPolicyEngine().getPolicy(nestedPolicyElement);
57 }
58
59 boolean requireClientCert = false;
60 if (spVersion == SPConstants.SPVersion.SP11) {
61 String attr =
62 SPUtils.getAttribute(element, new QName(null, SPConstants.REQUIRE_CLIENT_CERTIFICATE));
63 if ("true".equals(attr)) {
64 requireClientCert = true;
65 }
66 }
67
68 HttpsToken httpsToken = new HttpsToken(
69 spVersion,
70 spVersion.getSPConstants().getInclusionFromAttributeValue(includeTokenValue),
71 issuer,
72 issuerName,
73 claims,
74 nestedPolicy,
75 requireClientCert
76 );
77
78 httpsToken.setOptional(SPUtils.isOptional(element));
79 httpsToken.setIgnorable(SPUtils.isIgnorable(element));
80 return httpsToken;
81 }
82
83 @Override
84 public QName[] getKnownElements() {
85 return new QName[]{SP13Constants.HTTPS_TOKEN, SP11Constants.HTTPS_TOKEN};
86 }
87 }