View Javadoc
1   /**
2    * Licensed to the Apache Software Foundation (ASF) under one
3    * or more contributor license agreements. See the NOTICE file
4    * distributed with this work for additional information
5    * regarding copyright ownership. The ASF licenses this file
6    * to you under the Apache License, Version 2.0 (the
7    * "License"); you may not use this file except in compliance
8    * with the License. You may obtain a copy of the License at
9    *
10   * http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing,
13   * software distributed under the License is distributed on an
14   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15   * KIND, either express or implied. See the License for the
16   * specific language governing permissions and limitations
17   * under the License.
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  }