Skip to content

Commit

Permalink
Support for adding certificate in a nested trustManager of CompositeX…
Browse files Browse the repository at this point in the history
…509ExtendedTrustManager
  • Loading branch information
Hakky54 committed Jan 12, 2024
1 parent 5c7a885 commit a6359ce
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -276,10 +276,27 @@ public static void addCertificate(X509ExtendedTrustManager trustManager, List<X5
return;
}

if (trustManager instanceof HotSwappableX509ExtendedTrustManager
&& ((HotSwappableX509ExtendedTrustManager) trustManager).getInnerTrustManager() instanceof InflatableX509ExtendedTrustManager) {
((InflatableX509ExtendedTrustManager) ((HotSwappableX509ExtendedTrustManager) trustManager)
.getInnerTrustManager()).addCertificates(certificates);
if (trustManager instanceof HotSwappableX509ExtendedTrustManager) {
if (((HotSwappableX509ExtendedTrustManager) trustManager).getInnerTrustManager() instanceof InflatableX509ExtendedTrustManager) {
((InflatableX509ExtendedTrustManager) ((HotSwappableX509ExtendedTrustManager) trustManager)
.getInnerTrustManager()).addCertificates(certificates);
return;
}

if (((HotSwappableX509ExtendedTrustManager) trustManager).getInnerTrustManager() instanceof CompositeX509ExtendedTrustManager) {
List<X509ExtendedTrustManager> innerTrustManagers = ((CompositeX509ExtendedTrustManager) ((HotSwappableX509ExtendedTrustManager) trustManager)
.getInnerTrustManager()).getInnerTrustManagers();

Optional<InflatableX509ExtendedTrustManager> inflatableX509ExtendedTrustManager = innerTrustManagers.stream()
.filter(InflatableX509ExtendedTrustManager.class::isInstance)
.map(InflatableX509ExtendedTrustManager.class::cast)
.findFirst();

if (inflatableX509ExtendedTrustManager.isPresent()) {
inflatableX509ExtendedTrustManager.get().addCertificates(certificates);
return;
}
}
return;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -671,6 +671,22 @@ void addCertificateToInflatableX509ExtendedTrustManagerEvenThoughItIsWrappedInAH
verify(inflatableX509ExtendedTrustManager, times(1)).addCertificates(certificates);
}

@Test
void addCertificateToInflatableX509ExtendedTrustManagerEvenThoughItIsWrappedInAHotSwappableX509ExtendedTrustManagerWhichIsWrappedIntoACompositeX509ExtendedTrustManager() {
X509Certificate certificate = mock(X509Certificate.class);
List<X509Certificate> certificates = Collections.singletonList(certificate);

InflatableX509ExtendedTrustManager inflatableX509ExtendedTrustManager = mock(InflatableX509ExtendedTrustManager.class);
X509ExtendedTrustManager jdkTrustManager = TrustManagerUtils.createTrustManagerWithJdkTrustedCertificates();
X509ExtendedTrustManager combinedTrustManager = TrustManagerUtils.combine(inflatableX509ExtendedTrustManager, jdkTrustManager);
HotSwappableX509ExtendedTrustManager hotSwappableX509ExtendedTrustManager = (HotSwappableX509ExtendedTrustManager) TrustManagerUtils.createSwappableTrustManager(combinedTrustManager);
// when(hotSwappableX509ExtendedTrustManager.getInnerTrustManager()).thenReturn(combinedTrustManager);

TrustManagerUtils.addCertificate(hotSwappableX509ExtendedTrustManager, certificates);

verify(inflatableX509ExtendedTrustManager, times(1)).addCertificates(certificates);
}

@Test
void addCertificateToInflatableX509ExtendedTrustManagerEvenThoughItIsWrappedInACompositeX509ExtendedTrustManager() {
X509Certificate certificate = mock(X509Certificate.class);
Expand Down

0 comments on commit a6359ce

Please sign in to comment.