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.wss4j.policy.SP11Constants;
24 import org.apache.wss4j.policy.SP13Constants;
25 import org.apache.wss4j.policy.SPConstants;
26 import org.apache.wss4j.policy.SPUtils;
27 import org.apache.wss4j.policy.model.Attachments;
28 import org.apache.wss4j.policy.model.Header;
29 import org.apache.wss4j.policy.model.SignedParts;
30 import org.w3c.dom.Element;
31
32 import javax.xml.namespace.QName;
33 import java.util.List;
34
35 public class SignedPartsBuilder extends RequiredPartsBuilder {
36
37 @Override
38 public Assertion build(Element element, AssertionBuilderFactory factory) throws IllegalArgumentException {
39
40 final SPConstants.SPVersion spVersion = SPConstants.SPVersion.getSPVersion(element.getNamespaceURI());
41 boolean body = SPUtils.hasChildElementWithName(element, spVersion.getSPConstants().getBody());
42 final List<Header> headers = getHeaders(element, true, spVersion);
43 final Attachments attachments = getAttachments(element, spVersion);
44 final boolean signAllHeaders = !SPUtils.hasChildElements(element);
45 body |= signAllHeaders;
46 SignedParts signedParts = new SignedParts(spVersion, body, attachments, headers, signAllHeaders);
47 signedParts.setOptional(SPUtils.isOptional(element));
48 signedParts.setIgnorable(SPUtils.isIgnorable(element));
49
50 return signedParts;
51 }
52
53 protected Attachments getAttachments(Element element, SPConstants.SPVersion spVersion) {
54 Element child = SPUtils.getFirstChildElement(element);
55 while (child != null) {
56 if (spVersion.getSPConstants().getAttachments().getLocalPart().equals(child.getLocalName())
57 && spVersion.getSPConstants().getAttachments().getNamespaceURI().equals(child.getNamespaceURI())) {
58 boolean contentSignatureTransform =
59 SPUtils.hasChildElementWithName(child, spVersion.getSPConstants().getContentSignatureTransform());
60 QName completeSigTransform =
61 spVersion.getSPConstants().getAttachmentCompleteSignatureTransform();
62 boolean attachmentCompleteSignatureTransform =
63 SPUtils.hasChildElementWithName(child, completeSigTransform);
64 return new Attachments(spVersion, contentSignatureTransform, attachmentCompleteSignatureTransform);
65 }
66 child = SPUtils.getNextSiblingElement(child);
67 }
68 return null;
69 }
70
71 @Override
72 public QName[] getKnownElements() {
73 return new QName[]{SP13Constants.SIGNED_PARTS, SP11Constants.SIGNED_PARTS};
74 }
75 }