View Javadoc
1   /*
2    * The contents of this file are subject to the terms of the Common Development and
3    * Distribution License (the License). You may not use this file except in compliance with the
4    * License.
5    *
6    * You can obtain a copy of the License at legal/CDDLv1.0.txt. See the License for the
7    * specific language governing permission and limitations under the License.
8    *
9    * When distributing Covered Software, include this CDDL Header Notice in each file and include
10   * the License file at legal/CDDLv1.0.txt. If applicable, add the following below the CDDL
11   * Header, with the fields enclosed by brackets [] replaced by your own identifying
12   * information: "Portions copyright [year] [name of copyright owner]".
13   *
14   * Copyright 2013-2016 ForgeRock AS.
15   */
16  
17  package org.forgerock.json.jose.builders;
18  
19  import org.forgerock.json.jose.jwe.CompressionAlgorithm;
20  import org.forgerock.json.jose.jwe.EncryptionMethod;
21  import org.forgerock.json.jose.jwe.JweHeader;
22  import org.forgerock.json.jose.jwt.JwtHeader;
23  
24  /**
25   * An implementation of a JWE Header builder that provides a fluent builder pattern to create JWE headers.
26   * <p>
27   * See {@link JweHeader} for information on the JweHeader object that this builder creates.
28   *
29   * @since 2.0.0
30   * @param <B> the concrete JWT builder type that headers are being built for.
31   */
32  public class JweHeaderBuilder<B extends EncryptedJwtBuilder> extends JwtSecureHeaderBuilder<B, JweHeaderBuilder<B>> {
33  
34      /**
35       * Constructs a new JweHeaderBuilder, parented by the given JwtBuilder.
36       *
37       * @param jwtBuilder The JwtBuilder instance that this JweHeaderBuilder is a child of.
38       */
39      public JweHeaderBuilder(B jwtBuilder) {
40          super(jwtBuilder);
41      }
42  
43      /**
44       * Sets the Encryption Method header parameter for this JWE.
45       * <p>
46       * @see org.forgerock.json.jose.jwe.JweHeader#setEncryptionMethod(org.forgerock.json.jose.jwe.EncryptionMethod)
47       *
48       * @param enc The Encryption Method.
49       * @return This JweHeaderBuilder.
50       */
51      public JweHeaderBuilder<B> enc(EncryptionMethod enc) {
52          header("enc", enc.toString());
53          return this;
54      }
55  
56      /**
57       * Sets the Ephemeral Public Key header parameter for this JWE.
58       * <p>
59       * @see org.forgerock.json.jose.jwe.JweHeader#setEphemeralPublicKey(org.forgerock.json.jose.jwk.JWK)
60       *
61       * @param epk The Ephemeral Public Key.
62       * @return This JweHeaderBuilder.
63       */
64      public JweHeaderBuilder<B> epk(String epk) {
65          header("epk", epk);
66          return this;
67      }
68  
69      // Overridden purely to preserve type compatibility with older version
70      @Override
71      public JweHeaderBuilder<B> zip(CompressionAlgorithm zip) {
72          return super.zip(zip);
73      }
74  
75      /**
76       * Sets the Agreement PartyUInfo header parameter for this JWE.
77       * <p>
78       * @see org.forgerock.json.jose.jwe.JweHeader#setAgreementPartyUInfo(String)
79       *
80       * @param apu The Agreement PartyUInfo.
81       * @return This JweHeaderBuilder.
82       */
83      public JweHeaderBuilder<B> apu(String apu) {
84          header("apu", apu);
85          return this;
86      }
87  
88      /**
89       * Creates a JweHeader instance from the header parameters set in this builder.
90       *
91       * @return A JweHeader instance.
92       */
93      @Override
94      protected JwtHeader build() {
95          return new JweHeader(getHeaders());
96      }
97  }