1 /*
2 * Copyright 2020 The Netty Project
3 *
4 * The Netty Project licenses this file to you under the Apache License,
5 * version 2.0 (the "License"); you may not use this file except in compliance
6 * with the License. You may obtain a copy of the License at:
7 *
8 * https://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 * License for the specific language governing permissions and limitations
14 * under the License.
15 */
16 package io.netty5.handler.ssl.util;
17
18 import java.util.ArrayList;
19 import java.util.Arrays;
20 import java.util.List;
21
22 import static io.netty5.util.internal.ObjectUtil.checkNotNullWithIAE;
23 import static java.util.Objects.requireNonNull;
24
25 /**
26 * A builder for creating {@link FingerprintTrustManagerFactory}.
27 */
28 public final class FingerprintTrustManagerFactoryBuilder {
29
30 /**
31 * A hash algorithm for fingerprints.
32 */
33 private final String algorithm;
34
35 /**
36 * A list of fingerprints.
37 */
38 private final List<String> fingerprints = new ArrayList<>();
39
40 /**
41 * Creates a builder.
42 *
43 * @param algorithm a hash algorithm
44 */
45 FingerprintTrustManagerFactoryBuilder(String algorithm) {
46 this.algorithm = requireNonNull(algorithm, "algorithm");
47 }
48
49 /**
50 * Adds fingerprints.
51 *
52 * @param fingerprints a number of fingerprints
53 * @return the same builder
54 */
55 public FingerprintTrustManagerFactoryBuilder fingerprints(CharSequence... fingerprints) {
56 return fingerprints(Arrays.asList(requireNonNull(fingerprints, "fingerprints")));
57 }
58
59 /**
60 * Adds fingerprints.
61 *
62 * @param fingerprints a number of fingerprints
63 * @return the same builder
64 */
65 public FingerprintTrustManagerFactoryBuilder fingerprints(Iterable<? extends CharSequence> fingerprints) {
66 requireNonNull(fingerprints, "fingerprints");
67 for (CharSequence fingerprint : fingerprints) {
68 checkNotNullWithIAE(fingerprint, "fingerprint");
69 this.fingerprints.add(fingerprint.toString());
70 }
71 return this;
72 }
73
74 /**
75 * Creates a {@link FingerprintTrustManagerFactory}.
76 *
77 * @return a new {@link FingerprintTrustManagerFactory}
78 */
79 public FingerprintTrustManagerFactory build() {
80 if (fingerprints.isEmpty()) {
81 throw new IllegalStateException("No fingerprints provided");
82 }
83 byte[][] fingerprints = FingerprintTrustManagerFactory.toFingerprintArray(this.fingerprints);
84 return new FingerprintTrustManagerFactory(algorithm, fingerprints);
85 }
86 }