Skip to content

Commit 077e6fb

Browse files
authored
Extract internal utilities to separate library Laleler (#742)
1 parent 5a00a51 commit 077e6fb

47 files changed

Lines changed: 103 additions & 893 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

ayza-for-pem/src/main/java/nl/altindag/ssl/pem/decryptor/PemDecryptor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
import org.bouncycastle.openssl.PEMDecryptorProvider;
2020
import org.bouncycastle.openssl.jcajce.JcePEMDecryptorProviderBuilder;
2121

22-
import static nl.altindag.ssl.util.internal.ValidationUtils.requireNotNull;
22+
import static nl.altindag.laleler.ValidationUtils.requireNotNull;
2323

2424
/**
2525
* <strong>NOTE:</strong>

ayza-for-pem/src/main/java/nl/altindag/ssl/pem/decryptor/Pkcs8Decryptor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
import org.bouncycastle.operator.InputDecryptorProvider;
2121
import org.bouncycastle.operator.OperatorCreationException;
2222

23-
import static nl.altindag.ssl.util.internal.ValidationUtils.requireNotNull;
23+
import static nl.altindag.laleler.ValidationUtils.requireNotNull;
2424

2525
/**
2626
* <strong>NOTE:</strong>

ayza-for-pem/src/main/java/nl/altindag/ssl/pem/util/PemFormatter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
import java.util.regex.Pattern;
2525
import java.util.stream.Stream;
2626

27-
import static nl.altindag.ssl.util.internal.CollectorsUtils.toModifiableList;
27+
import static nl.altindag.laleler.CollectorsUtils.toModifiableList;
2828

2929
final class PemFormatter {
3030

ayza-for-pem/src/main/java/nl/altindag/ssl/pem/util/PemType.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525

2626
import java.util.List;
2727

28-
import static nl.altindag.ssl.util.internal.CollectionUtils.toUnmodifiableList;
28+
import static nl.altindag.laleler.CollectionUtils.toUnmodifiableList;
2929

3030
enum PemType {
3131

ayza-for-pem/src/main/java/nl/altindag/ssl/pem/util/PemUtils.java

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
*/
1616
package nl.altindag.ssl.pem.util;
1717

18+
import nl.altindag.laleler.IOUtils;
19+
import nl.altindag.laleler.ValidationUtils;
1820
import nl.altindag.ssl.SSLFactory;
1921
import nl.altindag.ssl.exception.GenericIOException;
2022
import nl.altindag.ssl.pem.decryptor.PemDecryptor;
@@ -25,8 +27,6 @@
2527
import nl.altindag.ssl.pem.exception.PublicKeyParseException;
2628
import nl.altindag.ssl.util.KeyManagerUtils;
2729
import nl.altindag.ssl.util.TrustManagerUtils;
28-
import nl.altindag.ssl.util.internal.IOUtils;
29-
import nl.altindag.ssl.util.internal.ValidationUtils;
3030
import org.bouncycastle.asn1.pkcs.PrivateKeyInfo;
3131
import org.bouncycastle.cert.X509CertificateHolder;
3232
import org.bouncycastle.cert.jcajce.JcaX509CertificateConverter;
@@ -71,10 +71,10 @@
7171

7272
import static nl.altindag.ssl.pem.util.PemType.CERTIFICATE;
7373
import static nl.altindag.ssl.pem.util.PemType.KEY;
74-
import static nl.altindag.ssl.util.internal.CollectorsUtils.toListAndThen;
75-
import static nl.altindag.ssl.util.internal.CollectorsUtils.toUnmodifiableList;
76-
import static nl.altindag.ssl.util.internal.ValidationUtils.requireNotEmpty;
77-
import static nl.altindag.ssl.util.internal.ValidationUtils.requireNotNull;
74+
import static nl.altindag.laleler.CollectorsUtils.toListAndThen;
75+
import static nl.altindag.laleler.CollectorsUtils.toUnmodifiableList;
76+
import static nl.altindag.laleler.ValidationUtils.requireNotEmpty;
77+
import static nl.altindag.laleler.ValidationUtils.requireNotNull;
7878

7979
/**
8080
* Reads PEM formatted private keys and certificates
@@ -160,7 +160,7 @@ public static List<X509Certificate> loadCertificate(String... certificatePaths)
160160
* Loads certificates from the filesystem and maps it to a list of {@link X509Certificate}
161161
*/
162162
public static List<X509Certificate> loadCertificate(Path... certificatePaths) {
163-
return loadCertificate(certificatePaths, IOUtils::getFileAsStream);
163+
return loadCertificate(certificatePaths, path -> IOUtils.getFileAsStream(path, GenericIOException::new));
164164
}
165165

166166
/**
@@ -176,7 +176,7 @@ public static List<X509Certificate> loadCertificate(InputStream... certificateSt
176176
private static <T> List<X509Certificate> loadCertificate(T[] resources, Function<T, InputStream> resourceMapper) {
177177
return Arrays.stream(resources)
178178
.map(resourceMapper)
179-
.map(IOUtils::getContent)
179+
.map(inputStream -> IOUtils.getContent(inputStream, GenericIOException::new))
180180
.map(PemUtils::parseCertificate)
181181
.flatMap(Collection::stream)
182182
.collect(toUnmodifiableList());
@@ -297,7 +297,7 @@ public static X509ExtendedKeyManager loadIdentityMaterial(Path certificateChainP
297297
* from the filesystem and maps it to an instance of {@link X509ExtendedKeyManager}
298298
*/
299299
public static X509ExtendedKeyManager loadIdentityMaterial(Path certificateChainPath, Path privateKeyPath, char[] keyPassword) {
300-
return loadIdentityMaterial(certificateChainPath, privateKeyPath, keyPassword, IOUtils::getFileAsStream);
300+
return loadIdentityMaterial(certificateChainPath, privateKeyPath, keyPassword, path -> IOUtils.getFileAsStream(path, GenericIOException::new));
301301
}
302302

303303
/**
@@ -336,7 +336,7 @@ public static X509ExtendedKeyManager loadIdentityMaterial(Path identityPath) {
336336
* from the filesystem and maps it to an instance of {@link X509ExtendedKeyManager}
337337
*/
338338
public static X509ExtendedKeyManager loadIdentityMaterial(Path identityPath, char[] keyPassword) {
339-
return loadIdentityMaterial(identityPath, keyPassword, IOUtils::getFileAsStream);
339+
return loadIdentityMaterial(identityPath, keyPassword, path -> IOUtils.getFileAsStream(path, GenericIOException::new));
340340
}
341341

342342
/**
@@ -363,8 +363,8 @@ private static <T> X509ExtendedKeyManager loadIdentityMaterial(T certificateChai
363363
try(InputStream certificateChainStream = resourceMapper.apply(certificateChain);
364364
InputStream privateKeyStream = resourceMapper.apply(privateKey)) {
365365

366-
String certificateChainContent = IOUtils.getContent(certificateChainStream);
367-
String privateKeyContent = IOUtils.getContent(privateKeyStream);
366+
String certificateChainContent = IOUtils.getContent(certificateChainStream, GenericIOException::new);
367+
String privateKeyContent = IOUtils.getContent(privateKeyStream, GenericIOException::new);
368368

369369
return parseIdentityMaterial(certificateChainContent, privateKeyContent, keyPassword);
370370
} catch (IOException exception) {
@@ -374,7 +374,7 @@ private static <T> X509ExtendedKeyManager loadIdentityMaterial(T certificateChai
374374

375375
private static <T> X509ExtendedKeyManager loadIdentityMaterial(T identity, char[] keyPassword, Function<T, InputStream> resourceMapper) {
376376
try(InputStream identityStream = resourceMapper.apply(identity)) {
377-
String identityContent = IOUtils.getContent(identityStream);
377+
String identityContent = IOUtils.getContent(identityStream, GenericIOException::new);
378378
return parseIdentityMaterial(identityContent, identityContent, keyPassword);
379379
} catch (IOException exception) {
380380
throw new GenericIOException(exception);
@@ -441,7 +441,7 @@ public static PrivateKey loadPrivateKey(Path identityPath) {
441441
* Loads the private key from the filesystem and maps it to an instance of {@link PrivateKey}
442442
*/
443443
public static PrivateKey loadPrivateKey(Path identityPath, char[] keyPassword) {
444-
return loadPrivateKey(identityPath, keyPassword, IOUtils::getFileAsStream);
444+
return loadPrivateKey(identityPath, keyPassword, path -> IOUtils.getFileAsStream(path, GenericIOException::new));
445445
}
446446

447447
/**

ayza-for-pem/src/test/java/nl/altindag/ssl/pem/util/PemUtilsShould.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,14 @@
1515
*/
1616
package nl.altindag.ssl.pem.util;
1717

18+
import nl.altindag.laleler.IOUtils;
1819
import nl.altindag.ssl.exception.GenericIOException;
1920
import nl.altindag.ssl.exception.GenericKeyStoreException;
2021
import nl.altindag.ssl.pem.exception.CertificateParseException;
2122
import nl.altindag.ssl.pem.exception.PemParseException;
2223
import nl.altindag.ssl.pem.exception.PrivateKeyParseException;
2324
import nl.altindag.ssl.pem.exception.PublicKeyParseException;
2425
import nl.altindag.ssl.util.KeyStoreUtils;
25-
import nl.altindag.ssl.util.internal.IOUtils;
2626
import org.bouncycastle.asn1.pkcs.PrivateKeyInfo;
2727
import org.bouncycastle.cert.X509CertificateHolder;
2828
import org.bouncycastle.cert.jcajce.JcaX509CertificateConverter;
@@ -55,12 +55,14 @@
5555
import java.security.cert.X509Certificate;
5656
import java.util.List;
5757
import java.util.Optional;
58+
import java.util.function.Function;
5859
import java.util.stream.Collectors;
5960

6061
import static org.assertj.core.api.Assertions.assertThat;
6162
import static org.assertj.core.api.Assertions.assertThatThrownBy;
6263
import static org.mockito.ArgumentMatchers.any;
6364
import static org.mockito.ArgumentMatchers.anyString;
65+
import static org.mockito.ArgumentMatchers.eq;
6466
import static org.mockito.Mockito.doThrow;
6567
import static org.mockito.Mockito.mock;
6668
import static org.mockito.Mockito.mockStatic;
@@ -684,7 +686,7 @@ void throwGenericIOExceptionWhenInputStreamCanNotBeClosedWhenLoadingIdentity() t
684686
String identityContent = getResourceContent(PEM_LOCATION + "encrypted-identity.pem");
685687

686688
try (MockedStatic<IOUtils> ioUtilsMockedStatic = mockStatic(IOUtils.class)) {
687-
ioUtilsMockedStatic.when(() -> IOUtils.getContent(identityStream)).thenReturn(identityContent);
689+
ioUtilsMockedStatic.when(() -> IOUtils.getContent(eq(identityStream), any(Function.class))).thenReturn(identityContent);
688690

689691
doThrow(new IOException("KABOOM!!!"))
690692
.when(identityStream)
@@ -722,8 +724,8 @@ void throwGenericIOExceptionWhenInputStreamCanNotBeClosedWhenCertificateChainAnd
722724
String privateKeyContent = getResourceContent(PEM_LOCATION + "splitted-unencrypted-identity-containing-private-key.pem");
723725

724726
try (MockedStatic<IOUtils> ioUtilsMockedStatic = mockStatic(IOUtils.class)) {
725-
ioUtilsMockedStatic.when(() -> IOUtils.getContent(certificateChainStream)).thenReturn(certificateChainContent);
726-
ioUtilsMockedStatic.when(() -> IOUtils.getContent(privateKeyStream)).thenReturn(privateKeyContent);
727+
ioUtilsMockedStatic.when(() -> IOUtils.getContent(eq(certificateChainStream), any(Function.class))).thenReturn(certificateChainContent);
728+
ioUtilsMockedStatic.when(() -> IOUtils.getContent(eq(privateKeyStream), any(Function.class))).thenReturn(privateKeyContent);
727729

728730
doThrow(new IOException("KABOOM!!!"))
729731
.when(certificateChainStream)

ayza/pom.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,10 @@
4848
<groupId>io.github.hakky54</groupId>
4949
<artifactId>sude</artifactId>
5050
</dependency>
51+
<dependency>
52+
<groupId>io.github.hakky54</groupId>
53+
<artifactId>laleler</artifactId>
54+
</dependency>
5155

5256
<dependency>
5357
<groupId>org.junit.jupiter</groupId>

ayza/src/main/java/module-info.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,13 @@
1616
module nl.altindag.ssl {
1717

1818
requires transitive nl.altindag.sude;
19+
requires transitive nl.altindag.laleler;
1920

2021
exports nl.altindag.ssl;
2122
exports nl.altindag.ssl.exception;
2223
exports nl.altindag.ssl.model;
2324
exports nl.altindag.ssl.trustmanager.trustoptions;
2425
exports nl.altindag.ssl.util;
2526
exports nl.altindag.ssl.sslcontext to java.base;
26-
exports nl.altindag.ssl.util.internal to nl.altindag.ssl.pem;
2727

2828
}

ayza/src/main/java/nl/altindag/ssl/SSLFactory.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
*/
1616
package nl.altindag.ssl;
1717

18+
import nl.altindag.laleler.StringUtils;
19+
import nl.altindag.laleler.UriUtils;
1820
import nl.altindag.ssl.exception.GenericKeyStoreException;
1921
import nl.altindag.ssl.exception.GenericSecurityException;
2022
import nl.altindag.ssl.model.HostnameVerifierParameters;
@@ -33,8 +35,6 @@
3335
import nl.altindag.ssl.util.SSLParametersUtils;
3436
import nl.altindag.ssl.util.SSLSessionUtils;
3537
import nl.altindag.ssl.util.TrustManagerUtils;
36-
import nl.altindag.ssl.util.internal.StringUtils;
37-
import nl.altindag.ssl.util.internal.UriUtils;
3838
import nl.altindag.sude.Logger;
3939
import nl.altindag.sude.LoggerFactory;
4040

@@ -77,9 +77,9 @@
7777

7878
import static java.util.Objects.isNull;
7979
import static java.util.Objects.nonNull;
80-
import static nl.altindag.ssl.util.internal.CollectorsUtils.toStringArray;
81-
import static nl.altindag.ssl.util.internal.ValidationUtils.requireNotBlank;
82-
import static nl.altindag.ssl.util.internal.ValidationUtils.requireNotEmpty;
80+
import static nl.altindag.laleler.CollectorsUtils.toStringArray;
81+
import static nl.altindag.laleler.ValidationUtils.requireNotBlank;
82+
import static nl.altindag.laleler.ValidationUtils.requireNotEmpty;
8383

8484
/**
8585
* @author Hakan Altindag

ayza/src/main/java/nl/altindag/ssl/hostnameverifier/FenixHostnameVerifier.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
*/
1717
package nl.altindag.ssl.hostnameverifier;
1818

19-
import nl.altindag.ssl.util.internal.StringUtils;
19+
import nl.altindag.laleler.StringUtils;
2020

2121
import javax.net.ssl.HostnameVerifier;
2222
import javax.net.ssl.SSLPeerUnverifiedException;

0 commit comments

Comments
 (0)